+++ /dev/null
-; 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 -----------
-;-----------------------------
-
-; Shiar 3.III.00
-
-;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) Working on a new pickup-system allowing more than one "food" and different pickup-handling
-
-#include "TI86.inc"
-
-;-----------------------------
-;------- program start -------
-;-----------------------------
-
-.org _asm_exec_ram
-start:
- nop
- jp Start
- .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
- call _runIndicOff
- call _flushAllMenus
- call _clrLCD
- res 2,(iy+13) ;appAutoScroll
-
- ld a,r
- ld (Seed),a
-
-;-----------------------------
-;----- build trig tables -----
-;-----------------------------
-
- ld hl,TrigPrecalc
- ld de,SinCosTable
- push de ; >> 1
- ld bc,65
- ldir
- dec hl
- ld b,63
-MirrorSineWave:
- dec hl
- ld a,(hl)
- ld (de),a
- inc de
- djnz MirrorSineWave
- pop hl ; << 0k
- ld b,128+64
-NegativeSineWave:
- xor a
- sub (hl)
- ld (de),a
- inc hl
- inc de
- djnz NegativeSineWave
-
-;-----------------------------
-;---------- menu -------------
-;-----------------------------
-
-DisplayMenu:
- ld a,2
- ld (nrworms),a
-gomainMenu:
- call _clrWindow
- ld hl,txtWelcome
- call _puts
- ld de,$0205
- ld (_curRow),de
- call _puts ;txtOptions
- dec e ;$0204
- ld (_curRow),de
- ld hl,(CURtxtGame)
- call _puts
-
- 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
-
-menucall:
- push af
- ld hl,$0004
- ld (_curRow),hl
- ld a,' '
- call _putc
- ld hl,$0005
- ld (_curRow),hl
- call _putc
- pop af
- push af
- ld h,0
- add a,4
- ld l,a
- ld (_curRow),hl
- ld a,'*'
- call _putc
- pop af
- ld b,a
-menukeys:
- halt \ halt
- call _getcsc
- or a
- jr z,menukeys
- cp K_UP
- jr nz,notup
-updown:
- ld a,b
- xor 1
- ld b,a
- inc a ;nz
- ret
-notup:
- cp K_DOWN
- 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
-
- ld a,(hl)
- push af
- and _datasingl
- jr z,notsingle
- ld a,1
- ld (nrworms),a
-notsingle:
- pop af
- ld (gameCar),a
- push af
-
- 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
- push hl
- and _datalink
- jr z,GameOver
-
-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
- call receive
- cp WormVersion
- ret nz
- jr multiplayer
-
-host:
- ld hl,txtWaiting
- call _puts
- call receive
- cp WormVersion
- ret nz
- call send
- ld hl,SwapPos
- ld (hl),$f6
-
-multiplayer:
- ld a,2
- ld (nrworms),a
- ld de,LevelsDM
-
-;-----------------------------
-;--------- game over ---------
-;-----------------------------
-
-GameOver:
- call _clrLCD
- ld hl,0
- 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:
- ex de,hl
- ld de,Left
- ldi
- ld de,Speed
- ldi
- ld a,(hl)
- ld (worm1+grow),a
- ld (worm2+grow),a
- ld (worm3+grow),a
- ld (worm4+grow),a
- ld (beginsize),a
- inc hl
-
- ld a,(hl)
- inc hl
- ld (nrballs),a
- or a
- jr z,toobad_noballs
- ld de,ballpos
- ldi
- ldi
-toobad_noballs:
-
-#ifdef 0
- ld a,(gameCar)
- and _datahunt
- jr z,nohunter
- ld a,huntersize
- ld (worm2+grow),a
-nohunter:
-#endif
-
- ex de,hl
- 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)
- ld (hl),a ;d
- inc de
- inc hl
- ld a,SinCosTable/256
- ld (hl),a
- inc hl
-
- ld a,(de)
- ld (hl),a ;y
- inc de
- inc hl
- ld a,(de)
- ld (hl),a ;x
- inc de
- inc hl
-
- xor a
- ld (hl),a ;y2
- inc hl
- ld (hl),a ;x2
-
- ld bc,(worm2-worm1)-5
- add hl,bc
- pop bc ; << 0k
- djnz worminit
-
-;-------- draw level ---------
-
- ld a,(de)
- inc de
- sub 128
- ld (FieldWidth),a
- ld a,(de)
- inc de
- sub 57
- ld (FieldHeight),a
- add a,57-5
- push de ; >> levelp
- ld l,a
- ld h,0
- add hl,hl
- add hl,hl
- add hl,hl
- add hl,hl
- add hl,hl
- ex de,hl
-
- ld hl,ScrBuffer
- push hl ; >> 1
- push de ; >> 2
- ld de,ScrBuffer+1
- ld bc,63
- ld (hl),%11111111
- ldir
- inc hl
- ld (hl),%11000000
- inc hl
- ld b,31
-ClearLine:
- ld (hl),c
- inc hl
- djnz ClearLine
- push hl ; >> 3
-
- ld a,(FieldWidth)
- add a,126
- push af ; >> 4
- and %11111000
- rra
- rra
- rra
- ld l,a
- ld h,0
- add hl,de
- pop af ; << 3
- and %00000111
- ld b,a
- ld c,0
- ld a,%11000000
- jr z,NoVertShift
-VertShift:
- rra
- rr c
- djnz VertShift
-NoVertShift:
- ld (hl),a
- inc hl
- ld (hl),c
-
- ex de,hl
- pop de ; << 2
- pop bc ; << 1
- ldir
- pop hl ; << 0k
- ld c,64
- ldir
-
-;-draw lines-
-
- pop hl ; << levelp
- ld a,(hl)
- inc hl
- or a
- jr z,NoLines
-DrawLines:
- push af ; >> 1
- call loaddrawdata
- push hl ; >> 2
- ld l,(hl)
- ld h,a
- call Line
- inc d
- inc h
- call Line
- inc e
- inc l
- call Line
- dec d
- dec h
- call Line
- pop hl ; << 1
- inc hl
- pop af ; << 0k
- dec 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
- call showstats
- ld a,(gameCar)
- and _datafood
- jr z,nofood
- call NewPea
- call DrawPea
-nofood:
- ld bc,(worm1+pos)
- call DisplayField
- ld hl,$FDE0
- ld de,$FDE1
- ld (hl),%11111111
- ld bc,$BF
- ldir
- ld hl,4+(txtposReady*256)
- ld (_curRow),hl
- set 3,(iy+5)
- ld hl,txtReady
- call _puts
- 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
- djnz ReadyDelay
-
-;-----------------------------
-;----------- LOOP ------------
-;-----------------------------
-
-GameLoop:
- 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
- jr z,NoDelay
-Delay:
- halt
- dec a
- jr nz,Delay
-NoDelay:
-
- call handlethatneatlittleball
-
- ld ix,worm1
- ld a,(nrworms)
- ld b,a
-handleworms:
- push bc
- call HandleWorm
- ld bc,worm2-worm1
- add ix,bc
- pop bc
- djnz handleworms
-
-;-----------------------------
-;---------- keys -------------
-;-----------------------------
-
-HandleKeys:
- ld a,%10111111
- out (1),a
- in a,(1)
- rla
- jr c,NotPaused
- ld bc,$0103
- out (c),b
- halt
- ld b,11
- out (c),b
-
-NotPaused:
- rla
- jp c,GameLoop
- jr Exit ;&&
-
-WormDead:
- ld a,2
- ld (flashtime),a
-
- ld h,(ix+tail+1)
- ld l,(ix+tail)
- ld d,(ix+head+1)
- ld e,(ix+head)
- jr DoesWormTailEqualsWormHead ;chk4 size=0
-removewormloop:
- ld c,(hl)
- inc hl
- ld b,(hl)
- inc hl
- res resbit,h
- push hl
- call res4pixels
- pop hl
- inc (ix+grow)
-DoesWormTailEqualsWormHead:
- call _cphlde
- jr nz,removewormloop
-
- ld a,(gameCar)
- and _datasingl
- jr nz,safewormsizedone
- ld a,0
-beginsize =$-1
- ld (ix+grow),a
-safewormsizedone:
-
- ;de=ix+head
- ld (ix+tail+1),d
- ld (ix+tail),e
- 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
-
-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
-
- 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
-
- ld a,(gameCar)
- and _datasingl
- jr z,hiscorecheckdone
-checkhiscore:
- ld de,(worm1+score)
-HiScore =$+1
- ld hl,0
- ld a,e
- cp l
- jr c,NotNewHigh
- ld a,d
- cp h
- jr c,NotNewHigh
- ld (HiScore),de
- ex de,hl ;disp.new hiscore
-NotNewHigh:
- ex de,hl
- ld hl,txthiscore
- call _puts
- ex de,hl
- call showHL
-hiscorecheckdone:
-
-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 hl,_asapvar
- rst 20h ;_ABS_MOV10TOOP1
- rst 10h ;_FINDSYM
- call _swapt_ ;_ex_ahl_bde
- ld de,4
- add hl,de
- adc a,0
- 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)
- set 2,(iy+13)
- jp _clrWindow
-
-;-----------------------------
-;----------- worm ------------
-;-----------------------------
-
-inlink:
- ld a,0
-sendbyte =$-1
- ld b,(ix+left)
- dec b
- jr z,receivefirst
- call send
- call receive
- ld l,a
- ret
-receivefirst:
- push af
- call receive
- ld l,a
- pop af
- push hl
- call send
- pop hl
- ret
-
-inkeys: ;use jp not call!
- out (1),a
- in a,(1)
- ld b,a
- and (ix+right)
- jr z,notright
- ld a,l
- add a,8
- ld l,a
-notright:
- ld a,b
- and (ix+left)
- jr z,donediddelydone
- ld a,l
- sub 8
- ld l,a
- 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,inkeys
- call inlink
-donediddelydone:
- ld a,l
- ld (sendbyte),a
- ld (ix+heading),l
- ld h,(ix+heading+1)
-
- ld c,(ix+pos)
- ld b,(ix+pos+1)
- ld e,(ix+pos2)
- ld d,(ix+pos2+1)
-
-;-------- move worm ----------
-
-Wormmove:
- push bc ; >> pos
- ld a,(hl)
- add a,a
- add a,d
- ld d,a
- bit 7,(hl)
- jr z,notnegX
- dec b
-notnegX:
- jr nc,notmoveX
- inc b
-notmoveX:
- ld a,l
- add a,$40
- ld l,a
- ld a,(hl)
- add a,a
- add a,e
- ld e,a
- bit 7,(hl)
- jr z,notnegY
- dec c
-notnegY:
- jr nc,notmoveY
- inc c
-notmoveY: ;bc=newpos
- ld (ix+pos2),e
- ld (ix+pos2+1),d
- ld (ix+pos),c
- ld (ix+pos+1),b
-
-;-check-
- pop hl ; << pos (old)
- ld a,h
- sub b
- and 1
- ld h,a
- ld a,l
- sub c
- and 1
- add a,h
- ld d,4
- jr z,GotFour
- xor 3
- ld d,a
-GotFour:
- call chk4pixels
- rl d
- 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
- ld a,b
- sub h
- inc a
- cp 4
- jp nc,WormDead
- ld a,c
- sub l
- inc a
- cp 4
- jp nc,WormDead
- 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
- 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 hl ; << call
- pop hl ; << call
- pop de ; << levelp new
- cp NUM_LEVELS
- jp z,Exit
- ld a,(gameCar)
- and _datanextl
- jp nz,StartLevel
- jp Exit
-
-;-----------------------------
-
-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
- inc hl
- ld (hl),b
- inc hl
- res resbit,h
- ld (ix+head),l
- ld (ix+head+1),h
-
- call set4pixels
-
- ld a,(ix+grow)
- dec a
- jr z,removetail
- ld (ix+grow),a
- ret
-
-removetail:
- ld l,(ix+tail)
- ld h,(ix+tail+1)
- ld c,(hl)
- inc hl
- ld b,(hl)
- inc hl
- res resbit,h
- ld (ix+tail),l
- ld (ix+tail+1),h
-
-res4pixels:
- call ResPixel
- inc b
- call ResPixel
- inc c
- call ResPixel
- dec b
-ResPixel:
- call FindPixel
- cpl
- and (hl)
- ld (hl),a
- ret
-
-;-----------------------------
-;---------- ball -------------
-;-----------------------------
-
-handlethatneatlittleball:
- ld a,0
-nrballs =$-1
- or a
- ret z
-ballpos =$+1
- ld bc,$0503
- call res4pixels
- dec c
- ld e,b
-ballxmove:
- inc b ;=%000100 dec=%000101
- call checkballhit
- jr z,ballxdone
- ld b,e
- ld hl,ballxmove
- call letsmovetheotherway
-ballxdone:
- ld e,c
-ballymove:
- inc c ;=%001100 dec=%001101
- call checkballhit
- jr z,balldone
- ld c,e
- ld hl,ballymove
- call letsmovetheotherway
-balldone:
- ld (ballpos),bc
- jp set4pixels
-
-letsmovetheotherway:
- ld a,1
- xor (hl)
- ld (hl),a
- ret
-
-checkballhit:
- ld d,0
- call 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
-
- 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
- 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
- and (hl)
- ret z
- dec d
- ret
-
-;CLEM's FIND_PIXEL (131 cycles; 28 bytes)
-; (b,c) to hl:a; destroyes: -)
-
-FindPixel:
- ld h,ScrBuffer/$800
- ld a,c
- add a,a
- add a,a
- ld l,a ;hl=4*y + offset/8
- ld a,b
- rra
- add hl,hl
- rra
- add hl,hl
- add hl,hl ;hl=32*y + offset
- 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
-
-;----------- 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
- 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
- call showstat
- 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
- 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
- ld a,(gameCar)
- and _datafoodl
- pop ix
- ret z
-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
-__vputs:
- push ix
- call _vputs
- pop ix
- ret
-
-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
- ld a,l
- add a,'0'
- 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
-
-;-----------------------------
-
-DisplayField:
- ld a,c
- sub 29
- jr nc,NotMinYScroll
- xor a
-NotMinYScroll:
- cp 43
-FieldHeight =$-1
- jr c,NotMaxYScroll
- ld a,(FieldHeight)
-NotMaxYScroll:
- ld l,a
- ld h,0
- add hl,hl
- add hl,hl
- add hl,hl
- add hl,hl
- add hl,hl
- push bc ; >> 1
- push de ; >> 2
- ld de,ScrBuffer
- add hl,de
- ld a,b
- sub 64
- jr nc,NotMinXScroll
- xor a
-NotMinXScroll:
- cp 128
-FieldWidth = $-1
- jr c,NotMaxXScroll
- ld a,(FieldWidth)
-NotMaxXScroll:
- push af ; >> 3
- and %11111000
- rra
- rra
- rra
- ld c,a
- ld b,0
- ld de,DispBuffer
- pop af ; << 2
- and %00000111
- push af ; >> 3
- cp 6
- jr c,CopyScreen
- inc c
-CopyScreen:
- add hl,bc
- ld b,57
-CopyScreenLoop:
- push bc ; >> 4
- ld bc,16
- ldir
- ld c,16
- add hl,bc
- pop bc ; << 3
- djnz CopyScreenLoop
- pop af ; << 2
- ld c,$b7 ;or a
-Bit0:
- jr nz,Bit1
- halt
- halt
- jr AfterShiftDelay
-Bit1:
- dec a
- jr nz,Bit2
- call ShiftRight1
- jr AfterShiftDelay
-Bit2:
- dec a
- jr nz,Bit3
- ld a,2
- call ShiftRight
- jr AfterShiftDelay
-Bit3:
- dec a
- jr nz,Bit4
- call Chunk
- call ShiftLeft1
- jr AfterShift
-Bit4:
- dec a
- jr nz,Bit5
- call Chunk
- jr AfterShiftDelay
-Bit5:
- dec a
- jr nz,Bit6
- call Chunk
- call ShiftRight1
- jr AfterShift
-Bit6:
- dec a
- jr nz,Bit7
- ld a,2
- call ShiftLeft
- jr AfterShift
-Bit7:
- call ShiftLeft
-AfterShiftDelay:
- halt
-AfterShift:
- ld hl,DispBuffer
- ld de,$fc00+$70
- ld bc,1024-$70
- ldir
- pop de ; << 1
- pop bc ; << 0k
- ret
-
-ShiftRight1:
- ld a,1
-ShiftRight:
- ld (ShiftRightCounter),a
- ld a,c
- ld (ShiftRightChunk),a
- ld c,16
- add hl,bc
- ld b,57
-ShiftRightLoop:
- push bc
- ld bc,-32
- add hl,bc
- ex de,hl
- ld a,(de)
-ShiftRightChunk:
- or a
- call c,_SHLACC
- ld c,0
-ShiftRightCounter = $-1
-ShiftRowsLeft:
- push hl
- rla
- ld b,16
-ShiftRowLeft:
- dec hl
- rl (hl)
- djnz ShiftRowLeft
- pop hl
- dec c
- jr nz,ShiftRowsLeft
- ld bc,-16
- add hl,bc
- ex de,hl
- pop bc
- djnz ShiftRightLoop
- ret
-
-ShiftLeft1:
- ld a,1
-ShiftLeft:
- ld (ShiftLeftCounter),a
- ld a,c
- ld (ShiftLeftChunk),a
- rla
- jr nc,ShiftLeftSameByte
- dec hl
-ShiftLeftSameByte:
- ex de,hl
- ld bc,-16
- add hl,bc
-NewSprite:
- ex de,hl
- ld b,57
-ShiftLeftLoop:
- push bc ; >> 1
- ld bc,-32
- add hl,bc
- ex de,hl
- ld a,(de)
-ShiftLeftChunk:
- or a
- call c,_SHRACC
- ld c,0
-ShiftLeftCounter = $-1
-ShiftRowsRight:
- push hl ; >> 2
- rra
- ld b,16
-ShiftRowRight:
- rr (hl)
- inc hl
- djnz ShiftRowRight
- pop hl ; << 1
- dec c
- jr nz,ShiftRowsRight
- ld bc,-16
- add hl,bc
- ex de,hl
- pop bc ; << 0k
- djnz ShiftLeftLoop
- ret
-
-Chunk:
- push hl ; >> 1
- push de ; >> 2
- ld c,16
- add hl,bc
- ld b,57
-ChunkScreen:
- push bc ; >> 3
- ld bc,-32
- add hl,bc
- ex de,hl
- ld a,(de)
- call _SHRACC
- ld b,16
-ChunkRow:
- dec hl
- rld
- djnz ChunkRow
- ex de,hl
- pop bc ; << 2
- djnz ChunkScreen
- pop de ; << 1
- pop hl ; << 0k
- 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,32
- jr nc,LinePositiveY
- neg
- ld de,-32
-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
-
-linkfail:
- jp Exit
-
-LinkPrep:
- 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
-ReceiveByte:
- call LinkPrep
-ReceiveBits:
- ld de,TIMEOUT
-WaitRecBit:
- call checklink
- jr z,LinkFailed
- cp %11
- jr z,WaitRecBit
-ReceiveCont:
- 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 (7),a
- ld de,TIMEOUT
-WaitAckRec:
- call checklink
- cp 0
-AckBit =$-1
- 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
-ReadyRec:
- djnz ReceiveBits
- jr LinkSuccess
-
-SendByte:
- call LinkPrep
- ld c,a
- inc b
- jr SendAcked
-SendBits:
- 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 (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,%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,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
-
-LevelsR:
- .db 8,5,24,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 4,5,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 5,4,15,0 ;peas,speed,begin_size,balls
- .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,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 9,4,15,0
- .db $40,8,2
- .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 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,2,15,0
- .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,15,0
- .db 64,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 72,52,$c0
- .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
-
-
-;-----------------------------
-;---------- data -------------
-;-----------------------------
-
-TrigPrecalc:
-.db 0, 3, 6, 9, 12, 15, 18, 21
-.db 24, 27, 30, 33, 36, 39, 42, 45
-.db 48, 51, 54, 57, 59, 62, 65, 67
-.db 70, 73, 75, 78, 80, 82, 85, 87
-.db 89, 91, 94, 96, 98,100,102,103
-.db 105,107,108,110,112,113,114,116
-.db 117,118,119,120,121,122,123,123
-.db 124,125,125,126,126,126,126,126
-.db 127
-
-txtWelcome: .db "Welcome to Worm!! ",
- .db "by Shiar",0
-txtOptions: .db "Options",0
-txtGame: .db "Singleplayer",0 ;0
-txtGame2: .db "Peaworm ",0 ;1
- .db "Deathmatch",0 ;2
- .db "Foodmatch ",0 ;3
- .db "LinkMatch",0 ;4 (>options)
- .db "Hunting ",0 ;5
- .db "Race ",0 ;6
- .db "CTF ",0 ;7
- .db "Domination",0 ;(>=8)
-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
-txthiscore:.db "HiScore:",0
-txtReady: .db "Prepare!",0
-txtposReady = 7
-txtGO: .db "----- GAME OVER -----",0
-
-gamesdata:
-
-_datalink = %00000001
-_datasingl = %00001000 ;singleplayer=1
-_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
-datapeas: .db %00011010
- .dw LevelsS
-datadeathm: .db %00000010
- .dw LevelsDM2
-datafoodm: .db %10010000
- .dw LevelsDM
-datalinkm: .db %00000011
- .dw LevelsDM
-datahuntin: .db %10100000
- .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
-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 ;912 bytes
-
-ScrBuffer = $8000 ;-$A1FF (32x256)
-SinCosTable = $A200 ;-$A300 (4x64)
-
-;-----------------------------
-;----------- end -------------
-;-----------------------------
-
-.end
\ No newline at end of file