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
46 ;#define readytext ;displays "prepare" before level starts
47 ;#define invincible ;worms cannot die =)
54 #include "ti86asm.inc"
58 _divHLby10 = $4044 ;hl=hl/10
59 _divAby10 = $4DAF ;a=a/10
60 _HLTIMES10 = $41BF ;hl=hl*10
62 _clrWindow = $4A86 ;clear screen
63 _asapvar = $D6FC ;own name (worm)
64 _MOV4B = $429B ;4x ld (de),(hl)
65 _MOV5B = $4297 ;5x ld (de),(hl)
66 _mov9b = $4283 ;9x ld (de),(hl)
67 _ldHLind = $4010 ;ld hl,(hl)
68 _swapt_ = $45F3 ;ex_ahl_bde
69 _Get_Word_ahl = $521D ;ld de,(ahl)
70 _Set_Word_ahl = $5221 ;ld (ahl),de
71 _INC_PTR_AHL = $4637 ;ahl=ahl+1
72 _AHL_PLUS_2_PG3 = $4C3F ;ahl=ahl+2
73 _SET_ABS_SRC_ADDR = $4647 ;set source for mm.ldir =ahl
74 _LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source
75 _SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl
76 _SET_MM_NUM_BYTES = $464F ;number of bytes for mm.ldir = ahl
77 _mm_ldir = $52ED ;24bit ldir
78 _RAM_PAGE_1 = $47E3 ;set $8000+ to page 1
80 _PTEMP_END = $D29A ;end of VAT
81 _load_ram_ahl = $462F ;ahl->page+hl
82 _writeb_inc_ahl = $5567 ;ld (ahl),c
83 _jforce = $409C ;TI-OS stack restored
84 _EXLP = $4493 ;swap (hl),(de) b times
85 _GETB_AHL = $46C3 ;a=(ahl) \ hl=ahl
87 ;-----------------------------
88 ;------- data storage -------
89 ;-----------------------------
93 ScrBuffer = $8820 ;-A7FF (20*FF=1FE0)
94 worm2p = $A800 ;-ABFF (400) %10101O00
95 worm1 = $AC00 ;-AC1D (31d)
96 worm2 = $AC1F ;-AC3B (1F)
97 worm3 = $AC3E ;-AC59 (1F)
98 worm4 = $AC5D ;-AC77 (1F)
99 balls = $AC7C ;-ACFF (3x43d)
100 SinCosTable = $AD00 ;-AE00 (4x40)
101 ;free $AE01 ;-AFFF (1FF)
102 worm1p = $B000 ;-B7FF (800) %1011O000
103 worm3p = $B800 ;-BBFF (400) %10111O00
104 ;free $BF91 ;-BFFF (6F)
106 ;program $D748 ;-E7FF (106D+4A)
107 ;free $E800 ;-EFFF (800)
108 worm4p = $F000 ;-F3FF (400) %11110O00
109 leveldata = $F400 ;-FA70 (<=671)
115 namelength = $BC00 ;(1) @menu
117 DispBuffer = $BC00 ;(10x57d) @game
122 ;-----------------------------
123 ;------- program start -------
124 ;-----------------------------
139 .db "WORMY by SHIAR -- beta 93%",0
142 .db %10010110,%01101111
143 .db %10110101,%01001011
144 .db %01110011,%01001001
145 .db %00000011,%10000000
146 .db %00000001,%11100000
147 .db %00111000,%11111000
148 .db %01111110,%00111111
149 .db %11101111,%00001111
150 .db %11000011,%10000000
153 levelhead2 = 93 ;wormy levels header = "93"
184 ld bc,int_end-int_handler
191 ld hl,$BFFF ;VAT start
194 ld de,(_PTEMP_END+1) ;VAT end
224 ex de,hl ;ld ahl,(hl)
225 cal _AHL_PLUS_2_PG3 ;string id
226 cal _Get_Word_ahl ;ld de,(ahl)
230 jr nz,_searchnext ;not worm
234 inc ix ;save level's ahl
249 cal _Get_Word_ahl ;ld de,(ahl++)
254 ld a,e ;set new level
277 cal _vputs ;"< Select levels: >"
293 ex de,hl ;ahl=ade=(hl)
294 cal _load_ram_ahl ;hl=ahl
295 ld b,(hl) ;b=title size
328 ld b,-3 ;level selected
334 pop bc ;GET_KEY destr. b
349 add a,3 ;sellev+3 (#0==-3)
358 or a ;levelfile on page 0 (=internal)
369 cal _GETB_AHL ;ld a,(ahl)
374 cal _INC_PTR_AHL ;ahl++
376 jr nz,skiptitle ;goto #0-terminator
379 ld (leveldataSize),de
388 cal _SET_ABS_SRC_ADDR ;levelsstart
391 cal _SET_ABS_DEST_ADDR ;store in mem.
394 cal _SET_MM_NUM_BYTES
397 cal _LOAD_ABS_SRC_ADDR ;->ahl
404 ldi ;(de),(hl)\inc hl
409 res 2,(iy+13) ;appAutoScroll
416 ld (hl),1 ;def=level#1
423 ;-----------------------------
424 ;----- build trig tables -----
425 ;-----------------------------
450 ;-----------------------------
451 ;---------- menu -------------
452 ;-----------------------------
454 DisplayMenu: ;---draw menu---
475 cal _vputs ;Mode \ Level \ Limit \ Worms \ worm # \ controls
479 jr _dispmenusets ;mainMenu
481 hr: ;draw horizontal line at hl
502 jp LetsGetThisPartyOn ;1/2/3/5
521 jp z,changelevel ;&&&jr??
533 jr nc,mainMenu ;may not become >(nrworms)
537 jr _dispmenusets ;mainMenu
550 ; jr z,bchangecurworm
555 jr nz,changedcurworm ;save >0
561 jr c,mainMenu ;type 0/1
566 jr nc,mainMenu ;may not be >4
570 jr dispmenusets ;mainMenu
575 jr nz,changednrworms ;save >0
586 jr dispmenusets ;mainMenu
596 jr nc,_mainMenu ;&& _?
599 jr dispmenusets ;mainMenu
606 cal loadgamecar ;c=(gameCar)
607 ;a=(hl)=(Gametype+1)=(wormbeglives)
612 pop hl ;restore stack
613 jr _mainMenu ;singleplayer (no limit)
616 inc hl ;hl=loadgamecar+2
618 ld a,(hl) ;(curlevel)
624 cp (hl) ;max level for sel.game
630 jr dispmenusets ;mainMenu
633 ld a,(hl) ;(curlevel)
658 cal getcustomkey ;left
659 cal getcustomkey ;right
662 ;---display current settings---
665 ld hl,$FD97 ;begin pos
666 ld de,7 ;bytes to add
669 ld c,9 ;bytes to clear
685 add hl,de ;hl=posGame+(Gametype)
686 ld a,(hl) ;str.offset
690 ld (CURtxtGame),hl ;save for g/o
691 cal _vputs ;Singleplayer
697 cal cshowA ;liveslimit
710 pop hl ;cal loadgamecar
719 pop hl ;loadgamecar; hl++
721 ld a,(hl) ;(curlevel)
736 ld hl,$363E ;controls
742 ;--- handle menukeys ---
751 pop bc ;GET_KEY destr. b
761 menupos: ;highlight #b
774 add hl,hl ;$FD20+item*96
807 getwormname: ;of (curworm)
825 cal _puts ;"Enter name player "
895 .db 0,".<>!",0,0,0,0 ;down,L,R,up
896 .db 0,"XTOJE0",0 ;enter..clear
897 .db " WSNID9",0 ;(-)..custom
898 .db "ZVRMHC8",0 ;dot..del
899 .db "YUQLGB7#" ;0..xvar
900 .db $D9,"-PKFA6'" ;on..alpha
901 .db "54321*",0,$D0 ;F5..more
905 skiplevel: ;@hl - destr:ab - alter:hl
910 ld b,(hl) ;spritesize
921 inc b ;multiplayer lvl
923 inc b ;skip other 3 worms (9 bytes)
957 ;build: c=(gameCar)=(hl-1)
958 ; a=(wormbeglives)=(hl)
975 ;-----------------------------
976 ;-------- start game ---------
977 ;-----------------------------
981 ld (CheckExit),a ;set exit state
990 cal _HLTIMES10 ;hl=10*(hl)
991 ld (scorelimit),hl ;set limit
995 ld a,(Gametype) ;4bytes -> 3bytes
997 add a,24+1 ;go to datalevels
999 sbc hl,de ;datalevels
1004 dec a ;ld a,$FF ;=no_limit
1008 cal _ldHLind ;ld hl,(hl)
1009 pop de ;de=loadgamecar
1011 ld a,(de) ;(curlevel)
1015 dec d ;levels to skip
1039 jp DisplayMenu ;return to menu
1058 ;-----------------------------
1059 ;--------- game over ---------
1060 ;-----------------------------
1066 ld a,4 ;4x (all worms)
1075 ld (hl),0 ;score+1=0
1082 ex de,hl ;de=wormX+head
1086 jr nz,createwormsloop
1088 pop hl ;begin of current level
1097 dec (hl) ;curlevel-- (not beyond last lvl)
1102 ;show end msg or smtn
1104 psh bc ;where to go afterwards
1105 inc hl ;location of ending-code
1106 jp (hl) ;go there ("call")
1128 ld b,0 ;bc=sprite size
1129 add hl,bc ;hl=behind sprite
1136 setsprite: ;de=@sprite ;a=sprsize
1169 ld a,SinCosTable/256
1181 ld bc,(worm2-worm1)-5
1186 ;-------- draw level ---------
1280 ;-----------------------------
1282 psh hl ; >> levelp new
1317 ld hl,4+(txtposReady*256)
1328 jr z,initfinished ;no link
1330 SwapPos: ;$18 xx -> $E6 xx
1334 ld (worm1+left),a ;worm 1...
1335 ld (worm3+left),a ;and worm 3 via link
1353 ld (worm2+left),a ;worm 2+4..
1354 ld (worm4+left),a ;..over link
1373 ;-----------------------------
1374 ;----------- LOOP ------------
1375 ;-----------------------------
1394 jr nz,screeninvertloop
1413 ld (handledworm),a ;=0
1418 cal nz,handlethoseneatlittleballs
1431 inc (hl) ;1..nrworms
1434 ;-----------------------------
1435 ;---------- keys -------------
1436 ;-----------------------------
1451 rla ;=$17 (c=EXIT-key)
1462 ld (ix+delay),respawndelay
1486 ret nz ;HandleWorm done
1489 ret z ;don't end game
1492 jr nz,anyworm ;if not Tron, quit at any worm's death
1495 ld hl,worm1+lives-(worm2-worm1)
1497 xor a ;check for 0 lives
1499 add hl,de ;next worm
1501 ret nz ;any >0: don't exit
1504 ld a,$A7 ;exit@end of turn
1505 ld (CheckExit),a ;set exit state
1513 out (7),a ;both wires low = game over signal
1519 cal menuinvloop ;invert
1522 cal menuinvloop ;<hr>
1525 cal menuinvloop ;<hr>
1544 cal _vputs ;Died Score
1558 cp (hl) ;input=0 = link
1575 ld a,(hl) ;worm+died
1583 cal _ldHLind ;ld hl,(hl)
1584 cal showHL ;worm+score
1590 dnz displayWormStats
1593 or a ;singleplayer (0) only
1594 jr nz,hilevelcheckdone
1599 jr c,hilevelcheckdone
1600 ld (hl),a ;save local
1605 hilvlposhl =$-2 ;save external
1606 cal _writeb_inc_ahl ;ld (ahl),c
1612 jr z,hiscorecheckdone
1614 cal loadhiscoreposinahl
1615 cal _Get_Word_ahl ;de=old_hi
1623 jr c,NotNewHigh ;New<Old
1624 jr nz,newhigh ;New>Old
1628 jr nc,NotNewHigh ;new<old
1632 cal loadhiscoreposinahl
1633 cal _Set_Word_ahl ;de->(ahl)
1636 NotNewHigh: ;de=current hiscore
1657 ;x123456789012345678901
1658 ;>>>>>> GAME OVER <<<<<
1663 ;6Worm#02 @ 05 00120
1670 rst 20h ;_ABS_MOV10TOOP1
1672 ld hl,savestart-_asm_exec_ram+4
1676 cal _SET_ABS_DEST_ADDR
1680 cal _SET_ABS_SRC_ADDR
1681 ld hl,saveend-savestart
1682 cal _SET_MM_NUM_BYTES
1691 loadhiscoreposinahl:
1696 ld a,(nrlevels+1) ;# peaworm lvls
1703 dec a ;z=(Gametype)=2
1715 hiscrposa =$-1 ;ahl=saveloc
1721 dnz addlevelposition
1724 ;-----------------------------
1725 ;----------- worm ------------
1726 ;-----------------------------
1731 cal saverespawncounter
1737 jr DoesWormTailEqualsWormHead ;chk4 size=0
1748 DoesWormTailEqualsWormHead:
1750 jr nz,removewormloop
1754 jr nz,safewormsizedone
1762 ld (ix+tail),e ;head=tail/size=0
1768 jr nz,saverespawncounter
1792 ld a,%01111111 ;default
1795 dnz bitmask ;a/8 times
1796 out (1),a ;send bitmask
1797 in a,(1) ;input keys
1802 dnz keybit ;check match (cf set)
1806 inkeys: ;use jp not call!
1823 jr z,inlink ;input by link
1824 cal inkeys ;input by keys
1828 ld c,l ;send our keys
1835 ;------- handle worm ---------
1849 cp gamedeathm ;&&&sub
1887 ;-------- move worm ----------
1915 notmoveY: ;bc=newpos
1922 pop hl ; << pos (old)
1940 ;--------- worm hit ----------
1946 cal z,checkhitotherworm
1948 and _datamultpeas ;&&bit
1952 jp z,WormDead ;no food
1959 cal DrawPea ;remove pea
1971 jp nz,Drawworm ;continue
1977 jp nz,Exit ;stack restored
1988 cal IncScore ;score+(40*level)
1992 pop hl ; << levelp new
1996 chkpeahit: ;hl=peapos
2025 ld hl,(peaspos) ;1st pea
2031 ld hl,(peaspos+2) ;2nd pea
2034 pop hl ;(peapos) 1st pea
2035 jp c,WormDead ;stopworm ;own pea hit
2037 ld a,e ;peek a (that's x86 asm for pop\push ;)
2040 ld hl,(peaspos+2) ;2nd pea
2053 cal DrawPea ;restore own flag
2054 jr sillylabel ;inv both\die
2056 hitflag: ;correct pea hit
2074 ret ;Z=yes: no flag taken
2076 ;-----------------------------
2095 jr nz,nextotherwormbit
2120 .db $dd,$7d ;ld a,lx
2123 jr nz,chkworm2 ; ret nz
2148 ;-------- draw worm ----------
2157 cal z,checkhitlapline
2163 ret z ;keep tail in "Tron"
2206 ;-----------------------------
2207 ;---------- ball -------------
2208 ;-----------------------------
2210 handlethoseneatlittleballs:
2256 bit 1,d ;1=up; 0=down
2286 letsmovetheotherway:
2301 ;-----------------------------
2302 ;----------- procs -----------
2303 ;-----------------------------
2307 ld a,%10000000 ;all key-masks
2310 inc a ;cp %11111111 (no keys pressed)
2311 jr nz,releasekeys ;keep waitin
2312 cal GET_KEY ;clear buffer
2358 jr nz,NewPea ;pixel found
2365 ;all ok; empty space
2374 ;----------- score -----------
2394 jr z,scorecommon ;hl/1000 not increased
2402 jr c,showstats ;<0=0
2409 jr z,showstats ;de=$FF??=no limit
2554 ;-----------------------------
2672 ld (ShiftRightCounter),a
2674 ld (ShiftRightChunk),a
2688 ShiftRightCounter = $-1
2710 ld (ShiftLeftCounter),a
2712 ld (ShiftLeftChunk),a
2714 jr nc,ShiftLeftSameByte
2733 ShiftLeftCounter = $-1
2744 jr nz,ShiftRowsRight
2778 ;----------- draw ------------
2792 CheckPixel: ;at bc in d
2799 ;CLEM's FIND_PIXEL (131+? cycles; 28+4 bytes)
2800 ;(b,c) to hl:a; "destroyes" ahl
2802 FindPixel: ;(b,c) to hl:a
2835 PutSprite: ;||@(b,c)
2836 ;by SHIAR only ix saved
2911 drawbox: ;(d,e)-(h,l)
2919 drawhline: ;(d,e)-(h,e)
2925 ld c,a ;starting mask
2967 drawline: ;(d,e)-(h,l)
3068 drawcircle: ;(d,e),h ;de=x,y; h=z
3079 ex (sp),hl ;push zz \ pop x,y
3080 cal circledraw ;(x-xx,y+yy)-(x+xx,y+yy)
3081 ;(x-xx,y-yy)-(x+xx,y-yy)
3082 cal circledraw ;(x-yy,y+xx)-(x+yy,y+xx)
3083 ;(x-yy,y-xx)-(x+yy,y-xx)
3085 ex (sp),hl ;push x,y \ pop zz
3088 dec a ;-256<h<0 = $FF**
3090 jr z,circlenext ;jump if zz<0
3094 add a,a ;a=2yy-2 ;nc
3096 sbc hl,de ;zz=zz-2yy+2
3104 add hl,de ;zz=zz+2xx+3
3113 circledraw: ;destr:de
3118 add hl,bc ;h=x+xx; l=y+yy
3120 cal drawline ;(h-b,l+c)-(h+b,l+c)
3126 cal drawline ;(h-b,l-c)-(h+b,l-c)
3127 ld a,b ;swap xx and yy
3140 ;-----------------------------
3141 ;----------- link ------------
3142 ;-----------------------------
3146 out (7),a ;raise both wires = link ok
3152 checklink: ;load wires in A and check for timeout
3153 dec de ;decrease timer
3156 jr nz,linkfine ;ok if de>0
3159 ld a,0 ;losses so far
3161 inc a ;and this is another one
3163 pop de ;return from link
3164 cp lossout ;quit if too many errors
3165 ret c ;otherwise just continue
3186 Qsend: ;try to send 8 bits in C; CF=error --- destr:abcde
3188 and %11 ;both wires low = exit signal
3189 jr z,linkerr ;error otherwise
3190 ld b,8 ;bits to send
3193 rl c ;bit to send in cf
3194 ld a,D0LD1H ;0: lower white
3196 ld a,D0HD1L ;1: lower red
3198 out (7),a ;lower one (send bit)
3200 cal checklink ;other calc must lower other wire
3202 ld a,D0HD1H ;raise one, ok to raise other
3206 cp %11 ;both raised (by other calc)
3209 dnz sendloop ;repeat for all bits
3211 ld (linklosses),a ;reset number of losses
3218 Crecv: ;--- receive 8 bits into A/C --- destr:abcdehl ---
3220 ret nc ;return if all went ok
3221 jr Crecv ;and try again
3223 Qrecv: ;--- receive 8 bits into A/C; CF=error --- destr:abcde ---
3226 jr z,linkerr ;both low = error, quit
3227 ld b,8 ;bits to receive
3233 jr z,recvwait ;both high = nothing sent (yet)
3234 rra ;received bit in cf
3236 jr c,received ;lower white wire as well
3237 ld a,D0HD1L ;lower red
3240 out (7),a ;both wires low
3243 jr z,recvwaitack ;same wire will be raised again by other calc
3245 out (7),a ;raise both
3247 dnz recvloop ;repeat for all bits
3249 ld (linklosses),a ;reset number of losses
3253 ;-----------------------------
3254 ;---------- levels -----------
3255 ;-----------------------------
3258 .db 5,4,15,15,0,0 ;peas,speed,growth,begin_size,sprite,balls
3259 .db 0,2,63 ;start d, y, x
3260 .db 128,57 ;field width (128-255), height (57-255)
3261 .db 0 ;no additional lines, boxes
3267 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3272 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3273 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3278 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3283 LevelDefT: ;tron=no delay
3285 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3286 .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
3292 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3293 .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
3298 ;-----------------------------
3299 ;---------- data -------------
3300 ;-----------------------------
3304 .db %00000000,%00000000,%00000111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01110000,%00000000,%00000000,%00000000,%00000000,%00000000
3305 .db %00000000,%00000000,%00001111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01111000,%00000000,%00000000,%00000110,%01111011,%00100000
3306 .db %00000000,%00000000,%00011100,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00011100,%00001110,%00000000,%00001001,%00010011,%01000000
3307 .db %00000000,%00000000,%00011000,%00011111,%00000000,%01111111,%11000000,%00111100,%00011110,%01111000,%00001100,%00011111,%00000000,%10100111,%00110000,%10000000
3308 .db %00000000,%00000000,%00111000,%00111111,%10000000,%11111111,%11100000,%11111110,%00111111,%11111100,%00001100,%00111011,%00000000,%10100001,%00001001,%01100000
3309 .db %00000000,%00000000,%00110000,%01110001,%11000001,%11000000,%01110001,%11100110,%01110011,%11001110,%00001100,%00110001,%10000000,%01001110,%01110010,%01100000
3310 .db %00000000,%00000000,%00110000,%01100000,%11000001,%10000000,%00111001,%10000000,%01100111,%11100110,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
3311 .db %00000000,%00000000,%00110000,%01100000,%11000001,%10110000,%00011011,%10000000,%11101110,%01110111,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
3312 .db %00000000,%00000000,%00110000,%01110001,%11000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000111,%11100001,%10000000,%00000000,%00000000,%00000000
3313 .db %00000000,%00000000,%00110000,%00110001,%10000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000011,%11000011,%10000000,%00000000,%00000000,%00000000
3314 .db %00000000,%00000000,%00111000,%00111011,%10000011,%10110000,%00011011,%00000000,%11001110,%01110011,%00000000,%00000011,%00110101,%01001001,%10000000,%00000000
3315 .db %00000000,%00000000,%00011000,%00011111,%00000011,%00110000,%00011011,%00000000,%11000111,%11100011,%10000000,%00000011,%01000101,%00010101,%01000011,%01100011
3316 .db %00000000,%00000000,%00011100,%00001110,%00000111,%00111000,%00111011,%10000000,%11000011,%11000001,%10000000,%00000111,%01100101,%01010101,%01000101,%01010100
3317 .db %00000000,%00000000,%00001110,%00111111,%10001110,%00011100,%01110001,%10000000,%11100000,%00000001,%11100000,%00001110,%00110111,%01011101,%10010101,%01100101
3318 .db %00000000,%00000000,%00000111,%11111011,%11111100,%00001111,%11100001,%11000000,%01100000,%00000000,%11111111,%11111100,%00010101,%01010101,%01000101,%01010101
3319 .db %00000000,%00000000,%00000011,%11100000,%11111000,%00000111,%11000000,%11000000,%01100000,%00000000,%00111111,%11111000,%01100101,%01010101,%01000110,%01010011
3321 txtMenu: .db "Mode",0 ;1st menu item
3327 posMenu: .dw $$2418,$231E,$2524,$1F2A,$1730,$1936
3328 txtGame: .db "Singleplayer",0
3329 txtGame1: .db "Peaworm",0
3330 txtGame2: .db "Tron",0
3331 txtGame3: .db "Deathmatch",0
3332 txtGame4: .db "Foodmatch",0
3333 txtGame5: .db "LinkMatch",0
3334 txtGame6: .db "Race",0
3335 txtGame7: .db "CTF",0
3336 ; .db "Domination",0 ;8
3337 posGame: .db 0,txtGame1-txtGame
3338 .db txtGame2-txtGame
3339 .db txtGame3-txtGame
3340 .db txtGame4-txtGame
3341 .db txtGame5-txtGame
3342 .db txtGame6-txtGame
3343 .db txtGame7-txtGame
3345 txtKeyleft: .db "Left",0
3346 txtKeyright:.db " | Right",0
3347 txtLevsel: .db $CF," Select levels: ",5,0
3348 txtEName: .db "Enter name player ",0
3349 txtWaiting: .db "Waiting...",0
3350 txtReceive: .db "Receiving..." ;,0
3353 .db 0, 3, 6, 9, 12, 15, 18, 21
3354 .db 24, 27, 30, 33, 36, 39, 42, 45
3355 .db 48, 51, 54, 57, 59, 62, 65, 67
3356 .db 70, 73, 75, 78, 80, 82, 85, 87
3357 .db 89, 91, 94, 96, 98,100,102,103
3358 .db 105,107,108,110,112,113,114,116
3359 .db 117,118,119,120,121,122,123,123
3360 .db 124,125,125,126,126,126,126,126
3363 txtLevel: .db "Level ",0
3364 txtWorms: .db "Worms: 0",0 ;follows txtLevel
3365 txtName: .db "Name",0
3366 txtDied: .db "Died " ;follows txtName
3367 txtScore: .db "Score",0 ;follows txtDied
3368 txtLeft: .db " left",0 ;follows txtScore
3369 txthiscore:.db "HiScore:",0
3370 txtReady: .db "Prepare!",0
3372 txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
3374 _datalink = %00000001 ;linkplay
3375 _datalivel = %00000010 ;lives=0 limit
3376 _datafoodl = %00000100 ;left=0 limit
3377 _datanextl = %00001000 ;next level if left=0
3378 _datasingl = %00001000 ;singleplayer=1
3379 ;1=hiscore+keep_length
3380 _datafood = %00010000 ;food present
3381 _datadie = %01000000 ;worm dies on impact
3382 _datascore = %10000000 ;score>=100 limit
3383 _datamultpeas = %00100000
3386 datalevels: .dw LevelDef, LevelDefM
3387 .dw LevelDefT,LevelDefM
3388 .dw LevelDefM,LevelDefM
3389 .dw LevelDefM,LevelDefC
3390 nrlevels: .db 1,3,1,3,3,3,3,1 ;=defaults
3395 datasingle: .db %01011110,3,1,1 ;3 lives (<must b unique)
3397 datapeas: .db %01011010,1,1,1 ;1 "
3399 datatron: .db %01000010,1,1,1
3401 datadeathm: .db %01000010,3,2,1
3403 datafoodm: .db %11010000,10,2,1 ;10 score limit (=100)
3405 datalinkm: .db %11010001,3,2,1
3407 datarace: .db %10000000,10,2,1
3409 datactf: .db %11100000,9,4,1
3411 ;datadomin: .db %01100000,3 ;==(8 modes)
3413 worm1set: .dw worm1p,worm1p
3414 .db %11110111,%00,-01,K_RIGHT,K_LEFT
3415 worm1name: .db "Wormy ",0
3416 worm2set: .dw worm2p,worm2p
3417 .db %11111011,%11,-01,K_F2,K_F1
3418 worm2name: .db "Viper ",0
3419 worm3set: .dw worm3p,worm3p
3420 .db %11111011,%00,-01,K_COMMA,K_STO
3421 worm3name: .db "Nibbler ",0
3422 worm4set: .dw worm4p,worm4p
3423 .db %11111011,%00,-01,K_PLUS,K_ENTER
3424 worm4name: .db "Jim ",0
3441 head = 13 ;4B (head=tail)
3442 tail = 15 ;also@next level
3444 reserv = 18 ;loop (race:lap|ctf:pea)
3455 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3456 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3457 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3458 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3459 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3460 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3461 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3462 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3463 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3464 .db " shiar0@hotmail.com",0
3467 defspriteimg: .db %01100000
3473 .db "Internal Levels" ;,0
3475 .db 0,deflevels/256,deflevels&255
3478 ;-----------------------------
3479 ;----------- end -------------
3480 ;-----------------------------