; Title : Wormy
-; Version : 92%
-; Release Date : june 2000
+; Version : 92.5%
+; Release Date : february 2001
; Filename : wormy.86p (5kb)
; Author(s) : Shiar
; Email Address : shiar0@hotmail.com
; 92% = DONE
-; * customizable keys
+; * implement circle-routine!
+; 1% * customizable keys
; * internal levels
; * check levels/gametype
; * enough hiscore saves!
; * complete readme
-; 2% * misc (pollish, bugs, &&&)
+; 1% * misc (pollish, bugs, &&&)
; * LINK
; 2% * fix deaths linkplay and transmit game/level data
; 2% * make linkplay available for all gametypes (not just deathmatch)
nop
jp Start
.dw 1
- .dw WormMsg
+ .dw WormTxt
.dw WormIcon
-WormMsg:
- .db "WORMY by SHIAR -- alpha 92%",0
+WormTxt:
+ .db "WORMY by SHIAR -- alpha 92.5%",0
WormIcon:
.db 9,2
.db %10010110,%01101111
;---------- menu -------------
;-----------------------------
- ld a,1
- ld (curlevel),a
-
-;--- draw menu ---
-
-DisplayMenu:
+DisplayMenu: ;---draw menu---
cal _clrWindow
ld de,$FC42 ;(10,2)
ld hl,wtPicture
ex de,hl
dec a
jr nz,disptitleloop
+
ld hl,txtMenu
- ld de,$0D5A
+ ld ix,posMenu
+ ld b,5
+dispmenuloop:
+ ld d,(ix)
+ inc ix
+ ld e,(ix)
+ inc ix
ld (_penCol),de
- cal _vputs ;by Shiar
+ cal _vputs ;by Shiar \ Mode \ Level \ Limit \ Worms
+ dnz dispmenuloop
- ld de,$0207
- ld (_curRow),de
- cal _puts ;Level <00>
- dec e ;$0206
- ld (_curRow),de
- cal _puts ;Limit <00>
- dec e ;$0205
- ld (_curRow),de
- cal _puts ;Worms <2>
- dec e ;$0204
- ld (_curRow),de
- ld hl,(CURtxtGame)
- cal _puts ;Singleplayer
-
- xor a
- cal menudraw
- jr howmanyworms
+ ld b,0 ;b=menu#
+ jr setgame ;> dispmenusets > mainMenu
;--- menu loop ---
mainMenu:
+ cal menupos
cal menucall
jr nz,notselect
select: ;2nd/enter
ld a,b
- dec a ;2nd item
+ dec a ;2nd item?
jp z,changeworms
jp LetsGetThisPartyOn ;1/3/4
notselect
cp K_EXIT
jp z,ExitNoStats
+ psh af
+ cal menupos
+ pop af
cp K_LEFT
jr z,selleft
cp K_RIGHT
or a
jr z,changegame
dec a
- jr z,changenrworms
+ jr z,changelevel
dec a
- jp z,changelives
+ jr z,changelives
+; dec a
+; jr z,changenrworms
-changelevel:
- 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
+changenrworms:
+ ld a,(Gametype)
+ cp 2
+ jr c,mainMenu ;type 0/1
+ ld hl,nrworms
+ ld a,(hl)
inc a
- cp d
- jr c,changedlevel
- ld a,d
-changedlevel:
- ld (curlevel),a
-_dispcurlevel:
- ld hl,$0807
- ld (_curRow),hl
- cal showA
- jp displives ;mainMenu
+ cp 5
+ jr nc,mainMenu ;may not be >4
+changednrworms:
+ ld (hl),a
+ jr dispmenusets ;mainMenu
+
selleft:
ld a,b
+ or a
+ jr z,bchangegame
dec a
- jr z,bchangenrworms
- dec a
- jp z,bchangelives
+ jr z,bchangelevel
dec a
- jr nz,mainMenu
+ jr z,bchangelives
+; dec a
+; jr z,bchangenrworms
-bchangelevel:
- ld a,(curlevel)
- dec a
- jr nz,changedlevel
+bchangenrworms:
+ ld hl,nrworms
+ ld a,(hl)
+ dec a ;0-3
+ jr nz,changednrworms ;save >0
_mainMenu:
jr mainMenu
changegame:
- ld a,1
- ld (curlevel),a
ld a,0
Gametype =$-1
- ld hl,txtGame2
-NEXTtxtGame =$-2
inc a
+changedgame:
and 7 ;mod 8
- jr nz,okilydokily
- ld hl,txtGame
-okilydokily:
ld (Gametype),a
- ld de,$0204
- ld (_curRow),de
- ld (CURtxtGame),hl
- cal _puts
- ld (NEXTtxtGame),hl
-howmanyworms:
- ld hl,nrworms
+setgame:
+ ld a,1
+ ld (curlevel),a ;reset level#
+ ld hl,nrworms ;reset #worms
ld a,(Gametype)
cp 2
ld (hl),1
- jr c,dispnrworms
+ jr c,dispmenusets ;<2=singleplayer
inc (hl) ;2
- jr dispnrworms ;mainMenu
-
-changenrworms:
+ jr dispmenusets ;mainMenu
+bchangegame:
ld a,(Gametype)
- cp 2 ;&&
- jr c,_mainMenu ;type 0/1
-
- ld hl,nrworms
- ld a,(hl)
- inc a
- cp 5
- jr nc,dispcurlevel
-changednrworms:
- ld (hl),a
-dispnrworms:
- ld a,(hl) ;hl=nrworms
- ld hl,$0805
- ld (_curRow),hl
- add a,'0'
- cal _putc
-dispcurlevel:
- ld a,(curlevel)
- jr _dispcurlevel ;mainMenu
-
-bchangenrworms:
- ld hl,nrworms
- ld a,(hl)
- dec a ;1-3
- jr nz,changednrworms
- jr dispcurlevel
-
+ dec a
+ jr changedgame
changelives:
cal changelivesInit
inc a
cp 100
- jr nc,displives
+ jr nc,mainMenu
changedlives:
ld (hl),a
-displives:
- cal loadgamecar
- ld hl,$0806
- ld (_curRow),hl
- cal showA ;liveslimit
- sub '0' ;original A
- ld l,a
- ld a,c
- and _datascore
- ld a,' '
- jr z,limitok
- ld a,'0'
-limitok:
- cal _putc ;x10
- jp mainMenu
+ jr dispmenusets ;mainMenu
bchangelives:
cal changelivesInit
dec a
- jr z,displives
+ jr z,_mainMenu
jr changedlives
-
changelivesInit:
- cal loadgamecar ;c=(gameCar)
+ cal loadgamecar ;c=(gameCar)
;a=(hl)=(Gametype+1)=(wormbeglives)
ld a,(Gametype) ;&&&
cp 3
ld a,(hl)
- ret nc ;change lives
- pop hl ;restore stack
- jr displives
+ ret nc ;change lives
+ pop hl ;restore stack
+ jr _mainMenu ;singleplayer (no limit)
+
+changelevel:
+ 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
+ jr z,_mainMenu
+ inc a
+changedlevel:
+ ld (curlevel),a
+ jr dispmenusets ;mainMenu
+bchangelevel:
+ ld a,(curlevel)
+ dec a
+ jr nz,changedlevel
+__mainMenu:
+ jr _mainMenu
+
+;---display current settings---
+
+dispmenusets:
+ ld hl,$FD95
+ ld de,5
+ ld a,23
+clroldsettings:
+ ld c,11
+clroldsetsloop:
+ ld (hl),d ;=0
+ inc hl
+ dec c
+ jr nz,clroldsetsloop
+ add hl,de
+ dec a
+ jr nz,clroldsettings
+
+ ld de,$182E
+ ld (_penCol),de
+ ld d,0
+ ld a,(Gametype)
+ ld e,a
+ ld hl,posGame
+ add hl,de ;hl=posGame+(Gametype)
+ ld a,(hl) ;str.offset
+ ld e,a ;^d=0^
+ ld hl,txtGame
+ add hl,de ;txtGameX
+ ld (CURtxtGame),hl ;save for g/o
+ cal _vputs ;Singleplayer
+
+ ld hl,$1E2E ;level
+ ld (_penCol),hl
+ ld a,(curlevel)
+ cal cshowA
+
+ ld hl,$2A2E ;worms
+ ld (_penCol),hl
+ ld a,(nrworms)
+ add a,'0'
+ cal _vputmap
+
+ cal loadgamecar
+ ld hl,$242E
+ ld (_penCol),hl
+ cal cshowA ;liveslimit
+ sub '0' ;original A
+ ld l,a
+ ld a,c
+ and _datascore
+ ld a,' '
+ jr z,limitok
+ ld a,'0'
+limitok:
+ cal _vputmap ;x10
+ jr __mainMenu
;--- handle menukeys ---
cal GET_KEY
or a
jr z,menuwaitkey
- pop bc ;pop a as b
+ pop bc ;GET_KEY destr. b
cp K_UP
cal z,menuup
cp K_DOWN
ret z
cp K_SECOND
ret ;z=select
-menupos:
+
+menupos: ;highlight #b
+ ld c,b ;psh b
ld a,b
- add a,4
- ld h,0
+ add a,3
+ add a,a
+ add a,a
+ sub b
+ add a,a
+ add a,a
+ add a,a ;*24
+ ld h,$FC/4
ld l,a
- ld (_curRow),hl
- ret
-menuclr:
- cal menupos
- ld a,' '
- jp _putc
+ add hl,hl
+ add hl,hl ;$FD20+item*96
+ ld b,16*7
+menuinvloop:
+ ld a,(hl)
+ cpl
+ ld (hl),a
+ inc hl
+ dnz menuinvloop
+ ld b,c ;pop b
+ ret ;a=-1
menudown:
- cal menuclr
+ cal menupos
inc b
jr menuupdown
menuup:
- cal menuclr
+ cal menupos
dec b
menuupdown:
ld a,b
and %11 ;4=0;-1=3
-menudraw:
ld b,a
- cal menupos
- ld a,'*'
- jp _putc ;a=K_STO
+ jr menupos
;--- change name ---
; of worm#(nrworms)
ld (_penCol),a
ld a,0
Left =$-1
- ld l,a
- ld h,0
- cal _divHLby10
- psh af
- ld a,l
- add a,'0'
- cal __vputmap
- pop af
- add a,'0'
- cal __vputmap
+ cal cshowA
ld hl,txtLeft
__vputs:
add a,'0'
jp _putc
+cshowA:
+ ld l,a
+ ld h,0
+ cal _divHLby10
+ psh af
+ ld a,l
+ add a,'0'
+ cal __vputmap
+ pop af
+ add a,'0'
+ jp __vputmap
+
showHL:
cal _D_HL_DECI
jp _puts
;-----------------------------
LevelDef:
- .db 5,4,15,15,0,0 ;peas,speed,growth,begin_size,sprite,balls
- .db 0,2,63 ;start d, y, x
- .db 128,57 ;field width (128-255), height (57-255)
- .db 0 ;no additional lines, boxes
+ .db 5,4,15,15,0,0 ;peas,speed,growth,begin_size,sprite,balls
+ .db 0,2,63 ;start d, y, x
+ .db 128,57 ;field width (128-255), height (57-255)
+ .db 0 ;no additional lines, boxes
.db 255
ret
.db %00001111,%10000011,%11100000,%00011111,%00000011,%00000001,%10000000,%00011000
txtMenu: .db "by Shiar",0
- .db "Level 00",0 ;4th menu item
- .db "Limit 00 ",0 ;3rd
- .db "Worms 0",0 ;2nd
-txtGame: .db "Singleplayer",0 ;0 (1st)
-txtGame2: .db "Peaworm ",0 ;1 (next 1st)
- .db "Tron ",0 ;2
- .db "Deathmatch",0 ;3
- .db "Foodmatch ",0 ;4
- .db "LinkMatch",0 ;5
- .db "Race ",0 ;6
- .db "CTF ",0 ;7
+ .db "Mode",0
+ .db "Level",0 ;4th menu item
+ .db "Limit",0 ;3rd
+ .db "Worms",0 ;2nd
+posMenu: .dw $0D5A,$1418,$131E,$1524,$0F2A
+txtGame: .db "Singleplayer",0 ;0 (1st)
+txtGame1: .db "Peaworm",0 ;1 (next 1st)
+txtGame2: .db "Tron",0 ;2
+txtGame3: .db "Deathmatch",0 ;3
+txtGame4: .db "Foodmatch",0 ;4
+txtGame5: .db "LinkMatch",0 ;5
+txtGame6: .db "Race",0 ;6
+txtGame7: .db "CTF",0 ;7
; .db "Domination",0 ;8
+posGame: .db 0,txtGame1-txtGame
+ .db txtGame2-txtGame
+ .db txtGame3-txtGame
+ .db txtGame4-txtGame
+ .db txtGame5-txtGame
+ .db txtGame6-txtGame
+ .db txtGame7-txtGame
+
txtLevsel: .db $CF," Select levels: ",5,0
txtName: .db "Enter name player ",0
txtWaiting: .db "Waiting...",0
.end
-.end
+.end
\ No newline at end of file