User Tools

Site Tools


base:quest_for_cash

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->color difference MSB
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/selected level
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://user.tninet.se/~uxm165t/demo_programming/demo_prog/demo_prog.html
; ... + 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,x; load from custom chars
	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,x
sta vicborder	; set border
lda #0
sta vicbackgnd	; set background black

; print text
lda #>gametitletext
sta tmpptr+1
lda #<gametitletext
sta tmpptr
lda #>screen
sta scrptr+1
lda #<screen
sta scrptr
lda #gametitletextcol
jsr printstring

lda #>topbottomborder
sta tmpptr+1
lda #<topbottomborder
sta tmpptr
lda #>screen+40
sta scrptr+1
lda #<screen+40
sta scrptr
jsr printstring

lda #>screen+40*22
sta scrptr+1
lda #<screen+40*22
sta scrptr
jsr printstring

reloadstartmenu:
lda #>statusbartext1
sta tmpptr+1
lda #<statusbartext1
sta tmpptr
lda #>statusbartext1loc
sta scrptr+1
lda #<statusbartext1loc
sta scrptr
lda #statusbartext1col
jsr printstring

lda #>statusbartext2
sta tmpptr+1
lda #<statusbartext2
sta tmpptr
lda #>statusbartext2loc
sta scrptr+1
lda #<statusbartext2loc
sta scrptr
lda #statusbartext2col
jsr printstring

; - Start menu
;
startmenu:
lda #1
sta level
jsr erasestatustext

; set pointer to helptext page 1
startmenu_helppage1:
lda #>helptext
sta storedptr+1
lda #<helptext
sta storedptr

startmenu_drawhelp:
; check if valid helptext page
lda storedptr+1
cmp #>helptext
bcc startmenu_helppage1
cmp #>helptextlast
beq +
bcs startmenu_helppage1

; draw help screen
+ lda storedptr+1
sta tmpptr+1
lda storedptr
sta tmpptr
lda #>gamescreenloc
sta scrptr+1
lda #<gamescreenloc
sta scrptr
lda #helptextcol
jsr printstring

; start menu input loop
- jsr getinput
sta tmp
lda #%00000001	; up
bit tmp		; test if up
beq ++		; skip if not
; up pressed
lda storedptr
sec
sbc #<helptextlen
sta storedptr
lda storedptr+1
sbc #>helptextlen
sta storedptr+1
jmp startmenu_drawhelp
++ lda #%00000010	; down
bit tmp		; test if down
beq ++		; skip if not
; down pressed
lda storedptr
clc
adc #<helptextlen
sta storedptr
lda storedptr+1
adc #>helptextlen
sta storedptr+1
jmp startmenu_drawhelp
++ lda #%00000100	; left
bit tmp		; test if left
beq ++		; skip if not
; left pressed
dec level
bne +
inc level
bne -
+ lda #>bcdlevel
sta tmpptr+1
lda #<bcdlevel
sta tmpptr
jsr bcddec
jmp -
++ lda #%00001000	; right
bit tmp		; test if right
beq ++		; skip if not
; right pressed
inc level
lda #levels+1
cmp level
bne +
dec level
bne -
+ lda #>bcdlevel
sta tmpptr+1
lda #<bcdlevel
sta tmpptr
jsr bcdinc
jmp -
++ lda #%00010000	; fire
bit tmp		; test if fire
bne +		; jump if pressed
jmp -		; back to input loop


; init game
+ lda #>clevels
sta tmpptr+1
lda #<clevels
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 #%00000001	; up
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 #%00000010	; down
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 #%00000100	; left
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 #%00001000	; right
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 #%00010000	; fire
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 #>restarttext
sta tmpptr+1
lda #<restarttext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #restarttextcol
jsr printstring
jsr getinput
sta movedir
jsr erasestatustext
lda #%00010000	; fire
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<->right wrap
lda #%00001100	; left or right
bit movedir	; test if left or right
beq movement_check	; skip if not
ldx newptrh
lda newptr
jsr mod40
sta tmp		; tmp = new location mod 40
lda #%00000100	; left
bit movedir	; test if left
beq +		; skip if right
lda #39
cmp tmp		; check if 39 (left->right)
bne movement_check	; skip if not
jmp gameloop	; left->right wrap, back to loop
+ lda tmp	; check if 0 (right->left)
bne movement_check	; skip if not
jmp gameloop	; right->left wrap, back to loop

; 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),y	; erase item
inc ikey1
lda #>bcdkey1
sta tmpptr+1
lda #<bcdkey1
sta tmpptr
jsr bcdinc	; increase count
jsr printpickup
jmp movement_draw
+ cpx #tkey2	; check if key2
bne +		; if not, skip
sta (tmpptr),y	; erase item
inc ikey2
lda #>bcdkey2
sta tmpptr+1
lda #<bcdkey2
sta tmpptr
jsr bcdinc	; increase count
jsr printpickup
jmp movement_draw
+ cpx #tskey	; check if skey
bne +		; if not, skip
sta (tmpptr),y	; erase item
inc iskey
lda #>bcdskey
sta tmpptr+1
lda #<bcdskey
sta tmpptr
jsr bcdinc	; increase count
jsr printpickup
jmp movement_draw
+ cpx #tbomb	; check if bomb
bne +		; if not, skip
sta (tmpptr),y	; erase item
inc ibomb
lda #>bcdbomb
sta tmpptr+1
lda #<bcdbomb
sta tmpptr
jsr bcdinc	; increase count
jsr printpickup
jmp movement_draw
+ cpx #tplank	; check if plank
bne +		; if not, skip
sta (tmpptr),y	; erase item
inc iplank
lda #>bcdplank
sta tmpptr+1
lda #<bcdplank
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),y	; water->plank on water
dec iplank
lda #>bcdplank
sta tmpptr+1
lda #<bcdplank
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),y	; door->ground
dec ikey1
lda #>bcdkey1
sta tmpptr+1
lda #<bcdkey1
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),y	; door->ground
dec ikey2
lda #>bcdkey2
sta tmpptr+1
lda #<bcdkey2
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),y	; door->ground
dec iskey
lda #>bcdskey
sta tmpptr+1
lda #<bcdskey
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	; switch elec.
++ cpx #tcash	; check if cash
bne ++		; if not, skip
jmp nextlevel
++ cpx #ttele	; check if teleport
bne ++		; if not, skip
jsr domovement	; move into teleport (erase curr. tele)
lda #ttele	; a = ttele
jsr findchar	; tmpptr -> other teleport
lda tmpptr
sta newptr
lda tmpptr+1
sta newptrh	; newptr -> other teleport
lda #>teleporttext
sta tmpptr+1
lda #<teleporttext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #teleporttextcol
jsr printstring

jmp movement_draw	; teleport

; 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	; if it is, move
cpx #tplankw	; check if plank on water
beq movement_draw	; if it is, move
cpx #thole	; check if hole
beq movement_draw	; if it is, move
cpx #teleb	; check if inactive elec.
beq movement_draw	; if it is, move
cpx #tlbomb	; check if inactive elec.
beq movement_draw	; if it is, move
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 #>zaptext
sta tmpptr+1
lda #<zaptext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #zaptextcol
jsr printstring
- jsr getinput
sta movedir
lda #%00010000	; fire
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 #>dropbombtext
sta tmpptr+1
lda #<dropbombtext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #dropbombtextcol
jsr printstring
sec
lda playerptr
sbc #40
sta lbombptr
lda playerptrh
sta lbombptrh
bcs +
dec lbombptrh	; lbombptr -> bomb_location - 40
+ dec ibomb
lda #>bcdbomb
sta tmpptr+1
lda #<bcdbomb
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 #>electext
sta tmpptr+1
lda #<electext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #electextcol
jsr printstring

; point to start of game screen
lda #>gamescreenloc
sta scrptr+1
lda #<gamescreenloc
sta scrptr
ldy #0
; replace telea<->teleb
- 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 #>gamescreenendloc
cmp scrptr+1
bne -
lda #<gamescreenendloc
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 #%00001100	; left or right
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 #%00000100	; left
bit movedir	; test if left
beq +		; skip if right
lda #39
cmp tmp		; check if 39 (left->right)
bne ++		; skip if not
jmp gameloop	; left->right wrap, back to loop
+ lda tmp	; check if 0 (right->left)
bne ++		; skip if not
jmp gameloop	; right->left wrap, back to loop

; 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 #>detonatebombtext
sta tmpptr+1
lda #<detonatebombtext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #detonatebombtextcol
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,x	; transform old tile
sta underlbombu
ldy #80		; down
lda #tfire
jsr replacetile
tax
lda Bombtable,x	; transform old tile
sta underlbombd
lda underlbombl	; left (if not on edge)
beq ++
ldy #39		; left
lda #tfire
jsr replacetile
tax
lda Bombtable,x	; transform old tile
sta underlbombl
++ lda underlbombr	; right (if not on edge)
beq ++
ldy #41		; right
lda #tfire
jsr replacetile
tax
lda Bombtable,x	; transform old tile
sta underlbombr
++ ldy #40		; center
lda #tfire
jsr replacetile
ldx underlbomb
lda Bombtable,x	; transform old tile
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	; left (if not on edge)
beq ++
ldy #39		; left
jsr replacetile
++ lda underlbombr	; right (if not on edge)
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 #>nextleveltext
sta tmpptr+1
lda #<nextleveltext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #nextleveltextcol
jsr printstring
- jsr getinput
sta movedir
lda #%00010000	; fire
bit movedir	; test if fire
beq -
lda #>bcdlevel
sta tmpptr+1
lda #<bcdlevel
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 #>gamewontext
sta tmpptr+1
lda #<gamewontext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #gamewontextcol
jsr printstring
- jsr getinput
sta movedir
lda #%00010000	; fire
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 #>pickuptext
sta tmpptr+1
lda #<pickuptext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #pickuptextcol
jsr printstring
rts

; - printuseitem
; parameters:
;  a = item
;  x = used on
;
printuseitem:
sta useitemtextloc
stx useitemtextloc2
lda #>useitemtext
sta tmpptr+1
lda #<useitemtext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
lda #useitemtextcol
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&right edges
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),y	; a = old tile
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 #>blanktext
sta tmpptr+1
lda #<blanktext
sta tmpptr
lda #>statustextloc
sta scrptr+1
lda #<statustextloc
sta scrptr
jsr printstring
rts

; - bcdinc
; parameters:
;  tmpptr -> BCD MSB
;
bcdinc:
ldy #1
- lda (tmpptr),y
clc
adc #1
cmp #'9'+1
bne +
lda #'0'
sta (tmpptr),y
dey
beq -
+ sta (tmpptr),y
rts

; - bcddec
; parameters:
;  tmpptr -> BCD MSB
;
bcddec:
ldy #1
- lda (tmpptr),y
sec
sbc #1
cmp #'0'-1
bne +
lda #'9'
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	; ccurlevel -> current level
jsr unclevel
dec tmp
bne -

lda tmpptr
sta cnextlevel
lda tmpptr+1
sta cnextlevelh	; cnextlevel -> next level

; reset items / status
jsr erasestatustext
lda #>statusbartext1
sta tmpptr+1
lda #<statusbartext1
sta tmpptr
lda #>statusbartext1loc
sta scrptr+1
lda #<statusbartext1loc
sta scrptr
lda #statusbartext1col
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 #>gamescreenloc
sta tmpptr+1
lda #<gamescreenloc
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:x-screen_offset) mod 40
;
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),y	; print tile
lda Colortable,x	; get tile color
sta (colptr),y	; set color
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),y	; print char
tax
and #$40
bne ++		; jump if tile
textcolor=*+1
lda #3		; was just text
bne +
++ lda Colortable,x
+ sta (colptr),y	; set color
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 #>gamescreenloc
sta scrptr+1
lda #<gamescreenloc
sta scrptr
lda #>gamecolorloc
sta colptr+1
lda #<gamecolorloc
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,x
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 #>gamescreenendloc
cmp scrptr+1
bne --
lda #<gamescreenendloc
cmp scrptr
bne --
rts			; return

; $ff found, rest of level is ground
+++
ldx #tground		; x = ground char
lda Colortable,x
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 #>gamescreenendloc
cmp scrptr+1
bne -
lda #<gamescreenendloc
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 #joyrepeat  ; check if y >= joyrepeat
bcc getinput_j  ; if not, skip
ldy #0          ; reset joyrepeat counter
lda #$ff        ; reset lastjoy for repeat
sta lastjoy
getinput_j:	; handle keyboard
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,trockh,trock," quest for cash ",tcash," by hannu nuotio ",trock,trockh,thole,0
topbottomborder
!fi 40,tswall
!by 0
statusbartext1
!tx tbomb,"=00 "
!tx tplank,"=00 "
!tx tkey1,"=00 "
!tx tkey2,"=00 "
!tx tskey,"=00",0
statusbartext2
!tx "level 01",0

teleporttext
!tx "           ",ttele,"  teleported  ",ttele,"             "
!by 0

electext
!tx "        ",telea," electricity switched ",telea,"        "
!by 0

pickuptext
!tx "              picked up x               "
!by 0

useitemtext
!tx "              used x on y               "
!by 0

dropbombtext
!tx "   dropped ",tlbomb,". press fire to detonate    "
!by 0

detonatebombtext
!tx "             ",tfire,tfire,tfire," boom! ",tfire,tfire,tfire,"              "
!by 0

restarttext
!tx "      press fire again to restart       "
!by 0

nextleveltext
!tx "you got the ",tcash,"! press fire for next level"
!by 0

gamewontext
!tx "       ",tcash,tcash,tcash," congratulations! ",tcash,tcash,tcash,"         "
!by 0

zaptext
!tx "  ",tzapr," zapped! ",tzapl,"  press fire to restart    "
!by 0

; - Help screens

;    |---------0---------0---------0--------|
helptext
!tx " help screen 1/3 : controls             "
!tx "                                        "
!tx "                                        "
!if joystick = 0 {
!tx "   use joystick in port 2               "
} else {
!tx "   use joystick in userport             "
}
!tx "                                        "
!tx "                                        "
!tx "menu controls:     joystick             "
!tx "                                        "
!tx "  start game   -     fire               "
!tx " select level  -  left/right            "
!tx "  browse help  -    up/down             "
!tx "                                        "
!tx "                                        "
!tx "game controls:     joystick             "
!tx "                                        "
!tx "     move      - up/down/left/right     "
!tx " restart level -  fire (if ",tbomb,"=00)        "
!tx "   drop bomb   -  fire (if ",tbomb,">00)        "
!tx " detonate bomb -  fire (if ",tlbomb,")           "
blanktext
!tx "                                        "
!by 0

!tx " help screen 2/3 : instructions         "
!tx "                                        "
!tx "move ",tplayer," to ",tcash,".                            "
!tx "                                        "
!tx "collect ",tkey1,tkey2,tskey," to open ", tdoor1,tdoor2,tsdoor,".                "
!tx "                                        "
!tx "collect and use ",tplank," to transform ",twater," to ",tplankw,".  "
!tx "                                        "
!tx "collect ",tbomb,", drop it (",tlbomb,") and detonate (",tfire,") to destroy "
!tx twall,tdoor1,tdoor2,trock,trockh,tzapu,tzapd,tzapl,tzapr,tplankw," and inactive ",telea,".   "
!tx "                                        "
!tx "use ",teles," to toggle ",telea,".                      "
!tx "use ",ttele," to teleport to another ",ttele,".         "
!tx "                                        "
!tx "avoid ",tzapu,tzapd,tzapl,tzapr
!tx " or they will turn ",tplayer," to ",tdeath,".    "
!tx "hide behind anything except "
!tx twater,tplankw,thole
!tx ".        "
!tx "                                        "
!tx "push ",trock, " into ",twater," to get rid of ",trock,". "
!tx "pushing ", trock, "into ",thole," makes ",trockh, " (which cannot be pushed)."
!tx "push ",trock," over inactive ",telea," to destroy the ",telea,"."
!by 0

helptextlast
!tx " help screen 3/3 : credits & info       "
!tx "                                        "
!tx "quest for cash is a c64 port of an old  "
!tx "qbasic game, both by hannu nuotio       "
!tx "                                        "
!tx "levelset info:                          "
!tx " levels 01-15 are from the original qfc "
!tx "  by hannu nuotio & friends             "
!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 (external edit)