home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-04-22 | 147.0 KB | 9,989 lines |
-
- #name Code.Code
-
- #type &ffd
- #include <Main$Path>Extasm.AsmLib.MYDIV
-
- #set x=1
- #include <OddBall$Path>Sources.Structures
- #set x=1
- #include <OddBall$Path>Sources.Variables
- #set x=1
- .start
- STMFD R13!,{R14}
- BL setupvars ;No use of R12 before this!
- BL loadfiles
- ADRVS R0,loadfailedtext
- SWIVS OS_GenerateError
- BL setup
- BL hackcheck
- BL setupplayer
- BL setupsounds
- BL configupdate
- BL modeactive
- BL demostart
- ADR R0,loadmes
- BL message
- BL mainloop
- LDMFD R13!,{PC}
-
- .loadmes
- DCD (160+&180)<<12, 224<<12, -2<<12, 0, &01800001,0
- DCB "$ DIGITAL PSYCHOSIS 1995",0
- ALIGN
-
- .mainloop
- STMFD R13!,{R14}
- ;BL releasedemo
- ;MVN R0,#1
- ;STR R0,[R12,#v.loadedlev]
- BL dograbs
- BL scangrab
- .lifeloop
- .reloadloop
- BL wipesoundtab
- MOV R0,#batstab
- SWI Amnesia_CountObjects
- CMP R0,#0
- BLEQ makebat
-
- LDR R1,[R12,#v.demomode]
- CMP R1,#1
- MOV R0,#texttab
- SWINE Amnesia_WipeTable
- .loop
- BL setupcanvas
- LDR R0,[R12,#v.levelno]
- LDR R1,[R12,#v.loadedlev]
- CMP R1,R0
- BLNE levelswap
- MOV R0,#1
- STR R0,[R12,#v.masterplot]
- BL runclocks
- BL plmove
- BL redcheck
- BL goodycheck
- BL movecent
- BL processblocks
- BL processbat
- BL processballs
- BL processstars
- BL processbullets
- BL bateffects
- BL processdecor
- BL texthandler
- BL doreps
-
- BL colchblockball
- BL colchbatball
- BL colchbatstars
- BL colchblocks
-
- .mainloop2
- LDR R0,[R12,#v.levelno]
- LDR R1,[R12,#v.loadedlev]
- CMP R1,R0
- BLNE levelswap
- MOV R0,#0
- STR R0,[R12,#v.masterplot]
- BL scanset
- BL scanupdate
- BL setupcanvas
- BL runclocks
- BL plmove
- BL redcheck
- BL goodycheck
- BL movecent
- BL setplotoffset
-
- BL plotbackdrop
- BL processedge
- BL processblocks
- BL processbat
-
- BL processballs
- BL processstars
- BL processbullets
- BL bateffects
- BL processdecor
- BL texthandler
- BL doreps
- ;BL showrate
- ;BL showattn
- BL scoreupdate
- BL livesupdate
- BL ballsupdate
- BL goodyupdate
- BL setupcanvas
- BL scanwrite
-
- BL colchblockball
- BL colchbatball
- BL colchbatstars
- BL colchblocks
- BL batsound
- BL makesounds
- BL deathfade
- LDR R0,[R12,#v.pending]
- CMP R0,#8
- MOV R0,#0
- MOVEQ R0,#4
- STR R0,[R12,#v.pending]
- MOV R0,#0
- STR R0,[R12,#v.exit]
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BLEQ demomenu
- BL writebank
- LDR R0,[R12,#v.blocksleft]
- CMP R0,#0
- BNE nonoblocks
- LDR R0,[R12,#v.levelnet]
- LDR R0,[R0,#net.backdrop]
- TST R0,#1<<30
- BNE nonoblocks
- BLEQ noblocks
- .nonoblocks
- LDR R0,[R12,#v.newlevelctr]
- CMP R0,#0
- BGT newlevel
- .newlevelins
- BL keyscan
- BL escapetest
- LDR R0,[R12,#v.exit]
- CMP R0,#1
- BEQ exit
- CMP R0,#3
- BEQ reloadloop
- LDR R0,[R12,#v.dead]
- CMP R0,#200
- BGE handledeath
- .handledeathins
- LDR R0,[R12,#v.frameinc]
- CMP R0,#1
- BEQ mainloop2
- B loop
- .handledeath
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BNE noskipdeath
- LDR R0,[R12,#v.dead]
- CMPGE R0,#500
- BLT handledeathins
- .noskipdeath
- MOV R0,#0
- STR R0,[R12,#v.dead]
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BEQ demolife
- LDR R3,[R12,#v.ballxhome]
- LDR R4,[R12,#v.ballyhome]
- BL makeball
- BL homebat
- LDR R0,[R12,#v.levelno]
- TST R0,#&400
- BNE warpdead
-
- LDR R0,[R12,#v.pllives]
- SUBS R0,R0,#1
- STR R0,[R12,#v.pllives]
- BPL lifeloop
- BL highscores
- BL demostart
- B lifeloop
- LDMFD R13!,{PC}
-
- .warpdead
- B lifeloop
-
- .demolife
- MVN R0,#0
- STR R0,[R12,#v.levelno]
- B lifeloop
-
- .exit
- BL emptykeybuf
- MOV R0,#4
- MOV R1,#0
- SWI OS_Byte
- MOV R0,#124
- SWI OS_Byte
- BL defaultmouse
- LDMFD R13!,{PC}
-
- .escapetest
- STMFD R13!,{R14}
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- CMPNE R0,#2
- BNE normaltest
- SWI OS_ReadEscapeState
- LDMCCFD R13!,{PC}
- MOV R0,#124
- SWI OS_Byte
- LDR R0,[R12,#v.menuno]
- CMP R0,#0
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- LDMNEFD R13!,{PC}
- LDR R0,[R12,#v.menucsr]
- CMP R0,#6
- MOV R0,#6
- STR R0,[R12,#v.menucsr]
- LDMNEFD R13!,{PC}
- MOV R0,#1
- STR R0,[R12,#v.exit]
- #rept 7
- BL menufade
- BL menubank
- #endr
- LDMFD R13!,{PC}
-
- .normaltest
- MOV R0,#-1
- STR R0,[R12,#v.lastmenu]
- MOV R3,#0
- SWI OS_ReadEscapeState
- BCS escapetrue
- BL gamenumberscan
- CMP R1,#137
- BLEQ emptykeybuf
- CMP R1,#137
- MOVEQ R3,#0
- BEQ escapetrue
- MOV R0,#0
- STR R0,[R12,#v.lastmenu]
-
- CMP R3,#0
- LDMEQFD R13!,{PC}
- CMP R3,#6
- MOVEQ R3,#0
- .escapetrue
- STR R3,[R12,#v.menuno]
- LDR R0,[R12,#v.lastmenu]
- CMP R0,#0
- STRGE R3,[R12,#v.lastmenu]
- MOV R0,#1
- STR R0,[R12,#v.menucsr]
- MOV R0,#124
- SWI OS_Byte
- .escapeloop
- LDR R0,[R12,#v.lastmenu]
- CMP R0,#0
- LDR R0,[R12,#v.menuno]
- STRGE R0,[R12,#v.lastmenu]
- LDR R0,[R12,#v.menuno]
-
- CMP R0,#2
- CMPNE R0,#3
- BNE slskip
- CMP R0,#2
- BLEQ escapesave
- CMP R0,#3
- BLEQ escapeload
- B slins
- .slskip
- BL menufade
-
- BL demomenu
- BL menubank
- .slins
- LDR R0,[R12,#v.menuno]
- LDR R1,[R12,#v.lastmenu]
- CMP R0,R1
- LDMLTFD R13!,{PC}
- LDR R0,[R12,#v.loadedlev]
- CMP R0,#-1
- LDMEQFD R13!,{PC}
- SWI OS_ReadEscapeState
- BLCS escapeescape
- LDR R0,[R12,#v.exit]
- CMP R0,#1
- CMPNE R0,#2
- CMPNE R0,#3
- LDMEQFD R13!,{PC}
- B escapeloop
-
- .escapeescape
- STMFD R13!,{R14}
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- LDR R0,[R12,#v.menucsr]
- CMP R0,#6
- MOV R0,#6
- STRNE R0,[R12,#v.menucsr]
- MOV R0,#1
- STREQ R0,[R12,#v.exit]
- MOV R0,#124
- SWI OS_Byte
- LDMFD R13!,{PC}
-
- .escapeload
- STMFD R13!,{R14}
- MOV R0,#1
- STR R0,[R12,#v.pending]
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- LDR R0,[R12,#v.lastmenu]
- CMP R0,#0
- MOV R0,#3
- STRGE R0,[R12,#v.lastmenu]
- MOV R0,#3
- STR R0,[R12,#v.menucsr]
- MOV R0,#0
- BL loadmenu
- CMP R0,#"L"
- LDMNEFD R13!,{PC}
- MOV R0,#3
- STR R0,[R12,#v.exit]
- LDMFD R13!,{PC}
-
- .escapesave
- STMFD R13!,{R14}
- LDR R0,[R12,#v.savestate]
- CMP R0,#1
- BEQ stopsave
- MOV R0,#3
- STR R0,[R12,#v.pending]
- LDR R0,[R12,#v.lastmenu]
- CMP R0,#0
- MOV R0,#2
- STRGE R0,[R12,#v.lastmenu]
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- MOV R0,#2
- STR R0,[R12,#v.menucsr]
- BL savemenu
- LDMFD R13!,{PC}
-
- .stopsave
- ADR R0,stopsavemes
- BL message
- BL message
- BL message
- MOV R0,#2
- STR R0,[R12,#v.exit]
- LDMFD R13!,{PC}
- .stopsavemes
- DCD 160<<12,108<<12,0,-1<<12,&00800001,0
- DCB "SAVE AVAILABLE",0
- ALIGN
- DCD 160<<12,128<<12,0,0,&00800001,0
- DCB "AT THE END OF",0
- ALIGN
- DCD 160<<12,148<<12,0,1<<12,&00800001,0
- DCB "THE LEVEL ONLY.",0
- ALIGN
-
- .noblocks
- STMFD R13!,{R14}
- LDR R0,[R12,#v.levelno]
- TST R0,#&400
- LDMNEFD R13!,{PC}
- LDR R0,[R12,#v.newlevelctr]
- CMP R0,#0
- LDMGTFD R13!,{PC}
- MOV R0,#1
-
- STR R0,[R12,#v.newlevelctr]
- BL newlevelmes
- LDMFD R13!,{PC}
-
- .newlevel
- LDR R0,[R12,#v.newlevelctr]
- LDR R1,[R12,#v.frameinc]
- ADD R0,R0,R1
- STR R0,[R12,#v.newlevelctr]
- LDR R1,[R12,#v.levelno]
- TST R1,#&400
- MOV R1,#100
- MOVNE R1,#300
- CMP R0,R1
- BLT newlevelins
- MOV R0,#0
- STR R0,[R12,#v.newlevelctr]
- STR R0,[R12,#v.dead]
- LDR R0,[R12,#v.warped]
- BIC R0,R0,#1<<15
- CMP R0,#0
- BGT warplevel
- .warplevelins
- LDR R0,[R12,#v.levelno]
- BIC R0,R0,#&400
- ADD R0,R0,#1
- STR R0,[R12,#v.levelno]
- CMP R0,#42
- BLT lifeloop
- BL highscores
- BL demostart
- ADR R0,demendmes
- BL message
- B lifeloop
-
- .warplevel
- LDR R0,[R12,#v.levelno]
- TST R0,#&400
- BNE warplevelins
- ORR R0,R0,#&400
- STR R0,[R12,#v.levelno]
- LDR R0,[R12,#v.warped]
- MOV R0,R0,LSR #16
- MOV R1,#250
- MUL R0,R1,R0
- STR R0,[R12,#v.warptime]
- B lifeloop
-
- .demendmes
- DCD 160+&100<<12, 60<<12, -2<<12, 0, &01000001, 0
- DCB "GAME COMPLETED!",0
- ALIGN
-
- .levelswap
- STMFD R13!,{R14}
- MOV R0,#ballstab
- SWI Amnesia_WipeTable
- MOV R0,#starstab
- SWI Amnesia_WipeTable
- MOV R0,#decortab
- SWI Amnesia_WipeTable
- LDR R1,[R12,#v.demomode]
- CMP R1,#1
- MOV R0,#texttab
- SWINE Amnesia_WipeTable
-
-
- BL loadlevel
- MOV R0,#ballstab
- SWI Amnesia_CountObjects
- CMP R0,#0
- BGT nomakeball
- LDR R3,[R12,#v.ballxhome]
- LDR R4,[R12,#v.ballyhome]
- BL makeball
- BL homebat
- .nomakeball
- LDR R1,[R12,#v.demomode]
- CMP R1,#1
- BLNE levstartmes
- LDR R0,[R12,#v.levelno]
- CMP R0,#1
- LDMEQFD R13!,{PC}
- LDR R1,[R12,#v.savestate]
- CMP R1,#1
- MOVEQ R1,#8
- STREQ R1,[R12,#v.pending]
- LDMFD R13!,{PC}
-
- .levstartmes
- LDR R0,[R12,#v.levelno]
- TST R0,#&400
- BNE warpstartmes
- STMFD R13!,{R14}
- BL intromes
- LDR R0,[R12,#v.levelno]
- CMP R0,#1
- BLEQ gamestartmes
- LDR R0,[R12,#v.levelno]
- ADR R1,levelnotext
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- LDR R0,[R12,#v.blocksleft]
- ADR R1,blocknumtext
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- LDR R0,[R12,#v.blocksleft]
- ADR R1,blocknumtext2
- MOV R2,#8
- SWI XOS_ConvertCardinal2
-
- ADR R0,levstarttext
- BL message
- ADR R0,levstarttext2
- BL message
- ADR R0,levstarttext3
- BL message
- BL writeblocksleft
- LDMFD R13!,{PC}
-
- .levstarttext
- DCD 160<<12,74<<12,0,0,&800001,0
- DCB "LEVEL "
- .levelnotext
- DBB 8
- DCB 0
- ALIGN
- .levstarttext2
- DCD 160<<12,128<<12,0,0,&800001,blocklinktext-levstarttext2
- .blocknumtext
- DBB 8
- DCB 0
- ALIGN
- .levstarttext3
- DCD 160<<12,148<<12,0,0,&800001,0
- DCB "BLOCKS TO HIT",0
- ALIGN
-
- .blocklinktext
- DCD 160<<12,128<<12,-3<<12,13<<10,&1F0001,blockslefttext-blocklinktext
- .blocknumtext2
- DBB 8
- DCB 0
- ALIGN
-
- .warpstartmes
- STMFD R13!,{R14}
- BL intromes
- LDR R0,[R12,#v.warptime]
- MOV R1,#250
- MYDIV R3,R0,R1
- MOV R0,R3
- ADR R1,warpnumtext
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- MOV R0,R3
- ADR R1,warpnumtext2
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- LDR R0,[R12,#v.warptime]
- MOV R1,#50
- MYDIV R3,R0,R1
- MOV R0,R3
- ADR R1,warptimetext
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- MOV R0,R3
- ADR R1,warptimetext2
- MOV R2,#8
- SWI XOS_ConvertCardinal2
-
- ADR R0,warpstarttext
- BL message
- BL message
- BL message
- ADR R0,warpstarttext3
- BL message
- BL message
-
- ADR R0,warpstarttext2
- BL message
- BL writetimeleft
- LDMFD R13!,{PC}
-
- .warpstarttext
- DCD 160<<12,70<<12,0,0,&400001,0
- DCB "BONUS LEVEL",0
- ALIGN
- DCD 160<<12,90<<12,0,0,&500001,0
- DCB "NUMBER OF BALLS",0
- ALIGN
- DCD 160<<12,130<<12,0,0,&700001,0
- DCB "TIME = 5 X "
- .warpnumtext2
- DBB 8
- DCB 0
- ALIGN
- .warpstarttext3
- DCD 160<<12,170<<12,0,0,&900001,0
- DCB "SECONDS",0
- ALIGN
- DCD 160<<12,110<<12,0,0,&600001,0
- DCB "WARPED = "
- .warpnumtext
- DBB 8
- DCB 0
- ALIGN
-
-
- .warpstarttext2
- DCD 160<<12,150<<12,0,0,&800001,warplinktext-warpstarttext2
- .warptimetext
- DBB 8
- DCB 0
- ALIGN
-
- .warplinktext
- DCD 160<<12,150<<12,-3<<12,41<<8,&1F0001,timelefttext-warplinktext
- .warptimetext2
- DBB 8
- DCB 0
- ALIGN
-
- .intromes
- STMFD R13!,{R14}
- LDR R11,[R12,#v.levelnet]
- ADD R10,R11,#net.text1
- ADR R9,introtext1mes
- MOV R8,#32
- .loop8d
- LDR R0,[R10],#4
- STR R0,[R9],#4
- SUBS R8,R8,#4
- BGT loop8d
- ADD R10,R11,#net.text2
- ADR R9,introtext2mes
- MOV R8,#32
- .loop8c
- LDR R0,[R10],#4
- STR R0,[R9],#4
- SUBS R8,R8,#4
- BGT loop8c
- ADR R0,introtext1
- BL message
- ADR R0,introtext2
- BL message
- LDMFD R13!,{PC}
- .introtext1
- DCD 160<<12,20<<12,0,0,&00800001,0
- .introtext1mes
- DBB 32
- DCB 0
- ALIGN
- .introtext2
- DCD 160<<12,40<<12,0,0,&00800001,0
- .introtext2mes
- DBB 32
- DCB 0
- ALIGN
-
-
-
-
- .gamestartmes
- STMFD R13!,{R14}
- LDR R1,[R12,#v.diff]
- ADR R0,levbeginner
- CMP R1,#2
- ADREQ R0,levexpert
- CMP R1,#3
- ADREQ R0,levpsychic
- BL message
- LDMFD R13!,{PC}
- .levbeginner
- DCD 160<<12,200<<12,0,0<<12,&800001,0
- DCB "LEVEL : BEGINNER",0
- ALIGN
- .levexpert
- DCD 160<<12,200<<12,0,0<<12,&800001,0
- DCB "LEVEL : EXPERT",0
- ALIGN
- .levpsychic
- DCD 160<<12,200<<12,0,0<<12,&800001,levpsychic2 - levpsychic
- DCB "LEVEL : PSYCHIC!",0
- ALIGN
- .levpsychic2
- DCD 160<<12,200<<12,0,0<<12,&400001,0
- DCB "GOOD LUCK!",0
- ALIGN
-
- .newlevelmes
- STMFD R13!,{R14}
- ADR R0,newleveltext
- BL message
- LDMFD R13!,{PC}
-
- .newleveltext
- DCD 160<<12,128<<12,0,0<<12,&400001,0
- DCB "LEVEL COMPLETE",0
- ALIGN
-
- .warpendmes
- STMFD R13!,{R14}
- ADR R0,warpendtext
- BL message
- BL message
- LDMFD R13!,{PC}
-
- .warpendtext
- DCD 160<<12,40<<12,0,0<<12,&400001,0
- DCB "OUT OF TIME",0
- ALIGN
- DCD 160<<12,220<<12,0,0<<12,&400001,0
- DCB "BONUS LEVEL OVER",0
- ALIGN
-
- .warpdiemes
- STMFD R13!,{R14}
- ADR R0,warpdietext
- BL message
- LDMFD R13!,{PC}
-
- .warpdietext
- DCD 160<<12,220<<12,0,0<<12,&400001,0
- DCB "BONUS LEVEL OVER",0
- ALIGN
-
- .runclocks
- STMFD R13!,{R14}
- ADD R1,R12,#v.warptimer
- MOV R2,#7
- .loop83
- LDR R0,[R1]
- TST R0,#&100
- ADDEQ R0,R0,#16
- ADDNE R0,R0,#8
- STR R0,[R1],#4
- SUBS R2,R2,#1
- BGT loop83
- LDR R0,[R12,#v.levelno]
- TST R0,#&400
- LDMEQFD R13!,{PC}
- BL writetimeleft
- LDR R0,[R12,#v.warptime]
- SUB R0,R0,#1
- CMP R0,#0
- STRGE R0,[R12,#v.warptime]
- CMP R0,#1
- BLEQ warpendmes
- LDR R0,[R12,#v.dead]
- CMP R0,#1
- BLEQ endwarp
- CMP R0,#50
- BLEQ warpdiemes
- LDR R0,[R12,#v.newlevelctr]
- CMP R0,#20
- BLGE warpexithandler
-
- LDR R0,[R12,#v.warptime]
- CMP R0,#0
- BLLE endwarp
- LDMFD R13!,{PC}
-
- .endwarp
- STMFD R13!,{R0,R14}
- LDR R0,[R12,#v.newlevelctr]
- CMP R0,#0
- LDMNEFD R13!,{R0,PC}
- MOV R0,#1
- STR R0,[R12,#v.newlevelctr]
- LDMFD R13!,{R0,PC}
-
- .warpexithandler
-
- STMFD R13!,{R14}
- LDR R0,[R12,#v.warped]
- CMP R0,#1<<15
- LDMEQFD R13!,{PC}
- AND R0,R0,#&FF
- MOV R1,#500
- MUL R1,R0,R1
- MOV R6,R1
- LDR R2,[R12,#v.plscore]
- ADD R2,R2,R1
- STR R2,[R12,#v.plscore]
- MOV R0,R1
- ADR R1,warphannum2
- MOV R2,#8
- SWI XOS_ConvertCardinal4
- LDR R0,[R12,#v.warped]
- AND R0,R0,#&FF
- ADR R1,warphannum1
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- ADR R0,warphantext
- BL message
- BL message
- BL message
- ADR R0,warphantext2
- BL message
- LDR R2,[R12,#v.warptime]
- MOV R1,#50
-
- MYDIV R3,R2,R1
- MOV R1,#50
- MUL R1,R3,R1
- ADD R6,R6,R1
- LDR R2,[R12,#v.plscore]
- ADD R2,R2,R1
- STR R2,[R12,#v.plscore]
- MOV R0,R1
- ADR R1,warphantime2
- MOV R2,#8
- SWI XOS_ConvertCardinal4
- MOV R0,R3
- ADR R1,warphantime1
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- ADR R0,timebonustext
- BL message
- BL message
- ADR R0,timebonustext2
- BL message
- LDR R5,[R12,#v.hinames]
- ADD R5,R5,#192
- LDR R0,[R12,#v.levelno]
- BICS R0,R0,#&400
- MOVMI R0,#0
- CMP R0,#50
- MOVGE R0,#0
- ADD R5,R5,R0,LSL #2
- LDR R7,[R5]
- CMP R6,R7
- STRGT R6,[R5]
- MOV R0,R6
- ADR R1,warptotal
- MOV R2,#8
- SWI XOS_ConvertCardinal4
- MOV R0,R7
- ADR R1,warprecord
- MOV R2,#8
- SWI XOS_ConvertCardinal4
- ADR R0,warptotaltext
- BL message
- ADR R0,warprecordtext
- BL message
- CMP R6,R7
- BLGT hisave
- MOV R0,#1<<15
- STR R0,[R12,#v.warped]
- LDMFD R13!,{PC}
-
- .warphantext
- DCD 160<<12,80<<12,0,0,&800001,0
- DCB "BONUS FOR BALLS",0
- ALIGN
- DCD 160<<12,100<<12,0,0,&900001,0
- DCB "RETURNED",0
- ALIGN
- DCD 96<<12,120<<12,0,0,&A00001,0
- DCB "500 X "
- .warphannum1
- DBB 8
- DCB 0
- ALIGN
- .warphantext2
- DCD 224<<12,120<<12,0,0,&A00001,0
- DCB "= "
- .warphannum2
- DBB 8
- DCB 0
- ALIGN
- .timebonustext
- DCD 160<<12,140<<12,0,0,&B00001,0
- DCB "TIME BONUS",0
- ALIGN
- DCD 96<<12,160<<12,0,0,&C00001,0
- DCB "50 X "
- .warphantime1
- DBB 8
- DCB 0
- ALIGN
- .timebonustext2
- DCD 224<<12,160<<12,0,0,&C00001,0
- DCB "= "
- .warphantime2
- DBB 8
- DCB 0
- ALIGN
-
-
- .warptotaltext
- DCD 160<<12,180<<12,0,0,&D00001,0
- DCB "TOTAL BONUS ="
- .warptotal
- DBB 8
- DCB 0
- ALIGN
- .warprecordtext
- DCD 160<<12,200<<12,0,0,&E00001,0
- DCB "RECORD ="
- .warprecord
- DBB 8
- DCB 0
- ALIGN
-
-
- .plmove
- STMFD R13!,{R14}
- LDR R0,[R12,#v.buttons]
- STR R0,[R12,#v.lastbuttons]
- SWI OS_Mouse
- LDR R3,[R12,#v.demomode]
- CMP R3,#1
- BLEQ demoread
- LDR R3,[R12,#v.demomode]
- CMP R3,#2
- BLEQ demowrite
-
- STR R2,[R12,#v.buttons]
- STMFD R13!,{R0,R1}
- SUB R3,R0,#640
- RSB R4,R1,#512
- LDR R0,[R12,#v.mousesens]
- MOV R3,R3,ASL R0
- MOV R4,R4,ASL R0
- LDR R1,[R12,#v.xpos]
- LDR R2,[R12,#v.ypos]
- ADD R5,R1,R3
- ADD R6,R2,R4
- LDR R7,[R12,#v.xlim]
- CMN R1,R7
- BLE xlowstop
- CMP R1,R7
- BGE xhighstop
- .xstopins
- LDR R7,[R12,#v.ylim]
- CMN R2,R7
- BLE ylowstop
- CMP R2,R7
- BGE yhighstop
- .ystopins
- ADD R1,R1,R3
- ADD R2,R2,R4
- STR R1,[R12,#v.xpos]
- STR R2,[R12,#v.ypos]
- MOV R2,#3<<24
- STR R2,[R12,#v.osblock0]
- LDMFD R13!,{R0,R1}
- LDR R2,[R12,#v.mousesens]
- MOV R5,R3
- CMP R5,#0
- RSBLT R5,R5,#0
- CMP R5,#1<<8
- MOVLE R0,#640
- BLE xmoveskip
- CMP R3,#0
- SUBGT R0,R0,R2,LSR #1
- ADDLT R0,R0,R2,LSR #1
- .xmoveskip
- MOV R5,R4
- CMP R5,#0
- RSBLT R5,R5,#0
- CMP R5,#1<<8
- MOVLE R1,#512
- BLE ymoveskip
- CMP R4,#0
- SUBLT R1,R1,R2,LSR #1
- ADDGT R1,R1,R2,LSR #1
- .ymoveskip
- LDR R2,[R12,#v.buttons]
- ORR R0,R0,R1,LSL #16
- STR R0,[R12,#v.osblock1]
- ADD R1,R12,#v.osblock0+3
- MOV R0,#21
- SWI OS_Word
-
-
- LDMFD R13!,{PC}
-
- .xlowstop
- CMP R3,#0
- MOVLT R3,#0
- RSBLT R1,R7,#0
- B xstopins
- .xhighstop
- CMP R3,#0
- MOVGT R3,#0
- MOVGT R1,R7
- B xstopins
- .ylowstop
- CMP R4,#0
- MOVLT R4,#0
- RSBLT R2,R7,#0
- B ystopins
- .yhighstop
- CMP R4,#0
- MOVGT R4,#0
- MOVGT R2,R7
- B ystopins
-
-
- .demoread
- STMFD R13!,{R14}
- LDR R3,[R12,#v.demoadr]
- LDR R4,[R12,#v.democtr]
- LDR R5,[R3]
- CMP R4,R5
- BGE demoend
- LDR R0,[R3,R4]
- AND R1,R0,#&3FFF<<16
- MOV R1,R1,LSR #16
- AND R2,R0,#3<<30
- MOV R2,R2,LSR #29
- AND R0,R0,#&3FFF
- LDR R3,[R12,#v.democtr]
- ADD R3,R3,#4
- STR R3,[R12,#v.democtr]
- MOV R3,#0
- STR R3,[R12,#v.dead]
- .demoreadins
- LDMFD R13!,{PC}
-
- .demoend
- LDR R3,[R12,#v.dead]
- ADD R3,R3,#1
- STR R3,[R12,#v.dead]
-
- MOV R0,#640
- MOV R1,#496
- MOV R2,#0
- B demoreadins
-
-
-
-
-
- .demowrite
- STMFD R13!,{R0-R2,R14}
- LDR R3,[R12,#v.demoadr]
- LDR R4,[R12,#v.democtr]
- AND R0,R0,#&3FFF
- AND R1,R1,#&3FFF
- ORR R0,R0,R1,LSL #16
- MOV R2,R2,LSR #1
- ORR R0,R0,R2,LSL #30
- STR R0,[R3,R4]
- ADD R4,R4,#4
- STR R4,[R12,#v.democtr]
- CMP R4,#demolen
- LDMLTFD R13!,{R0-R2,PC}
- LDR R0,[R12,#v.demoadr]
- ADR R1,demosavename
- MOV R2,#&FFD
- SWI Amnesia_SaveFile
- LDR R0,[R12,#v.demoadr]
- SWI Amnesia_ReleaseBlock
- MOV R0,#0
- STR R0,[R12,#v.demoadr]
- STR R0,[R12,#v.demomode]
- ADR R0,savedmessage
- BL message
- LDMFD R13!,{R0-R2,PC}
-
- .demosavename
- DCB "OddBall:Demo.Demo",0
- ALIGN
-
- .savedmessage
- DCD 160<<12,128<<12,0,0,&01000001,0
- DCB "DEMO SAVED",0
- ALIGN
-
-
-
-
-
- .setplotoffset
- STMFD R13!,{R14}
- LDR R0,[R12,#v.plxcent]
- LDR R1,[R12,#v.plycent]
- SUB R0,R0,#plxcent
- SUB R1,R1,#plycent
- BIC R0,R0,#&FFF
- BIC R1,R1,#&FFF
- RSB R0,R0,#0
- RSB R1,R1,#0
- LDR R2,[R12,#v.plxcent]
- ADD R0,R0,#((canvaswidth-windwidth)<<11)
- STR R0,[R12,#v.xplotofs]
- STR R1,[R12,#v.yplotofs]
- BIC R0,R0,#&3FFF
- SWI Amnesia_SetPlotOffset
- LDR R0,[R12,#v.xplotofs]
- MOV R0,R0,ASR #12
- AND R0,R0,#3
- RSB R0,R0,#3
- STR R0,[R12,#v.plotnibble]
- LDMFD R13!,{PC}
-
- .movecent
- STMFD R13!,{R14}
- LDR R0,[R12,#v.dead]
- CMP R0,#0
- BEQ normalcent
- LDR R0,[R12,#v.batpresent]
- CMP R0,#0
- LDMEQFD R13!,{PC}
- .deadcent
- LDR R1,[R12,#v.ballxpos]
- LDR R0,[R12,#v.plxcent]
- SUB R2,R0,R1
- MOV R2,R2,ASR #3
- CMP R2,#0
- RSBLT R2,R2,#0
- CMP R2,#32<<12
- MOVGT R2,#32<<12
- CMP R0,R1
- SUBGT R0,R0,R2
- ADDLT R0,R0,R2
- BIC R0,R0,#&FFF
- STR R0,[R12,#v.plxcent]
-
- LDR R1,[R12,#v.ballypos]
- LDR R0,[R12,#v.plycent]
- SUB R2,R0,R1
- MOV R2,R2,ASR #3
- CMP R2,#0
- RSBLT R2,R2,#0
- CMP R2,#32<<12
- MOVGT R2,#32<<12
- CMP R0,R1
- SUBGT R0,R0,R2
- ADDLT R0,R0,R2
- BIC R0,R0,#&FFF
- STR R0,[R12,#v.plycent]
- LDMFD R13!,{PC}
-
- .normalcent
- LDR R2,[R12,#v.xpos]
- LDR R3,[R12,#v.ballxpos]
- SUB R0,R3,R2
- LDR R2,[R12,#v.ypos]
- ADD R2,R2,#128<<12; for ball above bat
- LDR R3,[R12,#v.ballypos]
- SUB R1,R3,R2
- MOV R0,R0,ASR #2
- MOV R1,R1,ASR #2
- MOV R2,#64<<12; max vector length
- BL slideback
- LDR R2,[R12,#v.xpos]
- ADD R2,R2,R0
- LDR R3,[R12,#v.plxcent]
- SUB R4,R2,R3
- LDR R2,[R12,#v.xvec]
- SUB R4,R4,R2
- CMP R4,#4<<12
- MOVGT R4,#4<<12
- CMP R4,#-4<<12
- MOVLT R4,#-4<<12
- ADD R4,R4,R2
- ADD R3,R3,R4
- STR R3,[R12,#v.plxcent]
- LDR R2,[R12,#v.ypos]
- ADD R2,R2,R1
- LDR R3,[R12,#v.plycent]
- SUB R4,R2,R3
- LDR R2,[R12,#v.yvec]
- SUB R4,R4,R2
- CMP R4,#4<<12
- MOVGT R4,#4<<12
- CMP R4,#-4<<12
- MOVLT R4,#-4<<12
- ADD R4,R4,R2
- ADD R3,R3,R4
- STR R3,[R12,#v.plycent]
- LDMFD R13!,{PC}
-
- .justmovedbat
- STMFD R13!,{R14}
- MOV R0,#batstab
- MOV R1,#0
- MOV R2,#1
- SWI Amnesia_SelectTable
- .loop19
- SWI Amnesia_ProcessTable
- STMFD R13!,{R0-R1}
- TST R2,#1<<10
- BLNE sortbat
- CMP R2,#0
- LDMFD R13!,{R0-R1}
- BNE loop19
- LDMFD R13!,{PC}
-
-
- .processbat
- STMFD R13!,{R14}
- MOV R0,#0
- STR R0,[R12,#v.batpresent]
- MOV R0,#batstab
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- .loop5
- SWI Amnesia_ProcessTable
- STMFD R13!,{R0-R2}
- TST R2,#1<<10
- BLNE movebat
- LDMFD R13!,{R0-R2}
- CMP R2,#0
- BNE loop5
- LDR R0,[R12,#v.batpresent]
- CMP R0,#0
- LDMNEFD R13!,{PC}
- LDR R0,[R12,#v.dead]
- ADD R0,R0,#1
- STR R0,[R12,#v.dead]
- LDMFD R13!,{PC}
-
- .movebat
- STMFD R13!,{R0-R2,R14}
- MOV R3,#1
- STR R3,[R12,#v.batpresent]
- MOV R3,#&FF
- BL scanadd
- MOV R2,R1
- LDR R0,[R12,#v.xpos]
- ;ADD R0,R0,#1<<12 ; for hardscrolling only.
- ;BIC R0,R0,#1<<12 ;
- LDR R1,[R2,#8]
- SUB R3,R0,R1
- STR R0,[R2,#8]
- LDR R0,[R12,#v.ypos]
- LDR R1,[R2,#12]
- SUB R4,R0,R1
- STR R0,[R2,#12]
- STR R3,[R2,#16]
- STR R3,[R12,#v.xvec]
- STR R4,[R2,#20]
- STR R4,[R12,#v.yvec]
- LDMFD R13!,{R0-R2,PC}
-
- .sortbat
- STMFD R13!,{R0-R2,R14}
- MOV R2,R1
- LDR R0,[R12,#v.xpos]
- ;ADD R0,R0,#1<<12 ; for hardscrolling only.
- ;BIC R0,R0,#1<<12 ;
- STR R0,[R2,#8]
- LDR R0,[R12,#v.ypos]
- STR R0,[R2,#12]
- MOV R3,#0
- STR R3,[R2,#16]
- STR R3,[R12,#v.xvec]
- STR R3,[R2,#20]
- STR R3,[R12,#v.yvec]
- LDMNEFD R13!,{R0-R2,PC}
-
-
- .processblocks
- STMFD R13!,{R14}
- MOV R0,#blockstab
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- MOV R3,#0
- .loopf
- SWI Amnesia_ProcessTable
- TST R2,#1<<8
- BLNE blocktimer
- TST R2,#1<<10
- BLNE blockattn
- CMP R2,#0
- BNE loopf
- LDMFD R13!,{PC}
-
- .blockattn
- STMFD R13!,{R0-R3,R14}
- LDR R3,[R1,#4]
- TST R3,#1<<24
- BNE vertblock
- .horizblock
- LDR R3,[R1,#8]
- LDR R5,[R1,#32]
- CMP R3,R5
- BLLE blockrefright
- LDR R5,[R1,#36]
- CMP R3,R5
- BLGE blockrefleft
- .blockattnins
- LDR R3,[R1,#4]
- TST R3,#1<<20
- TSTNE R3,#1<<25
- BLNE remorph
- LDR R3,[R12,#v.scanspeed]
- CMP R3,#1
- MOV R3,#&8F
- BLGT scanadd
-
- LDMFD R13!,{R0-R3,PC}
-
- .vertblock
- LDR R3,[R1,#12]
- LDR R5,[R1,#32]
- CMP R3,R5
- BLLE blockrefdown
- LDR R5,[R1,#36]
- CMP R3,R5
- BLGE blockrefup
- B blockattnins
- .blockrefright
- LDR R4,[R1,#16]
- RSBS R4,R4,#0
- STRGT R4,[R1,#16]
- LDRGT R4,[R1,#4]
- ORRGT R4,R4,#1<<20
- STRGT R4,[R1,#4]
- MOV PC,R14
- .blockrefleft
- LDR R4,[R1,#16]
- RSBS R4,R4,#0
- STRLT R4,[R1,#16]
- LDRLT R4,[R1,#4]
- ORRLT R4,R4,#1<<20
- STRLT R4,[R1,#4]
- MOV PC,R14
- .blockrefdown
- LDR R4,[R1,#20]
- RSBS R4,R4,#0
- STRGT R4,[R1,#20]
- LDRGT R4,[R1,#4]
- ORRGT R4,R4,#1<<20
- STRGT R4,[R1,#4]
- MOV PC,R14
- .blockrefup
- LDR R4,[R1,#20]
- RSBS R4,R4,#0
- STRLT R4,[R1,#20]
- LDRLT R4,[R1,#4]
- ORRLT R4,R4,#1<<20
- STRLT R4,[R1,#4]
- MOV PC,R14
-
-
- .blocktimer
- MOV R3,#0
- STR R3,[R1,#24]
- LDR R3,[R1,#4]
- ORR R3,R3,#1<<2
- STR R3,[R1,#4]
- MOV PC,R14
-
- .remorph
- STMFD R13!,{R0-R4,R9,R14}
- MOV R9,R1
- MOV R0,#&00020001
- STR R0,[R9,#24]
- MOV R0,#%1000010101
- STR R0,[R9,#4]
- MOV R0,#0
- STR R0,[R9,#16]
- STR R0,[R9,#20]
- LDR R0,[R9,#8]
- LDR R1,[R9,#12]
- BL translate
- LDMVSFD R13!,{R0-R4,R9,PC}
- MOV R0,#&A0
- STRB R0,[R4]
- LDMFD R13!,{R0-R4,R9,PC}
-
- .processstars
- STMFD R13!,{R14}
- MOV R0,#starstab
- ORR R0,R0,#1<<31
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- .loops
- SWI Amnesia_ProcessTable
- STMFD R13!,{R0-R1}
- TST R2,#1<<31
- BLNE stareffect
- LDMFD R13!,{R0-R1}
- CMP R2,#0
- BNE loops
- LDMFD R13!,{PC}
-
- .stareffect
- STMFD R13!,{R0-R2,R14}
- MOV R3,#&78
- BL scanadd
- LDR R3,[R1,#20]
- CMP R3,#2<<12
- BLT staractive
-
- SUB R3,R3,R3,ASR #4
- STR R3,[R1,#20]
- LDMFD R13!,{R0-R2,PC}
- .staractive
- LDR R3,[R1,#4]
- ORR R3,R3,#1<<7
- STR R3,[R1,#4]
- BL starflash
- LDMFD R13!,{R0-R2,PC}
-
-
- .starflash
- STMFD R13!,{R0-R2,R14}
- LDR R3,[R1,#8]
- LDR R4,[R1,#12]
- BL random
- AND R0,R0,#&3F000
- SUB R0,R0,#&1F000
- MOV R5,R0,ASR #3
- ADD R3,R3,R0
- BL random
- AND R0,R0,#&3F000
- SUB R0,R0,#&1F000
- MOV R6,R0,ASR #3
- ADD R4,R4,R0
- LDR R1,[R1,#32]
- AND R1,R1,#&F
- BL gdecorate
- LDMFD R13!,{R0-R2,PC}
-
- .glintflash
- STMFD R13!,{R0-R2,R14}
- LDR R3,[R1,#8]
- LDR R4,[R1,#12]
- BL random
- AND R0,R0,#&3F000
- SUB R0,R0,#&1F000
- ADD R3,R3,R0
- BL random
- AND R0,R0,#&3F000
- SUB R0,R0,#&1F000
- ADD R4,R4,R0
- MOV R1,#2
- BL decorate
- LDMFD R13!,{R0-R2,PC}
-
-
- .processdecor
- STMFD R13!,{R14}
- MOV R0,#decortab+(&0f<<24)
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- .loopr
- SWI Amnesia_ProcessTable
- TST R2,#1<<8
- BLNE turntoglint
- TST R2,#1<<24
- BLNE decorslow
- CMP R2,#0
- BNE loopr
-
- LDMFD R13!,{PC}
- .turntoglint
- MOV R3,#0
- STR R3,[R1,#16]
- STR R3,[R1,#20]
- LDR R3,[R1,#4]
- BIC R3,R3,#1<<8
- ORR R3,R3,#%1000100000
-
- STR R3,[R1,#4]
- MOV R3,#(decortab<<24)+2
- STR R3,[R1,#0]
- MOV R3,#&03000080
- STR R3,[R1,#24]
- MOV PC,R14
-
- .decorslow
- LDR R3,[R1,#16]
- LDR R4,[R1,#32]
- ADD R3,R3,R4
- STR R3,[R1,#16]
- LDR R3,[R1,#20]
- LDR R4,[R1,#36]
- ADD R3,R3,R4
- STR R3,[R1,#20]
- MOV PC,R14
-
-
- .processedge
- STMFD R13!,{R14}
- BL stretchplotwindow
- MOV R0,#edgetab
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- .loop34
- SWI Amnesia_ProcessTable
- CMP R2,#0
- BNE loop34
- BL resetplotwindow
- LDMFD R13!,{PC}
-
- .processbullets
- STMFD R13!,{R14}
- MOV R0,#bulletstab
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- .loop40
- SWI Amnesia_ProcessTable
- TST R2,#1<<10
- BLNE bulletattn
- CMP R2,#0
- BNE loop40
- LDMFD R13!,{PC}
-
- .bulletattn
- STMFD R13!,{R0-R2,R14}
- MOV R9,R1
- LDR R0,[R9,#8]
- LDR R1,[R9,#12]
- BL translate
- BVS bulletattnend
- LDR R0,[R4]
- AND R0,R0,#&F0
- CMP R0,#&90
- CMPNE R0,#&A0
- BEQ bulletstone
- AND R0,R0,#&C0
- CMP R0,#&40
- BLNE bulletattnend
- MOV R0,R4
- BL blockdest
- .bulletstone
- BL bulletexplode
- .bulletattnend
- LDMFD R13!,{R0-R2,PC}
-
- .bulletexplode
- STMFD R13!,{R0-R1,R14}
- LDR R0,[R9,#4]
- MOV R0,#&05000000
- MOV R1,#%1000001000110001
- STMIA R9,{R0,R1}
- MOV R0,#&07000080
- STR R0,[R9,#24]
- BL objectrange
- BL explosound
- LDMFD R13!,{R0-R1,PC}
-
-
- .processballs
- STMFD R13!,{R14}
- MOV R0,#&7F000000
- STR R0,[R12,#v.balldist]
- MOV R0,#0
- STR R0,[R12,#v.ballctr]
- MOV R0,#ballstab
- MOV R1,#0
- LDR R2,[R12,#v.masterplot]
- SWI Amnesia_SelectTable
- .loop8
- SWI Amnesia_ProcessTable
- STMFD R13!,{R0-R1}
- TST R2,#1<<10
- BLNE ballattn
- TST R2,#1<<8
- BLNE balltimer
- CMP R2,#0
- LDMFD R13!,{R0-R1}
- BNE loop8
- LDR R0,[R12,#v.ballctr]
- CMP R0,#0
- BLEQ noballs
- LDMFD R13!,{PC}
-
- .ballattn
- STMFD R13!,{R0-R2,R14}
- MOV R9,R1
- ADD R14,R9,#8
- LDMIA R14,{R3-R6}
- SUB R3,R3,R5 ;get old position
- SUB R4,R4,R6
- STR R3,[R9,#36]
- STR R4,[R9,#40]
- LDR R4,[R9,#4]
- TST R4,#1<<29
- MOV R3,#&7F
- MOVNE R3,#&E0
- TST R4,#1<<26
- MOVNE R3,#&17
- TST R4,#1<<30
- BNE killballattn
-
- BL scanadd
- MOV R3,#0
- LDR R4,[R12,#v.demomode]
- CMP R4,#1
- BEQ demskip2
- .demskip2
- LDR R4,[R9,#4]
- TST R4,#1<<26
- LDREQ R3,[R12,#v.ballctr]
- ADDEQ R3,R3,#1
- STREQ R3,[R12,#v.ballctr]
- BNE notthisball
- .balladdskip
- LDR R3,[R9,#8]
- LDR R5,[R12,#v.xpos]
- SUBS R5,R3,R5
- RSBMI R5,R5,#0
-
- LDR R4,[R9,#12]
- LDR R6,[R12,#v.ypos]
- SUBS R7,R4,R6
- RSBMI R7,R7,#0
-
- ADD R5,R5,R7
- LDR R6,[R12,#v.balldist]
- CMP R5,R6
- BGT notthisball
- STR R3,[R12,#v.ballxpos]
- STR R4,[R12,#v.ballypos]
- STR R5,[R12,#v.balldist]
- .notthisball
-
- LDR R3,[R9,#4]
- TST R3,#1<<25
- BLNE glintflash
-
-
- TST R2,#1<<24; ball exploding
- LDMNEFD R13!,{R0-R2,PC}
-
- MOV R0,#256
- STR R0,[R12,#v.windmax]
- LDR R0,[R9,#8]
- LDR R1,[R9,#12]
- LDR R5,[R9,#28]
- AND R6,R5,#&FFFF
- MOV R5,R5,LSR #16
- ADD R0,R0,R5,ASL #11
- ADD R1,R1,R6,ASL #11
- MOV R8,#0
- BL translate
- BVS balloffnet
- LDR R4,[R12,#v.scanlock]
- CMP R4,#1
- BNE nolockcheck
- STMFD R13!,{R0-R3}
- LDR R1,[R12,#v.levelnet]
- LDR R0,[R1,#net.xsize]
- LDR R1,[R1,#net.ysize]
- ADD R2,R2,R0,ASR #1
- ADD R3,R3,R1,ASR #1
- CMP R2,#32
- CMPLE R3,#32
- LDMFD R13!,{R0-R3}
- BGT balloffnet
- .nolockcheck
- STMFD R13!,{R0-R3}
- STR R0,[R12,#v.ballxnib]
- STR R1,[R12,#v.ballynib]
- CMP R0,R5,ASR #1
- ADDLT R0,R0,#96
- SUBLT R2,R2,#1
- CMP R1,R6,ASR #1
- ADDLT R1,R1,#96
- SUBLT R3,R3,#1
- BL ballgetheight
- LDMFD R13!,{R0-R3}
-
- STMFD R13!,{R2-R3}
- BL ballattncheck
- STR R4,[R12,#v.brball]
- LDMFD R13,{R2-R3}; no writeback
- SUB R2,R2,#1
- CMP R0,R5
- MOV R4,#256
- BLLE ballattncheck
- STR R4,[R12,#v.blball]
- LDMFD R13,{R2-R3}; no writeback
- SUB R3,R3,#1
- CMP R1,R6
- MOV R4,#256
- BLLE ballattncheck
- STR R4,[R12,#v.trball]
- LDMFD R13!,{R2-R3}
- SUB R2,R2,#1
- SUB R3,R3,#1
- CMP R0,R5
- CMPLE R1,R6
- MOV R4,#256
- BLLE ballattncheck
- STR R4,[R12,#v.tlball]
-
- LDR R0,[R12,#v.windmax]
- CMP R0,#256
- BGE ballattnnocol
- ADD R5,R12,#v.windbuf
- LDMIA R5,{R0-R3}
- ADD R5,R9,#8
- STMIA R5,{R0-R3}
- .ballattnnocol
- .balloffnet
- TST R8,#1
- BEQ killball
- .killballins
- MOV R5,#0
- LDR R3,[R9,#32]
- CMP R3,#0
- BEQ steponfloor
- TST R8,#4
- MOVNE R5,#1
- .steponfloor
- TST R8,#2
- STREQ R5,[R9,#32]
- LDR R3,[R9,#32]
- LDR R4,[R9,#0]
- BIC R4,R4,#&FF<<16
- AND R3,R3,#&F
- CMP R3,#2
- ORREQ R4,R4,#10<<16
- ORRNE R4,R4,#9<<16
- STR R4,[R9,#0]
-
- ;this section alters the ball velocity
- ;ballnib is the position of the bottom right of the ball's bounding box
- ;R5 is the ball height
- ;v.brball is the slab at the bottom right of the ball footprint etc
- ;These = 256 if no check has been made. brball is always made.
- .edgeeffect
-
- LDR R3,[R9,#16]
- LDR R4,[R9,#20]
- LDR R5,[R9,#32]
-
- CMP R5,#1
- MOVEQ R5,#0
- LDR R0,[R12,#v.ballxnib]
- LDR R1,[R12,#v.ballynib]
-
- LDR R6,[R9,#28]
- AND R6,R6,#&FF
- CMP R0,R6,LSR #1
- BLLT rollleftcheck
- CMP R0,R6,LSR #1
- BLE norrcheck
- CMP R0,R6
- BLLT rollrightcheck
- .norrcheck
- CMP R1,R6,LSR #1
- BLLT rollupcheck
- CMP R1,R6,LSR #1
- BLE nordcheck
- CMP R1,R6
- BLLT rolldowncheck
- .nordcheck
- LDR R0,[R12,#v.xgrav]
- ADD R3,R3,R0
- LDR R0,[R12,#v.ygrav]
- ADD R4,R4,R0
-
-
- MOV R8,R8,LSR #24
- #set slope=1<<10
- CMP R8,#&C8
- SUBEQ R3,R3,#slope
- CMP R8,#&C9
- ADDEQ R3,R3,#slope
- CMP R8,#&CA
- SUBEQ R4,R4,#slope
- CMP R8,#&CB
- ADDEQ R4,R4,#slope
- CMP R8,#&20
- BLEQ blowleft
- CMP R8,#&21
- BLEQ blowright
- CMP R8,#&22
- BLEQ blowup
- CMP R8,#&23
- BLEQ blowdown
- CMP R8,#&24
- BLEQ speedup
- CMP R8,#&25
- BLEQ slowdown
- CMP R8,#&2F
- BLEQ hellexpand
- CMP R8,#1
- BLE notontel
- CMP R8,#16
- BGE notontel
- CMP R8,#2
- CMPNE R8,#5
- CMPNE R8,#6
- BEQ notontel
- BL ontelep
- B ontelins
-
- .notontel
- LDR R0,[R9,#4]
- BIC R0,R0,#1<<27
- STR R0,[R9,#4]
-
- .ontelins
-
- STR R3,[R9,#16]
- STR R4,[R9,#20]
-
- LDR R0,[R12,#v.magnet]
- CMP R0,#0
- BLGT ballpull
- LDR R0,[R12,#v.ballfire]
- CMP R0,#0
- BLGT doballfire
- LDR R0,[R12,#v.blueball]
- CMP R0,#0
- BLGT doblueball
- LDR R0,[R12,#v.ballstops]
- CMP R0,#0
- BLGT doballstop
- LDR R0,[R12,#v.bastard]
- CMP R0,#0
- BLGT dobastard
-
-
- LDR R3,[R9,#16]
- MOV R3,R3,ASR #10
- MOV R5,R3
- MUL R3,R5,R3
-
- LDR R4,[R9,#20]
- MOV R4,R4,ASR #10
- MOV R5,R4
- MUL R4,R5,R4
-
- ADD R3,R3,R4
- LDR R4,[R12,#v.ballmin]
- CMP R3,R4
- BLLT ballspeedup
- ;check ball speed
- LDR R3,[R9,#16]
- LDR R4,[R9,#20]
- BL limitballspeed
-
- STR R3,[R9,#16]
- STR R4,[R9,#20]
- LDMFD R13!,{R0-R2,PC}
- ;change killball if you change this stack instruction
-
- .rollleftcheck
- STMFD R13!,{R6,R14}
- LDR R6,[R12,#v.blball]
- CMP R6,#256
- LDMGEFD R13!,{R6,PC}
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- LDR R6,[R12,#v.tlball]
- CMP R6,#256
- BGE rollleft
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- .rollleft
- LDR R6,[R9,#28]
- AND R6,R6,#&FF
- RSB R6,R0,R6,ASR #1
- LDR R7,[R12,#v.diff]
- ADD R7,R7,#4
- SUB R3,R3,R6,LSL R7
- LDMFD R13!,{R6,PC}
-
- .rollrightcheck
- STMFD R13!,{R6,R14}
- LDR R6,[R12,#v.brball]
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- LDR R6,[R12,#v.trball]
- CMP R6,#256
- BGE rollright
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- .rollright
- LDR R6,[R9,#28]
- AND R6,R6,#&FF
- SUB R6,R0,R6,LSR #1
- LDR R7,[R12,#v.diff]
- ADD R7,R7,#4
- ADD R3,R3,R6,LSL R7
- LDMFD R13!,{R6,PC}
-
- .rollupcheck
- STMFD R13!,{R6,R14}
- LDR R6,[R12,#v.trball]
- CMP R6,#256
- LDMGEFD R13!,{R6,PC}
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- LDR R6,[R12,#v.tlball]
- CMP R6,#256
- BGE rollup
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- .rollup
- LDR R6,[R9,#28]
- AND R6,R6,#&FF
- RSB R6,R1,R6,LSR #1
- LDR R7,[R12,#v.diff]
- ADD R7,R7,#4
- SUB R4,R4,R6,LSL R7
- LDMFD R13!,{R6,PC}
-
- .rolldowncheck
- STMFD R13!,{R6,R14}
- LDR R6,[R12,#v.brball]
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- LDR R6,[R12,#v.blball]
- CMP R6,#256
- BGE rolldown
- MOV R7,#2
- CMP R6,#&20
- MOVLT R7,#-1
- CMP R6,#&10
- MOVLT R7,#0
- CMP R7,R5
- LDMGEFD R13!,{R6,PC}
- .rolldown
- LDR R6,[R9,#28]
- AND R6,R6,#&FF
- SUB R6,R1,R6,LSR #1
- LDR R7,[R12,#v.diff]
- ADD R7,R7,#4
- ADD R4,R4,R1,LSL R7
- LDMFD R13!,{R6,PC}
-
- .limitballspeed
- STMFD R13!,{R0,R14}
- LDR R0,[R12,#v.ballspeedlim]
- CMP R3,R0
- MOVGT R3,R0
- CMP R4,R0
- MOVGT R4,R0
- RSB R0,R0,#0
- CMP R3,R0
- MOVLT R3,R0
- CMP R4,R0
- MOVLT R4,R0
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- LDMEQFD R13!,{R0,PC}
- #set velmin=1<<4
- CMP R3,#velmin
- BGT nolimslowx
- CMN R3,#velmin
- MOVGT R3,#0
- .nolimslowx
- CMP R4,#velmin
- BGT nolimslowy
- CMN R4,#velmin
- MOVGT R4,#0
- .nolimslowy
- LDMFD R13!,{R0,PC}
-
- .doballfire
- STMFD R13!,{R9-R10,R14}
- LDR R0,[R12,#v.ballfire]
- TST R0,#7
- LDMNEFD R13!,{R9-R10,PC}
- MOV R0,R0,ASL #4
- AND R0,R0,#&7F8
- ADR R10,circletab
- ADD R10,R10,R0
- MOV R1,#(decortab<<24)+0
- MOV R2,#%1000011000111101+(1<<18)
- LDR R3,[R9,#8]
- LDR R4,[R9,#12]
- LDR R5,[R9,#16]
- LDR R6,[R9,#20]
- LDR R0,[R10]
- MOV R0,R0,ASR #16
- ADD R5,R5,R0
- LDR R0,[R10,#4]
- MOV R0,R0,ASR #16
- ADD R6,R6,R0
- MOV R7,#&10000040
- BL random
- AND R0,R0,#&01FF0000
- ORR R7,R7,R0
- MOV R8,#0
- MOV R0,#bulletstab
- SWI Amnesia_MakeObject
- LDR R0,[R12,#v.plxcent]
- SUB R0,R3,R0
- LDR R1,[R12,#v.plycent]
- SUB R1,R4,R1
- BL blamsound
- LDMFD R13!,{R9-R10,PC}
-
- .doblueball
- STMFD R13!,{R9-R10,R14}
- LDR R0,[R12,#v.blueball]
- TST R0,#31
- LDMNEFD R13!,{R9-R10,PC}
- LDR R3,[R9,#4]
- TST R3,#3<<8
- LDMNEFD R13!,{R9-R10,PC}
- LDR R3,[R9,#8]
- LDR R4,[R9,#12]
- BL makeblueball
- LDR R0,[R12,#v.plxcent]
- SUB R0,R3,R0
- LDR R1,[R12,#v.plycent]
- SUB R1,R4,R1
- ;BL blamsound
- LDMFD R13!,{R9-R10,PC}
-
- .doballstop
- MOV R0,#0
- STR R0,[R9,#16]
- STR R0,[R9,#20]
- MOV PC,R14
-
- .dobastard
- LDR R0,[R9,#16]
- ADD R0,R0,R0,ASR #6
- STR R0,[R9,#16]
- LDR R0,[R9,#20]
- ADD R0,R0,R0,ASR #6
-
- STR R0,[R9,#20]
- MOV PC,R14
-
- .ontelep
- STMFD R13!,{R0-R10,R14}
- LDR R0,[R12,#v.sparks]
- CMP R0,#1
- BNE nottelepspark
- CMP R8,#12
- BLT nottelepspark
- BL ballexplode
- LDMFD R13!,{R0-R10,PC}
- .nottelepspark
- LDR R0,[R9,#4]
- TST R0,#1<<27
- LDMNEFD R13!,{R0-R10,PC}
- ORR R0,R0,#1<<27
- STR R0,[R9,#4]
- LDR R7,[R12,#v.levelnet]
- LDR R5,[R12,#v.balladr]
- TST R8,#1
- EOR R8,R8,#1
- BNE telright
- ADD R6,R7,#net.data+1
- .loop80
- LDRB R0,[R5,#-1]!
- CMP R0,R8
- BEQ telfound
- CMP R5,R6
- BGT loop80
- LDMFD R13!,{R0-R10,PC}
- .telright
- LDR R0,[R7,#net.xsize]
- LDR R1,[R7,#net.ysize]
- MUL R6,R1,R0
- LDR R0,[R12,#v.scanlock]
- CMP R0,#1
- MOVEQ R6,#32*32
- ADD R7,R7,#net.data
- ADD R6,R6,R7
- SUB R6,R6,#1
- .loop81
- LDRB R0,[R5,#1]!
- CMP R0,R8
- BEQ telfound
- CMP R5,R6
- BLT loop81
- LDMFD R13!,{R0-R10,PC}
-
- .telfound
- BL teleff1
- MOV R0,R5
- BL backtranslate
- LDMVSFD R13!,{R0-R10,PC}
- STR R0,[R9,#8]
- STR R1,[R9,#12]
- BL teleff2
- LDMFD R13!,{R0-R10,PC}
-
- .teleff1
- STMFD R13!,{R0-R9,R14}
- LDR R0,[R12,#v.balladr]
- BL backtranslate
- MOV R3,R0
- MOV R4,R1
- MOV R0,#decortab
- MOV R1,#(decortab<<24)+4
- MOV R2,#%1000001001110001
- MOV R7,#&03000040
- SWI Amnesia_MakeObject
- LDR R0,[R9,#4]
- TST R0,#1<<29
- LDMNEFD R13!,{R0-R9,PC}
- LDR R5,[R9,#8]
- LDR R6,[R9,#12]
- SUB R5,R3,R5
- SUB R6,R4,R6
- MOV R5,R5,ASR #5
- MOV R6,R6,ASR #5
- LDR R3,[R9,#8]
- LDR R4,[R9,#12]
- MOV R0,#decortab
- MOV R1,#(ballstab<<24)
- MOV R2,#%1000001001110101
- MOV R7,#&0A000050
-
- SWI Amnesia_MakeObject
- BL telepsound
- LDMFD R13!,{R0-R9,PC}
-
- .teleff2
- STMFD R13!,{R9,R14}
- MOV R0,#decortab
- MOV R1,#(decortab<<24)+4
- MOV R2,#%1000001001110001
- LDR R3,[R9,#8]
- LDR R4,[R9,#12]
- MOV R7,#&03000040
- SWI Amnesia_MakeObject
- BL telepsound2
- LDMFD R13!,{R9,PC}
-
-
-
- .ballpull
- STMFD R13!,{R14}
- LDR R3,[R9,#4]
- TST R3,#15<<20
- LDMNEFD R13!,{PC}
- LDR R3,[R9,#8]
- LDR R4,[R9,#12]
- LDR R5,[R12,#v.xpos]
- LDR R6,[R12,#v.ypos]
- SUB R5,R3,R5
- SUB R6,R4,R6
- STMFD R13!,{R5,R6}
- MOV R5,R5,ASR #12
- MOV R1,R5
- MUL R1,R5,R1
- MOV R6,R6,ASR #12
- MOV R2,R6
- MUL R2,R6,R2
- ADD R0,R1,R2
- LDMFD R13!,{R5,R6}
- CMP R0,#1<<18
- LDMGTFD R13!,{PC}
- MOV R0,R0,ASR #5
- CMP R0,#8
- MOVLT R0,#8
- LDR R3,[R12,#v.magpitch]
- MOV R4,#&3D55
- SUB R4,R4,R0,ASR #2
- CMP R4,R3
- STRGT R4,[R12,#v.magpitch]
-
- MYDIV R3,R5,R0
- MYDIV R4,R6,R0
- LDR R0,[R9,#16]
- SUB R0,R0,R3
- STR R0,[R9,#16]
- LDR R0,[R9,#20]
- SUB R0,R0,R4
- STR R0,[R9,#20]
- LDMFD R13!,{PC}
-
-
-
- .ballgetheight
- STMFD R13!,{R0-R7,R10,R14}
- BL transconv
- BVS ballnoheight
- MOV R10,R4
- STR R10,[R12,#v.balladr]
- LDRB R7,[R10]
- ORR R8,R8,R7,LSL #24
- CMP R7,#&C8
- BLGE balllift
- .ballnoheight
- LDMFD R13!,{R0-R7,R10,PC}
-
- .balllift
- STMFD R13!,{R0,R14}
- CMP R7,#&C8
- BEQ leftlift
- CMP R7,#&C9
- BEQ rightlift
- CMP R7,#&CA
- BEQ uplift
- CMP R7,#&CB
- BEQ downlift
- LDMFD R13!,{R0,PC}
- .downlift
- CMP R1,#80
- BGT noliftball
- B doliftball
- .uplift
- CMP R1,#16
- BLT noliftball
- B doliftball
- .rightlift
- CMP R0,#80
- BGT noliftball
- B doliftball
- .leftlift
- CMP R0,#16
- BLT noliftball
- B doliftball
-
-
- .doliftball
- MOV R0,#2
- STR R0,[R9,#32]
- LDMFD R13!,{R0,PC}
- .noliftball
- LDR R0,[R9,#32]
- CMP R0,#0
- MOVEQ R0,#1
- STREQ R0,[R9,#32]
- LDMFD R13!,{R0,PC}
-
-
- .ballattncheck
- STMFD R13!,{R0-R3,R5-R7,R10,R14}
- BL transconv
- BVS ballattnnocheck
- MOV R10,R4
- LDRB R7,[R10]
- BIC R8,R8,#8+32
- CMP R7,#&AB
- BLT notsecret
- CMP R7,#&B0
- BGE notsecret
- BL dosecret
- .notsecret
- CMP R7,#hellno+16
- BGE skiphell
- CMP R7,#hellno
- BLT skiphell
- CMP R7,#&1C
- ORRGE R8,R8,#64
- B skiphellins
-
- .skiphell
- ORR R8,R8,#1; prevent ball being killed
- .skiphellins
-
- CMP R7,#&C8
- ORRGE R8,R8,#4
- BGE nosupport
- CMP R7,#&90
- BGE nosupport
- CMP R7,#&40
- ORRGE R8,R8,#2
- .nosupport
- CMP R7,#&40
- BLT ballattnnocheck
- CMP R7,#&C8
- ORRGE R8,R8,#8
- CMP R7,#&A0
- BLT nolightstone
- CMP R7,#&BF
- BLE lightstone
- .nolightstone
- LDR R6,[R9,#32]
- CMP R6,#2
- BGE ballover
- .lightstone
- BL stoneballcol
- BCS ballattnnocheck
- LDR R5,[R12,#v.windmax]
- CMP R4,R5
-
- BGE ballattnnocheck
- STR R4,[R12,#v.windmax]
- ADD R5,R12,#v.windbuf
- STMIA R5,{R0-R3}
- .ballover
- LDR R0,[R9,#4]
- TST R0,#1<<26
- BNE ballattnnocheck
- LDRB R0,[R10]
- CMP R0,#&80
- MOV R0,R10
- BGE stonedest
- BL blockdest
- .ballattnnocheck
- MOV R4,R7
- LDMFD R13!,{R0-R3,R5-R7,R10,PC}
- .stonedest
- TST R8,#32
- BEQ ballattnnocheck
- LDRB R0,[R10]
- AND R0,R0,#&F0
- CMP R0,#&B0
- BLEQ handlemorph
- STMFD R13!,{R0-R2}
- LDR R0,[R9,#8]
- LDR R2,[R12,#v.plxcent]
- SUB R0,R0,R2
- LDR R1,[R9,#12]
- LDR R2,[R12,#v.plycent]
- SUB R1,R1,R2
- BL chinksound
- LDMFD R13!,{R0-R2}
- MOV R7,#0
- B ballattnnocheck
-
-
- #set blow=1<<10
- #set suck=1<<12
- .blowleft
- CMP R3,#0
- SUBLE R3,R3,#blow
- SUBGT R3,R3,#suck
- SUB R4,R4,R4,ASR #4
- MOV PC,R14
- .blowright
- CMP R3,#0
- ADDGE R3,R3,#blow
- ADDLT R3,R3,#suck
- SUB R4,R4,R4,ASR #4
- MOV PC,R14
- .blowup
- CMP R4,#0
- SUBLE R4,R4,#blow
- SUBGT R4,R4,#suck
- SUB R3,R3,R3,ASR #4
- MOV PC,R14
- .blowdown
- CMP R4,#0
- ADDGE R4,R4,#blow
- ADDLT R4,R4,#suck
- SUB R3,R3,R3,ASR #4
- MOV PC,R14
-
- .slowdown
- ADDS R0,R3,R4
- RSBMI R0,R0,#0
- CMP R0,#1<<8
- MOVLT PC,R14
- SUB R3,R3,R3,ASR #4
- SUB R4,R4,R4,ASR #4
- MOV PC,R14
-
- .speedup
- ADD R3,R3,R3,ASR #4
- ADD R4,R4,R4,ASR #4
- MOV PC,R14
-
- .killballattn
- LDR R4,[R12,#v.framectr]
- TST R4,#1<<3
- BLNE scanadd
- LDR R3,[R9,#16]
- SUB R3,R3,R3,ASR #4
- CMP R3,#1<<8
- MOVGT R3,#1<<8
- CMN R3,#1<<8
- MOVLT R3,#-1<<8
- STR R3,[R9,#16]
- LDR R3,[R9,#20]
- SUB R3,R3,R3,ASR #4
- CMP R3,#1<<8
- MOVGT R3,#1<<8
- CMN R3,#1<<8
- MOVLT R3,#-1<<8
- STR R3,[R9,#20]
- LDMFD R13!,{R0-R2,PC}
-
- .killball
- LDR R3,[R9,#4]
- TST R3,#1<<25
- BNE killballins
- TST R3,#3<<28
- BNE notwarped
-
- TST R8,#64
- BEQ notwarped
- LDR R3,[R12,#v.sparks]
- CMP R3,#1
- BEQ killblueball
- STMFD R13!,{R14}
- BL warpball
- LDMFD R13!,{R14}
- .notwarped
- LDR R3,[R9,#0]
- BIC R3,R3,#&FF<<16
- STR R3,[R9,#0]
- LDR R3,[R9,#4]
- TST R3,#1<<28
- BNE killblueball
- BIC R3,R3,#%00010000000
- ORR R3,R3,#%01000100000+(1<<30)
- STR R3,[R9,#4]
- LDR R3,[R9,#16]
- MOV R3,R3,ASR #2
- STR R3,[R9,#16]
- LDR R3,[R9,#20]
- MOV R3,R3,ASR #2
- STR R3,[R9,#20]
- MOV R3,#&09F00018
- STR R3,[R9,#24]
- BL fallsound
- LDMFD R13!,{R0-R2,R14}
- ORR R2,R2,#1<<5
- BIC R2,R2,#1<<7
- MOV PC,R14
-
- .killblueball
- BL ballexplode
- LDMFD R13!,{R0-R2,PC}
-
- .ballexplode
- STMFD R13!,{R0-R2,R14}
- LDR R2,[R9,#4]
- TST R2,#1<<24
- LDMNEFD R13!,{R0-R2,PC}
- MOV R0,#&05000000
- MOV R1,#%01000110001+(1<<24)
- TST R2,#1<<29
- ORRNE R1,R1,#1<<29
- TST R2,#1<<26
- ORRNE R1,R1,#1<<26
- STMIA R9,{R0,R1}
- MOV R0,#&07000080
- STR R0,[R9,#24]
- BL objectrange
- BL explosound
- LDMFD R13!,{R0-R2,PC}
-
- .ballspeedup
- LDR R3,[R9,#16]
- ADD R3,R3,R3,ASR #4
- STR R3,[R9,#16]
- LDR R4,[R9,#20]
- ADD R4,R4,R4,ASR #4
- STR R4,[R9,#20]
- MOV PC,R14
-
- .noballs
- STMFD R13!,{R14}
- LDR R0,[R12,#v.newlevelctr]
- CMP R0,#1
- LDMGTFD R13!,{PC}
- LDR R0,[R12,#v.dead]
- ADD R0,R0,#1
- STR R0,[R12,#v.dead]
- LDR R1,[R12,#v.pllives]
- CMP R1,#0
- CMPEQ R0,#10
- BLEQ gameovermes
- LDR R0,[R12,#v.dead]
- CMP R0,#1
- LDMGTFD R13!,{PC}
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- LDMEQFD R13!,{PC}
- BL deathsound
- LDMFD R13!,{PC}
-
- .gameovermes
- STMFD R13!,{R14}
- ADR R0,gameovertext
- BL message
- LDMFD R13!,{PC}
- .gameovertext
- DCD 160<<12,128<<12,0,0,&01000001,0
- DCB "GAME OVER",0
- ALIGN
-
-
-
- .balltimer
- STMFD R13!,{R0-R2,R14}
- MOV R9,R1
- TST R2,#1<<24
- LDMNEFD R13!,{R0-R2,PC}
- LDR R0,[R9,#4]
- TST R0,#1<<28
- BNE expblueball
- TST R0,#1<<29
- MOV R3,#%1000010011011101+(1<<18)
- MOVNE R3,#%1000010111011101+(3<<28)+(1<<18)
- TST R0,#1<<26
- ORRNE R3,R3,#1<<26
- STR R3,[R9,#4]
- TST R0,#1<<29
- MOVNE R3,#&01000001
- STRNE R3,[R9,#24]
- BL makeballdecor
- LDMFD R13!,{R0-R2,PC}
- .expblueball
- BL ballexplode
- LDMFD R13!,{R0-R2,PC}
-
- .blockdest
- STMFD R13!,{R8,R14}
-
- LDRB R1,[R0]
- TST R1,#hitbit
- LDMEQFD R13!,{R8,PC}
- CMP R1,#hit1
- CMPNE R1,#hit2
- BLEQ blocksub
- AND R5,R1,#&F0
- CMP R5,#&50
- CMPNE R5,#&70
- BEQ starblockdest
- CMP R1,#&4F
- MOVEQ R5,#0
- STREQ R5,[R12,#v.sparks]
- CMP R1,#&4E
- MOVEQ R5,#1
- STREQ R5,[R12,#v.sparks]
- CMP R1,#&4D
- MOVEQ R5,#0
- STREQ R5,[R12,#v.redball]
- CMP R1,#&4C
- MOVEQ R5,#1
- STREQ R5,[R12,#v.redball]
- MOV R1,#0
- STRB R1,[R0]
-
- STMFD R13!,{R0-R2}
- BL backtranslate
- MOV R3,R0
- MOV R4,R1
- BL addglint
- BL addglint
- LDR R2,[R12,#v.plxcent]
- SUB R0,R0,R2
- LDR R2,[R12,#v.plycent]
- SUB R1,R1,R2
- BL weirdsound
- LDMFD R13!,{R0-R2}
- LDR R1,[R12,#v.plscore]
- ADD R1,R1,#10
- STR R1,[R12,#v.plscore]
- LDMFD R13!,{R8,PC}
-
- .starblockdest
- LDRB R5,[R0]
- MOV R1,#0
- STRB R1,[R0]
- BL backtranslate
- MOV R3,R0
- MOV R4,R1
- BL starmake
- LDR R0,[R12,#v.plxcent]
- SUB R0,R3,R0
- LDR R1,[R12,#v.plycent]
- SUB R1,R4,R1
- BL bonussound
- LDR R1,[R12,#v.plscore]
- ADD R1,R1,#100
- STR R1,[R12,#v.plscore]
- LDMFD R13!,{R8,PC}
-
- .blocksub
- STMFD R13!,{R0,R14}
- LDR R0,[R12,#v.blocksleft]
- SUB R0,R0,#1
- STR R0,[R12,#v.blocksleft]
- BL writeblocksleft
- LDMFD R13!,{R0,PC}
-
- .dosecret
- STMFD R13!,{R0-R11,R14}
- MOV R0,#&A0
-
- CMP R7,#&AF
- MOVEQ R0,#0
- CMP R7,#&AB
- MOVEQ R0,#3
- STRB R0,[R10]
- CMP R7,#&AB
- MOVEQ R0,#0
- STREQ R0,[R12,#v.scanlock]
- BL secretsound
- LDR R9,[R12,#v.levelnet]
- LDR R0,[R9,#net.xsize]
- LDR R1,[R9,#net.ysize]
- MUL R0,R1,R0
- ADD R9,R9,#net.data
- ADD R8,R9,R0
- .loop86
- LDRB R0,[R9]
- CMP R0,#&11
- CMPNE R0,#&12
- CMPNE R0,#&13
- CMPEQ R7,#&AC
- BLEQ secretAC
- CMP R0,#&A1
- BLT notsec
- CMP R0,#&B0
- BGE notsec
- CMP R7,#&AB
- BLEQ secretAB
- CMP R7,#&AC
- BLEQ secretAC
- CMP R7,#&AD
- BLEQ secretAD
- CMP R7,#&AE
- BLEQ secretAE
- .notsec
-
- ADD R9,R9,#1
- CMP R9,R8
- BLT loop86
- MOV R0,R10
- BL backtranslate
- MOV R3,R0
- MOV R4,R1
- MOV R9,#10
- .loop87
- BL addglint
- SUBS R9,R9,#1
- BGT loop87
- LDMFD R13!,{R0-R11,PC}
-
- .secretAB
- CMP R0,#&AB
- MOVEQ R1,#3
- STREQB R1,[R9]
- MOV PC,R14
-
- .secretAC
- CMP R0,#&AC
- MOVEQ R1,#&A0
- STREQB R1,[R9]
- CMP R0,#&11
- MOVEQ R1,#0
- STREQB R1,[R9]
- CMP R0,#&12
- MOVEQ R1,#&80
- STREQB R1,[R9]
- CMP R0,#&13
- MOVEQ R1,#&A0
- STREQB R1,[R9]
- CMP R0,#&A1
- MOVEQ R1,#hellno
- STREQB R1,[R9]
- CMP R0,#&A2
- MOVEQ R1,#0
- STREQB R1,[R9]
- CMP R0,#&A3
- MOVEQ R1,#&80
- STREQB R1,[R9]
- B secretexit
- .secretAD
- CMP R0,#&AD
- MOVEQ R1,#&A0
- STREQB R1,[R9]
- CMP R0,#&A4
- MOVEQ R1,#4
- STREQB R1,[R9]
- CMP R0,#&A5
- MOVEQ R1,#7
- STREQB R1,[R9]
- CMP R0,#&A6
- MOVEQ R1,#&4F
- STREQB R1,[R9]
- CMP R0,#&A7
- MOVEQ R1,#&71
- STREQB R1,[R9]
- B secretexit
- .secretAE
- CMP R0,#&AE
- MOVEQ R1,#&A0
- STREQB R1,[R9]
- CMP R0,#&A8
- MOVEQ R1,#&1C
- STREQB R1,[R9]
- CMP R0,#&A9
- MOVEQ R1,#&1E
- STREQB R1,[R9]
- CMP R0,#&AA
- MOVEQ R1,#&1F
- STREQB R1,[R9]
- B secretexit
- .secretexit
- MOV PC,R14
-
- .nukeballs
- STMFD R13!,{R0-R11,R14}
- MOV R0,#ballstab
- MOV R1,#2
- MOV R2,#0
- MOV R3,#0
- MOV R4,#0
- SWI Amnesia_SelectTable
- .loop7a
- SWI Amnesia_ProcessTable
- CMP R2,#0
- BEQ nukeballsend
- STMFD R13!,{R0-R4}
- MOV R9,R1
- BL ballexplode
- LDMFD R13!,{R0-R4}
- B loop7a
-
- .nukeballsend
- LDMFD R13!,{R0-R11,PC}
-
- .batexplode
- STMFD R13!,{R0-R1,R14}
- MOV R3,#20
- .batexloop
- STMFD R13!,{R3}
- LDR R3,[R12,#v.xpos]
- LDR R4,[R12,#v.ypos]
- BL random
- AND R0,R0,#&7FFFF
- SUB R0,R0,#&3FFFF
- ADD R3,R3,R0
- BL random
- AND R0,R0,#&1FFFF
- SUB R0,R0,#&FFFF
- ADD R4,R4,R0
- MOV R7,#&07000020
- BL random
- AND R0,R0,#&3F
- ADD R7,R7,R0
- MOV R0,#decortab
- MOV R1,#&05000000
- MOV R2,#%11000110001+(1<<24)
- SWI Amnesia_MakeObject
- LDMFD R13!,{R3}
- SUBS R3,R3,#1
- BPL batexloop
-
- LDMFD R13!,{R0-R1,PC}
-
- .hellexpand
- STMFD R13!,{R0-R11,R14}
- LDR R11,[R12,#v.levelnet]
- LDR R3,[R11,#net.xsize]
- LDR R4,[R11,#net.ysize]
- LDR R5,[R11,#net.xsize]
- ADD R10,R11,#net.data
- ADD R10,R10,R3
- SUB R4,R4,#2
- .heloop1
- ADD R10,R10,#1
- LDR R3,[R11,#net.xsize]
- SUB R3,R3,#2
- .heloop2
- LDRB R0,[R10]
- CMP R0,#&10
- BNE nothe
- LDRB R0,[R10,-R5]
- CMP R0,#&2F
- BEQ hefound
- LDRB R0,[R10,#-1]
- CMP R0,#&2F
- BEQ hefound
- LDRB R0,[R10,#1]
- CMP R0,#&2F
- BEQ hefound
- LDRB R0,[R10,R5]
- CMP R0,#&2F
- BEQ hefound
- .nothe
- ADD R10,R10,#1
- SUBS R3,R3,#1
- BGT heloop2
- ADD R10,R10,#1
- SUBS R4,R4,#1
- BGT heloop1
- LDMFD R13!,{R0-R11,PC}
- .hefound
- MOV R0,#&2F
- STRB R0,[R10]
- B nothe
-
-
- .writeblocksleft
- STMFD R13!,{R0-R2,R14}
- LDR R0,[R12,#v.blocksleft]
- CMP R0,#0
- MOVLT R0,#0
- ADR R1,blocksleftinj
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- LDMFD R13!,{R0-R2,PC}
-
- .blockslefttext
- DCD 64<<12,232<<12,0,0,&400000,0
- .blocksleftinj
- DBB 8
- DCB 0
- ALIGN
-
- .writetimeleft
- STMFD R13!,{R0-R2,R14}
- LDR R1,[R12,#v.warptime]
- MOV R2,#50
- MYDIV R0,R1,R2
- CMP R0,#0
- MOVLT R0,#0
- ADR R1,timeleftinj
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- LDMFD R13!,{R0-R2,PC}
-
- .timelefttext
- DCD 64<<12,232<<12,0,0,&400000,0
- .timeleftinj
- DBB 8
- DCB 0
- ALIGN
-
-
-
- .handlemorph
- STMFD R13!,{R0-R10,R14}
- MOV R3,#0
- MOV R4,#0
- LDRB R7,[R10]
- AND R0,R7,#&3
- CMP R0,#0
- MOVEQ R3,#-1
- CMP R0,#1
- MOVEQ R3,#1
- CMP R0,#2
- MOVEQ R4,#-1
- CMP R0,#3
- MOVEQ R4,#1
- MOV R0,R10
- BL backtranslate
- STMFD R13!,{R0-R1,R3-R4}
-
- .findlimits
- MOV R2,#&40
- CMP R7,#&BC
- MOVGE R2,#&90
- CMP R3,#0
- BEQ findvertlimits
- .findhorizlimits
- MOV R5,R0
- MOV R6,R0
- MOV R4,#256
- MOV R1,R10
- .loop58
- LDRB R0,[R1,#-1]!
- CMP R0,R2
- BGE foundhoriz1
- SUB R5,R5,#96<<12
- SUBS R4,R4,#1
- BGT loop58
- .foundhoriz1
- MOV R4,#256
- MOV R1,R10
- .loop59
- LDRB R0,[R1,#1]!
- CMP R0,R2
- BGE foundhoriz2
- ADD R6,R6,#96<<12
- SUBS R4,R4,#1
- BGT loop59
- .foundhoriz2
- B findlimitsend
-
- .findvertlimits
- MOV R5,R1
- MOV R6,R1
- LDR R3,[R12,#v.levelnet]
- LDR R3,[R3,#net.xsize]
- MOV R4,#256
- MOV R1,R10
- .loop5a
- LDRB R0,[R1,-R3]!
- CMP R0,R2
- BGE foundvert1
- SUB R5,R5,#96<<12
- SUBS R4,R4,#1
- BGT loop5a
- .foundvert1
- MOV R4,#256
- MOV R1,R10
- .loop5b
- LDRB R0,[R1,R3]!
- CMP R0,R2
- BGE foundvert2
- ADD R6,R6,#96<<12
- SUBS R4,R4,#1
- BGT loop5b
- .foundvert2
- .findlimitsend
-
- LDMFD R13!,{R0-R3}
- STMFD R13!,{R5-R6}
- MOV R6,R3
- MOV R5,R2
- MOV R4,R1
- MOV R3,R0
-
- MOV R0,#blockstab
- MOV R1,#(blockstab<<24)+0
- MOV R2,#%1001000010110010101
- CMP R5,#0
- ORREQ R2,R2,#1<<24
- LDRB R7,[R10]
- CMP R7,#&B4
- ORRGE R2,R2,#1<<25
- MOV R5,R5,ASL #13
- MOV R6,R6,ASL #13
- MOV R7,#0
- MOV R8,#&005E005E
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5-R6}
- CMP R1,#0
- BEQ morphfailed
- STR R5,[R1,#32]
- STR R6,[R1,#36]
- LDRB R1,[R10]
- MOV R0,#&10
- CMP R1,#&B0
- CMPNE R1,#&B2
- MOVEQ R0,#0
- CMP R1,#&B1
- CMPNE R1,#&B3
- MOVEQ R0,#&80
- CMP R1,#&B8
- MOVGE R0,#&0
- CMP R1,#&BC
- MOVGE R0,#&80
- STRB R0,[R10]
- .morphfailed
- LDMFD R13!,{R0-R10,PC}
-
-
- .warpball
- STMFD R13!,{R0-R5,R14}
- LDR R3,[R12,#v.warped]
- MOV R5,R3
- LDR R4,[R12,#v.balladr]
- LDRB R4,[R4]
- CMP R4,#&1C
- MOVEQ R4,#1
- CMP R4,#&1D
- MOVEQ R4,#2
- CMP R4,#&1E
- MOVEQ R4,#4
- CMP R4,#&1F
- MOVEQ R4,#8
- CMP R4,#8
- MOVGT R4,#1
- CMP R4,#0
- MOVLE R4,#1
- ADD R3,R3,R4,LSL #16
-
- ADD R3,R3,#1
- STR R3,[R12,#v.warped]
- LDR R3,[R12,#v.levelno]
- TST R3,#&400
- BLNE warpexitmes
- LDR R3,[R12,#v.levelno]
- TST R3,#&400
- BLEQ warpedmes
- LDR R0,[R12,#v.levelnet]
- LDR R0,[R0,#net.backdrop]
- TST R0,#1<<30
- LDMEQFD R13!,{R0-R5,PC}
- LDR R0,[R12,#v.warped]
- AND R0,R0,#&FF
- CMP R0,#20
- BLGE noblocks
- LDMFD R13!,{R0-R5,PC}
- .warpedmes
- STMFD R13!,{R3,R14}
- AND R0,R4,#&FF
- ADR R1,warpballadr2
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- LDR R3,[R12,#v.warped]
- AND R0,R3,#&FF
- ADR R1,warpballadr1
- MOV R2,#8
- SWI XOS_ConvertCardinal2
-
- ADR R0,warpballmes
- BL message
- ADR R0,warpballmes2
- BL message
- LDMFD R13!,{R3,PC}
-
- .warpexitmes
- STMFD R13!,{R3,R14}
- LDR R3,[R12,#v.warped]
- AND R3,R3,#&FF
- MOV R0,R3
- ADR R1,warpballadr
- MOV R2,#8
- SWI XOS_ConvertCardinal2
- CMP R5,#0
- ADR R0,warpexittext2
- ADREQ R0,warpexittext
- BL message
- CMP R5,#0
- BLEQ message
- ADR R0,warpballnum
- BL message
- LDMFD R13!,{R3,PC}
-
- .warpballmes
- DCD 160<<12,20<<12,0,0,&600001,0
- DCB "BALLS WARPED ="
- .warpballadr1
- DBB 8
- DCB 0
- ALIGN
- .warpballmes2
- DCD 160<<12,40<<12,0,0,&600001,0
- DCB "MULTIPLIER = "
- .warpballadr2
- DBB 8
- DCB 0
- ALIGN
-
- .warpexittext
- DCD 160<<12,20<<12,0,0,&600001,0
- DCB "BALLS RETURNED",0
- ALIGN
- DCD 160<<12,40<<12,0,0,&600001,0
- DCB "TO LEVEL",0
- ALIGN
- .warpexittext2
- DCD 160<<12,40<<12,0,0,&600001,0
- DCB "TOTAL RETURNED",0
- ALIGN
- .warpballnum
- DCD 160<<12,60<<12,0,0,&600001,0
- .warpballadr
- DBB 8
- DCB 0
- ALIGN
-
-
- .colchblocks
- STMFD R13!,{R14}
- MOV R0,#blockstab
- MOV R1,#blockstab
- .loop54
- SWI Amnesia_CollisionCheck
- CMP R0,#0
- LDMEQFD R13!,{PC}
- LDR R4,[R0,#4]
- LDR R5,[R1,#4]
- TST R4,#1<<20
- TSTEQ R5,#1<<20
- BNE loop54
- LDR R4,[R0,#16]
- RSB R4,R4,#0
- STR R4,[R0,#16]
- LDR R4,[R1,#16]
- RSB R4,R4,#0
- STR R4,[R1,#16]
- LDR R4,[R0,#20]
- RSB R4,R4,#0
- STR R4,[R0,#20]
- LDR R4,[R1,#20]
- RSB R4,R4,#0
- STR R4,[R1,#20]
- B loop54
-
- .colchblockball
- STMFD R13!,{R14}
-
- MOV R0,#blockstab
- MOV R1,#ballstab
- .loopo
- SWI Amnesia_CollisionCheck
- CMP R0,#0
- LDMEQFD R13!,{PC}
- STMFD R13!,{R0-R3}
- MOV R8,R0
- MOV R9,R1
- BL blockballcol
- BCS ballblocknohit
- LDR R0,[R8,#8]
- LDR R2,[R12,#v.plxcent]
- SUB R0,R0,R2
- LDR R1,[R8,#12]
- LDR R2,[R12,#v.plycent]
- SUB R1,R1,R2
- BL chinksound
- .ballblocknohit
- LDMFD R13!,{R0-R3}
- B loopo
-
-
- .stoneballcol
- STMFD R13!,{R14}
- MOV R5,#96<<12
- MUL R4,R2,R5
- MUL R5,R3,R5
- MOV R6,#0
- MOV R7,#0
- STMFD R13!,{R4-R7}
-
- ADD R14,R9,#8
- LDMIA R14,{R0-R3}
- SUB R0,R0,R4
- SUB R1,R1,R5
- SUB R2,R2,R6
- SUB R3,R3,R7
-
- MOV R4,#96
- MOV R5,#96
- LDR R6,[R9,#28]
- MOV R6,R6,LSR #16
- STMFD R13!,{R4-R6}
- BL blockwindback
- STR R4,[R12,#v.temp1]
- CMP R4,#&1FC
- LDMFD R13!,{R4-R6}
- BGT stoneblockmiss
- STMFD R13!,{R0-R1}
- MOV R6,#0
- MOV R7,#0
- CMP R0,R4,ASL #11
- SUBGE R6,R0,R4,ASL #11
- CMN R0,R4,ASL #11
- ADDLT R6,R0,R4,ASL #11
- CMP R1,R5,ASL #11
- SUBGE R7,R1,R5,ASL #11
- CMN R1,R5,ASL #11
- ADDLT R7,R1,R5,ASL #11
- TST R8,#8
- BLNE hitsteps
- TST R8,#8
- LDMNEFD R13!,{R0-R1}
- BNE stoneblockmiss
- MOV R0,R6
- MOV R1,R7
- CMP R0,#0
- CMPEQ R1,#0
- LDMEQFD R13!,{R0-R1}
- BEQ whackprocess
- LDR R2,[R9,#16]
- LDR R3,[R9,#20]
- BL vecreflect
- LDMFD R13!,{R0-R1}
- BCS stoneblockmiss
- .whackins
- ORR R8,R8,#32
- STMFD R13!,{R4,R5}
- LDR R4,[R9,#16]
- LDR R5,[R9,#20]
- SUBS R4,R4,R2
- RSBMI R4,R4,#0
- SUBS R5,R5,R3
- RSBMI R5,R5,#0
- ADD R4,R4,R5
- MOV R4,R4,LSR #6
- STR R4,[R12,#v.colpitch]
- LDMFD R13!,{R4,R5}
-
- LDR R5,[R9,#4]; set the collided flags
- CMP R2,#0
- ORRGT R5,R5,#1<<20
- ORRLT R5,R5,#1<<21
- CMP R3,#0
- ORRGT R5,R5,#1<<22
- ORRLT R5,R5,#1<<23
- STR R5,[R9,#4]
- LDMFD R13!,{R4-R7}
- ADD R0,R0,R4
- ADD R1,R1,R5
- ADD R2,R2,R6
- ADD R3,R3,R7
- LDR R4,[R12,#v.temp1]
- LDMFD R13!,{R14}
- BIC R14,R14,#1<<29
- MOVS PC,R14
- .stoneblockmiss
- LDMFD R13!,{R4-R7}
- LDMFD R13!,{R14}
- ORR R14,R14,#1<<29
- MOVS PC,R14
-
- .whackprocess
- BL ballexplode
- B whackins
-
- .hitsteps
- STMFD R13!,{R0,R14}
- LDR R0,[R9,#32]
- CMP R0,#0
- LDMGTFD R13!,{R0,PC}
- LDRB R0,[R10]
- CMP R0,#&C8
- BEQ stepsleft
- CMP R0,#&C9
- BEQ stepsright
- CMP R0,#&CA
- BEQ stepsup
- CMP R0,#&CB
- BEQ stepsdown
- B stepsbounce
- .stepsdown
- CMP R7,#0
- BLE stepsbounce
- B stepmount
- .stepsup
- CMP R7,#0
- BGE stepsbounce
- B stepmount
- .stepsright
- CMP R6,#0
- BLE stepsbounce
- B stepmount
- .stepsleft
- CMP R6,#0
- BGE stepsbounce
- B stepmount
- .stepsbounce
- CMP R6,#0
- CMPEQ R7,#0
- BICNE R8,R8,#8
- LDMFD R13!,{R0,PC}
- .stepmount
- LDMFD R13!,{R0,PC}
-
-
- .blockballcol
- STMFD R13!,{R14}
-
- ADD R14,R8,#8
- LDMIA R14,{R4-R7}
- LDR R0,[R8,#4]
- TST R0,#4
-
- LDR R0,[R9,#8]
- LDR R1,[R9,#12]
- LDR R2,[R9,#36]
- LDR R3,[R9,#40]
- SUB R2,R0,R2 ;get historical velocity
- SUB R3,R1,R3
- SUB R0,R0,R4
- SUB R1,R1,R5
- SUBNE R2,R2,R6
- SUBNE R3,R3,R7
-
- LDR R4,[R8,#28];block size
- AND R5,R4,#&FFFF;block y size
- MOV R4,R4,LSR #16;block x size
- LDR R6,[R9,#28]
- MOV R6,R6,LSR #16
- STMFD R13!,{R4-R6}
- BL blockwindback
- STR R4,[R12,#v.temp2]
- CMP R4,#&1FC
- LDMFD R13!,{R4-R6}
- BGT ballblockmiss
- STMFD R13!,{R0-R1}
- MOV R6,#0
- MOV R7,#0
- CMP R0,R4,ASL #11
- SUBGE R6,R0,R4,ASL #11
- CMN R0,R4,ASL #11
- ADDLT R6,R0,R4,ASL #11
- CMP R1,R5,ASL #11
- SUBGE R7,R1,R5,ASL #11
- CMN R1,R5,ASL #11
- ADDLT R7,R1,R5,ASL #11
- MOV R0,R6
- MOV R1,R7
- CMP R0,#0
- CMPEQ R1,#0
- LDMEQFD R13!,{R0-R1}
- BEQ blockwhack
- LDR R2,[R8,#4]
- TST R2,#4
- LDR R2,[R9,#16]
- LDR R14,[R8,#16]
- SUBNE R2,R2,R14
- LDR R3,[R9,#20]
- LDR R14,[R8,#20]
- SUBNE R3,R3,R14
- BL vecreflect
- LDMFD R13!,{R0-R1}
- BCS ballblockmiss
- .blockwhackins
- STMFD R13!,{R4,R5}
- LDR R4,[R9,#16]
- LDR R5,[R9,#20]
- SUBS R4,R4,R2
- RSBMI R4,R4,#0
- SUBS R5,R5,R3
- RSBMI R5,R5,#0
- ADD R4,R4,R5
- MOV R4,R4,LSR #6
- STR R4,[R12,#v.colpitch]
- LDMFD R13!,{R4,R5}
- LDR R5,[R9,#4]; set the collided flags
- CMP R2,#0
- ORRGT R5,R5,#1<<20
- ORRLT R5,R5,#1<<21
- CMP R3,#0
- ORRGT R5,R5,#1<<22
- ORRLT R5,R5,#1<<23
- STR R5,[R9,#4]
- ADD R14,R8,#8
- LDMIA R14,{R4-R7}
- LDR R14,[R8,#4]
- TST R14,#4
- ADD R0,R0,R4
- ADD R1,R1,R5
- ADDNE R2,R2,R6
- ADDNE R3,R3,R7
- BL limitballspeed
- ADD R14,R9,#8
- STMIA R14,{R0-R3}
- LDR R4,[R8,#4]
- ORR R4,R4,#4
- STR R4,[R8,#4]
- LDR R4,[R12,#v.temp2]
- LDMFD R13!,{R14}
- BIC R14,R14,#1<<29
- MOVS PC,R14
- .ballblockmiss
- LDMFD R13!,{R14}
- ORR R14,R14,#1<<29
- MOVS PC,R14
-
- .blockwhack
- BL ballexplode
- B blockwhackins
-
-
- .blocktostar
- STMFD R13!,{R0-R8,R14}
- LDR R3,[R8,#8]
- LDR R4,[R8,#12]
- BL starmake
- LDMFD R13!,{R0-R8,PC}
-
- .colchbatball
- STMFD R13!,{R14}
-
- MOV R0,#batstab
- MOV R1,#ballstab
- .loopl
- SWI Amnesia_CollisionCheck
- CMP R0,#0
- LDMEQFD R13!,{PC}
- STMFD R13!,{R0-R3}
- MOV R8,R0
- MOV R9,R1
- BL batballcol
- CMP R4,#255
- BGE nobatballcol
- LDR R0,[R9,#4]
- TST R0,#1<<26
- BLNE destroybat
- STMFD R13!,{R0-R1}
- BL objectrange
- BL cracksound
- LDMFD R13!,{R0-R1}
- .nobatballcol
- LDMFD R13!,{R0-R3}
- B loopl
-
- .destroybat
- STMFD R13!,{R9,R14}
- MOV R0,#0
- STR R0,[R8,#0]
- BL batexplode
-
- BL deathsound
- LDR R0,[R12,#v.pllives]
- CMP R0,#0
- BLEQ gameovermes
- LDMFD R13!,{R9,PC}
-
-
- .batballcol
- STMFD R13!,{R0-R3,R14}
- LDR R0,[R9,#8]
- LDR R1,[R9,#12]
- LDR R2,[R9,#16]
- LDR R3,[R9,#20]
- LDR R4,[R12,#v.xpos]
- LDR R5,[R12,#v.ypos]
- LDR R6,[R12,#v.xvec]
- LDR R7,[R12,#v.yvec]
- SUB R0,R0,R4
- SUB R1,R1,R5
- SUB R2,R2,R6
- SUB R3,R3,R7
- STMFD R13!,{R4-R7}
- MOV R4,#batwidth
- MOV R5,#batheight
- MOV R6,#ballsize
- STMFD R13!,{R2-R3}
- BL windback
- LDMFD R13!,{R2-R3}
- MOV R10,R4
- CMP R10,#255
- BEQ batballmiss
-
- STMFD R13!,{R0-R1}
- MOV R4,#(batwidth-batheight)<<11
- MOV R5,#0
- CMP R0,R4
- SUBGE R5,R0,R4
- CMN R0,R4
- ADDLT R5,R0,R4
- MOV R0,R5
-
- ; Solving x=x-2(xu+yv)u/(u^2+v^2)
- ;
- ;R0=u
- ;R1=v
- ;R2=x
- ;R3=y
-
- BL vecreflect
- LDMFD R13!,{R0-R1}
- MOVCS R10,#255
- BCS batballmiss
- STMFD R13!,{R4,R5}
- LDR R4,[R9,#16]
- SUBS R4,R4,R2
- RSBMI R4,R4,#0
- LDR R5,[R9,#20]
- SUBS R5,R5,R3
- RSBMI R5,R5,#0
- ADD R4,R4,R5
- MOV R4,R4,LSR #9
- RSBS R4,R4,#&6F
- MOVMI R4,#0
- STR R4,[R12,#v.colpitch]
- LDMFD R13!,{R4,R5}
-
-
- .batballmiss
-
- LDMFD R13!,{R4-R7}
- CMP R10,#255
- BEQ batballmiss2
-
- ADD R0,R0,R4
- ADD R1,R1,R5
- ADD R2,R2,R6
- ADD R3,R3,R7
- ; double collision checks
- LDR R5,[R12,#v.magnet]
- CMP R5,#0
- BNE skipprobs
- LDR R5,[R12,#v.bastmode]
- CMP R5,#0
- BNE skipprobs
- LDR R5,[R9,#4]
- TST R5,#1<<20; left bit
- BEQ noleftprobs
- CMP R2,#0
- LDRLT R0,[R9,#8]
- MOVLT R2,#0
- .noleftprobs
- TST R5,#1<<21; right bit
- BEQ norightprobs
- CMP R2,#0
- LDRGT R0,[R9,#8]
- MOVGT R2,#0
- .norightprobs
- TST R5,#1<<22; up bit
- BEQ noupprobs
- CMP R3,#0
- LDRLT R1,[R9,#12]
- MOVLT R3,#0
- .noupprobs
- TST R5,#1<<23; down bit
- BEQ nodownprobs
- CMP R3,#0
- LDRGT R1,[R9,#12]
- MOVGT R3,#0
- .skipprobs
- .nodownprobs
-
- ;STR R0,[R9,#8]
- ;STR R1,[R9,#12]
- STR R2,[R9,#16]
- STR R3,[R9,#20]
- .batballmiss2
-
- MOV R4,R10
- LDMFD R13!,{R0-R3,PC}
-
- .vecreflect
- STMFD R13!,{R4-R7}
- MOV R0,R0,ASR #4
- MOV R1,R1,ASR #4
- ;MOV R2,R2,ASR #4
- ;MOV R3,R3,ASR #4
-
- ;R0=u bp 8
- ;R1=v bp 8
- ;R2=x bp 8
- ;R3=y bp 8
- MUL R4,R0,R2
- MUL R5,R1,R3
- ADDS R5,R4,R5
- BPL vecrefmiss
- ;R5=(xu+yv) bin pt 20
- MOV R7,R0
- MUL R7,R0,R7
- MOV R6,R1
- MUL R6,R1,R6
- ADD R6,R6,R7; R6 = (u^2+v^2) bin pt 16
- MOVS R6,R6,ASR #8; bin pt 8
- BEQ vecrefdiv0
- MYDIV R4,R5,R6
- CMP R4,#&70000000
- MOVGT PC,#0
- CMN R4,#&70000000
- MOVLT PC,#0
- ;R4=(xu+yv)/(u^2+v^2) bin pt 12
- ;Now do -2(R4)u
- MUL R5,R4,R0; bin pt 20
- SUB R2,R2,R5,ASR #7; 2*R2 bin pt 12
- MUL R5,R4,R1
- SUB R3,R3,R5,ASR #7
- BIC R14,R14,#1<<29; clear carry
- .vecrefins
- MOV R0,R0,ASL #4
- MOV R1,R1,ASL #4
- ;MOV R2,R2,ASL #4
- ;MOV R3,R3,ASL #4
- LDMFD R13!,{R4-R7}
- MOVS PC,R14
- .vecrefmiss
- .vecrefdiv0
- ORR R14,R14,#1<<29
- B vecrefins
-
-
- .colchbatstars
- STMFD R13!,{R14}
-
- MOV R0,#batstab
- MOV R1,#starstab
- .loopu
- SWI Amnesia_CollisionCheck
- CMP R0,#0
- LDMEQFD R13!,{PC}
- BL goodyget
- B loopu
-
- .goodyget
- STMFD R13!,{R0-R3,R14}
- MOV R8,R0
- MOV R9,R1
-
- LDR R7,[R9,#32]
- AND R0,R7,#&F0
- CMP R0,#&50
- BEQ goodystore
- MOV R0,#0
- STR R0,[R9,#0]
-
- LDR R0,[R9,#32]
- AND R0,R0,#&F
- MOV R1,R9
- BL goodyuse
- BL goodyuseeffect
- .goodygetend
- ADD R6,R12,#v.goodytab
- #rept 4
- LDR R0,[R6],#4
- CMP R0,#11
- BEQ radarok
- #endr
- MOV R0,#0
- STR R0,[R12,#v.lineradar]
- .radarok
- BL objectrange
- BL goodysound
- LDMFD R13!,{R0-R3,PC}
-
- .goodystore
- ADD R6,R12,#v.goodytab
- LDR R0,[R6]
- CMP R0,#0
- BEQ thisgoody
- ADD R6,R6,#4
- LDR R0,[R6]
- CMP R0,#0
- BEQ thisgoody
- ADD R6,R6,#4
- LDR R0,[R6]
- CMP R0,#0
- BEQ thisgoody
- ADD R6,R6,#4
- LDR R0,[R6]
- CMP R0,#0
- BEQ thisgoody
- ADD R6,R12,#v.goodytab
- LDR R0,[R12,#v.goodycsr]
- AND R0,R0,#3
- ADD R6,R6,R0,LSL #2
- .thisgoody
- MOV R1,R6
- LDR R0,[R9,#32]
- AND R0,R0,#&F
- STR R0,[R6]
- CMP R0,#11
- MOVEQ R0,#1
- STREQ R0,[R12,#v.lineradar]
- MOV R0,#0
- STR R0,[R9,#0]
- BL goodystoreeffect
- B goodygetend
-
-
- .makebat
- STMFD R13!,{R14}
- MOV R0,#batstab
- SWI Amnesia_WipeTable
- MOV R0,#batstab
- MOV R1,#&01000000
- MOV R2,#%10011010001+(1<<18)
- MOV R3,#128<<12
- MOV R4,#128<<12
- MOV R5,#0
- MOV R6,#0
- MOV R7,#0
- MOV R8,#0
- SWI Amnesia_MakeObject
- BL homebat
- LDMFD R13!,{PC}
-
- .decormake
- STMFD R13!,{R14}
- BL random
- AND R1,R0,#3
- BL random
- AND R0,R0,#&7FF000
- SUB R0,R0,#&400000
- MOV R3,R0
- BL random
- AND R0,R0,#&7FF000
- SUB R0,R0,#&400000
- MOV R4,R0
- BL decorate
- LDMFD R13!,{PC}
-
- .balldecor
- STMFD R13!,{R1-R8,R14}
- LDR R3,[R9,#8]
- LDR R4,[R9,#12]
- LDR R5,[R9,#28]
- AND R6,R5,#&FFFF
- MOV R5,R5,LSR #16
- TST R0,#2
- SUBNE R3,R3,R5,LSL #11
- TST R0,#1
- ADDNE R3,R3,R5,LSL #11
- TST R0,#8
- SUBNE R4,R4,R6,LSL #11
- TST R0,#4
- ADDNE R4,R4,R6,LSL #11
- MOV R1,#2
- BL decorate
- LDMFD R13!,{R1-R8,PC}
-
-
- .decorate ;R1 decor type
- ;R3,R4 coords
- STMFD R13!,{R5-R8,R14}
- MOV R2,#%1000001001110001
- MOV R5,#0
- MOV R6,#0
- MOV R7,#&10000080
- CMP R1,#2
- MOV R7,#&03000080
- MOV R8,#0
- MOV R0,#decortab
- ADD R1,R1,#(decortab)<<24
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5-R8,PC}
-
- .vdecorate ;R1 decor type
- ;R3,R4 coords
- STMFD R13!,{R5-R8,R14}
- MOV R2,#%1000000100110101
- MOV R7,#&10000080
- CMP R1,#2
- MOVEQ R7,#&03000080
- MOV R8,#0
- MOV R0,#decortab
- ADD R1,R1,#(decortab)<<24
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5-R8,PC}
-
- .gdecorate ;R1 decor type
- ;R3,R4 coords
- STMFD R13!,{R5-R8,R14}
- MOV R2,#%1000000100010101
- MOV R7,#&10000080
- MOV R8,#0
- MOV R0,#decortab
- ORR R1,R1,#(goodytab)<<24
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5-R8,PC}
-
-
-
- .bateffects
- STMFD R13!,{R14}
- LDR R0,[R12,#v.ballfire]
- SUBS R0,R0,#1
- STRPL R0,[R12,#v.ballfire]
- LDR R0,[R12,#v.blueball]
- SUBS R0,R0,#1
- STRPL R0,[R12,#v.blueball]
- LDR R0,[R12,#v.bastard]
- SUBS R0,R0,#1
- STRPL R0,[R12,#v.bastard]
- CMP R0,#0
- LDR R1,[R12,#v.ballspeed]
- MOVGT R1,R1,ASL #1
- CMP R1,#31<<12
- MOVGT R1,#31<<12
- STR R1,[R12,#v.ballspeedlim]
- CMP R0,#0
- LDR R1,[R12,#v.mousespeed]
- ADDGT R1,R1,#1
- STR R1,[R12,#v.mousesens]
-
-
- LDR R0,[R12,#v.lineradar]
- CMP R0,#1
- BLGE lineradardecor
- LDR R0,[R12,#v.framectr]
- LDR R1,[R12,#v.bateffect]
- SUBS R1,R0,R1
- BMI dobateffect
- CMP R1,#4
- LDMLTFD R13!,{PC}
- .dobateffect
- STR R0,[R12,#v.bateffect]
- LDR R3,[R12,#v.xpos]
- LDR R4,[R12,#v.ypos]
- LDR R0,[R12,#v.magnet]
- CMP R0,#0
- MOV R1,#2+(goodytab<<24)
- BLGT batmagnetdecor
- LDMFD R13!,{PC}
-
- .batmagnetdecor
- STMFD R13!,{R3-R4,R14}
- BL random
- AND R0,R0,#&7FF0
- SUB R0,R0,#&4000
- MOV R5,R0
- BL random
- AND R0,R0,#&7FF0
- SUB R0,R0,#&4000
- MOV R6,R0
- STMFD R13!,{R5,R6}
- LDR R0,[R12,#v.xvec]
- ADD R5,R5,R0
- LDR R0,[R12,#v.yvec]
- ADD R6,R6,R0
- MOV R2,#%1000000100010101+(1<<24)
- MOV R7,#&03000010
- MOV R8,#0
- MOV R0,#decortab
-
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5,R6}
- RSB R5,R5,#0
- RSB R6,R6,#0
- MOV R5,R5,ASR #4
- MOV R6,R6,ASR #4
- STR R5,[R1,#32]
- STR R6,[R1,#36]
- LDMFD R13!,{R3-R4,PC}
-
- .lineradardecor
- STMFD R13!,{R14}
- LDR R9,[R12,#v.framectr]
- MOV R9,R9,ASR #2
- LDR R3,[R12,#v.xpos]
- LDR R4,[R12,#v.ypos]
- LDR R5,[R12,#v.ballxpos]
- LDR R6,[R12,#v.ballypos]
- SUB R5,R5,R3
- SUB R6,R6,R4
- MOVS R0,R5
- RSBMI R0,R5,#0
- MOVS R1,R6
- RSBMI R1,R6,#0
- ADD R0,R0,R1
- CMP R0,#128<<12
- BLT lineradardecorend
- MOV R5,R5,ASR #6
- MOV R6,R6,ASR #6
- #rept 8
- ADD R3,R3,R5
- ADD R4,R4,R6
- BL radarobject
- #endr
- .lineradardecorend
- LDMFD R13!,{PC}
-
- .radarobject
- STMFD R13!,{R3-R6,R14}
- MOV R0,#decortab
- MOV R1,#(decortab<<24)+1
- AND R9,R9,#&F
- ADD R1,R1,R9,LSL #16
- ADD R9,R9,#1
- MOV R2,#%1000001000010101
- MOV R5,#0
- MOV R6,#0
- MOV R7,#&00010001
- MOV R8,#0
- SWI Amnesia_MakeObject
- LDMFD R13!,{R3-R6,PC}
-
-
-
- .makeball
- STMFD R13!,{R14}
- MOV R0,#0
- STR R0,[R12,#v.dead]
- MOV R1,#&03000000
- MOV R2,#%10100000000+(1<<25)+(1<<18)
- BL random
- AND R5,R0,#&FFFF
- SUB R5,R5,#&7FFF
- BL random
- AND R6,R0,#&7FFF
- SUB R6,R6,#&9FFF
- LDR R7,[R12,#v.demomode]
- CMP R7,#1
- CMPNE R7,#2
- MOVEQ R5,#2<<12
- MOVEQ R6,#2<<12
- MOV R7,#&01000010
- MOV R8,#&00200020
- MOV R0,#ballstab
- SWI Amnesia_MakeObject
- MOV R0,#2
- STR R0,[R1,#32]
- LDMFD R13!,{PC}
-
- .makeblueball
- STMFD R13!,{R14}
- MOV R1,#&03000001
- MOV R2,#%10100000000+(1<<25)+(1<<29)+(1<<18)
- BL random
- AND R5,R0,#&3FFFF
- SUB R5,R5,#&20000
- BL random
- AND R6,R0,#&3FFFF
- SUB R6,R6,#&20000
- MOV R7,#&01000010
- MOV R8,#&00200020
- MOV R0,#ballstab
- SWI Amnesia_MakeObject
- MOV R0,#2
- STR R0,[R1,#32]
- LDMFD R13!,{PC}
-
- .makeredball
- STMFD R13!,{R14}
- MOV R1,#&03000002
- MOV R2,#%10100000000+(1<<25)+(1<<26)+(1<<29)+(1<<18)
- BL random
- AND R5,R0,#&3FFFF
- SUB R5,R5,#&20000
- BL random
- AND R6,R0,#&3FFFF
- SUB R6,R6,#&20000
- MOV R7,#&01000010
- MOV R8,#&00200020
- MOV R0,#ballstab
- SWI Amnesia_MakeObject
- MOV R0,#2
- STR R0,[R1,#32]
- LDMFD R13!,{PC}
-
- .makeballdecor
- STMFD R13!,{R14}
- LDR R3,[R1,#8]
- LDR R4,[R1,#12]
- MOV R1,#1
- MOV R2,#16
- ADR R11,circletab
- .loopt
- STMFD R13!,{R1-R4,R11}
- LDMIA R11,{R5,R6}
- MOV R5,R5,ASR #16
- MOV R6,R6,ASR #16
- BL vdecorate
- LDMFD R13!,{R1-R4,R11}
- ADD R11,R11,#128
- SUBS R2,R2,#1
- BGT loopt
- LDMFD R13!,{PC}
-
- .makeblock
- STMFD R13!,{R14}
- MOV R1,#(blockstab<<24)+0
- MOV R2,#%1000010111010101+(1<<18)
- MOV R3,#0
- MOV R4,#-256<<12
- MOV R5,#0
- MOV R6,#1<<12
- MOV R7,#0
- MOV R8,#0
- MOV R0,#blockstab
- SWI Amnesia_MakeObject
- MVN R3,#96<<16
- STR R3,[R1,#32]
- MOV R3,#96<<16
- STR R3,[R1,#36]
- LDMFD R13!,{PC}
-
- .starmake
- STMFD R13!,{R14}
- STMFD R13!,{R5}
- MOV R0,#starstab
- MOV R1,#&09000000
- MOV R2,#%1000001000110101+(1<<31)+(1<<18)
- MOV R5,#0
- MOV R6,#32<<12
- MOV R7,#&0000FFC0
- MOV R8,#&00300030
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5}
- STR R5,[R1,#32]
- LDMFD R13!,{PC}
-
-
- .writebank
- STMFD R13!,{R14}
- .writebankloop
- SWI Blitz_Time
- MOV R3,R0
- MOV R0,R0,LSR #1
- CMP R0,#1
- BGE goforwrites
- SWI OS_ReadEscapeState
- BCC writebankloop
- .goforwrites
- STR R0,[R12,#v.realrate]
- CMP R0,#1
- MOVNE R0,#2
-
- STR R0,[R12,#v.frameinc]
- LDR R1,[R12,#v.framectr]
- ADD R1,R1,R0
- STR R1,[R12,#v.framectr]
- SUB R0,R3,R0,LSL #1
- CMP R0,#2
- MOVGT R0,#2
- CMP R0,#0
- MOVLT R0,#0
- SWI Blitz_SetTime
- BL softshift
- LDMFD R13!,{PC}
-
-
- #set demolen = &8000
- .demomake
- STMFD R13!,{R14}
- LDR R0,[R12,#v.demomode]
- CMP R0,#0
- LDMNEFD R13!,{PC}
- BL releasedemo
- ADD R0,R12,#v.demoadr
- MOV R1,#demolen
- ADR R2,demoname
- MOV R3,#0
- SWI Amnesia_ClaimBlock
- MOV R0,#demolen
- LDR R1,[R12,#v.demoadr]
- STR R0,[R1]
- MOV R0,#4
- STR R0,[R12,#v.democtr]
- MOV R0,#2
- STR R0,[R12,#v.demomode]
- MOV R0,#0
- STR R0,[R12,#v.rnseed]
- BL savegame
-
- ADR R0,demomakemes
- BL message
- LDMFD R13!,{PC}
- .demomakemes
- DCD 160<<12,128<<12,0,0,&00500001,0
- DCB "DEMO RECORDING",0
- ALIGN
-
- .demoname
- DCB "Demo",0
- ALIGN
-
- .demostart
- STMFD R13!,{R14}
- BL releasedemo
- MOV R0,#texttab
- SWI Amnesia_WipeTable
- MOV R0,#1
- STR R0,[R12,#v.demomode]
- MVN R0,#0
- STR R0,[R12,#v.loadedlev]
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- MOV R0,#1
- STR R0,[R12,#v.menucsr]
- MOV R0,#0
- STR R0,[R12,#v.rnseed]
- BL emptykeybuf
- MOV R0,#0
- STR R0,[R12,#v.bastmode]
- LDMFD R13!,{PC}
-
- .gamestart
- STMFD R13!,{R14}
- BL releasedemo
- LDR R0,[R12,#v.singlesave]
- STR R0,[R12,#v.savestate]
- MOV R0,#0
- STR R0,[R12,#v.demomode]
- MVN R0,#0
- STR R0,[R12,#v.loadedlev]
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- STR R0,[R12,#v.newlevelctr]
- BL setupplayer
- .gamehack
- MOV R0,#0
- STR R0,[R12,#v.bastmode]
- LDMFD R13!,{PC}
-
- .keyscan
- STMFD R13!,{R14}
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- CMPNE R0,#2
- BEQ keyscanins
- MOV R0,#129
- MOV R1,#81 EOR &FF
- MOV R2,#&FF
- SWI OS_Byte
- CMP R2,#&FF
- LDR R0,[R12,#v.pending]
- CMPNE R0,#4
- BLEQ savemenu
- MOV R0,#129
- MOV R1,#50 EOR &FF
- MOV R2,#&FF
- SWI OS_Byte
- CMP R2,#&FF
- BLEQ demomake
- MOV R0,#129
- MOV R1,#51 EOR &FF
- MOV R2,#&FF
- SWI OS_Byte
- CMP R2,#&FF
- BLEQ demostart
- MOV R0,#129
- MOV R1,#98 EOR &FF
- MOV R2,#&FF
- SWI OS_Byte
- CMP R2,#&FF
- BLEQ screensave
- MOV R0,#129
- MOV R1,#86 EOR &FF
- MOV R2,#&FF
- SWI OS_Byte
- CMP R2,#&FF
- BEQ keyloadskip
- .keyscanins
- LDR R0,[R12,#v.pending]
- CMP R0,#1
- .keyloadskip
- MOV R0,#0
- BLEQ loadmenu; leave this last - needs R0=0
-
- LDMFD R13!,{PC}
-
- .realkeyscan
- STMFD R13!,{R14}
- LDR R0,[R12,#v.pending]
- CMP R0,#4
- BLEQ savemenu
- LDR R0,[R12,#v.pending]
- CMP R0,#1
- MOV R0,#0
- BLEQ loadmenu; leave this last - needs R0=0
- LDMFD R13!,{PC}
-
- .screensave
- STMFD R13!,{R14}
- ADR R0,screencom
- SWI OS_CLI
- LDMFD R13!,{PC}
- .screencom
- DCB "ScreenSave OddBall:^.Screen",0
- ALIGN
-
-
-
- .getnumber
- STMFD R13!,{R14}
- .getnumberloop
- BL numberscan
- MOV R4,R1
- CMP R1,#0
- LDMNEFD R13!,{PC}
- BL getnumberloop
-
- .numberscan
- STMFD R13!,{R14}
- BL getkey
- MOVNE R1,#0
- SUBS R3,R1,#"0"
- MOVMI R3,#0
- CMP R3,#9
- MOVGT R3,#0
-
- CMP R1,#13
- CMPNE R1,#137
- LDREQ R3,[R12,#v.menucsr]
- LDMFD R13!,{PC}
-
- .gamenumberscan
- STMFD R13!,{R14}
- BL getkey
- MOVNE R1,#0
- SUBS R3,R1,#"0"
- MOVMI R3,#0
- CMP R3,#9
- MOVGT R3,#0
- LDMFD R13!,{PC}
-
- .demomenu
- STMFD R13!,{R14}
- BL setupcanvas
- BL numberscan
- MOV R4,R1
- MOV R5,R2
- LDR R0,[R12,#v.menuno]
- STMFD R13!,{R0}
- AND R0,R0,#7
- ADR R1,menutab
- LDR R2,[R1,R0,LSL #2]
- MOV R14,PC
- ADD PC,R1,R2
- LDR R1,[R12,#v.menuno]
- LDMFD R13!,{R0}
- CMP R0,R1
-
- MOVLT R0,#1
- STRNE R0,[R12,#v.menucsr]
- LDR R0,[R12,#v.menucsr]
- MOV R2,R0,LSL #4
- ADD R2,R2,R0,LSL #2
- LDR R0,[R12,#v.genctr]
- ADD R0,R0,#1<<16
- STR R0,[R12,#v.genctr]
-
- LDR R3,[R12,#v.menuno]
- CMP R3,#5
- CMPNE R3,#2
- LDR R3,[R12,#v.demomode]
- CMPEQ R3,#1
- LDMEQFD R13!,{PC}
- AND R0,R0,#&F<<16
-
- ORR R0,R0,#(decortab<<24)+3
- LDR R1,[R12,#v.plotnibble]
- ADD R1,R1,#43
- ADD R2,R2,#60
- SWI FastSpr_Plot
- LDMFD R13!,{PC}
- .menutab
- DCD menu0-menutab
- DCD menu1-menutab
- DCD menu2-menutab
- DCD menu3-menutab
- DCD menu4-menutab
- DCD menu5-menutab
- DCD menu6-menutab
- DCD menu6-menutab
-
-
-
- .menu0
- STMFD R13!,{R14}
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- CMPNE R0,#2
- ADR R0,menu0text
- ADREQ R0,menu0demotext
- #rept 9
- BL nibprint
- #endr
-
- MOV R0,#6
- BL addmenucsr
- CMP R4,#136
- MOVEQ R0,#2
- STREQ R0,[R12,#v.exit]
- CMP R3,#0
- LDMEQFD R13!,{PC}
- LDR R6,[R12,#v.menuno]
- CMP R3,#6
- MOVLE R6,R3
- STR R6,[R12,#v.menuno]
- LDMFD R13!,{PC}
- .menu0text
- DCD 116,32
- DCB "ODDBALL",0
- ALIGN
- DCD 48,80
- DCB "1. NEW GAME",0
- ALIGN
- DCD 48,100
- DCB "2. SAVE GAME",0
- ALIGN
- DCD 48,120
- DCB "3. LOAD GAME",0
- ALIGN
- DCD 48,140
- DCB "4. OPTIONS",0
- ALIGN
- DCD 48,160
- DCB "5. KILL ALL BALLS",0
- ALIGN
- DCD 48,180
- DCB "6. EXIT TO DESKTOP",0
- ALIGN
- DCD 40,200
- DCB "USE b c a TO SELECT,",0
- ALIGN
- DCD 40,220
- DCB "` TO RETURN TO GAME",0
- ALIGN
- .menu0demotext
- DCD 116,32
- DCB "ODDBALL",0
- ALIGN
- DCD 48,80
- DCB "1. START GAME",0
- ALIGN
- DCD 48,100
- DCB "2. HIGH SCORES",0
- ALIGN
- DCD 48,120
- DCB "3. LOAD GAME",0
- ALIGN
- DCD 48,140
- DCB "4. OPTIONS",0
- ALIGN
- DCD 48,160
- DCB "5. INSTRUCTIONS",0
- ALIGN
- DCD 48,180
- DCB "6. EXIT TO DESKTOP",0
- ALIGN
- DCD 42,200
- DCB "USE b c a TO SELECT",0
- ALIGN
- DCD 48,220
- DCB " ",0
- ALIGN
-
- .menu1
- STMFD R13!,{R14}
- ADR R0,menu1text
- #rept 5
- BL nibprint
- #endr
- ADR R0,menusubtext
- BL nibprint
- BL nibprint
-
- LDR R1,[R12,#v.singlesave]
- CMP R1,#1
- ADR R0,freesave
- ADREQ R0,singlesave
- BL nibprint
- CMP R4,#136
- MOVEQ R0,#0
- STREQ R0,[R12,#v.menuno]
-
- MOV R0,#4
- BL addmenucsr
- CMP R3,#4
- BLEQ saveflip
- CMP R3,#1
- CMPNE R3,#2
- CMPNE R3,#3
- LDMNEFD R13!,{PC}
- STR R3,[R12,#v.diff]
- BL gamestart
- LDMFD R13!,{PC}
- .saveflip
- LDR R0,[R12,#v.singlesave]
- CMP R0,#0
- MOV R0,#0
- MOVEQ R0,#1
- STR R0,[R12,#v.singlesave]
- MOV PC,R14
- .menu1text
- DCD 56,32
- DCB "START A NEW GAME",0
- ALIGN
- DCD 48,52
- DCB "SELECT DIFFICULTY",0
- ALIGN
- DCD 48,80
- DCB "1. BEGINNER",0
- ALIGN
- DCD 48,100
- DCB "2. EXPERT",0
- ALIGN
- DCD 48,120
- DCB "3. PSYCHIC",0
- ALIGN
- .freesave
- DCD 48,140
- DCB "4. SAVE AT ANY TIME",0
- ALIGN
- .singlesave
- DCD 48,140
- DCB "4. ONE SAVE/LEVEL",0
- ALIGN
-
- .menu2
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BEQ menu2demo
- STMFD R13!,{R14}
- LDMFD R13!,{PC}
-
- .menu2demo
- STMFD R13!,{R14}
- CMP R4,#136
- MOV R0,#0
- STREQ R0,[R12,#v.menuno]
- ADR R0,hitext
- BL nibprint
- ADR R0,menusubtext2
- BL nibprint
- BL hiprint
- LDMFD R13!,{PC}
-
- .menu3
- STMFD R13!,{R14}
- MOV R0,#1
- STR R0,[R12,#v.pending]
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- MOV R0,#3
- STR R0,[R12,#v.menucsr]
- LDMFD R13!,{PC}
-
- .menu4
- STMFD R13!,{R14}
- ADR R0,menu4text
- #rept 3
- BL nibprint
- #endr
- MOV R0,#6
- BL addmenucsr
- LDR R0,[R12,#v.lineskip]
- CMP R0,#1
- ADR R0,mode13mes
- ADREQ R0,mode49mes
- BL nibprint
- LDR R0,[R12,#v.music]
- CMP R0,#1
- ADR R0,musicoffmes
- ADREQ R0,musiconmes
- BL nibprint
-
- ADR R0,soundoffmes
- LDR R1,[R12,#v.soundvol]
- CMP R1,#1
- ADREQ R0,soundquietmes
- CMP R1,#2
- ADREQ R0,soundmedmes
- CMP R1,#3
- ADREQ R0,soundloadmes
- BL nibprint
- MOV R0,#0
- SWI Sound_Speaker
- CMP R0,#2
- ADR R0,speoffmes
- ADREQ R0,speonmes
- BL nibprint
- LDR R1,[R12,#v.quality]
- ADR R0,lowqmes
- CMP R1,#1
- ADREQ R0,medqmes
- CMP R1,#2
- ADREQ R0,highqmes
- BL nibprint
- LDR R1,[R12,#v.mousestep]
- ADR R0,slowmmes
- CMP R1,#1
- ADREQ R0,medmmes
- CMP R1,#2
- ADREQ R0,fastmmes
- BL nibprint
-
- CMP R3,#1
- BLEQ modeflip
- CMP R3,#2
- BLEQ musicflip
- CMP R3,#3
- BLEQ soundflip
- CMP R3,#4
- BLEQ speakerflip
- CMP R3,#5
- BLEQ qualityflip
- CMP R3,#6
- BLEQ mousestepflip
-
- CMP R4,#136
- MOVEQ R0,#0
- STREQ R0,[R12,#v.menuno]
- LDMFD R13!,{PC}
-
- .menu4text
- DCD 108,32
- DCB "OPTIONS",0
- ALIGN
- .menusubtext
- DCD 72,204
- DCB "USE b c a KEYS,",0
- ALIGN
- .menusubtext2
- DCD 66,224
- DCB "` FOR MAIN MENU.",0
- ALIGN
- .mode13mes
- DCD 48,80
- DCB "1. NORMAL TV SCREEN",0
- ALIGN
- .mode49mes
- DCD 48,80
- DCB "1. HIGH-RES MONITOR",0
- ALIGN
- .musiconmes
- DCD 48,100
- DCB "2. MUSIC ON",0
- ALIGN
- .musicoffmes
- DCD 48,100
- DCB "2. MUSIC OFF",0
- ALIGN
- .soundquietmes
- DCD 48,120
- DCB "3. QUIET SOUND",0
- ALIGN
- .soundmedmes
- DCD 48,120
- DCB "3. MEDIUM SOUND",0
- ALIGN
- .soundloadmes
- DCD 48,120
- DCB "3. LOUD SOUND",0
- ALIGN
- .soundoffmes
- DCD 48,120
- DCB "3. NO SOUND",0
- ALIGN
- .speonmes
- DCD 48,140
- DCB "4. SPEAKER ON",0
- ALIGN
- .speoffmes
- DCD 48,140
- DCB "4. SPEAKER OFF",0
- ALIGN
- .lowqmes
- DCD 48,160
- DCB "5. LOW-FI SOUND",0
- ALIGN
- .medqmes
- DCD 48,160
- DCB "5. NORMAL SOUND",0
- ALIGN
- .highqmes
- DCD 48,160
- DCB "5. HI-FI SOUND",0
- ALIGN
- .slowmmes
- DCD 48,180
- DCB "6. SLOW MOUSE",0
- ALIGN
- .medmmes
- DCD 48,180
- DCB "6. MEDIUM MOUSE",0
- ALIGN
- .fastmmes
- DCD 48,180
- DCB "6. FAST MOUSE",0
- ALIGN
-
- .menu5
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BEQ menu5demo
- STMFD R13!,{R14}
- ADR R0,menu5text
- #rept 3
- BL nibprint
- #endr
- ADR R0,menusubtext
- BL nibprint
- BL nibprint
-
-
- MOV R0,#2
- BL addmenucsr
- CMP R4,#136
- CMPNE R3,#2
- MOVEQ R0,#5
- STREQ R0,[R12,#v.menucsr]
- MOVEQ R0,#0
- STREQ R0,[R12,#v.menuno]
- CMP R3,#0
- LDMEQFD R13!,{PC}
- CMP R3,#1
- LDMNEFD R13!,{PC}
- BL nukeballs
- MOV R0,#5
- STR R0,[R12,#v.menucsr]
- MOV R0,#0
- STR R0,[R12,#v.menuno]
- LDMFD R13!,{PC}
-
- .menu5demo
- STMFD R13!,{R14}
-
- ADR R0,menu5demotext
- #rept 8
- BL nibprint
- #endr
- CMP R4,#136
- MOV R0,#0
- STREQ R0,[R12,#v.menuno]
- CMP R3,#3
- BLEQ cheatcheck
- CMP R4,#136
- MOV R0,#0
- STREQ R0,[R12,#v.menuno]
- BL cheatcheck2
- LDMFD R13!,{PC}
-
- .cheatcheck2
- STMFD R13!,{R14}
- .cheatmesstart
- LDR R0,[R12,#v.menucsr]
- CMP R4,#32
- BICNE R4,R4,#32
- SUBS R4,R4,#20
- LDMMIFD R13!,{PC}
- MOV R1,R0
- CMP R0,#137
- BEQ cheatskips
- CMP R4,#"S"-20
- MOVEQ R0,#129
- .cheatskips
- CMP R4,#"T"-20
- CMPEQ R0,#129
- ADDEQ R0,R0,#1
- CMP R4,#"U"-20
- CMPEQ R0,#130
- ADDEQ R0,R0,#1
- CMP R4,#"F"-20
- CMPEQ R0,#131
- ADDEQ R0,R0,#1
- BEQ cheatjump
- CMP R4,#"F"-20
- CMPEQ R0,#132
- ADDEQ R0,R0,#1
- .cheatjump
- CMP R4,#" "-20
- CMPEQ R0,#133
- ADDEQ R0,R0,#1
- CMP R4,#"T"-20
- CMPEQ R0,#134
- ADDEQ R0,R0,#1
- CMP R4,#"H"-20
- CMPEQ R0,#135
- ADDEQ R0,R0,#1
- CMP R4,#"I"-20
- CMPEQ R0,#136
- ADDEQ R0,R0,#1
- CMP R4,#"S"-20
- CMPEQ R0,#137
- ADDEQ R0,R0,#1
- CMP R0,R1
- MOVEQ R0,#0
- STR R0,[R12,#v.menucsr]
- CMP R0,#138
- LDMNEFD R13!,{PC}
- MOV R0,#5
- STR R0,[R12,#v.menucsr]
- MOV R0,#texttab
- SWI Amnesia_WipeTable
- LDR R0,[R12,#v.cheat]
- RSB R0,R0,#1
- STR R0,[R12,#v.cheat]
- CMP R0,#1
- ADR R0,fairmes
- ADRNE R0,stuffmes
- BL message
- LDMFD R13!,{PC}
-
-
- .cheatcheck
- STMFD R13!,{R14}
-
- BL getnumber
- CMP R3,#2
- LDMNEFD R13!,{PC}
- BL getnumber
- CMP R3,#9
- LDMNEFD R13!,{PC}
- BL getnumber
- CMP R4,#48
- LDMNEFD R13!,{PC}
- BL getnumber
- CMP R3,#7
- LDMNEFD R13!,{PC}
- BL getnumber
- CMP R4,#48
- LDMNEFD R13!,{PC}
- ADR R0,clickmes
- BL message
- LDMFD R13!,{PC}
- .clickmes
- DCD 160<<12,200<<12,0,0,&00600001,0
- DCB "SORRY, ENGAGED!",0
- ALIGN
- .fairmes
- DCD 160<<12,200<<12,0,0,&00600001,fairmes2-fairmes
- DCB "FAIR MINDED WORDS!",0
- ALIGN
- .fairmes2
- DCD &280<<12,200<<12,-2<<12,0,&02800001,0
- DCB "USE THE RIGHT MOUSE BUTTON TO SORT THINGS OUT...",0
- ALIGN
- .stuffmes
- DCD &200<<12,200<<12,-2<<12,0,&02000001,0
- DCB "THERE'S NO PLEASING SOME PEOPLE!",0
- ALIGN
-
- .cheatmesend
- LDMFD R13!,{PC}
- .menu5text
- DCD 48,32
- DCB "BALL DESTRUCTION",0
- ALIGN
- DCD 48,80
- DCB "1. DESTROY BALLS",0
- ALIGN
- DCD 48,100
- DCB "2. CANCEL",0
- ALIGN
-
- .menu5demotext
- .hm1
- DCD 59,40
- DCB "USE THE MOUSE TO",0
- ALIGN
- DCD 57,60
- DCB "MOVE THE BAT. HIT",0
- ALIGN
- DCD 54,80
- DCB "THE BALL TOWARDS",0
- ALIGN
- DCD 40,100
- DCB "THE BLOCKS. DESTROY",0
- ALIGN
- DCD 52,120
- DCB "ALL OF THE BLOCKS",0
- ALIGN
- DCD 41,140
- DCB "TO COMPLETE A LEVEL",0
- ALIGN
- DCD 72,180
- DCB "WATCH THE DEMO!",0
- DCD 66,220
- DCB "` FOR MAIN MENU.",0
- ALIGN
-
- .menu6
- STMFD R13!,{R14}
- #rept 7
- BL menufade
- BL menubank
- #endr
- MOV R0,#1
- STR R0,[R12,#v.exit]
- LDMFD R13!,{PC}
-
- .modeflip
- STMFD R13!,{R3-R6,R14}
- MOV R0,#49
- SWI OS_CheckModeValid
- BCS modenotvalid
- LDR R0,[R12,#v.lineskip]
- CMP R0,#1
- MOVEQ R0,#0
- MOVNE R0,#1
- STR R0,[R12,#v.lineskip]
- BL modeactive
- .modeflipins
- LDMFD R13!,{R3-R6,PC}
-
- .musicflip
- STMFD R13!,{R14}
- LDR R0,[R12,#v.music]
- RSB R0,R0,#1
- STR R0,[R12,#v.music]
- BL configupdate
- LDMFD R13!,{PC}
-
- .soundflip
- STMFD R13!,{R14}
- LDR R0,[R12,#v.soundvol]
- ADD R0,R0,#1
- CMP R0,#3
- MOVGT R0,#0
- STR R0,[R12,#v.soundvol]
- BL configupdate
- LDMFD R13!,{PC}
-
- .speakerflip
- STMFD R13!,{R14}
- MOV R0,#0
- SWI Sound_Speaker
- RSB R0,R0,#3
- SWI Sound_Speaker
- LDMFD R13!,{PC}
-
- .qualityflip
- STMFD R13!,{R14}
- LDR R0,[R12,#v.quality]
- ADD R0,R0,#1
- CMP R0,#2
- MOVGT R0,#0
- STR R0,[R12,#v.quality]
- BL configupdate
- LDMFD R13!,{PC}
-
- .mousestepflip
- STMFD R13!,{R14}
- LDR R0,[R12,#v.mousestep]
- ADD R0,R0,#1
- CMP R0,#2
- MOVGT R0,#0
- STR R0,[R12,#v.mousestep]
- BL configupdate
- LDMFD R13!,{PC}
-
- .configupdate
- STMFD R13!,{R14}
- LDR R0,[R12,#v.quality]
- MOV R2,#64
- CMP R0,#1
- MOVEQ R2,#48
- CMP R0,#2
- MOVEQ R2,#24
- MOV R0,#4
- MOV R1,#0
- MOV R3,#0
- MOV R4,#0
- SWI Sound_Configure
- LDR R0,[R12,#v.music]
- CMP R0,#1
- MOV R0,#4
- MOVEQ R0,#8
- MOV R1,#0
- MOV R2,#0
- MOV R3,#0
- MOV R4,#0
- SWI Sound_Configure
- LDR R1,[R12,#v.soundvol]
- CMP R1,#0
- MOV R0,#2
- MOVEQ R0,#1
- SWI Sound_Enable
- MOV R0,#72
- CMP R1,#2
- MOVEQ R0,#100
- CMP R1,#3
- MOVEQ R0,#127
- SWI Sound_Volume
-
- LDR R0,[R12,#v.mousestep]
- ADR R1,slowmouse
- CMP R0,#1
- ADREQ R1,medmouse
- CMP R0,#2
- ADREQ R1,fastmouse
- MOV R0,#21
- SWI OS_Word
- LDMFD R13!,{PC}
- .slowmouse
- DCB 2,2,2
- .medmouse
- DCB 2,3,3
- .fastmouse
- DCB 2,4,4
- ALIGN
- .defaultmouse
- STMFD R13!,{R14}
- MOV R0,#161
- MOV R1,#194
- SWI OS_Byte
- ADD R1,R12,#v.temp0
- MOV R0,#2
- STRB R0,[R1]
- STRB R2,[R1,#1]
- STRB R2,[R1,#2]
- MOV R0,#21
- SWI OS_Word
- LDMFD R13!,{PC}
-
- .modenotvalid
- MOV R0,#texttab
- SWI Amnesia_CountObjects
- CMP R0,#1
- ADR R0,notvalmes
- BLLE message
- B modeflipins
-
- .notvalmes
- DCD (160+&200)<<12,60<<12,-2<<12,0,&02000001,0
- DCB "USE NORMAL SCREEN MODE ON THIS MONITOR - MODE 49 NOT AVAILABLE.",0
- ALIGN
-
- .modeactive
- STMFD R13!,{R14}
- MOV R0,#49
- SWI OS_CheckModeValid
- MOVCS R0,#0
- STRCS R0,[R12,#v.lineskip]
- LDR R0,[R12,#v.lineskip]
- CMP R0,#0
- MOVEQ R0,#13
- MOVNE R0,#49
- SWI 256+22
- SWI OS_WriteC
- SWI OS_RemoveCursors
- SWI 256+28
- SWI 256
- SWI 256+24
- SWI 256+29
- SWI 256
- BL vduread
- LDR R0,[R12,#v.lineskip]
- CMP R0,#0
- LDR R0,[R12,#v.screenadr]
- ADDEQ R0,R0,#320*8
- STR R0,[R12,#v.screenuse]
- BL loadsidepic
- BL showsidepic
- MOV R0,#1
- STR R0,[R12,#v.scorechange]
- STR R0,[R12,#v.ballschange]
- STR R0,[R12,#v.liveschange]
- STR R0,[R12,#v.goodychange]
-
- LDMFD R13!,{PC}
-
-
-
-
-
-
-
-
- .addmenucsr
- LDR R1,[R12,#v.menucsr]
- CMP R4,#139
- SUBEQ R1,R1,#1
- CMP R4,#138
- ADDEQ R1,R1,#1
- CMP R1,#1
- MOVLT R1,#1
- CMP R1,R0
- MOVGT R1,R0
- STR R1,[R12,#v.menucsr]
- MOV PC,R14
-
- .highscores
- STMFD R13!,{R14}
- MOV R3,#&FF
- LDR R2,[R12,#v.plscore]
- LDR R1,[R12,#v.hinames]
- LDR R0,[R1,#&A0]
- CMP R2,R0
- MOVGE R3,#&A0
- LDR R0,[R1,#&80]
- CMP R2,R0
- MOVGE R3,#&80
- LDR R0,[R1,#&60]
- CMP R2,R0
- MOVGE R3,#&60
- LDR R0,[R1,#&40]
- CMP R2,R0
- MOVGE R3,#&40
- LDR R0,[R1,#&20]
- CMP R2,R0
- MOVGE R3,#&20
- LDR R0,[R1,#&0]
- CMP R2,R0
- MOVGE R3,#&0
- CMP R3,#&FF
- LDMGEFD R13!,{PC}
- STR R3,[R12,#v.hislot]
- ADD R4,R1,R3
- ADD R5,R1,#&BC
- .loop74
- SUB R0,R5,R4
- CMP R0,#&20
- BLT hishiftskip
- MOV R2,#8
- .loop75
- LDR R0,[R5,#-&20]
- STR R0,[R5]
- SUB R5,R5,#4
- SUBS R2,R2,#1
- BGT loop75
- B loop74
- .hishiftskip
- LDR R0,[R12,#v.plscore]
- STR R0,[R4],#4
- MOV R0,#&0
- #rept 7
- STR R0,[R4],#4
- #endr
-
- BL hiask
- LDMFD R13!,{PC}
-
-
- .hiask
- STMFD R13!,{R14}
- BL emptykeybuf
- MOV R0,#4
- MOV R1,#1
- SWI OS_Byte
- .loop71
- BL menufade
- ADR R0,hitext
- #rept 3
- BL print
- #endr
- BL listhinames
- BL menubank
- BL hiedit
- CMP R1,#13
- ;CMPNE R1,#137
- BEQ hisave
- SWI OS_ReadEscapeState
- BCC loop71
- MOV R0,#124
- SWI OS_Byte
- LDMFD R13!,{PC}
-
- .hiprint
- STMFD R13!,{R14}
- LDR R0,[R12,#v.hinames]
- MOV R2,#70
- MOV R3,#6
- .loop7b
- LDR R1,[R12,#v.plotnibble]
- ADD R1,R1,#52
- STMFD R13!,{R0-R3}
- LDR R0,[R0]
- BL printnumber
- LDMFD R13!,{R0-R3}
- ADD R0,R0,#4
- LDR R1,[R12,#v.plotnibble]
- ADD R1,R1,#136
- STMFD R13!,{R0-R3}
- MOV R3,#28
- BL printstring
- LDMFD R13!,{R0-R3}
- ADD R2,R2,#20
- ADD R0,R0,#32-4
- SUBS R3,R3,#1
- BGT loop7b
- LDMFD R13!,{PC}
-
- .listhinames
- STMFD R13!,{R14}
- BL seekhiend
- LDR R1,[R12,#v.hislot]
- AND R1,R1,#&FF
- LDR R0,[R12,#v.hinames]
- MOV R2,#95
- STRB R2,[R0,R1]
- MOV R2,#70
- MOV R3,#6
- .loop70
- MOV R1,#52
- STMFD R13!,{R0-R3}
- LDR R0,[R0]
- BL printnumber
- LDMFD R13!,{R0-R3}
- ADD R0,R0,#4
- MOV R1,#136
- STMFD R13!,{R0-R3}
- MOV R3,#28
- BL printstring
- LDMFD R13!,{R0-R3}
- ADD R2,R2,#20
- ADD R0,R0,#32-4
- SUBS R3,R3,#1
- BGT loop70
- LDR R1,[R12,#v.hislot]
- AND R1,R1,#&FF
- LDR R0,[R12,#v.hinames]
- MOV R2,#0
- STRB R2,[R0,R1]
- AND R1,R1,#&E0
- MOV R1,R1,LSR #5
- MOV R0,#20
- MUL R2,R0,R1
- LDR R0,[R12,#v.genctr]
- ADD R0,R0,#1<<16
- STR R0,[R12,#v.genctr]
- AND R0,R0,#&F<<16
- ORR R0,R0,#(decortab<<24)+3
- MOV R1,#43
- ADD R2,R2,#70
- SWI FastSpr_Plot
- LDMFD R13!,{PC}
-
- .seekhiend
- LDR R1,[R12,#v.hinames]
- LDR R2,[R12,#v.hislot]
- AND R2,R2,#&E0
- ORR R2,R2,#4
- MOV R3,#31-4
- .loop72
- LDRB R0,[R1,R2]
- CMP R0,#32
- BLT foundhiend
- ADD R2,R2,#1
- SUBS R3,R3,#1
- BGT loop72
- .foundhiend
- STR R2,[R12,#v.hislot]
- MOV PC,R14
-
- .hiedit
- STMFD R13!,{R14}
- BL getkey
- MOVNE R1,#0
- LDMNEFD R13!,{PC}
- CMP R1,#136
- CMPNE R1,#137
- CMPNE R1,#13
- CMPNE R1,#&1B
- LDMEQFD R13!,{PC}
- CMP R1,#8
- CMPNE R1,#127
- MOVEQ R1,#136
- CMP R1,#136
- BGE harrowkey
- CMP R1,#64
- BICGT R1,R1,#1<<5
- CMP R1,#90
- LDMGTFD R13!,{PC}
- CMP R1,#32
- LDMLTFD R13!,{PC}
- LDR R2,[R12,#v.hinames]
- LDR R0,[R12,#v.hislot]
- AND R3,R0,#&1F
- CMP R3,#4
- BICLT R0,R0,#&1F
- ORRLT R0,R0,#4
- STRB R1,[R2,R0]
- AND R2,R0,#&1F
- CMP R2,#&1F
- ADDNE R0,R0,#1
- AND R0,R0,#&FF
-
- STR R0,[R12,#v.hislot]
- LDMFD R13!,{PC}
-
- .hisave
- STMFD R13!,{R14}
- BL setsavepath
- LDR R0,[R12,#v.hinames]
- ADR R1,hinamesfullname
- MOV R2,#&FFD
- SWI XAmnesia_SaveFile
- LDMFD R13!,{PC}
-
- .hitext
- DCD 88,40
- DCB "HIGH SCORES",0
- ALIGN
- DCD 64,200
- DCB "ENTER YOUR NAME",0
- ALIGN
- DCD 80,220
- DCB "AND PRESS d.",0
- ALIGN
-
- .savemenu
- STMFD R13!,{R14}
- BL setupcanvas
- LDR R0,[R12,#v.pending]
- CMP R0,#3
- MOV R0,#0
- STR R0,[R12,#v.pending]
- BEQ saveask
- .loop4c
- BL menufade
- ADR R0,savequestion
- BL print
- BL menubank
- MOV R0,#68
- BL getkey
- CMP R1,#13
- BIC R1,R1,#1<<5
- CMPNE R1,#"Y"
- BEQ saveask
- CMP R1,#"N"
- LDMEQFD R13!,{PC}
- SWI OS_ReadEscapeState
- BCC loop4c
- MOV R0,#124
- SWI OS_Byte
- LDMFD R13!,{PC}
-
- .emptykeybuf
- STMFD R13!,{R0-R2,R14}
- .loop4f
- MOV R0,#129
- MOV R1,#0
- MOV R2,#0
- SWI OS_Byte
- CMP R2,#0
- BEQ loop4f
- LDMFD R13!,{R0-R2,PC}
-
- .saveask
- MOV R0,#4
- MOV R1,#1
- SWI OS_Byte
- .loop4d
- BL menufade
- ADR R0,savetext2
- #rept 4
- BL print
- #endr
- BL listsavenames
- BL menubank
- BL namesedit
- CMP R1,#136
- LDMEQFD R13!,{PC}
- CMP R1,#13
- ;CMPNE R1,#137
- BEQ dosave
- SWI OS_ReadEscapeState
- BCC loop4d
- MOV R0,#124
- SWI OS_Byte
- LDMFD R13!,{PC}
-
- .listsavenames
- STMFD R13!,{R14}
- BL seeknameend
- LDR R1,[R12,#v.saveslot]
- AND R1,R1,#&FF
- LDR R0,[R12,#v.savenames]
- MOV R2,#95
- STRB R2,[R0,R1]
- MOV R1,#52
- MOV R2,#100
- MOV R3,#6
- .loop4e
- STMFD R13!,{R0-R3}
- MOV R3,#32
- BL printstring
- LDMFD R13!,{R0-R3}
- ADD R2,R2,#20
- ADD R0,R0,#32
- SUBS R3,R3,#1
- BGT loop4e
- LDR R1,[R12,#v.saveslot]
- AND R1,R1,#&FF
- LDR R0,[R12,#v.savenames]
- MOV R2,#0
- STRB R2,[R0,R1]
- AND R1,R1,#&E0
- MOV R1,R1,LSR #5
- MOV R0,#20
- MUL R2,R0,R1
- LDR R0,[R12,#v.genctr]
- ADD R0,R0,#1<<16
- STR R0,[R12,#v.genctr]
- AND R0,R0,#&F<<16
- ORR R0,R0,#(decortab<<24)+3
- MOV R1,#43
- ADD R2,R2,#100
- SWI FastSpr_Plot
- LDMFD R13!,{PC}
-
- .seeknameend
- LDR R1,[R12,#v.savenames]
- LDR R2,[R12,#v.saveslot]
- AND R2,R2,#&E0
- MOV R3,#31
- .loop50
- LDRB R0,[R1,R2]
- CMP R0,#32
- BLT foundnameend
- ADD R2,R2,#1
- SUBS R3,R3,#1
- BGT loop50
- .foundnameend
- STR R2,[R12,#v.saveslot]
- MOV PC,R14
-
- .namesedit
- STMFD R13!,{R14}
- BL getkey
- MOVNE R1,#0
- LDMNEFD R13!,{PC}
- CMP R1,#136
- CMPNE R1,#137
- CMPNE R1,#13
- CMPNE R1,#&1B
- LDMEQFD R13!,{PC}
- CMP R1,#8
- CMPNE R1,#127
- MOVEQ R1,#136
- CMP R1,#136
- BGE arrowkey
- CMP R1,#64
- BICGT R1,R1,#1<<5
- CMP R1,#90
- LDMGTFD R13!,{PC}
- CMP R1,#32
- LDMLTFD R13!,{PC}
- LDR R2,[R12,#v.savenames]
- LDR R0,[R12,#v.saveslot]
- STRB R1,[R2,R0]
- AND R2,R0,#&1F
- CMP R2,#&1F
- ADDNE R0,R0,#1
- AND R0,R0,#&FF
-
- STR R0,[R12,#v.saveslot]
- LDMFD R13!,{PC}
-
- .arrowkey
- LDR R2,[R12,#v.saveslot]
- CMP R1,#136
- BEQ leftarrow
- CMP R1,#138
- BEQ downarrow
- CMP R1,#139
- BEQ uparrow
- MOV R1,#0
- LDMFD R13!,{PC}
-
- .leftarrow
- LDR R0,[R12,#v.saveslot]
- TST R0,#&1F
- MOV R1,#0
- LDMEQFD R13!,{PC}
- SUB R0,R0,#1
- STR R0,[R12,#v.saveslot]
- LDR R1,[R12,#v.savenames]
- MOV R2,#0
- STRB R2,[R1,R0]
- MOV R1,#0
- LDMFD R13!,{PC}
-
- .uparrow
- LDR R0,[R12,#v.saveslot]
- SUBS R0,R0,#32
- STRPL R0,[R12,#v.saveslot]
- MOV R1,#0
- LDMFD R13!,{PC}
-
- .downarrow
- LDR R0,[R12,#v.saveslot]
- ADD R0,R0,#32
- CMP R0,#192
- STRLT R0,[R12,#v.saveslot]
- MOV R1,#0
- LDMFD R13!,{PC}
-
- .harrowkey
- LDR R2,[R12,#v.hislot]
- CMP R1,#136
- MOV R1,#0
- LDMNEFD R13!,{PC}
- .hleftarrow
- LDR R0,[R12,#v.hislot]
- AND R2,R0,#&1F
- CMP R2,#4
- LDMLEFD R13!,{PC}
- SUB R0,R0,#1
- STR R0,[R12,#v.hislot]
- LDR R1,[R12,#v.hinames]
- MOV R2,#0
- STRB R2,[R1,R0]
- LDMFD R13!,{PC}
-
- .getkey
- STMFD R13!,{R14}
- MOV R0,#4
- MOV R1,#1
- SWI OS_Byte
- MOV R0,#129
- MOV R1,#0
- MOV R2,#0
- SWI OS_Byte
- CMP R2,#0
- LDMFD R13!,{PC}
-
- .savequestion
- DCD 80,128
- DCB "SAVE GAME? Y/N",0
- ALIGN
- .savetext2
- DCD 48,20
- DCB "SELECT A SLOT TO",0
- ALIGN
- DCD 48,40
- DCB "SAVE THE GAME INTO.",0
- ALIGN
- DCD 48,70
- DCB "USE b c TO SELECT.",0
- ALIGN
- DCD 48,224
- DCB "PRESS d TO SAVE.",0
- ALIGN
-
-
-
- .menubank
- STMFD R13!,{R14}
- MOV R0,#1
- SWI Blitz_Wait
- BL menushift
- LDMFD R13!,{PC}
-
- .dosave
- BL savegame
- LDMFD R13!,{PC}
-
- .svlevelnet
- DCB "<OddBall$FilePath>LevelNet",0
- .svbatstab
- DCB "<OddBall$FilePath>BatsTab",0
- .svballstab
- DCB "<OddBall$FilePath>BallsTab",0
- .svblockstab
- DCB "<OddBall$FilePath>BlocksTab",0
- .svtexttab
- DCB "<OddBall$FilePath>TextTab",0
- .svstarstab
- DCB "<OddBall$FilePath>StarsTab",0
- .svvarsblock
- DCB "<OddBall$FilePath>VarsBlock",0
- ALIGN
-
- .savegame
- STMFD R13!,{R14}
- BL setsavepath
- LDR R0,[R12,#v.savenames]
- ADR R1,savenamesfullname
- MOV R2,#&FFF
- SWI XAmnesia_SaveFile
- BVS savefailed
- BL setsavebin
- MOV R0,#batstab
- ADR R1,svbatstab
- SWI XAmnesia_SaveTable
- BVS savefailed
- MOV R0,#ballstab
- ADR R1,svballstab
- SWI XAmnesia_SaveTable
- BVS savefailed
- MOV R0,#blockstab
- ADR R1,svblockstab
- SWI XAmnesia_SaveTable
- BVS savefailed
- MOV R0,#texttab
- ADR R1,svtexttab
- SWI XAmnesia_SaveTable
- BVS savefailed
- MOV R0,#starstab
- ADR R1,svstarstab
- SWI XAmnesia_SaveTable
- BVS savefailed
- LDR R0,[R12,#v.levelnet]
- ADR R1,svlevelnet
- MOV R2,#&FFD
- SWI XAmnesia_SaveFile
- BVS savefailed
- MOV R0,#10
- ADR R1,svvarsblock
- MOV R2,#&FFD
- ADD R4,R12,#v.savestart
- ADD R5,R12,#v.saveend
- SWI XOS_File
- BVS savefailed
- MOV R0,#2
- STR R0,[R12,#v.exit]
- LDMFD R13!,{PC}
-
- .savefailed
- MOV R1,#2
- STR R1,[R12,#v.exit]
- ADR R1,savefailedmes
- BL writeerror
- LDMFD R13!,{PC}
- .savefailedmes
- DCD 160<<12,108<<12,0,0,&01000001,0
- DCB "SAVE FAILED:",0
- ALIGN
-
- .setsavebin
- LDR R0,[R12,#v.demomode]
- CMP R0,#0
- BNE setdemosavebin
- STMFD R13!,{R14}
- ADR R0,setsavecom
- SWI OS_CLI
- LDR R0,[R12,#v.saveslot]
- MOV R0,R0,LSR #5
- AND R0,R0,#7
- ADD R0,R0,#1
- STR R0,[R12,#v.temp0]
- ADR R0,levelname
- ADD R1,R12,#v.temp0
- MOV R2,#4
- MOV R3,#0
- MOV R4,#1
- SWI OS_SetVarVal
- LDMFD R13!,{PC}
-
- .setsavepath
- STMFD R13!,{R14}
- ADR R0,setsavecom
- SWI OS_CLI
- LDMFD R13!,{PC}
-
- .setdemosavebin
- STMFD R13!,{R14}
- ADR R0,setdemocom
- SWI OS_CLI
- LDMFD R13!,{PC}
-
- .setsavecom
- DCB "SetMacro OddBall$FilePath <OddBall$SavePath>",0
- .setdemocom
- DCB "SetMacro OddBall$FilePath <OddBall$DemoPath>",0
- ALIGN
-
- .doload
- MOV R0,#0
- STR R0,[R12,#v.demomode]
- BL loadgame
- LDMFD R13!,{PC}
-
- .loadgame
- STMFD R13!,{R14}
- BL setsavebin
- MOV R0,#batstab
- SWI Amnesia_WipeTable
- MOV R0,#ballstab
- SWI Amnesia_WipeTable
- MOV R0,#bulletstab
- SWI Amnesia_WipeTable
- MOV R0,#blockstab
- SWI Amnesia_WipeTable
-
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- MOV R0,#texttab
- SWINE Amnesia_WipeTable
- MOV R0,#starstab
- SWI Amnesia_WipeTable
- MOV R0,#decortab
- SWI Amnesia_WipeTable
-
- MOV R0,#batstab
- ADR R1,svbatstab
- SWI XAmnesia_LoadTable
- BVS loadfailed
- MOV R0,#ballstab
- ADR R1,svballstab
- SWI XAmnesia_LoadTable
- BVS loadfailed
-
- MOV R0,#blockstab
- ADR R1,svblockstab
- SWI XAmnesia_LoadTable
- BVS loadfailed
- MOV R0,#texttab
- ADR R1,svtexttab
- SWI XAmnesia_LoadTable
- BVS loadfailed
- MOV R0,#starstab
- ADR R1,svstarstab
- SWI XAmnesia_LoadTable
- BVS loadfailed
- ADD R0,R12,#v.levelnet
- LDR R0,[R0]
- CMP R0,#0
- SWINE Amnesia_ReleaseBlock
- ADD R0,R12,#v.levelnet
- ADR R1,svlevelnet
- MOV R2,#0
- SWI XAmnesia_LoadHammered
- BVS loadfailed
- MOV R0,#255
- ADR R1,svvarsblock
- ADD R2,R12,#v.savestart
- MOV R3,#0
- SWI XOS_File
- BVS loadfailed
- BL backload
- BL justmovedbat
- BL vetlevel
-
- LDR R0,[R12,#v.levelno]
- STR R0,[R12,#v.loadedlev]
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BLEQ loaddemoinfo
- BVS loadfailed
- BL configupdate
- MOV R0,#3
- STR R0,[R12,#v.exit]
- LDMFD R13!,{PC}
-
- .loaddemoinfo
- STMFD R13!,{R14}
- BL releasedemo
- ADD R0,R12,#v.demoadr
- ADR R1,demosavename
- MOV R2,#0
- SWI Amnesia_LoadHammered
- MOV R0,#4
- STR R0,[R12,#v.democtr]
- LDMFD R13!,{PC}
-
- .loadfailed
- STMFD R13!,{R0}
- LDR R1,[R12,#v.demomode]
- CMP R1,#1
- BLNE demostart
- LDMFD R13!,{R0}
- LDR R1,[R0]
- CMP R1,#214
- ADREQ R0,notfounderr
- MOV R1,#2
- STR R1,[R12,#v.exit]
- ADR R1,loadfailedmes
- BL writeerror
-
- LDMFD R13!,{PC}
- .loadfailedmes
- DCD 160<<12,60<<12,0,0,&01000001,0
- DCB "LOAD FAILED:",0
- ALIGN
- .notfounderr
- DCD &0
- DCB "FILE NOT FOUND. IS A GAME SAVED IN THAT SLOT?",0
- ALIGN
-
-
- .releasedemo
- STMFD R13!,{R14}
- LDR R0,[R12,#v.demoadr]
- CMP R0,#0
- SWINE Amnesia_ReleaseBlock
- MOV R0,#0
- STR R0,[R12,#v.demoadr]
- LDMFD R13!,{PC}
-
- .loadmenu
- STMFD R13!,{R14}
- BL setupcanvas
- LDR R0,[R12,#v.pending]
- CMP R0,#1
- BEQ loadask
- .loop51
- BL menufade
- ADR R0,loadquestion
- BL print
- BL menubank
- MOV R0,#68
- BL getkey
- CMP R1,#13
- BIC R1,R1,#1<<5
- CMPNE R1,#"Y"
- BEQ loadask
- CMP R1,#"N"
- BEQ noload
- SWI OS_ReadEscapeState
- BCC loop51
- .noload
- MOV R0,#0
- LDMFD R13!,{PC}
-
- .loadask
- MOV R0,#0
- STR R0,[R12,#v.pending]
- MOV R0,#4
- MOV R1,#1
- SWI OS_Byte
- .loop52
- BL menufade
- ADR R0,loadtext2
- #rept 4
- BL print
- #endr
- BL listsavenames
- BL menubank
- BL namesedit
- CMP R1,#136
- LDMEQFD R13!,{PC}
-
- ;CMP R1,#13
- CMPNE R1,#137
- BEQ doload
- SWI OS_ReadEscapeState
- BCC loop52
- MOV R0,#124
- SWI OS_Byte
- MOV R0,#0
- LDMFD R13!,{PC}
- .loadquestion
- DCD 80,128
- DCB "LOAD GAME? Y/N",0
- ALIGN
-
- .loadtext2
- DCD 48,20
- DCB "SELECT A SLOT TO",0
- ALIGN
- DCD 48,40
- DCB "LOAD A GAME FROM.",0
- ALIGN
- DCD 48,70
- DCB "USE b c TO SELECT.",0
- ALIGN
- DCD 48,224
- DCB "PRESS a TO LOAD.",0
- ALIGN
-
- .deathfade
- STMFD R13!,{R14}
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- MOV R0,#200
- MOVEQ R0,#500
- LDR R1,[R12,#v.dead]
-
- RSBS R3,R1,R0
- MOVMI R3,#0
- CMP R3,#61
- LDMGEFD R13!,{PC}
- LDR R0,[R12,#v.canvasadr]
- ADD R0,R0,#40
- MOV R1,R0
- MOV R2,#240*320
- BL fade
- LDMFD R13!,{PC}
-
- .menufade
- STMFD R13!,{R14}
- LDR R0,[R12,#v.canvasadr]
- ADD R0,R0,#40
- MOV R1,R0
- MOV R2,#240*320
- MOV R3,#52
- BL fade
-
- LDMFD R13!,{PC}
-
- .menushift
- STMFD R13!,{R14}
- LDR R11,[R12,#v.canvasadr]
- LDR R10,[R12,#v.screenuse]
- ADD R11,R11,#(canvaswidth-windwidth)/2
- MOV R9,#240
- LDR R0,[R12,#v.lineskip]
- CMP R0,#1
- BLEQ shift490
- LDR R0,[R12,#v.lineskip]
- CMP R0,#1
- BLNE shift0
- LDMFD R13!,{PC}
-
- .softshift
- STMFD R13!,{R14}
- LDR R11,[R12,#v.canvasadr]
- LDR R10,[R12,#v.screenuse]
- ADD R11,R11,#(canvaswidth-windwidth)/2
- MOV R9,#240
- LDR R1,[R12,#v.xplotofs]
- RSB R1,R1,#0
- MOV R1,R1,ASR #12
- AND R1,R1,#&5FFFFF
- AND R0,R1,#3
- LDR R1,[R12,#v.lineskip]
- CMP R1,#1
- BEQ softshift49
- CMP R0,#1
- BEQ shift0
- CMP R0,#2
- BEQ shift1
- CMP R0,#3
- BEQ shift2
- CMP R0,#0
- BEQ shift3
- LDMFD R13!,{PC}
-
- .softshift49
- CMP R0,#1
- BEQ shift490
- CMP R0,#2
- BEQ shift491
- CMP R0,#3
- BEQ shift492
- CMP R0,#0
- BEQ shift493
- LDMFD R13!,{PC}
-
-
- .shift0
- .loopc
- STMFD R13!,{R10-R11}
- #rept 7
- LDMIA R11!,{R0-R7}
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- STMIA R10!,{R0-R7}
- #endr
- LDMIA R11!,{R0-R3}
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- MOV R0,R0
- STMIA R10!,{R0-R3}
- LDMFD R13!,{R10-R11}
- ADD R10,R10,#canvaswidth
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loopc
- LDMFD R13!,{PC}
-
- .shift1
- .loopb
- STMFD R13!,{R10-R11}
-
- #rept 7
- LDMIA R11!,{R0-R8}
- SUB R11,R11,#4
- MOV R0,R0,LSR #8
- ORR R0,R0,R1,LSL #24
- MOV R1,R1,LSR #8
- ORR R1,R1,R2,LSL #24
- MOV R2,R2,LSR #8
- ORR R2,R2,R3,LSL #24
- MOV R3,R3,LSR #8
- ORR R3,R3,R4,LSL #24
- MOV R4,R4,LSR #8
- ORR R4,R4,R5,LSL #24
- MOV R5,R5,LSR #8
- ORR R5,R5,R6,LSL #24
- MOV R6,R6,LSR #8
- ORR R6,R6,R7,LSL #24
- MOV R7,R7,LSR #8
- ORR R7,R7,R8,LSL #24
- STMIA R10!,{R0-R7}
- #endr
-
- LDMIA R11!,{R0-R4}
- SUB R11,R11,#4
- MOV R0,R0,LSR #8
- ORR R0,R0,R1,LSL #24
- MOV R1,R1,LSR #8
- ORR R1,R1,R2,LSL #24
- MOV R2,R2,LSR #8
- ORR R2,R2,R3,LSL #24
- MOV R3,R3,LSR #8
- ORR R3,R3,R4,LSL #24
- STMIA R10!,{R0-R3}
- LDMFD R13!,{R10-R11}
- ADD R10,R10,#canvaswidth
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loopb
- LDMFD R13!,{PC}
-
- .shift2
- .loopd
- STMFD R13!,{R10-R11}
-
- #rept 7
- LDMIA R11!,{R0-R8}
- SUB R11,R11,#4
- MOV R0,R0,LSR #16
- ORR R0,R0,R1,LSL #16
- MOV R1,R1,LSR #16
- ORR R1,R1,R2,LSL #16
- MOV R2,R2,LSR #16
- ORR R2,R2,R3,LSL #16
- MOV R3,R3,LSR #16
- ORR R3,R3,R4,LSL #16
- MOV R4,R4,LSR #16
- ORR R4,R4,R5,LSL #16
- MOV R5,R5,LSR #16
- ORR R5,R5,R6,LSL #16
- MOV R6,R6,LSR #16
- ORR R6,R6,R7,LSL #16
- MOV R7,R7,LSR #16
- ORR R7,R7,R8,LSL #16
- STMIA R10!,{R0-R7}
- #endr
-
- LDMIA R11!,{R0-R4}
- SUB R11,R11,#4
- MOV R0,R0,LSR #16
- ORR R0,R0,R1,LSL #16
- MOV R1,R1,LSR #16
- ORR R1,R1,R2,LSL #16
- MOV R2,R2,LSR #16
- ORR R2,R2,R3,LSL #16
- MOV R3,R3,LSR #16
- ORR R3,R3,R4,LSL #16
- STMIA R10!,{R0-R3}
- LDMFD R13!,{R10-R11}
- ADD R10,R10,#canvaswidth
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loopd
- LDMFD R13!,{PC}
-
- .shift3
- .loope
- STMFD R13!,{R10-R11}
-
- #rept 7
- LDMIA R11!,{R0-R8}
- SUB R11,R11,#4
- MOV R0,R0,LSR #24
- ORR R0,R0,R1,LSL #8
- MOV R1,R1,LSR #24
- ORR R1,R1,R2,LSL #8
- MOV R2,R2,LSR #24
- ORR R2,R2,R3,LSL #8
- MOV R3,R3,LSR #24
- ORR R3,R3,R4,LSL #8
- MOV R4,R4,LSR #24
- ORR R4,R4,R5,LSL #8
- MOV R5,R5,LSR #24
- ORR R5,R5,R6,LSL #8
- MOV R6,R6,LSR #24
- ORR R6,R6,R7,LSL #8
- MOV R7,R7,LSR #24
- ORR R7,R7,R8,LSL #8
- STMIA R10!,{R0-R7}
- #endr
-
- LDMIA R11!,{R0-R4}
- SUB R11,R11,#4
- MOV R0,R0,LSR #24
- ORR R0,R0,R1,LSL #8
- MOV R1,R1,LSR #24
- ORR R1,R1,R2,LSL #8
- MOV R2,R2,LSR #24
- ORR R2,R2,R3,LSL #8
- MOV R3,R3,LSR #24
- ORR R3,R3,R4,LSL #8
- STMIA R10!,{R0-R3}
- LDMFD R13!,{R10-R11}
- ADD R10,R10,#canvaswidth
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loope
- LDMFD R13!,{PC}
-
- .shift490
- .loop49c
- STMFD R13!,{R9-R11}
- ADD R9,R10,#320
- #rept 7
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- STMIA R9!,{R0-R7}
- #endr
- LDMIA R11!,{R0-R3}
- STMIA R10!,{R0-R3}
- STMIA R9!,{R0-R3}
- LDMFD R13!,{R9-R11}
- ADD R10,R10,#canvaswidth*2
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loop49c
- LDMFD R13!,{PC}
-
- .shift491
- .loop49b
- STMFD R13!,{R9-R11}
- ADD R9,R10,#320
- #rept 7
- LDMIA R11!,{R0-R8}
- SUB R11,R11,#4
- MOV R0,R0,LSR #8
- ORR R0,R0,R1,LSL #24
- MOV R1,R1,LSR #8
- ORR R1,R1,R2,LSL #24
- MOV R2,R2,LSR #8
- ORR R2,R2,R3,LSL #24
- MOV R3,R3,LSR #8
- ORR R3,R3,R4,LSL #24
- MOV R4,R4,LSR #8
- ORR R4,R4,R5,LSL #24
- MOV R5,R5,LSR #8
- ORR R5,R5,R6,LSL #24
- MOV R6,R6,LSR #8
- ORR R6,R6,R7,LSL #24
- MOV R7,R7,LSR #8
- ORR R7,R7,R8,LSL #24
- STMIA R10!,{R0-R7}
- STMIA R9!,{R0-R7}
- #endr
-
- LDMIA R11!,{R0-R4}
- SUB R11,R11,#4
- MOV R0,R0,LSR #8
- ORR R0,R0,R1,LSL #24
- MOV R1,R1,LSR #8
- ORR R1,R1,R2,LSL #24
- MOV R2,R2,LSR #8
- ORR R2,R2,R3,LSL #24
- MOV R3,R3,LSR #8
- ORR R3,R3,R4,LSL #24
- STMIA R10!,{R0-R3}
- STMIA R9!,{R0-R3}
- LDMFD R13!,{R9-R11}
- ADD R10,R10,#canvaswidth*2
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loop49b
- LDMFD R13!,{PC}
-
- .shift492
- .loop49d
- STMFD R13!,{R9-R11}
- ADD R9,R10,#320
-
- #rept 7
- LDMIA R11!,{R0-R8}
- SUB R11,R11,#4
- MOV R0,R0,LSR #16
- ORR R0,R0,R1,LSL #16
- MOV R1,R1,LSR #16
- ORR R1,R1,R2,LSL #16
- MOV R2,R2,LSR #16
- ORR R2,R2,R3,LSL #16
- MOV R3,R3,LSR #16
- ORR R3,R3,R4,LSL #16
- MOV R4,R4,LSR #16
- ORR R4,R4,R5,LSL #16
- MOV R5,R5,LSR #16
- ORR R5,R5,R6,LSL #16
- MOV R6,R6,LSR #16
- ORR R6,R6,R7,LSL #16
- MOV R7,R7,LSR #16
- ORR R7,R7,R8,LSL #16
- STMIA R10!,{R0-R7}
- STMIA R9!,{R0-R7}
- #endr
-
- LDMIA R11!,{R0-R4}
- SUB R11,R11,#4
- MOV R0,R0,LSR #16
- ORR R0,R0,R1,LSL #16
- MOV R1,R1,LSR #16
- ORR R1,R1,R2,LSL #16
- MOV R2,R2,LSR #16
- ORR R2,R2,R3,LSL #16
- MOV R3,R3,LSR #16
- ORR R3,R3,R4,LSL #16
- STMIA R10!,{R0-R3}
- STMIA R9!,{R0-R3}
- LDMFD R13!,{R9-R11}
- ADD R10,R10,#canvaswidth*2
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loop49d
- LDMFD R13!,{PC}
-
- .shift493
- .loop49e
- STMFD R13!,{R9-R11}
- ADD R9,R10,#320
-
- #rept 7
- LDMIA R11!,{R0-R8}
- SUB R11,R11,#4
- MOV R0,R0,LSR #24
- ORR R0,R0,R1,LSL #8
- MOV R1,R1,LSR #24
- ORR R1,R1,R2,LSL #8
- MOV R2,R2,LSR #24
- ORR R2,R2,R3,LSL #8
- MOV R3,R3,LSR #24
- ORR R3,R3,R4,LSL #8
- MOV R4,R4,LSR #24
- ORR R4,R4,R5,LSL #8
- MOV R5,R5,LSR #24
- ORR R5,R5,R6,LSL #8
- MOV R6,R6,LSR #24
- ORR R6,R6,R7,LSL #8
- MOV R7,R7,LSR #24
- ORR R7,R7,R8,LSL #8
- STMIA R10!,{R0-R7}
- STMIA R9!,{R0-R7}
- #endr
-
- LDMIA R11!,{R0-R4}
- SUB R11,R11,#4
- MOV R0,R0,LSR #24
- ORR R0,R0,R1,LSL #8
- MOV R1,R1,LSR #24
- ORR R1,R1,R2,LSL #8
- MOV R2,R2,LSR #24
- ORR R2,R2,R3,LSL #8
- MOV R3,R3,LSR #24
- ORR R3,R3,R4,LSL #8
- STMIA R10!,{R0-R3}
- STMIA R9!,{R0-R3}
- LDMFD R13!,{R9-R11}
- ADD R10,R10,#canvaswidth*2
- ADD R11,R11,#hbytes
- SUBS R9,R9,#1
- BGT loop49e
- LDMFD R13!,{PC}
-
- .plotbackdrop
- STMFD R13!,{R14}
- MOV R0,#edgetab
- SWI Amnesia_WipeTable
- BL updatescrollinc
- LDR R0,[R12,#v.backdrop]
- SUB R0,R0,#4
- LDR R5,[R0,#4]
- LDR R1,[R0,#8]
- ADD R0,R0,R1;indirect to first sprite
- ADD R9,R12,#v.backbuf2
- MOV R6,#16
- .loop21
- LDR R1,[R0,#32]
- ADD R11,R0,R1
- STR R11,[R9],#4
- CMP R5,#1
- LDRGT R1,[R0]
- ADDGT R0,R0,R1;indirect to next sprite
- SUB R5,R5,#1
- SUBS R6,R6,#1
- BGT loop21
-
- LDR R10,[R12,#v.canvasadr]
- ADD R10,R10,#(canvaswidth-windwidth)/2
-
- ADD R0,R10,#canvaswidth*canvasheight
- STR R0,[R12,#v.canvasend]
- LDR R9,[R12,#v.levelnet]
-
- LDR R1,[R12,#v.xplotofs]
- SUB R1,R1,#88<<12
- RSB R1,R1,#0
- MOV R1,R1,ASR #12
- ;AND R1,R1,#&5FFFFF
- ADD R1,R1,#3
- MOV R2,#bkwidth
- MYDIV R0,R1,R2
- CMP R1,#0
- ADDLT R1,R1,#96
- SUBLT R0,R0,#1
- LDR R5,[R9,#net.xsize]
- ADD R0,R0,R5,LSR #1
- STR R0,[R12,#v.netxpos]
- MOV R3,R1 ;R3 is xplotofs MOD 96 in pixels
- LDR R1,[R12,#v.yplotofs]
- SUB R1,R1,#48<<12
- RSB R1,R1,#0
- MOV R1,R1,ASR #12
- ;AND R1,R1,#&5FFFFF
- MOV R2,#bkheight
- MYDIV R0,R1,R2
- CMP R1,#0
- ADDLT R1,R1,#96
- SUBLT R0,R0,#1
- LDR R5,[R9,#net.ysize]
- ADD R0,R0,R5,LSR #1
- STR R0,[R12,#v.netypos]
- MOV R4,R1 ;likewise R4 for yplotofs
- CMP R3,#96
- BGE diverror
- CMP R3,#0
- BLT diverror
- BIC R0,R3,#3
- ADR R1,linewrites
- LDR R2,[R1,R0]
- ADD R7,R2,R1
- MOV R1,#bkwidth
- MUL R8,R4,R1
- ADD R9,R11,#bkwidth*bkheight
- LDR R6,[R12,#v.canvasend]
- BL backreload
- .loopa
- STMFD R13!,{R6-R12}
- ADD R9,R12,#v.backbuf
- LDR R11,[R9],#4
- MOV R0,R8
- LDR R1,[R12,#v.helltype]
- CMP R1,#&1E
- LDREQ R1,[R12,#v.vwarpinc]
- LDRNE R1,[R12,#v.vscrollinc]
- ADD R12,R0,R1
- CMP R12,#bkwidth*bkheight
- SUBGE R12,R12,#bkwidth*bkheight
- TST R11,#1<<31
- BIC R11,R11,#1<<31
- ADDEQ R11,R11,R8
- ADDNE R11,R11,R12
- MOV R14,PC
- MOV PC,R7
- LDMFD R13!,{R6-R12}
- ADD R8,R8,#bkwidth
- CMP R8,#bkwidth*bkheight
- BLGE backreloadinc
- ADD R10,R10,#hbytes
- CMP R10,R6
- BLT loopa
- LDMFD R13!,{PC}
-
-
-
- .makehell
- LDR R0,[R12,#v.helltype]
- CMP R0,#&1E
- BEQ makewarp
- STMFD R13!,{R7-R11,R14}
- LDR R6,[R12,#v.helltimer]
- MOV R6,R6,ASL #4
- ADR R1,circletab
- LDR R11,[R12,#v.hellcont]
- BIC R11,R11,#1<<31
- LDR R10,[R12,#v.helladr]
- MOV R8,#96
- .loop24
- ADD R6,R6,#21
- AND R0,R6,#&7F8
- ADR R1,circletab
- LDR R1,[R1,R0]
- LDR R9,[R12,#v.hscrollinc]
- ADDS R9,R9,R1,ASR #28
- ADDMI R9,R9,#96
- CMP R9,#96
- SUBGE R9,R9,#96
- AND R0,R9,#3
- BIC R9,R9,#3
- ADR R1,hellshift
- LDR R0,[R1,R0,LSL #2]
- ADD R1,R1,R0
- STMFD R13!,{R6-R8,R11}
- MOV R14,PC
- MOV PC,R1
- LDMFD R13!,{R6-R8,R11}
-
- ADD R11,R11,#96
- SUBS R8,R8,#1
- BGT loop24
- LDMFD R13!,{R7-R11,PC}
-
- .makewarp
- STMFD R13!,{R7-R11,R14}
- LDR R6,[R12,#v.helltimer]
- MOV R6,R6,ASL #4
- ADR R1,circletab
- ADD R11,R12,#v.backbuf2
- LDR R11,[R11,#12]
- ADD R5,R11,#96*96
- LDR R1,[R12,#v.vwarpinc]
- RSB R1,R1,#96*96
- LDR R0,[R12,#v.vscrollinc]
- ADD R0,R0,R1
- ADD R11,R11,R0
- MOV R0,R0,LSL #12
- DIV96 R0,R1
- MOV R2,#21
- MUL R0,R1,R2
- ADD R6,R6,R0
- LDR R10,[R12,#v.helladr]
- ADD R10,R10,#96*96
- MOV R8,#32
- .loop78
- CMP R11,R5
- SUBGE R11,R11,#96*96
- ADD R6,R6,#21
- AND R0,R6,#&7F8
- ADR R1,circletab
- LDR R1,[R1,R0]
- LDR R9,[R12,#v.hwarpinc]
- RSB R9,R9,#95
- LDR R2,[R12,#v.hscrollinc]
- ADD R9,R9,R2
- ADDS R9,R9,R1,ASR #28
- ADDMI R9,R9,#96
- CMP R9,#96
- SUBGE R9,R9,#96
- CMP R9,#0
- ADDLT R9,R9,#96
- CMP R9,#96
- SUBGE R9,R9,#96
-
- AND R0,R9,#3
- BIC R9,R9,#3
- ADR R1,hellshift
- LDR R0,[R1,R0,LSL #2]
- ADD R1,R1,R0
- STMFD R13!,{R5-R8,R11}
- MOV R14,PC
- MOV PC,R1
- LDMFD R13!,{R5-R8,R11}
-
- ADD R11,R11,#96
- SUBS R8,R8,#1
- BGT loop78
- LDR R10,[R12,#v.hellcont]
- BIC R10,R10,#1<<31
- LDR R11,[R12,#v.helladr]
- ADD R11,R11,#96*96
- MOV R9,#16
- .loop76
- ADD R10,R10,#16
- ADD R11,R11,#16
- LDMIA R11,{R0-R3}
- STMIA R10,{R0-R3}
- ADD R10,R10,#16*2
- ADD R11,R11,#16*2
- LDMIA R11,{R0-R7}
- STMIA R10,{R0-R7}
- ADD R10,R10,#16*3
- ADD R11,R11,#16*3
- SUBS R9,R9,#1
- BGT loop76
-
- MOV R9,#16
- .loop77
- ADD R10,R10,#16*3
- ADD R11,R11,#16*3
- LDMIA R11,{R0-R3}
- STMIA R10,{R0-R3}
- ADD R10,R10,#16*3
- ADD R11,R11,#16*3
- SUBS R9,R9,#1
- BGT loop77
-
- ;stage 2
-
- LDR R11,[R12,#v.hellcont]
- BIC R11,R11,#1<<31
- LDR R10,[R12,#v.helladr]
- MOV R8,#96
- .loop79
- LDR R9,[R12,#v.hwarpinc]
- AND R0,R9,#3
- BIC R9,R9,#3
- ADR R1,hellshift
- LDR R0,[R1,R0,LSL #2]
- ADD R1,R1,R0
- STMFD R13!,{R6-R8,R11}
- MOV R14,PC
- MOV PC,R1
- LDMFD R13!,{R6-R8,R11}
-
- ADD R11,R11,#96
- SUBS R8,R8,#1
- BGT loop79
- LDMFD R13!,{R7-R11,PC}
-
-
- .backreloadinc
- LDR R0,[R12,#v.netypos]
- ADD R0,R0,#1
- STR R0,[R12,#v.netypos]
- MOV R8,#0
-
- .backreload
- STMFD R13!,{R6-R10,R14}
- MOV R0,#0
- STR R0,[R12,#v.helltemp]
- LDR R0,[R12,#v.levelnet]
- LDR R1,[R12,#v.netxpos]
- LDR R2,[R12,#v.netypos]
- LDR R3,[R0,#net.xsize];x size
- LDR R4,[R0,#net.ysize];y size
- ADD R0,R0,#net.data
- ADD R9,R12,#v.backbuf
- ADD R8,R12,#v.backbuf2
- CMN R2,#1
- CMPGT R4,R2
-
- MULGT R5,R3,R2
- ADDGT R0,R0,R5
- MOVLE R0,#0
- LDR R5,[R12,#v.scanlock]
- CMP R5,#1
- BNE backlockskip
- CMP R2,#32
- MOVGE R0,#0
- .backlockskip
- MOV R5,#4
-
- .loop20
- STMFD R13!,{R0}
- LDR R0,[R12,#v.scanlock]
- CMP R0,#1
- LDMFD R13!,{R0}
- BNE backlockskip2
- CMP R1,#32
- MOVGE R0,#0
- .backlockskip2
- CMN R1,#1
- CMPGT R3,R1
- CMPGT R0,#0
- MOV R7,#hellno
- BLE backreloffnet
- LDRB R7,[R0,R1]
-
- CMP R7,#hellno
- BLT noaddwarp
- CMP R7,#hellno+16
- BGE noaddwarp
- BL edgehell
- CMP R7,#&1C
-
- BLGE addwarp
-
- .noaddwarp
- CMP R7,#&4F
- BLEQ addsparkoff
- CMP R7,#&4E
- BLEQ addsparkon
- CMP R7,#&4D
- BLEQ addredoff
- CMP R7,#&4C
- BLEQ addredon
-
- CMP R7,#12
- BLLT noaddtelep
- CMP R7,#16
- BLLT addtelep
- .noaddtelep
- CMP R7,#&AB
- BLT noaddsecret
- CMP R7,#&B0
- BGE noaddsecret
- BL addsecret
- .noaddsecret
-
- CMP R7,#&20
- BLT backreloffnet
- CMP R7,#&2F
- BLLT addarrow
- .backreloffnet
-
- ADR R6,stonetab
- LDRB R7,[R6,R7]
- CMP R7,#1
- BLEQ phasetelep
- AND R6,R7,#&0F
-
- CMP R6,#16
- MOVGT R6,#0
- LDR R6,[R8,R6,LSL #2]
- CMP R7,#&13
- CMPNE R7,#&1E
- STREQ R7,[R12,#v.helltype]
- STREQ R6,[R12,#v.helltemp]
- LDREQ R6,[R12,#v.helladr]
- ORREQ R6,R6,#1<<31
- STR R6,[R9],#4
- ADD R1,R1,#1
- SUBS R5,R5,#1
- BGT loop20
- LDR R0,[R12,#v.helltemp]
- LDR R1,[R12,#v.hellcont]
- CMP R0,#0
- CMPNE R0,R1; maybe
- LDMEQFD R13!,{R6-R10,PC}
- STR R0,[R12,#v.hellcont]
- BL makehell
- LDMFD R13!,{R6-R10,PC}
-
- .addarrow
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- SUB R1,R7,#&20
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- BL arrowmake
- LDMFD R13!,{R0-R11,PC}
-
- .addsparkoff
-
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- SUB R1,R7,#&20
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
-
- MOV R0,#edgetab
- MOV R1,#(decortab<<24)+4
- MOV R2,#%1000000001010001
- SWI Amnesia_MakeObject
-
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"O"
- MOV R2,#%1000000001010001
- SUB R3,R3,#13<<12
- SWI Amnesia_MakeObject
-
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"F"
- MOV R2,#%1000000001010001
- ADD R3,R3,#13<<12
- SWI Amnesia_MakeObject
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"F"
- MOV R2,#%1000000001010001
- ADD R3,R3,#13<<12
- SWI Amnesia_MakeObject
-
- LDMFD R13!,{R0-R11,PC}
-
- .addsparkon
-
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- SUB R1,R7,#&20
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
-
- MOV R0,#edgetab
- MOV R1,#(decortab<<24)+4
- MOV R2,#%1000000001010001
- SWI Amnesia_MakeObject
-
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"O"
- MOV R2,#%1000000001010001
- SUB R3,R3,#7<<12
- SWI Amnesia_MakeObject
-
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"N"
- MOV R2,#%1000000001010001
- ADD R3,R3,#13<<12
- SWI Amnesia_MakeObject
-
- LDMFD R13!,{R0-R11,PC}
-
- .addredoff
-
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- SUB R1,R7,#&20
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- SUB R4,R4,#16<<12
- MOV R0,#edgetab
- MOV R1,#(ballstab<<24)+2
- MOV R2,#%1000000001010001
- SWI Amnesia_MakeObject
- ADD R4,R4,#40<<12
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"O"
- MOV R2,#%1000000001010001
- SUB R3,R3,#13<<12
- SWI Amnesia_MakeObject
-
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"F"
- MOV R2,#%1000000001010001
- ADD R3,R3,#13<<12
- SWI Amnesia_MakeObject
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"F"
- MOV R2,#%1000000001010001
- ADD R3,R3,#13<<12
- SWI Amnesia_MakeObject
-
- LDMFD R13!,{R0-R11,PC}
-
- .addredon
-
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- SUB R1,R7,#&20
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- SUB R4,R4,#16<<12
- MOV R0,#edgetab
- MOV R1,#(ballstab<<24)+2
- MOV R2,#%1000000001010001
- SWI Amnesia_MakeObject
- ADD R4,R4,#40<<12
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"O"
- MOV R2,#%1000000001010001
- SUB R3,R3,#7<<12
- SWI Amnesia_MakeObject
-
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"N"
- MOV R2,#%1000000001010001
- ADD R3,R3,#13<<12
- SWI Amnesia_MakeObject
-
- LDMFD R13!,{R0-R11,PC}
-
-
- .addtelep
- STMFD R13!,{R0-R11,R14}
- LDR R0,[R12,#v.sparks]
- CMP R0,#1
- LDMNEFD R13!,{R0-R11,PC}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- BL random
- AND R1,R0,#3<<16
- ADD R1,R1,#(decortab<<24)+4
- MOV R2,#%1000000001010001
- MOV R0,#edgetab
- SWI Amnesia_MakeObject
- LDMFD R13!,{R0-R11,PC}
-
- .addsecret
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- LDR R1,[R12,#v.frameinc]
- CMP R1,#1
- MOV R1,#&1F
- MOVLE R1,#&3F
- BL random
- TST R0,R1
- BLEQ addglint
-
- LDR R0,[R12,#v.scanspeed]
- CMP R0,#5
- LDMLTFD R13!,{R0-R11,PC}
- LDR R0,[R12,#v.framectr]
- TST R0,#&1C
- LDMNEFD R13!,{R0-R11,PC}
- MOV R0,R3
- MOV R1,R4
- MOV R3,#&FF
- BL scanblockadd
- LDMFD R13!,{R0-R11,PC}
-
- .addwarp
- STMFD R13!,{R0-R11,R14}
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- STMFD R13!,{R3,R4}
- LDR R5,[R12,#v.levelno]
- TST R5,#&400
- BNE addbonuswarp
- MOV R5,R3
- MOV R6,R4
- LDR R0,[R12,#v.hwarpinc]
- SUB R3,R3,R0,ASL #12
- LDR R0,[R12,#v.vwarpinc]
- MOV R0,R0,ASL #12
- DIV96 R0,R1
- SUB R4,R4,R1,ASL #12
- ADD R7,R12,#v.warptimer
- LDR R8,[R12,#v.warped]
- AND R8,R8,#&FF
- CMP R8,#7
- MOVGT R8,#7
- .loop84
- SUBS R8,R8,#1
- BMI addwarpend
- LDR R1,[R7],#4
- STMFD R13!,{R3-R8}
- ADD R1,R1,#&80
- AND R1,R1,#&7F8
- ADR R2,circletab
-
- LDR R0,[R2,R1]!
- MOV R0,R0,ASR #14
- ADD R0,R0,R0,ASR #1
- ADD R0,R0,R0,ASR #3
- ADD R3,R3,R0
-
- LDR R0,[R2,#4]
- MOV R0,R0,ASR #14
- ADD R0,R0,R0,ASR #1
- ADD R0,R0,R0,ASR #3
- ADD R4,R4,R0
-
- ADD R4,R4,#40<<12
- SUB R3,R3,#8<<12
-
- SUB R0,R3,R5
- CMP R0,#48<<12
- SUBGE R3,R3,#96<<12
- CMP R0,#-48<<12
- ADDLE R3,R3,#96<<12
- SUB R0,R3,R5
- CMP R0,#-48<<12
- ADDLE R3,R3,#96<<12
- SUB R0,R4,R6
- CMP R0,#48<<12
- SUBGE R4,R4,#96<<12
- CMP R0,#-48<<12
- ADDLE R4,R4,#96<<12
- MOV R1,#(ballstab<<24)+(1<<16)
- MOV R2,#%10001
- MOV R0,#edgetab
- SWI Amnesia_MakeObject
- LDMFD R13!,{R3-R8}
- B loop84
-
- .addwarpend
-
- LDMFD R13!,{R3,R4}
-
- LDR R0,[R12,#v.sparks]
- CMP R0,#1
- LDMNEFD R13!,{R0-R11,PC}
-
- BL addglint
- BL random
- AND R1,R0,#3<<16
- ADD R1,R1,#(decortab<<24)+4
- MOV R2,#%1000000001010001
- MOV R0,#edgetab
- SWI Amnesia_MakeObject
-
- LDMFD R13!,{R0-R11,PC}
-
- .addbonuswarp
-
- LDR R0,[R12,#v.sparks]
- CMP R0,#1
- BEQ addwarpend
- LDR R0,[R12,#v.newlevelctr]
- CMP R0,#0
- BNE addwarpend
- LDR R0,[R12,#v.framectr]
- AND R0,R0,#&7F
- CMP R0,#&40
- RSBGT R0,R0,#&80
- SUB R0,R0,#&20
- ADD R4,R4,R0,ASL #12
- SUB R3,R3,#18<<12
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"E"
- MOV R2,#%10001
- SWI Amnesia_MakeObject
- ADD R3,R3,#12<<12
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"X"
- MOV R2,#%10001
- SWI Amnesia_MakeObject
- ADD R3,R3,#12<<12
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"I"
- MOV R2,#%10001
- SWI Amnesia_MakeObject
- ADD R3,R3,#12<<12
- MOV R0,#edgetab
- MOV R1,#(texttab<<24)+"T"
- MOV R2,#%10001
- SWI Amnesia_MakeObject
- ADD R3,R3,#12<<12
- B addwarpend
-
- .addglint
- STMFD R13!,{R0-R4,R14}
- BL random
- AND R0,R0,#&3FFFF
- ADD R0,R0,R0,LSR #1
- SUB R0,R0,#48<<12
- ADD R3,R3,R0
- BL random
- AND R0,R0,#&3FFFF
- ADD R0,R0,R0,LSR #1
- SUB R0,R0,#48<<12
- ADD R4,R4,R0
- MOV R1,#2
- BL decorate
- LDMFD R13!,{R0-R4,PC}
-
-
-
-
- .phasetelep
- LDR R7,[R12,#v.framectr]
- MOV R7,R7,LSR #3
- AND R7,R7,#3
- CMP R7,#3
- MOVEQ R7,#1
- MOV PC,R14
-
- .edgehell
- STMFD R13!,{R0-R11,R14}
- LDR R5,[R12,#v.scanlock]
- CMP R5,#1
- MOV R5,R3
- MOV R6,R4
- MOV R8,R3
- MOVEQ R5,#32
- MOVEQ R6,#32
- SUB R3,R1,R3,LSR #1
- SUB R4,R2,R4,LSR #1
- MOV R7,#96<<12
- MUL R3,R7,R3
- MUL R4,R7,R4
- ADD R0,R0,R1
-
- SUB R6,R6,#1 ;do down first so we can lose R6
- CMP R2,R6
-
-
-
- LDRLTB R7,[R0,R8]
- MOVGE R7,#256
- CMP R7,#&2F
- MOVEQ R7,#256
- CMP R7,#hellno
- BLT edins1
- CMP R7,#hellno+16
- MOVLT R7,#256
- .edins1
- CMP R7,#&80
- BLLT edgedown
-
- CMP R1,#0
- LDRGTB R7,[R0,#-1]
- MOVLE R7,#256
- CMP R7,#&2F
- MOVEQ R7,#256
- CMP R7,#hellno
- BLT edins2
- CMP R7,#hellno+16
- MOVLT R7,#256
- .edins2
- CMP R7,#&80
- BLLT edgeleft
-
- ADD R1,R1,#1
- CMP R1,R5
- LDRLTB R7,[R0,#1]
- MOVGE R7,#256
- CMP R7,#&2F
- MOVEQ R7,#256
- CMP R7,#hellno
- BLT edins3
- CMP R7,#hellno+16
- MOVLT R7,#256
- .edins3
- CMP R7,#&80
- BLLT edgeright
-
- CMP R2,#0
- LDRGTB R7,[R0,-R8]
- MOVLE R7,#256
- CMP R7,#&2F
- MOVEQ R7,#256
- CMP R7,#hellno
- BLT edins4
- CMP R7,#hellno+16
- MOVLT R7,#256
- .edins4
- CMP R7,#&80
- BLLT edgeup
-
- LDMFD R13!,{R0-R11,PC}
-
- .edgeleft
- STMFD R13!,{R0-R8,R14}
- MOV R0,#edgetab
- MOV R1,#(edgetab<<24)+1
- MOV R2,#%1000000001010001
- SUB R3,R3,#40<<12
- SWI Amnesia_MakeObject
- LDMFD R13!,{R0-R8,PC}
- .edgeright
- STMFD R13!,{R0-R8,R14}
- MOV R0,#edgetab
- MOV R1,#(edgetab<<24)
- MOV R2,#%1000000001010001
- ADD R3,R3,#40<<12
- SWI Amnesia_MakeObject
- LDMFD R13!,{R0-R8,PC}
- .edgeup
- STMFD R13!,{R0-R8,R14}
- MOV R0,#edgetab
- MOV R1,#(edgetab<<24)+3
- MOV R2,#%1000000001010001
- SUB R4,R4,#40<<12
- SWI Amnesia_MakeObject
- LDMFD R13!,{R0-R8,PC}
- .edgedown
- STMFD R13!,{R0-R8,R14}
- MOV R0,#edgetab
- MOV R1,#(edgetab<<24)+2
- MOV R2,#%1000000001010001
- ADD R4,R4,#40<<12
- SWI Amnesia_MakeObject
- LDMFD R13!,{R0-R8,PC}
-
- .arrowmake
- STMFD R13!,{R14}
- MOV R0,#edgetab
- AND R1,R1,#&F
- CMP R1,#8
- BEQ redsourcemake
- CMP R1,#5
- MOVGT R1,#5
- ADD R1,R1,#(arrowtab<<24)
- MOV R2,#%1000000001010001
- SWI Amnesia_MakeObject
- LDMFD R13!,{PC}
-
- .redsourcemake
- LDR R0,[R12,#v.redball]
- CMP R0,#1
- LDMNEFD R13!,{PC}
- BL random
- AND R0,R0,#&3FFFF
- SUB R0,R0,#&1FFFF
- ADD R3,R3,R0
- BL random
- AND R0,R0,#&3FFFF
- SUB R0,R0,#&1FFFF
- ADD R4,R4,R0
- MOV R0,#edgetab
- MOV R1,#(decortab<<24)+(1<<16)+2
- MOV R2,#%1000000001010001
- SWI Amnesia_MakeObject
- LDMFD R13!,{PC}
-
-
- .updatescrollinc
- LDR R0,[R12,#v.helltimer]
- ADD R0,R0,#1
- STR R0,[R12,#v.helltimer]
- MOV R0,#0
- STR R0,[R12,#v.hellcont]
- MOV R3,#0
- LDR R1,[R12,#v.xplotofs]
- SUB R1,R1,R1,ASR #3
- MOV R1,R1,ASR #12
- CMP R1,#0
- RSBLT R1,R1,#0
- MOVLT R3,#1
- MOV R2,#96
- MYDIV R0,R1,R2
- CMP R3,#1
- RSBEQ R1,R1,#95
- STR R1,[R12,#v.hscrollinc]
- MOV R3,#0
- LDR R1,[R12,#v.yplotofs]
- SUB R1,R1,R1,ASR #3
- MOV R1,R1,ASR #12
- CMP R1,#0
- RSBLT R1,R1,#0
- MOVLT R3,#1
- MOV R2,#96
- MYDIV R0,R1,R2
- CMP R3,#1
- RSBEQ R1,R1,#95
- MOV R2,#bkwidth
- MUL R0,R2,R1
- STR R0,[R12,#v.vscrollinc]
-
-
- MOV R3,#0
- LDR R1,[R12,#v.xplotofs]
- SUB R1,R1,R1,ASR #5
- MOV R1,R1,ASR #12
- CMP R1,#0
- RSBLT R1,R1,#0
- MOVLT R3,#1
- MOV R2,#96
- MYDIV R0,R1,R2
- CMP R3,#1
- RSBEQ R1,R1,#95
- STR R1,[R12,#v.hwarpinc]
- MOV R3,#0
- LDR R1,[R12,#v.yplotofs]
- SUB R1,R1,R1,ASR #5
- MOV R1,R1,ASR #12
- CMP R1,#0
- RSBLT R1,R1,#0
- MOVLT R3,#1
- MOV R2,#96
- MYDIV R0,R1,R2
- CMP R3,#1
- RSBEQ R1,R1,#95
- MOV R2,#bkwidth
- MUL R0,R2,R1
- STR R0,[R12,#v.vwarpinc]
- MOV PC,R14
-
-
-
- .showrate
- STMFD R13!,{R14}
- LDR R0,[R12,#v.realrate]
- CMP R0,#9
- MOVGT R0,#10
- ADD R0,R0,#"0"
- ADD R0,R0,#texttab<<24
- MOV R1,#52
- MOV R2,#12
- SWI FastSpr_Plot
- LDMFD R13!,{PC}
-
- .showattn
- STMFD R13!,{R14}
- LDR R0,[R12,#v.attnctr]
- CMP R0,#9
- MOVGT R0,#10
- ADD R0,R0,#"0"
- ADD R0,R0,#texttab<<24
- MOV R1,#52
- MOV R2,#28
- SWI FastSpr_Plot
- LDMFD R13!,{PC}
-
- .showsidepic
- STMFD R13!,{R14}
- BL loadsidepic
- LDR R0,[R12,#v.canvasadr]
- LDR R1,[R0,#4]
- ADD R0,R0,R1;indirect to first sprite
- LDR R1,[R0,#32]
- ADD R1,R0,R1;indirect to sprite data
- SUB R1,R1,#4
- LDR R0,[R12,#v.screenuse]
- ADD R0,R0,#240
- MOV R2,#80
- MOV R3,#240
- MOV R4,#320
- BL transfer
- LDMFD R13!,{PC}
-
- .scanblockadd
- STMFD R13!,{R0-R2,R4-R8,R14}
- MOV R8,R3
- MOV R3,R0
- MOV R4,R1
- B scanaddins
-
- .scanadd
- STMFD R13!,{R0-R2,R4-R8,R14}
- MOV R8,R3
- LDR R3,[R1,#8]
- LDR R4,[R1,#12]
- .scanaddins
- LDR R0,[R12,#v.scanspeed]
- CMP R0,#0
- LDMLEFD R13!,{R0-R2,R4-R8,PC}
- MOV R7,R3,ASL #1
- DIV96 R7,R3
- MOV R7,R4,ASL #1
- DIV96 R7,R4
- LDR R6,[R12,#v.levelnet]
- LDR R0,[R6,#net.xsize]
- ADD R3,R3,R0
- LDR R0,[R6,#net.ysize]
- ADD R4,R4,R0
-
- LDR R7,[R12,#v.scanxofs]
- SUB R3,R3,R7,ASL #1
- LDR R7,[R12,#v.scanyofs]
- SUB R4,R4,R7,ASL #1
-
- LDR R6,[R6,#net.xsize]
- CMP R3,#0
- CMPGE R4,#0
- BLT scanmiss
- CMP R3,#63
- CMPLT R4,#63
- BGE scanmiss
-
- LDR R5,[R12,#v.scanadr]
- ADD R5,R5,R4,LSL #6
- STRB R8,[R5,R3]
- ADD R3,R3,#1
- STRB R8,[R5,R3]
- ADD R3,R3,#64
- STRB R8,[R5,R3]
- SUB R3,R3,#1
- STRB R8,[R5,R3]
-
- .scanmiss
- LDMFD R13!,{R0-R2,R4-R8,PC}
-
-
- .scanupdate
- STMFD R13!,{R14}
- LDR R0,[R12,#v.scanspeed]
- CMP R0,#2
- BLT poorscan
- LDR R11,[R12,#v.levelnet]
- LDR R6,[R11,#net.xsize]
- LDR R7,[R11,#net.ysize]
- LDR R0,[R12,#v.scanxofs]
- LDR R1,[R12,#v.scanyofs]
- SUB R2,R6,R0
- CMP R2,#32
- MOVLT PC,#0
- SUB R2,R7,R1
- CMP R2,#32
- MOVLT PC,#0
- LDR R7,[R12,#v.scanadr]
- LDR R0,[R11,#net.xsize]
- SUB R0,R0,#32
- STR R0,[R12,#v.scanxadd]
- LDR R0,[R12,#v.scanctr]
- LDR R1,[R12,#v.frameinc]
- ADD R0,R0,R1
- STR R0,[R12,#v.scanctr]
- MOV R0,R0,LSR #1
- AND R0,R0,#&3F
- ADD R9,R7,#64*64
- ADD R1,R9,#64*64
- STR R1,[R12,#v.scanend]
- ADD R9,R9,R0,LSL #6
-
- LDR R0,[R12,#v.scanyofs]
- LDR R1,[R11,#net.xsize]
- MUL R0,R1,R0
- ADD R11,R11,R0
- LDR R0,[R12,#v.scanxofs]
- ADR R3,scanwtab
- AND R4,R0,#3
- LDR R4,[R3,R4,LSL #2]
- ADD R4,R3,R4
- BIC R0,R0,#3
- ADD R11,R11,R0
- ADD R11,R11,#net.data
- MOV R5,#32
- LDR R0,[R12,#v.scanspeed]
- MOV R14,#0
- CMP R0,#2
- ORRGE R14,R14,#&C0
- CMP R0,#3
- ORRGE R14,R14,#&10
- CMP R0,#4
- ORRGE R14,R14,#&20
-
-
- ORR R14,R14,R14,LSL #8
- ORR R14,R14,R14,LSL #16
-
- ADD R10,R9,#64
- ADD R8,R7,#64
-
- .loop43
- MOV R6,#64
- LDR R1,[R12,#v.scanend]
- CMP R9,R1
- SUBGE R9,R9,#64*64
- CMP R10,R1
- SUBGE R10,R10,#64*64
- STMFD R13!,{R4,R5}
- MOV PC,R4
- .scanins
- LDMFD R13!,{R4,R5}
- ADD R7,R7,#64
- ADD R8,R8,#64
- ADD R9,R9,#64
- ADD R10,R10,#64
- LDR R1,[R12,#v.scanxadd]
- ADD R11,R11,R1
- SUBS R5,R5,#1
- BGT loop43
- LDMFD R13!,{PC}
-
- .scanwtab
- DCD scanw0-scanwtab
- DCD scanw1-scanwtab
- DCD scanw2-scanwtab
- DCD scanw3-scanwtab
-
-
- .scanw0
- .loop44
- LDR R0,[R11],#4
- ANDS R0,R0,R14
- BEQ scan00zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan00ins
- LDR R0,[R11],#4
- ANDS R0,R0,R14
- BEQ scan01zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan01ins
- SUBS R6,R6,#16
- BGT loop44
- B scanins
-
- .scan00zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan00ins
- .scan01zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan01ins
-
- .scanw1
- .loop45
- LDR R0,[R11]
- LDR R1,[R11,#4]!
- MOV R0,R0,LSR #8
- ORR R0,R0,R1,LSL #24
- ANDS R0,R0,R14
- BEQ scan10zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan10ins
- LDR R0,[R11]
- LDR R1,[R11,#4]!
- MOV R0,R0,LSR #8
- ORR R0,R0,R1,LSL #24
- ANDS R0,R0,R14
- BEQ scan11zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan11ins
- SUBS R6,R6,#16
- BGT loop45
- B scanins
-
- .scan10zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan10ins
- .scan11zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan11ins
-
- .scanw2
- .loop46
- LDR R0,[R11]
- LDR R1,[R11,#4]!
- MOV R0,R0,LSR #16
- ORR R0,R0,R1,LSL #16
- ANDS R0,R0,R14
- BEQ scan20zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan20ins
- LDR R0,[R11]
- LDR R1,[R11,#4]!
- MOV R0,R0,LSR #16
- ORR R0,R0,R1,LSL #16
- ANDS R0,R0,R14
- BEQ scan21zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan21ins
- SUBS R6,R6,#16
- BGT loop46
- B scanins
-
- .scan20zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan20ins
- .scan21zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan21ins
-
- .scanw3
- .loop47
- LDR R0,[R11]
- LDR R1,[R11,#4]!
- MOV R0,R0,LSR #24
- ORR R0,R0,R1,LSL #8
- ANDS R0,R0,R14
- BEQ scan30zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan30ins
- LDR R0,[R11]
- LDR R1,[R11,#4]!
- MOV R0,R0,LSR #24
- ORR R0,R0,R1,LSL #8
- ANDS R0,R0,R14
- BEQ scan31zero
- AND R4,R0,#&FF<<16
- ORR R4,R4,R0,LSR #24
- ORR R4,R4,R4,LSL #8
- AND R5,R0,#&FF<<8
- ORR R5,R5,R0,LSL #24
- ORR R5,R5,R5,LSR #8
-
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- ORR R0,R0,R5,ROR #16
- ORR R1,R1,R4,ROR #16
- ORR R2,R2,R5,ROR #16
- ORR R3,R3,R4,ROR #16
-
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- .scan31ins
- SUBS R6,R6,#16
- BGT loop47
- B scanins
-
- .scan30zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan30ins
- .scan31zero
- LDMIA R9!,{R0-R1}
- LDMIA R10!,{R2-R3}
- STMIA R7!,{R0-R1}
- STMIA R8!,{R2-R3}
- B scan31ins
-
- .scanset
- STMFD R13!,{R14}
- LDR R0,[R12,#v.xpos]
- LDR R1,[R12,#v.ypos]
- LDR R11,[R12,#v.levelnet]
- BIC R0,R0,#&FFF
- BIC R1,R1,#&FFF
-
- DIV96 R0,R4
- DIV96 R1,R5
- LDR R2,[R11,#net.xsize]
- LDR R3,[R11,#net.ysize]
- SUB R0,R2,#32
- SUB R1,R3,#32
- ADD R4,R4,R0,LSR #1
- ADD R5,R5,R1,LSR #1
-
- CMP R4,#0
- MOVLT R4,#0
- SUB R2,R2,#32
- CMP R4,R2
- MOVGT R4,R2
- CMP R5,#0
- MOVLT R5,#0
- SUB R3,R3,#32
- CMP R5,R3
- MOVGT R5,R3
-
- LDR R2,[R12,#v.scanlock]
- CMP R2,#1
- MOVEQ R4,#0
- MOVEQ R5,#0
- STR R4,[R12,#v.scanxofs]
- STR R5,[R12,#v.scanyofs]
- LDMFD R13!,{PC}
-
- .poorscan
- LDR R11,[R12,#v.scanadr]
- ADD R10,R11,#64*64
- MOV R9,#64*64
- .loop48
- #rept 4
- LDMIA R10!,{R0-R7}
- STMIA R11!,{R0-R7}
- #endr
- SUBS R9,R9,#128
- BGT loop48
- LDMFD R13!,{PC}
-
-
-
- .scanwrite
- STMFD R13!,{R14}
- LDR R7,[R12,#v.lineskip]
- CMP R7,#1
- LDR R11,[R12,#v.scanadr]
- LDR R0,[R12,#v.scanspeed]
- CMP R0,#0
- ADDEQ R11,R11,#64*64
- LDR R10,[R12,#v.screenuse]
- ADD R10,R10,#320*21+248
- CMP R7,#1
- ADDEQ R10,R10,#320*21
- MOV R9,#64
- LDR R8,[R12,#v.hbytes]
- SUB R8,R8,#64
- ADDEQ R8,R8,#320
- BEQ scanwrite49
- .loop1d
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- ADD R10,R10,R8
- SUBS R9,R9,#1
- BGT loop1d
- LDMFD R13!,{PC}
- .scanwrite49
- .loop491d
- ADD R14,R10,#320
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- STMIA R14!,{R0-R7}
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- STMIA R14!,{R0-R7}
- ADD R10,R10,R8
- SUBS R9,R9,#1
- BGT loop491d
- LDMFD R13!,{PC}
-
-
- .scangrab
- STMFD R13!,{R14}
- LDR R7,[R12,#v.lineskip]
- CMP R7,#1
- LDR R11,[R12,#v.screenuse]
- ADD R11,R11,#320*21+248
- ADDEQ R11,R11,#320*21
- LDR R10,[R12,#v.scanadr]
- ADD R10,R10,#64*64
- MOV R9,#64
- LDR R8,[R12,#v.hbytes]
- SUB R8,R8,#64
- ADDEQ R8,R8,#320
- .loop1f
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- ADD R11,R11,R8
- SUBS R9,R9,#1
- BGT loop1f
- LDMFD R13!,{PC}
-
- .redcheck
- STMFD R13!,{R14}
- LDR R0,[R12,#v.redball]
- CMP R0,#1
- LDMNEFD R13!,{PC}
- MOV R0,#ballstab
- SWI Amnesia_CountObjects
- CMP R0,#36
- LDMGTFD R13!,{PC}
- LDR R3,[R12,#v.diff]
- .redcheckloop
- STMFD R13!,{R3}
- LDR R9,[R12,#v.levelnet]
- LDR R5,[R9,#net.xsize]
- LDR R6,[R9,#net.ysize]
- MUL R4,R5,R6
- BL random
- AND R0,R0,#&FFF
- CMP R0,R4
- BGE redcheckfail
- ADD R9,R9,#net.data
- ADD R9,R9,R0
- LDRB R0,[R9]
- CMP R0,#&28
- BNE redcheckfail
- MOV R0,R9
- BL backtranslate
- MOV R3,R0
- MOV R4,R1
- BLVC makeredball
- .redcheckfail
- LDMFD R13!,{R3}
- SUBS R3,R3,#1
- BPL redcheckloop
- LDMFD R13!,{PC}
-
- .bastardmes
- .bm1
- DCD 160<<12,120<<12,0,0,&00200001,bm2-bm1
- DCB "SUICIDE MODE",0
- ALIGN
- .bm2
- DCD 160<<12,120<<12,0,0,&00200001,bm3-bm2
- DCB 0
- ALIGN
- .bm3
- DCD 160<<12,120<<12,0,0,&00200001,bm4-bm3
- DCB "SUICIDE MODE",0
- ALIGN
- .bm4
- DCD 160<<12,120<<12,0,0,&00200001,bm5-bm4
- DCB 0
- ALIGN
- .bm5
- DCD 160<<12,120<<12,0,0,&00200001,0
- DCB "SUICIDE MODE",0
- ALIGN
-
-
-
- .bastardmode
- STMFD R13!,{R14}
- LDR R0,[R12,#v.bastard]
- CMP R0,#0
- LDMNEFD R13!,{PC}
- ADR R0,bastardmes
- BL message
- MOV R0,#500
- STR R0,[R12,#v.bastard]
- BL bastardsound
- LDMFD R13!,{PC}
-
- .goodycheck
- STMFD R13!,{R14}
- MOV R0,#0
- STR R0,[R12,#v.magnet]
- STR R0,[R12,#v.ballstops]
- LDR R0,[R12,#v.buttons]
- TST R0,#4
- BLNE selectdown
- LDR R0,[R12,#v.buttons]
- TST R0,#1
- BLNE adjustdown
-
- LDR R0,[R12,#v.buttons]
- TST R0,#2
- BNE menudown
- LDR R0,[R12,#v.goodycsr]
- BIC R0,R0,#1<<31
- STR R0,[R12,#v.goodycsr]
- LDMFD R13!,{PC}
- .menudown
- LDR R0,[R12,#v.goodycsr]
- TST R0,#1<<31
- LDMNEFD R13!,{PC}
- ADD R0,R0,#1
- AND R0,R0,#3
- ORR R0,R0,#1<<31
- STR R0,[R12,#v.goodycsr]
- MOV R0,#1
- STR R0,[R12,#v.goodychange]
- LDMFD R13!,{PC}
-
- .bastarddown
- STMFD R13!,{R14}
- BL bastardmode
- LDMFD R13!,{PC}
-
- .adjustdown
- STMFD R13!,{R14}
- .adjuststart
- LDR R0,[R12,#v.lastbuttons]
- TST R0,#1
- LDMNEFD R13!,{PC}
- LDR R0,[R12,#v.cheat]
- CMP R0,#1
- LDMNEFD R13!,{PC}
- LDR R0,[R12,#v.goodycsr]
- ADD R11,R12,#v.goodytab
- AND R0,R0,#3
- ADD R11,R11,R0,LSL #2
- LDR R0,[R11]
- ADD R0,R0,#1
- AND R0,R0,#15
- CMP R0,#14
- MOVGE R0,#0
- STR R0,[R11]
- .adjustend
- LDMFD R13!,{PC}
-
- .selectdown
- STMFD R13!,{R14}
- LDR R0,[R12,#v.goodycsr]
- ADD R11,R12,#v.goodytab
- AND R0,R0,#3
- ADD R11,R11,R0,LSL #2
- MOV R1,R11
- LDR R0,[R1]
- BL goodyuse
- LDMFD R13!,{PC}
-
- .goodyuse
- STMFD R13!,{R0-R11,R14}
- MOV R11,R1
- AND R0,R0,#15
- CMP R0,#0
- BLE goodyend
- ADR R1,gjtab
- LDR R2,[R1,R0,LSL #2]
- ADD PC,R1,R2
- .gjtab
- DCD goodyend-gjtab
- DCD goody1-gjtab
- DCD goody2-gjtab
- DCD goody3-gjtab
- DCD goody4-gjtab
- DCD goody5-gjtab
- DCD goody6-gjtab
- DCD goody7-gjtab
- DCD goody8-gjtab
- DCD goody9-gjtab
- DCD goody10-gjtab
- DCD goody11-gjtab
- DCD goody12-gjtab
- DCD goody13-gjtab
- DCD goodyend-gjtab
- DCD goodyend-gjtab
- .goody1
- MOV R0,#0
- STR R0,[R11]
- LDR R3,[R12,#v.xpos]
- LDR R4,[R12.#v.ypos]
- BL makeball
- MOV R0,#1
- BL goodyeffect
- B goodyend
-
- .goody2
- MOV R0,#1
- STR R0,[R12,#v.magnet]
- BL magnetsound
- MOV R0,#&3555
- STR R0,[R12,#v.magpitch]
- B goodyend
- .goody3
- MOV R0,#0
- STR R0,[R11]
- LDR R0,[R12,#v.scanspeed]
- ADD R0,R0,#1
- STR R0,[R12,#v.scanspeed]
- ;add scan
- B goodyend
- .goody4
- MOV R0,#0
- STR R0,[R11]
- ;set ball fire on
- MOV R0,#500
- STR R0,[R12,#v.ballfire]
- MOV R0,#4
- BL goodyeffect
- B goodyend
- .goody5
- MOV R0,#0
- STR R0,[R11]
- MOV R0,#1
- STR R0,[R12,#v.ballstops]
- ;stop balls
- MOV R0,#5
- BL goodyeffect
- B goodyend
- .goody6
- LDR R0,[R12,#v.xgrav]
- LDR R1,[R12,#v.ygrav]
- CMP R0,#0
- CMPEQ R1,#0
- BEQ goodyend
- MOV R0,#0
- STR R0,[R11]
- MOV R0,#0
- STR R0,[R12,#v.xgrav]
- STR R0,[R12,#v.ygrav]
- MOV R0,#6
- BL goodyeffect
- B goodyend
- .goody7
- ;extra life
- MOV R0,#0
- STR R0,[R11]
- LDR R0,[R12,#v.pllives]
- ADD R0,R0,#1
- STR R0,[R12,#v.pllives]
- ADR R0,exlifemes
- BL message
-
- B goodyend
- .goody8
- LDR R0,[R12,#v.levelno]
- TST R0,#&400
- BLEQ badgoody8
- MOV R0,#0
- STR R0,[R11]
- LDR R0,[R12,#v.warptime]
- ADD R0,R0,#60*50
- STR R0,[R12,#v.warptime]
- B goodyend
- .goody9
- ;bastard mode
- MOV R0,#9
- BL goodyeffect
- BL bastardmode
- B goodyend
- .goody10
- MOV R0,#0
- STR R0,[R11]
- MOV R0,#500
- STR R0,[R12,#v.blueball]
- ;blue ball
- MOV R0,#10
- BL goodyeffect
- B goodyend
- .goody11
- ;line radar
- LDR R0,[R12,#v.lastbuttons]
- TST R0,#4
- BNE goodyend
- LDR R0,[R12,#v.lineradar]
- RSB R0,R0,#1
- STR R0,[R12,#v.lineradar]
- BL lineradarstate
- B goodyend
-
- .goody12
- MOV R0,#0
- STR R0,[R11]
- LDR R9,[R12,#v.levelnet]
- LDR R0,[R9,#net.xsize]
- LDR R1,[R9,#net.ysize]
- MUL R0,R1,R0
- ADD R9,R9,#net.data
- ADD R8,R9,R0
- .loop8a
- LDRB R0,[R9]
- CMP R0,#hit1
- CMPNE R0,#hit2
- BNE skip8a
- MOV R0,#0
- STMFD R13!,{R8-R9}
- MOV R0,R9
- BL blockdest
- LDMFD R13!,{R8-R9}
- .skip8a
- ADD R9,R9,#1
- CMP R9,R8
- BLT loop8a
- MOV R0,#0
- STR R0,[R12,#v.blocksleft]
- MOV R0,#12
- BL goodyeffect
- B goodyend
-
- .goody13
- LDR R0,[R12,#v.xpos]
- LDR R1,[R12,#v.ypos]
- BL translate
- BVS nogoody13
- LDR R9,[R12,#v.levelnet]
- LDR R5,[R9,#net.xsize]
- LDR R6,[R9,#net.ysize]
- CMN R2,R5,LSR #1
- BLE nogoody13
- ADD R2,R2,#1
- CMP R2,R5,LSR #1
-
- BGE nogoody13
- CMN R3,R6,LSR #1
- BLE nogoody13
- ADD R3,R3,#1
- CMP R3,R6,LSR #1
- BGE nogoody13
- LDRB R0,[R4]
- CMP R0,#0
- MOV R0,#0
- STRNEB R0,[R11]
- MOV R0,R4
- STMFD R13!,{R4,R11}
- BL blockdest
- LDMFD R13!,{R4,R11}
- MOV R0,#0
- STRB R0,[R4]
- .nogoody13
- B goodyend
-
- .goodyend
- LDMFD R13!,{R0-R11,PC}
-
- .exlifemes
- DCD 160<<12,80<<12,0,0,&00500001,exlifemes2-exlifemes
- DCB "EXTRA LIFE",0
- ALIGN
- .exlifemes2
- DCD 160<<12,80<<12,0,-1<<12,&00500001,0
- DCB "EXTRA LIFE",0
- ALIGN
-
- .badgoody8
- LDR R0,[R12,#v.lastbuttons]
- TST R0,#4
- BNE goodyend
- ADR R0,badgoody8mes
- BL message
- BL message
- B goodyend
- .badgoody8mes
- DCD 160<<12,80<<12,0,0,&00500001,0
- DCB "USE EXTRA TIME ON",0
- ALIGN
- DCD 160<<12,100<<12,0,0,&00500001,0
- DCB "BONUS LEVELS ONLY",0
- ALIGN
-
- .lineradarstate
- STMFD R13!,{R14}
- LDR R1,[R12,#v.lineradar]
- ADR R0,lineradaroff
- CMP R1,#1
- ADREQ R0,lineradaron
- BL message
- LDMFD R13!,{PC}
-
- .lineradaroff
- DCD 160<<12,140<<12,0,0,&00200001,0
- DCB "LINE RADAR OFF",0
- ALIGN
- .lineradaron
- DCD 160<<12,140<<12,0,0,&00200001,0
- DCB "LINE RADAR ON",0
- ALIGN
-
-
-
- .goodyeffect
- STMFD R13!,{R14}
- LDR R3,[R12,#v.xpos]
- LDR R4,[R12,#v.ypos]
- MOV R1,R0
- MOV R2,#8
- ADR R11,circletab
- .loop41
- STMFD R13!,{R1-R4,R11}
- LDMIA R11,{R5,R6}
- MOV R5,R5,ASR #16
- MOV R6,R6,ASR #16
- ADD R3,R3,R5,ASL #2
- ADD R4,R4,R6,ASL #2
- LDR R0,[R12,#v.xvec]
- ADD R5,R5,R0
- LDR R0,[R12,#v.yvec]
- ADD R6,R6,R0
- BL goodymakedecor
- LDMFD R13!,{R1-R4,R11}
- ADD R11,R11,#256
- SUBS R2,R2,#1
- BGT loop41
- LDMFD R13!,{PC}
-
- .goodymakedecor ;R1 decor type
- ;R3,R4 coords
- STMFD R13!,{R5-R8,R14}
- MOV R2,#%1000000100010101
- MOV R7,#&08000080
- MOV R8,#0
- MOV R0,#decortab
- ORR R1,R1,#(goodytab)<<24
- SWI Amnesia_MakeObject
- LDMFD R13!,{R5-R8,PC}
-
- .goodystoreeffect
- STMFD R13!,{R8-R9,R14}
- MOV R0,#decortab
- MOV R1,#1
- MOV R2,#0
- LDR R3,[R9,#32]
- AND R3,R3,#&F
- ADD R3,R3,#(goodytab<<24)
- MOV R4,#0
- SWI Amnesia_SelectTable
- .loop4a
- SWI Amnesia_ProcessTable
- CMP R2,#0
- BEQ storeeffectend
- STMFD R13!,{R0-R4}
- LDR R3,[R12,#v.xpos]
- LDR R4,[R1,#8]
- SUB R3,R3,R4
- MOV R3,R3,ASR #4
- LDR R4,[R12,#v.xvec]
- ADD R3,R3,R4
- STR R3,[R1,#16]
-
- LDR R3,[R12,#v.ypos]
- LDR R4,[R1,#12]
- SUB R3,R3,R4
- MOV R3,R3,ASR #4
- LDR R4,[R12,#v.yvec]
- ADD R3,R3,R4
- STR R3,[R1,#20]
- MOV R0,#&08000080
- STR R0,[R1,#24]
-
- LDMFD R13!,{R0-R4}
- B loop4a
-
- .storeeffectend
- LDMFD R13!,{R8-R9,PC}
-
- .goodyuseeffect
- STMFD R13!,{R8-R9,R14}
- MOV R0,#decortab
- MOV R1,#1
- MOV R2,#0
- LDR R3,[R9,#32]
- AND R3,R3,#&F
- ADD R3,R3,#(goodytab<<24)
- MOV R4,#0
- SWI Amnesia_SelectTable
- .loop4b
- SWI Amnesia_ProcessTable
- CMP R2,#0
- BEQ storeeffectend
- STMFD R13!,{R0-R4}
- LDR R3,[R1,#16]
- LDR R4,[R1,#20]
- RSB R4,R4,#0
- MOV R3,R3,ASL #1
- MOV R4,R4,ASL #1
-
- STR R4,[R1,#16]
- STR R3,[R1,#20]
- MOV R0,#&08000080
- STR R0,[R1,#24]
-
- LDMFD R13!,{R0-R4}
- B loop4b
-
- .useeffectend
- LDMFD R13!,{R8-R9,PC}
-
- .scoreupdate
- LDR R0,[R12,#v.plscore]
- LDR R1,[R12,#v.lastscore]
- CMP R0,R1
- MOVEQ PC,R14
-
- STR R0,[R12,#v.lastscore]
- STMFD R13!,{R14}
- ;BL scorecheck
- LDR R0,[R12,#v.scoreofs]
- BL paperwipe
- LDR R0,[R12,#v.scoreofs]
- BL setuppaper
- LDR R0,[R12,#v.plscore]
- ADD R1,R12,#v.buffer
- MOV R2,#16
- SWI OS_ConvertCardinal4
- SUB R0,R1,R0
- MOV R1,#11
- MUL R0,R1,R0
- MOV R0,R0,ASR #1
- RSB R1,R0,#38
- ADD R3,R12,#v.buffer
- .loop16
- LDRB R0,[R3],#1
- CMP R0,#32
- BLT scoreupend
- ADD R0,R0,#(texttab<<24)
- MOV R2,#7
- SWI FastSpr_Plot
- ADD R1,R1,#11
- B loop16
- .scoreupend
- MOV R0,#1
- STR R0,[R12,#v.scorechange]
- LDMFD R13!,{PC}
-
-
- .livesupdate
- LDR R0,[R12,#v.pllives]
- LDR R1,[R12,#v.lastlives]
- CMP R0,R1
- MOVEQ PC,R14
- STR R0,[R12,#v.lastlives]
- STMFD R13!,{R14}
- LDR R0,[R12,#v.livesofs]
- BL paperwipe
- LDR R0,[R12,#v.livesofs]
- BL setuppaper
- LDR R3,[R12,#v.pllives]
- MOV R0,#(decortab<<24)+1
- MOV R1,#32
- MOV R2,#7
- BL writenumber
- MOV R0,#1
- STR R0,[R12,#v.liveschange]
- LDMFD R13!,{PC}
-
- .ballsupdate
- LDR R0,[R12,#v.ballctr]
- LDR R1,[R12,#v.lastballs]
- CMP R0,R1
- MOVEQ PC,R14
- STR R0,[R12,#v.lastballs]
- STMFD R13!,{R14}
- LDR R0,[R12,#v.ballsofs]
- BL paperwipe
- LDR R0,[R12,#v.ballsofs]
- BL setuppaper
- LDR R3,[R12,#v.ballctr]
- MOV R0,#(decortab<<24)+(2<<16)+1
- MOV R1,#32
- MOV R2,#7
- BL writenumber
- MOV R0,#1
- STR R0,[R12,#v.ballschange]
- LDMFD R13!,{PC}
-
- .goodyupdate
- STMFD R13!,{R14}
- ADD R9,R12,#v.goodytab
- ADD R10,R12,#v.lastgoodytab
- LDMIA R9,{R0-R3}
- LDMIA R10,{R4-R7}
- CMP R0,R4
- CMPEQ R1,R5
- CMPEQ R2,R6
- CMPEQ R3,R7
- BNE dogoodyupdate
- LDR R0,[R12,#v.goodycsr]
- LDR R1,[R12,#v.lastgoodycsr]
- CMP R0,R1
- BNE dogoodyupdate
- LDMFD R13!,{PC}
-
- .dogoodyupdate
- LDMIA R9,{R0-R3}
- STMIA R10,{R0-R3}
- LDR R0,[R12,#v.goodycsr]
- STR R0,[R12,#v.lastgoodycsr]
- LDR R0,[R12,#v.goodyofs]
- BL paperwipe
- LDR R0,[R12,#v.goodyofs]
- BL setuppaper
- LDR R0,[R12,#v.goodycsr]
- AND R0,R0,#3
- MOV R1,R0,LSL #4
- ADD R1,R1,R0,LSL #2
- ADD R1,R1,#10
- MOV R0,#(goodytab<<24)
- MOV R2,#8
- SWI FastSpr_Plot
- MOV R3,#4
- ADD R11,R12,#v.goodytab
- MOV R4,#10
- .goodloop
- LDR R0,[R11],#4
- AND R0,R0,#&FF
- CMP R0,#maxgoody
- MOVGT R0,#0
- MOV R1,R4
- MOV R2,#8
- CMP R0,#0
- ORR R0,R0,#(goodytab<<24)
- SWINE FastSpr_Plot
- ADD R4,R4,#20
- SUBS R3,R3,#1
- BGT goodloop
- MOV R0,#1
- STR R0,[R12,#v.goodychange]
- LDMFD R13!,{PC}
-
- .writenumber
- STMFD R13!,{R14}
- CMP R3,#0
- LDMLEFD R13!,{PC}
- CMP R3,#5
- BGT shortnumber
- STMFD R13!,{R0-R2}
- SWI FastSpr_ReadSize
- ADD R4,R0,#1
- LDMFD R13!,{R0-R2}
- MUL R5,R4,R3
- SUB R5,R5,R4
-
- SUB R1,R1,R5,ASR #1
- .loop1a
- STMFD R13!,{R0-R2}
- SWI FastSpr_Plot
- LDMFD R13!,{R0-R2}
- ADD R1,R1,R4
- SUBS R3,R3,#1
- BGT loop1a
- LDMFD R13!,{PC}
-
- .shortnumber
- STMFD R13!,{R0-R2}
- MOV R0,R3
- ADD R1,R12,#v.buffer
- MOV R2,#16
- SWI OS_ConvertCardinal4
- SUB R0,R1,R0
- ADD R0,R0,#1
- MOV R1,#11
- MUL R0,R1,R0
- MOV R5,R0,ASR #1
- LDMFD R13!,{R0-R2}
- SUB R1,R1,R5
- SWI FastSpr_Plot
- ADD R1,R1,#11
- MOV R0,#(texttab<<24)+"X"
- SWI FastSpr_Plot
- ADD R1,R1,#11
- ADD R3,R12,#v.buffer
-
- .loop1b
- LDRB R0,[R3],#1
- CMP R0,#32
- BLT numberend
- ADD R0,R0,#(texttab<<24)
- MOV R2,#7
- SWI FastSpr_Plot
- ADD R1,R1,#11
- B loop1b
- .numberend
- LDMFD R13!,{PC}
-
- .doreps
- STMFD R13!,{R14}
- ADD R0,R12,#v.ballsofs
- ADD R1,R12,#v.ballschange
- BL repifnes
- ADD R0,R12,#v.scoreofs
- ADD R1,R12,#v.scorechange
- BL repifnes
- ADD R0,R12,#v.livesofs
- ADD R1,R12,#v.liveschange
- BL repifnes
- ADD R0,R12,#v.goodyofs
- ADD R1,R12,#v.goodychange
- BL repifnes
- LDMFD R13!,{PC}
-
- .repifnes
- STMFD R13!,{R14}
- LDR R3,[R12,#v.paperadr]
- LDR R2,[R1]
- CMP R2,#0
- MOV R2,#0
- STR R2,[R1]
- LDR R0,[R0]
- ADD R0,R3,R0
- BLNE replace
- LDMFD R13!,{PC}
-
- .dograbs
- STMFD R13!,{R14}
- MOV R0,#248
- MOV R1,#108
- MOV R2,#64
- MOV R3,#14
- LDR R4,[R12,#v.storesadr]
- MOV R5,R4
- SUB R6,R4,R5
- STR R6,[R12,#v.ballsofs]
- BL grab2
- MOV R1,#145
- SUB R6,R4,R5
- STR R6,[R12,#v.scoreofs]
- BL grab2
- MOV R1,#183
- SUB R6,R4,R5
- STR R6,[R12,#v.livesofs]
- BL grab2
- MOV R0,#240
- MOV R1,#221
- MOV R2,#80
- MOV R3,#16
- SUB R6,R4,R5
- STR R6,[R12,#v.goodyofs]
- BL grab2
- LDMFD R13!,{PC}
-
- .grab2
- STMFD R13!,{R14}
- STMFD R13!,{R6}
- BL grab
- LDMFD R13!,{R6}
- STMFD R13!,{R4}
- LDR R4,[R12,#v.paperadr]
- ADD R4,R4,R6
- BL grab
- LDMFD R13!,{R4}
- LDMFD R13!,{PC}
-
- .transfer
- STMFD R13!,{R5-R6,R14}
- LDR R5,[R12,#v.lineskip]
- CMP R5,#1
- BEQ transfer49
- .loopv
- STMFD R13!,{R0,R2}
-
- .loopw
- LDR R6,[R1],#4
- STR R6,[R0],#4
- SUBS R2,R2,#4
- BGT loopw
- LDMFD R13!,{R0,R2}
- ADD R0,R0,R4
- SUBS R3,R3,#1
- BGT loopv
- LDMFD R13!,{R5-R6,PC}
-
- .transfer49
- ADD R4,R4,#320
- .loopv49
- STMFD R13!,{R0,R2}
- .loopw49
- LDR R6,[R1],#4
- STR R6,[R0,#320]
- STR R6,[R0],#4
- SUBS R2,R2,#4
- BGT loopw49
- LDMFD R13!,{R0,R2}
- ADD R0,R0,R4
- SUBS R3,R3,#1
- BGT loopv49
- LDMFD R13!,{R5-R6,PC}
-
-
- .grab
- STMFD R13!,{R0-R3,R14}
- ; On entry, (R0,R1) are coord to grab from, (R2,R3) are width,height
- ;R4 is address to write to.
- MOV R10,R4
- MOV R9,R2;for the return of R4
- LDR R11,[R12,#v.screenuse]
- LDR R6,[R12,#v.hbytes]
- MUL R1,R6,R1
- ADD R4,R6,R6,LSL #1
- STR R1,[R10,R4]
- MOV R4,R1
- ADD R1,R1,R0
- STR R1,[R10]
- STR R2,[R10,R6]
- STR R3,[R10,R6,LSL #1]
- LDR R0,[R12,#v.lineskip]
- CMP R0,#1
- ADDEQ R11,R11,R4
-
- ADD R10,R10,#4
- ADD R9,R9,R10
- ADD R11,R11,R1
- .loop11
- STMFD R13!,{R2,R10,R11}
- .loop10
- LDR R0,[R11],#4
- STR R0,[R10],#4
- SUBS R2,R2,#4
- BGT loop10
- LDMFD R13!,{R2,R10,R11}
- LDR R0,[R12,#v.lineskip]
- CMP R0,#1
- ADDEQ R11,R11,R6
- ADD R11,R11,R6
- ADD R10,R10,R6
- SUBS R3,R3,#1
- BGT loop11
- MOV R4,R9
- LDMFD R13!,{R0-R3,PC}
-
- .replace
- STMFD R13!,{R0-R3,R14}
- LDR R7,[R12,#v.lineskip]
- CMP R7,#1
- BEQ replace49
- MOV R11,R0
- LDR R10,[R12,#v.screenuse]
- LDR R6,[R12,#v.hbytes]
- LDR R1,[R11]
- ADD R10,R10,R1
- LDR R2,[R11,R6]
- LDR R3,[R11,R6,LSL #1]
- ADD R11,R11,#4
- .loop13
- STMFD R13!,{R2,R10-R11}
- .loop12
- LDR R0,[R11],#4
- STR R0,[R10],#4
- SUBS R2,R2,#4
- BGT loop12
- LDMFD R13!,{R2,R10-R11}
- ADD R10,R10,R6
- ADD R11,R11,R6
- SUBS R3,R3,#1
- BGT loop13
- LDMFD R13!,{R0-R3,PC}
-
- .replace49
- MOV R11,R0
- LDR R10,[R12,#v.screenuse]
- LDR R6,[R12,#v.hbytes]
- ADD R1,R6,R6,LSL #1
- LDR R1,[R11,R1]
- LDR R0,[R11]
- ADD R1,R0,R1
- ADD R10,R10,R1
- LDR R2,[R11,R6]
- LDR R3,[R11,R6,LSL #1]
- ADD R11,R11,#4
- .loop4913
- STMFD R13!,{R2,R10-R11}
- .loop4912
- LDR R0,[R11],#4
- STR R0,[R10,#320]
- STR R0,[R10],#4
- SUBS R2,R2,#4
- BGT loop4912
- LDMFD R13!,{R2,R10-R11}
- ADD R10,R10,R6,LSL #1
- ADD R11,R11,R6
- SUBS R3,R3,#1
- BGT loop4913
- LDMFD R13!,{R0-R3,PC}
-
- .sload1
- MOV R0,#14
- ADR R1,sidepicname
- LDR R2,[R12,#v.canvasadr]
- MOV R3,#0
- ADR R4,pathname
- SWI OS_File
- B sload1ins
-
- .sload2
- MOV R0,#14
- ADR R1,topdataname
- LDR R2,[R12,#v.screenadr]
- MOV R3,#0
- ADR R4,pathname
- SWI OS_File
- B sload2ins
-
- .loadsidepic
- STMFD R13!,{R14}
- MOV R0,#0
- ADR R1,sidepicname
- ADR R2,pathname
- SWI Blitz_HammerOp
- CMP R3,#0
- BEQ sload1
- MOV R0,#1
- LDR R3,[R12,#v.canvasadr]
- SWI Blitz_HammerOp
- .sload1ins
- LDR R0,[R12,#v.lineskip]
- CMP R0,#0
- LDMNEFD R13!,{PC}
- MOV R0,#0
- ADR R1,topdataname
- ADR R2,pathname
- SWI Blitz_HammerOp
- CMP R3,#0
- BEQ sload2
- MOV R0,#1
- LDR R3,[R12,#v.screenadr]
- SWI Blitz_HammerOp
- .sload2ins
- LDR R0,[R12,#v.screenadr]
- ADD R1,R0,#320*248
- ADD R0,R0,#320*7
- MOV R2,#&A00
- .loadpicloop
- #rept 10
- LDMIA R0!,{R3-R10}
- STMIA R1!,{R3-R10}
- #endr
- SUBS R2,R2,#320
- SUB R0,R0,#640
- BGT loadpicloop
- LDMFD R13!,{PC}
- LDMFD R13!,{PC}
-
- .hackcheck
- STMFD R13!,{R14}
- .hackcheckstart
- MOV R0,#0
- STR R0,[R12,#v.bastmode]
- ADR R0,deskhack
- ADD R1,R12,#v.buffer
- LDMIA R0,{R2-R5}
- MVN R2,R2
- MVN R3,R3
- MVN R4,R4
- MVN R5,R5
- STMIA R1,{R2-R5}
- MOV R0,#18
- SWI XOS_Module
- LDMVSFD R13!,{PC}
- MOV R0,#1
- STR R0,[R12,#v.bastmode]
- MOV R0,#&E3A00001
- STR R0,gamehack
- ADR R1,cheatmesstart
- ADD R2,R1,#cheatmesend-cheatmesstart
- MOV R0,#&0
- BL wipem
- ADR R1,adjuststart
- ADD R2,R1,#adjustend-adjuststart
- MOV R0,#&0
- BL wipem
- ADR R1,hackcheckstart
- ADD R2,R1,#hackcheckend-hackcheckstart
- MOV R0,#&0
- BL wipem
-
-
- LDMFD R13!,{PC}
- .deskhack
- DCD &6B736544 EOR &FFFFFFFF
- DCD &48706F74 EOR &FFFFFFFF
- DCD &656B6361 EOR &FFFFFFFF
- DCD &00000072 EOR &FFFFFFFF
- ALIGN
- .hackcheckend
- LDMFD R13!,{PC}
-
- .cracksound
- STMFD R13!,{R0-R7,R14}
- BL rangetovolume
- LDR R3,[R12,#v.colpitch]
- SUBS R2,R2,R3
- LDMLTFD R13!,{R0-R7,PC}
- CMP R2,#&5F
- MOVGT R2,#&5F
- MOV R0,#2
- MOV R1,#6
- MOV R3,#&3555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#10
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .explosound
- STMFD R13!,{R0-R3,R14}
- BL rangetovolume
- MOV R0,#4
- MOV R1,#7
- MOV R3,#&3555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#10
- BL bidforsound
- LDMFD R13!,{R0-R3,PC}
-
- .bastardsound
- STMFD R13!,{R0-R7,R14}
- MOV R0,#4
- MOV R1,#11
- MOV R2,#&7F
- MOV R3,#&2555
- MOV R4,#&00000400
- MOV R5,#&65550300
- MOV R6,#127
- MOV R7,#100
- BL bidforsound
- MOV R0,#3
- MOV R1,#11
- MOV R2,#&7F
- MOV R3,#&2400
- MOV R4,#&00000400
- MOV R5,#&65550300
- MOV R6,#-127
- MOV R7,#100
- BL bidforsound
-
- LDMFD R13!,{R0-R7,PC}
-
-
- .weirdsound
- STMFD R13!,{R0-R7,R14}
- BL rangetovolume
- MOV R0,#2
- MOV R1,#10
- MOV R3,#&4555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#5
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .secretsound
- STMFD R13!,{R0-R7,R14}
- BL objectrange
- BL rangetovolume
- MOV R0,#3
- MOV R1,#3
- MOV R3,#&3555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#5
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .telepsound
- STMFD R13!,{R0-R7,R14}
- BL objectrange
- BL rangetovolume
- MOV R0,#3
- MOV R1,#12
- MOV R3,#&6555
- MOV R4,#&00000180
- MOV R5,#&15550100
- MOV R7,#&20
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .telepsound2
- STMFD R13!,{R0-R7,R14}
- BL objectrange
- BL rangetovolume
- MOV R0,#4
- MOV R1,#12
- MOV R3,#&1555
- MOV R4,#&00000180
- MOV R5,#&65550100
- MOV R7,#&20
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .goodysound
- STMFD R13!,{R0-R7,R14}
- BL rangetovolume
- MOV R0,#4
- MOV R1,#9
- MOV R3,#&3555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#10
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .blamsound
- STMFD R13!,{R0-R7,R14}
- BL rangetovolume
- SUBS R2,R2,#&10
- MOVMI R2,#0
- MOV R0,#3
- MOV R1,#2
- MOV R3,#&3555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#3
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .bonussound
- STMFD R13!,{R0-R7,R14}
- BL rangetovolume
- MOV R0,#2
- MOV R1,#4
- MOV R3,#&3555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#10
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .chinksound
- STMFD R13!,{R0-R7,R14}
- BL rangetovolume
- MOV R0,#2
- MOV R1,#5
- LDR R3,[R12,#v.colpitch]
- ADD R3,R3,#&6555
- MOV R4,#0
- MOV R5,#0
- MOV R7,#10
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .fallsound
- STMFD R13!,{R0-R7,R14}
- BL objectrange
- BL rangetovolume
- MOV R0,#4
- MOV R1,#8
- MOV R3,#&5555
- MOV R4,#&00000180
- MOV R5,#&35550100
- MOV R7,#&20
- BL bidforsound
- LDMFD R13!,{R0-R7,PC}
-
- .deathsound
- STMFD R13!,{R0-R3,R14}
- MOV R5,#1
- .sinloop
- MOV R0,R5
- MOV R1,#8
- MOV R2,#&7F
- MOV R3,#&5555
- ADD R3,R3,R5,LSL #8
- MOV R4,#0
- SWI Stasis_Sound
- MOV R0,R5
- MOV R1,#1
- MOV R2,#&3555
- MOV R3,#300
- SWI Stasis_Slide
- MOV R0,R5
- MOV R1,#0
- MOV R2,#0
- MOV R3,#400
- SWI Stasis_Slide
- MOV R0,R5
- MOV R1,#-64
- CMP R5,#2
- MOVEQ R1,#-32
- CMP R5,#3
- MOVEQ R1,#32
- CMP R5,#4
- MOVEQ R1,#64
- SWI Sound_Stereo
- ADD R5,R5,#1
- CMP R5,#5
- BLT sinloop
-
- LDMFD R13!,{R0-R3,PC}
-
- .objectrange
- STMFD R13!,{R2,R14}
- LDR R0,[R9,#8]
- LDR R2,[R12,#v.plxcent]
- SUB R0,R0,R2
- LDR R1,[R9,#12]
- LDR R2,[R12,#v.plycent]
- SUB R1,R1,R2
- LDMFD R13!,{R2,PC}
-
- .rangetovolume
- STMFD R13!,{R0-R1,R3,R14}
- CMP R1,#0
- RSBLT R1,R1,#0
- MOV R3,R1
- CMP R3,#128<<12
- MOVLT R3,#128<<12
- MOV R2,R0,ASL #6
- MYDIV R6,R2,R3
- CMP R6,#127
- MOVGT R6,#127
- CMP R6,#-127
- MOVLT R6,#-127
-
- CMP R0,#0
- RSBLT R0,R0,#0
-
-
- ADD R2,R0,R1
- MOV R2,R2,LSR #17
- RSB R2,R2,#&7F
- CMP R2,#0
- MOVLT R2,#0
- CMP R2,#&7F
- MOVGT R2,#&7F
- LDMFD R13!,{R0-R1,R3,PC}
-
- .bidforsound
- STMFD R13!,{R0-R10,R14}
- ADD R10,R12,#v.soundtab
- SUB R0,R0,#1
- AND R0,R0,#7
- ADD R10,R10,R0,LSL #soundtabshift
- LDR R0,[R10,#snd.ctr]
- CMP R0,#0
- BEQ soundclaim
- LDR R0,[R10,#snd.vol]
- CMP R0,R2
- BLE soundclaim
- LDMFD R13!,{R0-R10,PC}
- .soundclaim
- STR R1,[R10,#snd.sample]
- STR R2,[R10,#snd.vol]
- STR R3,[R10,#snd.pitch]
- STR R4,[R10,#snd.volslide]
- STR R5,[R10,#snd.pitchslide]
- CMP R6,#127
- MOVGT R6,#127
- CMP R6,#-127
- MOVLT R6,#-127
- STR R6,[R10,#snd.stereo]
- ORR R7,R7,#1<<31
- STR R7,[R10,#snd.ctr]
- LDMFD R13!,{R0-R10,PC}
-
- .makesounds
- STMFD R13!,{R14}
- ADD R11,R12,#v.soundtab
- ADD R11,R11,#snd.sizeof
- MOV R6,#7
- .makesoundloop
- LDR R8,[R11,#snd.vol]
- CMP R8,#0
- BEQ soundskip
- LDR R0,[R11,#snd.ctr]
- TST R0,#1<<31
- BEQ soundmade
- BIC R0,R0,#1<<31
- STR R0,[R11,#snd.ctr]
- RSB R0,R6,#9
- LDR R1,[R11,#snd.sample]
- LDR R2,[R11,#snd.vol]
- LDR R3,[R11,#snd.pitch]
- MOV R4,#0
- SWI Stasis_Sound
- RSB R0,R6,#9
- LDR R1,[R11,#snd.stereo]
- SWI Sound_Stereo
- LDR R0,[R11,#snd.volslide]
- CMP R0,#0
- BLNE setvolslide
- LDR R0,[R11,#snd.pitchslide]
- CMP R0,#0
- BLNE setpitchslide
- .soundmade
- LDR R0,[R11,#snd.ctr]
- LDR R1,[R12,#v.frameinc]
- SUBS R0,R0,R1
- MOVMI R0,#0
- STR R0,[R11,#snd.ctr]
- .soundskip
- ADD R11,R11,#snd.sizeof
- SUBS R6,R6,#1
- BGT makesoundloop
- LDMFD R13!,{PC}
-
- .setvolslide
- STMFD R13!,{R14}
- RSB R0,R6,#9
- MOV R1,#0
- LDR R3,[R11,#snd.volslide]
- MOV R2,R3,LSR #16
- AND R3,R3,#&FFFF
- SWI Stasis_Slide
- LDMFD R13!,{PC}
-
- .setpitchslide
- STMFD R13!,{R14}
- RSB R0,R6,#9
- MOV R1,#1
- LDR R3,[R11,#snd.pitchslide]
- MOV R2,R3,LSR #16
- AND R3,R3,#&FFFF
- SWI Stasis_Slide
- LDMFD R13!,{PC}
-
- .wipesoundtab
- STMFD R13!,{R14}
- ADD R10,R12,#v.soundtab
- MOV R3,#8
- MOV R0,#0
- .wipesoundtabloop
- STR R0,[R10,#snd.vol]
- STR R0,[R10,#snd.ctr]
- ADD R10,R10,#snd.sizeof
- SUBS R3,R3,#1
- BGT wipesoundtabloop
- LDMFD R13!,{PC}
-
- .batsound
- STMFD R13!,{R14}
- LDR R0,[R12,#v.magnet]
- CMP R0,#0
- BGT batsoundend
- .batsilence
- MOV R0,#0
- SWI Stasis_GetControlAddress
- LDR R1,[R0,#28]
- ORR R1,R1,#1
- STR R1,[R0,#28]
- .batsoundend
- LDMFD R13!,{PC}
-
- .magnetsound
- STMFD R13!,{R14}
- MOV R0,#0
- SWI Stasis_GetControlAddress
- LDR R0,[R0,#28]
- TST R0,#1
- BEQ notrigmag
- LDR R2,[R12,#v.plxcent]
- LDR R0,[R12,#v.xpos]
- SUB R0,R0,R2
- LDR R2,[R12,#v.plycent]
- LDR R1,[R12,#v.ypos]
- SUB R1,R1,R2
- BL rangetovolume
- MOV R5,R2
- SUBS R2,R2,#&18
- MOVLE R2,#1
- MOV R0,#1
- MOV R1,#11
- MOV R3,#&3555
- MOV R4,#0
- SWI Stasis_Sound
- MOV R0,#1
- MOV R1,#0
- MOV R2,R5
- MOV R3,#300
- SWI Stasis_Slide
-
-
- .notrigmag
- MOV R0,#1
- MOV R1,#0
- MOV R2,#0
- LDR R3,[R12,#v.magpitch]
- MOV R4,#%1011
- SWI Stasis_Sound
-
- LDMFD R13!,{PC}
-
- .resetplotwindow
- STMFD R13!,{R14}
- MOV R0,#1
- MOV R1,#((canvaswidth-windwidth)/2+4)<<12
- MOV R2,#0
- MOV R3,#(243+(canvaswidth-windwidth)/2)<<12
- MOV R4,#240<<12
- SWI Amnesia_SetWindow ;setup the plot window
- LDMFD R13!,{PC}
-
- .stretchplotwindow
- STMFD R13!,{R14}
- MOV R0,#1
- MOV R1,#((canvaswidth-windwidth)/2-4)<<12
- MOV R2,#-8<<12
- MOV R3,#(251+(canvaswidth-windwidth)/2)<<12
- MOV R4,#248<<12
- SWI Amnesia_SetWindow ;setup the plot window
- LDMFD R13!,{PC}
-
- .setup
- STMFD R13!,{R14}
- ADD R0,R12,#v.helladr
- MOV R1,#128*96
- ADR R2,hellname
- MOV R3,#0
- SWI XAmnesia_ClaimBlock
- BVS setupfailed
- ADD R0,R12,#v.scanadr
- MOV R1,#2*64*64
- ADR R2,scanname
- MOV R3,#0
- SWI XAmnesia_ClaimBlock
- BVS setupfailed
- ADD R0,R12,#v.storesadr
- MOV R1,#5120
- ADR R2,storesname
- MOV R3,#0
- SWI XAmnesia_ClaimBlock
- BVS setupfailed
- ADD R0,R12,#v.paperadr
- MOV R1,#5120
- ADR R2,papername
- MOV R3,#0
- SWI XAmnesia_ClaimBlock
- BVS setupfailed
- ADD R0,R12,#v.canvasadr
- MOV R1,#canvaswidth*canvasheight
- ADR R2,canvasname
- MOV R3,#0
- SWI XAmnesia_ClaimBlock
- BVS setupfailed
- MOV R0,#batstab
- MOV R1,#1
- ADR R2,battablename
- MOV R3,#8
- MOV R4,#40
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- MOV R0,#blockstab
- MOV R1,#1
- ADR R2,blockstablename
- MOV R3,#256
- MOV R4,#40
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- MOV R0,#ballstab
- MOV R1,#1
- ADR R2,ballstablename
- MOV R3,#48
- MOV R4,#44
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- MOV R0,#bulletstab
- MOV R1,#0
- ADR R2,bulletstablename
- MOV R3,#32
- MOV R4,#32
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- MOV R0,#starstab
- MOV R1,#1
- ADR R2,starstablename
- MOV R3,#8
- MOV R4,#36
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- MOV R0,#edgetab
- MOV R1,#0
- ADR R2,edgetablename
- MOV R3,#128
- MOV R4,#36
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- MOV R0,#decortab
- MOV R1,#0
- ADR R2,decortablename
- MOV R3,#128
- MOV R4,#40
- SWI XAmnesia_ClaimTable
- BVS setupfailed
- BL textsetup
- BVS setupfailed
- MOV R0,#0
- MOV R1,#-1024<<12
- MOV R2,#-1024<<12
- MOV R3,#1024<<12
- MOV R4,#1024<<12
- SWI Amnesia_SetWindow ;setup the game window
-
- BL resetplotwindow
- MOV R0,#0
- STR R0,[R12,#v.exit]
- STR R0,[R12,#v.framectr]
- STR R0,[R12,#v.bateffect]
- STR R0,[R12,#v.saveslot]
- STR R0,[R12,#v.loadslot]
- STR R0,[R12,#v.newlevelctr]
- MOV R0,#-1
- STR R0,[R12,#v.loadeddrop]
- ADD R1,R12,#v.warptimer
- MOV R2,#0
- MOV R3,#7
- .loop85
- MOV R0,R2,ASR #8
- STR R0,[R1],#4
- ADD R2,R2,#3*&80000/7
- SUBS R3,R3,#1
- BGT loop85
-
- MOV R0,#1
- STR R0,[R12,#v.music]
- STR R0,[R12,#v.quality]
- STR R0,[R12,#v.mousestep]
- MOV R0,#1
- STR R0,[R12,#v.lineskip]
- MOV R0,#0
- SWI Sound_Volume
- MOV R1,#0
- CMP R0,#64
- MOVGT R1,#1
- CMP R0,#96
- MOVGT R1,#2
- CMP R0,#112
- MOVGT R1,#3
- MOV R0,#0
- SWI Sound_Enable
- CMP R0,#1
- MOVEQ R1,#0
- STR R1,[R12,#v.soundvol]
- LDMFD R13!,{PC}
- .setupfailed
- ADR R0,setupfailedtext
- SWI OS_GenerateError
-
- .setupsounds
- STMFD R13!,{R14}
- MOV R0,#4
- MOV R1,#0
- MOV R2,#48
- MOV R3,#0
- MOV R4,#0
- SWI Sound_Configure
- MOV R0,#8
- MOV R1,#0
- MOV R2,#0
- MOV R3,#0
- MOV R4,#0
- SWI Sound_Configure
- ADR R0,soundcom1
- SWI XOS_CLI
- LDMFD R13!,{PC}
- .soundcom1
- DCB "PlayVoices 8",0
- ALIGN
-
- .setupcanvas
- STMFD R13!,{R14}
- LDR R0,[R12,#v.canvasadr]
- SWI FastSpr_ScreenBank
- MOV R0,#0
- MOV R1,#0
- MOV R2,#320
- MOV R3,#240
- SWI FastSpr_SetClipWindow
- LDMFD R13!,{PC}
-
- .setuppaper
- STMFD R13!,{R14}
- LDR R1,[R12,#v.paperadr]
- ADD R0,R0,R1
- STMFD R13!,{R0}
- ADD R0,R0,#4
- SWI FastSpr_ScreenBank
- LDMFD R13!,{R4}
- LDR R0,[R12,#v.hbytes]
- LDR R2,[R4,R0]
- LDR R3,[R4,R0,LSL #1]
- MOV R0,#0
- MOV R1,#0
-
- SWI FastSpr_SetClipWindow
- LDMFD R13!,{PC}
-
- .setupvars
- STMFD R13!,{R14}
- MOV R0,#0
- MOV R1,#v.sizeof
- ADR R2,varsname
- MOV R3,#1; static
- SWI XAmnesia_ClaimBlock
- BVS nomemory
- MOV R12,R0
- MOV R0,#1
- STR R0,[R12,#v.bank]
- MOV R0,#7
- STR R0,[R12,#v.mousesens]
- MOV R0,#0
- STR R0,[R12,#v.backdrop]
- STR R0,[R12,#v.levelnet]
- SWI OS_ReadMonotonicTime
- STR R0,[R12,#v.rnseed]
- LDMFD R13!,{PC}
-
- .bindmouse
- STMFD R13!,{R14}
- MOV R0,#21
- ADR R1,bindblock
- SWI OS_Word
- LDMFD R13!,{PC}
- .bindblock
- DCB 1,0,0,0,0,0,5,0,4
- ALIGN
-
- .homebat
- STMFD R13!,{R14}
- LDR R0,[R12,#v.ballxhome]
- STR R0,[R12,#v.xpos]
- STR R0,[R12,#v.plxcent]
- LDR R1,[R12,#v.ballyhome]
- ADD R1,R1,#128<<12
- STR R1,[R12,#v.ypos]
- STR R1,[R12,#v.plycent]
- MOV R0,#0
- STR R0,[R12,#v.xvec]
- STR R0,[R12,#v.yvec]
- STR R0,[R12,#v.ballxpos]
- STR R0,[R12,#v.ballypos]
- BL justmovedbat
- MOV R0,#21
- ADR R1,mouseblock
- SWI OS_Word
- LDMFD R13!,{PC}
- .mouseblock
- DCB 3
- DCB 128
- DCB 2
- DCB 0
- DCB 2
- ALIGN
- .levelcheat
- DCB "OddBallCheat",0
- ALIGN
-
- .setupplayer
- STMFD R13!,{R14}
- MOV R0,#ballstab
- SWI Amnesia_WipeTable
- MOV R3,#0
- MOV R4,#0
- BL makeball
- BL homebat
- LDR R3,[R12,#v.diff]
- MOV R0,#16<<12
- CMP R3,#1
- MOVEQ R0,#4<<12
- CMP R3,#2
- MOVEQ R0,#8<<12
- STR R0,[R12,#v.ballspeedlim]
- STR R0,[R12,#v.ballspeed]
- MOV R0,#0
- CMP R3,#3
- MOVEQ R0,#1<<5
- CMP R3,#2
- MOVEQ R0,#1<<2
- STR R0,[R12,#v.ballmin]
- MOV R0,#0
- STR R0,[R12,#v.dead]
- STR R0,[R12,#v.plscore]
- STR R0,[R12,#v.helltimer]
- MOV R0,#2
- STR R0,[R12,#v.pllives]
- MOV R0,#1
- STR R0,[R12,#v.scorechange]
- STR R0,[R12,#v.liveschange]
- STR R0,[R12,#v.ballschange]
- STR R0,[R12,#v.goodychange]
- MOV R0,#-1
- STR R0,[R12,#v.lastballs]
- STR R0,[R12,#v.lastlives]
- STR R0,[R12,#v.lastscore]
- ADR R0,levelcheat
- ADD R1,R12,#v.levelno
- MOV R2,#4
- MOV R3,#0
- MOV R4,#1
- SWI XOS_ReadVarVal
-
- MOVVS R0,#1
- STRVS R0,[R12,#v.levelno]
- CMP R4,#1
- MOVNE R0,#0
- STRNE R0,[R12,#v.levelno]
- LDR R0,[R12,#v.levelno]
- CMP R0,#0
- MOVEQ R0,#1
- STREQ R0,[R12,#v.levelno]
- MOV R0,#7
- STR R0,[R12,#v.mousespeed]
- MOV R0,#0
- STR R0,[R12,#v.magnet]
- STR R0,[R12,#v.blueball]
- STR R0,[R12,#v.ballstops]
- STR R0,[R12,#v.goodycsr]
- LDR R0,[R12,#v.diff]
- RSB R0,R0,#3
- STR R0,[R12,#v.scanspeed]
- LDR R0,[R12,#v.diff]
- CMP R0,#3
- MOV R0,#1
- MOVGE R0,#0
- STR R0,[R12,#v.lineradar]
- LDR R0,[R12,#v.diff]
- CMP R0,#2
- MOV R0,#0
- MOVLE R0,#11
- STR R0,[R12,#v.good0]
- LDR R0,[R12,#v.diff]
- CMP R0,#1
- MOV R0,#0
- MOVLE R0,#5
- STR R0,[R12,#v.good1]
- MOV R0,#0
- STR R0,[R12,#v.good2]
- STR R0,[R12,#v.good3]
- MOV R0,#&3555
- STR R0,[R12,#v.magpitch]
- LDMFD R13!,{PC}
-
- .paperwipe
- STMFD R13!,{R14}
- LDR R10,[R12,#v.paperadr]
- LDR R11,[R12,#v.storesadr]
- ADD R11,R11,R0
- ADD R10,R10,R0
- LDR R14,[R12,#v.hbytes]
- LDR R0,[R11,R14]
- LDR R1,[R11,R14,LSL #1]
- ADD R11,R11,#4
- ADD R10,R10,#4
- CMP R0,#80
- BEQ wipe80
- CMP R0,#64
- BNE badwipe
- .loop14
- STMFD R13!,{R1,R10,R11}
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- LDMIA R11!,{R0-R7}
- STMIA R10!,{R0-R7}
- LDMFD R13!,{R1,R10,R11}
- ADD R10,R10,R14
- ADD R11,R11,R14
- SUBS R1,R1,#1
- BGT loop14
- LDMFD R13!,{PC}
- .wipe80
- .loop15
- STMFD R13!,{R1,R10,R11}
- LDMIA R11!,{R0-R9}
- STMIA R10!,{R0-R9}
- LDMIA R11!,{R0-R9}
- STMIA R10!,{R0-R9}
- LDMFD R13!,{R1,R10,R11}
- ADD R10,R10,R14
- ADD R11,R11,R14
- SUBS R1,R1,#1
- BGT loop15
- LDMFD R13!,{PC}
-
- .badwipe
- SWI OS_WriteS
- DCB "Non standard paperwipe",10,13,0
- ALIGN
- LDMFD R13!,{PC}
-
- .setupscreen
- STMFD R13!,{R14}
- MOV R0,#0
- SWI FastSpr_ScreenBank
- MOV R0,#0
- MOV R1,#0
- MOV R2,#320
- MOV R3,#256
- SWI FastSpr_SetClipWindow
- LDMFD R13!,{PC}
-
- .vduread
- STMFD R13!,{R14}
- MOV R0,#113
- MOV R1,#1
- SWI OS_Byte
- ADR R0,vdublock
- ADD R1,R12,#v.screenadr
- SWI OS_ReadVduVariables
- LDR R0,[R12,#v.screenadr]
- STR R0,[R12,#v.screenuse]
- BL bindmouse
- LDMFD R13!,{PC}
- .vdublock
- DCD 149;disp.hardware scr start
- DCD 150;mode size
- DCD 6
- DCD -1
-
-
- .backtranslate
- STMFD R13!,{R4-R6,R14}
- LDR R6,[R12,#v.levelnet]
- LDR R4,[R6,#net.xsize]
- LDR R5,[R6,#net.ysize]
- SUB R0,R0,R6
- SUB R0,R0,#net.data
- MYDIV R1,R0,R4
- CMP R0,R4
- BGE backoffnet
- CMP R1,R5
- BGE backoffnet
- SUB R0,R0,R4,ASR #1
- SUB R1,R1,R5,ASR #1
- MOV R0,R0,ASL #12
- MOV R1,R1,ASL #12
- MOV R4,#96
- MUL R0,R4,R0
- MUL R1,R4,R1
- LDMFD R13!,{R4-R6,PC}
- .backoffnet
- MOV PC,#0; for the moment.
-
-
- .translate
- DIV96 R0,R2
- DIV96 R1,R3
- .transconv
- STMFD R13!,{R2-R3,R5-R6}
- LDR R6,[R12,#v.levelnet]
- LDR R4,[R6,#net.xsize]
- LDR R5,[R6,#net.ysize]
- ADDS R2,R2,R4,ASR #1
- BMI transout
- CMP R2,R4
- BGE transout
- ADDS R3,R3,R5,ASR #1
- BMI transout
- CMP R3,R5
- BGE transout
- MUL R4,R3,R4; y coord
- ADD R4,R4,R2
- ADD R4,R4,R6
- ADD R4,R4,#net.data
- LDMFD R13!,{R2-R3,R5-R6}
- BIC R14,R14,#1<<28
- MOVS PC,R14
- .transout
- ADD R4,R6,#net.data
- LDMFD R13!,{R2-R3,R5-R6}
- MOV R2,#0
- MOV R3,#0
- ORR R14,R14,#1<<28
- MOVS PC,R14
-
-
- macro DIV96 m0,m1
- {
- MOV m0,m0,ASR #12
- BIC R13,R13,#1
- CMP m0,#0
- RSBLT m0,m0,#0
- ORRLT R13,R13,#1
- ADD m0,m0,#48
- MOV m1,#0
- CMP m0,#3<<12
- SUBGE m0,m0,#3<<12
- ORRGE m1,m1,#1<<7
- CMP m0,#3<<11
- SUBGE m0,m0,#3<<11
- ORRGE m1,m1,#1<<6
- CMP m0,#3<<10
- SUBGE m0,m0,#3<<10
- ORRGE m1,m1,#1<<5
- CMP m0,#3<<9
- SUBGE m0,m0,#3<<9
- ORRGE m1,m1,#1<<4
- CMP m0,#3<<8
- SUBGE m0,m0,#3<<8
- ORRGE m1,m1,#1<<3
- CMP m0,#3<<7
- SUBGE m0,m0,#3<<7
- ORRGE m1,m1,#1<<2
- CMP m0,#3<<6
- SUBGE m0,m0,#3<<6
- ORRGE m1,m1,#1<<1
- CMP m0,#3<<5
- SUBGE m0,m0,#3<<5
- ORRGE m1,m1,#1
- TST R13,#1
- RSBNE m1,m1,#0
- RSBNE m0,m0,#95
- BIC R13,R13,#3
- }
-
-
-
- .pathname
- DCB "OddBall$Path",0
- .levelpathname
- DCB "OddBall$LevelPath",0
- .savenamesfullname
- DCB "<OddBall$FilePath>^.SaveNames",0
- .savenamesname
- DCB "SaveNames",0
- .hinamesfullname
- DCB "<OddBall$FilePath>^.HiScores",0
- .hinamesname
- DCB "HiScores",0
- .hellname
- DCB "Hell",0
- .scanname
- DCB "Scanner",0
- .canvasname
- DCB "Canvas",0
- .storesname
- DCB "Stores",0
- .papername
- DCB "Paper",0
- .battablename
- DCB "Bat",0
- .ballstablename
- DCB "Balls",0
- .bulletstablename
- DCB "Bullets",0
- .blockstablename
- DCB "Blocks",0
- .starstablename
- DCB "Stars",0
- .decortablename
- DCB "Decor",0
- .edgetablename
- DCB "Edges",0
-
- .batname
- DCB "Graphics.FSPbat",0
- .ballsname
- DCB "Graphics.FSPBalls",0
- .blocksname
- DCB "Graphics.FSPBlock<Oddball$BackNo>",0
- .charsname
- DCB "Graphics.FSPChars",0
- .backdropname
- DCB "Graphics.BackDrop<Oddball$BackNo>",0
- .levelnetname
- DCB "Levels<OddBall$Maze>",0
- .starsname
- DCB "Graphics.FSPStars",0
- .decorname
- DCB "Graphics.FSPDecor",0
- .exploname
- DCB "Graphics.FSPExplo",0
- .edgename
- DCB "Graphics.FSPEdge<OddBall$BackNo>",0
- .goodiesname
- DCB "Graphics.FSPGoodies",0
- .arrowname
- DCB "Graphics.FSPArrow",0
- .sidepicname
- DCB "Graphics.SideSpr",0
- .topdataname
- DCB "Graphics.TopData",0
- ALIGN
-
- .levelcount
- STMFD R13!,{R14}
- LDR R11,[R12,#v.levelnet]
- LDR R0,[R11,#net.xsize]
- LDR R1,[R11,#net.ysize]
- MUL R9,R0,R1
- CMP R9,#&100000
- MOVGT R9,#0
- ADD R10,R11,#net.data
- MOV R8,#0
- .levelcountloop
- LDRB R0,[R10],#1
- CMP R0,#&AB
- MOVEQ R1,#1
- STREQ R1,[R12,#v.scanlock]
- CMP R0,#hit1
- CMPNE R0,#hit2
- ADDEQ R8,R8,#1
-
- SUBS R9,R9,#1
- BGT levelcountloop
- STR R8,[R12,#v.blocknum]
- STR R8,[R12,#v.blocksleft]
- LDMFD R13!,{PC}
-
- .startfind
- STMFD R13!,{R14}
- MOV R0,#0
- STR R0,[R12,#v.ballxhome]
- STR R0,[R12,#v.ballyhome]
- LDR R11,[R12,#v.levelnet]
- LDR R0,[R11,#net.xsize]
- LDR R1,[R11,#net.ysize]
- MUL R9,R0,R1
- CMP R9,#&100000
- MOVGT R9,#0
- ADD R10,R11,#net.data
- MOV R8,#0
- .startfindloop
- LDRB R0,[R10],#1
- CMP R0,#&FF
- BLEQ setballhome
- SUBS R9,R9,#1
- BGT startfindloop
- LDMFD R13!,{PC}
-
- .setballhome
- STMFD R13!,{R14}
- SUB R0,R10,#1
- MOV R1,#0
- STRB R1,[R0]
- BL backtranslate
- STR R0,[R12,#v.ballxhome]
- STR R1,[R12,#v.ballyhome]
- LDMFD R13!,{PC}
-
-
-
-
- .levelname
- DCB "OddBall$No",0
- ALIGN
-
-
- .vetlevel
- STMFD R13!,{R14}
- BL scanset
- MOV R0,#0
- STR R0,[R12,#v.scanlock]
-
- LDR R0,[R12,#v.levelnet]
- LDR R1,[R0,#net.xsize]
- MOV R2,#96<<12
- MUL R1,R2,R1
- STR R1,[R12,#v.xlim]
- LDR R1,[R0,#net.ysize]
- MUL R1,R2,R1
- STR R1,[R12,#v.ylim]
- MOV R0,#0
- MOV R1,#0
- BL levelcount
- BL backload
- LDMFD R13!,{PC}
-
- .loadlevel
- LDR R0,[R12,#v.demomode]
- CMP R0,#1
- BEQ loadgame
- STMFD R13!,{R14}
- LDR R0,[R12,#v.levelno]
- STR R0,[R12,#v.loadedlev]
- MOV R0,#blockstab
- SWI Amnesia_WipeTable
-
- ADD R0,R12,#v.levelnet
- LDR R0,[R0]
- CMP R0,#0
- SWINE Amnesia_ReleaseBlock
- .badloadloop
- MOV R0,#6
- ADR R1,levelnetname
- ADR R2,levelpathname
- LDR R4,[R12,#v.levelno]
- SUB R4,R4,#1
- TST R4,#&400
- AND R4,R4,#&FF
- ADDNE R4,R4,#64
- MOV R4,R4,LSL #3
- SWI Blitz_HammerOp
- CMP R4,#0
- BNE dolevload
- LDR R1,[R12,#v.levelno]
- ADD R1,R1,#1
- STR R1,[R12,#v.levelno]
- AND R1,R1,#&FF
- CMP R1,#41
- BLT badloadloop
- B nolevelerr
- .dolevload
- MOV R0,#2
- SWI Blitz_HammerOp
- STMFD R13!,{R0-R4}
- ADD R0,R12,#v.levelnet
- MOV R1,R3
- ADR R2,levelnetname
- MOV R3,#0
- SWI Amnesia_ClaimBlock
- LDMFD R13!,{R0-R4}
- LDR R3,[R12,#v.levelnet]
- MOV R0,#3
- SWI Blitz_HammerOp
- .loadblockstab
- MOV R0,#6
- ADR R1,levelnetname
- ADR R2,levelpathname
- LDR R4,[R12,#v.levelno]
- SUB R4,R4,#1
- TST R4,#&400
- AND R4,R4,#&FF
- ADDNE R4,R4,#64
- MOV R4,R4,LSL #3
- ADD R4,R4,#4
- SWI Blitz_HammerOp
- CMP R4,#0
- BEQ noblocktab
- MOV R0,#blockstab
- SWI Amnesia_GetTableAddress
- ADD R3,R0,#16
- MOV R0,#3
- SWI Blitz_HammerOp
- .noblocktab
- ;MOV R0,#blockstab
- ;ADR R1,blockstabname
- ;ADR R2,levelpathname
- ;SWI XAmnesia_LoadTable
- BL vetlevel
- BL startfind
- MOV R0,#1
- STR R0,[R12,#v.sparks]
- STR R0,[R12,#v.redball]
- MOV R0,#0
- STR R0,[R12,#v.warped]
- LDR R1,[R12,#v.levelnet]
- LDR R0,[R1,#net.xgrav]
- STR R0,[R12,#v.xgrav]
- LDR R0,[R1,#net.ygrav]
- STR R0,[R12,#v.ygrav]
- LDR R0,[R1.#net.backdrop]
- TST R0,#1<<31
- BLNE goodykill
- LDMFD R13!,{PC}
-
- .goodykill
- MOV R0,#0
- STR R0,[R12,#v.good0]
- STR R0,[R12,#v.good1]
- STR R0,[R12,#v.good2]
- STR R0,[R12,#v.good3]
- STR R0,[R12,#v.scanspeed]
- STR R0,[R12,#v.lineradar]
- MOV R0,#1
- STR R0,[R12,#v.goodychange]
- MOV PC,R14
-
- .backload
- STMFD R13!,{R14}
- LDR R0,[R12,#v.loadeddrop]
- LDR R1,[R12,#v.levelnet]
- LDR R1,[R1,#net.backdrop]
- AND R1,R1,#&FF
- CMP R0,R1
- LDMEQFD R13!,{PC}
- .backabortins
- BL setbackvar
- ADD R0,R12,#v.backdrop
- LDR R0,[R0]
- CMP R0,#0
- SWINE Amnesia_ReleaseBlock
- ADD R0,R12,#v.backdrop
- ADR R1,backdropname
- ADR R2,pathname
- SWI XAmnesia_LoadHammered
- BVS backabort
- MOV R0,#edgetab
- SWI FastSpr_GetPointer
- LDR R0,[R0]
- CMP R0,#0
- SWINE Amnesia_ReleaseBlock
- MOV R0,#edgetab
- SWI FastSpr_GetPointer
- ADR R1,edgename
- ADR R2,pathname
- SWI XAmnesia_LoadHammered
-
- MOV R0,#blockstab
- SWI FastSpr_GetPointer
- LDR R0,[R0]
- CMP R0,#0
- SWINE Amnesia_ReleaseBlock
- MOV R0,#blockstab
- SWI FastSpr_GetPointer
- ADR R1,blocksname
- ADR R2,pathname
- SWI XAmnesia_LoadHammered
-
- LDR R0,[R12,#v.levelnet]
- LDR R0,[R0,#net.backdrop]
- AND R0,R0,#&FF
- STR R0,[R12,#v.loadeddrop]
- LDMFD R13!,{PC}
-
- .backabort
- LDR R1,[R12,#v.levelnet]
- ADD R1,R1,#net.backdrop
- LDR R0,[R1]
- MOV R2,R0
- CMP R0,#0
- MOVLE R0,#1
- SUBGT R0,R0,#1
- AND R0,R0,#&FF
- BIC R2,R2,#&FF
- ORR R0,R2,R0
- STR R0,[R1]
- B backabortins
-
- .setbackvar
- STMFD R13!,{R14}
- LDR R0,[R12,#v.levelnet]
- LDR R0,[R0,#net.backdrop]
- AND R0,R0,#&FF
- STR R0,[R12,#v.temp0]
- ADR R0,backname
- ADD R1,R12,#v.temp0
- MOV R2,#4
- MOV R3,#0
- MOV R4,#1
- SWI OS_SetVarVal
- LDMFD R13!,{PC}
-
- .backname
- DCB "Oddball$BackNo",0
- ALIGN
-
-
- .loadfiles
- STMFD R13!,{R14}
- MOV R0,#edgetab
- SWI FastSpr_GetPointer
- MOV R1,#0
- STR R1,[R0]
- MOV R0,#blockstab
- SWI FastSpr_GetPointer
- MOV R1,#0
- STR R1,[R0]
-
- MOV R0,#batstab
- SWI FastSpr_GetPointer
- ADR R1,batname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#ballstab
- SWI FastSpr_GetPointer
- ADR R1,ballsname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#texttab
- SWI FastSpr_GetPointer
- ADR R1,charsname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#starstab
- SWI FastSpr_GetPointer
- ADR R1,starsname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#decortab
- SWI FastSpr_GetPointer
- ADR R1,decorname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#explotab
- SWI FastSpr_GetPointer
- ADR R1,exploname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#goodytab
- SWI FastSpr_GetPointer
- ADR R1,goodiesname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- MOV R0,#arrowtab
- SWI FastSpr_GetPointer
- ADR R1,arrowname
- ADR R2,pathname
- SWI Amnesia_LoadHammered
- BL setsavepath
- ;load the savenames file
- ADD R0,R12,#v.savenames
- ADR R1,savenamesfullname
- MOV R2,#0
-
- SWI XAmnesia_LoadFile
-
- ADD R0,R12,#v.savenames
- LDR R1,[R0]
- CMP R1,#0
- MOV R1,#256
- ADR R2,savenamesname
- MOV R3,#0
- SWIEQ Amnesia_ClaimBlock
-
- ADD R0,R12,#v.hinames
- ADR R1,hinamesfullname
- MOV R2,#0
-
- SWI XAmnesia_LoadFile
-
- ADD R0,R12,#v.hinames
- LDR R1,[R0]
- CMP R1,#0
- MOV R1,#392
- ADR R2,hinamesname
- MOV R3,#0
- SWIEQ Amnesia_ClaimBlock
- LDMFD R13!,{PC}
-
- .wipem
- .loop8b
- STR R0,[R1],#4
- CMP R1,R2
- BLT loop8b
- MOV PC,R14
-
- .random
- LDR R0,[R12,#v.rnseed]
- ADD R0,R0,#137
- EOR R0,R0,R0,ROR #13
- STR R0,[R12,#v.rnseed]
- MOV PC,R14
-
- .writeerror
- STMFD R13!,{R14}
- ADD R5,R0,#4
- MOV R0,R1
- BL message
- MOV R3,#255
- ADR R4,errortext
- .weloop
- LDRB R0,[R5],#1
- CMP R0,#32
- BLT weskip
- CMP R0,#123
- MOVGE R0,#32
- CMP R0,#96
- BICGE R0,R0,#32
- STRB R0,[R4],#1
- SUBS R3,R3,#1
- BGT weloop
- .weskip
- RSB R3,R3,#255
- MOV R3,R3,LSL #15
- ADD R3,R3,#160<<12
- STR R3,errormes
- MOV R0,#0
- STRB R0,[R4]
- ADR R0,errormes
- BL message
- LDMFD R13!,{PC}
- .errormes
- DCD 160<<12,220<<12,-2<<12,0,&02000001,0
- .errortext
- DBB 256
- ALIGN
-
- .stonetab
- INCBIN <OddBall$Path>Object.StoneTab
-
- ; ***** TEXT ENTRIES *****
-
- .varsname
- DCB "Vars",0
-
- ALIGN
- .diverror
- ADR R0,diverrortext
- SWI OS_GenerateError
- .diverrortext
- DCD &666
- DCB "Division error",0
- ALIGN
- .nomemory
- ADR R0,nomemerrtext
- SWI OS_GenerateError
- .nomemerrtext
- DCD &666
- DCB "Not enough memory to begin application",0
- ALIGN
- .loadfailedtext
- DCD &666
- DCB "Failed to load sprite file",0
- ALIGN
- .setupfailedtext
- DCD &666
- DCB "Failed to set up tables",0
- ALIGN
- .nolevelerr
- ADR R0,noleveltext
- SWI OS_GenerateError
- .noleveltext
- DCD &666
- DCB "Cannot find level file",0
-
-
- ALIGN
- .hellshift
- INCBIN <OddBall$Path>Object.HellShift
- .linewrites
- INCBIN <OddBall$Path>Object.LineWrites
- ALIGN
- .windback
- INCBIN <OddBall$Path>Object.WindBack
- .blockwindback
- INCBIN <OddBall$Path>Object.BlockWind
- .fade
- INCBIN <OddBall$Path>Object.Fade
- .nibprint
- LDR R8,[R12,#v.plotnibble]
- B printins
- .print
- MOV R8,#0
- .printins
- INCBIN <OddBall$Path>Object.Printer
- .printnumber
- INCBIN <OddBall$Path>Object.Number
- .printstring
- INCBIN <OddBall$Path>Object.String
- .slideback
- INCBIN <OddBall$Path>Object.SlideBack
- .texthandler
- LDR R8,[R12,#v.plotnibble]
- INCBIN <OddBall$Path>Object.TextHandle
- .message ;Do not separate these two INCBINs
- INCBIN <OddBall$Path>Object.Message
- .textsetup
- INCBIN <OddBall$Path>Object.TextSetup
- .circletab
- INCBIN <OddBall$Path>Object.CircleTab
- .progend
-