base:quest_for_cash
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:quest_for_cash [2015-04-17 04:33] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | Utilities are not included here. | ||
+ | < | ||
+ | ; Quest for Cash | ||
+ | ; -------------- | ||
+ | ; 2006, 2007 Hannu Nuotio | ||
+ | ; Quest for Cash is a remake of the crap QBasic game of the same name (and author). | ||
+ | |||
+ | ; Start of project: 5.10.2006 | ||
+ | ; v.0.2 - 10.3.2007 | ||
+ | ; v.0.1 - 9.3.2007 | ||
+ | ; v.0.0.9 - 8.3.2007 | ||
+ | ; v.0.0.8 - 6.3.2007 | ||
+ | ; v.0.0.7 - 25.11.2006 | ||
+ | ; v.0.0.6 - 23.11.2006 | ||
+ | ; v.0.0.5 - 21.11.2006 | ||
+ | ; v.0.0.4 - 20.10.2006 | ||
+ | ; v.0.0.3 - 11.10.2006 | ||
+ | ; v.0.0.2 - 9.10.2006 | ||
+ | ; v.0.0.1 - 5.10.2006 | ||
+ | |||
+ | ; Compiles with ACME 0.91 | ||
+ | ; # acme --cpu 6502 -f cbm -o qfc.prg qfc.a | ||
+ | |||
+ | ; Type SYS 3072 to start or use crunched version. | ||
+ | |||
+ | ; Known bugs: | ||
+ | |||
+ | ; TODO: | ||
+ | |||
+ | ; Memory map: | ||
+ | ; $0000-$00ff : temp zero page variables | ||
+ | ; $0100-$03ff : unused | ||
+ | ; $0400-$07e7 : screen memory | ||
+ | ; $0800-$0bff : font memory | ||
+ | ; $0c00-$xxxx : code | ||
+ | ; $xxxx-$yyyy : variables (reused characters) | ||
+ | ; $yyyy-$kkkk : color lookup table | ||
+ | ; $kkkk-$zzzz : strings | ||
+ | ; $zzzz-$jjjj : compressed levels | ||
+ | ; $d800-$dbe7 : color memory | ||
+ | ; $zzzz-$ffff : unused | ||
+ | |||
+ | ; Notes: | ||
+ | |||
+ | ; colors: | ||
+ | ; 0 = black | ||
+ | ; 1 = white | ||
+ | ; 2 = red | ||
+ | ; 3 = cyan | ||
+ | ; 4 = purple | ||
+ | ; 5 = green | ||
+ | ; 6 = blue | ||
+ | ; 7 = yellow | ||
+ | ; 8 = orange | ||
+ | ; 9 = brown | ||
+ | ; 10 = lred | ||
+ | ; 11 = dgray | ||
+ | ; 12 = gray | ||
+ | ; 13 = lgreen | ||
+ | ; 14 = lblue | ||
+ | ; 15 = lgrey | ||
+ | |||
+ | |||
+ | ; --- Constants | ||
+ | |||
+ | !ct scr ; C64 screencode | ||
+ | |||
+ | levels = 15 ; the amount of levels | ||
+ | |||
+ | joystick = 0 ; joystick: 0 = port 2, 1 = userport | ||
+ | easymode = 0 ; easier game (grid and eleb visible) | ||
+ | |||
+ | ; - hw addresses | ||
+ | !if joystick = 0 { | ||
+ | joyport = $dc00 ; joystick port 2 | ||
+ | joypddr = $dc02 ; joystick port 2 data direction register | ||
+ | } else { | ||
+ | joyport = $dd01 ; userport | ||
+ | joypddr = $dd03 ; userport data direction register | ||
+ | } | ||
+ | screen = $0400 ; screen address | ||
+ | color = $d800 ; color ram address | ||
+ | scrtocol = $d4 ; screen-> | ||
+ | vicborder = $d020 ; border color register | ||
+ | vicbackgnd = $d021 ; background color register | ||
+ | vicraster = $d012 ; raster compare register | ||
+ | |||
+ | ; - input consts | ||
+ | joyrepeat = 20 ; joystick repeat delay | ||
+ | rastercmp = 200 ; raster line to wait for | ||
+ | |||
+ | ; - tiles | ||
+ | tground = $40 | ||
+ | twall = $41 | ||
+ | tswall = $42 | ||
+ | tdoor1 = $43 | ||
+ | tdoor2 = $44 | ||
+ | tsdoor = $45 | ||
+ | tkey1 = $46 | ||
+ | tkey2 = $47 | ||
+ | tskey = $48 | ||
+ | tbomb = $49 | ||
+ | tlbomb = $4a | ||
+ | tunused1 = $4b | ||
+ | tunused2 = $4c | ||
+ | trock = $4d | ||
+ | trockw = $4e | ||
+ | trockh = $4f | ||
+ | thole = $50 | ||
+ | twater = $51 | ||
+ | tplank = $52 | ||
+ | tplankw = $53 | ||
+ | telea = $54 | ||
+ | teleb = $55 | ||
+ | teles = $56 | ||
+ | ttele = $57 | ||
+ | tzapd = $58 | ||
+ | tzapu = $59 | ||
+ | tzapr = $5a | ||
+ | tzapl = $5b | ||
+ | tcash = $5c | ||
+ | tplayer = $5d | ||
+ | tdeath = $5e | ||
+ | tfire = $5f | ||
+ | |||
+ | ; - text locations | ||
+ | gamescreenloc = screen+40*2 | ||
+ | gamescreenendloc = gamescreenloc+40*20 | ||
+ | gamecolorloc = color+40*2 | ||
+ | statustextloc = screen+40*24 | ||
+ | statusbartext1loc = screen+40*23+1 | ||
+ | statusbartext2loc = screen+40*23+29 | ||
+ | bcdbomb = statusbartext1loc+2 | ||
+ | bcdplank = statusbartext1loc+7 | ||
+ | bcdkey1 = statusbartext1loc+12 | ||
+ | bcdkey2 = statusbartext1loc+17 | ||
+ | bcdskey = statusbartext1loc+22 | ||
+ | bcdlevel = statusbartext2loc+6 | ||
+ | helptextlen = 40*20+1 | ||
+ | pickuptextloc = pickuptext+24 | ||
+ | useitemtextloc = useitemtext+19 | ||
+ | useitemtextloc2 = useitemtext+24 | ||
+ | |||
+ | ; - text color | ||
+ | gametitletextcol = 3 | ||
+ | helptextcol = 15 | ||
+ | statusbartext1col = 1 | ||
+ | statusbartext2col = 2 | ||
+ | restarttextcol = 10 | ||
+ | nextleveltextcol = 13 | ||
+ | zaptextcol = 7 | ||
+ | gamewontextcol = 14 | ||
+ | pickuptextcol = 12 | ||
+ | useitemtextcol = 12 | ||
+ | dropbombtextcol = 5 | ||
+ | detonatebombtextcol = 8 | ||
+ | teleporttextcol = 3 | ||
+ | electextcol = 6 | ||
+ | |||
+ | |||
+ | ; --- Variables | ||
+ | |||
+ | ; - zero page | ||
+ | |||
+ | tmpptr = $39 ; temporary zp pointer | ||
+ | scrptr = $fb ; zp pointer to screen | ||
+ | colptr = $fd ; zp pointer to color | ||
+ | tmpvar = $ff ; temporary zp variable | ||
+ | |||
+ | ; - reused chars | ||
+ | |||
+ | tmp = Chars | ||
+ | |||
+ | ; last joystick state | ||
+ | lastjoy = Chars+1 | ||
+ | |||
+ | ; joystick repeat counter | ||
+ | joycount = Chars+2 | ||
+ | |||
+ | ; interrupt state | ||
+ | intstate = Chars+3 | ||
+ | |||
+ | ; pointer storage | ||
+ | storedptr = Chars+4 | ||
+ | storedptrh = Chars+5 | ||
+ | ccurlevel = Chars+6 | ||
+ | ccurlevelh = Chars+7 | ||
+ | cnextlevel = Chars+8 | ||
+ | cnextlevelh = Chars+9 | ||
+ | |||
+ | ; current/ | ||
+ | level = Chars+10 | ||
+ | |||
+ | ; items | ||
+ | ibomb = Chars+11 | ||
+ | iplank = Chars+12 | ||
+ | ikey1 = Chars+13 | ||
+ | ikey2 = Chars+14 | ||
+ | iskey = Chars+15 | ||
+ | |||
+ | ; game state | ||
+ | playerptr = Chars+16 | ||
+ | playerptrh = Chars+17 | ||
+ | underplayer = Chars+18 | ||
+ | lbomb = Chars+19 | ||
+ | underlbomb = Chars+20 | ||
+ | underlbombu = Chars+21 | ||
+ | underlbombd = Chars+22 | ||
+ | underlbombl = Chars+23 | ||
+ | underlbombr = Chars+24 | ||
+ | lbombptr = Chars+25 | ||
+ | lbombptrh = Chars+26 | ||
+ | movedir = Chars+27 | ||
+ | newptr = Chars+28 | ||
+ | newptrh = Chars+29 | ||
+ | |||
+ | |||
+ | ; --- Main | ||
+ | |||
+ | ; start of program | ||
+ | *=$0c00 | ||
+ | mlcodeentry: | ||
+ | |||
+ | ; - interrupt setup | ||
+ | ; from "An Introduction to Programming C-64 Demos" by Puterman aka Linus Åkerlund | ||
+ | ; http:// | ||
+ | ; ... + modifications | ||
+ | ; | ||
+ | sei ; interrupts off | ||
+ | lda #$7f | ||
+ | ldx #$01 | ||
+ | sta $dc0d ; Turn off CIA 1 interrupts | ||
+ | sta $dd0d ; Turn off CIA 2 interrupts | ||
+ | stx $d01a ; Turn on raster interrupts | ||
+ | lda #<int ; low part of address of interrupt handler code | ||
+ | ldx #>int ; high part of address of interrupt handler code | ||
+ | ldy #250 ; line to trigger interrupt | ||
+ | sta $0314 ; store in interrupt vector | ||
+ | stx $0315 | ||
+ | sty $d012 | ||
+ | lda #<nmi ; low part of address of NMI handler code | ||
+ | ldx #>nmi ; high part of address of NMI handler code | ||
+ | sta $0318 ; store in NMI vector | ||
+ | stx $0319 | ||
+ | lda #0 | ||
+ | sta intstate ; set interrupt state to 0 | ||
+ | lda $dc0d ; ACK CIA 1 interrupts | ||
+ | lda $dd0d ; ACK CIA 2 interrupts | ||
+ | asl $d019 ; ACK VIC interrupts | ||
+ | cli ; interrupts on | ||
+ | |||
+ | |||
+ | ; disable bcd-mode | ||
+ | cld | ||
+ | |||
+ | ; set joyport to input | ||
+ | lda #0 | ||
+ | sta joypddr | ||
+ | |||
+ | ; copy character rom to $0800-$09ff | ||
+ | ; copy custom chars to $0a00-$0bff | ||
+ | ldx #0 ; 255 loops | ||
+ | sei ; interrups off | ||
+ | lda $1 | ||
+ | and #$fb | ||
+ | sta $1 ; character rom on | ||
+ | - lda $d000,x ; load from char-rom | ||
+ | sta $0800,x ; store to ram | ||
+ | lda $d100,x ; load from char-rom | ||
+ | sta $0900,x ; store to ram | ||
+ | lda Chars,x ; load from custom chars | ||
+ | sta $0a00,x ; store to ram | ||
+ | lda Chars+$100, | ||
+ | sta $0b00,x ; store to ram | ||
+ | inx | ||
+ | bne - | ||
+ | lda $1 | ||
+ | ora #$04 | ||
+ | sta $1 ; character rom off | ||
+ | asl $d019 ; ACK VIC interrupts | ||
+ | cli ; interrupts on | ||
+ | |||
+ | ; font = $0800 | ||
+ | lda $d018 | ||
+ | and #$f1 | ||
+ | ora #$02 | ||
+ | sta $d018 | ||
+ | |||
+ | ; set colors | ||
+ | ldx #tswall | ||
+ | lda Colortable, | ||
+ | sta vicborder ; set border | ||
+ | lda #0 | ||
+ | sta vicbackgnd ; | ||
+ | |||
+ | ; print text | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #>screen | ||
+ | sta scrptr+1 | ||
+ | lda #<screen | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | jsr printstring | ||
+ | |||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | jsr printstring | ||
+ | |||
+ | reloadstartmenu: | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | ; - Start menu | ||
+ | ; | ||
+ | startmenu: | ||
+ | lda #1 | ||
+ | sta level | ||
+ | jsr erasestatustext | ||
+ | |||
+ | ; set pointer to helptext page 1 | ||
+ | startmenu_helppage1: | ||
+ | lda #> | ||
+ | sta storedptr+1 | ||
+ | lda #< | ||
+ | sta storedptr | ||
+ | |||
+ | startmenu_drawhelp: | ||
+ | ; check if valid helptext page | ||
+ | lda storedptr+1 | ||
+ | cmp #> | ||
+ | bcc startmenu_helppage1 | ||
+ | cmp #> | ||
+ | beq + | ||
+ | bcs startmenu_helppage1 | ||
+ | |||
+ | ; draw help screen | ||
+ | + lda storedptr+1 | ||
+ | sta tmpptr+1 | ||
+ | lda storedptr | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | ; start menu input loop | ||
+ | - jsr getinput | ||
+ | sta tmp | ||
+ | lda # | ||
+ | bit tmp ; test if up | ||
+ | beq ++ ; skip if not | ||
+ | ; up pressed | ||
+ | lda storedptr | ||
+ | sec | ||
+ | sbc #< | ||
+ | sta storedptr | ||
+ | lda storedptr+1 | ||
+ | sbc #> | ||
+ | sta storedptr+1 | ||
+ | jmp startmenu_drawhelp | ||
+ | ++ lda # | ||
+ | bit tmp ; test if down | ||
+ | beq ++ ; skip if not | ||
+ | ; down pressed | ||
+ | lda storedptr | ||
+ | clc | ||
+ | adc #< | ||
+ | sta storedptr | ||
+ | lda storedptr+1 | ||
+ | adc #> | ||
+ | sta storedptr+1 | ||
+ | jmp startmenu_drawhelp | ||
+ | ++ lda # | ||
+ | bit tmp ; test if left | ||
+ | beq ++ ; skip if not | ||
+ | ; left pressed | ||
+ | dec level | ||
+ | bne + | ||
+ | inc level | ||
+ | bne - | ||
+ | + lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcddec | ||
+ | jmp - | ||
+ | ++ lda # | ||
+ | bit tmp ; test if right | ||
+ | beq ++ ; skip if not | ||
+ | ; right pressed | ||
+ | inc level | ||
+ | lda #levels+1 | ||
+ | cmp level | ||
+ | bne + | ||
+ | dec level | ||
+ | bne - | ||
+ | + lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc | ||
+ | jmp - | ||
+ | ++ lda # | ||
+ | bit tmp ; test if fire | ||
+ | bne + ; jump if pressed | ||
+ | jmp - ; back to input loop | ||
+ | |||
+ | |||
+ | ; init game | ||
+ | + lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda level | ||
+ | sta tmp | ||
+ | |||
+ | ; load level (selected, next or restarted) | ||
+ | loadlevel: | ||
+ | jsr initlevel | ||
+ | |||
+ | ; find starting position | ||
+ | lda #tplayer | ||
+ | jsr findchar | ||
+ | lda tmpptr | ||
+ | sta playerptr | ||
+ | lda tmpptr+1 | ||
+ | sta playerptrh | ||
+ | lda #tground | ||
+ | sta underplayer | ||
+ | |||
+ | ; - Game loop | ||
+ | ; | ||
+ | gameloop: | ||
+ | ; get input | ||
+ | jsr getinput | ||
+ | sta movedir | ||
+ | jsr erasestatustext | ||
+ | lda # | ||
+ | bit movedir ; test if up | ||
+ | beq + ; skip if not | ||
+ | ; up pressed | ||
+ | sta movedir ; eliminate possible diagonals | ||
+ | lda #>-40 | ||
+ | sta storedptrh | ||
+ | lda #<-40 | ||
+ | sta storedptr | ||
+ | jmp movement | ||
+ | + lda # | ||
+ | bit movedir ; test if down | ||
+ | beq + ; skip if not | ||
+ | ; down pressed | ||
+ | sta movedir ; eliminate possible diagonals | ||
+ | lda #>40 | ||
+ | sta storedptrh | ||
+ | lda #<40 | ||
+ | sta storedptr | ||
+ | jmp movement | ||
+ | + lda # | ||
+ | bit movedir ; test if left | ||
+ | beq + ; skip if not | ||
+ | ; left pressed | ||
+ | sta movedir ; eliminate possible diagonals | ||
+ | lda #>-1 | ||
+ | sta storedptrh | ||
+ | lda #<-1 | ||
+ | sta storedptr | ||
+ | jmp movement | ||
+ | + lda # | ||
+ | bit movedir ; test if right | ||
+ | beq + ; skip if not | ||
+ | ; right pressed | ||
+ | sta movedir ; eliminate possible diagonals | ||
+ | lda #>1 | ||
+ | sta storedptrh | ||
+ | lda #<1 | ||
+ | sta storedptr | ||
+ | jmp movement | ||
+ | + lda # | ||
+ | bit movedir ; test if fire | ||
+ | beq gameloop ; jump back if not | ||
+ | ; fire pressed | ||
+ | lda lbomb ; check if live bomb | ||
+ | beq + | ||
+ | ; explode bomb | ||
+ | jmp explodebomb | ||
+ | + lda ibomb ; check if any bombs | ||
+ | beq ++ | ||
+ | ; drop bomb | ||
+ | jmp dropbomb | ||
+ | ; restart? | ||
+ | ++ lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | jsr getinput | ||
+ | sta movedir | ||
+ | jsr erasestatustext | ||
+ | lda # | ||
+ | bit movedir ; test if fire | ||
+ | bne + ; skip if is | ||
+ | jmp gameloop | ||
+ | + lda ccurlevel | ||
+ | sta tmpptr | ||
+ | lda ccurlevelh | ||
+ | sta tmpptr+1 ; tmpptr -> current level | ||
+ | lda #1 | ||
+ | sta tmp ; load 1 level | ||
+ | jmp loadlevel ; restart level | ||
+ | |||
+ | movement: | ||
+ | ; calculate new location | ||
+ | clc | ||
+ | lda playerptr | ||
+ | adc storedptr | ||
+ | sta newptr | ||
+ | sta tmpptr | ||
+ | lda playerptrh | ||
+ | adc storedptrh | ||
+ | sta tmpptr+1 | ||
+ | sta newptrh ; tmpptr, newptr -> new location | ||
+ | |||
+ | ; check left< | ||
+ | lda # | ||
+ | bit movedir ; test if left or right | ||
+ | beq movement_check ; | ||
+ | ldx newptrh | ||
+ | lda newptr | ||
+ | jsr mod40 | ||
+ | sta tmp ; tmp = new location mod 40 | ||
+ | lda # | ||
+ | bit movedir ; test if left | ||
+ | beq + ; skip if right | ||
+ | lda #39 | ||
+ | cmp tmp ; check if 39 (left-> | ||
+ | bne movement_check ; | ||
+ | jmp gameloop ; left-> | ||
+ | + lda tmp ; check if 0 (right-> | ||
+ | bne movement_check ; | ||
+ | jmp gameloop ; right-> | ||
+ | |||
+ | ; check if movement ok | ||
+ | movement_check: | ||
+ | ldy #0 | ||
+ | lda (tmpptr),y | ||
+ | tax ; x = tile in new position | ||
+ | |||
+ | ; items | ||
+ | lda #tground | ||
+ | cpx #tkey1 ; check if key1 | ||
+ | bne + ; if not, skip | ||
+ | sta (tmpptr), | ||
+ | inc ikey1 | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc ; increase count | ||
+ | jsr printpickup | ||
+ | jmp movement_draw | ||
+ | + cpx #tkey2 ; check if key2 | ||
+ | bne + ; if not, skip | ||
+ | sta (tmpptr), | ||
+ | inc ikey2 | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc ; increase count | ||
+ | jsr printpickup | ||
+ | jmp movement_draw | ||
+ | + cpx #tskey ; check if skey | ||
+ | bne + ; if not, skip | ||
+ | sta (tmpptr), | ||
+ | inc iskey | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc ; increase count | ||
+ | jsr printpickup | ||
+ | jmp movement_draw | ||
+ | + cpx #tbomb ; check if bomb | ||
+ | bne + ; if not, skip | ||
+ | sta (tmpptr), | ||
+ | inc ibomb | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc ; increase count | ||
+ | jsr printpickup | ||
+ | jmp movement_draw | ||
+ | + cpx #tplank ; check if plank | ||
+ | bne + ; if not, skip | ||
+ | sta (tmpptr), | ||
+ | inc iplank | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc ; increase count | ||
+ | jsr printpickup | ||
+ | jmp movement_draw | ||
+ | |||
+ | ; item usage | ||
+ | + cpx #twater ; check if water | ||
+ | bne ++ ; if not, skip | ||
+ | lda iplank ; check if any planks | ||
+ | bne + ; skip if is | ||
+ | jmp gameloop ; back to gameloop | ||
+ | + lda #tplankw | ||
+ | sta (tmpptr), | ||
+ | dec iplank | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcddec ; decrease count | ||
+ | lda #tplank | ||
+ | jsr printuseitem | ||
+ | jmp movement_draw | ||
+ | ++ cpx #tdoor1 ; check if door1 | ||
+ | bne ++ ; if not, skip | ||
+ | lda ikey1 ; check if any key1's | ||
+ | bne + ; skip if is | ||
+ | jmp gameloop ; back to gameloop | ||
+ | + lda #tground | ||
+ | sta (tmpptr), | ||
+ | dec ikey1 | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcddec ; decrease count | ||
+ | lda #tkey1 | ||
+ | jsr printuseitem | ||
+ | jmp movement_draw | ||
+ | ++ cpx #tdoor2 ; check if door2 | ||
+ | bne ++ ; if not, skip | ||
+ | lda ikey2 ; check if any key2's | ||
+ | bne + ; skip if is | ||
+ | jmp gameloop ; back to gameloop | ||
+ | + lda #tground | ||
+ | sta (tmpptr), | ||
+ | dec ikey2 | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcddec ; decrease count | ||
+ | lda #tkey2 | ||
+ | jsr printuseitem | ||
+ | jmp movement_draw | ||
+ | ++ cpx #tsdoor ; check if sdoor | ||
+ | bne ++ ; if not, skip | ||
+ | lda iskey ; check if any skeys | ||
+ | bne + ; skip if is | ||
+ | jmp gameloop ; back to gameloop | ||
+ | + lda #tground | ||
+ | sta (tmpptr), | ||
+ | dec iskey | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcddec ; decrease count | ||
+ | lda #tskey | ||
+ | jsr printuseitem | ||
+ | jmp movement_draw | ||
+ | |||
+ | ; special stuff | ||
+ | ++ cpx #teles ; check if elec. switch | ||
+ | bne ++ ; if not, skip | ||
+ | jmp elecswitch ; | ||
+ | ++ cpx #tcash ; check if cash | ||
+ | bne ++ ; if not, skip | ||
+ | jmp nextlevel | ||
+ | ++ cpx #ttele ; check if teleport | ||
+ | bne ++ ; if not, skip | ||
+ | jsr domovement ; | ||
+ | lda #ttele ; a = ttele | ||
+ | jsr findchar ; tmpptr -> other teleport | ||
+ | lda tmpptr | ||
+ | sta newptr | ||
+ | lda tmpptr+1 | ||
+ | sta newptrh ; newptr -> other teleport | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | jmp movement_draw ; | ||
+ | |||
+ | ; rock | ||
+ | ++ cpx #trock ; check if rock | ||
+ | bne ++ ; if not, skip | ||
+ | jmp rockmove | ||
+ | ++ cpx #trockw ; check if rock on plank | ||
+ | bne ++ ; if not, skip | ||
+ | jmp rockmove | ||
+ | |||
+ | ; simple movement | ||
+ | ++ cpx #tground ; check if ground | ||
+ | beq movement_draw ; | ||
+ | cpx #tplankw ; check if plank on water | ||
+ | beq movement_draw ; | ||
+ | cpx #thole ; check if hole | ||
+ | beq movement_draw ; | ||
+ | cpx #teleb ; check if inactive elec. | ||
+ | beq movement_draw ; | ||
+ | cpx #tlbomb ; check if inactive elec. | ||
+ | beq movement_draw ; | ||
+ | jmp gameloop ; no movement, back to loop | ||
+ | |||
+ | movement_draw: | ||
+ | jsr domovement | ||
+ | |||
+ | ; check zappers | ||
+ | zapcheck: | ||
+ | ; check up | ||
+ | lda #>-40 | ||
+ | sta tmpptr+1 | ||
+ | lda #<-40 | ||
+ | sta tmpptr | ||
+ | lda #tzapd | ||
+ | jsr zapsearch | ||
+ | dex | ||
+ | bne death | ||
+ | ; check down | ||
+ | lda #>40 | ||
+ | sta tmpptr+1 | ||
+ | lda #<40 | ||
+ | sta tmpptr | ||
+ | lda #tzapu | ||
+ | jsr zapsearch | ||
+ | dex | ||
+ | bne death | ||
+ | ; check left | ||
+ | lda #>-1 | ||
+ | sta tmpptr+1 | ||
+ | lda #<-1 | ||
+ | sta tmpptr | ||
+ | lda #tzapr | ||
+ | jsr zapsearch | ||
+ | dex | ||
+ | bne death | ||
+ | ; check right | ||
+ | lda #>1 | ||
+ | sta tmpptr+1 | ||
+ | lda #<1 | ||
+ | sta tmpptr | ||
+ | lda #tzapl | ||
+ | jsr zapsearch | ||
+ | dex | ||
+ | bne death | ||
+ | jmp gameloop ; end of game loop | ||
+ | |||
+ | ; - death | ||
+ | ; | ||
+ | death: | ||
+ | lda playerptr | ||
+ | sta scrptr | ||
+ | lda playerptrh | ||
+ | sta scrptr+1 | ||
+ | lda #tdeath | ||
+ | jsr printtile | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda #zaptextcol | ||
+ | jsr printstring | ||
+ | - jsr getinput | ||
+ | sta movedir | ||
+ | lda # | ||
+ | bit movedir ; test if fire | ||
+ | beq - | ||
+ | lda ccurlevel | ||
+ | sta tmpptr | ||
+ | lda ccurlevelh | ||
+ | sta tmpptr+1 ; tmpptr -> current level | ||
+ | lda #1 | ||
+ | sta tmp ; load 1 level | ||
+ | jmp loadlevel ; restart level | ||
+ | |||
+ | ; - dropbomb | ||
+ | ; | ||
+ | dropbomb: | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | sec | ||
+ | lda playerptr | ||
+ | sbc #40 | ||
+ | sta lbombptr | ||
+ | lda playerptrh | ||
+ | sta lbombptrh | ||
+ | bcs + | ||
+ | dec lbombptrh ; lbombptr -> bomb_location - 40 | ||
+ | + dec ibomb | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcddec | ||
+ | lda underplayer | ||
+ | cmp #teleb | ||
+ | bne + | ||
+ | lda #tground | ||
+ | + sta underlbomb | ||
+ | lda #tlbomb | ||
+ | sta underplayer | ||
+ | inc lbomb | ||
+ | lda #0 | ||
+ | sta underlbombl | ||
+ | sta underlbombr | ||
+ | jmp gameloop | ||
+ | |||
+ | ; - elecswitch | ||
+ | ; | ||
+ | elecswitch: | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | ; point to start of game screen | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | ldy #0 | ||
+ | ; replace telea< | ||
+ | - lda (scrptr),y | ||
+ | cmp #telea | ||
+ | bne + | ||
+ | lda #teleb | ||
+ | jsr printtile | ||
+ | jmp ++ | ||
+ | + cmp #teleb | ||
+ | bne ++ | ||
+ | lda #telea | ||
+ | jsr printtile | ||
+ | ++ inc scrptr | ||
+ | bne + | ||
+ | inc scrptr+1 | ||
+ | + lda #> | ||
+ | cmp scrptr+1 | ||
+ | bne - | ||
+ | lda #< | ||
+ | cmp scrptr | ||
+ | bne - | ||
+ | lda underplayer | ||
+ | cmp #telea | ||
+ | bne + | ||
+ | lda #teleb | ||
+ | sta underplayer | ||
+ | bne ++ | ||
+ | + cmp #teleb | ||
+ | bne ++ | ||
+ | lda #telea | ||
+ | sta underplayer | ||
+ | ++ jmp zapcheck | ||
+ | |||
+ | ; - rockmove | ||
+ | ; | ||
+ | rockmove: | ||
+ | ; calculate new rock location | ||
+ | clc | ||
+ | lda newptr | ||
+ | sta tmpptr | ||
+ | adc storedptr | ||
+ | sta scrptr | ||
+ | lda newptrh | ||
+ | sta tmpptr+1 ; tmpptr -> old rock location | ||
+ | adc storedptrh | ||
+ | sta scrptr+1 ; scrptr -> new rock location | ||
+ | |||
+ | ; check for left & right edges | ||
+ | lda # | ||
+ | bit movedir ; test if left or right | ||
+ | beq ++ ; skip if not | ||
+ | ldx newptrh | ||
+ | lda newptr | ||
+ | jsr mod40 | ||
+ | sta tmp ; tmp = new location mod 40 | ||
+ | lda # | ||
+ | bit movedir ; test if left | ||
+ | beq + ; skip if right | ||
+ | lda #39 | ||
+ | cmp tmp ; check if 39 (left-> | ||
+ | bne ++ ; skip if not | ||
+ | jmp gameloop ; left-> | ||
+ | + lda tmp ; check if 0 (right-> | ||
+ | bne ++ ; skip if not | ||
+ | jmp gameloop ; right-> | ||
+ | |||
+ | ; check if rock can be moved | ||
+ | ++ ldy #0 | ||
+ | lda (scrptr),y | ||
+ | tax | ||
+ | lda Rocktable,x | ||
+ | bne + ; 0 -> cannot move | ||
+ | jmp gameloop | ||
+ | |||
+ | ; draw new rock | ||
+ | + jsr printtile | ||
+ | ; erase old rock | ||
+ | lda newptr | ||
+ | sta scrptr | ||
+ | lda newptrh | ||
+ | sta scrptr+1 | ||
+ | ldx #tground | ||
+ | lda (scrptr),y | ||
+ | cmp #trockw | ||
+ | bne + | ||
+ | ldx #tplankw | ||
+ | + txa | ||
+ | jsr printtile | ||
+ | jmp movement_draw | ||
+ | |||
+ | ; - explodebomb | ||
+ | ; | ||
+ | explodebomb: | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | ; erase player | ||
+ | lda playerptr | ||
+ | sta scrptr | ||
+ | lda playerptrh | ||
+ | sta scrptr+1 | ||
+ | lda underplayer | ||
+ | jsr printtile | ||
+ | |||
+ | ; check for left & right edges | ||
+ | lda lbombptr | ||
+ | sta tmpptr | ||
+ | ldx lbombptrh | ||
+ | stx tmpptr+1 | ||
+ | jsr mod40 | ||
+ | tax | ||
+ | cpx #39 | ||
+ | beq ++ | ||
+ | ldy #41 | ||
+ | lda (tmpptr),y | ||
+ | sta underlbombr | ||
+ | ++ cpx #0 | ||
+ | beq ++ | ||
+ | ldy #39 | ||
+ | lda (tmpptr),y | ||
+ | sta underlbombl | ||
+ | |||
+ | ; ignite flames, transform tiles | ||
+ | ++ ldy #0 ; up | ||
+ | lda #tfire | ||
+ | jsr replacetile | ||
+ | tax | ||
+ | lda Bombtable, | ||
+ | sta underlbombu | ||
+ | ldy #80 ; down | ||
+ | lda #tfire | ||
+ | jsr replacetile | ||
+ | tax | ||
+ | lda Bombtable, | ||
+ | sta underlbombd | ||
+ | lda underlbombl ; | ||
+ | beq ++ | ||
+ | ldy #39 ; left | ||
+ | lda #tfire | ||
+ | jsr replacetile | ||
+ | tax | ||
+ | lda Bombtable, | ||
+ | sta underlbombl | ||
+ | ++ lda underlbombr ; | ||
+ | beq ++ | ||
+ | ldy #41 ; right | ||
+ | lda #tfire | ||
+ | jsr replacetile | ||
+ | tax | ||
+ | lda Bombtable, | ||
+ | sta underlbombr | ||
+ | ++ ldy #40 ; center | ||
+ | lda #tfire | ||
+ | jsr replacetile | ||
+ | ldx underlbomb | ||
+ | lda Bombtable, | ||
+ | sta underlbomb | ||
+ | |||
+ | ; artistic delay | ||
+ | ++ ldx #17 | ||
+ | jsr delay | ||
+ | |||
+ | ; redraw tiles | ||
+ | ldy #0 ; up | ||
+ | lda underlbombu | ||
+ | jsr replacetile | ||
+ | ldy #80 ; down | ||
+ | lda underlbombd | ||
+ | jsr replacetile | ||
+ | lda underlbombl ; | ||
+ | beq ++ | ||
+ | ldy #39 ; left | ||
+ | jsr replacetile | ||
+ | ++ lda underlbombr ; | ||
+ | beq ++ | ||
+ | ldy #41 ; right | ||
+ | jsr replacetile | ||
+ | ++ ldy #40 ; center | ||
+ | lda underlbomb | ||
+ | jsr replacetile | ||
+ | |||
+ | ; redraw player | ||
+ | lda playerptr | ||
+ | sta scrptr | ||
+ | lda playerptrh | ||
+ | sta scrptr+1 | ||
+ | ldy #0 | ||
+ | lda (scrptr),y | ||
+ | sta underplayer | ||
+ | lda #tplayer | ||
+ | jsr printtile | ||
+ | dec lbomb | ||
+ | jmp zapcheck | ||
+ | |||
+ | ; - nextlevel | ||
+ | ; | ||
+ | nextlevel: | ||
+ | jsr domovement | ||
+ | lda level ; check if last level | ||
+ | cmp #levels | ||
+ | bne + | ||
+ | jmp gamewon ; game won | ||
+ | + inc level ; next level | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | - jsr getinput | ||
+ | sta movedir | ||
+ | lda # | ||
+ | bit movedir ; test if fire | ||
+ | beq - | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | jsr bcdinc ; increase level | ||
+ | lda cnextlevel | ||
+ | sta tmpptr | ||
+ | lda cnextlevelh | ||
+ | sta tmpptr+1 ; tmpptr -> next level | ||
+ | lda #1 | ||
+ | sta tmp ; load 1 level | ||
+ | jmp loadlevel ; load next level | ||
+ | |||
+ | ; - gamewon | ||
+ | ; | ||
+ | gamewon: | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | - jsr getinput | ||
+ | sta movedir | ||
+ | lda # | ||
+ | bit movedir ; test if fire | ||
+ | beq - | ||
+ | jmp reloadstartmenu | ||
+ | |||
+ | |||
+ | ; --- Interrupt routines | ||
+ | |||
+ | ; - IRQ | ||
+ | ; | ||
+ | int: | ||
+ | asl $d019 ; ACK interrupt (to re-enable it) | ||
+ | pla | ||
+ | tay | ||
+ | pla | ||
+ | tax | ||
+ | pla ; pop y,x and a from stack | ||
+ | rti ; return | ||
+ | |||
+ | ; - NMI | ||
+ | ; | ||
+ | nmi: | ||
+ | rti ; return | ||
+ | |||
+ | |||
+ | ; --- Subroutines | ||
+ | |||
+ | ; - printpickup | ||
+ | ; parameters: | ||
+ | ; x = item | ||
+ | ; | ||
+ | printpickup: | ||
+ | stx pickuptextloc | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | rts | ||
+ | |||
+ | ; - printuseitem | ||
+ | ; parameters: | ||
+ | ; a = item | ||
+ | ; x = used on | ||
+ | ; | ||
+ | printuseitem: | ||
+ | sta useitemtextloc | ||
+ | stx useitemtextloc2 | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | rts | ||
+ | |||
+ | |||
+ | ; - zapsearch | ||
+ | ; parameters: | ||
+ | ; playerptr -> player | ||
+ | ; tmpptr = direction (+-1, +-40) | ||
+ | ; a = fatal zapper tile | ||
+ | ; returns: | ||
+ | ; x = 1 if ok, 0 if zapped | ||
+ | ; scrptr -> zapper | ||
+ | ; | ||
+ | zapsearch: | ||
+ | ldy #0 | ||
+ | sta tmpvar ; tmpvar = fatal zapper tile | ||
+ | cmp #tzapl ; check if left | ||
+ | bne + | ||
+ | ldy #2 | ||
+ | + cmp #tzapr ; check if right | ||
+ | bne + | ||
+ | ldy #1 | ||
+ | + sty movedir ; movedir = 1 if left, 2 if right | ||
+ | lda playerptr | ||
+ | sta scrptr | ||
+ | ldx playerptrh | ||
+ | stx scrptr+1 ; scrptr -> player | ||
+ | |||
+ | |||
+ | ; move to next location | ||
+ | - clc | ||
+ | lda scrptr | ||
+ | adc tmpptr | ||
+ | sta scrptr | ||
+ | lda scrptr+1 | ||
+ | adc tmpptr+1 | ||
+ | sta scrptr+1 | ||
+ | |||
+ | ; check for left& | ||
+ | ldy movedir | ||
+ | cpy #0 | ||
+ | beq ++ ; skip if up or down | ||
+ | lda scrptr | ||
+ | ldx scrptr+1 | ||
+ | jsr mod40 | ||
+ | ldx #1 | ||
+ | cmp #0 | ||
+ | bne + | ||
+ | cpy #2 | ||
+ | beq +++ ; moving right, left edge reached (x=1) | ||
+ | + cmp #39 | ||
+ | bne ++ | ||
+ | cpy #1 | ||
+ | beq +++ ; moving left, right edge reached (x=1) | ||
+ | |||
+ | ; check if fatal zapper | ||
+ | ++ ldx #0 | ||
+ | ldy #0 | ||
+ | lda (scrptr),y | ||
+ | cmp tmpvar | ||
+ | beq +++ ; jump if fatal zapper (x=0) | ||
+ | ldx #1 | ||
+ | cmp #tground ; check if ground | ||
+ | beq - | ||
+ | cmp #twater ; check if water | ||
+ | beq - | ||
+ | cmp #tplankw ; check if plank on water | ||
+ | beq - | ||
+ | cmp #thole ; check if hole | ||
+ | beq - | ||
+ | cmp #teleb ; check if inactive elec. | ||
+ | beq - | ||
+ | +++ rts | ||
+ | |||
+ | ; - replacetile | ||
+ | ; parameters: | ||
+ | ; tmpptr+y -> location | ||
+ | ; a = new tile | ||
+ | ; returns: | ||
+ | ; a = old tile | ||
+ | ; | ||
+ | replacetile: | ||
+ | sta replacetilenew | ||
+ | lda (tmpptr), | ||
+ | pha ; to stack | ||
+ | lda tmpptr+1 | ||
+ | sta scrptr+1 | ||
+ | clc | ||
+ | tya ; a = offset | ||
+ | adc tmpptr | ||
+ | sta scrptr | ||
+ | bcc ++ | ||
+ | inc scrptr+1 ; scrptr = tmpptr+y | ||
+ | replacetilenew=*+1 | ||
+ | ++ lda #123 | ||
+ | jsr printtile | ||
+ | pla ; a = old tile | ||
+ | rts | ||
+ | |||
+ | ; - delay | ||
+ | ; parameters: | ||
+ | ; x = count | ||
+ | ; | ||
+ | delay: | ||
+ | lda #rastercmp | ||
+ | -- cmp vicraster | ||
+ | bne -- ; wait until raster = rastercmp | ||
+ | - cmp vicraster | ||
+ | beq - ; wait until raster != rastercmp | ||
+ | dex | ||
+ | bne -- | ||
+ | rts | ||
+ | |||
+ | ; - domovement | ||
+ | ; parametes: | ||
+ | ; playerptr -> current player position | ||
+ | ; newptr -> new player position | ||
+ | ; | ||
+ | domovement: | ||
+ | ; redraw old position | ||
+ | lda playerptr | ||
+ | sta scrptr | ||
+ | lda playerptrh | ||
+ | sta scrptr+1 | ||
+ | lda underplayer | ||
+ | jsr printtile | ||
+ | ; move & draw | ||
+ | lda newptr | ||
+ | sta playerptr | ||
+ | sta scrptr | ||
+ | lda newptrh | ||
+ | sta playerptrh | ||
+ | sta scrptr+1 | ||
+ | ldy #0 | ||
+ | lda (scrptr),y | ||
+ | sta underplayer | ||
+ | lda #tplayer | ||
+ | jsr printtile | ||
+ | rts | ||
+ | |||
+ | ; - erasestatustext | ||
+ | ; | ||
+ | erasestatustext: | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | jsr printstring | ||
+ | rts | ||
+ | |||
+ | ; - bcdinc | ||
+ | ; parameters: | ||
+ | ; tmpptr -> BCD MSB | ||
+ | ; | ||
+ | bcdinc: | ||
+ | ldy #1 | ||
+ | - lda (tmpptr),y | ||
+ | clc | ||
+ | adc #1 | ||
+ | cmp #' | ||
+ | bne + | ||
+ | lda #' | ||
+ | sta (tmpptr),y | ||
+ | dey | ||
+ | beq - | ||
+ | + sta (tmpptr),y | ||
+ | rts | ||
+ | |||
+ | ; - bcddec | ||
+ | ; parameters: | ||
+ | ; tmpptr -> BCD MSB | ||
+ | ; | ||
+ | bcddec: | ||
+ | ldy #1 | ||
+ | - lda (tmpptr),y | ||
+ | sec | ||
+ | sbc #1 | ||
+ | cmp #' | ||
+ | bne + | ||
+ | lda #' | ||
+ | sta (tmpptr),y | ||
+ | dey | ||
+ | beq - | ||
+ | + sta (tmpptr),y | ||
+ | rts | ||
+ | |||
+ | ; - initlevel | ||
+ | ; parameters: | ||
+ | ; tmpptr -> level data | ||
+ | ; tmp = levels to advance | ||
+ | ; returns: | ||
+ | ; ccurlevel -> current level data | ||
+ | ; cnextlevel -> next level data | ||
+ | ; ibomb, iplank ... = 0 | ||
+ | ; | ||
+ | initlevel: | ||
+ | ; blank screen | ||
+ | lda $d011 | ||
+ | and #$ef | ||
+ | sta $d011 | ||
+ | |||
+ | ; advance tmp levels | ||
+ | - lda tmpptr | ||
+ | sta ccurlevel | ||
+ | lda tmpptr+1 | ||
+ | sta ccurlevelh ; | ||
+ | jsr unclevel | ||
+ | dec tmp | ||
+ | bne - | ||
+ | |||
+ | lda tmpptr | ||
+ | sta cnextlevel | ||
+ | lda tmpptr+1 | ||
+ | sta cnextlevelh ; | ||
+ | |||
+ | ; reset items / status | ||
+ | jsr erasestatustext | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda # | ||
+ | jsr printstring | ||
+ | |||
+ | lda #0 | ||
+ | sta ibomb | ||
+ | sta iplank | ||
+ | sta ikey1 | ||
+ | sta ikey2 | ||
+ | sta iskey | ||
+ | sta lbomb | ||
+ | |||
+ | ; unblank screen | ||
+ | lda $d011 | ||
+ | ora #$10 | ||
+ | sta $d011 | ||
+ | rts | ||
+ | |||
+ | ; - findchar | ||
+ | ; parameters: | ||
+ | ; a = char to find | ||
+ | ; returns: | ||
+ | ; tmpptr -> char at gamescreen | ||
+ | ; | ||
+ | findchar: | ||
+ | sta tmp | ||
+ | lda #> | ||
+ | sta tmpptr+1 | ||
+ | lda #< | ||
+ | sta tmpptr | ||
+ | ldy #0 | ||
+ | - lda (tmpptr),y | ||
+ | cmp tmp ; test if char | ||
+ | beq + ; end if zero | ||
+ | inc tmpptr | ||
+ | bne - ; loop if not zero | ||
+ | inc tmpptr+1 | ||
+ | bne - | ||
+ | + rts | ||
+ | |||
+ | ; - mod40 | ||
+ | ; parameters: | ||
+ | ; a:x -> screen | ||
+ | ; returns: | ||
+ | ; a = (a: | ||
+ | ; | ||
+ | mod40: | ||
+ | dex | ||
+ | dex | ||
+ | dex | ||
+ | dex ; a:x -= screen_offset | ||
+ | - cpx #0 ; test MSB | ||
+ | bne + ; jump if > 0 | ||
+ | cmp #40 ; test LSB | ||
+ | bcc ++ ; jump if < 40 | ||
+ | + sec | ||
+ | sbc #40 ; a -= 40 | ||
+ | bcs - ; jump if no borrow | ||
+ | dex ; borrow | ||
+ | jmp - | ||
+ | ++ rts ; return | ||
+ | |||
+ | ; - printtile | ||
+ | ; parameters: | ||
+ | ; scrptr -> screen location to print to | ||
+ | ; a = the tile to print | ||
+ | ; | ||
+ | printtile: | ||
+ | tax ; put tile to x | ||
+ | |||
+ | ; set colptr according to scrptr | ||
+ | lda scrptr | ||
+ | sta colptr | ||
+ | lda scrptr+1 | ||
+ | clc | ||
+ | adc #scrtocol | ||
+ | sta colptr+1 | ||
+ | |||
+ | ; print tile | ||
+ | ldy #0 | ||
+ | txa ; get tile from x | ||
+ | sta (scrptr), | ||
+ | lda Colortable, | ||
+ | sta (colptr), | ||
+ | rts ; return | ||
+ | |||
+ | ; - printstring | ||
+ | ; parameters: | ||
+ | ; scrptr -> screen location to print to | ||
+ | ; tmpptr -> string to print | ||
+ | ; a = the color of normal text | ||
+ | ; | ||
+ | printstring: | ||
+ | sta textcolor | ||
+ | |||
+ | ; set colptr according to scrptr | ||
+ | lda scrptr | ||
+ | sta colptr | ||
+ | lda scrptr+1 | ||
+ | clc | ||
+ | adc #scrtocol | ||
+ | sta colptr+1 | ||
+ | |||
+ | ; string loop | ||
+ | ldy #0 | ||
+ | - lda (tmpptr),y | ||
+ | beq +++ ; end if zero | ||
+ | sta (scrptr), | ||
+ | tax | ||
+ | and #$40 | ||
+ | bne ++ ; jump if tile | ||
+ | textcolor=*+1 | ||
+ | lda #3 ; was just text | ||
+ | bne + | ||
+ | ++ lda Colortable, | ||
+ | + sta (colptr), | ||
+ | iny | ||
+ | bne - ; loop if not zero | ||
+ | inc tmpptr+1 | ||
+ | inc scrptr+1 | ||
+ | inc colptr+1 | ||
+ | bne - | ||
+ | +++ | ||
+ | rts ; return | ||
+ | |||
+ | ; - unclevel | ||
+ | ; parameters: | ||
+ | ; tmpptr -> compressed level | ||
+ | ; returns: | ||
+ | ; tmpptr -> next compressed level | ||
+ | ; scrptr -> screen line after level | ||
+ | ; colptr -> color line after level | ||
+ | ; | ||
+ | unclevel: | ||
+ | ; point to start of game screen | ||
+ | lda #> | ||
+ | sta scrptr+1 | ||
+ | lda #< | ||
+ | sta scrptr | ||
+ | lda #> | ||
+ | sta colptr+1 | ||
+ | lda #< | ||
+ | sta colptr | ||
+ | |||
+ | ; main uncompress routine | ||
+ | ldy #0 | ||
+ | -- | ||
+ | lda (tmpptr),y | ||
+ | cmp #$ff ; code for "end of level" | ||
+ | beq +++ | ||
+ | and #$1f | ||
+ | clc | ||
+ | adc #$40 | ||
+ | tax ; x = char | ||
+ | lda (tmpptr),y | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | sta tmpvar | ||
+ | inc tmpvar ; tmpvar = loops | ||
+ | - txa | ||
+ | sta (scrptr),y | ||
+ | lda Colortable, | ||
+ | sta (colptr),y | ||
+ | inc scrptr | ||
+ | bne + | ||
+ | inc scrptr+1 | ||
+ | + inc colptr | ||
+ | bne + | ||
+ | inc colptr+1 | ||
+ | + dec tmpvar | ||
+ | bne - | ||
+ | inc tmpptr | ||
+ | bne + | ||
+ | inc tmpptr+1 | ||
+ | + lda #> | ||
+ | cmp scrptr+1 | ||
+ | bne -- | ||
+ | lda #< | ||
+ | cmp scrptr | ||
+ | bne -- | ||
+ | rts ; return | ||
+ | |||
+ | ; $ff found, rest of level is ground | ||
+ | +++ | ||
+ | ldx #tground ; x = ground char | ||
+ | lda Colortable, | ||
+ | sta tmpvar ; tmpvar = color | ||
+ | - txa | ||
+ | sta (scrptr),y | ||
+ | lda tmpvar | ||
+ | sta (colptr),y | ||
+ | inc scrptr | ||
+ | bne + | ||
+ | inc scrptr+1 | ||
+ | + inc colptr | ||
+ | bne + | ||
+ | inc colptr+1 | ||
+ | + lda #> | ||
+ | cmp scrptr+1 | ||
+ | bne - | ||
+ | lda #< | ||
+ | cmp scrptr | ||
+ | bne - | ||
+ | inc tmpptr | ||
+ | bne + | ||
+ | inc tmpptr+1 | ||
+ | + rts ; return | ||
+ | |||
+ | ; - getinput | ||
+ | ; returns: | ||
+ | ; a = action (xxxfrldu, 1 = active) | ||
+ | ; | ||
+ | getinput: | ||
+ | lda #0 | ||
+ | sta joycount ; reset joyrepeat counter | ||
+ | -- lda #rastercmp | ||
+ | ldy joycount | ||
+ | - cmp vicraster | ||
+ | bne - ; wait until raster = rastercmp | ||
+ | iny ; y++ | ||
+ | cpy # | ||
+ | bcc getinput_j | ||
+ | ldy #0 ; reset joyrepeat counter | ||
+ | lda #$ff ; reset lastjoy for repeat | ||
+ | sta lastjoy | ||
+ | getinput_j: | ||
+ | sty joycount ; store joycount | ||
+ | lda joyport ; a = joy | ||
+ | tax ; save to x | ||
+ | eor lastjoy ; a = joy xor lastjoy | ||
+ | and lastjoy ; a = a and lastjoy | ||
+ | stx lastjoy ; update lastjoy | ||
+ | and #$1f ; mask + test if anything is pressed | ||
+ | beq -- ; if not, wait | ||
+ | rts ; return (a = action) | ||
+ | |||
+ | |||
+ | ; --- Characters ($40-$5F) | ||
+ | |||
+ | ; ...reused as variables | ||
+ | |||
+ | Chars | ||
+ | ; ground | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %........ ;1 | ||
+ | !by %........ ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...##... ;4 | ||
+ | !by %........ ;5 | ||
+ | !by %........ ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; wall | ||
+ | ; 76543210 | ||
+ | !by %###.###. ;0 | ||
+ | !by %........ ;1 | ||
+ | !by %.###.### ;2 | ||
+ | !by %........ ;3 | ||
+ | !by %###.###. ;4 | ||
+ | !by %........ ;5 | ||
+ | !by %.###.### ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; super wall | ||
+ | ; 76543210 | ||
+ | !by %######## ;0 | ||
+ | !by %######## ;1 | ||
+ | !by %######## ;2 | ||
+ | !by %######## ;3 | ||
+ | !by %######## ;4 | ||
+ | !by %######## ;5 | ||
+ | !by %######## ;6 | ||
+ | !by %######## ;7 | ||
+ | |||
+ | ; door1 | ||
+ | ; 76543210 | ||
+ | !by %...##... ;0 | ||
+ | !by %..####.. ;1 | ||
+ | !by %.######. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.####.#. ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %.######. ;6 | ||
+ | !by %.######. ;7 | ||
+ | |||
+ | ; door2 | ||
+ | ; 76543210 | ||
+ | !by %...##... ;0 | ||
+ | !by %..####.. ;1 | ||
+ | !by %.######. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.####.#. ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %.######. ;6 | ||
+ | !by %.######. ;7 | ||
+ | |||
+ | ; super door | ||
+ | ; 76543210 | ||
+ | !by %...##... ;0 | ||
+ | !by %..####.. ;1 | ||
+ | !by %.######. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.####.#. ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %.######. ;6 | ||
+ | !by %.######. ;7 | ||
+ | |||
+ | ; key1 | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %..#..#.. ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...#.... ;4 | ||
+ | !by %...#.... ;5 | ||
+ | !by %...###.. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; key2 | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %..#..#.. ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...#.... ;4 | ||
+ | !by %...#.... ;5 | ||
+ | !by %...###.. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; super key | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %..#..#.. ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...#.... ;4 | ||
+ | !by %...#.... ;5 | ||
+ | !by %...###.. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; bomb | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %....##.. ;1 | ||
+ | !by %...#.... ;2 | ||
+ | !by %..###... ;3 | ||
+ | !by %.#####.. ;4 | ||
+ | !by %.#####.. ;5 | ||
+ | !by %..###... ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; live bomb | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %....##.. ;1 | ||
+ | !by %...#.... ;2 | ||
+ | !by %..###... ;3 | ||
+ | !by %.#####.. ;4 | ||
+ | !by %.#####.. ;5 | ||
+ | !by %..###... ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; unused1 | ||
+ | ; 76543210 | ||
+ | !by %#....... ;0 | ||
+ | !by %........ ;1 | ||
+ | !by %........ ;2 | ||
+ | !by %........ ;3 | ||
+ | !by %........ ;4 | ||
+ | !by %........ ;5 | ||
+ | !by %........ ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; unused2 | ||
+ | ; 76543210 | ||
+ | !by %##...... ;0 | ||
+ | !by %........ ;1 | ||
+ | !by %........ ;2 | ||
+ | !by %........ ;3 | ||
+ | !by %........ ;4 | ||
+ | !by %........ ;5 | ||
+ | !by %........ ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; rock | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %..####.. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %..####.. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; rock+plank+water | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %..####.. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %..####.. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; rock in a hole | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %........ ;1 | ||
+ | !by %........ ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %..####.. ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %.######. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; hole | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %........ ;1 | ||
+ | !by %........ ;2 | ||
+ | !by %........ ;3 | ||
+ | !by %........ ;4 | ||
+ | !by %.######. ;5 | ||
+ | !by %#......# ;6 | ||
+ | !by %.######. ;7 | ||
+ | |||
+ | ; water | ||
+ | ; 76543210 | ||
+ | !by %........ ;2 | ||
+ | !by %...##..# ;0 | ||
+ | !by %.##..##. ;1 | ||
+ | !by %........ ;2 | ||
+ | !by %........ ;2 | ||
+ | !by %...##..# ;3 | ||
+ | !by %.##..##. ;4 | ||
+ | !by %........ ;5 | ||
+ | |||
+ | ; plank | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %...##... ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...##... ;4 | ||
+ | !by %...##... ;5 | ||
+ | !by %...##... ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; plank on water | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %.##..... ;1 | ||
+ | !by %..##.... ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %....##.. ;4 | ||
+ | !by %.....##. ;5 | ||
+ | !by %......## ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; electricity A | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %......#. ;1 | ||
+ | !by %....##.. ;2 | ||
+ | !by %..##.... ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %....##.. ;5 | ||
+ | !by %..##.... ;6 | ||
+ | !by %.#...... ;7 | ||
+ | |||
+ | ; electricity B | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %......#. ;1 | ||
+ | !by %....##.. ;2 | ||
+ | !by %..##.... ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %....##.. ;5 | ||
+ | !by %..##.... ;6 | ||
+ | !by %.#...... ;7 | ||
+ | |||
+ | ; electricity switch | ||
+ | ; 76543210 | ||
+ | !by %.#.....# ;0 | ||
+ | !by %#.#...#. ;1 | ||
+ | !by %###..#.. ;2 | ||
+ | !by %#.#.#... ;3 | ||
+ | !by %...#.#.. ;4 | ||
+ | !by %..#..##. ;5 | ||
+ | !by %.#...#.# ;6 | ||
+ | !by %.....##. ;7 | ||
+ | |||
+ | ; teleport | ||
+ | ; 76543210 | ||
+ | !by %..####.. ;0 | ||
+ | !by %.##..##. ;1 | ||
+ | !by %#.#..#.# ;2 | ||
+ | !by %#.#..#.# ;3 | ||
+ | !by %#.#..#.# ;4 | ||
+ | !by %#.####.# ;5 | ||
+ | !by %##....## ;6 | ||
+ | !by %.######. ;7 | ||
+ | |||
+ | ; zapper-down | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %.######. ;1 | ||
+ | !by %..####.. ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...##... ;4 | ||
+ | !by %...##... ;5 | ||
+ | !by %...##... ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; zapper-up | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %...##... ;2 | ||
+ | !by %...##... ;3 | ||
+ | !by %...##... ;4 | ||
+ | !by %..####.. ;5 | ||
+ | !by %.######. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; zapper-right | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %.#...... ;1 | ||
+ | !by %.##..... ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %.##..... ;5 | ||
+ | !by %.#...... ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; zapper-left | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %......#. ;1 | ||
+ | !by %.....##. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %.....##. ;5 | ||
+ | !by %......#. ;6 | ||
+ | !by %........ ;7 | ||
+ | |||
+ | ; cash | ||
+ | ; 76543210 | ||
+ | !by %..#..#.. ;0 | ||
+ | !by %.######. ;1 | ||
+ | !by %#.#..#.# ;2 | ||
+ | !by %#.#..#.. ;3 | ||
+ | !by %.######. ;4 | ||
+ | !by %..#..#.# ;5 | ||
+ | !by %#.#..#.# ;6 | ||
+ | !by %.######. ;7 | ||
+ | |||
+ | ; player | ||
+ | ; 76543210 | ||
+ | !by %...##... ;0 | ||
+ | !by %..####.. ;1 | ||
+ | !by %...##... ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %...##... ;4 | ||
+ | !by %...##... ;5 | ||
+ | !by %..#..#.. ;6 | ||
+ | !by %..#..#.. ;7 | ||
+ | |||
+ | ; death | ||
+ | ; 76543210 | ||
+ | !by %...##... ;0 | ||
+ | !by %...##... ;1 | ||
+ | !by %.######. ;2 | ||
+ | !by %.######. ;3 | ||
+ | !by %...##... ;4 | ||
+ | !by %...##... ;5 | ||
+ | !by %...##... ;6 | ||
+ | !by %...##... ;7 | ||
+ | |||
+ | ; fire | ||
+ | ; 76543210 | ||
+ | !by %........ ;0 | ||
+ | !by %.#...#.. ;1 | ||
+ | !by %..#.#... ;2 | ||
+ | !by %.#..#.#. ;3 | ||
+ | !by %..##.#.. ;4 | ||
+ | !by %.##.###. ;5 | ||
+ | !by %.#.#..#. ;6 | ||
+ | !by %..####.. ;7 | ||
+ | |||
+ | |||
+ | ; --- Color lookup table (with $40 offset) | ||
+ | |||
+ | Colortable = *-$40 | ||
+ | !if easymode = 0 { | ||
+ | !by 0 ; ground (black,0) | ||
+ | } else { | ||
+ | !by 5 ; ground | ||
+ | } | ||
+ | !by 2 ; wall (red,2) | ||
+ | !by 11 ; super wall (dgray,11) | ||
+ | !by 9 ; door1 (brown,9) | ||
+ | !by 7 ; door2 (yellow,7) | ||
+ | !by 15 ; super door (lgray,15) | ||
+ | !by 9 ; key1 (brown,9) | ||
+ | !by 7 ; key2 (yellow,7) | ||
+ | !by 15 ; super key (lgray,15) | ||
+ | !by 12 ; bomb (gray,12) | ||
+ | !by 1 ; live bomb (white,1) | ||
+ | !by 2 ; unused1 | ||
+ | !by 3 ; unused2 | ||
+ | !by 11 ; rock (dgray,11) | ||
+ | !by 11 ; rock+plank+water (dgray,11) | ||
+ | !by 11 ; rock in a hole (dgray,11) | ||
+ | !by 11 ; hole (dgray,11) | ||
+ | !by 6 ; water (blue,6) | ||
+ | !by 9 ; plank (brown,9) | ||
+ | !by 9 ; plank on water (brown,9) | ||
+ | !by 7 ; electricity A (yellow,7) | ||
+ | !if easymode = 0 { | ||
+ | !by 0 ; electricity B (black,0) | ||
+ | } else { | ||
+ | !by 6 ; electricity B | ||
+ | } | ||
+ | !by 5 ; electricity switch (green,5) | ||
+ | !by 4 ; teleport (purple,4) | ||
+ | !by 10 ; zapper-down (pink,10) | ||
+ | !by 10 ; zapper-up (pink,10) | ||
+ | !by 10 ; zapper-right (pink,10) | ||
+ | !by 10 ; zapper-left (pink,10) | ||
+ | !by 7 ; cash (yellow,7) | ||
+ | !by 12 ; player (gray,12) | ||
+ | !by 12 ; death (gray,12) | ||
+ | !by 2 ; fire (red,2) | ||
+ | |||
+ | |||
+ | ; --- Bomb transform lookup table (with $40 offset) | ||
+ | |||
+ | Bombtable = *-$40 | ||
+ | !by tground ; ground | ||
+ | !by tground ; wall | ||
+ | !by tswall ; super wall | ||
+ | !by tground ; door1 | ||
+ | !by tground ; door2 | ||
+ | !by tsdoor ; super door | ||
+ | !by tkey1 ; key1 | ||
+ | !by tkey2 ; key2 | ||
+ | !by tskey ; super key | ||
+ | !by tbomb ; bomb | ||
+ | !by 0 ; live bomb | ||
+ | !by 0 ; unused1 | ||
+ | !by 0 ; unused2 | ||
+ | !by tground ; rock | ||
+ | !by tplankw ; rock+plank+water | ||
+ | !by thole ; rock in a hole | ||
+ | !by thole ; hole | ||
+ | !by twater ; water | ||
+ | !by tplank ; plank | ||
+ | !by tplankw ; plank on water | ||
+ | !by telea ; electricity A | ||
+ | !by tground ; electricity B | ||
+ | !by teles ; electricity switch | ||
+ | !by ttele ; teleport | ||
+ | !by tground ; zapper-down | ||
+ | !by tground ; zapper-up | ||
+ | !by tground ; zapper-right | ||
+ | !by tground ; zapper-left | ||
+ | !by tcash ; cash | ||
+ | !by tplayer ; player | ||
+ | !by 0 ; death | ||
+ | !by 0 ; fire | ||
+ | |||
+ | |||
+ | ; --- Rock transform lookup table (with $40 offset) | ||
+ | |||
+ | Rocktable = *-$40 | ||
+ | !by trock ; ground | ||
+ | !by 0 ; wall | ||
+ | !by 0 ; super wall | ||
+ | !by 0 ; door1 | ||
+ | !by 0 ; door2 | ||
+ | !by 0 ; super door | ||
+ | !by 0 ; key1 | ||
+ | !by 0 ; key2 | ||
+ | !by 0 ; super key | ||
+ | !by 0 ; bomb | ||
+ | !by 0 ; live bomb | ||
+ | !by 0 ; unused1 | ||
+ | !by 0 ; unused2 | ||
+ | !by 0 ; rock | ||
+ | !by 0 ; rock+plank+water | ||
+ | !by 0 ; rock in a hole | ||
+ | !by trockh ; hole | ||
+ | !by twater ; water | ||
+ | !by 0 ; plank | ||
+ | !by trockw ; plank on water | ||
+ | !by 0 ; electricity A | ||
+ | !by trock ; electricity B | ||
+ | !by 0 ; electricity switch | ||
+ | !by 0 ; teleport | ||
+ | !by 0 ; zapper-down | ||
+ | !by 0 ; zapper-up | ||
+ | !by 0 ; zapper-right | ||
+ | !by 0 ; zapper-left | ||
+ | !by 0 ; cash | ||
+ | !by 0 ; player | ||
+ | !by 0 ; death | ||
+ | !by 0 ; fire | ||
+ | |||
+ | |||
+ | ; --- Strings | ||
+ | |||
+ | ; - Common strings | ||
+ | |||
+ | gametitletext | ||
+ | !tx thole, | ||
+ | topbottomborder | ||
+ | !fi 40,tswall | ||
+ | !by 0 | ||
+ | statusbartext1 | ||
+ | !tx tbomb," | ||
+ | !tx tplank," | ||
+ | !tx tkey1," | ||
+ | !tx tkey2," | ||
+ | !tx tskey," | ||
+ | statusbartext2 | ||
+ | !tx "level 01",0 | ||
+ | |||
+ | teleporttext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | electext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | pickuptext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | useitemtext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | dropbombtext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | detonatebombtext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | restarttext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | nextleveltext | ||
+ | !tx "you got the ", | ||
+ | !by 0 | ||
+ | |||
+ | gamewontext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | zaptext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | ; - Help screens | ||
+ | |||
+ | ; |---------0---------0---------0--------| | ||
+ | helptext | ||
+ | !tx " help screen 1/3 : controls | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !if joystick = 0 { | ||
+ | !tx " | ||
+ | } else { | ||
+ | !tx " | ||
+ | } | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx "menu controls: | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " select level - left/ | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx "game controls: | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " restart level - fire (if ", | ||
+ | !tx " | ||
+ | !tx " detonate bomb - fire (if ", | ||
+ | blanktext | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | !tx " help screen 2/3 : instructions | ||
+ | !tx " | ||
+ | !tx "move ", | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx twall, | ||
+ | !tx " | ||
+ | !tx "use ", | ||
+ | !tx "use ", | ||
+ | !tx " | ||
+ | !tx "avoid ", | ||
+ | !tx " or they will turn ", | ||
+ | !tx "hide behind anything except " | ||
+ | !tx twater, | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx "push ", | ||
+ | !tx " | ||
+ | !tx "push ", | ||
+ | !by 0 | ||
+ | |||
+ | helptextlast | ||
+ | !tx " help screen 3/3 : credits & info " | ||
+ | !tx " | ||
+ | !tx "quest for cash is a c64 port of an old " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " levels 01-15 are from the original qfc " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !tx " | ||
+ | !by 0 | ||
+ | |||
+ | |||
+ | ; --- Levels (compressed) | ||
+ | |||
+ | clevels | ||
+ | ; level 01 | ||
+ | !by $e2, $e2, $e2, $62, $80, $62, $20, $17, $1d, $00, $06, $00, $02, $80, $11, $80 | ||
+ | !by $02, $00, $16, $00, $0d, $00, $14, $20, $15, $60, $0d, $20, $05, $00, $17, $02 | ||
+ | !by $c0, $03, $40, $12, $00, $02, $20, $09, $20, $01, $40, $0d, $00, $15, $00, $10 | ||
+ | !by $14, $00, $02, $1a, $20, $08, $00, $02, $20, $02, $1c, $20, $e2, $e2, $e2, $e2 | ||
+ | !by $e2, $ff | ||
+ | ; level 02 | ||
+ | !by $e1, $41, $e0, $e0, $e0, $80, $01, $00, $0d, $c0, $01, $e0, $e0, $e0, $80, $01 | ||
+ | !by $00, $0d, $c0, $01, $e0, $e0, $e0, $80, $01, $12, $0d, $20, $2d, $40, $01, $e0 | ||
+ | !by $e0, $e0, $80, $01, $00, $11, $c0, $01, $e0, $e0, $e0, $80, $01, $00, $01, $00 | ||
+ | !by $0d, $20, $01, $20, $01, $e0, $e0, $e0, $80, $21, $1c, $11, $4d, $00, $01, $00 | ||
+ | !by $01, $e0, $e0, $e0, $80, $01, $4d, $00, $0d, $00, $0d, $41, $e0, $e0, $e0, $80 | ||
+ | !by $01, $2d, $40, $0d, $40, $01, $e0, $e0, $e0, $80, $01, $0d, $20, $1d, $80, $01 | ||
+ | !by $e0, $e0, $e0, $80, $e1, $41, $ff | ||
+ | ; level 03 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $e0, $e0, $c0, $81, $e0, $e0, $e0, $e0, $40, $01, $00 | ||
+ | !by $16, $00, $01, $e0, $a0, $12, $e0, $e0, $60, $01, $4d, $01, $e0, $e0, $e0, $e0 | ||
+ | !by $80, $11, $e0, $e0, $00, $54, $e0, $40, $a1, $e0, $e0, $60, $14, $0d, $14, $e0 | ||
+ | !by $40, $01, $60, $01, $e0, $e0, $60, $54, $e0, $40, $03, $75, $01, $e0, $e0, $e0 | ||
+ | !by $e0, $20, $01, $55, $1c, $01, $e0, $e0, $e0, $80, $06, $00, $1b, $20, $01, $60 | ||
+ | !by $01, $e0, $e0, $e0, $e0, $20, $a1, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $80, $01, $20, $01, $00, $01, $20, $61, $40, $81, $e0 | ||
+ | !by $20, $1d, $e0, $00, $01, $00, $01, $20, $01, $20, $01, $40, $01, $20, $01, $e0 | ||
+ | !by $e0, $e0, $21, $40, $01, $20, $61, $40, $81, $e0, $e0, $60, $01, $00, $01, $20 | ||
+ | !by $01, $20, $01, $00, $01, $e0, $01, $e0, $e0, $60, $01, $00, $01, $20, $01, $20 | ||
+ | !by $01, $20, $01, $40, $81, $e0, $e0, $60, $01, $20, $01, $00, $01, $20, $01, $20 | ||
+ | !by $01, $ff | ||
+ | ; level 04 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $00, $1d, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0 | ||
+ | !by $c0, $55, $40, $16, $e0, $e0, $e0, $e0, $00, $15, $0d, $15, $e0, $e0, $e0, $e0 | ||
+ | !by $80, $55, $e0, $e0, $e0, $e0, $80, $54, $e0, $e0, $e0, $e0, $80, $14, $0d, $14 | ||
+ | !by $e0, $e0, $e0, $e0, $80, $54, $e0, $e0, $e0, $e0, $e0, $e0, $c0, $19, $e0, $e0 | ||
+ | !by $e0, $e0, $20, $06, $40, $1b, $00, $1a, $e0, $e0, $e0, $e0, $a0, $18, $e0, $e0 | ||
+ | !by $e0, $e0, $e0, $e0, $a1, $e0, $e0, $e0, $e0, $20, $03, $00, $04, $00, $1c, $01 | ||
+ | !by $e0, $e0, $e0, $e0, $20, $a1, $e0, $e0, $e0, $00, $07, $ff | ||
+ | ; level 05 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $80, $0d, $00, $2d, $00, $0d | ||
+ | !by $00, $2d, $20, $2d, $e0, $e0, $e0, $40, $8d, $09, $ed, $e0, $e0, $e0, $20, $8d | ||
+ | !by $11, $0d, $00, $0d, $20, $2d, $00, $0d, $20, $1b, $e0, $e0, $80, $2d, $00, $0d | ||
+ | !by $00, $2d, $00, $0d, $00, $2d, $00, $4d, $e0, $e0, $e0, $00, $2d, $00, $0d, $00 | ||
+ | !by $0d, $00, $1d, $0d, $00, $0d, $18, $0d, $00, $2d, $e0, $e0, $c0, $4d, $00, $0d | ||
+ | !by $00, $0d, $00, $0d, $00, $0d, $20, $0d, $00, $2d, $e0, $e0, $e0, $4d, $00, $2d | ||
+ | !by $00, $0d, $00, $0d, $00, $0d, $00, $4d, $e0, $e0, $e0, $20, $2d, $00, $ad, $00 | ||
+ | !by $4d, $e0, $e0, $c0, $1a, $60, $0d, $40, $4d, $00, $0d, $e0, $e0, $e0, $e0, $e0 | ||
+ | !by $e0, $e0, $e0, $e0, $60, $01, $00, $01, $19, $e0, $e0, $e0, $e0, $60, $01, $00 | ||
+ | !by $01, $e0, $e0, $e0, $e0, $80, $01, $00, $01, $e0, $e0, $e0, $e0, $80, $01, $20 | ||
+ | !by $e1, $01, $00, $e1, $21, $e0, $e0, $00, $21, $e0, $1a, $00, $01, $06, $01, $00 | ||
+ | !by $1b, $20, $03, $1c, $21, $e0, $e0, $40, $e1, $21, $00, $e1, $21, $ff | ||
+ | ; level 06 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $40, $1d, $a0, $0d, $e0, $e0 | ||
+ | !by $e0, $e0, $a0, $0d, $20, $1b, $c0, $95, $e0, $e0, $a0, $0d, $e0, $60, $15, $40 | ||
+ | !by $15, $e0, $e0, $0d, $40, $0d, $20, $0d, $00, $12, $00, $12, $c0, $95, $e0, $e0 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $51, $c0, $01, $04, $01, $e0 | ||
+ | !by $e0, $e0, $20, $1a, $11, $00, $11, $c0, $01, $06, $01, $e0, $e0, $e0, $40, $11 | ||
+ | !by $16, $11, $c0, $41, $e0, $e0, $e0, $40, $51, $e0, $e0, $e0, $e0, $e0, $e0, $00 | ||
+ | !by $19, $e0, $e0, $e0, $e0, $e0, $20, $1a, $00, $07, $e0, $61, $e0, $e0, $e0, $e0 | ||
+ | !by $60, $03, $34, $01, $e0, $e0, $e0, $e0, $60, $01, $1c, $14, $01, $e0, $e0, $e0 | ||
+ | !by $e0, $60, $61, $ff | ||
+ | ; level 07 | ||
+ | !by $a0, $21, $00, $0d, $40, $0d, $00, $0d, $c0, $0d, $40, $01, $60, $f1, $20, $1d | ||
+ | !by $40, $01, $06, $00, $0d, $00, $0d, $00, $0d, $40, $0d, $40, $2d, $00, $0d, $00 | ||
+ | !by $0d, $21, $60, $d1, $81, $00, $21, $00, $0d, $00, $0d, $40, $0d, $00, $0d, $00 | ||
+ | !by $0d, $00, $0d, $00, $0d, $00, $0d, $e0, $b1, $a0, $01, $00, $0d, $00, $0d, $00 | ||
+ | !by $61, $00, $e1, $a1, $60, $91, $a0, $c1, $20, $41, $e0, $20, $51, $80, $71, $a0 | ||
+ | !by $0d, $e0, $00, $0d, $40, $41, $a0, $31, $a0, $51, $21, $03, $e1, $41, $00, $a1 | ||
+ | !by $e0, $00, $11, $c0, $31, $12, $11, $0d, $01, $0d, $00, $0d, $00, $16, $00, $0d | ||
+ | !by $00, $0d, $01, $00, $01, $e0, $a0, $11, $e0, $51, $00, $01, $ed, $21, $00, $21 | ||
+ | !by $e0, $80, $11, $e0, $11, $40, $01, $e0, $01, $40, $01, $e0, $80, $11, $e0, $11 | ||
+ | !by $40, $01, $e0, $01, $40, $01, $e0, $80, $11, $e0, $11, $20, $0d, $01, $e0, $01 | ||
+ | !by $20, $0d, $01, $e0, $80, $11, $c0, $31, $e0, $60, $21, $12, $21, $e0, $80, $11 | ||
+ | !by $a0, $51, $e0, $80, $41, $11, $e0, $60, $51, $60, $71, $c0, $b4, $41, $31, $e0 | ||
+ | !by $20, $f1, $71, $c0, $14, $95, $41, $f1, $f1, $f1, $c0, $14, $15, $60, $41, $31 | ||
+ | !by $a0, $31, $20, $d1, $81, $c0, $14, $15, $20, $07, $00, $41, $11, $a0, $71, $20 | ||
+ | !by $51, $00, $12, $00, $04, $14, $20, $01, $c0, $14, $15, $60, $41, $c0, $11, $32 | ||
+ | !by $11, $40, $11, $60, $01, $14, $1c, $00, $e1, $e1, $01, $a0, $b1, $c0, $81 | ||
+ | ; level 08 | ||
+ | !by $1d, $e0, $c0, $11, $e0, $e0, $00, $8d, $16, $80, $41, $00, $0d, $a0, $11, $e0 | ||
+ | !by $e0, $2d, $00, $4d, $a0, $01, $07, $01, $e0, $11, $e0, $e0, $4d, $e0, $00, $01 | ||
+ | !by $07, $01, $e0, $11, $e0, $c0, $0d, $00, $0d, $00, $0d, $00, $2d, $80, $41, $e0 | ||
+ | !by $11, $e0, $c0, $2d, $00, $0d, $00, $4d, $e0, $e0, $11, $e0, $e0, $6d, $00, $2d | ||
+ | !by $e0, $c0, $51, $e0, $e0, $40, $0d, $00, $0d, $e0, $a0, $11, $15, $19, $15, $11 | ||
+ | !by $e0, $e0, $e0, $e0, $40, $11, $1b, $1c, $1a, $11, $e0, $e0, $e0, $e0, $40, $11 | ||
+ | !by $15, $18, $15, $11, $e0, $e0, $e0, $e0, $60, $51, $e0, $e0, $e0, $e0, $e0, $e0 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0 | ||
+ | !by $c0, $61, $00, $0d, $e0, $20, $0d, $e0, $e0, $a0, $a1, $e0, $e0, $e0, $e0, $20 | ||
+ | !by $01, $00, $12, $00, $24, $e0, $e0, $e0, $e0, $20, $a1, $e0, $e0, $e0, $c0, $54 | ||
+ | !by $00, $61, $e0, $e0, $e0, $e0, $14, $29 | ||
+ | ; level 09 | ||
+ | !by $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0, $c0, $1b, $a0, $e1, $e1, $e1, $c1 | ||
+ | !by $e0, $0d, $01, $60, $01, $e0, $e0, $60, $03, $40, $01, $06, $40, $1d, $60, $03 | ||
+ | !by $00, $06, $20, $03, $80, $e1, $e1, $4d, $01, $e0, $0d, $01, $60, $01, $60, $81 | ||
+ | !by $e0, $20, $21, $00, $0d, $00, $01, $00, $15, $1b, $a0, $01, $60, $01, $40, $a1 | ||
+ | !by $40, $95, $20, $21, $0d, $00, $0d, $01, $e0, $00, $21, $03, $41, $e0, $04, $40 | ||
+ | !by $35, $14, $35, $20, $21, $40, $01, $e0, $00, $01, $80, $01, $20, $a1, $40, $15 | ||
+ | !by $14, $1c, $14, $15, $20, $21, $0d, $20, $01, $e0, $00, $01, $a0, $01, $20, $81 | ||
+ | !by $40, $35, $14, $35, $20, $21, $2d, $12, $01, $e0, $00, $01, $c0, $01, $20, $61 | ||
+ | !by $40, $95, $20, $a1, $e0, $00, $01, $e0, $01, $20, $41, $e0, $20, $21, $49, $01 | ||
+ | !by $e0, $00, $01, $40, $c1, $20, $e1, $a1, $49, $04, $e0, $00, $01, $40, $01, $a0 | ||
+ | !by $01, $20, $e1, $81, $49, $01, $e0, $00, $01, $e0, $40, $01, $20, $e1, $e1, $20 | ||
+ | !by $1b, $a0, $01, $40, $01, $80, $26, $00, $01, $e0, $60, $03, $11, $20, $01, $e0 | ||
+ | !by $00, $01, $40, $01, $a0, $06, $20, $01, $e0, $40, $01, $20, $07, $01, $16, $e0 | ||
+ | !by $e1, $e1, $e1, $c1, $e0, $e0, $e0, $e0, $e0, $20, $1b, $ff | ||
+ | ; level 10 | ||
+ | !by $62, $e0, $01, $40, $12, $01, $e0, $60, $e2, $42, $1c, $17, $02, $e0, $01, $40 | ||
+ | !by $1b, $01, $e0, $60, $02, $e9, $82, $e0, $01, $20, $19, $11, $01, $e0, $60, $e2 | ||
+ | !by $09, $02, $60, $16, $80, $15, $00, $1b, $01, $00, $41, $e0, $60, $0f, $14, $15 | ||
+ | !by $14, $15, $14, $15, $14, $15, $02, $e0, $40, $04, $e0, $e0, $20, $e2, $09, $02 | ||
+ | !by $a0, $10, $40, $10, $0d, $10, $e0, $e0, $00, $02, $e9, $02, $60, $15, $03, $0d | ||
+ | !by $10, $40, $10, $e0, $e0, $20, $e2, $22, $61, $19, $00, $10, $e0, $e0, $a0, $10 | ||
+ | !by $0d, $00, $0d, $00, $0d, $20, $08, $a0, $01, $e0, $e0, $e0, $10, $2d, $20, $0d | ||
+ | !by $e0, $e0, $e0, $e0, $40, $10, $4d, $20, $2d, $00, $0d, $40, $1b, $01, $e0, $e0 | ||
+ | !by $e0, $00, $10, $0d, $00, $4d, $00, $4d, $32, $19, $11, $01, $e0, $e0, $e0, $20 | ||
+ | !by $10, $2d, $00, $6d, $00, $e2, $62, $e0, $e0, $60, $30, $4d, $00, $2d, $06, $a0 | ||
+ | !by $10, $40, $02, $e0, $e0, $a0, $b0, $15, $00, $10, $00, $10, $00, $10, $0d, $10 | ||
+ | !by $20, $02, $e0, $e0, $e0, $60, $14, $15, $10, $40, $10, $60, $02, $e0, $e0, $e0 | ||
+ | !by $60, $11, $14, $15, $00, $10, $80, $10, $05, $e0, $e0, $e0, $60, $31, $14, $15 | ||
+ | !by $20, $10, $60, $02, $e0, $e0, $e0, $60, $51, $14, $15, $20, $10, $40, $02, $e0 | ||
+ | !by $e0, $e0, $60, $17, $51, $14, $15, $07, $00, $10, $20, $02, $e0, $e0, $e0, $40 | ||
+ | !by $1d | ||
+ | ; level 11 | ||
+ | !by $e1, $e1, $e1, $e1, $e1, $01, $40, $04, $e0, $40, $0d, $e0, $03, $e0, $60, $06 | ||
+ | !by $21, $00, $18, $21, $20, $31, $0d, $e0, $01, $d1, $80, $01, $60, $01, $20, $21 | ||
+ | !by $20, $01, $00, $01, $71, $c0, $41, $e0, $40, $21, $40, $01, $20, $21, $20, $01 | ||
+ | !by $20, $01, $18, $11, $0d, $11, $c0, $01, $e0, $60, $01, $18, $01, $20, $01, $20 | ||
+ | !by $21, $20, $01, $20, $01, $00, $31, $a0, $01, $00, $01, $00, $01, $e0, $20, $01 | ||
+ | !by $34, $01, $09, $01, $20, $21, $20, $01, $00, $01, $e0, $40, $41, $0d, $e0, $20 | ||
+ | !by $01, $40, $21, $20, $21, $20, $21, $e0, $80, $01, $e0, $60, $01, $20, $0d, $00 | ||
+ | !by $01, $20, $21, $e0, $e0, $00, $01, $e0, $e0, $60, $21, $e0, $e0, $41, $e0, $e0 | ||
+ | !by $40, $21, $e0, $e0, $00, $01, $e0, $e0, $60, $21, $e0, $c0, $01, $00, $01, $00 | ||
+ | !by $01, $60, $35, $e0, $60, $21, $e0, $40, $01, $60, $41, $60, $01, $1a, $15, $e0 | ||
+ | !by $60, $21, $e0, $00, $e1, $e1, $01, $e0, $60, $21, $e0, $40, $01, $60, $41, $40 | ||
+ | !by $18, $01, $e0, $a0, $21, $e0, $c0, $01, $00, $01, $00, $01, $e0, $e0, $20, $21 | ||
+ | !by $a0, $2d, $a0, $14, $00, $1b, $01, $1a, $e0, $e0, $40, $21, $c0, $1c, $19, $a0 | ||
+ | !by $14, $41, $e0, $e0, $1d, $20, $21, $12, $19, $e0, $c0, $01, $16, $60, $29, $0d | ||
+ | !by $e0, $20, $19, $07, $e1, $e1, $e1, $e1, $e1, $01 | ||
+ | ; level 12 | ||
+ | !by $e1, $e1, $e1, $e1, $e1, $01, $b1, $e0, $e0, $e0, $c0, $18, $c1, $11, $40, $0d | ||
+ | !by $e0, $c0, $6d, $a1, $40, $21, $49, $00, $03, $13, $e0, $e0, $00, $0d, $e1, $61 | ||
+ | !by $20, $c1, $91, $e0, $80, $0d, $a1, $18, $20, $41, $20, $21, $b1, $41, $31, $e0 | ||
+ | !by $60, $0d, $21, $27, $80, $41, $20, $e1, $18, $20, $01, $11, $e0, $60, $0d, $21 | ||
+ | !by $12, $20, $0d, $20, $2d, $21, $20, $21, $e0, $01, $31, $e0, $60, $0d, $a1, $14 | ||
+ | !by $81, $20, $21, $18, $1a, $80, $01, $31, $e0, $c0, $81, $14, $61, $00, $0d, $00 | ||
+ | !by $21, $a0, $0d, $01, $31, $e0, $80, $0d, $91, $01, $14, $01, $a0, $21, $16, $a0 | ||
+ | !by $15, $33, $e0, $20, $01, $2d, $b1, $01, $00, $01, $a0, $21, $a0, $0d, $01, $31 | ||
+ | !by $e0, $00, $21, $f1, $01, $00, $01, $a0, $21, $19, $1a, $80, $01, $31, $e0, $21 | ||
+ | !by $f1, $11, $01, $00, $21, $80, $21, $e0, $01, $31, $c0, $01, $f1, $31, $01, $e0 | ||
+ | !by $e1, $19, $20, $01, $11, $c0, $01, $f1, $31, $01, $00, $21, $80, $21, $b1, $41 | ||
+ | !by $31, $c0, $04, $91, $1c, $71, $01, $00, $e1, $a1, $91, $c0, $21, $f1, $31, $01 | ||
+ | !by $e0, $21, $72, $04, $11, $e0, $20, $21, $f1, $51, $01, $a0, $1d, $00, $c1, $11 | ||
+ | !by $e0, $06, $2d, $f1, $71, $01, $00, $0d, $00, $21, $40, $e1, $e1, $e1, $e1, $e1 | ||
+ | !by $01 | ||
+ | ; level 13 | ||
+ | !by $1d, $4d, $00, $0d, $12, $2d, $51, $e0, $40, $11, $e0, $e0, $2d, $20, $0d, $40 | ||
+ | !by $0d, $51, $40, $1b, $07, $1a, $80, $31, $e0, $e0, $4d, $20, $2d, $00, $51, $40 | ||
+ | !by $1b, $07, $1a, $60, $71, $e0, $60, $31, $2d, $00, $4d, $00, $b1, $e0, $d1, $16 | ||
+ | !by $c0, $b1, $01, $00, $01, $f1, $f1, $f1, $11, $01, $00, $01, $f1, $11, $01, $00 | ||
+ | !by $01, $f1, $f1, $f1, $11, $01, $00, $01, $f1, $11, $01, $00, $01, $f1, $f1, $f1 | ||
+ | !by $11, $01, $00, $01, $f1, $21, $00, $21, $20, $01, $f1, $f1, $91, $01, $00, $01 | ||
+ | !by $d1, $00, $01, $20, $21, $20, $81, $18, $f1, $91, $74, $20, $15, $b1, $00, $01 | ||
+ | !by $e0, $00, $06, $01, $40, $f1, $31, $54, $31, $f5, $11, $00, $a1, $00, $81, $09 | ||
+ | !by $20, $f1, $31, $54, $f1, $11, $15, $11, $e0, $e0, $00, $f1, $74, $b1, $75, $11 | ||
+ | !by $e0, $e0, $00, $f1, $74, $b1, $15, $71, $e0, $e0, $20, $f1, $54, $71, $55, $71 | ||
+ | !by $e0, $e0, $40, $f1, $34, $71, $15, $b1, $e0, $e0, $40, $b1, $74, $71, $15, $b1 | ||
+ | !by $a1, $e0, $80, $31, $40, $94, $71, $15, $b1, $a1, $e0, $60, $03, $11, $80, $11 | ||
+ | !by $00, $b1, $b5, $11, $1c, $40, $21, $60, $4d, $80, $71, $40, $11, $00, $f1, $51 | ||
+ | !by $15, $11, $60, $24, $60, $0d, $12, $0d, $40, $f1, $40, $f5, $75, $11 | ||
+ | ; level 14 | ||
+ | !by $e1, $e1, $e1, $e1, $e1, $01, $08, $18, $20, $02, $20, $33, $18, $f3, $73, $2d | ||
+ | !by $d3, $c0, $21, $40, $17, $02, $00, $0d, $e0, $e0, $e0, $c0, $21, $82, $c0, $81 | ||
+ | !by $c0, $54, $c0, $41, $09, $21, $e0, $60, $01, $09, $20, $01, $a0, $22, $03, $22 | ||
+ | !by $80, $01, $51, $41, $c0, $19, $21, $e0, $00, $21, $20, $22, $17, $22, $60, $15 | ||
+ | !by $18, $01, $11, $01, $11, $21, $e0, $41, $00, $e1, $01, $00, $19, $82, $60, $15 | ||
+ | !by $00, $09, $31, $08, $21, $80, $10, $e0, $e0, $60, $18, $80, $15, $10, $11, $18 | ||
+ | !by $31, $21, $40, $19, $01, $22, $21, $40, $01, $22, $21, $40, $01, $22, $21, $40 | ||
+ | !by $01, $22, $21, $15, $00, $11, $0d, $00, $21, $e0, $01, $c0, $01, $a0, $06, $01 | ||
+ | !by $40, $18, $09, $00, $18, $01, $15, $60, $21, $e0, $10, $e0, $e0, $e0, $15, $60 | ||
+ | !by $21, $60, $01, $22, $21, $40, $01, $22, $21, $40, $01, $22, $21, $40, $01, $22 | ||
+ | !by $21, $15, $60, $21, $e0, $01, $c0, $01, $80, $0d, $00, $01, $a0, $18, $01, $15 | ||
+ | !by $60, $21, $e0, $10, $c0, $10, $40, $09, $19, $e0, $40, $15, $60, $21, $60, $01 | ||
+ | !by $22, $21, $40, $01, $22, $21, $20, $19, $01, $22, $21, $40, $01, $22, $21, $15 | ||
+ | !by $60, $21, $c0, $09, $01, $40, $1b, $00, $07, $18, $01, $c0, $01, $c0, $01, $15 | ||
+ | !by $60, $21, $1a, $e0, $e0, $e0, $19, $c0, $15, $60, $61, $04, $81, $03, $81, $04 | ||
+ | !by $81, $03, $81, $04, $a1, $00, $24, $61, $16, $40, $06, $01, $20, $07, $09, $00 | ||
+ | !by $01, $06, $60, $01, $60, $09, $01, $60, $09, $01, $42, $60, $32, $e1, $e1, $e1 | ||
+ | !by $c1, $02, $1c, $05, $0d, $1d, $20, $27 | ||
+ | ; level 15 | ||
+ | !by $21, $31, $21, $16, $11, $21, $31, $21, $31, $21, $31, $21, $31, $21, $31, $14 | ||
+ | !by $01, $31, $21, $31, $21, $51, $1d, $18, $14, $18, $01, $11, $01, $00, $01, $11 | ||
+ | !by $01, $00, $01, $12, $01, $00, $01, $06, $01, $00, $01, $12, $01, $00, $01, $12 | ||
+ | !by $01, $14, $01, $06, $01, $00, $01, $07, $01, $00, $01, $16, $21, $00, $11, $20 | ||
+ | !by $41, $13, $01, $0d, $01, $13, $41, $13, $41, $13, $41, $13, $41, $14, $41, $13 | ||
+ | !by $41, $13, $21, $31, $e0, $80, $04, $e0, $40, $13, $00, $14, $00, $09, $00, $15 | ||
+ | !by $00, $07, $00, $15, $20, $21, $00, $11, $00, $09, $11, $00, $11, $00, $11, $00 | ||
+ | !by $11, $20, $18, $f4, $54, $18, $11, $14, $f1, $11, $00, $31, $00, $12, $e0, $a0 | ||
+ | !by $13, $11, $1a, $11, $09, $11, $1b, $11, $13, $15, $20, $11, $14, $11, $13, $11 | ||
+ | !by $14, $11, $13, $11, $00, $21, $00, $11, $00, $41, $00, $41, $11, $e0, $11, $e0 | ||
+ | !by $f1, $11, $15, $14, $11, $00, $14, $00, $01, $12, $01, $09, $01, $0d, $01, $40 | ||
+ | !by $1a, $e0, $60, $0d, $e0, $00, $11, $00, $21, $00, $11, $01, $d4, $11, $00, $11 | ||
+ | !by $01, $51, $20, $11, $00, $51, $20, $31, $e0, $1b, $13, $31, $00, $14, $00, $14 | ||
+ | !by $80, $14, $51, $19, $51, $13, $31, $00, $11, $0d, $11, $20, $11, $00, $11, $00 | ||
+ | !by $11, $40, $11, $00, $11, $00, $21, $09, $11, $00, $d4, $11, $01, $1b, $07, $51 | ||
+ | !by $20, $13, $00, $51, $e0, $80, $51, $00, $f1, $71, $13, $51, $00, $11, $60, $11 | ||
+ | !by $60, $71, $00, $11, $00, $11, $00, $31, $01, $09, $0d, $00, $0d, $e0, $00, $15 | ||
+ | !by $00, $11, $1b, $11, $1a, $11, $0d, $80, $14, $00, $11, $29, $11, $09, $11, $00 | ||
+ | !by $0d, $00, $21, $11, $20, $0d, $00, $f1, $11, $13, $51, $1a, $11, $40, $12, $0d | ||
+ | !by $60, $71, $00, $11, $20, $61, $09, $11, $e0, $80, $31, $1b, $71, $40, $f5, $15 | ||
+ | !by $81, $11, $20, $11, $40, $d4, $00, $14, $11, $a0, $03, $11, $00, $15, $b4, $11 | ||
+ | !by $14, $61, $12, $01, $0d, $60, $11, $14, $11, $13, $07, $13, $11, $14, $00, $11 | ||
+ | !by $14, $20, $54, $11, $34, $00, $15, $14, $95, $20, $81, $11, $01, $09, $21, $20 | ||
+ | !by $d4, $00, $51, $04, $14, $11, $14, $11, $14, $20, $15, $14, $1a, $80, $01, $00 | ||
+ | !by $04, $61, $1a, $00, $06, $01, $11, $e0, $60, $15, $54, $11, $01, $00, $0d, $15 | ||
+ | !by $14, $1a, $80, $04, $03, $91, $21, $31, $21, $31, $21, $31, $21, $31, $21, $31 | ||
+ | !by $21, $31, $00, $15, $31, $15, $0d, $15, $00, $04, $03, $04, $03, $04, $03, $1c | ||
+ | |||
+ | ; check if I/O area is reached | ||
+ | !if * > $cfff { | ||
+ | !error "Level data goes over $cfff!" | ||
+ | } | ||
+ | </ |
base/quest_for_cash.txt · Last modified: 2015-04-17 04:33 by 127.0.0.1