; Title : Wormy
-; Version : 93%
+; Version : 95%
; Release Date : summer 2001
; Filename : wormy.86p (5kb)
; Author(s) : Shiar
;----------- TO-DO -----------
;-----------------------------
-; 93% = DONE
+; 95% = DONE
-; * internal levels
-; * check levels/gametype
-; * enough hiscore saves!
-; * complete readme
+; [* internal levels ]
+; [ * check levels/gametype ]
+; [ * enough hiscore saves! ]
+; [* complete readme ]
; 1% * misc (pollish, bugs, &&&)
; * LINK
-; 2% * fix deaths linkplay and transmit game/level data
-; 2% * make linkplay available for all gametypes (not just deathmatch)
-; * CTF
-; 1% * fix pea XOR problem in ctf (+dom?)
-; * fix wormstop
-; 1% * domination?: take control points by running over them and hold them
+; * fix first packet loss
+; 1% * transmit game/level data
+;;;1% * get g/o signal (l&l) working
+; 2% * send new peas' positions
;100% = bugs fixed + levels done
#define buffer ;use display buffer (otherwise write directly to screen)
#define readymask ;"greys" out the field before starting a level
-;#define hlines ;horizontal-line routine for more speed drawing boxes
- ;(doesn't work properly)
+#define coolzgfx ;nice graphics for game over screen
;#define readytext ;displays "prepare" before level starts
;#define invincible ;worms cannot die =)
+;#define optdie ;in race games worms don't die when they run into each other
#define cal call
#define psh push
#define dnz djnz
+;#define halt nop
#include "asm86.h"
#include "ti86asm.inc"
_SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl
_SET_MM_NUM_BYTES = $464F ;number of bytes for mm.ldir = ahl
_mm_ldir = $52ED ;24bit ldir
+_MM_LDIR_SET_SIZE = $524D ;_SET_MM_NUM_BYTES + _mm_ldir
_RAM_PAGE_1 = $47E3 ;set $8000+ to page 1
_RAM_PAGE_7 = $47F3 ;"""" 7
_PTEMP_END = $D29A ;end of VAT
_load_ram_ahl = $462F ;ahl->page+hl
-_writeb_inc_ahl = $5567 ;ld (ahl),c
+_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
worm3 = $AC3E ;-AC59 (1F)
worm4 = $AC5D ;-AC77 (1F)
balls = $AC7C ;-ACFF (3x43d)
-SinCosTable = $AD00 ;-AE00 (4x40)
+SinCosTable = $AD00 ;-AE00 (4*40)
;free $AE01 ;-AFFF (1FF)
worm1p = $B000 ;-B7FF (800) %1011O000
worm3p = $B800 ;-BBFF (400) %10111O00
;free $BF91 ;-BFFF (6F)
-
- ;program $D748 ;-E7FF (106D+4A)
- ;free $E800 ;-EFFF (800)
+ ;program $D748 ;-EFFF (186D+4A)
worm4p = $F000 ;-F3FF (400) %11110O00
leveldata = $F400 ;-FA70 (<=671)
-turn10 = $AE01
-peaspos = $AE02
+turn10 = $AE01 ; (1) (counter)
+peaspos = $AE02 ;-AE05 (4) (peas)
+
+;MEM|8---9---A---B---C---D---E---F---|
+; |..[------]||[]|......[-----]|[].|
+; | SCREEN 2* 13 PRGM 4LV |
;--- temporary
.dw WormIcon
WormTxt:
- .db "WORMY by SHIAR -- beta 93%",0
+ .db "WORMY by SHIAR -- beta 95%",0
WormIcon:
- .db 9,2
- .db %10010110,%01101111
- .db %10110101,%01001011
- .db %01110011,%01001001
- .db %00000011,%10000000
- .db %00000001,%11100000
- .db %00111000,%11111000
- .db %01111110,%00111111
- .db %11101111,%00001111
- .db %11000011,%10000000
+ .db 8,2
+ .db %00000000,%00111100
+ .db %00000000,%01010010
+ .db %00000000,%01100001
+ .db %01100011,%10011001
+ .db %10010100,%01101001
+ .db %10011001,%00011001
+ .db %01000010,%11000001
+ .db %00111100,%00111110
levelhead = 'w'
-levelhead2 = 93 ;wormy levels header = "93"
+levelhead2 = 95 ;wormy levels header = "95"
int_handler:
ex af,af'
im 1
ld a,$D4
ld h,a
- ld l,0 ;ld hl,$D400
+ ld l,0 ;ld hl,$D400
ld d,a
- ld e,1 ;ld de,$D401
+ ld e,1 ;ld de,$D401
ld b,e
- ld c,l ;ld bc,$0100
- dec a ;ld a,$D3
+ ld c,l ;ld bc,$0100
+ dec a ;ld a,$D3
ld (hl),a
ldir
ld hl,int_handler
ld d,a
- ld e,a ;ld de,$D3D3
+ ld e,a ;ld de,$D3D3
ld bc,int_end-int_handler
ldir
- inc a ;ld a,$D4
+ inc a ;ld a,$D4
ld i,a
im 2
loadgametype:
psh de
- inc bc
- inc bc
cal _Get_Word_ahl ;ld de,(ahl++)
psh af
- ld a,d
- or e
- jr z,defaultlevels
ld a,e ;set new level
ld (bc),a
inc bc
ld a,d
ld (bc),a
- dec bc
-defaultlevels:
+ inc bc
pop af
pop de ;counter
dec d ;8x
ld a,255
ld (ix),a ;end mark
+ ld ix,templevels-6
+levelselectmenu:
+ psh ix ;offset
+ ld a,-2
+ ld (availevels),a
cal _clrWindow
- ld hl,templevels-3
- psh hl
- ld hl,$0020
+ ld hl,$0320
ld (_penCol),hl
ld hl,txtLevsel
- cal _vputs ;"< Select levels: >"
- ld hl,$0601 ;x=1
+ cal _vputs ;"< SELECT LEVELS >"
+ ld hl,$FC00+(2*16)
+ cal hr
+ ld hl,$FC00+(10*16)
+ cal hr
+ ld hl,$FC00+(56*16)
+ cal hr
+ ld hl,$0C01 ;x=1
ld (_penCol),hl
- pop hl
dispnextlevel:
- ld a,(hl)
+ ld de,3
+ add ix,de
+ ld a,(ix)
inc a ;cp 255
- jr z,_levselect
- ld a,(hl) ;ade=(hl)
+ jr z,__levselect
+ dec a
displevel:
- inc hl
- ld d,(hl)
- inc hl
- ld e,(hl)
- inc hl
- psh hl
- ex de,hl ;ahl=ade=(hl)
+ ld h,(ix+1)
+ ld l,(ix+2) ;ahl=(ix)
cal _load_ram_ahl ;hl=ahl
ld b,(hl) ;b=title size
cal _vputs
ld (hl),a ;y+6
ld hl,availevels
inc (hl)
- pop hl
+ cp 49 ;bottom of screen
+ jr nc,_levselect
jr dispnextlevel
levup:
cal menupos
dec b ;up
ld a,b
- cp -4
+ cp -3
jr nz,levselected
inc b ;undo
jr levselected
cal menupos
inc b ;down
ld a,b
- cp -3
+ cp -2
availevels =$-1
jr nz,levselected
dec b ;back up
levselected:
jp menupos
+__levselect:
+ ld ix,templevels-6 ;reset 2 1st page
_levselect:
- ld b,-3 ;level selected
+ ld b,-2 ;level selected
cal menupos
+ pop hl
levselect:
- halt \ halt
+ psh hl
psh bc
- cal GET_KEY
+ cal ubergetkey
pop bc ;GET_KEY destr. b
cp K_UP
cal z,levup
cal z,levdown
cp K_SECOND-1
jr z,loadlevel
+ pop hl
+ cp K_RIGHT-1
+ jp z,levelselectmenu
cp K_EXIT-1
- ret z
+ jp z,ExitNoStats
cp K_ENTER-1
jr nz,levselect
; jr z,loadlevel
loadlevel:
+; ld hl,templevels-3
ld a,b
add a,3 ;sellev+3 (#0==-3)
ld e,a
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)
cal _Get_Word_ahl
ld (leveldataSize),de
+
ld d,8 ;counter
- ld bc,datalevels-2
+ ld bc,datalevels
cal loadgametype
- ld (hilvlposa),a
+ ld (hilvlposa),a ;singleplayer levels
ld (hilvlposhl),hl
ld d,4
cal loadgametype
cal _SET_ABS_DEST_ADDR ;store in mem.
ld hl,0
leveldataSize =$-2
- cal _SET_MM_NUM_BYTES
- cal _mm_ldir
+ cal _MM_LDIR_SET_SIZE
cal _LOAD_ABS_SRC_ADDR ;->ahl
ld (hiscrposa),a
ld hl,TrigPrecalc
ld de,SinCosTable
- psh de ; >> 1
+ psh de
ld bc,65
ldir
dec hl
ld (de),a
inc de
dnz MirrorSineWave
- pop hl ; << 0k
+ pop hl ;SinCosTable
ld b,128+64
NegativeSineWave:
xor a
ld hl,wtPicture
ld bc,16*16
ldir
- ld hl,$FC00+$160
+ ld hl,$FC00+$010 ;(*,01)
+ cal hr
+ ld hl,$FC00+$160 ;(*,22)
cal hr
- ld hl,$FC00+$3E0
+ ld hl,$FC00+$3E0 ;(*,62)
cal hr
dispmainmenu:
- ld hl,dispmenusets ;mainMenu
+ ld hl,Gametype
+ ld a,(hl)
+ dec a ;will be inced @changegame
+ and 7
+ ld (hl),a
+ ld hl,changegame ;dispmenusets ;mainMenu
psh hl ;jump here after ret
ld hl,txtMenu
ld ix,posMenu
ld (_penCol),hl
cal loadgamecar
psh hl
- cal cshowA ;lives
+ cal cshowA0 ;lives
ld hl,$2A3E
ld (_penCol),hl
cal _vputs
jr dispspeeddone
dispspeed:
- cal cshowA
+ cal cshowA0
dispspeeddone:
ld hl,$363E
psh hl
ld a,(hl) ;(growth)
inc a ;-1=None; 0..98->1..99
- cal cshowA
+ cal cshowA0
ld hl,$303E
ld (_penCol),hl
cal _vputs
jr dispturndone
dispturn:
- cal cshowA ;turn speed
+ cal cshowA0 ;turn speed
dispturndone:
ld hl,$243E
ld a,(hl) ;(scorelimit)
or a
psh af
- cal cshowA ;limit
+ cal cshowA0 ;limit
pop af ;a==0?
jr z,optionMenu ;do not display 0 behind 'None'
ld a,'0'
cal loadgamecar
inc hl
pop af
- cp K_LEFT
+ sub K_LEFT
jr z,seloleft
- cp K_RIGHT
+ dec a ;K_RIGHT
ld a,b
jr nz,optionMenu
changespeed:
cal changespeedInit
inc a
- cp 99
+ cp 20
jr nc,_optionMenu ;>98
changedspeed:
dec hl ;(Speed)
cal loadgamecar
inc hl
pop af
- cp K_LEFT
+ sub K_LEFT
jr z,selleft
- cp K_RIGHT
+ dec a ;K_RIGHT
ld a,b
jr nz,mainMenu
jr nc,mainMenu ;may not be >4
changednrworms:
ld (hl),a
-_dispmenusets:
- jr dispmenusets ;mainMenu
+ jr _dispmenusets ;mainMenu
changenrwormsInit:
ld a,(Gametype)
cp 3
ld a,1 ;change LS-bit (=link)
xor (hl) ;0=1; 1=0
ld (hl),a
+_dispmenusets:
jr dispmenusets ;mainMenu
changegame:
- ld a,0
-Gametype =$-1
+ ld a,(Gametype)
inc a
+ cal changedgame
+ jr z,changegame
+ jr dispmenusets ;mainMenu
changedgame:
and 7 ;mod 8
ld (Gametype),a
- jr dispmenusets ;mainMenu
+ cal getnrlevels
+ xor a
+ cp (hl)
+ ret
bchangegame:
ld a,(Gametype)
dec a
- jr changedgame
+ cal changedgame
+ jr z,bchangegame
+ jr dispmenusets ;mainMenu
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
+ cal getnrlevels
cp (hl) ;max level for sel.game
pop hl
jr z,_mainMenu
jr nz,changedlevel
jr _mainMenu
+getnrlevels: ;for current gametype at hl
+ ld hl,Gametype
+ ld d,0
+ ld e,(hl)
+ ld hl,nrlevels
+ add hl,de
+ ret
+
getcustomkey:
cal _vputs
dec ix
waitcustomkey:
- halt \ halt
psh hl
- cal GET_KEY
+ cal ubergetkey
pop hl
or a
jr z,waitcustomkey
ld hl,$2A3E ;worms
ld (_penCol),hl
cal loadgamecar
- inc hl
psh hl
+ inc hl
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
+ pop hl ;loadgamecar
+ psh bc
+ ld d,0
+ cal hlatlevel
+ ld a,(Gametype)
+ or a ;gamesingle
+ jr nz,displvlname
+ ld a,(Level)
+ cal cshowA0
+ jr lvldisped
+displvlname:
+ cal _vputs
+lvldisped:
+ pop bc
ld hl,$3032
ld (_penCol),hl
ld hl,$303E
ld (_penCol),hl
cal getwormname
- ld hl,worm1name-18
- add hl,de
+ psh ix ;wormNname
+ pop hl ;ld hl,ix
cal _vputs
ld hl,$363E ;controls
ld (_penCol),hl
menucall:
psh bc
menuwaitkey:
- halt \ halt
- cal GET_KEY
+ cal ubergetkey
or a
jr z,menuwaitkey
pop bc ;GET_KEY destr. b
ret
changeworms:
- cal _clrWindow
- ld hl,txtEName
- cal _puts ;"Enter name player "
- ld a,(curworm)
- add a,'0'
- cal _putc
-
cal getwormname
+ psh ix
+ pop hl ;ld hl,ix
+ psh hl
+ ld b,8
+emptyname:
+ ld (hl),' '
+ inc hl
+ dnz emptyname
ld a,maxnamelength
- cal entername
- ld (ix),0 ;end mark
- jp DisplayMenu
-
-entername:
- ld h,1
- ld l,h ;)
- ld (_curRow),hl
ld (namelength),a
enternameloop:
+ ld hl,$FF07 ;begin pos
+ ld a,6 ;nr of lines
+ cal clroldcustom
+ ld hl,$303E
+ ld (_penCol),hl
+ pop hl
+ psh hl
+ ld (ix),0
+ cal __vputs
+ ld (ix),' '
ld a,'_'
- cal _putc
- ld hl,_curCol
- dec (hl)
+ cal __vputmap
nokeypressed:
- halt
- cal GET_KEY
+ cal ubergetkey
or a
jr z,nokeypressed
+ ld hl,namelength
cp K_DEL
jr nz,continue
backspace:
- ld hl,namelength
ld a,(hl)
cp maxnamelength
jr nc,nokeypressed
inc (hl)
-
dec ix
- ld a,' '
- ld (ix),a
- cal _putc
- ld hl,_curCol
- dec (hl)
- dec (hl)
jr enternameloop
continue:
cp K_ENTER
- ret z
+ jr z,nameentered
cp K_EXIT
- ret z
-
- ld hl,namelength
- dec (hl)
- ret z
+ jr z,nameentered
+ dec (hl) ;(namelength)
+ jr z,nameentered
ld hl,chartable
ld e,a
ld d,0
ld a,(hl)
or a
jr z,nokeypressed
-
ld (ix),a
- cal _putc
inc ix
cal releasekeys
jr enternameloop
-
chartable:
.db 0,".<>!",0,0,0,0 ;down,L,R,up
.db 0,"XTOJE0",0 ;enter..clear
.db $D9,"-PKFA6'" ;on..alpha
.db "54321*",0,$D0 ;F5..more
+nameentered:
+ pop ix ;stringbegin
+ ld (ix+8),0 ;end mark
+ jp DisplayMenu
+
;--proc
+ubergetkey:
+ halt ;woo hoo
+ halt ;save them batteries! yeah!
+ jp GET_KEY
+
clrold:
ld hl,$FD97 ;begin pos
- ld de,7 ;bytes to add
ld a,35 ;nr of lines
+clroldcustom:
+ ld de,7 ;bytes to add
clroldsettings:
ld c,9 ;bytes to clear
clroldsetsloop:
jr nz,clroldsettings
ret
+hlatlevel: ;d must be 0
+ psh hl ;loadgamecar
+ ld a,(Gametype) ;8bytes -> 7bytes
+ ld e,a
+ add a,a ;nc
+ add a,e
+ add a,a ;8->2bytes
+ add a,24+1 ;go to datalevels
+ ld e,a ;=de
+ sbc hl,de ;datalevels
+ cal _ldHLind ;ld hl,(hl)
+ pop de ;de=loadgamecar
+ inc de \ inc de
+ ld a,(de) ;(curlevel)
+ ld (Level),a
+ ld d,a ;begin level
+skiplevelloop:
+ dec d ;levels to skip
+ ret z
+ cal skiplevel
+ jr skiplevelloop
+ ret ;hl=begin of correct level
+
+skiplvltitle: ;zf=singleplayer
+ ld a,(hl)
+ or a ;null-terminator
+ inc hl
+ jr nz,skiplvltitle
+ ret
+
skiplevel: ;@hl - destr:ab - alter:hl
+ ld a,(Gametype)
+ or a ;gamesingle
+ psh af
+ cal nz,skiplvltitle
inc hl
inc hl
inc hl
ld b,(hl) ;balls
inc b
inc b ;skip 6
- ld a,c
- cp _datasingle
+ pop af ;cp (Gametype),0
jr z,skipworms
inc b ;multiplayer lvl
inc b
ld (scorelimit),hl
pop hl ;loadgamecar
- psh hl
- ld a,(Gametype) ;8bytes -> 7bytes
- ld e,a
- add a,a ;nc
- add a,e
- add a,a ;8->2bytes
- add a,24+1 ;go to datalevels
- ld e,a ;=de
- sbc hl,de ;datalevels
-
- cal _ldHLind ;ld hl,(hl)
- pop de ;de=loadgamecar
- inc de \ inc de
- ld a,(de) ;(curlevel)
- ld (Level),a
- ld d,a ;begin level
-skiplevelloop:
- dec d ;levels to skip
- jr z,levelsskipped
- cal skiplevel
- jr skiplevelloop
-levelsskipped:
+ cal hlatlevel
psh hl ;1st level
ld a,(gameCar)
;-----------------------------
GameOver:
- cal _clrLCD
ld hl,worm1set
ld de,worm1
ld a,4 ;4x (all worms)
createwormsloop:
ex de,hl
- ld bc,died
+ ld bc,died ;8
add hl,bc
- ld b,0
+; ld b,0
ld (hl),b ;died=0
inc hl
ld (hl),b ;score=0
dec a ;loop
jr nz,createwormsloop
- pop hl ;begin of current level
StartLevel:
- ld de,Left
+ cal _clrWindow
+ pop hl ;begin of current level
ld a,(hl)
inc a ;=255?
jp nz,nextlevel
ld hl,Level
dec (hl) ;curlevel-- (not beyond last lvl)
cal releasekeys
- cal _clrWindow
pop hl
;show end msg or smtn
ld bc,Exit
inc hl ;location of ending-code
jp (hl) ;go there ("call")
nextlevel:
+ ld a,(Gametype)
+ or a ;gamesingle
+ psh af
+ cal nz,skiplvltitle
+ ld de,Left
ldi
+ ld de,Speed
ld a,0
customspeed =$-1
inc a ;$FF=def
- jr z,defspeed
+ jr nz,setspeed
+ ld a,(hl) ;speed from level
+ inc a
+setspeed:
dec a
- ld (hl),a ;store new speed
-defspeed:
- ld de,Speed
- ldi
+ ld (de),a ;custom speed
+ inc hl
ld de,peagrowth
ldi
ld a,(hl)
#endif
ld hl,worm1
- ld a,(Gametype)
- cp gamesingle
+ pop af ;cp (Gametype),0
ld b,1
jr z,worminit
ld b,4
inc a ;ld a,1
ld (turn10),a
- ld a,2
+ inc a ;ld a,2
ld (flashtime),a
;-------- draw level ---------
psh hl ; >> 1
psh de ; >> 2
ld de,ScrBuffer+1
- ld bc,63
+ ld bc,63 ;first 2 rows
ld (hl),%11111111
- ldir
+ ldir ;draw upper border
inc hl
- ld (hl),%11000000
+ ld (hl),%11000000 ;first left border
inc hl
ld b,31
ClearLine:
- ld (hl),c
- inc hl
+ ld (hl),c ;=0
+ inc hl ;clear rest of line
dnz ClearLine
psh hl ; >> 3
rra
rra
ld l,a
- ld h,0
+ ld h,c ;0
add hl,de
pop af ; << 3
and %00000111
ld b,a
- ld c,0
+; ld c,0
ld a,%11000000
jr z,NoVertShift
VertShift:
pop hl ; << levelp
ld a,(Gametype)
- cp gamectf
- jr nz,noctf
+ cp gamerace ;or gamectf
+ jr c,levelhasbeensetup
ld de,peaspos
- ld bc,4
+ ld c,2 ;ld bc,2 (2 bytes)
+ jr z,loadextralevelstuff ;cp gamerace
+ ld c,4 ;ld bc,4 (2nd flag in ctf)
+loadextralevelstuff:
ldir
- psh hl
- cal DrawAllPeas
- pop hl
-noctf:
+ ld a,1 ;draw delay
+ ld (drawctfpea1),a
+ ld (drawctfpea2),a
+levelhasbeensetup:
cal drawstuff
setclient:
ld (worm1+left),a ;worm 1...
ld (worm3+left),a ;and worm 3 via link
- cal Qrecv
- ld a,c
- ld (worm2+name+0),a
- cal Qrecv
- ld a,c
- ld (worm2+name+1),a
- cal Qrecv
- ld a,c
- ld (worm2+name+2),a
- cal Qrecv
- ld a,c
- ld (worm2+name+3),a
- cal Qrecv
- ld a,c
- ld (worm2+name+4),a
+ ld hl,worm1+name
+ ld b,9
+ cal recvstuff
+ ld hl,worm2+name
+ ld b,9
+ cal sendstuff
jr initfinished
+sendstuff:
+ psh bc
+ ld c,(hl)
+ inc hl
+ psh hl
+ cal Qsend
+ pop hl
+ pop bc
+ dnz sendstuff
+ ret
+recvstuff:
+ psh bc
+ psh hl
+ cal Qrecv
+ pop hl
+ ld (hl),c
+ inc hl
+ pop bc
+ dnz recvstuff
+ ret
sethost:
+ halt
+ dnz sethost
ld (worm2+left),a ;worm 2+4..
ld (worm4+left),a ;..over link
- ld c,'T'
- cal Qsend
- ld c,'e'
- cal Qsend
- ld c,'s'
- cal Qsend
- ld c,'t'
- cal Qsend
- ld c,0
- cal Qsend
+ ld hl,worm1+name
+ ld b,9
+ cal sendstuff
+ ld hl,worm2+name
+ ld b,9
+ cal recvstuff
initfinished:
ld b,startdelay
cal forceshowstats ;update score
nodispupdate:
+ ld a,(Gametype)
+ cp gamectf
+ jr nz,noctfpeas2draw
+ ld de,drawctfpea1
+ ld hl,(peaspos)
+ cal tryDrawPea ;pea#1
+ ld de,drawctfpea2
+ ld hl,(peaspos+2)
+ cal tryDrawPea ;pea#2
+noctfpeas2draw:
+
ld a,0
nrballs =$-1
add ix,bc
pop bc
ld hl,handledworm
- inc (hl) ;1..nrworms
+ inc (hl) ;0..nrworms-1
dnz handleworms
;-----------------------------
dec (ix+lives)
psh af
ld de,10
- cal DecScore
+ ld a,(Gametype)
+ cp gamectf ;ctf no death penalty
+ cal nz,DecScore
pop af
ret nz ;HandleWorm done
ld a,(wormbeglives)
ld a,(gameCar)
and _datatime
jr z,anyworm ;quit at any worm's death
- ld a,(nrworms) ;livematch: all worms must've died
+ ld a,(nrworms) ;timematch: all worms must've died
ld b,a ;# of worms
ld hl,worm1+lives-(worm2-worm1)
ld de,worm2-worm1
ld a,D0LD1L
out (7),a ;both wires low = game over signal
cal _clrWindow
+#ifdef coolzgfx
+ ld de,$FC30 ;(0,1)
+ ld hl,wtWormy
+ ld bc,16*7
+ ldir
+ ld hl,$FC10
+ ld b,16*11
+ cal menuinvloop ;invert
+ ld hl,$FD80
+ cal hr ;menuinvloop w/ b=16
+ ld hl,$FCE0
+ cal hr
+ ld hl,_curRow
+ ld (hl),2
+#else
ld hl,txtGO
cal _puts
ld hl,$FC00
cal hr ;menuinvloop w/ b=16
ld hl,$FCE0
cal hr
-; ld l,$74
-; ld b,8
-; cal menuinvloop
ld hl,_curRow
inc (hl)
+#endif
ld hl,txtGame
CURtxtGame =$-2
cal _puts
ld a,13
ld (_curCol),a
ld a,(hl) ;worm+died
- cal showA
+ cal showA0
pop hl
psh hl
- ld a,10
- ld (_curCol),a
ld a,(Gametype)
cp gamedeathm
jr nz,nodmwinner ;deathmatch?
ld a,0 ;winner's deaths
dmwinner =$-1
cp (hl) ;equals this worm?
- jr nz,notwinner
- jr iswinner
+ scf ;jr nz,notwinner
+ cal z,iswinner
nodmwinner:
jr c,notwinner ;no singleplayer winners
inc hl ;worm+score
ld de,0
winnerscore =$-2
cal _cphlde ;==highest score..
- jr nz,notwinner
-iswinner:
- ld a,'*'
- cal _putc ;..then put *
+ cal z,iswinner
notwinner:
ld a,16
ld (_curCol),a
jr z,hiscorecheckdone ;no SP
checkhiscore:
cal loadhiscoreposinahl
- cal _Get_Word_ahl ;de=old_hi
- psh de
- cal _RAM_PAGE_1 ;&&
- pop de
- ld hl,(worm1+score)
-
- ld a,h ;New
- cp d ;Old
- jr c,NotNewHigh ;New<Old
- jr nz,newhigh ;New>Old
-
- ld a,e ;old
- cp l ;new
- jr nc,NotNewHigh ;new<old
+ cal _SET_ABS_SRC_ADDR ;from ahl (lvlfile)
+ xor a
+ ld hl,highsave
+ cal _SET_ABS_DEST_ADDR ;to local
+ ld hl,5 ;5 bytes
+ cal _MM_LDIR_SET_SIZE ;get old score+name
+ cal _RAM_PAGE_1
-newhigh: ;New>=Old
- ex de,hl
+ ld de,(highsave) ;de=prev. hiscore
+ ld hl,(worm1+score) ;hl=worm1's score
+ cal _cphlde ;sub hl,de
+ jr c,NotNewHigh ;new<old
+ jr z,NotNewHigh ;new<=old
+newhigh: ;New>Old
+ ld (highsave),hl ;store new hiscore
+ ld de,highsave+2 ;to
+ ld hl,worm1+name ;from
+ ld bc,3 ;3 chars
+ ldir ;store new hiname
cal loadhiscoreposinahl
- cal _Set_Word_ahl ;de->(ahl)
- cal _RAM_PAGE_1
+ cal _SET_ABS_DEST_ADDR ;to ahl
+ xor a
+ ld hl,highsave
+ cal _SET_ABS_SRC_ADDR ;from local
+ ld hl,5
+ cal _MM_LDIR_SET_SIZE ;save new
+ cal _RAM_PAGE_1
+ ld hl,_curRow
+ dec (hl)
+ cal iswinner
-NotNewHigh: ;de=current hiscore
- ld hl,$0807
- ld (_curRow),hl
+NotNewHigh:
+ ld hl,$3149
+ ld (_penCol),hl
ld hl,txthiscore
- cal _puts
- ex de,hl ;pop
+ cal _vputs
+ ld hl,$0C07
+ ld (_curRow),hl
+ ld hl,highsave+2
+ cal _puts
+ ld hl,(highsave)
cal showHL
hiscorecheckdone:
waitkey:
- halt
- halt
- cal GET_KEY
+ cal ubergetkey
cp K_ENTER
jp z,DisplayMenu
cp K_SECOND
ld hl,savestart
cal _SET_ABS_SRC_ADDR
ld hl,saveend-savestart
- cal _SET_MM_NUM_BYTES
- cal _mm_ldir
+ cal _MM_LDIR_SET_SIZE
cal releasekeys
res 4,(iy+9)
jp _clrWindow
loadhiscoreposinahl:
- ld h,0
+ ld hl,0 ;for peaworm and singleplayer
ld a,(Gametype)
- cp 2
- ld l,h ;hl=0 for peaworm and singleplayer
- jr nz,hi_
- ld a,(nrlevels+1)
- ld l,a ;skip peaworm slots for tron mode
-hi_:
or a ;Singleplayer?
- ld b,0 ;offset 0 for SP
jr z,hi__
- ld a,(Level)
+ dec a ;peaworm?
+ jr z,hi_
+ ld a,(nrlevels+1) ;skip peaworm slots if tron mode
+hi_:
+ ld bc,(Level)
+ add a,c
ld b,a ;levels to skip (including 1 for singleplayer)
+ ld de,5 ;to add per level
addlevelposition:
- inc hl ;add one word per level
+ add hl,de ;one word+3 bytes for name
dnz addlevelposition
hi__:
- add hl,hl ;one WORD per hiscore
xor a ;ahl=0(+hl)
ld bc,defhiscrpos
hiscrposhl =$-2
hiscrposa =$+1
adc a,0 ;ahl=saveloc
ret
+highsave:
+ .db 0,0,"WOR ",0
+
+iswinner:
+ ld a,10
+ ld (_curCol),a
+ ld a,'*'
+ jp _putc ;..then put *
;-----------------------------
;----------- worm ------------
ld a,(gameCar)
and _datatime
jr z,notimescore
- ld de,1
+ ld e,1
cal IncScore
notimescore:
Hitworm:
ld a,(gameCar)
ld h,a
+#ifdef optdie
and _datadie
cal z,checkhitotherworm
ld a,h
+#endif
and _datamultpeas ;&&bit
- jr nz,multiple_peas
+ jr nz,chkctfpeas
ld a,h
and _datafood
jp z,WormDead ;no food
ld hl,Left
dec (hl)
psh af
- ld de,10
+ ld e,10
cal IncScore
pop af
jp nz,Drawworm ;continue
add hl,hl
cal _HLTIMES10
ex de,hl
- cal IncScore ;score+(40*level)
+ cal _IncScore ;score+(40*level)
cal removeworm
pop hl ; << call
pop hl ; << call
- pop hl ; << levelp new
ld (ix+delay),2
jp StartLevel
-chkpeahit: ;hl=peapos
+chkpeahit: ;bc=ownpos;hl=peapos (destr:ad)
ld a,(sprsize)
inc a
ld d,a
cp d
ret ;c=pea
-flagcaptured:
- psh hl
- ld de,30
- cal IncScore
- pop hl
-sillylabel:
- cal WormDead
-DrawAllPeas:
- ld hl,(peaspos)
- cal DrawPea
- ld hl,(peaspos+2)
- jp DrawPea
-
-multiple_peas:
+chkctfpeas:
ld hl,(peaspos) ;1st pea
- psh hl
ld a,(ix+reserv)
ld e,a ;push a
- and %01
- jr nz,sel_ownpea
- ld hl,(peaspos+2) ;2nd pea
-sel_ownpea:
- cal chkpeahit
- pop hl ;(peapos) 1st pea
- jp c,WormDead ;stopworm ;own pea hit
-
- ld a,e ;peek a (that's x86 asm for pop\push ;)
- and %01
+ and %01 ;ourpea (0|1)
jr z,sel_otherpea
- ld hl,(peaspos+2) ;2nd pea
+ ld hl,(peaspos+2) ;2nd pea ;&&&ex de,hl?
sel_otherpea:
cal chkpeahit
- jp c,hitflag
-
-;no peas hit
- ld a,e
- cal flagtoken
- jp z,WormDead
- ld b,a ;%10
- srl b ;%01
- add a,b ;%11
+ 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
- cal DrawPea ;restore own flag
- jr sillylabel ;inv both\die
+ psh af
+ cal WormDead
+ pop af ;which flag? (=and %1)
+ ld hl,drawctfpea1 ;restore #1
+ jr z,nottheotherflag
+ ld hl,drawctfpea2 ;restore #2
+nottheotherflag:
+ ld (hl),3 ;draw delay 3 turns
+ ret
+
+drawctfpea1: .db 0
+drawctfpea2: .db 0
hitflag: ;correct pea hit
ld a,e ;pop a
- xor %01 ;0=1;1=0
+ xor %11 ;invert flag taken + ownflag
ld (ix+reserv),a
- cal flagtoken
+ and %10 ;just returned?
psh af ;safe z-flag
cal DrawPea ;remove
pop af
- jr z,flagcaptured
- jr stopworm
-
-flagtoken:
- and %01 ;current
- add a,a ;<< for cp
- ld b,a ;in b
- ld a,e
- and %10 ;own
- cp b ;same?
- ret ;Z=yes: no flag taken
+ 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
;-----------------------------
ret ;z
checkhitlapline:
- ld a,63
- sub b
+ ld a,(peaspos) ;63
+ sub b ;x==63
jr z,nextlaphalf
inc a
ret nz
nextlaphalf:
- ld a,c
- and 32 ;y>=32?
- jr nz,nolap
+ 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)
- jr z,nolap
+ 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 de,20
- cal IncScore
+ ld e,20
+ cal IncScore ;lap!
pop bc
- xor a
-nolap:
- ld (ix+reserv),a
ret
+#ifdef optdie
checkhitotherworm:
.db $dd,$7d ;ld a,lx
cp worm2&255
pop ix
ret z ;not hit
pop bc ;call
+#endif
stopworm:
ld bc,0
previouspos =$-2
add a,2
ret
-NewPea:
- ld a,(FieldWidth)
- add a,127-4
- cal randompos
- ld h,a
- ld a,(FieldHeight)
- add a,56-4
- cal randompos
- ld l,a
- ld (PeaY),hl
-
-CheckPea:
+CheckPea: ;@hl; destr:abcde
ld c,l
ld a,(sprsize)
ld e,a
cal FindPixel
and (hl)
pop hl
- jr nz,NewPea ;pixel found
+ ret nz ;nz=pixel found
inc b
dec d
jr nz,chkloopx
inc c
dec e
jr nz,chkloopy
-;all ok; empty space
+ ret ;z=empty space
+tryDrawPea: ;hl=peapos;bc=dopea
+ ld a,(de)
+ or a ;0=drawn
+ ret z
+ psh de
+ cal CheckPea
+ pop de
+ ret nz ;unsuccesful
+ ex de,hl
+ dec (hl) ;hl=appeartime
+ ex de,hl ;hl=peaspos
+ jr z,DrawPea
+ ret
+
+NewPea:
+ ld a,(FieldWidth)
+ add a,127-4
+ cal randompos
+ ld h,a
+ ld a,(FieldHeight)
+ add a,56-4
+ cal randompos
+ ld l,a
+ ld (PeaY),hl
+ cal CheckPea
+ jr nz,NewPea
DrawPea: ;hl=(PeaY)
ld b,h
ld c,l
ld de,0
spritepos =$-2
- jp PutSprite ;||-ed
+; jp PutSprite
+
+PutSprite: ;||@(b,c)
+ ;by SHIAR only ix saved
+ cal FindPixel
+ ld (beginbit),a
+ ld a,0
+sprsize =$-1
+ ld b,a ;rows
+sprloopy:
+ psh bc ;rows
+ psh hl
+ ld a,(de)
+ ld c,a
+ inc de
+ ld a,(sprsize)
+ ld b,a ;width
+beginbit =$+1
+ ld a,1
+sprloopx:
+ sla c ;draw?
+ jr nc,sprnodraw
+ psh af
+ xor (hl)
+ ld (hl),a
+ pop af
+sprnodraw:
+ rrca ;next bit
+ jp nc,nextbitok
+ inc hl ;next byte
+nextbitok:
+ dnz sprloopx
+
+ pop hl
+ ld bc,32 ;next line
+ add hl,bc
+ pop bc
+ dnz sprloopy
+ ret
;----------- score -----------
+timematchscore: ;piece of crap checking whether you've already won in timematch
+ ld a,(nrworms)
+ ld b,a ;# of worms
+ ld hl,worm1+lives
+ ld de,worm2-worm1
+ ld a,(handledworm)
+ ld c,a ;wormcounter
+chktimematchover:
+ xor a
+ cp c
+ jr z,nneexxtt ;yourself
+ cp (hl)
+ ret nz ;someone else still alive
+ dec hl ;+delay
+ dec hl ;+score+1
+ ld a,(hl)
+ cp (ix+score+1)
+ jr c,nneexxtt_ ;you>him
+ ret nz ;not highest
+ dec hl ;+score
+ ld a,(hl)
+ cp (ix+score)
+ ret nc ;you<=him
+ inc hl
+nneexxtt_:
+ inc hl
+ inc hl
+nneexxtt:
+ dec c
+ add hl,de
+ dnz chktimematchover
+ jp anyworm ;g/o
+
_divHLby1000:
psh hl
ld b,3
pop hl
ret
-IncScore:
- ld h,(ix+score+1)
- ld l,(ix+score)
+extralives:
cal _divHLby1000
ld c,a
- add hl,de
+ add hl,de ;increase score
cal _divHLby1000
cp c
jr z,scorecommon ;hl/1000 not increased
inc (ix+lives)
jr scorecommon
+
DecScore: ;&&&
ld h,(ix+score+1)
ld l,(ix+score)
or a
sbc hl,de
jr c,showstats ;<0=0
+ jr scorecommon
+
+IncScore: ;inc score by e
+ ld d,0
+_IncScore ; inc by de
+ ld h,(ix+score+1)
+ ld l,(ix+score)
+ ld a,(Gametype)
+ or a ;if singleplayer...
+ jr z,extralives
+ add hl,de ;score+=de
scorecommon:
ld (ix+score+1),h
- ld (ix+score),l
+ ld (ix+score),l ;save
ld de,0
scorelimit =$-2
ld a,d
showstats:
ld a,(gameCar)
and _datatime
- ret nz ;no disp for timematches
+ jr nz,timematchscore ;no disp for timematches
+ ld hl,$FC00 ;&&&only necessary in deathmatch
+ ld b,6*16-1
+clearstats:
+ ld (hl),a ;=0
+ inc hl
+ dnz clearstats
forceshowstats:
psh ix
ld h,0
jr __vputs
showlives:
ld a,(ix+lives)
+showA: ;small w/o leading 0 (&&&combine w/ cshowA0??)
+ cp 10
+ jr c,showleastsign
+ ld l,a
+ ld h,0
+ cal _divHLby10
+ psh af
+ ld a,l
+ add a,'0'
+ cal __vputmap
+ pop af
+showleastsign:
add a,'0'
__vputmap:
psh ix
cal __vputs
ld a,0
Level =$-1
- cp 10
- jr c,tilllevel9
- ld l,a
- ld h,0
- cal _divHLby10
- psh af
- ld a,l
- add a,'0'
- cal __vputmap
- pop af
-tilllevel9:
- add a,'0'
- cal __vputmap
+ cal showA
ld a,98
ld (_penCol),a
ld (_penCol),a
ld a,0
Left =$-1
- cal cshowA
+ cal cshowA0
ld hl,txtLeft
__vputs:
ld hl,txtLevel
cal _puts
ld a,(Level)
-showA:
+showA0: ;big w/ leading 0
ld l,a
ld h,0
cal _divHLby10
add a,'0'
jp _putc
-cshowA:
+cshowA0: ;small w/ leading 0
or a
jr nz,cshowavalue
ld hl,txtNone
pop de
ret
-;--- sprite ---
-
-PutSprite: ;||@(b,c)
- ;by SHIAR only ix saved
- cal FindPixel
-putspr:
- ld (beginbit),a
- ld a,0
-sprsize =$-1
- ld b,a ;rows
-sprloopy:
- psh bc ;rows
- psh hl
- ld a,(de)
- ld c,a
- inc de
- ld a,(sprsize)
- ld b,a ;width
-beginbit =$+1
- ld a,1
-sprloopx:
- sla c ;draw?
- jr nc,sprnodraw
- psh af
- xor (hl)
- ld (hl),a
- pop af
-sprnodraw:
- rrca ;next bit
- jp nc,nextbitok
- inc hl ;next byte
-nextbitok:
- dnz sprloopx
-
- pop hl
- ld bc,32 ;next line
- add hl,bc
- pop bc
- dnz sprloopy
- ret
-
;--- objects ---
drawstuff:
psh hl
ld l,(hl)
ld h,b
+ cal drawsmtn
+ pop hl
+ inc hl
+ jr drawstuff
+drawsmtn:
dec a ;1 = line
- cal z,drawline
+ jr z,drawline
dec a ;2 = fatline
- cal z,drawfatline
+ jr z,drawfatline
dec a ;3 = box
- cal z,drawbox
- dec a ;4 = circle
- cal z,drawcircle
- dec a ;5 = hline
-#ifdef hlines
- cal z,drawhline
-#else
- cal z,drawline
-#endif
+ jr z,drawbox
+; dec a ;4 = circle
+; jp z,drawcircle
- pop hl
- inc hl
- jr drawstuff
+drawcircle: ;(d,e),h ;de=x,y; h=z
+ ld c,h ;c=yy=z
+ ld a,h
+ neg
+ ld l,a ;l=-z
+ xor a
+ ld b,a ;b=xx=0
+ dec a ;-$00**
+ ld h,a ;hl=zz=-z
+circloop:
+ psh de ;x,y
+ ex (sp),hl ;push zz \ pop x,y
+ cal circledraw ;(x-xx,y+yy)-(x+xx,y+yy)
+ ;(x-xx,y-yy)-(x+xx,y-yy)
+ cal circledraw ;(x-yy,y+xx)-(x+yy,y+xx)
+ ;(x-yy,y-xx)-(x+yy,y-xx)
-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
+ ex (sp),hl ;push x,y \ pop zz
+ xor a
+ ld d,a ;d=0
+ dec a ;-256<h<0 = $FF**
+ cp h ;h<0?
+ jr z,circlenext ;jump if zz<0
+
+ ld a,c ;yy
+ dec a ;89<a<128
+ add a,a ;a=2yy-2 ;nc
+ ld e,a ;de=a
+ sbc hl,de ;zz=zz-2yy+2
+ dec c ;yy--
+circlenext:
+ ld a,b ;xx
+ inc a ;0<a<92
+ add a,a ;2xx+2
+ inc a
+ ld e,a ;de=a
+ add hl,de ;zz=zz+2xx+3
+
+ pop de ;x,y
+ ld a,b
+ cp c
+ ret nc ;xx>=yy
+ inc b ;xx++
+ jr circloop
+
+circledraw: ;destr:de
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
+ ld a,h ;hl=x,y
+ sub b ;bc=xx,yy
+ ld d,a ;d=x-xx
+ add hl,bc ;h=x+xx; l=y+yy
+ ld e,l ;e=y+yy
+ cal drawline ;(h-b,l+c)-(h+b,l+c)
+ ld a,l
+ sub c ;a=y again
+ sub c
+ ld l,a ;l=y-yy
+ ld e,l ;e=l=y-yy
+ cal drawline ;(h-b,l-c)-(h+b,l-c)
+ ld a,b ;swap xx and yy
+ ld b,c
+ ld c,a ;ex b,c
pop hl
- pop bc
ret
-#else
+
+drawbox: ;(d,e)-(h,l)
+ ld b,l ;Delta-y
ld l,e
boxloop:
cal drawline
inc e
dnz boxloop
ret
-#endif
drawfatline:
cal drawline
cal drawline
dec d
dec h
- jp drawline
+; jp drawline
;LINE (d,e)-(h,l)
;destroyes a
dnz LineLoopSteep
jr DoneLine
-drawcircle: ;(d,e),h ;de=x,y; h=z
- ld c,h ;c=yy=z
- ld a,h
- neg
- ld l,a ;l=-z
- xor a
- ld b,a ;b=xx=0
- dec a ;-$00**
- ld h,a ;hl=zz=-z
-circloop:
- psh de ;x,y
- ex (sp),hl ;push zz \ pop x,y
- cal circledraw ;(x-xx,y+yy)-(x+xx,y+yy)
- ;(x-xx,y-yy)-(x+xx,y-yy)
- cal circledraw ;(x-yy,y+xx)-(x+yy,y+xx)
- ;(x-yy,y-xx)-(x+yy,y-xx)
-
- ex (sp),hl ;push x,y \ pop zz
- xor a
- ld d,a ;d=0
- dec a ;-256<h<0 = $FF**
- cp h ;h<0?
- jr z,circlenext ;jump if zz<0
-
- ld a,c ;yy
- dec a ;89<a<128
- add a,a ;a=2yy-2 ;nc
- ld e,a ;de=a
- sbc hl,de ;zz=zz-2yy+2
- dec c ;yy--
-circlenext:
- ld a,b ;xx
- inc a ;0<a<92
- add a,a ;2xx+2
- inc a
- ld e,a ;de=a
- add hl,de ;zz=zz+2xx+3
-
- pop de ;x,y
- ld a,b
- cp c
- ret nc ;xx>=yy
- inc b ;xx++
- jr circloop
-
-circledraw: ;destr:de
- psh hl
- ld a,h ;hl=x,y
- sub b ;bc=xx,yy
- ld d,a ;d=x-xx
- add hl,bc ;h=x+xx; l=y+yy
- ld e,l ;e=y+yy
- cal drawline ;(h-b,l+c)-(h+b,l+c)
- ld a,l
- sub c ;a=y again
- sub c
- ld l,a ;l=y-yy
- ld e,l ;e=l=y-yy
- cal drawline ;(h-b,l-c)-(h+b,l-c)
- ld a,b ;swap xx and yy
- ld b,c
- ld c,a ;ex b,c
- pop hl
- ret
-
-
-
-
-
-
-
-
;-----------------------------
;----------- link ------------
;-----------------------------
and %11
ret
-;--------------
;---- SEND ----
-;--------------
Csend:
ld b,32
ld (linklosses),a ;reset number of losses
ret ;=ok
-;--------------
;---- RECV ----
-;--------------
Crecv: ;--- receive 8 bits into A/C --- destr:abcdehl ---
cal Qrecv
.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 255 ;last level
+ ret ;ending code
LevelDefM:
+ .db "Empty Arena",0
.db 8,4,15,15,0,0
.db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
.db 128,57
.db 0
+ .db "Fast Fun :))",0
.db 8,0,18,12,5
.db %1110000,%10001000,%10001000,%10001000,%1110000,0
.db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
.db 128,57
.db 0
+ .db "Two Circles",0
.db 8,5,18,12,0,0
.db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
.db 128,57
- .db 4,40,26,20,0
- .db 4,90,40,11,0,0
+ .db 4,40,26,20,0
+ .db 4,90,40,11,0,0
LevelDefT: ;tron=no delay
+ .db "Empty Tron Level",0
.db 8,4,18,12,5
.db %1110000,%10001000,%10001000,%10001000,%1110000,0
.db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
.db 128,57
.db 0
+LevelDefR: ;race
+ .db "Round and Round",0
+ .db 8,4,18,12,5
+ .db %1110000,%10001000,%10001000,%10001000,%1110000,0
+ .db $40,23,2,$C0,23,125, $40,35,2,$C0,35,125
+ .db 128,57
+ .db 63,27
+ .db 4,63,27,10,0,0
+
LevelDefC: ;ctf
+ .db "Default CTF",0
.db 8,4,18,12,5
.db %1110000,%10001000,%10001000,%10001000,%1110000,0
- .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
+ .db $40,23,2,$C0,23,125, $40,35,2,$C0,35,125
.db 128,57
- .db 10,10,50,50
+ .db 27,8,27,116
.db 0
;-----------------------------
;---------- data -------------
;-----------------------------
-wdPicture = 16
wtPicture:
-.db %00000000,%00000000,%00000111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01110000,%00000000,%00000000,%00000000,%00000000,%00000000
-.db %00000000,%00000000,%00001111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01111000,%00000000,%00000000,%00000110,%01111011,%00100000
-.db %00000000,%00000000,%00011100,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00011100,%00001110,%00000000,%00001001,%00010011,%01000000
-.db %00000000,%00000000,%00011000,%00011111,%00000000,%01111111,%11000000,%00111100,%00011110,%01111000,%00001100,%00011111,%00000000,%10100111,%00110000,%10000000
-.db %00000000,%00000000,%00111000,%00111111,%10000000,%11111111,%11100000,%11111110,%00111111,%11111100,%00001100,%00111011,%00000000,%10100001,%00001001,%01100000
-.db %00000000,%00000000,%00110000,%01110001,%11000001,%11000000,%01110001,%11100110,%01110011,%11001110,%00001100,%00110001,%10000000,%01001110,%01110010,%01100000
-.db %00000000,%00000000,%00110000,%01100000,%11000001,%10000000,%00111001,%10000000,%01100111,%11100110,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
-.db %00000000,%00000000,%00110000,%01100000,%11000001,%10110000,%00011011,%10000000,%11101110,%01110111,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
-.db %00000000,%00000000,%00110000,%01110001,%11000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000111,%11100001,%10000000,%00000000,%00000000,%00000000
-.db %00000000,%00000000,%00110000,%00110001,%10000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000011,%11000011,%10000000,%00000000,%00000000,%00000000
-.db %00000000,%00000000,%00111000,%00111011,%10000011,%10110000,%00011011,%00000000,%11001110,%01110011,%00000000,%00000011,%00110101,%01001001,%10000000,%00000000
-.db %00000000,%00000000,%00011000,%00011111,%00000011,%00110000,%00011011,%00000000,%11000111,%11100011,%10000000,%00000011,%01000101,%00010101,%01000011,%01100011
-.db %00000000,%00000000,%00011100,%00001110,%00000111,%00111000,%00111011,%10000000,%11000011,%11000001,%10000000,%00000111,%01100101,%01010101,%01000101,%01010100
-.db %00000000,%00000000,%00001110,%00111111,%10001110,%00011100,%01110001,%10000000,%11100000,%00000001,%11100000,%00001110,%00110111,%01011101,%10010101,%01100101
-.db %00000000,%00000000,%00000111,%11111011,%11111100,%00001111,%11100001,%11000000,%01100000,%00000000,%11111111,%11111100,%00010101,%01010101,%01000101,%01010101
-.db %00000000,%00000000,%00000011,%11100000,%11111000,%00000111,%11000000,%11000000,%01100000,%00000000,%00111111,%11111000,%01100101,%01010101,%01000110,%01010011
+.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 %01110000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01110000,%00111000,%00001100,%00110001,%00110100,%01100011,%01000000,%00010000
+.db %01100000,%01111100,%00000001,%11111111,%00000000,%11110000,%01111001,%11100000,%00110000,%01111100,%00010001,%11001001,%00001000,%00100000,%10000010,%00010000
+.db %11100000,%11111110,%00000011,%11111111,%10000011,%11111000,%11111111,%11110000,%00110000,%11101100,%00010001,%11000100,%10000001,%00000100,%10001110,%00001000
+.db %11000001,%11000111,%00000111,%00000001,%11000111,%10011001,%11001111,%00111000,%00110000,%11000110,%00001100,%00000010,%01100010,%10011100,%00010001,%00001000
+.db %11000001,%10000011,%00000110,%00000000,%11100110,%00000001,%10011111,%10011000,%00111001,%11000110,%00000011,%11000010,%00011100,%01100010,%00100001,%01101000
+.db %11000001,%10000011,%00000110,%11000000,%01101110,%00000011,%10111001,%11011100,%00111001,%11000110,%01111000,%00100001,%00000000,%00000001,%11000001,%01101000
+.db %11000001,%11000111,%00000110,%11000000,%01101100,%00000011,%00110000,%11001100,%00011111,%10000110,%10000101,%11100001,%00000000,%00000000,%00000001,%00010000
+.db %11000000,%11000110,%00000110,%11000000,%01101100,%00000011,%00110000,%11001100,%00001111,%00001110,%10010110,%00010001,%00000000,%00000000,%00000000,%11100000
+.db %11100000,%11101110,%00001110,%11000000,%01101100,%00000011,%00111001,%11001100,%00000000,%00001100,%01100100,%00001001,%00111111,%11111111,%11000000,%00000000
+.db %01100000,%01111100,%00001100,%11000000,%01101100,%00000011,%00011111,%10001110,%00000000,%00001100,%01000000,%10000001,%01000000,%00000000,%00000000,%00000000
+.db %01110000,%00111000,%00011100,%11100000,%11101110,%00000011,%00001111,%00000110,%00000000,%00011100,%01000000,%11000001,%01100101,%01001001,%10000011,%01100011
+.db %00111000,%11111110,%00111000,%01110001,%11000110,%00000011,%10000000,%00000111,%10000000,%00111000,%01000001,%00100001,%00110101,%00010101,%01000101,%01010100
+.db %00011111,%11101111,%11110000,%00111111,%10000111,%00000001,%10000000,%00000011,%11111111,%11110000,%00111110,%00011110,%00010111,%01011101,%10010101,%01100101
+.db %00001111,%10000011,%11100000,%00011111,%00000011,%00000001,%10000000,%00000000,%11111111,%11100000,%00000000,%00000000,%11100101,%01010101,%01000110,%01010011
+
+wtWormy:
+.db %00000110,%00111000,%00000000,%00111100,%00001111,%10001110,%00111100,%01111000,%00001100,%11011000,%11100011,%10000000,%00000000,%11111100,%00111000,%00000000
+.db %00011001,%01000110,%11100000,%11000010,%00011100,%11011111,%01111110,%11111000,%00011110,%11011101,%11110111,%11000000,%00111111,%00000011,%01000110,%11100000
+.db %00100000,%10000011,%00010001,%00110010,%00011000,%00010011,%01101010,%11000000,%00111011,%01001101,%10000110,%01000000,%11000000,%00000000,%10000001,%00010000
+.db %00100000,%00000000,%00001110,%00110010,%00011001,%10011011,%01101010,%11100000,%00110011,%01101101,%11000111,%10000001,%00011100,%00000000,%00000000,%00001100
+.db %01001100,%00011000,%00000000,%00000100,%00011000,%11011111,%01100010,%11001100,%00110011,%01101101,%10000111,%11000001,%00011100,%00111000,%00011000,%10000010
+.db %01010010,%00100100,%01100000,%00011000,%00011111,%11011011,%11101110,%11111100,%00011111,%01111000,%11110110,%11100000,%11000000,%11000110,%00101001,%10000010
+.db %01100001,%11000011,%10011111,%11100000,%00001111,%10001001,%11001100,%01111000,%00001110,%00110000,%01100110,%01100000,%00111111,%00000001,%11000110,%01111100
+
+;.db %00000000,%00000001,%10000000,%00000000,%00001111,%10000000
txtMenu: .db "Mode",0 ;1st menu item
.db "Level",0 ;2nd
txtGame6: .db "Race",0
txtGame7: .db "CTF" ;,0
-posGame: .db 0,txtGame1-txtGame
+posGame: .db 0
+ .db txtGame1-txtGame
.db txtGame2-txtGame
.db txtGame3-txtGame
.db txtGame4-txtGame
txtNo: .db "No",0
txtKeyleft: .db ":left",0
txtKeyright:.db "/right",0
-txtLevsel: .db $CF," Select levels ",5,0
-txtEName: .db "Enter name player ",0
+posLevsel = $0320
+txtLevsel: .db $CF," SELECT LEVELS ",5,0
txtWaiting: .db "Waiting...",0
txtReceive: .db "Receiving..." ;,0
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
datalevels: .dw LevelDef, LevelDefM
.dw LevelDefT,LevelDefM
.dw LevelDefM,LevelDefM
- .dw LevelDefM,LevelDefC
+ .dw LevelDefR,LevelDefC
nrlevels: .db 1,3,1,3,3,3,3,1 ;=defaults
_datalink = %0000001 ;linkplay
gametron = 2
datatron: .db %1010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
gamedeathm = 3 ;used
-datadeathm: .db %1000001,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
+datadeathm: .db %1000000,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
gamefoodm = 4
datafoodm: .db %1100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
gametimem = 5
gamerace = 6 ;used
datarace: .db %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision)
gamectf = 7 ;used
-datactf: .db %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score)
-_datasingle = %1100110 ;(datasingle) usable like gamesingle
+datactf: .db %1001000,0,4,1,-1,-1, 8,10 ;CTF (100 score)
worm1set: .dw worm1p,worm1p
- .db %11110111,%00,-01,K_RIGHT,K_LEFT
-worm1name: .db "Wormy ",0
+ .db %11110111,1,-01,K_RIGHT,K_LEFT
+worm1name: .db "WORMY ",0
worm2set: .dw worm2p,worm2p
- .db %11111011,%11,-01,K_F2,K_F1
-worm2name: .db "Viper ",0
+ .db %11111011,0,-01,K_F2,K_F1
+worm2name: .db "VIPER ",0
worm3set: .dw worm3p,worm3p
- .db %11111011,%00,-01,K_COMMA,K_STO
-worm3name: .db "Nibbler ",0
+ .db %11111011,1,-01,K_COMMA,K_STO
+worm3name: .db "NIBBLER ",0
worm4set: .dw worm4p,worm4p
- .db %11111011,%00,-01,K_PLUS,K_ENTER
-worm4name: .db "Jim ",0
+ .db %11111011,0,-01,K_PLUS,K_ENTER
+worm4name: .db "JIM ",0
defhiscrpos:
- .dw 0,0,0,0,0,0
+ .db 0,0,"SHI"
+ .db 0,0,"SHI"
+ .db 0,0,"SHI"
+ .db 0,0,"SHI"
+ .db 0,0,"SHI"
+
+Gametype: .db 0 ;last gamemode
saveend:
.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
-.db " shiar0@hotmail.com",0
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
+.db " wormy@shiar.org",0
defspritesz = 4
defspriteimg: .db %01100000