3 ; Release Date : summer 2001
4 ; Filename : wormy.86p (5kb)
6 ; Email Address : shiar0@hotmail.com
8 ; Web Page : www.shiar.org
9 ; Description : ruling Nibbles-like game 1-4 players
10 ; Where to get this game : www.shiar.org (home of Wormy)
11 ; Other games by author(s) : Nemesis beta
12 ; Additional Credits to : Matthew Shepcar (wrote original Peaworm, end'98)
13 ; Jonah Cohen (helped writing worm)
15 ;-----------------------------
16 ;----------- TO-DO -----------
17 ;-----------------------------
22 ; * check levels/gametype
23 ; * enough hiscore saves!
25 ; 1% * misc (pollish, bugs, &&&)
27 ; 2% * fix deaths linkplay and transmit game/level data
28 ; 2% * make linkplay available for all gametypes (not just deathmatch)
30 ; 1% * fix pea XOR problem in ctf (+dom?)
32 ; 1% * domination?: take control points by running over them and hold them
34 ;100% = bugs fixed + levels done
36 ;-----------------------------
37 ;-----------------------------
38 ;--------- W O R M ---------
39 ;-----------------------------
40 ;-----------------------------
42 #define buffer ;use display buffer (otherwise write directly to screen)
43 #define readymask ;"greys" out the field before starting a level
44 ;#define hlines ;horizontal-line routine for more speed drawing boxes
45 ;(doesn't work properly)
47 ;#define readytext ;displays "prepare" before level starts
48 ;#define invincible ;worms cannot die =)
55 #include "ti86asm.inc"
57 _SHRACC = $4383 ;4x srl a
58 _SHLACC = $438B ;4x sll a
59 _divHLby10 = $4044 ;hl=hl/10
60 _divAby10 = $4DAF ;a=a/10
61 _HLTIMES10 = $41BF ;hl=hl*10
62 _cphlde = $403C ;cp hl,de
63 _clrWindow = $4A86 ;clear screen
64 _asapvar = $D6FC ;own name (worm)
65 _MOV4B = $429B ;4x ld (de),(hl)
66 _MOV5B = $4297 ;5x ld (de),(hl)
67 _mov9b = $4283 ;9x ld (de),(hl)
68 _ldHLind = $4010 ;ld hl,(hl)
69 _swapt_ = $45F3 ;ex_ahl_bde
70 _Get_Word_ahl = $521D ;ld de,(ahl)
71 _Set_Word_ahl = $5221 ;ld (ahl),de
72 _INC_PTR_AHL = $4637 ;ahl=ahl+1
73 _AHL_PLUS_2_PG3 = $4C3F ;ahl=ahl+2
74 _SET_ABS_SRC_ADDR = $4647 ;set source for mm.ldir =ahl
75 _LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source
76 _SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl
77 _SET_MM_NUM_BYTES = $464F ;number of bytes for mm.ldir = ahl
78 _mm_ldir = $52ED ;24bit ldir
79 _RAM_PAGE_1 = $47E3 ;set $8000+ to page 1
80 _RAM_PAGE_7 = $47F3 ;"""" 7
81 _PTEMP_END = $D29A ;end of VAT
82 _load_ram_ahl = $462F ;ahl->page+hl
83 _writeb_inc_ahl = $5567 ;ld (ahl),c
84 _jforce = $409C ;TI-OS stack restored
85 _EXLP = $4493 ;swap (hl),(de) b times
86 _GETB_AHL = $46C3 ;a=(ahl) \ hl=ahl
88 ;-----------------------------
89 ;------- data storage -------
90 ;-----------------------------
94 ScrBuffer = $8820 ;-A7FF (20*FF=1FE0)
95 worm2p = $A800 ;-ABFF (400) %10101O00
96 worm1 = $AC00 ;-AC1D (31d)
97 worm2 = $AC1F ;-AC3B (1F)
98 worm3 = $AC3E ;-AC59 (1F)
99 worm4 = $AC5D ;-AC77 (1F)
100 balls = $AC7C ;-ACFF (3x43d)
101 SinCosTable = $AD00 ;-AE00 (4x40)
102 ;free $AE01 ;-AFFF (1FF)
103 worm1p = $B000 ;-B7FF (800) %1011O000
104 worm3p = $B800 ;-BBFF (400) %10111O00
105 ;free $BF91 ;-BFFF (6F)
107 ;program $D748 ;-E7FF (106D+4A)
108 ;free $E800 ;-EFFF (800)
109 worm4p = $F000 ;-F3FF (400) %11110O00
110 leveldata = $F400 ;-FA70 (<=671)
116 namelength = $BC00 ;(1) @menu
118 DispBuffer = $BC00 ;(10x57d) @game
123 ;-----------------------------
124 ;------- program start -------
125 ;-----------------------------
140 .db "WORMY by SHIAR -- beta 93%",0
143 .db %10010110,%01101111
144 .db %10110101,%01001011
145 .db %01110011,%01001001
146 .db %00000011,%10000000
147 .db %00000001,%11100000
148 .db %00111000,%11111000
149 .db %01111110,%00111111
150 .db %11101111,%00001111
151 .db %11000011,%10000000
154 levelhead2 = 93 ;wormy levels header = "93"
185 ld bc,int_end-int_handler
192 ld hl,$BFFF ;VAT start
195 ld de,(_PTEMP_END+1) ;VAT end
225 ex de,hl ;ld ahl,(hl)
226 cal _AHL_PLUS_2_PG3 ;string id
227 cal _Get_Word_ahl ;ld de,(ahl)
231 jr nz,_searchnext ;not worm
235 inc ix ;save level's ahl
250 cal _Get_Word_ahl ;ld de,(ahl++)
255 ld a,e ;set new level
278 cal _vputs ;"< Select levels: >"
294 ex de,hl ;ahl=ade=(hl)
295 cal _load_ram_ahl ;hl=ahl
296 ld b,(hl) ;b=title size
329 ld b,-3 ;level selected
335 pop bc ;GET_KEY destr. b
350 add a,3 ;sellev+3 (#0==-3)
359 or a ;levelfile on page 0 (=internal)
370 cal _GETB_AHL ;ld a,(ahl)
375 cal _INC_PTR_AHL ;ahl++
377 jr nz,skiptitle ;goto #0-terminator
380 ld (leveldataSize),de
389 cal _SET_ABS_SRC_ADDR ;levelsstart
392 cal _SET_ABS_DEST_ADDR ;store in mem.
395 cal _SET_MM_NUM_BYTES
398 cal _LOAD_ABS_SRC_ADDR ;->ahl
405 ldi ;(de),(hl)\inc hl
410 res 2,(iy+13) ;appAutoScroll
418 ld (hl),1 ;def=level#1
422 ;-----------------------------
423 ;----- build trig tables -----
424 ;-----------------------------
449 ;-----------------------------
450 ;---------- menu -------------
451 ;-----------------------------
453 DisplayMenu: ;---draw menu---
465 ld hl,dispmenusets ;mainMenu
466 psh hl ;jump here after ret
469 ;Mode|Level|Limit|Worms|worm #|controls
470 ; jr dispmenucommon ;cal
473 ld de,$FD80 ;begin pos
497 hr: ;draw horizontal line at hl
510 ;Back|Lives|Limit|Speed|Rotation|Growth
525 inc hl \ inc hl \ inc hl
543 inc a ;-1=None; 0..98->1..99
558 cal cshowA ;turn speed
565 ld a,(hl) ;(scorelimit)
570 jr z,optionMenu ;do not display 0 behind 'None'
582 jp z,dispmainmenu ;mainMenu
626 cal loadgamecar ;a=(hl)
629 jr nc,optionMenu ;>99
633 jp dispomenusets ;optionMenu
636 sub 1 ;dec does not set cf
644 jr nc,optionMenu ;>99
647 jr _dispomenusets ;optionMenu
650 sub 1 ;dec does not set cf
657 ld a,(hl) ;(scorelimit)
664 jr nc,_optionMenu ;>98
668 jr _dispomenusets ;optionMenu
674 jr z,_optionMenu ;<-1
681 inc hl ;=saves 2 bytes :P
690 jr nc,_optionMenu ;>25
693 jr _dispomenusets ;optionMenu
708 jr nc,_optionMenu ;>98
711 jr _dispomenusets ;optionMenu
717 jr z,__optionMenu ;<-1
729 dec a ;2nd item: level
731 sub 3 ;5th item: wormname
735 jp LetsGetThisPartyOn ;otherwise
754 jp z,changelevel ;&&&jr??
766 jr nc,mainMenu ;may not become >(nrworms)
770 jr _dispmenusets ;mainMenu
783 ; jr z,bchangecurworm
788 jr nz,changedcurworm ;save >0
794 jr c,mainMenu ;type 0/1
799 jr nc,mainMenu ;may not be >4
803 jr dispmenusets ;mainMenu
808 jr nz,changednrworms ;save >0
819 jr dispmenusets ;mainMenu
826 inc hl ;hl=loadgamecar+2
828 ld a,(hl) ;(curlevel)
834 cp (hl) ;max level for sel.game
840 jr dispmenusets ;mainMenu
843 ld a,(hl) ;(curlevel)
868 cal getcustomkey ;left
869 cal getcustomkey ;right
872 ;---display current settings---
882 add hl,de ;hl=posGame+(Gametype)
883 ld a,(hl) ;str.offset
887 ld (CURtxtGame),hl ;save for g/o
888 cal _vputs ;Singleplayer
910 pop hl ;loadgamecar; hl++
912 ld a,(hl) ;(curlevel)
927 ld hl,$363E ;controls
933 ;--- handle menukeys ---
942 pop bc ;GET_KEY destr. b
952 menupos: ;highlight #b
965 add hl,hl ;$FD20+item*96
998 getwormname: ;of (curworm)
1016 cal _puts ;"Enter name player "
1086 .db 0,".<>!",0,0,0,0 ;down,L,R,up
1087 .db 0,"XTOJE0",0 ;enter..clear
1088 .db " WSNID9",0 ;(-)..custom
1089 .db "ZVRMHC8",0 ;dot..del
1090 .db "YUQLGB7#" ;0..xvar
1091 .db $D9,"-PKFA6'" ;on..alpha
1092 .db "54321*",0,$D0 ;F5..more
1097 ld hl,$FD97 ;begin pos
1098 ld de,7 ;bytes to add
1099 ld a,35 ;nr of lines
1101 ld c,9 ;bytes to clear
1106 jr nz,clroldsetsloop
1109 jr nz,clroldsettings
1112 skiplevel: ;@hl - destr:ab - alter:hl
1117 ld b,(hl) ;spritesize
1128 inc b ;multiplayer lvl
1130 inc b ;skip other 3 worms (9 bytes)
1164 ;build: c=(gameCar)=(hl-1)
1165 ; a=(wormbeglives)=(hl)
1171 add a,a ;8 bytes per mode
1183 ;-----------------------------
1184 ;-------- start game ---------
1185 ;-----------------------------
1189 ld (CheckExit),a ;set exit state
1207 ld (turnright),a ;more efficient
1211 cal _HLTIMES10 ;hl=10*(hl)
1216 ld a,(Gametype) ;8bytes -> 7bytes
1221 add a,24+1 ;go to datalevels
1223 sbc hl,de ;datalevels
1225 cal _ldHLind ;ld hl,(hl)
1226 pop de ;de=loadgamecar
1228 ld a,(de) ;(curlevel)
1232 dec d ;levels to skip
1256 jp DisplayMenu ;return to menu
1275 ;-----------------------------
1276 ;--------- game over ---------
1277 ;-----------------------------
1283 ld a,4 ;4x (all worms)
1293 ld (hl),b ;score+1=0
1300 ex de,hl ;de=wormX+head
1304 jr nz,createwormsloop
1306 pop hl ;begin of current level
1315 dec (hl) ;curlevel-- (not beyond last lvl)
1319 ;show end msg or smtn
1321 psh bc ;where to go afterwards
1322 inc hl ;location of ending-code
1323 jp (hl) ;go there ("call")
1331 ld (hl),a ;store new speed
1352 ld b,0 ;bc=sprite size
1353 add hl,bc ;hl=behind sprite
1360 setsprite: ;de=@sprite ;a=sprsize
1393 ld a,SinCosTable/256
1404 ld bc,(worm2-worm1)-5
1409 ;-------- draw level ---------
1435 add hl,hl ;32=scr.width
1503 ;-----------------------------
1505 psh hl ; >> levelp new
1540 ld hl,4+(txtposReady*256)
1551 jr z,initfinished ;no link
1553 SwapPos: ;$18 xx -> $E6 xx
1557 ld (worm1+left),a ;worm 1...
1558 ld (worm3+left),a ;and worm 3 via link
1576 ld (worm2+left),a ;worm 2+4..
1577 ld (worm4+left),a ;..over link
1596 ;-----------------------------
1597 ;----------- LOOP ------------
1598 ;-----------------------------
1601 ld bc,(worm1+pos) ;camera worm #1
1603 or a ;if #1 not over link
1605 ld bc,(worm2+pos) ;otherwise view from #2
1607 cal DisplayField ;display piece of level
1622 jr nz,screeninvertloop
1635 ld (handledworm),a ;reset
1651 cal nz,handlethoseneatlittleballs
1664 inc (hl) ;1..nrworms
1667 ;-----------------------------
1668 ;---------- keys -------------
1669 ;-----------------------------
1684 rla ;=$17 (c=EXIT-key)
1695 ld (ix+delay),respawndelay
1714 ld (ix+pos2+1),a ;x2
1722 ret nz ;HandleWorm done
1724 or a ;0=no live limit
1725 ret z ;don't end game
1728 jr nz,anyworm ;if not Tron, quit at any worm's death
1731 ld hl,worm1+lives-(worm2-worm1)
1733 xor a ;check for 0 lives
1735 add hl,de ;next worm
1737 ret nz ;any >0: don't exit
1740 ld a,$A7 ;exit@end of turn
1741 ld (CheckExit),a ;set exit state
1749 out (7),a ;both wires low = game over signal
1755 cal menuinvloop ;invert
1758 cal menuinvloop ;<hr>
1761 cal menuinvloop ;<hr>
1780 cal _vputs ;Died Score
1794 cp (hl) ;input=0 = link
1811 ld a,(hl) ;worm+died
1819 cal _ldHLind ;ld hl,(hl)
1820 cal showHL ;worm+score
1826 dnz displayWormStats
1829 or a ;singleplayer (0) only
1830 jr nz,hilevelcheckdone
1835 jr c,hilevelcheckdone
1836 ld (hl),a ;save local
1841 hilvlposhl =$-2 ;save external
1842 cal _writeb_inc_ahl ;ld (ahl),c
1847 jr z,hiscorecheckdone ;no SP
1849 cal loadhiscoreposinahl
1850 cal _Get_Word_ahl ;de=old_hi
1858 jr c,NotNewHigh ;New<Old
1859 jr nz,newhigh ;New>Old
1863 jr nc,NotNewHigh ;new<old
1867 cal loadhiscoreposinahl
1868 cal _Set_Word_ahl ;de->(ahl)
1871 NotNewHigh: ;de=current hiscore
1892 ;x123456789012345678901
1893 ;>>>>>> GAME OVER <<<<<
1898 ;6Worm#02 @ 05 00120
1905 rst 20h ;_ABS_MOV10TOOP1
1907 ld hl,savestart-_asm_exec_ram+4
1911 cal _SET_ABS_DEST_ADDR
1915 cal _SET_ABS_SRC_ADDR
1916 ld hl,saveend-savestart
1917 cal _SET_MM_NUM_BYTES
1926 loadhiscoreposinahl:
1930 ld l,h ;hl=0 for peaworm and singleplayer
1933 ld l,a ;skip peaworm slots for tron mode
1936 ld b,0 ;offset 0 for SP
1939 ld b,a ;levels to skip (including 1 for singleplayer)
1941 inc hl ;add one word per level
1942 dnz addlevelposition
1944 add hl,hl ;one WORD per hiscore
1950 adc a,0 ;ahl=saveloc
1953 ;-----------------------------
1954 ;----------- worm ------------
1955 ;-----------------------------
1960 cal saverespawncounter
1966 jr DoesWormTailEqualsWormHead ;chk4 size=0
1977 DoesWormTailEqualsWormHead:
1979 jr nz,removewormloop
1983 jr nz,safewormsizedone
1991 ld (ix+tail),e ;head=tail/size=0
1997 jr nz,saverespawncounter
2021 ld a,%01111111 ;default
2024 dnz bitmask ;a/8 times
2025 out (1),a ;send bitmask
2026 in a,(1) ;input keys
2031 dnz keybit ;check match (cf set)
2034 inkeys: ;use jp not call!
2053 jr z,inlink ;input by link
2054 cal inkeys ;input by keys
2058 ld c,l ;send our keys
2065 ;------- handle worm ---------
2116 ;-------- move worm ----------
2144 notmoveY: ;bc=newpos
2151 pop hl ; << pos (old)
2169 ;--------- worm hit ----------
2175 cal z,checkhitotherworm
2177 and _datamultpeas ;&&bit
2181 jp z,WormDead ;no food
2188 cal DrawPea ;remove pea
2200 jp nz,Drawworm ;continue
2206 jp nz,Exit ;stack restored
2217 cal IncScore ;score+(40*level)
2221 pop hl ; << levelp new
2225 chkpeahit: ;hl=peapos
2254 ld hl,(peaspos) ;1st pea
2260 ld hl,(peaspos+2) ;2nd pea
2263 pop hl ;(peapos) 1st pea
2264 jp c,WormDead ;stopworm ;own pea hit
2266 ld a,e ;peek a (that's x86 asm for pop\push ;)
2269 ld hl,(peaspos+2) ;2nd pea
2282 cal DrawPea ;restore own flag
2283 jr sillylabel ;inv both\die
2285 hitflag: ;correct pea hit
2303 ret ;Z=yes: no flag taken
2305 ;-----------------------------
2324 jr nz,nextotherwormbit
2349 .db $dd,$7d ;ld a,lx
2352 jr nz,chkworm2 ; ret nz
2377 ;-------- draw worm ----------
2385 cal z,checkhitlapline
2391 ret z ;keep tail in "Tron"
2434 ;-----------------------------
2435 ;---------- ball -------------
2436 ;-----------------------------
2438 handlethoseneatlittleballs:
2484 bit 1,d ;1=up; 0=down
2514 letsmovetheotherway:
2529 ;-----------------------------
2530 ;----------- procs -----------
2531 ;-----------------------------
2535 ld a,%10000000 ;all key-masks
2538 inc a ;cp %11111111 (no keys pressed)
2539 jr nz,releasekeys ;keep waitin
2540 cal GET_KEY ;clear buffer
2586 jr nz,NewPea ;pixel found
2593 ;all ok; empty space
2602 ;----------- score -----------
2622 jr z,scorecommon ;hl/1000 not increased
2630 jr c,showstats ;<0=0
2638 jr z,showstats ;de=0=no limit
2786 ;-----------------------------
2904 ld (ShiftRightCounter),a
2906 ld (ShiftRightChunk),a
2920 ShiftRightCounter = $-1
2942 ld (ShiftLeftCounter),a
2944 ld (ShiftLeftChunk),a
2946 jr nc,ShiftLeftSameByte
2965 ShiftLeftCounter = $-1
2976 jr nz,ShiftRowsRight
3010 ;----------- draw ------------
3024 CheckPixel: ;at bc in d
3031 ;CLEM's FIND_PIXEL (131+? cycles; 28+4 bytes)
3032 ;(b,c) to hl:a; "destroyes" ahl
3034 FindPixel: ;(b,c) to hl:a
3067 PutSprite: ;||@(b,c)
3068 ;by SHIAR only ix saved
3143 drawbox: ;(d,e)-(h,l)
3151 drawhline: ;(d,e)-(h,e)
3157 ld c,a ;starting mask
3199 drawline: ;(d,e)-(h,l)
3300 drawcircle: ;(d,e),h ;de=x,y; h=z
3311 ex (sp),hl ;push zz \ pop x,y
3312 cal circledraw ;(x-xx,y+yy)-(x+xx,y+yy)
3313 ;(x-xx,y-yy)-(x+xx,y-yy)
3314 cal circledraw ;(x-yy,y+xx)-(x+yy,y+xx)
3315 ;(x-yy,y-xx)-(x+yy,y-xx)
3317 ex (sp),hl ;push x,y \ pop zz
3320 dec a ;-256<h<0 = $FF**
3322 jr z,circlenext ;jump if zz<0
3326 add a,a ;a=2yy-2 ;nc
3328 sbc hl,de ;zz=zz-2yy+2
3336 add hl,de ;zz=zz+2xx+3
3345 circledraw: ;destr:de
3350 add hl,bc ;h=x+xx; l=y+yy
3352 cal drawline ;(h-b,l+c)-(h+b,l+c)
3358 cal drawline ;(h-b,l-c)-(h+b,l-c)
3359 ld a,b ;swap xx and yy
3372 ;-----------------------------
3373 ;----------- link ------------
3374 ;-----------------------------
3378 out (7),a ;raise both wires = link ok
3384 checklink: ;load wires in A and check for timeout
3385 dec de ;decrease timer
3388 jr nz,linkfine ;ok if de>0
3391 ld a,0 ;losses so far
3393 inc a ;and this is another one
3395 pop de ;return from link
3396 cp lossout ;quit if too many errors
3397 ret c ;otherwise just continue
3418 Qsend: ;try to send 8 bits in C; CF=error --- destr:abcde
3420 and %11 ;both wires low = exit signal
3421 jr z,linkerr ;error otherwise
3422 ld b,8 ;bits to send
3425 rl c ;bit to send in cf
3426 ld a,D0LD1H ;0: lower white
3428 ld a,D0HD1L ;1: lower red
3430 out (7),a ;lower one (send bit)
3432 cal checklink ;other calc must lower other wire
3434 ld a,D0HD1H ;raise one, ok to raise other
3438 cp %11 ;both raised (by other calc)
3441 dnz sendloop ;repeat for all bits
3443 ld (linklosses),a ;reset number of losses
3450 Crecv: ;--- receive 8 bits into A/C --- destr:abcdehl ---
3452 ret nc ;return if all went ok
3453 jr Crecv ;and try again
3455 Qrecv: ;--- receive 8 bits into A/C; CF=error --- destr:abcde ---
3458 jr z,linkerr ;both low = error, quit
3459 ld b,8 ;bits to receive
3465 jr z,recvwait ;both high = nothing sent (yet)
3466 rra ;received bit in cf
3468 jr c,received ;lower white wire as well
3469 ld a,D0HD1L ;lower red
3472 out (7),a ;both wires low
3475 jr z,recvwaitack ;same wire will be raised again by other calc
3477 out (7),a ;raise both
3479 dnz recvloop ;repeat for all bits
3481 ld (linklosses),a ;reset number of losses
3485 ;-----------------------------
3486 ;---------- levels -----------
3487 ;-----------------------------
3490 .db 5,4,15,15,0,0 ;peas,speed,growth,begin_size,sprite,balls
3491 .db 0,2,63 ;start d, y, x
3492 .db 128,57 ;field width (128-255), height (57-255)
3493 .db 0 ;no additional lines, boxes
3499 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3504 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3505 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3510 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3515 LevelDefT: ;tron=no delay
3517 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3518 .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
3524 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3525 .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
3530 ;-----------------------------
3531 ;---------- data -------------
3532 ;-----------------------------
3536 .db %00000000,%00000000,%00000111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01110000,%00000000,%00000000,%00000000,%00000000,%00000000
3537 .db %00000000,%00000000,%00001111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01111000,%00000000,%00000000,%00000110,%01111011,%00100000
3538 .db %00000000,%00000000,%00011100,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00011100,%00001110,%00000000,%00001001,%00010011,%01000000
3539 .db %00000000,%00000000,%00011000,%00011111,%00000000,%01111111,%11000000,%00111100,%00011110,%01111000,%00001100,%00011111,%00000000,%10100111,%00110000,%10000000
3540 .db %00000000,%00000000,%00111000,%00111111,%10000000,%11111111,%11100000,%11111110,%00111111,%11111100,%00001100,%00111011,%00000000,%10100001,%00001001,%01100000
3541 .db %00000000,%00000000,%00110000,%01110001,%11000001,%11000000,%01110001,%11100110,%01110011,%11001110,%00001100,%00110001,%10000000,%01001110,%01110010,%01100000
3542 .db %00000000,%00000000,%00110000,%01100000,%11000001,%10000000,%00111001,%10000000,%01100111,%11100110,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
3543 .db %00000000,%00000000,%00110000,%01100000,%11000001,%10110000,%00011011,%10000000,%11101110,%01110111,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
3544 .db %00000000,%00000000,%00110000,%01110001,%11000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000111,%11100001,%10000000,%00000000,%00000000,%00000000
3545 .db %00000000,%00000000,%00110000,%00110001,%10000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000011,%11000011,%10000000,%00000000,%00000000,%00000000
3546 .db %00000000,%00000000,%00111000,%00111011,%10000011,%10110000,%00011011,%00000000,%11001110,%01110011,%00000000,%00000011,%00110101,%01001001,%10000000,%00000000
3547 .db %00000000,%00000000,%00011000,%00011111,%00000011,%00110000,%00011011,%00000000,%11000111,%11100011,%10000000,%00000011,%01000101,%00010101,%01000011,%01100011
3548 .db %00000000,%00000000,%00011100,%00001110,%00000111,%00111000,%00111011,%10000000,%11000011,%11000001,%10000000,%00000111,%01100101,%01010101,%01000101,%01010100
3549 .db %00000000,%00000000,%00001110,%00111111,%10001110,%00011100,%01110001,%10000000,%11100000,%00000001,%11100000,%00001110,%00110111,%01011101,%10010101,%01100101
3550 .db %00000000,%00000000,%00000111,%11111011,%11111100,%00001111,%11100001,%11000000,%01100000,%00000000,%11111111,%11111100,%00010101,%01010101,%01000101,%01010101
3551 .db %00000000,%00000000,%00000011,%11100000,%11111000,%00000111,%11000000,%11000000,%01100000,%00000000,%00111111,%11111000,%01100101,%01010101,%01000110,%01010011
3553 txtMenu: .db "Mode",0 ;1st menu item
3558 txtMenu6: .db "controls",0
3559 posMenu: .dw $2418,$231E,$2824,$1F2A,$1730,$1936
3560 txtoMenu: .db "Back",0 ;1st menu item
3566 posoMenu: .dw $2618,$251E,$2524,$222A,$1A30,$1C36
3567 txtGame: .db "Singleplayer",0
3568 txtGame1: .db "Peaworm",0
3569 txtGame2: .db "Tron",0
3570 txtGame3: .db "Deathmatch",0
3571 txtGame4: .db "Foodmatch",0
3572 txtGame5: .db "Timematch",0
3573 txtGame6: .db "Race",0
3574 txtGame7: .db "CTF",0
3575 ; .db "Domination",0 ;8
3576 posGame: .db 0,txtGame1-txtGame
3577 .db txtGame2-txtGame
3578 .db txtGame3-txtGame
3579 .db txtGame4-txtGame
3580 .db txtGame5-txtGame
3581 .db txtGame6-txtGame
3582 .db txtGame7-txtGame
3584 txtNone: .db "None",0
3585 txtDef: .db "Default",0
3588 txtKeyleft: .db ":left",0
3589 txtKeyright:.db "/right",0
3590 txtLevsel: .db $CF," Select levels ",5,0
3591 txtEName: .db "Enter name player ",0
3592 txtWaiting: .db "Waiting...",0
3593 txtReceive: .db "Receiving..." ;,0
3596 .db 0, 3, 6, 9, 12, 15, 18, 21
3597 .db 24, 27, 30, 33, 36, 39, 42, 45
3598 .db 48, 51, 54, 57, 59, 62, 65, 67
3599 .db 70, 73, 75, 78, 80, 82, 85, 87
3600 .db 89, 91, 94, 96, 98,100,102,103
3601 .db 105,107,108,110,112,113,114,116
3602 .db 117,118,119,120,121,122,123,123
3603 .db 124,125,125,126,126,126,126,126
3606 txtLevel: .db "Level ",0
3607 txtWorms: .db "Worms: 0",0 ;follows txtLevel
3608 txtName: .db "Name",0
3609 txtDied: .db "Died " ;follows txtName
3610 txtScore: .db "Score",0 ;follows txtDied
3611 txtLeft: .db " left",0 ;follows txtScore
3612 txthiscore:.db "HiScore:",0
3613 txtReady: .db "Prepare!",0
3615 txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
3617 _datalink = %0000001 ;linkplay
3619 _datafoodl = %0000010 ;left=0 limit
3620 _datanextl = %0000100 ;next level if left=0
3621 _datasingl = %0000100 ;singleplayer=1 (=hiscore+keep_length)
3622 _datamultpeas = %0001000 ;multiple peas=1
3623 _datatime = %0010000 ;time incs score
3624 _datafood = %0100000 ;food present
3625 _datadie = %1000000 ;worm dies on impact
3628 datalevels: .dw LevelDef, LevelDefM
3629 .dw LevelDefT,LevelDefM
3630 .dw LevelDefM,LevelDefM
3631 .dw LevelDefM,LevelDefC
3632 nrlevels: .db 1,3,1,3,3,3,3,1 ;=defaults
3634 savestart: ; �game info
3636 ; | | �nrworms (can be altered by user)
3637 ; | | | �level (set to 1 at startup)
3638 ; | | | | �speed (-1=def)
3639 ; | | | | | �grow speed (-1=none)
3640 ; | | | | | | �turn speed
3641 ; | | | | | | | �score limit
3642 gamesingle = 0 ; | | | | | | | |
3643 datasingle: .db %1100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
3645 datapeas: .db %1100100,1,1,1,-1,-1, 8, 0 ;Peaworm (SP; 1 live)
3647 datatron: .db %1010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
3649 datadeathm: .db %1000000,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
3651 datafoodm: .db %1100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
3653 datatimem: .db %1010000,1,2,1,-1,-1, 8,10 ;Timematch (1 live, 100 score)
3655 datarace: .db %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision)
3657 datactf: .db %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score)
3659 worm1set: .dw worm1p,worm1p
3660 .db %11110111,%00,-01,K_RIGHT,K_LEFT
3661 worm1name: .db "Wormy ",0
3662 worm2set: .dw worm2p,worm2p
3663 .db %11111011,%11,-01,K_F2,K_F1
3664 worm2name: .db "Viper ",0
3665 worm3set: .dw worm3p,worm3p
3666 .db %11111011,%00,-01,K_COMMA,K_STO
3667 worm3name: .db "Nibbler ",0
3668 worm4set: .dw worm4p,worm4p
3669 .db %11111011,%00,-01,K_PLUS,K_ENTER
3670 worm4name: .db "Jim ",0
3687 head = 13 ;4B (head=tail)
3688 tail = 15 ;also@next level
3690 reserv = 18 ;loop (race:lap|ctf:pea)
3701 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3702 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3703 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3704 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3705 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3706 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3707 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3708 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3709 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3710 .db " shiar0@hotmail.com",0
3713 defspriteimg: .db %01100000
3719 .db "Internal Levels" ;,0
3721 .db 0,deflevels/256,deflevels&255
3724 ;-----------------------------
3725 ;----------- end -------------
3726 ;-----------------------------