Home » Archimedes archive » Archimedes World » AW-1991-08.adf » August91 » !AWAug91/Goodies/Connect4/!Connect4/!RunImage

!AWAug91/Goodies/Connect4/!Connect4/!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-08.adf » August91
Filename: !AWAug91/Goodies/Connect4/!Connect4/!RunImage
Read OK:
File size: 45E6 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >!RunImag26
   20
   30REM *********************************
   40REM *******  Wimp Connect 4  ********
   50REM ******* LEN Arc World 1991 ********
   60REM *********************************
   70
   80version$="v"+STR$(EVAL("&"+$(PAGE+15))/100)+" ("+MID$(TIME$,5,11)+")"
   90
  100DIM poll_block% 256, temp% &800
  110DIM player_type%(2), message$(3),counter% 6*4+8
  120DIM go_list 10, moves_list 64, slot% 9*9+20
  130SpriteSize%=FNfile_size("<Connect4$Dir>.Sprites")+&400
  140DIM SpriteSpace% SpriteSize%
  150DIM code% FNfile_size("<Connect4$Dir>.Code")
  160OSCLI"LOAD <Connect4$Dir>.Code "+STR$~code%
  170
  180SYS "XOS_ReadVarVal","Connect4%Loaded",temp%,256,0 TO ,,A%
  190IF A%=0 THEN loaded_mods%=0 ELSE loaded_mods%=!temp%
  200*UnSet Connect4%Loaded
  210
  220A%=0
  230PROCSet_Adr(A%,slot%)
  240fn_height=FNGet_Adr(A%)
  250fn_vert=FNGet_Adr(A%)
  260fn_horiz=FNGet_Adr(A%)
  270fn_allhor=FNGet_Adr(A%)
  280fn_pdiag=FNGet_Adr(A%)
  290fn_allpdiag=FNGet_Adr(A%)
  300fn_ndiag=FNGet_Adr(A%)
  310fn_allndiag=FNGet_Adr(A%)
  320fn_should_go=FNGet_Adr(A%)
  330proc_blank_slot=FNGet_Adr(A%)
  340fn_examine=FNGet_Adr(A%)
  350PROCSet_Adr(A%,temp%)
  360PROCSet_Adr(A%,counter%)
  370PROCSet_Adr(A%,SpriteSpace%)
  380proc_draw_circles=FNGet_Adr(A%)
  390main_menu%=FNGet_Adr(A%)
  400main_menu_info%=FNGet_Adr(A%)
  410main_menu_tick%=FNGet_Adr(A%)
  420SDSubMenu%=FNGet_Adr(A%)
  430SDSubMenu_tick1%=FNGet_Adr(A%)
  440SDSubMenu_tick2%=FNGet_Adr(A%)
  450SndMenu_str%=FNGet_Adr(A%)
  460main_menu_tick%!4=SDSubMenu%
  470
  480SpriteSpace%!0=SpriteSize%
  490SYS "OS_SpriteOp",&10A,SpriteSpace%,"<Connect4$Dir>.Sprites"
  500SYS "OS_SpriteOp",&118,SpriteSpace%,"counter1" TO ,,counter%!(1*4)
  510SYS "OS_SpriteOp",&118,SpriteSpace%,"counter2" TO ,,counter%!(2*4)
  520SYS "OS_SpriteOp",&118,SpriteSpace%,"counter0" TO ,,counter%!(3*4)
  530SYS "OS_SpriteOp",&118,SpriteSpace%,"game_area" TO ,,game_area%
  540SYS "OS_SpriteOp",&118,SpriteSpace%,"win_count1" TO ,,counter%!(4*4)
  550SYS "OS_SpriteOp",&118,SpriteSpace%,"top1" TO ,,counter%!(5*4)
  560SYS "OS_SpriteOp",&118,SpriteSpace%,"top2" TO ,,counter%!(6*4)
  570
  580SYS "Wimp_Initialise",200,&4B534154,"Connect Four" TO wimp_ver%,myid%
  590
  600ONERROR PROCreport_error("Internal error: "+REPORT$+" at "+STR$ERL+".")
  610
  620REM -------- Load in templates --------
  630REM -------- Create the windows -------
  640DIM icon_space  &1000:icon_space_end=icon_space+&1000
  650SYS "Wimp_OpenTemplate",,"<Connect4$Dir>.!Templates"
  660SYS "Wimp_LoadTemplate",,temp%,icon_space,icon_space_end,-1,"info",0 TO ,,icon_space
  670$(temp%!(88+12*32+20))=version$
  680temp%!64=SpriteSpace%    :REM my sprite area
  690SYS "Wimp_CreateWindow",,temp% TO info_hand%
  700!main_menu_info%=info_hand%
  710SYS "Wimp_LoadTemplate",,temp%,icon_space,icon_space_end,-1,"maingame",0 TO ,,icon_space
  720temp%!64=SpriteSpace%    :REM my sprite area
  730SYS "Wimp_CreateWindow",,temp% TO mainw_hand%
  740SYS "Wimp_CloseTemplate"
  750
  760REM -------- Define the menu --------
  770
  780REM --------  Put icon on bar  --------
  790poll_block%!0=-1 :poll_block%!4=0  :poll_block%!8=0
  800poll_block%!12=88:poll_block%!16=68:poll_block%!20=%10000000000010
  810$(poll_block%+24)="!connect4"
  820SYS "Wimp_CreateIcon",,poll_block% TO my_icon%
  830
  840REM ------ Here's the main loop! ------
  850PROCblank_slot(0)
  860message_col%=0:message_vpos%=0
  870finger_pos%=-1
  880sound_ctr%=-1
  890old_voice%=0
  900old_voices%=0
  910sound%=FNset_sound(1)
  920PROCreset_board
  930player_type%(1)=1:player_type%(2)=1
  940winner%=0:win_flash%=-1
  950clr_ctr%=-1:clr_icn%=0
  960smooth_drop%=FNset_smooth_drop(0)
  970A%=RND(-TIME)
  980quit%=FALSE
  990player%=0
 1000PROCopen_window(mainw_hand%)
 1010ONERROR PROCreport_error("Internal error: "+REPORT$+" at "+STR$ERL+".")
 1020REPEAT
 1030  SYS "Wimp_Poll",%10000001100000110000,poll_block% TO polled,block%
 1040
 1050  CASE polled OF
 1060    WHEN 0 :
 1070     IF clr_ctr%>-1 THEN
 1080      clr_ctr%-=1
 1090      IF clr_ctr%=-1 THEN PROCclr_ctr
 1100     ENDIF
 1110
 1120     IF sound_ctr%>-1 THEN
 1130      sound_ctr%-=1
 1140      IF sound_ctr%=-1 THEN PROCreset_sound
 1150     ENDIF
 1160
 1170     CASE player_type%(player%) OF
 1180      WHEN 1 :
 1190       SYS "Wimp_GetPointerInfo",,temp%+&400
 1200       IF temp%!&408=0 AND clr_ctr%<0 PROCinsert_piece(FNcompute(player%))
 1210      WHEN 2 :
 1220       SYS "Wimp_GetPointerInfo",,temp%+&400
 1230       IF temp%!&408=0 AND temp%!&40C=mainw_hand% AND temp%!&410=2 THEN
 1240        finger_pos%=FNplot_finger(temp%+&400,finger_pos%)
 1250       ELSE
 1260        IF finger_pos%>-1 THEN PROCremove_finger
 1270      ENDIF
 1280     ENDCASE
 1290     IF winner%>0 THEN
 1300      win_flash%-=1
 1310      CASE win_flash% OF
 1320       WHEN 75: SYS "OS_SpriteOp",&118,SpriteSpace%,"win_count"+STR$winner% TO ,,counter%!(4*4):PROCrefresh_board(0)
 1330       WHEN 0 : SYS "OS_SpriteOp",&118,SpriteSpace%,"counter"+STR$winner% TO ,,counter%!(4*4):win_flash%=150:PROCrefresh_board(0)
 1340      ENDCASE
 1350     ENDIF
 1360
 1370    WHEN 1 : REM Redraw Window
 1380     SYS "Wimp_RedrawWindow",,block% TO more%
 1390      WHILE more%
 1400        PROCDraw_MainW(block%)
 1410        SYS "Wimp_GetRectangle",,block% TO more%
 1420      ENDWHILE
 1430
 1440    WHEN 2 : REM Open Window
 1450     SYS "Wimp_OpenWindow",,block%
 1460
 1470    WHEN 3 : REM Close Window
 1480     SYS "Wimp_CloseWindow",,block%
 1490
 1500    WHEN 6 : REM mouse click
 1510     PROChandle_click(block%)
 1520
 1530    WHEN 8 : REM key presses
 1540      CASE block%!24 OF
 1550        WHEN 14    : REM New Game (N)
 1560                     PROCset_icon(11,1)
 1570                     clr_ctr%=10:clr_icn%=11
 1580                     *FX 21 1
 1590        WHEN 21,26 : REM Undo (U, Z)
 1600                     PROCset_icon(9,1)
 1610                     clr_ctr%=10:clr_icn%=9
 1620                     *FX 21 1
 1630        OTHERWISE  : SYS "Wimp_ProcessKey",block%!24
 1640      ENDCASE
 1650
 1660    WHEN 9 : REM Menu Selection
 1670     PROCdecode_menu(block%)
 1680
 1690    WHEN 17,18 : REM message passed
 1700     PROCdecode_message(block%)
 1710 ENDCASE
 1720
 1730UNTIL quit%
 1740PROCreset_sound
 1750IF loaded_mods% AND 1 THEN *RMKill crash
 1751IF loaded_mods% AND 2 THEN *RMKill laugh
 1752IF loaded_mods% AND 4 THEN *RMKill drop
 1753IF loaded_mods% AND 8 THEN *RMKill Winner
 1754
 1760SYS"Wimp_CloseDown"
 1770END
 1780
 1790
 1800DEF PROCclr_ctr
 1810CASE clr_icn% OF
 1820  WHEN 11 :  PROCNew_Game
 1830             PROCset_icon(11,0)
 1840  WHEN 9  :  IF player% OR winner% PROCundo_move
 1850             PROCset_icon(9,0)
 1860ENDCASE
 1870ENDPROC
 1880
 1890REM -------- decode_message --------
 1900DEF PROCdecode_message(A%)
 1910LOCAL file$,lp%,ol%
 1920CASE A%!16 OF
 1930     WHEN 0 : REM Message_Quit
 1940           quit%=TRUE
 1950ENDCASE
 1960ENDPROC
 1970
 1980REM -------- decode_menu --------
 1990DEF PROCdecode_menu(A%)
 2000LOCAL d$
 2010 CASE !A% OF
 2020    WHEN 0 : REM Info
 2030    WHEN 1 : REM Sound
 2040             sound%=FNset_sound(sound% EOR 1)
 2050    WHEN 2 : REM Smooth Drop
 2060             CASE A%!4 OF
 2070              WHEN -1: IF smooth_drop% THEN
 2080                         smooth_drop%=FNset_smooth_drop(0)
 2090                       ELSE
 2100                         smooth_drop%=FNset_smooth_drop(%110)
 2110                       ENDIF
 2120              WHEN  0: smooth_drop%=FNset_smooth_drop(smooth_drop% EOR 2)
 2130              WHEN  1: smooth_drop%=FNset_smooth_drop(smooth_drop% EOR 4)
 2140             ENDCASE
 2150    WHEN 3 : REM Reset
 2160             PROCreset_board
 2170    WHEN 4 : REM quit
 2180             quit%=TRUE
 2190 ENDCASE
 2200 SYS "Wimp_GetPointerInfo",,temp%
 2210 IF (temp%!8 AND 1) THEN
 2220    SYS "Wimp_CreateMenu",,main_menu%,temp%!0-90,220
 2230 ENDIF
 2240ENDPROC
 2250
 2260REM -------  Handle mouse click -------
 2270DEF PROChandle_click(A%)
 2280  CASE A%!12 OF
 2290    WHEN -2: REM  clicked on icon bar
 2300              IF A%!8=2 THEN
 2310               SYS "Wimp_CreateMenu",,main_menu%,A%!0-98,276+44+44
 2320              ELSE
 2330                PROCopen_window(mainw_hand%)
 2340              ENDIF
 2350    WHEN info_hand% : REM do nothing!
 2360    WHEN mainw_hand% : PROChandle_mainw(A%)
 2370                       PROCput_caret_in_window
 2380  ENDCASE
 2390ENDPROC
 2400
 2410DEF PROCput_caret_in_window
 2420SYS "Wimp_SetCaretPosition",mainw_hand%,-1,0,0,0,0
 2430ENDPROC
 2440
 2450REM -------- PROChandle_mainw ---------
 2460DEF PROChandle_mainw(A%)
 2470LOCAL s%
 2480 IF A%!8=2 THEN
 2490  IF A%!16=2 THEN PROCremove_finger
 2500  SYS "Wimp_CreateMenu",,main_menu%,A%!0-90,A%!4+32
 2510 ELSE
 2520  CASE A%!16 OF
 2530   WHEN 2 :   IF player_type%(player%)=2 THEN
 2540                SYS "Wimp_GetPointerInfo",,temp%
 2550                PROCinsert_piece(finger_pos%+1)
 2560                *FX 15
 2570              ENDIF
 2580   WHEN 3 :   PROCset_icon(3,1)
 2590              PROCset_icon(4,0)
 2600              player_type%(1)=1
 2610   WHEN 4 :   PROCset_icon(4,1)
 2620              PROCset_icon(3,0)
 2630              player_type%(1)=2
 2640   WHEN 6 :   PROCset_icon(6,1)
 2650              PROCset_icon(7,0)
 2660              player_type%(2)=1
 2670   WHEN 7 :   PROCset_icon(7,1)
 2680              PROCset_icon(6,0)
 2690              player_type%(2)=2
 2700   WHEN 9 :   PROCset_icon(9,0)
 2710              IF player% OR winner% THEN PROCundo_move
 2720   WHEN 11:   PROCset_icon(11,0)
 2730              PROCNew_Game
 2740  ENDCASE
 2750 ENDIF
 2760ENDPROC
 2770
 2780REM -------- set icon --------
 2790DEF PROCset_icon(icon%,a%)
 2800temp%!0 =mainw_hand%
 2810temp%!4 =icon%
 2820temp%!8 =a%<<21
 2830temp%!12=1<<21
 2840SYS "Wimp_SetIconState",,temp%
 2850ENDPROC
 2860
 2870REM -------- PROCopen_window  -----------
 2880DEF PROCopen_window(hand%)
 2890!temp%=hand%
 2900SYS"Wimp_GetWindowInfo",,temp%
 2910temp%!28=-1
 2920SYS "Wimp_OpenWindow",,temp%
 2930PROCput_caret_in_window
 2940ENDPROC
 2950
 2960REM --------  Report an error  --------
 2970DEF PROCreport_error(error$)
 2980LOCAL R1
 2990!temp%=ERR
 3000$(temp%+4)=LEFT$(error$+"Cancel to quit progam, Ok to continue.",240)+CHR$0
 3010REPEAT
 3020SYS "Wimp_ReportError",temp%,%0000111,"Connect Four" TO ,R1
 3030UNTIL R1
 3040IF R1=2 THEN SYS "Wimp_CloseDown",myid%,&4B534154:END
 3050ENDPROC
 3060
 3070DEF FNcheck_if_won(my_counter%,col%,height%)
 3080IF FNallhor(my_counter%,col%,height%)=300 OR FNvert(1,my_counter%,col%,height%)=300 OR  FNallpdiag(my_counter%,col%,height%)=300 OR FNallndiag(my_counter%,col%,height%)=300 THEN =2^my_counter% ELSE IF goes%=64 THEN =%110 ELSE =0
 3090:
 3100DEF FNcompute(my_counter%)
 3110LOCAL col%,height%,col_points%,max_p%,max_c%
 3120max_p%=-2
 3130FOR col%=1 TO 8
 3140 height%=FNheight(col%)
 3150 IF height%<9 THEN
 3160  col_points%=FNexamine(my_counter%,col%,height%)
 3170  IF col_points%>=253 THEN
 3180   col_points%=col_points%*2 :REM must go
 3190  ELSE
 3200   IF FNshould_go(my_counter%,col%,height%)=0 THEN col_points%=-1
 3210  ENDIF
 3220 ELSE
 3230  col_points%=-2
 3240 ENDIF
 3250 IF col_points%>max_p% THEN
 3260  max_p%=col_points%:go_list?0=col%:max_c%=1
 3270 ELSE
 3280  IF col_points%=max_p% THEN go_list?max_c%=col%:max_c%+=1
 3290 ENDIF
 3300NEXT
 3310IF goes%=1 AND max_p%=0 AND moves_list?0>2 AND moves_list?0<6 THEN =moves_list?0 +1
 3320IF max_c%=0 THEN GDKKKKGS
 3330IF max_c%=1 THEN =go_list?0 ELSE =go_list?(RND(max_c%)-1)
 3340
 3350DEF FNheight(A%)
 3360=USR(fn_height)
 3370
 3380DEF FNshould_go(A%,B%,C%)
 3390=USR(fn_should_go)
 3400
 3410DEF FNexamine(A%,B%,C%)
 3420=USR(fn_examine)
 3430
 3440DEF FNvert(A%,B%,C%,D%)
 3450=USR(fn_vert)
 3460
 3470DEF FNallhor(A%,B%,C%)
 3480=USR(fn_allhor)
 3490
 3500DEF FNhoriz(A%,B%,C%)
 3510=USR(fn_horiz)
 3520
 3530DEF FNallpdiag(A%,B%,C%)
 3540=USR(fn_allpdiag)
 3550
 3560DEF FNpdiag(A%,B%,C%,D%)
 3570=USR(fn_pdiag)
 3580
 3590DEF FNallndiag(A%,B%,C%)
 3600=USR(fn_allndiag)
 3610
 3620DEF FNndiag(A%,B%,C%,D%)
 3630=USR(fn_ndiag)
 3640
 3650DEF PROCNew_Game
 3660PROCreset_board
 3670player%=FNtoggle_player(2)
 3680winner%=0
 3690ENDPROC
 3700
 3710DEF PROCreset_board
 3720PROCmake_sound("crash",&1700)
 3730PROCSet_Message("CONNECT 4","� AW 1991","",12)
 3740PROCrefresh_board(-1)
 3750goes%=0
 3760ENDPROC
 3770
 3780DEF PROCrefresh_board(f%)
 3790LOCAL more%
 3800temp%!0 =mainw_hand%
 3810temp%!4 =-10
 3820temp%!8 =-540
 3830temp%!12=528
 3840temp%!16=-4
 3850SYS "Wimp_UpdateWindow",,temp% TO more%
 3860WHILE more%
 3870  IF f% THEN PROCblank_slot(3)
 3880  PROCDraw_Circles(temp%)
 3890  SYS "Wimp_GetRectangle",,temp% TO more%
 3900ENDWHILE
 3910  IF f% THEN PROCblank_slot(0)
 3920ENDPROC
 3930
 3940DEF PROCblank_slot(A%)
 3950CALL proc_blank_slot
 3960ENDPROC
 3970
 3980DEF PROCinsert_piece(column%)
 3990LOCAL height%,more%
 4000height%=FNheight(column%)
 4010IF height%>8 THEN VDU7:ENDPROC
 4020IF ((smooth_drop%>>player%) AND 1) THEN PROCsmooth_drop(column%,height%,player%)
 4030slot%?(column%+height%*9)=player%
 4040PROCremove_finger
 4050temp%!0=mainw_hand%
 4060temp%!4 =(column%*68)-78
 4070temp%!8 =-(8-height%)*68-64
 4080temp%!12=(column%*68)-18
 4090temp%!16=-(8-height%)*68-4
 4100SYS "Wimp_UpdateWindow",,temp% TO more%
 4110WHILE more%
 4120  PROCDraw_Circles(temp%)
 4130  SYS "Wimp_GetRectangle",,temp% TO more%
 4140ENDWHILE
 4150
 4160moves_list?goes%=column%
 4170goes%+=1
 4180CASE FNcheck_if_won(player%,column%,height%) OF
 4190  WHEN 0    : REM nobody's won yet
 4200       IF player_type%(player%)=2 THEN PROCmake_sound("drop",&2000)
 4210       player%=FNtoggle_player(player%)
 4220  WHEN %110 : REM draw
 4230       PROCSet_Message("The game","was a draw","",12)
 4240       winner%=-1
 4250       player%=0
 4260  OTHERWISE : REM Somebody won!
 4270       winner%=FNhighlight_winner(player%,column%,height%)
 4280       IF player_type%(winner%)=1 PROCmake_sound("laugh",&400) ELSE PROCmake_sound("Winner",&1000)
 4290       PROCSet_Message("Player "+STR$(player%),"won after",STR$(goes%)+" moves",12)
 4300       win_flash%=150
 4310       player%=0
 4320ENDCASE
 4330ENDPROC
 4340
 4350DEF PROCDraw_MainW(p_blk%)
 4360LOCAL t%:t%=temp%+&100
 4370PROCDraw_Message(p_blk%!4,p_blk%!16)
 4380SYS "Wimp_ReadPixTrans",&200,SpriteSpace%,game_area%,,,,t%+00,t%+16
 4390SYS "OS_SpriteOp",&234,SpriteSpace%,game_area%,p_blk%!4+12,p_blk%!16-652,&8,t%,t%+16
 4400PROCDraw_Circles(p_blk%)
 4410ENDPROC
 4420
 4430DEF PROCDraw_Circles(A%)
 4440CALL proc_draw_circles
 4450ENDPROC
 4460
 4470DEF PROCRefresh_Message
 4480LOCAL more%
 4490temp%!0=mainw_hand%
 4500temp%!4 = 584
 4510temp%!8 = -96
 4520temp%!12= 584+182
 4530temp%!16= -96+108
 4540SYS "Wimp_UpdateWindow",,temp% TO more%
 4550WHILE more%
 4560  PROCDraw_Message(temp%!4,temp%!16)
 4570  SYS "Wimp_GetRectangle",,temp% TO more%
 4580ENDWHILE
 4590ENDPROC
 4600
 4610DEF PROCDraw_Message(scrn_x%,scrn_y%)
 4620LOCAL lp%
 4630SYS "Wimp_SetColour",7
 4640RECTANGLE FILL scrn_x%+620,scrn_y%-92,180,-104
 4650SYS "Wimp_SetColour",message_col%
 4660FOR lp%=0 TO 2
 4670 MOVE scrn_x%+620,scrn_y%-message_vpos%-lp%*32
 4680 MOVE scrn_x%+620+((180-LENmessage$(lp%)*16) DIV 2),scrn_y%-message_vpos%-lp%*32
 4690 PRINTmessage$(lp%)
 4700NEXT
 4710ENDPROC
 4720
 4730DEF PROCSet_Message(m1$,m2$,m3$,mc%)
 4740LOCAL lp%,t%
 4750message$(0)=LEFT$(m1$,12)
 4760message$(1)=LEFT$(m2$,12)
 4770message$(2)=LEFT$(m3$,12)
 4780t%=3
 4790FORlp%=2 TO 0 STEP-1
 4800 IF message$(lp%)="" THEN t%=lp%
 4810NEXT
 4820message_vpos%=92+((104-(t%*32)) DIV 2)
 4830message_col%=mc%
 4840PROCRefresh_Message
 4850ENDPROC
 4860
 4870DEF FNtoggle_player(pl%)
 4880LOCAL C%,new%,m2$
 4890new%=pl% EOR 3
 4900IF new%=1 THEN C%=15 ELSE C%=11
 4910IF player_type%(new%)=1 THEN m2$="playing" ELSE m2$="to play"
 4920PROCSet_Message("Player "+STR$new%,m2$,"",C%)
 4930=new%
 4940
 4950DEF PROCundo_move
 4960LOCAL c%,h%,for%,lp%
 4970IF player_type%(1)=1 AND player_type%(2)=1 THEN for%=TRUE
 4980REPEAT
 4990IF goes%>0 THEN
 5000  goes%-=1
 5010  column%=goes%?moves_list
 5020  height%=FNheight(column%)-1
 5030  slot%?(column%+height%*9)=3
 5040  temp%!0=mainw_hand%
 5050  temp%!4 =(column%*68)-48-30
 5060  temp%!8 =-(8-height%)*68-34-30
 5070  temp%!12=(column%*68)-48+30
 5080  temp%!16=-(8-height%)*68-34+30
 5090  SYS "Wimp_UpdateWindow",,temp% TO more%
 5100  WHILE more%
 5110    PROCDraw_Circles(temp%)
 5120    SYS "Wimp_GetRectangle",,temp% TO more%
 5130  ENDWHILE
 5140  player%=FNtoggle_player(2-(goes% AND 1))
 5150  IF winner% THEN
 5160    FORc%=1 TO 8
 5170    FORh%=1 TO 8
 5180     IF slot%?(c%+h%*9)=4 THEN slot%?(c%+h%*9)=winner%
 5190    NEXT h%
 5200    NEXT c%
 5210    winner%=0
 5220    PROCrefresh_board(0)
 5230  ENDIF
 5240ELSE
 5250  VDU7
 5260ENDIF
 5270UNTILplayer_type%(player%)=2 OR goes%=0 OR for%
 5280ENDPROC
 5290
 5300DEF PROCremove_finger
 5310LOCAL s%,row%
 5320row%=finger_pos%
 5330IF row%<0 THEN ENDPROC
 5340!temp%=mainw_hand%
 5350SYS "Wimp_GetWindowState",,temp%
 5360SYS "OS_SpriteOp",&122,SpriteSpace%,"counterO",(temp%!4+16+row%*68),temp%!16-76,0
 5370finger_pos%=-1
 5380ENDPROC
 5390
 5400DEF FNplot_finger(A%,old_row%)
 5410LOCAL row%,s%
 5420!temp%=mainw_hand%
 5430SYS "Wimp_GetWindowState",,temp%
 5440row%=(A%!0-temp%!4-24) DIV 68
 5450IF row%<>old_row% THEN
 5460  PROCremove_finger
 5470  s%=temp%+&100
 5480  SYS "Wimp_ReadPixTrans",&200,SpriteSpace%,counter%!((player%+4)*4),,,,s%,s%+16
 5490  SYS "OS_SpriteOp",&110,SpriteSpace%,"counterO",0,(temp%!4+16+row%*68),temp%!16-76,(temp%!4+24+row%*68)+64,temp%!16-56+60+12
 5500  SYS "OS_SpriteOp",&234,SpriteSpace%,counter%!((player%+4)*4),(temp%!4+16+row%*68),temp%!16-76,&8,s%,s%+16
 5510ENDIF
 5520=row%
 5530
 5540DEF FNhighlight_winner(pl%,c%,h%)
 5550LOCAL stx%,sty%,w%,x%,y%,z%
 5560w%=FNallhor(pl%,c%,h%)  :x%=FNvert(1,pl%,c%,h%)
 5570y%=FNallpdiag(pl%,c%,h%):z%=FNallndiag(pl%,c%,h%)
 5580IF w%=300 THEN
 5590   stx%=c%
 5600   WHILE stx%>0 AND slot%?(stx%+h%*9)=pl%:slot%?(stx%+h%*9)=4:stx%-=1:ENDWHILE
 5610   stx%=c%+1
 5620   WHILE stx%<9 AND slot%?(stx%+h%*9)=pl%:slot%?(stx%+h%*9)=4:stx%+=1:ENDWHILE
 5630ENDIF
 5640IF x%=300 THEN
 5650   sty%=h%
 5660   WHILE sty%>0 AND (slot%?(c%+sty%*9)=pl% OR slot%?(c%+sty%*9)=4)
 5670     slot%?(c%+sty%*9)=4:sty%-=1
 5680   ENDWHILE
 5690   sty%=h%+1
 5700   WHILE sty%<9 AND (slot%?(c%+sty%*9)=pl% OR slot%?(c%+sty%*9)=4)
 5710     slot%?(c%+sty%*9)=4:sty%+=1
 5720   ENDWHILE
 5730ENDIF
 5740IF y%=300 THEN
 5750  stx%=c%:sty%=h%
 5760  WHILE sty%>0 AND stx%>0 AND (slot%?(stx%+sty%*9)=pl% OR slot%?(stx%+sty%*9)=4)
 5770    slot%?(stx%+sty%*9)=4:stx%-=1:sty%-=1
 5780  ENDWHILE
 5790  stx%=c%+1:sty%=h%+1
 5800  WHILE sty%<9 AND stx%<9 AND (slot%?(stx%+sty%*9)=pl% OR slot%?(stx%+sty%*9)=4)
 5810    slot%?(stx%+sty%*9)=4:stx%+=1:sty%+=1
 5820  ENDWHILE
 5830ENDIF
 5840IF z%=300 THEN
 5850  stx%=c%:sty%=h%
 5860  WHILE stx%>0 AND sty%<9 AND (slot%?(stx%+sty%*9)=pl% OR slot%?(stx%+sty%*9)=4)
 5870    slot%?(stx%+sty%*9)=4:stx%-=1:sty%+=1
 5880  ENDWHILE
 5890  stx%=c%+1:sty%=h%-1
 5900  WHILE stx%<9 AND sty%>0 AND (slot%?(stx%+sty%*9)=pl% OR slot%?(stx%+sty%*9)=4)
 5910    slot%?(stx%+sty%*9)=4:stx%+=1:sty%-=1
 5920  ENDWHILE
 5930ENDIF
 5940SYS "OS_SpriteOp",&118,SpriteSpace%,"win_count"+STR$pl% TO ,,counter%!(4*4)
 5950PROCrefresh_board(0)
 5960=pl%
 5970
 5980DEF FNset_sound(s%)
 5990IF s%=0 THEN $SndMenu_str%=("Sound On"+CHR$0) ELSE $SndMenu_str%=("Sound Off"+CHR$0)
 6000=s%
 6010
 6020DEF FNset_smooth_drop(s%)
 6030!SDSubMenu_tick1%=(!SDSubMenu_tick1% AND NOT1) OR (s%>>1) AND 1
 6040!SDSubMenu_tick2%=(!SDSubMenu_tick2% AND NOT1) OR (s%>>2) AND 1
 6050IF s% THEN
 6060  !main_menu_tick%=!main_menu_tick% OR 1
 6070ELSE
 6080  !main_menu_tick%=!main_menu_tick% AND NOT1
 6090ENDIF
 6100=s%
 6110
 6120DEF PROCsmooth_drop(c%,h%,pl%)
 6130LOCAL lp%, more%
 6140FOR lp%=8 TO h% STEP-1
 6150 slot%?(c%+lp%*9)=pl%
 6160 temp%!0=mainw_hand%
 6170 temp%!4 =(c%*68)-(78)
 6180 temp%!8 =-(8-lp%)*68-58
 6190 temp%!12=(c%*68)-18
 6200 temp%!16=-(8-lp%)*68+62
 6210 SYS "Wimp_UpdateWindow",,temp% TO more%
 6220 WHILE more%
 6230   slot%?(c%+(lp%+1)*9)=3
 6240   PROCDraw_Circles(temp%)
 6250   SYS "Wimp_GetRectangle",,temp% TO more%
 6260 ENDWHILE
 6270NEXT
 6280ENDPROC
 6290
 6300DEF FNfix_size(A$,len%)
 6320IF LEN(A$)=len% THEN =A$
 6330IF LEN(A$)>len% THEN =LEFT$(A$,len%)
 6340=A$+STRING$(len%-LEN(A$)," ")
 6350
 6360DEF PROCSet_Adr(RETURN o%,val%):code%!o%=val%:o%+=4:ENDPROC
 6370DEF FNGet_Adr(RETURN o%):o%+=4:=code%+code%!(o%-4)
 6380DEF FNfile_size(f$):LOCAL s%:SYS "OS_File",5,f$ TO ,,,,s%:=s%
 6390
 6400DEF PROCmake_sound(s$,pit%)
 6410LOCAL more%
 6420IF sound%=0 ENDPROC
 6430IF old_voice%=0 THEN
 6440 SYS "Sound_AttachVoice",4,0 TO ,old_voice%
 6450 SYS "Sound_Configure",4,0,0,0,0 TO old_voices%
 6460ENDIF
 6470REPEAT SYS "Sound_AttachNamedVoice",4,s$ TO more%:UNTILmore%
 6480SOUND 4,&17F,pit%,&FF
 6490sound_ctr%=200
 6500ENDPROC
 6510
 6520DEF PROCreset_sound
 6530LOCAL more%
 6540SYS "Sound_Configure",old_voices%,0,0,0,0
 6550REPEAT SYS "Sound_AttachVoice",4,old_voice% TO more%:UNTILmore%
 6560old_voice%=0
 6570ENDPROC

� >!RunImag26

'� *********************************
('� *******  Wimp Connect 4  ********
2'� ******* � Arc World 1991 ********
<'� *********************************
F
P9version$="v"+�(�("&"+$(�+15))/100)+" ("+��$,5,11)+")"
Z
d!� poll_block% 256, temp% &800
n1� player_type%(2), message$(3),counter% 6*4+8
x-� go_list 10, moves_list 64, slot% 9*9+20
�9SpriteSize%=�file_size("<Connect4$Dir>.Sprites")+&400
�� SpriteSpace% SpriteSize%
�-� code% �file_size("<Connect4$Dir>.Code")
�(�"LOAD <Connect4$Dir>.Code "+�~code%
�
�<ș "XOS_ReadVarVal","Connect4%Loaded",temp%,256,0 � ,,A%
�1� A%=0 � loaded_mods%=0 � loaded_mods%=!temp%
�*UnSet Connect4%Loaded
�
�A%=0
��Set_Adr(A%,slot%)
�fn_height=�Get_Adr(A%)
�fn_vert=�Get_Adr(A%)
fn_horiz=�Get_Adr(A%)
fn_allhor=�Get_Adr(A%)
fn_pdiag=�Get_Adr(A%)
"fn_allpdiag=�Get_Adr(A%)
,fn_ndiag=�Get_Adr(A%)
6fn_allndiag=�Get_Adr(A%)
@fn_should_go=�Get_Adr(A%)
J proc_blank_slot=�Get_Adr(A%)
Tfn_examine=�Get_Adr(A%)
^�Set_Adr(A%,temp%)
h�Set_Adr(A%,counter%)
r�Set_Adr(A%,SpriteSpace%)
|"proc_draw_circles=�Get_Adr(A%)
�main_menu%=�Get_Adr(A%)
� main_menu_info%=�Get_Adr(A%)
� main_menu_tick%=�Get_Adr(A%)
�SDSubMenu%=�Get_Adr(A%)
�!SDSubMenu_tick1%=�Get_Adr(A%)
�!SDSubMenu_tick2%=�Get_Adr(A%)
�SndMenu_str%=�Get_Adr(A%)
� main_menu_tick%!4=SDSubMenu%
�
�SpriteSpace%!0=SpriteSize%
�?ș "OS_SpriteOp",&10A,SpriteSpace%,"<Connect4$Dir>.Sprites"
�Dș "OS_SpriteOp",&118,SpriteSpace%,"counter1" � ,,counter%!(1*4)
�Dș "OS_SpriteOp",&118,SpriteSpace%,"counter2" � ,,counter%!(2*4)
Dș "OS_SpriteOp",&118,SpriteSpace%,"counter0" � ,,counter%!(3*4)
Aș "OS_SpriteOp",&118,SpriteSpace%,"game_area" � ,,game_area%
Fș "OS_SpriteOp",&118,SpriteSpace%,"win_count1" � ,,counter%!(4*4)
&@ș "OS_SpriteOp",&118,SpriteSpace%,"top1" � ,,counter%!(5*4)
0@ș "OS_SpriteOp",&118,SpriteSpace%,"top2" � ,,counter%!(6*4)
:
DGș "Wimp_Initialise",200,&4B534154,"Connect Four" � wimp_ver%,myid%
N
X9� �report_error("Internal error: "+�$+" at "+Þ+".")
b
l)� -------- Load in templates --------
v)� -------- Create the windows -------
�7� icon_space  &1000:icon_space_end=icon_space+&1000
�7ș "Wimp_OpenTemplate",,"<Connect4$Dir>.!Templates"
�Vș "Wimp_LoadTemplate",,temp%,icon_space,icon_space_end,-1,"info",0 � ,,icon_space
�#$(temp%!(88+12*32+20))=version$
�.temp%!64=SpriteSpace%    :� my sprite area
�.ș "Wimp_CreateWindow",,temp% � info_hand%
�!main_menu_info%=info_hand%
�Zș "Wimp_LoadTemplate",,temp%,icon_space,icon_space_end,-1,"maingame",0 � ,,icon_space
�.temp%!64=SpriteSpace%    :� my sprite area
�/ș "Wimp_CreateWindow",,temp% � mainw_hand%
�ș "Wimp_CloseTemplate"
�
�'� -------- Define the menu --------

)� --------  Put icon on bar  --------
7poll_block%!0=-1 :poll_block%!4=0  :poll_block%!8=0
 Fpoll_block%!12=88:poll_block%!16=68:poll_block%!20=%10000000000010
*!$(poll_block%+24)="!connect4"
40ș "Wimp_CreateIcon",,poll_block% � my_icon%
>
H)� ------ Here's the main loop! ------
R�blank_slot(0)
\"message_col%=0:message_vpos%=0
ffinger_pos%=-1
psound_ctr%=-1
zold_voice%=0
�old_voices%=0
�sound%=�set_sound(1)
��reset_board
�'player_type%(1)=1:player_type%(2)=1
�winner%=0:win_flash%=-1
�clr_ctr%=-1:clr_icn%=0
�$smooth_drop%=�set_smooth_drop(0)
�A%=�(-�)
�quit%=�
�
player%=0
��open_window(mainw_hand%)
�9� �report_error("Internal error: "+�$+" at "+Þ+".")
��
F  ș "Wimp_Poll",%10000001100000110000,poll_block% � polled,block%

  Ȏ polled �
$
    � 0 :
.     � clr_ctr%>-1 �
8      clr_ctr%-=1
B"      � clr_ctr%=-1 � �clr_ctr
L
     �
V
`     � sound_ctr%>-1 �
j      sound_ctr%-=1
t(      � sound_ctr%=-1 � �reset_sound
~
     �
�
�#     Ȏ player_type%(player%) �
�      � 1 :
�/       ș "Wimp_GetPointerInfo",,temp%+&400
�G       � temp%!&408=0 � clr_ctr%<0 �insert_piece(�compute(player%))
�      � 2 :
�/       ș "Wimp_GetPointerInfo",,temp%+&400
�C       � temp%!&408=0 � temp%!&40C=mainw_hand% � temp%!&410=2 �
�<        finger_pos%=�plot_finger(temp%+&400,finger_pos%)
�       �
�-        � finger_pos%>-1 � �remove_finger
�      �

     �

     � winner%>0 �
      win_flash%-=1
      Ȏ win_flash% �
(m       � 75: ș "OS_SpriteOp",&118,SpriteSpace%,"win_count"+�winner% � ,,counter%!(4*4):�refresh_board(0)
2z       � 0 : ș "OS_SpriteOp",&118,SpriteSpace%,"counter"+�winner% � ,,counter%!(4*4):win_flash%=150:�refresh_board(0)
<      �
F
     �
P
Z    � 1 : � Redraw Window
d/     ș "Wimp_RedrawWindow",,block% � more%
n      ȕ more%
x        �Draw_MainW(block%)
�2        ș "Wimp_GetRectangle",,block% � more%
�      �
�
�    � 2 : � Open Window
�%     ș "Wimp_OpenWindow",,block%
�
�    � 3 : � Close Window
�&     ș "Wimp_CloseWindow",,block%
�
�    � 6 : � mouse click
�     �handle_click(block%)
�
�    � 8 : � key presses
      Ȏ block%!24 �
$        � 14    : � New Game (N)
(                     �set_icon(11,1)
"0                     clr_ctr%=10:clr_icn%=11
,!                     *FX 21 1
6#        � 21,26 : � Undo (U, Z)
@'                     �set_icon(9,1)
J/                     clr_ctr%=10:clr_icn%=9
T!                     *FX 21 1
^/          : ș "Wimp_ProcessKey",block%!24
h      �
r
|    � 9 : � Menu Selection
�     �decode_menu(block%)
�
�"    � 17,18 : � message passed
�      �decode_message(block%)
� �
�
�� quit%
��reset_sound
�&� loaded_mods% � 1 � *RMKill crash
�&� loaded_mods% � 2 � *RMKill laugh
�%� loaded_mods% � 4 � *RMKill drop
�'� loaded_mods% � 8 � *RMKill Winner
�
�ș"Wimp_CloseDown"
��
�
�
� �clr_ctr
Ȏ clr_icn% �
  � 11 :  �New_Game
&              �set_icon(11,0)
0,  � 9  :  � player% � winner% �undo_move
:             �set_icon(9,0)
D�
N�
X
b&� -------- decode_message --------
l� �decode_message(A%)
v� file$,lp%,ol%
�Ȏ A%!16 �
�     � 0 : � Message_Quit
�           quit%=�
��
��
�
�#� -------- decode_menu --------
�� �decode_menu(A%)
�� d$
�
 Ȏ !A% �
�    � 0 : � Info
�    � 1 : � Sound
�.             sound%=�set_sound(sound% � 1)
    � 2 : � Smooth Drop
             Ȏ A%!4 �
(              � -1: � smooth_drop% �
 =                         smooth_drop%=�set_smooth_drop(0)
*                       �
4@                         smooth_drop%=�set_smooth_drop(%110)
>                       �
HG              �  0: smooth_drop%=�set_smooth_drop(smooth_drop% � 2)
RG              �  1: smooth_drop%=�set_smooth_drop(smooth_drop% � 4)
\             �
f    � 3 : � Reset
p             �reset_board
z    � 4 : � quit
�             quit%=�
� �
�$ ș "Wimp_GetPointerInfo",,temp%
� � (temp%!8 � 1) �
�7    ș "Wimp_CreateMenu",,main_menu%,temp%!0-90,220
� �
��
�
�)� -------  Handle mouse click -------
�� �handle_click(A%)
�  Ȏ A%!12 �
�$    � -2: �  clicked on icon bar
�              � A%!8=2 �
	E               ș "Wimp_CreateMenu",,main_menu%,A%!0-98,276+44+44
	              �
	-                �open_window(mainw_hand%)
	$              �
	.$    � info_hand% : � do nothing!
	8)    � mainw_hand% : �handle_mainw(A%)
	B/                       �put_caret_in_window
	L  �
	V�
	`
	j� �put_caret_in_window
	t5ș "Wimp_SetCaretPosition",mainw_hand%,-1,0,0,0,0
	~�
	�
	�)� -------- PROChandle_mainw ---------
	�� �handle_mainw(A%)
	�� s%
	� � A%!8=2 �
	�   � A%!16=2 � �remove_finger
	�6  ș "Wimp_CreateMenu",,main_menu%,A%!0-90,A%!4+32
	� �
	�  Ȏ A%!16 �
	�*   � 2 :   � player_type%(player%)=2 �
	�3                ș "Wimp_GetPointerInfo",,temp%
	�0                �insert_piece(finger_pos%+1)
                *FX 15

              �
   � 3 :   �set_icon(3,1)
               �set_icon(4,0)
(#              player_type%(1)=1
2   � 4 :   �set_icon(4,1)
<               �set_icon(3,0)
F#              player_type%(1)=2
P   � 6 :   �set_icon(6,1)
Z               �set_icon(7,0)
d#              player_type%(2)=1
n   � 7 :   �set_icon(7,1)
x               �set_icon(6,0)
�#              player_type%(2)=2
�   � 9 :   �set_icon(9,0)
�2              � player% � winner% � �undo_move
�   � 11:   �set_icon(11,0)
�              �New_Game
�  �
� �
��
�
� � -------- set icon --------
�� �set_icon(icon%,a%)
�temp%!0 =mainw_hand%
�temp%!4 =icon%
temp%!8 =a%<<21
temp%!12=1<<21
!ș "Wimp_SetIconState",,temp%
"�
,
6+� -------- PROCopen_window  -----------
@� �open_window(hand%)
J!temp%=hand%
T!ș"Wimp_GetWindowInfo",,temp%
^temp%!28=-1
hș "Wimp_OpenWindow",,temp%
r�put_caret_in_window
|�
�
�)� --------  Report an error  --------
�� �report_error(error$)
�� R1
�!temp%=�
�G$(temp%+4)=�error$+"Cancel to quit progam, Ok to continue.",240)+�0
��
�=ș "Wimp_ReportError",temp%,%0000111,"Connect Four" � ,R1
�� R1
�2� R1=2 � ș "Wimp_CloseDown",myid%,&4B534154:�
��
�
�-� �check_if_won(my_counter%,col%,height%)
�� �allhor(my_counter%,col%,height%)=300 � �vert(1,my_counter%,col%,height%)=300 �  �allpdiag(my_counter%,col%,height%)=300 � �allndiag(my_counter%,col%,height%)=300 � =2^my_counter% � � goes%=64 � =%110 � =0
:
� �compute(my_counter%)
&,� col%,height%,col_points%,max_p%,max_c%
0
max_p%=-2
:� col%=1 � 8
D height%=�height(col%)
N � height%<9 �
X4  col_points%=�examine(my_counter%,col%,height%)
b  � col_points%>=253 �
l+   col_points%=col_points%*2 :� must go
v  �
�@   � �should_go(my_counter%,col%,height%)=0 � col_points%=-1
�  �
� �
�  col_points%=-2
� �
� � col_points%>max_p% �
�0  max_p%=col_points%:go_list?0=col%:max_c%=1
� �
�:  � col_points%=max_p% � go_list?max_c%=col%:max_c%+=1
� �
��
�M� goes%=1 � max_p%=0 � moves_list?0>2 � moves_list?0<6 � =moves_list?0 +1
�� max_c%=0 � GDKKKKGS

4� max_c%=1 � =go_list?0 � =go_list?(�(max_c%)-1)



� �height(A%)

 =�(fn_height)

*

4� �should_go(A%,B%,C%)

>=�(fn_should_go)

H

R� �examine(A%,B%,C%)

\=�(fn_examine)

f

p� �vert(A%,B%,C%,D%)

z=�(fn_vert)

�

�� �allhor(A%,B%,C%)

�=�(fn_allhor)

�

�� �horiz(A%,B%,C%)

�=�(fn_horiz)

�

�� �allpdiag(A%,B%,C%)

�=�(fn_allpdiag)

�

�� �pdiag(A%,B%,C%,D%)

�=�(fn_pdiag)

�
� �allndiag(A%,B%,C%)
=�(fn_allndiag)

$� �ndiag(A%,B%,C%,D%)
.=�(fn_ndiag)
8
B� �New_Game
L�reset_board
Vplayer%=�toggle_player(2)
`
winner%=0
j�
t
~� �reset_board
��make_sound("crash",&1700)
�/�Set_Message("CONNECT 4","� AW 1991","",12)
��refresh_board(-1)
�goes%=0
��
�
�� �refresh_board(f%)
�� more%
�temp%!0 =mainw_hand%
�temp%!4 =-10
�temp%!8 =-540
�temp%!12=528
temp%!16=-4

)ș "Wimp_UpdateWindow",,temp% � more%
ȕ more%
  � f% � �blank_slot(3)
(  �Draw_Circles(temp%)
2+  ș "Wimp_GetRectangle",,temp% � more%
<�
F  � f% � �blank_slot(0)
P�
Z
d� �blank_slot(A%)
n� proc_blank_slot
x�
�
�� �insert_piece(column%)
�� height%,more%
�height%=�height(column%)
�� height%>8 � �7:�
�K� ((smooth_drop%>>player%) � 1) � �smooth_drop(column%,height%,player%)
�%slot%?(column%+height%*9)=player%
��remove_finger
�temp%!0=mainw_hand%
�temp%!4 =(column%*68)-78
�temp%!8 =-(8-height%)*68-64
�temp%!12=(column%*68)-18
�temp%!16=-(8-height%)*68-4
)ș "Wimp_UpdateWindow",,temp% � more%
ȕ more%
  �Draw_Circles(temp%)
"+  ș "Wimp_GetRectangle",,temp% � more%
,�
6
@moves_list?goes%=column%
Jgoes%+=1
T/Ȏ �check_if_won(player%,column%,height%) �
^!  � 0    : � nobody's won yet
h@       � player_type%(player%)=2 � �make_sound("drop",&2000)
r*       player%=�toggle_player(player%)
|  � %110 : � draw
�6       �Set_Message("The game","was a draw","",12)
�       winner%=-1
�       player%=0
�   : � Somebody won!
�=       winner%=�highlight_winner(player%,column%,height%)
�\       � player_type%(winner%)=1 �make_sound("laugh",&400) � �make_sound("Winner",&1000)
�N       �Set_Message("Player "+�(player%),"won after",�(goes%)+" moves",12)
�       win_flash%=150
�       player%=0
��
��
�
�� �Draw_MainW(p_blk%)
� t%:t%=temp%+&100
%�Draw_Message(p_blk%!4,p_blk%!16)
Fș "Wimp_ReadPixTrans",&200,SpriteSpace%,game_area%,,,,t%+00,t%+16
&Wș "OS_SpriteOp",&234,SpriteSpace%,game_area%,p_blk%!4+12,p_blk%!16-652,&8,t%,t%+16
0�Draw_Circles(p_blk%)
:�
D
N� �Draw_Circles(A%)
X� proc_draw_circles
b�
l
v� �Refresh_Message
�� more%
�temp%!0=mainw_hand%
�temp%!4 = 584
�temp%!8 = -96
�temp%!12= 584+182
�temp%!16= -96+108
�)ș "Wimp_UpdateWindow",,temp% � more%
�ȕ more%
�%  �Draw_Message(temp%!4,temp%!16)
�+  ș "Wimp_GetRectangle",,temp% � more%
��
��
�
$� �Draw_Message(scrn_x%,scrn_y%)
	� lp%
ș "Wimp_SetColour",7
 )ȓ Ȑ scrn_x%+620,scrn_y%-92,180,-104
*$ș "Wimp_SetColour",message_col%
4� lp%=0 � 2
>/ � scrn_x%+620,scrn_y%-message_vpos%-lp%*32
HM � scrn_x%+620+((180-�message$(lp%)*16) � 2),scrn_y%-message_vpos%-lp%*32
R �message$(lp%)
\�
f�
p
z#� �Set_Message(m1$,m2$,m3$,mc%)
�� lp%,t%
�message$(0)=�m1$,12)
�message$(1)=�m2$,12)
�message$(2)=�m3$,12)
�t%=3
��lp%=2 � 0 �-1
�  � message$(lp%)="" � t%=lp%
��
�(message_vpos%=92+((104-(t%*32)) � 2)
�message_col%=mc%
��Refresh_Message
��
�
� �toggle_player(pl%)
� C%,new%,m2$
new%=pl% � 3
$� new%=1 � C%=15 � C%=11
.:� player_type%(new%)=1 � m2$="playing" � m2$="to play"
8+�Set_Message("Player "+�new%,m2$,"",C%)
B	=new%
L
V� �undo_move
`� c%,h%,for%,lp%
j4� player_type%(1)=1 � player_type%(2)=1 � for%=�
t�
~� goes%>0 �
�  goes%-=1
�  column%=goes%?moves_list
�   height%=�height(column%)-1
�!  slot%?(column%+height%*9)=3
�  temp%!0=mainw_hand%
�!  temp%!4 =(column%*68)-48-30
�$  temp%!8 =-(8-height%)*68-34-30
�!  temp%!12=(column%*68)-48+30
�$  temp%!16=-(8-height%)*68-34+30
�+  ș "Wimp_UpdateWindow",,temp% � more%
�  ȕ more%
�    �Draw_Circles(temp%)
-    ș "Wimp_GetRectangle",,temp% � more%

  �
+  player%=�toggle_player(2-(goes% � 1))
  � winner% �
(    �c%=1 � 8
2    �h%=1 � 8
<6     � slot%?(c%+h%*9)=4 � slot%?(c%+h%*9)=winner%
F    � h%
P    � c%
Z    winner%=0
d    �refresh_board(0)
n  �
x�
�  �7
��
�-�player_type%(player%)=2 � goes%=0 � for%
��
�
�� �remove_finger
�
� s%,row%
�row%=finger_pos%
�� row%<0 � �
�!temp%=mainw_hand%
�#ș "Wimp_GetWindowState",,temp%
�Tș "OS_SpriteOp",&122,SpriteSpace%,"counterO",(temp%!4+16+row%*68),temp%!16-76,0
�finger_pos%=-1
�

� �plot_finger(A%,old_row%)
"
� row%,s%
,!temp%=mainw_hand%
6#ș "Wimp_GetWindowState",,temp%
@row%=(A%!0-temp%!4-24) � 68
J� row%<>old_row% �
T  �remove_finger
^  s%=temp%+&100
hS  ș "Wimp_ReadPixTrans",&200,SpriteSpace%,counter%!((player%+4)*4),,,,s%,s%+16
r�  ș "OS_SpriteOp",&110,SpriteSpace%,"counterO",0,(temp%!4+16+row%*68),temp%!16-76,(temp%!4+24+row%*68)+64,temp%!16-56+60+12
|n  ș "OS_SpriteOp",&234,SpriteSpace%,counter%!((player%+4)*4),(temp%!4+16+row%*68),temp%!16-76,&8,s%,s%+16
��
�	=row%
�
�"� �highlight_winner(pl%,c%,h%)
�� stx%,sty%,w%,x%,y%,z%
�1w%=�allhor(pl%,c%,h%)  :x%=�vert(1,pl%,c%,h%)
�3y%=�allpdiag(pl%,c%,h%):z%=�allndiag(pl%,c%,h%)
�� w%=300 �
�   stx%=c%
�F   ȕ stx%>0 � slot%?(stx%+h%*9)=pl%:slot%?(stx%+h%*9)=4:stx%-=1:�
�   stx%=c%+1
�F   ȕ stx%<9 � slot%?(stx%+h%*9)=pl%:slot%?(stx%+h%*9)=4:stx%+=1:�
��
� x%=300 �
   sty%=h%
@   ȕ sty%>0 � (slot%?(c%+sty%*9)=pl% � slot%?(c%+sty%*9)=4)
&$     slot%?(c%+sty%*9)=4:sty%-=1
0   �
:   sty%=h%+1
D@   ȕ sty%<9 � (slot%?(c%+sty%*9)=pl% � slot%?(c%+sty%*9)=4)
N$     slot%?(c%+sty%*9)=4:sty%+=1
X   �
b�
l� y%=300 �
v  stx%=c%:sty%=h%
�L  ȕ sty%>0 � stx%>0 � (slot%?(stx%+sty%*9)=pl% � slot%?(stx%+sty%*9)=4)
�-    slot%?(stx%+sty%*9)=4:stx%-=1:sty%-=1
�  �
�  stx%=c%+1:sty%=h%+1
�L  ȕ sty%<9 � stx%<9 � (slot%?(stx%+sty%*9)=pl% � slot%?(stx%+sty%*9)=4)
�-    slot%?(stx%+sty%*9)=4:stx%+=1:sty%+=1
�  �
��
�� z%=300 �
�  stx%=c%:sty%=h%
�L  ȕ stx%>0 � sty%<9 � (slot%?(stx%+sty%*9)=pl% � slot%?(stx%+sty%*9)=4)
�-    slot%?(stx%+sty%*9)=4:stx%-=1:sty%+=1
�  �
  stx%=c%+1:sty%=h%-1
L  ȕ stx%<9 � sty%>0 � (slot%?(stx%+sty%*9)=pl% � slot%?(stx%+sty%*9)=4)
-    slot%?(stx%+sty%*9)=4:stx%+=1:sty%-=1
   �
*�
4Jș "OS_SpriteOp",&118,SpriteSpace%,"win_count"+�pl% � ,,counter%!(4*4)
>�refresh_board(0)
H=pl%
R
\� �set_sound(s%)
fK� s%=0 � $SndMenu_str%=("Sound On"+�0) � $SndMenu_str%=("Sound Off"+�0)
p=s%
z
�� �set_smooth_drop(s%)
�<!SDSubMenu_tick1%=(!SDSubMenu_tick1% � �1) � (s%>>1) � 1
�<!SDSubMenu_tick2%=(!SDSubMenu_tick2% � �1) � (s%>>2) � 1
�
� s% �
�+  !main_menu_tick%=!main_menu_tick% � 1
��
�,  !main_menu_tick%=!main_menu_tick% � �1
��
�=s%
�
�� �smooth_drop(c%,h%,pl%)
�� lp%, more%
�� lp%=8 � h% �-1
 slot%?(c%+lp%*9)=pl%
 temp%!0=mainw_hand%
 temp%!4 =(c%*68)-(78)
$ temp%!8 =-(8-lp%)*68-58
. temp%!12=(c%*68)-18
8 temp%!16=-(8-lp%)*68+62
B* ș "Wimp_UpdateWindow",,temp% � more%
L
 ȕ more%
V   slot%?(c%+(lp%+1)*9)=3
`   �Draw_Circles(temp%)
j,   ș "Wimp_GetRectangle",,temp% � more%
t �
~�
��
�
�� �fix_size(A$,len%)
�� �(A$)=len% � =A$
�� �(A$)>len% � =�A$,len%)
�=A$+�len%-�(A$)," ")
�
�/� �Set_Adr(� o%,val%):code%!o%=val%:o%+=4:�
�.� �Get_Adr(� o%):o%+=4:=code%+code%!(o%-4)
�8� �file_size(f$):� s%:ș "OS_File",5,f$ � ,,,,s%:=s%
�
� �make_sound(s$,pit%)

� more%
� sound%=0 �
� old_voice%=0 �
(- ș "Sound_AttachVoice",4,0 � ,old_voice%
21 ș "Sound_Configure",4,0,0,0,0 � old_voices%
<�
F5� ș "Sound_AttachNamedVoice",4,s$ � more%:�more%
P� 4,&17F,pit%,&FF
Zsound_ctr%=200
d�
n
x� �reset_sound
�� more%
�,ș "Sound_Configure",old_voices%,0,0,0,0
�8� ș "Sound_AttachVoice",4,old_voice% � more%:�more%
�old_voice%=0
��
�
00000000  0d 00 0a 11 f4 20 3e 21  52 75 6e 49 6d 61 67 32  |..... >!RunImag2|
00000010  36 0d 00 14 04 0d 00 1e  27 f4 20 2a 2a 2a 2a 2a  |6.......'. *****|
00000020  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
00000030  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 0d 00 28 27  |************..('|
00000040  f4 20 2a 2a 2a 2a 2a 2a  2a 20 20 57 69 6d 70 20  |. *******  Wimp |
00000050  43 6f 6e 6e 65 63 74 20  34 20 20 2a 2a 2a 2a 2a  |Connect 4  *****|
00000060  2a 2a 2a 0d 00 32 27 f4  20 2a 2a 2a 2a 2a 2a 2a  |***..2'. *******|
00000070  20 a9 20 41 72 63 20 57  6f 72 6c 64 20 31 39 39  | . Arc World 199|
00000080  31 20 2a 2a 2a 2a 2a 2a  2a 2a 0d 00 3c 27 f4 20  |1 ********..<'. |
00000090  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000000b0  2a 0d 00 46 04 0d 00 50  39 76 65 72 73 69 6f 6e  |*..F...P9version|
000000c0  24 3d 22 76 22 2b c3 28  a0 28 22 26 22 2b 24 28  |$="v"+.(.("&"+$(|
000000d0  90 2b 31 35 29 29 2f 31  30 30 29 2b 22 20 28 22  |.+15))/100)+" ("|
000000e0  2b c1 91 24 2c 35 2c 31  31 29 2b 22 29 22 0d 00  |+..$,5,11)+")"..|
000000f0  5a 04 0d 00 64 21 de 20  70 6f 6c 6c 5f 62 6c 6f  |Z...d!. poll_blo|
00000100  63 6b 25 20 32 35 36 2c  20 74 65 6d 70 25 20 26  |ck% 256, temp% &|
00000110  38 30 30 0d 00 6e 31 de  20 70 6c 61 79 65 72 5f  |800..n1. player_|
00000120  74 79 70 65 25 28 32 29  2c 20 6d 65 73 73 61 67  |type%(2), messag|
00000130  65 24 28 33 29 2c 63 6f  75 6e 74 65 72 25 20 36  |e$(3),counter% 6|
00000140  2a 34 2b 38 0d 00 78 2d  de 20 67 6f 5f 6c 69 73  |*4+8..x-. go_lis|
00000150  74 20 31 30 2c 20 6d 6f  76 65 73 5f 6c 69 73 74  |t 10, moves_list|
00000160  20 36 34 2c 20 73 6c 6f  74 25 20 39 2a 39 2b 32  | 64, slot% 9*9+2|
00000170  30 0d 00 82 39 53 70 72  69 74 65 53 69 7a 65 25  |0...9SpriteSize%|
00000180  3d a4 66 69 6c 65 5f 73  69 7a 65 28 22 3c 43 6f  |=.file_size("<Co|
00000190  6e 6e 65 63 74 34 24 44  69 72 3e 2e 53 70 72 69  |nnect4$Dir>.Spri|
000001a0  74 65 73 22 29 2b 26 34  30 30 0d 00 8c 1e de 20  |tes")+&400..... |
000001b0  53 70 72 69 74 65 53 70  61 63 65 25 20 53 70 72  |SpriteSpace% Spr|
000001c0  69 74 65 53 69 7a 65 25  0d 00 96 2d de 20 63 6f  |iteSize%...-. co|
000001d0  64 65 25 20 a4 66 69 6c  65 5f 73 69 7a 65 28 22  |de% .file_size("|
000001e0  3c 43 6f 6e 6e 65 63 74  34 24 44 69 72 3e 2e 43  |<Connect4$Dir>.C|
000001f0  6f 64 65 22 29 0d 00 a0  28 ff 22 4c 4f 41 44 20  |ode")...(."LOAD |
00000200  3c 43 6f 6e 6e 65 63 74  34 24 44 69 72 3e 2e 43  |<Connect4$Dir>.C|
00000210  6f 64 65 20 22 2b c3 7e  63 6f 64 65 25 0d 00 aa  |ode "+.~code%...|
00000220  04 0d 00 b4 3c c8 99 20  22 58 4f 53 5f 52 65 61  |....<.. "XOS_Rea|
00000230  64 56 61 72 56 61 6c 22  2c 22 43 6f 6e 6e 65 63  |dVarVal","Connec|
00000240  74 34 25 4c 6f 61 64 65  64 22 2c 74 65 6d 70 25  |t4%Loaded",temp%|
00000250  2c 32 35 36 2c 30 20 b8  20 2c 2c 41 25 0d 00 be  |,256,0 . ,,A%...|
00000260  31 e7 20 41 25 3d 30 20  8c 20 6c 6f 61 64 65 64  |1. A%=0 . loaded|
00000270  5f 6d 6f 64 73 25 3d 30  20 8b 20 6c 6f 61 64 65  |_mods%=0 . loade|
00000280  64 5f 6d 6f 64 73 25 3d  21 74 65 6d 70 25 0d 00  |d_mods%=!temp%..|
00000290  c8 1a 2a 55 6e 53 65 74  20 43 6f 6e 6e 65 63 74  |..*UnSet Connect|
000002a0  34 25 4c 6f 61 64 65 64  0d 00 d2 04 0d 00 dc 08  |4%Loaded........|
000002b0  41 25 3d 30 0d 00 e6 16  f2 53 65 74 5f 41 64 72  |A%=0.....Set_Adr|
000002c0  28 41 25 2c 73 6c 6f 74  25 29 0d 00 f0 1a 66 6e  |(A%,slot%)....fn|
000002d0  5f 68 65 69 67 68 74 3d  a4 47 65 74 5f 41 64 72  |_height=.Get_Adr|
000002e0  28 41 25 29 0d 00 fa 18  66 6e 5f 76 65 72 74 3d  |(A%)....fn_vert=|
000002f0  a4 47 65 74 5f 41 64 72  28 41 25 29 0d 01 04 19  |.Get_Adr(A%)....|
00000300  66 6e 5f 68 6f 72 69 7a  3d a4 47 65 74 5f 41 64  |fn_horiz=.Get_Ad|
00000310  72 28 41 25 29 0d 01 0e  1a 66 6e 5f 61 6c 6c 68  |r(A%)....fn_allh|
00000320  6f 72 3d a4 47 65 74 5f  41 64 72 28 41 25 29 0d  |or=.Get_Adr(A%).|
00000330  01 18 19 66 6e 5f 70 64  69 61 67 3d a4 47 65 74  |...fn_pdiag=.Get|
00000340  5f 41 64 72 28 41 25 29  0d 01 22 1c 66 6e 5f 61  |_Adr(A%)..".fn_a|
00000350  6c 6c 70 64 69 61 67 3d  a4 47 65 74 5f 41 64 72  |llpdiag=.Get_Adr|
00000360  28 41 25 29 0d 01 2c 19  66 6e 5f 6e 64 69 61 67  |(A%)..,.fn_ndiag|
00000370  3d a4 47 65 74 5f 41 64  72 28 41 25 29 0d 01 36  |=.Get_Adr(A%)..6|
00000380  1c 66 6e 5f 61 6c 6c 6e  64 69 61 67 3d a4 47 65  |.fn_allndiag=.Ge|
00000390  74 5f 41 64 72 28 41 25  29 0d 01 40 1d 66 6e 5f  |t_Adr(A%)..@.fn_|
000003a0  73 68 6f 75 6c 64 5f 67  6f 3d a4 47 65 74 5f 41  |should_go=.Get_A|
000003b0  64 72 28 41 25 29 0d 01  4a 20 70 72 6f 63 5f 62  |dr(A%)..J proc_b|
000003c0  6c 61 6e 6b 5f 73 6c 6f  74 3d a4 47 65 74 5f 41  |lank_slot=.Get_A|
000003d0  64 72 28 41 25 29 0d 01  54 1b 66 6e 5f 65 78 61  |dr(A%)..T.fn_exa|
000003e0  6d 69 6e 65 3d a4 47 65  74 5f 41 64 72 28 41 25  |mine=.Get_Adr(A%|
000003f0  29 0d 01 5e 16 f2 53 65  74 5f 41 64 72 28 41 25  |)..^..Set_Adr(A%|
00000400  2c 74 65 6d 70 25 29 0d  01 68 19 f2 53 65 74 5f  |,temp%)..h..Set_|
00000410  41 64 72 28 41 25 2c 63  6f 75 6e 74 65 72 25 29  |Adr(A%,counter%)|
00000420  0d 01 72 1d f2 53 65 74  5f 41 64 72 28 41 25 2c  |..r..Set_Adr(A%,|
00000430  53 70 72 69 74 65 53 70  61 63 65 25 29 0d 01 7c  |SpriteSpace%)..||
00000440  22 70 72 6f 63 5f 64 72  61 77 5f 63 69 72 63 6c  |"proc_draw_circl|
00000450  65 73 3d a4 47 65 74 5f  41 64 72 28 41 25 29 0d  |es=.Get_Adr(A%).|
00000460  01 86 1b 6d 61 69 6e 5f  6d 65 6e 75 25 3d a4 47  |...main_menu%=.G|
00000470  65 74 5f 41 64 72 28 41  25 29 0d 01 90 20 6d 61  |et_Adr(A%)... ma|
00000480  69 6e 5f 6d 65 6e 75 5f  69 6e 66 6f 25 3d a4 47  |in_menu_info%=.G|
00000490  65 74 5f 41 64 72 28 41  25 29 0d 01 9a 20 6d 61  |et_Adr(A%)... ma|
000004a0  69 6e 5f 6d 65 6e 75 5f  74 69 63 6b 25 3d a4 47  |in_menu_tick%=.G|
000004b0  65 74 5f 41 64 72 28 41  25 29 0d 01 a4 1b 53 44  |et_Adr(A%)....SD|
000004c0  53 75 62 4d 65 6e 75 25  3d a4 47 65 74 5f 41 64  |SubMenu%=.Get_Ad|
000004d0  72 28 41 25 29 0d 01 ae  21 53 44 53 75 62 4d 65  |r(A%)...!SDSubMe|
000004e0  6e 75 5f 74 69 63 6b 31  25 3d a4 47 65 74 5f 41  |nu_tick1%=.Get_A|
000004f0  64 72 28 41 25 29 0d 01  b8 21 53 44 53 75 62 4d  |dr(A%)...!SDSubM|
00000500  65 6e 75 5f 74 69 63 6b  32 25 3d a4 47 65 74 5f  |enu_tick2%=.Get_|
00000510  41 64 72 28 41 25 29 0d  01 c2 1d 53 6e 64 4d 65  |Adr(A%)....SndMe|
00000520  6e 75 5f 73 74 72 25 3d  a4 47 65 74 5f 41 64 72  |nu_str%=.Get_Adr|
00000530  28 41 25 29 0d 01 cc 20  6d 61 69 6e 5f 6d 65 6e  |(A%)... main_men|
00000540  75 5f 74 69 63 6b 25 21  34 3d 53 44 53 75 62 4d  |u_tick%!4=SDSubM|
00000550  65 6e 75 25 0d 01 d6 04  0d 01 e0 1e 53 70 72 69  |enu%........Spri|
00000560  74 65 53 70 61 63 65 25  21 30 3d 53 70 72 69 74  |teSpace%!0=Sprit|
00000570  65 53 69 7a 65 25 0d 01  ea 3f c8 99 20 22 4f 53  |eSize%...?.. "OS|
00000580  5f 53 70 72 69 74 65 4f  70 22 2c 26 31 30 41 2c  |_SpriteOp",&10A,|
00000590  53 70 72 69 74 65 53 70  61 63 65 25 2c 22 3c 43  |SpriteSpace%,"<C|
000005a0  6f 6e 6e 65 63 74 34 24  44 69 72 3e 2e 53 70 72  |onnect4$Dir>.Spr|
000005b0  69 74 65 73 22 0d 01 f4  44 c8 99 20 22 4f 53 5f  |ites"...D.. "OS_|
000005c0  53 70 72 69 74 65 4f 70  22 2c 26 31 31 38 2c 53  |SpriteOp",&118,S|
000005d0  70 72 69 74 65 53 70 61  63 65 25 2c 22 63 6f 75  |priteSpace%,"cou|
000005e0  6e 74 65 72 31 22 20 b8  20 2c 2c 63 6f 75 6e 74  |nter1" . ,,count|
000005f0  65 72 25 21 28 31 2a 34  29 0d 01 fe 44 c8 99 20  |er%!(1*4)...D.. |
00000600  22 4f 53 5f 53 70 72 69  74 65 4f 70 22 2c 26 31  |"OS_SpriteOp",&1|
00000610  31 38 2c 53 70 72 69 74  65 53 70 61 63 65 25 2c  |18,SpriteSpace%,|
00000620  22 63 6f 75 6e 74 65 72  32 22 20 b8 20 2c 2c 63  |"counter2" . ,,c|
00000630  6f 75 6e 74 65 72 25 21  28 32 2a 34 29 0d 02 08  |ounter%!(2*4)...|
00000640  44 c8 99 20 22 4f 53 5f  53 70 72 69 74 65 4f 70  |D.. "OS_SpriteOp|
00000650  22 2c 26 31 31 38 2c 53  70 72 69 74 65 53 70 61  |",&118,SpriteSpa|
00000660  63 65 25 2c 22 63 6f 75  6e 74 65 72 30 22 20 b8  |ce%,"counter0" .|
00000670  20 2c 2c 63 6f 75 6e 74  65 72 25 21 28 33 2a 34  | ,,counter%!(3*4|
00000680  29 0d 02 12 41 c8 99 20  22 4f 53 5f 53 70 72 69  |)...A.. "OS_Spri|
00000690  74 65 4f 70 22 2c 26 31  31 38 2c 53 70 72 69 74  |teOp",&118,Sprit|
000006a0  65 53 70 61 63 65 25 2c  22 67 61 6d 65 5f 61 72  |eSpace%,"game_ar|
000006b0  65 61 22 20 b8 20 2c 2c  67 61 6d 65 5f 61 72 65  |ea" . ,,game_are|
000006c0  61 25 0d 02 1c 46 c8 99  20 22 4f 53 5f 53 70 72  |a%...F.. "OS_Spr|
000006d0  69 74 65 4f 70 22 2c 26  31 31 38 2c 53 70 72 69  |iteOp",&118,Spri|
000006e0  74 65 53 70 61 63 65 25  2c 22 77 69 6e 5f 63 6f  |teSpace%,"win_co|
000006f0  75 6e 74 31 22 20 b8 20  2c 2c 63 6f 75 6e 74 65  |unt1" . ,,counte|
00000700  72 25 21 28 34 2a 34 29  0d 02 26 40 c8 99 20 22  |r%!(4*4)..&@.. "|
00000710  4f 53 5f 53 70 72 69 74  65 4f 70 22 2c 26 31 31  |OS_SpriteOp",&11|
00000720  38 2c 53 70 72 69 74 65  53 70 61 63 65 25 2c 22  |8,SpriteSpace%,"|
00000730  74 6f 70 31 22 20 b8 20  2c 2c 63 6f 75 6e 74 65  |top1" . ,,counte|
00000740  72 25 21 28 35 2a 34 29  0d 02 30 40 c8 99 20 22  |r%!(5*4)..0@.. "|
00000750  4f 53 5f 53 70 72 69 74  65 4f 70 22 2c 26 31 31  |OS_SpriteOp",&11|
00000760  38 2c 53 70 72 69 74 65  53 70 61 63 65 25 2c 22  |8,SpriteSpace%,"|
00000770  74 6f 70 32 22 20 b8 20  2c 2c 63 6f 75 6e 74 65  |top2" . ,,counte|
00000780  72 25 21 28 36 2a 34 29  0d 02 3a 04 0d 02 44 47  |r%!(6*4)..:...DG|
00000790  c8 99 20 22 57 69 6d 70  5f 49 6e 69 74 69 61 6c  |.. "Wimp_Initial|
000007a0  69 73 65 22 2c 32 30 30  2c 26 34 42 35 33 34 31  |ise",200,&4B5341|
000007b0  35 34 2c 22 43 6f 6e 6e  65 63 74 20 46 6f 75 72  |54,"Connect Four|
000007c0  22 20 b8 20 77 69 6d 70  5f 76 65 72 25 2c 6d 79  |" . wimp_ver%,my|
000007d0  69 64 25 0d 02 4e 04 0d  02 58 39 ee 85 20 f2 72  |id%..N...X9.. .r|
000007e0  65 70 6f 72 74 5f 65 72  72 6f 72 28 22 49 6e 74  |eport_error("Int|
000007f0  65 72 6e 61 6c 20 65 72  72 6f 72 3a 20 22 2b f6  |ernal error: "+.|
00000800  24 2b 22 20 61 74 20 22  2b c3 9e 2b 22 2e 22 29  |$+" at "+..+".")|
00000810  0d 02 62 04 0d 02 6c 29  f4 20 2d 2d 2d 2d 2d 2d  |..b...l). ------|
00000820  2d 2d 20 4c 6f 61 64 20  69 6e 20 74 65 6d 70 6c  |-- Load in templ|
00000830  61 74 65 73 20 2d 2d 2d  2d 2d 2d 2d 2d 0d 02 76  |ates --------..v|
00000840  29 f4 20 2d 2d 2d 2d 2d  2d 2d 2d 20 43 72 65 61  |). -------- Crea|
00000850  74 65 20 74 68 65 20 77  69 6e 64 6f 77 73 20 2d  |te the windows -|
00000860  2d 2d 2d 2d 2d 2d 0d 02  80 37 de 20 69 63 6f 6e  |------...7. icon|
00000870  5f 73 70 61 63 65 20 20  26 31 30 30 30 3a 69 63  |_space  &1000:ic|
00000880  6f 6e 5f 73 70 61 63 65  5f 65 6e 64 3d 69 63 6f  |on_space_end=ico|
00000890  6e 5f 73 70 61 63 65 2b  26 31 30 30 30 0d 02 8a  |n_space+&1000...|
000008a0  37 c8 99 20 22 57 69 6d  70 5f 4f 70 65 6e 54 65  |7.. "Wimp_OpenTe|
000008b0  6d 70 6c 61 74 65 22 2c  2c 22 3c 43 6f 6e 6e 65  |mplate",,"<Conne|
000008c0  63 74 34 24 44 69 72 3e  2e 21 54 65 6d 70 6c 61  |ct4$Dir>.!Templa|
000008d0  74 65 73 22 0d 02 94 56  c8 99 20 22 57 69 6d 70  |tes"...V.. "Wimp|
000008e0  5f 4c 6f 61 64 54 65 6d  70 6c 61 74 65 22 2c 2c  |_LoadTemplate",,|
000008f0  74 65 6d 70 25 2c 69 63  6f 6e 5f 73 70 61 63 65  |temp%,icon_space|
00000900  2c 69 63 6f 6e 5f 73 70  61 63 65 5f 65 6e 64 2c  |,icon_space_end,|
00000910  2d 31 2c 22 69 6e 66 6f  22 2c 30 20 b8 20 2c 2c  |-1,"info",0 . ,,|
00000920  69 63 6f 6e 5f 73 70 61  63 65 0d 02 9e 23 24 28  |icon_space...#$(|
00000930  74 65 6d 70 25 21 28 38  38 2b 31 32 2a 33 32 2b  |temp%!(88+12*32+|
00000940  32 30 29 29 3d 76 65 72  73 69 6f 6e 24 0d 02 a8  |20))=version$...|
00000950  2e 74 65 6d 70 25 21 36  34 3d 53 70 72 69 74 65  |.temp%!64=Sprite|
00000960  53 70 61 63 65 25 20 20  20 20 3a f4 20 6d 79 20  |Space%    :. my |
00000970  73 70 72 69 74 65 20 61  72 65 61 0d 02 b2 2e c8  |sprite area.....|
00000980  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 57 69  |. "Wimp_CreateWi|
00000990  6e 64 6f 77 22 2c 2c 74  65 6d 70 25 20 b8 20 69  |ndow",,temp% . i|
000009a0  6e 66 6f 5f 68 61 6e 64  25 0d 02 bc 1f 21 6d 61  |nfo_hand%....!ma|
000009b0  69 6e 5f 6d 65 6e 75 5f  69 6e 66 6f 25 3d 69 6e  |in_menu_info%=in|
000009c0  66 6f 5f 68 61 6e 64 25  0d 02 c6 5a c8 99 20 22  |fo_hand%...Z.. "|
000009d0  57 69 6d 70 5f 4c 6f 61  64 54 65 6d 70 6c 61 74  |Wimp_LoadTemplat|
000009e0  65 22 2c 2c 74 65 6d 70  25 2c 69 63 6f 6e 5f 73  |e",,temp%,icon_s|
000009f0  70 61 63 65 2c 69 63 6f  6e 5f 73 70 61 63 65 5f  |pace,icon_space_|
00000a00  65 6e 64 2c 2d 31 2c 22  6d 61 69 6e 67 61 6d 65  |end,-1,"maingame|
00000a10  22 2c 30 20 b8 20 2c 2c  69 63 6f 6e 5f 73 70 61  |",0 . ,,icon_spa|
00000a20  63 65 0d 02 d0 2e 74 65  6d 70 25 21 36 34 3d 53  |ce....temp%!64=S|
00000a30  70 72 69 74 65 53 70 61  63 65 25 20 20 20 20 3a  |priteSpace%    :|
00000a40  f4 20 6d 79 20 73 70 72  69 74 65 20 61 72 65 61  |. my sprite area|
00000a50  0d 02 da 2f c8 99 20 22  57 69 6d 70 5f 43 72 65  |.../.. "Wimp_Cre|
00000a60  61 74 65 57 69 6e 64 6f  77 22 2c 2c 74 65 6d 70  |ateWindow",,temp|
00000a70  25 20 b8 20 6d 61 69 6e  77 5f 68 61 6e 64 25 0d  |% . mainw_hand%.|
00000a80  02 e4 1b c8 99 20 22 57  69 6d 70 5f 43 6c 6f 73  |..... "Wimp_Clos|
00000a90  65 54 65 6d 70 6c 61 74  65 22 0d 02 ee 04 0d 02  |eTemplate"......|
00000aa0  f8 27 f4 20 2d 2d 2d 2d  2d 2d 2d 2d 20 44 65 66  |.'. -------- Def|
00000ab0  69 6e 65 20 74 68 65 20  6d 65 6e 75 20 2d 2d 2d  |ine the menu ---|
00000ac0  2d 2d 2d 2d 2d 0d 03 02  04 0d 03 0c 29 f4 20 2d  |-----.......). -|
00000ad0  2d 2d 2d 2d 2d 2d 2d 20  20 50 75 74 20 69 63 6f  |-------  Put ico|
00000ae0  6e 20 6f 6e 20 62 61 72  20 20 2d 2d 2d 2d 2d 2d  |n on bar  ------|
00000af0  2d 2d 0d 03 16 37 70 6f  6c 6c 5f 62 6c 6f 63 6b  |--...7poll_block|
00000b00  25 21 30 3d 2d 31 20 3a  70 6f 6c 6c 5f 62 6c 6f  |%!0=-1 :poll_blo|
00000b10  63 6b 25 21 34 3d 30 20  20 3a 70 6f 6c 6c 5f 62  |ck%!4=0  :poll_b|
00000b20  6c 6f 63 6b 25 21 38 3d  30 0d 03 20 46 70 6f 6c  |lock%!8=0.. Fpol|
00000b30  6c 5f 62 6c 6f 63 6b 25  21 31 32 3d 38 38 3a 70  |l_block%!12=88:p|
00000b40  6f 6c 6c 5f 62 6c 6f 63  6b 25 21 31 36 3d 36 38  |oll_block%!16=68|
00000b50  3a 70 6f 6c 6c 5f 62 6c  6f 63 6b 25 21 32 30 3d  |:poll_block%!20=|
00000b60  25 31 30 30 30 30 30 30  30 30 30 30 30 31 30 0d  |%10000000000010.|
00000b70  03 2a 21 24 28 70 6f 6c  6c 5f 62 6c 6f 63 6b 25  |.*!$(poll_block%|
00000b80  2b 32 34 29 3d 22 21 63  6f 6e 6e 65 63 74 34 22  |+24)="!connect4"|
00000b90  0d 03 34 30 c8 99 20 22  57 69 6d 70 5f 43 72 65  |..40.. "Wimp_Cre|
00000ba0  61 74 65 49 63 6f 6e 22  2c 2c 70 6f 6c 6c 5f 62  |ateIcon",,poll_b|
00000bb0  6c 6f 63 6b 25 20 b8 20  6d 79 5f 69 63 6f 6e 25  |lock% . my_icon%|
00000bc0  0d 03 3e 04 0d 03 48 29  f4 20 2d 2d 2d 2d 2d 2d  |..>...H). ------|
00000bd0  20 48 65 72 65 27 73 20  74 68 65 20 6d 61 69 6e  | Here's the main|
00000be0  20 6c 6f 6f 70 21 20 2d  2d 2d 2d 2d 2d 0d 03 52  | loop! ------..R|
00000bf0  12 f2 62 6c 61 6e 6b 5f  73 6c 6f 74 28 30 29 0d  |..blank_slot(0).|
00000c00  03 5c 22 6d 65 73 73 61  67 65 5f 63 6f 6c 25 3d  |.\"message_col%=|
00000c10  30 3a 6d 65 73 73 61 67  65 5f 76 70 6f 73 25 3d  |0:message_vpos%=|
00000c20  30 0d 03 66 12 66 69 6e  67 65 72 5f 70 6f 73 25  |0..f.finger_pos%|
00000c30  3d 2d 31 0d 03 70 11 73  6f 75 6e 64 5f 63 74 72  |=-1..p.sound_ctr|
00000c40  25 3d 2d 31 0d 03 7a 10  6f 6c 64 5f 76 6f 69 63  |%=-1..z.old_voic|
00000c50  65 25 3d 30 0d 03 84 11  6f 6c 64 5f 76 6f 69 63  |e%=0....old_voic|
00000c60  65 73 25 3d 30 0d 03 8e  18 73 6f 75 6e 64 25 3d  |es%=0....sound%=|
00000c70  a4 73 65 74 5f 73 6f 75  6e 64 28 31 29 0d 03 98  |.set_sound(1)...|
00000c80  10 f2 72 65 73 65 74 5f  62 6f 61 72 64 0d 03 a2  |..reset_board...|
00000c90  27 70 6c 61 79 65 72 5f  74 79 70 65 25 28 31 29  |'player_type%(1)|
00000ca0  3d 31 3a 70 6c 61 79 65  72 5f 74 79 70 65 25 28  |=1:player_type%(|
00000cb0  32 29 3d 31 0d 03 ac 1b  77 69 6e 6e 65 72 25 3d  |2)=1....winner%=|
00000cc0  30 3a 77 69 6e 5f 66 6c  61 73 68 25 3d 2d 31 0d  |0:win_flash%=-1.|
00000cd0  03 b6 1a 63 6c 72 5f 63  74 72 25 3d 2d 31 3a 63  |...clr_ctr%=-1:c|
00000ce0  6c 72 5f 69 63 6e 25 3d  30 0d 03 c0 24 73 6d 6f  |lr_icn%=0...$smo|
00000cf0  6f 74 68 5f 64 72 6f 70  25 3d a4 73 65 74 5f 73  |oth_drop%=.set_s|
00000d00  6d 6f 6f 74 68 5f 64 72  6f 70 28 30 29 0d 03 ca  |mooth_drop(0)...|
00000d10  0c 41 25 3d b3 28 2d 91  29 0d 03 d4 0b 71 75 69  |.A%=.(-.)....qui|
00000d20  74 25 3d a3 0d 03 de 0d  70 6c 61 79 65 72 25 3d  |t%=.....player%=|
00000d30  30 0d 03 e8 1d f2 6f 70  65 6e 5f 77 69 6e 64 6f  |0.....open_windo|
00000d40  77 28 6d 61 69 6e 77 5f  68 61 6e 64 25 29 0d 03  |w(mainw_hand%)..|
00000d50  f2 39 ee 85 20 f2 72 65  70 6f 72 74 5f 65 72 72  |.9.. .report_err|
00000d60  6f 72 28 22 49 6e 74 65  72 6e 61 6c 20 65 72 72  |or("Internal err|
00000d70  6f 72 3a 20 22 2b f6 24  2b 22 20 61 74 20 22 2b  |or: "+.$+" at "+|
00000d80  c3 9e 2b 22 2e 22 29 0d  03 fc 05 f5 0d 04 06 46  |..+".")........F|
00000d90  20 20 c8 99 20 22 57 69  6d 70 5f 50 6f 6c 6c 22  |  .. "Wimp_Poll"|
00000da0  2c 25 31 30 30 30 30 30  30 31 31 30 30 30 30 30  |,%10000001100000|
00000db0  31 31 30 30 30 30 2c 70  6f 6c 6c 5f 62 6c 6f 63  |110000,poll_bloc|
00000dc0  6b 25 20 b8 20 70 6f 6c  6c 65 64 2c 62 6c 6f 63  |k% . polled,bloc|
00000dd0  6b 25 0d 04 10 04 0d 04  1a 11 20 20 c8 8e 20 70  |k%........  .. p|
00000de0  6f 6c 6c 65 64 20 ca 0d  04 24 0d 20 20 20 20 c9  |olled ...$.    .|
00000df0  20 30 20 3a 0d 04 2e 18  20 20 20 20 20 e7 20 63  | 0 :....     . c|
00000e00  6c 72 5f 63 74 72 25 3e  2d 31 20 8c 0d 04 38 15  |lr_ctr%>-1 ...8.|
00000e10  20 20 20 20 20 20 63 6c  72 5f 63 74 72 25 2d 3d  |      clr_ctr%-=|
00000e20  31 0d 04 42 22 20 20 20  20 20 20 e7 20 63 6c 72  |1..B"      . clr|
00000e30  5f 63 74 72 25 3d 2d 31  20 8c 20 f2 63 6c 72 5f  |_ctr%=-1 . .clr_|
00000e40  63 74 72 0d 04 4c 0a 20  20 20 20 20 cd 0d 04 56  |ctr..L.     ...V|
00000e50  04 0d 04 60 1a 20 20 20  20 20 e7 20 73 6f 75 6e  |...`.     . soun|
00000e60  64 5f 63 74 72 25 3e 2d  31 20 8c 0d 04 6a 17 20  |d_ctr%>-1 ...j. |
00000e70  20 20 20 20 20 73 6f 75  6e 64 5f 63 74 72 25 2d  |     sound_ctr%-|
00000e80  3d 31 0d 04 74 28 20 20  20 20 20 20 e7 20 73 6f  |=1..t(      . so|
00000e90  75 6e 64 5f 63 74 72 25  3d 2d 31 20 8c 20 f2 72  |und_ctr%=-1 . .r|
00000ea0  65 73 65 74 5f 73 6f 75  6e 64 0d 04 7e 0a 20 20  |eset_sound..~.  |
00000eb0  20 20 20 cd 0d 04 88 04  0d 04 92 23 20 20 20 20  |   ........#    |
00000ec0  20 c8 8e 20 70 6c 61 79  65 72 5f 74 79 70 65 25  | .. player_type%|
00000ed0  28 70 6c 61 79 65 72 25  29 20 ca 0d 04 9c 0f 20  |(player%) ..... |
00000ee0  20 20 20 20 20 c9 20 31  20 3a 0d 04 a6 2f 20 20  |     . 1 :.../  |
00000ef0  20 20 20 20 20 c8 99 20  22 57 69 6d 70 5f 47 65  |     .. "Wimp_Ge|
00000f00  74 50 6f 69 6e 74 65 72  49 6e 66 6f 22 2c 2c 74  |tPointerInfo",,t|
00000f10  65 6d 70 25 2b 26 34 30  30 0d 04 b0 47 20 20 20  |emp%+&400...G   |
00000f20  20 20 20 20 e7 20 74 65  6d 70 25 21 26 34 30 38  |    . temp%!&408|
00000f30  3d 30 20 80 20 63 6c 72  5f 63 74 72 25 3c 30 20  |=0 . clr_ctr%<0 |
00000f40  f2 69 6e 73 65 72 74 5f  70 69 65 63 65 28 a4 63  |.insert_piece(.c|
00000f50  6f 6d 70 75 74 65 28 70  6c 61 79 65 72 25 29 29  |ompute(player%))|
00000f60  0d 04 ba 0f 20 20 20 20  20 20 c9 20 32 20 3a 0d  |....      . 2 :.|
00000f70  04 c4 2f 20 20 20 20 20  20 20 c8 99 20 22 57 69  |../       .. "Wi|
00000f80  6d 70 5f 47 65 74 50 6f  69 6e 74 65 72 49 6e 66  |mp_GetPointerInf|
00000f90  6f 22 2c 2c 74 65 6d 70  25 2b 26 34 30 30 0d 04  |o",,temp%+&400..|
00000fa0  ce 43 20 20 20 20 20 20  20 e7 20 74 65 6d 70 25  |.C       . temp%|
00000fb0  21 26 34 30 38 3d 30 20  80 20 74 65 6d 70 25 21  |!&408=0 . temp%!|
00000fc0  26 34 30 43 3d 6d 61 69  6e 77 5f 68 61 6e 64 25  |&40C=mainw_hand%|
00000fd0  20 80 20 74 65 6d 70 25  21 26 34 31 30 3d 32 20  | . temp%!&410=2 |
00000fe0  8c 0d 04 d8 3c 20 20 20  20 20 20 20 20 66 69 6e  |....<        fin|
00000ff0  67 65 72 5f 70 6f 73 25  3d a4 70 6c 6f 74 5f 66  |ger_pos%=.plot_f|
00001000  69 6e 67 65 72 28 74 65  6d 70 25 2b 26 34 30 30  |inger(temp%+&400|
00001010  2c 66 69 6e 67 65 72 5f  70 6f 73 25 29 0d 04 e2  |,finger_pos%)...|
00001020  0c 20 20 20 20 20 20 20  cc 0d 04 ec 2d 20 20 20  |.       ....-   |
00001030  20 20 20 20 20 e7 20 66  69 6e 67 65 72 5f 70 6f  |     . finger_po|
00001040  73 25 3e 2d 31 20 8c 20  f2 72 65 6d 6f 76 65 5f  |s%>-1 . .remove_|
00001050  66 69 6e 67 65 72 0d 04  f6 0b 20 20 20 20 20 20  |finger....      |
00001060  cd 0d 05 00 0a 20 20 20  20 20 cb 0d 05 0a 16 20  |.....     ..... |
00001070  20 20 20 20 e7 20 77 69  6e 6e 65 72 25 3e 30 20  |    . winner%>0 |
00001080  8c 0d 05 14 17 20 20 20  20 20 20 77 69 6e 5f 66  |.....      win_f|
00001090  6c 61 73 68 25 2d 3d 31  0d 05 1e 19 20 20 20 20  |lash%-=1....    |
000010a0  20 20 c8 8e 20 77 69 6e  5f 66 6c 61 73 68 25 20  |  .. win_flash% |
000010b0  ca 0d 05 28 6d 20 20 20  20 20 20 20 c9 20 37 35  |...(m       . 75|
000010c0  3a 20 c8 99 20 22 4f 53  5f 53 70 72 69 74 65 4f  |: .. "OS_SpriteO|
000010d0  70 22 2c 26 31 31 38 2c  53 70 72 69 74 65 53 70  |p",&118,SpriteSp|
000010e0  61 63 65 25 2c 22 77 69  6e 5f 63 6f 75 6e 74 22  |ace%,"win_count"|
000010f0  2b c3 77 69 6e 6e 65 72  25 20 b8 20 2c 2c 63 6f  |+.winner% . ,,co|
00001100  75 6e 74 65 72 25 21 28  34 2a 34 29 3a f2 72 65  |unter%!(4*4):.re|
00001110  66 72 65 73 68 5f 62 6f  61 72 64 28 30 29 0d 05  |fresh_board(0)..|
00001120  32 7a 20 20 20 20 20 20  20 c9 20 30 20 3a 20 c8  |2z       . 0 : .|
00001130  99 20 22 4f 53 5f 53 70  72 69 74 65 4f 70 22 2c  |. "OS_SpriteOp",|
00001140  26 31 31 38 2c 53 70 72  69 74 65 53 70 61 63 65  |&118,SpriteSpace|
00001150  25 2c 22 63 6f 75 6e 74  65 72 22 2b c3 77 69 6e  |%,"counter"+.win|
00001160  6e 65 72 25 20 b8 20 2c  2c 63 6f 75 6e 74 65 72  |ner% . ,,counter|
00001170  25 21 28 34 2a 34 29 3a  77 69 6e 5f 66 6c 61 73  |%!(4*4):win_flas|
00001180  68 25 3d 31 35 30 3a f2  72 65 66 72 65 73 68 5f  |h%=150:.refresh_|
00001190  62 6f 61 72 64 28 30 29  0d 05 3c 0b 20 20 20 20  |board(0)..<.    |
000011a0  20 20 cb 0d 05 46 0a 20  20 20 20 20 cd 0d 05 50  |  ...F.     ...P|
000011b0  04 0d 05 5a 1d 20 20 20  20 c9 20 31 20 3a 20 f4  |...Z.    . 1 : .|
000011c0  20 52 65 64 72 61 77 20  57 69 6e 64 6f 77 0d 05  | Redraw Window..|
000011d0  64 2f 20 20 20 20 20 c8  99 20 22 57 69 6d 70 5f  |d/     .. "Wimp_|
000011e0  52 65 64 72 61 77 57 69  6e 64 6f 77 22 2c 2c 62  |RedrawWindow",,b|
000011f0  6c 6f 63 6b 25 20 b8 20  6d 6f 72 65 25 0d 05 6e  |lock% . more%..n|
00001200  12 20 20 20 20 20 20 c8  95 20 6d 6f 72 65 25 0d  |.      .. more%.|
00001210  05 78 1f 20 20 20 20 20  20 20 20 f2 44 72 61 77  |.x.        .Draw|
00001220  5f 4d 61 69 6e 57 28 62  6c 6f 63 6b 25 29 0d 05  |_MainW(block%)..|
00001230  82 32 20 20 20 20 20 20  20 20 c8 99 20 22 57 69  |.2        .. "Wi|
00001240  6d 70 5f 47 65 74 52 65  63 74 61 6e 67 6c 65 22  |mp_GetRectangle"|
00001250  2c 2c 62 6c 6f 63 6b 25  20 b8 20 6d 6f 72 65 25  |,,block% . more%|
00001260  0d 05 8c 0b 20 20 20 20  20 20 ce 0d 05 96 04 0d  |....      ......|
00001270  05 a0 1b 20 20 20 20 c9  20 32 20 3a 20 f4 20 4f  |...    . 2 : . O|
00001280  70 65 6e 20 57 69 6e 64  6f 77 0d 05 aa 25 20 20  |pen Window...%  |
00001290  20 20 20 c8 99 20 22 57  69 6d 70 5f 4f 70 65 6e  |   .. "Wimp_Open|
000012a0  57 69 6e 64 6f 77 22 2c  2c 62 6c 6f 63 6b 25 0d  |Window",,block%.|
000012b0  05 b4 04 0d 05 be 1c 20  20 20 20 c9 20 33 20 3a  |.......    . 3 :|
000012c0  20 f4 20 43 6c 6f 73 65  20 57 69 6e 64 6f 77 0d  | . Close Window.|
000012d0  05 c8 26 20 20 20 20 20  c8 99 20 22 57 69 6d 70  |..&     .. "Wimp|
000012e0  5f 43 6c 6f 73 65 57 69  6e 64 6f 77 22 2c 2c 62  |_CloseWindow",,b|
000012f0  6c 6f 63 6b 25 0d 05 d2  04 0d 05 dc 1b 20 20 20  |lock%........   |
00001300  20 c9 20 36 20 3a 20 f4  20 6d 6f 75 73 65 20 63  | . 6 : . mouse c|
00001310  6c 69 63 6b 0d 05 e6 1e  20 20 20 20 20 f2 68 61  |lick....     .ha|
00001320  6e 64 6c 65 5f 63 6c 69  63 6b 28 62 6c 6f 63 6b  |ndle_click(block|
00001330  25 29 0d 05 f0 04 0d 05  fa 1b 20 20 20 20 c9 20  |%)........    . |
00001340  38 20 3a 20 f4 20 6b 65  79 20 70 72 65 73 73 65  |8 : . key presse|
00001350  73 0d 06 04 18 20 20 20  20 20 20 c8 8e 20 62 6c  |s....      .. bl|
00001360  6f 63 6b 25 21 32 34 20  ca 0d 06 0e 24 20 20 20  |ock%!24 ....$   |
00001370  20 20 20 20 20 c9 20 31  34 20 20 20 20 3a 20 f4  |     . 14    : .|
00001380  20 4e 65 77 20 47 61 6d  65 20 28 4e 29 0d 06 18  | New Game (N)...|
00001390  28 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |(               |
000013a0  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
000013b0  31 31 2c 31 29 0d 06 22  30 20 20 20 20 20 20 20  |11,1).."0       |
000013c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 63 6c  |              cl|
000013d0  72 5f 63 74 72 25 3d 31  30 3a 63 6c 72 5f 69 63  |r_ctr%=10:clr_ic|
000013e0  6e 25 3d 31 31 0d 06 2c  21 20 20 20 20 20 20 20  |n%=11..,!       |
000013f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 2a 46  |              *F|
00001400  58 20 32 31 20 31 0d 06  36 23 20 20 20 20 20 20  |X 21 1..6#      |
00001410  20 20 c9 20 32 31 2c 32  36 20 3a 20 f4 20 55 6e  |  . 21,26 : . Un|
00001420  64 6f 20 28 55 2c 20 5a  29 0d 06 40 27 20 20 20  |do (U, Z)..@'   |
00001430  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001440  20 20 f2 73 65 74 5f 69  63 6f 6e 28 39 2c 31 29  |  .set_icon(9,1)|
00001450  0d 06 4a 2f 20 20 20 20  20 20 20 20 20 20 20 20  |..J/            |
00001460  20 20 20 20 20 20 20 20  20 63 6c 72 5f 63 74 72  |         clr_ctr|
00001470  25 3d 31 30 3a 63 6c 72  5f 69 63 6e 25 3d 39 0d  |%=10:clr_icn%=9.|
00001480  06 54 21 20 20 20 20 20  20 20 20 20 20 20 20 20  |.T!             |
00001490  20 20 20 20 20 20 20 20  2a 46 58 20 32 31 20 31  |        *FX 21 1|
000014a0  0d 06 5e 2f 20 20 20 20  20 20 20 20 7f 20 20 3a  |..^/        .  :|
000014b0  20 c8 99 20 22 57 69 6d  70 5f 50 72 6f 63 65 73  | .. "Wimp_Proces|
000014c0  73 4b 65 79 22 2c 62 6c  6f 63 6b 25 21 32 34 0d  |sKey",block%!24.|
000014d0  06 68 0b 20 20 20 20 20  20 cb 0d 06 72 04 0d 06  |.h.      ...r...|
000014e0  7c 1e 20 20 20 20 c9 20  39 20 3a 20 f4 20 4d 65  ||.    . 9 : . Me|
000014f0  6e 75 20 53 65 6c 65 63  74 69 6f 6e 0d 06 86 1d  |nu Selection....|
00001500  20 20 20 20 20 f2 64 65  63 6f 64 65 5f 6d 65 6e  |     .decode_men|
00001510  75 28 62 6c 6f 63 6b 25  29 0d 06 90 04 0d 06 9a  |u(block%).......|
00001520  22 20 20 20 20 c9 20 31  37 2c 31 38 20 3a 20 f4  |"    . 17,18 : .|
00001530  20 6d 65 73 73 61 67 65  20 70 61 73 73 65 64 0d  | message passed.|
00001540  06 a4 20 20 20 20 20 20  f2 64 65 63 6f 64 65 5f  |..      .decode_|
00001550  6d 65 73 73 61 67 65 28  62 6c 6f 63 6b 25 29 0d  |message(block%).|
00001560  06 ae 06 20 cb 0d 06 b8  04 0d 06 c2 0b fd 20 71  |... .......... q|
00001570  75 69 74 25 0d 06 cc 10  f2 72 65 73 65 74 5f 73  |uit%.....reset_s|
00001580  6f 75 6e 64 0d 06 d6 26  e7 20 6c 6f 61 64 65 64  |ound...&. loaded|
00001590  5f 6d 6f 64 73 25 20 80  20 31 20 8c 20 2a 52 4d  |_mods% . 1 . *RM|
000015a0  4b 69 6c 6c 20 63 72 61  73 68 0d 06 d7 26 e7 20  |Kill crash...&. |
000015b0  6c 6f 61 64 65 64 5f 6d  6f 64 73 25 20 80 20 32  |loaded_mods% . 2|
000015c0  20 8c 20 2a 52 4d 4b 69  6c 6c 20 6c 61 75 67 68  | . *RMKill laugh|
000015d0  0d 06 d8 25 e7 20 6c 6f  61 64 65 64 5f 6d 6f 64  |...%. loaded_mod|
000015e0  73 25 20 80 20 34 20 8c  20 2a 52 4d 4b 69 6c 6c  |s% . 4 . *RMKill|
000015f0  20 64 72 6f 70 0d 06 d9  27 e7 20 6c 6f 61 64 65  | drop...'. loade|
00001600  64 5f 6d 6f 64 73 25 20  80 20 38 20 8c 20 2a 52  |d_mods% . 8 . *R|
00001610  4d 4b 69 6c 6c 20 57 69  6e 6e 65 72 0d 06 da 04  |MKill Winner....|
00001620  0d 06 e0 16 c8 99 22 57  69 6d 70 5f 43 6c 6f 73  |......"Wimp_Clos|
00001630  65 44 6f 77 6e 22 0d 06  ea 05 e0 0d 06 f4 04 0d  |eDown"..........|
00001640  06 fe 04 0d 07 08 0e dd  20 f2 63 6c 72 5f 63 74  |........ .clr_ct|
00001650  72 0d 07 12 11 c8 8e 20  63 6c 72 5f 69 63 6e 25  |r...... clr_icn%|
00001660  20 ca 0d 07 1c 17 20 20  c9 20 31 31 20 3a 20 20  | .....  . 11 :  |
00001670  f2 4e 65 77 5f 47 61 6d  65 0d 07 26 20 20 20 20  |.New_Game..&    |
00001680  20 20 20 20 20 20 20 20  20 20 f2 73 65 74 5f 69  |          .set_i|
00001690  63 6f 6e 28 31 31 2c 30  29 0d 07 30 2c 20 20 c9  |con(11,0)..0,  .|
000016a0  20 39 20 20 3a 20 20 e7  20 70 6c 61 79 65 72 25  | 9  :  . player%|
000016b0  20 84 20 77 69 6e 6e 65  72 25 20 f2 75 6e 64 6f  | . winner% .undo|
000016c0  5f 6d 6f 76 65 0d 07 3a  1f 20 20 20 20 20 20 20  |_move..:.       |
000016d0  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
000016e0  39 2c 30 29 0d 07 44 05  cb 0d 07 4e 05 e1 0d 07  |9,0)..D....N....|
000016f0  58 04 0d 07 62 26 f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |X...b&. --------|
00001700  20 64 65 63 6f 64 65 5f  6d 65 73 73 61 67 65 20  | decode_message |
00001710  2d 2d 2d 2d 2d 2d 2d 2d  0d 07 6c 19 dd 20 f2 64  |--------..l.. .d|
00001720  65 63 6f 64 65 5f 6d 65  73 73 61 67 65 28 41 25  |ecode_message(A%|
00001730  29 0d 07 76 13 ea 20 66  69 6c 65 24 2c 6c 70 25  |)..v.. file$,lp%|
00001740  2c 6f 6c 25 0d 07 80 0e  c8 8e 20 41 25 21 31 36  |,ol%...... A%!16|
00001750  20 ca 0d 07 8a 1d 20 20  20 20 20 c9 20 30 20 3a  | .....     . 0 :|
00001760  20 f4 20 4d 65 73 73 61  67 65 5f 51 75 69 74 0d  | . Message_Quit.|
00001770  07 94 16 20 20 20 20 20  20 20 20 20 20 20 71 75  |...           qu|
00001780  69 74 25 3d b9 0d 07 9e  05 cb 0d 07 a8 05 e1 0d  |it%=............|
00001790  07 b2 04 0d 07 bc 23 f4  20 2d 2d 2d 2d 2d 2d 2d  |......#. -------|
000017a0  2d 20 64 65 63 6f 64 65  5f 6d 65 6e 75 20 2d 2d  |- decode_menu --|
000017b0  2d 2d 2d 2d 2d 2d 0d 07  c6 16 dd 20 f2 64 65 63  |------..... .dec|
000017c0  6f 64 65 5f 6d 65 6e 75  28 41 25 29 0d 07 d0 08  |ode_menu(A%)....|
000017d0  ea 20 64 24 0d 07 da 0d  20 c8 8e 20 21 41 25 20  |. d$.... .. !A% |
000017e0  ca 0d 07 e4 14 20 20 20  20 c9 20 30 20 3a 20 f4  |.....    . 0 : .|
000017f0  20 49 6e 66 6f 0d 07 ee  15 20 20 20 20 c9 20 31  | Info....    . 1|
00001800  20 3a 20 f4 20 53 6f 75  6e 64 0d 07 f8 2e 20 20  | : . Sound....  |
00001810  20 20 20 20 20 20 20 20  20 20 20 73 6f 75 6e 64  |           sound|
00001820  25 3d a4 73 65 74 5f 73  6f 75 6e 64 28 73 6f 75  |%=.set_sound(sou|
00001830  6e 64 25 20 82 20 31 29  0d 08 02 1b 20 20 20 20  |nd% . 1)....    |
00001840  c9 20 32 20 3a 20 f4 20  53 6d 6f 6f 74 68 20 44  |. 2 : . Smooth D|
00001850  72 6f 70 0d 08 0c 1a 20  20 20 20 20 20 20 20 20  |rop....         |
00001860  20 20 20 20 c8 8e 20 41  25 21 34 20 ca 0d 08 16  |    .. A%!4 ....|
00001870  28 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |(              .|
00001880  20 2d 31 3a 20 e7 20 73  6d 6f 6f 74 68 5f 64 72  | -1: . smooth_dr|
00001890  6f 70 25 20 8c 0d 08 20  3d 20 20 20 20 20 20 20  |op% ... =       |
000018a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000018b0  20 20 73 6d 6f 6f 74 68  5f 64 72 6f 70 25 3d a4  |  smooth_drop%=.|
000018c0  73 65 74 5f 73 6d 6f 6f  74 68 5f 64 72 6f 70 28  |set_smooth_drop(|
000018d0  30 29 0d 08 2a 1c 20 20  20 20 20 20 20 20 20 20  |0)..*.          |
000018e0  20 20 20 20 20 20 20 20  20 20 20 20 20 cc 0d 08  |             ...|
000018f0  34 40 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4@              |
00001900  20 20 20 20 20 20 20 20  20 20 20 73 6d 6f 6f 74  |           smoot|
00001910  68 5f 64 72 6f 70 25 3d  a4 73 65 74 5f 73 6d 6f  |h_drop%=.set_smo|
00001920  6f 74 68 5f 64 72 6f 70  28 25 31 31 30 29 0d 08  |oth_drop(%110)..|
00001930  3e 1c 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |>.              |
00001940  20 20 20 20 20 20 20 20  20 cd 0d 08 48 47 20 20  |         ...HG  |
00001950  20 20 20 20 20 20 20 20  20 20 20 20 c9 20 20 30  |            .  0|
00001960  3a 20 73 6d 6f 6f 74 68  5f 64 72 6f 70 25 3d a4  |: smooth_drop%=.|
00001970  73 65 74 5f 73 6d 6f 6f  74 68 5f 64 72 6f 70 28  |set_smooth_drop(|
00001980  73 6d 6f 6f 74 68 5f 64  72 6f 70 25 20 82 20 32  |smooth_drop% . 2|
00001990  29 0d 08 52 47 20 20 20  20 20 20 20 20 20 20 20  |)..RG           |
000019a0  20 20 20 c9 20 20 31 3a  20 73 6d 6f 6f 74 68 5f  |   .  1: smooth_|
000019b0  64 72 6f 70 25 3d a4 73  65 74 5f 73 6d 6f 6f 74  |drop%=.set_smoot|
000019c0  68 5f 64 72 6f 70 28 73  6d 6f 6f 74 68 5f 64 72  |h_drop(smooth_dr|
000019d0  6f 70 25 20 82 20 34 29  0d 08 5c 12 20 20 20 20  |op% . 4)..\.    |
000019e0  20 20 20 20 20 20 20 20  20 cb 0d 08 66 15 20 20  |         ...f.  |
000019f0  20 20 c9 20 33 20 3a 20  f4 20 52 65 73 65 74 0d  |  . 3 : . Reset.|
00001a00  08 70 1d 20 20 20 20 20  20 20 20 20 20 20 20 20  |.p.             |
00001a10  f2 72 65 73 65 74 5f 62  6f 61 72 64 0d 08 7a 14  |.reset_board..z.|
00001a20  20 20 20 20 c9 20 34 20  3a 20 f4 20 71 75 69 74  |    . 4 : . quit|
00001a30  0d 08 84 18 20 20 20 20  20 20 20 20 20 20 20 20  |....            |
00001a40  20 71 75 69 74 25 3d b9  0d 08 8e 06 20 cb 0d 08  | quit%=..... ...|
00001a50  98 24 20 c8 99 20 22 57  69 6d 70 5f 47 65 74 50  |.$ .. "Wimp_GetP|
00001a60  6f 69 6e 74 65 72 49 6e  66 6f 22 2c 2c 74 65 6d  |ointerInfo",,tem|
00001a70  70 25 0d 08 a2 16 20 e7  20 28 74 65 6d 70 25 21  |p%.... . (temp%!|
00001a80  38 20 80 20 31 29 20 8c  0d 08 ac 37 20 20 20 20  |8 . 1) ....7    |
00001a90  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 4d  |.. "Wimp_CreateM|
00001aa0  65 6e 75 22 2c 2c 6d 61  69 6e 5f 6d 65 6e 75 25  |enu",,main_menu%|
00001ab0  2c 74 65 6d 70 25 21 30  2d 39 30 2c 32 32 30 0d  |,temp%!0-90,220.|
00001ac0  08 b6 06 20 cd 0d 08 c0  05 e1 0d 08 ca 04 0d 08  |... ............|
00001ad0  d4 29 f4 20 2d 2d 2d 2d  2d 2d 2d 20 20 48 61 6e  |.). -------  Han|
00001ae0  64 6c 65 20 6d 6f 75 73  65 20 63 6c 69 63 6b 20  |dle mouse click |
00001af0  2d 2d 2d 2d 2d 2d 2d 0d  08 de 17 dd 20 f2 68 61  |-------..... .ha|
00001b00  6e 64 6c 65 5f 63 6c 69  63 6b 28 41 25 29 0d 08  |ndle_click(A%)..|
00001b10  e8 10 20 20 c8 8e 20 41  25 21 31 32 20 ca 0d 08  |..  .. A%!12 ...|
00001b20  f2 24 20 20 20 20 c9 20  2d 32 3a 20 f4 20 20 63  |.$    . -2: .  c|
00001b30  6c 69 63 6b 65 64 20 6f  6e 20 69 63 6f 6e 20 62  |licked on icon b|
00001b40  61 72 0d 08 fc 1c 20 20  20 20 20 20 20 20 20 20  |ar....          |
00001b50  20 20 20 20 e7 20 41 25  21 38 3d 32 20 8c 0d 09  |    . A%!8=2 ...|
00001b60  06 45 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.E              |
00001b70  20 c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  | .. "Wimp_Create|
00001b80  4d 65 6e 75 22 2c 2c 6d  61 69 6e 5f 6d 65 6e 75  |Menu",,main_menu|
00001b90  25 2c 41 25 21 30 2d 39  38 2c 32 37 36 2b 34 34  |%,A%!0-98,276+44|
00001ba0  2b 34 34 0d 09 10 13 20  20 20 20 20 20 20 20 20  |+44....         |
00001bb0  20 20 20 20 20 cc 0d 09  1a 2d 20 20 20 20 20 20  |     ....-      |
00001bc0  20 20 20 20 20 20 20 20  20 20 f2 6f 70 65 6e 5f  |          .open_|
00001bd0  77 69 6e 64 6f 77 28 6d  61 69 6e 77 5f 68 61 6e  |window(mainw_han|
00001be0  64 25 29 0d 09 24 13 20  20 20 20 20 20 20 20 20  |d%)..$.         |
00001bf0  20 20 20 20 20 cd 0d 09  2e 24 20 20 20 20 c9 20  |     ....$    . |
00001c00  69 6e 66 6f 5f 68 61 6e  64 25 20 3a 20 f4 20 64  |info_hand% : . d|
00001c10  6f 20 6e 6f 74 68 69 6e  67 21 0d 09 38 29 20 20  |o nothing!..8)  |
00001c20  20 20 c9 20 6d 61 69 6e  77 5f 68 61 6e 64 25 20  |  . mainw_hand% |
00001c30  3a 20 f2 68 61 6e 64 6c  65 5f 6d 61 69 6e 77 28  |: .handle_mainw(|
00001c40  41 25 29 0d 09 42 2f 20  20 20 20 20 20 20 20 20  |A%)..B/         |
00001c50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 f2 70  |              .p|
00001c60  75 74 5f 63 61 72 65 74  5f 69 6e 5f 77 69 6e 64  |ut_caret_in_wind|
00001c70  6f 77 0d 09 4c 07 20 20  cb 0d 09 56 05 e1 0d 09  |ow..L.  ...V....|
00001c80  60 04 0d 09 6a 1a dd 20  f2 70 75 74 5f 63 61 72  |`...j.. .put_car|
00001c90  65 74 5f 69 6e 5f 77 69  6e 64 6f 77 0d 09 74 35  |et_in_window..t5|
00001ca0  c8 99 20 22 57 69 6d 70  5f 53 65 74 43 61 72 65  |.. "Wimp_SetCare|
00001cb0  74 50 6f 73 69 74 69 6f  6e 22 2c 6d 61 69 6e 77  |tPosition",mainw|
00001cc0  5f 68 61 6e 64 25 2c 2d  31 2c 30 2c 30 2c 30 2c  |_hand%,-1,0,0,0,|
00001cd0  30 0d 09 7e 05 e1 0d 09  88 04 0d 09 92 29 f4 20  |0..~.........). |
00001ce0  2d 2d 2d 2d 2d 2d 2d 2d  20 50 52 4f 43 68 61 6e  |-------- PROChan|
00001cf0  64 6c 65 5f 6d 61 69 6e  77 20 2d 2d 2d 2d 2d 2d  |dle_mainw ------|
00001d00  2d 2d 2d 0d 09 9c 17 dd  20 f2 68 61 6e 64 6c 65  |---..... .handle|
00001d10  5f 6d 61 69 6e 77 28 41  25 29 0d 09 a6 08 ea 20  |_mainw(A%)..... |
00001d20  73 25 0d 09 b0 0f 20 e7  20 41 25 21 38 3d 32 20  |s%.... . A%!8=2 |
00001d30  8c 0d 09 ba 20 20 20 e7  20 41 25 21 31 36 3d 32  |....   . A%!16=2|
00001d40  20 8c 20 f2 72 65 6d 6f  76 65 5f 66 69 6e 67 65  | . .remove_finge|
00001d50  72 0d 09 c4 36 20 20 c8  99 20 22 57 69 6d 70 5f  |r...6  .. "Wimp_|
00001d60  43 72 65 61 74 65 4d 65  6e 75 22 2c 2c 6d 61 69  |CreateMenu",,mai|
00001d70  6e 5f 6d 65 6e 75 25 2c  41 25 21 30 2d 39 30 2c  |n_menu%,A%!0-90,|
00001d80  41 25 21 34 2b 33 32 0d  09 ce 06 20 cc 0d 09 d8  |A%!4+32.... ....|
00001d90  10 20 20 c8 8e 20 41 25  21 31 36 20 ca 0d 09 e2  |.  .. A%!16 ....|
00001da0  2a 20 20 20 c9 20 32 20  3a 20 20 20 e7 20 70 6c  |*   . 2 :   . pl|
00001db0  61 79 65 72 5f 74 79 70  65 25 28 70 6c 61 79 65  |ayer_type%(playe|
00001dc0  72 25 29 3d 32 20 8c 0d  09 ec 33 20 20 20 20 20  |r%)=2 ....3     |
00001dd0  20 20 20 20 20 20 20 20  20 20 20 c8 99 20 22 57  |           .. "W|
00001de0  69 6d 70 5f 47 65 74 50  6f 69 6e 74 65 72 49 6e  |imp_GetPointerIn|
00001df0  66 6f 22 2c 2c 74 65 6d  70 25 0d 09 f6 30 20 20  |fo",,temp%...0  |
00001e00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 f2 69  |              .i|
00001e10  6e 73 65 72 74 5f 70 69  65 63 65 28 66 69 6e 67  |nsert_piece(fing|
00001e20  65 72 5f 70 6f 73 25 2b  31 29 0d 0a 00 1a 20 20  |er_pos%+1)....  |
00001e30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 2a 46  |              *F|
00001e40  58 20 31 35 0d 0a 0a 13  20 20 20 20 20 20 20 20  |X 15....        |
00001e50  20 20 20 20 20 20 cd 0d  0a 14 1d 20 20 20 c9 20  |      .....   . |
00001e60  33 20 3a 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |3 :   .set_icon(|
00001e70  33 2c 31 29 0d 0a 1e 20  20 20 20 20 20 20 20 20  |3,1)...         |
00001e80  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
00001e90  34 2c 30 29 0d 0a 28 23  20 20 20 20 20 20 20 20  |4,0)..(#        |
00001ea0  20 20 20 20 20 20 70 6c  61 79 65 72 5f 74 79 70  |      player_typ|
00001eb0  65 25 28 31 29 3d 31 0d  0a 32 1d 20 20 20 c9 20  |e%(1)=1..2.   . |
00001ec0  34 20 3a 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |4 :   .set_icon(|
00001ed0  34 2c 31 29 0d 0a 3c 20  20 20 20 20 20 20 20 20  |4,1)..<         |
00001ee0  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
00001ef0  33 2c 30 29 0d 0a 46 23  20 20 20 20 20 20 20 20  |3,0)..F#        |
00001f00  20 20 20 20 20 20 70 6c  61 79 65 72 5f 74 79 70  |      player_typ|
00001f10  65 25 28 31 29 3d 32 0d  0a 50 1d 20 20 20 c9 20  |e%(1)=2..P.   . |
00001f20  36 20 3a 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |6 :   .set_icon(|
00001f30  36 2c 31 29 0d 0a 5a 20  20 20 20 20 20 20 20 20  |6,1)..Z         |
00001f40  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
00001f50  37 2c 30 29 0d 0a 64 23  20 20 20 20 20 20 20 20  |7,0)..d#        |
00001f60  20 20 20 20 20 20 70 6c  61 79 65 72 5f 74 79 70  |      player_typ|
00001f70  65 25 28 32 29 3d 31 0d  0a 6e 1d 20 20 20 c9 20  |e%(2)=1..n.   . |
00001f80  37 20 3a 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |7 :   .set_icon(|
00001f90  37 2c 31 29 0d 0a 78 20  20 20 20 20 20 20 20 20  |7,1)..x         |
00001fa0  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
00001fb0  36 2c 30 29 0d 0a 82 23  20 20 20 20 20 20 20 20  |6,0)...#        |
00001fc0  20 20 20 20 20 20 70 6c  61 79 65 72 5f 74 79 70  |      player_typ|
00001fd0  65 25 28 32 29 3d 32 0d  0a 8c 1d 20 20 20 c9 20  |e%(2)=2....   . |
00001fe0  39 20 3a 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |9 :   .set_icon(|
00001ff0  39 2c 30 29 0d 0a 96 32  20 20 20 20 20 20 20 20  |9,0)...2        |
00002000  20 20 20 20 20 20 e7 20  70 6c 61 79 65 72 25 20  |      . player% |
00002010  84 20 77 69 6e 6e 65 72  25 20 8c 20 f2 75 6e 64  |. winner% . .und|
00002020  6f 5f 6d 6f 76 65 0d 0a  a0 1e 20 20 20 c9 20 31  |o_move....   . 1|
00002030  31 3a 20 20 20 f2 73 65  74 5f 69 63 6f 6e 28 31  |1:   .set_icon(1|
00002040  31 2c 30 29 0d 0a aa 1b  20 20 20 20 20 20 20 20  |1,0)....        |
00002050  20 20 20 20 20 20 f2 4e  65 77 5f 47 61 6d 65 0d  |      .New_Game.|
00002060  0a b4 07 20 20 cb 0d 0a  be 06 20 cd 0d 0a c8 05  |...  ..... .....|
00002070  e1 0d 0a d2 04 0d 0a dc  20 f4 20 2d 2d 2d 2d 2d  |........ . -----|
00002080  2d 2d 2d 20 73 65 74 20  69 63 6f 6e 20 2d 2d 2d  |--- set icon ---|
00002090  2d 2d 2d 2d 2d 0d 0a e6  19 dd 20 f2 73 65 74 5f  |-----..... .set_|
000020a0  69 63 6f 6e 28 69 63 6f  6e 25 2c 61 25 29 0d 0a  |icon(icon%,a%)..|
000020b0  f0 18 74 65 6d 70 25 21  30 20 3d 6d 61 69 6e 77  |..temp%!0 =mainw|
000020c0  5f 68 61 6e 64 25 0d 0a  fa 12 74 65 6d 70 25 21  |_hand%....temp%!|
000020d0  34 20 3d 69 63 6f 6e 25  0d 0b 04 13 74 65 6d 70  |4 =icon%....temp|
000020e0  25 21 38 20 3d 61 25 3c  3c 32 31 0d 0b 0e 12 74  |%!8 =a%<<21....t|
000020f0  65 6d 70 25 21 31 32 3d  31 3c 3c 32 31 0d 0b 18  |emp%!12=1<<21...|
00002100  21 c8 99 20 22 57 69 6d  70 5f 53 65 74 49 63 6f  |!.. "Wimp_SetIco|
00002110  6e 53 74 61 74 65 22 2c  2c 74 65 6d 70 25 0d 0b  |nState",,temp%..|
00002120  22 05 e1 0d 0b 2c 04 0d  0b 36 2b f4 20 2d 2d 2d  |"....,...6+. ---|
00002130  2d 2d 2d 2d 2d 20 50 52  4f 43 6f 70 65 6e 5f 77  |----- PROCopen_w|
00002140  69 6e 64 6f 77 20 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |indow  ---------|
00002150  2d 2d 0d 0b 40 19 dd 20  f2 6f 70 65 6e 5f 77 69  |--..@.. .open_wi|
00002160  6e 64 6f 77 28 68 61 6e  64 25 29 0d 0b 4a 10 21  |ndow(hand%)..J.!|
00002170  74 65 6d 70 25 3d 68 61  6e 64 25 0d 0b 54 21 c8  |temp%=hand%..T!.|
00002180  99 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  |."Wimp_GetWindow|
00002190  49 6e 66 6f 22 2c 2c 74  65 6d 70 25 0d 0b 5e 0f  |Info",,temp%..^.|
000021a0  74 65 6d 70 25 21 32 38  3d 2d 31 0d 0b 68 1f c8  |temp%!28=-1..h..|
000021b0  99 20 22 57 69 6d 70 5f  4f 70 65 6e 57 69 6e 64  |. "Wimp_OpenWind|
000021c0  6f 77 22 2c 2c 74 65 6d  70 25 0d 0b 72 18 f2 70  |ow",,temp%..r..p|
000021d0  75 74 5f 63 61 72 65 74  5f 69 6e 5f 77 69 6e 64  |ut_caret_in_wind|
000021e0  6f 77 0d 0b 7c 05 e1 0d  0b 86 04 0d 0b 90 29 f4  |ow..|.........).|
000021f0  20 2d 2d 2d 2d 2d 2d 2d  2d 20 20 52 65 70 6f 72  | --------  Repor|
00002200  74 20 61 6e 20 65 72 72  6f 72 20 20 2d 2d 2d 2d  |t an error  ----|
00002210  2d 2d 2d 2d 0d 0b 9a 1b  dd 20 f2 72 65 70 6f 72  |----..... .repor|
00002220  74 5f 65 72 72 6f 72 28  65 72 72 6f 72 24 29 0d  |t_error(error$).|
00002230  0b a4 08 ea 20 52 31 0d  0b ae 0c 21 74 65 6d 70  |.... R1....!temp|
00002240  25 3d 9f 0d 0b b8 47 24  28 74 65 6d 70 25 2b 34  |%=....G$(temp%+4|
00002250  29 3d c0 65 72 72 6f 72  24 2b 22 43 61 6e 63 65  |)=.error$+"Cance|
00002260  6c 20 74 6f 20 71 75 69  74 20 70 72 6f 67 61 6d  |l to quit progam|
00002270  2c 20 4f 6b 20 74 6f 20  63 6f 6e 74 69 6e 75 65  |, Ok to continue|
00002280  2e 22 2c 32 34 30 29 2b  bd 30 0d 0b c2 05 f5 0d  |.",240)+.0......|
00002290  0b cc 3d c8 99 20 22 57  69 6d 70 5f 52 65 70 6f  |..=.. "Wimp_Repo|
000022a0  72 74 45 72 72 6f 72 22  2c 74 65 6d 70 25 2c 25  |rtError",temp%,%|
000022b0  30 30 30 30 31 31 31 2c  22 43 6f 6e 6e 65 63 74  |0000111,"Connect|
000022c0  20 46 6f 75 72 22 20 b8  20 2c 52 31 0d 0b d6 08  | Four" . ,R1....|
000022d0  fd 20 52 31 0d 0b e0 32  e7 20 52 31 3d 32 20 8c  |. R1...2. R1=2 .|
000022e0  20 c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 44  | .. "Wimp_CloseD|
000022f0  6f 77 6e 22 2c 6d 79 69  64 25 2c 26 34 42 35 33  |own",myid%,&4B53|
00002300  34 31 35 34 3a e0 0d 0b  ea 05 e1 0d 0b f4 04 0d  |4154:...........|
00002310  0b fe 2d dd 20 a4 63 68  65 63 6b 5f 69 66 5f 77  |..-. .check_if_w|
00002320  6f 6e 28 6d 79 5f 63 6f  75 6e 74 65 72 25 2c 63  |on(my_counter%,c|
00002330  6f 6c 25 2c 68 65 69 67  68 74 25 29 0d 0c 08 d3  |ol%,height%)....|
00002340  e7 20 a4 61 6c 6c 68 6f  72 28 6d 79 5f 63 6f 75  |. .allhor(my_cou|
00002350  6e 74 65 72 25 2c 63 6f  6c 25 2c 68 65 69 67 68  |nter%,col%,heigh|
00002360  74 25 29 3d 33 30 30 20  84 20 a4 76 65 72 74 28  |t%)=300 . .vert(|
00002370  31 2c 6d 79 5f 63 6f 75  6e 74 65 72 25 2c 63 6f  |1,my_counter%,co|
00002380  6c 25 2c 68 65 69 67 68  74 25 29 3d 33 30 30 20  |l%,height%)=300 |
00002390  84 20 20 a4 61 6c 6c 70  64 69 61 67 28 6d 79 5f  |.  .allpdiag(my_|
000023a0  63 6f 75 6e 74 65 72 25  2c 63 6f 6c 25 2c 68 65  |counter%,col%,he|
000023b0  69 67 68 74 25 29 3d 33  30 30 20 84 20 a4 61 6c  |ight%)=300 . .al|
000023c0  6c 6e 64 69 61 67 28 6d  79 5f 63 6f 75 6e 74 65  |lndiag(my_counte|
000023d0  72 25 2c 63 6f 6c 25 2c  68 65 69 67 68 74 25 29  |r%,col%,height%)|
000023e0  3d 33 30 30 20 8c 20 3d  32 5e 6d 79 5f 63 6f 75  |=300 . =2^my_cou|
000023f0  6e 74 65 72 25 20 8b 20  e7 20 67 6f 65 73 25 3d  |nter% . . goes%=|
00002400  36 34 20 8c 20 3d 25 31  31 30 20 8b 20 3d 30 0d  |64 . =%110 . =0.|
00002410  0c 12 05 3a 0d 0c 1c 1b  dd 20 a4 63 6f 6d 70 75  |...:..... .compu|
00002420  74 65 28 6d 79 5f 63 6f  75 6e 74 65 72 25 29 0d  |te(my_counter%).|
00002430  0c 26 2c ea 20 63 6f 6c  25 2c 68 65 69 67 68 74  |.&,. col%,height|
00002440  25 2c 63 6f 6c 5f 70 6f  69 6e 74 73 25 2c 6d 61  |%,col_points%,ma|
00002450  78 5f 70 25 2c 6d 61 78  5f 63 25 0d 0c 30 0d 6d  |x_p%,max_c%..0.m|
00002460  61 78 5f 70 25 3d 2d 32  0d 0c 3a 10 e3 20 63 6f  |ax_p%=-2..:.. co|
00002470  6c 25 3d 31 20 b8 20 38  0d 0c 44 1a 20 68 65 69  |l%=1 . 8..D. hei|
00002480  67 68 74 25 3d a4 68 65  69 67 68 74 28 63 6f 6c  |ght%=.height(col|
00002490  25 29 0d 0c 4e 12 20 e7  20 68 65 69 67 68 74 25  |%)..N. . height%|
000024a0  3c 39 20 8c 0d 0c 58 34  20 20 63 6f 6c 5f 70 6f  |<9 ...X4  col_po|
000024b0  69 6e 74 73 25 3d a4 65  78 61 6d 69 6e 65 28 6d  |ints%=.examine(m|
000024c0  79 5f 63 6f 75 6e 74 65  72 25 2c 63 6f 6c 25 2c  |y_counter%,col%,|
000024d0  68 65 69 67 68 74 25 29  0d 0c 62 1a 20 20 e7 20  |height%)..b.  . |
000024e0  63 6f 6c 5f 70 6f 69 6e  74 73 25 3e 3d 32 35 33  |col_points%>=253|
000024f0  20 8c 0d 0c 6c 2b 20 20  20 63 6f 6c 5f 70 6f 69  | ...l+   col_poi|
00002500  6e 74 73 25 3d 63 6f 6c  5f 70 6f 69 6e 74 73 25  |nts%=col_points%|
00002510  2a 32 20 3a f4 20 6d 75  73 74 20 67 6f 0d 0c 76  |*2 :. must go..v|
00002520  07 20 20 cc 0d 0c 80 40  20 20 20 e7 20 a4 73 68  |.  ....@   . .sh|
00002530  6f 75 6c 64 5f 67 6f 28  6d 79 5f 63 6f 75 6e 74  |ould_go(my_count|
00002540  65 72 25 2c 63 6f 6c 25  2c 68 65 69 67 68 74 25  |er%,col%,height%|
00002550  29 3d 30 20 8c 20 63 6f  6c 5f 70 6f 69 6e 74 73  |)=0 . col_points|
00002560  25 3d 2d 31 0d 0c 8a 07  20 20 cd 0d 0c 94 06 20  |%=-1....  ..... |
00002570  cc 0d 0c 9e 14 20 20 63  6f 6c 5f 70 6f 69 6e 74  |.....  col_point|
00002580  73 25 3d 2d 32 0d 0c a8  06 20 cd 0d 0c b2 1b 20  |s%=-2.... ..... |
00002590  e7 20 63 6f 6c 5f 70 6f  69 6e 74 73 25 3e 6d 61  |. col_points%>ma|
000025a0  78 5f 70 25 20 8c 0d 0c  bc 30 20 20 6d 61 78 5f  |x_p% ....0  max_|
000025b0  70 25 3d 63 6f 6c 5f 70  6f 69 6e 74 73 25 3a 67  |p%=col_points%:g|
000025c0  6f 5f 6c 69 73 74 3f 30  3d 63 6f 6c 25 3a 6d 61  |o_list?0=col%:ma|
000025d0  78 5f 63 25 3d 31 0d 0c  c6 06 20 cc 0d 0c d0 3a  |x_c%=1.... ....:|
000025e0  20 20 e7 20 63 6f 6c 5f  70 6f 69 6e 74 73 25 3d  |  . col_points%=|
000025f0  6d 61 78 5f 70 25 20 8c  20 67 6f 5f 6c 69 73 74  |max_p% . go_list|
00002600  3f 6d 61 78 5f 63 25 3d  63 6f 6c 25 3a 6d 61 78  |?max_c%=col%:max|
00002610  5f 63 25 2b 3d 31 0d 0c  da 06 20 cd 0d 0c e4 05  |_c%+=1.... .....|
00002620  ed 0d 0c ee 4d e7 20 67  6f 65 73 25 3d 31 20 80  |....M. goes%=1 .|
00002630  20 6d 61 78 5f 70 25 3d  30 20 80 20 6d 6f 76 65  | max_p%=0 . move|
00002640  73 5f 6c 69 73 74 3f 30  3e 32 20 80 20 6d 6f 76  |s_list?0>2 . mov|
00002650  65 73 5f 6c 69 73 74 3f  30 3c 36 20 8c 20 3d 6d  |es_list?0<6 . =m|
00002660  6f 76 65 73 5f 6c 69 73  74 3f 30 20 2b 31 0d 0c  |oves_list?0 +1..|
00002670  f8 19 e7 20 6d 61 78 5f  63 25 3d 30 20 8c 20 47  |... max_c%=0 . G|
00002680  44 4b 4b 4b 4b 47 53 0d  0d 02 34 e7 20 6d 61 78  |DKKKKGS...4. max|
00002690  5f 63 25 3d 31 20 8c 20  3d 67 6f 5f 6c 69 73 74  |_c%=1 . =go_list|
000026a0  3f 30 20 8b 20 3d 67 6f  5f 6c 69 73 74 3f 28 b3  |?0 . =go_list?(.|
000026b0  28 6d 61 78 5f 63 25 29  2d 31 29 0d 0d 0c 04 0d  |(max_c%)-1).....|
000026c0  0d 16 11 dd 20 a4 68 65  69 67 68 74 28 41 25 29  |.... .height(A%)|
000026d0  0d 0d 20 11 3d ba 28 66  6e 5f 68 65 69 67 68 74  |.. .=.(fn_height|
000026e0  29 0d 0d 2a 04 0d 0d 34  1a dd 20 a4 73 68 6f 75  |)..*...4.. .shou|
000026f0  6c 64 5f 67 6f 28 41 25  2c 42 25 2c 43 25 29 0d  |ld_go(A%,B%,C%).|
00002700  0d 3e 14 3d ba 28 66 6e  5f 73 68 6f 75 6c 64 5f  |.>.=.(fn_should_|
00002710  67 6f 29 0d 0d 48 04 0d  0d 52 18 dd 20 a4 65 78  |go)..H...R.. .ex|
00002720  61 6d 69 6e 65 28 41 25  2c 42 25 2c 43 25 29 0d  |amine(A%,B%,C%).|
00002730  0d 5c 12 3d ba 28 66 6e  5f 65 78 61 6d 69 6e 65  |.\.=.(fn_examine|
00002740  29 0d 0d 66 04 0d 0d 70  18 dd 20 a4 76 65 72 74  |)..f...p.. .vert|
00002750  28 41 25 2c 42 25 2c 43  25 2c 44 25 29 0d 0d 7a  |(A%,B%,C%,D%)..z|
00002760  0f 3d ba 28 66 6e 5f 76  65 72 74 29 0d 0d 84 04  |.=.(fn_vert)....|
00002770  0d 0d 8e 17 dd 20 a4 61  6c 6c 68 6f 72 28 41 25  |..... .allhor(A%|
00002780  2c 42 25 2c 43 25 29 0d  0d 98 11 3d ba 28 66 6e  |,B%,C%)....=.(fn|
00002790  5f 61 6c 6c 68 6f 72 29  0d 0d a2 04 0d 0d ac 16  |_allhor)........|
000027a0  dd 20 a4 68 6f 72 69 7a  28 41 25 2c 42 25 2c 43  |. .horiz(A%,B%,C|
000027b0  25 29 0d 0d b6 10 3d ba  28 66 6e 5f 68 6f 72 69  |%)....=.(fn_hori|
000027c0  7a 29 0d 0d c0 04 0d 0d  ca 19 dd 20 a4 61 6c 6c  |z)......... .all|
000027d0  70 64 69 61 67 28 41 25  2c 42 25 2c 43 25 29 0d  |pdiag(A%,B%,C%).|
000027e0  0d d4 13 3d ba 28 66 6e  5f 61 6c 6c 70 64 69 61  |...=.(fn_allpdia|
000027f0  67 29 0d 0d de 04 0d 0d  e8 19 dd 20 a4 70 64 69  |g)......... .pdi|
00002800  61 67 28 41 25 2c 42 25  2c 43 25 2c 44 25 29 0d  |ag(A%,B%,C%,D%).|
00002810  0d f2 10 3d ba 28 66 6e  5f 70 64 69 61 67 29 0d  |...=.(fn_pdiag).|
00002820  0d fc 04 0d 0e 06 19 dd  20 a4 61 6c 6c 6e 64 69  |........ .allndi|
00002830  61 67 28 41 25 2c 42 25  2c 43 25 29 0d 0e 10 13  |ag(A%,B%,C%)....|
00002840  3d ba 28 66 6e 5f 61 6c  6c 6e 64 69 61 67 29 0d  |=.(fn_allndiag).|
00002850  0e 1a 04 0d 0e 24 19 dd  20 a4 6e 64 69 61 67 28  |.....$.. .ndiag(|
00002860  41 25 2c 42 25 2c 43 25  2c 44 25 29 0d 0e 2e 10  |A%,B%,C%,D%)....|
00002870  3d ba 28 66 6e 5f 6e 64  69 61 67 29 0d 0e 38 04  |=.(fn_ndiag)..8.|
00002880  0d 0e 42 0f dd 20 f2 4e  65 77 5f 47 61 6d 65 0d  |..B.. .New_Game.|
00002890  0e 4c 10 f2 72 65 73 65  74 5f 62 6f 61 72 64 0d  |.L..reset_board.|
000028a0  0e 56 1d 70 6c 61 79 65  72 25 3d a4 74 6f 67 67  |.V.player%=.togg|
000028b0  6c 65 5f 70 6c 61 79 65  72 28 32 29 0d 0e 60 0d  |le_player(2)..`.|
000028c0  77 69 6e 6e 65 72 25 3d  30 0d 0e 6a 05 e1 0d 0e  |winner%=0..j....|
000028d0  74 04 0d 0e 7e 12 dd 20  f2 72 65 73 65 74 5f 62  |t...~.. .reset_b|
000028e0  6f 61 72 64 0d 0e 88 1e  f2 6d 61 6b 65 5f 73 6f  |oard.....make_so|
000028f0  75 6e 64 28 22 63 72 61  73 68 22 2c 26 31 37 30  |und("crash",&170|
00002900  30 29 0d 0e 92 2f f2 53  65 74 5f 4d 65 73 73 61  |0).../.Set_Messa|
00002910  67 65 28 22 43 4f 4e 4e  45 43 54 20 34 22 2c 22  |ge("CONNECT 4","|
00002920  a9 20 41 57 20 31 39 39  31 22 2c 22 22 2c 31 32  |. AW 1991","",12|
00002930  29 0d 0e 9c 16 f2 72 65  66 72 65 73 68 5f 62 6f  |).....refresh_bo|
00002940  61 72 64 28 2d 31 29 0d  0e a6 0b 67 6f 65 73 25  |ard(-1)....goes%|
00002950  3d 30 0d 0e b0 05 e1 0d  0e ba 04 0d 0e c4 18 dd  |=0..............|
00002960  20 f2 72 65 66 72 65 73  68 5f 62 6f 61 72 64 28  | .refresh_board(|
00002970  66 25 29 0d 0e ce 0b ea  20 6d 6f 72 65 25 0d 0e  |f%)..... more%..|
00002980  d8 18 74 65 6d 70 25 21  30 20 3d 6d 61 69 6e 77  |..temp%!0 =mainw|
00002990  5f 68 61 6e 64 25 0d 0e  e2 10 74 65 6d 70 25 21  |_hand%....temp%!|
000029a0  34 20 3d 2d 31 30 0d 0e  ec 11 74 65 6d 70 25 21  |4 =-10....temp%!|
000029b0  38 20 3d 2d 35 34 30 0d  0e f6 10 74 65 6d 70 25  |8 =-540....temp%|
000029c0  21 31 32 3d 35 32 38 0d  0f 00 0f 74 65 6d 70 25  |!12=528....temp%|
000029d0  21 31 36 3d 2d 34 0d 0f  0a 29 c8 99 20 22 57 69  |!16=-4...).. "Wi|
000029e0  6d 70 5f 55 70 64 61 74  65 57 69 6e 64 6f 77 22  |mp_UpdateWindow"|
000029f0  2c 2c 74 65 6d 70 25 20  b8 20 6d 6f 72 65 25 0d  |,,temp% . more%.|
00002a00  0f 14 0c c8 95 20 6d 6f  72 65 25 0d 0f 1e 1b 20  |..... more%.... |
00002a10  20 e7 20 66 25 20 8c 20  f2 62 6c 61 6e 6b 5f 73  | . f% . .blank_s|
00002a20  6c 6f 74 28 33 29 0d 0f  28 1a 20 20 f2 44 72 61  |lot(3)..(.  .Dra|
00002a30  77 5f 43 69 72 63 6c 65  73 28 74 65 6d 70 25 29  |w_Circles(temp%)|
00002a40  0d 0f 32 2b 20 20 c8 99  20 22 57 69 6d 70 5f 47  |..2+  .. "Wimp_G|
00002a50  65 74 52 65 63 74 61 6e  67 6c 65 22 2c 2c 74 65  |etRectangle",,te|
00002a60  6d 70 25 20 b8 20 6d 6f  72 65 25 0d 0f 3c 05 ce  |mp% . more%..<..|
00002a70  0d 0f 46 1b 20 20 e7 20  66 25 20 8c 20 f2 62 6c  |..F.  . f% . .bl|
00002a80  61 6e 6b 5f 73 6c 6f 74  28 30 29 0d 0f 50 05 e1  |ank_slot(0)..P..|
00002a90  0d 0f 5a 04 0d 0f 64 15  dd 20 f2 62 6c 61 6e 6b  |..Z...d.. .blank|
00002aa0  5f 73 6c 6f 74 28 41 25  29 0d 0f 6e 15 d6 20 70  |_slot(A%)..n.. p|
00002ab0  72 6f 63 5f 62 6c 61 6e  6b 5f 73 6c 6f 74 0d 0f  |roc_blank_slot..|
00002ac0  78 05 e1 0d 0f 82 04 0d  0f 8c 1c dd 20 f2 69 6e  |x........... .in|
00002ad0  73 65 72 74 5f 70 69 65  63 65 28 63 6f 6c 75 6d  |sert_piece(colum|
00002ae0  6e 25 29 0d 0f 96 13 ea  20 68 65 69 67 68 74 25  |n%)..... height%|
00002af0  2c 6d 6f 72 65 25 0d 0f  a0 1c 68 65 69 67 68 74  |,more%....height|
00002b00  25 3d a4 68 65 69 67 68  74 28 63 6f 6c 75 6d 6e  |%=.height(column|
00002b10  25 29 0d 0f aa 16 e7 20  68 65 69 67 68 74 25 3e  |%)..... height%>|
00002b20  38 20 8c 20 ef 37 3a e1  0d 0f b4 4b e7 20 28 28  |8 . .7:....K. ((|
00002b30  73 6d 6f 6f 74 68 5f 64  72 6f 70 25 3e 3e 70 6c  |smooth_drop%>>pl|
00002b40  61 79 65 72 25 29 20 80  20 31 29 20 8c 20 f2 73  |ayer%) . 1) . .s|
00002b50  6d 6f 6f 74 68 5f 64 72  6f 70 28 63 6f 6c 75 6d  |mooth_drop(colum|
00002b60  6e 25 2c 68 65 69 67 68  74 25 2c 70 6c 61 79 65  |n%,height%,playe|
00002b70  72 25 29 0d 0f be 25 73  6c 6f 74 25 3f 28 63 6f  |r%)...%slot%?(co|
00002b80  6c 75 6d 6e 25 2b 68 65  69 67 68 74 25 2a 39 29  |lumn%+height%*9)|
00002b90  3d 70 6c 61 79 65 72 25  0d 0f c8 12 f2 72 65 6d  |=player%.....rem|
00002ba0  6f 76 65 5f 66 69 6e 67  65 72 0d 0f d2 17 74 65  |ove_finger....te|
00002bb0  6d 70 25 21 30 3d 6d 61  69 6e 77 5f 68 61 6e 64  |mp%!0=mainw_hand|
00002bc0  25 0d 0f dc 1c 74 65 6d  70 25 21 34 20 3d 28 63  |%....temp%!4 =(c|
00002bd0  6f 6c 75 6d 6e 25 2a 36  38 29 2d 37 38 0d 0f e6  |olumn%*68)-78...|
00002be0  1f 74 65 6d 70 25 21 38  20 3d 2d 28 38 2d 68 65  |.temp%!8 =-(8-he|
00002bf0  69 67 68 74 25 29 2a 36  38 2d 36 34 0d 0f f0 1c  |ight%)*68-64....|
00002c00  74 65 6d 70 25 21 31 32  3d 28 63 6f 6c 75 6d 6e  |temp%!12=(column|
00002c10  25 2a 36 38 29 2d 31 38  0d 0f fa 1e 74 65 6d 70  |%*68)-18....temp|
00002c20  25 21 31 36 3d 2d 28 38  2d 68 65 69 67 68 74 25  |%!16=-(8-height%|
00002c30  29 2a 36 38 2d 34 0d 10  04 29 c8 99 20 22 57 69  |)*68-4...).. "Wi|
00002c40  6d 70 5f 55 70 64 61 74  65 57 69 6e 64 6f 77 22  |mp_UpdateWindow"|
00002c50  2c 2c 74 65 6d 70 25 20  b8 20 6d 6f 72 65 25 0d  |,,temp% . more%.|
00002c60  10 0e 0c c8 95 20 6d 6f  72 65 25 0d 10 18 1a 20  |..... more%.... |
00002c70  20 f2 44 72 61 77 5f 43  69 72 63 6c 65 73 28 74  | .Draw_Circles(t|
00002c80  65 6d 70 25 29 0d 10 22  2b 20 20 c8 99 20 22 57  |emp%).."+  .. "W|
00002c90  69 6d 70 5f 47 65 74 52  65 63 74 61 6e 67 6c 65  |imp_GetRectangle|
00002ca0  22 2c 2c 74 65 6d 70 25  20 b8 20 6d 6f 72 65 25  |",,temp% . more%|
00002cb0  0d 10 2c 05 ce 0d 10 36  04 0d 10 40 1c 6d 6f 76  |..,....6...@.mov|
00002cc0  65 73 5f 6c 69 73 74 3f  67 6f 65 73 25 3d 63 6f  |es_list?goes%=co|
00002cd0  6c 75 6d 6e 25 0d 10 4a  0c 67 6f 65 73 25 2b 3d  |lumn%..J.goes%+=|
00002ce0  31 0d 10 54 2f c8 8e 20  a4 63 68 65 63 6b 5f 69  |1..T/.. .check_i|
00002cf0  66 5f 77 6f 6e 28 70 6c  61 79 65 72 25 2c 63 6f  |f_won(player%,co|
00002d00  6c 75 6d 6e 25 2c 68 65  69 67 68 74 25 29 20 ca  |lumn%,height%) .|
00002d10  0d 10 5e 21 20 20 c9 20  30 20 20 20 20 3a 20 f4  |..^!  . 0    : .|
00002d20  20 6e 6f 62 6f 64 79 27  73 20 77 6f 6e 20 79 65  | nobody's won ye|
00002d30  74 0d 10 68 40 20 20 20  20 20 20 20 e7 20 70 6c  |t..h@       . pl|
00002d40  61 79 65 72 5f 74 79 70  65 25 28 70 6c 61 79 65  |ayer_type%(playe|
00002d50  72 25 29 3d 32 20 8c 20  f2 6d 61 6b 65 5f 73 6f  |r%)=2 . .make_so|
00002d60  75 6e 64 28 22 64 72 6f  70 22 2c 26 32 30 30 30  |und("drop",&2000|
00002d70  29 0d 10 72 2a 20 20 20  20 20 20 20 70 6c 61 79  |)..r*       play|
00002d80  65 72 25 3d a4 74 6f 67  67 6c 65 5f 70 6c 61 79  |er%=.toggle_play|
00002d90  65 72 28 70 6c 61 79 65  72 25 29 0d 10 7c 15 20  |er(player%)..|. |
00002da0  20 c9 20 25 31 31 30 20  3a 20 f4 20 64 72 61 77  | . %110 : . draw|
00002db0  0d 10 86 36 20 20 20 20  20 20 20 f2 53 65 74 5f  |...6       .Set_|
00002dc0  4d 65 73 73 61 67 65 28  22 54 68 65 20 67 61 6d  |Message("The gam|
00002dd0  65 22 2c 22 77 61 73 20  61 20 64 72 61 77 22 2c  |e","was a draw",|
00002de0  22 22 2c 31 32 29 0d 10  90 15 20 20 20 20 20 20  |"",12)....      |
00002df0  20 77 69 6e 6e 65 72 25  3d 2d 31 0d 10 9a 14 20  | winner%=-1.... |
00002e00  20 20 20 20 20 20 70 6c  61 79 65 72 25 3d 30 0d  |      player%=0.|
00002e10  10 a4 19 20 20 7f 20 3a  20 f4 20 53 6f 6d 65 62  |...  . : . Someb|
00002e20  6f 64 79 20 77 6f 6e 21  0d 10 ae 3d 20 20 20 20  |ody won!...=    |
00002e30  20 20 20 77 69 6e 6e 65  72 25 3d a4 68 69 67 68  |   winner%=.high|
00002e40  6c 69 67 68 74 5f 77 69  6e 6e 65 72 28 70 6c 61  |light_winner(pla|
00002e50  79 65 72 25 2c 63 6f 6c  75 6d 6e 25 2c 68 65 69  |yer%,column%,hei|
00002e60  67 68 74 25 29 0d 10 b8  5c 20 20 20 20 20 20 20  |ght%)...\       |
00002e70  e7 20 70 6c 61 79 65 72  5f 74 79 70 65 25 28 77  |. player_type%(w|
00002e80  69 6e 6e 65 72 25 29 3d  31 20 f2 6d 61 6b 65 5f  |inner%)=1 .make_|
00002e90  73 6f 75 6e 64 28 22 6c  61 75 67 68 22 2c 26 34  |sound("laugh",&4|
00002ea0  30 30 29 20 8b 20 f2 6d  61 6b 65 5f 73 6f 75 6e  |00) . .make_soun|
00002eb0  64 28 22 57 69 6e 6e 65  72 22 2c 26 31 30 30 30  |d("Winner",&1000|
00002ec0  29 0d 10 c2 4e 20 20 20  20 20 20 20 f2 53 65 74  |)...N       .Set|
00002ed0  5f 4d 65 73 73 61 67 65  28 22 50 6c 61 79 65 72  |_Message("Player|
00002ee0  20 22 2b c3 28 70 6c 61  79 65 72 25 29 2c 22 77  | "+.(player%),"w|
00002ef0  6f 6e 20 61 66 74 65 72  22 2c c3 28 67 6f 65 73  |on after",.(goes|
00002f00  25 29 2b 22 20 6d 6f 76  65 73 22 2c 31 32 29 0d  |%)+" moves",12).|
00002f10  10 cc 19 20 20 20 20 20  20 20 77 69 6e 5f 66 6c  |...       win_fl|
00002f20  61 73 68 25 3d 31 35 30  0d 10 d6 14 20 20 20 20  |ash%=150....    |
00002f30  20 20 20 70 6c 61 79 65  72 25 3d 30 0d 10 e0 05  |   player%=0....|
00002f40  cb 0d 10 ea 05 e1 0d 10  f4 04 0d 10 fe 19 dd 20  |............... |
00002f50  f2 44 72 61 77 5f 4d 61  69 6e 57 28 70 5f 62 6c  |.Draw_MainW(p_bl|
00002f60  6b 25 29 0d 11 08 16 ea  20 74 25 3a 74 25 3d 74  |k%)..... t%:t%=t|
00002f70  65 6d 70 25 2b 26 31 30  30 0d 11 12 25 f2 44 72  |emp%+&100...%.Dr|
00002f80  61 77 5f 4d 65 73 73 61  67 65 28 70 5f 62 6c 6b  |aw_Message(p_blk|
00002f90  25 21 34 2c 70 5f 62 6c  6b 25 21 31 36 29 0d 11  |%!4,p_blk%!16)..|
00002fa0  1c 46 c8 99 20 22 57 69  6d 70 5f 52 65 61 64 50  |.F.. "Wimp_ReadP|
00002fb0  69 78 54 72 61 6e 73 22  2c 26 32 30 30 2c 53 70  |ixTrans",&200,Sp|
00002fc0  72 69 74 65 53 70 61 63  65 25 2c 67 61 6d 65 5f  |riteSpace%,game_|
00002fd0  61 72 65 61 25 2c 2c 2c  2c 74 25 2b 30 30 2c 74  |area%,,,,t%+00,t|
00002fe0  25 2b 31 36 0d 11 26 57  c8 99 20 22 4f 53 5f 53  |%+16..&W.. "OS_S|
00002ff0  70 72 69 74 65 4f 70 22  2c 26 32 33 34 2c 53 70  |priteOp",&234,Sp|
00003000  72 69 74 65 53 70 61 63  65 25 2c 67 61 6d 65 5f  |riteSpace%,game_|
00003010  61 72 65 61 25 2c 70 5f  62 6c 6b 25 21 34 2b 31  |area%,p_blk%!4+1|
00003020  32 2c 70 5f 62 6c 6b 25  21 31 36 2d 36 35 32 2c  |2,p_blk%!16-652,|
00003030  26 38 2c 74 25 2c 74 25  2b 31 36 0d 11 30 19 f2  |&8,t%,t%+16..0..|
00003040  44 72 61 77 5f 43 69 72  63 6c 65 73 28 70 5f 62  |Draw_Circles(p_b|
00003050  6c 6b 25 29 0d 11 3a 05  e1 0d 11 44 04 0d 11 4e  |lk%)..:....D...N|
00003060  17 dd 20 f2 44 72 61 77  5f 43 69 72 63 6c 65 73  |.. .Draw_Circles|
00003070  28 41 25 29 0d 11 58 17  d6 20 70 72 6f 63 5f 64  |(A%)..X.. proc_d|
00003080  72 61 77 5f 63 69 72 63  6c 65 73 0d 11 62 05 e1  |raw_circles..b..|
00003090  0d 11 6c 04 0d 11 76 16  dd 20 f2 52 65 66 72 65  |..l...v.. .Refre|
000030a0  73 68 5f 4d 65 73 73 61  67 65 0d 11 80 0b ea 20  |sh_Message..... |
000030b0  6d 6f 72 65 25 0d 11 8a  17 74 65 6d 70 25 21 30  |more%....temp%!0|
000030c0  3d 6d 61 69 6e 77 5f 68  61 6e 64 25 0d 11 94 11  |=mainw_hand%....|
000030d0  74 65 6d 70 25 21 34 20  3d 20 35 38 34 0d 11 9e  |temp%!4 = 584...|
000030e0  11 74 65 6d 70 25 21 38  20 3d 20 2d 39 36 0d 11  |.temp%!8 = -96..|
000030f0  a8 15 74 65 6d 70 25 21  31 32 3d 20 35 38 34 2b  |..temp%!12= 584+|
00003100  31 38 32 0d 11 b2 15 74  65 6d 70 25 21 31 36 3d  |182....temp%!16=|
00003110  20 2d 39 36 2b 31 30 38  0d 11 bc 29 c8 99 20 22  | -96+108...).. "|
00003120  57 69 6d 70 5f 55 70 64  61 74 65 57 69 6e 64 6f  |Wimp_UpdateWindo|
00003130  77 22 2c 2c 74 65 6d 70  25 20 b8 20 6d 6f 72 65  |w",,temp% . more|
00003140  25 0d 11 c6 0c c8 95 20  6d 6f 72 65 25 0d 11 d0  |%...... more%...|
00003150  25 20 20 f2 44 72 61 77  5f 4d 65 73 73 61 67 65  |%  .Draw_Message|
00003160  28 74 65 6d 70 25 21 34  2c 74 65 6d 70 25 21 31  |(temp%!4,temp%!1|
00003170  36 29 0d 11 da 2b 20 20  c8 99 20 22 57 69 6d 70  |6)...+  .. "Wimp|
00003180  5f 47 65 74 52 65 63 74  61 6e 67 6c 65 22 2c 2c  |_GetRectangle",,|
00003190  74 65 6d 70 25 20 b8 20  6d 6f 72 65 25 0d 11 e4  |temp% . more%...|
000031a0  05 ce 0d 11 ee 05 e1 0d  11 f8 04 0d 12 02 24 dd  |..............$.|
000031b0  20 f2 44 72 61 77 5f 4d  65 73 73 61 67 65 28 73  | .Draw_Message(s|
000031c0  63 72 6e 5f 78 25 2c 73  63 72 6e 5f 79 25 29 0d  |crn_x%,scrn_y%).|
000031d0  12 0c 09 ea 20 6c 70 25  0d 12 16 19 c8 99 20 22  |.... lp%...... "|
000031e0  57 69 6d 70 5f 53 65 74  43 6f 6c 6f 75 72 22 2c  |Wimp_SetColour",|
000031f0  37 0d 12 20 29 c8 93 20  c8 90 20 73 63 72 6e 5f  |7.. ).. .. scrn_|
00003200  78 25 2b 36 32 30 2c 73  63 72 6e 5f 79 25 2d 39  |x%+620,scrn_y%-9|
00003210  32 2c 31 38 30 2c 2d 31  30 34 0d 12 2a 24 c8 99  |2,180,-104..*$..|
00003220  20 22 57 69 6d 70 5f 53  65 74 43 6f 6c 6f 75 72  | "Wimp_SetColour|
00003230  22 2c 6d 65 73 73 61 67  65 5f 63 6f 6c 25 0d 12  |",message_col%..|
00003240  34 0f e3 20 6c 70 25 3d  30 20 b8 20 32 0d 12 3e  |4.. lp%=0 . 2..>|
00003250  2f 20 ec 20 73 63 72 6e  5f 78 25 2b 36 32 30 2c  |/ . scrn_x%+620,|
00003260  73 63 72 6e 5f 79 25 2d  6d 65 73 73 61 67 65 5f  |scrn_y%-message_|
00003270  76 70 6f 73 25 2d 6c 70  25 2a 33 32 0d 12 48 4d  |vpos%-lp%*32..HM|
00003280  20 ec 20 73 63 72 6e 5f  78 25 2b 36 32 30 2b 28  | . scrn_x%+620+(|
00003290  28 31 38 30 2d a9 6d 65  73 73 61 67 65 24 28 6c  |(180-.message$(l|
000032a0  70 25 29 2a 31 36 29 20  81 20 32 29 2c 73 63 72  |p%)*16) . 2),scr|
000032b0  6e 5f 79 25 2d 6d 65 73  73 61 67 65 5f 76 70 6f  |n_y%-message_vpo|
000032c0  73 25 2d 6c 70 25 2a 33  32 0d 12 52 13 20 f1 6d  |s%-lp%*32..R. .m|
000032d0  65 73 73 61 67 65 24 28  6c 70 25 29 0d 12 5c 05  |essage$(lp%)..\.|
000032e0  ed 0d 12 66 05 e1 0d 12  70 04 0d 12 7a 23 dd 20  |...f....p...z#. |
000032f0  f2 53 65 74 5f 4d 65 73  73 61 67 65 28 6d 31 24  |.Set_Message(m1$|
00003300  2c 6d 32 24 2c 6d 33 24  2c 6d 63 25 29 0d 12 84  |,m2$,m3$,mc%)...|
00003310  0c ea 20 6c 70 25 2c 74  25 0d 12 8e 18 6d 65 73  |.. lp%,t%....mes|
00003320  73 61 67 65 24 28 30 29  3d c0 6d 31 24 2c 31 32  |sage$(0)=.m1$,12|
00003330  29 0d 12 98 18 6d 65 73  73 61 67 65 24 28 31 29  |)....message$(1)|
00003340  3d c0 6d 32 24 2c 31 32  29 0d 12 a2 18 6d 65 73  |=.m2$,12)....mes|
00003350  73 61 67 65 24 28 32 29  3d c0 6d 33 24 2c 31 32  |sage$(2)=.m3$,12|
00003360  29 0d 12 ac 08 74 25 3d  33 0d 12 b6 12 e3 6c 70  |)....t%=3.....lp|
00003370  25 3d 32 20 b8 20 30 20  88 2d 31 0d 12 c0 20 20  |%=2 . 0 .-1...  |
00003380  e7 20 6d 65 73 73 61 67  65 24 28 6c 70 25 29 3d  |. message$(lp%)=|
00003390  22 22 20 8c 20 74 25 3d  6c 70 25 0d 12 ca 05 ed  |"" . t%=lp%.....|
000033a0  0d 12 d4 28 6d 65 73 73  61 67 65 5f 76 70 6f 73  |...(message_vpos|
000033b0  25 3d 39 32 2b 28 28 31  30 34 2d 28 74 25 2a 33  |%=92+((104-(t%*3|
000033c0  32 29 29 20 81 20 32 29  0d 12 de 14 6d 65 73 73  |2)) . 2)....mess|
000033d0  61 67 65 5f 63 6f 6c 25  3d 6d 63 25 0d 12 e8 14  |age_col%=mc%....|
000033e0  f2 52 65 66 72 65 73 68  5f 4d 65 73 73 61 67 65  |.Refresh_Message|
000033f0  0d 12 f2 05 e1 0d 12 fc  04 0d 13 06 19 dd 20 a4  |.............. .|
00003400  74 6f 67 67 6c 65 5f 70  6c 61 79 65 72 28 70 6c  |toggle_player(pl|
00003410  25 29 0d 13 10 11 ea 20  43 25 2c 6e 65 77 25 2c  |%)..... C%,new%,|
00003420  6d 32 24 0d 13 1a 10 6e  65 77 25 3d 70 6c 25 20  |m2$....new%=pl% |
00003430  82 20 33 0d 13 24 1c e7  20 6e 65 77 25 3d 31 20  |. 3..$.. new%=1 |
00003440  8c 20 43 25 3d 31 35 20  8b 20 43 25 3d 31 31 0d  |. C%=15 . C%=11.|
00003450  13 2e 3a e7 20 70 6c 61  79 65 72 5f 74 79 70 65  |..:. player_type|
00003460  25 28 6e 65 77 25 29 3d  31 20 8c 20 6d 32 24 3d  |%(new%)=1 . m2$=|
00003470  22 70 6c 61 79 69 6e 67  22 20 8b 20 6d 32 24 3d  |"playing" . m2$=|
00003480  22 74 6f 20 70 6c 61 79  22 0d 13 38 2b f2 53 65  |"to play"..8+.Se|
00003490  74 5f 4d 65 73 73 61 67  65 28 22 50 6c 61 79 65  |t_Message("Playe|
000034a0  72 20 22 2b c3 6e 65 77  25 2c 6d 32 24 2c 22 22  |r "+.new%,m2$,""|
000034b0  2c 43 25 29 0d 13 42 09  3d 6e 65 77 25 0d 13 4c  |,C%)..B.=new%..L|
000034c0  04 0d 13 56 10 dd 20 f2  75 6e 64 6f 5f 6d 6f 76  |...V.. .undo_mov|
000034d0  65 0d 13 60 14 ea 20 63  25 2c 68 25 2c 66 6f 72  |e..`.. c%,h%,for|
000034e0  25 2c 6c 70 25 0d 13 6a  34 e7 20 70 6c 61 79 65  |%,lp%..j4. playe|
000034f0  72 5f 74 79 70 65 25 28  31 29 3d 31 20 80 20 70  |r_type%(1)=1 . p|
00003500  6c 61 79 65 72 5f 74 79  70 65 25 28 32 29 3d 31  |layer_type%(2)=1|
00003510  20 8c 20 66 6f 72 25 3d  b9 0d 13 74 05 f5 0d 13  | . for%=...t....|
00003520  7e 0f e7 20 67 6f 65 73  25 3e 30 20 8c 0d 13 88  |~.. goes%>0 ....|
00003530  0e 20 20 67 6f 65 73 25  2d 3d 31 0d 13 92 1e 20  |.  goes%-=1.... |
00003540  20 63 6f 6c 75 6d 6e 25  3d 67 6f 65 73 25 3f 6d  | column%=goes%?m|
00003550  6f 76 65 73 5f 6c 69 73  74 0d 13 9c 20 20 20 68  |oves_list...   h|
00003560  65 69 67 68 74 25 3d a4  68 65 69 67 68 74 28 63  |eight%=.height(c|
00003570  6f 6c 75 6d 6e 25 29 2d  31 0d 13 a6 21 20 20 73  |olumn%)-1...!  s|
00003580  6c 6f 74 25 3f 28 63 6f  6c 75 6d 6e 25 2b 68 65  |lot%?(column%+he|
00003590  69 67 68 74 25 2a 39 29  3d 33 0d 13 b0 19 20 20  |ight%*9)=3....  |
000035a0  74 65 6d 70 25 21 30 3d  6d 61 69 6e 77 5f 68 61  |temp%!0=mainw_ha|
000035b0  6e 64 25 0d 13 ba 21 20  20 74 65 6d 70 25 21 34  |nd%...!  temp%!4|
000035c0  20 3d 28 63 6f 6c 75 6d  6e 25 2a 36 38 29 2d 34  | =(column%*68)-4|
000035d0  38 2d 33 30 0d 13 c4 24  20 20 74 65 6d 70 25 21  |8-30...$  temp%!|
000035e0  38 20 3d 2d 28 38 2d 68  65 69 67 68 74 25 29 2a  |8 =-(8-height%)*|
000035f0  36 38 2d 33 34 2d 33 30  0d 13 ce 21 20 20 74 65  |68-34-30...!  te|
00003600  6d 70 25 21 31 32 3d 28  63 6f 6c 75 6d 6e 25 2a  |mp%!12=(column%*|
00003610  36 38 29 2d 34 38 2b 33  30 0d 13 d8 24 20 20 74  |68)-48+30...$  t|
00003620  65 6d 70 25 21 31 36 3d  2d 28 38 2d 68 65 69 67  |emp%!16=-(8-heig|
00003630  68 74 25 29 2a 36 38 2d  33 34 2b 33 30 0d 13 e2  |ht%)*68-34+30...|
00003640  2b 20 20 c8 99 20 22 57  69 6d 70 5f 55 70 64 61  |+  .. "Wimp_Upda|
00003650  74 65 57 69 6e 64 6f 77  22 2c 2c 74 65 6d 70 25  |teWindow",,temp%|
00003660  20 b8 20 6d 6f 72 65 25  0d 13 ec 0e 20 20 c8 95  | . more%....  ..|
00003670  20 6d 6f 72 65 25 0d 13  f6 1c 20 20 20 20 f2 44  | more%....    .D|
00003680  72 61 77 5f 43 69 72 63  6c 65 73 28 74 65 6d 70  |raw_Circles(temp|
00003690  25 29 0d 14 00 2d 20 20  20 20 c8 99 20 22 57 69  |%)...-    .. "Wi|
000036a0  6d 70 5f 47 65 74 52 65  63 74 61 6e 67 6c 65 22  |mp_GetRectangle"|
000036b0  2c 2c 74 65 6d 70 25 20  b8 20 6d 6f 72 65 25 0d  |,,temp% . more%.|
000036c0  14 0a 07 20 20 ce 0d 14  14 2b 20 20 70 6c 61 79  |...  ....+  play|
000036d0  65 72 25 3d a4 74 6f 67  67 6c 65 5f 70 6c 61 79  |er%=.toggle_play|
000036e0  65 72 28 32 2d 28 67 6f  65 73 25 20 80 20 31 29  |er(2-(goes% . 1)|
000036f0  29 0d 14 1e 11 20 20 e7  20 77 69 6e 6e 65 72 25  |)....  . winner%|
00003700  20 8c 0d 14 28 11 20 20  20 20 e3 63 25 3d 31 20  | ...(.    .c%=1 |
00003710  b8 20 38 0d 14 32 11 20  20 20 20 e3 68 25 3d 31  |. 8..2.    .h%=1|
00003720  20 b8 20 38 0d 14 3c 36  20 20 20 20 20 e7 20 73  | . 8..<6     . s|
00003730  6c 6f 74 25 3f 28 63 25  2b 68 25 2a 39 29 3d 34  |lot%?(c%+h%*9)=4|
00003740  20 8c 20 73 6c 6f 74 25  3f 28 63 25 2b 68 25 2a  | . slot%?(c%+h%*|
00003750  39 29 3d 77 69 6e 6e 65  72 25 0d 14 46 0c 20 20  |9)=winner%..F.  |
00003760  20 20 ed 20 68 25 0d 14  50 0c 20 20 20 20 ed 20  |  . h%..P.    . |
00003770  63 25 0d 14 5a 11 20 20  20 20 77 69 6e 6e 65 72  |c%..Z.    winner|
00003780  25 3d 30 0d 14 64 19 20  20 20 20 f2 72 65 66 72  |%=0..d.    .refr|
00003790  65 73 68 5f 62 6f 61 72  64 28 30 29 0d 14 6e 07  |esh_board(0)..n.|
000037a0  20 20 cd 0d 14 78 05 cc  0d 14 82 08 20 20 ef 37  |  ...x......  .7|
000037b0  0d 14 8c 05 cd 0d 14 96  2d fd 70 6c 61 79 65 72  |........-.player|
000037c0  5f 74 79 70 65 25 28 70  6c 61 79 65 72 25 29 3d  |_type%(player%)=|
000037d0  32 20 84 20 67 6f 65 73  25 3d 30 20 84 20 66 6f  |2 . goes%=0 . fo|
000037e0  72 25 0d 14 a0 05 e1 0d  14 aa 04 0d 14 b4 14 dd  |r%..............|
000037f0  20 f2 72 65 6d 6f 76 65  5f 66 69 6e 67 65 72 0d  | .remove_finger.|
00003800  14 be 0d ea 20 73 25 2c  72 6f 77 25 0d 14 c8 14  |.... s%,row%....|
00003810  72 6f 77 25 3d 66 69 6e  67 65 72 5f 70 6f 73 25  |row%=finger_pos%|
00003820  0d 14 d2 10 e7 20 72 6f  77 25 3c 30 20 8c 20 e1  |..... row%<0 . .|
00003830  0d 14 dc 16 21 74 65 6d  70 25 3d 6d 61 69 6e 77  |....!temp%=mainw|
00003840  5f 68 61 6e 64 25 0d 14  e6 23 c8 99 20 22 57 69  |_hand%...#.. "Wi|
00003850  6d 70 5f 47 65 74 57 69  6e 64 6f 77 53 74 61 74  |mp_GetWindowStat|
00003860  65 22 2c 2c 74 65 6d 70  25 0d 14 f0 54 c8 99 20  |e",,temp%...T.. |
00003870  22 4f 53 5f 53 70 72 69  74 65 4f 70 22 2c 26 31  |"OS_SpriteOp",&1|
00003880  32 32 2c 53 70 72 69 74  65 53 70 61 63 65 25 2c  |22,SpriteSpace%,|
00003890  22 63 6f 75 6e 74 65 72  4f 22 2c 28 74 65 6d 70  |"counterO",(temp|
000038a0  25 21 34 2b 31 36 2b 72  6f 77 25 2a 36 38 29 2c  |%!4+16+row%*68),|
000038b0  74 65 6d 70 25 21 31 36  2d 37 36 2c 30 0d 14 fa  |temp%!16-76,0...|
000038c0  12 66 69 6e 67 65 72 5f  70 6f 73 25 3d 2d 31 0d  |.finger_pos%=-1.|
000038d0  15 04 05 e1 0d 15 0e 04  0d 15 18 1f dd 20 a4 70  |............. .p|
000038e0  6c 6f 74 5f 66 69 6e 67  65 72 28 41 25 2c 6f 6c  |lot_finger(A%,ol|
000038f0  64 5f 72 6f 77 25 29 0d  15 22 0d ea 20 72 6f 77  |d_row%)..".. row|
00003900  25 2c 73 25 0d 15 2c 16  21 74 65 6d 70 25 3d 6d  |%,s%..,.!temp%=m|
00003910  61 69 6e 77 5f 68 61 6e  64 25 0d 15 36 23 c8 99  |ainw_hand%..6#..|
00003920  20 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  | "Wimp_GetWindow|
00003930  53 74 61 74 65 22 2c 2c  74 65 6d 70 25 0d 15 40  |State",,temp%..@|
00003940  1f 72 6f 77 25 3d 28 41  25 21 30 2d 74 65 6d 70  |.row%=(A%!0-temp|
00003950  25 21 34 2d 32 34 29 20  81 20 36 38 0d 15 4a 16  |%!4-24) . 68..J.|
00003960  e7 20 72 6f 77 25 3c 3e  6f 6c 64 5f 72 6f 77 25  |. row%<>old_row%|
00003970  20 8c 0d 15 54 14 20 20  f2 72 65 6d 6f 76 65 5f  | ...T.  .remove_|
00003980  66 69 6e 67 65 72 0d 15  5e 13 20 20 73 25 3d 74  |finger..^.  s%=t|
00003990  65 6d 70 25 2b 26 31 30  30 0d 15 68 53 20 20 c8  |emp%+&100..hS  .|
000039a0  99 20 22 57 69 6d 70 5f  52 65 61 64 50 69 78 54  |. "Wimp_ReadPixT|
000039b0  72 61 6e 73 22 2c 26 32  30 30 2c 53 70 72 69 74  |rans",&200,Sprit|
000039c0  65 53 70 61 63 65 25 2c  63 6f 75 6e 74 65 72 25  |eSpace%,counter%|
000039d0  21 28 28 70 6c 61 79 65  72 25 2b 34 29 2a 34 29  |!((player%+4)*4)|
000039e0  2c 2c 2c 2c 73 25 2c 73  25 2b 31 36 0d 15 72 80  |,,,,s%,s%+16..r.|
000039f0  20 20 c8 99 20 22 4f 53  5f 53 70 72 69 74 65 4f  |  .. "OS_SpriteO|
00003a00  70 22 2c 26 31 31 30 2c  53 70 72 69 74 65 53 70  |p",&110,SpriteSp|
00003a10  61 63 65 25 2c 22 63 6f  75 6e 74 65 72 4f 22 2c  |ace%,"counterO",|
00003a20  30 2c 28 74 65 6d 70 25  21 34 2b 31 36 2b 72 6f  |0,(temp%!4+16+ro|
00003a30  77 25 2a 36 38 29 2c 74  65 6d 70 25 21 31 36 2d  |w%*68),temp%!16-|
00003a40  37 36 2c 28 74 65 6d 70  25 21 34 2b 32 34 2b 72  |76,(temp%!4+24+r|
00003a50  6f 77 25 2a 36 38 29 2b  36 34 2c 74 65 6d 70 25  |ow%*68)+64,temp%|
00003a60  21 31 36 2d 35 36 2b 36  30 2b 31 32 0d 15 7c 6e  |!16-56+60+12..|n|
00003a70  20 20 c8 99 20 22 4f 53  5f 53 70 72 69 74 65 4f  |  .. "OS_SpriteO|
00003a80  70 22 2c 26 32 33 34 2c  53 70 72 69 74 65 53 70  |p",&234,SpriteSp|
00003a90  61 63 65 25 2c 63 6f 75  6e 74 65 72 25 21 28 28  |ace%,counter%!((|
00003aa0  70 6c 61 79 65 72 25 2b  34 29 2a 34 29 2c 28 74  |player%+4)*4),(t|
00003ab0  65 6d 70 25 21 34 2b 31  36 2b 72 6f 77 25 2a 36  |emp%!4+16+row%*6|
00003ac0  38 29 2c 74 65 6d 70 25  21 31 36 2d 37 36 2c 26  |8),temp%!16-76,&|
00003ad0  38 2c 73 25 2c 73 25 2b  31 36 0d 15 86 05 cd 0d  |8,s%,s%+16......|
00003ae0  15 90 09 3d 72 6f 77 25  0d 15 9a 04 0d 15 a4 22  |...=row%......."|
00003af0  dd 20 a4 68 69 67 68 6c  69 67 68 74 5f 77 69 6e  |. .highlight_win|
00003b00  6e 65 72 28 70 6c 25 2c  63 25 2c 68 25 29 0d 15  |ner(pl%,c%,h%)..|
00003b10  ae 1b ea 20 73 74 78 25  2c 73 74 79 25 2c 77 25  |... stx%,sty%,w%|
00003b20  2c 78 25 2c 79 25 2c 7a  25 0d 15 b8 31 77 25 3d  |,x%,y%,z%...1w%=|
00003b30  a4 61 6c 6c 68 6f 72 28  70 6c 25 2c 63 25 2c 68  |.allhor(pl%,c%,h|
00003b40  25 29 20 20 3a 78 25 3d  a4 76 65 72 74 28 31 2c  |%)  :x%=.vert(1,|
00003b50  70 6c 25 2c 63 25 2c 68  25 29 0d 15 c2 33 79 25  |pl%,c%,h%)...3y%|
00003b60  3d a4 61 6c 6c 70 64 69  61 67 28 70 6c 25 2c 63  |=.allpdiag(pl%,c|
00003b70  25 2c 68 25 29 3a 7a 25  3d a4 61 6c 6c 6e 64 69  |%,h%):z%=.allndi|
00003b80  61 67 28 70 6c 25 2c 63  25 2c 68 25 29 0d 15 cc  |ag(pl%,c%,h%)...|
00003b90  0e e7 20 77 25 3d 33 30  30 20 8c 0d 15 d6 0e 20  |.. w%=300 ..... |
00003ba0  20 20 73 74 78 25 3d 63  25 0d 15 e0 46 20 20 20  |  stx%=c%...F   |
00003bb0  c8 95 20 73 74 78 25 3e  30 20 80 20 73 6c 6f 74  |.. stx%>0 . slot|
00003bc0  25 3f 28 73 74 78 25 2b  68 25 2a 39 29 3d 70 6c  |%?(stx%+h%*9)=pl|
00003bd0  25 3a 73 6c 6f 74 25 3f  28 73 74 78 25 2b 68 25  |%:slot%?(stx%+h%|
00003be0  2a 39 29 3d 34 3a 73 74  78 25 2d 3d 31 3a ce 0d  |*9)=4:stx%-=1:..|
00003bf0  15 ea 10 20 20 20 73 74  78 25 3d 63 25 2b 31 0d  |...   stx%=c%+1.|
00003c00  15 f4 46 20 20 20 c8 95  20 73 74 78 25 3c 39 20  |..F   .. stx%<9 |
00003c10  80 20 73 6c 6f 74 25 3f  28 73 74 78 25 2b 68 25  |. slot%?(stx%+h%|
00003c20  2a 39 29 3d 70 6c 25 3a  73 6c 6f 74 25 3f 28 73  |*9)=pl%:slot%?(s|
00003c30  74 78 25 2b 68 25 2a 39  29 3d 34 3a 73 74 78 25  |tx%+h%*9)=4:stx%|
00003c40  2b 3d 31 3a ce 0d 15 fe  05 cd 0d 16 08 0e e7 20  |+=1:........... |
00003c50  78 25 3d 33 30 30 20 8c  0d 16 12 0e 20 20 20 73  |x%=300 .....   s|
00003c60  74 79 25 3d 68 25 0d 16  1c 40 20 20 20 c8 95 20  |ty%=h%...@   .. |
00003c70  73 74 79 25 3e 30 20 80  20 28 73 6c 6f 74 25 3f  |sty%>0 . (slot%?|
00003c80  28 63 25 2b 73 74 79 25  2a 39 29 3d 70 6c 25 20  |(c%+sty%*9)=pl% |
00003c90  84 20 73 6c 6f 74 25 3f  28 63 25 2b 73 74 79 25  |. slot%?(c%+sty%|
00003ca0  2a 39 29 3d 34 29 0d 16  26 24 20 20 20 20 20 73  |*9)=4)..&$     s|
00003cb0  6c 6f 74 25 3f 28 63 25  2b 73 74 79 25 2a 39 29  |lot%?(c%+sty%*9)|
00003cc0  3d 34 3a 73 74 79 25 2d  3d 31 0d 16 30 08 20 20  |=4:sty%-=1..0.  |
00003cd0  20 ce 0d 16 3a 10 20 20  20 73 74 79 25 3d 68 25  | ...:.   sty%=h%|
00003ce0  2b 31 0d 16 44 40 20 20  20 c8 95 20 73 74 79 25  |+1..D@   .. sty%|
00003cf0  3c 39 20 80 20 28 73 6c  6f 74 25 3f 28 63 25 2b  |<9 . (slot%?(c%+|
00003d00  73 74 79 25 2a 39 29 3d  70 6c 25 20 84 20 73 6c  |sty%*9)=pl% . sl|
00003d10  6f 74 25 3f 28 63 25 2b  73 74 79 25 2a 39 29 3d  |ot%?(c%+sty%*9)=|
00003d20  34 29 0d 16 4e 24 20 20  20 20 20 73 6c 6f 74 25  |4)..N$     slot%|
00003d30  3f 28 63 25 2b 73 74 79  25 2a 39 29 3d 34 3a 73  |?(c%+sty%*9)=4:s|
00003d40  74 79 25 2b 3d 31 0d 16  58 08 20 20 20 ce 0d 16  |ty%+=1..X.   ...|
00003d50  62 05 cd 0d 16 6c 0e e7  20 79 25 3d 33 30 30 20  |b....l.. y%=300 |
00003d60  8c 0d 16 76 15 20 20 73  74 78 25 3d 63 25 3a 73  |...v.  stx%=c%:s|
00003d70  74 79 25 3d 68 25 0d 16  80 4c 20 20 c8 95 20 73  |ty%=h%...L  .. s|
00003d80  74 79 25 3e 30 20 80 20  73 74 78 25 3e 30 20 80  |ty%>0 . stx%>0 .|
00003d90  20 28 73 6c 6f 74 25 3f  28 73 74 78 25 2b 73 74  | (slot%?(stx%+st|
00003da0  79 25 2a 39 29 3d 70 6c  25 20 84 20 73 6c 6f 74  |y%*9)=pl% . slot|
00003db0  25 3f 28 73 74 78 25 2b  73 74 79 25 2a 39 29 3d  |%?(stx%+sty%*9)=|
00003dc0  34 29 0d 16 8a 2d 20 20  20 20 73 6c 6f 74 25 3f  |4)...-    slot%?|
00003dd0  28 73 74 78 25 2b 73 74  79 25 2a 39 29 3d 34 3a  |(stx%+sty%*9)=4:|
00003de0  73 74 78 25 2d 3d 31 3a  73 74 79 25 2d 3d 31 0d  |stx%-=1:sty%-=1.|
00003df0  16 94 07 20 20 ce 0d 16  9e 19 20 20 73 74 78 25  |...  .....  stx%|
00003e00  3d 63 25 2b 31 3a 73 74  79 25 3d 68 25 2b 31 0d  |=c%+1:sty%=h%+1.|
00003e10  16 a8 4c 20 20 c8 95 20  73 74 79 25 3c 39 20 80  |..L  .. sty%<9 .|
00003e20  20 73 74 78 25 3c 39 20  80 20 28 73 6c 6f 74 25  | stx%<9 . (slot%|
00003e30  3f 28 73 74 78 25 2b 73  74 79 25 2a 39 29 3d 70  |?(stx%+sty%*9)=p|
00003e40  6c 25 20 84 20 73 6c 6f  74 25 3f 28 73 74 78 25  |l% . slot%?(stx%|
00003e50  2b 73 74 79 25 2a 39 29  3d 34 29 0d 16 b2 2d 20  |+sty%*9)=4)...- |
00003e60  20 20 20 73 6c 6f 74 25  3f 28 73 74 78 25 2b 73  |   slot%?(stx%+s|
00003e70  74 79 25 2a 39 29 3d 34  3a 73 74 78 25 2b 3d 31  |ty%*9)=4:stx%+=1|
00003e80  3a 73 74 79 25 2b 3d 31  0d 16 bc 07 20 20 ce 0d  |:sty%+=1....  ..|
00003e90  16 c6 05 cd 0d 16 d0 0e  e7 20 7a 25 3d 33 30 30  |......... z%=300|
00003ea0  20 8c 0d 16 da 15 20 20  73 74 78 25 3d 63 25 3a  | .....  stx%=c%:|
00003eb0  73 74 79 25 3d 68 25 0d  16 e4 4c 20 20 c8 95 20  |sty%=h%...L  .. |
00003ec0  73 74 78 25 3e 30 20 80  20 73 74 79 25 3c 39 20  |stx%>0 . sty%<9 |
00003ed0  80 20 28 73 6c 6f 74 25  3f 28 73 74 78 25 2b 73  |. (slot%?(stx%+s|
00003ee0  74 79 25 2a 39 29 3d 70  6c 25 20 84 20 73 6c 6f  |ty%*9)=pl% . slo|
00003ef0  74 25 3f 28 73 74 78 25  2b 73 74 79 25 2a 39 29  |t%?(stx%+sty%*9)|
00003f00  3d 34 29 0d 16 ee 2d 20  20 20 20 73 6c 6f 74 25  |=4)...-    slot%|
00003f10  3f 28 73 74 78 25 2b 73  74 79 25 2a 39 29 3d 34  |?(stx%+sty%*9)=4|
00003f20  3a 73 74 78 25 2d 3d 31  3a 73 74 79 25 2b 3d 31  |:stx%-=1:sty%+=1|
00003f30  0d 16 f8 07 20 20 ce 0d  17 02 19 20 20 73 74 78  |....  .....  stx|
00003f40  25 3d 63 25 2b 31 3a 73  74 79 25 3d 68 25 2d 31  |%=c%+1:sty%=h%-1|
00003f50  0d 17 0c 4c 20 20 c8 95  20 73 74 78 25 3c 39 20  |...L  .. stx%<9 |
00003f60  80 20 73 74 79 25 3e 30  20 80 20 28 73 6c 6f 74  |. sty%>0 . (slot|
00003f70  25 3f 28 73 74 78 25 2b  73 74 79 25 2a 39 29 3d  |%?(stx%+sty%*9)=|
00003f80  70 6c 25 20 84 20 73 6c  6f 74 25 3f 28 73 74 78  |pl% . slot%?(stx|
00003f90  25 2b 73 74 79 25 2a 39  29 3d 34 29 0d 17 16 2d  |%+sty%*9)=4)...-|
00003fa0  20 20 20 20 73 6c 6f 74  25 3f 28 73 74 78 25 2b  |    slot%?(stx%+|
00003fb0  73 74 79 25 2a 39 29 3d  34 3a 73 74 78 25 2b 3d  |sty%*9)=4:stx%+=|
00003fc0  31 3a 73 74 79 25 2d 3d  31 0d 17 20 07 20 20 ce  |1:sty%-=1.. .  .|
00003fd0  0d 17 2a 05 cd 0d 17 34  4a c8 99 20 22 4f 53 5f  |..*....4J.. "OS_|
00003fe0  53 70 72 69 74 65 4f 70  22 2c 26 31 31 38 2c 53  |SpriteOp",&118,S|
00003ff0  70 72 69 74 65 53 70 61  63 65 25 2c 22 77 69 6e  |priteSpace%,"win|
00004000  5f 63 6f 75 6e 74 22 2b  c3 70 6c 25 20 b8 20 2c  |_count"+.pl% . ,|
00004010  2c 63 6f 75 6e 74 65 72  25 21 28 34 2a 34 29 0d  |,counter%!(4*4).|
00004020  17 3e 15 f2 72 65 66 72  65 73 68 5f 62 6f 61 72  |.>..refresh_boar|
00004030  64 28 30 29 0d 17 48 08  3d 70 6c 25 0d 17 52 04  |d(0)..H.=pl%..R.|
00004040  0d 17 5c 14 dd 20 a4 73  65 74 5f 73 6f 75 6e 64  |..\.. .set_sound|
00004050  28 73 25 29 0d 17 66 4b  e7 20 73 25 3d 30 20 8c  |(s%)..fK. s%=0 .|
00004060  20 24 53 6e 64 4d 65 6e  75 5f 73 74 72 25 3d 28  | $SndMenu_str%=(|
00004070  22 53 6f 75 6e 64 20 4f  6e 22 2b bd 30 29 20 8b  |"Sound On"+.0) .|
00004080  20 24 53 6e 64 4d 65 6e  75 5f 73 74 72 25 3d 28  | $SndMenu_str%=(|
00004090  22 53 6f 75 6e 64 20 4f  66 66 22 2b bd 30 29 0d  |"Sound Off"+.0).|
000040a0  17 70 07 3d 73 25 0d 17  7a 04 0d 17 84 1a dd 20  |.p.=s%..z...... |
000040b0  a4 73 65 74 5f 73 6d 6f  6f 74 68 5f 64 72 6f 70  |.set_smooth_drop|
000040c0  28 73 25 29 0d 17 8e 3c  21 53 44 53 75 62 4d 65  |(s%)...<!SDSubMe|
000040d0  6e 75 5f 74 69 63 6b 31  25 3d 28 21 53 44 53 75  |nu_tick1%=(!SDSu|
000040e0  62 4d 65 6e 75 5f 74 69  63 6b 31 25 20 80 20 ac  |bMenu_tick1% . .|
000040f0  31 29 20 84 20 28 73 25  3e 3e 31 29 20 80 20 31  |1) . (s%>>1) . 1|
00004100  0d 17 98 3c 21 53 44 53  75 62 4d 65 6e 75 5f 74  |...<!SDSubMenu_t|
00004110  69 63 6b 32 25 3d 28 21  53 44 53 75 62 4d 65 6e  |ick2%=(!SDSubMen|
00004120  75 5f 74 69 63 6b 32 25  20 80 20 ac 31 29 20 84  |u_tick2% . .1) .|
00004130  20 28 73 25 3e 3e 32 29  20 80 20 31 0d 17 a2 0a  | (s%>>2) . 1....|
00004140  e7 20 73 25 20 8c 0d 17  ac 2b 20 20 21 6d 61 69  |. s% ....+  !mai|
00004150  6e 5f 6d 65 6e 75 5f 74  69 63 6b 25 3d 21 6d 61  |n_menu_tick%=!ma|
00004160  69 6e 5f 6d 65 6e 75 5f  74 69 63 6b 25 20 84 20  |in_menu_tick% . |
00004170  31 0d 17 b6 05 cc 0d 17  c0 2c 20 20 21 6d 61 69  |1........,  !mai|
00004180  6e 5f 6d 65 6e 75 5f 74  69 63 6b 25 3d 21 6d 61  |n_menu_tick%=!ma|
00004190  69 6e 5f 6d 65 6e 75 5f  74 69 63 6b 25 20 80 20  |in_menu_tick% . |
000041a0  ac 31 0d 17 ca 05 cd 0d  17 d4 07 3d 73 25 0d 17  |.1.........=s%..|
000041b0  de 04 0d 17 e8 1d dd 20  f2 73 6d 6f 6f 74 68 5f  |....... .smooth_|
000041c0  64 72 6f 70 28 63 25 2c  68 25 2c 70 6c 25 29 0d  |drop(c%,h%,pl%).|
000041d0  17 f2 10 ea 20 6c 70 25  2c 20 6d 6f 72 65 25 0d  |.... lp%, more%.|
000041e0  17 fc 14 e3 20 6c 70 25  3d 38 20 b8 20 68 25 20  |.... lp%=8 . h% |
000041f0  88 2d 31 0d 18 06 19 20  73 6c 6f 74 25 3f 28 63  |.-1.... slot%?(c|
00004200  25 2b 6c 70 25 2a 39 29  3d 70 6c 25 0d 18 10 18  |%+lp%*9)=pl%....|
00004210  20 74 65 6d 70 25 21 30  3d 6d 61 69 6e 77 5f 68  | temp%!0=mainw_h|
00004220  61 6e 64 25 0d 18 1a 1a  20 74 65 6d 70 25 21 34  |and%.... temp%!4|
00004230  20 3d 28 63 25 2a 36 38  29 2d 28 37 38 29 0d 18  | =(c%*68)-(78)..|
00004240  24 1c 20 74 65 6d 70 25  21 38 20 3d 2d 28 38 2d  |$. temp%!8 =-(8-|
00004250  6c 70 25 29 2a 36 38 2d  35 38 0d 18 2e 18 20 74  |lp%)*68-58.... t|
00004260  65 6d 70 25 21 31 32 3d  28 63 25 2a 36 38 29 2d  |emp%!12=(c%*68)-|
00004270  31 38 0d 18 38 1c 20 74  65 6d 70 25 21 31 36 3d  |18..8. temp%!16=|
00004280  2d 28 38 2d 6c 70 25 29  2a 36 38 2b 36 32 0d 18  |-(8-lp%)*68+62..|
00004290  42 2a 20 c8 99 20 22 57  69 6d 70 5f 55 70 64 61  |B* .. "Wimp_Upda|
000042a0  74 65 57 69 6e 64 6f 77  22 2c 2c 74 65 6d 70 25  |teWindow",,temp%|
000042b0  20 b8 20 6d 6f 72 65 25  0d 18 4c 0d 20 c8 95 20  | . more%..L. .. |
000042c0  6d 6f 72 65 25 0d 18 56  1d 20 20 20 73 6c 6f 74  |more%..V.   slot|
000042d0  25 3f 28 63 25 2b 28 6c  70 25 2b 31 29 2a 39 29  |%?(c%+(lp%+1)*9)|
000042e0  3d 33 0d 18 60 1b 20 20  20 f2 44 72 61 77 5f 43  |=3..`.   .Draw_C|
000042f0  69 72 63 6c 65 73 28 74  65 6d 70 25 29 0d 18 6a  |ircles(temp%)..j|
00004300  2c 20 20 20 c8 99 20 22  57 69 6d 70 5f 47 65 74  |,   .. "Wimp_Get|
00004310  52 65 63 74 61 6e 67 6c  65 22 2c 2c 74 65 6d 70  |Rectangle",,temp|
00004320  25 20 b8 20 6d 6f 72 65  25 0d 18 74 06 20 ce 0d  |% . more%..t. ..|
00004330  18 7e 05 ed 0d 18 88 05  e1 0d 18 92 04 0d 18 9c  |.~..............|
00004340  18 dd 20 a4 66 69 78 5f  73 69 7a 65 28 41 24 2c  |.. .fix_size(A$,|
00004350  6c 65 6e 25 29 0d 18 b0  16 e7 20 a9 28 41 24 29  |len%)..... .(A$)|
00004360  3d 6c 65 6e 25 20 8c 20  3d 41 24 0d 18 ba 1d e7  |=len% . =A$.....|
00004370  20 a9 28 41 24 29 3e 6c  65 6e 25 20 8c 20 3d c0  | .(A$)>len% . =.|
00004380  41 24 2c 6c 65 6e 25 29  0d 18 c4 18 3d 41 24 2b  |A$,len%)....=A$+|
00004390  c4 6c 65 6e 25 2d a9 28  41 24 29 2c 22 20 22 29  |.len%-.(A$)," ")|
000043a0  0d 18 ce 04 0d 18 d8 2f  dd 20 f2 53 65 74 5f 41  |......./. .Set_A|
000043b0  64 72 28 f8 20 6f 25 2c  76 61 6c 25 29 3a 63 6f  |dr(. o%,val%):co|
000043c0  64 65 25 21 6f 25 3d 76  61 6c 25 3a 6f 25 2b 3d  |de%!o%=val%:o%+=|
000043d0  34 3a e1 0d 18 e2 2e dd  20 a4 47 65 74 5f 41 64  |4:...... .Get_Ad|
000043e0  72 28 f8 20 6f 25 29 3a  6f 25 2b 3d 34 3a 3d 63  |r(. o%):o%+=4:=c|
000043f0  6f 64 65 25 2b 63 6f 64  65 25 21 28 6f 25 2d 34  |ode%+code%!(o%-4|
00004400  29 0d 18 ec 38 dd 20 a4  66 69 6c 65 5f 73 69 7a  |)...8. .file_siz|
00004410  65 28 66 24 29 3a ea 20  73 25 3a c8 99 20 22 4f  |e(f$):. s%:.. "O|
00004420  53 5f 46 69 6c 65 22 2c  35 2c 66 24 20 b8 20 2c  |S_File",5,f$ . ,|
00004430  2c 2c 2c 73 25 3a 3d 73  25 0d 18 f6 04 0d 19 00  |,,,s%:=s%.......|
00004440  1a dd 20 f2 6d 61 6b 65  5f 73 6f 75 6e 64 28 73  |.. .make_sound(s|
00004450  24 2c 70 69 74 25 29 0d  19 0a 0b ea 20 6d 6f 72  |$,pit%)..... mor|
00004460  65 25 0d 19 14 10 e7 20  73 6f 75 6e 64 25 3d 30  |e%..... sound%=0|
00004470  20 e1 0d 19 1e 14 e7 20  6f 6c 64 5f 76 6f 69 63  | ...... old_voic|
00004480  65 25 3d 30 20 8c 0d 19  28 2d 20 c8 99 20 22 53  |e%=0 ...(- .. "S|
00004490  6f 75 6e 64 5f 41 74 74  61 63 68 56 6f 69 63 65  |ound_AttachVoice|
000044a0  22 2c 34 2c 30 20 b8 20  2c 6f 6c 64 5f 76 6f 69  |",4,0 . ,old_voi|
000044b0  63 65 25 0d 19 32 31 20  c8 99 20 22 53 6f 75 6e  |ce%..21 .. "Soun|
000044c0  64 5f 43 6f 6e 66 69 67  75 72 65 22 2c 34 2c 30  |d_Configure",4,0|
000044d0  2c 30 2c 30 2c 30 20 b8  20 6f 6c 64 5f 76 6f 69  |,0,0,0 . old_voi|
000044e0  63 65 73 25 0d 19 3c 05  cd 0d 19 46 35 f5 20 c8  |ces%..<....F5. .|
000044f0  99 20 22 53 6f 75 6e 64  5f 41 74 74 61 63 68 4e  |. "Sound_AttachN|
00004500  61 6d 65 64 56 6f 69 63  65 22 2c 34 2c 73 24 20  |amedVoice",4,s$ |
00004510  b8 20 6d 6f 72 65 25 3a  fd 6d 6f 72 65 25 0d 19  |. more%:.more%..|
00004520  50 15 d4 20 34 2c 26 31  37 46 2c 70 69 74 25 2c  |P.. 4,&17F,pit%,|
00004530  26 46 46 0d 19 5a 12 73  6f 75 6e 64 5f 63 74 72  |&FF..Z.sound_ctr|
00004540  25 3d 32 30 30 0d 19 64  05 e1 0d 19 6e 04 0d 19  |%=200..d....n...|
00004550  78 12 dd 20 f2 72 65 73  65 74 5f 73 6f 75 6e 64  |x.. .reset_sound|
00004560  0d 19 82 0b ea 20 6d 6f  72 65 25 0d 19 8c 2c c8  |..... more%...,.|
00004570  99 20 22 53 6f 75 6e 64  5f 43 6f 6e 66 69 67 75  |. "Sound_Configu|
00004580  72 65 22 2c 6f 6c 64 5f  76 6f 69 63 65 73 25 2c  |re",old_voices%,|
00004590  30 2c 30 2c 30 2c 30 0d  19 96 38 f5 20 c8 99 20  |0,0,0,0...8. .. |
000045a0  22 53 6f 75 6e 64 5f 41  74 74 61 63 68 56 6f 69  |"Sound_AttachVoi|
000045b0  63 65 22 2c 34 2c 6f 6c  64 5f 76 6f 69 63 65 25  |ce",4,old_voice%|
000045c0  20 b8 20 6d 6f 72 65 25  3a fd 6d 6f 72 65 25 0d  | . more%:.more%.|
000045d0  19 a0 10 6f 6c 64 5f 76  6f 69 63 65 25 3d 30 0d  |...old_voice%=0.|
000045e0  19 aa 05 e1 0d ff                                 |......|
000045e6