; Title : Worm
-; Version : 0.92
-; Release Date : soon (I hope)
-; Filename : worm.86p (3404)
+; Version : 0.986
+; Release Date : april 2000???
+; Filename : worm.86p (4kb)
; Author(s) : Shiar
; Email Address : shiar@mailroom.com
; ICQ UIN : #43840958
;----------- TO-DO -----------
;-----------------------------
-; Shiar 3.III.00
+; 86% = DONE
-;Feel like doing something? (name indicates who's working on it)
-; * linkplay
-; * singleplay ending
-; * titlescreen
-; * make linkplay available for all gametypes (not just deathmatch)
-; * two worms collide with heads -> both should die
-; * game types:
-;1) * ctf: take enemy flag (right-bottom) and return to your flag (left-top)
-;1) * domination?: take control points by running over them and hold them
-;1)* sprites for picks instead of blocks
+; 1% * levelfile select
+; 3% * linkplay
+; 1% * titlescreen
+; 2% * make linkplay available for all gametypes (not just deathmatch)
+; 1% * two worms collide with heads -> both should die
+; * game types:
+; 1% * ctf: take enemy flag (right-bottom) and return to your flag (left-top)
+; 1% * domination?: take control points by running over them and hold them
+; 1% * name change + other options
+; * complete readme (+custom level info)
+; 2% * ... (pollish, &&&)
-;1) Working on a new pickup-system allowing more than one "food" and different pickup-handling
+; 99% = beta release
+
+;100% = bugs fixed + levels done
+
+;-----------------------------
+;-----------------------------
+;--------- W O R M ---------
+;-----------------------------
+;-----------------------------
+
+#define cal call
+#define psh push
+#define dnz djnz
#include "asm86.h"
#include "ti86asm.inc"
-#include "ti86abs.inc"
-
-_SHRACC = $4383
-_SHLACC = $438B
-_divHLby10 = $4044
-_divAby10 = $4DAF
-_cphlde = $403C
-_clrWindow = $4A86
-_asapvar = $D6FC
-_MOV4B = $429B ;4x ld (de),(hl)
-_MOV5B = $4297 ;5x ld (de),(hl)
-_mov9b = $4283 ;9x ld (de),(hl)
-_ldHLind = $4010 ;ld hl,(hl)
-_swapt_ = $45F3 ;ex_ahl_bde
+
+_SHRACC = $4383
+_SHLACC = $438B
+_divHLby10 = $4044
+_divAby10 = $4DAF
+_cphlde = $403C
+_clrWindow = $4A86 ;clear screen
+_asapvar = $D6FC ;own name (worm)
+_MOV4B = $429B ;4x ld (de),(hl)
+_MOV5B = $4297 ;5x ld (de),(hl)
+_mov9b = $4283 ;9x ld (de),(hl)
+_ldHLind = $4010 ;ld hl,(hl)
+_swapt_ = $45F3 ;ex_ahl_bde
+_Get_Word_ahl = $521D ;ld de,(ahl)
+_Set_Word_ahl = $5221 ;ld (ahl),de
+_AHL_PLUS_2_PG3 = $4C3F ;ahl=ahl+2
+_SET_ABS_SRC_ADDR = $4647 ;set source for mm.ldir =ahl
+_LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source
+_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
+_RAM_PAGE_1 = $47E3 ;set $8000+ to page 1
+
+;-----------------------------
+;------- data storage -------
+;-----------------------------
+
+leveldata = $EA00 ;size< $400
+ScrBuffer = $8100 ;size=$2000 (32x256)
+ ;->mod$800
+DispBuffer = $BC00 ;size= $390 (16x57)
+SinCosTable = $B500 ;size= $100 (4x64)
+
+worm1 = $B400
+worm2 = $B42A
+worm3 = $B454
+worm4 = $B47E ;-B4A8
+
+resbit = 2 ;and%11111011
+worm1p = $B000 ;%10110000 -$B3FF
+worm2p = $B800 ;%10111000 -$BBFF
+worm3p = $F000 ;%11110000 -$F3FF
+worm4p = $A800 ;$E800=%11101000 ;$D748+$1000+
+
+WormVersion = 086
;-----------------------------
;------- program start -------
;-----------------------------
.org _asm_exec_ram
+
start:
nop
jp Start
.dw WormMsg
.dw WormIcon
+WormMsg:
+ .db "WORM by SHIAR -- pre-beta 86%",0
WormIcon:
.db 9,2
- .db %10010111,%01101111
+ .db %10010110,%01101111
.db %10110101,%01001011
- .db %11110111,%01001001
+ .db %01110011,%01001001
.db %00000011,%10000000
.db %00000001,%11100000
.db %00111000,%11111000
.db %11101111,%00001111
.db %11000011,%10000000
+levelfile:
+ .db 7,"wormlvl"
+levelhead = 'T'
+
Start:
ld (SpSave),sp
- call _runindicoff
- call _flushallmenus
- call _clrLCD
- res 2,(iy+13) ;appAutoScroll
+ cal _runindicoff
+ cal _flushallmenus
+ cal _clrLCD
+
+ ld hl,levelfile-1
+ rst 20h ;_ABS_MOV10TOOP1
+ rst 10h ;_FINDSYM
+ ret c ;not found
+ ex de,hl
+ ld a,b ;cal _ex_ahl_bde
+ cal _AHL_PLUS_2_PG3
+
+ cal _Get_Word_ahl
+ ld b,a ;psh af
+ ld a,levelhead
+ cp e ;1st byte = w?
+ ret nz ;not worm level
+ ld a,b ;pop af
+ cal _Get_Word_ahl
+ ld (leveldataSize),de
+
+ ld d,8 ;counter
+ ld bc,datalevels-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:
+ pop af
+ pop de ;counter
+ dec d ;8x
+ jr nz,loadgametype
+
+ cal _SET_ABS_SRC_ADDR
+ xor a
+ ld hl,leveldata
+ cal _SET_ABS_DEST_ADDR
+ xor a
+ ld hl,0
+leveldataSize =$-2
+ cal _SET_MM_NUM_BYTES
+ cal _mm_ldir
+
+ cal _LOAD_ABS_SRC_ADDR ;->ahl
+ ld (hisaveposa),a
+ ld (hisaveposhl),hl
+ cal _RAM_PAGE_1 ;&&&
+ res 2,(iy+13) ;appAutoScroll
ld a,r
ld (Seed),a
ld hl,TrigPrecalc
ld de,SinCosTable
- push de ; >> 1
+ psh de ; >> 1
ld bc,65
ldir
dec hl
ld a,(hl)
ld (de),a
inc de
- djnz MirrorSineWave
+ dnz MirrorSineWave
pop hl ; << 0k
ld b,128+64
NegativeSineWave:
ld (de),a
inc hl
inc de
- djnz NegativeSineWave
+ dnz NegativeSineWave
;-----------------------------
;---------- menu -------------
ld a,2
ld (nrworms),a
gomainMenu:
- call _clrWindow
+ cal _clrWindow
ld hl,txtWelcome
- call _puts
+ cal _puts
ld de,$0205
ld (_curRow),de
- call _puts ;txtOptions
+ cal _puts ;txtOptions
dec e ;$0204
ld (_curRow),de
ld hl,(CURtxtGame)
- call _puts
+ cal _puts
xor a
mainMenu:
- call menucall
+ cal menucall
jr nz,notselect
select:
ld a,b
jr z,Variation
gooptionsMenu:
- call _clrWindow
+ cal _clrWindow
ld hl,txtWelcome
- call _puts
+ cal _puts
ld hl,txtLevel
ld de,$0205
ld (_curRow),de
- call _puts ;txtLevel
+ cal _puts ;txtLevel
dec e ;$0204
ld (_curRow),de
- call _puts ;txtWorms
+ cal _puts ;txtWorms
ld a,(nrworms)
add a,'0'
- call _putc
+ cal _putc
xor a
optionsMenu:
- call menucall
+ cal menucall
jr nz,notopselect
opselect:
ld a,b
jr gooptionsMenu
changelevel:
jr optionsMenu
-
notopselect:
cp K_EXIT
jr z,gomainMenu
ld de,$0204
ld (_curRow),de
ld (CURtxtGame),hl
- call _puts
+ cal _puts
ld (NEXTtxtGame),hl
ld a,b
jp mainMenu
menucall:
- push af
+ psh af
ld hl,$0004
ld (_curRow),hl
ld a,' '
- call _putc
+ cal _putc
ld hl,$0005
ld (_curRow),hl
- call _putc
+ cal _putc
pop af
- push af
+ psh af
ld h,0
add a,4
ld l,a
ld (_curRow),hl
ld a,'*'
- call _putc
- pop af
- ld b,a
+ cal _putc
menukeys:
halt \ halt
- call GET_KEY
+ cal GET_KEY
or a
jr z,menukeys
+ pop bc ;pop a as b
cp K_UP
jr nz,notup
updown:
;-----------------------------
LetsGetThisPartyOn:
- ld hl,Gametype
- ld a,(hl)
- add a,a
- add a,(hl)
+ ld hl,gamesdata
+ ld a,(Gametype)
ld e,a
ld d,0
- ld hl,gamesdata
add hl,de
-
ld a,(hl)
- ld d,a ;push af
+ ld (gameCar),a
+
+ add hl,de
+ ld e,8 ;=de
+ add hl,de
+
+ ld b,a ;psh af
and _datasingl
jr z,notsingle
ld a,1
ld (nrworms),a
- ld a,d
- and _datafoodl
- jr nz,notsingle
- ld a,1
- ld (worm1+lives),a
notsingle:
- ld a,d
- ld (gameCar),a
- push af
-
+ ld a,b ;pop af \push
and _datascore
ld de,$FF64 ;virt.infinate
jr z,setscorelimit
setscorelimit:
ld (scorelimit),de
- inc hl
- call _ldHLind
- pop af
- push hl
+ cal _ldHLind ;ld hl,(hl)
+ psh hl
+ ld a,b ;pop af
and _datalink
jr z,GameOver
linkmatch:
- call _clrWindow
+ cal _clrWindow
ld a,WormVersion
- call send
+ cal send
jr c,client ;2nd
host:
ld hl,txtWaiting
- call _puts
- call receive
+ cal _puts
+ cal receive
cp WormVersion
jp nz,LinkBreak
- call send
+ cal send
ld hl,SwapPos
ld (hl),$f6
client:
ld hl,txtReceive
- call _puts
- call receive
+ cal _puts
+ cal receive
cp WormVersion
jp nz,LinkBreak
multiplayer:
ld a,2
ld (nrworms),a
- ld de,LevelsDM
;-----------------------------
;--------- game over ---------
;-----------------------------
GameOver:
- call _clrLCD
+ cal _clrLCD
ld hl,0
ld (worm1+died),hl
;+died=0 \ +score1=0
ld (Level),a
ld hl,worm1set+4
ld de,worm1+lives
- call _MOV5B ;9xld(de),(hl)
- call _mov9b
+;&&&>*
+ cal _MOV5B ;9xld(de),(hl)
+ cal _mov9b
ld hl,worm2set+4
ld de,worm2+lives
- call _MOV5B
- call _mov9b
+ cal _MOV5B
+ cal _mov9b
ld hl,worm3set+4
ld de,worm3+lives
- call _MOV5B
- call _mov9b
+ cal _MOV5B
+ cal _mov9b
ld hl,worm4set+4
ld de,worm4+lives
- call _MOV5B
- call _mov9b
- pop de
+ cal _MOV5B
+ cal _mov9b
+
+ ld a,(Gametype)
+ cp 1 ;=peaworm
+ jr nz,worminitdone
+ ld (worm1+lives),a ;&&&<*
+worminitdone:
+ pop hl
StartLevel:
- ex de,hl
ld de,Left
+ ld a,(hl)
+ inc a ;=255?
+ jp nz,nextlevel
+
+ psh hl
+ ld b,150
+waitsomemore:
+ halt
+ dnz waitsomemore
+ cal _clrWindow
+ pop hl
+;show end msg or smtn
+ ld bc,Exit
+ psh bc ;where to go afterwards
+ inc hl ;location of ending-code
+ jp (hl) ;go there ("call")
+nextlevel:
ldi
ld de,Speed
ldi
+ ld de,peagrowth
+ ldi
ld a,(hl)
ld (worm1+grow),a
ld (worm2+grow),a
ld (beginsize),a
inc hl
+ ld a,(hl)
+ inc hl
+ or a
+ jr z,defaultsprite
+ ld (sprsize),a
+ ld d,h
+ ld e,l ;ld de,hl
+ ld c,a
+ ld b,0 ;bc=sprite size
+ add hl,bc ;hl=behind sprite
+ jr setsprite
+defaultsprite:
+ ld de,peasprite
+setsprite:
+ ld (spritepos),de
+
ld a,(hl)
inc hl
ld (nrballs),a
ex de,hl
ld (thislevel),de
- push de
+ psh de
ld hl,worm1set
ld de,worm1+head
- call _MOV4B
+ cal _MOV4B
ld hl,worm2set
ld de,worm2+head
- call _MOV4B
+ cal _MOV4B
ld hl,worm3set
ld de,worm3+head
- call _MOV4B
+ cal _MOV4B
ld hl,worm4set
ld de,worm4+head
- call _MOV4B
+ cal _MOV4B
pop de
ld hl,worm1
jr nz,worminit
ld b,4
worminit:
- push bc ; >> 1
+ psh bc ; >> 1
ex de,hl
ldi ;d
ld a,SinCosTable/256
ld bc,(worm2-worm1)-5
add hl,bc
pop bc ; << 0k
- djnz worminit
+ dnz worminit
;-------- draw level ---------
sub 57
ld (FieldHeight),a
add a,57-5
- push de ; >> levelp
+ psh de ; >> levelp
ld l,a
ld h,0
add hl,hl
ex de,hl
ld hl,ScrBuffer
- push hl ; >> 1
- push de ; >> 2
+ psh hl ; >> 1
+ psh de ; >> 2
ld de,ScrBuffer+1
ld bc,63
ld (hl),%11111111
ClearLine:
ld (hl),c
inc hl
- djnz ClearLine
- push hl ; >> 3
+ dnz ClearLine
+ psh hl ; >> 3
ld a,(FieldWidth)
add a,126
- push af ; >> 4
+ psh af ; >> 4
and %11111000
rra
rra
VertShift:
rra
rr c
- djnz VertShift
+ dnz VertShift
NoVertShift:
ld (hl),a
inc hl
or a
jr z,NoLines
DrawLines:
- push af ; >> 1
- call loaddrawdata
- push hl ; >> 2
+ psh af ; >> 1
+ cal loaddrawdata
+ psh hl ; >> 2
ld l,(hl)
ld h,a
- call Line
+ cal Line
inc d
inc h
- call Line
+ cal Line
inc e
inc l
- call Line
+ cal Line
dec d
dec h
- call Line
+ cal Line
pop hl ; << 1
inc hl
pop af ; << 0k
or a
jr z,noboxes
drawboxes:
- push af
- call loaddrawdata
- push hl
+ psh af
+ cal loaddrawdata
+ psh hl
ld l,(hl)
ld h,a
- call drawbox
+ cal drawbox
pop hl
inc hl
pop af
;-----------------------------
- push hl ; >> levelp new
- call showstats
+ psh hl ; >> levelp new
+ cal showstats
ld a,(gameCar)
and _datafood
jr z,nofood
- call NewPea
- call DrawPea
+ cal NewPea
nofood:
ld bc,(worm1+pos)
- call DisplayField
+ cal DisplayField
ld hl,$FDE0
ld de,$FDE1
ld (hl),%11111111
ld (_curRow),hl
set 3,(iy+5)
ld hl,txtReady
- call _puts
+ cal _puts
res 3,(iy+5)
ld a,0
ld b,0
ReadyDelay:
halt
- djnz ReadyDelay
+ dnz ReadyDelay
;-----------------------------
;----------- LOOP ------------
GameLoop:
ld bc,(worm1+pos)
- call DisplayField
+ cal DisplayField
ld a,1
flashtime =$-1
jr nz,Delay
NoDelay:
- call handlethatneatlittleball
+ cal handlethatneatlittleball
ld ix,worm1
ld a,(nrworms)
ld b,a
handleworms:
- push bc
- call HandleWorm
+ psh bc
+ cal HandleWorm
ld bc,worm2-worm1
add ix,bc
pop bc
- djnz handleworms
+ dnz handleworms
;-----------------------------
;---------- keys -------------
ld a,%10111111
out (1),a
in a,(1)
- rla
+ rla ;[MORE]?
jr c,NotPaused
ld bc,$0103
out (c),b
- halt
+ halt ;pause/off
ld b,11
out (c),b
NotPaused:
- rla
+ rla ;[EXIT]?
jp c,GameLoop
- jr Exit ;&&
+ jr Exit
WormDead:
ld a,2
ld b,(hl)
inc hl
res resbit,h
- push hl
- call res4pixels
+ psh hl
+ cal res4pixels
pop hl
inc (ix+grow)
DoesWormTailEqualsWormHead:
- call _cphlde
+ cal _cphlde
jr nz,removewormloop
ld a,(gameCar)
inc (ix+died)
dec (ix+lives)
- push af
+ psh af
ld de,10
- call DecScore
+ cal DecScore
pop af
ret nz ;HandleWorm done
ld a,(gameCar)
Exit:
ld sp,0 ;pop all
SpSave = $-2
- call _clrWindow
+ cal _clrWindow
ld hl,txtGO
- call _puts
+ cal _puts
ld hl,txtGame
CURtxtGame =$-2
- call _puts
+ cal _puts
ld de,0002
ld (_curRow),de
- call showLevel
+ cal showLevel
ld de,$0B03
ld (_curRow),de
ld hl,txtDied
- call _puts
- call _puts ;txtScore
+ cal _puts
+ cal _puts ;txtScore
xor a
ld (_curCol),a
nrworms =$-1
ld hl,worm1+died
displayWormStats:
- push bc
- push hl
+ psh bc
+ psh hl
ld bc,input-died
add hl,bc ;+input
ld a,8
ld (_curCol),a
ld a,b
- call _putc
+ cal _putc
xor a
ld (_curCol),a
dec hl
inc hl
inc hl
inc hl ;+name
- call _puts
+ cal _puts
pop hl
- push hl
+ psh hl
ld a,13
ld (_curCol),a
ld a,(hl) ;worm+died
- push hl
- call showA
+ psh hl
+ cal showA
pop hl
ld a,16
ld (_curCol),a
inc hl ;worm+score
- call _ldHLind ;ld hl,(hl)
- call showHL ;worm+score
+ cal _ldHLind ;ld hl,(hl)
+ cal showHL ;worm+score
pop hl
ld bc,worm2-worm1
add hl,bc
pop bc
- djnz displayWormStats
+ dnz displayWormStats
ld a,(gameCar)
and _datasingl
jr z,hiscorecheckdone
checkhiscore:
- ld de,(worm1+score)
-HiScore =$+1
- ld hl,0
- ld a,d
- cp h
- jr c,NotNewHigh
- ld a,e
- cp l
- jr c,NotNewHigh
- ld (HiScore),de
- ex de,hl ;disp.new hiscore
-NotNewHigh:
- ex de,hl ;push
+ 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
+
+newhigh: ;New>=Old
+ ex de,hl
+ cal loadhiscoreposinahl
+ cal _Set_Word_ahl ;de->(ahl)
+ cal _RAM_PAGE_1
+
+NotNewHigh: ;de=current hiscore
ld hl,$0807
ld (_curRow),hl
ld hl,txthiscore
- call _puts
+ cal _puts
ex de,hl ;pop
- call showHL
+ cal showHL
hiscorecheckdone:
waitkey:
halt
halt
- call GET_KEY
+ cal GET_KEY
cp K_ENTER
jp z,DisplayMenu
; cp K_EXIT
ld hl,_asapvar
rst 20h ;_ABS_MOV10TOOP1
rst 10h ;_FINDSYM
- call _swapt_ ;_ex_ahl_bde
- ld de,4
+ ld hl,4
+ xor a
add hl,de
- adc a,0
- call _SET_ABS_DEST_ADDR
+ adc a,b ;ahl=bde+4
+ cal _SET_ABS_DEST_ADDR
xor a
- ld hl,start
- call _SET_ABS_SRC_ADDR
- ld hl,end-start
- call _SET_MM_NUM_BYTES
- call _mm_ldir
-
-; xor a
-; ld (_asapvar+1),a
+ ld hl,_asm_exec_ram
+ cal _SET_ABS_SRC_ADDR
+ ld hl,end-_asm_exec_ram
+ cal _SET_MM_NUM_BYTES
+ cal _mm_ldir
+
res 4,(iy+9)
set 2,(iy+13)
jp _clrWindow
+loadhiscoreposinahl:
+ ld a,(Gametype)
+ dec a
+ jr nz,externalhiscoresavepos
+ ld a,0
+ ld hl,hipeaworm
+ ret
+externalhiscoresavepos:
+ ld a,0
+hisaveposa =$-1
+ ld hl,0
+hisaveposhl =$-2
+ ret
+
;-----------------------------
;----------- worm ------------
;-----------------------------
ld b,(ix+left)
dec b
jr z,receivefirst
- call send
- call receive
+ cal send
+ cal receive
ld l,a
ret
receivefirst:
- push af
- call receive
+ psh af
+ cal receive
ld l,a
pop af
- push hl
- call send
+ psh hl
+ cal send
pop hl
ret
inkeys: ;use jp not call!
- out (1),a
+ out (1),a ;nop\nop
in a,(1)
ld b,a
and (ix+right)
notright:
ld a,b
and (ix+left)
- jr z,donediddelydone
+ ret z
ld a,l
sub 8
ld l,a
- jr donediddelydone
+ ret
+
+chkinput:
+ ld bc,donediddelydone
+ psh bc ;ret-dest.
+inputcall:
+ ld a,(ix+input)
+ or a
+ jr nz,inkeys
+ jr inlink
+
+respawncheck:
+ cp 1
+ ld h,a
+ jr nz,saverespawncounter
+respawndue:
+ ld l,a
+ cal inputcall
+ ld a,h ;previous
+ cp l ;changed?
+ ret z
+saverespawncounter:
+ ld (ix+delay),h
+ ret
;------- handle worm ---------
HandleWorm:
- dec (ix+delay)
- ret nz
- inc (ix+delay)
+ ld a,(ix+delay)
+ dec a
+ jr nz,respawncheck
+
ld l,(ix+heading)
- ld a,(ix+input)
- or a
- jr nz,inkeys
- call inlink
+ jr chkinput
donediddelydone:
ld a,l
ld (sendbyte),a
;-------- move worm ----------
Wormmove:
- push bc ; >> pos
+ psh bc ; >> pos
ld a,(hl)
add a,a
add a,d
xor 3
ld d,a
GotFour:
- call chk4pixels
+ cal chk4pixels
rl d
jp nc,Drawworm
jp z,WormDead
ld a,h
and _datahunt
- call nz,checkhitotherworm
+ cal nz,checkhitotherworm
ld hl,0
PeaY =$-2
PeaX =$-1
+ ld a,(sprsize)
+ inc a
+ ld d,a
ld a,b
sub h
inc a
- cp 4
+ cp d ;=(sprsize)+1
jp nc,WormDead
ld a,c
sub l
inc a
- cp 4
+ cp d
jp nc,WormDead
- call DrawPea
+ cal DrawPea ;remove pea
ld a,(ix+grow)
add a,15
+peagrowth =$-1
ld (ix+grow),a
- call NewPea
+ cal NewPea
ld hl,Left
dec (hl)
- push af
+ psh af
ld de,10
- call IncScore
+ cal IncScore
pop af
jr nz,still_alive_not_dead
ld a,(gameCar)
inc (hl)
pop hl ; << call
pop hl ; << call
- pop de ; << levelp new
- cp NUM_LEVELS
- jp z,Exit
+ pop hl ; << levelp new
ld a,(gameCar)
and _datanextl
jp nz,StartLevel
nothit1:
inc hl
res resbit,h
- call _cphlde
+ cal _cphlde
jr nz,nextotherwormbit
ret
jr nz,nolap
cp (ix+reserv)
jr z,nolap
- push bc
+ psh bc
ld de,20
- call IncScore
+ cal IncScore
pop bc
xor a
nolap:
ret
otherwormHIT:
- push ix
+ psh ix
ld de,10
- call IncScore
+ cal IncScore
ld ix,worm1
- call WormDead
+ cal WormDead
pop ix
pop bc
still_alive_not_dead:
Drawworm:
ld a,(gameCar)
and _datahunt
- call nz,HuntingTimeScore
+ cal nz,HuntingTimeScore
ld c,(ix+pos)
ld b,(ix+pos+1)
ld a,(gameCar)
and _datalaps
- call nz,checkhitlapline
+ cal nz,checkhitlapline
ld l,(ix+head)
ld h,(ix+head+1)
ld (ix+head),l
ld (ix+head+1),h
- call set4pixels
+ cal set4pixels
ld a,(ix+grow)
dec a
ld (ix+tail+1),h
res4pixels:
- call ResPixel
+ cal ResPixel
inc b
- call ResPixel
+ cal ResPixel
inc c
- call ResPixel
+ cal ResPixel
dec b
ResPixel:
- call FindPixel
+ cal FindPixel
cpl
and (hl)
ld (hl),a
ret z
ballpos =$+1
ld bc,$0503
- call res4pixels
+ cal res4pixels
dec c
ld e,b
ballxmove:
inc b ;=%000100 dec=%000101
- call checkballhit
+ cal checkballhit
jr z,ballxdone
ld b,e
ld hl,ballxmove
- call letsmovetheotherway
+ cal letsmovetheotherway
ballxdone:
ld e,c
ballymove:
inc c ;=%001100 dec=%001101
- call checkballhit
+ cal checkballhit
jr z,balldone
ld c,e
ld hl,ballymove
- call letsmovetheotherway
+ cal letsmovetheotherway
balldone:
ld (ballpos),bc
- jp set4pixels
+
+set4pixels: ;@(b,c)
+ cal SetPixel
+ inc b
+ cal SetPixel
+ inc c
+ cal SetPixel
+ dec b
+SetPixel: ;at bc
+ cal FindPixel
+ or (hl)
+ ld (hl),a
+ ret
letsmovetheotherway:
ld a,1
checkballhit:
ld d,0
- call chk4pixels
+ cal chk4pixels
xor a
cp d
ret
;----------- procs -----------
;-----------------------------
-NewPea:
-;random routine
- ld hl,0
- ld de,12345
-Seed =$-2
- ld a,7921&255
- ld bc,$1000+(7921/256)
-domult16:
- add hl,hl
- rla
- rl c
- jr nc,noadd16
- add hl,de
-noadd16:
- djnz domult16
- inc hl
- ld (Seed),hl ;seed=(seed*7921+1)\65536
+randompos:
+ ld b,a
+Random: ;(2..b+2)
+ ld a,r
+Seed =$+1
+ add a,0
+ ld (Seed),a
+ and %01111110
+ cp b
+ jr nc,Random
+ add a,2
+ ret
+NewPea:
ld a,(FieldWidth)
- add a,123
- cp h
- jr c,NewPea
- inc h
- inc h
- ld a,(FieldHeight)
- add a,51
- cp l
- jr c,NewPea
- inc l
- inc l
+ add a,127-4
+ cal randompos
+ ld h,a
+ ld a,(FieldHeight)
+ add a,56-4
+ cal randompos
+ ld l,a
ld (PeaY),hl
- ld d,2 ;don't draw
- push hl
- call CheckPea
- pop hl
- dec d
- jr z,NewPea
-DrawPea: ;hl=(PeaY)
- ld d,0 ;draw
CheckPea:
- ld b,h
ld c,l
- call PeaPixel
- inc c
- call PeaPixel
- inc b
- call PeaPixel
- dec c
-PeaPixel:
- push de
- call FindPixel
- pop de
- ld e,a ;>>
- ld a,d
- or a
- ld a,e ;<<
- jr z,DrawPeaPixel ;d=0:draw
- and (hl) ;pixel?
- ret z
- ld d,1 ;d=1:yes 2:no
- ret
-DrawPeaPixel:
- xor (hl) ;change pixel
- ld (hl),a
- ret
-
-;-------- pixelprocs ---------
-
-set4pixels:
- call SetPixel
- inc b
- call SetPixel
- inc c
- call SetPixel
- dec b
-SetPixel: ;at bc
- call FindPixel
- or (hl)
- ld (hl),a
- ret
-
-chk4pixels: ;&&
- call CheckPixel
- inc b
- call CheckPixel
- inc c
- call CheckPixel
- dec b
- call CheckPixel
- dec c
- ret
-CheckPixel: ;at bc in d
- call FindPixel
+ ld a,(sprsize)
+ ld e,a
+chkloopy:
+ ld b,h
+ ld a,(sprsize)
+ ld d,a
+chkloopx:
+ psh hl
+ cal FindPixel
and (hl)
- ret z
+ pop hl
+ jr nz,NewPea ;pixel found
+ inc b
dec d
- ret
-
-;CLEM's FIND_PIXEL (131+? cycles; 28+4 bytes)
-; (b,c) to hl:a; destroyes: -)
-
-FindPixel:
- ld h,0
- ld l,c ;hl=y
- add hl,hl
- add hl,hl
- ld a,b ;a=x
- rra
- add hl,hl
- rra
- add hl,hl
- add hl,hl ;hl=32*y
- rra ;a=x/8
- or l
- ld l,a
- ld a,b
- and 7
- cpl
- rlca
- rlca
- rlca
- ld (FP_Bit),a
- xor a
-FP_Bit =$+1
- set 0,a
+ jr nz,chkloopx
+ inc c
+ dec e
+ jr nz,chkloopy
+;all ok; empty space
- push de
- ld de,ScrBuffer
- add hl,de
- pop de
+DrawPea: ;hl=(PeaY)
+ ld b,h
+ ld c,l
+ ld de,peasprite
+spritepos =$-2
+ cal PutSprite ;||-ed
ret
;----------- score -----------
ld (ix+score),l
ld de,0
scorelimit =$-2
- call _cphlde
+ cal _cphlde
jp nc,Exit
showstats:
- push ix
+ psh ix
ld h,0
ld l,h
ld (_penCol),hl
and _datanextl
jr nz,showstatsS
showstatloop:
- push bc
- call showstat
+ psh bc
+ cal showstat
ld de,worm2-worm1
add ix,de
ld hl,_penCol
add a,10
ld (hl),a
pop bc
- djnz showstatloop
+ dnz showstatloop
pop ix
ret
showscore:
ld h,(ix+score+1)
ld l,(ix+score)
- call _D_HL_DECI
+ cal _D_HL_DECI
jr __vputs
showlives:
ld a,(ix+lives)
add a,'0'
__vputmap:
- push ix
- call _vputmap
+ psh ix
+ cal _vputmap
pop ix
ret
showstatsS:
ld hl,txtLevel
- call __vputs
- ld a,(Level)
+ cal __vputs
+ ld a,0
+Level =$-1
cp 10
jr c,tilllevel9
ld l,a
ld h,0
- call _divHLby10
- push af
+ cal _divHLby10
+ psh af
ld a,l
add a,'0'
- call __vputmap
+ cal __vputmap
pop af
tilllevel9:
add a,'0'
- call __vputmap
+ cal __vputmap
ld a,98
ld (_penCol),a
- call showscore
+ cal showscore
ld a,123
ld (_penCol),a
- call showlives
+ cal showlives
ld a,(gameCar)
and _datafoodl
pop ix
ld (_penCol),a
ld a,0
Left =$-1
- push af
- call _divAby10
+ ld l,a
+ ld h,0
+ cal _divHLby10
+ psh af
+ ld a,l
add a,'0'
- call __vputmap
+ cal __vputmap
pop af
add a,'0'
- call __vputmap
+ cal __vputmap
+
ld hl,txtLeft
__vputs:
- push ix
- call _vputs
+ psh ix
+ cal _vputs
pop ix
ret
showLevel:
ld hl,txtLevel
- call _puts
+ cal _puts
ld a,(Level)
showA:
- cp 10
- jr c,LevelBelowTen
ld l,a
ld h,0
- call _divHLby10
- push af
+ cal _divHLby10
+ psh af
ld a,l
add a,'0'
- call _putc
+ cal _putc
pop af
-LevelBelowTen:
add a,'0'
jp _putc
showHL:
- call _D_HL_DECI
+ cal _D_HL_DECI
jp _puts
_D_HL_DECI:
ld de,savestr+4
ld b,5
ldhld:
- call _divHLby10
+ cal _divHLby10
add a,'0'
ld (de),a
dec de
- djnz ldhld
+ dnz ldhld
ld hl,savestr
ret
savestr:
add hl,hl
add hl,hl
add hl,hl
- push bc ; >> 1
- push de ; >> 2
+ psh bc ; >> 1
+ psh de ; >> 2
ld de,ScrBuffer
add hl,de
ld a,b
jr c,NotMaxXScroll
ld a,(FieldWidth)
NotMaxXScroll:
- push af ; >> 3
+ psh af ; >> 3
and %11111000
rra
rra
ld de,DispBuffer
pop af ; << 2
and %00000111
- push af ; >> 3
+ psh af ; >> 3
cp 6
jr c,CopyScreen
inc c
add hl,bc
ld b,57
CopyScreenLoop:
- push bc ; >> 4
- ld bc,16
+ psh bc ; >> 4
+ ld bc,16
ldir
- ld c,16
+ ld c,16
add hl,bc
pop bc ; << 3
- djnz CopyScreenLoop
+ dnz CopyScreenLoop
pop af ; << 2
ld c,$b7 ;or a
Bit0:
jr AfterShiftDelay
Bit1:
dec a
- jr nz,Bit2
- call ShiftRight1
- jr AfterShiftDelay
+ jr nz,Bit2
+ cal ShiftRight1
+ jr AfterShiftDelay
Bit2:
dec a
- jr nz,Bit3
- ld a,2
- call ShiftRight
- jr AfterShiftDelay
+ jr nz,Bit3
+ ld a,2
+ cal ShiftRight
+ jr AfterShiftDelay
Bit3:
dec a
- jr nz,Bit4
- call Chunk
- call ShiftLeft1
- jr AfterShift
+ jr nz,Bit4
+ cal Chunk
+ cal ShiftLeft1
+ jr AfterShift
Bit4:
dec a
- jr nz,Bit5
- call Chunk
- jr AfterShiftDelay
+ jr nz,Bit5
+ cal Chunk
+ jr AfterShiftDelay
Bit5:
dec a
- jr nz,Bit6
- call Chunk
- call ShiftRight1
- jr AfterShift
+ jr nz,Bit6
+ cal Chunk
+ cal ShiftRight1
+ jr AfterShift
Bit6:
dec a
- jr nz,Bit7
- ld a,2
- call ShiftLeft
- jr AfterShift
+ jr nz,Bit7
+ ld a,2
+ cal ShiftLeft
+ jr AfterShift
Bit7:
- call ShiftLeft
+ cal ShiftLeft
AfterShiftDelay:
halt
AfterShift:
- ld hl,DispBuffer
- ld de,$fc00+$70
- ld bc,1024-$70
+ ld hl,DispBuffer
+ ld de,$fc00+$70
+ ld bc,1024-$70
ldir
pop de ; << 1
pop bc ; << 0k
ret
ShiftRight1:
- ld a,1
+ ld a,1
ShiftRight:
- ld (ShiftRightCounter),a
- ld a,c
- ld (ShiftRightChunk),a
- ld c,16
+ ld (ShiftRightCounter),a
+ ld a,c
+ ld (ShiftRightChunk),a
+ ld c,16
add hl,bc
- ld b,57
+ ld b,57
ShiftRightLoop:
- push bc
- ld bc,-32
+ psh bc
+ ld bc,-32
add hl,bc
- ex de,hl
- ld a,(de)
+ ex de,hl
+ ld a,(de)
ShiftRightChunk:
- or a
- call c,_SHLACC
- ld c,0
+ or a
+ cal c,_SHLACC
+ ld c,0
ShiftRightCounter = $-1
ShiftRowsLeft:
- push hl
+ psh hl
rla
- ld b,16
+ ld b,16
ShiftRowLeft:
dec hl
- rl (hl)
- djnz ShiftRowLeft
+ rl (hl)
+ dnz ShiftRowLeft
pop hl
dec c
- jr nz,ShiftRowsLeft
- ld bc,-16
+ jr nz,ShiftRowsLeft
+ ld bc,-16
add hl,bc
- ex de,hl
+ ex de,hl
pop bc
- djnz ShiftRightLoop
+ dnz ShiftRightLoop
ret
ShiftLeft1:
- ld a,1
+ ld a,1
ShiftLeft:
- ld (ShiftLeftCounter),a
- ld a,c
- ld (ShiftLeftChunk),a
+ ld (ShiftLeftCounter),a
+ ld a,c
+ ld (ShiftLeftChunk),a
rla
- jr nc,ShiftLeftSameByte
+ jr nc,ShiftLeftSameByte
dec hl
ShiftLeftSameByte:
- ex de,hl
- ld bc,-16
+ ex de,hl
+ ld bc,-16
add hl,bc
NewSprite:
- ex de,hl
- ld b,57
+ ex de,hl
+ ld b,57
ShiftLeftLoop:
- push bc ; >> 1
- ld bc,-32
+ psh bc ; >> 1
+ ld bc,-32
add hl,bc
- ex de,hl
- ld a,(de)
+ ex de,hl
+ ld a,(de)
ShiftLeftChunk:
- or a
- call c,_SHRACC
- ld c,0
+ or a
+ cal c,_SHRACC
+ ld c,0
ShiftLeftCounter = $-1
ShiftRowsRight:
- push hl ; >> 2
+ psh hl ; >> 2
rra
- ld b,16
+ ld b,16
ShiftRowRight:
- rr (hl)
+ rr (hl)
inc hl
- djnz ShiftRowRight
+ dnz ShiftRowRight
pop hl ; << 1
dec c
- jr nz,ShiftRowsRight
- ld bc,-16
+ jr nz,ShiftRowsRight
+ ld bc,-16
add hl,bc
- ex de,hl
+ ex de,hl
pop bc ; << 0k
- djnz ShiftLeftLoop
+ dnz ShiftLeftLoop
ret
Chunk:
- push hl ; >> 1
- push de ; >> 2
+ psh hl ; >> 1
+ psh de ; >> 2
ld c,16
add hl,bc
ld b,57
ChunkScreen:
- push bc ; >> 3
+ psh bc ; >> 3
ld bc,-32
add hl,bc
ex de,hl
ld a,(de)
- call _SHRACC
+ cal _SHRACC
ld b,16
ChunkRow:
dec hl
rld
- djnz ChunkRow
+ dnz ChunkRow
ex de,hl
pop bc ; << 2
- djnz ChunkScreen
+ dnz ChunkScreen
pop de ; << 1
pop hl ; << 0k
ld c,$37 ;scf
;----------- draw ------------
+;--- pixel ---
+
+chk4pixels: ;&&
+ cal CheckPixel
+ inc b
+ cal CheckPixel
+ inc c
+ cal CheckPixel
+ dec b
+ cal CheckPixel
+ dec c
+ ret
+CheckPixel: ;at bc in d
+ cal FindPixel
+ and (hl)
+ ret z
+ dec d
+ ret
+
+;CLEM's FIND_PIXEL (131+? cycles; 28+4 bytes)
+;(b,c) to hl:a; "destroyes" ahl
+
+FindPixel: ;(b,c) to hl:a
+ ld h,0
+ ld l,c ;hl=y
+ add hl,hl
+ add hl,hl
+ ld a,b ;a=x
+ rra
+ add hl,hl
+ rra
+ add hl,hl
+ add hl,hl ;hl=32*y
+ rra ;a=x/8
+ or l
+ ld l,a
+ ld a,b
+ and 7
+ cpl
+ rlca
+ rlca
+ rlca
+ ld (FP_Bit),a
+ xor a
+FP_Bit =$+1
+ set 0,a
+
+ psh de ;&&&
+ ld de,ScrBuffer
+ add hl,de
+ pop de
+ ret
+
+;--- sprite ---
+
+PutSprite: ;||@(b,c)
+ ;by SHIAR only ix saved
+ cal FindPixel
+putspr:
+ ld (beginbit),a
+ ld a,(sprsize)
+ 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
+
+;--- line ---
+
loaddrawdata:
ld d,(hl)
inc hl
inc hl
ret
-Line: ;draw line from de to hl (d<h)
- push hl
- push de
- ld a,d
- cp h
- jr c,lineOrdered
- ex de,hl
+;LINE (d,e)-(h,l)
+;destroyes a
+
+Line:
+ psh bc
+ psh hl
+ psh de
+ ld a,d
+ cp h
+ jr c,lineOrdered
+ ex de,hl
lineOrdered:
ld b,d
ld c,e
- push hl
- push bc
- call FindPixel
+ psh hl
+ psh bc
+ cal FindPixel
pop bc
pop de
connectedLine:
- push hl
+ psh hl
ld h,c
ld c,a
ld a,d
sub b
pop hl
LineLoopGentle:
- push af
+ psh af
ld a,(hl)
or c
ld (hl),a
add hl,de
line2sm:
add a,0
- djnz LineLoopGentle
+ dnz LineLoopGentle
DoneLine:
ld a,(hl)
or c
ld (hl),a
pop de
pop hl
+ pop bc
ret
SteepLine:
ld h,a
ld b,h
pop hl
LineLoopSteep:
- push af
+ psh af
ld a,(hl)
or c
ld (hl),a
inc hl
line4sm:
add a,0
- djnz LineLoopSteep
+ dnz LineLoopSteep
jr DoneLine
-drawbox:
- ld b,h
- ld c,l
- call FindPixel
-; ld b,a
-;makefirstbyte:
-; or b
-; rr b
-; jr nc,makefirstbyte
-; or (hl) ;()
-; ld (hl),a
-
- ld b,e ;yloop
-boxloopy:
- push bc ;yloop
- ld b,d ;xloop
-boxloopx:
- ld a,%11111111
- ld (hl),a
- inc hl
- djnz boxloopx
-
- ld b,0
- ld a,16
- sub d
- ld c,a
- add hl,bc
- pop bc ;yloop
- djnz boxloopy
+drawbox: ;(d,e)-(h,l)
+ ld b,l ;Delta-y
+ ld l,e
+boxloop:
+ cal Line
+ inc l
+ inc e
+ dnz boxloop
ret
;-----------------------------
TIMEOUT = $1000
receive:
- call GET_KEY
+ cal GET_KEY
cp K_EXIT
jp z,LinkBreak
in a,(7)
and %11
cp %11
jr z,receive
- call Qreceive
+ cal Qreceive
jr c,receive
ret
receiveloop:
ld de,TIMEOUT
WaitRecBit:
- call CheckLink
+ cal CheckLink
jr z,LinkFailed
cp %11
jr z,WaitRecBit
ReceiveCont:
- sub 2
- ld a,2
- ld d,D0LD1H
- jr c,ReceiveLow
- rra
- ld d,D0HD1L
+ sub 2
+ ld a,2
+ ld d,D0LD1H
+ jr c,ReceiveLow
+ rra
+ ld d,D0HD1L
ReceiveLow:
- rr c
- ld (AckBit),a
- ld a,d
- out (7),a
- ld de,TIMEOUT
+ rr c
+ ld (AckBit),a
+ ld a,d
+ out (7),a
+ ld de,TIMEOUT
WaitAckRec:
- call CheckLink
- cp 0
+ cal CheckLink
+ cp 0
AckBit =$-1
- jr nz,WaitAckRec
- ld a,D0HD1H
- out (7),a
- ld d,4
+ jr nz,WaitAckRec
+ ld a,D0HD1H
+ out (7),a
+ ld d,4
WaitReadyRec:
- dec d
- jr z,ReadyRec
- in a,(7)
- cp %11
- jr nz,WaitReadyRec
+ dec d
+ jr z,ReadyRec
+ in a,(7)
+ cp %11
+ jr nz,WaitReadyRec
ReadyRec:
- djnz receiveloop
- jr LinkSuccess
+ dnz receiveloop
+ jr LinkSuccess
send:
ld b,9
out (7),a
ld de,TIMEOUT
WaitAckSend:
- call CheckLink
+ cal CheckLink
jr nz,WaitAckSend
SendAcked:
ld a,D0HD1H
out (7),a
ld de,TIMEOUT
WaitReadySend:
- call CheckLink
+ cal CheckLink
cp %11
jr nz,WaitReadySend
- djnz SendBits
+ dnz SendBits
LinkSuccess:
ld a,c ;pop a
ret
out (1),a
nop \ nop
in a,(1)
- push af
+ psh af
ld a,%11111111
out (1),a
pop af
;---------- levels -----------
;-----------------------------
-LevelsDM:
- .db 8,5,15,0
- .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
- .db 128,57
- .db 0,0
-
-LevelsDM2:
- .db 8,5,31,0
- .db $40,28,2,$C0,28,125, $00,2,63,$80,54,63
- .db 128,57
- .db 0
- .db 4 ;4 boxes
- .db 4,19,16,14 ;xsize,ysize,xpos,ypos
- .db 4,19,80,14
- .db 4,19,16,34
- .db 4,19,80,34
-
-LevelsL:
- .db 8,0,15,0
- .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
- .db 228,157
- .db 0,0
-
-LevelsR:
- .db 8,2,10,0
- .db $40,3,2,$40,6,2, $40,9,2,$40,12,2
- .db 128,57
- .db 0
- .db 1
- .db 8,29,32,20
-
-LevelsH:
- .db 8,7,17,0
-#ifdef 0
-huntersize = 31
-#endif
- .db $40,28,2,$C0,28,125, $00,2,63,$80,54,63
- .db 128,57
- .db 0
- .db 4
- .db 4,19,16,14
- .db 4,19,80,14
- .db 4,19,16,34
- .db 4,19,80,34
-
-NUM_LEVELS = 10
-
-LevelsS:
-
- .db 5,4,15,0 ;peas,speed,begin_size,balls
+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,0 ;no additional lines, boxes
- .db 8,4,15,0
- .db $40,14,2
- .db 128,57
- .db 1
- .db 28,28,100,28 ;line coords: x1,y1,x2,y2
- .db 0
+ .db 255
+ ret
- .db 9,4,15,0
- .db $40,8,2
+LevelDefM:
+ .db 8,0,15,15,0,0
+ .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
.db 128,57
- .db 2
- .db 28,14,100,14
- .db 28,41,100,41
- .db 0
-
- .db 9,3,15,0
- .db $40,8,2
- .db 128,80
- .db 2
- .db 64,14,64,66
- .db 20,40,108,40
- .db 0
-
- .db 10,3,15,0
- .db 2,8,$40
- .db 128,90
- .db 3
- .db 18,20,18,70
- .db 110,20,110,70
- .db 18,45,110,45
- .db 0
-
- .db 4,3,10,1 \ .dw $20F
- .db 0,2,63
- .db 128,57
- .db 2
- .db 28,14,100,41
- .db 28,41,100,14
- .db 0
-
- .db 7,3,15,0
- .db 64,4,0
- .db 128,86
- .db 6
- .db 34,13,56,35
- .db 34,71,56,49
- .db 72,35,94,13
- .db 72,49,94,71
- .db 16,20,16,64
- .db 110,20,110,64
- .db 0
-
- .db 9,3,15,0
- .db $40,4,10
- .db 128,82
- .db 3
- .db 0,20,74,20
- .db 54,40,128,40
- .db 0,60,74,60
- .db 0
-
- .db 12,3,15,0
- .db $40,4,0
- .db 128,90
- .db 6
- .db 20,16,54,16
- .db 74,16,110,16
- .db 20,16,20,72
- .db 110,16,110,72
- .db 20,72,54,72
- .db 74,72,110,72
- .db 0
-
- .db 8,2,15,0
- .db $C0,72,48
- .db 128,128
- .db 13
- .db 34,56,56,34
- .db 34,72,56,94
- .db 72,34,94,56
- .db 72,94,94,72
- .db 46,64,80,64
- .db 22,11,22,33
- .db 11,22,33,22
- .db 22,95,22,117
- .db 11,106,33,106
- .db 103,11,103,33
- .db 91,22,115,22
- .db 103,95,103,117
- .db 91,106,115,106
- .db 0
-
+ .db 0,0
;-----------------------------
;---------- data -------------
txtWaiting: .db "Waiting...",0
txtReceive: .db "Receiving...",0
-WormVersion = 092
-WormMsg: .db "WORM by SHIAR -- test version",0
txtLevel: .db "Level ",0
txtWorms: .db "Worms: 0",0 ;follows txtLevel
txtDied: .db "Died ",0
-txtScore: .db "Score",0 ;follows txtDied
-txtLeft: .db " left",0 ;follows txtScore
+txtScore: .db "Score",0 ;follows txtDied
+txtLeft: .db " left",0 ;follows txtScore
txthiscore:.db "HiScore:",0
txtReady: .db "Prepare!",0
txtposReady = 7
_datascore = %10000000 ;score>=100 limit
datasingle: .db %00011110
- .dw LevelsS
datapeas: .db %00011010
- .dw LevelsS
datadeathm: .db %00000010
- .dw LevelsDM2
datafoodm: .db %10010000
- .dw LevelsDM
datalinkm: .db %00000011
- .dw LevelsL
datahuntin: .db %10100000
- .dw LevelsH
datarace: .db %11000000
- .dw LevelsR
-datactf: .db %00000000
- .dw LevelsDM
-datadomin: .db %00000000
- .dw LevelsDM
-
-
-resbit = 2 ;and%11111011
-worm1set: .dw $B000,$B000 ;%10110000
+datactf: .db %00000000 ;==(8 modes)
+;datadomin: .db %00000000
+datalevels: .dw LevelDef, LevelDef
+ .dw LevelDefM,LevelDefM
+ .dw LevelDefM,LevelDefM
+ .dw LevelDefM,LevelDefM
+
+worm1set: .dw worm1p,worm1p
.db 3,0,%01111110,%10,%100 ;< >
- .db "Worm #1",0
-worm2set: .dw $B800,$B800 ;%10111000
+worm1name: .db "Worm #1 ",0
+worm2set: .dw worm2p,worm2p
.db 3,0,%00111111,%10000,%1000 ;f1 f2
- .db "Worm #2",0
-worm3set: .dw $F000,$F000 ;$E800=%11101000 ;$D748+$1000+
+worm2name: .db "Worm #2 ",0
+worm3set: .dw worm3p,worm3p
.db 3,0,%01011111,%10,%100 ;sto ,
- .db "Worm #3",0
-worm4set: .dw $A800,$A800 ;$F000=%11110000
+worm3name: .db "Worm #3 ",0
+worm4set: .dw worm4p,worm4p
.db 3,0,%01111101,%10,%1 ;enter +
- .db "Worm #4",0
-worm1 = $B400
-worm2 = $B42A
-worm3 = $B454
-worm4 = $B47E ;-A8
+worm4name: .db "Worm #4 ",0
+
+hipeaworm: .dw 0
end:
+
+;sprsize = 7
+;peasprite: .db %00111000
+; .db %01110100
+; .db %11111010
+; .db %11111110
+; .db %11111110
+; .db %01111100
+; .db %00111000
+
+sprsize: .db 5
+peasprite: .db %01110000
+ .db %11101000
+ .db %11111000
+ .db %11111000
+ .db %01110000
+
;set:
heading = 0 ;level*
pos = 2 ;level*
right = 20 ;&
name = 21 ;game
-Level =$+1
-DispBuffer =$+2 ;912 bytes
-
-ScrBuffer = $8100 ;-$A2FF (32x256) mod$800=0
-SinCosTable = $B500 ;size=$100 (4x64)
-
;-----------------------------
;----------- end -------------
;-----------------------------