git.shiar.nl
/
wormy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wormy 0.93.1331: overhaul levelset selection
[wormy.git]
/
wormy.z80
diff --git
a/wormy.z80
b/wormy.z80
index e76ab019faa03442085b7a3e463ad982207bd73d..447f511268a54736db81ba3124be2f8ae0a66935 100644
(file)
--- a/
wormy.z80
+++ b/
wormy.z80
@@
-41,6
+41,7
@@
#define buffer ;use display buffer (otherwise write directly to screen)
#define readymask ;"grays" out the field before starting a level
#define buffer ;use display buffer (otherwise write directly to screen)
#define readymask ;"grays" out the field before starting a level
+;#define hlines ;horizontal-line routine for more speed drawing boxes
;#define readytext ;displays "prepare" before level starts
;#define invincible ;worms cannot die =)
;#define readytext ;displays "prepare" before level starts
;#define invincible ;worms cannot die =)
@@
-81,6
+82,7
@@
_load_ram_ahl = $462F ;ahl->page+hl
_writeb_inc_ahl = $5567 ;ld (ahl),c
_jforce = $409C ;TI-OS stack restored
_EXLP = $4493 ;swap (hl),(de) b times
_writeb_inc_ahl = $5567 ;ld (ahl),c
_jforce = $409C ;TI-OS stack restored
_EXLP = $4493 ;swap (hl),(de) b times
+_GETB_AHL = $46C3 ;a=(ahl) \ hl=ahl
;-----------------------------
;------- data storage -------
;-----------------------------
;------- data storage -------
@@
-187,7
+189,7
@@
Start:
cal _RAM_PAGE_7
ld hl,$BFFF ;VAT start
cal _RAM_PAGE_7
ld hl,$BFFF ;VAT start
- ld
bc
,templevels
+ ld
ix
,templevels
searchloop:
ld de,(_PTEMP_END+1) ;VAT end
or a ;nc
searchloop:
ld de,(_PTEMP_END+1) ;VAT end
or a ;nc
@@
-199,20
+201,17
@@
searchloop:
cp $0C ;string
jr z,stringfound
searchnext:
cp $0C ;string
jr z,stringfound
searchnext:
- cal _RAM_PAGE_7
pop hl
dec hl ;5x
dec hl
dec hl
dec hl
dec hl
pop hl
dec hl ;5x
dec hl
dec hl
dec hl
dec hl
- psh bc
ld b,(hl) ;name size
inc b
skipname:
dec hl
dnz skipname
ld b,(hl) ;name size
inc b
skipname:
dec hl
dnz skipname
- pop bc
jr searchloop
stringfound:
jr searchloop
stringfound:
@@
-225,23
+224,23
@@
stringfound:
ex de,hl ;ld ahl,(hl)
cal _AHL_PLUS_2_PG3 ;string id
cal _Get_Word_ahl ;ld de,(ahl)
ex de,hl ;ld ahl,(hl)
cal _AHL_PLUS_2_PG3 ;string id
cal _Get_Word_ahl ;ld de,(ahl)
- cal _RAM_PAGE_1
- ld (bc),a
+ ld (ix),a
ld a,levelhead
cp e
ld a,levelhead
cp e
- jr nz,searchnext ;not worm
+ jr nz,
_
searchnext ;not worm
ld a,levelhead2
cp d
ld a,levelhead2
cp d
- jr nz,searchnext
-
- inc bc
- ld a,h
- ld (bc),a
- inc bc
- ld a,l
- ld (bc),a
- inc bc
- jr searchnext
+ jr nz,_searchnext
+ inc ix ;save level's ahl
+ ld a,h
+ ld (ix),a
+ inc ix
+ ld a,l
+ ld (ix),a
+ inc ix
+_searchnext:
+ cal _RAM_PAGE_7
+ jr searchnext
loadgametype:
psh de
loadgametype:
psh de
@@
-266,70
+265,115
@@
defaultlevels:
ret
searchcomplete:
ret
searchcomplete:
- cal _RAM_PAGE_1
ld a,255
ld a,255
- ld (bc),a ;end mark
+ ld (ix),a ;end mark
+
+ cal _clrWindow
ld hl,templevels-3
ld hl,templevels-3
-dispnextlevel:
- cal _RAM_PAGE_1
psh hl
psh hl
- cal _clrWindow
- ld a,2
- ld (_curRow),a
+ ld hl,$0020
+ ld (_penCol),hl
ld hl,txtLevsel
ld hl,txtLevsel
- cal _puts ;"< Select levels: >"
- ld hl,$0
004
- ld (_
curRow
),hl
+ cal _
v
puts ;"< Select levels: >"
+ ld hl,$0
601 ;x=1
+ ld (_
penCol
),hl
pop hl
pop hl
+dispnextlevel:
ld a,(hl)
ld a,(hl)
- cp 255 ;&&
- jr nz,displevel
- ld hl,templevels-3
- ld a,(hl)
+ inc a ;cp 255
+ jr z,_levselect
+ ld a,(hl) ;ade=(hl)
displevel:
inc hl
ld d,(hl)
inc hl
ld e,(hl)
displevel:
inc hl
ld d,(hl)
inc hl
ld e,(hl)
- inc hl ;ade=(hl)
- psh hl ;HL
- ld c,a
- ld h,d
- ld l,e ;cde=ahl=(hl)
+ inc hl
+ psh hl
+ ex de,hl ;ahl=ade=(hl)
cal _load_ram_ahl ;hl=ahl
ld b,(hl) ;b=title size
cal _load_ram_ahl ;hl=ahl
ld b,(hl) ;b=title size
- psh bc
- cal _putps ;destr=abchl
- pop bc ;cde=hl
- pop hl ;HL
+ cal _vputs
+ ld hl,_penCol
+ ld (hl),$01 ;x=1
+ inc hl
+ ld a,(hl)
+ add a,6
+ ld (hl),a ;y+6
+ ld hl,availevels
+ inc (hl)
+ pop hl
+ jr dispnextlevel
+
+levup:
+ cal menupos
+ dec b ;up
+ ld a,b
+ cp -4
+ jr nz,levselected
+ inc b ;undo
+ jr levselected
+levdown:
+ cal menupos
+ inc b ;down
+ ld a,b
+ cp -3
+availevels =$-1
+ jr nz,levselected
+ dec b ;back up
+levselected:
+ jp menupos
+
+_levselect:
+ ld b,-3 ;level selected
+ cal menupos
levselect:
levselect:
- halt
- psh hl
- psh de
+ halt \ halt
psh bc
cal GET_KEY
psh bc
cal GET_KEY
- pop bc
- pop de
- pop hl
- cp K_RIGHT
- jr z,dispnextlevel
- sub K_SECOND
+ pop bc
;GET_KEY destr. b
+ cp K_UP
+ cal z,levup
+ dec a ;K_DOWN
+ cal z,levdown
+ cp K_SECOND-1
jr z,loadlevel
jr z,loadlevel
- dec a ;K_EXIT
+ cp K_EXIT-1
ret z
ret z
- cp K_ENTER-
K_EXIT+256
+ cp K_ENTER-
1
jr nz,levselect
jr nz,levselect
+; jr z,loadlevel
loadlevel:
loadlevel:
- ld a,c
+ ld a,b
+ add a,3 ;sellev+3 (#0==-3)
+ ld e,a
+ add a,a ;*2
+ add a,e ;*3
+ ld e,a
+ ld d,0 ;de=sellev*3
+ ld hl,templevels-3
+ add hl,de
+ ld a,(hl) ;ade=(hl)
or a ;levelfile on page 0 (=internal)
jr z,levelloaded
or a ;levelfile on page 0 (=internal)
jr z,levelloaded
- ex de,hl ;ahl=cde
- inc b ;b=titlesize+1
+ inc hl
+ ld d,(hl)
+ inc hl
+ ld e,(hl)
+ ex de,hl ;ahl=ade
skiptitle:
skiptitle:
- cal _INC_PTR_AHL
- dnz skiptitle
+ ld b,a ;psh ahl
+ psh hl
+ cal _GETB_AHL ;ld a,(ahl)
+ pop hl
+ or a
+ ld a,b ;pop ahl
+ psh af
+ cal _INC_PTR_AHL ;ahl++
+ pop af ;cp 0
+ jr nz,skiptitle ;goto #0-terminator
cal _Get_Word_ahl
ld (leveldataSize),de
cal _Get_Word_ahl
ld (leveldataSize),de
@@
-366,6
+410,16
@@
levelloaded:
ld a,r
ld (Seed),a
ld a,r
ld (Seed),a
+ ld hl,datasingle+3
+ ld b,8
+setdeflevels:
+ ld (hl),1 ;def=level#1
+ inc hl
+ inc hl
+ inc hl
+ inc hl
+ dnz setdeflevels
+
;-----------------------------
;----- build trig tables -----
;-----------------------------
;-----------------------------
;----- build trig tables -----
;-----------------------------
@@
-417,7
+471,7
@@
dispmenuloop:
dnz dispmenuloop
ld b,0 ;b=menu#
dnz dispmenuloop
ld b,0 ;b=menu#
- jr
setgame ;> dispmenusets >
mainMenu
+ jr
_dispmenusets ;
mainMenu
;--- menu loop ---
;--- menu loop ---
@@
-467,7
+521,7
@@
changecurworm:
inc a
changedcurworm:
ld (curworm),a
inc a
changedcurworm:
ld (curworm),a
- j
p
dispmenusets ;mainMenu
+ j
r _
dispmenusets ;mainMenu
selleft:
ld a,b
selleft:
ld a,b
@@
-499,6
+553,7
@@
changenrworms:
jr nc,mainMenu ;may not be >4
changednrworms:
ld (hl),a
jr nc,mainMenu ;may not be >4
changednrworms:
ld (hl),a
+_dispmenusets:
jr dispmenusets ;mainMenu
bchangenrworms:
;hl=nrworms
jr dispmenusets ;mainMenu
bchangenrworms:
;hl=nrworms
@@
-515,9
+570,6
@@
Gametype =$-1
changedgame:
and 7 ;mod 8
ld (Gametype),a
changedgame:
and 7 ;mod 8
ld (Gametype),a
-setgame:
- ld a,1
- ld (curlevel),a ;reset level#
jr dispmenusets ;mainMenu
bchangegame:
ld a,(Gametype)
jr dispmenusets ;mainMenu
bchangegame:
ld a,(Gametype)
@@
-548,22
+600,24
@@
changelivesInit:
jr _mainMenu ;singleplayer (no limit)
changelevel:
jr _mainMenu ;singleplayer (no limit)
changelevel:
+ inc hl ;hl=loadgamecar+2
+ psh hl
+ ld a,(hl) ;(curlevel)
ld hl,Gametype
ld d,0
ld e,(hl)
ld hl,nrlevels
add hl,de
ld hl,Gametype
ld d,0
ld e,(hl)
ld hl,nrlevels
add hl,de
- ld d,(hl) ;max level for sel.game
-curlevel =$+1
- ld a,1
- cp d
+ cp (hl) ;max level for sel.game
+ pop hl
jr z,_mainMenu
inc a
changedlevel:
jr z,_mainMenu
inc a
changedlevel:
- ld (
curleve
l),a
+ ld (
h
l),a
jr dispmenusets ;mainMenu
bchangelevel:
jr dispmenusets ;mainMenu
bchangelevel:
- ld a,(curlevel)
+ inc hl
+ ld a,(hl) ;(curlevel)
dec a
jr nz,changedlevel
jr _mainMenu
dec a
jr nz,changedlevel
jr _mainMenu
@@
-623,11
+677,6
@@
clroldsetsloop:
ld (CURtxtGame),hl ;save for g/o
cal _vputs ;Singleplayer
ld (CURtxtGame),hl ;save for g/o
cal _vputs ;Singleplayer
- ld hl,$1E3E ;level
- ld (_penCol),hl
- ld a,(curlevel)
- cal cshowA
-
cal loadgamecar
psh hl
ld hl,$243E
cal loadgamecar
psh hl
ld hl,$243E
@@
-647,10
+696,18
@@
limitok:
ld (_penCol),hl
pop hl ;cal loadgamecar
inc hl
ld (_penCol),hl
pop hl ;cal loadgamecar
inc hl
+ psh hl
ld a,(hl)
add a,'0'
cal _vputmap
ld a,(hl)
add a,'0'
cal _vputmap
+ ld hl,$1E3E ;level
+ ld (_penCol),hl
+ pop hl ;loadgamecar; hl++
+ inc hl
+ ld a,(hl) ;(curlevel)
+ cal cshowA
+
ld hl,$3032
ld (_penCol),hl
ld a,1
ld hl,$3032
ld (_penCol),hl
ld a,1
@@
-889,9
+946,8
@@
loadgamecar:
;destr: acdehl
ld hl,datasingle
ld a,(Gametype)
;destr: acdehl
ld hl,datasingle
ld a,(Gametype)
- ld e,a
add a,a
add a,a
- add a,
e
+ add a,
a
ld e,a
ld d,0
add hl,de
ld e,a
ld d,0
add hl,de
@@
-922,7
+978,9
@@
LetsGetThisPartyOn:
ld (scorelimit),hl ;set limit
cal loadgamecar ;nc
ld (scorelimit),hl ;set limit
cal loadgamecar ;nc
- ld a,(Gametype) ;3bytes -> 2bytes
+ psh hl
+ ld a,(Gametype) ;4bytes -> 3bytes
+ add a,a ;3->2bytes
add a,24+1 ;go to datalevels
ld e,a ;=de
sbc hl,de ;datalevels
add a,24+1 ;go to datalevels
ld e,a ;=de
sbc hl,de ;datalevels
@@
-935,7
+993,9
@@
LetsGetThisPartyOn:
scorelimitset:
cal _ldHLind ;ld hl,(hl)
scorelimitset:
cal _ldHLind ;ld hl,(hl)
- ld a,(curlevel)
+ pop de ;de=loadgamecar
+ inc de \ inc de
+ ld a,(de) ;(curlevel)
ld (Level),a
ld d,a ;begin level
skiplevelloop:
ld (Level),a
ld d,a ;begin level
skiplevelloop:
@@
-1021,6
+1081,8
@@
StartLevel:
inc a ;=255?
jp nz,nextlevel
inc a ;=255?
jp nz,nextlevel
+ ld hl,Level
+ dec (hl) ;curlevel-- (not beyond last lvl)
psh hl
cal releasekeys
cal _clrWindow
psh hl
cal releasekeys
cal _clrWindow
@@
-1114,13
+1176,21
@@
worminit:
ld a,(de)
inc de
sub 128
ld a,(de)
inc de
sub 128
+ jr nc,setfieldx
+ xor a ;fieldx<128
+setfieldx:
ld (FieldWidth),a
ld a,(de)
inc de
ld (FieldWidth),a
ld a,(de)
inc de
+ ld l,a
sub 57
sub 57
+ jr nc,setfieldy
+ xor a ;fieldy<57
+setfieldy:
ld (FieldHeight),a
ld (FieldHeight),a
- add a,57-5
psh de ; >> levelp
psh de ; >> levelp
+ ld a,l ;pop
+ sub 5
ld l,a
ld h,0
add hl,hl
ld l,a
ld h,0
add hl,hl
@@
-1469,7
+1539,7
@@
checkhilevel:
ld a,(Level)
cp (hl)
jr c,hilevelcheckdone
ld a,(Level)
cp (hl)
jr c,hilevelcheckdone
- ld (hl),a
;save local
+ ld (hl),a ;save local
ld c,a
ld a,0
hilvlposa =$-1
ld c,a
ld a,0
hilvlposa =$-1
@@
-2760,7
+2830,13
@@
drawstuff:
dec a ;3 = box
cal z,drawbox
dec a ;4 = circle
dec a ;3 = box
cal z,drawbox
dec a ;4 = circle
- cal z,circle
+ cal z,drawcircle
+ dec a ;5 = hline
+#ifdef hlines
+ cal z,drawhline
+#else
+ cal z,drawline
+#endif
pop hl
inc hl
pop hl
inc hl
@@
-2768,6
+2844,36
@@
drawstuff:
drawbox: ;(d,e)-(h,l)
ld b,l ;Delta-y
drawbox: ;(d,e)-(h,l)
ld b,l ;Delta-y
+#ifdef hlines
+boxloop:
+ cal drawhline
+ inc e
+ dnz boxloop
+ ret
+drawhline: ;(d,e)-(h,e)
+ psh bc
+ ld b,d
+ ld c,e
+ psh hl
+ cal FindPixel
+ ld c,a ;starting mask
+ ld a,h
+ sub b
+ ld b,a
+ inc b ;1+x2-x1
+hlineloop:
+ ld a,(hl)
+ or c
+ ld (hl),a
+ rrc c ;mask >>
+ jr nc,hlinenext
+ inc hl ;next byte
+hlinenext:
+ dnz hlineloop
+ pop hl
+ pop bc
+ ret
+#else
ld l,e
boxloop:
cal drawline
ld l,e
boxloop:
cal drawline
@@
-2775,6
+2881,7
@@
boxloop:
inc e
dnz boxloop
ret
inc e
dnz boxloop
ret
+#endif
drawfatline:
cal drawline
drawfatline:
cal drawline
@@
-2791,8
+2898,8
@@
drawfatline:
;LINE (d,e)-(h,l)
;destroyes a
;LINE (d,e)-(h,l)
;destroyes a
-drawline:
- psh bc
+drawline:
;(d,e)-(h,l)
+ psh bc
;destr: a
psh hl
psh de
ld a,d
psh hl
psh de
ld a,d
@@
-2892,10
+2999,7
@@
line4sm:
dnz LineLoopSteep
jr DoneLine
dnz LineLoopSteep
jr DoneLine
-;CIRCLE (d,e),h
-;destroyes ?
-
-circle: ;de=x,y; h=z
+drawcircle: ;(d,e),h ;de=x,y; h=z
ld c,h ;c=yy=z
ld a,h
neg
ld c,h ;c=yy=z
ld a,h
neg
@@
-2969,6
+3073,10
@@
circledraw: ;destr:de
;every other link game out there. However, these are commented :)
losses: .dw 0
Csend:
;every other link game out there. However, these are commented :)
losses: .dw 0
Csend:
+ ld b,32
+csendwait:
+ nop
+ dnz csendwait
cal Qsend
jr c,Csend
ret
cal Qsend
jr c,Csend
ret
@@
-3027,7
+3135,7
@@
receiveloop:
waitreceive:
call linktimer
in a,(7)
waitreceive:
call linktimer
in a,(7)
- and %
000000
11
+ and %11
cp 3 ;if bits 0 and 1 set, both wires are high
jr z,waitreceive ;wait for one of the wires to go low
rra ;check red wire status
cp 3 ;if bits 0 and 1 set, both wires are high
jr z,waitreceive ;wait for one of the wires to go low
rra ;check red wire status
@@
-3041,7
+3149,7
@@
selected2:
waitreceive2:
call linktimer
in a,(7)
waitreceive2:
call linktimer
in a,(7)
- and %
000000
11
+ and %11
jr z,waitreceive2 ;wait for the wire we didn't lower to go high again (the other will remain low)
ld a,%11000000 ;$c0
out (7),a ;raise both wires since the other calc will have given the ok sign
jr z,waitreceive2 ;wait for the wire we didn't lower to go high again (the other will remain low)
ld a,%11000000 ;$c0
out (7),a ;raise both wires since the other calc will have given the ok sign
@@
-3328,7
+3436,7
@@
_datascore = %10000000 ;score>=100 limit
_datamultpeas = %00100000
_datasp = %01011110
_datamultpeas = %00100000
_datasp = %01011110
-datalevels: .dw LevelDef, LevelDef
T
+datalevels: .dw LevelDef, LevelDef
M
.dw LevelDefT,LevelDefM
.dw LevelDefM,LevelDefM
.dw LevelDefM,LevelDefC
.dw LevelDefT,LevelDefM
.dw LevelDefM,LevelDefM
.dw LevelDefM,LevelDefC
@@
-3337,36
+3445,36
@@
nrlevels: .db 1,3,1,3,3,3,3,1 ;=defaults
savestart:
gamesingle = 0
savestart:
gamesingle = 0
-datasingle: .db %01011110,3,1 ;3 lives (<must b unique)
+datasingle: .db %01011110,3,1
,1
;3 lives (<must b unique)
gamepeas = 1
gamepeas = 1
-datapeas: .db %01011010,1,1 ;1 "
+datapeas: .db %01011010,1,1
,1
;1 "
gametron = 2
gametron = 2
-datatron: .db %01000010,1,2
+datatron: .db %01000010,1,2
,1
gamedeathm = 3
gamedeathm = 3
-datadeathm: .db %01000010,3,2
+datadeathm: .db %01000010,3,2
,1
gamefoodm = 4
gamefoodm = 4
-datafoodm: .db %11010000,10,2 ;10 score limit (=100)
+datafoodm: .db %11010000,10,2
,1
;10 score limit (=100)
gamelinkm = 5
gamelinkm = 5
-datalinkm: .db %01000011,3,2
+datalinkm: .db %01000011,3,2
,1
gamerace = 6
gamerace = 6
-datarace: .db %10000000,10,2
+datarace: .db %10000000,10,2
,1
gamectf = 7
gamectf = 7
-datactf: .db %11100000,9,4
+datactf: .db %11100000,9,4
,1
;gamedomin = 8
;datadomin: .db %01100000,3 ;==(8 modes)
worm1set: .dw worm1p,worm1p
;gamedomin = 8
;datadomin: .db %01100000,3 ;==(8 modes)
worm1set: .dw worm1p,worm1p
- .db %11110111,%00,
%01111110
,K_RIGHT,K_LEFT
+ .db %11110111,%00,
-01
,K_RIGHT,K_LEFT
worm1name: .db "Wormy ",0
worm2set: .dw worm2p,worm2p
worm1name: .db "Wormy ",0
worm2set: .dw worm2p,worm2p
- .db %11111011,%11,
%0011111
1,K_F2,K_F1
+ .db %11111011,%11,
-0
1,K_F2,K_F1
worm2name: .db "Viper ",0
worm3set: .dw worm3p,worm3p
worm2name: .db "Viper ",0
worm3set: .dw worm3p,worm3p
- .db %11111011,
0,%0101111
1,K_COMMA,K_STO
+ .db %11111011,
%00,-0
1,K_COMMA,K_STO
worm3name: .db "Nibbler ",0
worm4set: .dw worm4p,worm4p
worm3name: .db "Nibbler ",0
worm4set: .dw worm4p,worm4p
- .db %11111011,
0,%011111
01,K_PLUS,K_ENTER
-worm4name: .db "
Spunky
",0
+ .db %11111011,
%00,-
01,K_PLUS,K_ENTER
+worm4name: .db "
Jim
",0
defhiscrpos:
.dw 0,0,0,0,0,0
defhiscrpos:
.dw 0,0,0,0,0,0
@@
-3415,7
+3523,7
@@
defspriteimg: .db %01100000
.db %01100000
deflevels:
.db %01100000
deflevels:
- .db
15,"Internal Levels"
+ .db
"Internal Levels" ;,0
.db 0,deflevels/256,deflevels&255
templevels:
.db 0,deflevels/256,deflevels&255
templevels: