/usr/share/amsn/plugins/games/Sketch.tcl is in amsn-data 0.98.9-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 | #############################################################################
# ::Games::Sketch #
# ======================================================================== #
# Original author: JeeBee <jonne_z REM0VEatTH1S users.sourceforge.net> #
# Contributors: #
# - Thanks to Bernd Breitenbach for letting me use his code that #
# implements the Hourglass (see bottom part of this file). #
#############################################################################
# FIXME: support for automatically saving all drawings before
# clear canvas
# FIXME: Increase precision !!
# FIXME: Sketch: change statusbar into
# "Some player(s) have guessed the word correctly (displayed in green)."
# FIXME: When drawing while violate is clicked, drawing is still send when
# mouse is released later.
namespace eval ::Games::Sketch {
variable HourGlass
variable GameState
variable Dict
# Tolerance used for simplifying polylines
variable eps 3
variable eps2 9
variable bkg_color "peach puff"
variable err_bkg_color "firebrick3"
variable eraser 0
# Set round time (in seconds)
set HourGlass(time_to_go) 180
# Defaults for challenges
variable __language "en"
variable __languages
variable __win_name
###########################################################################
# config_array #
# ======================================================================= #
# Return variables with default values that we want to store #
###########################################################################
proc config_array {} {
return ""
}
###########################################################################
# build_config #
# ======================================================================= #
# Pack configuration items into pane. #
# Return 0 if you don't want a pane for this game. #
###########################################################################
proc build_config { pane } {
return 0
}
proc init_game { gameID host } {
variable GameState
set GameState($gameID,host) $host
set challenge [game_configuration $gameID]
return $challenge
}
proc set_init_game { gameID host game_init } {
variable GameState
set GameState($gameID,host) $host
foreach rec [split $game_init ","] {
foreach {key value} [split $rec "="] {
switch -exact $key {
"LANG" { set GameState($gameID,lang) $value }
}
}
}
}
proc quit {gameID} {
variable GameState
# Cancel possibly running hourglass
if {$GameState($gameID,hg_animate) != ""} {
after cancel $GameState($gameID,hg_animate)
}
::Games::SendQuit $gameID
destroy .$GameState($gameID,win_name)
}
proc start_game { gameID } {
variable GameState
variable bkg_color
set win_name [string map {"." "" ":" ""} $gameID]
array set GameState [list \
"$gameID,round" -1 \
"$gameID,scoredround" [list] \
"$gameID,violations" [list] \
"$gameID,old_x" 0 \
"$gameID,old_y" 0 \
"$gameID,sx" 0 \
"$gameID,sy" 0 \
"$gameID,current_color" "sienna" \
"$gameID,current_pen" 4 \
"$gameID,drawing" 0 \
"$gameID,point_list" {} \
"$gameID,spoint_list" {} \
"$gameID,widget_list" {} \
"$gameID,win_name" $win_name ]
toplevel .$win_name
wm protocol .$win_name WM_DELETE_WINDOW "::Games::Sketch::quit $gameID"
wm title .$win_name "[::Games::trans Sketch]"
# The canvas
canvas .$win_name.canvas -relief sunken -background $bkg_color \
-width 450 -height 400
# Time
labelframe .$win_name.time -text "[::Games::trans Time]"
hourglass $gameID .$win_name.time.sandglass
grid .$win_name.time.sandglass -in .$win_name.time
# Wrong guesses of other players
labelframe .$win_name.wrongguesses -text "[::Games::trans wrong_guesses]"
for {set i 0} {$i < 10} {incr i} {
label .$win_name.wrongguesses.l$i -text ""
pack .$win_name.wrongguesses.l$i -in .$win_name.wrongguesses -anchor w
}
# Player list
labelframe .$win_name.players -text "[::Games::trans players]"
# Placekeeper to be filled with either draw options or guesses
frame .$win_name.uc
# Draw options
labelframe .$win_name.uc.sk -text "[::Games::trans sketch_tools]"
button .$win_name.uc.sk.selcolor -text "[::Games::trans Color]" \
-background $GameState($gameID,current_color) \
-command "::Games::Sketch::chooseColor $gameID .$win_name.uc.sk.selcolor"
checkbutton .$win_name.uc.sk.eraser -text "[::Games::trans Eraser]" \
-variable ::Games::Sketch::eraser
scale .$win_name.uc.sk.pensize -digit 1 -from 1 -to 41 -tickinterval 10 \
-orient h -variable ::Games::Sketch::GameState($gameID,current_pen)
button .$win_name.uc.sk.clear -text "[::Games::trans Clear]" \
-command "::Games::Sketch::clearButton $gameID"
button .$win_name.uc.sk.skip -text "[::Games::trans Skip]" \
-command "::Games::Sketch::skipButton $gameID"
button .$win_name.uc.sk.btnsave1 -text "[::Games::trans Save]" \
-command "::Games::Sketch::save_canvas $gameID"
pack .$win_name.uc.sk.selcolor .$win_name.uc.sk.eraser .$win_name.uc.sk.pensize \
.$win_name.uc.sk.clear .$win_name.uc.sk.skip \
.$win_name.uc.sk.btnsave1 -in .$win_name.uc.sk -side left -padx 20
# Guesses
labelframe .$win_name.uc.gr -text "[::Games::trans make_guesses]"
entry .$win_name.uc.gr.guess
bind .$win_name.uc.gr.guess <Return> ".$win_name.uc.gr.sendguess invoke"
button .$win_name.uc.gr.sendguess -text "[::Games::trans Send]" \
-command "::Games::Sketch::sendGuess $gameID .$win_name.uc.gr.guess"
button .$win_name.uc.gr.violates -text "[::Games::trans Violation]" \
-command "::Games::Sketch::violateButton $gameID"
button .$win_name.uc.gr.btnsave2 -text "[::Games::trans Save]" \
-command "::Games::Sketch::save_canvas $gameID"
pack .$win_name.uc.gr.guess .$win_name.uc.gr.sendguess .$win_name.uc.gr.violates \
.$win_name.uc.gr.btnsave2 -in .$win_name.uc.gr -side left -padx 20
# Status
labelframe .$win_name.status -text "[::Games::trans status]"
label .$win_name.status.lbl -text "[::Games::trans wait_for_host]" -anchor w
pack .$win_name.status.lbl -in .$win_name.status -fill both -expand 1
# And a start button for the host only
if {$GameState($gameID,host) == [::config::getKey login]} {
.$win_name.status.lbl configure -text "[::Games::trans wait_for_players]"
button .$win_name.start -text "[::Games::trans Start]" \
-command "::Games::Sketch::start_now $gameID"
pack .$win_name.start -in .$win_name.status -side right
}
grid .$win_name.time -sticky news
grid .$win_name.canvas -row 0 -column 1
grid .$win_name.wrongguesses -row 0 -column 2 -sticky news
grid ^ ^ .$win_name.players -sticky news
grid .$win_name.uc - - -sticky news
grid .$win_name.status - - -sticky news
grid rowconfigure .$win_name {1 2 3} -weight 1
grid columnconfigure .$win_name {0 2} -weight 1
# Set initial width (wider for players list, higher for usercontrols)
::Games::moveinscreen .$win_name
# Check if players were already added before game start
if {[info exists GameState($gameID,addplayers)]} {
foreach {player score} $GameState($gameID,addplayers) {
update_scores $gameID $player $score
}
}
}
# 'player' says the drawer violates drawing rules
proc addViolation {gameID player} {
variable GameState
if {$GameState($gameID,host) == [::config::getKey login]} {
# We are the host, player says drawer violated drawing rules
if {[lsearch -exact $GameState($gameID,violations) $player] == -1} {
lappend GameState($gameID,violations) $player
# Check whether this ends the current round
set cnt_v [llength $GameState($gameID,violations)]
set cnt_p [llength $GameState($gameID,players)]
if {$cnt_v >= [expr {($cnt_p + 1)/2}]} {
# Majority of guessers clicked Violate button.
# Skipping round, no points for the drawer this round.
set GameState($gameID,scoredround) [list]
skipButton $gameID
}
}
}
}
proc violateButton {gameID} {
variable GameState
addViolation $gameID [::config::getKey login]
::Games::SendMove $gameID "VIOLATE=[::config::getKey login]"
}
proc save_canvas {gameID} {
variable GameState
set win_name $GameState($gameID,win_name)
# Ask user where to save the photo
set filename [chooseFileDialog "" "[::Games::trans save_drawing]" .$win_name "" save \
[list [list "EPS" [list *.eps *.EPS]] [list [trans allfiles] *]]]
# Save Encapsulated Postscript
if {"$filename" != ""} {
::Games::log "Saving canvas to $filename for game $gameID"
catch { .$win_name.canvas postscript -file $filename }
}
}
proc loadDictionary {langKey} {
variable Dict
# Check if global dictionary already read.
if {![info exists Dict($langKey)] || \
[llength $Dict($langKey)] == 0} {
# Save plugin's lang
array set plugin_lang [array get ::Games::lang]
array unset ::Games::lang
set Dict($langKey) [list]
set langDir [file join $::Games::dir "lang"]
::Games::load_lang $langKey $langDir
foreach {name value} [array get ::Games::lang] {
if {[string first "word_" $name] == 0 &&
[string is digit [string range $name 5 end]]} {
lappend Dict($langKey) $value
}
}
::Games::log "Sketch dictionary for $langKey read, \
contains [llength $Dict($langKey)] words."
# Restore plugin's lang
array unset ::Games::lang
array set ::Games::lang [array get plugin_lang]
}
return [llength $Dict($langKey)]
}
proc select_word {gameID} {
variable GameState
variable Dict
set word_cnt [loadDictionary $GameState($gameID,lang)]
if {$word_cnt > 0} {
# Select a word at random
set r [myRand 0 [expr {$word_cnt-1}]]
set GameState($gameID,word) [lindex $Dict($GameState($gameID,lang)) $r]
} else {
::Games::log "Update your language files for the Sketch dictionary! \
(it is empty for the language that your are using in game ${gameID})"
set GameState($gameID,word) "error, my, dictionary, is, empty"
}
}
# Next drawer is set to $r here. However, if that player left the game
# we keep increasing
proc select_next_drawer {gameID r} {
variable GameState
set win_name $GameState($gameID,win_name)
set next [expr {$r % [llength $GameState($gameID,players)]}]
set nextp [lindex $GameState($gameID,players) $next]
set stop $next
# Check whether player is still in players
while {[lsearch -exact $GameState($gameID,players) $nextp] == -1} {
set next [expr {($next + 1) % [llength $GameState($gameID,players)]}]
set nextp [lindex $GameState($gameID,players) $next]
if {$stop == $next} {
# Everybody left???
break
}
}
# Give the drawer 10 points for drawing
set nexts [lsearch -exact $GameState($gameID,scores) $nextp]
set score [lindex $GameState($gameID,scores) [expr {$nexts+1}]]
set new_score [expr {$score + 10}]
::Games::SendMove $gameID "PLAYER=$nextp,SCORE=$new_score"
update_scores $gameID $nextp $new_score
# Clearing the canvas for the next round
clearButton $gameID
set GameState($gameID,draweridx) $next
set GameState($gameID,drawer) $nextp
}
proc reset_player_colors {gameID} {
variable GameState
set win_name $GameState($gameID,win_name)
set i 0
while {[winfo exists .$win_name.player$i]} {
set pcol [.$win_name.player$i cget -foreground]
if {$pcol != "gray"} {
.$win_name.player$i configure -foreground black
}
incr i ; incr i
}
}
proc start_now {gameID} {
variable GameState
incr GameState($gameID,round)
set GameState($gameID,credit) 10
set GameState($gameID,scoredround) [list]
set GameState($gameID,violations) [list]
set round $GameState($gameID,round)
set win_name $GameState($gameID,win_name)
if {![winfo exists .$win_name]} {
# We closed the window already, so bye bye
return
}
reset_player_colors $gameID
if { $GameState($gameID,round) == 0 && \
$GameState($gameID,host) == [::config::getKey login] } {
set r [myRand 0 [expr {[llength $GameState($gameID,players)]-1}]]
select_next_drawer $gameID $r
::Games::SendMove $gameID "DRAWER=$GameState($gameID,drawer)"
pack forget .$win_name.start
} elseif {$GameState($gameID,host) == [::config::getKey login]} {
select_next_drawer $gameID [expr {$GameState($gameID,draweridx) + 1}]
::Games::SendMove $gameID "DRAWER=$GameState($gameID,drawer)"
}
if {$GameState($gameID,drawer) == [::config::getKey login]} {
select_word $gameID
catch { pack forget .$win_name.uc.gr }
pack .$win_name.uc.sk -in .$win_name.uc -fill both -expand 1
bind .$win_name.canvas <ButtonPress> "::Games::Sketch::ButtonPress $gameID %x.0 %y.0"
bind .$win_name.canvas <ButtonRelease> "::Games::Sketch::ButtonRelease $gameID %x.0 %y.0"
bind .$win_name.canvas <Motion> "::Games::Sketch::MouseMotion $gameID %x.0 %y.0"
bind .$win_name.canvas <Leave> "::Games::Sketch::MouseLeave $gameID %x.0 %y.0"
.$win_name.status.lbl configure -text \
"[::Games::trans Round] ${round}: [::Games::trans you_draw $GameState($gameID,word)]"
} else {
catch { pack forget .$win_name.uc.sk }
pack .$win_name.uc.gr -in .$win_name.uc -fill both -expand 1
set GameState($gameID,drawing) 0
bind .$win_name.canvas <ButtonPress> ""
bind .$win_name.canvas <ButtonRelease> ""
bind .$win_name.canvas <Motion> ""
bind .$win_name.canvas <Leave> ""
.$win_name.status.lbl configure -text \
"[::Games::trans Round] ${round}: [::Games::trans you_guess $GameState($gameID,lang)]"
}
# Hourglass will be restarted when drawer starts drawing
stop_hour_glass $gameID .$win_name.time.sandglass
set GameState($gameID,hg_running) 0
}
proc opponent_moves { gameID sender move } {
variable GameState
# Could be we left already, then our window does not exist anymore
set win_name $GameState($gameID,win_name)
if {![winfo exists .$win_name]} {
return
}
#::Games::log "Received from $sender : $move"
foreach rec [split $move ","] {
foreach {key value} [split $rec "="] {
switch -exact $key {
"PEN" {set opponent_pen $value}
"COLOR" {set opponent_color $value}
"COORDS" { if {$GameState($gameID,hg_running) == 0} {
start_hour_glass $gameID .$win_name.time.sandglass
set GameState($gameID,hg_running) 1
}
.$GameState($gameID,win_name).canvas create line $value \
-smooth bezier -fill $opponent_color -width $opponent_pen
}
"CLEAR" {clearCanvas $gameID}
"DRAWER" {set GameState($gameID,drawer) $value
start_now $gameID}
"GUESS" {processGuess $gameID $sender $value}
"PLAYER" {set player $value ; set sol ""}
"SOL" {set sol $value}
"SCORE" {update_scores $gameID $player $value $sol}
"WRONG" {add_wrong_guess $gameID $value}
"SKIPPED" {roundSkipped $gameID}
"VIOLATE" {addViolation $gameID $sender}
}
}
}
}
proc guessOK {gameID guess word} {
set s1 [string map {" " ""} $guess]
set s1 [string tolower $s1]
set s2 [string map {" " ""} $word]
set s2 [string tolower $s2]
# FIXME: Does Tcl has something as sounds_like?
# FIXME: Is it ok if 95% of the chars match?
if {$s1 == $s2} {
return 1
} else {
return 0
}
}
proc add_wrong_guess {gameID wrong} {
variable GameState
set win_name $GameState($gameID,win_name)
# Move all wrong guesses one up
for {set i 0} {$i < 9} {incr i} {
set j [expr {$i+1}]
set jlbl [.$win_name.wrongguesses.l$j cget -text]
.$win_name.wrongguesses.l$i configure -text "$jlbl"
}
# Put current wrong guess at the bottom
.$win_name.wrongguesses.l9 configure -text "$wrong"
}
proc processGuess {gameID sender guess} {
variable GameState
set state 0
if {$GameState($gameID,drawer) == [::config::getKey login]} {
if {[lsearch -exact $GameState($gameID,scoredround) $sender] > -1} {
# sender already scored in this round, ignore its guesses
return
}
foreach word [split $GameState($gameID,word) ","] {
if {[guessOK $gameID $guess $word]} {
set state 1
break
}
}
if {$state} {
foreach {player score} $GameState($gameID,scores) {
if {$player == $sender} {
set score [expr {$score + $GameState($gameID,credit)}]
set GameState($gameID,credit) [expr \
{($GameState($gameID,credit) + 1) / 2}]
set sol [string map {{,} {}} $GameState($gameID,word)]
::Games::SendMove $gameID "PLAYER=$player,SOL=$sol,SCORE=$score"
update_scores $gameID $sender $score $sol
break;
}
}
} else {
# Wrong guess, notify everyone
::Games::SendMove $gameID "WRONG=$guess"
add_wrong_guess $gameID $guess
}
}
}
proc add_player { gameID player } {
variable GameState
if {[info exists GameState($gameID,win_name)]} {
update_scores $gameID $player -1
} elseif {[info exists GameState($gameID,addplayers)]} {
set GameState($gameID,addplayers) \
[concat $GameState($gameID,addplayers) [list $player -1]]
} else {
set GameState($gameID,addplayers) [list $player -1]
}
}
proc update_scores { gameID player score {sol ""}} {
variable GameState
set win_name $GameState($gameID,win_name)
set nick [::Games::getNick $player]
set scores {}
if {[info exists GameState($gameID,scores)]} {
set scores $GameState($gameID,scores)
set players $GameState($gameID,players)
}
if { [::config::getKey login] == $player && "$sol" != "" } {
.$win_name.status.lbl configure -text \
"[::Games::trans correct_guess $sol]"
}
if {"$sol" != ""} {
lappend GameState($gameID,scoredround) $player
}
set i 0
set found 0
foreach {p s} $scores {
if {$p == $player} {
set found 1
if {$score > -1} {
.$win_name.player$i configure -text "$nick ([::Games::trans points $score])."
.$win_name.player$i configure -foreground "dark green"
set scores [lreplace $scores $i [expr {$i+1}] $player $score]
break
}
}
incr i ; incr i
}
if {!$found} {
if {$score == -1} {set score 0}
label .$win_name.player$i -text "$nick ([::Games::trans points $score])."
pack .$win_name.player$i -in .$win_name.players -anchor w
lappend scores $player $score
lappend players $player
}
# Sort players by decreasing score
for { set i 0 } { $i < [llength $scores] } { incr i ; incr i } {
set chat_i [lindex $scores $i]
set score_i [lindex $scores [expr {$i+1}]]
for { set j [expr {$i+2}] } { $j < [llength $scores] } { incr j ; incr j } {
set chat_j [lindex $scores $j]
set score_j [lindex $scores [expr {$j+1}]]
if {$score_j > $score_i} {
# Swap i and j in $scores
set scores [lreplace $scores $i [expr {$i+1}] $chat_j $score_j]
set scores [lreplace $scores $j [expr {$j+1}] $chat_i $score_i]
# Swap i and j in player list
set fg_i [.$win_name.player$i cget -foreground]
set fg_j [.$win_name.player$j cget -foreground]
.$win_name.player$i configure \
-text "[::Games::getNick $chat_j] ([::Games::trans points $score_j])."
.$win_name.player$i configure -foreground $fg_j
.$win_name.player$j configure \
-text "[::Games::getNick $chat_i] ([::Games::trans points $score_i])."
.$win_name.player$j configure -foreground $fg_i
}
}
}
set GameState($gameID,scores) $scores
set GameState($gameID,players) $players
}
proc opponent_quits { gameID chatid } {
variable GameState
set win_name $GameState($gameID,win_name)
if {![winfo exists .$win_name]} {
# We quitted first, lalala
return;
}
# Gray out label of the player that left.
set i 0
foreach {p s} $GameState($gameID,scores) {
if {$p == $chatid} {
.$win_name.player$i configure -foreground gray
break
}
incr i ; incr i
}
# Remove this player from players
set pi [lsearch -exact $GameState($gameID,players) $chatid]
if {$pi != -1} {
set GameState($gameID,players) \
[lreplace $GameState($gameID,players) $pi $pi]
}
}
proc time_elapsed {gameID} {
variable GameState
if {$GameState($gameID,host) == [::config::getKey login]} {
roundSkipped $gameID
}
}
proc sendGuess {gameID entry} {
variable GameState
set guess [$entry get]
$entry delete 0 end
if {$GameState($gameID,drawer) != [::config::getKey login]} {
# FIXME: Verify that we are not sending illegal characters that will
# not arrive. Must work for different languages as well! This tag is
# related to the one about protecting against injected code!
set guess [string map {{,} {} {[} {} {]} {} {$} {} {=} {}} $guess]
::Games::SendMove $gameID "GUESS=$guess"
}
}
proc chooseColor {gameID widget} {
variable GameState
set new_color [tk_chooseColor -title "[::Games::trans choose_bkgcol]" \
-parent .$GameState($gameID,win_name)]
if {"$new_color" != ""} {
set GameState($gameID,current_color) $new_color
}
$widget configure -background $GameState($gameID,current_color)
}
proc clearButton {gameID} {
::Games::SendMove $gameID "CLEAR=ALL"
clearCanvas $gameID
}
# Skip current round
proc roundSkipped {gameID} {
variable GameState
if {$GameState($gameID,host) == [::config::getKey login]} {
# We are the host
if {[llength $GameState($gameID,scoredround)] == 0} {
# Nobody guessed correctly this round
# Subtract 10 points from the drawer!
set idx [lsearch -exact $GameState($gameID,scores) $GameState($gameID,drawer)]
set score [lindex $GameState($gameID,scores) [expr {$idx+1}]]
set new_score [expr {$score - 10}]
set player $GameState($gameID,drawer)
update_scores $gameID $player $new_score
::Games::SendMove $gameID "PLAYER=$player,SCORE=$new_score"
}
start_now $gameID
}
}
# Drawer pressed the Skip button
# Also invoked due to violation
proc skipButton {gameID} {
variable GameState
if {$GameState($gameID,host) == [::config::getKey login]} {
roundSkipped $gameID
} else {
::Games::SendMove $gameID "SKIPPED=1"
}
}
proc clearCanvas {gameID} {
variable GameState
.$GameState($gameID,win_name).canvas delete all
}
proc MouseMotion {gameID x y} {
variable GameState
variable eps2
variable eraser
if {$eraser} {
set the_color $::Games::Sketch::bkg_color
} else {
set the_color $GameState($gameID,current_color)
}
if {$GameState($gameID,drawing) && $GameState($gameID,old_x) != -1} {
lappend GameState($gameID,widget_list) \
[.$GameState($gameID,win_name).canvas create line \
$GameState($gameID,old_x) $GameState($gameID,old_y) $x $y \
-fill $the_color -width $GameState($gameID,current_pen)]
# Vertex reduction:
# only add point_list if it's $eps away from sx,sy
if {[expr {($GameState($gameID,sx)-$x)*($GameState($gameID,sx)-$x) + \
($GameState($gameID,sy)-$y)*($GameState($gameID,sy)-$y) >= $eps2}]} {
lappend GameState($gameID,point_list) $x $y
set GameState($gameID,sx) $x
set GameState($gameID,sy) $y
}
}
set GameState($gameID,old_x) $x
set GameState($gameID,old_y) $y
}
proc MouseLeave {gameID x y} {
# Stop drawing by pretending a ButtonRelease
ButtonRelease $gameID $x $y
}
proc ButtonPress {gameID x y} {
variable GameState
array set GameState [list \
"$gameID,drawing" 1 \
"$gameID,old_x" $x \
"$gameID,old_y" $y \
"$gameID,sx" $x \
"$gameID,sy" $y \
"$gameID,point_list" [list $x $y] \
"$gameID,widget_list" {} ]
}
proc ButtonRelease {gameID x y} {
variable GameState
variable eraser
if {$GameState($gameID,drawing)} {
set win_name $GameState($gameID,win_name)
set GameState($gameID,drawing) 0
lappend GameState($gameID,point_list) $x $y
# Simplify polyline
simplify_polyline $gameID
# Fixing a small problem that single points don't seem to get drawn
if {[llength $GameState($gameID,spoint_list)] == 4 && \
[lindex $GameState($gameID,spoint_list) 0] == \
[lindex $GameState($gameID,spoint_list) 2] && \
[lindex $GameState($gameID,spoint_list) 1] == \
[lindex $GameState($gameID,spoint_list) 3] } {
set GameState($gameID,spoint_list) \
[lreplace $GameState($gameID,spoint_list) 0 0 \
[expr {[lindex $GameState($gameID,spoint_list) 0] + 1}]]
}
# Remove current drawing in widget_list
foreach w $GameState($gameID,widget_list) {
.$win_name.canvas delete $w
}
if {$eraser} {
set the_color $::Games::Sketch::bkg_color
} else {
set the_color $GameState($gameID,current_color)
}
if {[llength $GameState($gameID,point_list)] >= 4} {
# Draw squared spline approximation after Vertex Reduction
#.$win_name.canvas create line $GameState($gameID,point_list) \
# -smooth bezier -fill $the_color -width $GameState($gameID,current_pen)
# Draw squared spline approximation after Douglas-Peucker algorithm
.$win_name.canvas create line $GameState($gameID,spoint_list) \
-smooth bezier -fill $the_color -width $GameState($gameID,current_pen)
}
# Send to other players
set info "PEN=$GameState($gameID,current_pen)"
set info "${info},COLOR=$the_color"
if {$GameState($gameID,hg_running) == 0} {
start_hour_glass $gameID .$win_name.time.sandglass
set GameState($gameID,hg_running) 1
}
::Games::SendMove $gameID "${info},COORDS=$GameState($gameID,spoint_list)"
}
}
# Simplifies the polyline in list point_list
proc simplify_polyline {gameID} {
variable GameState
set GameState($gameID,spoint_list) {}
set N [llength $GameState($gameID,point_list)]
set pstart_x [lindex $GameState($gameID,point_list) 0]
set pstart_y [lindex $GameState($gameID,point_list) 1]
set pend_x [lindex $GameState($gameID,point_list) [expr {$N-2}]]
set pend_y [lindex $GameState($gameID,point_list) [expr {$N-1}]]
if {$N >= 4} {
set spoint_list_dot0 [concat \
[list $pstart_x $pstart_y] \
[DPsimplify $gameID 0 [expr {$N-2}]] \
[list $pend_x $pend_y]]
}
foreach c $spoint_list_dot0 {
# Strip useless .0 now
set c [string range $c 0 [expr {[string length $c] - 3}]]
lappend GameState($gameID,spoint_list) $c
}
}
# Douglas-Peucker recursive simplification routine
# Returns list of new points
proc DPsimplify {gameID pstart pend} {
variable GameState
# eps2 is the tolerance eps squared
variable eps2
set pstart_x [lindex $GameState($gameID,point_list) $pstart]
set pstart_y [lindex $GameState($gameID,point_list) [expr {$pstart+1}]]
set pend_x [lindex $GameState($gameID,point_list) $pend]
set pend_y [lindex $GameState($gameID,point_list) [expr {$pend+1}]]
set u_x [expr {$pend_x - $pstart_x}]
set u_y [expr {$pend_y - $pstart_y}]
set cu [expr {$u_x * $u_x + $u_y * $u_y}]
# maxi is the point farthest from line pstart - pend
set maxi [expr {$pstart+2}]
# maxd2 is distance squared from maxi to line pstart - pend
set maxd2 0
for {set i $maxi} {$i < $pend} {incr i ; incr i} {
# Compute distance from i to line
set i_x [lindex $GameState($gameID,point_list) $i]
set i_y [lindex $GameState($gameID,point_list) [expr {$i+1}]]
set w_x [expr {$i_x - $pstart_x}]
set w_y [expr {$i_y - $pstart_y}]
set cw [expr {$w_x * $u_x + $w_y * $u_y}]
if { $cw <= 0 } {
set dv2 [expr {($i_x - $pstart_x) * ($i_x - $pstart_x) + \
($i_y - $pstart_y) * ($i_y - $pstart_y)}]
} elseif { $cu <= $cw } {
set dv2 [expr {($i_x - $pend_x) * ($i_x - $pend_x) + \
($i_y - $pend_y) * ($i_y - $pend_y)}]
} else {
set b [expr {$cw / $cu}]
set pb_x [expr {$pstart_x + $b * $u_x}]
set pb_y [expr {$pstart_y + $b * $u_y}]
set dv2 [expr {($i_x - $pb_x) * ($i_x - $pb_x) + \
($i_y - $pb_y) * ($i_y - $pb_y)}]
}
# Test if i is farthest from line pstart - pend
if {$dv2 > $maxd2} {
set maxi $i
set maxd2 $dv2
}
}
# Check whether error is worse than eps2
if { $maxd2 > $eps2 } {
# Do recursion
set maxi_x [lindex $GameState($gameID,point_list) $maxi]
set maxi_y [lindex $GameState($gameID,point_list) [expr {$maxi+1}]]
set result [concat \
[DPsimplify $gameID $pstart $maxi] \
[list $maxi_x $maxi_y] \
[DPsimplify $gameID $maxi $pend]]
} else {
# Ignoring all points in between
set result {}
}
return $result
}
# =================================================
# game_configuration
# -------------------------------------------------
# Specify game configuration
# =================================================
proc game_configuration { gameID } {
variable GameState
variable __language
variable __languages
variable __win_name
set win_name [string map {"." "" ":" ""} $gameID]
set __win_name $win_name
# Load languages (do this first, don't want a window yet if sourceforge is slow)
set languages [list]
::lang::LoadOnlineVersions
toplevel .${win_name}_gc
wm title .${win_name}_gc "[::Games::trans select_language]"
wm protocol .${win_name}_gc WM_DELETE_WINDOW ".${win_name}_gc.cancel invoke"
# Process languages
foreach langcode $::lang::Lang {
set name [::lang::ReadLang $langcode name]
lappend languages [list "$name" "$langcode"]
}
set languages [lsort -index 0 -dictionary $languages]
set __languages $languages
# Language listbox
frame .${win_name}_gc.langfrm
listbox .${win_name}_gc.langfrm.items -yscrollcommand ".${win_name}_gc.langfrm.ys set" \
-font splainf -background white -relief flat -highlightthickness 0 -width 60
scrollbar .${win_name}_gc.langfrm.ys -command ".${win_name}_gc.langfrm.items yview" \
-highlightthickness 0 -borderwidth 1 -elementborderwidth 1
pack .${win_name}_gc.langfrm.ys -in .${win_name}_gc.langfrm -side right -fill y
pack .${win_name}_gc.langfrm.items -in .${win_name}_gc.langfrm -side left -expand true -fill both
set default_lang -1
for { set i 0 } { $i < [llength $languages] } { incr i } {
set item [lindex $languages $i]
.${win_name}_gc.langfrm.items insert end [lindex $item 0]
if {[lindex $item 1] == $__language} {
set default_lang $i
}
}
if {$default_lang >= 0} {
.${win_name}_gc.langfrm.items selection set $default_lang
}
# Challenge and cancel button
frame .${win_name}_gc.buttons
button .${win_name}_gc.ok -text "[::Games::trans challenge]" -command {
set sel [.${::Games::Sketch::__win_name}_gc.langfrm.items curselection]
set sel_item [lindex $::Games::Sketch::__languages $sel]
set ::Games::Sketch::__language [lindex $sel_item 1]
}
button .${win_name}_gc.cancel -text "[::Games::trans cancel]" -command {
set ::Games::Sketch::__language ""
}
pack .${win_name}_gc.cancel .${win_name}_gc.ok -in .${win_name}_gc.buttons -side right
pack .${win_name}_gc.langfrm -fill both -expand true -padx 4 -pady 4
pack .${win_name}_gc.buttons -padx 4 -pady 4
::Games::moveinscreen .${win_name}_gc
update idletask
grab set .${win_name}_gc
tkwait variable ::Games::Sketch::__language
destroy .${win_name}_gc
set GameState($gameID,lang) $__language
if {"$__language" == ""} {
return ""
} else {
set word_cnt [loadDictionary $GameState($gameID,lang)]
if {$word_cnt == 0} {
::amsn::infoMsg "[::Games::trans empty_dictionary]" warning
return ""
} else {
return "LANG=$GameState($gameID,lang)"
}
}
}
# =========================================================================
# Hourglass code
#
# Original author: Bernd Breitenbach
#
# The following code is used with permission from the original author
# and slightly modified to fit in this game. The original version can be
# obtained at http://www.five-o-clock.de/fragments/
# =========================================================================
set HourGlass(hglass_full) {R0lGODlhUADwAOcAAAoOFHZ+jLa2tEZGRJqalF5iZGpyfNLSzCoqLIqOlKqqpMbGxIZ+hFJWVGJq
dDY6PHZydBoeJKKinN7e1L6+vJaOlLaurIKGjEpOVG5qbHZ6fH5+fC4yNIaGhN7W1NLKzGZiZF5a
XEI+RCYiLBIWHLKyrI6GjKKanGpyhH5+jL62tNra1M7OzGZqfKqipMa+vJaWlLKqrD5CRNrS1M7G
xFpeZD46PCImLFJOTHZ6hE5KTF5mdDIuNJKOjHZ2hCIeJDYyPIaKjJ6enCouLFpWXOrm5BoWHEZK
THJydNbW1K6urmpqb6amqObe3Lays25uf36ChGZmdBISGLq6uZqapF5idMrKyHZ2eh4iJ8LCwZaS
lF5eYnJyhH6CjL66u8bCwp6WnFJSV356hJKSlHqCjK6qtFZaXDo+P6airG5ucoaGlN7a1tLOzWZm
akJCRiYmKhYaH46KjqKeo2ZufKqmqpaWpD4+PzY2Oi4uPLayvJaSnA4SFXp+lLq2t0ZGVJ6anHJ2
fIaCh+Li3DI2NG52hH56fLKusNrW1M7KySIiJVpaXRoaImpudObi3nJ2hFZWZB4eLE5OXIqKlF5e
bL66xMbCzCYmNDY2RLKyvJKOnHJyfNbW3JKSnD4+THp+jEpGTGJiZW5yfNbS0C4qNI6Oka6qrMrG
xVZWW2ZqdDo6PR4eJKaipOLe3MK+vk5OUXp6fIJ+hDIyNYqGjBYWHJqWnHp6i2JmdHp2hIqKjC4u
MUpKTbqytIKChHp2fJqSlGJeZIKCjMK6vMrCxFZSWnJudOLa3NbOzWpmbEZCSSomLJKKj6aepGpu
fK6mrDo2PIqCjA4OFG5yhGpqfJ6apGJidLqyvJqSnLa2vEZGTJqanF5ibNLS1CoqNKqqrMbGzHZy
fKKipN7e3L6+xLautIKGlG5qdH5+hIaGjN7W3GZibF5aZLKytKKapH5+lL62vNra3M7O1KqirMa+
xJaWnLKqtM7GzFpebD46RFJOVHZ6jE5KVJKOlHZ2jJ6epCouNP///yH+Dk1hZGUgd2l0aCBHSU1Q
ACH5BAEKAP8ALAAAAABQAPAAAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8eP
CCeBAmWLmklbzFKmfCKtpcuULaiB0kZzJCh1IBdOisJMWgtmLXyufEIUxZNoXJJGCxUtGgqVKVFF
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}
set HourGlass(hglass_empty) {R0lGODlhUADwAOcAAGVod2ZpemdqeWdqe2hremhrfGlse2lsfWRndmptfmtuf2xvgGptfG1wgW5x
gm9yg2NmdXBzhGtufW1xfWlqfGZpeGxvfm9ygW5xgG1wf2xwfGpse3BzgnF0g3J1hHJ1hnF0hW1v
fmttemxue2xufWttfGpseW1vfG5wfW9xfnByf3FzgHJ0gXN3g3R4hHV5hXZ5iHZ6hnd6iXd7h3h8
iHh6h3d5hnV4h3R3hnR3iGtve2tteWxuenN1gnJ2gnl9iXl7iHh7inN2h2ZsempseHF1gXB0gG5y
fnN2hXl8i3p9jHt+jXp+inZ5inV4iWdte2lreGlrd21ve29zf3h7jGlrenZ5jHl8jXp9jnx/kHt+
j3d6i2hqd3x/jn6Aj36AjX1/jmZqdmhqdn2Aj32BjX+Bjmdrd2hseHyAjHt/i31/jHd6jXh7jnJ1
iHBzhmFlcXN2iXF0h2JmcmlteX+BjX6AjHx+jWNnc4CCjn+Ci2VoeX6CjoGDj4CDjIGEjYCCj3V4
i3R3inl8j2BjcmFkc2JldG9yhW5xhH6CjWVpdWRodF9icWBkcF5ibltfa11gb3R2i3Z4jV5hcH2B
jHp9kHyAi4KFjm9xgHFzgnN1ilxfblxgbFtebWlsf4GEi3h+jHl/jXt9jF9jb3+DjoCEj3+Dj2Nm
d3h5jXl6jl1hbWRneHZ3i3Z8jHd9jX6BkGBjdGFkdWJldnx+i3+BkHp8i4GDkICEkIGFkHp8iYKE
kHV3hHt9in2AkXN5h3F3hXJ4hnB2hHV2ind4jHd9i3p+iXl/i3qAjGpuenp7jXd5iHV3hnZ4h3t/
im1wg2xvgoODjXuBjXh+jnl/j2tugYGBjYCAjH9/i3V5hH1/i3R2g3R2hXN1hHJ0g3Z4hf//////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////yH+Dk1hZGUgd2l0aCBHSU1Q
ACH5BAEKAP8ALAAAAABQAPAAAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3MhRogAC
BgwQGEkgwYIFClImWJnggMsCAQZUAJAIQBgCZzo+JMCgZYEDCX4CXdCgqAMHER48OMq0aEoGBQQE
qDAVAAIEAgToRGjBggYLDDZIsJABQ4cOHC5c4NDBg9uzZ0GAiJCUqYMGRA9UgDBIDgIAWwsq0CGC
BwkViBGnWLyih48WL2bQ+EEDCI0ZM4LcECI3AogPQj5E+PChAQMEEAoVCizwCQEiUaSwmF3kyJQp
Fzp8YOsBCYwkSpYoURIERpMcH0DkML6l+ZYbSHCASDAVwerABrhEEZGCBdq1Zzn+9HYiJEeTJleU
XLmypcmNG71zAHLSpHnwLkFifHCgQECF6zoZEIYYRJwwRQdyfeaBZx/kcAMMQSwxBhlffNGFEjLA
EFqDTVCRBBNYLNFFF0vM8EIHDrSE2lYVCCDGGRYcgWB5oB3XhAxB/KAEGhN+ocYSSQQxgxOdLReE
El2MMSITJiLxgAIH6IEAiwJwIUAGbIVWHn1UeMhEEhKSgUYXZJCxRBA0CPEAXUIIEYgTWyC5xBI0
IIHiAgcIAFhHbwhgxkdYehBaDkI0wQYV6d1XYZlkqEEGE0HkEEcEbgzq5hpXBJGEhhHclacAjXR0
R1YAzIHBBaTlgEMOW1CB3n3+ZJRBh6x01AqGEk4k52YOhBZqxXlOwJEUngQMAKBGUgmgBwMZPJAq
EjdQsYahwZGxBx584IFHHtqWscQWodHXBCCAfDBuIIA0EciwCRgwAAQdheFfAMw6Cy0OTrCxhhVr
UIHktXz0oS0deHi7BiCBbHFFEu3lYAUgOTgBiLAPLNDuAHtuRFUFAzBgwQMg9OYBfQ9bIQiYZNDh
hx8BZ0sHGq5ugUVwDJtnhXxWUGyxuxlrBIAeAAwgwQJrgtCBEE5IDIgVh6aRMh8rR43HEld4OOKF
VDhhxc0PwzFXAz71nNHPFRQgQQNr0vWBEzm8ye8VSzwd9covKwFcmXNmfV7+IF3PleIBBVTQEdkF
kIXUXCAE0nYTTGNB5hdQQ023mdWSkYZ6jFuBLnlzPQm44BwRbgEGh9OleMKYOk6h5Cv3QQcZJJJp
+RWUnAdxxJwlBWXggwNQtgUOHOKZ6YEkzAbcXVSIx9x+0FHHF2nITvUVWwPSJudK4cl76L4X7gDI
yUXQNpzHi6g8885DP6GZ6zFuPdJeZ//54BX8fgHIHsgVsRNUsBHiGBX6A/PwQIcv8Ahv7XtYuOJX
sQMQIAD0C0Dh7heB/DWIXP0LUay+UIblSa2AByTRwuhjvbV5bVgOhGDoqDJBzyBBLuiyQpcct4cK
dXBuBDTghESYBNstsHP+CzAATOgngBaC4IWJYxyidkShWHnwg2goEw99aEIgClGFG/GdAA5ggQuM
BokkW+LjKIQtHL5MikvAQg/H9UMUDnGFAjBAF7/4Ga0BAlFXeBwavvAH1vmBgIwikRqpGCwgAg6L
PgtAHCfgxQ+8cG1bQxQWekRGP7quTBbSwiDHBYc2FNKNiBybIg3ASDpC0grrmWQTv1DGqF2SQoJc
Ywk/2cA3ZnEqpGzkI7WGqSuo8guVnNsrLdSFTc7yhLUMJUYAgMtSOvIzS+ulKusQTFe+DpZdWJgP
PYlM7SnzIsysQC6/SBpArEGaZEDE61hpyWsS05hC4KYhbekzmYzTkeX+PKcvtZDO13WwnZgcAxpm
1h7ywG+e37RI0MTJyM/goJxbSF3c1OlEgFJIoARtz/W6ecjB2bOhH7gBRCXaTycyb5gYVUJzmtAm
dYkmmR5l6AUcOlJfTrSAZfCjHy75BWqiQQsqbU8m4HAc0URAe6DLon9ySdMPACKiNu3nF1R20nW+
7qdBbQIciIocuiB1cEsF6UOdClUNqnOqzNupVcUE1ObcjKtG/WrowjrTD4z1qSQ9K1WFuVasujUH
RA1EXOc3V5k2Fa9RPesTrUkhEAqHClt4q0u92pKk+oyuhy3rTeuw2NZZ1YCPjSyvttDVozJAL2A1
rF1rqjp1cjatzWv+LGiVAFnNsQo5c1nAaS07to/W9a4RxUJrndfZyU0VmKHVHA62INjcVtaji/wt
aXgp3C7soVYEg20Bj0s5yEZCccwVwqQshtrQDSC6Ta3PGqqbsloVt3kVKqCZllBb8AZCvEdtF2+X
eV6mrtZcwdUCmQiY3bTiIb7IpS9kR3vf8eoXukwVAg6QUKhzYkHArHQvbA/M3bwtOGENzm95s9jf
hgoBOhVeL4YJ/F4OH3i+XdqCExLGORHvF5wlzs2JKdwEC69YwwZWHjU9LGMa5w5sI65ndI+G4h77
78d00OnK8PA8QJIoxjOW8ZGfa94l77jC/lsCGDIc5Q1X+XVXllb+lmuM5BsrNMdM5vEawpw8Akt5
ZXXoYAHTvIY1bznJvY2uoJo85xDVuVZ39kOeCVgHPvtZLm2GMCMHLecwO5GAiV608xz9VM6BINJd
ziWlway6DmIatoom2KYV3Gc4eRrUJI7jES5AafMUmkymLjNs66DqRrN6PlnjzKe5HGsDHEE8O7a1
/8gU5VNrt9d8BvariV3Pjh170OWpDxsEnLI/6jqt7l11lw7Gv2kDmr/WRvZmzLOFbTPb24kOt6/H
LW1hw1ojeihAugUFg1V1iAoi6razwQ1tBVOh3pCm9tj0bWxM8NvfXQq4yrQV74HNu38IH/a5wXmA
ATT84ayK+IT+lkdxVBOM0WlmQ8bvnZFEDMDjR8AEhfsdcoCP/I+tBLfFU45Bc7u5IolgeMxnvqpW
2ZwMJM8587glsIur/I7mFhtGElGshhO95mFKeqIF1nSeQ93eCp96sQ4wdCH0G04iRzrOt07yIXfp
6cFO+AGkDs6xH5voaD+61lEtMJZRswtvl1jcNf5zigCAALLmAN6NnnWco3qnbYdd4L8eh2EnoPAT
OXziF4+oMEFNW4/vO5Ul3z/Bk6fyYLv84BBvbMUv5wZoh9uEoNZ3vn/+75MPduUtpnqOVID1d399
7GVH+/e2bsq4Lz3lQcB7zEtE861HQg5kAPtW5fELiJCc8XH+6NO3j0v3zF+J8yMC/eBTf/jY1/7j
pdb9qn3f081ffeJXdX7rJy/7U14/8sWEKFd9XS7xFzrAxwH0dwP1gSj3p376N3qA1z7/F369pzFR
0Xr0Zxxdcn19kGioVgd5sx5bsApUEAgnFIBZNIETUAT0JwOtkgRYsEdlVHvrxweNZjdYcAXnsQUQ
41wKQHcKZQCLhIJOgCMysB55JCuf922ekFbZMoPBgQWQhYM5AAIVkxI8CHQ+SEodgC+aMoRJUIRR
xgdlgFbrt2pKoEmZEgTHIYUnsQBTwhFyUAAEcAAZ0BtNECQy4C9UgAVjhlxKQAYLyAcWQgZKMhw9
lCsRoAD+DaAAhNARjFAABZAAc4gEHeKEVwAK1seC0gJwkmMJsNUHf7QowqEepKUmJ5EAj6ATQaMA
GdABWuM4I0JfWyAIrcI0ClMhO5VWArM8U0UGZeiB4HIXGVAAWwEBFYCIa7MFS7AHfPAHNXQhVaM1
6DFmdOCJfOU86ZNGguB+5NEADoABA7AVclABB+AAICAzSzAKfzRlZUAGWnBwHRI3T8QHkvM8lvMl
QSBc7HEzIOAAF2ABVWgRolA2RJMDALcHfndyX6AEjIMpO4KOUZMtFZKQ7VEf7XFOTeAEEZAWDLAI
gUEILZIBH0AFWTAG2MJhagAGVCNcSGJdFNJTX5BGw6H+UjZSH+lCBTjAFhhAAKzRCMQ4jnBABV0Q
RWSAklXjSy34PHsgRQKFiXjUHjAAAytFBTLwHQewiKwxCAEQAAkQAfxzIXNSgz2WBbjGgXMiIkBS
lGeSITQQBO2BIzfZARmgk6zxD4tQCOelAB+wXmm0MFjQY5M0CbUyIjuUSushA0ngIcXxlEHwAkjA
ARygABw5l/9ACMRIAArwVM0xQ/3jS0gnXwjUhTEDHD30lDHAmGzRAP/IEYMAAABwAA+gNRHVS0S4
BHsUkewoXJGFHjWoGTBwAy7gAQgSl5JZEG/wFwXwABFDLtlYNf1iaGICO1RzKK2AjzLgBNDhAR/Q
ARf+wADDWRCpQAiFEACuKQTzYU7HMy0ygwWwA51akB6vmClOgAS9sRsLMAjdWRCLAAEeuZUfAAcR
gyls8DDLhklmkiSwkykwAJwf4AEc4ADwcp8FMQiFAAEDoACeUR6BQAWCsC+C4DhloE6TEEVJeSYw
YCe9gSJtCKERCp4FsACeAQJIgymp0wW04k5ogCE54Bby6QCp2Z2MQJkH0AAR0BbkWTVUIGC5tkFn
IlIn6gBaoaIJMQiEgAAMIKR1xAaCsG0poy3PYyGb0gJIIJ8N8KRQGqVTmgCH4yZYGjcEI4MVsgTU
J59I4KRlyhCEAAsB4KKjkS95yEF40Adk4AVkkAT+0OFIDyCMdWqnhBCknpEDa9ChXfAH2kIhaCAD
E4YEEcCdidoQlLmVESAEJpNHkrpOSnADwACcFrCpD1EICNAAMCqjS9BBwPQFQSAEbpEBqgoRhCAA
n+oE1HMFXkAHTrMEMHBEDpCrESEHCoA0v5o8EpIED3UByCoRCLA2guAEjkNfWjCVHWCV07qqByBD
QDkGSrAGPdQBZPqtDwEAK1hDCvkc0qquElEAC0Mhh3kD8SqvEVEINicL7KEE6aqvD2EAY4AFahAE
QcABAksRSnIrTrCwFAEDZFALZIADEDsRGPADtbAHGHCxEmEAXcAHaCABHhsRIOsHZECyJfsQEkD+
BnzABB2wsg/hAUrAB2OACzLrEDmgBBbyBTnLEBnQBEGgBmngBQ3wswlhBjLQIVMFeMeCtAORAcuV
BFMVHAoAtQUhAR5QH0oQhnazBQH7sxXwqWwQJxNyJGxwAE+bsw7AAU3QnnFDHEmQKwMgCVArAaNB
BWMQJhhSiGyItBYghdiqBpE6qHHCNpn6oCuLt84ikgbEB3QAJEoAA4K1AAKguBfLAGkTCKqUU3hw
o0kgA4QSAQmwIhdrAOQ4GlawBMCEB5aAB5MAJEGQK592ALGwtt8qAAuQIIFwBQCEdAITosPBNqIB
JaohsMVIFxwgBMLAT60bvMU0ucgRBykiAMf+q67Jizj5MkYBQwfCqwQ0wFJCEAFgAwDXi6wAoAAP
0AF04TCTVCGT4DJiYjcKSR6i0QBzd76bigAKkLqjAQjXtyiMhgbCcSSZwiuigSeo4a11yr9pAzKB
sAZ9KEUp01OgiyNAcpGbcYgHgBq4251yMDQgoxQOkx54EzeLYiY/8BvDURxJM75QAgHWUaaMMDTk
CDIxOkmguwROwyhLYI9gkgQMA5WYGhRXIQpQagD9mxSfIR/+ogTD4CE8LJRlggZpwAQ/wARzolJs
iZEJQAAVcAcqWozc+ACVwisd0oXnARxMgEkpfMVwnAZCzDBscIhg/ME6AQEJgAGuChq8wj/+x9Me
T8wEVswoi4IGTLALhKzFTEBba/AkYIy5gfEGBrAAzeIBMNA2EawvVIBKw8EETJAGaYAGUVQGYSgm
SfADojzKpEwFOcAfBQAAdjuX4pgBcwiVfFNQcCIIVKApSgDKxCDKexSGUSTHTFAJURRFXbAFpeFA
kswnBDAWGIADF6k1bPMmc2ZTv5wGWWwMe6QGYyDKRDvK8VVASgAIEeAMBCDLrAEADDABczhj5nGR
OCNcc0LFpGw5pEzKS+AKhpxdwHQFOWAIQfHMGsEIAiABE4ABI2NHSzMuTTDBkzAK2pJD6ygmTLCW
Lshif2QmTbAfCSAAp6gTN6EBEoABa+P+ZIdSg32ICCyzMpYgj9qCCPghAzKwI2FIVcvDB5OQTUTS
AAVg0BgBARKgAzqwvHCSSlhgB+nEdWYGO0FCC7LAynXwWihLW4AQBw+QAKrAIkYtAR1ggOtxzwU0
CvKIavKICPObBF0wysUQRT2FB2SgZvuIJzohBwKgAx6ThR2SHsloQxoYNVIkontwIWKyR2lAPU6A
Igpgih0hBwRwDKSkeDdgmNUCTGr3eJwIuSW3Z9A5IordAXihiB2hCCHBALMGLTCAIzsSlOm0fVIj
ObmgaHaQJCv5jB7AHwqAxxSRCAbAAKh9AeXxlDdNIlEUv/qnXVdzH13SBLmdEkJthTz+kQGoMn0P
AiY7ggaTkNwnVTAkIhwi0iU5INoK8LccYdrTvbzWvQy+dAVjst36p1MHpgVLAFTR8C2kRd7mvRHo
zSyuR30wMJtj4NLcjUOToAQqGSL7Mt6JuN8a0d9YIn0APpvpVOAGjuAzo+A3o98p+uAigdrqPeFj
XeEWPmUHLlwsWK4b3uAdnhH9fWzlQX3oMeIEXuJyrR4zA1QLzuGl/eEwHoRiTeMlPjk1iI8qzuAp
0eIY8eJILeMUXuMW/jpFztIL/mlJ3hEI4EAgjjTVOeNwQ+IlLuVGmR6iZeUKoOQXkeWR/eNd/uRD
HltTnh6dHIWJeOalreUygjQwkC7+aAnmUU4GSu1Lc27maG4RioDnR+MEMEAfRjpRb/46ge6E+ljn
hV4Rh84Tea7oSR1xfl7gkD7mkk7nV37eiK7nmw5wnc7dLxPpriLqdn7ePp7oi64wnA7lno4GrJ6G
lI7lsW7qtI7qtq7quA7qruI1u84RCNDrmv7rjl7ifVAHw46PTqhVhI7lI4Hasn4DzJ7q+vfs0V6D
7mfso74RyY7psg6Vjc7t69cHBkSY/Uftx07uys4cV3AozW7h7B7tRVns1Y7s814f9e4vaBDs3d7u
7f3unBHvGlHu2K7nAH8oO7JXBZ7v7t4+CT/uGgEBHz4BSE3vEI8GEs/dFH/w7nf+8a++ERrPExzv
8K3y8SGf3BSfh/vOUv2O8h+OJSyfiRE/5OyeBjNU7yVf8xl/8x1/gP2y884OPRcI9K5i8pVOESnv
3zl/9CDP80qPR8fjKm0g9BkR9Tiv6EYv8C9f8Aq2HoFMuwrf9USf862C9Pj+kl2SjYdyMPeL8Wqf
3mwfJ1Wf9Aom99JSLuRr90O99mDfKvax92/f9wFP94F/8kOP94X/hG4/8XCvoVfQLwfTBo3/9BPh
9UXfKmug92O/7pWfjZgPCJqf9oMP+cwhLaJv9WV/+X+f+oJ/EZ6v51YA+npP8OuXBwm59Kdf945/
91Jvnefh+jvC+4/n+7SFR5j+b4iqb/siAYlIbYAdElFJMPCBnVbMD/xqJvycLxEpT/1IY/2QhSna
H+a/7/zfv/kdMf5fb/5QtQT4F+W3Yn2Z2GdfkwDDv/rkb/wA0YTKljVXlpDh40fhQoYK+yykA0bJ
li1XBlJZ4wREhAYJFCD4F1LkSJIlTf6DYIDAgQwchDi50UQgQYNk8DTE6eehQjpqJlbEiFEjR48g
Tx5FilIlS5cwYcxck+TgzZwMd/qh8+Unm6AZN3b8mFRsyZQrM1z4ADPmwC1SbVa1ClErRa5rhMYh
GnbsXqVm0aqdueXHVIdwr2bd2tUJXrBG+YqFQMDsg7Q3nEB1S/Uqzp18ENP+Vcy46OOxkQkYyEAZ
5uWBdpXYfLi5YefPW+rezeuY9FHTqFVbhkrlNZ6bVHP2SYjnc5Pba3KI1rubt2TflVlTFG6zuOHk
y9mwsescum7pZKmnti5QZnbifoxz7j6XOXiCz/MCKD/9NHon/QVasYKN4barCjn3vKNPvPvyOwmC
AvZTLYfLtgAwuz6Ie2+24ujwYqIm1gBvjS1y+Moj/Bgk68HqnJCwCQqtYI8PPjK0akOJtvgwxBFL
VOBEFEdyEMIPcmjxRfYUonGhPDbswkMQrRCRxAV/BFLFloYk0sUmrKiJqiQVWvLALpKQ6Tsr6uPR
RypRepCpIf3bsokukYT+a8kZ6ViCzPnOtEKICB4AS00qg3QzB+CauGxO9+CiA8M68ixzDT79fGAB
E9cUidArA4Ez0S5smvFLrBxVIggXwbNiSzj+tLRHTEMKEjWXckD0shyswIIMRPAIldE6lKujVLok
pZDSVgX9MdYJZoUBhsuc2CLXRkedkaGE/Kij0S/IENa2M4vloFIGFFDlVTZPW1aIHGRwFtE1pL2J
DjqyzSnbrNBQIokgqLjCRUlXFZdccyEYgAAGJujgJXYvcxGLMeTFo446vqBDxobs/QKNJX4I4op+
XeyT1dFeJdjgIxJ2YmF/HSYjqy9erhinie/dOAklPt4CECEeqDSBBSD+GHgAAQ42AoeUYcABhiAq
+pQMMrpYogtEZMOK4jrIqFkJLHDMeecHFPAZaJIFGHqCIoxm9walBcKiC6iVWOKgUXCiowzlJtkY
biwGaoLTCBwAewHyfryD7IOLQGJdGZKm4YYt+C1ViR/S0NUPT3RqFOJ5u2Ai7ivMDGRVwBWwoBBz
3yBAAAPMxiEHGGSAnQYcXKQiCKVpUAKNOiD6tVHi6OjiByWUoOK7JnL4AISOLF3EXEXIlmACH1oP
IgkaZJghhtdffyEIGiZv2eWXqZmxjLqZSCOJK5Kg4ngSF1BggQIaMfcfACqI/uwctpCchhlgmAEN
rhGDFwSQBkxAAxn+Xta0mJnvC0woVRCCwC7kcWQBDghA/f6BANVZoANridvG/EfAF7gABwUMghLS
sAQ0fGoSX8DDhb5ACxlswQnNQtoHPgA4BzRgcFTiYBgmcAEcyCCFaYCb5GRAwBYgwQUFVCELP0Wx
rKghFM7ilLpaJwQhOGABDfiZBv+hCAAQwAIeUNrwgiA8JvxgBiX0wRNnUL3hsZAM+MrX4jygwxzg
AAdIwMEHGgDGAYjxHxXQAwLOYIEIwOAHNBjhCyQpyRtIMgYuiEEmY5C9F2RyBm80IRL85IALXIAj
DVBABQy5QQAgoAILuOAFOtABDhSBA0ZwQS43eckWZCMbPegBC7Kg0YIWdEOTN8DBRiKgQ444gAGr
hNUiCIEAABTAmgVIAAMYYIBtSkACGcAABi5xiQtgwAIhyIAFLABOcDoAAw74E88ARwBoikQREBjE
IqRJiEJAAAH+BMAADnCABPjsiw5AKBjhpwCwFTQBBxjAAAIwgFbW8yQIQEAhCkEIjna0oxrtpz8x
+k+AAsCk97NoSlW6Upa21KUvhWlMZTpTmq4pIAA7}
set HourGlass(hglass_1) {R0lGODlhUADwAMYAAFpebLKyvIaKjHJ2hJqepHqCjGZqdJKWlNra5HZ+jKaqrG5yfI6SlM7O1Hp6
hKKmrIKCjG5ufJqWnGJmdI6OlHJ6hKKipGZufIqOlJaanPLu9H5+jIKGjGJidL6+xK6utNbW3F5i
bIqKnHZ2hJ6ipGpqdJaWpHp+lHJyfJKSlIaGjLq6vIqKlJ6epH6CjJaWnOrm7Hp+hKqutM7S1Jqa
nGZmdHZ6hKairGpufPr6/F5ebLa2vIaKlHJ2jGZqfJKWnKqqtG5yhI6SnHp6jKamrIKClG5uhI6O
nKKirIqOnJaapH5+lIKGlMLCzLKutNrW3F5idHZ2jGpqfHJyhJKSnIaGlJ6erH6ClOrq7Hp+jNLS
1JqapGZmfHZ6jGpuhP7+/P//////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////yH+
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
lZaXmJmam5ySIVAdHVCjPlIRETipUqusF1JcozohslAhnY8AXKypqlJGRgvBEUHExUFGXkG8Pj5c
BjU+ExM6AAC3iKkLQaunEUZTU9pTQQPlA1Pn5OjjxEbtqFwTIRMG1teEqagRCyhB/fsL0A2oYGNI
goMODnYZMmLEAGLmHqJbIOVZB3v3LvjAUSLCABTltBX7aC5KliwbhmTp0iVKlHM9uthgubBhOSk+
DFy89yengX3liPVDgW5El4EyE2QZQtNouR4uaapMaWMcDmYYO+E0YCrgOYHjpoyI6SCLiw0bXCxh
enRKjxH+BbvEOJFlSYEsDqoaSbXzFpecOPYF6RFzgMsoMlWqPOvi7pCZNoLGHDKkwJUNd21UGLDg
qo+smwww8+EFXY8BhKN2ObkYrVkXeG30IDe43AiVJzdEZsfRVqcQOUv4IObWLeKFC3GndcEc5dIR
4IJAH9uD8uqWnL1orAEaE7RoOIKdc3h89cksBVxAuLKEuYsTQ6KgixKTsOEuRumPo4iz+yVmBkxg
ikAvlWeeC1cUwUERRagHwVnYITaTfIe1JF8QqPTXiWgGcJXMAEYZhdxCJyXIAYLuQdhFBSSyNABL
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
vxevzHLLLr8Mc8wyz0xzzTbffHMgADs=}
set HourGlass(hglass_2) {R0lGODlhUADwAMYAAFpebLKytIaKjHJ2hJqenHqCjGZqdJKWlNra3HZ+jHJyfI6SlG5yfHp6hKqq
tIKCjG5ufGJmdMLGzI6OlJqanPLy/HJ6hGZufLq6vIqOlKamrJaanIKGjGJidKKirH5+jF5ibIqK
nHZ2hJ6erGpqdJaWpN7i5JKSlPr6/IaGjLa2vIqKlJ6epH6CjJaWnHp+jHZyhKqutGZmdHZ6hGpu
fLq+xObm7F5ebLKyvIaKlHJ2jJqepGZqfJKWnHJyhI6SnG5yhHp6jIKClG5uhNLS1I6OnJqapPb2
/IqOnJaapIKGlH5+lF5idHZ2jGpqfJKSnP7+/IaGlH6ClHp+lK6utGZmfHZ6jGpuhP//////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////yH+
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
lZaXmJmam5ySIEwdHUyjPE4QEDSpTqusF05VozcgskwgnY8AVaypqk5DQwzBEEDExUBDV0C8PDxV
BjI8ERE3AAC3iKkMQKunEEM+Pto+QAPlAz7n5OjjxEPtqFURIBEG1teEqagQDApA/fsM0A2wMCNI
goMNDloJIkLEAGLmHqJj4ORZB3v3LvCgQQLCAAXltBX7aE7EixcfgrywYqVJk3M6rMxgubBhOSc8
DFy89yengX3liPVTgE6ElYEsE7wIItOK0XI6XNJUmXLGOBrMMHbCacBUwHMCx/kQEVNliw8fWixh
etSHDhH+BWe8mPJiSYEXDawOSbXzVpWcNPYB0RFzgMsmMhssfSEl7d0gM2cE1TGjQZACje/OsDCA
AVYeWjcZYMbjCjodAwhLtXJSZeMPjFvgnaGDHLlyTVSe/CCZHUdbnUDkJMGDmFu3iBcu1J22RQsp
KJeKAAdk+ssBQSC/mOGQwRWNMkJjghaNRrBzDpOzPjmlQIsHjZ3LZoiuCWXChlu21DGOIk7xlzBj
QASmCPSSeus9JwQHDzzwnoMftGRYZE2MJZVL46DyXyejGdBVMgMYZZRyC530nhLyPSfFEixZUCJL
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}
set HourGlass(hglass_3) {R0lGODlhUADwAMYAAFpebK6ytIaKjHJ2hJqenHqCjGZqdJKWnN7e3HZ+jG5yfMLGzJKSlKaqrIKC
jI6SlHp6hG5ufJqWnGJmdKamrI6OlHJ6hGZufPr6/IKGjMLCxKKipNbW3GJidLq6vIqOlJaanObm
7H5+jM7O1F5ibLa2vHZ2hJ6ipGpqdHJyfMrK1K6utJqanIaGjIqKlJ6epH6CjJaWnOLi5Hp+jMbG
xJaSnKqqrIaClGZmdHZ6hGpufJ6apF5ebLKytIaKlHJ2jJqepGZqfN7e5G5yhJKSnIKClI6SnHp6
jG5uhKqmrI6OnP7+/IKGlKKirIqOnJaapOrm7H5+lF5idLq2vHZ2jGpqfHJyhJqapIaGlH6ClJaW
pHp+lMbGzKqqtGZmfHZ6jGpuhP//////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////yH+
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
lZaXmJmam5ySJFIdHVKjQVURETqpVausF1VeozwkslIknY8AXqypqlVISArBEUPExUNIYEO8QUFe
BjhBExM8AAC3iKkKQ6unEUhWVtpWQwPlA1bn5OjjxEjtqF4TJBMG1teEqagRCilD/fsK0A2wkONI
goMQDn45YsLEAGLmHqJTUOVZB3v3LgTRgSLCgBTltBX7aM7EjBkijsz48oUKlXM/vuRgubBhuSpB
DFy89yengX3liPVLgc7El4EsE8w4IvOL0XI/XNJUmTLHOB3MMHbCacBUwHMCx1kxEVMlDBEiYERh
etTKDxP+BXPM2DIjSoEZEKwiSbXzlpecOvYN+RFzgEsqMiEsnZEl7d0jM3ME/ZEDwpECje/msDBA
AdYgWjcZYBYEDLofAwhL/XJSZWMRjGHgzfGDHLlyVFSeFCGZHUdbnUjkRBGEmFu3iBcu1J0WBows
KJeaADdk+ssBRyDPyOFQARiNOEJjghZNR7BzDpOzPrmlAAwHjZ3LZoiOCmXChlu2/DGOIk7xlzBj
wASmCPSSeus9V0QGDjjwnoMitGRYZFSMJZVL46DyXyejGdBVMgMYZZRyC530HhPyPZdFFCxZUCJL
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
km6/BrDmZb8CD0xwwQYfjHDCCi/McMOtBQIAOw==}
set HourGlass(hglass_4) {R0lGODlhUADwAMYAAFpebLKytIaKjG52hJqepHqCjGZqdNre5JKWnHp6hMLGzG5yfI6SlIaClHZ+
jKqqrGJmdHZ2hG5ufJqanM7O1I6OlKKmrIKCjGZufP76/GJibHp+jLq6vIqOlHJ6hKKipOrq7Jaa
nF5ibGpqdMrKzHJyfJKSlIaGjHZ6hNbS3IKGjH5+jLK2vIqKlHJ2hJ6ipH6CjOLi5JaWnK6utGZm
dJ6apM7S1GpufIqGlF5ebIaKlJ6epGZqfN7e5Hp6jMbGzG5yhI6SnK6qtHZ2jG5uhJqapI6OnKam
rIKClP7+/GJidHp+lL6+xIqOnHJ6jKKirO7u9JaapF5idGpqfMrK1HJyhJKSnIaGlHZ6jIKGlH5+
lLa2vHJ2jH6ClJaWpGZmfNLS1GpuhP//////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////yH+
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
lZaXmJmam5ySIlJKSlKjPFMSEjepU6usGFNfozkislIinY8AX6ypqlNERAvBEkDExUBEYUC8PDxf
BjQ8EBA5AAC3iKkLQKunEkRVVdpVQC7lLlXnVQPq48RE7qhfECIQBtbXhKmoEgslQP78FqBz4QGF
DwcIEyDE4iNCBBdABpaL6GLBFB40lNzDh4HHjRESXJQop40YupHlImzYsMLHBiwohjyswgUmlpsN
Hw64aEAjvj88DBjg52IAsRJVkLqIgIUgTAcbfNxE4YKqiyFYbzJk6QPFuBvMNnbiaUpguongXNRM
sAHGihX+brui4IKOadcNSzZoKfDSQwkiqXze+hL0Bj+aNdVmNRh1Qxe4BVqiQNH0HBcUCXwUeMwX
hYeKYHmI3WSAGY9kA7io5ZLVZWMYWla0hbFhMhcgRs0Ncb0yAURiH211EhF0BA+T59TiZOh6RRcY
MPjK9l0sQpUh5Xx0dYAF+4IwHWmMxgQt2g1i57BzkYplJd4CMC48hk7bxxB0Qy5zUT2kOxaH41h0
0XiXMGMABKYAsZ9M62m1EnRIZHEBdF0g0cVL/FEWUxUR5NcdXUCgMmAnpZWW4FJYcOEEe1u1hYQK
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
Tnjhhh8ueCAAOw==}
set HourGlass(hglass_5) {R0lGODlhUADwAMYAAFpebK6ytIaKjG52hJqenHqCjGZqdNra3JKWnHp6hKaqrMLGzG5yfI6SlHZ+
jGJmdHZ2hKampIKCjG5ufL6+xJqWnIJ+jI6OlGZufPLy9Hp+hGJibLq6vKKipIKGjIqOlHJ6hJaa
nK6utM7O1Hp+lF5ibLa2vIqKjJ6ipGpqdOrq7HJyfJKSlHZ6hIaGjLKytHJ2hJ6epH6CjOLi5JaW
nKqutMrKzGZmdKqmrJqanGpufPr6/H5+jF5ebIaKlJqepGZqfNra5Hp6jKqqtMbGzG5yhI6SnHZ2
jKamrIKClG5uhMLCxI6OnHp+jGJidLq6xKKirIKGlHJ6jJaapLKutNLS1H5+lF5idIqKlGpqfHJy
hJKSnHZ6jIaGlLKyvHJ2jH6ClJaWpGZmfJqapGpuhP7+/P//////////////////////////////
/////////////////////////////////////////////////////////////////////////yH+
Dk1hZGUgd2l0aCBHSU1QACH5BAEKAH8ALAAAAABQAPAAAAf+gH+Cg4SFhoeIiYqLjI2Oj5CRkpOU
lZaXmJmam5ySJVdOTlejQFkTEzqpWausGFlioz0lslclnY8AYqypqllKSgzBE0XExUVKZEW8QEBi
BjdADw89AAC3iKkMRaunE0paWtpaRTDlMFrnWgPq48RK7qhiDyUPBtbXhKmoEwwrRf78GKCDAaKF
EAcIEyDkIgQCBBhFBpaLCINBFiA3nNzDhwGIjhQTYKwop40YupHljjRpwkNIEy5cjjzU8oVLC5gM
HcIYcNGARnx/gBgwwG8nsRVakMKAwAWGFJsOmgjBCaNFyiNHcLps2WKcDmYbO/U0JTDdRHAwarqU
wYOHDCv+Qm5+Qcd0qgYSTawUeAlihZJUP2+JEaqDH82aabHadLnWbYGWNpueUyukABgee1uAqPgV
SNhNBpgBSTbgS9ovil1qaMyjCRgZL7l8KTKgiOmlLlc2SQCR2EdbnUoITQHE5Lm0MKcKye1Whoy9
rYX0LgJBy8Mvy7k4aHGkIpmONz5jghZNB7Fz3bHD1N2kgAwJYKw4h90Q3RHEKWPGrF7E4kXxlzBj
wAOm2IYaBOqt14QMYCThQRKvNQibbDBkBdMRWmBV033joPJfJ6GFVuBSskkxVXIrNeiBDBA6lwRk
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}
########################################################################
proc animate {gameID widget} {
variable GameState
variable HourGlass
incr GameState($gameID,hg_wc)
if { $GameState($gameID,hg_wc) > 5 } { set GameState($gameID,hg_wc) 1 }
set time_gone [expr {[clock seconds] - $GameState($gameID,hg_tstart)}]
if { $time_gone <= $GameState($gameID,hg_time_to_go) } {
$widget itemconfigure $GameState($gameID,hg_secs) \
-text [expr {$GameState($gameID,hg_time_to_go) - $time_gone}]
set new_fallen [expr {int($time_gone * $HourGlass(quantity) / \
double($GameState($gameID,hg_time_to_go)))}]
if { $new_fallen > $GameState($gameID,hg_sand_fallen) } {
set GameState($gameID,hg_sand_fallen) $new_fallen
if { $GameState($gameID,hg_sand_fallen) < $HourGlass(above_cone) } {
set upper_mark [expr {$HourGlass(cone_start) - $HourGlass(above_cone) + \
$GameState($gameID,hg_sand_fallen)}]
} else {
set h [expr {($GameState($gameID,hg_sand_fallen) - $HourGlass(above_cone))}]
set ch [expr {$HourGlass(cone_end) - $HourGlass(cone_start)}]
set hx [expr {( 9 * $h * $h ) / $ch} ]
set upper_mark [expr {$HourGlass(cone_start) + $hx}]
}
set GameState($gameID,hg_lower_mark) \
[expr {$HourGlass(bottom_mark) - $GameState($gameID,hg_sand_fallen)}]
$GameState($gameID,hg_img_current) copy $HourGlass(img_empty) \
-from 0 0 $HourGlass(width) $upper_mark -to 0 0
$GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
-from 0 $upper_mark $HourGlass(width) $HourGlass(half_mark) -to 0 $upper_mark
$GameState($gameID,hg_img_current) copy $HourGlass(img,$GameState($gameID,hg_wc)) \
-from 0 $HourGlass(half_mark) $HourGlass(width) $GameState($gameID,hg_lower_mark) \
-to 0 $HourGlass(half_mark)
$GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
-from 0 $GameState($gameID,hg_lower_mark) $HourGlass(width) $HourGlass(height) \
-to 0 $GameState($gameID,hg_lower_mark)
} else {
$GameState($gameID,hg_img_current) copy $HourGlass(img,$GameState($gameID,hg_wc)) \
-from 0 $HourGlass(half_mark) $HourGlass(width) $GameState($gameID,hg_lower_mark) \
-to 0 $HourGlass(half_mark)
}
} elseif { [expr {$GameState($gameID,hg_ready) % 2 == 0}] } {
$GameState($gameID,hg_img_current) copy $HourGlass(img_empty) -from 0 0 $HourGlass(width) \
$GameState($gameID,hg_lower_mark) -to 0 0
$GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
-from 0 $GameState($gameID,hg_lower_mark) $HourGlass(width) $HourGlass(height) \
-to 0 $GameState($gameID,hg_lower_mark)
incr GameState($gameID,hg_ready)
} elseif { $GameState($gameID,hg_ready) == 1 } {
time_elapsed $gameID
$GameState($gameID,hg_img_current) blank
set GameState($gameID,hg_ready) 2
} else {
$GameState($gameID,hg_img_current) blank
incr GameState($gameID,hg_ready)
}
if {[expr {$GameState($gameID,hg_ready) % 2 == 1}] || \
$time_gone <= [expr {$GameState($gameID,hg_time_to_go) + $HourGlass(blink_time)}]} {
set GameState($gameID,hg_animate) \
[after $HourGlass(ani_delay) "::Games::Sketch::animate $gameID $widget"]
} else {
set GameState($gameID,hg_ready) -1
set GameState($gameID,hg_animate) ""
}
}
proc hourglass {gameID widget} {
variable HourGlass
variable GameState
variable bkg_color
set HourGlass(width) 79
set HourGlass(height) 239
set HourGlass(half_mark) 120
#set HourGlass(upper_full_mark) 30
set HourGlass(lower_full_mark) 160
set HourGlass(cone_start) 90
set HourGlass(cone_end) 115
set HourGlass(bottom_mark) 230
set HourGlass(ani_delay) 300
set HourGlass(blink_time) 5
set GameState($gameID,hg_img_current) \
[image create photo -width $HourGlass(width) -height $HourGlass(height)]
#
# quantity that filled the upper cone
#
set HourGlass(cone_fill) [expr {($HourGlass(cone_end) - $HourGlass(cone_start)) / 3}]
set HourGlass(quantity) [expr {$HourGlass(bottom_mark) - $HourGlass(lower_full_mark)}]
set HourGlass(above_cone) [expr {$HourGlass(quantity) - $HourGlass(cone_fill)}]
set HourGlass(img_full) [image create photo -data $HourGlass(hglass_full)]
set HourGlass(img_empty) [image create photo -data $HourGlass(hglass_empty)]
set HourGlass(img,1) [image create photo -data $HourGlass(hglass_1)]
set HourGlass(img,2) [image create photo -data $HourGlass(hglass_2)]
set HourGlass(img,3) [image create photo -data $HourGlass(hglass_3)]
set HourGlass(img,4) [image create photo -data $HourGlass(hglass_4)]
set HourGlass(img,5) [image create photo -data $HourGlass(hglass_5)]
init_hour_glass $gameID $widget
set GameState($gameID,hg_ready) -1
set GameState($gameID,hg_animate) ""
canvas $widget -width $HourGlass(width) -height $HourGlass(height) -bg $bkg_color
$widget create image 0 0 -image $GameState($gameID,hg_img_current) -anchor nw
set balloon_msg "[::Games::trans hourglass_courtesy]"
bind $widget <Enter> +[list balloon_enter %W %X %Y $balloon_msg]
bind $widget <Leave> "+set Bulle(first) 0; kill_balloon"
set GameState($gameID,hg_secs) [$widget create text 8 8 -font 12x24 \
-text "$GameState($gameID,hg_time_to_go)" -fill red -anchor nw]
}
proc init_hour_glass {gameID widget} {
variable GameState
variable HourGlass
set GameState($gameID,hg_time_to_go) $HourGlass(time_to_go)
set GameState($gameID,hg_wc) 1
set GameState($gameID,hg_ready) 0
set GameState($gameID,hg_sand_fallen) 0
$GameState($gameID,hg_img_current) blank
set upper_mark [expr {$HourGlass(cone_start) - \
( $HourGlass(quantity) - $HourGlass(cone_fill) ) + $GameState($gameID,hg_sand_fallen)}]
set GameState($gameID,hg_lower_mark) \
[expr {$HourGlass(bottom_mark) - $GameState($gameID,hg_sand_fallen)}]
$GameState($gameID,hg_img_current) copy $HourGlass(img_empty) \
-from 0 0 $HourGlass(width) $upper_mark -to 0 0
$GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
-from 0 $upper_mark $HourGlass(width) $HourGlass(half_mark) -to 0 $upper_mark
$GameState($gameID,hg_img_current) copy $HourGlass(img,$GameState($gameID,hg_wc)) \
-from 0 $HourGlass(half_mark) $HourGlass(width) $GameState($gameID,hg_lower_mark) \
-to 0 $HourGlass(half_mark)
$GameState($gameID,hg_img_current) copy $HourGlass(img_full) \
-from 0 $GameState($gameID,hg_lower_mark) $HourGlass(width) $HourGlass(height) \
-to 0 $GameState($gameID,hg_lower_mark)
}
proc stop_hour_glass {gameID widget} {
variable GameState
variable bkg_color
variable err_bkg_color
# Cancel possibly running hourglass
if {$GameState($gameID,hg_animate) != ""} {
after cancel $GameState($gameID,hg_animate)
}
$widget configure -bg $err_bkg_color
}
proc start_hour_glass {gameID widget} {
variable GameState
variable bkg_color
# Cancel possibly running hourglass
if {$GameState($gameID,hg_animate) != ""} {
after cancel $GameState($gameID,hg_animate)
}
$widget configure -bg $bkg_color
init_hour_glass $gameID $widget
set GameState($gameID,hg_tstart) [clock seconds]
animate $gameID $widget
}
}
|