Home » Archimedes archive » Archimedes World » AW-1994-12-Disc2.adf » Disk2Dec94 » !AWDec94/Goodies/Bombscare/!BombScare/!RunImage2
!AWDec94/Goodies/Bombscare/!BombScare/!RunImage2
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-1994-12-Disc2.adf » Disk2Dec94 |
Filename: | !AWDec94/Goodies/Bombscare/!BombScare/!RunImage2 |
Read OK: | ✔ |
File size: | 13363 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM BombScare - <c> 1992 Andrew Clover 20REM Updated, 1994 LEN Archimedes World 1994 30REM Apologies for the pathetic programming in places here - 40REM I do much better stuff these days ;-) 50 60SYS "OS_Byte",129,0,255 TO ,kludge_os 70REM IF kludge_os>&A4 THEN 80 kludge_mode=15:kludge_modeofs=512 90REM ELSE 100REM kludge_mode=67:kludge_modeofs=512 110REM ENDIF 120 130kludge_pause=4 140 150DIM kludge_block 8 160!kludge_block=149 170kludge_block!4=-1 180SYS "OS_ReadVduVariables",kludge_block,kludge_block 190kludge_screen=!kludge_block 200: 210ON ERROR PROCuerror("Arrgh ! There's been a "+REPORT$+" at line "+STR$(ERL)+" !") 220DIM bspri% 257570+97584, bcode% 10000,L%-1, blevs% 13610, btext% 2000, bfont% 17160, bspau% 26940 230DIM bgraf% 204800, blevl% 900, bmess% 13610, bhtex% 240, bstar% 1610, btcol% 1030 240FOR lstar%=0TO1600STEP4 250bstar%!lstar%=kludge_screen-1+RND(81920-320*34) 260NEXT:fsave%=FALSE:SYS "OS_Byte",196,1,0 TO ,kdela%:SYS "OS_Byte",197,1,0 TO ,krepa%:OSCLI"FX11,25":*FX12,4 270: 280GCOL0TINT0 290: 300hfile%=OPENUP "<Obey$Dir>.Resources.Options" 310INPUT#hfile%,klist$ 320INPUT#hfile%,vmusx% 330INPUT#hfile%,veffx% 340CLOSE#hfile% 350flevs$=FNsysvar("BombScare$Levels") 360hfile%=OPENUP flevs$ 370IF hfile% THEN 380CLOSE#hfile% 390ELSE 400flevs$=FNsysvar("BombLevels$Dir")+".Default" 410hfile%=OPENUP flevs$ 420IF hfile% THEN 430CLOSE#hfile% 440ELSE 450flevs$=FNsysvar("Obey$Dir")+".Levels.Default" 460hfile%=OPENUP flevs$ 470IF hfile% THEN 480CLOSE#hfile% 490ELSE 500PROCuerror("I cannot find any levels to load.") 510ENDIF 520ENDIF 530ENDIF 540: 550frog=1 560SYS "BS_Initialise" TO handl% 570OSCLI "Load <Obey$Dir>.Resources.Scrolltext "+STR$~btext% 580SYS "BS_Encrypt",handl%,btext%,1971 590OSCLI "Load "+flevs$+" "+STR$~(blevs%):SYS "BS_Encrypt",handl%,blevs%+4,13596 600OSCLI "Load <Obey$Dir>.Resources.Graphics "+STR$~bspri% 610SYS "BS_Unpack",handl%,bspri%,bgraf%,131053 620OSCLI "Load <Obey$Dir>.Resources.PauseSpr "+STR$~bspri% 630SYS "BS_Unpack",handl%,bspri%,bspau%,17472 640OSCLI "Load <Obey$Dir>.Resources.Sprites "+STR$~(bspri%+241000) 650SYS "BS_Unpack",handl%,bspri%+241000,bspri%,113894 660OSCLI "Load <Obey$Dir>.Resources.HelpScroll "+STR$~bhtex% 670OSCLI "Load <Obey$Dir>.Resources.Font "+STR$~bfont% 680OSCLI "Load <Obey$Dir>.Resources.ColTable "+STR$~btcol% 690PROCassemblecode:SYS "OS_SpriteOp",256+15,bspri%,"SpriteOp60",0,320,304,13 700SYS "OS_SpriteOp",256+24,bspri%,"SpriteOp60" TO ,,asadr%:bgame!76=asadr%+44 710bgame!128=bgame!76+320-16:CALL efade 720ON ERROR IF FNserror=TRUE THEN PROCsave:PROCclosedown:END ELSE MODE 13:SYS "OS_RemoveCursors" 730: 740REM Menu/title screen 750: 760MODE 13:SYS "OS_RemoveCursors":PROCstarttune:SYS "Coco_SeqStart",0 770REPEAT 780CLS:bdata!28=btext%:bdata!12=4:bdata!24=btext% 790REPEAT 800SYS "OS_SpriteOp",34+256,bspri%,"logo",640-288*2,1024-42*4 810PROCprint(FNgetlnstr(blevs%+76,20),0,836) 820FOR lscor%=0TO4 830PROCprint(FNgetlnstr(blevs%+4+10*lscor%,10),0,736-lscor%*64) 840sscor$=STR$(blevs%!(54+lscor%*4)) 850PROCprint(sscor$,1280-LEN(sscor$)*64,736-lscor%*64) 860NEXT 870PROCprint("H-HELP,O-OPTS,E-EDIT",0,336) 880PROCprint("L-LOAD,P-PASS,Q-QUIT",0,272) 890PROCprint("PRESS RETURN TO PLAY",0,208) 900GCOL0,63 TINT 4:MOVE 0,33*4:DRAW 1280,33*4:*FX21,0 910REPEAT 920WAIT 930CALL edscr 940ckeyp$=FNcaps(INKEY$(0)) 950IF ckeyp$=CHR$128 THEN frog=1-frog:PROCfrog 960UNTIL ckeyp$="H" OR ckeyp$="O" OR ckeyp$="E" OR ckeyp$="L" OR ckeyp$="P" OR ckeyp$="Q" OR ckeyp$=CHR$13 970IF ckeyp$<>"Q" THEN A%=42:CALL efade 980CASE (ckeyp$) OF 990WHEN "H": PROChelp 1000WHEN "O": PROCoptions 1010WHEN "E": UNTIL TRUE:PROCeditor 1020WHEN "L": UNTIL TRUE:PROCload 1030WHEN "P": UNTIL TRUE:PROCgame(FNpassword) 1040WHEN "Q": UNTIL TRUE:UNTIL TRUE:CALL ecfad:PROCsave:PROCclosedown:END 1050WHEN CHR$13: UNTIL TRUE:PROCgame(1) 1060ENDCASE 1070UNTIL FALSE 1080: 1090REM Print instructions 1100: 1110DEFPROChelp 1120bdata!24=bhtex%:bdata!28=bhtex%:bdata!32=4:bdata!12=4 1130PROCprint("THE SILLY PLOT. ",0,1023) 1140PROCprint("IT IS 3456AD. EARTH ",0,878) 1150PROCprint("HAS BEEN TAKEN OVER ",0,814) 1160PROCprint("BY ALIENS. THE ONLY ",0,750) 1170PROCprint("HOPE IS E.R.F.F. THE",0,686) 1180PROCprint("EARTH REVOLUTIONARY ",0,622) 1190PROCprint("FREEDOM FIGHTERS. ",0,558) 1200PROCprint("BUT ALIENS HAVE PUT ",0,494) 1210PROCprint("BOMBS ALL OVER ERFF ",0,430) 1220PROCprint("HQ, AND IT IS YOUR ",0,366) 1230PROCprint("JOB TO REMOVE THEM. ",0,302) 1240PROCprint(" ANYKEY...",0,208) 1250REPEAT 1260WAIT:CALL edscr 1270UNTIL INKEY$(0)<>"" 1280A%=42:CALL efade 1290PROCprint("YOU ARE AN EXPERT ",0,1020) 1300PROCprint("BOMB DISPOSAL BLOKE ",0,956) 1310PROCprint("WHO CAN DISARM BOMBS",0,892) 1320PROCprint("BY TOUCHING THEM - ",0,828) 1330PROCprint("BUT FIRST, YOU MUST ",0,764) 1340PROCprint("GET TO THEM, THROUGH",0,700) 1350PROCprint("THE MAZE OF WALLS, ",0,636) 1360PROCprint("BLOCKS, MINES AND ",0,572) 1370PROCprint("TRANSPORTERS, ETC. ",0,508) 1380PROCprint("HOWEVER, MOST OF THE",0,444) 1390PROCprint("WALLS IN THE MAZE ",0,380) 1400PROCprint("CAN BE PUSHED ALONG,",0,316) 1410PROCprint(" ANYKEY...",0,208) 1420REPEAT 1430WAIT:CALL edscr 1440UNTIL INKEY$(0)<>"" 1450A%=42:CALL efade 1460PROCprint("TO MAKE NEW WAYS ",0,1020) 1470PROCprint("THROUGH THE MAZE. ",0,956) 1480PROCprint("BUT YOU CAN'T PUSH ",0,892) 1490PROCprint("A WALL INTO A SPACE ",0,828) 1500PROCprint("ALREADY OCCUPIED BY ",0,764) 1510PROCprint("ANOTHER WALL. ALSO, ",0,700) 1520PROCprint("SOME WALLS CAN'T BE ",0,636) 1530PROCprint("PUSHED AT ALL. SO, ",0,572) 1540PROCprint("GET ALL THE BOMBS TO",0,508) 1550PROCprint("COMPLETE THE LEVEL. ",0,444) 1560PROCprint("DON'T TOUCH MINES. ",0,380) 1570PROCprint("THEY KILL YOU. ",0,316) 1580PROCprint(" ANYKEY...",0,208) 1590REPEAT 1600WAIT:CALL edscr 1610UNTIL INKEY$(0)<>"" 1620A%=42:CALL efade 1630PROCprint("MINES KILL YOU, BUT ",0,1020) 1640PROCprint("YOU CAN DESTROY THEM",0,956) 1650PROCprint("BY PUSHING WALLS ",0,892) 1660PROCprint("THROUGH THEM. YOU ",0,828) 1670PROCprint("CAN'T WALK THROUGH ",0,764) 1680PROCprint("BLOCKS. YOU CAN ",0,700) 1690PROCprint("SEE WHAT THE THINGS ",0,636) 1700PROCprint("LOOK LIKE BELOW. ",0,572) 1710PROCprint("PLAY THE LEVELS TO ",0,508) 1720PROCprint("GET THE HANG OF IT. ",0,444) 1730PROCprint("HAVE FUN YOU FROODY ",0,380) 1740PROCprint("WOSSNAMES. ",0,316) 1750PROCprint(" ANYKEY...",0,208) 1760REPEAT 1770WAIT:CALL edscr 1780UNTIL INKEY$(0)<>"" 1790CALL efade 1800bdata!28=btext%:bdata!12=4:bdata!24=btext% 1810ENDPROC 1820: 1830DEFPROCwait(xleng%) 1840FOR xlwat%=1TO xleng% 1850WAIT:NEXT 1860ENDPROC 1870: 1880DEFPROCprint(xsprn$,xposx%,xposy%) 1890FOR xlprn%=0TO LEN(xsprn$)-1 1900A%=ASC(MID$(xsprn$,xlprn%+1,1)) 1910B%=xposx%/4+xlprn%*16 1920C%=(1020-xposy%)/4 1930CALL epsml 1940NEXT 1950ENDPROC 1960: 1970DEFPROCuerror(xperr$) 1980MODE 12 1990PRINT xperr$ 2000PRINT'"Press <RETURN> to re-run the program, or <SPACE> to quit." 2010REPEAT xcget$=GET$:UNTIL xcget$=" " OR xcget$=CHR$13 2020IF xcget$=" " THEN PROCclosedown:END 2030SYS "Coco_Reset":SYS "Coco_Stop" 2040RUN 2050: 2060DEFFNserror 2070MOUSE OFF 2080IF ERR=17 THEN =FALSE 2090MODE 12 2100PRINT "There's been an internal error : ";REPORT$;"." 2110PRINT "Press <RETURN> to return to the title screen, or <SPACE> to quit." 2120REPEAT xcget$=GET$:UNTIL xcget$=" " OR xcget$=CHR$13 2130IF xcget$=" " THEN =TRUE 2140=FALSE 2150: 2160DEFFNcaps(xchar$) 2170IF ASC(xchar$)>96 AND ASC(xchar$)<122 THEN =CHR$(ASC(xchar$)-32) ELSE =xchar$ 2180: 2190DEFFNsysvar(xfvar$) 2200SYS "OS_ReadVarVal",xfvar$,bmess%,bmess%+512 TO ,,pmess% 2210bmess%?pmess%=13 2220=$(bmess%) 2230: 2240DEFFNgetctstr(xbmes%) 2250xsred$="" 2260REPEAT 2270xsred$+=CHR$(?xbmes%) 2280xbmes%+=1 2290UNTIL ?xbmes%<32 OR LEN (xsred$)=255 2300=xsred$ 2310: 2320DEFFNgetlnstr(xbstr%,xlest%) 2330xsred$="":IF xlest%=0 THEN ="" 2340FOR xlstr%=xbstr%TO xbstr%+xlest%-1 2350xsred$+=CHR$(?xlstr%) 2360NEXT 2370=xsred$ 2380: 2390DEFPROCstarttune 2400SYS "Coco_Start" 2410SYS "Coco_Volume",255-vmusx% 2420ENDPROC 2430: 2440DEFPROCclosedown 2450ON ERROR REPORT:END 2460PROCfadeout 2470SYS "Coco_Stop" 2480MODE kludge_mode:SYS "OS_RemoveCursors" 2490SYS "OS_SpriteOp",256+34,bspri%,"Goodbye",213,168+kludge_modeofs,0 2500SYS "OS_Byte",196,kdela%,0 2510SYS "OS_Byte",197,krepa%,0 2520COLOUR 0 TINT 0 2530REPEAT MOUSE a,b,c:G$=INKEY$(1):UNTIL G$<>"" OR c<>0 2540ENDPROC 2550: 2560DEFPROCfadeout 2570FOR lfade%=255-vmusx% TO 200 STEP 2 2580SYS "Coco_Volume",lfade% 2590WAIT 2600NEXT 2610ENDPROC 2620: 2630DEFPROCfrog 2640PRINTTAB(0,0);"How much is that doggy in the window? The one with the waggly tail. How much is that doggy in the window? I do hope that doggy's for sale! " 2650PRINT" - John Major, 1992 " 2660ENDPROC 2670: 2680DEFPROCassemblecode 2690FORfpass%=%1000 TO %1010 STEP 2 2700P%=bcode% 2710[OPT fpass% 2720: 2730; Shutter fade routine 2740: 2750.efade 2760MOV R6,#4 2770ADR R12,bdata 2780LDR R7,[R12,#4] 2790CMP R0,#42 2800MOVEQ R0,#320 2810MOVEQ R1,#222 2820MULEQ R8,R0,R1 2830MOVNE R8,#(320*256) 2840.lfade 2850MOV R3,R7 2860MOV R4,R8 2870.lfadl 2880LDR R5,[R3] 2890MOV R5,R5,LSR #8 2900STR R5,[R3],#4 2910SUBS R4,R4,#4 2920BNE lfadl 2930SUBS R6,R6,#1 2940BNE lfade 2950MOV R8,#0 2960MOV PC,R14 2970: 2980; The following code prints a 16x16 character. 2990: 3000.epsml 3010SUB R0,R0,#32 3020MOVMI PC,R14 3030ADR R12,bdata 3040LDR R3,[R12,#0] 3050MOV R4,#256 3060MLA R11,R0,R4,R3 3070MOV R4,#320 3080LDR R3,[R12,#4] 3090MLA R10,R2,R4,R1 3100ADD R10,R10,R3 3110MOV R9,#8 3120.lpsml 3130LDMIA R11!,{R0-R7} 3140STMIA R10,{R0-R3} 3150ADD R10,R10,#320 3160STMIA R10,{R4-R7} 3170ADD R10,R10,#320 3180SUBS R9,R9,#1 3190BNE lpsml 3200MOV PC,R14 3210: 3220; Display scrolltext 3230: 3240.edscr 3250ADR R12,bdata 3260LDR R0,[R12,#8] 3270LDR R3,[R12,#12] 3280ADD R1,R0,R3 3290MOV R2,#255 3300.ldscr 3310LDMIA R1!,{R3-R12} 3320STMIA R0!,{R3-R12} 3330SUBS R2,R2,#1 3340BNE ldscr 3350LDMIA R1!,{R3-R11} 3360STMIA R0!,{R3-R11} 3370ADR R12,bdata 3380: 3390; Add new data on right ; I know it is inefficient, but the ARM does have 3400; enough time on its hands, as it were. Actually, it won't work properly, so 3410; I could have used a much quicker routine, but why re-program when you have 3420; got a working routine, anyway ? 3430; I'm sorry the system doesn't seem to be particularly well inter-programmed, 3440; but a lot of it was written for version 1, which was subsequently wiped 3450; ( the !RunImage file ) by that nasty drive. 3460; 3470; Yes, folks, there was a half-done version which got partially wiped before 3480; the finished one. 3490; 3500; Did I learn? 3510; 3520; Did I CABBAGE. 3530: 3540ADD R11,R12,#12 3550LDMIA R11,{R0-R5} 3560CMP R0,#1 3570BEQ skipp 3580LDRB R3,[R4] 3590MOV R6,#1024 3600MLA R2,R6,R3,R2 3610ADD R2,R2,R5 3620SUB R1,R1,#4 3630SUB R2,R2,#4 3640MOV R10,#9920 3650MOV R9,#992 3660.ldnsl 3670LDR R11,[R2,R9] 3680STR R11,[R1,R10] 3690SUBS R10,R10,#320 3700SUB R9,R9,#32 3710BPL ldnsl 3720.skipp 3730LDR R0,[R12,#32] 3740LDR R1,[R12,#12] 3750LDR R9,[R12,#28] 3760ADD R0,R0,R1 3770CMP R0,#35 3780MOVPL R0,#4 3790STR R0,[R12,#32] 3800ADDPL R9,R9,#1 3810.cagai 3820STR R9,[R12,#28] 3830LDRB R0,[R9] 3840SUBS R0,R0,#160 3850BMI estar 3860: 3870; Deal with control codes 3880: 3890LDREQ R1,[R12,#24] 3900STREQ R1,[R12,#28] 3910MOVEQ PC,R14 3920STR R0,[R12,#12] 3930ADD R9,R9,#1 3940B cagai 3950: 3960; I've decided to add some pink parallax stars 3970: 3980.estar 3990LDR R0,[R12,#36] 4000LDR R1,[R12,#40] 4010MOV R2,#400 4020MOV R5,#0 4030MOV R8,#81920 4040SUB R8,R8,#&2A00 4050SUB R8,R8,#&81 4060ADD R9,R12,#44 4070MOV R11,#1 4080.lstar 4090AND R10,R2,#11 4100LDRB R7,[R9,R10] 4110LDR R3,[R0] 4120LDRB R4,[R3] 4130CMP R4,R7 4140STREQB R5,[R3] 4150AND R6,R2,#11 4160ADD R6,R11,R6,LSR #1 4170ADD R3,R3,R6 4180CMP R3,R1 4190SUBPL R3,R3,R8 4200LDRB R4,[R3] 4210CMP R4,#0 4220STREQB R7,[R3] 4230STR R3,[R0],#4 4240SUBS R2,R2,#1 4250BNE lstar 4260MOV PC,R14 4270: 4280; Databay for font display / scrolltext / star routines 4290; 4300; Yuck - this is cack. Sorry. 4310: 4320.bdata 4330EQUD bfont% ; Font data start 4340EQUD kludge_screen ; Screen start 4350EQUD (kludge_screen+(320*224)) ; Place to print text 4360EQUD 4 ; Scroll rate - bytes/vsync 4370EQUD (kludge_screen+(320*225)) ; Point to add new data 4380EQUD bgraf% ; Graphics data start 4390EQUD btext% ; Text start 4400EQUD btext% ; Current text pointer 4410EQUD 4 ; Next part to be revealed 4420EQUD bstar% ; I've decided to have some stars 4430EQUD kludge_screen+&13FFF-(320*34) ; End of star area 4440EQUB 12:EQUB 13:EQUB 14:EQUB 15 4450EQUB 176:EQUB 177:EQUB 178:EQUB 179 4460EQUB 220:EQUB 221:EQUB 222:EQUB 223 ; Star colours 4470EQUD btcol% ; Ptr to colour table 4480: 4490; Colour fade routine 4500: 4510.ecfad 4520ADR R12,bdata 4530MOV R11,#23 4540LDR R10,[R12,#4] 4550LDR R3,[R12,#56] 4560MOV R9,#255 4570.lcfvs 4580MOV R4,R10 4590MOV R5,#(81920/4) 4600.lcfsf 4610LDR R6,[R4] 4620AND R8,R9,R6,ASL#0 4630LDR R7,[R3,R8,ASL#2] 4640AND R8,R9,R6,LSR#8 4650LDR R0,[R3,R8,ASL#2] 4660ADD R7,R7,R0,ASL#8 4670AND R8,R9,R6,LSR#16 4680LDR R0,[R3,R8,ASL#2] 4690ADD R7,R7,R0,ASL#16 4700AND R8,R9,R6,LSR#24 4710LDR R0,[R3,R8,ASL#2] 4720ADD R7,R7,R0,ASL#24 4730STR R7,[R4],#4 4740SUBS R5,R5,#1 4750BNE lcfsf 4760MOV R0,#19 4770SWI "OS_Byte" 4780SUBS R11,R11,#1 4790BNE lcfvs 4800MOV PC,R14 4810: 4820; Fill with zero bytes 4830: 4840.ezero 4850MOV R2,#0 4860.lzero 4870STRB R2,[R0],#1 4880SUBS R1,R1,#1 4890BNE lzero 4900MOV PC,R14 4910: 4920; Copy bytes 4930: 4940.ecopy 4950LDRB R3,[R0],#1 4960STRB R3,[R1],#1 4970SUBS R2,R2,#1 4980BNE ecopy 4990MOV PC,R14 5000: 5010; Game-playing routines 5020: 5030.eg_showtime 5040FNadr(12,bgdat) 5050LDR R1,[R12,#0] 5060MOV R2,#255 5070SUB R4,R2,R0 5080ADD R4,R4,#1 5090MOV R3,#320 5100MLA R1,R4,R3,R1 5110.lshti 5120LDMIA R1,{R4-R7} 5130ANDS R8,R2,R4 5140MOV R8,#160 5150STREQB R8,[R1,#0] 5160ANDS R8,R2,R4,LSR#8 5170MOV R8,#161 5180STREQB R8,[R1,#1] 5190ANDS R8,R2,R4,LSR#16 5200MOV R8,#162 5210STREQB R8,[R1,#2] 5220ANDS R8,R2,R4,LSR#24 5230MOV R8,#163 5240STREQB R8,[R1,#3] 5250ANDS R8,R2,R5 5260MOV R8,#204 5270STREQB R8,[R1,#4] 5280ANDS R8,R2,R5,LSR#8 5290MOV R8,#205 5300STREQB R8,[R1,#5] 5310ANDS R8,R2,R5,LSR#16 5320MOV R8,#206 5330STREQB R8,[R1,#6] 5340ANDS R8,R2,R5,LSR#24 5350MOV R8,#207 5360STREQB R8,[R1,#7] 5370ANDS R8,R2,R6 5380MOV R8,#206 5390STREQB R8,[R1,#8] 5400ANDS R8,R2,R6,LSR#8 5410MOV R8,#205 5420STREQB R8,[R1,#9] 5430ANDS R8,R2,R6,LSR#16 5440MOV R8,#204 5450STREQB R8,[R1,#10] 5460ANDS R8,R2,R6,LSR#24 5470MOV R8,#163 5480STREQB R8,[R1,#11] 5490ANDS R8,R2,R7 5500MOV R8,#162 5510STREQB R8,[R1,#12] 5520ANDS R8,R2,R7,LSR#8 5530MOV R8,#161 5540STREQB R8,[R1,#13] 5550ANDS R8,R2,R7,LSR#16 5560MOV R8,#160 5570STREQB R8,[R1,#14] 5580ADD R1,R1,R3 5590SUBS R0,R0,#1 5600BNE lshti 5610MOV PC,R14 5620: 5630.eg_showlife 5640FNadr(12,bgdat) 5650STR R14,[R12,#4] 5660STR R1,[R12,#8] 5670ADD R0,R0,#48 5680MOV R1,#304 5690MOV R2,#240 5700BL epsml 5710FNadr(12,bgdat) 5720LDR R14,[R12,#4] 5730LDR R0,[R12,#8] 5740CMP R0,#15 5750MOVPL R0,#15 5760LDR R1,[R12,#0] 5770MOV R2,#255 5780SUB R4,R2,R0 5790MOV R3,#320 5800MLA R1,R4,R3,R1 5810ADD R0,R0,#1 5820B lshti 5830: 5840.eg_showscor 5850FNadr(12,bgdat) 5860SUB R1,R1,#1 5870STR R14,[R12,#4] 5880STR R1,[R12,#8] 5890LDR R1,[R12,#12] 5900MOV R2,#512 5910SWI "OS_ConvertCardinal3" 5920MOV R2,#81 5930.lpsco 5940LDRB R1,[R0],#1 5950CMP R1,#0 5960BEQ eg_rtscor 5970STR R0,[R12,#16] 5980STR R2,[R12,#20] 5990MOV R0,R1 6000MOV R1,#304 6010BL epsml 6020FNadr(12,bgdat) 6030LDR R0,[R12,#16] 6040LDR R2,[R12,#20] 6050ADD R2,R2,#16 6060B lpsco 6070.eg_rtscor 6080FNadr(12,bgdat) 6090MOV R11,R2 6100LDR R14,[R12,#4] 6110LDR R0,[R12,#8] 6120CMP R0,#174 6130MOVPL R0,#174 6140LDR R1,[R12,#0] 6150MOV R2,#255 6160SUB R4,R2,R0 6170CMP R4,R11 6180MOVPL PC,R14 6190MOV R3,#320 6200MLA R1,R4,R3,R1 6210SUB R0,R11,R4 6220B lshti 6230: 6240.eg_showmids 6250FNadr(12,bgdat) 6260LDR R3,[R12,#24] 6270MOV R4,#256 6280MLA R3,R4,R2,R3 6290RSBS R4,R0,#2 6300MOVMI R4,#0 6310RSB R5,R0,#19 6320CMP R5,#7 6330MOVPL R5,#7 6340SUB R0,R5,R4 6350RSBS R2,R1,#2 6360MOVMI R2,#0 6370RSB R5,R1,#19 6380CMP R5,#6 6390MOVPL R5,#6 6400SUB R1,R5,R2 6410.lpmdy 6420MOV R5,R0 6430MOV R6,R4 6440.lpmdx 6450STMFD R13!,{R0} 6460LDR R0,[R12,#-12] 6470LDR R9,[R12,#-4] 6480LDR R7,[R12,#28] 6490MOV R8,#48 6500MLA R7,R8,R6,R7 6510MLA R7,R9,R2,R7 6520LDMIA R3!,{R8-R11} 6530STMIA R7,{R8-R11} 6540ADD R7,R7,R0 6550LDMIA R3!,{R8-R11} 6560STMIA R7,{R8-R11} 6570ADD R7,R7,R0 6580LDMIA R3!,{R8-R11} 6590STMIA R7,{R8-R11} 6600ADD R7,R7,R0 6610LDMIA R3!,{R8-R11} 6620STMIA R7,{R8-R11} 6630ADD R7,R7,R0 6640LDMIA R3!,{R8-R11} 6650STMIA R7,{R8-R11} 6660ADD R7,R7,R0 6670LDMIA R3!,{R8-R11} 6680STMIA R7,{R8-R11} 6690ADD R7,R7,R0 6700LDMIA R3!,{R8-R11} 6710STMIA R7,{R8-R11} 6720ADD R7,R7,R0 6730LDMIA R3!,{R8-R11} 6740STMIA R7,{R8-R11} 6750ADD R7,R7,R0 6760LDMIA R3!,{R8-R11} 6770STMIA R7,{R8-R11} 6780ADD R7,R7,R0 6790LDMIA R3!,{R8-R11} 6800STMIA R7,{R8-R11} 6810ADD R7,R7,R0 6820LDMIA R3!,{R8-R11} 6830STMIA R7,{R8-R11} 6840ADD R7,R7,R0 6850LDMIA R3!,{R8-R11} 6860STMIA R7,{R8-R11} 6870ADD R7,R7,R0 6880LDMIA R3!,{R8-R11} 6890STMIA R7,{R8-R11} 6900ADD R7,R7,R0 6910LDMIA R3!,{R8-R11} 6920STMIA R7,{R8-R11} 6930ADD R7,R7,R0 6940LDMIA R3!,{R8-R11} 6950STMIA R7,{R8-R11} 6960ADD R7,R7,R0 6970LDMIA R3!,{R8-R11} 6980STMIA R7,{R8-R11} 6990LDMFD R13!,{R0} 7000ADD R6,R6,#1 7010SUB R3,R3,#256 7020SUBS R5,R5,#1 7030BNE lpmdx 7040ADD R2,R2,#1 7050SUBS R1,R1,#1 7060CMP R1,#1:BPL lpmdy 7070MOV PC,R14 7080: 7090.eg_showalls 7100FNadr(12,bgdat) 7110STR R0,[R12,#8] 7120STR R1,[R12,#16] 7130STR R2,[R12,#20] 7140MOV R10,R2 7150AND R4,R2,#7 7160AND R5,R2,#1 7170MOV R6,#1024 7180LDR R7,[R12,#32] 7190LDR R8,[R12,#36] 7200MLA R2,R4,R6,R7 7210MLA R3,R5,R6,R8 7220SUB R0,R0,#2 7230SUB R1,R1,#2 7240MOV R4,#6 7250LDR R6,[R12,#40] 7260MOV R8,#0 7270.llhwl 7280MOV R5,#6 7290MOV R7,#0 7300.lohwl 7310CMP R0,#0:BMI nohwl:CMP R1,#0:BMI nohwl 7320CMP R0,#16:BPL nohwl:CMP R1,#17:BPL nohwl 7330MOV R10,#16:MLA R9,R1,R10,R0:ADD R9,R9,R6 7340LDRB R10,[R9]:CMP R10,#1:BMI nohwl 7350MOVEQ R11,R2:MOVNE R11,R3 7360MOV R9,#48:LDR R10,[R12,#28] 7370MLA R10,R9,R7,R10:LDR R9,[R12,#-4] 7380MLA R10,R9,R8,R10:ADD R10,R10,#16 7390STMFD R13!,{R0-R8}:LDR R8,[R12,#-12] 7400LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7410LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7420LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7430LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7440LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7450LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7460LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7470LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7480LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7490LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7500LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7510LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7520LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7530LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7540LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7550LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7560LDMFD R13!,{R0-R8} 7570.nohwl 7580ADD R7,R7,#1:ADD R0,R0,#1 7590SUBS R5,R5,#1:BNE lohwl 7600SUB R0,R0,#6:ADD R8,R8,#1 7610ADD R1,R1,#1:SUBS R4,R4,#1:BNE llhwl 7620: 7630LDR R0,[R12,#8]:LDR R1,[R12,#16] 7640ADD R2,R2,#512:ADD R3,R3,#512 7650SUB R0,R0,#2:SUB R1,R1,#2 7660MOV R5,#7 7670LDR R6,[R12,#44] 7680LDR R10,[R12,#20] 7690MOV R7,#0 7700.llvwl 7710MOV R4,#5 7720MOV R8,#0 7730.lovwl 7740CMP R0,#0:BMI novwl:CMP R1,#0:BMI novwl 7750CMP R0,#17:BPL novwl:CMP R1,#16:BPL novwl 7760MOV R10,#16:MLA R9,R0,R10,R1:ADD R9,R9,R6 7770LDRB R10,[R9]:CMP R10,#1:BMI novwl 7780MOVEQ R11,R2:MOVNE R11,R3 7790MOV R9,#48:LDR R10,[R12,#28] 7800MLA R10,R9,R7,R10:LDR R9,[R12,#-4] 7810MLA R10,R9,R8,R10:LDR R9,[R12,#-8]:ADD R10,R10,R9 7820STMFD R13!,{R0-R8}:LDR R8,[R12,#-12] 7830LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7840LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7850LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7860LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7870LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7880LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7890LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7900LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7910LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7920LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7930LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7940LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7950LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7960LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7970LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7980LDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 7990LDMFD R13!,{R0-R8} 8000.novwl 8010ADD R8,R8,#1:ADD R1,R1,#1 8020SUBS R4,R4,#1:BNE lovwl 8030SUB R1,R1,#5:ADD R7,R7,#1 8040ADD R0,R0,#1:SUBS R5,R5,#1:BNE llvwl 8050MOV PC,R14 8060: 8070.eg_showobjs 8080ADR R12,bgdat:SUB R0,R0,#2:SUB R1,R1,#2 8090MOV R3,#0:MOV R5,#5:LDR R6,[R12,#48]:LDR R7,[R12,#28] 8100ADD R7,R7,#16:ADD R7,R7,#(320*16):MOV R8,#6 8110.lysqr 8120MOV R2,#0:MOV R4,R8 8130.lxsqr 8140CMP R0,#0:BMI nosqr:CMP R1,#0:BMI nosqr 8150CMP R0,#16:BPL nosqr:CMP R1,#16:BPL nosqr 8160MOV R11,#16:MLA R9,R1,R11,R0:ADD R9,R9,R6 8170LDRB R10,[R9]:AND R10,R10,#15 8180ADD R9,R12,#64:ADD R9,R9,R10,ASL#1 8190LDRB R10,[R9],#1:CMP R10,#93:BEQ nosqr 8200LDRB R11,[R9]:ADD R9,R12,#52:LDRB R9,[R9,R11] 8210ADD R10,R10,R9:MOV R9,R10,ASL#10 8220LDR R10,[R12,#56]:ADD R9,R10,R9 8230MOV R11,#48:MLA R10,R2,R11,R7 8240LDR R11,[R12,#-4]:MLA R10,R3,R11,R10 8250STMFD R13!,{R0-R8}:LDR R8,[R12,#-12] 8260LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8270LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8280LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8290LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8300LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8310LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8320LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8330LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8340LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8350LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8360LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8370LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8380LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8390LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8400LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8410LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8420LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8430LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8440LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8450LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8460LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8470LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8480LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8490LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8500LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8510LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8520LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8530LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8540LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8550LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8560LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8570LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 8580LDMFD R13!,{R0-R8} 8590.nosqr 8600ADD R0,R0,#1:ADD R2,R2,#1 8610SUBS R4,R4,#1:BNE lxsqr 8620ADD R1,R1,#1:ADD R3,R3,#1:SUB R0,R0,R8 8630SUBS R5,R5,#1:BNE lysqr 8640LDRB R0,[R12,#52]:ADD R0,R0,#1:CMP R0,#8:SUBPL R0,R0,#8:STRB R0,[R12,#52] 8650LDRB R0,[R12,#53]:ADD R0,R0,#1:CMP R0,#12:SUBPL R0,R0,#12:STRB R0,[R12,#53] 8660LDRB R0,[R12,#54]:ADD R0,R0,#1:CMP R0,#16:SUBPL R0,R0,#16:STRB R0,[R12,#54] 8670MOV PC,R14 8680: 8690;-12: EQUD 320 ; Columns on screen ! 8700;-8 : EQUD 320*16 ; Columns on screen * Wossname 8710;-4 : EQUD 320*48 ; Columns on screen * Wossname 8720.bgdat ; Databay for game routines 8730;+0 : EQUD kludge_screen+304 ; Start point for time block 8740;+4 : EQUD 0 ; Temporary store for R14 8750;+8 : EQUD 0 ; Another temporary register store 8760;+12: EQUD bmess%+4 ; Ptr to message block 8770;+16: EQUD 0 ; Yet another register store 8780;+20: EQUD 0 ; Ditto 8790;+24: EQUD bgraf%+38*1024 ; Start of MiddleBit graphics 8800;+28: EQUD kludge_screen ; Screen start 8810;+32: EQUD bgraf%+98*1024 ; Wall grafx start 8820;+36: EQUD bgraf%+96*1024 ; Imm Wall grafx start 8830;+40: EQUD blevl% ; Horz. wall data start 8840;+44: EQUD blevl%+272 ; Vert. wall data start 8850;+48: EQUD blevl%+544 ; Square data start 8860;+52: EQUD 0 ; Animation counters 8870;+56: EQUD bgraf% ; Grafx start 8880;+60: EQUD kludge_screen+112*321 ; Middle of screen 8890;+64: EQUB 93:EQUB 3 ; Object data 8900EQUB 122:EQUB 1 8910EQUB 106:EQUB 2 8920EQUB 134:EQUB 1 8930EQUB 37:EQUB 3 8940EQUB 93:EQUB 3 8950EQUB 146:EQUB 0 8960ALIGN 8970EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 8980;+108:EQUD kludge_screen ; Screen start 8990:ALIGN 9000.eg_showyou 9010ADR R12,bgdat 9020LDR R2,[R12,#56] 9030MOV R9,#1024 9040MLA R10,R0,R9,R2 9050MLA R11,R1,R9,R2 9060LDR R12,[R12,#60] 9070MOV R9,#32 9080.lsyou 9090LDMIA R12,{R0-R2}:LDMIA R10!,{R3-R5}:LDMIA R11!,{R6-R8} 9100AND R0,R0,R6:ORR R0,R0,R3:AND R1,R1,R7:ORR R1,R1,R4:AND R2,R2,R8:ORR R2,R2,R5 9110STMIA R12!,{R0-R2}:LDMIA R12,{R0-R2}:LDMIA R10!,{R3-R5}:LDMIA R11!,{R6-R8} 9120AND R0,R0,R6:ORR R0,R0,R3:AND R1,R1,R7:ORR R1,R1,R4:AND R2,R2,R8:ORR R2,R2,R5 9130STMIA R12!,{R0-R2}:LDMIA R12,{R0-R1}:LDMIA R10!,{R3-R4}:LDMIA R11!,{R6-R7} 9140AND R0,R0,R6:ORR R0,R0,R3:AND R1,R1,R7:ORR R1,R1,R4:STMIA R12!,{R0-R1} 9150ADD R12,R12,#(320-32):SUBS R9,R9,#1:BNE lsyou 9160MOV PC,R14 9170.eg_wipeyou 9180ADR R11,bgdat 9190LDR R0,[R11,#60] 9200ADD R11,R11,#80:LDMIA R11,{R2-R9} 9210STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 9220STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 9230STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 9240STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320: 9250STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 9260MOV PC,R14 9270: 9280.eg_playgame ; Woo ! This is it, folks ! 9290STMFD R13!,{R14} 9300STMFD R13!,{R0-R3} 9310FNadr(12,bgame):STR R4,[R12,#112]:STR R5,[R12,#116] 9320MOV R0,#11:MOV R1,#1:SWI "OS_Byte":MOV R0,#12:MOV R1,#1:SWI "OS_Byte" 9330.lsgam 9340FNadr(12,bgame) 9350MOV R0,#129:MOV R1,#0:MOV R2,#0:SWI "OS_Byte" 9360 Cmp R1,#ASC("a") 9370 RsbPlS R14,R1,#ASC("z") 9380 SubPl R1,R1,#32 ; Kludge -> Upper case! 9390CMP R2,#27:BEQ out_escape:CMP R2,#255:BEQ nokey 9400MOV R10,R1 9410LDR R1,[R12,#0]:LDR R2,[R12,#4]:MOV R3,#255 9420 Ldr R14,[R12,#140] 9430 SubS R14,R14,#1 9440 StrPl R14,[R12,#140] 9450 Bpl nokey 9460AND R4,R3,R1:CMP R10,R4:BEQ key_left 9470AND R4,R3,R1,LSR#8:CMP R10,R4:BEQ key_right 9480AND R4,R3,R1,LSR#16:CMP R10,R4:BEQ key_up 9490AND R4,R3,R1,LSR#24:CMP R10,R4:BEQ key_down 9500AND R4,R3,R2:CMP R10,R4:BEQ out_pause 9510AND R4,R3,R2,LSR#8:CMP R10,R4:BEQ out_abort 9520.nokey 9530BL eg_wipeyou 9540LDMFD R13!,{R0-R3} 9550ADD R3,R3,#1:ANDS R4,R3,#&1F:SUBEQ R2,R2,#1 9560STMFD R13!,{R0-R3}:BLEQ dectime 9570BL eg_showobjs 9580LDMFD R13,{R0-R3} 9590AND R0,R3,#7:ADD R1,R0,#8:BL eg_showyou 9600MOV R0,#19:SWI "OS_Byte" 9610B lsgam 9620.key_left 9630STMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} 9640LDMFD R13!,{R0,R2,R3,R4} 9650SUBS R1,R0,#1:STMMIFD R13!,{R0,R2,R3,R4} 9660BMI nokey:LDR R5,[R12,#96]:ADD R5,R5,R1:ADD R7,R5,R2,ASL#4 9670LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} 9680BEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 9690LDR R5,[R12,#92]:ADD R5,R5,R2:ADD R5,R5,R1,ASL#4 9700LDRB R6,[R5,#16]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE nolbw 9710LDRB R6,[R5,#-16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey 9720STREQB R9,[R5]:ANDEQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE nolbw 9730STRB R9,[R7]:STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] 9740MOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" 9750LDMFD R13,{R0-R3}:MOV R1,R2 9760LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] 9770BL eg_showscor:FNsfadr(12,bgame) 9780B nslbw 9790.nolbw STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] 9800.nslbw LDR R0,[R12,#76]:ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#120] 9810.llcbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE llcbf 9820STMIA R0!,{R2}:LDR R2,[R12,#124]:MOV R1,#256:LDR R0,[R12,#128] 9830.llcbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14} 9840LDMIA R2!,{R3-R4}:STMIA R0!,{R3-R4}:ADD R2,R2,#272 9850ADD R0,R0,#320:SUBS R1,R1,#1:BNE llcbg 9860LDR R0,[R12,#76]:FNsadr(11,bgdat):STR R0,[R11,#28] 9870MOV R0,#368:STR R0,[R11,#-12]:MOV R0,#(368*16):STR R0,[R11,#-8]:MOV R0,#(368*48):STR R0,[R11,#-4] 9880LDR R0,[R12,#72]:LDR R11,[R0] 9890LDMFD R13,{R0-R3}:AND R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids 9900LDMFD R13!,{R0-R2}:BL eg_showalls:FNsfadr(12,bgame) 9910LDMFD R13,{R0-R3}:MOV R4,#44:LDR R5,[R12,#76]:LDR R6,[R12,#80] 9920STMFD R13!,{R0-R6} 9930.lscrl 9940LDMFD R13,{R0-R6}:FNsfadr(12,bgame):ADD R5,R5,R4 9950ADD R5,R5,#&A100:ADD R11,R5,#&90:CMP R4,#44:BLNE eg_wipedwn 9960FNsadr(12,bgdat):SUB R0,R0,#2:SUB R1,R1,#2 9970MOV R3,#0:MOV R5,#5:LDR R6,[R12,#48]:LDR R7,[R12,#28] 9980ADD R7,R7,#16:ADD R7,R7,#(368*16):MOV R8,#7:BL lysqr 9990FNsfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 10000ADD R5,R5,#&A100:ADD R11,R5,#&70:BL eg_showyouwithoutmask 10010LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nslwp 10020ADD R5,R5,R4:ADD R5,R5,#&A100:ADD R0,R5,#&60:BL eg_sprwh 10030.nslwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 10040MOV R0,#19:SWI "OS_Byte" 10050.llcpy 10060LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10070LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10080LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10090LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10100LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10110LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10120LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10130LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16:ADD R5,R5,#48 10140SUBS R7,R7,#1:BNE llcpy 10150LDMFD R13!,{R0-R6}:SUBS R4,R4,#4:ADD R3,R3,#1:BMI lslot 10160STMFD R13!,{R0-R6}:B lscrl 10170.lslot 10180FNsfadr(12,bgame) 10190LDR R11,[R12,#100] 10200CMP R11,#0:BEQ nnlwl 10210MOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" 10220LDMFD R13,{R0-R3} 10230LDR R5,[R12,#92]:ADD R5,R5,R1:ADD R5,R5,R0,ASL#4 10240MOV R11,#1:STRB R11,[R5] 10250.nnlwl MOV R0,#19:SWI "OS_Byte" 10260FNsfadr(12,bgame):FNadr(11,bgdat):LDR R0,[R12,#80] 10270LDR R0,kludgey:STR R0,[R11,#28] 10280MOV R0,#320:STR R0,[R11,#-12]:MOV R0,#(320*16):STR R0,[R11,#-8]:MOV R0,#(320*48):STR R0,[R11,#-4] 10290B newsq 10300.kludgey Equd kludge_screen 10310.key_right 10320STMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} 10330LDMFD R13!,{R0,R2,R3,R4} 10340ADD R1,R0,#1:CMP R1,#16:STMPLFD R13!,{R0,R2,R3,R4} 10350BPL nokey:LDR R5,[R12,#96]:ADD R5,R5,R1:ADD R7,R5,R2,ASL#4 10360LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} 10370BEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 10380LDR R5,[R12,#92]:ADD R5,R5,R2:ADD R5,R5,R1,ASL#4 10390LDRB R6,[R5,#0]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE norbw 10400LDRB R6,[R5,#16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey 10410STREQB R9,[R5]:ANDEQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE norbw 10420STRB R9,[R7]:STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] 10430MOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" 10440LDMFD R13,{R0-R3}:MOV R1,R2 10450LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] 10460BL eg_showscor:FNsfadr(12,bgame) 10470B nsrbw 10480.norbw STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] 10490.nsrbw LDR R0,[R12,#76]:ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#120] 10500.lrcbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE lrcbf 10510STMIA R0!,{R2}:LDR R2,[R12,#80]:MOV R1,#256:LDR R0,[R12,#76] 10520.lrcbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14} 10530LDMIA R2!,{R3-R4}:STMIA R0!,{R3-R4}:ADD R2,R2,#272 10540ADD R0,R0,#320:SUBS R1,R1,#1:BNE lrcbg 10550LDR R0,[R12,#76]:FNsadr(11,bgdat):ADD R0,R0,#48:STR R0,[R11,#28] 10560MOV R0,#368:STR R0,[R11,#-12]:MOV R0,#(368*16):STR R0,[R11,#-8]:MOV R0,#(368*48):STR R0,[R11,#-4] 10570LDR R0,[R12,#72]:LDR R11,[R0] 10580LDMFD R13,{R0-R3}:AND R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids 10590LDMFD R13!,{R0-R2}:BL eg_showalls:FNsfadr(12,bgame) 10600LDMFD R13,{R0-R3}:MOV R4,#4:LDR R5,[R12,#76]:LDR R6,[R12,#80] 10610STMFD R13!,{R0-R6} 10620.lscrr 10630LDMFD R13,{R0-R6}:FNsfadr(12,bgame):ADD R5,R5,R4 10640ADD R5,R5,#&A100:ADD R11,R5,#&6C:CMP R4,#4:BLNE eg_wipedwn 10650FNsadr(12,bgdat):SUB R0,R0,#3:SUB R1,R1,#2 10660MOV R3,#0:MOV R5,#5:LDR R6,[R12,#48]:LDR R7,[R12,#28]:SUB R7,R7,#48 10670ADD R7,R7,#16:ADD R7,R7,#(368*16):MOV R8,#7:BL lysqr 10680FNsfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 10690ADD R5,R5,#&A100:ADD R11,R5,#&70:BL eg_showyouwithoutmask 10700LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nsrwp 10710ADD R5,R5,R4:ADD R5,R5,#&A100:ADD R0,R5,#&90:BL eg_sprwh 10720.nsrwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 10730MOV R0,#19:SWI "OS_Byte" 10740.lrcpy 10750LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10760LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10770LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10780LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10790LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10800LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10810LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 10820LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16:ADD R5,R5,#48 10830SUBS R7,R7,#1:BNE lrcpy 10840LDMFD R13!,{R0-R6}:ADD R4,R4,#4:CMP R4,#52:ADD R3,R3,#1:BPL lsrot 10850STMFD R13!,{R0-R6}:B lscrr 10860.lsrot 10870FNsfadr(12,bgame) 10880LDR R11,[R12,#100] 10890CMP R11,#0:BEQ nnrwl 10900MOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" 10910LDMFD R13,{R0-R3} 10920LDR R5,[R12,#92]:ADD R5,R5,R1:ADD R5,R5,R0,ASL#4 10930MOV R11,#1:STRB R11,[R5,#16] 10940.nnrwl MOV R0,#19:SWI "OS_Byte" 10950FNsfadr(12,bgame):FNadr(11,bgdat):LDR R0,[R12,#80] 10960LDR R0,kludgey:STR R0,[R11,#28] 10970MOV R0,#320:STR R0,[R11,#-12]:MOV R0,#(320*16):STR R0,[R11,#-8]:MOV R0,#(320*48):STR R0,[R11,#-4] 10980B newsq 10990.key_up 11000STMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} 11010LDMFD R13!,{R0,R2,R3,R4} 11020SUBS R1,R2,#1:STMMIFD R13!,{R0,R2,R3,R4} 11030BMI nokey:LDR R5,[R12,#96]:ADD R5,R5,R0:ADD R7,R5,R1,ASL#4 11040LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} 11050BEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 11060LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 11070LDRB R6,[R5,#16]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE noubw 11080LDRB R6,[R5,#-16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey 11090STREQB R9,[R5]:ANDEQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE noubw 11100STRB R9,[R7]:STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] 11110MOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" 11120LDMFD R13,{R0-R3}:MOV R1,R2 11130LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] 11140BL eg_showscor:FNsfadr(12,bgame) 11150B nsubw 11160.noubw STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] 11170.nsubw LDR R0,[R12,#76]:ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#84] 11180.lucbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE lucbf 11190STMIA R0!,{R2-R10}:LDR R2,[R12,#24]:MOV R1,#384 11200.lucbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14}:SUBS R1,R1,#1:BNE lucbg 11210SUB R0,R0,#(320*304) 11220FNsadr(11,bgdat):STR R0,[R11,#28] 11230LDR R0,[R12,#72]:LDR R11,[R0] 11240LDMFD R13,{R0-R3}:AND R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids 11250LDMFD R13!,{R0-R2}:BL eg_showalls:FNsfadr(12,bgame) 11260LDMFD R13,{R0-R3}:MOV R4,#(44*320):LDR R5,[R12,#76]:LDR R6,[R12,#80] 11270STMFD R13!,{R0-R6} 11280.lscru 11290LDMFD R13,{R0-R6}:FNsfadr(12,bgame):ADD R5,R5,R4 11300ADD R5,R5,#&B400:ADD R11,R5,#&70:CMP R4,#(44*320):BLNE eg_wipeacr 11310FNsadr(12,bgdat):SUB R0,R0,#2:SUB R1,R1,#2 11320MOV R3,#0:MOV R5,#6:LDR R6,[R12,#48]:LDR R7,[R12,#28] 11330ADD R7,R7,#16:ADD R7,R7,#(320*16):MOV R8,#6:BL lysqr 11340FNsfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 11350ADD R5,R5,#&8C00:ADD R11,R5,#&70:BL eg_showyouwithoutmask 11360LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nsuwp 11370ADD R5,R5,R4:ADD R5,R5,#&7800:ADD R0,R5,#&70:BL eg_sprwl 11380.nsuwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 11390MOV R0,#19:SWI "OS_Byte" 11400.lucpy 11410LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11420LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11430LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11440LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11450LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11460LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11470LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 11480LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16 11490SUBS R7,R7,#1:BNE lucpy 11500LDMFD R13!,{R0-R6}:SUBS R4,R4,#(320*4):ADD R3,R3,#1:BMI lsuot 11510STMFD R13!,{R0-R6}:B lscru 11520.lsuot 11530FNsfadr(12,bgame) 11540LDR R11,[R12,#100] 11550CMP R11,#0:BEQ nnuwl 11560MOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" 11570LDMFD R13,{R0-R3} 11580LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 11590MOV R11,#1:STRB R11,[R5] 11600.nnuwl MOV R0,#19:SWI "OS_Byte" 11610FNsfadr(12,bgame):FNadr(11,bgdat):LDR R0,[R12,#80] 11620Ldr R0,kludgey:STR R0,[R11,#28] 11630B newsq 11640.key_down 11650STMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} 11660LDMFD R13!,{R0,R2,R3,R4} 11670ADD R1,R2,#1:CMP R1,#16:STMPLFD R13!,{R0,R2,R3,R4} 11680BPL nokey:LDR R5,[R12,#96]:ADD R5,R5,R0:ADD R7,R5,R1,ASL#4 11690LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} 11700BEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 11710LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 11720LDRB R6,[R5,#0]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE nodbw 11730LDRB R6,[R5,#16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey 11740STREQB R9,[R5]:ANDEQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE nodbw 11750STRB R9,[R7]:STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] 11760MOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" 11770LDMFD R13,{R0-R3}:MOV R1,R2 11780LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] 11790BL eg_showscor:FNsfadr(12,bgame) 11800B nsdbw 11810.nodbw STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] 11820.nsdbw LDR R0,[R12,#76]:ADD R0,R0,#(48*320):ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#84] 11830.ldcbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE ldcbf 11840STMIA R0,{R2-R10}:LDR R2,[R12,#80]:MOV R1,#384:LDR R0,[R12,#76] 11850.ldcbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14}:SUBS R1,R1,#1:BNE ldcbg 11860FNsadr(11,bgdat):STR R0,[R11,#28] 11870LDR R0,[R12,#72]:LDR R11,[R0] 11880LDMFD R13,{R0-R3}:AND R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids 11890LDMFD R13!,{R0-R2}:BL eg_showalls:FNsfadr(12,bgame) 11900LDMFD R13,{R0-R3}:MOV R4,#(4*320):LDR R5,[R12,#76]:LDR R6,[R12,#80] 11910STMFD R13!,{R0-R6}:FNsadr(11,bgdat):LDR R0,[R11,#28]:SUB R0,R0,#(320*48):STR R0,[R11,#28] 11920.lscrd 11930LDMFD R13,{R0-R6}:FNsfadr(12,bgame):ADD R5,R5,R4 11940ADD R5,R5,#&8700:ADD R11,R5,#&70:CMP R4,#(4*320):BLNE eg_wipeacr 11950FNsadr(12,bgdat):SUB R0,R0,#2:SUB R1,R1,#3 11960MOV R3,#0:MOV R5,#6:LDR R6,[R12,#48]:LDR R7,[R12,#28] 11970ADD R7,R7,#16:ADD R7,R7,#(320*16):MOV R8,#6:BL lysqr 11980FNsfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 11990ADD R5,R5,#&8C00:ADD R11,R5,#&70:BL eg_showyouwithoutmask 12000LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nsdwp 12010ADD R5,R5,R4:ADD R5,R5,#&B400:ADD R0,R5,#&70:BL eg_sprwl 12020.nsdwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 12030MOV R0,#19:SWI "OS_Byte" 12040.ldcpy 12050LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12060LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12070LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12080LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12090LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12100LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12110LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 12120LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16 12130SUBS R7,R7,#1:BNE ldcpy 12140LDMFD R13!,{R0-R6}:ADD R4,R4,#(320*4):CMP R4,#(320*52):ADD R3,R3,#1:BPL lsdot 12150STMFD R13!,{R0-R6}:B lscrd 12160.lsdot 12170FNsfadr(12,bgame) 12180LDR R11,[R12,#100] 12190CMP R11,#0:BEQ nndwl 12200MOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" 12210LDMFD R13,{R0-R3} 12220LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 12230MOV R11,#1:STRB R11,[R5,#16] 12240.nndwl MOV R0,#19:SWI "OS_Byte" 12250FNsfadr(12,bgame):FNadr(11,bgdat):LDR R0,[R12,#80] 12260LDR R0,kludgey_q:STR R0,[R11,#28] 12270B newsq 12280.kludgey_q Equd kludge_screen 12290.out_escape 12300MOV R0,#126:SWI "OS_Byte" 12310LDMFD R13!,{R0-R3} 12320MOV R0,#0 12330LDMFD R13!,{PC} 12340.out_pause 12350LDMFD R13!,{R0-R3} 12360LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4],#1:STRB R2,[R4] 12370MOV R0,#1 12380LDMFD R13!,{PC} 12390.out_abort 12400LDMFD R13!,{R0-R3} 12410LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4] 12420MOV R0,#2 12430LDMFD R13!,{PC} 12440.out_time 12450LDMFD R13!,{R0-R3} 12460LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4] 12470MOV R0,#3 12480LDMFD R13!,{PC} 12490: 12500.out_mine 12510LDMFD R13!,{R0-R3} 12520LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4] 12530MOV R0,#4 12540LDMFD R13!,{PC} 12550: 12560.out_done 12570LDMFD R13!,{R0-R3} 12580LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4],#1:STRB R2,[R4] 12590MOV R0,#1 12600MOV R0,#5 12610LDMFD R13!,{PC} 12620: 12630.bgame ; Databay for THE GAME 12640EQUD 0:EQUD 0 ; Keys 12650;+8 : EQUD kludge_screen+304+255*320 ; Time bar end 12660;+12: EQUD kludge_screen+320*248 12670;+16: EQUD bgraf% ; Grafx start 12680;+20: EQUD kludge_screen+112*321 ; Middle of screen 12690;+24: EQUD kludge_screen+320*208 ; Brown girl in the ring, la la la la la 12700;+28: EQUD 0:EQUD 0:EQUD 0 12710EQUD 0:EQUD 0:EQUD 0:EQUD 0 12720EQUD 0:EQUD 0:EQUD 0:EQUD 0 ; Quicknoughts 12730;+72: EQUD bmess% ; Ptr to mess block 12740;+76: EQUD 0 ; Set up to SpriteOp60 12750;+80: EQUD kludge_screen ; Screen start 12760;+84: EQUD 1861 ; Scr bytes/44 12770;+88: EQUD blevl% ; Horz. wall data start 12780;+92: EQUD blevl%+272 ; Vert. wall data start 12790;+96: EQUD blevl%+544 ; Square data start 12800;+100:EQUD 0 ; Yes, another temporary register store 12810;+104:EQUD bgraf%+97*1024 ; Wall grafx start-1024 12820;+108:EQUD kludge_screen+112+320*96 ; Wall above you 12830;+112:EQUD 0 ; Score 12840;+116:EQUD 0 ; Bombs left 12850;+120:EQUD 2141 ; Wide scr bytes/44 12860;+124:EQUD kludge_screen+304-48 12870;+128:EQUD 0 12880;+132:EQUD 0 12890;+136:EQUD blevs%+266 12900;+140:EQUD 0 ; kludge_counter 12910 12920.newsq 12930MOV R0,#21:MOV R1,#0:SWI "OS_Byte" 12940LDMFD R13,{R0-R3}:MOV R11,R2 12950LDR R2,[R12,#96]:ADD R0,R2,R0:ADD R0,R0,R1,ASL#4:LDRB R1,[R0]:AND R2,R1,#15 12960 Mov R0,#kludge_pause 12970 Str R0,[R12,#140] 12980 Teq R2,#1:BEQ sqbom 12990 Teq R2,#2:BEQ out_mine 13000 Teq R2,#3:BEQ sqtrn 13010 Teq R2,#6:BEQ sqbon 13020 B lsgam 13030: 13040.sqbom 13050LDR R0,[R12,#112]:ADD R0,R0,#23:STR R0,[R12,#112] 13060MOV R1,R11:BL eg_showscor 13070MOV R0,#2:MVN R1,#14:MOV R2,#&1800:MOV R3,#1:SWI "Sound_Control" 13080ADR R12,bgame 13090LDR R0,[R12,#116]:SUBS R0,R0,#1:BEQ out_done:STR R0,[R12,#116] 13100.wypsq LDMFD R13,{R0-R3} 13110LDR R2,[R12,#96]:ADD R0,R2,R0:ADD R0,R0,R1,ASL#4:MOV R1,#0:STRB R1,[R0] 13120B lsgam 13130.sqbon 13140LDR R0,[R12,#112]:ADD R0,R0,#26:STR R0,[R12,#112]:MOV R1,R11 13150BL eg_showscor:MOV R0,#4:ADR R1,bonvx 13160SWI "Sound_AttachNamedVoice" 13170MOV R0,#4:MVN R1,#14:MOV R2,#&1800:MOV R3,#1:SWI "Sound_Control" 13180ADR R12,bgame:B wypsq 13190.bonvx EQUS "BSgetbonus"+CHR$0:ALIGN 13200.temps EQUD 0 13210.sqtrn ADR R0,temps:STRB R1,[R0] 13220MOV R0,#4:ADR R1,travx:SWI "Sound_AttachNamedVoice" 13230MOV R0,#4:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" 13240ADR R0,ttran:ADR R12,bgame:STR R0,[R12,#132] 13250.lptrn BL eg_wipeyou 13260LDMFD R13!,{R0-R3} 13270ADD R3,R3,#1:ANDS R4,R3,#&1F:SUBEQ R2,R2,#1 13280STMFD R13!,{R0-R3}:BLEQ dectime 13290BL eg_showobjs 13300LDMFD R13,{R0-R3} 13310ADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 13320CMP R0,#0:BEQ lptro:ADD R1,R0,#6:BL eg_showyou 13330MOV R0,#19:SWI "OS_Byte":B lptrn 13340.lptro BL eg_wipeyou 13350LDMFD R13!,{R0-R3} 13360ADD R3,R3,#1:ANDS R4,R3,#&1F:SUBEQ R2,R2,#1 13370STMFD R13!,{R0-R3}:BLEQ dectime 13380BL eg_showobjs 13390LDMFD R13,{R0-R3} 13400ADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 13410CMP R0,#0:BEQ lptrp:ADD R1,R0,#6:MOV R0,#93:BL eg_showyou 13420MOV R0,#19:SWI "OS_Byte":B lptro 13430.lptrp LDMFD R13,{R0-R3}:MOV R11,R2 13440LDR R2,[R12,#96]:ADD R0,R2,R0:ADD R0,R0,R1,ASL#4:MOV R1,#0:STRB R1,[R0] 13450.lptrq BL eg_wipeyou 13460LDMFD R13!,{R0-R3} 13470ADD R3,R3,#1:ANDS R4,R3,#&1F:SUBEQ R2,R2,#1 13480STMFD R13!,{R0-R3}:BLEQ dectime 13490BL eg_showobjs:LDMFD R13,{R0-R3} 13500ADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 13510CMP R0,#0:BEQ lptrr:MOV R0,#19:SWI "OS_Byte":B lptrq 13520.lptrr 13530MOV R0,#21:MOV R1,#0:SWI "OS_Byte" 13540ADR R12,bgame:LDR R0,[R12,#80]:ADD R2,R12,#28:LDMIA R2,{R1-R11}:MOV R12,#256 13550.ltcsz STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R10}:ADD R0,R0,#16 13560SUBS R12,R12,#1:BNE ltcsz 13570ADR R12,bgame:LDR R0,[R12,#72]:LDRB R0,[R0]:LDR R1,[R12,#136] 13580ADD R0,R1,R0,ASL#1:LDRB R10,[R0,#1]:LDRB R9,[R0] 13590LDMFD R13,{R0-R3} 13600ADR R0,temps:LDRB R1,[R0] 13610AND R3,R1,#240:ADD R3,R3,#5:MOV R4,#256:MOV R0,R9:MOV R1,R10 13620LDR R2,[R12,#96]:MOV R7,#0 13630.lfndr LDRB R5,[R2],#1:CMP R5,R3:BNE sfndr 13640AND R0,R7,#15:AND R1,R7,#(15<<4):MOV R1,R1,LSR#4 13650.sfndr ADD R7,R7,#1:SUBS R4,R4,#1:BNE lfndr 13660LDMFD R13!,{R2-R5} 13670STMFD R13!,{R0-R1,R4-R5} 13680LDR R2,[R12,#72]:LDRB R2,[R2]:AND R2,R2,#3:BL eg_showmids 13690LDMFD R13,{R0-R3}:ADR R12,bgame 13700LDR R2,[R12,#72]:LDRB R2,[R2]:AND R2,R2,#7:BL eg_showalls 13710ADR R0,ttran:ADD R0,R0,#28:ADR R12,bgame:STR R0,[R12,#132] 13720.lptry BL eg_wipeyou 13730LDMFD R13!,{R0-R3} 13740ADD R3,R3,#1:ANDS R4,R3,#&1F:SUBEQ R2,R2,#1 13750STMFD R13!,{R0-R3}:BLEQ dectime 13760BL eg_showobjs 13770LDMFD R13,{R0-R3} 13780ADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 13790CMP R0,#0:BEQ lsgam:ADD R1,R0,#6:BL eg_showyou 13800MOV R0,#19:SWI "OS_Byte":B lptry 13810.travx EQUS "BStranspor"+CHR$0:ALIGN 13820: 13830.ttran EQUD &BABABBBA:EQUD &BBBBBCBB:EQUD &BCBCBDBC 13840EQUD &BDBDBEBD:EQUD &BEBEBFBE:EQUD &BFBEBF00 13850EQUD &BFBFBEBF:EQUD &BEBEBDBE:EQUD &BDBDBCBD 13860EQUD &BCBCBBBC:EQUD &BBBBBABB:EQUD &BABBBA00 13870EQUD &01010101:EQUD &01010101:EQUD &01010100 13880: 13890.dectime 13900FNsadr(12,bgame) 13910CMP R2,#0 13920BMI out_time 13930LDR R4,[R12,#8] 13940MOV R5,#320 13950MUL R6,R5,R2 13960SUB R2,R4,R6 13970MOV R4,#0:MOV R5,#255:MVN R11,#255 13980LDMIA R2,{R6-R9} 13990AND R10,R5,R6:CMP R10,#160:ANDEQ R6,R6,R11 14000AND R10,R5,R6,ROR#24:CMP R10,#163:ANDEQ R6,R6,R11,ROR#8 14010AND R10,R5,R6,ROR#16:CMP R10,#162:ANDEQ R6,R6,R11,ROR#16 14020AND R10,R5,R6,ROR#8:CMP R10,#161:ANDEQ R6,R6,R11,ROR#24 14030AND R10,R5,R7:CMP R10,#204:ANDEQ R7,R7,R11 14040AND R10,R5,R7,ROR#24:CMP R10,#207:ANDEQ R7,R7,R11,ROR#8 14050AND R10,R5,R7,ROR#16:CMP R10,#206:ANDEQ R7,R7,R11,ROR#16 14060AND R10,R5,R7,ROR#8:CMP R10,#205:ANDEQ R7,R7,R11,ROR#24 14070AND R10,R5,R8:CMP R10,#206:ANDEQ R8,R8,R11 14080AND R10,R5,R8,ROR#24:CMP R10,#163:ANDEQ R8,R8,R11,ROR#8 14090AND R10,R5,R8,ROR#16:CMP R10,#204:ANDEQ R8,R8,R11,ROR#16 14100AND R10,R5,R8,ROR#8:CMP R10,#205:ANDEQ R8,R8,R11,ROR#24 14110AND R10,R5,R9:CMP R10,#162:ANDEQ R9,R9,R11 14120AND R10,R5,R9,ROR#8:CMP R10,#161:ANDEQ R9,R9,R11,ROR#24 14130AND R10,R5,R9,ROR#16:CMP R10,#160:ANDEQ R9,R9,R11,ROR#16 14140STMIA R2,{R6-R9} 14150MOV PC,R14 14160.eg_showyouwithoutmask 14170FNadr (10,bgdat) 14180LDR R1,[R12,#16]:MOV R2,#7<<10:AND R0,R2,R3,ASL#10:ADD R0,R1,R0:MOV R1,R11 14190LDR R11,[R10,#-12] 14200LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14210LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14220LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14230LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14240LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14250LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14260LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14270LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 14280MOV PC,R14 14290.eg_wipeacr ADD R10,R12,#28:LDMIA R10,{R2-R9} 14300STMIA R11,{R2-R9}:ADD R11,R11,#320:STMIA R11,{R2-R9}:ADD R11,R11,#320 14310STMIA R11,{R2-R9}:ADD R11,R11,#320:STMIA R11,{R2-R9}:MOV PC,R14 14320.eg_sprwl 14330LDR R3,[R12,#104]:ADD R1,R3,R2,ASL#10:MOV R2,#16 14340.lspwa LDMIA R1!,{R3-R10}:STMIA R0,{R3-R10}:ADD R0,R0,#320:SUBS R2,R2,#1:BNE lspwa:MOV PC,R14 14350.eg_wipedwn MOV R2,#0 14360STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368: 14370STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368: 14380STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:MOV PC,R14 14390.eg_sprwh 14400LDR R3,[R12,#104]:ADD R1,R3,R2,ASL#10:ADD R1,R1,#512:MOV R2,#32 14410.lspwd LDMIA R1!,{R3-R6}:STMIA R0,{R3-R6}:ADD R0,R0,#368:SUBS R2,R2,#1:BNE lspwd:MOV PC,R14 14420.botty EQUD bspau% 14430.pauseprint ADR R1,botty:LDR R1,[R1]:MOV R2,#64 14440.lpapr LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12} 14450LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12} 14460LDMIA R1!,{R3-R7}:STMIA R0!,{R3-R7}:ADD R0,R0,#220:SUBS R2,R2,#1:BNE lpapr 14470MOV PC,R14 14480.pausewipe FNsadr(1,bgame):ADD R1,R1,#28:LDMIA R1,{R2-R12}:MOV R1,#64 14490.lpawp STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R7} 14500ADD R0,R0,#220:SUBS R1,R1,#1:BNE lpawp 14510MOV PC,R14 14520: 14530]:NEXT 14540ENDPROC 14550: 14560DEFPROCeditor 14570GCOL0TINT0 14580vlevl%=1:A%=0:CALL efade 14590FOR lldwn%=1024 TO 768 STEP -4 14600SYS "OS_SpriteOp",34+256,bspri%,"editor",0,lldwn%,0 14610WAIT:NEXT 14620PROCprint("DO YOU WANT TO EDIT ",0,500) 14630PROCprint("THE EXISTING LEVELS ",0,436) 14640PROCprint("-PRESS ""O""- OR PRESS",0,372) 14650PROCprint("""N"" TO CREATE NEW ",0,308) 14660PROCprint("SOME NEW LEVELS. ",0,244):*FX21,0 14670REPEAT 14680ckeyp$=FNcaps(GET$) 14690UNTIL ckeyp$="O" OR ckeyp$="N" 14700IF ckeyp$="N" THEN PROCnewlevels ELSE IF FNeditcode THEN CALL efade:ENDPROC 14710FOR lsoff%=1TO73 14720RECTANGLE 0,0,1280,580 TO 0,-8 14730WAIT:NEXT 14740PROCprint("HELP PAGE",608,980) 14750FOR llacr%=-184 TO 180 STEP 4 14760SYS "OS_SpriteOp",34+256,bspri%,"mouse",llacr%,346,0 14770WAIT:NEXT 14780FOR llacr%=-184 TO 0 STEP 4 14790SYS "OS_SpriteOp",34+256,bspri%,"mouse",llacr%,32,0 14800WAIT:NEXT 14810PROCprint("WHILE IN A",478,706) 14820PROCprint("WALL SPACE",478,644) 14830PROCprint("IN A SQUARE",462,286) 14840PROCprint("PLACE A WALL",376,506) 14850PROCprint("IMMOVABLE WALL",376,442) 14860PROCprint("REMOVE WALL",376,378) 14870PROCprint("PLACE OBJECT",192,192) 14880PROCprint("DO NOWT",192,128) 14890PROCprint("REMOVE OBJECT",192,64) 14900PROCprint("CLICK MOUSE",540,900) 14910PROCprint("TO CONTINUE",540,836):*FX21,9 14920REPEAT 14930MOUSE xdumy%,xdumy%,xbutt% 14940UNTIL xbutt%>0 14950REPEAT 14960CALL efade 14970PROCprintmap(TRUE) 14980MOUSE ON:vptrn%=1:PROCnextptr 14990SYS "OS_SpriteOp",256+34,bspri%,"editbar",0,960,0 15000SYS "OS_SpriteOp",256+34,bspri%,"editnumbersn",0,320,0 15010SYS "OS_SpriteOp",256+34,bspri%,"editobjects",0,508,0 15020PROCprint(STR$(blevs%?(13583+vlevl%)),204,1016) 15030PROCprint(STR$(vlevl%),640,1016) 15040boxup%=0:boxdn%=-1:boxan%=1 15050PROCanimbox:fexit%=FALSE:fdraw%=TRUE:*FX21,9 15060REPEAT 15070MOUSE mousx%,mousy%,mousb% 15080IF mousb%>0 THEN 15090IF mousx%<180 AND mousy%>508 AND mousy%<600 THEN PROCselobj 15100IF mousx%<180 AND mousy%<500 AND mousy%>320 AND boxdn%>-1 THEN PROCselno 15110IF mousy%>960 THEN PROCbarclix 15120IF mousx%>176 AND mousy%>16 AND mousx%<1100 AND mousy%<940 THEN PROClevclix 15130ENDIF 15140IF NOT fexit% THEN PROCanimbox:PROCnextptr 15150WAIT 15160UNTIL fexit% 15170UNTIL fdraw% 15180MOUSE OFF 15190CALL efade 15200ENDPROC 15210: 15220DEFPROCbarclix 15230IF mousx%>132 AND mousx%<184 THEN PROCtime_up:ENDPROC 15240IF mousx%>396 AND mousx%<452 THEN PROCtime_down:ENDPROC 15250IF mousx%>576 AND mousx%<628 THEN PROClevel_up:ENDPROC 15260IF mousx%>1160 THEN PROCehelp:ENDPROC 15270IF mousx%>1048 THEN PROCopts:ENDPROC 15280IF mousx%>936 THEN PROChigh:ENDPROC 15290IF mousx%>824 THEN PROCpass:ENDPROC 15300IF mousx%>772 THEN PROClevel_down:ENDPROC 15310ENDPROC 15320: 15330DEFPROCtime_up 15340fsave%=TRUE 15350blevs%?(13583+vlevl%)+=1 15360PROCprint(FNpad(STR$(blevs%?(13583+vlevl%)),3),204,1016) 15370ENDPROC 15380: 15390DEFPROCtime_down 15400fsave%=TRUE 15410blevs%?(13583+vlevl%)-=1 15420PROCprint(FNpad(STR$(blevs%?(13583+vlevl%)),3),204,1016) 15430ENDPROC 15440: 15450DEFPROClevel_up 15460vlevl%+=1:IF vlevl%=17 THEN vlevl%=1 15470CALL efade 15480PROCprintmap(TRUE) 15490SYS "OS_SpriteOp",256+34,bspri%,"editbar",0,960,0 15500IF boxdn%>-1 THEN SYS "OS_SpriteOp",256+34,bspri%,"editnumbersy",0,320,0 ELSE SYS "OS_SpriteOp",256+34,bspri%,"editnumbersn",0,320,0 15510SYS "OS_SpriteOp",256+34,bspri%,"editobjects",0,508,0 15520PROCprint(STR$(blevs%?(13583+vlevl%)),204,1016) 15530PROCprint(STR$(vlevl%),640,1016):*FX21,9 15540ENDPROC 15550: 15560DEFPROClevel_down 15570vlevl%-=1:IF vlevl%=0 THEN vlevl%=16 15580CALL efade 15590PROCprintmap(TRUE) 15600SYS "OS_SpriteOp",256+34,bspri%,"editbar",0,960,0 15610IF boxdn%>-1 THEN SYS "OS_SpriteOp",256+34,bspri%,"editnumbersy",0,320,0 ELSE SYS "OS_SpriteOp",256+34,bspri%,"editnumbersn",0,320,0 15620SYS "OS_SpriteOp",256+34,bspri%,"editobjects",0,508,0 15630PROCprint(STR$(blevs%?(13583+vlevl%)),204,1016) 15640PROCprint(STR$(vlevl%),640,1016):*FX21,9 15650ENDPROC 15660: 15670DEFPROCehelp 15680MOUSE OFF 15690CALL efade 15700SYS "OS_SpriteOp",34+256,bspri%,"editor",0,768,0 15710PROCprint("HELP PAGE",608,980) 15720SYS "OS_SpriteOp",34+256,bspri%,"mouse",180,346,0 15730SYS "OS_SpriteOp",34+256,bspri%,"mouse",0,32,0 15740PROCprint("WHILE IN A",478,706) 15750PROCprint("WALL SPACE",478,644) 15760PROCprint("IN A SQUARE",462,286) 15770PROCprint("PLACE A WALL",376,506) 15780PROCprint("IMMOVABLE WALL",376,442) 15790PROCprint("REMOVE WALL",376,378) 15800PROCprint("PLACE OBJECT",192,192) 15810PROCprint("DO NOWT",192,128) 15820PROCprint("REMOVE OBJECT",192,64) 15830PROCprint("CLICK MOUSE",540,900) 15840PROCprint("TO CONTINUE",540,836):*FX21,9 15850REPEAT 15860MOUSE xdumy%,xdumy%,xbutt% 15870UNTIL xbutt%>0 15880fexit%=TRUE:fdraw%=FALSE 15890ENDPROC 15900: 15910DEFPROCpass 15920MOUSE OFF 15930CALL efade 15940fexit%=TRUE:fdraw%=FALSE 15950PROCprint("THE CURRENT PASSWORD",0,800) 15960PROCprint("FOR THIS LEVEL IS : ",0,736) 15970PROCprint(" <"+FNgetlnstr(blevs%+96+10*vlevl%,10)+"> ",0,672) 15980PROCprint("PRESS C TO CHANGE OR",0,608) 15990PROCprint("R TO RETURN TO EDIT.",0,544):*FX21,0 16000REPEAT 16010ckeyp$=FNcaps(GET$) 16020UNTIL ckeyp$="C" OR ckeyp$="R" 16030IF ckeyp$="R" THEN ENDPROC 16040fsave%=TRUE 16050PROCprint(" ",0,800) 16060PROCprint("PLEASE INPUT THE NEW",0,736) 16070PROCprint(" PASSWORD ",0,672) 16080PROCprint(" > < ",0,608) 16090PROCprint(" ",0,544):*FX21,0 16100PROCputstr(FNpad(FNinput(320,608,32,90,10),10),blevs%+96+10*vlevl%) 16110ENDPROC 16120: 16130DEFPROCopts 16140fexit%=TRUE 16150fdraw%=FALSE 16160MOUSE OFF:CALL efade 16170SYS "OS_SpriteOp",34+256,bspri%,"editor",0,768,0 16180PROCprint("OPTIONS",638,960) 16190PROCprint("A> SAVE LEVELS ",0,746) 16200PROCprint("B> LOAD NEW LEVELS ",0,682) 16210PROCprint("C> IMPORT A LEVEL ",0,618) 16220PROCprint("D> SWAP TWO LEVELS ",0,554) 16230PROCprint("E> COPY A LEVEL ",0,490) 16240PROCprint("F> CHANGE EDIT CODE ",0,426) 16250PROCprint("G> CHANGE FILE NAME ",0,362) 16260PROCprint("H> CHANGE SET TITLE ",0,298) 16270PROCprint("I> RETURN TO EDITOR ",0,234) 16280PROCprint("J> QUIT BSE ",0,170) 16290PROCprint(" PLEASE PRESS A KEY ",0,64):*FX21,0 16300REPEAT 16310ckeyp$=FNcaps(GET$) 16320UNTIL ASC(ckeyp$)>64 AND ASC(ckeyp$)<75 16330CASE (ckeyp$) OF 16340WHEN "A": fsave%=TRUE:PROCsave 16350WHEN "B": PROCsave:PROCload 16360WHEN "C": PROCimport 16370WHEN "D": PROCswaplevs 16380WHEN "E": PROCcopylev 16390WHEN "F": PROCnewedit:fsave%=TRUE 16400WHEN "G": PROCnewfile:fsave%=TRUE 16410WHEN "H": PROCnewtitle:fsave%=TRUE 16420WHEN "J": fdraw%=TRUE 16430ENDCASE 16440ENDPROC 16450: 16460DEFPROCimport 16470fsave%=TRUE:GCOL0TINT0 16480RECTANGLE FILL 0,0,1280,750 16490PROCprint("TELL ME THE FILE TO ",0,500) 16500PROCprint("GET THE LEVEL FROM.",0,436) 16510PROCprint(" > < ",0,372) 16520fnlev$="<BombLevels$Dir>."+FNinput(320,372,33,90,10) 16530PROCprint("PLEASE TYPE THE EDIT",0,500) 16540PROCprint(" CODE FOR THAT SET. ",0,436) 16550PROCprint(" > < ",0,372) 16560xedit$=FNpad(FNinput(320,372,32,90,10),10) 16570REPEAT 16580PROCprint(" WHICH LEVEL DO YOU ",0,500) 16590PROCprint("WANT FROM THIS FILE?",0,436) 16600PROCprint(" > < ",0,372) 16610xlsrc%=VAL(FNinput(576,372,48,57,2)) 16620UNTIL xlsrc%>0 AND xlsrc%<17 16630REPEAT 16640PROCprint(" WHICH LEVEL DO YOU ",0,500) 16650PROCprint(" WANT TO MAKE IT? ",0,436) 16660PROCprint(" > < ",0,372) 16670xldst%=VAL(FNinput(576,372,48,57,2)) 16680UNTIL xldst%>0 AND xldst%<17 16690VDU 28,0,1,39,0 16700hfile%=OPENUP fnlev$ 16710IF hfile%=0 THEN PROCprint(" THAT FILE DOES NOT ",0,500):PROCprint(" EXIST. ",0,436):PROCprint(" ",0,372):PROCwait(30):ENDPROC 16720CLOSE#hfile%:OSCLI"Load "+fnlev$+" "+STR$~(bmess%) 16730SYS "BS_Encrypt",handl%,bmess%+4,13596 16740PROCputstr(FNgetlnstr(bmess%+264+xlsrc%*2,2),blevs%+264+xldst%*2) 16750PROCputstr(FNgetlnstr(bmess%+96+xlsrc%*10,10),blevs%+96+xldst%*10) 16760blevs%?(13583+xldst%)=bmess%?(13583+xlsrc%) 16770FOR lcopy%=0TO829STEP4 16780blevs%!(lcopy%+300+xldst%*830-830)=bmess%!(lcopy%+300+xlsrc%*830-830) 16790NEXT 16800ENDPROC 16810: 16820DEFPROCcopylev 16830REPEAT 16840fsave%=TRUE:GCOL0TINT0 16850RECTANGLE FILL 0,0,1280,750 16860PROCprint("INPUT THE NUMBER OF ",0,500) 16870PROCprint(" THE SOURCE LEVEL. ",0,436) 16880PROCprint(" > < ",0,372) 16890xlsrc%=VAL(FNinput(576,372,48,57,2)) 16900UNTIL xlsrc%>0 AND xlsrc%<17 16910REPEAT 16920RECTANGLE FILL 0,0,1280,750 16930PROCprint("INPUT THE NUMBER OF ",0,500) 16940PROCprint("THE DESTINATION LEV.",0,436) 16950PROCprint(" > < ",0,372) 16960xldst%=VAL(FNinput(576,372,48,57,2)) 16970UNTIL xldst%>0 AND xldst%<17 16980PROCputstr(FNgetlnstr(blevs%+264+xlsrc%*2,2),blevs%+264+xldst%*2) 16990PROCputstr(FNgetlnstr(blevs%+96+xlsrc%*10,10),blevs%+96+xldst%*10) 17000blevs%?(13583+xldst%)=blevs%?(13583+xlsrc%) 17010FOR lcopy%=0TO829STEP4 17020blevs%!(lcopy%+300+xldst%*830-830)=blevs%!(lcopy%+300+xlsrc%*830-830) 17030NEXT 17040ENDPROC 17050: 17060DEFPROCswaplevs 17070REPEAT 17080fsave%=TRUE:GCOL0TINT0 17090RECTANGLE FILL 0,0,1280,750 17100PROCprint("INPUT THE NUMBER OF ",0,500) 17110PROCprint(" ONE OF THE LEVELS. ",0,436) 17120PROCprint(" > < ",0,372) 17130xlsrc%=VAL(FNinput(576,372,48,57,2)) 17140UNTIL xlsrc%>0 AND xlsrc%<17 17150REPEAT 17160RECTANGLE FILL 0,0,1280,750 17170PROCprint("INPUT THE NUMBER OF ",0,500) 17180PROCprint(" THE OTHER LEVEL. ",0,436) 17190PROCprint(" > < ",0,372) 17200xldst%=VAL(FNinput(576,372,48,57,2)) 17210UNTIL xldst%>0 AND xldst%<17 17220xtemp$=FNgetlnstr(blevs%+264+xldst%*2,2) 17230PROCputstr(FNgetlnstr(blevs%+264+xlsrc%*2,2),blevs%+264+xldst%*2) 17240PROCputstr(xtemp$,blevs%+264+xlsrc%*2) 17250xtemp$=FNgetlnstr(blevs%+96+xldst%*10,10) 17260PROCputstr(FNgetlnstr(blevs%+96+xlsrc%*10,10),blevs%+96+xldst%*10) 17270PROCputstr(xtemp$,blevs%+96+xlsrc%*10) 17280SWAP blevs%?(13583+xldst%),blevs%?(13583+xlsrc%) 17290FOR lcopy%=0TO829STEP4 17300SWAP blevs%!(lcopy%+300+xldst%*830-830),blevs%!(lcopy%+300+xlsrc%*830-830) 17310NEXT 17320ENDPROC 17330: 17340DEFPROCnewedit 17350GCOL0TINT0 17360RECTANGLE FILL 0,0,1280,750 17370PROCprint(" INPUT THE NEW EDIT ",0,500) 17380PROCprint("CODE FOR THE LEVELS.",0,436) 17390PROCprint(" > < ",0,372) 17400PROCputstr(FNpad(FNinput(320,372,32,90,10),10),blevs%+96) 17410ENDPROC 17420: 17430DEFPROCnewfile 17440GCOL0TINT0 17450RECTANGLE FILL 0,0,1280,750 17460PROCprint(" PLEASE GIVE A FILE ",0,500) 17470PROCprint("NAME FOR THE LEVELS.",0,436) 17480PROCprint(" > < ",0,372) 17490flevs$="<BombLevels$Dir>."+FNinput(320,372,33,90,20) 17500ENDPROC 17510: 17520DEFPROCnewtitle 17530GCOL0TINT0 17540RECTANGLE FILL 0,0,1280,750 17550PROCprint("GIVE THESE LEVELS A ",0,500) 17560PROCprint(" TITLE, PLEASE ",0,436) 17570PROCprint("> <",0,372) 17580PROCputstr(FNpad(FNinput(0,372,32,90,20),20),blevs%+76) 17590ENDPROC 17600: 17610DEFPROCnewlevels 17620RECTANGLE FILL 0,0,1280,510 17630PROCsave 17640$blevs%="BOMBHIGHSCORE HIGHSCORE HIGHSCORE HIGHSCORE HIGHSCORE "+STRING$(20,CHR$0)+"##LEVELLEVELLEVELLEVELEDITCODE " 17650$(blevs%+106)="PASSWORD-1PASSWORD-2PASSWORD-3PASSWORD-4PASSWORD-5PASSWORD-6PASSWORD-7PASSWORD-8PASSWORD-9PASSWORD-APASSWORD-BPASSWORD-CPASSWORD-DPASSWORD-EPASSWORD-FPASSWORD-0" 17660A%=blevs%+266 17670B%=13334 17680CALL ezero 17690PROCnewedit 17700PROCnewfile 17710PROCnewtitle 17720fsave%=TRUE 17730ENDPROC 17740: 17750DEFPROCsave 17760IF fsave% THEN 17770 VDU 28,0,5,39,0 17780 SYS "BS_Decrypt",handl%,blevs%+4,13596 17790 SYS "XOS_CLI","Save "+flevs$+" "+STR$~(blevs%)+" "+STR$~(blevs%+13600) TO ;psr 17800 IF (psr AND 1) THEN 17810 PRINT"WARNING - could not be saved"'"Press a key":kludgeypoo=GET 17820 ELSE 17830 OSCLI "SetType "+flevs$+" 0C9" 17840 ENDIF 17850 SYS "BS_Encrypt",handl%,blevs%+4,13596 17860ENDIF 17870ENDPROC 17880: 17890DEFPROCload 17900A%=0:CALL efade 17910PROCprint("PLEASE INPUT NAME OF",0,600) 17920PROCprint(" THE LEVELS FILE. ",0,536) 17930PROCprint(" > < ",0,420) 17940flevs$="<BombLevels$Dir>."+FNinput(320,420,33,90,10) 17950VDU 28,0,1,39,0 17960hfile%=OPENUP flevs$ 17970IF hfile%>0 THEN 17980CLOSE#hfile% 17990OSCLI "Load "+flevs$+" "+STR$~(blevs%) 18000SYS "BS_Encrypt",handl%,blevs%+4,13596 18010ELSE 18020CALL efade 18030PROCprint(" THAT FILE DOES NOT ",0,580) 18040PROCprint(" EXIST. ",0,516) 18050PROCwait(30) 18060ENDIF 18070CALL efade 18080fsave%=FALSE 18090ENDPROC 18100: 18110DEFPROCwait(xwait%) 18120FOR xlwai%=1TO xwait% 18130WAIT:NEXT 18140ENDPROC 18150: 18160DEFPROChigh 18170fexit%=TRUE:fdraw%=FALSE 18180MOUSE OFF:CALL efade 18190FOR lscor%=0TO4 18200PROCprint(FNgetlnstr(blevs%+4+10*lscor%,10),0,936-lscor%*64) 18210sscor$=STR$(blevs%!(54+lscor%*4)) 18220PROCprint(sscor$,1280-LEN(sscor$)*64,936-lscor%*64) 18230NEXT 18240PROCprint(" PRESS A NUMBER 1-5 ",0,450) 18250PROCprint(" TO EDIT THAT NAME, ",0,386) 18260PROCprint(" SHIFT AND 1-5 TO ",0,322) 18270PROCprint(" EDIT THE SCORE ",0,258) 18280PROCprint("OR PRESS R TO RETURN",0,194) 18290PROCprint(" TO EDITOR. ",0,130):*FX21,0 18300REPEAT 18310REPEAT 18320ckeyp%=INSTR("12345!@#$%R",FNcaps(GET$)) 18330UNTIL ckeyp%>0 18340IF ckeyp%=11 THEN UNTIL TRUE:ENDPROC 18350IF ckeyp%<6 THEN PROCeditname(ckeyp%) 18360IF ckeyp%>5 THEN PROCeditscore(ckeyp%-5) 18370UNTIL FALSE 18380: 18390DEFPROCeditname(xhnum%) 18400fsave%=TRUE 18410PROCprint("> <",0,1000-xhnum%*64) 18420PROCputstr(FNpad(FNinput(64,1000-xhnum%*64,32,90,10),10),blevs%-6+xhnum%*10) 18430PROCprint(FNgetlnstr(blevs%-6+10*xhnum%,10)+" ",0,1000-xhnum%*64) 18440ENDPROC 18450: 18460DEFPROCeditscore(xhnum%) 18470fsave%=TRUE 18480PROCprint("> <",640,1000-xhnum%*64) 18490!(blevs%+50+xhnum%*4)=VAL(FNinput(704,1000-xhnum%*64,48,57,8)) 18500sscor$=STR$(blevs%!(50+xhnum%*4)) 18510GCOL 0 TINT 0:RECTANGLE FILL 640,940-xhnum%*64,640,64 18520PROCprint(sscor$,1280-LEN(sscor$)*64,1000-xhnum%*64) 18530ENDPROC 18540: 18550DEFPROCputstr(xpstr$,xpmem%) 18560FOR xlmem%=0TO LEN(xpstr$)-1 18570xpmem%?xlmem%=ASC(MID$(xpstr$,xlmem%+1,1)) 18580NEXT 18590ENDPROC 18600: 18610DEFPROClevclix 18620relmx%=(mousx%-180)DIV8:relmy%=(mousy%-20)DIV8 18630sqnox%=relmx% DIV7:sqnoy%=(114-relmy%)DIV7 18640IF (relmx% MOD7)<3 AND (relmy% MOD7)<3 THEN ENDPROC 18650IF (relmx% MOD7)<3 THEN PROCvertclix:ENDPROC 18660IF (relmy% MOD7)<3 THEN PROChorzclix:ENDPROC 18670PROCsquareclix:ENDPROC 18680: 18690DEFPROChorzclix 18700fsave%=TRUE 18710IF (mousb%AND2) THEN xwall%=2 18720IF (mousb%AND4) THEN xwall%=1 18730IF (mousb%AND1) THEN xwall%=0 18740blevs%?(304+(vlevl%-1)*830+sqnox%+sqnoy%*16)=xwall% 18750CASE xwall% OF 18760WHEN 0: SYS "OS_SpriteOp",34+256,bspri%,"wallhoriblnk",sqnox%*56+204,916-sqnoy%*56,0 18770WHEN 1: SYS "OS_SpriteOp",34+256,bspri%,"wallhorimove",sqnox%*56+204,916-sqnoy%*56,0 18780WHEN 2: SYS "OS_SpriteOp",34+256,bspri%,"wallhoristuk",sqnox%*56+204,916-sqnoy%*56,0 18790ENDCASE 18800ENDPROC 18810: 18820DEFPROCvertclix 18830fsave%=TRUE 18840IF (mousb%AND2) THEN xwall%=2 18850IF (mousb%AND4) THEN xwall%=1 18860IF (mousb%AND1) THEN xwall%=0 18870blevs%?(576+(vlevl%-1)*830+sqnoy%+sqnox%*16)=xwall% 18880CASE xwall% OF 18890WHEN 0: SYS "OS_SpriteOp",34+256,bspri%,"wallvertblnk",sqnox%*56+180,884-sqnoy%*56,0 18900WHEN 1: SYS "OS_SpriteOp",34+256,bspri%,"wallvertmove",sqnox%*56+180,884-sqnoy%*56,0 18910WHEN 2: SYS "OS_SpriteOp",34+256,bspri%,"wallvertstuk",sqnox%*56+180,884-sqnoy%*56,0 18920ENDCASE 18930ENDPROC 18940: 18950DEFPROCsquareclix 18960fsave%=TRUE 18970IF mousb%=1 THEN xobjn%=0 ELSE xobjn%=FNbtd(boxup%) 18980IF boxup%=7 THEN 18990SWAP blevs%?(264+2*vlevl%),sqnox% 19000SWAP blevs%?(265+2*vlevl%),sqnoy% 19010xobjn%=blevs%?(848+(vlevl%-1)*830+16*sqnoy%+sqnox%) 19020ELSE 19030IF boxup%=5 OR boxup%=6 THEN xobjn%+=boxdn%*16 19040blevs%?(848+(vlevl%-1)*830+16*sqnoy%+sqnox%)=xobjn% 19050ENDIF 19060CASE (xobjn% AND %00001111) OF 19070WHEN 0: SYS "OS_SpriteOp",34+256,bspri%,"sqblank",sqnox%*56+204,884-sqnoy%*56,0 19080WHEN 1: SYS "OS_SpriteOp",34+256,bspri%,"sqbomb",sqnox%*56+204,884-sqnoy%*56,0 19090WHEN 2: SYS "OS_SpriteOp",34+256,bspri%,"sqmine",sqnox%*56+204,884-sqnoy%*56,0 19100WHEN 3: SYS "OS_SpriteOp",34+256,bspri%,"sqtransport",sqnox%*56+204,884-sqnoy%*56,0:SYS "OS_SpriteOp",34+256,bspri%,"over"+STR$~((xobjn% AND %11110000)>>4),sqnox%*56+204,884-sqnoy%*56,8 19110WHEN 4: SYS "OS_SpriteOp",34+256,bspri%,"sqblock",sqnox%*56+204,884-sqnoy%*56,0 19120WHEN 5: SYS "OS_SpriteOp",34+256,bspri%,"sqreceiver",sqnox%*56+204,884-sqnoy%*56,0:SYS "OS_SpriteOp",34+256,bspri%,"over"+STR$~((xobjn% AND %11110000)>>4),sqnox%*56+204,884-sqnoy%*56,8 19130WHEN 6: SYS "OS_SpriteOp",34+256,bspri%,"sqbonus",sqnox%*56+204,884-sqnoy%*56,0 19140ENDCASE 19150SYS "OS_SpriteOp",34+256,bspri%,"overstart",(blevs%?(264+2*vlevl%))*56+204,884-(blevs%?(265+2*vlevl%))*56,8 19160ENDPROC 19170: 19180DEFFNbtd(xnumb%) 19190CASE (xnumb%) OF 19200WHEN 0: =0 19210WHEN 1: =1 19220WHEN 2: =2 19230WHEN 3: =4 19240WHEN 4: =6 19250WHEN 5: =3 19260WHEN 6: =5 19270ENDCASE 19280=-1 19290: 19300DEFPROCselno 19310SYS "OS_SpriteOp",256+34,bspri%,"boxn",(boxdn% MOD 4)*44,452-(boxdn% DIV 4)*44,8 19320boxdn%=((mousx%-4)/44)+((mousy%<456)*-4)+((mousy%<408)*-4)+((mousy%<368)*-4) 19330ENDPROC 19340: 19350DEFPROCselobj 19360SYS "OS_SpriteOp",256+34,bspri%,"boxn",(boxup% MOD 4)*44,554-(boxup% DIV 4)*44,8 19370boxup%=((mousx%-4)/44)+((mousy%<554)*-4) 19380IF boxup%=5 OR boxup%=6 THEN 19390IF boxdn%=-1 THEN boxdn%=0:SYS "OS_SpriteOp",256+34,bspri%,"editnumbersy",0,320,0 19400ELSE IF boxdn%>-1 THEN boxdn%=-1:SYS "OS_SpriteOp",256+34,bspri%,"editnumbersn",0,320,0 19410ENDIF 19420ENDPROC 19430: 19440DEFPROCanimbox 19450boxan%=boxan% MOD4 +1 19460SYS "OS_SpriteOp",256+34,bspri%,"boxy"+STR$(boxan%),(boxup% MOD 4)*44,554-(boxup% DIV 4)*44,8 19470IF boxdn%=-1 THEN ENDPROC 19480SYS "OS_SpriteOp",256+34,bspri%,"boxy"+STR$(boxan%),(boxdn% MOD 4)*44,452-(boxdn% DIV 4)*44,8 19490ENDPROC 19500: 19510DEFPROCnextptr 19520SYS "OS_SpriteOp",256+36,bspri%,"ptr_bomb_"+STR$vptrn%,1,0,1 19530vptrn%=vptrn% MOD6 +1 19540ENDPROC 19550: 19560DEFFNeditcode 19570PROCprint("PLEASE INPUT THE ",0,500) 19580PROCprint("EDIT CODE FOR THIS ",0,436) 19590PROCprint("SET OF LEVELS. ",0,372) 19600PROCprint(" ",0,308) 19610PROCprint(" > < ",0,244) 19620IF (FNpad(FNinput(320,244,32,90,10),10)=FNgetlnstr(blevs%+96,10)) THEN 19630PROCprint(" < CORRECT! > ",0,244) 19640PROCwait(20) 19650=FALSE 19660ELSE 19670PROCprint(" < WRONG! > ",0,244) 19680PROCwait(20) 19690=TRUE 19700ENDIF 19710: 19720DEFFNinput(xposx%,xposy%,xminc%,xmaxc%,xlens%) 19730xsout$="":*FX21,0 19740REPEAT 19750key_kludge%=GET 19760IF key_kludge%>(ASC("a")-1) AND key_kludge%<(ASC("z")+1) THEN 19770 xckey$=CHR$(key_kludge%-32) 19780ELSE 19790 xckey$=CHR$(key_kludge%) 19800ENDIF 19810IF (xckey$=CHR$127 OR xckey$=CHR$8) AND LEN(xsout$)>0 THEN xsout$=LEFT$(xsout$,LEN(xsout$)-1):A%=32:B%=xposx%/4+LEN(xsout$)*16:C%=(1020-xposy%)/4:CALL epsml:UNTIL FALSE 19820IF xckey$=CHR$13 THEN UNTIL TRUE:=xsout$ 19830IF ASC(xckey$)<xminc% OR ASC(xckey$)>xmaxc% OR LEN(xsout$)=xlens% OR xckey$=CHR$127 OR xckey$=CHR$8 THEN UNTIL FALSE 19840A%=ASC(xckey$) 19850B%=xposx%/4+LEN(xsout$)*16 19860C%=(1020-xposy%)/4:CALL epsml 19870xsout$+=xckey$ 19880UNTIL FALSE 19890: 19900DEFFNpad(xstri$,xlens%) 19910=xstri$+STRING$(xlens%-LEN(xstri$),CHR$32) 19920: 19930DEFPROCprintmap(fprno%) 19940bomno%=0 19950SYS "OS_SpriteOp",256+60,bspri%,"SpriteOp60",0 19960CLS 19970FOR xlmdy%=0TO16 19980FOR xlmdx%=0TO16 19990SYS "OS_SpriteOp",34+256,bspri%,"MiddleBit",xlmdx%*56+180,xlmdy%*56+20,0 20000NEXT:NEXT 20010xplev%=blevs%+304+(vlevl%-1)*830 20020FOR xlhzy%=0TO16 20030FOR xlhzx%=0TO15 20040CASE ?xplev% OF 20050WHEN 1: SYS "OS_SpriteOp",34+256,bspri%,"wallhorimove",xlhzx%*56+204,916-xlhzy%*56,0 20060WHEN 2: SYS "OS_SpriteOp",34+256,bspri%,"wallhoristuk",xlhzx%*56+204,916-xlhzy%*56,0 20070ENDCASE 20080xplev%+=1:NEXT:NEXT 20090FOR xlvtx%=0TO16 20100FOR xlvty%=0TO15 20110CASE ?xplev% OF 20120WHEN 1: SYS "OS_SpriteOp",34+256,bspri%,"wallvertmove",xlvtx%*56+180,884-xlvty%*56,0 20130WHEN 2: SYS "OS_SpriteOp",34+256,bspri%,"wallvertstuk",xlvtx%*56+180,884-xlvty%*56,0 20140ENDCASE 20150xplev%+=1:NEXT:NEXT 20160FOR xlsqy%=0TO15 20170FOR xlsqx%=0TO15 20180CASE (?xplev% AND %00001111) OF 20190WHEN 1: SYS "OS_SpriteOp",34+256,bspri%,"sqbomb",xlsqx%*56+204,884-xlsqy%*56,0:bomno%+=1 20200WHEN 2: SYS "OS_SpriteOp",34+256,bspri%,"sqmine",xlsqx%*56+204,884-xlsqy%*56,0 20210WHEN 3: SYS "OS_SpriteOp",34+256,bspri%,"sqtransport",xlsqx%*56+204,884-xlsqy%*56,0:IF fprno% THEN SYS "OS_SpriteOp",34+256,bspri%,"over"+STR$~((?xplev% AND %11110000)>>4),xlsqx%*56+204,884-xlsqy%*56,8 20220WHEN 4: SYS "OS_SpriteOp",34+256,bspri%,"sqblock",xlsqx%*56+204,884-xlsqy%*56,0 20230WHEN 5: SYS "OS_SpriteOp",34+256,bspri%,"sqreceiver",xlsqx%*56+204,884-xlsqy%*56,0:IF fprno% THEN SYS "OS_SpriteOp",34+256,bspri%,"over"+STR$~((?xplev% AND %11110000)>>4),xlsqx%*56+204,884-xlsqy%*56,8 20240WHEN 6: SYS "OS_SpriteOp",34+256,bspri%,"sqbonus",xlsqx%*56+204,884-xlsqy%*56,0 20250ENDCASE 20260xplev%+=1 20270NEXT:NEXT 20280IF fprno% THEN SYS "OS_SpriteOp",34+256,bspri%,"overstart",(blevs%?(264+2*vlevl%))*56+204,884-(blevs%?(265+2*vlevl%))*56,8 20290SYS "OS_SpriteOp",256+60,bspri%,0,0 20300SYS "OS_SpriteOp",256+34,bspri%,"SpriteOp60",0,0,0 20310ENDPROC 20320: 20330DEFFNpassword 20340A%=0:CALL efade 20350PROCprint(" PLEASE INPUT THE ",0,600) 20360PROCprint(" PASSWORD FOR THE ",0,536) 20370PROCprint(" LEVEL TO PLAY. ",0,472) 20380PROCprint(" > < ",0,408) 20390xpass$=FNpad(FNinput(320,408,32,90,10),10) 20400xrlev%=-1 20410FOR xllev%=1TO16 20420IF xpass$=FNgetlnstr(blevs%+96+10*xllev%,10) THEN xrlev%=xllev% 20430NEXT 20440IF xrlev%=-1 THEN PROCprint(" >NO SUCH PASSWORD< ",0,408):PROCwait(30):=1 20450PROCprint(" < LEVEL "+FNpad(STR$(xrlev%),2)+" > ",0,408) 20460PROCwait(30) 20470=xrlev% 20480: 20490DEFPROCoptions 20500SYS "OS_SpriteOp",256+34,bspri%,"logo",640-288*2,1024-42*4 20510PROCprint(" MUSIC VOLUME LEVEL ",0,840) 20520SYS "OS_SpriteOp",256+34,bspri%,"dragbox",108,708 20530PROCprint("EFFECTS VOLUME LEVEL",0,692) 20540SYS "OS_SpriteOp",256+34,bspri%,"dragbox",108,560 20550PROCprint("LEFT "+FNkey(MID$(klist$,1,1)),0,542) 20560PROCprint("RIGHT "+FNkey(MID$(klist$,2,1)),0,478) 20570PROCprint("UP "+FNkey(MID$(klist$,3,1)),0,414) 20580PROCprint("DOWN "+FNkey(MID$(klist$,4,1)),0,350) 20590PROCprint("PAUSE "+FNkey(MID$(klist$,5,1)),0,286) 20600PROCprint("ABORT "+FNkey(MID$(klist$,6,1)),0,222) 20610FOR lpbut%=0TO5 20620SYS "OS_SpriteOp",256+34,bspri%,"redefinebox",384,490-64*lpbut%,0 20630NEXT 20640SYS "OS_SpriteOp",256+34,bspri%,"savebox",1152,226,0 20650SYS "OS_SpriteOp",256+34,bspri%,"quitbox",1152,162,0 20660GCOL9TINT0:RECTANGLE FILL 128,580,veffx%*4,20 20670RECTANGLE FILL 128,728,vmusx%*4,20 20680MOUSE ON:vptrn%=1:PROCnextptr:fofin%=FALSE:keyno%=-1:OSCLI"FX21,9":*FX21,0 20690REPEAT 20700CALL edscr 20710MOUSE mousx%,mousy%,mousz% 20720IF mousx%>124 AND mousx%<1152 AND mousy%>724 AND mousy%<752 AND mousz%>0 THEN PROCmusvol 20730IF mousx%>124 AND mousx%<1152 AND mousy%>576 AND mousy%<604 AND mousz%>0 THEN PROCfxvol 20740IF mousx%>1148 AND mousy%>162 AND mousy%<222 AND mousz%>0 THEN fofin%=TRUE 20750IF mousx%>1148 AND mousy%>222 AND mousy%<290 AND mousz%>0 THEN PROCsaveopts 20760IF mousx%>380 AND mousx%<448 AND mousy%<554 AND mousy%>166 AND mousz%>0 THEN PROCkeybut 20770ckeyp$=INKEY$(0) 20780IF ckeyp$<>"" AND keyno%>-1 THEN PROCkeyprs 20790WAIT 20800UNTIL fofin% 20810MOUSE OFF 20820A%=42:CALL efade 20830ENDPROC 20840: 20850DEFPROCmusvol 20860IF mousx%>128+vmusx%*4 THEN GCOL9TINT0 ELSE GCOL0TINT0 20870RECTANGLE FILL 128+vmusx%*4,728,mousx%-128-vmusx%*4,20 20880vmusx%=(mousx%-128)/4 20890SYS "Coco_Volume",255-vmusx% 20900ENDPROC 20910: 20920DEFPROCkeybut 20930nkyno%=(614-mousy%)/64-1 20940IF nkyno%=keyno% THEN ENDPROC 20950IF keyno%>-1 THEN PROCprint(FNkey(MID$(klist$,keyno%+1,1)),512,542-64*keyno%) 20960keyno%=nkyno% 20970GCOL0TINT0 20980RECTANGLE FILL 512,490-64*keyno%,576,60 20990SYS "OS_SpriteOp",256+34,bspri%,"typebox",512,490-64*keyno%,0 21000ENDPROC 21010: 21020DEFPROCkeyprs 21030MID$(klist$,keyno%+1,1)=FNkeyprc(ckeyp$) 21040PROCprint(FNkey(MID$(klist$,keyno%+1,1)),512,542-64*keyno%) 21050keyno%=-1 21060ENDPROC 21070: 21080DEFPROCfxvol 21090IF mousx%>128+veffx%*4 THEN GCOL9TINT0 ELSE GCOL0TINT0 21100RECTANGLE FILL 128+veffx%*4,580,mousx%-128-veffx%*4,20 21110veffx%=(mousx%-128)/4 21120ENDPROC 21130: 21140DEFFNadr(rx,add%) 21150ad%=add%-8-P% 21160[OPTfpass% 21170ADD rx,PC,#ad% AND 255 21180ADD rx,rx,#ad% AND 255<<8 21190ADD rx,rx,#ad% AND 255<<16 21200ADD rx,rx,#ad% AND 255<<24 21210]:=fpass% 21220: 21230DEFFNsadr(rx,add%) 21240ad%=P%+8-add%:IF ad%>65535 THEN END 21250[OPTfpass% 21260SUB rx,PC,#ad% AND 255 21270SUB rx,rx,#ad% AND 255<<8 21280]:=fpass% 21290: 21300DEFFNsfadr(rx,add%) 21310ad%=add%-8-P%:IF ad%>65535 THEN END 21320[OPTfpass% 21330ADD rx,PC,#ad% AND 255 21340ADD rx,rx,#ad% AND 255<<8 21350]:=fpass% 21360: 21370DEFPROCsaveopts 21380hfile%=OPENOUT "<Obey$Dir>.Resources.Options" 21390PRINT#hfile%,klist$ 21400PRINT#hfile%,vmusx% 21410PRINT#hfile%,veffx% 21420CLOSE#hfile% 21430ENDPROC 21440: 21450DEFFNkey(xxkey$) 21460IF ASC(xxkey$)=13 THEN ="RETURN" 21470IF ASC(xxkey$)=127 THEN ="DELETE" 21480IF ASC(xxkey$)=9 THEN ="TAB" 21490IF ASC(xxkey$)=8 THEN ="BACKSPACE" 21500IF ASC(xxkey$)=30 THEN ="HOME" 21510IF ASC(xxkey$)=32 THEN ="SPACE" 21520=xxkey$ 21530: 21540DEFFNkeyprc(xxkey$) 21550IF xxkey$="!" THEN ="1" 21560IF xxkey$="@" THEN ="2" 21570IF xxkey$="#" THEN ="3" 21580IF xxkey$="$" THEN ="4" 21590IF xxkey$="%" THEN ="5" 21600IF xxkey$="^" THEN ="6" 21610IF xxkey$="&" THEN ="7" 21620IF xxkey$="*" THEN ="8" 21630IF xxkey$="(" THEN ="9" 21640IF xxkey$=")" THEN ="0" 21650IF xxkey$="_" THEN ="-" 21660IF xxkey$="+" THEN ="=" 21670IF xxkey$=":" THEN =";" 21680IF xxkey$="""" THEN ="'" 21690IF xxkey$="<" THEN ="," 21700IF xxkey$=">" THEN ="." 21710IF xxkey$="?" THEN ="/" 21720IF ASC(xxkey$)<32 AND ASC(xxkey$)<>8 AND ASC(xxkey$)<>9 AND ASC(xxkey$)<>13 AND ASC(xxkey$)<>30 THEN =STR$(keyno%+1) 21730IF ASC(xxkey$)=8 OR ASC(xxkey$)=9 OR ASC(xxkey$)=13 OR ASC(xxkey$)=30 OR ASC(xxkey$)=127 THEN =xxkey$ 21740IF ASC(xxkey$)>96 AND ASC(xxkey$)<123 THEN =CHR$(ASC(xxkey$)-32) 21750IF INSTR("1234567890-=QWERTYUIOPASDFGHJKL;'ZXCVBNM,./ ",xxkey$)=0 THEN =STR$(keyno%+1) 21760=xxkey$ 21770: 21780DEFPROCcomplete 21790MODE kludge_mode:SYS "OS_RemoveCursors" 21800SYS "OS_SpriteOp",256+34,bspri%,"Congrats",640-606,512-240+kludge_modeofs 21810SYS "OS_SpriteOp",256+34,bspri%,"0medals",80,0+kludge_modeofs 21820PROCwait(200):medals%=INT((16-gslev%)/3) 21830SYS "OS_SpriteOp",256+34,bspri%,STR$(medals%)+"MedMes",286,30+kludge_modeofs 21840SYS "Coco_Stop" 21850IF medals%>0 THEN 21860VOICE 1,"BSgetbomb" 21870PROCwait(30):FOR lmedl%=1TO medals%:PROCwait(50) 21880SYS "OS_SpriteOp",256+34,bspri%,STR$(lmedl%)+"Medals",80,0+kludge_modeofs 21890SOUND1,-15,10000,10:NEXT 21900ENDIF 21910PROCwait(200) 21920CALL ecfad 21930ENDPROC 21940: 21950DEFPROCgame(vlevl%) 21960gslev%=vlevl%:medals%=-1 21970$bgame=klist$ 21980A%=0:CALL efade 21990fgend%=0:rgend%=0 22000glife%=3:gscor%=0 22010: 22020REM Game loop 22030: 22040PROCfadeout:SYS "Coco_Move",54:SYS "Coco_SeqStart",54:SYS "Coco_Volume",0 22050REPEAT 22060PROCprintmap(FALSE) 22070PROCprint(" LEVEL "+STR$(vlevl%)+" ",0,1020):*FX21,0 22080gtime%=blevs%?(13583+vlevl%):lwait%=0:REPEAT 22090lwait%+=1:WAIT 22100ckeyp$=INKEY$(1) 22110UNTIL lwait%=gtime%*3 OR ckeyp$<>"" 22120CALL efade 22130IF ckeyp$=CHR$128 AND frog=0 AND vlevl%<16 THEN vlevl%+=1:UNTIL0 22140IF ckeyp$<>" " THEN 22150MODE kludge_mode:SYS "OS_RemoveCursors" 22160SYS "OS_SpriteOp",256+34,bspri%,"PasswordIs",640-556,256-35+kludge_modeofs 22170PROCwait(80) 22180CALL ecfad 22190MODE13:SYS "OS_RemoveCursors" 22200PROCprint(" "+FNgetlnstr(blevs%+96+10*vlevl%,10)+" ",0,608):*FX21,0 22210lwait%=0:REPEAT 22220lwait%+=1:WAIT 22230UNTIL lwait%=500 OR INKEY$(0)<>"" 22240CALL efade 22250MODE kludge_mode:SYS "OS_RemoveCursors" 22260SYS "OS_SpriteOp",256+34,bspri%,"GetReady",640-421,256-45+kludge_modeofs 22270PROCwait(80) 22280CALL ecfad 22290ENDIF 22300PROCfadeout:SYS "Coco_Stop":SYS "Coco_Reset":VOICES 4 22310VOICE 1,"BSpushwall":VOICE 2,"BSgetbomb":VOICE 3,"BSzapmine" 22320STEREO 1,-127:STEREO 2,-127:STEREO 3,127:STEREO 4,-127 22330IF veffx%<2 THEN veffx%=2 22340OSCLI "Volume "+STR$(INT(veffx%/2)):SYS "Coco_Move",0:SYS "Coco_SeqStart",0 22350REPEAT MODE13:SYS "OS_RemoveCursors" 22360A%=blevs%+304+(vlevl%-1)*830:B%=blevl%:C%=830:CALL ecopy 22370gxpos%=blevs%?(264+2*vlevl%):gypos%=blevs%?(265+2*vlevl%) 22380gtime%=blevs%?(13583+vlevl%):IF gtime%<1 THEN gtime%=1 22390REPEAT:timer%=0:WAIT 22400SYS "OS_SpriteOp",256+34,bspri%,"SideBar",1216 22410A%=gtime%:CALL eg_showtime 22420A%=gscor%:B%=gtime%:CALL eg_showscor 22430A%=glife%:B%=gtime%:CALL eg_showlife 22440A%=gxpos%:B%=gypos%:C%=(vlevl%-1)MOD 4:CALL eg_showmids 22450A%=gxpos%:B%=gypos%:C%=vlevl%-1:CALL eg_showalls 22460bgdat?52=(timer% MOD8):bgdat?53=(timer% MOD12):bgdat?54=(timer% MOD16) 22470A%=gxpos%:B%=gypos%:C%=vlevl%-1:CALL eg_showobjs 22480REPEAT 22490timer%+=1 22500A%=gxpos%:B%=gypos%:CALL eg_showobjs 22510WAIT:UNTIL timer%=50 22520FOR lyapr%=0TO7:timer%+=1 22530A%=gxpos%:B%=gypos%:CALL eg_showobjs 22540A%=170+lyapr%:B%=178+lyapr%:CALL eg_showyou:WAIT 22550CALL eg_wipeyou:NEXT 22560: 22570!bmess%=vlevl%-1:*FX21,0 22580A%=gxpos%:B%=gypos%:C%=gtime%:D%=timer%:E%=gscor%:F%=bomno%:vreas%=USR(eg_playgame):OSCLI"Fx11,25":*Fx12,4 22590gxpos%=?bmess%:gypos%=bmess%?1:gtime%=bmess%?2:gscor%=bgame!112 22600: 22610IF vreas%=1 THEN 22620MODE kludge_mode:SYS "OS_RemoveCursors" 22630SYS "OS_SpriteOp",34+256,bspri%,"0medals",30,0+kludge_modeofs 22640SYS "OS_SpriteOp",34+256,bspri%,"0medals",1122,0+kludge_modeofs 22650ptimr=0:REPEAT 22660A%=kludge_screen+110+640*(64-(INT(ABS(COS(ptimr))*64))):CALL pauseprint 22670pause$=INKEY$(0):WAIT 22680A%=kludge_screen+110+640*(64-(INT(ABS(COS(ptimr))*64))):CALL pausewipe 22690ptimr+=PI/50:UNTIL pause$=" " 22700MODE13:SYS "OS_RemoveCursors" 22710bomno%=bgame!116 22720ENDIF 22730: 22740IF vreas%=5 THEN 22750FOR lyapr%=0TO25:timer%+=1 22760A%=gxpos%:B%=gypos%:CALL eg_showobjs 22770A%=198+((timer% AND 4)>>2):B%=93:CALL eg_showyou 22780IF lyapr%=25 THEN SYS "Coco_Move",67:SYS "Coco_SeqStart",54:SYS "Coco_Start":SYS "Coco_Volume",255-vmusx%:IF vlevl%=16 THEN SYS "Coco_SeqStart",53 22790WAIT:NEXT 22800gtime%-=1:IF gtime%>0 THEN 22810FOR gtime%=gtime% TO 1 STEP -1:C%=gtime%:CALL dectime:gscor%+=1:A%=gscor%:B%=gtime%:CALL eg_showscor:A%=gxpos%:B%=gypos%:timer%+=1:CALL eg_showobjs 22820A%=198+((timer% AND 4)>>2):B%=93:CALL eg_showyou:WAIT:CALL eg_wipeyou:NEXT 22830ENDIF 22840CALL efade:vlevl%+=1 22850ENDIF 22860: 22870IF vreas%=4 OR vreas%=2 THEN 22880VOICE 4,"BSdie":SOUND4,-15,12600,1:FOR lgame%=1TO10:timer%+=1:A%=gxpos%:B%=gypos%:CALL eg_showobjs 22890A%=0:B%=8:CALL eg_showyou:WAIT:CALL eg_wipeyou:NEXT 22900FOR lyapr%=0TO7:timer%+=1 22910A%=gxpos%:B%=gypos%:CALL eg_showobjs 22920A%=16+lyapr%:B%=24+lyapr%:CALL eg_showyou:WAIT:CALL eg_wipeyou:NEXT 22930FOR lgame%=1TO40:timer%+=1:A%=gxpos%:B%=gypos%:CALL eg_showobjs 22940A%=23:B%=31:CALL eg_showyou:WAIT:CALL eg_wipeyou:NEXT 22950FOR lgame%=1TO40:timer%+=1:A%=gxpos%:B%=gypos%:CALL eg_showobjs:WAIT:NEXT 22960ENDIF 22970IF vreas%=3 THEN 22980SOUND3,-15,4000,1 22990FOR lflsh%=1TO3:GCOL63TINT255:RECTANGLE FILL 0,0,1212,1024:GCOL0TINT0:WAIT 23000RECTANGLE FILL 0,0,1212,1024:WAIT:NEXT 23010A%=gxpos%:B%=gypos%:C%=(vlevl%-1)MOD 4:CALL eg_showmids 23020A%=gxpos%:B%=gypos%:C%=vlevl%-1:CALL eg_showalls 23030FOR lgame%=1TO40:A%=154:B%=93:CALL eg_showyou:WAIT:NEXT 23040FOR lgame%=155TO169:A%=lgame%:B%=93:CALL eg_showyou:WAIT:NEXT 23050PROCwait(40) 23060ENDIF 23070IF vreas%=4 OR vreas%=3 OR vreas%=2 THEN glife%-=frog:CALL efade:PROCwait(20) 23080*Volume 127 23090UNTIL vreas%<>1 23100UNTIL glife%<1 OR vreas%=0 OR vreas%=5 23110UNTIL vreas%<>5 OR vlevl%=17 23120CALL efade 23130MODE kludge_mode:SYS "OS_RemoveCursors" 23140IF vlevl%=17 THEN PROCcomplete 23150SYS "Coco_Volume",255-vmusx% 23160SYS "Coco_Move",52:SYS "Coco_SeqStart",0:SYS "Coco_Start" 23170SYS "OS_SpriteOp",256+34,bspri%,"GameOver",640-553,256-44+kludge_modeofs 23180PROCwait(100) 23190CALL ecfad 23200MODE13:SYS "OS_RemoveCursors" 23210IF gscor%>blevs%!70 AND frog=1 THEN 23220SYS "Coco_SeqStart",61 23230PROCprint(" YOU HAVE A SCORE ",0,800) 23240PROCprint(" WORTHY ENOUGH TO ",0,736) 23250PROCprint("BE RECORDED FOREVER.",0,662) 23260PROCprint("WELL , UNTIL YOU GET",0,598) 23270PROCprint("KNOCKED OFF , ANYWAY",0,534) 23280PROCprint(" ENTER YOUR NAME , ",0,470) 23290PROCprint(" YOU VALIANT THING. ",0,406) 23300PROCprint(" > < ",0,342) 23310IF medals%=-1 THEN gname$=FNpad(FNinput(320,342,32,90,10),10) ELSE PROCprint(CHR$(93+medals%),320,342):gname$=CHR$(93+medals%)+FNpad(FNinput(384,342,32,90,9),9) 23320CALL efade:fsave%=TRUE 23330FOR lscor%=0TO4 23340IF gscor%>blevs%!(54+lscor%*4) THEN 23350oscor%=blevs%!(54+lscor%*4):blevs%!(54+lscor%*4)=gscor%:gscor%=oscor% 23360oname$=FNgetlnstr(blevs%+4+10*lscor%,10) 23370PROCputstr(gname$,blevs%+4+10*lscor%):gname$=oname$ 23380ENDIF 23390NEXT 23400SYS "Coco_SeqStart",0 23410ENDIF 23420ENDPROC
(� BombScare - <c> 1992 Andrew Clover +� Updated, 1994 � Archimedes World 1994 =� Apologies for the pathetic programming in places here - (+� I do much better stuff these days ;-) 2 <'ș "OS_Byte",129,0,255 � ,kludge_os F� IF kludge_os>&A4 THEN P& kludge_mode=15:kludge_modeofs=512 Z � ELSE d'� kludge_mode=67:kludge_modeofs=512 n� ENDIF x �kludge_pause=4 � �� kludge_block 8 �!kludge_block=149 �kludge_block!4=-1 �6ș "OS_ReadVduVariables",kludge_block,kludge_block �kludge_screen=!kludge_block �: �C� � �uerror("Arrgh ! There's been a "+�$+" at line "+�(�)+" !") �c� bspri% 257570+97584, bcode% 10000,L%-1, blevs% 13610, btext% 2000, bfont% 17160, bspau% 26940 �S� bgraf% 204800, blevl% 900, bmess% 13610, bhtex% 240, bstar% 1610, btcol% 1030 �� lstar%=0�1600�4 �1bstar%!lstar%=kludge_screen-1+�(81920-320*34) _�:fsave%=�:ș "OS_Byte",196,1,0 � ,kdela%:ș "OS_Byte",197,1,0 � ,krepa%:�"FX11,25":*FX12,4 : �0Ȝ0 ": ,+hfile%=� "<Obey$Dir>.Resources.Options" 6�#hfile%,klist$ @�#hfile%,vmusx% J�#hfile%,veffx% T�#hfile% ^&flevs$=�sysvar("BombScare$Levels") hhfile%=� flevs$ r� hfile% � |�#hfile% �� �/flevs$=�sysvar("BombLevels$Dir")+".Default" �hfile%=� flevs$ �� hfile% � ��#hfile% �� �0flevs$=�sysvar("Obey$Dir")+".Levels.Default" �hfile%=� flevs$ �� hfile% � ��#hfile% �� �0�uerror("I cannot find any levels to load.") �� � � : & frog=1 0ș "BS_Initialise" � handl% :6� "Load <Obey$Dir>.Resources.Scrolltext "+�~btext% D&ș "BS_Encrypt",handl%,btext%,1971 NI� "Load "+flevs$+" "+�~(blevs%):ș "BS_Encrypt",handl%,blevs%+4,13596 X4� "Load <Obey$Dir>.Resources.Graphics "+�~bspri% b.ș "BS_Unpack",handl%,bspri%,bgraf%,131053 l4� "Load <Obey$Dir>.Resources.PauseSpr "+�~bspri% v-ș "BS_Unpack",handl%,bspri%,bspau%,17472 �<� "Load <Obey$Dir>.Resources.Sprites "+�~(bspri%+241000) �5ș "BS_Unpack",handl%,bspri%+241000,bspri%,113894 �6� "Load <Obey$Dir>.Resources.HelpScroll "+�~bhtex% �0� "Load <Obey$Dir>.Resources.Font "+�~bfont% �4� "Load <Obey$Dir>.Resources.ColTable "+�~btcol% �J�assemblecode:ș "OS_SpriteOp",256+15,bspri%,"SpriteOp60",0,320,304,13 �Mș "OS_SpriteOp",256+24,bspri%,"SpriteOp60" � ,,asadr%:bgame!76=asadr%+44 �%bgame!128=bgame!76+320-16:� efade �E� � � �serror=� � �save:�closedown:� � � 13:ș "OS_RemoveCursors" �: �� Menu/title screen �: �>� 13:ș "OS_RemoveCursors":�starttune:ș "Coco_SeqStart",0 � 0�:bdata!28=btext%:bdata!12=4:bdata!24=btext% � =ș "OS_SpriteOp",34+256,bspri%,"logo",640-288*2,1024-42*4 *)�print(�getlnstr(blevs%+76,20),0,836) 4� lscor%=0�4 ><�print(�getlnstr(blevs%+4+10*lscor%,10),0,736-lscor%*64) H"sscor$=�(blevs%!(54+lscor%*4)) R2�print(sscor$,1280-�(sscor$)*64,736-lscor%*64) \� f(�print("H-HELP,O-OPTS,E-EDIT",0,336) p(�print("L-LOAD,P-PASS,Q-QUIT",0,272) z(�print("PRESS RETURN TO PLAY",0,208) �+�0,63 Ȝ 4:� 0,33*4:� 1280,33*4:*FX21,0 �� �Ȗ �� edscr �ckeyp$=�caps(�(0)) �%� ckeyp$=�128 � frog=1-frog:�frog �^� ckeyp$="H" � ckeyp$="O" � ckeyp$="E" � ckeyp$="L" � ckeyp$="P" � ckeyp$="Q" � ckeyp$=�13 �!� ckeyp$<>"Q" � A%=42:� efade �Ȏ (ckeyp$) � �� "H": �help �� "O": �options �� "E": � �:�editor �� "L": � �:�load � "P": � �:�game(�password) -� "Q": � �:� �:� ecfad:�save:�closedown:� � �13: � �:�game(1) $� .� � 8: B� Print instructions L: V ��help `9bdata!24=bhtex%:bdata!28=bhtex%:bdata!32=4:bdata!12=4 j)�print("THE SILLY PLOT. ",0,1023) t(�print("IT IS 3456AD. EARTH ",0,878) ~(�print("HAS BEEN TAKEN OVER ",0,814) �(�print("BY ALIENS. THE ONLY ",0,750) �(�print("HOPE IS E.R.F.F. THE",0,686) �(�print("EARTH REVOLUTIONARY ",0,622) �(�print("FREEDOM FIGHTERS. ",0,558) �(�print("BUT ALIENS HAVE PUT ",0,494) �(�print("BOMBS ALL OVER ERFF ",0,430) �(�print("HQ, AND IT IS YOUR ",0,366) �(�print("JOB TO REMOVE THEM. ",0,302) �(�print(" ANYKEY...",0,208) �� �Ȗ:� edscr �� �(0)<>"" A%=42:� efade )�print("YOU ARE AN EXPERT ",0,1020) (�print("BOMB DISPOSAL BLOKE ",0,956) (�print("WHO CAN DISARM BOMBS",0,892) ((�print("BY TOUCHING THEM - ",0,828) 2(�print("BUT FIRST, YOU MUST ",0,764) <(�print("GET TO THEM, THROUGH",0,700) F(�print("THE MAZE OF WALLS, ",0,636) P(�print("BLOCKS, MINES AND ",0,572) Z(�print("TRANSPORTERS, ETC. ",0,508) d(�print("HOWEVER, MOST OF THE",0,444) n(�print("WALLS IN THE MAZE ",0,380) x(�print("CAN BE PUSHED ALONG,",0,316) �(�print(" ANYKEY...",0,208) �� �Ȗ:� edscr �� �(0)<>"" �A%=42:� efade �)�print("TO MAKE NEW WAYS ",0,1020) �(�print("THROUGH THE MAZE. ",0,956) �(�print("BUT YOU CAN'T PUSH ",0,892) �(�print("A WALL INTO A SPACE ",0,828) �(�print("ALREADY OCCUPIED BY ",0,764) �(�print("ANOTHER WALL. ALSO, ",0,700) �(�print("SOME WALLS CAN'T BE ",0,636) �(�print("PUSHED AT ALL. SO, ",0,572) (�print("GET ALL THE BOMBS TO",0,508) (�print("COMPLETE THE LEVEL. ",0,444) (�print("DON'T TOUCH MINES. ",0,380) "(�print("THEY KILL YOU. ",0,316) ,(�print(" ANYKEY...",0,208) 6� @Ȗ:� edscr J� �(0)<>"" TA%=42:� efade ^)�print("MINES KILL YOU, BUT ",0,1020) h(�print("YOU CAN DESTROY THEM",0,956) r(�print("BY PUSHING WALLS ",0,892) |(�print("THROUGH THEM. YOU ",0,828) �(�print("CAN'T WALK THROUGH ",0,764) �(�print("BLOCKS. YOU CAN ",0,700) �(�print("SEE WHAT THE THINGS ",0,636) �(�print("LOOK LIKE BELOW. ",0,572) �(�print("PLAY THE LEVELS TO ",0,508) �(�print("GET THE HANG OF IT. ",0,444) �(�print("HAVE FUN YOU FROODY ",0,380) �(�print("WOSSNAMES. ",0,316) �(�print(" ANYKEY...",0,208) �� �Ȗ:� edscr �� �(0)<>"" �� efade .bdata!28=btext%:bdata!12=4:bdata!24=btext% � : &��wait(xleng%) 0� xlwat%=1� xleng% :Ȗ:� D� N: X!��print(xsprn$,xposx%,xposy%) b� xlprn%=0� �(xsprn$)-1 lA%=�(�xsprn$,xlprn%+1,1)) vB%=xposx%/4+xlprn%*16 �C%=(1020-xposy%)/4 �� epsml �� �� �: ���uerror(xperr$) �� 12 �� xperr$ �A�'"Press <RETURN> to re-run the program, or <SPACE> to quit." �(� xcget$=�:� xcget$=" " � xcget$=�13 �� xcget$=" " � �closedown:� �"ș "Coco_Reset":ș "Coco_Stop" �� : ݤserror ȗ � � �=17 � =� *� 12 40� "There's been an internal error : ";�$;"." >I� "Press <RETURN> to return to the title screen, or <SPACE> to quit." H(� xcget$=�:� xcget$=" " � xcget$=�13 R� xcget$=" " � =� \=� f: pݤcaps(xchar$) z?� �(xchar$)>96 � �(xchar$)<122 � =�(�(xchar$)-32) � =xchar$ �: �ݤsysvar(xfvar$) �:ș "OS_ReadVarVal",xfvar$,bmess%,bmess%+512 � ,,pmess% �bmess%?pmess%=13 �=$(bmess%) �: �ݤgetctstr(xbmes%) � xsred$="" �� �xsred$+=�(?xbmes%) � xbmes%+=1 �!� ?xbmes%<32 � � (xsred$)=255 �=xsred$ : ݤgetlnstr(xbstr%,xlest%) xsred$="":� xlest%=0 � ="" $$� xlstr%=xbstr%� xbstr%+xlest%-1 .xsred$+=�(?xlstr%) 8� B=xsred$ L: V��starttune `ș "Coco_Start" jș "Coco_Volume",255-vmusx% t� ~: ���closedown �� � �:� ��fadeout �ș "Coco_Stop" �'� kludge_mode:ș "OS_RemoveCursors" �Eș "OS_SpriteOp",256+34,bspri%,"Goodbye",213,168+kludge_modeofs,0 �ș "OS_Byte",196,kdela%,0 �ș "OS_Byte",197,krepa%,0 �� 0 Ȝ 0 �&� ȗ a,b,c:G$=�(1):� G$<>"" � c<>0 �� �: ��fadeout !� lfade%=255-vmusx% � 200 � 2 ș "Coco_Volume",lfade% Ȗ (� 2� <: F ��frog P��0,0);"How much is that doggy in the window? The one with the waggly tail. How much is that doggy in the window? I do hope that doggy's for sale! " Z/�" - John Major, 1992 " d� n: x��assemblecode ��fpass%=%1000 � %1010 � 2 � P%=bcode% �[OPT fpass% �: �; Shutter fade routine �: � .efade � MOV R6,#4 �ADR R12,bdata �LDR R7,[R12,#4] �CMP R0,#42 ��Q R0,#320 ��Q R1,#222 MULEQ R8,R0,R1 MOVNE R8,#(320*256) .lfade " MOV R3,R7 , MOV R4,R8 6 .lfadl @LDR R5,[R3] JMOV R5,R5,LSR #8 TSTR R5,[R3],#4 ^SUBS R4,R4,#4 h BNE lfadl rSUBS R6,R6,#1 | BNE lfade � MOV R8,#0 �MOV PC,R14 �: �2; The following code prints a 16x16 character. �: � .epsml �SUB R0,R0,#32 �MOVMI PC,R14 �ADR R12,bdata �LDR R3,[R12,#0] �MOV R4,#256 �MLA R11,R0,R4,R3 �MOV R4,#320 LDR R3,[R12,#4] MLA R10,R2,R4,R1 ADD R10,R10,R3 & MOV R9,#8 0 .lpsml :LDMIA R11!,{R0-R7} DSTMIA R10,{R0-R3} NADD R10,R10,#320 XSTMIA R10,{R4-R7} bADD R10,R10,#320 lSUBS R9,R9,#1 v BNE lpsml �MOV PC,R14 �: �; Display scrolltext �: � .edscr �ADR R12,bdata �LDR R0,[R12,#8] �LDR R3,[R12,#12] �ADD R1,R0,R3 �MOV R2,#255 � .ldscr �LDMIA R1!,{R3-R12} �STMIA R0!,{R3-R12} SUBS R2,R2,#1 BNE ldscr LDMIA R1!,{R3-R11} STMIA R0!,{R3-R11} *ADR R12,bdata 4: >M; Add new data on right ; I know it is inefficient, but the ARM does have HP; enough time on its hands, as it were. Actually, it won't work properly, so RP; I could have used a much quicker routine, but why re-program when you have \%; got a working routine, anyway ? fQ; I'm sorry the system doesn't seem to be particularly well inter-programmed, pM; but a lot of it was written for version 1, which was subsequently wiped z1; ( the !RunImage file ) by that nasty drive. �; �P; Yes, folks, there was a half-done version which got partially wiped before �; the finished one. �; �; Did I learn? �; �; Did I CABBAGE. �: �ADD R11,R12,#12 �LDMIA R11,{R0-R5} � CMP R0,#1 � BEQ skipp �LDRB R3,[R4] MOV R6,#1024 MLA R2,R6,R3,R2 ADD R2,R2,R5 $SUB R1,R1,#4 .SUB R2,R2,#4 8MOV R10,#9920 BMOV R9,#992 L .ldnsl VLDR R11,[R2,R9] `STR R11,[R1,R10] jSUBS R10,R10,#320 tSUB R9,R9,#32 ~ BPL ldnsl � .skipp �LDR R0,[R12,#32] �LDR R1,[R12,#12] �LDR R9,[R12,#28] �ADD R0,R0,R1 �CMP R0,#35 �MOVPL R0,#4 �STR R0,[R12,#32] �ADDPL R9,R9,#1 � .cagai �STR R9,[R12,#28] �LDRB R0,[R9] SUBS R0,R0,#160 BMI estar : ; Deal with control codes (: 2LDREQ R1,[R12,#24] <STREQ R1,[R12,#28] F �Q PC,R14 PSTR R0,[R12,#12] ZADD R9,R9,#1 dB cagai n: x2; I've decided to add some pink parallax stars �: � .estar �LDR R0,[R12,#36] �LDR R1,[R12,#40] �MOV R2,#400 � MOV R5,#0 �MOV R8,#81920 �SUB R8,R8,#&2A00 �SUB R8,R8,#&81 �ADD R9,R12,#44 �MOV R11,#1 � .lstar �� R10,R2,#11 LDRB R7,[R9,R10] LDR R3,[R0] LDRB R4,[R3] " CMP R4,R7 ,STREQB R5,[R3] 6� R6,R2,#11 @ADD R6,R11,R6,LSR #1 JADD R3,R3,R6 T CMP R3,R1 ^SUBPL R3,R3,R8 hLDRB R4,[R3] r CMP R4,#0 |STREQB R7,[R3] �STR R3,[R0],#4 �SUBS R2,R2,#1 � BNE lstar �MOV PC,R14 �: �;; Databay for font display / scrolltext / star routines �; �!; Yuck - this is cack. Sorry. �: � .bdata �/EQUD bfont% ; Font data start �1EQUD kludge_screen ; Screen start �8EQUD (kludge_screen+(320*224)) ; Place to print text 9EQUD 4 ; Scroll rate - bytes/vsync :EQUD (kludge_screen+(320*225)) ; Point to add new data 3EQUD bgraf% ; Graphics data start &*EQUD btext% ; Text start 04EQUD btext% ; Current text pointer :8EQUD 4 ; Next part to be revealed D?EQUD bstar% ; I've decided to have some stars N<EQUD kludge_screen+&13FFF-(320*34) ; End of star area X#EQUB 12:EQUB 13:EQUB 14:EQUB 15 b'EQUB 176:EQUB 177:EQUB 178:EQUB 179 l6EQUB 220:EQUB 221:EQUB 222:EQUB 223 ; Star colours v3EQUD btcol% ; Ptr to colour table �: �; Colour fade routine �: � .ecfad �ADR R12,bdata �MOV R11,#23 �LDR R10,[R12,#4] �LDR R3,[R12,#56] �MOV R9,#255 � .lcfvs �MOV R4,R10 �MOV R5,#(81920/4) � .lcfsf LDR R6,[R4] � R8,R9,R6,ASL#0 LDR R7,[R3,R8,ASL#2] � R8,R9,R6,LSR#8 *LDR R0,[R3,R8,ASL#2] 4ADD R7,R7,R0,ASL#8 >� R8,R9,R6,LSR#16 HLDR R0,[R3,R8,ASL#2] RADD R7,R7,R0,ASL#16 \� R8,R9,R6,LSR#24 fLDR R0,[R3,R8,ASL#2] pADD R7,R7,R0,ASL#24 zSTR R7,[R4],#4 �SUBS R5,R5,#1 � BNE lcfsf �MOV R0,#19 �SWI "OS_Byte" �SUBS R11,R11,#1 � BNE lcfvs �MOV PC,R14 �: �; Fill with zero bytes �: � .ezero � MOV R2,#0 � .lzero STRB R2,[R0],#1 SUBS R1,R1,#1 BNE lzero $MOV PC,R14 .: 8; Copy bytes B: L .ecopy VLDRB R3,[R0],#1 `STRB R3,[R1],#1 jSUBS R2,R2,#1 t BNE ecopy ~MOV PC,R14 �: �; Game-playing routines �: �.eg_showtime ��adr(12,bgdat) �LDR R1,[R12,#0] �MOV R2,#255 �SUB R4,R2,R0 �ADD R4,R4,#1 �MOV R3,#320 �MLA R1,R4,R3,R1 � .lshti LDMIA R1,{R4-R7} �S R8,R2,R4 MOV R8,#160 STREQB R8,[R1,#0] (�S R8,R2,R4,LSR#8 2MOV R8,#161 <STREQB R8,[R1,#1] F�S R8,R2,R4,LSR#16 PMOV R8,#162 ZSTREQB R8,[R1,#2] d�S R8,R2,R4,LSR#24 nMOV R8,#163 xSTREQB R8,[R1,#3] ��S R8,R2,R5 �MOV R8,#204 �STREQB R8,[R1,#4] ��S R8,R2,R5,LSR#8 �MOV R8,#205 �STREQB R8,[R1,#5] ��S R8,R2,R5,LSR#16 �MOV R8,#206 �STREQB R8,[R1,#6] ��S R8,R2,R5,LSR#24 �MOV R8,#207 �STREQB R8,[R1,#7] ��S R8,R2,R6 MOV R8,#206 STREQB R8,[R1,#8] �S R8,R2,R6,LSR#8 "MOV R8,#205 ,STREQB R8,[R1,#9] 6�S R8,R2,R6,LSR#16 @MOV R8,#204 JSTREQB R8,[R1,#10] T�S R8,R2,R6,LSR#24 ^MOV R8,#163 hSTREQB R8,[R1,#11] r�S R8,R2,R7 |MOV R8,#162 �STREQB R8,[R1,#12] ��S R8,R2,R7,LSR#8 �MOV R8,#161 �STREQB R8,[R1,#13] ��S R8,R2,R7,LSR#16 �MOV R8,#160 �STREQB R8,[R1,#14] �ADD R1,R1,R3 �SUBS R0,R0,#1 � BNE lshti �MOV PC,R14 �: �.eg_showlife �adr(12,bgdat) STR R14,[R12,#4] STR R1,[R12,#8] &ADD R0,R0,#48 0MOV R1,#304 :MOV R2,#240 DBL epsml N�adr(12,bgdat) XLDR R14,[R12,#4] bLDR R0,[R12,#8] lCMP R0,#15 vMOVPL R0,#15 �LDR R1,[R12,#0] �MOV R2,#255 �SUB R4,R2,R0 �MOV R3,#320 �MLA R1,R4,R3,R1 �ADD R0,R0,#1 �B lshti �: �.eg_showscor ��adr(12,bgdat) �SUB R1,R1,#1 �STR R14,[R12,#4] �STR R1,[R12,#8] LDR R1,[R12,#12] MOV R2,#512 SWI "OS_ConvertCardinal3" MOV R2,#81 * .lpsco 4LDRB R1,[R0],#1 > CMP R1,#0 HBEQ eg_rtscor RSTR R0,[R12,#16] \STR R2,[R12,#20] f MOV R0,R1 pMOV R1,#304 zBL epsml ��adr(12,bgdat) �LDR R0,[R12,#16] �LDR R2,[R12,#20] �ADD R2,R2,#16 �B lpsco �.eg_rtscor ��adr(12,bgdat) �MOV R11,R2 �LDR R14,[R12,#4] �LDR R0,[R12,#8] �CMP R0,#174 �MOVPL R0,#174 �LDR R1,[R12,#0] MOV R2,#255 SUB R4,R2,R0 CMP R4,R11 $MOVPL PC,R14 .MOV R3,#320 8MLA R1,R4,R3,R1 BSUB R0,R11,R4 LB lshti V: `.eg_showmids j�adr(12,bgdat) tLDR R3,[R12,#24] ~MOV R4,#256 �MLA R3,R4,R2,R3 �RSBS R4,R0,#2 �MOVMI R4,#0 �RSB R5,R0,#19 � CMP R5,#7 �MOVPL R5,#7 �SUB R0,R5,R4 �RSBS R2,R1,#2 �MOVMI R2,#0 �RSB R5,R1,#19 � CMP R5,#6 �MOVPL R5,#6 SUB R1,R5,R2 .lpmdy MOV R5,R0 MOV R6,R4 ( .lpmdx 2STMFD R13!,{R0} <LDR R0,[R12,#-12] FLDR R9,[R12,#-4] PLDR R7,[R12,#28] ZMOV R8,#48 dMLA R7,R8,R6,R7 nMLA R7,R9,R2,R7 xLDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} ADD R7,R7,R0 LDMIA R3!,{R8-R11} STMIA R7,{R8-R11} "ADD R7,R7,R0 ,LDMIA R3!,{R8-R11} 6STMIA R7,{R8-R11} @ADD R7,R7,R0 JLDMIA R3!,{R8-R11} TSTMIA R7,{R8-R11} ^ADD R7,R7,R0 hLDMIA R3!,{R8-R11} rSTMIA R7,{R8-R11} |ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} �STMIA R7,{R8-R11} �ADD R7,R7,R0 �LDMIA R3!,{R8-R11} STMIA R7,{R8-R11} ADD R7,R7,R0 LDMIA R3!,{R8-R11} &STMIA R7,{R8-R11} 0ADD R7,R7,R0 :LDMIA R3!,{R8-R11} DSTMIA R7,{R8-R11} NLDMFD R13!,{R0} XADD R6,R6,#1 bSUB R3,R3,#256 lSUBS R5,R5,#1 v BNE lpmdx �ADD R2,R2,#1 �SUBS R1,R1,#1 �CMP R1,#1:BPL lpmdy �MOV PC,R14 �: �.eg_showalls ��adr(12,bgdat) �STR R0,[R12,#8] �STR R1,[R12,#16] �STR R2,[R12,#20] �MOV R10,R2 �� R4,R2,#7 �� R5,R2,#1 MOV R6,#1024 LDR R7,[R12,#32] LDR R8,[R12,#36] MLA R2,R4,R6,R7 *MLA R3,R5,R6,R8 4SUB R0,R0,#2 >SUB R1,R1,#2 H MOV R4,#6 RLDR R6,[R12,#40] \ MOV R8,#0 f .llhwl p MOV R5,#6 z MOV R7,#0 � .lohwl �+CMP R0,#0:BMI nohwl:CMP R1,#0:BMI nohwl �-CMP R0,#16:BPL nohwl:CMP R1,#17:BPL nohwl �-MOV R10,#16:MLA R9,R1,R10,R0:ADD R9,R9,R6 �&LDRB R10,[R9]:CMP R10,#1:BMI nohwl ��Q R11,R2:MOVNE R11,R3 � MOV R9,#48:LDR R10,[R12,#28] �&MLA R10,R9,R7,R10:LDR R9,[R12,#-4] �%MLA R10,R9,R8,R10:ADD R10,R10,#16 �(STMFD R13!,{R0-R8}:LDR R8,[R12,#-12] �7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 $7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 .7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 87LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 B7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 L7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 V7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 `7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 j7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 t7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 ~7LDMIA R11!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �LDMFD R13!,{R0-R8} � .nohwl �ADD R7,R7,#1:ADD R0,R0,#1 �SUBS R5,R5,#1:BNE lohwl �SUB R0,R0,#6:ADD R8,R8,#1 �(ADD R1,R1,#1:SUBS R4,R4,#1:BNE llhwl �: �$LDR R0,[R12,#8]:LDR R1,[R12,#16] �!ADD R2,R2,#512:ADD R3,R3,#512 �SUB R0,R0,#2:SUB R1,R1,#2 � MOV R5,#7 �LDR R6,[R12,#44] LDR R10,[R12,#20] MOV R7,#0 .llvwl MOV R4,#5 ( MOV R8,#0 2 .lovwl <+CMP R0,#0:BMI novwl:CMP R1,#0:BMI novwl F-CMP R0,#17:BPL novwl:CMP R1,#16:BPL novwl P-MOV R10,#16:MLA R9,R0,R10,R1:ADD R9,R9,R6 Z&LDRB R10,[R9]:CMP R10,#1:BMI novwl d�Q R11,R2:MOVNE R11,R3 n MOV R9,#48:LDR R10,[R12,#28] x&MLA R10,R9,R7,R10:LDR R9,[R12,#-4] �5MLA R10,R9,R8,R10:LDR R9,[R12,#-8]:ADD R10,R10,R9 �(STMFD R13!,{R0-R8}:LDR R8,[R12,#-12] �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 �XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 "XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 ,XLDMIA R11!,{R0-R7}:STMIA R10,{R0-R3}:ADD R10,R10,R8:STMIA R10,{R4-R7}:ADD R10,R10,R8 6LDMFD R13!,{R0-R8} @ .novwl JADD R8,R8,#1:ADD R1,R1,#1 TSUBS R4,R4,#1:BNE lovwl ^SUB R1,R1,#5:ADD R7,R7,#1 h(ADD R0,R0,#1:SUBS R5,R5,#1:BNE llvwl rMOV PC,R14 |: �.eg_showobjs �+ADR R12,bgdat:SUB R0,R0,#2:SUB R1,R1,#2 �9MOV R3,#0:MOV R5,#5:LDR R6,[R12,#48]:LDR R7,[R12,#28] �/ADD R7,R7,#16:ADD R7,R7,#(320*16):MOV R8,#6 � .lysqr �MOV R2,#0:MOV R4,R8 � .lxsqr �+CMP R0,#0:BMI nosqr:CMP R1,#0:BMI nosqr �-CMP R0,#16:BPL nosqr:CMP R1,#16:BPL nosqr �-MOV R11,#16:MLA R9,R1,R11,R0:ADD R9,R9,R6 �LDRB R10,[R9]:� R10,R10,#15 �&ADD R9,R12,#64:ADD R9,R9,R10,ASL#1 �*LDRB R10,[R9],#1:CMP R10,#93:BEQ nosqr 1LDRB R11,[R9]:ADD R9,R12,#52:LDRB R9,[R9,R11] $ADD R10,R10,R9:MOV R9,R10,ASL#10 #LDR R10,[R12,#56]:ADD R9,R10,R9 &!MOV R11,#48:MLA R10,R2,R11,R7 0(LDR R11,[R12,#-4]:MLA R10,R3,R11,R10 :(STMFD R13!,{R0-R8}:LDR R8,[R12,#-12] D6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 N6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 X6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 b6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 l6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 v6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 �6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 ! 6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !*6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !46LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !>6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !H6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !R6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !\6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !f6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !p6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !z6LDMIA R9!,{R0-R7}:STMIA R10,{R0-R7}:ADD R10,R10,R8 !�LDMFD R13!,{R0-R8} !� .nosqr !�ADD R0,R0,#1:ADD R2,R2,#1 !�SUBS R4,R4,#1:BNE lxsqr !�*ADD R1,R1,#1:ADD R3,R3,#1:SUB R0,R0,R8 !�SUBS R5,R5,#1:BNE lysqr !�MLDRB R0,[R12,#52]:ADD R0,R0,#1:CMP R0,#8:SUBPL R0,R0,#8:STRB R0,[R12,#52] !�OLDRB R0,[R12,#53]:ADD R0,R0,#1:CMP R0,#12:SUBPL R0,R0,#12:STRB R0,[R12,#53] !�OLDRB R0,[R12,#54]:ADD R0,R0,#1:CMP R0,#16:SUBPL R0,R0,#16:STRB R0,[R12,#54] !�MOV PC,R14 !�: !�;;-12: EQUD 320 ; Columns on screen ! !�D;-8 : EQUD 320*16 ; Columns on screen * Wossname "D;-4 : EQUD 320*48 ; Columns on screen * Wossname "A.bgdat ; Databay for game routines "G;+0 : EQUD kludge_screen+304 ; Start point for time block "$?;+4 : EQUD 0 ; Temporary store for R14 ".H;+8 : EQUD 0 ; Another temporary register store "8<;+12: EQUD bmess%+4 ; Ptr to message block "BB;+16: EQUD 0 ; Yet another register store "L-;+20: EQUD 0 ; Ditto "VC;+24: EQUD bgraf%+38*1024 ; Start of MiddleBit graphics "`9;+28: EQUD kludge_screen ; Screen start "j8;+32: EQUD bgraf%+98*1024 ; Wall grafx start "t<;+36: EQUD bgraf%+96*1024 ; Imm Wall grafx start "~=;+40: EQUD blevl% ; Horz. wall data start "�=;+44: EQUD blevl%+272 ; Vert. wall data start "�9;+48: EQUD blevl%+544 ; Square data start "�:;+52: EQUD 0 ; Animation counters "�3;+56: EQUD bgraf% ; Grafx start "�=;+60: EQUD kludge_screen+112*321 ; Middle of screen "�3;+64: EQUB 93:EQUB 3 ; Object data "�EQUB 122:EQUB 1 "�EQUB 106:EQUB 2 "�EQUB 134:EQUB 1 "�EQUB 37:EQUB 3 "�EQUB 93:EQUB 3 "�EQUB 146:EQUB 0 # ALIGN # ;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0 #9;+108:EQUD kludge_screen ; Screen start # :ALIGN #(.eg_showyou #2ADR R12,bgdat #<LDR R2,[R12,#56] #FMOV R9,#1024 #PMLA R10,R0,R9,R2 #ZMLA R11,R1,R9,R2 #dLDR R12,[R12,#60] #nMOV R9,#32 #x .lsyou #�;LDMIA R12,{R0-R2}:LDMIA R10!,{R3-R5}:LDMIA R11!,{R6-R8} #�H� R0,R0,R6:�R R0,R0,R3:� R1,R1,R7:�R R1,R1,R4:� R2,R2,R8:�R R2,R2,R5 #�NSTMIA R12!,{R0-R2}:LDMIA R12,{R0-R2}:LDMIA R10!,{R3-R5}:LDMIA R11!,{R6-R8} #�H� R0,R0,R6:�R R0,R0,R3:� R1,R1,R7:�R R1,R1,R4:� R2,R2,R8:�R R2,R2,R5 #�NSTMIA R12!,{R0-R2}:LDMIA R12,{R0-R1}:LDMIA R10!,{R3-R4}:LDMIA R11!,{R6-R7} #�D� R0,R0,R6:�R R0,R0,R3:� R1,R1,R7:�R R1,R1,R4:STMIA R12!,{R0-R1} #�1ADD R12,R12,#(320-32):SUBS R9,R9,#1:BNE lsyou #�MOV PC,R14 #�.eg_wipeyou #�ADR R11,bgdat #�LDR R0,[R11,#60] #�%ADD R11,R11,#80:LDMIA R11,{R2-R9} #��STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 $�STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 $�STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 $�STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320: $"�STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320:STMIA R0,{R2-R9}:ADD R0,R0,#320 $,MOV PC,R14 $6: $@,.eg_playgame ; Woo ! This is it, folks ! $JSTMFD R13!,{R14} $TSTMFD R13!,{R0-R3} $^6�adr(12,bgame):STR R4,[R12,#112]:STR R5,[R12,#116] $hIMOV R0,#11:MOV R1,#1:SWI "OS_Byte":MOV R0,#12:MOV R1,#1:SWI "OS_Byte" $r .lsgam $|�adr(12,bgame) $�1MOV R0,#129:MOV R1,#0:MOV R2,#0:SWI "OS_Byte" $� Cmp R1,#�("a") $� RsbPlS R14,R1,#�("z") $�D SubPl R1,R1,#32 ; Kludge -> Upper case! $�3CMP R2,#27:BEQ out_escape:CMP R2,#255:BEQ nokey $�MOV R10,R1 $�/LDR R1,[R12,#0]:LDR R2,[R12,#4]:MOV R3,#255 $� Ldr R14,[R12,#140] $� SubS R14,R14,#1 $� StrPl R14,[R12,#140] $� Bpl nokey $�&� R4,R3,R1:CMP R10,R4:BEQ key_left $�-� R4,R3,R1,LSR#8:CMP R10,R4:BEQ key_right %+� R4,R3,R1,LSR#16:CMP R10,R4:BEQ key_up %-� R4,R3,R1,LSR#24:CMP R10,R4:BEQ key_down %'� R4,R3,R2:CMP R10,R4:BEQ out_pause %&-� R4,R3,R2,LSR#8:CMP R10,R4:BEQ out_abort %0 .nokey %:BL eg_wipeyou %DLDMFD R13!,{R0-R3} %N-ADD R3,R3,#1:�S R4,R3,#&1F:SUBEQ R2,R2,#1 %X#STMFD R13!,{R0-R3}:BLEQ dectime %bBL eg_showobjs %lLDMFD R13,{R0-R3} %v)� R0,R3,#7:ADD R1,R0,#8:BL eg_showyou %�MOV R0,#19:SWI "OS_Byte" %�B lsgam %� .key_left %�LSTMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} %�LDMFD R13!,{R0,R2,R3,R4} %�,SUBS R1,R0,#1:STMMIFD R13!,{R0,R2,R3,R4} %�>BMI nokey:LDR R5,[R12,#96]:ADD R5,R5,R1:ADD R7,R5,R2,ASL#4 %�7LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} %�BBEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 %�4LDR R5,[R12,#92]:ADD R5,R5,R2:ADD R5,R5,R1,ASL#4 %�NLDRB R6,[R5,#16]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE nolbw %�DLDRB R6,[R5,#-16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey %�GSTREQB R9,[R5]:�EQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE nolbw &<STRB R9,[R7]:STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] &DMOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" &LDMFD R13,{R0-R3}:MOV R1,R2 & 5LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] &*#BL eg_showscor:�sfadr(12,bgame) &4B nslbw &>6.nolbw STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] &HR.nslbw LDR R0,[R12,#76]:ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#120] &R9.llcbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE llcbf &\BSTMIA R0!,{R2}:LDR R2,[R12,#124]:MOV R1,#256:LDR R0,[R12,#128] &f8.llcbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14} &p6LDMIA R2!,{R3-R4}:STMIA R0!,{R3-R4}:ADD R2,R2,#272 &z*ADD R0,R0,#320:SUBS R1,R1,#1:BNE llcbg &�5LDR R0,[R12,#76]:�sadr(11,bgdat):STR R0,[R11,#28] &�eMOV R0,#368:STR R0,[R11,#-12]:MOV R0,#(368*16):STR R0,[R11,#-8]:MOV R0,#(368*48):STR R0,[R11,#-4] &�!LDR R0,[R12,#72]:LDR R11,[R0] &�GLDMFD R13,{R0-R3}:� R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids &�6LDMFD R13!,{R0-R2}:BL eg_showalls:�sfadr(12,bgame) &�BLDMFD R13,{R0-R3}:MOV R4,#44:LDR R5,[R12,#76]:LDR R6,[R12,#80] &�STMFD R13!,{R0-R6} &� .lscrl &�3LDMFD R13,{R0-R6}:�sfadr(12,bgame):ADD R5,R5,R4 &�?ADD R5,R5,#&A100:ADD R11,R5,#&90:CMP R4,#44:BLNE eg_wipedwn &�-�sadr(12,bgdat):SUB R0,R0,#2:SUB R1,R1,#2 &�9MOV R3,#0:MOV R5,#5:LDR R6,[R12,#48]:LDR R7,[R12,#28] &�8ADD R7,R7,#16:ADD R7,R7,#(368*16):MOV R8,#7:BL lysqr '3�sfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 '=ADD R5,R5,#&A100:ADD R11,R5,#&70:BL eg_showyouwithoutmask ';LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nslwp '$<ADD R5,R5,R4:ADD R5,R5,#&A100:ADD R0,R5,#&60:BL eg_sprwh '.5.nslwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 '8MOV R0,#19:SWI "OS_Byte" 'B .llcpy 'L<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 'V<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} '`<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 'j<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} 't<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} '~<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} '�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} '�PLDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16:ADD R5,R5,#48 '�SUBS R7,R7,#1:BNE llcpy '�;LDMFD R13!,{R0-R6}:SUBS R4,R4,#4:ADD R3,R3,#1:BMI lslot '�STMFD R13!,{R0-R6}:B lscrl '� .lslot '��sfadr(12,bgame) '�LDR R11,[R12,#100] '�CMP R11,#0:BEQ nnlwl '�DMOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" '�LDMFD R13,{R0-R3} '�4LDR R5,[R12,#92]:ADD R5,R5,R1:ADD R5,R5,R0,ASL#4 ( MOV R11,#1:STRB R11,[R5] ( #.nnlwl MOV R0,#19:SWI "OS_Byte" (4�sfadr(12,bgame):�adr(11,bgdat):LDR R0,[R12,#80] (#LDR R0,kludgey:STR R0,[R11,#28] ((eMOV R0,#320:STR R0,[R11,#-12]:MOV R0,#(320*16):STR R0,[R11,#-8]:MOV R0,#(320*48):STR R0,[R11,#-4] (2B newsq (<.kludgey Equd kludge_screen (F.key_right (PLSTMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} (ZLDMFD R13!,{R0,R2,R3,R4} (d6ADD R1,R0,#1:CMP R1,#16:STMPLFD R13!,{R0,R2,R3,R4} (n>BPL nokey:LDR R5,[R12,#96]:ADD R5,R5,R1:ADD R7,R5,R2,ASL#4 (x7LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} (�BBEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 (�4LDR R5,[R12,#92]:ADD R5,R5,R2:ADD R5,R5,R1,ASL#4 (�MLDRB R6,[R5,#0]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE norbw (�CLDRB R6,[R5,#16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey (�GSTREQB R9,[R5]:�EQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE norbw (�<STRB R9,[R7]:STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] (�DMOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" (�LDMFD R13,{R0-R3}:MOV R1,R2 (�5LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] (�#BL eg_showscor:�sfadr(12,bgame) (�B nsrbw (�6.norbw STMFD R13!,{R1,R2,R3,R4}:STR R11,[R12,#100] (�R.nsrbw LDR R0,[R12,#76]:ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#120] )9.lrcbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE lrcbf )@STMIA R0!,{R2}:LDR R2,[R12,#80]:MOV R1,#256:LDR R0,[R12,#76] )8.lrcbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14} )"6LDMIA R2!,{R3-R4}:STMIA R0!,{R3-R4}:ADD R2,R2,#272 ),*ADD R0,R0,#320:SUBS R1,R1,#1:BNE lrcbg )6CLDR R0,[R12,#76]:�sadr(11,bgdat):ADD R0,R0,#48:STR R0,[R11,#28] )@eMOV R0,#368:STR R0,[R11,#-12]:MOV R0,#(368*16):STR R0,[R11,#-8]:MOV R0,#(368*48):STR R0,[R11,#-4] )J!LDR R0,[R12,#72]:LDR R11,[R0] )TGLDMFD R13,{R0-R3}:� R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids )^6LDMFD R13!,{R0-R2}:BL eg_showalls:�sfadr(12,bgame) )hALDMFD R13,{R0-R3}:MOV R4,#4:LDR R5,[R12,#76]:LDR R6,[R12,#80] )rSTMFD R13!,{R0-R6} )| .lscrr )�3LDMFD R13,{R0-R6}:�sfadr(12,bgame):ADD R5,R5,R4 )�>ADD R5,R5,#&A100:ADD R11,R5,#&6C:CMP R4,#4:BLNE eg_wipedwn )�-�sadr(12,bgdat):SUB R0,R0,#3:SUB R1,R1,#2 )�GMOV R3,#0:MOV R5,#5:LDR R6,[R12,#48]:LDR R7,[R12,#28]:SUB R7,R7,#48 )�8ADD R7,R7,#16:ADD R7,R7,#(368*16):MOV R8,#7:BL lysqr )�3�sfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 )�=ADD R5,R5,#&A100:ADD R11,R5,#&70:BL eg_showyouwithoutmask )�;LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nsrwp )�<ADD R5,R5,R4:ADD R5,R5,#&A100:ADD R0,R5,#&90:BL eg_sprwh )�5.nsrwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 )�MOV R0,#19:SWI "OS_Byte" )� .lrcpy )�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *&<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *0<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *:<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} *DPLDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16:ADD R5,R5,#48 *NSUBS R7,R7,#1:BNE lrcpy *XELDMFD R13!,{R0-R6}:ADD R4,R4,#4:CMP R4,#52:ADD R3,R3,#1:BPL lsrot *bSTMFD R13!,{R0-R6}:B lscrr *l .lsrot *v�sfadr(12,bgame) *�LDR R11,[R12,#100] *�CMP R11,#0:BEQ nnrwl *�DMOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" *�LDMFD R13,{R0-R3} *�4LDR R5,[R12,#92]:ADD R5,R5,R1:ADD R5,R5,R0,ASL#4 *� MOV R11,#1:STRB R11,[R5,#16] *�#.nnrwl MOV R0,#19:SWI "OS_Byte" *�4�sfadr(12,bgame):�adr(11,bgdat):LDR R0,[R12,#80] *�#LDR R0,kludgey:STR R0,[R11,#28] *�eMOV R0,#320:STR R0,[R11,#-12]:MOV R0,#(320*16):STR R0,[R11,#-8]:MOV R0,#(320*48):STR R0,[R11,#-4] *�B newsq *�.key_up *�LSTMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} +LDMFD R13!,{R0,R2,R3,R4} +,SUBS R1,R2,#1:STMMIFD R13!,{R0,R2,R3,R4} +>BMI nokey:LDR R5,[R12,#96]:ADD R5,R5,R0:ADD R7,R5,R1,ASL#4 + 7LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} +*BBEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 +44LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 +>NLDRB R6,[R5,#16]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE noubw +HDLDRB R6,[R5,#-16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey +RGSTREQB R9,[R5]:�EQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE noubw +\<STRB R9,[R7]:STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] +fDMOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" +pLDMFD R13,{R0-R3}:MOV R1,R2 +z5LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] +�#BL eg_showscor:�sfadr(12,bgame) +�B nsubw +�6.noubw STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] +�Q.nsubw LDR R0,[R12,#76]:ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#84] +�9.lucbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE lucbf +�3STMIA R0!,{R2-R10}:LDR R2,[R12,#24]:MOV R1,#384 +�P.lucbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14}:SUBS R1,R1,#1:BNE lucbg +�SUB R0,R0,#(320*304) +�$�sadr(11,bgdat):STR R0,[R11,#28] +�!LDR R0,[R12,#72]:LDR R11,[R0] +�GLDMFD R13,{R0-R3}:� R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids +�6LDMFD R13!,{R0-R2}:BL eg_showalls:�sfadr(12,bgame) +�HLDMFD R13,{R0-R3}:MOV R4,#(44*320):LDR R5,[R12,#76]:LDR R6,[R12,#80] ,STMFD R13!,{R0-R6} , .lscru ,3LDMFD R13,{R0-R6}:�sfadr(12,bgame):ADD R5,R5,R4 ,$EADD R5,R5,#&B400:ADD R11,R5,#&70:CMP R4,#(44*320):BLNE eg_wipeacr ,.-�sadr(12,bgdat):SUB R0,R0,#2:SUB R1,R1,#2 ,89MOV R3,#0:MOV R5,#6:LDR R6,[R12,#48]:LDR R7,[R12,#28] ,B8ADD R7,R7,#16:ADD R7,R7,#(320*16):MOV R8,#6:BL lysqr ,L3�sfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 ,V=ADD R5,R5,#&8C00:ADD R11,R5,#&70:BL eg_showyouwithoutmask ,`;LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nsuwp ,j<ADD R5,R5,R4:ADD R5,R5,#&7800:ADD R0,R5,#&70:BL eg_sprwl ,t5.nsuwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 ,~MOV R0,#19:SWI "OS_Byte" ,� .lucpy ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} ,�BLDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16 ,�SUBS R7,R7,#1:BNE lucpy ,�ALDMFD R13!,{R0-R6}:SUBS R4,R4,#(320*4):ADD R3,R3,#1:BMI lsuot ,�STMFD R13!,{R0-R6}:B lscru - .lsuot - �sfadr(12,bgame) -LDR R11,[R12,#100] -CMP R11,#0:BEQ nnuwl -(DMOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" -2LDMFD R13,{R0-R3} -<4LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 -FMOV R11,#1:STRB R11,[R5] -P#.nnuwl MOV R0,#19:SWI "OS_Byte" -Z4�sfadr(12,bgame):�adr(11,bgdat):LDR R0,[R12,#80] -d#Ldr R0,kludgey:STR R0,[R11,#28] -nB newsq -x .key_down -�LSTMFD R13!,{R0-R2}:MOV R0,#21:MOV R1,#0:SWI "OS_Byte":LDMFD R13!,{R0-R2} -�LDMFD R13!,{R0,R2,R3,R4} -�6ADD R1,R2,#1:CMP R1,#16:STMPLFD R13!,{R0,R2,R3,R4} -�>BPL nokey:LDR R5,[R12,#96]:ADD R5,R5,R0:ADD R7,R5,R1,ASL#4 -�7LDRB R14,[R7]:CMP R14,#4:STMEQFD R13!,{R0,R2,R3,R4} -�BBEQ nokey:MOV R11,#0:LDR R10,[R12,#72]:LDR R10,[R10]:MOV R9,#0 -�4LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 -�MLDRB R6,[R5,#0]!:CMP R6,#1:STMGTFD R13!,{R0,R2,R3,R4}:BGT nokey:BNE nodbw -�CLDRB R6,[R5,#16]:CMP R6,#0:STMNEFD R13!,{R0,R2,R3,R4}:BNE nokey -�GSTREQB R9,[R5]:�EQ R11,R10,#7:ADDEQ R11,R11,#1:CMP R14,#2:BNE nodbw -�<STRB R9,[R7]:STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] -�DMOV R0,#3:MVN R1,#14:MOV R2,#&1B00:MOV R3,#1:SWI "Sound_Control" -�LDMFD R13,{R0-R3}:MOV R1,R2 .5LDR R0,[R12,#112]:ADD R0,R0,#11:STR R0,[R12,#112] .#BL eg_showscor:�sfadr(12,bgame) .B nsdbw ."6.nodbw STMFD R13!,{R0,R1,R3,R4}:STR R11,[R12,#100] .,e.nsdbw LDR R0,[R12,#76]:ADD R0,R0,#(48*320):ADD R1,R12,#28:LDMIA R1,{R2-R11,R14}:LDR R1,[R12,#84] .69.ldcbf STMIA R0!,{R2-R11,R14}:SUBS R1,R1,#1:BNE ldcbf .@CSTMIA R0,{R2-R10}:LDR R2,[R12,#80]:MOV R1,#384:LDR R0,[R12,#76] .JP.ldcbg LDMIA R2!,{R3-R11,R14}:STMIA R0!,{R3-R11,R14}:SUBS R1,R1,#1:BNE ldcbg .T$�sadr(11,bgdat):STR R0,[R11,#28] .^!LDR R0,[R12,#72]:LDR R11,[R0] .hGLDMFD R13,{R0-R3}:� R2,R11,#3:STMFD R13!,{R0-R1,R11}:BL eg_showmids .r6LDMFD R13!,{R0-R2}:BL eg_showalls:�sfadr(12,bgame) .|GLDMFD R13,{R0-R3}:MOV R4,#(4*320):LDR R5,[R12,#76]:LDR R6,[R12,#80] .�\STMFD R13!,{R0-R6}:�sadr(11,bgdat):LDR R0,[R11,#28]:SUB R0,R0,#(320*48):STR R0,[R11,#28] .� .lscrd .�3LDMFD R13,{R0-R6}:�sfadr(12,bgame):ADD R5,R5,R4 .�DADD R5,R5,#&8700:ADD R11,R5,#&70:CMP R4,#(4*320):BLNE eg_wipeacr .�-�sadr(12,bgdat):SUB R0,R0,#2:SUB R1,R1,#3 .�9MOV R3,#0:MOV R5,#6:LDR R6,[R12,#48]:LDR R7,[R12,#28] .�8ADD R7,R7,#16:ADD R7,R7,#(320*16):MOV R8,#6:BL lysqr .�3�sfadr(12,bgame):LDMFD R13,{R0-R6}:ADD R5,R5,R4 .�=ADD R5,R5,#&8C00:ADD R11,R5,#&70:BL eg_showyouwithoutmask .�;LDMFD R13,{R0-R6}:LDR R2,[R12,#100]:CMP R2,#1:BMI nsdwp .�<ADD R5,R5,R4:ADD R5,R5,#&B400:ADD R0,R5,#&70:BL eg_sprwl .�5.nsdwp LDMFD R13,{R0-R6}:ADD R5,R5,R4:MOV R7,#256 .�MOV R0,#19:SWI "OS_Byte" / .ldcpy /<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /&<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /0<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /:<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /D<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /N<LDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8-R11,R14} /XBLDMIA R5!,{R0-4,R8-R11,R14}:STMIA R6!,{R0-R4,R8}:ADD R6,R6,#16 /bSUBS R7,R7,#1:BNE ldcpy /lQLDMFD R13!,{R0-R6}:ADD R4,R4,#(320*4):CMP R4,#(320*52):ADD R3,R3,#1:BPL lsdot /vSTMFD R13!,{R0-R6}:B lscrd /� .lsdot /��sfadr(12,bgame) /�LDR R11,[R12,#100] /�CMP R11,#0:BEQ nndwl /�DMOV R0,#1:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" /�LDMFD R13,{R0-R3} /�4LDR R5,[R12,#88]:ADD R5,R5,R0:ADD R5,R5,R1,ASL#4 /� MOV R11,#1:STRB R11,[R5,#16] /�#.nndwl MOV R0,#19:SWI "OS_Byte" /�4�sfadr(12,bgame):�adr(11,bgdat):LDR R0,[R12,#80] /�%LDR R0,kludgey_q:STR R0,[R11,#28] /�B newsq /�!.kludgey_q Equd kludge_screen 0.out_escape 0MOV R0,#126:SWI "OS_Byte" 0LDMFD R13!,{R0-R3} 0 MOV R0,#0 0*LDMFD R13!,{PC} 04.out_pause 0>LDMFD R13!,{R0-R3} 0HALDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4],#1:STRB R2,[R4] 0R MOV R0,#1 0\LDMFD R13!,{PC} 0f.out_abort 0pLDMFD R13!,{R0-R3} 0z1LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4] 0� MOV R0,#2 0�LDMFD R13!,{PC} 0� .out_time 0�LDMFD R13!,{R0-R3} 0�1LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4] 0� MOV R0,#3 0�LDMFD R13!,{PC} 0�: 0� .out_mine 0�LDMFD R13!,{R0-R3} 0�1LDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4] 0� MOV R0,#4 0�LDMFD R13!,{PC} 1: 1 .out_done 1LDMFD R13!,{R0-R3} 1$ALDR R4,[R12,#72]:STRB R0,[R4],#1:STRB R1,[R4],#1:STRB R2,[R4] 1. MOV R0,#1 18 MOV R0,#5 1BLDMFD R13!,{PC} 1L: 1V:.bgame ; Databay for THE GAME 1`*EQUD 0:EQUD 0 ; Keys 1j7;+8 : EQUD kludge_screen+304+255*320 ; Time bar end 1t$;+12: EQUD kludge_screen+320*248 1~3;+16: EQUD bgraf% ; Grafx start 1�=;+20: EQUD kludge_screen+112*321 ; Middle of screen 1�S;+24: EQUD kludge_screen+320*208 ; Brown girl in the ring, la la la la la 1�;+28: EQUD 0:EQUD 0:EQUD 0 1�EQUD 0:EQUD 0:EQUD 0:EQUD 0 1�4EQUD 0:EQUD 0:EQUD 0:EQUD 0 ; Quicknoughts 1�9;+72: EQUD bmess% ; Ptr to mess block 1�<;+76: EQUD 0 ; Set up to SpriteOp60 1�9;+80: EQUD kludge_screen ; Screen start 1�4;+84: EQUD 1861 ; Scr bytes/44 1�=;+88: EQUD blevl% ; Horz. wall data start 1�=;+92: EQUD blevl%+272 ; Vert. wall data start 1�9;+96: EQUD blevl%+544 ; Square data start 2 M;+100:EQUD 0 ; Yes, another temporary register store 2 =;+104:EQUD bgraf%+97*1024 ; Wall grafx start-1024 2;;+108:EQUD kludge_screen+112+320*96 ; Wall above you 2-;+112:EQUD 0 ; Score 2(2;+116:EQUD 0 ; Bombs left 229;+120:EQUD 2141 ; Wide scr bytes/44 2<#;+124:EQUD kludge_screen+304-48 2F;+128:EQUD 0 2P;+132:EQUD 0 2Z;+136:EQUD blevs%+266 2d6;+140:EQUD 0 ; kludge_counter 2n 2x .newsq 2�&MOV R0,#21:MOV R1,#0:SWI "OS_Byte" 2� LDMFD R13,{R0-R3}:MOV R11,R2 2�MLDR R2,[R12,#96]:ADD R0,R2,R0:ADD R0,R0,R1,ASL#4:LDRB R1,[R0]:� R2,R1,#15 2� Mov R0,#kludge_pause 2� Str R0,[R12,#140] 2� Teq R2,#1:BEQ sqbom 2� Teq R2,#2:BEQ out_mine 2� Teq R2,#3:BEQ sqtrn 2� Teq R2,#6:BEQ sqbon 2� B lsgam 2�: 2� .sqbom 2�5LDR R0,[R12,#112]:ADD R0,R0,#23:STR R0,[R12,#112] 3MOV R1,R11:BL eg_showscor 3DMOV R0,#2:MVN R1,#14:MOV R2,#&1800:MOV R3,#1:SWI "Sound_Control" 3ADR R12,bgame 3"BLDR R0,[R12,#116]:SUBS R0,R0,#1:BEQ out_done:STR R0,[R12,#116] 3,.wypsq LDMFD R13,{R0-R3} 36KLDR R2,[R12,#96]:ADD R0,R2,R0:ADD R0,R0,R1,ASL#4:MOV R1,#0:STRB R1,[R0] 3@B lsgam 3J .sqbon 3T@LDR R0,[R12,#112]:ADD R0,R0,#26:STR R0,[R12,#112]:MOV R1,R11 3^)BL eg_showscor:MOV R0,#4:ADR R1,bonvx 3h SWI "Sound_AttachNamedVoice" 3rDMOV R0,#4:MVN R1,#14:MOV R2,#&1800:MOV R3,#1:SWI "Sound_Control" 3|ADR R12,bgame:B wypsq 3�%.bonvx EQUS "BSgetbonus"+�0:ALIGN 3�.temps EQUD 0 3�$.sqtrn ADR R0,temps:STRB R1,[R0] 3�7MOV R0,#4:ADR R1,travx:SWI "Sound_AttachNamedVoice" 3�DMOV R0,#4:MVN R1,#14:MOV R2,#&2700:MOV R3,#1:SWI "Sound_Control" 3�0ADR R0,ttran:ADR R12,bgame:STR R0,[R12,#132] 3�.lptrn BL eg_wipeyou 3�LDMFD R13!,{R0-R3} 3�-ADD R3,R3,#1:�S R4,R3,#&1F:SUBEQ R2,R2,#1 3�#STMFD R13!,{R0-R3}:BLEQ dectime 3�BL eg_showobjs 3�LDMFD R13,{R0-R3} 3�EADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 42CMP R0,#0:BEQ lptro:ADD R1,R0,#6:BL eg_showyou 4$MOV R0,#19:SWI "OS_Byte":B lptrn 4.lptro BL eg_wipeyou 4&LDMFD R13!,{R0-R3} 40-ADD R3,R3,#1:�S R4,R3,#&1F:SUBEQ R2,R2,#1 4:#STMFD R13!,{R0-R3}:BLEQ dectime 4DBL eg_showobjs 4NLDMFD R13,{R0-R3} 4XEADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 4b=CMP R0,#0:BEQ lptrp:ADD R1,R0,#6:MOV R0,#93:BL eg_showyou 4l$MOV R0,#19:SWI "OS_Byte":B lptro 4v'.lptrp LDMFD R13,{R0-R3}:MOV R11,R2 4�KLDR R2,[R12,#96]:ADD R0,R2,R0:ADD R0,R0,R1,ASL#4:MOV R1,#0:STRB R1,[R0] 4�.lptrq BL eg_wipeyou 4�LDMFD R13!,{R0-R3} 4�-ADD R3,R3,#1:�S R4,R3,#&1F:SUBEQ R2,R2,#1 4�#STMFD R13!,{R0-R3}:BLEQ dectime 4�$BL eg_showobjs:LDMFD R13,{R0-R3} 4�EADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 4�8CMP R0,#0:BEQ lptrr:MOV R0,#19:SWI "OS_Byte":B lptrq 4� .lptrr 4�&MOV R0,#21:MOV R1,#0:SWI "OS_Byte" 4�PADR R12,bgame:LDR R0,[R12,#80]:ADD R2,R12,#28:LDMIA R2,{R1-R11}:MOV R12,#256 4�.ltcsz STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R11}:STMIA R0!,{R1-R10}:ADD R0,R0,#16 4�SUBS R12,R12,#1:BNE ltcsz 5AADR R12,bgame:LDR R0,[R12,#72]:LDRB R0,[R0]:LDR R1,[R12,#136] 54ADD R0,R1,R0,ASL#1:LDRB R10,[R0,#1]:LDRB R9,[R0] 5LDMFD R13,{R0-R3} 5 ADR R0,temps:LDRB R1,[R0] 5*>� R3,R1,#240:ADD R3,R3,#5:MOV R4,#256:MOV R0,R9:MOV R1,R10 54LDR R2,[R12,#96]:MOV R7,#0 5>..lfndr LDRB R5,[R2],#1:CMP R5,R3:BNE sfndr 5H0� R0,R7,#15:� R1,R7,#(15<<4):MOV R1,R1,LSR#4 5R/.sfndr ADD R7,R7,#1:SUBS R4,R4,#1:BNE lfndr 5\LDMFD R13!,{R2-R5} 5fSTMFD R13!,{R0-R1,R4-R5} 5p;LDR R2,[R12,#72]:LDRB R2,[R2]:� R2,R2,#3:BL eg_showmids 5z#LDMFD R13,{R0-R3}:ADR R12,bgame 5�;LDR R2,[R12,#72]:LDRB R2,[R2]:� R2,R2,#7:BL eg_showalls 5�>ADR R0,ttran:ADD R0,R0,#28:ADR R12,bgame:STR R0,[R12,#132] 5�.lptry BL eg_wipeyou 5�LDMFD R13!,{R0-R3} 5�-ADD R3,R3,#1:�S R4,R3,#&1F:SUBEQ R2,R2,#1 5�#STMFD R13!,{R0-R3}:BLEQ dectime 5�BL eg_showobjs 5�LDMFD R13,{R0-R3} 5�EADR R12,bgame:LDR R1,[R12,#132]:LDRB R0,[R1],#1:STR R1,[R12,#132] 5�2CMP R0,#0:BEQ lsgam:ADD R1,R0,#6:BL eg_showyou 5�$MOV R0,#19:SWI "OS_Byte":B lptry 5�%.travx EQUS "BStranspor"+�0:ALIGN 5�: 67.ttran EQUD &BABABBBA:EQUD &BBBBBCBB:EQUD &BCBCBDBC 60EQUD &BDBDBEBD:EQUD &BEBEBFBE:EQUD &BFBEBF00 60EQUD &BFBFBEBF:EQUD &BEBEBDBE:EQUD &BDBDBCBD 6$0EQUD &BCBCBBBC:EQUD &BBBBBABB:EQUD &BABBBA00 6.0EQUD &01010101:EQUD &01010101:EQUD &01010100 68: 6B.dectime 6L�sadr(12,bgame) 6V CMP R2,#0 6`BMI out_time 6jLDR R4,[R12,#8] 6tMOV R5,#320 6~MUL R6,R5,R2 6�SUB R2,R4,R6 6�&MOV R4,#0:MOV R5,#255:MVN R11,#255 6�LDMIA R2,{R6-R9} 6�*� R10,R5,R6:CMP R10,#160:�EQ R6,R6,R11 6�7� R10,R5,R6,ROR#24:CMP R10,#163:�EQ R6,R6,R11,ROR#8 6�8� R10,R5,R6,ROR#16:CMP R10,#162:�EQ R6,R6,R11,ROR#16 6�7� R10,R5,R6,ROR#8:CMP R10,#161:�EQ R6,R6,R11,ROR#24 6�*� R10,R5,R7:CMP R10,#204:�EQ R7,R7,R11 6�7� R10,R5,R7,ROR#24:CMP R10,#207:�EQ R7,R7,R11,ROR#8 6�8� R10,R5,R7,ROR#16:CMP R10,#206:�EQ R7,R7,R11,ROR#16 6�7� R10,R5,R7,ROR#8:CMP R10,#205:�EQ R7,R7,R11,ROR#24 6�*� R10,R5,R8:CMP R10,#206:�EQ R8,R8,R11 7 7� R10,R5,R8,ROR#24:CMP R10,#163:�EQ R8,R8,R11,ROR#8 7 8� R10,R5,R8,ROR#16:CMP R10,#204:�EQ R8,R8,R11,ROR#16 77� R10,R5,R8,ROR#8:CMP R10,#205:�EQ R8,R8,R11,ROR#24 7*� R10,R5,R9:CMP R10,#162:�EQ R9,R9,R11 7(7� R10,R5,R9,ROR#8:CMP R10,#161:�EQ R9,R9,R11,ROR#24 728� R10,R5,R9,ROR#16:CMP R10,#160:�EQ R9,R9,R11,ROR#16 7<STMIA R2,{R6-R9} 7FMOV PC,R14 7P.eg_showyouwithoutmask 7Z�adr (10,bgdat) 7dLLDR R1,[R12,#16]:MOV R2,#7<<10:� R0,R2,R3,ASL#10:ADD R0,R1,R0:MOV R1,R11 7nLDR R11,[R10,#-12] 7x�LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7��LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11:LDMIA R0!,{R3-R10}:STMIA R1,{R3-R10}:ADD R1,R1,R11 7�MOV PC,R14 7�1.eg_wipeacr ADD R10,R12,#28:LDMIA R10,{R2-R9} 7�ISTMIA R11,{R2-R9}:ADD R11,R11,#320:STMIA R11,{R2-R9}:ADD R11,R11,#320 7�CSTMIA R11,{R2-R9}:ADD R11,R11,#320:STMIA R11,{R2-R9}:MOV PC,R14 7� .eg_sprwl 7�4LDR R3,[R12,#104]:ADD R1,R3,R2,ASL#10:MOV R2,#16 8a.lspwa LDMIA R1!,{R3-R10}:STMIA R0,{R3-R10}:ADD R0,R0,#320:SUBS R2,R2,#1:BNE lspwa:MOV PC,R14 8.eg_wipedwn MOV R2,#0 8�STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368: 8"�STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368: 8,�STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:STR R2,[R11],#368:MOV PC,R14 86 .eg_sprwh 8@CLDR R3,[R12,#104]:ADD R1,R3,R2,ASL#10:ADD R1,R1,#512:MOV R2,#32 8J_.lspwd LDMIA R1!,{R3-R6}:STMIA R0,{R3-R6}:ADD R0,R0,#368:SUBS R2,R2,#1:BNE lspwd:MOV PC,R14 8T.botty EQUD bspau% 8^3.pauseprint ADR R1,botty:LDR R1,[R1]:MOV R2,#64 8h�.lpapr LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12} 8r�LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12}:LDMIA R1!,{R3-R12}:STMIA R0!,{R3-R12} 8|NLDMIA R1!,{R3-R7}:STMIA R0!,{R3-R7}:ADD R0,R0,#220:SUBS R2,R2,#1:BNE lpapr 8�MOV PC,R14 8�H.pausewipe �sadr(1,bgame):ADD R1,R1,#28:LDMIA R1,{R2-R12}:MOV R1,#64 8��.lpawp STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R12}:STMIA R0!,{R2-R7} 8�*ADD R0,R0,#220:SUBS R1,R1,#1:BNE lpawp 8�MOV PC,R14 8�: 8�]:� 8�� 8�: 8���editor 8� �0Ȝ0 8�vlevl%=1:A%=0:� efade 8�� lldwn%=1024 � 768 � -4 96ș "OS_SpriteOp",34+256,bspri%,"editor",0,lldwn%,0 9Ȗ:� 9(�print("DO YOU WANT TO EDIT ",0,500) 9&(�print("THE EXISTING LEVELS ",0,436) 90*�print("-PRESS ""O""- OR PRESS",0,372) 9:*�print("""N"" TO CREATE NEW ",0,308) 9D0�print("SOME NEW LEVELS. ",0,244):*FX21,0 9N� 9Xckeyp$=�caps(�) 9b� ckeyp$="O" � ckeyp$="N" 9l7� ckeyp$="N" � �newlevels � � �editcode � � efade:� 9v� lsoff%=1�73 9�ȓ 0,0,1280,580 � 0,-8 9�Ȗ:� 9��print("HELP PAGE",608,980) 9�� llacr%=-184 � 180 � 4 9�7ș "OS_SpriteOp",34+256,bspri%,"mouse",llacr%,346,0 9�Ȗ:� 9�� llacr%=-184 � 0 � 4 9�6ș "OS_SpriteOp",34+256,bspri%,"mouse",llacr%,32,0 9�Ȗ:� 9� �print("WHILE IN A",478,706) 9� �print("WALL SPACE",478,644) 9�!�print("IN A SQUARE",462,286) 9�"�print("PLACE A WALL",376,506) :$�print("IMMOVABLE WALL",376,442) :!�print("REMOVE WALL",376,378) :"�print("PLACE OBJECT",192,192) : �print("DO NOWT",192,128) :*"�print("REMOVE OBJECT",192,64) :4!�print("CLICK MOUSE",540,900) :>)�print("TO CONTINUE",540,836):*FX21,9 :H� :Rȗ xdumy%,xdumy%,xbutt% :\� xbutt%>0 :f� :p� efade :z�printmap(�) :�ȗ �:vptrn%=1:�nextptr :�4ș "OS_SpriteOp",256+34,bspri%,"editbar",0,960,0 :�9ș "OS_SpriteOp",256+34,bspri%,"editnumbersn",0,320,0 :�8ș "OS_SpriteOp",256+34,bspri%,"editobjects",0,508,0 :�-�print(�(blevs%?(13583+vlevl%)),204,1016) :��print(�(vlevl%),640,1016) :�boxup%=0:boxdn%=-1:boxan%=1 :�&�animbox:fexit%=�:fdraw%=�:*FX21,9 :�� :�ȗ mousx%,mousy%,mousb% :�� mousb%>0 � :�4� mousx%<180 � mousy%>508 � mousy%<600 � �selobj :�?� mousx%<180 � mousy%<500 � mousy%>320 � boxdn%>-1 � �selno ;� mousy%>960 � �barclix ;B� mousx%>176 � mousy%>16 � mousx%<1100 � mousy%<940 � �levclix ;� ;$"� � fexit% � �animbox:�nextptr ;.Ȗ ;8� fexit% ;B� fdraw% ;Lȗ � ;V� efade ;`� ;j: ;t ��barclix ;~*� mousx%>132 � mousx%<184 � �time_up:� ;�,� mousx%>396 � mousx%<452 � �time_down:� ;�+� mousx%>576 � mousx%<628 � �level_up:� ;�� mousx%>1160 � �ehelp:� ;�� mousx%>1048 � �opts:� ;�� mousx%>936 � �high:� ;�� mousx%>824 � �pass:� ;� � mousx%>772 � �level_down:� ;�� ;�: ;� ��time_up ;�fsave%=� ;�blevs%?(13583+vlevl%)+=1 <