; ����� ����� ������� �� ��� �����������
;_______________________________________________________________________________
;
-; Version : 98% (0.98.226)
-; Release Date : 2002 February 26
+; Version : 99% (0.99.34)
+; Release Date : 2002 March 4
; Author(s) : Shiar
; Email Address : wormy@shiar.org
; Web Page : www.shiar.org
; Other games by author(s) : Nemesis beta
; Additional Credits to : Matthew Shepcar : wrote original Peaworm, end'98
; Jonah Cohen : helped writing worm
-; Files : wormy.z80 (89kB) : 515ad14b922572bdc8a96e780b8b24ca
-; wormy.86p (6512) : efef32a8c541b4585087f55deb31f51d
+; Files : wormy.txt (9283) : 12345678901234567890123456789012
+; wormy.z80 (100k) : 515ad14b922572bdc8a96e780b8b24ca
+; wormy.86g (12k) : efef32a8c541b4585087f55deb31f51d
;_______________________________________________________________________________
;--- notes ---------------------------------------------------------------------
; X [225] ED: ctf/race level copy/move fix
; X [225] LVL: episode #1: 5 ctf+5 race; episode #3 removed (all in #1 now)
; X [225] add v2 id (yas2)
+; X [227] redundant calls removed or moved
+; X [227] fixed: ctf score increased by taking _any_ pea
+; X [227] no more points in race for dieing on the second half
+; X [227] no score decrease for dieing in race (no longer needed, see above)
+; 99% = CURRENT
; 1% * LINK: >Somehow do a lot of testing with 2 calcs< *sigh*
; * LVL: episode #5: 10 easy sp levels (do i _have_ to?)
; * LVL: Eric's Yumworms (ep#5?)
;
; * correct team winners
; * level compression
-; * arrow to offscreen peas
-; * sound
-; * startpos
-; * pause in linkplay
-; * coop (DON'T COUNT ON IT)
+; * ubersized bouncies ;)
+; * arrow to offscreen peas
+; * w00t AI
+; * sound
+; * startpos
+; * pause in linkplay
+; * coop (DON'T COUNT ON IT)
;_______________________________________________________________________________
; _/_/_____ __ _ _______ _ _ ______ _______
_GETB_AHL = $46C3 ;a=(ahl) \ hl=ahl
_OP1TOOP6 = $4263
- #define buffer ;use display buffer (otherwise write directly to screen)
- #define readymask ;"greys" out the field before starting a level
- #define coolzgfx ;nice graphics for game over screen
+ #define id2 ;yas2 level identifier - this'll add (65) bytes
+ #define buffer ;use display buffer, otherwise write directly to screen (11)
+ #define readymask ;"greys" out the field before starting a level (20)
+;#define readytext ;-displays "prepare" before level starts (42)
+ #define coolzgfx ;nice graphics for game over screen (98)
#define spprotect ;options not changable for singleplayer modes
;#define intlevels ;-internal levels
-;#define readytext ;-displays "prepare" before level starts
- #define id2 ;yas2 level identifier (adds 65 bytes)
;-to become invincible, define the magic word :D
-levelhead = 'w'
-levelhead2 = 97 ;wormy levels header = "0"
+levelhead = 'w'
+levelhead2 = 97 ;wormy levels header = "0"
;_______________________________________________________________________________
; _______ _______ _____ ______ _______ ______ _______
;--- layout --------------------------------------------------------------------
-;(wormN) set:
+;(wormN) offs: set:
heading = 0 ;level*
pos = 2 ;level*
pos2 = 4 ;level
start: ;turn back NOW!
nop ;and so it begins...
jp Start
-#ifdef id2
+#ifndef id2
+ ld bc,$5242
+ rst 10h
+ .dw WormIcon
+#else
ld (bc),a
nop
ld d,h
rst 10h
.dw WormIcon
.dw WormData
-#else
- ld bc,$5242
- rst 10h
- .dw WormIcon
#endif
ld d,a
ld c,a
.db %1010010
jr nz,$+47
dec l
- .db " 98% .225",0
+ .db " 99% .34",0
WormIcon:
.db 8,2
.db %00000000,%00111100
;--- search levels -------------------------------------------------------------
Start:
+ cal _runindicoff
+ cal _flushallmenus
+
cal _RAM_PAGE_7
ld hl,$BFFF ;VAT start
ld ix,templevels
; | | | |_____| | \_ |______ _____ __|__ | \_| __|__ |
;_______________________________________________________________________________
+; cal _runindicoff ;this is after level selection (run from yas1 or restart)
+; cal _flushallmenus ;so this stuff should already be done earlier or by yas
ld (SpSave),sp
- cal _runindicoff
- cal _flushallmenus
im 1
ld a,$D4
rla ;=$17 (c=EXIT-key)
;or$A7 (c=0)
jp c,GameLoop
- jp Exit ;jr?
+ jr Exit
;--- pause menu ----------------------------------------------------------------
inc hl
ld (hl),b
inc hl
- cal resbit
+ ;(resbit)
+ ld a,h
+ and (ix+storepos)
+ ld h,a
ld (ix+head),l
ld (ix+head+1),h
inc hl
ld b,(hl)
inc hl
- cal resbit
+ ;(resbit)
+ ld a,h
+ and (ix+storepos)
+ ld h,a
psh hl
cal res4pixels ;rm last bit
pop hl
jr c,hitflag
;no peas hit:
ld a,e ;peek a (that's x86asm for pop\push ;)
- bit 1,a ;%10 = carrying flag?
+ bit 1,a ;%1O = carrying flag?
jr z,_wormdead ;if not just die
- xor %11 ;drop flag
- ld (ix+reserv),a
+ and %1 ;which flag?
ld hl,drawctfpea1 ;restore #1
- jr z,nottheotherflag ;which flag? (=and %1)
+ jr nz,nottheotherflag
inc hl ;ld hl,drawctfpea2
inc hl ;restore #2
nottheotherflag:
xor %11 ;invert flag taken + ownflag
ld (ix+reserv),a
and %10 ;just returned?
- psh af ;safe z-flag
psh bc ;safe position
+ psh af ;safe z-flag
cal DrawPea ;remove
- ld e,20 ;flag captured+returned
- cal z,IncScore
- pop bc
pop af
+ pop bc
ret nz ;flag taken: continue game ;drawworm
+ ld e,20 ;flag captured+returned
+ psh bc
+ cal IncScore
+ pop bc
ld a,3 ;draw delay
ld (drawctfpea1),a ;redraw..
ld (drawctfpea2),a ;..both flags
PeaY =$-2
PeaX =$-1
cal chkpeahit
- jr nc,_wormdead
+ jp nc,wormdead
;--- take pea ------------------------------------------------------------------
;--- misc ----------------------------------------------------------------------
checkhitlapline:
- ld a,(peaspos) ;63
+ ld a,(peaspos) ;63 usually
sub b ;x==63
jr z,nextlaphalf
- inc a
- ret nz
-nextlaphalf:
+ inc a ;(more checkin' since wormies just have those _huge_ heads ;)
+ ret nz ;x!=62
+nextlaphalf: ;x==62|63; a=0
ld a,(peaspos+1) ;yline
cp c ;ypos
ld a,1
; | | \_ |_____| |_____ ______|
;_______________________________________________________________________________
-releasekeys:
- halt
+releasekeys: ;---------->promise me you'll never let go...
+ halt ;-------------------->i won't let go....
ld a,%10000000 ;all key-masks
out (1),a
- in a,(1)
+ in a,(1) ;--------------->i'll never let go.....
inc a ;cp %11111111 (no keys pressed)
jr nz,releasekeys ;keep waitin
cal GET_KEY ;clear buffer
- ret
-
-resbit:
- ld a,h
- and (ix+storepos)
- ld h,a
- ret
+ ret ;--------------------->*die* (we are VICTORIOUS! muha)
randompos:
ld b,a
ld (ix+pos2),a ;y2
ld (ix+pos2+1),a ;x2
+ ld a,(handledworm) ;who are we? (1-4)
+ cpl ;invert (just bit 0 actually)
+ and 1 ;group 1 (1,3) or 0 (2,4)
+ ld (ix+reserv),a ;reset halflap|flags to starting settings
+
inc (ix+died)
dec (ix+lives)
psh af
- ld a,(gametype)
- cp gamectf ;ctf no death penalty
+ ld a,(gamecar)
+ and _datadecs ;ctf and race no death penalty
cal nz,DecScore10
pop af
ret nz ;HandleWorm done
.db %00011111,%11101111,%11110000,%00111111,%10000111,%00000001,%10000000,%00000011,%11111111,%11110000,%00111110,%00011110,%00010111,%01011101,%10010101,%01100101
.db %00001111,%10000011,%11100000,%00011111,%00000011,%00000001,%10000000,%00000000,%11111111,%11100000,%00000000,%00000000,%11100101,%01010101,%01000110,%01010011
+#ifdef coolzgfx
wtWormy: ;g/o
.db %00000110,%00111000,%00000000,%00111100,%00001111,%10001110,%00111100,%01111000,%00001100,%11011000,%11100011,%10000000,%00000000,%11111100,%00111000,%00000000
.db %00011001,%01000110,%11100000,%11000010,%00011100,%11011111,%01111110,%11111000,%00011110,%11011101,%11110111,%11000000,%00111111,%00000011,%01000110,%11100000
.db %01001100,%00011000,%00000000,%00000100,%00011000,%11011111,%01100010,%11001100,%00110011,%01101101,%10000111,%11000001,%00011100,%00111000,%00011000,%10000010
.db %01010010,%00100100,%01100000,%00011000,%00011111,%11011011,%11101110,%11111100,%00011111,%01111000,%11110110,%11100000,%11000000,%11000110,%00101001,%10000010
.db %01100001,%11000011,%10011111,%11100000,%00001111,%10001001,%11001100,%01111000,%00001110,%00110000,%01100110,%01100000,%00111111,%00000001,%11000110,%01111100
-
;.db %00000000,%00000001,%10000000,%00000000,%00001111,%10000000
-
-#ifndef coolzgfx
+#else
txtGO: .db 5,5,5,5,5," GAME OVER ",$CF,$CF,$CF,$CF,$CF,0
#endif
_dataPctf = %00001000 ;ctf peas=1
__bitPctf = 3
_datatime = %00010000 ;time incs score (timematch)
-;reserved %00100000 ;for future use
+_datadecs = %00100000 ;decrease score on death=1
_datafood = %01000000 ;food present=0 (6!)
_dataPmult = %10000000 ;multiple peas=1 (no _datafood) (7!)
; | | | | | | �turn speed (8=def)
; | | | | | | | �score limit (0=none)
gamesingle = 0 ; | | | | | | | |
-datasingle:.db %00000110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
+datasingle:.db %00100110,3,1,1,-1,-1, 8, 0 ;Singleplayer (SP; 3 lives)
gamepeas = 1
-datapeas: .db %00000100,1,1,1,-1,126,8, 0 ;Peaworm (SP; 1 live, 127 growth)
+datapeas: .db %00100100,1,1,1,-1,126,8, 0 ;Peaworm (SP; 1 live, 127 growth)
gametron = 2
-datatron: .db %01010100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
+datatron: .db %01110100,1,1,1,-1, 0, 8, 0 ;Tron (SP; 1 live, cont.growth)
gamedeathm = 3
-datadeathm:.db %01000000,3,2,1,-1,42, 8, 0 ;Deathmatch (3 lives, 50 growth)
+datadeathm:.db %01100000,3,2,1,-1,42, 8, 0 ;Deathmatch (3 lives, 50 growth)
gamefoodm = 4
-datafoodm: .db %00000000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
+datafoodm: .db %00100000,0,2,1,-1,-1, 8,10 ;Foodmatch (100 score)
gamemfoodm = 5
-datamfoodm:.db %11000010,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas)
+datamfoodm:.db %11100010,0,2,1,-1,-1, 8,10 ;MuchFoodmatch (10 peas)
gametimem = 6
-datatimem: .db %01010000,1,2,1,-1, 0, 8, 0 ;Timematch (1 live, cont.growth)
+datatimem: .db %01110000,1,2,1,-1, 0, 8, 0 ;Timematch (1 live, cont.growth)
gamerace = 7
datarace: .db %01000000,0,2,1,-1,-1, 8,10 ;Race (100 score)
gamectf = 8