Home » Archimedes archive » Archimedes World » AW-1991-11.adf » November91 » !AWNov91/Goodies/3D-Doms/!3D-Doms/!RunImage

!AWNov91/Goodies/3D-Doms/!3D-Doms/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1991-11.adf » November91
Filename: !AWNov91/Goodies/3D-Doms/!3D-Doms/!RunImage
Read OK:
File size: 39F1 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >!RunImage
   20REM Desktop three-dimensional dominoes
   30REM By M.C.Ironmonger, October 1990
   35REM LEN Archimedes World November 1991
   40:
   50ON ERROR PROCerror(ERR,REPORT$+" at line "+STR$ERL):END
   60PROCinitialise
   70:
   80REPEAT
   90SYS "Wimp_Poll",&81823,block% TO R%
  100CASE R% OF
  110 WHEN 2 : PROCopen_window(!block%)
  120 WHEN 3 : PROCclose_window(!block%)
  130 WHEN 4 : IF !block%=w_doms% PROCclose_window(w_doms%)
  140 WHEN 6 : PROCbutton_click(block%!8,block%!12,block%!16)
  150 WHEN 8 : PROCkey_press(block%!4,block%!8,block%!24)
  160 WHEN 9 : PROCmenu_select(!block%,block%!4)
  170 WHEN 17,18 : PROCmessage(block%!16)
  180ENDCASE
  190UNTIL quit%
  200SYS "Wimp_CloseDown"
  210END
  220:
  230*** reason codes
  240:
  250DEFPROCopen_window(W%)
  260CASE W% OF
  270 WHEN w_players% : Y%=block%!8
  280  !block%=w_main%:block%!20=scroll%
  290  block%!8-=576:block%!16-=232
  300  SYS "Wimp_OpenWindow",,block%
  310  !block%=w_players%
  320  block%!8+=576:block%!16+=232
  330 WHEN w_main% : scroll%=block%!20
  340ENDCASE
  350SYS "Wimp_OpenWindow",,block%
  360ENDPROC
  370:
  380DEFPROCclose_window(!block%)
  390SYS "Wimp_CloseWindow",,block%
  400IF !block%=w_players% PROCclose_window(w_main%)
  410ENDPROC
  420:
  430DEFPROCbutton_click(B%,W%,I%)
  440CASE B% OF
  450 WHEN 2 : PROCmenu_click(W%,!block%-64,block%!4+12)
  460 WHEN 1,4 : PROCsa_click(W%,I%)
  470ENDCASE
  480ENDPROC
  490:
  500DEFPROCkey_press(I%,X%,C%)
  510CASE C% OF
  520 WHEN 13   : IF I%=13 SYS "Wimp_SetCaretPosition",-1 ELSE PROCcaret_to((I%+4)MOD16,0)
  530 WHEN &18E : PROCcaret_to((I%+4)MOD16,X%)
  540 WHEN &18F : PROCcaret_to((I%+12)MOD16,X%)
  550ENDCASE
  560ENDPROC
  570:
  580DEFPROCmenu_select(S1%,S2%)
  590SYS "Wimp_GetPointerInfo",,block%:stay%=(block%!8=1)
  600CASE S1% OF
  610 WHEN 0 : IF menu_window%<>-2 PROCstart_new_game(S2%)
  620 WHEN 1 : IF menu_window%=-2 quit%=TRUE
  630 WHEN 2 : FOR player%=0 TO 3:PROCwrite_string(player%,2,"0"):NEXT
  640ENDCASE
  650IF stay% SYS "Wimp_CreateMenu",,b_menu%
  660ENDPROC
  670:
  680DEFPROCmessage(M%)
  690CASE M% OF
  700 WHEN 0 : quit%=TRUE
  710 WHEN &400C0 : PROCcreate_submenu(block%!20,block%!24,block%!28,block%!32,block%!36)
  720ENDCASE
  730ENDPROC
  740:
  750*** button clicks
  760:
  770DEFPROCsa_click(W%,I%)
  780CASE W% OF
  790 WHEN -2 : PROCshow_window(w_players%):PROCshow_window(w_main%)
  800 WHEN w_players% : PROCplayer_window_click(I%-1)
  810 WHEN w_doms% : PROCdomino_click(turn%*7+I%DIV3,I%MOD3)
  820ENDCASE
  830ENDPROC
  840:
  850DEFPROCmenu_click(W%,X%,Y%)
  860menu_window%=W%
  870CASE W% OF
  880 WHEN -2 : PROCcreate_icon_bar_menu:Y%=184
  890 OTHERWISE : PROCcreate_main_menu
  900ENDCASE
  910SYS "Wimp_CreateMenu",,b_menu%,X%,Y%
  920ENDPROC
  930:
  940DEFPROCplayer_window_click(I%)
  950IF I%<16 THEN
  960 player%=I%DIV4
  970 CASE I%MOD4 OF
  980  WHEN 1 : PROCstate_click(state%(player%))
  990  WHEN 3 : IF player%=turn% PROCmessage_click
 1000 ENDCASE
 1010ELSE
 1020 dom%=I%-16:player%=dom% DIV 7
 1030 IF player%=turn% AND state%(player%)=0 PROCdomino_click(dom%,0)
 1040ENDIF
 1050ENDPROC
 1060:
 1070DEFPROCstate_click(RETURN state%)
 1080CASE state% OF
 1090 WHEN 0 : state%=1
 1100 WHEN 1 : IF num_playing%>2 PROCplayer_out ELSE state%=0
 1110 WHEN 2 : state%=0:num_playing%+=1
 1120ENDCASE
 1130PROCwrite_string(player%,1,state$(state%))
 1140ENDPROC
 1150:
 1160DEFPROCmessage_click
 1170CASE TRUE OF
 1180 WHEN not_gone%>num_playing% : PROCadd_dot_totals
 1190 WHEN NOT can_go%            : PROCnext_player
 1200 WHEN state%(turn%)=0        : PROCshow_dominoes(turn%,!block%,block%!4)
 1210 WHEN state%(turn%)=1        : PROCarchie_turn
 1220ENDCASE
 1230ENDPROC
 1240:
 1250DEFPROCdomino_click(dom%,part%)
 1260L%=domino%(dom%,0):R%=domino%(dom%,1)
 1270IF part%=2 SWAP L%,R%
 1280CASE TRUE OF
 1290 WHEN played%=0 : PROCplay_first_domino
 1300 WHEN L%=ldots% : PROCadd_domino_to_left(R%,L%)
 1310 WHEN L%=rdots% : PROCadd_domino_to_right(L%,R%)
 1320 WHEN R%=ldots% : PROCadd_domino_to_left(L%,R%)
 1330 WHEN R%=rdots% : PROCadd_domino_to_right(R%,L%)
 1340 OTHERWISE VDU7
 1350ENDCASE
 1360ENDPROC
 1370:
 1380*** menu creation
 1390:
 1400DEFPROCcreate_submenu(submenu%,X%,Y%,S1%,S2%)
 1410CASE S1% OF
 1420 WHEN 0 : PROCcreate_restart_menu
 1430 WHEN 1 : IF S2%=-1 PROCcreate_dominoes_menu ELSE A%=FNfill_w_doms(S2%)
 1440ENDCASE
 1450SYS "Wimp_CreateSubMenu",,submenu%,X%,Y%
 1460ENDPROC
 1470:
 1480DEFPROCcreate_icon_bar_menu
 1490PROCcreate_menu(b_menu%,"3D Dominoes",144)
 1500PROCmenu_item("Info",0,w_info%,0)
 1510PROCmenu_item("Quit",&80,-1,0)
 1520ENDPROC
 1530:
 1540DEFPROCcreate_main_menu
 1550PROCcreate_menu(b_menu%,"3D Dominoes",192)
 1560PROCmenu_item("Restart",8,b_submenu%,0)
 1570PROCmenu_item("Dominoes",8,b_submenu%,played%>0)
 1580PROCmenu_item("Zero scores",&80,-1,0)
 1590ENDPROC
 1600:
 1610DEFPROCcreate_restart_menu
 1620PROCcreate_menu(b_submenu%,"Starter",0)
 1630PROCmenu_item("In turn",0,-1,0)
 1640PROCmenu_item("Random",2,-1,0)
 1650width%=7
 1660FOR player%=0 TO 3
 1670name$=FNget_string(player%,0)
 1680IF LEN(name$)>width% width%=LEN(name$)
 1690PROCmenu_item(name$,0,-1,state%(player%)=2)
 1700NEXT
 1710I%!-24=&80
 1720b_submenu%!16=width%*16+16
 1730ENDPROC
 1740:
 1750DEFPROCcreate_dominoes_menu
 1760PROCcreate_menu(submenu%,"Dominoes",0)
 1770width%=8
 1780FOR player%=0 TO 3
 1790name$=FNget_string(player%,0)
 1800IF LEN(name$)>width% width%=LEN(name$)
 1810PROCmenu_item(name$,8,w_doms%,state%(player%)=2 OR last%(player%)<player%*7)
 1820NEXT
 1830I%!-24=&88
 1840b_submenu%!16=width%*16+16
 1850ENDPROC
 1860:
 1870*** player functions
 1880:
 1890DEFPROCnext_player
 1900PROCwrite_string(turn%,3,"")
 1910REPEAT
 1920 turn%=(turn%+1)MOD4
 1930UNTIL state%(turn%)<>2
 1940dom%=turn%*7
 1950REPEAT
 1960 L%=domino%(dom%,0):R%=domino%(dom%,1)
 1970 can_go%=(played%=0 OR L%=ldots% OR L%=rdots% OR R%=ldots% OR R%=rdots%)
 1980 dom%+=1
 1990UNTIL can_go% OR dom%>last%(turn%)
 2000IF can_go% A$=FNcan_go ELSE A$=FNcannot_go
 2010PROCwrite_string(turn%,3,A$)
 2020ENDPROC
 2030:
 2040DEFFNcan_go
 2050not_gone%=0
 2060=can_go$(state%(turn%))
 2070:
 2080DEFFNcannot_go
 2090not_gone%+=1
 2100IF not_gone%>num_playing% ="No-one can go, click to add dots"
 2110=cannot_go$(state%(turn%))
 2120:
 2130DEFPROCplayer_out
 2140state%=2
 2150num_playing%-=1
 2160IF player%=turn% PROCnext_player
 2170ENDPROC
 2180:
 2190*** archie's turn
 2200:
 2210DEFPROCarchie_turn
 2220max_dots%=-1
 2230play_dom%=0
 2240FOR dom%=turn%*7 TO last%(turn%)
 2250L%=domino%(dom%,0):R%=domino%(dom%,1)
 2260IF (played%=0 OR L%=ldots% OR L%=rdots% OR R%=ldots% OR R%=rdots%) AND L%+R%>max_dots% max_dots%=L%+R%:play_dom%=dom%:side%=-2*(L%<R%)
 2270NEXT
 2280PROCdomino_click(play_dom%,side%)
 2290ENDPROC
 2300:
 2310*** show dominoes
 2320:
 2330DEFPROCshow_dominoes(player%,X%,Y%)
 2340SYS "Wimp_CreateMenu",,w_doms%,X%-FNfill_w_doms(player%),Y%+64
 2350ENDPROC
 2360:
 2370DEFFNfill_w_doms(player%)
 2380!block%=w_doms%:SYS "Wimp_GetWindowInfo",,block%
 2390SYS "Wimp_DeleteWindow",,block%
 2400width%=(last%(player%)-player%*7)*150+158
 2410block%!12=block%!4+width%:block%!88=0
 2420SYS "Wimp_CreateWindow",,block%+4 TO w_doms%
 2430x%=4
 2440FOR dom%=player%*7 TO last%(player%)
 2450 A%=FNcreate_icon(w_doms%,"dom1",x%,-124,150,120,&3002)
 2460 A%=FNcreate_icon(w_doms%,dot$(domino%(dom%,0),0),x%+20,-92,62,44,&3002)
 2470 A%=FNcreate_icon(w_doms%,dot$(domino%(dom%,1),0),x%+68,-60,62,44,&3002)
 2480 x%+=150
 2490NEXT
 2500=width%/2
 2510:
 2520*** domino playing
 2530:
 2540DEFPROCplay_first_domino
 2550PROCcreate_domino(0,-22,1,L%,R%)
 2560ldots%=L%:rdots%=R%
 2570PROCdomino_played
 2580ENDPROC
 2590:
 2600DEFPROCadd_domino_to_left(L%,R%)
 2610ldots%=L%
 2620IF ldir%=0 SWAP L%,R%
 2630double%=(L%=R% AND ((ldir%=0 AND ly%>-28 AND ly%<-14) OR (ldir%=2 AND ly%>-36 AND ly%<-10)))
 2640PROCadd_domino(lx%,ly%,ldir%,lshape%,L%,R%,double%)
 2650CASE ldir% OF
 2660 WHEN 0 : IF ly%=-12 ldir%=3:lx%-=2:lshape%=8
 2670          IF ly%=-10 ldir%=3:lx%-=6:lshape%=9
 2680 WHEN 2 : IF ly%=-38 ldir%=3:ly%+=2:lshape%=6
 2690          IF ly%=-40 ldir%=3:ly%+=6:lshape%=7
 2700 WHEN 3 : IF ly%=-28 ldir%=0:lx%+=6:lshape%=4
 2710          IF ly%=-30 ldir%=0:lx%+=2:lshape%=3
 2720          IF ly%=-6  ldir%=2:ly%-=2:lshape%=5
 2730          IF ly%=-4  ldir%=2:ly%-=6:lshape%=1
 2740ENDCASE
 2750PROCdomino_played
 2760ENDPROC
 2770:
 2780DEFPROCadd_domino_to_right(L%,R%)
 2790rdots%=R%
 2800IF rdir%=2 SWAP L%,R%
 2810double%=(L%=R% AND ((rdir%=0 AND ry%>-34 AND ry%<-8) OR (rdir%=2 AND ry%>-30 AND ry%<-16)))
 2820PROCadd_domino(rx%,ry%,rdir%,rshape%,L%,R%,double%)
 2830CASE rdir% OF
 2840 WHEN 0 : IF ry%=-4  rdir%=1:ry%-=6:rshape%=6
 2850          IF ry%=-6  rdir%=1:ry%-=2:rshape%=10
 2860 WHEN 1 : IF ry%=-14 rdir%=2:rx%-=2:rshape%=1
 2870          IF ry%=-16 rdir%=2:rx%-=6:rshape%=1
 2880          IF ry%=-40 rdir%=0:ry%+=6:rshape%=2
 2890          IF ry%=-38 rdir%=0:ry%+=2:rshape%=1
 2900 WHEN 2 : IF ry%=-34 rdir%=1:rx%+=6:rshape%=6
 2910          IF ry%=-32 rdir%=1:rx%+=2:rshape%=6
 2920ENDCASE
 2930PROCdomino_played
 2940ENDPROC
 2950:
 2960DEFPROCadd_domino(RETURN X%,RETURN Y%,dir%,RETURN shape%,L%,R%,double%)
 2970IF double% PROCadd_double ELSE PROCadd_single
 2980ENDPROC
 2990:
 3000DEFPROCadd_double
 3010CASE dir% OF
 3020 WHEN 0 : PROCcreate_domino(X%-1,Y%-1,11,L%,R%):X%+=2:Y%+=2:shape%=4
 3030 WHEN 2 : PROCcreate_domino(X%+1,Y%+1,6,L%,R%):X%-=2:Y%-=2
 3040ENDCASE
 3050ENDPROC
 3060:
 3070DEFPROCadd_single
 3080PROCcreate_domino(X%,Y%,shape%,L%,R%)
 3090CASE dir% OF
 3100 WHEN 0 : X%+=4:Y%+=4:shape%=2
 3110 WHEN 1 : X%+=4:Y%-=4:shape%=6
 3120 WHEN 2 : X%-=4:Y%-=4:shape%=1
 3130 WHEN 3 : X%-=4:Y%+=4:shape%=7
 3140ENDCASE
 3150ENDPROC
 3160:
 3170DEFPROCcreate_domino(X%,Y%,shape%,L%,R%)
 3180X%=X%*24+12:Y%=Y%*16+4
 3190IF  X%-10<lmin% PROCchange_shape(X%-10)
 3200IF X%+160>rmax% PROCchange_shape(X%+160)
 3210D%=FNcreate_icon(w_main%,"dom"+STR$shape%,X%,Y%,150,120,2)
 3220IF shape%<6 THEN
 3230 A%=FNcreate_icon(w_main%,dot$(L%,0),X%+20,Y%+32,62,44,2)
 3240 A%=FNcreate_icon(w_main%,dot$(R%,0),X%+68,Y%+64,62,44,2)
 3250ELSE
 3260 A%=FNcreate_icon(w_main%,dot$(L%,1),X%+20,Y%+64,62,44,2)
 3270 A%=FNcreate_icon(w_main%,dot$(R%,1),X%+68,Y%+32,62,44,2)
 3280ENDIF
 3290PROCset_icon_state(w_main%,D%,0,0)
 3300ENDPROC
 3310:
 3320DEFPROCdomino_played
 3330played%+=1
 3340PROCclose_window(w_doms%)
 3350IF dom%<>last%(turn%) FOR D%=dom% TO last%(turn%)-1:domino%(D%,0)=domino%(D%+1,0):domino%(D%,1)=domino%(D%+1,1):NEXT
 3360PROCset_icon_state(w_players%,17+last%(turn%),&F002,0)
 3370last%(turn%)-=1
 3380IF last%(turn%)<turn%*7 THEN
 3390 PROCwrite_string(turn%,3,"The winner"):PROCinc_score(turn%)
 3400ELSE
 3410 PROCnext_player
 3420ENDIF
 3430ENDPROC
 3440:
 3450*** game over functions
 3460:
 3470DEFPROCinc_score(player%)
 3480turn%=-1
 3490played%=0
 3500S%=VAL(FNget_string(player%,2))
 3510PROCwrite_string(player%,2,STR$(S%+1))
 3520ENDPROC
 3530:
 3540DEFPROCadd_dot_totals
 3550dots%()=0
 3560FOR player%=0 TO 3
 3570FOR dom%=player%*7 TO last%(player%)
 3580dots%(player%)+=domino%(dom%,0)+domino%(dom%,1)
 3590NEXT,
 3600win_total%=99
 3610FOR player%=0 TO 3
 3620IF state%(player%)<2 THEN
 3630 IF dots%(player%)=win_total% draw%=TRUE
 3640 IF dots%(player%)<win_total% win_total%=dots%(player%):draw%=FALSE
 3650ENDIF
 3660NEXT
 3670FOR player%=0 TO 3
 3680IF state%(player%)<2 THEN
 3690 won%=(dots%(player%)=win_total%)
 3700 CASE TRUE OF
 3710  WHEN won% AND NOT draw% : A$="The winner with "
 3720  WHEN won% : A$="Drawn with "
 3730  OTHERWISE : A$=""
 3740 ENDCASE
 3750 A$+=STR$dots%(player%)+" dot"
 3760 IF dots%(player%)<>1 A$+="s"
 3770 PROCwrite_string(player%,3,A$)
 3780 IF won% PROCinc_score(player%)
 3790ENDIF
 3800NEXT
 3810ENDPROC
 3820:
 3830*** misc utils
 3840:
 3850DEFPROCchange_shape(X%)
 3860IF X%<0 lmin%=X%:X%=-9999 ELSE rmax%=X%:X%=9999
 3870mid%=lmin%+(rmax%-lmin%)/2
 3880half%=(rmax%-lmin%)/2:IF half%<638 half%=638
 3890PROCset_extent(w_main%,mid%-half%,-572,mid%+half%,0)
 3900PROCscroll(w_main%,X%)
 3910ENDPROC
 3920:
 3930*** restart
 3940:
 3950DEFPROCstart_new_game(who%)
 3960REPEAT
 3970 CASE who% OF
 3980  WHEN -1,0 : starter%=(starter%+1)MOD4
 3990  WHEN 1 : starter%=RND(4)-1
 4000  OTHERWISE : starter%=who%-2
 4010 ENDCASE
 4020UNTIL state%(starter%)<>2
 4030:
 4040turn%=starter%          :REM whose turn is it
 4050lx%=-4    :rx%=4        :REM x coordinate of left and right ends
 4060ly%=-26   :ry%=-18      :REM y coordinate of left and right ends
 4070ldots%=-1 :rdots%=-1    :REM number of dots at each end of line
 4080ldir%=2   :rdir%=0      :REM direction at each end
 4090lshape%=1 :rshape%=2    :REM domino shape at each end
 4100lmin%=0   :rmax%=0      :REM left and right extent of domino line
 4110can_go%=TRUE            :REM can the player go?
 4120not_gone%=0             :REM num of players in a row who haven't gone
 4130played%=0               :REM num of dominoes played
 4140PROCcreate_domino_set
 4150PROCshuffle_dominoes
 4160:
 4170FOR player%=0 TO 3
 4180 PROCwrite_string(player%,3,"")
 4190 last%(player%)=player%*7+6
 4200NEXT
 4210PROCwrite_string(starter%,3,can_go$(state%(turn%)))
 4220FOR icon%=0 TO 84:PROCdelete_icon(w_main%,icon%):NEXT
 4230:
 4240PROCset_extent(w_main%,-638,-572,638,0)
 4250SYS "Wimp_ForceRedraw",w_main%,-638,-572,638,0
 4260PROCscroll(w_main%,-638)
 4270ENDPROC
 4280:
 4290DEFPROCcreate_domino_set
 4300dom%=0
 4310FOR left%=0 TO 6:FOR right%=left% TO 6
 4320domino%(dom%,0)=left%:domino%(dom%,1)=right%
 4330PROCset_icon_state(w_players%,dom%+17,&3002,&3002)
 4340dom%+=1
 4350NEXT,
 4360ENDPROC
 4370:
 4380DEFPROCshuffle_dominoes
 4390FOR dom%=0 TO 27
 4400swap%=RND(28)-1
 4410SWAP domino%(dom%,0),domino%(swap%,0)
 4420SWAP domino%(dom%,1),domino%(swap%,1)
 4430IF RND(2)=1 SWAP domino%(dom%,0),domino%(dom%,1)
 4440NEXT
 4450ENDPROC
 4460:
 4470*** domino utils
 4480:
 4490DEFPROCwrite_string(player%,icon%,string$)
 4500$(FNaddr(player%,icon%))=string$
 4510PROCset_icon_state(w_players%,1+player%*4+icon%,0,0)
 4520ENDPROC
 4530:
 4540DEFFNget_string(player%,icon%)
 4550=$FNaddr(player%,icon%)
 4560:
 4570DEFFNaddr(player%,icon)
 4580=b_players%+90+58*player%-11*(icon%=1)-18*(icon%=2)-21*(icon%=3)
 4590:
 4600*** wimp utils
 4610:
 4620DEFPROCset_extent(W%,!block%,block%!4,block%!8,block%!12)
 4630SYS "Wimp_SetExtent",W%,block%
 4640ENDPROC
 4650:
 4660DEFPROCscroll(!block%,S%)
 4670SYS "Wimp_GetWindowState",,block%
 4680scroll%=S%:block%!20=S%
 4690SYS "Wimp_OpenWindow",,block%
 4700ENDPROC
 4710:
 4720DEFPROCcaret_to(I%,X%)
 4730SYS "Wimp_SetCaretPosition",w_players%,I%,X%,0,-1,-1
 4740ENDPROC
 4750:
 4760DEFPROCdelete_icon(!block%,block%!4)
 4770SYS "Wimp_DeleteIcon",,block%
 4780ENDPROC
 4790:
 4800DEFPROCset_icon_state(!block%,block%!4,block%!12,block%!8)
 4810SYS "Wimp_SetIconState",,block%
 4820ENDPROC
 4830:
 4840*** error
 4850:
 4860DEFPROCerror(!block%,$(block%+4))
 4870SYS "Wimp_ReportError",block%,1,"3D Dominoes"
 4880ENDPROC
 4890:
 4900*** initialisation
 4910:
 4920DEFPROCinitialise
 4930SYS "Wimp_Initialise",200,&4B534154,"3D Dominoes (MCI)"
 4940:
 4950DIM block% 2000,b_menu% 28+3*24,b_submenu% 28+6*24
 4960:
 4970PROCload_sprites
 4980:
 4990A%=FNcreate_icon(-1,"!3d-doms",0,0,78,68,&3002)
 5000:
 5010SYS "Wimp_OpenTemplate",,"<Obey$Dir>.Templates"
 5020PROCload_window("main",A%,0,w_main%)
 5030PROCload_window("players",b_players%,400,w_players%)
 5040PROCload_window("dominoes",A%,0,w_doms%)
 5050PROCload_window("info",A%,256,w_info%)
 5060SYS "Wimp_CloseTemplate"
 5070:
 5080quit%=FALSE
 5090DIM dot$(6,1)      :REM sprite names for dots in both directions
 5100DATA 0,0,1,1,21,22,31,32,4,4,5,5,61,62
 5110FOR D%=0 TO 6:READ dot$(D%,0),dot$(D%,1):NEXT
 5120DIM domino%(27,1)  :REM domino set 00,01,02,03,04...44,45,46,55,56,66
 5130DIM last%(3)       :REM number of each player's last domino (0-27)
 5140DIM dots%(3)       :REM total no. dots each player has after a draw
 5150num_playing%=2     :REM number of players playing
 5160DIM state$(2):state$()="human","archie","out"
 5170DIM state%(3):state%()=0,1,2,2
 5180DIM can_go$(1):can_go$()="Your turn, click to see dominoes","My turn, click to see my move"
 5190DIM cannot_go$(1):cannot_go$()="You're knocking, click to confirm","I'm knocking, click for next player"
 5200:
 5210PROCstart_new_game(1)
 5220PROCclose_window(w_players%)
 5230ENDPROC
 5240:
 5250DEFPROCload_sprites
 5260DIM spr% 30815
 5270spr%!0=30816:spr%!4=0:spr%!8=16:spr%!12=16
 5280SYS "OS_SpriteOp",&10A,spr%,"<Obey$Dir>.Sprites"
 5290FOR sprite%=1 TO 5
 5300SYS "OS_SpriteOp",&11B,spr%,"dom"+STR$(sprite%),"dom"+STR$(sprite%+5)
 5310SYS "OS_SpriteOp",&12F,spr%,"dom"+STR$(sprite%+5)
 5320NEXT
 5330ENDPROC
 5340:
 5350*** wimp creators
 5360:
 5370DEFPROCload_window(name$,RETURN buff%,len%,RETURN handle%)
 5380IF len%>0 DIM buff% len%-1
 5390SYS "Wimp_LoadTemplate",,block%,buff%,buff%+len%,-1,name$,0
 5400IF name$="players" FOR player%=0 TO 3:block%!(176+128*player%)=spr%:NEXT
 5410block%!64=spr%
 5420SYS "Wimp_CreateWindow",,block% TO handle%
 5430ENDPROC
 5440:
 5450DEFPROCshow_window(!block%)
 5460SYS "Wimp_GetWindowState",,block%
 5470block%!28=-1
 5480SYS "Wimp_OpenWindow",,block%
 5490ENDPROC
 5500:
 5510DEFFNcreate_icon(!block%,text$,X%,Y%,W%,H%,block%!20)
 5520block%!4=X%:block%!12=X%+W%
 5530block%!8=Y%:block%!16=Y%+H%
 5540$(block%+24)=text$
 5550SYS "Wimp_CreateIcon",,block% TO I%
 5560=I%
 5570:
 5580DEFPROCcreate_menu(M%,title$,width%)
 5590$M%=title$
 5600M%!12=&70207:M%!16=width%
 5610M%!20=44:M%!24=0:I%=M%+28
 5620ENDPROC
 5630:
 5640DEFPROCmenu_item(item$,flag%,sub%,shaded%)
 5650!I%=flag%::I%!4=sub%
 5660I%!8=&7000021 OR (&400000 AND shaded%)
 5670$(I%+12)=item$:I%+=24
 5680ENDPROC

� >!RunImage
(� Desktop three-dimensional dominoes
%� By M.C.Ironmonger, October 1990
#&� � Archimedes World November 1991
(:
2%� � �error(�,�$+" at line "+Þ):�
<�initialise
F:
P�
Z%ș "Wimp_Poll",&81823,block% � R%
dȎ R% �
n  � 2 : �open_window(!block%)
x! � 3 : �close_window(!block%)
�3 � 4 : � !block%=w_doms% �close_window(w_doms%)
�6 � 6 : �button_click(block%!8,block%!12,block%!16)
�2 � 8 : �key_press(block%!4,block%!8,block%!24)
�) � 9 : �menu_select(!block%,block%!4)
�" � 17,18 : �message(block%!16)
��
�� quit%
�ș "Wimp_CloseDown"
��
�:
�*** reason codes
�:
���open_window(W%)
Ȏ W% �
 � w_players% : Y%=block%!8
'  !block%=w_main%:block%!20=scroll%
""  block%!8-=576:block%!16-=232
,"  ș "Wimp_OpenWindow",,block%
6  !block%=w_players%
@"  block%!8+=576:block%!16+=232
J" � w_main% : scroll%=block%!20
T�
^ ș "Wimp_OpenWindow",,block%
h�
r:
|��close_window(!block%)
�!ș "Wimp_CloseWindow",,block%
�/� !block%=w_players% �close_window(w_main%)
��
�:
���button_click(B%,W%,I%)
�Ȏ B% �
�1 � 2 : �menu_click(W%,!block%-64,block%!4+12)
� � 1,4 : �sa_click(W%,I%)
��
��
�:
���key_press(I%,X%,C%)
�Ȏ C% �
L � 13   : � I%=13 ș "Wimp_SetCaretPosition",-1 � �caret_to((I%+4)�16,0)
% � &18E : �caret_to((I%+4)�16,X%)
& � &18F : �caret_to((I%+12)�16,X%)
&�
0�
::
D��menu_select(S1%,S2%)
N7ș "Wimp_GetPointerInfo",,block%:stay%=(block%!8=1)
XȎ S1% �
b2 � 0 : � menu_window%<>-2 �start_new_game(S2%)
l$ � 1 : � menu_window%=-2 quit%=�
v9 � 2 : � player%=0 � 3:�write_string(player%,2,"0"):�
��
�)� stay% ș "Wimp_CreateMenu",,b_menu%
��
�:
���message(M%)
�Ȏ M% �
� � 0 : quit%=�
�R � &400C0 : �create_submenu(block%!20,block%!24,block%!28,block%!32,block%!36)
��
��
�:
�*** button clicks
�:
��sa_click(W%,I%)
Ȏ W% �
: � -2 : �show_window(w_players%):�show_window(w_main%)
 . � w_players% : �player_window_click(I%-1)
*1 � w_doms% : �domino_click(turn%*7+I%�3,I%�3)
4�
>�
H:
R��menu_click(W%,X%,Y%)
\menu_window%=W%
fȎ W% �
p( � -2 : �create_icon_bar_menu:Y%=184
z  : �create_main_menu
��
�'ș "Wimp_CreateMenu",,b_menu%,X%,Y%
��
�:
���player_window_click(I%)
�
� I%<16 �
� player%=I%�4
� Ȏ I%�4 �
�)  � 1 : �state_click(state%(player%))
�*  � 3 : � player%=turn% �message_click
� �
��
�  dom%=I%-16:player%=dom% � 7
> � player%=turn% � state%(player%)=0 �domino_click(dom%,0)
�
�
$:
.��state_click(� state%)
8Ȏ state% �
B � 0 : state%=1
L2 � 1 : � num_playing%>2 �player_out � state%=0
V# � 2 : state%=0:num_playing%+=1
`�
j+�write_string(player%,1,state$(state%))
t�
~:
���message_click
�
Ȏ � �
�/ � not_gone%>num_playing% : �add_dot_totals
�* � � can_go%            : �next_player
�F � state%(turn%)=0        : �show_dominoes(turn%,!block%,block%!4)
�, � state%(turn%)=1        : �archie_turn
��
��
�:
���domino_click(dom%,part%)
�)L%=domino%(dom%,0):R%=domino%(dom%,1)
�� part%=2 Ȕ L%,R%

Ȏ � �

% � played%=0 : �play_first_domino
- � L%=ldots% : �add_domino_to_left(R%,L%)
. � L%=rdots% : �add_domino_to_right(L%,R%)
(- � R%=ldots% : �add_domino_to_left(L%,R%)
2. � R%=rdots% : �add_domino_to_right(R%,L%)
<	  �7
F�
P�
Z:
d*** menu creation
n:
x,��create_submenu(submenu%,X%,Y%,S1%,S2%)
�Ȏ S1% �
� � 0 : �create_restart_menu
�@ � 1 : � S2%=-1 �create_dominoes_menu � A%=�fill_w_doms(S2%)
��
�+ș "Wimp_CreateSubMenu",,submenu%,X%,Y%
��
�:
���create_icon_bar_menu
�+�create_menu(b_menu%,"3D Dominoes",144)
�"�menu_item("Info",0,w_info%,0)
��menu_item("Quit",&80,-1,0)
��
�:
��create_main_menu
+�create_menu(b_menu%,"3D Dominoes",192)
(�menu_item("Restart",8,b_submenu%,0)
"1�menu_item("Dominoes",8,b_submenu%,played%>0)
,&�menu_item("Zero scores",&80,-1,0)
6�
@:
J��create_restart_menu
T(�create_menu(b_submenu%,"Starter",0)
^ �menu_item("In turn",0,-1,0)
h�menu_item("Random",2,-1,0)
rwidth%=7
|� player%=0 � 3
� name$=�get_string(player%,0)
�%� �(name$)>width% width%=�(name$)
�,�menu_item(name$,0,-1,state%(player%)=2)
��
�I%!-24=&80
�b_submenu%!16=width%*16+16
��
�:
���create_dominoes_menu
�'�create_menu(submenu%,"Dominoes",0)
�width%=8
�� player%=0 � 3
� name$=�get_string(player%,0)
%� �(name$)>width% width%=�(name$)
L�menu_item(name$,8,w_doms%,state%(player%)=2 � last%(player%)<player%*7)
�
&I%!-24=&88
0b_submenu%!16=width%*16+16
:�
D:
N*** player functions
X:
b��next_player
l�write_string(turn%,3,"")
v�
� turn%=(turn%+1)�4
�� state%(turn%)<>2
�dom%=turn%*7
��
�* L%=domino%(dom%,0):R%=domino%(dom%,1)
�H can_go%=(played%=0 � L%=ldots% � L%=rdots% � R%=ldots% � R%=rdots%)
� dom%+=1
�!� can_go% � dom%>last%(turn%)
�(� can_go% A$=�can_go � A$=�cannot_go
��write_string(turn%,3,A$)
��
�:
�ݤcan_go
not_gone%=0
=can_go$(state%(turn%))
:
 ݤcannot_go
*not_gone%+=1
4@� not_gone%>num_playing% ="No-one can go, click to add dots"
>=cannot_go$(state%(turn%))
H:
R��player_out
\state%=2
fnum_playing%-=1
p � player%=turn% �next_player
z�
�:
�*** archie's turn
�:
���archie_turn
�max_dots%=-1
�play_dom%=0
�!� dom%=turn%*7 � last%(turn%)
�)L%=domino%(dom%,0):R%=domino%(dom%,1)
ԃ� (played%=0 � L%=ldots% � L%=rdots% � R%=ldots% � R%=rdots%) � L%+R%>max_dots% max_dots%=L%+R%:play_dom%=dom%:side%=-2*(L%<R%)
��
�"�domino_click(play_dom%,side%)
��
�:
	*** show dominoes
	:
	"��show_dominoes(player%,X%,Y%)
	$@ș "Wimp_CreateMenu",,w_doms%,X%-�fill_w_doms(player%),Y%+64
	.�
	8:
	Bݤfill_w_doms(player%)
	L3!block%=w_doms%:ș "Wimp_GetWindowInfo",,block%
	V"ș "Wimp_DeleteWindow",,block%
	`-width%=(last%(player%)-player%*7)*150+158
	j)block%!12=block%!4+width%:block%!88=0
	t.ș "Wimp_CreateWindow",,block%+4 � w_doms%
	~x%=4
	�%� dom%=player%*7 � last%(player%)
	�: A%=�create_icon(w_doms%,"dom1",x%,-124,150,120,&3002)
	�K A%=�create_icon(w_doms%,dot$(domino%(dom%,0),0),x%+20,-92,62,44,&3002)
	�K A%=�create_icon(w_doms%,dot$(domino%(dom%,1),0),x%+68,-60,62,44,&3002)
	� x%+=150
	��
	�
=width%/2
	�:
	�*** domino playing
	�:
	���play_first_domino
	�!�create_domino(0,-22,1,L%,R%)
ldots%=L%:rdots%=R%

�domino_played
�
:
(��add_domino_to_left(L%,R%)
2
ldots%=L%
<� ldir%=0 Ȕ L%,R%
FUdouble%=(L%=R% � ((ldir%=0 � ly%>-28 � ly%<-14) � (ldir%=2 � ly%>-36 � ly%<-10)))
P4�add_domino(lx%,ly%,ldir%,lshape%,L%,R%,double%)
ZȎ ldir% �
d- � 0 : � ly%=-12 ldir%=3:lx%-=2:lshape%=8
n0          � ly%=-10 ldir%=3:lx%-=6:lshape%=9
x- � 2 : � ly%=-38 ldir%=3:ly%+=2:lshape%=6
�0          � ly%=-40 ldir%=3:ly%+=6:lshape%=7
�- � 3 : � ly%=-28 ldir%=0:lx%+=6:lshape%=4
�0          � ly%=-30 ldir%=0:lx%+=2:lshape%=3
�0          � ly%=-6  ldir%=2:ly%-=2:lshape%=5
�0          � ly%=-4  ldir%=2:ly%-=6:lshape%=1
��
��domino_played
��
�:
� ��add_domino_to_right(L%,R%)
�
rdots%=R%
�� rdir%=2 Ȕ L%,R%
�Tdouble%=(L%=R% � ((rdir%=0 � ry%>-34 � ry%<-8) � (rdir%=2 � ry%>-30 � ry%<-16)))
4�add_domino(rx%,ry%,rdir%,rshape%,L%,R%,double%)
Ȏ rdir% �
- � 0 : � ry%=-4  rdir%=1:ry%-=6:rshape%=6
"1          � ry%=-6  rdir%=1:ry%-=2:rshape%=10
,- � 1 : � ry%=-14 rdir%=2:rx%-=2:rshape%=1
60          � ry%=-16 rdir%=2:rx%-=6:rshape%=1
@0          � ry%=-40 rdir%=0:ry%+=6:rshape%=2
J0          � ry%=-38 rdir%=0:ry%+=2:rshape%=1
T- � 2 : � ry%=-34 rdir%=1:rx%+=6:rshape%=6
^0          � ry%=-32 rdir%=1:rx%+=2:rshape%=6
h�
r�domino_played
|�
�:
�7��add_domino(� X%,� Y%,dir%,� shape%,L%,R%,double%)
�'� double% �add_double � �add_single
��
�:
���add_double
�
Ȏ dir% �
�B � 0 : �create_domino(X%-1,Y%-1,11,L%,R%):X%+=2:Y%+=2:shape%=4
�8 � 2 : �create_domino(X%+1,Y%+1,6,L%,R%):X%-=2:Y%-=2
��
��
�:
���add_single
&�create_domino(X%,Y%,shape%,L%,R%)

Ȏ dir% �
 � 0 : X%+=4:Y%+=4:shape%=2
& � 1 : X%+=4:Y%-=4:shape%=6
0 � 2 : X%-=4:Y%-=4:shape%=1
: � 3 : X%-=4:Y%+=4:shape%=7
D�
N�
X:
b'��create_domino(X%,Y%,shape%,L%,R%)
lX%=X%*24+12:Y%=Y%*16+4
v'�  X%-10<lmin% �change_shape(X%-10)
�(� X%+160>rmax% �change_shape(X%+160)
�:D%=�create_icon(w_main%,"dom"+�shape%,X%,Y%,150,120,2)
�� shape%<6 �
�< A%=�create_icon(w_main%,dot$(L%,0),X%+20,Y%+32,62,44,2)
�< A%=�create_icon(w_main%,dot$(R%,0),X%+68,Y%+64,62,44,2)
��
�< A%=�create_icon(w_main%,dot$(L%,1),X%+20,Y%+64,62,44,2)
�< A%=�create_icon(w_main%,dot$(R%,1),X%+68,Y%+32,62,44,2)
��
�#�set_icon_state(w_main%,D%,0,0)
��
�:
���domino_played

played%+=1

�close_window(w_doms%)

q� dom%<>last%(turn%) � D%=dom% � last%(turn%)-1:domino%(D%,0)=domino%(D%+1,0):domino%(D%,1)=domino%(D%+1,1):�

 7�set_icon_state(w_players%,17+last%(turn%),&F002,0)

*last%(turn%)-=1

4� last%(turn%)<turn%*7 �

>: �write_string(turn%,3,"The winner"):�inc_score(turn%)

H�

R �next_player

\�

f�

p:

z*** game over functions

�:

���inc_score(player%)

�turn%=-1

�
played%=0

� S%=�(�get_string(player%,2))

�$�write_string(player%,2,�(S%+1))

��

�:

���add_dot_totals

�
dots%()=0

�� player%=0 � 3

�%� dom%=player%*7 � last%(player%)

�3dots%(player%)+=domino%(dom%,0)+domino%(dom%,1)
�,
win_total%=99
� player%=0 � 3
$� state%(player%)<2 �
.( � dots%(player%)=win_total% draw%=�
8B � dots%(player%)<win_total% win_total%=dots%(player%):draw%=�
B�
L�
V� player%=0 � 3
`� state%(player%)<2 �
j% won%=(dots%(player%)=win_total%)
t Ȏ � �
~.  � won% � � draw% : A$="The winner with "
�  � won% : A$="Drawn with "
�   : A$=""
� �
� A$+=�dots%(player%)+" dot"
�  � dots%(player%)<>1 A$+="s"
�  �write_string(player%,3,A$)
� � won% �inc_score(player%)
��
��
��
�:
�*** misc utils
:

��change_shape(X%)
/� X%<0 lmin%=X%:X%=-9999 � rmax%=X%:X%=9999
mid%=lmin%+(rmax%-lmin%)/2
(/half%=(rmax%-lmin%)/2:� half%<638 half%=638
25�set_extent(w_main%,mid%-half%,-572,mid%+half%,0)
<�scroll(w_main%,X%)
F�
P:
Z*** restart
d:
n��start_new_game(who%)
x�
� Ȏ who% �
�&  � -1,0 : starter%=(starter%+1)�4
�  � 1 : starter%=�(4)-1
�   : starter%=who%-2
� �
�� state%(starter%)<>2
�:
�/turn%=starter%          :� whose turn is it
�Blx%=-4    :rx%=4        :� x coordinate of left and right ends
�Bly%=-26   :ry%=-18      :� y coordinate of left and right ends
�Aldots%=-1 :rdots%=-1    :� number of dots at each end of line
�4ldir%=2   :rdir%=0      :� direction at each end
�7lshape%=1 :rshape%=2    :� domino shape at each end
Clmin%=0   :rmax%=0      :� left and right extent of domino line
.can_go%=�            :� can the player go?
Gnot_gone%=0             :� num of players in a row who haven't gone
"5played%=0               :� num of dominoes played
,�create_domino_set
6�shuffle_dominoes
@:
J� player%=0 � 3
T  �write_string(player%,3,"")
^ last%(player%)=player%*7+6
h�
r4�write_string(starter%,3,can_go$(state%(turn%)))
|0� icon%=0 � 84:�delete_icon(w_main%,icon%):�
�:
�(�set_extent(w_main%,-638,-572,638,0)
�1ș "Wimp_ForceRedraw",w_main%,-638,-572,638,0
��scroll(w_main%,-638)
��
�:
���create_domino_set
�
dom%=0
�$� left%=0 � 6:� right%=left% � 6
�0domino%(dom%,0)=left%:domino%(dom%,1)=right%
�3�set_icon_state(w_players%,dom%+17,&3002,&3002)
�dom%+=1
��,
�
:
��shuffle_dominoes
&� dom%=0 � 27
0swap%=�(28)-1
:'Ȕ domino%(dom%,0),domino%(swap%,0)
D'Ȕ domino%(dom%,1),domino%(swap%,1)
N/� �(2)=1 Ȕ domino%(dom%,0),domino%(dom%,1)
X�
b�
l:
v*** domino utils
�:
�)��write_string(player%,icon%,string$)
�#$(�addr(player%,icon%))=string$
�5�set_icon_state(w_players%,1+player%*4+icon%,0,0)
��
�:
�ݤget_string(player%,icon%)
�=$�addr(player%,icon%)
�:
�ݤaddr(player%,icon)
�D=b_players%+90+58*player%-11*(icon%=1)-18*(icon%=2)-21*(icon%=3)
�:
�*** wimp utils
:
8��set_extent(W%,!block%,block%!4,block%!8,block%!12)
!ș "Wimp_SetExtent",W%,block%
 �
*:
4��scroll(!block%,S%)
>$ș "Wimp_GetWindowState",,block%
Hscroll%=S%:block%!20=S%
R ș "Wimp_OpenWindow",,block%
\�
f:
p��caret_to(I%,X%)
z7ș "Wimp_SetCaretPosition",w_players%,I%,X%,0,-1,-1
��
�:
�#��delete_icon(!block%,block%!4)
� ș "Wimp_DeleteIcon",,block%
��
�:
�9��set_icon_state(!block%,block%!4,block%!12,block%!8)
�"ș "Wimp_SetIconState",,block%
��
�:
�
*** error
�:
� ��error(!block%,$(block%+4))
0ș "Wimp_ReportError",block%,1,"3D Dominoes"
�
:
$*** initialisation
.:
8��initialise
B:ș "Wimp_Initialise",200,&4B534154,"3D Dominoes (MCI)"
L:
V4� block% 2000,b_menu% 28+3*24,b_submenu% 28+6*24
`:
j�load_sprites
t:
~2A%=�create_icon(-1,"!3d-doms",0,0,78,68,&3002)
�:
�2ș "Wimp_OpenTemplate",,"<Obey$Dir>.Templates"
�%�load_window("main",A%,0,w_main%)
�5�load_window("players",b_players%,400,w_players%)
�)�load_window("dominoes",A%,0,w_doms%)
�'�load_window("info",A%,256,w_info%)
�ș "Wimp_CloseTemplate"
�:
�quit%=�
�@� dot$(6,1)      :� sprite names for dots in both directions
�'� 0,0,1,1,21,22,31,32,4,4,5,5,61,62
�(� D%=0 � 6:� dot$(D%,0),dot$(D%,1):�
E� domino%(27,1)  :� domino set 00,01,02,03,04...44,45,46,55,56,66

B� last%(3)       :� number of each player's last domino (0-27)
C� dots%(3)       :� total no. dots each player has after a draw
3num_playing%=2     :� number of players playing
(/� state$(2):state$()="human","archie","out"
2 � state%(3):state%()=0,1,2,2
<]� can_go$(1):can_go$()="Your turn, click to see dominoes","My turn, click to see my move"
Fj� cannot_go$(1):cannot_go$()="You're knocking, click to confirm","I'm knocking, click for next player"
P:
Z�start_new_game(1)
d�close_window(w_players%)
n�
x:
���load_sprites
�� spr% 30815
�.spr%!0=30816:spr%!4=0:spr%!8=16:spr%!12=16
�3ș "OS_SpriteOp",&10A,spr%,"<Obey$Dir>.Sprites"
�� sprite%=1 � 5
�Bș "OS_SpriteOp",&11B,spr%,"dom"+�(sprite%),"dom"+�(sprite%+5)
�1ș "OS_SpriteOp",&12F,spr%,"dom"+�(sprite%+5)
��
��
�:
�*** wimp creators
�:
�/��load_window(name$,� buff%,len%,� handle%)
� len%>0 � buff% len%-1
>ș "Wimp_LoadTemplate",,block%,buff%,buff%+len%,-1,name$,0
E� name$="players" � player%=0 � 3:block%!(176+128*player%)=spr%:�
"block%!64=spr%
,,ș "Wimp_CreateWindow",,block% � handle%
6�
@:
J��show_window(!block%)
T$ș "Wimp_GetWindowState",,block%
^block%!28=-1
h ș "Wimp_OpenWindow",,block%
r�
|:
�6ݤcreate_icon(!block%,text$,X%,Y%,W%,H%,block%!20)
�block%!4=X%:block%!12=X%+W%
�block%!8=Y%:block%!16=Y%+H%
�$(block%+24)=text$
�%ș "Wimp_CreateIcon",,block% � I%
�=I%
�:
�#��create_menu(M%,title$,width%)
�$M%=title$
�M%!12=&70207:M%!16=width%
�M%!20=44:M%!24=0:I%=M%+28
��
�:
)��menu_item(item$,flag%,sub%,shaded%)
!I%=flag%::I%!4=sub%
'I%!8=&7000021 � (&400000 � shaded%)
&$(I%+12)=item$:I%+=24
0�
�
00000000  0d 00 0a 10 f4 20 3e 21  52 75 6e 49 6d 61 67 65  |..... >!RunImage|
00000010  0d 00 14 28 f4 20 44 65  73 6b 74 6f 70 20 74 68  |...(. Desktop th|
00000020  72 65 65 2d 64 69 6d 65  6e 73 69 6f 6e 61 6c 20  |ree-dimensional |
00000030  64 6f 6d 69 6e 6f 65 73  0d 00 1e 25 f4 20 42 79  |dominoes...%. By|
00000040  20 4d 2e 43 2e 49 72 6f  6e 6d 6f 6e 67 65 72 2c  | M.C.Ironmonger,|
00000050  20 4f 63 74 6f 62 65 72  20 31 39 39 30 0d 00 23  | October 1990..#|
00000060  26 f4 20 a9 20 41 72 63  68 69 6d 65 64 65 73 20  |&. . Archimedes |
00000070  57 6f 72 6c 64 20 4e 6f  76 65 6d 62 65 72 20 31  |World November 1|
00000080  39 39 31 0d 00 28 05 3a  0d 00 32 25 ee 20 85 20  |991..(.:..2%. . |
00000090  f2 65 72 72 6f 72 28 9f  2c f6 24 2b 22 20 61 74  |.error(.,.$+" at|
000000a0  20 6c 69 6e 65 20 22 2b  c3 9e 29 3a e0 0d 00 3c  | line "+..):...<|
000000b0  0f f2 69 6e 69 74 69 61  6c 69 73 65 0d 00 46 05  |..initialise..F.|
000000c0  3a 0d 00 50 05 f5 0d 00  5a 25 c8 99 20 22 57 69  |:..P....Z%.. "Wi|
000000d0  6d 70 5f 50 6f 6c 6c 22  2c 26 38 31 38 32 33 2c  |mp_Poll",&81823,|
000000e0  62 6c 6f 63 6b 25 20 b8  20 52 25 0d 00 64 0b c8  |block% . R%..d..|
000000f0  8e 20 52 25 20 ca 0d 00  6e 20 20 c9 20 32 20 3a  |. R% ...n  . 2 :|
00000100  20 f2 6f 70 65 6e 5f 77  69 6e 64 6f 77 28 21 62  | .open_window(!b|
00000110  6c 6f 63 6b 25 29 0d 00  78 21 20 c9 20 33 20 3a  |lock%)..x! . 3 :|
00000120  20 f2 63 6c 6f 73 65 5f  77 69 6e 64 6f 77 28 21  | .close_window(!|
00000130  62 6c 6f 63 6b 25 29 0d  00 82 33 20 c9 20 34 20  |block%)...3 . 4 |
00000140  3a 20 e7 20 21 62 6c 6f  63 6b 25 3d 77 5f 64 6f  |: . !block%=w_do|
00000150  6d 73 25 20 f2 63 6c 6f  73 65 5f 77 69 6e 64 6f  |ms% .close_windo|
00000160  77 28 77 5f 64 6f 6d 73  25 29 0d 00 8c 36 20 c9  |w(w_doms%)...6 .|
00000170  20 36 20 3a 20 f2 62 75  74 74 6f 6e 5f 63 6c 69  | 6 : .button_cli|
00000180  63 6b 28 62 6c 6f 63 6b  25 21 38 2c 62 6c 6f 63  |ck(block%!8,bloc|
00000190  6b 25 21 31 32 2c 62 6c  6f 63 6b 25 21 31 36 29  |k%!12,block%!16)|
000001a0  0d 00 96 32 20 c9 20 38  20 3a 20 f2 6b 65 79 5f  |...2 . 8 : .key_|
000001b0  70 72 65 73 73 28 62 6c  6f 63 6b 25 21 34 2c 62  |press(block%!4,b|
000001c0  6c 6f 63 6b 25 21 38 2c  62 6c 6f 63 6b 25 21 32  |lock%!8,block%!2|
000001d0  34 29 0d 00 a0 29 20 c9  20 39 20 3a 20 f2 6d 65  |4)...) . 9 : .me|
000001e0  6e 75 5f 73 65 6c 65 63  74 28 21 62 6c 6f 63 6b  |nu_select(!block|
000001f0  25 2c 62 6c 6f 63 6b 25  21 34 29 0d 00 aa 22 20  |%,block%!4)..." |
00000200  c9 20 31 37 2c 31 38 20  3a 20 f2 6d 65 73 73 61  |. 17,18 : .messa|
00000210  67 65 28 62 6c 6f 63 6b  25 21 31 36 29 0d 00 b4  |ge(block%!16)...|
00000220  05 cb 0d 00 be 0b fd 20  71 75 69 74 25 0d 00 c8  |....... quit%...|
00000230  17 c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 44  |... "Wimp_CloseD|
00000240  6f 77 6e 22 0d 00 d2 05  e0 0d 00 dc 05 3a 0d 00  |own".........:..|
00000250  e6 14 2a 2a 2a 20 72 65  61 73 6f 6e 20 63 6f 64  |..*** reason cod|
00000260  65 73 0d 00 f0 05 3a 0d  00 fa 15 dd f2 6f 70 65  |es....:......ope|
00000270  6e 5f 77 69 6e 64 6f 77  28 57 25 29 0d 01 04 0b  |n_window(W%)....|
00000280  c8 8e 20 57 25 20 ca 0d  01 0e 1f 20 c9 20 77 5f  |.. W% ..... . w_|
00000290  70 6c 61 79 65 72 73 25  20 3a 20 59 25 3d 62 6c  |players% : Y%=bl|
000002a0  6f 63 6b 25 21 38 0d 01  18 27 20 20 21 62 6c 6f  |ock%!8...'  !blo|
000002b0  63 6b 25 3d 77 5f 6d 61  69 6e 25 3a 62 6c 6f 63  |ck%=w_main%:bloc|
000002c0  6b 25 21 32 30 3d 73 63  72 6f 6c 6c 25 0d 01 22  |k%!20=scroll%.."|
000002d0  22 20 20 62 6c 6f 63 6b  25 21 38 2d 3d 35 37 36  |"  block%!8-=576|
000002e0  3a 62 6c 6f 63 6b 25 21  31 36 2d 3d 32 33 32 0d  |:block%!16-=232.|
000002f0  01 2c 22 20 20 c8 99 20  22 57 69 6d 70 5f 4f 70  |.,"  .. "Wimp_Op|
00000300  65 6e 57 69 6e 64 6f 77  22 2c 2c 62 6c 6f 63 6b  |enWindow",,block|
00000310  25 0d 01 36 18 20 20 21  62 6c 6f 63 6b 25 3d 77  |%..6.  !block%=w|
00000320  5f 70 6c 61 79 65 72 73  25 0d 01 40 22 20 20 62  |_players%..@"  b|
00000330  6c 6f 63 6b 25 21 38 2b  3d 35 37 36 3a 62 6c 6f  |lock%!8+=576:blo|
00000340  63 6b 25 21 31 36 2b 3d  32 33 32 0d 01 4a 22 20  |ck%!16+=232..J" |
00000350  c9 20 77 5f 6d 61 69 6e  25 20 3a 20 73 63 72 6f  |. w_main% : scro|
00000360  6c 6c 25 3d 62 6c 6f 63  6b 25 21 32 30 0d 01 54  |ll%=block%!20..T|
00000370  05 cb 0d 01 5e 20 c8 99  20 22 57 69 6d 70 5f 4f  |....^ .. "Wimp_O|
00000380  70 65 6e 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |penWindow",,bloc|
00000390  6b 25 0d 01 68 05 e1 0d  01 72 05 3a 0d 01 7c 1b  |k%..h....r.:..|.|
000003a0  dd f2 63 6c 6f 73 65 5f  77 69 6e 64 6f 77 28 21  |..close_window(!|
000003b0  62 6c 6f 63 6b 25 29 0d  01 86 21 c8 99 20 22 57  |block%)...!.. "W|
000003c0  69 6d 70 5f 43 6c 6f 73  65 57 69 6e 64 6f 77 22  |imp_CloseWindow"|
000003d0  2c 2c 62 6c 6f 63 6b 25  0d 01 90 2f e7 20 21 62  |,,block%.../. !b|
000003e0  6c 6f 63 6b 25 3d 77 5f  70 6c 61 79 65 72 73 25  |lock%=w_players%|
000003f0  20 f2 63 6c 6f 73 65 5f  77 69 6e 64 6f 77 28 77  | .close_window(w|
00000400  5f 6d 61 69 6e 25 29 0d  01 9a 05 e1 0d 01 a4 05  |_main%).........|
00000410  3a 0d 01 ae 1c dd f2 62  75 74 74 6f 6e 5f 63 6c  |:......button_cl|
00000420  69 63 6b 28 42 25 2c 57  25 2c 49 25 29 0d 01 b8  |ick(B%,W%,I%)...|
00000430  0b c8 8e 20 42 25 20 ca  0d 01 c2 31 20 c9 20 32  |... B% ....1 . 2|
00000440  20 3a 20 f2 6d 65 6e 75  5f 63 6c 69 63 6b 28 57  | : .menu_click(W|
00000450  25 2c 21 62 6c 6f 63 6b  25 2d 36 34 2c 62 6c 6f  |%,!block%-64,blo|
00000460  63 6b 25 21 34 2b 31 32  29 0d 01 cc 1d 20 c9 20  |ck%!4+12).... . |
00000470  31 2c 34 20 3a 20 f2 73  61 5f 63 6c 69 63 6b 28  |1,4 : .sa_click(|
00000480  57 25 2c 49 25 29 0d 01  d6 05 cb 0d 01 e0 05 e1  |W%,I%)..........|
00000490  0d 01 ea 05 3a 0d 01 f4  19 dd f2 6b 65 79 5f 70  |....:......key_p|
000004a0  72 65 73 73 28 49 25 2c  58 25 2c 43 25 29 0d 01  |ress(I%,X%,C%)..|
000004b0  fe 0b c8 8e 20 43 25 20  ca 0d 02 08 4c 20 c9 20  |.... C% ....L . |
000004c0  31 33 20 20 20 3a 20 e7  20 49 25 3d 31 33 20 c8  |13   : . I%=13 .|
000004d0  99 20 22 57 69 6d 70 5f  53 65 74 43 61 72 65 74  |. "Wimp_SetCaret|
000004e0  50 6f 73 69 74 69 6f 6e  22 2c 2d 31 20 8b 20 f2  |Position",-1 . .|
000004f0  63 61 72 65 74 5f 74 6f  28 28 49 25 2b 34 29 83  |caret_to((I%+4).|
00000500  31 36 2c 30 29 0d 02 12  25 20 c9 20 26 31 38 45  |16,0)...% . &18E|
00000510  20 3a 20 f2 63 61 72 65  74 5f 74 6f 28 28 49 25  | : .caret_to((I%|
00000520  2b 34 29 83 31 36 2c 58  25 29 0d 02 1c 26 20 c9  |+4).16,X%)...& .|
00000530  20 26 31 38 46 20 3a 20  f2 63 61 72 65 74 5f 74  | &18F : .caret_t|
00000540  6f 28 28 49 25 2b 31 32  29 83 31 36 2c 58 25 29  |o((I%+12).16,X%)|
00000550  0d 02 26 05 cb 0d 02 30  05 e1 0d 02 3a 05 3a 0d  |..&....0....:.:.|
00000560  02 44 1a dd f2 6d 65 6e  75 5f 73 65 6c 65 63 74  |.D...menu_select|
00000570  28 53 31 25 2c 53 32 25  29 0d 02 4e 37 c8 99 20  |(S1%,S2%)..N7.. |
00000580  22 57 69 6d 70 5f 47 65  74 50 6f 69 6e 74 65 72  |"Wimp_GetPointer|
00000590  49 6e 66 6f 22 2c 2c 62  6c 6f 63 6b 25 3a 73 74  |Info",,block%:st|
000005a0  61 79 25 3d 28 62 6c 6f  63 6b 25 21 38 3d 31 29  |ay%=(block%!8=1)|
000005b0  0d 02 58 0c c8 8e 20 53  31 25 20 ca 0d 02 62 32  |..X... S1% ...b2|
000005c0  20 c9 20 30 20 3a 20 e7  20 6d 65 6e 75 5f 77 69  | . 0 : . menu_wi|
000005d0  6e 64 6f 77 25 3c 3e 2d  32 20 f2 73 74 61 72 74  |ndow%<>-2 .start|
000005e0  5f 6e 65 77 5f 67 61 6d  65 28 53 32 25 29 0d 02  |_new_game(S2%)..|
000005f0  6c 24 20 c9 20 31 20 3a  20 e7 20 6d 65 6e 75 5f  |l$ . 1 : . menu_|
00000600  77 69 6e 64 6f 77 25 3d  2d 32 20 71 75 69 74 25  |window%=-2 quit%|
00000610  3d b9 0d 02 76 39 20 c9  20 32 20 3a 20 e3 20 70  |=...v9 . 2 : . p|
00000620  6c 61 79 65 72 25 3d 30  20 b8 20 33 3a f2 77 72  |layer%=0 . 3:.wr|
00000630  69 74 65 5f 73 74 72 69  6e 67 28 70 6c 61 79 65  |ite_string(playe|
00000640  72 25 2c 32 2c 22 30 22  29 3a ed 0d 02 80 05 cb  |r%,2,"0"):......|
00000650  0d 02 8a 29 e7 20 73 74  61 79 25 20 c8 99 20 22  |...). stay% .. "|
00000660  57 69 6d 70 5f 43 72 65  61 74 65 4d 65 6e 75 22  |Wimp_CreateMenu"|
00000670  2c 2c 62 5f 6d 65 6e 75  25 0d 02 94 05 e1 0d 02  |,,b_menu%.......|
00000680  9e 05 3a 0d 02 a8 11 dd  f2 6d 65 73 73 61 67 65  |..:......message|
00000690  28 4d 25 29 0d 02 b2 0b  c8 8e 20 4d 25 20 ca 0d  |(M%)...... M% ..|
000006a0  02 bc 12 20 c9 20 30 20  3a 20 71 75 69 74 25 3d  |... . 0 : quit%=|
000006b0  b9 0d 02 c6 52 20 c9 20  26 34 30 30 43 30 20 3a  |....R . &400C0 :|
000006c0  20 f2 63 72 65 61 74 65  5f 73 75 62 6d 65 6e 75  | .create_submenu|
000006d0  28 62 6c 6f 63 6b 25 21  32 30 2c 62 6c 6f 63 6b  |(block%!20,block|
000006e0  25 21 32 34 2c 62 6c 6f  63 6b 25 21 32 38 2c 62  |%!24,block%!28,b|
000006f0  6c 6f 63 6b 25 21 33 32  2c 62 6c 6f 63 6b 25 21  |lock%!32,block%!|
00000700  33 36 29 0d 02 d0 05 cb  0d 02 da 05 e1 0d 02 e4  |36).............|
00000710  05 3a 0d 02 ee 15 2a 2a  2a 20 62 75 74 74 6f 6e  |.:....*** button|
00000720  20 63 6c 69 63 6b 73 0d  02 f8 05 3a 0d 03 02 15  | clicks....:....|
00000730  dd f2 73 61 5f 63 6c 69  63 6b 28 57 25 2c 49 25  |..sa_click(W%,I%|
00000740  29 0d 03 0c 0b c8 8e 20  57 25 20 ca 0d 03 16 3a  |)...... W% ....:|
00000750  20 c9 20 2d 32 20 3a 20  f2 73 68 6f 77 5f 77 69  | . -2 : .show_wi|
00000760  6e 64 6f 77 28 77 5f 70  6c 61 79 65 72 73 25 29  |ndow(w_players%)|
00000770  3a f2 73 68 6f 77 5f 77  69 6e 64 6f 77 28 77 5f  |:.show_window(w_|
00000780  6d 61 69 6e 25 29 0d 03  20 2e 20 c9 20 77 5f 70  |main%).. . . w_p|
00000790  6c 61 79 65 72 73 25 20  3a 20 f2 70 6c 61 79 65  |layers% : .playe|
000007a0  72 5f 77 69 6e 64 6f 77  5f 63 6c 69 63 6b 28 49  |r_window_click(I|
000007b0  25 2d 31 29 0d 03 2a 31  20 c9 20 77 5f 64 6f 6d  |%-1)..*1 . w_dom|
000007c0  73 25 20 3a 20 f2 64 6f  6d 69 6e 6f 5f 63 6c 69  |s% : .domino_cli|
000007d0  63 6b 28 74 75 72 6e 25  2a 37 2b 49 25 81 33 2c  |ck(turn%*7+I%.3,|
000007e0  49 25 83 33 29 0d 03 34  05 cb 0d 03 3e 05 e1 0d  |I%.3)..4....>...|
000007f0  03 48 05 3a 0d 03 52 1a  dd f2 6d 65 6e 75 5f 63  |.H.:..R...menu_c|
00000800  6c 69 63 6b 28 57 25 2c  58 25 2c 59 25 29 0d 03  |lick(W%,X%,Y%)..|
00000810  5c 13 6d 65 6e 75 5f 77  69 6e 64 6f 77 25 3d 57  |\.menu_window%=W|
00000820  25 0d 03 66 0b c8 8e 20  57 25 20 ca 0d 03 70 28  |%..f... W% ...p(|
00000830  20 c9 20 2d 32 20 3a 20  f2 63 72 65 61 74 65 5f  | . -2 : .create_|
00000840  69 63 6f 6e 5f 62 61 72  5f 6d 65 6e 75 3a 59 25  |icon_bar_menu:Y%|
00000850  3d 31 38 34 0d 03 7a 1a  20 7f 20 3a 20 f2 63 72  |=184..z. . : .cr|
00000860  65 61 74 65 5f 6d 61 69  6e 5f 6d 65 6e 75 0d 03  |eate_main_menu..|
00000870  84 05 cb 0d 03 8e 27 c8  99 20 22 57 69 6d 70 5f  |......'.. "Wimp_|
00000880  43 72 65 61 74 65 4d 65  6e 75 22 2c 2c 62 5f 6d  |CreateMenu",,b_m|
00000890  65 6e 75 25 2c 58 25 2c  59 25 0d 03 98 05 e1 0d  |enu%,X%,Y%......|
000008a0  03 a2 05 3a 0d 03 ac 1d  dd f2 70 6c 61 79 65 72  |...:......player|
000008b0  5f 77 69 6e 64 6f 77 5f  63 6c 69 63 6b 28 49 25  |_window_click(I%|
000008c0  29 0d 03 b6 0d e7 20 49  25 3c 31 36 20 8c 0d 03  |)..... I%<16 ...|
000008d0  c0 11 20 70 6c 61 79 65  72 25 3d 49 25 81 34 0d  |.. player%=I%.4.|
000008e0  03 ca 0e 20 c8 8e 20 49  25 83 34 20 ca 0d 03 d4  |... .. I%.4 ....|
000008f0  29 20 20 c9 20 31 20 3a  20 f2 73 74 61 74 65 5f  |)  . 1 : .state_|
00000900  63 6c 69 63 6b 28 73 74  61 74 65 25 28 70 6c 61  |click(state%(pla|
00000910  79 65 72 25 29 29 0d 03  de 2a 20 20 c9 20 33 20  |yer%))...*  . 3 |
00000920  3a 20 e7 20 70 6c 61 79  65 72 25 3d 74 75 72 6e  |: . player%=turn|
00000930  25 20 f2 6d 65 73 73 61  67 65 5f 63 6c 69 63 6b  |% .message_click|
00000940  0d 03 e8 06 20 cb 0d 03  f2 05 cc 0d 03 fc 20 20  |.... .........  |
00000950  64 6f 6d 25 3d 49 25 2d  31 36 3a 70 6c 61 79 65  |dom%=I%-16:playe|
00000960  72 25 3d 64 6f 6d 25 20  81 20 37 0d 04 06 3e 20  |r%=dom% . 7...> |
00000970  e7 20 70 6c 61 79 65 72  25 3d 74 75 72 6e 25 20  |. player%=turn% |
00000980  80 20 73 74 61 74 65 25  28 70 6c 61 79 65 72 25  |. state%(player%|
00000990  29 3d 30 20 f2 64 6f 6d  69 6e 6f 5f 63 6c 69 63  |)=0 .domino_clic|
000009a0  6b 28 64 6f 6d 25 2c 30  29 0d 04 10 05 cd 0d 04  |k(dom%,0).......|
000009b0  1a 05 e1 0d 04 24 05 3a  0d 04 2e 1b dd f2 73 74  |.....$.:......st|
000009c0  61 74 65 5f 63 6c 69 63  6b 28 f8 20 73 74 61 74  |ate_click(. stat|
000009d0  65 25 29 0d 04 38 0f c8  8e 20 73 74 61 74 65 25  |e%)..8... state%|
000009e0  20 ca 0d 04 42 13 20 c9  20 30 20 3a 20 73 74 61  | ...B. . 0 : sta|
000009f0  74 65 25 3d 31 0d 04 4c  32 20 c9 20 31 20 3a 20  |te%=1..L2 . 1 : |
00000a00  e7 20 6e 75 6d 5f 70 6c  61 79 69 6e 67 25 3e 32  |. num_playing%>2|
00000a10  20 f2 70 6c 61 79 65 72  5f 6f 75 74 20 8b 20 73  | .player_out . s|
00000a20  74 61 74 65 25 3d 30 0d  04 56 23 20 c9 20 32 20  |tate%=0..V# . 2 |
00000a30  3a 20 73 74 61 74 65 25  3d 30 3a 6e 75 6d 5f 70  |: state%=0:num_p|
00000a40  6c 61 79 69 6e 67 25 2b  3d 31 0d 04 60 05 cb 0d  |laying%+=1..`...|
00000a50  04 6a 2b f2 77 72 69 74  65 5f 73 74 72 69 6e 67  |.j+.write_string|
00000a60  28 70 6c 61 79 65 72 25  2c 31 2c 73 74 61 74 65  |(player%,1,state|
00000a70  24 28 73 74 61 74 65 25  29 29 0d 04 74 05 e1 0d  |$(state%))..t...|
00000a80  04 7e 05 3a 0d 04 88 13  dd f2 6d 65 73 73 61 67  |.~.:......messag|
00000a90  65 5f 63 6c 69 63 6b 0d  04 92 0a c8 8e 20 b9 20  |e_click...... . |
00000aa0  ca 0d 04 9c 2f 20 c9 20  6e 6f 74 5f 67 6f 6e 65  |..../ . not_gone|
00000ab0  25 3e 6e 75 6d 5f 70 6c  61 79 69 6e 67 25 20 3a  |%>num_playing% :|
00000ac0  20 f2 61 64 64 5f 64 6f  74 5f 74 6f 74 61 6c 73  | .add_dot_totals|
00000ad0  0d 04 a6 2a 20 c9 20 ac  20 63 61 6e 5f 67 6f 25  |...* . . can_go%|
00000ae0  20 20 20 20 20 20 20 20  20 20 20 20 3a 20 f2 6e  |            : .n|
00000af0  65 78 74 5f 70 6c 61 79  65 72 0d 04 b0 46 20 c9  |ext_player...F .|
00000b00  20 73 74 61 74 65 25 28  74 75 72 6e 25 29 3d 30  | state%(turn%)=0|
00000b10  20 20 20 20 20 20 20 20  3a 20 f2 73 68 6f 77 5f  |        : .show_|
00000b20  64 6f 6d 69 6e 6f 65 73  28 74 75 72 6e 25 2c 21  |dominoes(turn%,!|
00000b30  62 6c 6f 63 6b 25 2c 62  6c 6f 63 6b 25 21 34 29  |block%,block%!4)|
00000b40  0d 04 ba 2c 20 c9 20 73  74 61 74 65 25 28 74 75  |..., . state%(tu|
00000b50  72 6e 25 29 3d 31 20 20  20 20 20 20 20 20 3a 20  |rn%)=1        : |
00000b60  f2 61 72 63 68 69 65 5f  74 75 72 6e 0d 04 c4 05  |.archie_turn....|
00000b70  cb 0d 04 ce 05 e1 0d 04  d8 05 3a 0d 04 e2 1e dd  |..........:.....|
00000b80  f2 64 6f 6d 69 6e 6f 5f  63 6c 69 63 6b 28 64 6f  |.domino_click(do|
00000b90  6d 25 2c 70 61 72 74 25  29 0d 04 ec 29 4c 25 3d  |m%,part%)...)L%=|
00000ba0  64 6f 6d 69 6e 6f 25 28  64 6f 6d 25 2c 30 29 3a  |domino%(dom%,0):|
00000bb0  52 25 3d 64 6f 6d 69 6e  6f 25 28 64 6f 6d 25 2c  |R%=domino%(dom%,|
00000bc0  31 29 0d 04 f6 16 e7 20  70 61 72 74 25 3d 32 20  |1)..... part%=2 |
00000bd0  c8 94 20 4c 25 2c 52 25  0d 05 00 0a c8 8e 20 b9  |.. L%,R%...... .|
00000be0  20 ca 0d 05 0a 25 20 c9  20 70 6c 61 79 65 64 25  | ....% . played%|
00000bf0  3d 30 20 3a 20 f2 70 6c  61 79 5f 66 69 72 73 74  |=0 : .play_first|
00000c00  5f 64 6f 6d 69 6e 6f 0d  05 14 2d 20 c9 20 4c 25  |_domino...- . L%|
00000c10  3d 6c 64 6f 74 73 25 20  3a 20 f2 61 64 64 5f 64  |=ldots% : .add_d|
00000c20  6f 6d 69 6e 6f 5f 74 6f  5f 6c 65 66 74 28 52 25  |omino_to_left(R%|
00000c30  2c 4c 25 29 0d 05 1e 2e  20 c9 20 4c 25 3d 72 64  |,L%).... . L%=rd|
00000c40  6f 74 73 25 20 3a 20 f2  61 64 64 5f 64 6f 6d 69  |ots% : .add_domi|
00000c50  6e 6f 5f 74 6f 5f 72 69  67 68 74 28 4c 25 2c 52  |no_to_right(L%,R|
00000c60  25 29 0d 05 28 2d 20 c9  20 52 25 3d 6c 64 6f 74  |%)..(- . R%=ldot|
00000c70  73 25 20 3a 20 f2 61 64  64 5f 64 6f 6d 69 6e 6f  |s% : .add_domino|
00000c80  5f 74 6f 5f 6c 65 66 74  28 4c 25 2c 52 25 29 0d  |_to_left(L%,R%).|
00000c90  05 32 2e 20 c9 20 52 25  3d 72 64 6f 74 73 25 20  |.2. . R%=rdots% |
00000ca0  3a 20 f2 61 64 64 5f 64  6f 6d 69 6e 6f 5f 74 6f  |: .add_domino_to|
00000cb0  5f 72 69 67 68 74 28 52  25 2c 4c 25 29 0d 05 3c  |_right(R%,L%)..<|
00000cc0  09 20 7f 20 ef 37 0d 05  46 05 cb 0d 05 50 05 e1  |. . .7..F....P..|
00000cd0  0d 05 5a 05 3a 0d 05 64  15 2a 2a 2a 20 6d 65 6e  |..Z.:..d.*** men|
00000ce0  75 20 63 72 65 61 74 69  6f 6e 0d 05 6e 05 3a 0d  |u creation..n.:.|
00000cf0  05 78 2c dd f2 63 72 65  61 74 65 5f 73 75 62 6d  |.x,..create_subm|
00000d00  65 6e 75 28 73 75 62 6d  65 6e 75 25 2c 58 25 2c  |enu(submenu%,X%,|
00000d10  59 25 2c 53 31 25 2c 53  32 25 29 0d 05 82 0c c8  |Y%,S1%,S2%).....|
00000d20  8e 20 53 31 25 20 ca 0d  05 8c 1f 20 c9 20 30 20  |. S1% ..... . 0 |
00000d30  3a 20 f2 63 72 65 61 74  65 5f 72 65 73 74 61 72  |: .create_restar|
00000d40  74 5f 6d 65 6e 75 0d 05  96 40 20 c9 20 31 20 3a  |t_menu...@ . 1 :|
00000d50  20 e7 20 53 32 25 3d 2d  31 20 f2 63 72 65 61 74  | . S2%=-1 .creat|
00000d60  65 5f 64 6f 6d 69 6e 6f  65 73 5f 6d 65 6e 75 20  |e_dominoes_menu |
00000d70  8b 20 41 25 3d a4 66 69  6c 6c 5f 77 5f 64 6f 6d  |. A%=.fill_w_dom|
00000d80  73 28 53 32 25 29 0d 05  a0 05 cb 0d 05 aa 2b c8  |s(S2%)........+.|
00000d90  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 53 75  |. "Wimp_CreateSu|
00000da0  62 4d 65 6e 75 22 2c 2c  73 75 62 6d 65 6e 75 25  |bMenu",,submenu%|
00000db0  2c 58 25 2c 59 25 0d 05  b4 05 e1 0d 05 be 05 3a  |,X%,Y%.........:|
00000dc0  0d 05 c8 1a dd f2 63 72  65 61 74 65 5f 69 63 6f  |......create_ico|
00000dd0  6e 5f 62 61 72 5f 6d 65  6e 75 0d 05 d2 2b f2 63  |n_bar_menu...+.c|
00000de0  72 65 61 74 65 5f 6d 65  6e 75 28 62 5f 6d 65 6e  |reate_menu(b_men|
00000df0  75 25 2c 22 33 44 20 44  6f 6d 69 6e 6f 65 73 22  |u%,"3D Dominoes"|
00000e00  2c 31 34 34 29 0d 05 dc  22 f2 6d 65 6e 75 5f 69  |,144)...".menu_i|
00000e10  74 65 6d 28 22 49 6e 66  6f 22 2c 30 2c 77 5f 69  |tem("Info",0,w_i|
00000e20  6e 66 6f 25 2c 30 29 0d  05 e6 1f f2 6d 65 6e 75  |nfo%,0).....menu|
00000e30  5f 69 74 65 6d 28 22 51  75 69 74 22 2c 26 38 30  |_item("Quit",&80|
00000e40  2c 2d 31 2c 30 29 0d 05  f0 05 e1 0d 05 fa 05 3a  |,-1,0).........:|
00000e50  0d 06 04 16 dd f2 63 72  65 61 74 65 5f 6d 61 69  |......create_mai|
00000e60  6e 5f 6d 65 6e 75 0d 06  0e 2b f2 63 72 65 61 74  |n_menu...+.creat|
00000e70  65 5f 6d 65 6e 75 28 62  5f 6d 65 6e 75 25 2c 22  |e_menu(b_menu%,"|
00000e80  33 44 20 44 6f 6d 69 6e  6f 65 73 22 2c 31 39 32  |3D Dominoes",192|
00000e90  29 0d 06 18 28 f2 6d 65  6e 75 5f 69 74 65 6d 28  |)...(.menu_item(|
00000ea0  22 52 65 73 74 61 72 74  22 2c 38 2c 62 5f 73 75  |"Restart",8,b_su|
00000eb0  62 6d 65 6e 75 25 2c 30  29 0d 06 22 31 f2 6d 65  |bmenu%,0).."1.me|
00000ec0  6e 75 5f 69 74 65 6d 28  22 44 6f 6d 69 6e 6f 65  |nu_item("Dominoe|
00000ed0  73 22 2c 38 2c 62 5f 73  75 62 6d 65 6e 75 25 2c  |s",8,b_submenu%,|
00000ee0  70 6c 61 79 65 64 25 3e  30 29 0d 06 2c 26 f2 6d  |played%>0)..,&.m|
00000ef0  65 6e 75 5f 69 74 65 6d  28 22 5a 65 72 6f 20 73  |enu_item("Zero s|
00000f00  63 6f 72 65 73 22 2c 26  38 30 2c 2d 31 2c 30 29  |cores",&80,-1,0)|
00000f10  0d 06 36 05 e1 0d 06 40  05 3a 0d 06 4a 19 dd f2  |..6....@.:..J...|
00000f20  63 72 65 61 74 65 5f 72  65 73 74 61 72 74 5f 6d  |create_restart_m|
00000f30  65 6e 75 0d 06 54 28 f2  63 72 65 61 74 65 5f 6d  |enu..T(.create_m|
00000f40  65 6e 75 28 62 5f 73 75  62 6d 65 6e 75 25 2c 22  |enu(b_submenu%,"|
00000f50  53 74 61 72 74 65 72 22  2c 30 29 0d 06 5e 20 f2  |Starter",0)..^ .|
00000f60  6d 65 6e 75 5f 69 74 65  6d 28 22 49 6e 20 74 75  |menu_item("In tu|
00000f70  72 6e 22 2c 30 2c 2d 31  2c 30 29 0d 06 68 1f f2  |rn",0,-1,0)..h..|
00000f80  6d 65 6e 75 5f 69 74 65  6d 28 22 52 61 6e 64 6f  |menu_item("Rando|
00000f90  6d 22 2c 32 2c 2d 31 2c  30 29 0d 06 72 0c 77 69  |m",2,-1,0)..r.wi|
00000fa0  64 74 68 25 3d 37 0d 06  7c 13 e3 20 70 6c 61 79  |dth%=7..|.. play|
00000fb0  65 72 25 3d 30 20 b8 20  33 0d 06 86 20 6e 61 6d  |er%=0 . 3... nam|
00000fc0  65 24 3d a4 67 65 74 5f  73 74 72 69 6e 67 28 70  |e$=.get_string(p|
00000fd0  6c 61 79 65 72 25 2c 30  29 0d 06 90 25 e7 20 a9  |layer%,0)...%. .|
00000fe0  28 6e 61 6d 65 24 29 3e  77 69 64 74 68 25 20 77  |(name$)>width% w|
00000ff0  69 64 74 68 25 3d a9 28  6e 61 6d 65 24 29 0d 06  |idth%=.(name$)..|
00001000  9a 2c f2 6d 65 6e 75 5f  69 74 65 6d 28 6e 61 6d  |.,.menu_item(nam|
00001010  65 24 2c 30 2c 2d 31 2c  73 74 61 74 65 25 28 70  |e$,0,-1,state%(p|
00001020  6c 61 79 65 72 25 29 3d  32 29 0d 06 a4 05 ed 0d  |layer%)=2)......|
00001030  06 ae 0e 49 25 21 2d 32  34 3d 26 38 30 0d 06 b8  |...I%!-24=&80...|
00001040  1e 62 5f 73 75 62 6d 65  6e 75 25 21 31 36 3d 77  |.b_submenu%!16=w|
00001050  69 64 74 68 25 2a 31 36  2b 31 36 0d 06 c2 05 e1  |idth%*16+16.....|
00001060  0d 06 cc 05 3a 0d 06 d6  1a dd f2 63 72 65 61 74  |....:......creat|
00001070  65 5f 64 6f 6d 69 6e 6f  65 73 5f 6d 65 6e 75 0d  |e_dominoes_menu.|
00001080  06 e0 27 f2 63 72 65 61  74 65 5f 6d 65 6e 75 28  |..'.create_menu(|
00001090  73 75 62 6d 65 6e 75 25  2c 22 44 6f 6d 69 6e 6f  |submenu%,"Domino|
000010a0  65 73 22 2c 30 29 0d 06  ea 0c 77 69 64 74 68 25  |es",0)....width%|
000010b0  3d 38 0d 06 f4 13 e3 20  70 6c 61 79 65 72 25 3d  |=8..... player%=|
000010c0  30 20 b8 20 33 0d 06 fe  20 6e 61 6d 65 24 3d a4  |0 . 3... name$=.|
000010d0  67 65 74 5f 73 74 72 69  6e 67 28 70 6c 61 79 65  |get_string(playe|
000010e0  72 25 2c 30 29 0d 07 08  25 e7 20 a9 28 6e 61 6d  |r%,0)...%. .(nam|
000010f0  65 24 29 3e 77 69 64 74  68 25 20 77 69 64 74 68  |e$)>width% width|
00001100  25 3d a9 28 6e 61 6d 65  24 29 0d 07 12 4c f2 6d  |%=.(name$)...L.m|
00001110  65 6e 75 5f 69 74 65 6d  28 6e 61 6d 65 24 2c 38  |enu_item(name$,8|
00001120  2c 77 5f 64 6f 6d 73 25  2c 73 74 61 74 65 25 28  |,w_doms%,state%(|
00001130  70 6c 61 79 65 72 25 29  3d 32 20 84 20 6c 61 73  |player%)=2 . las|
00001140  74 25 28 70 6c 61 79 65  72 25 29 3c 70 6c 61 79  |t%(player%)<play|
00001150  65 72 25 2a 37 29 0d 07  1c 05 ed 0d 07 26 0e 49  |er%*7).......&.I|
00001160  25 21 2d 32 34 3d 26 38  38 0d 07 30 1e 62 5f 73  |%!-24=&88..0.b_s|
00001170  75 62 6d 65 6e 75 25 21  31 36 3d 77 69 64 74 68  |ubmenu%!16=width|
00001180  25 2a 31 36 2b 31 36 0d  07 3a 05 e1 0d 07 44 05  |%*16+16..:....D.|
00001190  3a 0d 07 4e 18 2a 2a 2a  20 70 6c 61 79 65 72 20  |:..N.*** player |
000011a0  66 75 6e 63 74 69 6f 6e  73 0d 07 58 05 3a 0d 07  |functions..X.:..|
000011b0  62 11 dd f2 6e 65 78 74  5f 70 6c 61 79 65 72 0d  |b...next_player.|
000011c0  07 6c 1d f2 77 72 69 74  65 5f 73 74 72 69 6e 67  |.l..write_string|
000011d0  28 74 75 72 6e 25 2c 33  2c 22 22 29 0d 07 76 05  |(turn%,3,"")..v.|
000011e0  f5 0d 07 80 16 20 74 75  72 6e 25 3d 28 74 75 72  |..... turn%=(tur|
000011f0  6e 25 2b 31 29 83 34 0d  07 8a 16 fd 20 73 74 61  |n%+1).4..... sta|
00001200  74 65 25 28 74 75 72 6e  25 29 3c 3e 32 0d 07 94  |te%(turn%)<>2...|
00001210  10 64 6f 6d 25 3d 74 75  72 6e 25 2a 37 0d 07 9e  |.dom%=turn%*7...|
00001220  05 f5 0d 07 a8 2a 20 4c  25 3d 64 6f 6d 69 6e 6f  |.....* L%=domino|
00001230  25 28 64 6f 6d 25 2c 30  29 3a 52 25 3d 64 6f 6d  |%(dom%,0):R%=dom|
00001240  69 6e 6f 25 28 64 6f 6d  25 2c 31 29 0d 07 b2 48  |ino%(dom%,1)...H|
00001250  20 63 61 6e 5f 67 6f 25  3d 28 70 6c 61 79 65 64  | can_go%=(played|
00001260  25 3d 30 20 84 20 4c 25  3d 6c 64 6f 74 73 25 20  |%=0 . L%=ldots% |
00001270  84 20 4c 25 3d 72 64 6f  74 73 25 20 84 20 52 25  |. L%=rdots% . R%|
00001280  3d 6c 64 6f 74 73 25 20  84 20 52 25 3d 72 64 6f  |=ldots% . R%=rdo|
00001290  74 73 25 29 0d 07 bc 0c  20 64 6f 6d 25 2b 3d 31  |ts%).... dom%+=1|
000012a0  0d 07 c6 21 fd 20 63 61  6e 5f 67 6f 25 20 84 20  |...!. can_go% . |
000012b0  64 6f 6d 25 3e 6c 61 73  74 25 28 74 75 72 6e 25  |dom%>last%(turn%|
000012c0  29 0d 07 d0 28 e7 20 63  61 6e 5f 67 6f 25 20 41  |)...(. can_go% A|
000012d0  24 3d a4 63 61 6e 5f 67  6f 20 8b 20 41 24 3d a4  |$=.can_go . A$=.|
000012e0  63 61 6e 6e 6f 74 5f 67  6f 0d 07 da 1d f2 77 72  |cannot_go.....wr|
000012f0  69 74 65 5f 73 74 72 69  6e 67 28 74 75 72 6e 25  |ite_string(turn%|
00001300  2c 33 2c 41 24 29 0d 07  e4 05 e1 0d 07 ee 05 3a  |,3,A$).........:|
00001310  0d 07 f8 0c dd a4 63 61  6e 5f 67 6f 0d 08 02 0f  |......can_go....|
00001320  6e 6f 74 5f 67 6f 6e 65  25 3d 30 0d 08 0c 1b 3d  |not_gone%=0....=|
00001330  63 61 6e 5f 67 6f 24 28  73 74 61 74 65 25 28 74  |can_go$(state%(t|
00001340  75 72 6e 25 29 29 0d 08  16 05 3a 0d 08 20 0f dd  |urn%))....:.. ..|
00001350  a4 63 61 6e 6e 6f 74 5f  67 6f 0d 08 2a 10 6e 6f  |.cannot_go..*.no|
00001360  74 5f 67 6f 6e 65 25 2b  3d 31 0d 08 34 40 e7 20  |t_gone%+=1..4@. |
00001370  6e 6f 74 5f 67 6f 6e 65  25 3e 6e 75 6d 5f 70 6c  |not_gone%>num_pl|
00001380  61 79 69 6e 67 25 20 3d  22 4e 6f 2d 6f 6e 65 20  |aying% ="No-one |
00001390  63 61 6e 20 67 6f 2c 20  63 6c 69 63 6b 20 74 6f  |can go, click to|
000013a0  20 61 64 64 20 64 6f 74  73 22 0d 08 3e 1e 3d 63  | add dots"..>.=c|
000013b0  61 6e 6e 6f 74 5f 67 6f  24 28 73 74 61 74 65 25  |annot_go$(state%|
000013c0  28 74 75 72 6e 25 29 29  0d 08 48 05 3a 0d 08 52  |(turn%))..H.:..R|
000013d0  10 dd f2 70 6c 61 79 65  72 5f 6f 75 74 0d 08 5c  |...player_out..\|
000013e0  0c 73 74 61 74 65 25 3d  32 0d 08 66 13 6e 75 6d  |.state%=2..f.num|
000013f0  5f 70 6c 61 79 69 6e 67  25 2d 3d 31 0d 08 70 20  |_playing%-=1..p |
00001400  e7 20 70 6c 61 79 65 72  25 3d 74 75 72 6e 25 20  |. player%=turn% |
00001410  f2 6e 65 78 74 5f 70 6c  61 79 65 72 0d 08 7a 05  |.next_player..z.|
00001420  e1 0d 08 84 05 3a 0d 08  8e 15 2a 2a 2a 20 61 72  |.....:....*** ar|
00001430  63 68 69 65 27 73 20 74  75 72 6e 0d 08 98 05 3a  |chie's turn....:|
00001440  0d 08 a2 11 dd f2 61 72  63 68 69 65 5f 74 75 72  |......archie_tur|
00001450  6e 0d 08 ac 10 6d 61 78  5f 64 6f 74 73 25 3d 2d  |n....max_dots%=-|
00001460  31 0d 08 b6 0f 70 6c 61  79 5f 64 6f 6d 25 3d 30  |1....play_dom%=0|
00001470  0d 08 c0 21 e3 20 64 6f  6d 25 3d 74 75 72 6e 25  |...!. dom%=turn%|
00001480  2a 37 20 b8 20 6c 61 73  74 25 28 74 75 72 6e 25  |*7 . last%(turn%|
00001490  29 0d 08 ca 29 4c 25 3d  64 6f 6d 69 6e 6f 25 28  |)...)L%=domino%(|
000014a0  64 6f 6d 25 2c 30 29 3a  52 25 3d 64 6f 6d 69 6e  |dom%,0):R%=domin|
000014b0  6f 25 28 64 6f 6d 25 2c  31 29 0d 08 d4 83 e7 20  |o%(dom%,1)..... |
000014c0  28 70 6c 61 79 65 64 25  3d 30 20 84 20 4c 25 3d  |(played%=0 . L%=|
000014d0  6c 64 6f 74 73 25 20 84  20 4c 25 3d 72 64 6f 74  |ldots% . L%=rdot|
000014e0  73 25 20 84 20 52 25 3d  6c 64 6f 74 73 25 20 84  |s% . R%=ldots% .|
000014f0  20 52 25 3d 72 64 6f 74  73 25 29 20 80 20 4c 25  | R%=rdots%) . L%|
00001500  2b 52 25 3e 6d 61 78 5f  64 6f 74 73 25 20 6d 61  |+R%>max_dots% ma|
00001510  78 5f 64 6f 74 73 25 3d  4c 25 2b 52 25 3a 70 6c  |x_dots%=L%+R%:pl|
00001520  61 79 5f 64 6f 6d 25 3d  64 6f 6d 25 3a 73 69 64  |ay_dom%=dom%:sid|
00001530  65 25 3d 2d 32 2a 28 4c  25 3c 52 25 29 0d 08 de  |e%=-2*(L%<R%)...|
00001540  05 ed 0d 08 e8 22 f2 64  6f 6d 69 6e 6f 5f 63 6c  |.....".domino_cl|
00001550  69 63 6b 28 70 6c 61 79  5f 64 6f 6d 25 2c 73 69  |ick(play_dom%,si|
00001560  64 65 25 29 0d 08 f2 05  e1 0d 08 fc 05 3a 0d 09  |de%).........:..|
00001570  06 15 2a 2a 2a 20 73 68  6f 77 20 64 6f 6d 69 6e  |..*** show domin|
00001580  6f 65 73 0d 09 10 05 3a  0d 09 1a 22 dd f2 73 68  |oes....:..."..sh|
00001590  6f 77 5f 64 6f 6d 69 6e  6f 65 73 28 70 6c 61 79  |ow_dominoes(play|
000015a0  65 72 25 2c 58 25 2c 59  25 29 0d 09 24 40 c8 99  |er%,X%,Y%)..$@..|
000015b0  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
000015c0  75 22 2c 2c 77 5f 64 6f  6d 73 25 2c 58 25 2d a4  |u",,w_doms%,X%-.|
000015d0  66 69 6c 6c 5f 77 5f 64  6f 6d 73 28 70 6c 61 79  |fill_w_doms(play|
000015e0  65 72 25 29 2c 59 25 2b  36 34 0d 09 2e 05 e1 0d  |er%),Y%+64......|
000015f0  09 38 05 3a 0d 09 42 1a  dd a4 66 69 6c 6c 5f 77  |.8.:..B...fill_w|
00001600  5f 64 6f 6d 73 28 70 6c  61 79 65 72 25 29 0d 09  |_doms(player%)..|
00001610  4c 33 21 62 6c 6f 63 6b  25 3d 77 5f 64 6f 6d 73  |L3!block%=w_doms|
00001620  25 3a c8 99 20 22 57 69  6d 70 5f 47 65 74 57 69  |%:.. "Wimp_GetWi|
00001630  6e 64 6f 77 49 6e 66 6f  22 2c 2c 62 6c 6f 63 6b  |ndowInfo",,block|
00001640  25 0d 09 56 22 c8 99 20  22 57 69 6d 70 5f 44 65  |%..V".. "Wimp_De|
00001650  6c 65 74 65 57 69 6e 64  6f 77 22 2c 2c 62 6c 6f  |leteWindow",,blo|
00001660  63 6b 25 0d 09 60 2d 77  69 64 74 68 25 3d 28 6c  |ck%..`-width%=(l|
00001670  61 73 74 25 28 70 6c 61  79 65 72 25 29 2d 70 6c  |ast%(player%)-pl|
00001680  61 79 65 72 25 2a 37 29  2a 31 35 30 2b 31 35 38  |ayer%*7)*150+158|
00001690  0d 09 6a 29 62 6c 6f 63  6b 25 21 31 32 3d 62 6c  |..j)block%!12=bl|
000016a0  6f 63 6b 25 21 34 2b 77  69 64 74 68 25 3a 62 6c  |ock%!4+width%:bl|
000016b0  6f 63 6b 25 21 38 38 3d  30 0d 09 74 2e c8 99 20  |ock%!88=0..t... |
000016c0  22 57 69 6d 70 5f 43 72  65 61 74 65 57 69 6e 64  |"Wimp_CreateWind|
000016d0  6f 77 22 2c 2c 62 6c 6f  63 6b 25 2b 34 20 b8 20  |ow",,block%+4 . |
000016e0  77 5f 64 6f 6d 73 25 0d  09 7e 08 78 25 3d 34 0d  |w_doms%..~.x%=4.|
000016f0  09 88 25 e3 20 64 6f 6d  25 3d 70 6c 61 79 65 72  |..%. dom%=player|
00001700  25 2a 37 20 b8 20 6c 61  73 74 25 28 70 6c 61 79  |%*7 . last%(play|
00001710  65 72 25 29 0d 09 92 3a  20 41 25 3d a4 63 72 65  |er%)...: A%=.cre|
00001720  61 74 65 5f 69 63 6f 6e  28 77 5f 64 6f 6d 73 25  |ate_icon(w_doms%|
00001730  2c 22 64 6f 6d 31 22 2c  78 25 2c 2d 31 32 34 2c  |,"dom1",x%,-124,|
00001740  31 35 30 2c 31 32 30 2c  26 33 30 30 32 29 0d 09  |150,120,&3002)..|
00001750  9c 4b 20 41 25 3d a4 63  72 65 61 74 65 5f 69 63  |.K A%=.create_ic|
00001760  6f 6e 28 77 5f 64 6f 6d  73 25 2c 64 6f 74 24 28  |on(w_doms%,dot$(|
00001770  64 6f 6d 69 6e 6f 25 28  64 6f 6d 25 2c 30 29 2c  |domino%(dom%,0),|
00001780  30 29 2c 78 25 2b 32 30  2c 2d 39 32 2c 36 32 2c  |0),x%+20,-92,62,|
00001790  34 34 2c 26 33 30 30 32  29 0d 09 a6 4b 20 41 25  |44,&3002)...K A%|
000017a0  3d a4 63 72 65 61 74 65  5f 69 63 6f 6e 28 77 5f  |=.create_icon(w_|
000017b0  64 6f 6d 73 25 2c 64 6f  74 24 28 64 6f 6d 69 6e  |doms%,dot$(domin|
000017c0  6f 25 28 64 6f 6d 25 2c  31 29 2c 30 29 2c 78 25  |o%(dom%,1),0),x%|
000017d0  2b 36 38 2c 2d 36 30 2c  36 32 2c 34 34 2c 26 33  |+68,-60,62,44,&3|
000017e0  30 30 32 29 0d 09 b0 0c  20 78 25 2b 3d 31 35 30  |002).... x%+=150|
000017f0  0d 09 ba 05 ed 0d 09 c4  0d 3d 77 69 64 74 68 25  |.........=width%|
00001800  2f 32 0d 09 ce 05 3a 0d  09 d8 16 2a 2a 2a 20 64  |/2....:....*** d|
00001810  6f 6d 69 6e 6f 20 70 6c  61 79 69 6e 67 0d 09 e2  |omino playing...|
00001820  05 3a 0d 09 ec 17 dd f2  70 6c 61 79 5f 66 69 72  |.:......play_fir|
00001830  73 74 5f 64 6f 6d 69 6e  6f 0d 09 f6 21 f2 63 72  |st_domino...!.cr|
00001840  65 61 74 65 5f 64 6f 6d  69 6e 6f 28 30 2c 2d 32  |eate_domino(0,-2|
00001850  32 2c 31 2c 4c 25 2c 52  25 29 0d 0a 00 17 6c 64  |2,1,L%,R%)....ld|
00001860  6f 74 73 25 3d 4c 25 3a  72 64 6f 74 73 25 3d 52  |ots%=L%:rdots%=R|
00001870  25 0d 0a 0a 12 f2 64 6f  6d 69 6e 6f 5f 70 6c 61  |%.....domino_pla|
00001880  79 65 64 0d 0a 14 05 e1  0d 0a 1e 05 3a 0d 0a 28  |yed.........:..(|
00001890  1f dd f2 61 64 64 5f 64  6f 6d 69 6e 6f 5f 74 6f  |...add_domino_to|
000018a0  5f 6c 65 66 74 28 4c 25  2c 52 25 29 0d 0a 32 0d  |_left(L%,R%)..2.|
000018b0  6c 64 6f 74 73 25 3d 4c  25 0d 0a 3c 16 e7 20 6c  |ldots%=L%..<.. l|
000018c0  64 69 72 25 3d 30 20 c8  94 20 4c 25 2c 52 25 0d  |dir%=0 .. L%,R%.|
000018d0  0a 46 55 64 6f 75 62 6c  65 25 3d 28 4c 25 3d 52  |.FUdouble%=(L%=R|
000018e0  25 20 80 20 28 28 6c 64  69 72 25 3d 30 20 80 20  |% . ((ldir%=0 . |
000018f0  6c 79 25 3e 2d 32 38 20  80 20 6c 79 25 3c 2d 31  |ly%>-28 . ly%<-1|
00001900  34 29 20 84 20 28 6c 64  69 72 25 3d 32 20 80 20  |4) . (ldir%=2 . |
00001910  6c 79 25 3e 2d 33 36 20  80 20 6c 79 25 3c 2d 31  |ly%>-36 . ly%<-1|
00001920  30 29 29 29 0d 0a 50 34  f2 61 64 64 5f 64 6f 6d  |0)))..P4.add_dom|
00001930  69 6e 6f 28 6c 78 25 2c  6c 79 25 2c 6c 64 69 72  |ino(lx%,ly%,ldir|
00001940  25 2c 6c 73 68 61 70 65  25 2c 4c 25 2c 52 25 2c  |%,lshape%,L%,R%,|
00001950  64 6f 75 62 6c 65 25 29  0d 0a 5a 0e c8 8e 20 6c  |double%)..Z... l|
00001960  64 69 72 25 20 ca 0d 0a  64 2d 20 c9 20 30 20 3a  |dir% ...d- . 0 :|
00001970  20 e7 20 6c 79 25 3d 2d  31 32 20 6c 64 69 72 25  | . ly%=-12 ldir%|
00001980  3d 33 3a 6c 78 25 2d 3d  32 3a 6c 73 68 61 70 65  |=3:lx%-=2:lshape|
00001990  25 3d 38 0d 0a 6e 30 20  20 20 20 20 20 20 20 20  |%=8..n0         |
000019a0  20 e7 20 6c 79 25 3d 2d  31 30 20 6c 64 69 72 25  | . ly%=-10 ldir%|
000019b0  3d 33 3a 6c 78 25 2d 3d  36 3a 6c 73 68 61 70 65  |=3:lx%-=6:lshape|
000019c0  25 3d 39 0d 0a 78 2d 20  c9 20 32 20 3a 20 e7 20  |%=9..x- . 2 : . |
000019d0  6c 79 25 3d 2d 33 38 20  6c 64 69 72 25 3d 33 3a  |ly%=-38 ldir%=3:|
000019e0  6c 79 25 2b 3d 32 3a 6c  73 68 61 70 65 25 3d 36  |ly%+=2:lshape%=6|
000019f0  0d 0a 82 30 20 20 20 20  20 20 20 20 20 20 e7 20  |...0          . |
00001a00  6c 79 25 3d 2d 34 30 20  6c 64 69 72 25 3d 33 3a  |ly%=-40 ldir%=3:|
00001a10  6c 79 25 2b 3d 36 3a 6c  73 68 61 70 65 25 3d 37  |ly%+=6:lshape%=7|
00001a20  0d 0a 8c 2d 20 c9 20 33  20 3a 20 e7 20 6c 79 25  |...- . 3 : . ly%|
00001a30  3d 2d 32 38 20 6c 64 69  72 25 3d 30 3a 6c 78 25  |=-28 ldir%=0:lx%|
00001a40  2b 3d 36 3a 6c 73 68 61  70 65 25 3d 34 0d 0a 96  |+=6:lshape%=4...|
00001a50  30 20 20 20 20 20 20 20  20 20 20 e7 20 6c 79 25  |0          . ly%|
00001a60  3d 2d 33 30 20 6c 64 69  72 25 3d 30 3a 6c 78 25  |=-30 ldir%=0:lx%|
00001a70  2b 3d 32 3a 6c 73 68 61  70 65 25 3d 33 0d 0a a0  |+=2:lshape%=3...|
00001a80  30 20 20 20 20 20 20 20  20 20 20 e7 20 6c 79 25  |0          . ly%|
00001a90  3d 2d 36 20 20 6c 64 69  72 25 3d 32 3a 6c 79 25  |=-6  ldir%=2:ly%|
00001aa0  2d 3d 32 3a 6c 73 68 61  70 65 25 3d 35 0d 0a aa  |-=2:lshape%=5...|
00001ab0  30 20 20 20 20 20 20 20  20 20 20 e7 20 6c 79 25  |0          . ly%|
00001ac0  3d 2d 34 20 20 6c 64 69  72 25 3d 32 3a 6c 79 25  |=-4  ldir%=2:ly%|
00001ad0  2d 3d 36 3a 6c 73 68 61  70 65 25 3d 31 0d 0a b4  |-=6:lshape%=1...|
00001ae0  05 cb 0d 0a be 12 f2 64  6f 6d 69 6e 6f 5f 70 6c  |.......domino_pl|
00001af0  61 79 65 64 0d 0a c8 05  e1 0d 0a d2 05 3a 0d 0a  |ayed.........:..|
00001b00  dc 20 dd f2 61 64 64 5f  64 6f 6d 69 6e 6f 5f 74  |. ..add_domino_t|
00001b10  6f 5f 72 69 67 68 74 28  4c 25 2c 52 25 29 0d 0a  |o_right(L%,R%)..|
00001b20  e6 0d 72 64 6f 74 73 25  3d 52 25 0d 0a f0 16 e7  |..rdots%=R%.....|
00001b30  20 72 64 69 72 25 3d 32  20 c8 94 20 4c 25 2c 52  | rdir%=2 .. L%,R|
00001b40  25 0d 0a fa 54 64 6f 75  62 6c 65 25 3d 28 4c 25  |%...Tdouble%=(L%|
00001b50  3d 52 25 20 80 20 28 28  72 64 69 72 25 3d 30 20  |=R% . ((rdir%=0 |
00001b60  80 20 72 79 25 3e 2d 33  34 20 80 20 72 79 25 3c  |. ry%>-34 . ry%<|
00001b70  2d 38 29 20 84 20 28 72  64 69 72 25 3d 32 20 80  |-8) . (rdir%=2 .|
00001b80  20 72 79 25 3e 2d 33 30  20 80 20 72 79 25 3c 2d  | ry%>-30 . ry%<-|
00001b90  31 36 29 29 29 0d 0b 04  34 f2 61 64 64 5f 64 6f  |16)))...4.add_do|
00001ba0  6d 69 6e 6f 28 72 78 25  2c 72 79 25 2c 72 64 69  |mino(rx%,ry%,rdi|
00001bb0  72 25 2c 72 73 68 61 70  65 25 2c 4c 25 2c 52 25  |r%,rshape%,L%,R%|
00001bc0  2c 64 6f 75 62 6c 65 25  29 0d 0b 0e 0e c8 8e 20  |,double%)...... |
00001bd0  72 64 69 72 25 20 ca 0d  0b 18 2d 20 c9 20 30 20  |rdir% ....- . 0 |
00001be0  3a 20 e7 20 72 79 25 3d  2d 34 20 20 72 64 69 72  |: . ry%=-4  rdir|
00001bf0  25 3d 31 3a 72 79 25 2d  3d 36 3a 72 73 68 61 70  |%=1:ry%-=6:rshap|
00001c00  65 25 3d 36 0d 0b 22 31  20 20 20 20 20 20 20 20  |e%=6.."1        |
00001c10  20 20 e7 20 72 79 25 3d  2d 36 20 20 72 64 69 72  |  . ry%=-6  rdir|
00001c20  25 3d 31 3a 72 79 25 2d  3d 32 3a 72 73 68 61 70  |%=1:ry%-=2:rshap|
00001c30  65 25 3d 31 30 0d 0b 2c  2d 20 c9 20 31 20 3a 20  |e%=10..,- . 1 : |
00001c40  e7 20 72 79 25 3d 2d 31  34 20 72 64 69 72 25 3d  |. ry%=-14 rdir%=|
00001c50  32 3a 72 78 25 2d 3d 32  3a 72 73 68 61 70 65 25  |2:rx%-=2:rshape%|
00001c60  3d 31 0d 0b 36 30 20 20  20 20 20 20 20 20 20 20  |=1..60          |
00001c70  e7 20 72 79 25 3d 2d 31  36 20 72 64 69 72 25 3d  |. ry%=-16 rdir%=|
00001c80  32 3a 72 78 25 2d 3d 36  3a 72 73 68 61 70 65 25  |2:rx%-=6:rshape%|
00001c90  3d 31 0d 0b 40 30 20 20  20 20 20 20 20 20 20 20  |=1..@0          |
00001ca0  e7 20 72 79 25 3d 2d 34  30 20 72 64 69 72 25 3d  |. ry%=-40 rdir%=|
00001cb0  30 3a 72 79 25 2b 3d 36  3a 72 73 68 61 70 65 25  |0:ry%+=6:rshape%|
00001cc0  3d 32 0d 0b 4a 30 20 20  20 20 20 20 20 20 20 20  |=2..J0          |
00001cd0  e7 20 72 79 25 3d 2d 33  38 20 72 64 69 72 25 3d  |. ry%=-38 rdir%=|
00001ce0  30 3a 72 79 25 2b 3d 32  3a 72 73 68 61 70 65 25  |0:ry%+=2:rshape%|
00001cf0  3d 31 0d 0b 54 2d 20 c9  20 32 20 3a 20 e7 20 72  |=1..T- . 2 : . r|
00001d00  79 25 3d 2d 33 34 20 72  64 69 72 25 3d 31 3a 72  |y%=-34 rdir%=1:r|
00001d10  78 25 2b 3d 36 3a 72 73  68 61 70 65 25 3d 36 0d  |x%+=6:rshape%=6.|
00001d20  0b 5e 30 20 20 20 20 20  20 20 20 20 20 e7 20 72  |.^0          . r|
00001d30  79 25 3d 2d 33 32 20 72  64 69 72 25 3d 31 3a 72  |y%=-32 rdir%=1:r|
00001d40  78 25 2b 3d 32 3a 72 73  68 61 70 65 25 3d 36 0d  |x%+=2:rshape%=6.|
00001d50  0b 68 05 cb 0d 0b 72 12  f2 64 6f 6d 69 6e 6f 5f  |.h....r..domino_|
00001d60  70 6c 61 79 65 64 0d 0b  7c 05 e1 0d 0b 86 05 3a  |played..|......:|
00001d70  0d 0b 90 37 dd f2 61 64  64 5f 64 6f 6d 69 6e 6f  |...7..add_domino|
00001d80  28 f8 20 58 25 2c f8 20  59 25 2c 64 69 72 25 2c  |(. X%,. Y%,dir%,|
00001d90  f8 20 73 68 61 70 65 25  2c 4c 25 2c 52 25 2c 64  |. shape%,L%,R%,d|
00001da0  6f 75 62 6c 65 25 29 0d  0b 9a 27 e7 20 64 6f 75  |ouble%)...'. dou|
00001db0  62 6c 65 25 20 f2 61 64  64 5f 64 6f 75 62 6c 65  |ble% .add_double|
00001dc0  20 8b 20 f2 61 64 64 5f  73 69 6e 67 6c 65 0d 0b  | . .add_single..|
00001dd0  a4 05 e1 0d 0b ae 05 3a  0d 0b b8 10 dd f2 61 64  |.......:......ad|
00001de0  64 5f 64 6f 75 62 6c 65  0d 0b c2 0d c8 8e 20 64  |d_double...... d|
00001df0  69 72 25 20 ca 0d 0b cc  42 20 c9 20 30 20 3a 20  |ir% ....B . 0 : |
00001e00  f2 63 72 65 61 74 65 5f  64 6f 6d 69 6e 6f 28 58  |.create_domino(X|
00001e10  25 2d 31 2c 59 25 2d 31  2c 31 31 2c 4c 25 2c 52  |%-1,Y%-1,11,L%,R|
00001e20  25 29 3a 58 25 2b 3d 32  3a 59 25 2b 3d 32 3a 73  |%):X%+=2:Y%+=2:s|
00001e30  68 61 70 65 25 3d 34 0d  0b d6 38 20 c9 20 32 20  |hape%=4...8 . 2 |
00001e40  3a 20 f2 63 72 65 61 74  65 5f 64 6f 6d 69 6e 6f  |: .create_domino|
00001e50  28 58 25 2b 31 2c 59 25  2b 31 2c 36 2c 4c 25 2c  |(X%+1,Y%+1,6,L%,|
00001e60  52 25 29 3a 58 25 2d 3d  32 3a 59 25 2d 3d 32 0d  |R%):X%-=2:Y%-=2.|
00001e70  0b e0 05 cb 0d 0b ea 05  e1 0d 0b f4 05 3a 0d 0b  |.............:..|
00001e80  fe 10 dd f2 61 64 64 5f  73 69 6e 67 6c 65 0d 0c  |....add_single..|
00001e90  08 26 f2 63 72 65 61 74  65 5f 64 6f 6d 69 6e 6f  |.&.create_domino|
00001ea0  28 58 25 2c 59 25 2c 73  68 61 70 65 25 2c 4c 25  |(X%,Y%,shape%,L%|
00001eb0  2c 52 25 29 0d 0c 12 0d  c8 8e 20 64 69 72 25 20  |,R%)...... dir% |
00001ec0  ca 0d 0c 1c 1f 20 c9 20  30 20 3a 20 58 25 2b 3d  |..... . 0 : X%+=|
00001ed0  34 3a 59 25 2b 3d 34 3a  73 68 61 70 65 25 3d 32  |4:Y%+=4:shape%=2|
00001ee0  0d 0c 26 1f 20 c9 20 31  20 3a 20 58 25 2b 3d 34  |..&. . 1 : X%+=4|
00001ef0  3a 59 25 2d 3d 34 3a 73  68 61 70 65 25 3d 36 0d  |:Y%-=4:shape%=6.|
00001f00  0c 30 1f 20 c9 20 32 20  3a 20 58 25 2d 3d 34 3a  |.0. . 2 : X%-=4:|
00001f10  59 25 2d 3d 34 3a 73 68  61 70 65 25 3d 31 0d 0c  |Y%-=4:shape%=1..|
00001f20  3a 1f 20 c9 20 33 20 3a  20 58 25 2d 3d 34 3a 59  |:. . 3 : X%-=4:Y|
00001f30  25 2b 3d 34 3a 73 68 61  70 65 25 3d 37 0d 0c 44  |%+=4:shape%=7..D|
00001f40  05 cb 0d 0c 4e 05 e1 0d  0c 58 05 3a 0d 0c 62 27  |....N....X.:..b'|
00001f50  dd f2 63 72 65 61 74 65  5f 64 6f 6d 69 6e 6f 28  |..create_domino(|
00001f60  58 25 2c 59 25 2c 73 68  61 70 65 25 2c 4c 25 2c  |X%,Y%,shape%,L%,|
00001f70  52 25 29 0d 0c 6c 1a 58  25 3d 58 25 2a 32 34 2b  |R%)..l.X%=X%*24+|
00001f80  31 32 3a 59 25 3d 59 25  2a 31 36 2b 34 0d 0c 76  |12:Y%=Y%*16+4..v|
00001f90  27 e7 20 20 58 25 2d 31  30 3c 6c 6d 69 6e 25 20  |'.  X%-10<lmin% |
00001fa0  f2 63 68 61 6e 67 65 5f  73 68 61 70 65 28 58 25  |.change_shape(X%|
00001fb0  2d 31 30 29 0d 0c 80 28  e7 20 58 25 2b 31 36 30  |-10)...(. X%+160|
00001fc0  3e 72 6d 61 78 25 20 f2  63 68 61 6e 67 65 5f 73  |>rmax% .change_s|
00001fd0  68 61 70 65 28 58 25 2b  31 36 30 29 0d 0c 8a 3a  |hape(X%+160)...:|
00001fe0  44 25 3d a4 63 72 65 61  74 65 5f 69 63 6f 6e 28  |D%=.create_icon(|
00001ff0  77 5f 6d 61 69 6e 25 2c  22 64 6f 6d 22 2b c3 73  |w_main%,"dom"+.s|
00002000  68 61 70 65 25 2c 58 25  2c 59 25 2c 31 35 30 2c  |hape%,X%,Y%,150,|
00002010  31 32 30 2c 32 29 0d 0c  94 10 e7 20 73 68 61 70  |120,2)..... shap|
00002020  65 25 3c 36 20 8c 0d 0c  9e 3c 20 41 25 3d a4 63  |e%<6 ....< A%=.c|
00002030  72 65 61 74 65 5f 69 63  6f 6e 28 77 5f 6d 61 69  |reate_icon(w_mai|
00002040  6e 25 2c 64 6f 74 24 28  4c 25 2c 30 29 2c 58 25  |n%,dot$(L%,0),X%|
00002050  2b 32 30 2c 59 25 2b 33  32 2c 36 32 2c 34 34 2c  |+20,Y%+32,62,44,|
00002060  32 29 0d 0c a8 3c 20 41  25 3d a4 63 72 65 61 74  |2)...< A%=.creat|
00002070  65 5f 69 63 6f 6e 28 77  5f 6d 61 69 6e 25 2c 64  |e_icon(w_main%,d|
00002080  6f 74 24 28 52 25 2c 30  29 2c 58 25 2b 36 38 2c  |ot$(R%,0),X%+68,|
00002090  59 25 2b 36 34 2c 36 32  2c 34 34 2c 32 29 0d 0c  |Y%+64,62,44,2)..|
000020a0  b2 05 cc 0d 0c bc 3c 20  41 25 3d a4 63 72 65 61  |......< A%=.crea|
000020b0  74 65 5f 69 63 6f 6e 28  77 5f 6d 61 69 6e 25 2c  |te_icon(w_main%,|
000020c0  64 6f 74 24 28 4c 25 2c  31 29 2c 58 25 2b 32 30  |dot$(L%,1),X%+20|
000020d0  2c 59 25 2b 36 34 2c 36  32 2c 34 34 2c 32 29 0d  |,Y%+64,62,44,2).|
000020e0  0c c6 3c 20 41 25 3d a4  63 72 65 61 74 65 5f 69  |..< A%=.create_i|
000020f0  63 6f 6e 28 77 5f 6d 61  69 6e 25 2c 64 6f 74 24  |con(w_main%,dot$|
00002100  28 52 25 2c 31 29 2c 58  25 2b 36 38 2c 59 25 2b  |(R%,1),X%+68,Y%+|
00002110  33 32 2c 36 32 2c 34 34  2c 32 29 0d 0c d0 05 cd  |32,62,44,2).....|
00002120  0d 0c da 23 f2 73 65 74  5f 69 63 6f 6e 5f 73 74  |...#.set_icon_st|
00002130  61 74 65 28 77 5f 6d 61  69 6e 25 2c 44 25 2c 30  |ate(w_main%,D%,0|
00002140  2c 30 29 0d 0c e4 05 e1  0d 0c ee 05 3a 0d 0c f8  |,0).........:...|
00002150  13 dd f2 64 6f 6d 69 6e  6f 5f 70 6c 61 79 65 64  |...domino_played|
00002160  0d 0d 02 0e 70 6c 61 79  65 64 25 2b 3d 31 0d 0d  |....played%+=1..|
00002170  0c 1a f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |...close_window(|
00002180  77 5f 64 6f 6d 73 25 29  0d 0d 16 71 e7 20 64 6f  |w_doms%)...q. do|
00002190  6d 25 3c 3e 6c 61 73 74  25 28 74 75 72 6e 25 29  |m%<>last%(turn%)|
000021a0  20 e3 20 44 25 3d 64 6f  6d 25 20 b8 20 6c 61 73  | . D%=dom% . las|
000021b0  74 25 28 74 75 72 6e 25  29 2d 31 3a 64 6f 6d 69  |t%(turn%)-1:domi|
000021c0  6e 6f 25 28 44 25 2c 30  29 3d 64 6f 6d 69 6e 6f  |no%(D%,0)=domino|
000021d0  25 28 44 25 2b 31 2c 30  29 3a 64 6f 6d 69 6e 6f  |%(D%+1,0):domino|
000021e0  25 28 44 25 2c 31 29 3d  64 6f 6d 69 6e 6f 25 28  |%(D%,1)=domino%(|
000021f0  44 25 2b 31 2c 31 29 3a  ed 0d 0d 20 37 f2 73 65  |D%+1,1):... 7.se|
00002200  74 5f 69 63 6f 6e 5f 73  74 61 74 65 28 77 5f 70  |t_icon_state(w_p|
00002210  6c 61 79 65 72 73 25 2c  31 37 2b 6c 61 73 74 25  |layers%,17+last%|
00002220  28 74 75 72 6e 25 29 2c  26 46 30 30 32 2c 30 29  |(turn%),&F002,0)|
00002230  0d 0d 2a 13 6c 61 73 74  25 28 74 75 72 6e 25 29  |..*.last%(turn%)|
00002240  2d 3d 31 0d 0d 34 1c e7  20 6c 61 73 74 25 28 74  |-=1..4.. last%(t|
00002250  75 72 6e 25 29 3c 74 75  72 6e 25 2a 37 20 8c 0d  |urn%)<turn%*7 ..|
00002260  0d 3e 3a 20 f2 77 72 69  74 65 5f 73 74 72 69 6e  |.>: .write_strin|
00002270  67 28 74 75 72 6e 25 2c  33 2c 22 54 68 65 20 77  |g(turn%,3,"The w|
00002280  69 6e 6e 65 72 22 29 3a  f2 69 6e 63 5f 73 63 6f  |inner"):.inc_sco|
00002290  72 65 28 74 75 72 6e 25  29 0d 0d 48 05 cc 0d 0d  |re(turn%)..H....|
000022a0  52 11 20 f2 6e 65 78 74  5f 70 6c 61 79 65 72 0d  |R. .next_player.|
000022b0  0d 5c 05 cd 0d 0d 66 05  e1 0d 0d 70 05 3a 0d 0d  |.\....f....p.:..|
000022c0  7a 1b 2a 2a 2a 20 67 61  6d 65 20 6f 76 65 72 20  |z.*** game over |
000022d0  66 75 6e 63 74 69 6f 6e  73 0d 0d 84 05 3a 0d 0d  |functions....:..|
000022e0  8e 18 dd f2 69 6e 63 5f  73 63 6f 72 65 28 70 6c  |....inc_score(pl|
000022f0  61 79 65 72 25 29 0d 0d  98 0c 74 75 72 6e 25 3d  |ayer%)....turn%=|
00002300  2d 31 0d 0d a2 0d 70 6c  61 79 65 64 25 3d 30 0d  |-1....played%=0.|
00002310  0d ac 20 53 25 3d bb 28  a4 67 65 74 5f 73 74 72  |.. S%=.(.get_str|
00002320  69 6e 67 28 70 6c 61 79  65 72 25 2c 32 29 29 0d  |ing(player%,2)).|
00002330  0d b6 24 f2 77 72 69 74  65 5f 73 74 72 69 6e 67  |..$.write_string|
00002340  28 70 6c 61 79 65 72 25  2c 32 2c c3 28 53 25 2b  |(player%,2,.(S%+|
00002350  31 29 29 0d 0d c0 05 e1  0d 0d ca 05 3a 0d 0d d4  |1)).........:...|
00002360  14 dd f2 61 64 64 5f 64  6f 74 5f 74 6f 74 61 6c  |...add_dot_total|
00002370  73 0d 0d de 0d 64 6f 74  73 25 28 29 3d 30 0d 0d  |s....dots%()=0..|
00002380  e8 13 e3 20 70 6c 61 79  65 72 25 3d 30 20 b8 20  |... player%=0 . |
00002390  33 0d 0d f2 25 e3 20 64  6f 6d 25 3d 70 6c 61 79  |3...%. dom%=play|
000023a0  65 72 25 2a 37 20 b8 20  6c 61 73 74 25 28 70 6c  |er%*7 . last%(pl|
000023b0  61 79 65 72 25 29 0d 0d  fc 33 64 6f 74 73 25 28  |ayer%)...3dots%(|
000023c0  70 6c 61 79 65 72 25 29  2b 3d 64 6f 6d 69 6e 6f  |player%)+=domino|
000023d0  25 28 64 6f 6d 25 2c 30  29 2b 64 6f 6d 69 6e 6f  |%(dom%,0)+domino|
000023e0  25 28 64 6f 6d 25 2c 31  29 0d 0e 06 06 ed 2c 0d  |%(dom%,1).....,.|
000023f0  0e 10 11 77 69 6e 5f 74  6f 74 61 6c 25 3d 39 39  |...win_total%=99|
00002400  0d 0e 1a 13 e3 20 70 6c  61 79 65 72 25 3d 30 20  |..... player%=0 |
00002410  b8 20 33 0d 0e 24 19 e7  20 73 74 61 74 65 25 28  |. 3..$.. state%(|
00002420  70 6c 61 79 65 72 25 29  3c 32 20 8c 0d 0e 2e 28  |player%)<2 ....(|
00002430  20 e7 20 64 6f 74 73 25  28 70 6c 61 79 65 72 25  | . dots%(player%|
00002440  29 3d 77 69 6e 5f 74 6f  74 61 6c 25 20 64 72 61  |)=win_total% dra|
00002450  77 25 3d b9 0d 0e 38 42  20 e7 20 64 6f 74 73 25  |w%=...8B . dots%|
00002460  28 70 6c 61 79 65 72 25  29 3c 77 69 6e 5f 74 6f  |(player%)<win_to|
00002470  74 61 6c 25 20 77 69 6e  5f 74 6f 74 61 6c 25 3d  |tal% win_total%=|
00002480  64 6f 74 73 25 28 70 6c  61 79 65 72 25 29 3a 64  |dots%(player%):d|
00002490  72 61 77 25 3d a3 0d 0e  42 05 cd 0d 0e 4c 05 ed  |raw%=...B....L..|
000024a0  0d 0e 56 13 e3 20 70 6c  61 79 65 72 25 3d 30 20  |..V.. player%=0 |
000024b0  b8 20 33 0d 0e 60 19 e7  20 73 74 61 74 65 25 28  |. 3..`.. state%(|
000024c0  70 6c 61 79 65 72 25 29  3c 32 20 8c 0d 0e 6a 25  |player%)<2 ...j%|
000024d0  20 77 6f 6e 25 3d 28 64  6f 74 73 25 28 70 6c 61  | won%=(dots%(pla|
000024e0  79 65 72 25 29 3d 77 69  6e 5f 74 6f 74 61 6c 25  |yer%)=win_total%|
000024f0  29 0d 0e 74 0b 20 c8 8e  20 b9 20 ca 0d 0e 7e 2e  |)..t. .. . ...~.|
00002500  20 20 c9 20 77 6f 6e 25  20 80 20 ac 20 64 72 61  |  . won% . . dra|
00002510  77 25 20 3a 20 41 24 3d  22 54 68 65 20 77 69 6e  |w% : A$="The win|
00002520  6e 65 72 20 77 69 74 68  20 22 0d 0e 88 1f 20 20  |ner with "....  |
00002530  c9 20 77 6f 6e 25 20 3a  20 41 24 3d 22 44 72 61  |. won% : A$="Dra|
00002540  77 6e 20 77 69 74 68 20  22 0d 0e 92 0f 20 20 7f  |wn with "....  .|
00002550  20 3a 20 41 24 3d 22 22  0d 0e 9c 06 20 cb 0d 0e  | : A$="".... ...|
00002560  a6 1f 20 41 24 2b 3d c3  64 6f 74 73 25 28 70 6c  |.. A$+=.dots%(pl|
00002570  61 79 65 72 25 29 2b 22  20 64 6f 74 22 0d 0e b0  |ayer%)+" dot"...|
00002580  20 20 e7 20 64 6f 74 73  25 28 70 6c 61 79 65 72  |  . dots%(player|
00002590  25 29 3c 3e 31 20 41 24  2b 3d 22 73 22 0d 0e ba  |%)<>1 A$+="s"...|
000025a0  20 20 f2 77 72 69 74 65  5f 73 74 72 69 6e 67 28  |  .write_string(|
000025b0  70 6c 61 79 65 72 25 2c  33 2c 41 24 29 0d 0e c4  |player%,3,A$)...|
000025c0  1f 20 e7 20 77 6f 6e 25  20 f2 69 6e 63 5f 73 63  |. . won% .inc_sc|
000025d0  6f 72 65 28 70 6c 61 79  65 72 25 29 0d 0e ce 05  |ore(player%)....|
000025e0  cd 0d 0e d8 05 ed 0d 0e  e2 05 e1 0d 0e ec 05 3a  |...............:|
000025f0  0d 0e f6 12 2a 2a 2a 20  6d 69 73 63 20 75 74 69  |....*** misc uti|
00002600  6c 73 0d 0f 00 05 3a 0d  0f 0a 16 dd f2 63 68 61  |ls....:......cha|
00002610  6e 67 65 5f 73 68 61 70  65 28 58 25 29 0d 0f 14  |nge_shape(X%)...|
00002620  2f e7 20 58 25 3c 30 20  6c 6d 69 6e 25 3d 58 25  |/. X%<0 lmin%=X%|
00002630  3a 58 25 3d 2d 39 39 39  39 20 8b 20 72 6d 61 78  |:X%=-9999 . rmax|
00002640  25 3d 58 25 3a 58 25 3d  39 39 39 39 0d 0f 1e 1e  |%=X%:X%=9999....|
00002650  6d 69 64 25 3d 6c 6d 69  6e 25 2b 28 72 6d 61 78  |mid%=lmin%+(rmax|
00002660  25 2d 6c 6d 69 6e 25 29  2f 32 0d 0f 28 2f 68 61  |%-lmin%)/2..(/ha|
00002670  6c 66 25 3d 28 72 6d 61  78 25 2d 6c 6d 69 6e 25  |lf%=(rmax%-lmin%|
00002680  29 2f 32 3a e7 20 68 61  6c 66 25 3c 36 33 38 20  |)/2:. half%<638 |
00002690  68 61 6c 66 25 3d 36 33  38 0d 0f 32 35 f2 73 65  |half%=638..25.se|
000026a0  74 5f 65 78 74 65 6e 74  28 77 5f 6d 61 69 6e 25  |t_extent(w_main%|
000026b0  2c 6d 69 64 25 2d 68 61  6c 66 25 2c 2d 35 37 32  |,mid%-half%,-572|
000026c0  2c 6d 69 64 25 2b 68 61  6c 66 25 2c 30 29 0d 0f  |,mid%+half%,0)..|
000026d0  3c 17 f2 73 63 72 6f 6c  6c 28 77 5f 6d 61 69 6e  |<..scroll(w_main|
000026e0  25 2c 58 25 29 0d 0f 46  05 e1 0d 0f 50 05 3a 0d  |%,X%)..F....P.:.|
000026f0  0f 5a 0f 2a 2a 2a 20 72  65 73 74 61 72 74 0d 0f  |.Z.*** restart..|
00002700  64 05 3a 0d 0f 6e 1a dd  f2 73 74 61 72 74 5f 6e  |d.:..n...start_n|
00002710  65 77 5f 67 61 6d 65 28  77 68 6f 25 29 0d 0f 78  |ew_game(who%)..x|
00002720  05 f5 0d 0f 82 0e 20 c8  8e 20 77 68 6f 25 20 ca  |...... .. who% .|
00002730  0d 0f 8c 26 20 20 c9 20  2d 31 2c 30 20 3a 20 73  |...&  . -1,0 : s|
00002740  74 61 72 74 65 72 25 3d  28 73 74 61 72 74 65 72  |tarter%=(starter|
00002750  25 2b 31 29 83 34 0d 0f  96 1b 20 20 c9 20 31 20  |%+1).4....  . 1 |
00002760  3a 20 73 74 61 72 74 65  72 25 3d b3 28 34 29 2d  |: starter%=.(4)-|
00002770  31 0d 0f a0 19 20 20 7f  20 3a 20 73 74 61 72 74  |1....  . : start|
00002780  65 72 25 3d 77 68 6f 25  2d 32 0d 0f aa 06 20 cb  |er%=who%-2.... .|
00002790  0d 0f b4 19 fd 20 73 74  61 74 65 25 28 73 74 61  |..... state%(sta|
000027a0  72 74 65 72 25 29 3c 3e  32 0d 0f be 05 3a 0d 0f  |rter%)<>2....:..|
000027b0  c8 2f 74 75 72 6e 25 3d  73 74 61 72 74 65 72 25  |./turn%=starter%|
000027c0  20 20 20 20 20 20 20 20  20 20 3a f4 20 77 68 6f  |          :. who|
000027d0  73 65 20 74 75 72 6e 20  69 73 20 69 74 0d 0f d2  |se turn is it...|
000027e0  42 6c 78 25 3d 2d 34 20  20 20 20 3a 72 78 25 3d  |Blx%=-4    :rx%=|
000027f0  34 20 20 20 20 20 20 20  20 3a f4 20 78 20 63 6f  |4        :. x co|
00002800  6f 72 64 69 6e 61 74 65  20 6f 66 20 6c 65 66 74  |ordinate of left|
00002810  20 61 6e 64 20 72 69 67  68 74 20 65 6e 64 73 0d  | and right ends.|
00002820  0f dc 42 6c 79 25 3d 2d  32 36 20 20 20 3a 72 79  |..Bly%=-26   :ry|
00002830  25 3d 2d 31 38 20 20 20  20 20 20 3a f4 20 79 20  |%=-18      :. y |
00002840  63 6f 6f 72 64 69 6e 61  74 65 20 6f 66 20 6c 65  |coordinate of le|
00002850  66 74 20 61 6e 64 20 72  69 67 68 74 20 65 6e 64  |ft and right end|
00002860  73 0d 0f e6 41 6c 64 6f  74 73 25 3d 2d 31 20 3a  |s...Aldots%=-1 :|
00002870  72 64 6f 74 73 25 3d 2d  31 20 20 20 20 3a f4 20  |rdots%=-1    :. |
00002880  6e 75 6d 62 65 72 20 6f  66 20 64 6f 74 73 20 61  |number of dots a|
00002890  74 20 65 61 63 68 20 65  6e 64 20 6f 66 20 6c 69  |t each end of li|
000028a0  6e 65 0d 0f f0 34 6c 64  69 72 25 3d 32 20 20 20  |ne...4ldir%=2   |
000028b0  3a 72 64 69 72 25 3d 30  20 20 20 20 20 20 3a f4  |:rdir%=0      :.|
000028c0  20 64 69 72 65 63 74 69  6f 6e 20 61 74 20 65 61  | direction at ea|
000028d0  63 68 20 65 6e 64 0d 0f  fa 37 6c 73 68 61 70 65  |ch end...7lshape|
000028e0  25 3d 31 20 3a 72 73 68  61 70 65 25 3d 32 20 20  |%=1 :rshape%=2  |
000028f0  20 20 3a f4 20 64 6f 6d  69 6e 6f 20 73 68 61 70  |  :. domino shap|
00002900  65 20 61 74 20 65 61 63  68 20 65 6e 64 0d 10 04  |e at each end...|
00002910  43 6c 6d 69 6e 25 3d 30  20 20 20 3a 72 6d 61 78  |Clmin%=0   :rmax|
00002920  25 3d 30 20 20 20 20 20  20 3a f4 20 6c 65 66 74  |%=0      :. left|
00002930  20 61 6e 64 20 72 69 67  68 74 20 65 78 74 65 6e  | and right exten|
00002940  74 20 6f 66 20 64 6f 6d  69 6e 6f 20 6c 69 6e 65  |t of domino line|
00002950  0d 10 0e 2e 63 61 6e 5f  67 6f 25 3d b9 20 20 20  |....can_go%=.   |
00002960  20 20 20 20 20 20 20 20  20 3a f4 20 63 61 6e 20  |         :. can |
00002970  74 68 65 20 70 6c 61 79  65 72 20 67 6f 3f 0d 10  |the player go?..|
00002980  18 47 6e 6f 74 5f 67 6f  6e 65 25 3d 30 20 20 20  |.Gnot_gone%=0   |
00002990  20 20 20 20 20 20 20 20  20 20 3a f4 20 6e 75 6d  |          :. num|
000029a0  20 6f 66 20 70 6c 61 79  65 72 73 20 69 6e 20 61  | of players in a|
000029b0  20 72 6f 77 20 77 68 6f  20 68 61 76 65 6e 27 74  | row who haven't|
000029c0  20 67 6f 6e 65 0d 10 22  35 70 6c 61 79 65 64 25  | gone.."5played%|
000029d0  3d 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |=0              |
000029e0  20 3a f4 20 6e 75 6d 20  6f 66 20 64 6f 6d 69 6e  | :. num of domin|
000029f0  6f 65 73 20 70 6c 61 79  65 64 0d 10 2c 16 f2 63  |oes played..,..c|
00002a00  72 65 61 74 65 5f 64 6f  6d 69 6e 6f 5f 73 65 74  |reate_domino_set|
00002a10  0d 10 36 15 f2 73 68 75  66 66 6c 65 5f 64 6f 6d  |..6..shuffle_dom|
00002a20  69 6e 6f 65 73 0d 10 40  05 3a 0d 10 4a 13 e3 20  |inoes..@.:..J.. |
00002a30  70 6c 61 79 65 72 25 3d  30 20 b8 20 33 0d 10 54  |player%=0 . 3..T|
00002a40  20 20 f2 77 72 69 74 65  5f 73 74 72 69 6e 67 28  |  .write_string(|
00002a50  70 6c 61 79 65 72 25 2c  33 2c 22 22 29 0d 10 5e  |player%,3,"")..^|
00002a60  1f 20 6c 61 73 74 25 28  70 6c 61 79 65 72 25 29  |. last%(player%)|
00002a70  3d 70 6c 61 79 65 72 25  2a 37 2b 36 0d 10 68 05  |=player%*7+6..h.|
00002a80  ed 0d 10 72 34 f2 77 72  69 74 65 5f 73 74 72 69  |...r4.write_stri|
00002a90  6e 67 28 73 74 61 72 74  65 72 25 2c 33 2c 63 61  |ng(starter%,3,ca|
00002aa0  6e 5f 67 6f 24 28 73 74  61 74 65 25 28 74 75 72  |n_go$(state%(tur|
00002ab0  6e 25 29 29 29 0d 10 7c  30 e3 20 69 63 6f 6e 25  |n%)))..|0. icon%|
00002ac0  3d 30 20 b8 20 38 34 3a  f2 64 65 6c 65 74 65 5f  |=0 . 84:.delete_|
00002ad0  69 63 6f 6e 28 77 5f 6d  61 69 6e 25 2c 69 63 6f  |icon(w_main%,ico|
00002ae0  6e 25 29 3a ed 0d 10 86  05 3a 0d 10 90 28 f2 73  |n%):.....:...(.s|
00002af0  65 74 5f 65 78 74 65 6e  74 28 77 5f 6d 61 69 6e  |et_extent(w_main|
00002b00  25 2c 2d 36 33 38 2c 2d  35 37 32 2c 36 33 38 2c  |%,-638,-572,638,|
00002b10  30 29 0d 10 9a 31 c8 99  20 22 57 69 6d 70 5f 46  |0)...1.. "Wimp_F|
00002b20  6f 72 63 65 52 65 64 72  61 77 22 2c 77 5f 6d 61  |orceRedraw",w_ma|
00002b30  69 6e 25 2c 2d 36 33 38  2c 2d 35 37 32 2c 36 33  |in%,-638,-572,63|
00002b40  38 2c 30 0d 10 a4 19 f2  73 63 72 6f 6c 6c 28 77  |8,0.....scroll(w|
00002b50  5f 6d 61 69 6e 25 2c 2d  36 33 38 29 0d 10 ae 05  |_main%,-638)....|
00002b60  e1 0d 10 b8 05 3a 0d 10  c2 17 dd f2 63 72 65 61  |.....:......crea|
00002b70  74 65 5f 64 6f 6d 69 6e  6f 5f 73 65 74 0d 10 cc  |te_domino_set...|
00002b80  0a 64 6f 6d 25 3d 30 0d  10 d6 24 e3 20 6c 65 66  |.dom%=0...$. lef|
00002b90  74 25 3d 30 20 b8 20 36  3a e3 20 72 69 67 68 74  |t%=0 . 6:. right|
00002ba0  25 3d 6c 65 66 74 25 20  b8 20 36 0d 10 e0 30 64  |%=left% . 6...0d|
00002bb0  6f 6d 69 6e 6f 25 28 64  6f 6d 25 2c 30 29 3d 6c  |omino%(dom%,0)=l|
00002bc0  65 66 74 25 3a 64 6f 6d  69 6e 6f 25 28 64 6f 6d  |eft%:domino%(dom|
00002bd0  25 2c 31 29 3d 72 69 67  68 74 25 0d 10 ea 33 f2  |%,1)=right%...3.|
00002be0  73 65 74 5f 69 63 6f 6e  5f 73 74 61 74 65 28 77  |set_icon_state(w|
00002bf0  5f 70 6c 61 79 65 72 73  25 2c 64 6f 6d 25 2b 31  |_players%,dom%+1|
00002c00  37 2c 26 33 30 30 32 2c  26 33 30 30 32 29 0d 10  |7,&3002,&3002)..|
00002c10  f4 0b 64 6f 6d 25 2b 3d  31 0d 10 fe 06 ed 2c 0d  |..dom%+=1.....,.|
00002c20  11 08 05 e1 0d 11 12 05  3a 0d 11 1c 16 dd f2 73  |........:......s|
00002c30  68 75 66 66 6c 65 5f 64  6f 6d 69 6e 6f 65 73 0d  |huffle_dominoes.|
00002c40  11 26 11 e3 20 64 6f 6d  25 3d 30 20 b8 20 32 37  |.&.. dom%=0 . 27|
00002c50  0d 11 30 11 73 77 61 70  25 3d b3 28 32 38 29 2d  |..0.swap%=.(28)-|
00002c60  31 0d 11 3a 27 c8 94 20  64 6f 6d 69 6e 6f 25 28  |1..:'.. domino%(|
00002c70  64 6f 6d 25 2c 30 29 2c  64 6f 6d 69 6e 6f 25 28  |dom%,0),domino%(|
00002c80  73 77 61 70 25 2c 30 29  0d 11 44 27 c8 94 20 64  |swap%,0)..D'.. d|
00002c90  6f 6d 69 6e 6f 25 28 64  6f 6d 25 2c 31 29 2c 64  |omino%(dom%,1),d|
00002ca0  6f 6d 69 6e 6f 25 28 73  77 61 70 25 2c 31 29 0d  |omino%(swap%,1).|
00002cb0  11 4e 2f e7 20 b3 28 32  29 3d 31 20 c8 94 20 64  |.N/. .(2)=1 .. d|
00002cc0  6f 6d 69 6e 6f 25 28 64  6f 6d 25 2c 30 29 2c 64  |omino%(dom%,0),d|
00002cd0  6f 6d 69 6e 6f 25 28 64  6f 6d 25 2c 31 29 0d 11  |omino%(dom%,1)..|
00002ce0  58 05 ed 0d 11 62 05 e1  0d 11 6c 05 3a 0d 11 76  |X....b....l.:..v|
00002cf0  14 2a 2a 2a 20 64 6f 6d  69 6e 6f 20 75 74 69 6c  |.*** domino util|
00002d00  73 0d 11 80 05 3a 0d 11  8a 29 dd f2 77 72 69 74  |s....:...)..writ|
00002d10  65 5f 73 74 72 69 6e 67  28 70 6c 61 79 65 72 25  |e_string(player%|
00002d20  2c 69 63 6f 6e 25 2c 73  74 72 69 6e 67 24 29 0d  |,icon%,string$).|
00002d30  11 94 23 24 28 a4 61 64  64 72 28 70 6c 61 79 65  |..#$(.addr(playe|
00002d40  72 25 2c 69 63 6f 6e 25  29 29 3d 73 74 72 69 6e  |r%,icon%))=strin|
00002d50  67 24 0d 11 9e 35 f2 73  65 74 5f 69 63 6f 6e 5f  |g$...5.set_icon_|
00002d60  73 74 61 74 65 28 77 5f  70 6c 61 79 65 72 73 25  |state(w_players%|
00002d70  2c 31 2b 70 6c 61 79 65  72 25 2a 34 2b 69 63 6f  |,1+player%*4+ico|
00002d80  6e 25 2c 30 2c 30 29 0d  11 a8 05 e1 0d 11 b2 05  |n%,0,0).........|
00002d90  3a 0d 11 bc 1f dd a4 67  65 74 5f 73 74 72 69 6e  |:......get_strin|
00002da0  67 28 70 6c 61 79 65 72  25 2c 69 63 6f 6e 25 29  |g(player%,icon%)|
00002db0  0d 11 c6 1a 3d 24 a4 61  64 64 72 28 70 6c 61 79  |....=$.addr(play|
00002dc0  65 72 25 2c 69 63 6f 6e  25 29 0d 11 d0 05 3a 0d  |er%,icon%)....:.|
00002dd0  11 da 18 dd a4 61 64 64  72 28 70 6c 61 79 65 72  |.....addr(player|
00002de0  25 2c 69 63 6f 6e 29 0d  11 e4 44 3d 62 5f 70 6c  |%,icon)...D=b_pl|
00002df0  61 79 65 72 73 25 2b 39  30 2b 35 38 2a 70 6c 61  |ayers%+90+58*pla|
00002e00  79 65 72 25 2d 31 31 2a  28 69 63 6f 6e 25 3d 31  |yer%-11*(icon%=1|
00002e10  29 2d 31 38 2a 28 69 63  6f 6e 25 3d 32 29 2d 32  |)-18*(icon%=2)-2|
00002e20  31 2a 28 69 63 6f 6e 25  3d 33 29 0d 11 ee 05 3a  |1*(icon%=3)....:|
00002e30  0d 11 f8 12 2a 2a 2a 20  77 69 6d 70 20 75 74 69  |....*** wimp uti|
00002e40  6c 73 0d 12 02 05 3a 0d  12 0c 38 dd f2 73 65 74  |ls....:...8..set|
00002e50  5f 65 78 74 65 6e 74 28  57 25 2c 21 62 6c 6f 63  |_extent(W%,!bloc|
00002e60  6b 25 2c 62 6c 6f 63 6b  25 21 34 2c 62 6c 6f 63  |k%,block%!4,bloc|
00002e70  6b 25 21 38 2c 62 6c 6f  63 6b 25 21 31 32 29 0d  |k%!8,block%!12).|
00002e80  12 16 21 c8 99 20 22 57  69 6d 70 5f 53 65 74 45  |..!.. "Wimp_SetE|
00002e90  78 74 65 6e 74 22 2c 57  25 2c 62 6c 6f 63 6b 25  |xtent",W%,block%|
00002ea0  0d 12 20 05 e1 0d 12 2a  05 3a 0d 12 34 18 dd f2  |.. ....*.:..4...|
00002eb0  73 63 72 6f 6c 6c 28 21  62 6c 6f 63 6b 25 2c 53  |scroll(!block%,S|
00002ec0  25 29 0d 12 3e 24 c8 99  20 22 57 69 6d 70 5f 47  |%)..>$.. "Wimp_G|
00002ed0  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 2c  |etWindowState",,|
00002ee0  62 6c 6f 63 6b 25 0d 12  48 1b 73 63 72 6f 6c 6c  |block%..H.scroll|
00002ef0  25 3d 53 25 3a 62 6c 6f  63 6b 25 21 32 30 3d 53  |%=S%:block%!20=S|
00002f00  25 0d 12 52 20 c8 99 20  22 57 69 6d 70 5f 4f 70  |%..R .. "Wimp_Op|
00002f10  65 6e 57 69 6e 64 6f 77  22 2c 2c 62 6c 6f 63 6b  |enWindow",,block|
00002f20  25 0d 12 5c 05 e1 0d 12  66 05 3a 0d 12 70 15 dd  |%..\....f.:..p..|
00002f30  f2 63 61 72 65 74 5f 74  6f 28 49 25 2c 58 25 29  |.caret_to(I%,X%)|
00002f40  0d 12 7a 37 c8 99 20 22  57 69 6d 70 5f 53 65 74  |..z7.. "Wimp_Set|
00002f50  43 61 72 65 74 50 6f 73  69 74 69 6f 6e 22 2c 77  |CaretPosition",w|
00002f60  5f 70 6c 61 79 65 72 73  25 2c 49 25 2c 58 25 2c  |_players%,I%,X%,|
00002f70  30 2c 2d 31 2c 2d 31 0d  12 84 05 e1 0d 12 8e 05  |0,-1,-1.........|
00002f80  3a 0d 12 98 23 dd f2 64  65 6c 65 74 65 5f 69 63  |:...#..delete_ic|
00002f90  6f 6e 28 21 62 6c 6f 63  6b 25 2c 62 6c 6f 63 6b  |on(!block%,block|
00002fa0  25 21 34 29 0d 12 a2 20  c8 99 20 22 57 69 6d 70  |%!4)... .. "Wimp|
00002fb0  5f 44 65 6c 65 74 65 49  63 6f 6e 22 2c 2c 62 6c  |_DeleteIcon",,bl|
00002fc0  6f 63 6b 25 0d 12 ac 05  e1 0d 12 b6 05 3a 0d 12  |ock%.........:..|
00002fd0  c0 39 dd f2 73 65 74 5f  69 63 6f 6e 5f 73 74 61  |.9..set_icon_sta|
00002fe0  74 65 28 21 62 6c 6f 63  6b 25 2c 62 6c 6f 63 6b  |te(!block%,block|
00002ff0  25 21 34 2c 62 6c 6f 63  6b 25 21 31 32 2c 62 6c  |%!4,block%!12,bl|
00003000  6f 63 6b 25 21 38 29 0d  12 ca 22 c8 99 20 22 57  |ock%!8)...".. "W|
00003010  69 6d 70 5f 53 65 74 49  63 6f 6e 53 74 61 74 65  |imp_SetIconState|
00003020  22 2c 2c 62 6c 6f 63 6b  25 0d 12 d4 05 e1 0d 12  |",,block%.......|
00003030  de 05 3a 0d 12 e8 0d 2a  2a 2a 20 65 72 72 6f 72  |..:....*** error|
00003040  0d 12 f2 05 3a 0d 12 fc  20 dd f2 65 72 72 6f 72  |....:... ..error|
00003050  28 21 62 6c 6f 63 6b 25  2c 24 28 62 6c 6f 63 6b  |(!block%,$(block|
00003060  25 2b 34 29 29 0d 13 06  30 c8 99 20 22 57 69 6d  |%+4))...0.. "Wim|
00003070  70 5f 52 65 70 6f 72 74  45 72 72 6f 72 22 2c 62  |p_ReportError",b|
00003080  6c 6f 63 6b 25 2c 31 2c  22 33 44 20 44 6f 6d 69  |lock%,1,"3D Domi|
00003090  6e 6f 65 73 22 0d 13 10  05 e1 0d 13 1a 05 3a 0d  |noes".........:.|
000030a0  13 24 16 2a 2a 2a 20 69  6e 69 74 69 61 6c 69 73  |.$.*** initialis|
000030b0  61 74 69 6f 6e 0d 13 2e  05 3a 0d 13 38 10 dd f2  |ation....:..8...|
000030c0  69 6e 69 74 69 61 6c 69  73 65 0d 13 42 3a c8 99  |initialise..B:..|
000030d0  20 22 57 69 6d 70 5f 49  6e 69 74 69 61 6c 69 73  | "Wimp_Initialis|
000030e0  65 22 2c 32 30 30 2c 26  34 42 35 33 34 31 35 34  |e",200,&4B534154|
000030f0  2c 22 33 44 20 44 6f 6d  69 6e 6f 65 73 20 28 4d  |,"3D Dominoes (M|
00003100  43 49 29 22 0d 13 4c 05  3a 0d 13 56 34 de 20 62  |CI)"..L.:..V4. b|
00003110  6c 6f 63 6b 25 20 32 30  30 30 2c 62 5f 6d 65 6e  |lock% 2000,b_men|
00003120  75 25 20 32 38 2b 33 2a  32 34 2c 62 5f 73 75 62  |u% 28+3*24,b_sub|
00003130  6d 65 6e 75 25 20 32 38  2b 36 2a 32 34 0d 13 60  |menu% 28+6*24..`|
00003140  05 3a 0d 13 6a 11 f2 6c  6f 61 64 5f 73 70 72 69  |.:..j..load_spri|
00003150  74 65 73 0d 13 74 05 3a  0d 13 7e 32 41 25 3d a4  |tes..t.:..~2A%=.|
00003160  63 72 65 61 74 65 5f 69  63 6f 6e 28 2d 31 2c 22  |create_icon(-1,"|
00003170  21 33 64 2d 64 6f 6d 73  22 2c 30 2c 30 2c 37 38  |!3d-doms",0,0,78|
00003180  2c 36 38 2c 26 33 30 30  32 29 0d 13 88 05 3a 0d  |,68,&3002)....:.|
00003190  13 92 32 c8 99 20 22 57  69 6d 70 5f 4f 70 65 6e  |..2.. "Wimp_Open|
000031a0  54 65 6d 70 6c 61 74 65  22 2c 2c 22 3c 4f 62 65  |Template",,"<Obe|
000031b0  79 24 44 69 72 3e 2e 54  65 6d 70 6c 61 74 65 73  |y$Dir>.Templates|
000031c0  22 0d 13 9c 25 f2 6c 6f  61 64 5f 77 69 6e 64 6f  |"...%.load_windo|
000031d0  77 28 22 6d 61 69 6e 22  2c 41 25 2c 30 2c 77 5f  |w("main",A%,0,w_|
000031e0  6d 61 69 6e 25 29 0d 13  a6 35 f2 6c 6f 61 64 5f  |main%)...5.load_|
000031f0  77 69 6e 64 6f 77 28 22  70 6c 61 79 65 72 73 22  |window("players"|
00003200  2c 62 5f 70 6c 61 79 65  72 73 25 2c 34 30 30 2c  |,b_players%,400,|
00003210  77 5f 70 6c 61 79 65 72  73 25 29 0d 13 b0 29 f2  |w_players%)...).|
00003220  6c 6f 61 64 5f 77 69 6e  64 6f 77 28 22 64 6f 6d  |load_window("dom|
00003230  69 6e 6f 65 73 22 2c 41  25 2c 30 2c 77 5f 64 6f  |inoes",A%,0,w_do|
00003240  6d 73 25 29 0d 13 ba 27  f2 6c 6f 61 64 5f 77 69  |ms%)...'.load_wi|
00003250  6e 64 6f 77 28 22 69 6e  66 6f 22 2c 41 25 2c 32  |ndow("info",A%,2|
00003260  35 36 2c 77 5f 69 6e 66  6f 25 29 0d 13 c4 1b c8  |56,w_info%).....|
00003270  99 20 22 57 69 6d 70 5f  43 6c 6f 73 65 54 65 6d  |. "Wimp_CloseTem|
00003280  70 6c 61 74 65 22 0d 13  ce 05 3a 0d 13 d8 0b 71  |plate"....:....q|
00003290  75 69 74 25 3d a3 0d 13  e2 40 de 20 64 6f 74 24  |uit%=....@. dot$|
000032a0  28 36 2c 31 29 20 20 20  20 20 20 3a f4 20 73 70  |(6,1)      :. sp|
000032b0  72 69 74 65 20 6e 61 6d  65 73 20 66 6f 72 20 64  |rite names for d|
000032c0  6f 74 73 20 69 6e 20 62  6f 74 68 20 64 69 72 65  |ots in both dire|
000032d0  63 74 69 6f 6e 73 0d 13  ec 27 dc 20 30 2c 30 2c  |ctions...'. 0,0,|
000032e0  31 2c 31 2c 32 31 2c 32  32 2c 33 31 2c 33 32 2c  |1,1,21,22,31,32,|
000032f0  34 2c 34 2c 35 2c 35 2c  36 31 2c 36 32 0d 13 f6  |4,4,5,5,61,62...|
00003300  28 e3 20 44 25 3d 30 20  b8 20 36 3a f3 20 64 6f  |(. D%=0 . 6:. do|
00003310  74 24 28 44 25 2c 30 29  2c 64 6f 74 24 28 44 25  |t$(D%,0),dot$(D%|
00003320  2c 31 29 3a ed 0d 14 00  45 de 20 64 6f 6d 69 6e  |,1):....E. domin|
00003330  6f 25 28 32 37 2c 31 29  20 20 3a f4 20 64 6f 6d  |o%(27,1)  :. dom|
00003340  69 6e 6f 20 73 65 74 20  30 30 2c 30 31 2c 30 32  |ino set 00,01,02|
00003350  2c 30 33 2c 30 34 2e 2e  2e 34 34 2c 34 35 2c 34  |,03,04...44,45,4|
00003360  36 2c 35 35 2c 35 36 2c  36 36 0d 14 0a 42 de 20  |6,55,56,66...B. |
00003370  6c 61 73 74 25 28 33 29  20 20 20 20 20 20 20 3a  |last%(3)       :|
00003380  f4 20 6e 75 6d 62 65 72  20 6f 66 20 65 61 63 68  |. number of each|
00003390  20 70 6c 61 79 65 72 27  73 20 6c 61 73 74 20 64  | player's last d|
000033a0  6f 6d 69 6e 6f 20 28 30  2d 32 37 29 0d 14 14 43  |omino (0-27)...C|
000033b0  de 20 64 6f 74 73 25 28  33 29 20 20 20 20 20 20  |. dots%(3)      |
000033c0  20 3a f4 20 74 6f 74 61  6c 20 6e 6f 2e 20 64 6f  | :. total no. do|
000033d0  74 73 20 65 61 63 68 20  70 6c 61 79 65 72 20 68  |ts each player h|
000033e0  61 73 20 61 66 74 65 72  20 61 20 64 72 61 77 0d  |as after a draw.|
000033f0  14 1e 33 6e 75 6d 5f 70  6c 61 79 69 6e 67 25 3d  |..3num_playing%=|
00003400  32 20 20 20 20 20 3a f4  20 6e 75 6d 62 65 72 20  |2     :. number |
00003410  6f 66 20 70 6c 61 79 65  72 73 20 70 6c 61 79 69  |of players playi|
00003420  6e 67 0d 14 28 2f de 20  73 74 61 74 65 24 28 32  |ng..(/. state$(2|
00003430  29 3a 73 74 61 74 65 24  28 29 3d 22 68 75 6d 61  |):state$()="huma|
00003440  6e 22 2c 22 61 72 63 68  69 65 22 2c 22 6f 75 74  |n","archie","out|
00003450  22 0d 14 32 20 de 20 73  74 61 74 65 25 28 33 29  |"..2 . state%(3)|
00003460  3a 73 74 61 74 65 25 28  29 3d 30 2c 31 2c 32 2c  |:state%()=0,1,2,|
00003470  32 0d 14 3c 5d de 20 63  61 6e 5f 67 6f 24 28 31  |2..<]. can_go$(1|
00003480  29 3a 63 61 6e 5f 67 6f  24 28 29 3d 22 59 6f 75  |):can_go$()="You|
00003490  72 20 74 75 72 6e 2c 20  63 6c 69 63 6b 20 74 6f  |r turn, click to|
000034a0  20 73 65 65 20 64 6f 6d  69 6e 6f 65 73 22 2c 22  | see dominoes","|
000034b0  4d 79 20 74 75 72 6e 2c  20 63 6c 69 63 6b 20 74  |My turn, click t|
000034c0  6f 20 73 65 65 20 6d 79  20 6d 6f 76 65 22 0d 14  |o see my move"..|
000034d0  46 6a de 20 63 61 6e 6e  6f 74 5f 67 6f 24 28 31  |Fj. cannot_go$(1|
000034e0  29 3a 63 61 6e 6e 6f 74  5f 67 6f 24 28 29 3d 22  |):cannot_go$()="|
000034f0  59 6f 75 27 72 65 20 6b  6e 6f 63 6b 69 6e 67 2c  |You're knocking,|
00003500  20 63 6c 69 63 6b 20 74  6f 20 63 6f 6e 66 69 72  | click to confir|
00003510  6d 22 2c 22 49 27 6d 20  6b 6e 6f 63 6b 69 6e 67  |m","I'm knocking|
00003520  2c 20 63 6c 69 63 6b 20  66 6f 72 20 6e 65 78 74  |, click for next|
00003530  20 70 6c 61 79 65 72 22  0d 14 50 05 3a 0d 14 5a  | player"..P.:..Z|
00003540  16 f2 73 74 61 72 74 5f  6e 65 77 5f 67 61 6d 65  |..start_new_game|
00003550  28 31 29 0d 14 64 1d f2  63 6c 6f 73 65 5f 77 69  |(1)..d..close_wi|
00003560  6e 64 6f 77 28 77 5f 70  6c 61 79 65 72 73 25 29  |ndow(w_players%)|
00003570  0d 14 6e 05 e1 0d 14 78  05 3a 0d 14 82 12 dd f2  |..n....x.:......|
00003580  6c 6f 61 64 5f 73 70 72  69 74 65 73 0d 14 8c 10  |load_sprites....|
00003590  de 20 73 70 72 25 20 33  30 38 31 35 0d 14 96 2e  |. spr% 30815....|
000035a0  73 70 72 25 21 30 3d 33  30 38 31 36 3a 73 70 72  |spr%!0=30816:spr|
000035b0  25 21 34 3d 30 3a 73 70  72 25 21 38 3d 31 36 3a  |%!4=0:spr%!8=16:|
000035c0  73 70 72 25 21 31 32 3d  31 36 0d 14 a0 33 c8 99  |spr%!12=16...3..|
000035d0  20 22 4f 53 5f 53 70 72  69 74 65 4f 70 22 2c 26  | "OS_SpriteOp",&|
000035e0  31 30 41 2c 73 70 72 25  2c 22 3c 4f 62 65 79 24  |10A,spr%,"<Obey$|
000035f0  44 69 72 3e 2e 53 70 72  69 74 65 73 22 0d 14 aa  |Dir>.Sprites"...|
00003600  13 e3 20 73 70 72 69 74  65 25 3d 31 20 b8 20 35  |.. sprite%=1 . 5|
00003610  0d 14 b4 42 c8 99 20 22  4f 53 5f 53 70 72 69 74  |...B.. "OS_Sprit|
00003620  65 4f 70 22 2c 26 31 31  42 2c 73 70 72 25 2c 22  |eOp",&11B,spr%,"|
00003630  64 6f 6d 22 2b c3 28 73  70 72 69 74 65 25 29 2c  |dom"+.(sprite%),|
00003640  22 64 6f 6d 22 2b c3 28  73 70 72 69 74 65 25 2b  |"dom"+.(sprite%+|
00003650  35 29 0d 14 be 31 c8 99  20 22 4f 53 5f 53 70 72  |5)...1.. "OS_Spr|
00003660  69 74 65 4f 70 22 2c 26  31 32 46 2c 73 70 72 25  |iteOp",&12F,spr%|
00003670  2c 22 64 6f 6d 22 2b c3  28 73 70 72 69 74 65 25  |,"dom"+.(sprite%|
00003680  2b 35 29 0d 14 c8 05 ed  0d 14 d2 05 e1 0d 14 dc  |+5).............|
00003690  05 3a 0d 14 e6 15 2a 2a  2a 20 77 69 6d 70 20 63  |.:....*** wimp c|
000036a0  72 65 61 74 6f 72 73 0d  14 f0 05 3a 0d 14 fa 2f  |reators....:.../|
000036b0  dd f2 6c 6f 61 64 5f 77  69 6e 64 6f 77 28 6e 61  |..load_window(na|
000036c0  6d 65 24 2c f8 20 62 75  66 66 25 2c 6c 65 6e 25  |me$,. buff%,len%|
000036d0  2c f8 20 68 61 6e 64 6c  65 25 29 0d 15 04 1b e7  |,. handle%).....|
000036e0  20 6c 65 6e 25 3e 30 20  de 20 62 75 66 66 25 20  | len%>0 . buff% |
000036f0  6c 65 6e 25 2d 31 0d 15  0e 3e c8 99 20 22 57 69  |len%-1...>.. "Wi|
00003700  6d 70 5f 4c 6f 61 64 54  65 6d 70 6c 61 74 65 22  |mp_LoadTemplate"|
00003710  2c 2c 62 6c 6f 63 6b 25  2c 62 75 66 66 25 2c 62  |,,block%,buff%,b|
00003720  75 66 66 25 2b 6c 65 6e  25 2c 2d 31 2c 6e 61 6d  |uff%+len%,-1,nam|
00003730  65 24 2c 30 0d 15 18 45  e7 20 6e 61 6d 65 24 3d  |e$,0...E. name$=|
00003740  22 70 6c 61 79 65 72 73  22 20 e3 20 70 6c 61 79  |"players" . play|
00003750  65 72 25 3d 30 20 b8 20  33 3a 62 6c 6f 63 6b 25  |er%=0 . 3:block%|
00003760  21 28 31 37 36 2b 31 32  38 2a 70 6c 61 79 65 72  |!(176+128*player|
00003770  25 29 3d 73 70 72 25 3a  ed 0d 15 22 12 62 6c 6f  |%)=spr%:...".blo|
00003780  63 6b 25 21 36 34 3d 73  70 72 25 0d 15 2c 2c c8  |ck%!64=spr%..,,.|
00003790  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 57 69  |. "Wimp_CreateWi|
000037a0  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 20 b8 20  |ndow",,block% . |
000037b0  68 61 6e 64 6c 65 25 0d  15 36 05 e1 0d 15 40 05  |handle%..6....@.|
000037c0  3a 0d 15 4a 1a dd f2 73  68 6f 77 5f 77 69 6e 64  |:..J...show_wind|
000037d0  6f 77 28 21 62 6c 6f 63  6b 25 29 0d 15 54 24 c8  |ow(!block%)..T$.|
000037e0  99 20 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |. "Wimp_GetWindo|
000037f0  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
00003800  15 5e 10 62 6c 6f 63 6b  25 21 32 38 3d 2d 31 0d  |.^.block%!28=-1.|
00003810  15 68 20 c8 99 20 22 57  69 6d 70 5f 4f 70 65 6e  |.h .. "Wimp_Open|
00003820  57 69 6e 64 6f 77 22 2c  2c 62 6c 6f 63 6b 25 0d  |Window",,block%.|
00003830  15 72 05 e1 0d 15 7c 05  3a 0d 15 86 36 dd a4 63  |.r....|.:...6..c|
00003840  72 65 61 74 65 5f 69 63  6f 6e 28 21 62 6c 6f 63  |reate_icon(!bloc|
00003850  6b 25 2c 74 65 78 74 24  2c 58 25 2c 59 25 2c 57  |k%,text$,X%,Y%,W|
00003860  25 2c 48 25 2c 62 6c 6f  63 6b 25 21 32 30 29 0d  |%,H%,block%!20).|
00003870  15 90 1f 62 6c 6f 63 6b  25 21 34 3d 58 25 3a 62  |...block%!4=X%:b|
00003880  6c 6f 63 6b 25 21 31 32  3d 58 25 2b 57 25 0d 15  |lock%!12=X%+W%..|
00003890  9a 1f 62 6c 6f 63 6b 25  21 38 3d 59 25 3a 62 6c  |..block%!8=Y%:bl|
000038a0  6f 63 6b 25 21 31 36 3d  59 25 2b 48 25 0d 15 a4  |ock%!16=Y%+H%...|
000038b0  16 24 28 62 6c 6f 63 6b  25 2b 32 34 29 3d 74 65  |.$(block%+24)=te|
000038c0  78 74 24 0d 15 ae 25 c8  99 20 22 57 69 6d 70 5f  |xt$...%.. "Wimp_|
000038d0  43 72 65 61 74 65 49 63  6f 6e 22 2c 2c 62 6c 6f  |CreateIcon",,blo|
000038e0  63 6b 25 20 b8 20 49 25  0d 15 b8 07 3d 49 25 0d  |ck% . I%....=I%.|
000038f0  15 c2 05 3a 0d 15 cc 23  dd f2 63 72 65 61 74 65  |...:...#..create|
00003900  5f 6d 65 6e 75 28 4d 25  2c 74 69 74 6c 65 24 2c  |_menu(M%,title$,|
00003910  77 69 64 74 68 25 29 0d  15 d6 0e 24 4d 25 3d 74  |width%)....$M%=t|
00003920  69 74 6c 65 24 0d 15 e0  1d 4d 25 21 31 32 3d 26  |itle$....M%!12=&|
00003930  37 30 32 30 37 3a 4d 25  21 31 36 3d 77 69 64 74  |70207:M%!16=widt|
00003940  68 25 0d 15 ea 1d 4d 25  21 32 30 3d 34 34 3a 4d  |h%....M%!20=44:M|
00003950  25 21 32 34 3d 30 3a 49  25 3d 4d 25 2b 32 38 0d  |%!24=0:I%=M%+28.|
00003960  15 f4 05 e1 0d 15 fe 05  3a 0d 16 08 29 dd f2 6d  |........:...)..m|
00003970  65 6e 75 5f 69 74 65 6d  28 69 74 65 6d 24 2c 66  |enu_item(item$,f|
00003980  6c 61 67 25 2c 73 75 62  25 2c 73 68 61 64 65 64  |lag%,sub%,shaded|
00003990  25 29 0d 16 12 18 21 49  25 3d 66 6c 61 67 25 3a  |%)....!I%=flag%:|
000039a0  3a 49 25 21 34 3d 73 75  62 25 0d 16 1c 27 49 25  |:I%!4=sub%...'I%|
000039b0  21 38 3d 26 37 30 30 30  30 32 31 20 84 20 28 26  |!8=&7000021 . (&|
000039c0  34 30 30 30 30 30 20 80  20 73 68 61 64 65 64 25  |400000 . shaded%|
000039d0  29 0d 16 26 19 24 28 49  25 2b 31 32 29 3d 69 74  |)..&.$(I%+12)=it|
000039e0  65 6d 24 3a 49 25 2b 3d  32 34 0d 16 30 05 e1 0d  |em$:I%+=24..0...|
000039f0  ff                                                |.|
000039f1