-; -WonderWorm--v0.9-
-; by Matthew Shepcar 30.XII.98
-; modified by Jonah Cohen 19.XI .99
-; and Shiar 01.XII.99
+; Title : Worm
+; Version : 0.92
+; Release Date : soon (I hope)
+; Filename : worm.86p (3404)
+; Author(s) : Shiar
+; Email Address : shiar@mailroom.com
+; ICQ UIN : #43840958
+; Web Page : www.games3.net/shiar
+; Description : ruling multiplayer game for 86 (most like Nibbles)
+; Where to get this game : games3.net/shiar (home of Worm)
+; Other games by author(s) : Shiar: Nemesis beta
+; Additional Credits to : Matthew Shepcar (wrote original Peaworm, end'98)
+; Jonah Cohen (wrote some parts of worm)
-;to-do:
-; * picks not correctly removed
-; * linkplay
-; * hot pursuit + ctf
-; * ending (+stats after multiplayer)
+;-----------------------------
+;----------- TO-DO -----------
+;-----------------------------
+
+; Shiar 4.II.00
+
+;Feel like doing something? (name indicates who's working on it)
+; * linkplay TESTING! (+faster)
+; * singleplay ending
+; * titlescreen
+; * make linkplay available for all gametypes (not just deathmatch)
+; * two worms collide with heads -> both should die
+; * bouncing balls :)
+; * 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
+; * AI worms?
+;1)* sprites for picks instead of blocks
+; * fix linedraw procedure
+; * save hiscore
+
+;1) Working on a new pickup-system allowing more than one "food" and different pickup-handling
#include "TI86.inc"
+;-----------------------------
+;------- program start -------
+;-----------------------------
.org _asm_exec_ram
-
-_divHLby10 = $4044
-_getcsc = _getky
-_clrWindow = $4a86
-_runIndicOff = _runindicoff
-_flushAllMenus = _flushallmenus
-_SHRACC = _shracc
-_SHLACC = $438B
-
+start:
nop
jp Start
- .dw 0,WormMsg
+ .dw 1
+ .dw WormMsg
+ .dw WormIcon
+
+WormIcon:
+ .db 9,2
+ .db %10010111,%01101111
+ .db %10110101,%01001011
+ .db %11110111,%01001001
+ .db %00000011,%10000000
+ .db %00000001,%11100000
+ .db %00111000,%11111000
+ .db %01111110,%00111111
+ .db %11101111,%00001111
+ .db %11000011,%10000000
Start:
-; ld (SpSave),sp
+ ld (SpSave),sp
call _runIndicOff
call _flushAllMenus
call _clrLCD
+ res 2,(iy+13) ;appAutoScroll
ld a,r
ld (Seed),a
- xor a
- ld (_asapvar+1),a
;-----------------------------
;----- build trig tables -----
;-----------------------------
- ld hl,TrigPrecalc
- ld de,SinCosTable
+ ld hl,TrigPrecalc
+ ld de,SinCosTable
push de ; >> 1
- ld bc,65
+ ld bc,65
ldir
dec hl
- ld b,63
+ ld b,63
MirrorSineWave:
dec hl
- ld a,(hl)
- ld (de),a
+ ld a,(hl)
+ ld (de),a
inc de
djnz MirrorSineWave
pop hl ; << 0k
- ld b,128+64
+ ld b,128+64
NegativeSineWave:
xor a
sub (hl)
- ld (de),a
+ ld (de),a
inc hl
inc de
djnz NegativeSineWave
;-----------------------------
DisplayMenu:
- call _clrLCD
+ ld a,2
+ ld (nrworms),a
+gomainMenu:
+ call _clrWindow
ld hl,txtWelcome
call _puts
- ld hl,txtMenu
- ld de,$0203
- ld b,4
-DispMenuLoop:
- inc de
+ ld de,$0205
ld (_curRow),de
+ call _puts ;txtOptions
+ dec e ;$0204
+ ld (_curRow),de
+ ld hl,(CURtxtGame)
call _puts
- djnz DispMenuLoop
- ld hl,$0805
- ld (_curRow),hl
+ xor a
+mainMenu:
+ call menucall
+ jr nz,notselect
+select:
+ ld a,b
+ or a
+ jr nz,gooptionsMenu
+ jp LetsGetThisPartyOn
+notselect
+ cp K_EXIT
+ jp z,ExitNoStats
+ cp K_RIGHT
+ ld a,b
+ jr nz,mainMenu
+ or a
+ jr z,Variation
+
+gooptionsMenu:
+ call _clrWindow
+ ld hl,txtWelcome
+ call _puts
+ ld hl,txtLevel
+ ld de,$0205
+ ld (_curRow),de
+ call _puts ;txtLevel
+ dec e ;$0204
+ ld (_curRow),de
+ call _puts ;txtWorms
+ ld a,(nrworms)
+ add a,'0'
+ call _putc
+ xor a
+optionsMenu:
+ call menucall
+ jr nz,notopselect
+opselect:
+ ld a,b
+ or a
+ jr nz,changelevel
+changeworms:
+ ld hl,nrworms
+ inc (hl)
+ ld a,4
+ cp (hl)
+ jr nc,gooptionsMenu
+ ld (hl),2
+ jr gooptionsMenu
+changelevel:
+ jr optionsMenu
+
+notopselect:
+ cp K_EXIT
+ jr z,gomainMenu
+ ld a,b
+ jr optionsMenu
+
+Variation:
+ ld a,0
+Gametype =$-1
+ ld hl,txtGame2
+NEXTtxtGame =$-2
+ inc a
+ and 7 ;mod 8
+ jr nz,okilydokily
ld hl,txtGame
+okilydokily:
+ ld (Gametype),a
+ ld de,$0204
+ ld (_curRow),de
+ ld (CURtxtGame),hl
call _puts
+ ld (NEXTtxtGame),hl
+ ld a,b
+ jp mainMenu
- xor a
-menudraw:
- and 3 ;-1>>3; 4>>0
+menucall:
push af
-
- ld h,0
- add a,4
- ld l,a
+ ld hl,$0004
+ ld (_curRow),hl
+ ld a,' '
+ call _putc
+ ld hl,$0005
ld (_curRow),hl
- ld a,5 ;arrow
call _putc
-
+ pop af
+ push af
ld h,0
- ld a,1
-Previous =$-1
add a,4
ld l,a
ld (_curRow),hl
- ld a,' '
+ ld a,'*'
call _putc
-
pop af
- push af
- ld (Previous),a
-WKCP:
+ ld b,a
+menukeys:
halt \ halt
- call GET_KEY
- cp K_EXIT
- jp z,Exit
- cp K_ENTER
- jr z,select
- cp K_SECOND
- jr z,select
+ call _getcsc
+ or a
+ jr z,menukeys
cp K_UP
jr nz,notup
- pop af
- dec a
- jr menudraw
+updown:
+ ld a,b
+ xor 1
+ ld b,a
+ inc a ;nz
+ ret
notup:
cp K_DOWN
- jr nz,WKCP
- pop af
+ jr z,updown
+ cp K_ENTER
+ ret z
+ cp K_SECOND
+ ret ;z=select
+
+;-----------------------------
+;-------- start game ---------
+;-----------------------------
+
+LetsGetThisPartyOn:
+ ld hl,Gametype
+ ld a,(hl)
+ add a,a
+ add a,(hl)
+ ld e,a
+ ld d,0
+ ld hl,gamesdata
+ add hl,de
+
+ or a
+ jr nz,notsingle
inc a
- jr menudraw
+ ld (nrworms),a
+notsingle:
+ ld a,(hl)
+ ld (gameCar),a
+ push af
-select:
+ and _datascore
+ ld de,$FF64 ;virt.infinate
+ jr z,setscorelimit
+ ld d,0 ;de=100
+setscorelimit:
+ ld (scorelimit),de
+
+ inc hl
+ call _ldHLind
pop af
- ld b,a
- or a ;1st
- jr z,ThePartyIsOn
- dec a ;2nd
- jr z,Variation
- dec a ;3rd
- jp Exit
+ push hl
+ and _datalink
+ jr z,GameOver
-Variation:
- ld hl,$0805
- ld (_curRow),hl
- ld a,0
-Gametype =$-1
- ld hl,txtGame2
-NEXTtxtGame =$-2
- inc a
- and 3
- jr nz,okilydokily
- ld hl,txtGame
-okilydokily:
- ld (Gametype),a
+linkmatch:
+ call _clrWindow
+
+
+; in a,(7)
+; and %11
+; cp %11
+ ld a,WormVersion
+; jr nz,host
+ call send
+ jr c,host
+
+client:
+ ld hl,txtReceive
call _puts
- ld (NEXTtxtGame),hl
- ld a,b
- jr menudraw
+ call receive
+ cp WormVersion
+ ret nz
+ jr multiplayer
-singleplayer:
- inc a
- ld (nrworms),a
- ld de,LevelsS
- jr GameOver
+host:
+ ld hl,txtWaiting
+ call _puts
+ call receive
+ cp WormVersion
+ ret nz
+ call send
+ ld hl,SwapPos
+ ld (hl),$f6
-ThePartyIsOn:
- ld a,(Gametype)
- or a
- jr z,singleplayer
+multiplayer:
ld a,2
ld (nrworms),a
ld de,LevelsDM
;-----------------------------
GameOver:
- push de
call _clrLCD
- pop de
- ld a,1
- ld (Level),a
ld hl,0
- ld (worm1+score),hl
- ld (worm2+score),hl
- ld a,3
- ld (worm1+lives),a
- ld (worm2+lives),a
+ ld (worm1+died),hl
+;+died=0 \ +score1=0
+ ld (worm2+died),hl
+ ld (worm3+died),hl
+ ld (worm4+died),hl
+ inc h
+ ld (worm1+score+1),hl
+;+score2=0 \ +delay=1
+ ld (worm2+score+1),hl
+ ld (worm3+score+1),hl
+ ld (worm4+score+1),hl
+ ld a,l
+ ld (Level),a
+ ld hl,worm1set+4
+ ld de,worm1+lives
+ call _MOV5B ;9xld(de),(hl)
+ call _mov9b
+ ld hl,worm2set+4
+ ld de,worm2+lives
+ call _MOV5B
+ call _mov9b
+ ld hl,worm3set+4
+ ld de,worm3+lives
+ call _MOV5B
+ call _mov9b
+ ld hl,worm4set+4
+ ld de,worm4+lives
+ call _MOV5B
+ call _mov9b
+ pop de
StartLevel:
ld a,(de)
ld a,(de)
ld (Speed),a
inc de
- ld a,15
+ ld a,(de)
ld (worm1+grow),a
ld (worm2+grow),a
-NextLife:
- push de ; >> levelp old
- ld b,2
- ld hl,worm1
+ ld (worm3+grow),a
+ ld (worm4+grow),a
+ inc de
+
+ ld a,(gameCar)
+ and _datahunt
+ jr z,nohunter
+ ld a,huntersize
+ ld (worm2+grow),a
+nohunter:
+
+ ld (thislevel),de
+ push de
+ ld hl,worm1set
+ ld de,worm1+head
+ call _MOV4B
+ ld hl,worm2set
+ ld de,worm2+head
+ call _MOV4B
+ ld hl,worm3set
+ ld de,worm3+head
+ call _MOV4B
+ ld hl,worm4set
+ ld de,worm4+head
+ call _MOV4B
+ pop de
+ ld hl,worm1
+ ld a,(gameCar)
+ and _datanextl
+ ld b,1
+ jr nz,worminit
+ ld b,4
worminit:
push bc ; >> 1
ld a,(de)
inc hl
ld (hl),a ;x2
- ld bc,20-5
+ ld bc,(worm2-worm1)-5
add hl,bc
pop bc ; << 0k
djnz worminit
- ld hl,Worm1
- ld (worm1+head),hl
- ld (worm1+tail),hl
- ld hl,Worm2
- ld (worm2+head),hl
- ld (worm2+tail),hl
-
;-------- draw level ---------
ld a,(de)
jr z,NoLines
DrawLines:
push af ; >> 1
- ld d,(hl)
- inc hl
- ld e,(hl)
- inc hl
- ld a,(hl)
- inc hl
+ call loaddrawdata
push hl ; >> 2
ld l,(hl)
ld h,a
jr nz,DrawLines
NoLines:
+ ld a,(hl)
+ inc hl
+ or a
+ jr z,noboxes
+drawboxes:
+ push af
+ call loaddrawdata
+ push hl
+ ld l,(hl)
+ ld h,a
+ call drawbox
+ pop hl
+ inc hl
+ pop af
+ dec a
+ jr nz,drawboxes
+noboxes:
+
;-----------------------------
push hl ; >> levelp new
-
- ld hl,0
- ld (_penCol),hl
- ld hl,LivesMsg
- call _vputs
- ld a,(worm1+lives)
- add a,'0'
- call _vputmap
-
- ld a,40
- ld (_penCol),a
- call _vputs ;scoremsg
- ld a,100
- ld (_penCol),a
- call _vputs
- ld a,1
-Left =$-1
- call PutNum
- ld ix,worm1
- call PutScore
-
+ call showstats
+ ld a,(gameCar)
+ and _datafood
+ jr z,nofood
call NewPea
-
- pop hl ; << levelp new
- push hl ; >> levelp new
+ call DrawPea
+nofood:
ld bc,(worm1+pos)
call DisplayField
- ld hl,LevelMsg
- ld a,7
- push hl ; >> 1
- ld h,a
- ld l,4
- ld (_curRow),hl
- ld hl,0FDE0h
- ld de,0FDE1h
- ld (hl),-1
- ld bc,0BFh
+ ld hl,$FDE0
+ ld de,$FDE1
+ ld (hl),%11111111
+ ld bc,$BF
ldir
- pop hl ; << 0k
+ ld hl,4+(txtposReady*256)
+ ld (_curRow),hl
set 3,(iy+5)
+ ld hl,txtReady
call _puts
- ld a,(Level)
- cp 10
- jr c,LevelBelowTen
- ld l,a
- ld h,0
- call _divHLby10
- push af ; >> 1
- ld a,l
- add a,'0'
- call _putc
- pop af ; << 0k
-LevelBelowTen:
- add a,'0'
- call _putc
res 3,(iy+5)
+ ld a,0
+gameCar =$-1
+ and _datalink
+ jr z,SwapPos ;no link
+ xor a
+ ld (worm2+input),a
+ ld (worm2+left),a
+ ld (Speed),a
+
+SwapPos: ;$18 xx -> $F6 xx
+ jr initfinished
+ inc a
+ ld (worm2+left),a
+ ld hl,(worm1+pos)
+ ld de,(worm2+pos)
+ ld (worm2+pos),hl
+ ld (worm1+pos),de
+ ld a,(worm1+heading)
+ ld b,a
+ ld a,(worm2+heading)
+ ld (worm1+heading),a
+ ld a,b
+ ld (worm2+heading),a
+initfinished:
+
ld b,0
ReadyDelay:
halt
ld bc,(worm1+pos)
call DisplayField
+ ld a,1
+flashtime =$-1
+ dec a
+ jr z,noflash
+ ld (flashtime),a
+ ld hl,$fc00+(16*7)
+screeninvertloop:
+ ld a,(hl)
+ cpl
+ ld (hl),a
+ inc hl
+ xor a
+ cp h
+ jr nz,screeninvertloop
+noflash:
+
ld a,0
Speed =$-1
or a
NoDelay:
ld ix,worm1
- call HandleWorm
- ld ix,worm2
ld a,(nrworms)
- cp 2
- call z,HandleWorm
+ ld b,a
+handleworms:
+ push bc
+ call HandleWorm
+ ld bc,worm2-worm1
+ add ix,bc
+ pop bc
+ djnz handleworms
;-----------------------------
;---------- keys -------------
NotPaused:
rla
jp c,GameLoop
-Exit2pop:
- pop hl ; << levelp new
-Exit1pop:
- pop hl ; << levelp old
- jr Exit
-
-Exit5pop:
- pop hl
- pop hl
- pop hl
- jr Exit2pop
+ jr Exit ;&&
WormDead:
- pop hl ; << call
- pop hl ; << levelp new
- ld hl,(worm1+head)
- ld de,(worm1+tail)
- sbc hl,de
- ld a,l
- rr h
- rra
- ld (worm1+grow),a
+ ld a,2
+ ld (flashtime),a
- ld hl,(worm2+head)
- ld de,(worm2+tail)
+ ld h,(ix+tail+1)
+ ld l,(ix+tail)
+ push hl
+removewormloop:
+ ld c,(hl)
+ inc hl
+ ld b,(hl)
+ inc hl
+ res resbit,h
+ push hl
+ call res4pixels
+ pop hl
+ ld a,(ix+head)
+ cp l
+ jr nz,removewormloop
+ ld a,(ix+head+1)
+ cp h
+ jr nz,removewormloop
+
+ ;hl=ix+head
+ pop de ;ix+tail
+ ld a,(gameCar)
+ and _datamulti
+ jr nz,safewormsizedone
+; or a
sbc hl,de
ld a,l
rr h
rra
- ld (worm2+grow),a
+ inc a
+ ld (ix+grow),a
+safewormsizedone:
+
+ ld h,(ix+head+1)
+ ld l,(ix+head)
+ ld (ix+tail+1),h
+ ld (ix+tail),l
+ ld a,50
+ ld (ix+delay),a
+
+thislevel =$+1
+ ld de,0
+ ld a,(de)
+ inc de
+ ld (ix+heading),a
+ ld a,(de)
+ ld (ix+pos),a
+ inc de
+ ld a,(de)
+ ld (ix+pos+1),a
+
+ inc (ix+died)
+ dec (ix+lives)
+ push af
+ ld de,10
+ call DecScore
+ pop af
+ ret nz ;HandleWorm done
+ ld a,(gameCar)
+ and _datalivel
+ ret z
- ld a,(ix+lives)
- dec a
- ld (ix+lives),a
- pop de ; << levelp old
- jp nz,NextLife
Exit:
+ ld sp,0 ;pop all
+SpSave = $-2
+ call _clrWindow
+ ld hl,txtGO
+ call _puts
+ ld hl,txtGame
+CURtxtGame =$-2
+ call _puts
+ ld de,0002
+ ld (_curRow),de
+ call showLevel
+ ld de,$0B03
+ ld (_curRow),de
+ ld hl,txtDied
+ call _puts
+ call _puts ;txtScore
+ xor a
+ ld (_curCol),a
-#if 0
- ld a,(Eaten)
- ld hl,HiScore
- cp (hl)
- jr c,NotNewHigh
- ld (hl),a
- ld hl,_asapvar
- rst 20h
- rst 10h
- call 460Bh
- ld de,HiScore-_asm_exec_ram+2
+ ld b,2
+nrworms =$-1
+ ld hl,worm1+died
+displayWormStats:
+ push bc
+ push hl
+
+ ld bc,input-died
+ add hl,bc ;+input
+ xor a
+ cp (hl)
+ jr nz,NoLinkIndic
+ ld b,7
+ inc hl ;+left
+ cp (hl)
+ jr z,hostLinkIndic
+ dec b
+hostLinkIndic:
+ ld a,8
+ ld (_curCol),a
+ ld a,b
+ call _putc
+ xor a
+ ld (_curCol),a
+ dec hl
+NoLinkIndic:
+ inc hl
+ inc hl
+ inc hl ;+name
+ call _puts
+
+ pop hl
+ push hl
+ ld a,13
+ ld (_curCol),a
+ ld a,(hl) ;worm+died
+ push hl
+ call showA
+ pop hl
+
+ ld a,16
+ ld (_curCol),a
+ inc hl ;worm+score
+ call _ldHLind ;ld hl,(hl)
+ call showHL ;worm+score
+
+ pop hl
+ ld bc,worm2-worm1
+ add hl,bc
+ pop bc
+ djnz displayWormStats
+
+waitkey:
+ halt
+ halt
+ call _getcsc
+ cp K_ENTER
+ jp z,DisplayMenu
+; cp K_EXIT
+ jr nz,waitkey
+
+;x123456789012345678901
+;1----- GAME OVER -----
+;2Multiplayer
+;3Level 01
+;4 Died Score:
+;5NameName 03 00070
+;6Worm#02 @ 05 00120
+;7Worm#03 15 00030
+;8Snaky @ 00 04820
+
+ExitNoStats:
+; ld a,(Eaten)
+ xor a
+ ld hl,HiScore
+ cp (hl)
+ jr c,NotNewHigh
+ ld (hl),a
+NotNewHigh:
+
+ ld hl,_asapvar
+ rst 20h ;_ABS_MOV10TOOP1
+ rst 10h ;_FINDSYM
+ call _swapt_ ;_ex_ahl_bde
+ ld de,4
add hl,de
adc a,0
- call _load_ram_ahl
- ld a,(HiScore)
- ld (hl),a
-NotNewHigh:
-#endif
+ call _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
res 4,(iy+9)
-; ld sp,0
-SpSave = $-2
- jp _clrWindow
+ set 2,(iy+13)
+ jp _clrWindow
;-----------------------------
;----------- worm ------------
inlink:
ld a,0
sendbyte =$-1
- call SendByte
- jr c,receivefirst
+ ld b,(ix+left)
+ dec b
+ jr z,receivefirst
+ call send
call receive
+ ld l,a
ret
receivefirst:
+ push af
call receive
- ld a,(sendbyte)
- call SendByte
- ret
-
-receive:
-receiveloop:
- call GET_KEY
- cp K_EXIT
- jp z,Exit5pop
- call TryReceiveByte
- jr c,receiveloop
- ld l,a
+ ld l,a
+ pop af
+ push hl
+ call send
+ pop hl
ret
-inkeys:
+inkeys: ;use jp not call!
out (1),a
in a,(1)
ld b,a
and (ix+right)
- jr z,NotRight
+ jr z,notright
ld a,l
add a,8
ld l,a
-NotRight:
+notright:
ld a,b
and (ix+left)
- ret z
+ jr z,donediddelydone
ld a,l
sub 8
ld l,a
- ret
+ jr donediddelydone
;------- handle worm ---------
HandleWorm:
+ dec (ix+delay)
+ ret nz
+ inc (ix+delay)
ld l,(ix+heading)
ld a,(ix+input)
or a
- jr nz,keys
+ jr nz,inkeys
call inlink
- jr donelydone
-keys:
- call inkeys
-donelydone:
+donediddelydone:
ld a,l
ld (sendbyte),a
ld (ix+heading),l
add a,d
ld d,a
bit 7,(hl)
- jr z,NotNegX
+ jr z,notnegX
dec b
-NotNegX:
- jr nc,NotMoveX
+notnegX:
+ jr nc,notmoveX
inc b
-NotMoveX:
+notmoveX:
ld a,l
- add a,40h
+ add a,$40
ld l,a
ld a,(hl)
add a,a
add a,e
ld e,a
bit 7,(hl)
- jr z,NotNegY
+ jr z,notnegY
dec c
-NotNegY:
- jr nc,NotMoveY
+notnegY:
+ jr nc,notmoveY
inc c
-NotMoveY: ;bc=newpos
+notmoveY: ;bc=newpos
+ ld (ix+pos2),e
+ ld (ix+pos2+1),d
+ ld (ix+pos),c
+ ld (ix+pos+1),b
;-check-
pop hl ; << pos (old)
- push de ; >> pos2
ld a,h
sub b
and 1
call CheckPixel
dec c
rl d
- pop de ; << pos2
-
- ld (ix+pos2),e
- ld (ix+pos2+1),d
- ld (ix+pos),c
- ld (ix+pos+1),b
- jr nc,Drawworm
+ jp nc,Drawworm
;--------- worm hit ----------
Hitworm:
+ ld a,(gameCar)
+ ld h,a
+ and _datafood
+ jp z,WormDead
+ ld a,h
+ and _datahunt
+ call nz,checkhitotherworm
+
ld hl,0
PeaY =$-2
PeaX =$-1
inc a
cp 4
jp nc,WormDead
- push bc ; >> 1
call DrawPea
ld a,(ix+grow)
add a,15
ld (ix+grow),a
call NewPea
+ ld hl,Left
+ dec (hl)
+ push af
ld de,10
call IncScore
- ld a,119
- ld (_penCol),a
- ld hl,Left
- dec (hl)
- jr nz,NotNextLevel
+ pop af
+ jr nz,still_alive_not_dead
+ ld a,(gameCar)
+ and _datafoodl
+ jr z,still_alive_not_dead
ld hl,Level
ld a,(hl)
inc (hl)
- pop bc ; << 0k
+ pop hl ; << call
pop hl ; << call
pop de ; << levelp new
- pop hl ; << levelp old
cp NUM_LEVELS
jp z,Exit
- ld a,(Gametype)
- or a
- jp z,StartLevel
+ ld a,(gameCar)
+ and _datanextl
+ jp nz,StartLevel
jp Exit
-NotNextLevel:
- ld a,(hl)
- call PutNum
- pop bc ; << 0k
+;-----------------------------
+
+checkhitotherworm:
+ .db $dd,$7d ;ld a,lx
+ cp worm2&255
+ ret nz
+ThisIsJustASillyUselessLabel:
+ ld hl,(worm1+tail)
+ ld de,(worm1+head)
+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
+ jr c,otherwormHIT ;yes
+nothit1:
+ inc hl
+ res resbit,h
+ call _cphlde
+ jr nz,nextotherwormbit
+ ret
+
+checkhitlapline:
+ ld a,63
+ sub b
+ jr z,nextlaphalf
+ inc a
+ ret nz
+nextlaphalf:
+ ld a,c
+ and 32 ;y>=32?
+ jr nz,nolap
+ cp (ix+reserv)
+ jr z,nolap
+ push bc
+ ld de,20
+ call IncScore
+ pop bc
+ xor a
+nolap:
+ ld (ix+reserv),a
+ ret
+
+otherwormHIT:
+ push ix
+ ld de,10
+ call IncScore
+ ld ix,worm1
+ call WormDead
+ pop ix
+ pop bc
+still_alive_not_dead:
;-------- draw worm ----------
Drawworm:
+ ld a,(gameCar)
+ and _datahunt
+ call nz,HuntingTimeScore
+
+ ld c,(ix+pos)
+ ld b,(ix+pos+1)
+
+ ld a,(gameCar)
+ and _datalaps
+ call nz,checkhitlapline
+
ld l,(ix+head)
ld h,(ix+head+1)
ld (hl),c
ld (ix+tail),l
ld (ix+tail+1),h
+res4pixels:
call ResPixel
inc b
call ResPixel
domult16:
add hl,hl
rla
- rl c
- jr nc,noadd16
+ rl c
+ jr nc,noadd16
add hl,de
noadd16:
djnz domult16
inc hl
- ld (Seed),hl ;seed=(seed*7921+1) MOD 65536
- ld a,(FieldWidth)
+ ld (Seed),hl ;seed=(seed*7921+1) MOD 65536
+
+ ld a,(FieldWidth)
add a,123
- cp h
+ cp h
jr c,NewPea
inc h
inc h
ld a,(FieldHeight)
add a,51
- cp l
- jr c,NewPea
+ cp l
+ jr c,NewPea
inc l
inc l
- ld (PeaY),hl
- ld d,2
- push hl ; >> 1
+ ld (PeaY),hl
+ ld d,2 ;don't draw
+ push hl
call CheckPea
- pop hl ; << 0k
+ pop hl
dec d
- jr z,NewPea
-DrawPea:
- ld d,0
+ jr z,NewPea
+
+DrawPea: ;hl=(PeaY)
+ ld d,0 ;draw
CheckPea:
- ld b,h
- ld c,l
+ ld b,h
+ ld c,l
call PeaPixel
inc c
call PeaPixel
call PeaPixel
dec c
PeaPixel:
- push de ; >> 1
+ push de
call FindPixel
- pop de ; << 0k
- ld e,a
- ld a,d
- or a
- ld a,e
- jr z,DrawPeaPixel
- and (hl)
+ 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
+ ld d,1 ;d=1:yes 2:no
ret
DrawPeaPixel:
- xor (hl)
- ld (hl),a
+ xor (hl) ;change pixel
+ ld (hl),a
ret
;-------- pixelprocs ---------
ret
CheckPixel: ;at bc in d
- push de ; >> 1
call FindPixel
and (hl)
- pop de ; << 0k
ret z
dec d
ret
-FindPixel: ;bc to ahl + de gone
- push de ; >> 1
- push bc ; >> 2
- ld a,b
+;------------------------------------------------------
+; CLEM's FIND_PIXEL
+; by Clem
+;
+; 131 cycles 28 bytes (b,c) to hl:a destroyes: none
+;------------------------------------------------------
+
+FindPixel:
+ ld h,ScrBuffer/$800
+ ld a,c
+ add a,a
+ add a,a
+ ld l,a ;hl=$3f00+4*y
+ ld a,b
+ rra
+ add hl,hl
+ rra
+ add hl,hl ;hl=$fc00+16*y
+ add hl,hl
+ 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
+ ret
+
+;FindPixel: ;bc to ahl + de gone
+ push de
+ push bc
+ ld a,b
and 7
add a,offsets_table & 255
- ld e,a
- ld d,offsets_table/256
- ld h,0
- ld l,c
- add hl,hl
- add hl,hl
- add hl,hl
- add hl,hl
- add hl,hl
- ld a,b
+ ld e,a
+ ld d,offsets_table/256
+ ld h,0
+ ld l,c
+ add hl,hl ;2y
+ add hl,hl ;4y
+ add hl,hl ;8y
+ add hl,hl ;16y
+ add hl,hl ;32y
+ ld a,b
and %11111000
rra
rra
rra
- or l
- ld l,a
- ld a,(de)
- ld de,ScrBuffer
+ or l
+ ld l,a
+ ld a,(de)
+ ld de,ScrBuffer
add hl,de
- pop bc ; << 1
- pop de ; << 0k
+ pop bc
+ pop de
ret
-;-----------------------------
+;----------- score -----------
+
+HuntingTimeScore:
+ .db $dd,$7d ;ld a,lx
+ cp worm2&255
+ ret z ;=worm#2
+ dec (ix+reserv)
+ ret nz
+ ld de,10
IncScore:
ld h,(ix+score+1)
ld l,(ix+score)
add hl,de
+ jr scorecommon
+DecScore: ;&&&
+ ld h,(ix+score+1)
+ ld l,(ix+score)
+ or a
+ sbc hl,de
+ ret c
+scorecommon:
ld (ix+score+1),h
ld (ix+score),l
-PutScore:
- ld de,_penCol
- ld a,79
- ld (de),a
- ld b,5
-DoPutScore:
- push bc ; >> 1
- push de ; >> 2
+ ld de,0
+scorelimit =$-2
+ call _cphlde
+ jp nc,Exit
+
+showstats:
+ push ix
+ ld h,0
+ ld l,h
+ ld (_penCol),hl
+ ld a,(nrworms)
+ ld b,a
+ ld ix,worm1
+ ld a,(gameCar)
+ and _datanextl
+ jr nz,showstatsS
+showstatloop:
+ push bc
+; push ix
+ call showstat
+; pop ix
+ ld de,worm2-worm1
+ add ix,de
+ ld hl,_penCol
+ ld a,(hl)
+ add a,10
+ ld (hl),a
+ pop bc
+ djnz showstatloop
+ pop ix
+ ret
+
+showstat:
+ ld a,(gameCar)
+ and _datalivel
+ jr nz,showlives
+showscore:
+ ld h,(ix+score+1)
+ ld l,(ix+score)
+ call _D_HL_DECI
+ jr __vputs
+showlives:
+ ld a,(ix+lives)
+ add a,'0'
+__vputmap:
+ push ix
+ call _vputmap
+ pop ix
+ ret
+
+showstatsS:
+ ld hl,txtLevel
+ call __vputs
+ ld a,(Level)
+ cp 10
+ jr c,tilllevel9
+ ld l,a
+ ld h,0
call _divHLby10
- call PutDigit
- pop de ; << 1
- ld a,(de)
- sub 8
- ld (de),a
- pop bc ; << 0k
- djnz DoPutScore
+ push af
+ ld a,l
+ add a,'0'
+ call __vputmap
+ pop af
+tilllevel9:
+ add a,'0'
+ call __vputmap
+
+ ld a,98
+ ld (_penCol),a
+ call showscore
+ ld a,123
+ ld (_penCol),a
+ call showlives
+showleft:
+ ld a,31
+ ld (_penCol),a
+ ld a,0
+Left =$-1
+ push af
+ call _divAby10
+ add a,'0'
+ call __vputmap
+ pop af
+ add a,'0'
+ call __vputmap
+ ld hl,txtLeft
+ pop ix
+__vputs:
+ push ix
+ call _vputs
+ pop ix
ret
-PutNum:
+showLevel:
+ ld hl,txtLevel
+ call _puts
+ ld a,(Level)
+showA:
+ cp 10
+ jr c,LevelBelowTen
ld l,a
ld h,0
call _divHLby10
- push af ; >> 1
+ push af
ld a,l
- call PutDigit
- pop af ; << 0k
-PutDigit:
add a,'0'
- jp _vputmap
+ call _putc
+ pop af
+LevelBelowTen:
+ add a,'0'
+ jp _putc
+
+showHL:
+ call _D_HL_DECI
+ jp _puts
+
+_D_HL_DECI:
+ ld de,savestr+4
+ ld b,5
+ldhld:
+ call _divHLby10
+ add a,'0'
+ ld (de),a
+ dec de
+ djnz ldhld
+ ld hl,savestr
+ ret
+savestr:
+ .db "00000",0
;-----------------------------
rra
rra
rra
- ld c,a
- ld b,0
- ld de,DispBuffer
+ ld c,a
+ ld b,0
+ ld de,DispBuffer
pop af ; << 2
and %00000111
push af ; >> 3
- cp 6
- jr c,CopyScreen
+ cp 6
+ jr c,CopyScreen
inc c
CopyScreen:
add hl,bc
pop bc ; << 3
djnz CopyScreenLoop
pop af ; << 2
- ld c,$b7 ;or a
+ ld c,$b7 ;or a
Bit0:
- jr nz,Bit1
+ jr nz,Bit1
halt
halt
- jr AfterShiftDelay
+ jr AfterShiftDelay
Bit1:
dec a
jr nz,Bit2
add hl,bc
ld b,57
ShiftRightLoop:
- push bc ; >> 1
+ push bc
ld bc,-32
add hl,bc
ex de,hl
ld c,0
ShiftRightCounter = $-1
ShiftRowsLeft:
- push hl ; >> 2
+ push hl
rla
ld b,16
ShiftRowLeft:
dec hl
rl (hl)
djnz ShiftRowLeft
- pop hl ; << 1
+ pop hl
dec c
jr nz,ShiftRowsLeft
ld bc,-16
add hl,bc
ex de,hl
- pop bc ; << 0k
+ pop bc
djnz ShiftRightLoop
ret
ex de,hl
ld bc,-16
add hl,bc
+NewSprite:
ex de,hl
ld b,57
ShiftLeftLoop:
Chunk:
push hl ; >> 1
push de ; >> 2
- ld c,16
+ ld c,16
add hl,bc
- ld b,57
+ ld b,57
ChunkScreen:
push bc ; >> 3
- ld bc,-32
+ ld bc,-32
add hl,bc
- ex de,hl
- ld a,(de)
+ ex de,hl
+ ld a,(de)
call _SHRACC
- ld b,16
+ ld b,16
ChunkRow:
dec hl
rld
djnz ChunkRow
- ex de,hl
+ ex de,hl
pop bc ; << 2
djnz ChunkScreen
pop de ; << 1
pop hl ; << 0k
- ld c,$37 ;scf
+ ld c,$37 ;scf
+ ret
+
+;----------- draw ------------
+
+loaddrawdata:
+ ld d,(hl)
+ inc hl
+ ld e,(hl)
+ inc hl
+ ld a,(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
+lineOrdered:
+ ld b,d
+ ld c,e
+ push hl
+ push bc
+ call FindPixel
+ pop bc
+ pop de
+connectedLine:
+ push hl
+ ld h,c
+ ld c,a
+ ld a,d
+ sub b
+ ld b,a
+ ld a,e
+ jr nz,LineNotPoint
+ cp h
+ jr nz,LineNotPoint
+ pop hl
+ jr DoneLine
+LineNotPoint:
+ sub h
+ ld de,16
+ jr nc,LinePositiveY
+ neg
+ ld de,-16
+LinePositiveY:
+ cp b
+ jr nc,SteepLine
+ add a,a
+ ld (line2sm+1),a
+ ld h,a
+ xor a
+ sub b
+ add a,a
+ ld (line1sm+1),a
+ ld a,h
+ sub b
+ pop hl
+LineLoopGentle:
+ push af
+ ld a,(hl)
+ or c
+ ld (hl),a
+ rrc c
+ jr nc,$+3
+ inc hl
+ pop af
+ jp m,line2sm
+line1sm:
+ add a,0
+ add hl,de
+line2sm:
+ add a,0
+ djnz LineLoopGentle
+DoneLine:
+ ld a,(hl)
+ or c
+ ld (hl),a
+ pop de
+ pop hl
+ ret
+SteepLine:
+ ld h,a
+ neg
+ add a,a
+ ld (line3sm+1),a
+ ld a,b
+ add a,a
+ ld (line4sm+1),a
+ sub h
+ ld b,h
+ pop hl
+LineLoopSteep:
+ push af
+ ld a,(hl)
+ or c
+ ld (hl),a
+ add hl,de
+ pop af
+ jp m,line4sm
+line3sm:
+ add a,0
+ rrc c
+ jr nc,$+3
+ inc hl
+line4sm:
+ add a,0
+ djnz 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
ret
;-----------------------------
;----------- link ------------
;-----------------------------
+#ifdef 0
+TIMEOUT = $1200
+
+send:
+ push af ;ld b,a
+ call _getcsc
+ cp K_EXIT
+ jp z,Exit
+ pop af ;ld a,b
+ call SendByte
+; jr c,send
+ ret
-LINKMASK =3
-LINKPORT =7
-TIMEOUT =$1000
+linkfail:
+ jp Exit
LinkPrep:
- ex (sp),hl
- push bc
- push de
- set 2,(iy+12h)
- ld b,8
- jp (hl)
-
-TryReceiveByte:
- in a,(LINKPORT)
- and LINKMASK
- cp LINKMASK
- scf
- ret z
+ ex (sp),hl
+ push bc
+ push de
+ set 2,(iy+$12) ;cursorblink
+ ld b,8
+ jp (hl)
+
+receive:
+ call checklink
+ jr z,linkfail
+ cp %11
+ jr z,receive
ReceiveByteCont:
- call LinkPrep
- jr ReceiveCont
+ call LinkPrep
+ jr ReceiveCont
ReceiveByte:
- call LinkPrep
+ call LinkPrep
ReceiveBits:
- ld de,TIMEOUT
+ ld de,TIMEOUT
WaitRecBit:
- call CheckLink
- jr z,LinkFailed
- cp LINKMASK
- jr z,WaitRecBit
+ call checklink
+ jr z,LinkFailed
+ cp %11
+ jr z,WaitRecBit
ReceiveCont:
- sub LINKMASK/3*2
- ld a,LINKMASK/3*2
- ld d,D0LD1H
- jr c,ReceiveLow
- rra
- ld d,D0HD1L
+ sub %10
+ ld a,%10
+ ld d,D0lD1h
+ jr c,ReceiveLow
+ rra
+ ld d,D0hD1l
ReceiveLow:
- rr c
- ld (AckBit),a
- ld a,d
- out (LINKPORT),a
- ld de,TIMEOUT
+ rr c
+ ld (AckBit),a
+ ld a,d
+ out (7),a
+ ld de,TIMEOUT
WaitAckRec:
- call CheckLink
- cp 0
+ call checklink
+ cp 0
AckBit =$-1
- jr nz,WaitAckRec
- ld a,D0HD1H
- out (LINKPORT),a
- ld d,4
+ jr nz,WaitAckRec
+ ld a,D0hD1h
+ out (7),a
+ ld d,4
WaitReadyRec:
- dec d
- jr z,ReadyRec
- in a,(LINKPORT)
- cp LINKMASK
- jr nz,WaitReadyRec
+ dec d
+ jr z,ReadyRec
+ in a,(7)
+ cp %11
+ jr nz,WaitReadyRec
ReadyRec:
- djnz ReceiveBits
- jr LinkSuccess
+ djnz ReceiveBits
+ jr LinkSuccess
SendByte:
- call LinkPrep
- ld c,a
-
- inc b
- jr SendAcked
-
+ call LinkPrep
+ ld c,a
+ inc b
+ jr SendAcked
SendBits:
- rr c
- ld a,D0LD1H
- jr nc,SendLow
- ld a,D0HD1L
-SendLow:
- out (LINKPORT),a
- ld de,TIMEOUT
-WaitAckSend:
- call CheckLink
- jr nz,WaitAckSend
+ rr c
+
+sendbit:
+ ld a,D0lD1h
+ jr nc,sendselected
+ ld a,D0hD1l
+sendselected:
+ out (7),a
+ ld de,TIMEOUT
+waitacknowledge:
+ call checklink
+ jr nz,waitacknowledge
SendAcked:
- ld a,D0HD1H
- out (LINKPORT),a
- ld de,TIMEOUT
-WaitReadySend:
- call CheckLink
- cp LINKMASK
- jr nz,WaitReadySend
- djnz SendBits
-LinkSuccess:
- or 0
-.org $-1
-LinkFailed:
- scf
- ld a,c
- res 2,(iy+12h)
- pop de
- pop bc
- pop hl
- ret
-
-CheckLink:
- pop hl
- dec de
- ld a,d
- or e
- jr z,LinkFailed
- ld a,0BFh
- call _readkeypad
- bit 6,a
- jr z,LinkFailed
- in a,(LINKPORT)
- and LINKMASK
- jp (hl)
+ ld a,D0hD1h
+ out (7),a
+ ld de,TIMEOUT
+waitsendready:
+ call checklink
+ cp %11
+ jr nz,waitsendready
+
+ djnz SendBits
+LinkSuccess: ;nc
+ .db $f6 ;first byte of "or n"
+LinkFailed: ;c
+ scf
+ ld a,c
+ res 2,(iy+$12) ;noblink
+ pop de
+ pop bc
+ pop hl
+ ret
+
+linkerror:
+ jp Exit
+
+checklink:
+ pop hl
+ dec de
+ ld a,d
+ or e
+ jr z,LinkFailed
+ ld a,$BF ;key
+ call _readkeypad
+ bit 6,a
+ jr z,linkerror
+
+ in a,(7)
+ and %11
+ jp (hl)
+ ret
_readkeypad:
- out (1),a
- in a,(1)
- push af
- ld a,255
- out (1),a
- pop af
- ret
+ out (1),a
+ in a,(1)
+ push af
+ ld a,%11111111
+ out (1),a
+ pop af
+ ret
+#endif
+
+send:
+SendByte:
+ in a,(7)
+ and %11
+ jr z,nolink
+ ld b,8
+sendloop:
+ ld de,$8000
+ rl c
+ ld a,%11010100
+ jr nc,sendbit
+ ld a,%11101000
+sendbit:
+ out (7),a
+sendwait1:
+ call checklink
+ in a,(7)
+ and %11
+ jr nz,sendwait1
+ ld a,%11000000
+ out (7),a
+sendwait2:
+ call checklink
+ in a,(7)
+ and %11
+ cp %11
+ jr nz,sendwait2
+ djnz sendloop
+ xor a
+ ret
+timeout:
+ scf
+ ret
+receive:
+ in a,(7)
+ and %11
+ jr z,nolink
+ cp %11
+ jr z,receive
+ ld b,8
+receiveloop:
+ ld de,$8000
+receivewait1:
+ call checklink
+ in a,(7)
+ and %11
+ cp %11
+ jr z,receivewait1
+ rra
+ rl c
+ rra
+ ld a,%11010100
+ jr nc,receivebit
+ ld a,%11101000
+receivebit:
+ out (7),a
+receivewait2:
+ call checklink
+ in a,(7)
+ and %11
+ jr z,receivewait2
+ ld a,%11000000
+ out (7),a
+ djnz receiveloop
+ xor a
+ ret
+
+checklink:
+ dec de
+ ld a,d
+ or e
+ jr z,timeout
+ ld a,$BF ;key
+ call _readkeypad
+ bit 6,a
+ jr z,timeout
+ ret
+_readkeypad:
+ out (1),a
+ in a,(1)
+ push af
+ ld a,%11111111
+ out (1),a
+ pop af
+ ret
+nolink:
+ jp Exit
;-----------------------------
;---------- levels -----------
LevelsDM:
- .db 8,0
- .db $40,30,4,$C0,30,123
+ .db 8,5,15
+ .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
+ .db 128,57
.db 0,0
-; .db 128,57
+
+LevelsDM2:
+
+ .db 8,5,31
+ .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
+
+LevelsR:
+ .db 8,5,24
+ .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,5,5
+huntersize = 31
+ .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 = 9
LevelsS:
- .db 5,3 ;5 peas, speed 5
- .db 0,4,64,0,0,0 ;d,y,x
- .db 0,0 ;field width, height
+ .db 5,4,15 ;peas,speed,begin_size
+ .db 0,2,63 ;d,y,x
+ .db 128,57 ;field width, height
.db 0 ;no additional lines
+ .db 0 ;no boxes
- .db 8,4
- .db $40,14,4,0,0,0
+ .db 8,4,15
+ .db $40,14,2
.db 128,57
.db 1
- .db 28,28,100,28
+ .db 28,28,100,28 ;line coords: x1,y1,x2,y2
+ .db 0
- .db 9,4
- .db $40,8,4,0,0,0
+ .db 9,4,15
+ .db $40,8,2
.db 128,57
.db 2
.db 28,14,100,14
.db 28,41,100,41
+ .db 0
- .db 9,3
- .db $40,8,4,0,0,0
+ .db 9,3,15
+ .db $40,8,2
.db 128,80
.db 2
.db 64,14,64,66
.db 20,40,108,40
+ .db 0
- .db 10,3
- .db 4,8,$40,0,0,0
+ .db 10,3,15
+ .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 7,3
- .db 64,4,0,0,0,0
+ .db 7,3,15
+ .db 64,4,0
.db 128,86
.db 6
.db 34,13,56,35
.db 72,49,94,71
.db 16,20,16,64
.db 110,20,110,64
+ .db 0
- .db 9,2
- .db 4,10,$40,0,0,0
+ .db 9,2,15
+ .db 4,10,$40
.db 128,82
.db 3
.db 0,20,74,20
.db 54,40,128,40
.db 0,60,74,60
+ .db 0
- .db 12,2
- .db 64,4,0,0,0,0
+ .db 12,2,15
+ .db 64,4,0
.db 128,90
.db 6
.db 20,16,54,16
.db 110,16,110,72
.db 20,72,54,72
.db 74,72,110,72
+ .db 0
- .db 8,2
- .db 72,52,$c0,0,0,0
+ .db 8,2,15
+ .db 72,52,$c0
.db 128,128
.db 13
.db 34,56,56,34
.db 91,22,115,22
.db 103,95,103,117
.db 91,106,115,106
+ .db 0
;-----------------------------
.db 124,125,125,126,126,126,126,126
.db 127
-#include "line.asm"
-
-txtWelcome .db "Welcome to PeaWorm!! ",
- .db "by Jonah and Shiar",0
-txtMenu .db "Start Game",0
- .db "Game: ",0
- .db "Options",0
- .db "Quit",0
-txtGame .db "Singleplayer",0
-txtGame2 .db "Deathmatch ",0
- .db "Hot Pursuit",0
- .db "CTF ",0
-WormMsg .db "Wonderworm!",0
-LevelMsg .db "Level ",0
-LivesMsg .db "Lives: ",0
-ScoreMsg .db "Score: ",0
-LeftMsg .db "Food: ",0
-HiScore .db 0
-
-nrworms .db 2
-worm1 .dw 0,0,0,0,0,0,0,0
- .db 0,%11111110,%10,%100
-worm2 .dw 0,0,0,0,0,0,0,0
- .db 0,0,%10000,%1000
-; .db 0,%00111111,%10000,%1000
-
+txtWelcome: .db "Welcome to Worm!! ",
+ .db "by Shiar",0
+txtOptions: .db "Options",0
+txtGame: .db "Singleplayer",0 ;0
+txtGame2: .db "Deathmatch ",0 ;1
+ .db "Foodmatch ",0 ;2
+ .db "LinkMatch",0 ;3 (>options)
+ .db "Hunting ",0 ;4
+ .db "Race ",0 ;5
+ .db "CTF ",0 ;6
+ .db "Domination",0 ;7
+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
+txtReady: .db "Prepare!",0
+txtposReady = 7
+txtGO: .db "----- GAME OVER -----",0
+HiScore: .db 0
+
+gamesdata:
+
+_datalink = %00000001
+_datamulti = %00000010
+_datalivel = %00000010 ;ix+lives=0 limit
+_datafoodl = %00000100 ;left=0 limit
+_datanextl = %00001000 ;next level if left=0
+_datafood = %00010000 ;food present
+_datahunt = %00100000
+_datalaps = %01000000 ;give lap score
+_datascore = %10000000 ;score>=100 limit
+
+datasingle: .db %00011110
+ .dw LevelsS
+datadeathm: .db %00000010
+ .dw LevelsDM2
+datafoodm: .db %10010000
+ .dw LevelsDM
+datalinkm: .db %00000011
+ .dw LevelsDM
+datahuntin: .db %00110100
+ .dw LevelsH
+datarace: .db %11000000
+ .dw LevelsR
+datactf: .db %00000000
+ .dw LevelsDM
+datadomin: .db %00000000
+ .dw LevelsDM
+
+
+setdata = 18
+resbit = 2 ;and%11111011
+worm1set: .dw $B000,$B000 ;%10110000
+ .db 3,0,%01111110,%10,%100 ;< >
+ .db "Worm #1",0
+worm2set: .dw $B800,$B800 ;%10111000
+ .db 3,0,%00111111,%10000,%1000 ;f1 f2
+ .db "Worm #2",0
+worm3set: .dw $E800,$E800 ;%11101000 ;$D748+$1000+
+ .db 3,0,%01011111,%10,%100 ;sto ,
+ .db "Worm #3",0
+worm4set: .dw $F000,$F000 ;%11110000
+ .db 3,0,%01111101,%10,%1 ;enter +
+ .db "Worm #4",0
+worm1 = $B400
+worm2 = $B430
+worm3 = $B460
+worm4 = $B490
+end:
;set:
heading = 0 ;level*
pos = 2 ;level*
pos2 = 4 ;level
-head = 6 ;level
-tail = 8 ;level
-grow = 10 ;level
-lives = 13 ;game
-score = 15 ;game
-input = 17 ;
-left = 18 ;
-right = 19 ;
-
-Worm1 = $B000
-Worm2 = $B800
-resbit = 2
+grow = 6 ;level
+died = 8 ;game
+score = 9 ;game
+delay = 11 ;game
+
+head = 12 ;level
+tail = 14 ;level
+lives = 16 ;game
+reserv = 17 ;loop
+ ;race:lap
+ ;hunt:time
+input = 18 ;&
+left = 19 ;&
+right = 20 ;&
+name = 21 ;game
Level =$+1
-DispBuffer =$+2
+DispBuffer =$+2 ;912 bytes
-ScrBuffer = $8200 ;32x256 bytes
-SinCosTable = $A200
+ScrBuffer = $8000 ;-$A1FF (32x256)
+SinCosTable = $A200 ;-$A300 (4x64)
;-----------------------------
;----------- end -------------
;-----------------------------
-.end
+.end
\ No newline at end of file