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)
117 namelength = $BC00 ;(1) @menu
119 DispBuffer = $BC00 ;(10x57d) @game
124 ;-----------------------------
125 ;------- program start -------
126 ;-----------------------------
141 .db "WORMY by SHIAR -- beta 93%",0
144 .db %10010110,%01101111
145 .db %10110101,%01001011
146 .db %01110011,%01001001
147 .db %00000011,%10000000
148 .db %00000001,%11100000
149 .db %00111000,%11111000
150 .db %01111110,%00111111
151 .db %11101111,%00001111
152 .db %11000011,%10000000
155 levelhead2 = 93 ;wormy levels header = "93"
186 ld bc,int_end-int_handler
193 ld hl,$BFFF ;VAT start
196 ld de,(_PTEMP_END+1) ;VAT end
226 ex de,hl ;ld ahl,(hl)
227 cal _AHL_PLUS_2_PG3 ;string id
228 cal _Get_Word_ahl ;ld de,(ahl)
232 jr nz,_searchnext ;not worm
236 inc ix ;save level's ahl
251 cal _Get_Word_ahl ;ld de,(ahl++)
256 ld a,e ;set new level
279 cal _vputs ;"< Select levels: >"
295 ex de,hl ;ahl=ade=(hl)
296 cal _load_ram_ahl ;hl=ahl
297 ld b,(hl) ;b=title size
330 ld b,-3 ;level selected
336 pop bc ;GET_KEY destr. b
351 add a,3 ;sellev+3 (#0==-3)
360 or a ;levelfile on page 0 (=internal)
371 cal _GETB_AHL ;ld a,(ahl)
376 cal _INC_PTR_AHL ;ahl++
378 jr nz,skiptitle ;goto #0-terminator
381 ld (leveldataSize),de
390 cal _SET_ABS_SRC_ADDR ;levelsstart
393 cal _SET_ABS_DEST_ADDR ;store in mem.
396 cal _SET_MM_NUM_BYTES
399 cal _LOAD_ABS_SRC_ADDR ;->ahl
406 ldi ;(de),(hl)\inc hl
411 res 2,(iy+13) ;appAutoScroll
419 ld (hl),1 ;def=level#1
423 ;-----------------------------
424 ;----- build trig tables -----
425 ;-----------------------------
450 ;-----------------------------
451 ;---------- menu -------------
452 ;-----------------------------
454 DisplayMenu: ;---draw menu---
466 ld hl,dispmenusets ;mainMenu
467 psh hl ;jump here after ret
470 ;Mode|Level|Limit|Worms|worm #|controls
471 ; jr dispmenucommon ;cal
474 ld de,$FD80 ;begin pos
498 hr: ;draw horizontal line at hl
507 ;Back|Lives|Limit|Speed|Rotation|Growth
522 inc hl \ inc hl \ inc hl
540 inc a ;-1=None; 0..98->1..99
555 cal cshowA ;turn speed
562 ld a,(hl) ;(scorelimit)
567 jr z,optionMenu ;do not display 0 behind 'None'
579 jp z,dispmainmenu ;mainMenu
623 cal loadgamecar ;a=(hl)
626 jr nc,optionMenu ;>99
630 jp dispomenusets ;optionMenu
633 sub 1 ;dec does not set cf
641 jr nc,optionMenu ;>99
644 jr _dispomenusets ;optionMenu
647 sub 1 ;dec does not set cf
654 ld a,(hl) ;(scorelimit)
661 jr nc,_optionMenu ;>98
665 jr _dispomenusets ;optionMenu
671 jr z,_optionMenu ;<-1
678 inc hl ;=saves 2 bytes :P
687 jr nc,_optionMenu ;>25
690 jr _dispomenusets ;optionMenu
705 jr nc,_optionMenu ;>98
708 jr _dispomenusets ;optionMenu
714 jr z,__optionMenu ;<-1
726 dec a ;2nd item: level
728 sub 3 ;5th item: wormname
732 jp LetsGetThisPartyOn ;otherwise
763 jr nc,mainMenu ;may not become >(nrworms)
767 jr _dispmenusets ;mainMenu
780 ; jr z,bchangecurworm
785 jr nz,changedcurworm ;save >0
790 ld a,(hl) ;hl=nrworms
793 jr nc,mainMenu ;may not be >4
797 jr dispmenusets ;mainMenu
801 ld a,(hl) ;hl=nrworms
805 ld a,(hl) ;hl=nrworms
808 jr nc,changednrworms ;save >=2
817 jr _mainMenu ;don't change for singleplayer
822 dec hl ;inced earlier
824 ld a,1 ;change LS-bit (=link)
827 jr dispmenusets ;mainMenu
836 jr dispmenusets ;mainMenu
843 inc hl ;hl=loadgamecar+2
845 ld a,(hl) ;(curlevel)
851 cp (hl) ;max level for sel.game
857 jr dispmenusets ;mainMenu
860 ld a,(hl) ;(curlevel)
885 cal getcustomkey ;left
886 cal getcustomkey ;right
889 ;---display current settings---
899 add hl,de ;hl=posGame+(Gametype)
900 ld a,(hl) ;str.offset
904 ld (CURtxtGame),hl ;save for g/o
905 cal _vputs ;Singleplayer
927 pop hl ;loadgamecar; hl++
929 ld a,(hl) ;(curlevel)
944 ld hl,$363E ;controls
950 ;--- handle menukeys ---
959 pop bc ;GET_KEY destr. b
969 menupos: ;highlight #b
982 add hl,hl ;$FD20+item*96
1012 ;--- change name ---
1015 getwormname: ;of (curworm)
1033 cal _puts ;"Enter name player "
1103 .db 0,".<>!",0,0,0,0 ;down,L,R,up
1104 .db 0,"XTOJE0",0 ;enter..clear
1105 .db " WSNID9",0 ;(-)..custom
1106 .db "ZVRMHC8",0 ;dot..del
1107 .db "YUQLGB7#" ;0..xvar
1108 .db $D9,"-PKFA6'" ;on..alpha
1109 .db "54321*",0,$D0 ;F5..more
1114 ld hl,$FD97 ;begin pos
1115 ld de,7 ;bytes to add
1116 ld a,35 ;nr of lines
1118 ld c,9 ;bytes to clear
1123 jr nz,clroldsetsloop
1126 jr nz,clroldsettings
1129 skiplevel: ;@hl - destr:ab - alter:hl
1134 ld b,(hl) ;spritesize
1145 inc b ;multiplayer lvl
1147 inc b ;skip other 3 worms (9 bytes)
1181 ;build: c=(gameCar)=(hl-1)
1182 ; a=(wormbeglives)=(hl)
1188 add a,a ;8 bytes per mode
1200 ;-----------------------------
1201 ;-------- start game ---------
1202 ;-----------------------------
1206 ld (CheckExit),a ;set exit state
1224 ld (turnright),a ;more efficient
1228 cal _HLTIMES10 ;hl=10*(hl)
1233 ld a,(Gametype) ;8bytes -> 7bytes
1238 add a,24+1 ;go to datalevels
1240 sbc hl,de ;datalevels
1242 cal _ldHLind ;ld hl,(hl)
1243 pop de ;de=loadgamecar
1245 ld a,(de) ;(curlevel)
1249 dec d ;levels to skip
1273 jp DisplayMenu ;return to menu
1292 ;-----------------------------
1293 ;--------- game over ---------
1294 ;-----------------------------
1300 ld a,4 ;4x (all worms)
1310 ld (hl),b ;score+1=0
1317 ex de,hl ;de=wormX+head
1321 jr nz,createwormsloop
1323 pop hl ;begin of current level
1332 dec (hl) ;curlevel-- (not beyond last lvl)
1336 ;show end msg or smtn
1338 psh bc ;where to go afterwards
1339 inc hl ;location of ending-code
1340 jp (hl) ;go there ("call")
1348 ld (hl),a ;store new speed
1369 ld b,0 ;bc=sprite size
1370 add hl,bc ;hl=behind sprite
1377 setsprite: ;de=@sprite ;a=sprsize
1410 ld a,SinCosTable/256
1421 ld bc,(worm2-worm1)-5
1431 ;-------- draw level ---------
1457 add hl,hl ;32=scr.width
1525 ;-----------------------------
1527 psh hl ; >> levelp new
1562 ld hl,4+(txtposReady*256)
1573 jr nc,initfinished ;no link
1575 SwapPos: ;$18 xx -> $E6 xx
1579 ld (worm1+left),a ;worm 1...
1580 ld (worm3+left),a ;and worm 3 via link
1598 ld (worm2+left),a ;worm 2+4..
1599 ld (worm4+left),a ;..over link
1618 ;-----------------------------
1619 ;----------- LOOP ------------
1620 ;-----------------------------
1623 ld bc,(worm1+pos) ;camera worm #1
1625 or a ;if #1 not over link
1627 ld bc,(worm2+pos) ;otherwise view from #2
1629 cal DisplayField ;display piece of level
1644 jr nz,screeninvertloop
1657 ld (handledworm),a ;reset
1675 jr nz,nodispupdate ;just once every 10 turns
1676 ld (hl),10 ;reset counter
1677 cal forceshowstats ;update score
1684 cal nz,handlethoseneatlittleballs
1697 inc (hl) ;1..nrworms
1700 ;-----------------------------
1701 ;---------- keys -------------
1702 ;-----------------------------
1717 rla ;=$17 (c=EXIT-key)
1728 ld (ix+delay),respawndelay
1747 ld (ix+pos2+1),a ;x2
1755 ret nz ;HandleWorm done
1757 or a ;0=no live limit
1758 ret z ;don't end game
1761 jr z,anyworm ;quit at any worm's death
1762 ld a,(nrworms) ;livematch: all worms must've died
1764 ld hl,worm1+lives-(worm2-worm1)
1766 xor a ;check for 0 lives
1768 add hl,de ;next worm
1770 ret nz ;any >0: don't exit
1773 ld a,$A7 ;exit@end of turn
1774 ld (CheckExit),a ;set exit state
1783 out (7),a ;both wires low = game over signal
1789 cal menuinvloop ;invert
1791 cal hr ;menuinvloop w/ b=16
1812 cal _vputs ;Died Score
1827 jr c,nonewwinner ;h<d
1828 jr nz,newwinner ;h>d
1831 jr nc,nonewwinner ;l<e
1842 cpl ;high value (>$FB)
1847 ld a,(hl) ;less deaths
1854 ;---display worms---
1866 cp (hl) ;input=0 = link
1883 ld a,(hl) ;worm+died
1892 jr nz,nodmwinner ;deathmatch?
1893 ld a,0 ;winner's deaths
1895 cp (hl) ;equals this worm?
1899 jr c,notwinner ;no singleplayer winners
1901 cal _ldHLind ;ld hl,(hl)
1904 cal _cphlde ;==highest score..
1908 cal _putc ;..then put *
1922 dnz displayWormStats
1925 or a ;singleplayer (0) only
1926 jr nz,hilevelcheckdone
1931 jr c,hilevelcheckdone
1932 ld (hl),a ;save local
1937 hilvlposhl =$-2 ;save external
1938 cal _writeb_inc_ahl ;ld (ahl),c
1943 jr z,hiscorecheckdone ;no SP
1945 cal loadhiscoreposinahl
1946 cal _Get_Word_ahl ;de=old_hi
1954 jr c,NotNewHigh ;New<Old
1955 jr nz,newhigh ;New>Old
1959 jr nc,NotNewHigh ;new<old
1963 cal loadhiscoreposinahl
1964 cal _Set_Word_ahl ;de->(ahl)
1967 NotNewHigh: ;de=current hiscore
1987 ;x123456789012345678901
1988 ;>>>>>> GAME OVER <<<<<
1993 ;6Worm#02 @ 05 00120
2000 rst 20h ;_ABS_MOV10TOOP1
2002 ld hl,savestart-_asm_exec_ram+4
2006 cal _SET_ABS_DEST_ADDR
2010 cal _SET_ABS_SRC_ADDR
2011 ld hl,saveend-savestart
2012 cal _SET_MM_NUM_BYTES
2021 loadhiscoreposinahl:
2025 ld l,h ;hl=0 for peaworm and singleplayer
2028 ld l,a ;skip peaworm slots for tron mode
2031 ld b,0 ;offset 0 for SP
2034 ld b,a ;levels to skip (including 1 for singleplayer)
2036 inc hl ;add one word per level
2037 dnz addlevelposition
2039 add hl,hl ;one WORD per hiscore
2045 adc a,0 ;ahl=saveloc
2048 ;-----------------------------
2049 ;----------- worm ------------
2050 ;-----------------------------
2055 cal saverespawncounter
2061 jr DoesWormTailEqualsWormHead ;chk4 size=0
2072 DoesWormTailEqualsWormHead:
2074 jr nz,removewormloop
2078 jr nz,safewormsizedone
2086 ld (ix+tail),e ;head=tail/size=0
2092 jr nz,saverespawncounter
2116 ld a,%01111111 ;default
2119 dnz bitmask ;a/8 times
2120 out (1),a ;send bitmask
2121 in a,(1) ;input keys
2126 dnz keybit ;check match (cf set)
2129 inkeys: ;use jp not call!
2148 jr z,inlink ;input by link
2149 cal inkeys ;input by keys
2153 ld c,l ;send our keys
2160 ;------- handle worm ---------
2211 ;-------- move worm ----------
2239 notmoveY: ;bc=newpos
2246 pop hl ; << pos (old)
2264 ;--------- worm hit ----------
2270 cal z,checkhitotherworm
2272 and _datamultpeas ;&&bit
2276 jp z,WormDead ;no food
2283 cal DrawPea ;remove pea
2295 jp nz,Drawworm ;continue
2301 jp nz,Exit ;stack restored
2312 cal IncScore ;score+(40*level)
2316 pop hl ; << levelp new
2320 chkpeahit: ;hl=peapos
2349 ld hl,(peaspos) ;1st pea
2355 ld hl,(peaspos+2) ;2nd pea
2358 pop hl ;(peapos) 1st pea
2359 jp c,WormDead ;stopworm ;own pea hit
2361 ld a,e ;peek a (that's x86 asm for pop\push ;)
2364 ld hl,(peaspos+2) ;2nd pea
2377 cal DrawPea ;restore own flag
2378 jr sillylabel ;inv both\die
2380 hitflag: ;correct pea hit
2398 ret ;Z=yes: no flag taken
2400 ;-----------------------------
2419 jr nz,nextotherwormbit
2444 .db $dd,$7d ;ld a,lx
2447 jr nz,chkworm2 ; ret nz
2472 ;-------- draw worm ----------
2480 cal z,checkhitlapline
2486 ret z ;keep tail in "Tron"
2529 ;-----------------------------
2530 ;---------- ball -------------
2531 ;-----------------------------
2533 handlethoseneatlittleballs:
2579 bit 1,d ;1=up; 0=down
2609 letsmovetheotherway:
2624 ;-----------------------------
2625 ;----------- procs -----------
2626 ;-----------------------------
2630 ld a,%10000000 ;all key-masks
2633 inc a ;cp %11111111 (no keys pressed)
2634 jr nz,releasekeys ;keep waitin
2635 cal GET_KEY ;clear buffer
2681 jr nz,NewPea ;pixel found
2688 ;all ok; empty space
2697 ;----------- score -----------
2717 jr z,scorecommon ;hl/1000 not increased
2725 jr c,showstats ;<0=0
2733 jr z,showstats ;de=0=no limit
2740 ret nz ;no disp for timematches
2757 shownameloop: ;1st 3 chars
2786 showstat: ;(multiplayer)
2804 showstatsS: ;(singleplayer)
2898 ;-----------------------------
3016 ld (ShiftRightCounter),a
3018 ld (ShiftRightChunk),a
3032 ShiftRightCounter = $-1
3054 ld (ShiftLeftCounter),a
3056 ld (ShiftLeftChunk),a
3058 jr nc,ShiftLeftSameByte
3077 ShiftLeftCounter = $-1
3088 jr nz,ShiftRowsRight
3122 ;----------- draw ------------
3136 CheckPixel: ;at bc in d
3143 ;CLEM's FIND_PIXEL (131+? cycles; 28+4 bytes)
3144 ;(b,c) to hl:a; "destroyes" ahl
3146 FindPixel: ;(b,c) to hl:a
3179 PutSprite: ;||@(b,c)
3180 ;by SHIAR only ix saved
3255 drawbox: ;(d,e)-(h,l)
3263 drawhline: ;(d,e)-(h,e)
3269 ld c,a ;starting mask
3311 drawline: ;(d,e)-(h,l)
3412 drawcircle: ;(d,e),h ;de=x,y; h=z
3423 ex (sp),hl ;push zz \ pop x,y
3424 cal circledraw ;(x-xx,y+yy)-(x+xx,y+yy)
3425 ;(x-xx,y-yy)-(x+xx,y-yy)
3426 cal circledraw ;(x-yy,y+xx)-(x+yy,y+xx)
3427 ;(x-yy,y-xx)-(x+yy,y-xx)
3429 ex (sp),hl ;push x,y \ pop zz
3432 dec a ;-256<h<0 = $FF**
3434 jr z,circlenext ;jump if zz<0
3438 add a,a ;a=2yy-2 ;nc
3440 sbc hl,de ;zz=zz-2yy+2
3448 add hl,de ;zz=zz+2xx+3
3457 circledraw: ;destr:de
3462 add hl,bc ;h=x+xx; l=y+yy
3464 cal drawline ;(h-b,l+c)-(h+b,l+c)
3470 cal drawline ;(h-b,l-c)-(h+b,l-c)
3471 ld a,b ;swap xx and yy
3484 ;-----------------------------
3485 ;----------- link ------------
3486 ;-----------------------------
3490 out (7),a ;raise both wires = link ok
3496 checklink: ;load wires in A and check for timeout
3497 dec de ;decrease timer
3500 jr nz,linkfine ;ok if de>0
3503 ld a,0 ;losses so far
3505 inc a ;and this is another one
3507 pop de ;return from link
3508 cp lossout ;quit if too many errors
3509 ret c ;otherwise just continue
3530 Qsend: ;try to send 8 bits in C; CF=error --- destr:abcde
3533 and %11 ;both wires low = exit signal
3534 jr z,linkerr ;error otherwise
3535 ld b,8 ;bits to send
3538 rl c ;bit to send in cf
3539 ld a,D0LD1H ;0: lower white
3541 ld a,D0HD1L ;1: lower red
3543 out (7),a ;lower one (send bit)
3545 cal checklink ;other calc must lower other wire
3547 ld a,D0HD1H ;raise one, ok to raise other
3551 cp %11 ;both raised (by other calc)
3554 dnz sendloop ;repeat for all bits
3556 ld (linklosses),a ;reset number of losses
3563 Crecv: ;--- receive 8 bits into A/C --- destr:abcdehl ---
3565 ret nc ;return if all went ok
3566 jr Crecv ;and try again
3568 Qrecv: ;--- receive 8 bits into A/C; CF=error --- destr:abcde ---
3571 jr z,linkerr ;both low = error, quit
3572 ld b,8 ;bits to receive
3578 jr z,recvwait ;both high = nothing sent (yet)
3579 rra ;received bit in cf
3581 jr c,received ;lower white wire as well
3582 ld a,D0HD1L ;lower red
3585 out (7),a ;both wires low
3588 jr z,recvwaitack ;same wire will be raised again by other calc
3590 out (7),a ;raise both
3592 dnz recvloop ;repeat for all bits
3594 ld (linklosses),a ;reset number of losses
3598 ;-----------------------------
3599 ;---------- levels -----------
3600 ;-----------------------------
3603 .db 5,4,15,15,0,0 ;peas,speed,growth,begin_size,sprite,balls
3604 .db 0,2,63 ;start d, y, x
3605 .db 128,57 ;field width (128-255), height (57-255)
3606 .db 0 ;no additional lines, boxes
3612 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3617 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3618 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3623 .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
3628 LevelDefT: ;tron=no delay
3630 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3631 .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
3637 .db %1110000,%10001000,%10001000,%10001000,%1110000,0
3638 .db $40,30,64,$C0,30,64, $00,30,64,$80,30,64
3643 ;-----------------------------
3644 ;---------- data -------------
3645 ;-----------------------------
3649 .db %00000000,%00000000,%00000111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01110000,%00000000,%00000000,%00000000,%00000000,%00000000
3650 .db %00000000,%00000000,%00001111,%10000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%01111000,%00000000,%00000000,%00000110,%01111011,%00100000
3651 .db %00000000,%00000000,%00011100,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00011100,%00001110,%00000000,%00001001,%00010011,%01000000
3652 .db %00000000,%00000000,%00011000,%00011111,%00000000,%01111111,%11000000,%00111100,%00011110,%01111000,%00001100,%00011111,%00000000,%10100111,%00110000,%10000000
3653 .db %00000000,%00000000,%00111000,%00111111,%10000000,%11111111,%11100000,%11111110,%00111111,%11111100,%00001100,%00111011,%00000000,%10100001,%00001001,%01100000
3654 .db %00000000,%00000000,%00110000,%01110001,%11000001,%11000000,%01110001,%11100110,%01110011,%11001110,%00001100,%00110001,%10000000,%01001110,%01110010,%01100000
3655 .db %00000000,%00000000,%00110000,%01100000,%11000001,%10000000,%00111001,%10000000,%01100111,%11100110,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
3656 .db %00000000,%00000000,%00110000,%01100000,%11000001,%10110000,%00011011,%10000000,%11101110,%01110111,%00001110,%01110001,%10000000,%00000000,%00000000,%00000000
3657 .db %00000000,%00000000,%00110000,%01110001,%11000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000111,%11100001,%10000000,%00000000,%00000000,%00000000
3658 .db %00000000,%00000000,%00110000,%00110001,%10000001,%10110000,%00011011,%00000000,%11001100,%00110011,%00000011,%11000011,%10000000,%00000000,%00000000,%00000000
3659 .db %00000000,%00000000,%00111000,%00111011,%10000011,%10110000,%00011011,%00000000,%11001110,%01110011,%00000000,%00000011,%00110101,%01001001,%10000000,%00000000
3660 .db %00000000,%00000000,%00011000,%00011111,%00000011,%00110000,%00011011,%00000000,%11000111,%11100011,%10000000,%00000011,%01000101,%00010101,%01000011,%01100011
3661 .db %00000000,%00000000,%00011100,%00001110,%00000111,%00111000,%00111011,%10000000,%11000011,%11000001,%10000000,%00000111,%01100101,%01010101,%01000101,%01010100
3662 .db %00000000,%00000000,%00001110,%00111111,%10001110,%00011100,%01110001,%10000000,%11100000,%00000001,%11100000,%00001110,%00110111,%01011101,%10010101,%01100101
3663 .db %00000000,%00000000,%00000111,%11111011,%11111100,%00001111,%11100001,%11000000,%01100000,%00000000,%11111111,%11111100,%00010101,%01010101,%01000101,%01010101
3664 .db %00000000,%00000000,%00000011,%11100000,%11111000,%00000111,%11000000,%11000000,%01100000,%00000000,%00111111,%11111000,%01100101,%01010101,%01000110,%01010011
3666 txtMenu: .db "Mode",0 ;1st menu item
3672 posMenu: .dw $2418,$231E,$2824,$1F2A,$1730,$1936
3673 txtMenuR: .db "controls",0
3674 txtoMenu: .db "Back",0 ;1st menu item
3680 posoMenu: .dw $2618,$251E,$2524,$222A,$1A30,$1C36
3681 txtGame: .db "Singleplayer",0
3682 txtGame1: .db "Peaworm",0
3683 txtGame2: .db "Tron",0
3684 txtGame3: .db "Deathmatch",0
3685 txtGame4: .db "Foodmatch",0
3686 txtGame5: .db "Timematch",0
3687 txtGame6: .db "Race",0
3688 txtGame7: .db "CTF" ;,0
3690 posGame: .db 0,txtGame1-txtGame
3691 .db txtGame2-txtGame
3692 .db txtGame3-txtGame
3693 .db txtGame4-txtGame
3694 .db txtGame5-txtGame
3695 .db txtGame6-txtGame
3696 .db txtGame7-txtGame
3698 txtNone: .db "None",0
3699 txtDef: .db "Default",0
3702 txtKeyleft: .db ":left",0
3703 txtKeyright:.db "/right",0
3704 txtLevsel: .db $CF," Select levels ",5,0
3705 txtEName: .db "Enter name player ",0
3706 txtWaiting: .db "Waiting...",0
3707 txtReceive: .db "Receiving..." ;,0
3710 .db 0, 3, 6, 9, 12, 15, 18, 21
3711 .db 24, 27, 30, 33, 36, 39, 42, 45
3712 .db 48, 51, 54, 57, 59, 62, 65, 67
3713 .db 70, 73, 75, 78, 80, 82, 85, 87
3714 .db 89, 91, 94, 96, 98,100,102,103
3715 .db 105,107,108,110,112,113,114,116
3716 .db 117,118,119,120,121,122,123,123
3717 .db 124,125,125,126,126,126,126,126
3720 txtLevel: .db "Level ",0
3721 txtWorms: .db "Worms: 0",0 ;follows txtLevel
3722 txtName: .db "Name",0
3723 txtWinner: .db "Wins " ;follows txtName
3724 txtDied: .db "Died " ;follows txtWinner
3725 txtScore: .db "Score",0 ;follows txtDied
3726 txtLeft: .db " left",0 ;follows txtScore
3727 txthiscore:.db "HiScore:",0
3728 txtReady: .db "Prepare!",0
3730 txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
3732 datalevels: .dw LevelDef, LevelDefM
3733 .dw LevelDefT,LevelDefM
3734 .dw LevelDefM,LevelDefM
3735 .dw LevelDefM,LevelDefC
3736 nrlevels: .db 1,3,1,3,3,3,3,1 ;=defaults
3738 _datalink = %0000001 ;linkplay
3739 _datafoodl = %0000010 ;left=0 limit
3740 _datasingl = %0000100 ;singleplayer=1 (=hiscore+keep_length+nextlevel)
3741 _datamultpeas = %0001000 ;multiple peas=1
3742 _datatime = %0010000 ;time incs score (timematch)
3743 _datafood = %0100000 ;food present
3744 _datadie = %1000000 ;worm dies on impact
3745 ;reserved %10000000 ;for future use
3747 savestart: ; �game info (see above)
3748 ; | �lives (0=unlimited)
3749 ; | | �nrworms (can be altered by user)
3750 ; | | | �level (reset to 1 at startup)
3751 ; | | | | �speed/delay (-1=def)
3752 ; | | | | | �grow speed (-1=none; 0=continuous)
3753 ; | | | | | | �turn speed (8=def)
3754 ; | | | | | | | �score limit (0=none)
3755 gamesingle = 0 ;used | | | | | | | |
3756 datasingle: .db %1100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
3758 datapeas: .db %1100100,1,1,1,-1,-1, 8, 0 ;Peaworm (SP; 1 live)
3760 datatron: .db %1010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
3761 gamedeathm = 3 ;used
3762 datadeathm: .db %1000001,3,2,1,-1,49, 8, 0 ;Deathmatch (3 lives, 50 growth)
3764 datafoodm: .db %1100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
3766 datatimem: .db %1010000,1,2,1,-1, 0, 8, 0 ;Timematch (tron, 100 score)
3768 datarace: .db %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision)
3770 datactf: .db %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score)
3771 _datasingle = %1100110 ;(datasingle) usable like gamesingle
3773 worm1set: .dw worm1p,worm1p
3774 .db %11110111,%00,-01,K_RIGHT,K_LEFT
3775 worm1name: .db "Wormy ",0
3776 worm2set: .dw worm2p,worm2p
3777 .db %11111011,%11,-01,K_F2,K_F1
3778 worm2name: .db "Viper ",0
3779 worm3set: .dw worm3p,worm3p
3780 .db %11111011,%00,-01,K_COMMA,K_STO
3781 worm3name: .db "Nibbler ",0
3782 worm4set: .dw worm4p,worm4p
3783 .db %11111011,%00,-01,K_PLUS,K_ENTER
3784 worm4name: .db "Jim ",0
3801 head = 13 ;4B (head=tail)
3802 tail = 15 ;also@next level
3804 reserv = 18 ;loop (race:lap|ctf:pea)
3815 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3816 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3817 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3818 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3819 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3820 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3821 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3822 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3823 .db "WWW.SHIAR.ORG WWW.SHIAR.ORG "
3824 .db " shiar0@hotmail.com",0
3827 defspriteimg: .db %01100000
3833 .db "Internal Levels" ;,0
3835 .db 0,deflevels/256,deflevels&255
3838 ;-----------------------------
3839 ;----------- end -------------
3840 ;-----------------------------