; ����� ����� ������� �� ��� �����������
;_______________________________________________________________________________
;
-; Version : 97% (0.97.19)
-; Release Date : 2002 January 9
+; Version : 97% (0.97.115A)
+; Release Date : 2002 January 15
; Author(s) : Shiar
; Email Address : wormy@shiar.org
; Web Page : www.shiar.org
-; Description : ruling Nibbles-like game 1-4 players
-; Where to get this game : www.shiar.org (home of Wormy)
+; Description : perfect Nibbles game with free movement, nine
+; game modes, for 1-4 players
+; Where to get this game : www.shiar.org
; Other games by author(s) : Nemesis beta
; Additional Credits to : Matthew Shepcar : wrote original Peaworm, end'98
; Jonah Cohen : helped writing worm
; Files : wormy.z80 (89kB) : 515ad14b922572bdc8a96e780b8b24ca
-; wormy.86p (6532) : efef32a8c541b4585087f55deb31f51d
+; wormy.86p (6512) : efef32a8c541b4585087f55deb31f51d
;_______________________________________________________________________________
-;NOTES:
-;* Use for LEARNING practises ONLY!
-; Don't _ever_ release altered code w/o permission!
-;* Code was originally by Scabby (Matthew Shepcar),
-; a few lines by Jonah Cohen,
-; and everything else by me - Shiar (Mischa Poslawsky).
-;* Although I've commented & labeled quite some stuff, I can't guarantee
-; everybody will understand it. This is probably not the best source
-; to learn z80 from. w00t the Shyer Way (tm).
-;* Also read wormy.txt please, thank you
-;* Don't scroll down if you get scared easily.
+;--- notes ---
+
+; * Use for LEARNING practises ONLY!
+; Don't _ever_ release altered code w/o permission!
+; Please notify me of using code, and give me credits!
+; * Code was originally by Scabby (Matthew Shepcar),
+; a few lines by Jonah Cohen,
+; and everything else by me - Shiar (Mischa Poslawsky).
+; * Although I've commented & labeled quite some stuff, I can't guarantee
+; everybody will understand it. This is probably not the best source
+; to learn z80 from. w00t the Shyer Way (tm).
+; * Also read wormy.txt please, thank you
+; * Don't scroll down if you get scared easily.
;_______________________________________________________________________________
-; _______ _____ ______ _____
-; | | | | \ | |
-; | |_____| _____ |_____/ |_____|
+; _______ _____ ______ _____
+; | | | | \ | |
+; | |_____| ____ |_____/ |_____|
;_______________________________________________________________________________
; 97% = DONE
; X [19] datalevels+nrlevels not in program if !intlevels
; X [19] mem at worm #4 (still 12 bytes or so.. or more? or less?)
; X [19] alter level editor to use new address and set level id #97
+; X [19A] team score!
+; X [19A] autogrowth doesn't always work -> init (turn)
+; X [111] ED: disabled objects counted causing CRASH when writing hiscore!
+; X [111] LINK: init+multiple pea transmit seems to work..
+; X [111] LINK: host/client swapped (host now sends level config)
+; X [111] LINK: optimize transmit (most initcode same for client+host)
+; X [113] menu limit in multifm not x10
+; X [113] wormhit procedure seperate (called now)
+; X [114] LINK: peas sent again :P
+; X [114] internal level check and sprite storage removed
+; X [115] layout data stuff at bottom
+; X [115] ED: init place bar fixed
+; X [115] ED: keys also usable together with mouse
+; X [115] ED: improved version handling
+; X [115] LINK: receive message not needed anymore afaik
+; X [115A] $D8 used for spacing at g/o screen. i rule B)
+; X [115A] exit at g/o goes back to menu
+; X [115A] more in menu lets you reselect the levelfile
+; X [115A] LINK: fixed waiting mode (minor display problem)
+; * word-value display storage in chartable hole??
; 1% * misc (bugs, &&&, pollish, &&, &)
-; * menu s/limit/peas in multifm
-; * autogrowth doesn't always work
; * look at init-z in line routine again
-; * team score!
-; * random pixel still occurs
-; * LINK: optimize transmit
+; * rare pea|wall overwrite <- apply stopworm fix?
; 1% * LINK: >Somehow do a lot of testing with 2 calcs< *sigh*
; * LINK: called "Linkmatch" at g/o
+; * LINK: minimize sent data (Gametype for example)
; * LVL: episode #3: at least 5 lvls for each mp mode
; * LVL: episode #4: 10 sp levels, including multipeas
; 1% * LVL: episode #5: ...
; * LVL: Wormage
; * LVL: Free Bird
; * LVL: Jonah?
-
+;
;100% = bugs fixed + levels done
-;> * switchable scoredecrease on death?
-; * wall at pickup position fix
+; * correct team winners
; * arrow to offscreen peas
;110% * sound
; * startpos
;120% * coop (DON'T COUNT ON IT)
+; * pause in linkplay
;_______________________________________________________________________________
; _/_/_____ __ _ _______ _ _ ______ _______
#ifndef intlevels
datalevels = $FA00 ;-FA11 (12) (>=$C000)
nrlevels = $FA12 ;-FA1B (A) (<$FA70)
+defspr = $F078 ;-F07F (8)
+defsprsz = 0
#endif
;MEM|8---9---A---B---C---D---E---F---| ;there's something wrong
.db %1010010
jr nz,$+47
dec l
- .db " 97% .19",0
+ .db " 97% .115A",0
WormIcon:
.db 8,2
.db %00000000,%00111100
ld i,a
im 2 ;...it *does* work ;)
+restart:
cal _RAM_PAGE_7
ld hl,$BFFF ;VAT start
ld ix,templevels
ld hl,$FC00+(2*16)
ld b,16*9
cal menuinvloop
- ld hl,$FC00+(56*16)
+ ld hl,$FC00+$380 ;(*,56)
cal hr
ld hl,$0601 ;x=1
ld (_penCol),hl
loadlevel:
cal readylevelfile
+#ifdef intlevels
or a ;levelfile on page 0 (=internal)
jr z,levelloaded
+#endif
cal skiptitle ;skip description
cal _Get_Word_ahl
;--- trig tables ---
- ld hl,TrigPrecalc ;I believe this
+ ld hl,trigtable ;I believe this
ld de,SinCosTable ;is one of the few
psh de ;pieces of original
ld bc,65 ;Peaworm code still
psh hl ;jump here after ret
ld hl,txtMenu
ld ix,posMenu
-;Mode|Level|Limit|Worms|worm #|controls
+;Mode|Level|Link|Worms|worm #|controls
; jr dispmenucommon ;cal
dispmenucommon_:
cal cshowA ;limit
pop af ;a==0?
jr z,optionMenu ;do not display 0 behind 'None'
+ ld a,c ;(gameCar)
+ rla ;and _dataPmult
+ jr nz,optionMenu ;in multifood limit == #peas
ld a,'0'
cal _vputmap ;x10
cal change4spOnly
ld a,(hl) ;hl=nrworms
inc a
- cp 5
- jr nc,mainMenu ;may not be >4
+ cp 7
+ jr nc,mainMenu ;may not be >4+2
changednrworms:
ld (hl),a
jr _dispmenusets ;mainMenu
notselect
cp K_EXIT
jp z,ExitNoStats
+ cp K_MORE
+ jp z,restart
psh af
cal menupos
cal loadgamecar
; jr z,changecurworm
changecurworm:
-; hl=nrworms
- ld a,(curworm)
- cp (hl)
- jr nc,mainMenu ;may not become >(nrworms)
- inc a
-changedcurworm:
- ld (curworm),a
+ ld hl,curworm
+ ld a,(hl)
+ cp 4
+ jr nc,mainMenu ;may not become >4
+ inc (hl)
jr _dispmenusets ;mainMenu
selleft:
; jr z,bchangecurworm
bchangecurworm:
- ld a,(curworm)
- dec a ;0-3
- jr nz,changedcurworm ;save >0
+ ld hl,curworm
+ ld a,(hl)
+ dec (hl) ;0-3
+ jr nz,_dispmenusets ;save >0
+ inc (hl)
+_mainMenu:
jr mainMenu
-changenrwormsInit:
- ld a,(Gametype)
- cp 3
- ld a,(hl) ;hl=nrworms
- ret
bchangenrworms:
cal change4spOnly
ld a,(hl) ;hl=nrworms
- dec a ;0-3
+ dec a ;0-(3+2)
cp 2
jr nc,changednrworms ;save >=2
-_mainMenu:
- jr mainMenu
+ jr _mainMenu
change4spOnly:
ld a,(Gametype)
changekeys:
cal getwormname
- ld hl,txtKeyleft
+ ld hl,txtKleft
cal getcustomkey ;left
cal getcustomkey ;right
; jr dispmenusets
psh hl
inc hl
ld a,(hl)
+ dec a ;0-5
+ and 3 ;0-3
+ inc a ;1-4
add a,'0'
cal _vputmap
+ ld a,(hl)
+ cp 5
+ ld hl,txtteamed
+ cal nc,_vputs
ld hl,$243E
ld (_penCol),hl
ld (hl),' '
inc hl
dnz emptyname
- ld a,maxnamelength
+ ld a,maxnamesize
ld (namelength),a
enternameloop:
ld hl,$FF07 ;begin pos
jr nz,continue
backspace:
ld a,(hl)
- cp maxnamelength
+ cp maxnamesize
jr nc,nokeypressed
inc (hl)
dec ix
cal releasekeys
jr enternameloop
+savestr:
+ .db "00000" ;,0 ;&&&somehow put in chartable's 5-byte hole
chartable:
- .db 0,".<>!",0,0,0,0 ;down,L,R,up
- .db 0,"XTOJE0",0 ;enter..clear
- .db " WSNID9",0 ;(-)..custom
- .db "ZVRMHC8",0 ;dot..del
- .db "YUQLGB7#" ;0..xvar
- .db $D9,"-PKFA6'" ;on..alpha
- .db "54321*",0,$D0 ;F5..more
+ .db 0,".<>!",0,0,0,0 ;down|L|R|up|-|-|-|-
+ .db -1,"XTOJE0",0 ;enter|+|-|*|/|^|clear|-
+ .db " WSNID9",0 ;(-)|3|6|9|)|tan|custom|-
+ .db "ZVRMHC8",-1 ;.|2|5|8|(|cos|prgm|del
+ .db "YUQLGB7#" ;0|1|4|7|ee|sin|table|xvar
+ .db $D9,"-PKFA6'" ;on|sto|,|x2|ln|log|graph|alpha
+ .db "54321*",-1,$D0 ;F5|F4|F3|F2|F1|2nd|exit|more
nameentered:
pop ix ;stringbegin
cal _clrWindow
ld c,wormVhost
cal Qsend
- ld hl,txtWaiting
+ ld hl,txtWaitn
cal _puts
cal Crecv
ld a,c
cp wormVclient
- jr z,client
- cp wormVhost
- jr z,host
- pop hl ;error
- jp DisplayMenu ;return to menu
+ jr nz,host
+
+;--- client ---
-host:
- ld c,wormVclient
- cal Qsend
- jr sethost
client:
- ld hl,txtReceive
- cal _puts
-setclient:
- ;name/keys: wormy#1 = link = 0 + link (name1)
- ; 2 = worm #1 = #1 + local(name1)
- ; 3 = link = 0 + link (name2)
- ; 4 = worm #2 = #2 + local(name2)
- ld de,worm2+left
- ld hl,worm1+left
- ldi ;keys worm#2 = worm#1
- ldi ;+right
- ld de,worm4+left
- ldi ;keys worm#4 = worm#2
- ldi
- xor a
- ld (worm1+left),a ;worm 1...
- ld (worm3+left),a ;and worm 3 via link
- ld hl,worm1+name
- ld b,9
- cal recvstuff
- ld hl,worm2+name
- ld b,9
- cal sendstuff
+; ld hl,txtReceiv
+; cal _puts ;shouldnt be necessary since this part always seems to work afaik
+
+ ;name/keys: wormy#1 = worm #1 = ok
+ ; 2 = link = 0 + link (name1)
+ ; 3 = worm #2 = #2 + local(name2)
+ ; 4 = link = 0 + link (name2)
+ ld e,worm3+left&255
+ cal moveworm2 ;3=2
+ ld l,worm1+name&255
+ cal sendworm
+ ld l,worm2+left&255
+ cal linkworm ;worm2+4 over link
pop hl ;loadgamecar
pop de ;leveldata
+ ld de,linklevel
+ ld hl,datalink
psh de
psh hl ;loadgamecar
- ld b,8
- cal sendstuff
+ ld b,8 ;&&&&&&&
+ cal recvstuff
ld hl,gameCar
ld b,1
- cal sendstuff
+ cal recvstuff
ld hl,Gametype
ld b,1
- cal sendstuff
+ cal recvstuff
ex de,hl
ld b,168
- cal sendstuff
+ cal recvstuff
+
_StartLevel:
jr StartLevel
-sendstuff:
- psh de
-sendstuffloop:
- psh bc
- ld c,(hl)
- inc hl
- cal Qsend
- pop bc
- dnz sendstuffloop
- pop de
+
+linkerror:
+ pop hl ;error
+ jp DisplayMenu ;return to menu
+
+;--- set/send worms ---
+
+moveworm2:
+ ld hl,worm2+left
+moveworm: ;hl=wormN+left
+ ld d,worm1/256
+ ld bc,11
+ ldir ;keys+name worm(de) = worm(hl)
ret
-recvstuff:
- psh de
-recvstuffloop:
- psh bc
- cal Qrecv
- ld (hl),c
+linkworm: ;hl=wormN+left
+ ld (hl),0 ;worm1|2+left
inc hl
- pop bc
- dnz recvstuffloop
- pop de
- ret
-sethost:
- ;name/keys: wormy#1 = worm #1 = ok
- ; 2 = link = 0 + link (name1)
- ; 3 = worm #2 = #2 + local(name2)
- ; 4 = link = 0 + link (name2)
- ld de,worm3+left
- ld hl,worm2+left
- ldi ;keys worm#3 = worm#2
- ldi ;+right
- xor a
- ld (worm2+left),a ;worm 2+4..
- ld (worm4+left),a ;..over link
- ld hl,worm1+name
+ inc hl ;+name
+ ld b,9
+ cal recvstuff
+ ld bc,worm3-worm1-11 ;+2
+ add hl,bc ;b=0
+ ld (hl),b ;worm3|4+left
+ inc hl
+ inc hl ;+name
+ ld b,9
+ jp recvstuff
+sendworm: ;hl=wormN+name
ld b,9
cal sendstuff
- ld hl,worm2+name
+ ld bc,worm3-worm1-9
+ add hl,bc ;worm(N+2)+name
ld b,9
- cal recvstuff
+ jp sendstuff
+
+;--- host ---
+
+host:
+ cp wormVhost
+ jr nz,linkerror
+ ld c,wormVclient
+ cal Qsend
+
+ ;name/keys: wormy#1 = link = 0 + link (name1)
+ ; 2 = worm #1 = #1 + local(name1)
+ ; 3 = link = 0 + link (name2)
+ ; 4 = worm #2 = #2 + local(name2)
+ ld e,worm4+left&255
+ cal moveworm2 ;4=2
+ ld e,worm2+left&255
+ ld hl,worm1+left
+ cal moveworm ;2=1
+ ld l,worm1+left&255
+ cal linkworm ;worm1+3 over link
+ ld l,worm2+name&255
+ cal sendworm
pop hl ;loadgamecar
pop de ;leveldata
- ld de,linklevel ;&&&&&&&
- ld hl,datalink
psh de
psh hl ;loadgamecar
ld b,8
- cal recvstuff
+ cal sendstuff
ld hl,gameCar
ld b,1
- cal recvstuff
+ cal sendstuff
ld hl,Gametype
ld b,1
- cal recvstuff
+ cal sendstuff
ex de,hl
ld b,168
- cal recvstuff
+ cal sendstuff
;--- load level ---
ld a,(hl)
ld (wormbeglives),a
inc hl ;nrworms
+ ld b,$11 ;=ignore (ld)
ld a,(hl)
+ cp 5
+ jr c,teamset
+ sub 2
+ ld b,$CD ;=continue (call)
+teamset:
ld (nrworms),a
+ ld a,b
+ ld (doteam),a ;do team score (CD) or not (11)
inc hl ;level
inc hl
ld a,(hl)
inc hl
ld a,(hl)
ld (growspeed),a
+ ld (turn),a
inc hl
ld a,(hl)
ld (turnleft),a
add hl,bc ;hl=behind sprite
jr setsprite
defaultsprite:
- ld a,defspritesz
+ ld a,defsprsz
defsprsize =$-1
defsprite =$+1
- ld de,defspriteimg
+ ld de,defspr
setsprite: ;de=@sprite ;a=sprsize
ld (sprsize),a
ld (spritepos),de
#endif
ld a,(gameCar)
- rla ;bit _bitmultpeas,a
+ rla ;bit __bitPmult,a
cal c,multnewpea ;a=0
- rla ;bit _bitfood,a
+ rla ;bit __bitfood,a
cal nc,NewPea
nofood:
ld bc,(worm1+pos)
inc a ;-1
jr z,nextturnok
dec (hl)
- dec a ;0 (now <0)
+ dec a ;>=0
jr nz,nextturnok
growspeed =$+1
- ld (hl),$FF
+ ld (hl),$FF ;reset
nextturnok:
ld a,(gameCar)
ld hl,$FC10
ld b,16*11
cal menuinvloop ;invert
- ld hl,$FD80
+ ld hl,$FC00+$180
cal hr ;menuinvloop w/ b=16
- ld hl,$FCE0
+ ld hl,$FC00+$E0
cal hr
ld hl,_curRow
ld (hl),2
ld hl,$FC00
ld b,16*8
cal menuinvloop ;invert
- inc h ;$FD80
+ inc h ;$FC00+$180
cal hr ;menuinvloop w/ b=16
- ld hl,$FCE0
+ ld hl,$FC00+$E0
cal hr
ld hl,_curRow
inc (hl)
ld (_penCol),de
ld hl,txtName
cal _vputs ;Name
- ld a,$3D
+ ld a,$3C
ld (_penCol),a
cal _vputs ;Died Score
ld de,$0004
ld (_curRow),de
+;--- who won? ---
+
findwinner:
ld hl,(worm1+score)
ld (winnerscore),hl
;--- display worms ---
+;x123456789012345678901
+;>>>>>> GAME OVER <<<<<
+;2Multiplayer
+;3Level 01
+;4 Died Score:
+;5NameName 03 00070
+;6Worm#02 @ 05 00120
+;7Worm#03 15 00030
+;8Snaky @ 00 04820
+
ld a,(nrworms)
ld b,a
ld hl,worm1+died
ld bc,left-died
add hl,bc ;+left
xor a
- cp (hl) ;input=0 = link
+ cp (hl) ;left=0 = link
jr nz,NoLinkIndic
ld a,9
ld (_curCol),a
hiscorecheckdone:
waitkey:
+ ld hl,DisplayMenu
+ psh hl ;main menu
+waitkeyloop:
cal ubergetkey
cp K_ENTER
- jp z,DisplayMenu
+ ret z
cp K_SECOND
- jp z,DisplayMenu
+ ret z
cp K_EXIT
- jr nz,waitkey
-
-;x123456789012345678901
-;>>>>>> GAME OVER <<<<<
-;2Multiplayer
-;3Level 01
-;4 Died Score:
-;5NameName 03 00070
-;6Worm#02 @ 05 00120
-;7Worm#03 15 00030
-;8Snaky @ 00 04820
-
-ExitNoStats:
- cal linkok
- ld hl,_asapvar
- rst 20h ;_ABS_MOV10TOOP1
- rst 10h ;_FINDSYM
- ld hl,savestart-_asm_exec_ram+4
- xor a
- add hl,de
- adc a,b ;ahl=bde+4
- cal _SET_ABS_DEST_ADDR
-
- xor a
- ld hl,savestart
- cal _SET_ABS_SRC_ADDR
- ld hl,saveend-savestart
- cal _MM_LDIR_SET_SIZE
-
- cal releasekeys
- res 4,(iy+9)
- set 2,(iy+13)
- im 1 ;remove keyfix
- jp _clrWindow
+ jr nz,waitkeyloop
+ ret
loadhiscoreposinahl:
ld hl,0 ;for peaworm and singleplayer
adc a,0 ;ahl=saveloc
ret
highsave:
- .db 0,0,"WOR ",0
+ .db 0,0,"SHI ",0
iswinner:
ld a,10
ld a,'*'
jp _putc ;..then put *
+;--- quit ---
+
+ExitNoStats:
+ cal linkok
+ ld hl,_asapvar
+ rst 20h ;_ABS_MOV10TOOP1
+ rst 10h ;_FINDSYM
+ ld hl,savestart-_asm_exec_ram+4
+ xor a
+ add hl,de
+ adc a,b ;ahl=bde+4
+ cal _SET_ABS_DEST_ADDR
+
+ xor a
+ ld hl,savestart
+ cal _SET_ABS_SRC_ADDR
+ ld hl,saveend-savestart
+ cal _MM_LDIR_SET_SIZE
+
+ cal releasekeys
+ res 4,(iy+9)
+ set 2,(iy+13)
+ im 1 ;remove keyfix
+ jp _clrWindow
+
;_______________________________________________________________________________
; _ _ _ _____ ______ _______ _______ _______ _ _ _______ _______
; | | | | | |_____/ | | | |______ | | | |______ |______
;_______________________________________________________________________________
respawncheck:
- cp respawndelay-1
+ cp rspawndelay-1
jr nz,unnamedlabel
cal saverespawncounter
removeworm:
;--- move worm ---
Wormmove:
- psh bc ; >> pos
+ psh bc ;pos
ld a,(hl)
add a,a
add a,d
jr nc,notmoveY
inc c
notmoveY: ;bc=newpos
- ld (ix+pos2),e
- ld (ix+pos2+1),d
ld (ix+pos),c
ld (ix+pos+1),b
+ ld (ix+pos2),e
+ ld (ix+pos2+1),d
;-check-
- pop hl ; << pos (old)
+ pop hl ;pos (old)
ld a,h
sub b
and 1
GotFour:
cal chk4pixels
rl d
- jp nc,Drawworm
+ cal c,hitworm
-;--- worm hit ---
+;--- draw worm ---
-Hitworm:
- ld a,(gameCar)
-#ifdef optdie
-; if race - originally
- ld h,a
- cal checkhitotherworm
- ld a,h
-#endif
- bit _bitctfpeas,a
- jr nz,chkctfpeas
- rla ;and _datamultpeas
- jp c,chkmultpeas
- rla ;and _datafood
- jp c,WormDead ;no food
+Drawworm:
+ ld c,(ix+pos)
+ ld b,(ix+pos+1)
- ld hl,0
-PeaY =$-2
-PeaX =$-1
- cal chkpeahit
- jp nc,WormDead
-pickpea:
- cal DrawPea ;remove pea
- cal NewPea
-pickpea_:
- ld a,(ix+grow)
- add a,15
-peagrowth =$-1
- ld (ix+grow),a
- jr nc,wormset2grow
- inc (ix+grow+1)
-wormset2grow:
- ld hl,Left
- dec (hl) ;dec left before display
- psh af
- ld e,10
- cal IncScore
- pop af
- jp nz,Drawworm ;continue
ld a,(Gametype)
- or a
- jp nz,Exit ;stack restored
-
- ld hl,Level
- ld a,(hl)
- inc (hl)
- ld l,a ;hl=Level
- ld h,0
- add hl,hl
- add hl,hl
- cal _HLTIMES10
- ex de,hl
- cal _IncScore ;score+(40*level)
- cal removeworm
- pop hl ; << call
- pop hl ; << call
- ld (ix+delay),2
- jp Nextlevel
-
-chkpeahit: ;bc=ownpos;hl=peapos (destr:ad)
- ld a,(sprsize)
- inc a
- ld d,a
- ld a,b
- sub h
- inc a
- cp d ;=(sprsize)+1
- ret nc ;nc=no pea
- ld a,c
- sub l
- inc a
- cp d
- ret ;c=pea
-
-chkctfpeas:
- ld hl,(peaspos) ;1st pea
- ld a,(ix+reserv)
- ld e,a ;push a
- and %01 ;ourpea (0|1)
- jr z,sel_otherpea
- ld hl,(peaspos+2) ;2nd pea ;&&&ex de,hl?
-sel_otherpea:
- cal chkpeahit
- jr c,hitflag
-;no peas hit:
- ld a,e ;peek a (that's x86asm for pop\push ;)
- bit 1,a ;%10 = carrying flag?
- jp z,WormDead ;if not just die
- xor %11 ;drop flag
- ld (ix+reserv),a
- psh af
- cal WormDead
- pop af ;which flag? (=and %1)
- ld hl,drawctfpea1 ;restore #1
- jr z,nottheotherflag
- inc hl ;ld hl,drawctfpea2
- inc hl ;restore #2
-nottheotherflag:
- ld (hl),3 ;draw delay 3 turns
- ret
-
-hitflag: ;correct pea hit
- ld a,e ;pop a
- xor %11 ;invert flag taken + ownflag
- ld (ix+reserv),a
- and %10 ;just returned?
- psh af ;safe z-flag
- cal DrawPea ;remove
- pop af
- jr nz,Drawworm ;flag taken, continue game
- psh hl
- ld e,20 ;flag captured+returned
- cal IncScore
- pop hl
- ld a,3 ;draw delay
- ld (drawctfpea1),a ;redraw..
- ld (drawctfpea2),a ;..both flags
- jr Drawworm
-
-chkmultpeas:
- ld de,peaspos-1
- ld hl,lefttotalb
-lefttotal =$+1
- ld (hl),0
-chkmultpealoop:
- ex de,hl
- inc hl
- ld e,(hl)
- inc hl
- ld d,(hl)
- ex de,hl
- psh de
- cal chkpeahit
- pop de
- jr c,pickmultpea
- ld hl,lefttotalb
- dec (hl)
- jr nz,chkmultpealoop
- jp WormDead
-pickmultpea:
- ld a,247
- ld (de),a
- dec de
- ld (de),a
- cal DrawPea
- jp pickpea_
-
-;--- misc ---
-
-#ifdef optdie
-nextotherwormbit:
- ld a,c
- sub (hl)
- inc hl
- inc a
- cp 4
- jr nc,nothit1 ;no
- ld a,b
- sub (hl)
- inc a
- cp 4
- ret c ;nz ;yes
-nothit1:
- inc hl
- cal resbit
-ChkWorm:
- cal _cphlde
- jr nz,nextotherwormbit
- ret ;z
-#endif
-
-checkhitlapline:
- ld a,(peaspos) ;63
- sub b ;x==63
- jr z,nextlaphalf
- inc a
- ret nz
-nextlaphalf:
- ld a,(peaspos+1) ;yline
- cp c ;ypos
- ld a,1
- jr nc,checklap ;y>yline -> a=1
- xor a ;y<yline -> a=0
-checklap:
- cp (ix+reserv)
- ret z ;same as before
- ld (ix+reserv),a ;1st time
- ld e,a
- ld a,(handledworm)
- and 1 ;group 0 (1,3) or 1 (2,4)
- xor e
- ret z ;(group 0 and y<yline) or (group 1 and y>yline)
- psh bc
- ld e,20
- cal IncScore ;lap!
- pop bc
- ret
-
-;--- draw worm ---
-
-Drawworm:
- ld c,(ix+pos)
- ld b,(ix+pos+1)
-
- ld a,(Gametype)
- cp gamerace
- cal z,checkhitlapline
+ cp gamerace
+ cal z,checkhitlapline
cal set4pixels
dec c
pop de
ret
+;_______________________________________________________________________________
+; _ _ _ _____ ______ _______ __ __ _ _ _____ _______
+; | | | | | |_____/ | | | \_/ |_____| | |
+; |__|__| |_____| | \_ | | | | _____ | | __|__ |
+;_______________________________________________________________________________
+
+hitworm:
+ ld a,(gameCar)
+#ifdef optdie
+; if race - originally
+ ld h,a
+ cal checkhitotherworm
+ ld a,h
+#endif
+ bit __bitPctf,a
+ jr nz,chkctfpeas
+ rla ;and _dataPmult
+ jp c,chkmultpeas
+ rla ;and _datafood
+ jp c,wormdead ;no food
+
+ ld hl,0
+PeaY =$-2
+PeaX =$-1
+ cal chkpeahit
+ jp nc,wormdead
+pickpea:
+ cal DrawPea ;remove pea
+ cal NewPea
+pickpea_:
+ ld a,(ix+grow)
+ add a,15
+peagrowth =$-1
+ ld (ix+grow),a
+ jr nc,wormset2grow
+ inc (ix+grow+1)
+wormset2grow:
+ ld hl,Left
+ dec (hl) ;dec left before display
+ psh af
+ ld e,10
+ cal IncScore
+ pop af
+ jp nz,Drawworm ;continue
+ ld a,(Gametype)
+ or a
+ jp nz,Exit ;stack restored
+
+ ld hl,Level
+ ld a,(hl)
+ inc (hl)
+ ld l,a ;hl=Level
+ ld h,0
+ add hl,hl
+ add hl,hl
+ cal _HLTIMES10
+ ex de,hl
+ cal _IncScore ;score+(40*level)
+ cal removeworm
+ pop hl ;<<$some call
+ pop hl ;<<call HandleWorm
+ pop hl ;<<call hitworm
+ ld (ix+delay),2
+ jp Nextlevel
+
+chkpeahit: ;bc=ownpos;hl=peapos (destr:ad)
+ ld a,(sprsize)
+ inc a
+ ld d,a
+ ld a,b
+ sub h
+ inc a
+ cp d ;=(sprsize)+1
+ ret nc ;nc=no pea
+ ld a,c
+ sub l
+ inc a
+ cp d
+ ret ;c=pea
+
+;--- other modes ---
+
+chkctfpeas:
+ ld hl,(peaspos) ;1st pea
+ ld a,(ix+reserv)
+ ld e,a ;push a
+ and %01 ;ourpea (0|1)
+ jr z,sel_otherpea
+ ld hl,(peaspos+2) ;2nd pea ;&&&ex de,hl?
+sel_otherpea:
+ cal chkpeahit
+ jr c,hitflag
+;no peas hit:
+ ld a,e ;peek a (that's x86asm for pop\push ;)
+ bit 1,a ;%10 = carrying flag?
+ jp z,wormdead ;if not just die
+ xor %11 ;drop flag
+ ld (ix+reserv),a
+ psh af
+ cal wormdead
+ pop af ;which flag? (=and %1)
+ ld hl,drawctfpea1 ;restore #1
+ jr z,nottheotherflag
+ inc hl ;ld hl,drawctfpea2
+ inc hl ;restore #2
+nottheotherflag:
+ ld (hl),3 ;draw delay 3 turns
+ ret
+
+hitflag: ;correct pea hit
+ ld a,e ;pop a
+ xor %11 ;invert flag taken + ownflag
+ ld (ix+reserv),a
+ and %10 ;just returned?
+ psh af ;safe z-flag
+ cal DrawPea ;remove
+ pop af
+ ret nz ;flag taken, continue game
+ psh hl
+ ld e,20 ;flag captured+returned
+ cal IncScore
+ pop hl
+ ld a,3 ;draw delay
+ ld (drawctfpea1),a ;redraw..
+ ld (drawctfpea2),a ;..both flags
+ ret ;Drawworm
+
+chkmultpeas:
+ ld de,peaspos-1
+ ld hl,lefttotalb
+lefttotal =$+1
+ ld (hl),0
+chkmultpealoop:
+ ex de,hl
+ inc hl
+ ld e,(hl)
+ inc hl
+ ld d,(hl)
+ ex de,hl
+ psh de
+ cal chkpeahit
+ pop de
+ jr c,pickmultpea
+ ld hl,lefttotalb
+ dec (hl)
+ jr nz,chkmultpealoop
+ jp wormdead
+pickmultpea:
+ ld a,247
+ ld (de),a
+ dec de
+ ld (de),a
+ cal DrawPea
+ jp pickpea_
+
+;--- misc ---
+
+#ifdef optdie
+nextotherwormbit:
+ ld a,c
+ sub (hl)
+ inc hl
+ inc a
+ cp 4
+ jr nc,nothit1 ;no
+ ld a,b
+ sub (hl)
+ inc a
+ cp 4
+ ret c ;nz ;yes
+nothit1:
+ inc hl
+ cal resbit
+ChkWorm:
+ cal _cphlde
+ jr nz,nextotherwormbit
+ ret ;z
+#endif
+
+checkhitlapline:
+ ld a,(peaspos) ;63
+ sub b ;x==63
+ jr z,nextlaphalf
+ inc a
+ ret nz
+nextlaphalf:
+ ld a,(peaspos+1) ;yline
+ cp c ;ypos
+ ld a,1
+ jr nc,checklap ;y>yline -> a=1
+ xor a ;y<yline -> a=0
+checklap:
+ cp (ix+reserv)
+ ret z ;same as before
+ ld (ix+reserv),a ;1st time
+ ld e,a
+ ld a,(handledworm)
+ and 1 ;group 0 (1,3) or 1 (2,4)
+ xor e
+ ret z ;(group 0 and y<yline) or (group 1 and y>yline)
+ psh bc
+ ld e,20
+ cal IncScore ;lap!
+ pop bc
+ ret
+
;_______________________________________________________________________________
; _____ ______ _____ _______ _______
; |_____] |_____/ | | | |______
add a,2
ret
+wormdead:
+ pop hl ;<<call
WormDead:
#ifdef invincible
jp stopworm
#endif
ld a,2
ld (flashtime),a
- ld (ix+delay),respawndelay
+ ld (ix+delay),rspawndelay
thislevel =$+1
ld hl,0
DrawPea: ;hl=(PeaY)
ld b,h
ld c,l
+drawpea_:
ld de,0
spritepos =$-2
; jp PutSprite
; ______| |_____ |_____| | \_ |______
;_______________________________________________________________________________
+addteamscore:
+ ld a,(handledworm)
+ cp 2
+ ld de,worm3-worm1
+ jr c,bla
+ ld de,worm1-worm3
+bla:
+ psh ix
+ add ix,de
+ ex de,hl
+ cal ldscoreinhl
+ pop ix
+ add hl,de
+ ret
+
+_divHLby1000:
+ psh hl
+ ld b,3
+divideagain: ;3x
+ cal _divHLby10
+ dnz divideagain
+ ld a,l ;a=hl/1000
+ pop hl
+ ret
+
+DecScore10:
+ cal ldscoreinhl
+ ld de,-10
+ add hl,de
+ jr nc,showstats ;<0=0
+ jr scorecommon
+
+extralives:
+ cal _divHLby1000
+ ld c,a
+ add hl,de ;increase score
+ cal _divHLby1000
+ cp c
+ jr z,scorecommon ;hl/1000 not increased
+ inc (ix+lives)
+ jr scorecommon
+
timematchscore:
;piece of crap checking whether you've already won in timematch
ld a,(nrworms)
dnz chktimematchover
jp anyworm ;g/o
-_divHLby1000:
- psh hl
- ld b,3
-divideagain: ;3x
- cal _divHLby10
- dnz divideagain
- ld a,l ;a=hl/1000
- pop hl
- ret
-
-extralives:
- cal _divHLby1000
- ld c,a
- add hl,de ;increase score
- cal _divHLby1000
- cp c
- jr z,scorecommon ;hl/1000 not increased
- inc (ix+lives)
- jr scorecommon
-
-DecScore10:
- cal ldscoreinhl
- ld de,-10
- add hl,de
- jr nc,showstats ;<0=0
- jr scorecommon
-
IncScore: ;inc score by e
ld d,0
_IncScore ; inc by de
scorecommon:
ld (ix+score+1),h
ld (ix+score),l ;save
+doteam:
+ cal addteamscore ;cal=CD | ld de,*=11
ld de,0
scorelimit =$-2
ld a,d
jr cshowA00
cshowA: ;small w/ leading 0
- or a
+ or a ;destr. ahl
jr nz,cshowA00
ld hl,txtNone
jp _vputs
jp _putc
_D_HL_DECI:
- ld de,savestr+4
+ ld de,savestr+5
ld b,5
ldhld:
cal _divHLby10
add a,'0'
- ld (de),a
dec de
+ ld (de),a
dnz ldhld
- ld hl,savestr
+ ex de,hl ;ld hl,savestr
ret
-savestr:
- .db "00000",0
ldscoreinhl:
ld h,(ix+score+1)
jr DoneLine
+;..and last but not least..:
+;_______________________________________________________________________________
+; _____ __ _ _ _ /
+; | | | \ | |____/ /
+; |_____ __|__ | \_| | \_ .
+;_______________________________________________________________________________
+
+timeout = $8000
+lossout = 20
+
+;--- multiple bytes ---
+
+sendstuff:
+ psh de
+sendstuffloop:
+ psh bc
+ ld c,(hl)
+ inc hl
+ cal Qsend
+ pop bc
+ dnz sendstuffloop
+ pop de
+ ret
+recvstuff:
+ psh de
+recvstuffloop:
+ psh bc
+ cal Qrecv
+ ld (hl),c
+ inc hl
+ pop bc
+ dnz recvstuffloop
+ pop de
+ ret
+
;--- foo ---
-;wild insert
+
receivenewpeaoverlink:
cal Qrecv ;Crecv
ld l,c
ld c,h
; jr Qsend ;that's why it's here
-;..and last but not least..:
-;_______________________________________________________________________________
-; _____ __ _ _ _ /
-; | | | \ | |____/ /
-; |_____ __|__ | \_| | \_ .
-;_______________________________________________________________________________
-
-timeout = $8000
-lossout = 20
-
;--- send ---
Qsend: ;--- try to send 8 bits in C; CF=error --- destr:abcde ---
; |_____/ | | | | |
;_______________________________________________________________________________
+;--- graphics ---
+
wtPicture: ;title
.db %00011110,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000001,%11000000,%00000000,%00000000,%00000001,%10000000,%00000000,%00001111,%10000000
.db %00111110,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000001,%11100000,%00000000,%00000011,%11000010,%01000011,%10011100,%00110000,%01100000
;.db %00000000,%00000001,%10000000,%00000000,%00001111,%10000000
-txtMenu: .db "Mode",0 ;1st menu item
- .db "Level",0 ;2nd
- .db "Link",0 ;...
- .db "Worms",0
- .db "worm #",0
-posMenu: .db 5
- .dw $2418,$231E,$2824,$1F2A,$1730
-txtMenuR: .db "controls",0
-txtoMenu: .db "Back",0 ;1st menu item
- .db "Lives",0 ;2nd
- .db "Limit",0 ;...
- .db "Speed",0
- .db "Rotation",0
- .db "Growth",0
-posoMenu: .db 6
- .dw $2618,$251E,$2524,$222A,$1A30,$1C36
-txtpMenu: .db "Resume",0 ;1st menu item
- .db "Turn Off",0 ;2nd
- .db "Contrast",$CF,5,0 ;...
- .db "Exit",0
-pospMenu: .db 4
- .dw $3418,$331E,$2F24,$3A2A
-txtGame: .db "Singleplayer",0
-txtGame1: .db "Peaworm",0
-txtGame2: .db "Tron",0
-txtGame3: .db "Deathmatch",0
-txtGame4: .db "Foodmatch",0
-txtGame5: .db "Multifoodmatch",0
-txtGame6: .db "Timematch",0
-txtGame7: .db "Race",0
-txtGame8: .db "CTF" ;,0
-
-posGame: .db 0
- .db txtGame1-txtGame
- .db txtGame2-txtGame
- .db txtGame3-txtGame
- .db txtGame4-txtGame
- .db txtGame5-txtGame
- .db txtGame6-txtGame
- .db txtGame7-txtGame
- .db txtGame8-txtGame
+#ifndef coolzgfx
+txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
+#endif
+
+;--- menus ---
+
+txtMenu: .db "Mode",0 ;1st menu item
+ .db "Level",0 ;2nd
+ .db "Link",0 ;...
+ .db "Worms",0
+ .db "worm #",0
+posMenu: .db 5
+ .dw $2418,$231E,$2824,$1F2A,$1730
+txtteamed: .db " vs 2",0
+txtMenuR: .db "controls",0
+txtoMenu: .db "Back",0 ;1st menu item
+ .db "Lives",0 ;2nd
+ .db "Limit",0 ;...
+ .db "Speed",0
+ .db "Rotation",0
+ .db "Growth",0
+posoMenu: .db 6
+ .dw $2618,$251E,$2524,$222A,$1A30,$1C36
+txtpMenu: .db "Resume",0 ;1st menu item
+ .db "Turn Off",0 ;2nd
+ .db "Contrast",$CF,5,0 ;...
+ .db "Exit",0
+pospMenu: .db 4
+ .dw $3418,$331E,$2F24,$3A2A
+
+;--- text ---
+
+txtGame: .db "Singleplayer",0
+txtGame1: .db "Peaworm",0
+txtGame2: .db "Tron",0
+txtGame3: .db "Deathmatch",0
+txtGame4: .db "Foodmatch",0
+txtGame5: .db "Multifoodmatch",0
+txtGame6: .db "Timematch",0
+txtGame7: .db "Race",0
+txtGame8: .db "CTF" ;,0
+posGame: .db 0
+ .db txtGame1-txtGame
+ .db txtGame2-txtGame
+ .db txtGame3-txtGame
+ .db txtGame4-txtGame
+ .db txtGame5-txtGame
+ .db txtGame6-txtGame
+ .db txtGame7-txtGame
+ .db txtGame8-txtGame
txtNone: .db "None",0
txtDef: .db "Default",0
txtYes: .db "Yes",0
txtNo: .db "No",0
-txtKeyleft: .db ":left",0
-txtKeyright:.db "/right",0
-posLevsel = $0320
-txtLevsel: .db $CF," SELECT LEVELS ",5,0
-txtWaiting: .db "Waiting...",0
-txtReceive: .db "Receiving..." ;,0
-
-TrigPrecalc:
-.db 0, 3, 6, 9, 12, 15, 18, 21
-.db 24, 27, 30, 33, 36, 39, 42, 45
-.db 48, 51, 54, 57, 59, 62, 65, 67
-.db 70, 73, 75, 78, 80, 82, 85, 87
-.db 89, 91, 94, 96, 98,100,102,103
-.db 105,107,108,110,112,113,114,116
-.db 117,118,119,120,121,122,123,123
-.db 124,125,125,126,126,126,126,126
-.db 127
+txtKleft: .db ":left",0
+txtKright: .db "/right",0
+posLevsel = $0320
+txtLevsel: .db $CF," SELECT LEVELS ",5,0
+txtWaitn: .db "Waiting" ;"...",0
+txtReceiv: .db "...",0
+#ifdef readytext
+txtReady: .db "Prepare!",0
+txtposReady = 7
+#endif
txtLevel: .db "Level ",0
txtWorms: .db "Worms: 0",0 ;follows txtLevel
txtName: .db "Name",0
-txtWinner: .db "Wins " ;follows txtName
-txtDied: .db "Died " ;follows txtWinner
+txtWinner: .db "Wins",$D8 ;follows txtName
+txtDied: .db "Died",$D8 ;follows txtWinner
txtScore: .db "Score",0 ;follows txtDied
txtLeft: .db " left",0 ;follows txtScore
-txthiscore:.db "HiScore:",0
-#ifdef readytext
-txtReady: .db "Prepare!",0
-txtposReady = 7
-#endif
-#ifndef coolzgfx
-txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
-#endif
+txthiscore:.db "HiScore:" ;,0
+
+;--- foo ---
+
+trigtable: .db 0, 3, 6, 9, 12, 15, 18, 21
+ .db 24, 27, 30, 33, 36, 39, 42, 45
+ .db 48, 51, 54, 57, 59, 62, 65, 67
+ .db 70, 73, 75, 78, 80, 82, 85, 87
+ .db 89, 91, 94, 96, 98,100,102,103
+ .db 105,107,108,110,112,113,114,116
+ .db 117,118,119,120,121,122,123,123
+ .db 124,125,125,126,126,126,126,126,127
#ifdef intlevels
-datalevels: .dw LevelDef, LevelDefM,LevelDefT
- .dw LevelDefM,LevelDefM,LevelDefM,LevelDefM
- .dw LevelDefR,LevelDefC
-nrlevels: .db 2,3,1,3,3,3,3,3,1,0 ;=defaults
+datalevels:.dw LevelDef, LevelDefM,LevelDefT
+ .dw LevelDefM,LevelDefM,LevelDefM,LevelDefM
+ .dw LevelDefR,LevelDefC
+nrlevels: .db 2,3,1,3,3,3,3,3,1,0 ;=defaults
+defhiscrpos:
+ .db 0,0,"SHI", 0,0,"SHI", 0,0,"SHI", 0,0,"SHI", 0,0,"SHI"
+#else
+defhiscrpos = 0
#endif
-_datalink = %00000001 ;linkplay
-_datafoodl = %00000010 ;left=0 limit
-_datasingl = %00000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel)
-_datactfpeas = %00001000 ;ctf peas=1
-_bitctfpeas = 3
-_datatime = %00010000 ;time incs score (timematch)
-_datafood = %01000000 ;food present=0
-_bitfood = 6
-_datamultpeas = %10000000 ;multiple peas=1 (no _datafood)
-_bitmultpeas = 7
-;reserved %00100000 ;for future use
-
-savestart: ; �game info (see above)
- ; | �lives (0=unlimited)
- ; | | �nrworms (can be altered by user)
- ; | | | �level (reset to 1 at startup)
- ; | | | | �speed/delay (-1=def)
- ; | | | | | �grow speed (-1=none; 0=continuous)
- ; | | | | | | �turn speed (8=def)
- ; | | | | | | | �score limit (0=none)
-gamesingle = 0 ; | | | | | | | |
-datasingle: .db %00000110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
-gamepeas = 1
-datapeas: .db %00000100,1,1,1,-1,-1, 8, 0 ;Peaworm (SP; 1 live)
-gametron = 2
-datatron: .db %01010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
-gamedeathm = 3
-datadeathm: .db %01000000,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
-gamefoodm = 4
-datafoodm: .db %00000000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
-gamemfoodm = 5
-datamfoodm: .db %11000010,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas))
-gametimem = 6
-datatimem: .db %01010000,1,2,1,-1, 0, 8, 0 ;Timematch (tron, 100 score)
-gamerace = 7
-datarace: .db %01000000,0,2,1,-1,-1, 8,10 ;Race (100 score)
-gamectf = 8
-datactf: .db %01001000,0,4,1,-1,-1, 8,10 ;CTF (100 score)
+;--- game settings ---
+
+_datalink = %00000001 ;linkplay (1!)
+_datafoodl = %00000010 ;left=0 limit
+_datasingl = %00000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel) &&1?
+_dataPctf = %00001000 ;ctf peas=1
+__bitPctf = 3
+_datatime = %00010000 ;time incs score (timematch)
+;reserved %00100000 ;for future use
+_datafood = %01000000 ;food present=0 (6!)
+_dataPmult = %10000000 ;multiple peas=1 (no _datafood) (7!)
+
+savestart: ; �game info (see above)
+ ; | �lives (0=unlimited)
+ ; | | �nrworms (can be altered by user)
+ ; | | | �level (reset to 1 at startup)
+ ; | | | | �speed/delay (-1=def)
+ ; | | | | | �grow speed (-1=none; 0=continuous)
+ ; | | | | | | �turn speed (8=def)
+ ; | | | | | | | �score limit (0=none)
+gamesingle = 0 ; | | | | | | | |
+datasingle:.db %00000110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
+gamepeas = 1
+datapeas: .db %00000100,1,1,1,-1,126,8, 0 ;Peaworm (SP; 1 live, 127 growth)
+gametron = 2
+datatron: .db %01010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
+gamedeathm = 3
+datadeathm:.db %01000000,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
+gamefoodm = 4
+datafoodm: .db %00000000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
+gamemfoodm = 5
+datamfoodm:.db %11000010,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas)
+gametimem = 6
+datatimem: .db %01010000,1,2,1,-1, 0, 8, 0 ;Timematch (1 live, cont.growth)
+gamerace = 7
+datarace: .db %01000000,0,2,1,-1,-1, 8,10 ;Race (100 score)
+gamectf = 8
+datactf: .db %01001000,0,6,1,-1,-1, 8,10 ;CTF (100 score)
worm1set: .dw worm1p,worm1p
.db %11110111,1,-01,K_RIGHT,K_LEFT
.db %11111101,0,-01,K_PLUS,K_ENTER
worm4name: .db "JIM ",0
-defhiscrpos:
-#ifdef intlevels
- .db 0,0,"SHI"
- .db 0,0,"SHI"
- .db 0,0,"SHI"
- .db 0,0,"SHI"
- .db 0,0,"SHI"
-#endif
-
-Gametype: .db 0 ;last gamemode
+Gametype: .db 0 ;last gamemode
saveend:
- ;set:
-heading = 0 ;level*
-pos = 2 ;level*
-pos2 = 4 ;level
-grow = 6 ;level
-died = 8 ;game
-score = 9 ;game
-delay = 11 ;game
- ;19B @game
-lives = 12
-head = 13 ;4B (head=tail)
-tail = 15 ;also@next level
-storepos = 17
-reserv = 18 ;loop (race:lap|ctf:pea)
-input = 19 ;---currently unused afaik---
-left = 20
-right = 21
-name = 22
-wormsize = 31
-
-startdelay = 30
-respawndelay = 30
-maxnamelength = 8+1
-
-defspritesz = 4
-defspriteimg: .db %01100000
- .db %11110000
- .db %11110000
- .db %01100000
+ ;set:
+heading = 0 ;level*
+pos = 2 ;level*
+pos2 = 4 ;level
+grow = 6 ;level
+died = 8 ;game
+score = 9 ;game
+delay = 11 ;game
+ ;19B @game
+lives = 12
+head = 13 ;4B (head=tail)
+tail = 15 ;also@next level
+storepos = 17
+reserv = 18 ;loop (race:lap|ctf:pea)
+input = 19 ;---currently unused afaik---
+left = 20
+right = 21
+name = 22
+wormsize = 31
+
+startdelay = 30
+rspawndelay = 30
+maxnamesize = 8+1
#ifdef intlevels
-deflevels:
- .db "Internal Levels",0
- .db "by Shiar" ;,0
+defsprsz = 4
+defspr: .db %01100000
+ .db %11110000
+ .db %11110000
+ .db %01100000
+
+deflevels: .db "Internal Levels",0
+ .db "by Shiar" ;,0
- .db 0,deflevels/256,deflevels&255
+ .db 0,deflevels/256,deflevels&255
#endif
templevels: