wormy/wormedit 0.94.1422
authorMischa Poslawsky <wormy@shiar.org>
Sun, 22 Apr 2001 12:46:06 +0000 (14:46 +0200)
committerMischa Poslawsky <wormy@shiar.org>
Mon, 2 Mar 2009 21:31:52 +0000 (22:31 +0100)
wormedit.pas
wormy.z80
wormy001.lvl

index ce8b3fcb5e1504c3e74a2e366532acb530e73a4c..016174a0541c4859acec0ece6df8369dd788dcde 100644 (file)
@@ -30,15 +30,15 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
       OBJTYPE:ARRAY[0..4]OF STRING[8] =
        ('NONE','LINE','FAT LINE','BAR','CIRCLE');
 
-      ENDTYPE:ARRAY[-1..0]OF STRING[8] =
-       ('MESSAGE','NONE');
+      ENDTYPE:ARRAY[0..1]OF STRING[8] =
+       ('NONE','MESSAGE');
 
       HEAD86S:STRING[53] =
        ('**TI86**'+#$1A+#$A+#0+ {HEADER}
-        'Levelfile for Worm 0�93 made with WormEdit'); {COMMENT}
+        'Levelfile for Worm 0�94 made with WormEdit'); {COMMENT}
 
-      HEADEDIT = ('WormEdit�93'+#0+'LVL');
-      HEADVERSION = 93;
+      HEADEDIT = ('WormEdit�94'+#0+'LVL');
+      HEADVERSION = 94;
 
       B:RECORD
        HEAD:ARRAY[1..15]OF CHAR;
@@ -51,6 +51,7 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
        SPRITE:ARRAY[1..8]OF BYTE;
        ENDTYPE:INTEGER;
        ENDDATA:STRING[255];
+        HINAME:ARRAY[1..3]OF CHAR;
       END {B} =
        (HEAD:HEADEDIT;
         VERSION:HEADVERSION;
@@ -64,7 +65,9 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
            11110000
            11110000
            01100000}
-        ENDTYPE:0);
+        ENDTYPE:1;
+        ENDDATA:'';
+        HINAME:'WOR');
 
       LVLPOS:BYTE = 1;
       OBJPOS:BYTE = 1;
@@ -79,6 +82,7 @@ VAR I,I2:WORD;
     LTEMP:ONELEVEL;
 
     FILENAME:STRING[8];
+    LVLDISP:BYTE;
 
 PROCEDURE MAINTITLE;
 BEGIN
@@ -89,7 +93,7 @@ BEGIN
   TEXTCOLOR(1); WRITE('>�����������������������������');
   WINDOW(41,2,41,25); TEXTCOLOR(7); TEXTBACKGROUND(0); WRITE(CC('�',23));
   WINDOW(1,25,80,25); TEXTBACKGROUND(1); CLRSCR;
-  GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.93'); TEXTBACKGROUND(0);
+  GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.94'); TEXTBACKGROUND(0);
 END; {MAINTITLE}
 
 PROCEDURE CIRCLE(X,Y,Z,COL:BYTE);
@@ -169,10 +173,12 @@ END; {HELPBAR}
 
 PROCEDURE DISPLEVELS;
 BEGIN
-  WINDOW(42,3,80,13); TEXTBACKGROUND(0); CLRSCR;
+  WINDOW(42,3,80,13); TEXTCOLOR(7); TEXTBACKGROUND(0); CLRSCR;
   IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE
     FOR II:=LVLPOS TO MIN(B.LTOTAL,LVLPOS+9)DO BEGIN
-      WRITE(II); TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
+      IF LVLDISP=1THEN WRITE(II) {CONTINOUS}
+      ELSE IF II>B.LSINGLE THEN WRITE(II-B.LSINGLE)ELSE WRITE(II); {SEPERATE}
+      TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
     END; {DISP LEVELS}
 END; {DISPLEVELS}
 
@@ -181,23 +187,25 @@ VAR EDITOK:SHORTINT;
 BEGIN
   EDITOK:=0; REPEAT
     WINDOW(39,1,39,1); GOTOXY(1,1); REPEAT UNTIL KEYPRESSED; C:=READKEY;
-    IF C=' 'THEN EDITOK:=10; {10}
-    IF(C>='1')AND(C<=CHR(EDITMENUMAX+48))THEN EDITOK:=ORD(C)-48; {1..<=9}
-    IF(C=#27)OR(C='-')OR(C='+')THEN EDITOK:=-1; {EXIT}
+    IF C=' 'THEN EDITOK:=10 {10} ELSE
+    IF(C>='1')AND(C<=CHR(EDITMENUMAX+48))THEN EDITOK:=ORD(C)-48 {1..<=9} ELSE
+    IF(C=#27)OR(C='-')OR(C='+')THEN EDITOK:=-1 {EXIT} ELSE
+    IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE) ELSE
     IF C=#0THEN BEGIN  C:=READKEY;
-      IF(C=#80)AND(LVLPOS<B.LTOTAL-9)THEN BEGIN INC(LVLPOS); DISPLEVELS; END; {DOWN}
-      IF(C=#72)AND(LVLPOS>1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END; {DOWN}
+      IF HELPPAGE=5THEN BEGIN
+        IF(C=#80)AND(LVLPOS<B.LTOTAL-9)THEN BEGIN INC(LVLPOS); DISPLEVELS; END {DOWN} ELSE
+        IF(C=#72)AND(LVLPOS>1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END {UP} ELSE
+      END; {LEVELS DISPED}
       IF C=#59THEN HELPBAR(HELPPAGE);
     END; {EXTENDED}
-    IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE);
   UNTIL EDITOK<>0; EDITMENU:=EDITOK;
 END; {EDITMENU}
 
 FUNCTION COMPSIZE:WORD;
 BEGIN
-  I:=$32+B.SPRSIZE+ORD(B.NAME[0])+2;
-  IF B.LFROM[2]>0THEN I:=I+((1+B.LTO[2]-B.LFROM[2])SHL 1);
-  IF B.LFROM[3]>0THEN I:=I+((1+B.LTO[3]-B.LFROM[3])SHL 1);
+  I:=$32+B.SPRSIZE+ORD(B.NAME[0])+5;
+  IF B.LFROM[2]>0THEN I:=I+((1+B.LTO[2]-B.LFROM[2])*5);
+  IF B.LFROM[3]>0THEN I:=I+((1+B.LTO[3]-B.LFROM[3])*5);
   FOR II:=1TO B.LTOTAL DO BEGIN
     INC(I,L[II].SIZE);
     FOR I4:=1TO L[II].NROBJ DO IF L[II].OBJ[I4].TYP<=0THEN DEC(I,5);
@@ -213,7 +221,7 @@ BEGIN
   TEXTCOLOR(15); TEXTBACKGROUND(1);
   CASE BAR OF
     1:BEGIN
-      WRITE('LEVELS',' ':39-6); DISPLEVELS;
+      WRITE('LEVELS',' ':39-6); LVLDISP:=1; DISPLEVELS;
     END; {1:SINGLVLS}
     2:BEGIN
       WRITE('LEVEL OBJECTS',' ':39-13); TEXTCOLOR(7); TEXTBACKGROUND(0);
@@ -249,12 +257,7 @@ BEGIN
       WRITE(' BYTES');
     END; {4:FILE}
     5:BEGIN
-      WRITE('LEVELS',' ':39-6); TEXTCOLOR(7); TEXTBACKGROUND(0);
-      IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE
-       FOR II:=1TO B.LTOTAL DO BEGIN
-         IF II>B.LSINGLE THEN WRITE(II-B.LSINGLE)ELSE WRITE(II);
-         TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
-       END; {DISP LEVELS}
+      WRITE('LEVELS',' ':39-6); LVLDISP:=2; DISPLEVELS;
     END; {5:LEVELS}
   END; {BAR}
   WINDOW(1,2,40,24);
@@ -329,7 +332,7 @@ BEGIN
     TEXTCOLOR(7); WRITE('8: CTF '); TEXTCOLOR(3);
     IF B.LCTF=0THEN WRITE('(NO LEVELS)')ELSE WRITE('(',B.LCTF,')');
 
-    III:=EDITMENU(8,0);
+    III:=EDITMENU(8,5);
     IF III=1THEN BEGIN
       B.LFROM[1]:=INPUTINT('ENTER LEVELS TO SKIP','USE THIS TO TEMPORARILY REMOVE THE FIRSTFEW LEVELS',
        0,0,B.LSINGLE-1); INC(B.LFROM[1]);
@@ -749,7 +752,8 @@ BEGIN
        END; {}
       END; {DELETE}
       5:BEGIN
-        INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE;
+       INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE;
+        IF B.LFROM[1]=0THEN B.LFROM[1]:=1;
        FOR I:=B.LTOTAL DOWNTO II+1DO L[I]:=L[I-1];
        L[II].NAME:='Level #'+NR(II);
        L[II].PEAS:=8; L[II].DELAY:=4; L[II].GROWTH:=15; L[II].BSIZE:=15;
@@ -776,79 +780,73 @@ BEGIN
   UNTIL III=-1; III:=0;
 END; {EDITLVL}
 
-PROCEDURE EDITDSPR;
+PROCEDURE EDITSETS;
 BEGIN
   REPEAT
-    TITLEBAR(0,'EDIT DEFAULT SPRITE');
-    TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': SPRITE SIZE ');
-    TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')');
-    FOR I:=1TO B.SPRSIZE DO BEGIN
-      TEXTCOLOR(14); WRITE(I+1); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3);
-      WRITELN(BYTE2STR(B.SPRITE[I],B.SPRSIZE));
-    END; {DISP SPRITE}
-
-    III:=EDITMENU(1+B.SPRSIZE,0);
-    IF III=1THEN BEGIN
-      I:=INPUTINT('ENTER THE DEFAULT SPRITE SIZE','CAN BE CHANGED PER LEVEL',1,B.SPRSIZE,8);
-      IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0;
-      B.SPRSIZE:=I;
-    END {SIZE} ELSE IF III>1THEN BEGIN
-      S:=INPUTSTR('ENTER NEW LINE #'+NR(III-1)+' OF SPRITE','EXAMPLE: 100101 = X��X�X',
-        ZERO(BYTE2BIN(B.SPRITE[III-1]),8),8);
-      B.SPRITE[III-1]:=STR2BYTE(S);
-    END; {APP}
-  UNTIL III=-1; III:=0;
-END; {EDITDSPR}
-
-PROCEDURE EDITSPEND;
-BEGIN
-  REPEAT
-    TITLEBAR(0,'SINGLEPLAYER ENDING');
-    TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': END TYPE ');
-      TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')'); TEXTCOLOR(14);
+    TITLEBAR(0,'CHANGE DEFAULTS');
+    TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': HISCORE NAME ');
+      TEXTCOLOR(3); WRITELN('(',B.HINAME,')');
+    TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': END TYPE ');
+      TEXTCOLOR(3); WRITELN('(',ENDTYPE[B.ENDTYPE],')');
     CASE B.ENDTYPE OF
-      -1:BEGIN
-        WRITE('2'); TEXTCOLOR(7); WRITE(': EDIT MESSAGE');
-        TEXTCOLOR(3); WRITE(' (',COPY(B.ENDDATA,1,18));
+      1:BEGIN
+        TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITE(': EDIT MESSAGE ');
+        TEXTCOLOR(3); WRITE('(',COPY(B.ENDDATA,1,18));
         IF LENGTH(B.ENDDATA)>18THEN WRITELN('...)')ELSE WRITELN(')');
       END; {MSG}
+      ELSE BEGIN TEXTCOLOR(7); WRITELN('3: CONFIGURE END'); END; {NOTN}
     END; {TYPE}
+    TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': SPRITE SIZE ');
+    TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')');
+    FOR I:=1TO B.SPRSIZE DO BEGIN
+      TEXTCOLOR(14); WRITE(I+4); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3);
+      WRITELN(BYTE2STR(B.SPRITE[I],B.SPRSIZE));
+    END; {DISP SPRITE}
 
-    III:=EDITMENU(2,0);
+    III:=EDITMENU(4+B.SPRSIZE,0);
     CASE III OF
       1:BEGIN
-       FOR II:=0TO 1DO WRITE(NR(II)+': '+ENDTYPE[-II]+CC(' ',40-ORD(ENDTYPE[-II,0])));
+        S:=INPUTSTR('DEFAULT NAME OF HISCORES','LENGTH 3 CHARS',B.HINAME,3);
+        FOR I:=1TO 3DO B.HINAME[I]:=S[I];
+      END; {HINAME}
+      2:BEGIN
+       FOR II:=0TO 1DO WRITE(NR(II)+': '+ENDTYPE[II]+CC(' ',40-ORD(ENDTYPE[II,0])));
        B.ENDTYPE:=INPUTINT('ENTER NEW END TYPE',S,0,0,1);
-       IF B.ENDTYPE=-1THEN B.ENDDATA:='Congratulations!!';
+       IF B.ENDTYPE=1THEN B.ENDDATA:='Congratulations!!';
       END; {TITLE}
-      2:IF B.ENDTYPE=-1THEN
+      3:IF B.ENDTYPE=1THEN
          B.ENDDATA:=INPUTSTR('ENTER NEW END MESSAGE','MAX 255 CHARS','Congratulations!!',255);
+      4:BEGIN
+        I:=INPUTINT('ENTER THE DEFAULT SPRITE SIZE','CAN BE CHANGED PER LEVEL',1,B.SPRSIZE,8);
+        IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0;
+        B.SPRSIZE:=I;
+      END; {SPRSIZE}
+      ELSE IF III>4THEN BEGIN
+        S:=INPUTSTR('ENTER NEW LINE #'+NR(III-4)+' OF SPRITE','EXAMPLE: 100101 = X��X�X',
+          ZERO(BYTE2BIN(B.SPRITE[III-4]),8),8);
+        B.SPRITE[III-4]:=STR2BYTE(S);
+      END; {SPREDIT}
     END; {HANDLE}
   UNTIL III=-1; III:=0;
-END; {EDITSPEND}
-
+END; {EDITSETS}
 
 PROCEDURE EDITMAIN;
 BEGIN
   REPEAT
     TITLEBAR(4,UPCS(B.NAME));
     TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT TITLE');
-    TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': DEFAULT SPRITE');
-      TEXTCOLOR(3); WRITELN(' (',B.SPRSIZE,')');
+    TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': DEFAULTS');
     TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': GAME TYPES');
-    TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': SP ENDING');
-      TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')');
-    TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); WRITE(': LEVELS');
+    TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': LEVELS');
       TEXTCOLOR(3); WRITE(' (',B.LTOTAL,')');
 
-    III:=EDITMENU(5,3);
+    III:=EDITMENU(4,3);
     CASE III OF
       1:B.NAME:=INPUTSTR('ENTER NEW TITLE FOR THIS LEVELFILE','NOTE TI-86 DISPLAYS ONLY 22 CHARS ON THEFIRST LINE',
          B.NAME,32); {TITLE}
-      2:EDITDSPR;
+      2:EDITSETS;
       3:EDITGAME;
-      4:EDITSPEND;
-      5:EDITLVL;
+      4:EDITLVL;
     END; {HANDLE}
   UNTIL III=-1; III:=0;
 END; {EDITMAIN}
@@ -860,7 +858,8 @@ BEGIN
     TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
     WRITELN('FAILED OPENING LEVEL FILE!'); WRITELN('RUNTIME ERROR #',I); HALT;
   END; {CAN'T OPEN}
-  {$I-} BLOCKREAD(F,B,SIZEOF(B)); BLOCKREAD(F,L,SIZEOF(L)); {$I+}
+  {$I-} BLOCKREAD(F,B,SIZEOF(B));
+        FOR I:=1TO B.LTOTAL DO BLOCKREAD(F,L[I],SIZEOF(L[I])); {$I+}
   IF(IORESULT<>0)OR(B.HEAD<>HEADEDIT)THEN BEGIN
     TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
     WRITELN('ERROR READING LEVEL FILE!');
@@ -874,7 +873,8 @@ END; {OPENFILE}
 PROCEDURE FILESAVE;
 BEGIN
   ASSIGN(F,FILENAME+'.LVL'); REWRITE(F,1);
-  BLOCKWRITE(F,B,SIZEOF(B)); BLOCKWRITE(F,L,SIZEOF(L)); CLOSE(F);
+  BLOCKWRITE(F,B,SIZEOF(B));
+  FOR I:=1TO B.LTOTAL DO BLOCKWRITE(F,L[I],SIZEOF(L[I])); CLOSE(F);
 END; {FILESAVE}
 
 PROCEDURE FILECOMP;
@@ -943,15 +943,17 @@ BEGIN
   BLOCKWRITE(FF,B.SPRSIZE,1);
   BLOCKWRITE(FF,B.SPRITE,B.SPRSIZE);
 
-  FOR II:=B.LFROM[1]TO B.LSINGLE DO SAVELEVEL(1); {LEVELS SINGLEPL}
+  IF B.LFROM[1]>0THEN
+    FOR II:=B.LFROM[1]TO B.LSINGLE DO SAVELEVEL(1); {LEVELS SINGLEPL}
   I:=255; BLOCKWRITE(FF,I,1); {END}
   I:=$C9; BLOCKWRITE(FF,I,1); {RET}
 
-  FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO SAVELEVEL(4); {LEVELS MULTIPL}
+  IF B.LMULTI>0THEN
+    FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO SAVELEVEL(4); {LEVELS MULTIPL}
 
   I:=0; I2:=1; IF B.LFROM[2]>0THEN I2:=I2+1+B.LTO[2]-B.LFROM[2];
   IF B.LFROM[3]>0THEN I2:=I2+1+B.LTO[3]-B.LFROM[3];
-  FOR II:=1TO I2 DO BLOCKWRITE(FF,I,2); {HI}
+  FOR II:=1TO I2 DO BEGIN BLOCKWRITE(FF,I,2); BLOCKWRITE(FF,B.HINAME,3); END; {HI}
 
   SEEK(FF,$37); I2:=0; I:=0;
   REPEAT INC(I,I2); BLOCKREAD(FF,I2,1,ISTACK); UNTIL ISTACK<>1;
index d6b21fba449e0a4824df970a35059fda2c0c8890..24250e543943002ba4e49fde23ff92b6aa6ed67b 100644 (file)
--- a/wormy.z80
+++ b/wormy.z80
 
 ; 93% = DONE
 
-;     * internal levels
-;       * check levels/gametype
-;       * enough hiscore saves!
-;     * complete readme
+;    [* internal levels         ]
+;    [  * check levels/gametype ]
+;    [  * enough hiscore saves! ]
+;    [* complete readme         ]
 ;  1% * misc (pollish, bugs, &&&)
 ;   * LINK
-;  2% * fix deaths linkplay and transmit game/level data
-;  2% * make linkplay available for all gametypes (not just deathmatch)
+;  0% * fix first packet loss
+;  1% * transmit game/level data
+;  1% * get g/o signal (l&l) working
+;  2% * send new peas' positions
 ;   * CTF
-;  1% * fix pea XOR problem in ctf (+dom?)
-;     * fix wormstop
-;  1% * domination?: take control points by running over them and hold them
+;  1% * fix pea XOR problem in ctf
+;  1% * fix wormstop in race
 
 ;100% = bugs fixed + levels done
 
 #define buffer      ;use display buffer (otherwise write directly to screen)
 #define readymask   ;"greys" out the field before starting a level
 ;#define hlines     ;horizontal-line routine for more speed drawing boxes
-                       ;(doesn't work properly)
-
+                       ;^^(doesn't work properly)^^
 ;#define readytext  ;displays "prepare" before level starts
 ;#define invincible ;worms cannot die =)
+;#define optdie     ;in race games worms don't die when they run into each other
 
 #define cal call
 #define psh push
@@ -76,11 +77,12 @@ _LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source
 _SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl
 _SET_MM_NUM_BYTES  = $464F ;number of bytes for mm.ldir = ahl
 _mm_ldir           = $52ED ;24bit ldir
+_MM_LDIR_SET_SIZE  = $524D ;_SET_MM_NUM_BYTES + _mm_ldir
 _RAM_PAGE_1        = $47E3 ;set $8000+ to page 1
 _RAM_PAGE_7        = $47F3 ;"""" 7
 _PTEMP_END         = $D29A ;end of VAT
 _load_ram_ahl      = $462F ;ahl->page+hl
-_writeb_inc_ahl    = $5567 ;ld (ahl),c
+_writeb_inc_ahl    = $5567 ;ld (ahl++),c
 _jforce            = $409C ;TI-OS stack restored
 _EXLP              = $4493 ;swap (hl),(de) b times
 _GETB_AHL         = $46C3 ;a=(ahl) \ hl=ahl
@@ -140,19 +142,18 @@ start:
 WormTxt:
   .db "WORMY by SHIAR -- beta 93%",0
 WormIcon:
-  .db 9,2
-  .db %10010110,%01101111
-  .db %10110101,%01001011
-  .db %01110011,%01001001
-  .db %00000011,%10000000
-  .db %00000001,%11100000
-  .db %00111000,%11111000
-  .db %01111110,%00111111
-  .db %11101111,%00001111
-  .db %11000011,%10000000
+  .db 8,2
+  .db %00110000,%00111100
+  .db %01110000,%00111110
+  .db %11100000,%00000111
+  .db %11000011,%11000011
+  .db %11000111,%11100011
+  .db %11101110,%01100111
+  .db %01111100,%01111110
+  .db %00111000,%00111100
 
 levelhead  = 'w'
-levelhead2 = 93 ;wormy levels header = "93"
+levelhead2 = 94 ;wormy levels header = "93"
 
 int_handler:
   ex af,af'
@@ -341,7 +342,7 @@ levselect:
   cp  K_SECOND-1
   jr  z,loadlevel
   cp  K_EXIT-1
-  ret z
+  jp  z,ExitNoStats
   cp  K_ENTER-1
   jr  nz,levselect
 ; jr  z,loadlevel
@@ -393,8 +394,7 @@ skiptitle:
   cal _SET_ABS_DEST_ADDR ;store in mem.
   ld  hl,0
 leveldataSize =$-2
-  cal _SET_MM_NUM_BYTES
-  cal _mm_ldir
+  cal _MM_LDIR_SET_SIZE
 
   cal _LOAD_ABS_SRC_ADDR ;->ahl
   ld  (hiscrposa),a
@@ -938,8 +938,8 @@ curworm =$-1
   ld  hl,$303E
   ld  (_penCol),hl
   cal getwormname
-  ld  hl,worm1name-18
-  add hl,de
+  psh ix ;wormNname
+  pop hl ;ld hl,ix
   cal _vputs
   ld  hl,$363E ;controls
   ld  (_penCol),hl
@@ -1028,62 +1028,54 @@ getwormname: ;of (curworm)
   ret
 
 changeworms:
-  cal _clrWindow
-  ld  hl,txtEName
-  cal _puts ;"Enter name player "
-  ld  a,(curworm)
-  add a,'0'
-  cal _putc
-
   cal getwormname
+  psh ix
+  pop hl ;ld hl,ix
+  psh hl
+  ld  b,8
+emptyname:
+  ld  (hl),' '
+  inc hl
+  dnz emptyname
   ld  a,maxnamelength
-  cal entername
-  ld  (ix),0 ;end mark
-  jp  DisplayMenu
-
-entername:
-  ld  h,1
-  ld  l,h ;)
-  ld  (_curRow),hl
   ld  (namelength),a
 enternameloop:
+  ld  hl,$FF07 ;begin pos
+  ld  a,6 ;nr of lines
+  cal clroldcustom
+  ld  hl,$303E
+  ld  (_penCol),hl
+  pop hl
+  psh hl
+  ld  (ix),0
+  cal __vputs
+  ld  (ix),' '
   ld  a,'_'
-  cal _putc
-  ld  hl,_curCol
-  dec (hl)
+  cal __vputmap
 nokeypressed:
   halt
   cal GET_KEY
   or  a
   jr  z,nokeypressed
 
+  ld  hl,namelength
   cp  K_DEL
   jr  nz,continue
 backspace:
-  ld  hl,namelength
   ld  a,(hl)
   cp  maxnamelength
   jr  nc,nokeypressed
   inc (hl)
-
   dec ix
-  ld  a,' '
-  ld  (ix),a
-  cal _putc
-  ld  hl,_curCol
-  dec (hl)
-  dec (hl)
   jr  enternameloop
 continue:
   cp  K_ENTER
-  ret z
+  jr  z,nameentered
   cp  K_EXIT
-  ret z
-
-  ld  hl,namelength
-  dec (hl)
-  ret z
+  jr  z,nameentered
 
+  dec (hl) ;(namelength)
+  jr  z,nameentered
   ld  hl,chartable
   ld  e,a
   ld  d,0
@@ -1091,14 +1083,11 @@ continue:
   ld  a,(hl)
   or  a
   jr  z,nokeypressed
-
   ld  (ix),a
-  cal _putc
   inc ix
   cal releasekeys
   jr  enternameloop
 
-
 chartable:
   .db 0,".<>!",0,0,0,0  ;down,L,R,up
   .db 0,"XTOJE0",0      ;enter..clear
@@ -1108,12 +1097,18 @@ chartable:
   .db $D9,"-PKFA6'"     ;on..alpha
   .db "54321*",0,$D0    ;F5..more
 
+nameentered:
+  pop ix ;stringbegin
+  ld  (ix+8),0 ;end mark
+  jp  DisplayMenu
+
 ;--proc
 
 clrold:
   ld  hl,$FD97 ;begin pos
-  ld  de,7 ;bytes to add
   ld  a,35 ;nr of lines
+clroldcustom:
+  ld  de,7 ;bytes to add
 clroldsettings:
   ld  c,9 ;bytes to clear
 clroldsetsloop:
@@ -1139,8 +1134,8 @@ skipsprite:
   ld  b,(hl) ;balls
   inc b
   inc b ;skip 6
-  ld  a,c
-  cp  _datasingle
+  ld  a,(Gametype)
+  cp  gamesingle
   jr  z,skipworms
   inc b ;multiplayer lvl
   inc b
@@ -1294,7 +1289,6 @@ multiplayer:
 ;-----------------------------
 
 GameOver:
-  cal _clrLCD
   ld  hl,worm1set
   ld  de,worm1
   ld  a,4 ;4x (all worms)
@@ -1320,8 +1314,9 @@ wormbeglives =$-1
   dec a      ;loop
   jr  nz,createwormsloop
 
-  pop hl ;begin of current level
 StartLevel:
+  cal _clrWindow
+  pop hl ;begin of current level
   ld  de,Left
   ld  a,(hl)
   inc a ;=255?
@@ -1331,7 +1326,6 @@ StartLevel:
   ld  hl,Level
   dec (hl) ;curlevel-- (not beyond last lvl)
   cal releasekeys
-  cal _clrWindow
   pop hl
 ;show end msg or smtn
   ld  bc,Exit
@@ -1943,33 +1937,44 @@ hilevelcheckdone:
   jr  z,hiscorecheckdone ;no SP
 checkhiscore:
   cal loadhiscoreposinahl
-  cal _Get_Word_ahl ;de=old_hi
- psh de
- cal _RAM_PAGE_1 ;&&
- pop de
-  ld  hl,(worm1+score)
-
-  ld  a,h           ;New
-  cp  d             ;Old
-  jr  c,NotNewHigh  ;New<Old
-  jr  nz,newhigh    ;New>Old
-
-  ld  a,e           ;old
-  cp  l             ;new
-  jr  nc,NotNewHigh ;new<old
+  cal _SET_ABS_SRC_ADDR ;from ahl (lvlfile)
+  xor a
+  ld  hl,highsave
+  cal _SET_ABS_DEST_ADDR ;to local
+  ld  hl,5 ;5 bytes
+  cal _MM_LDIR_SET_SIZE ;get old score+name
+  cal _RAM_PAGE_1
 
-newhigh:            ;New>=Old
-  ex  de,hl
+  ld  de,(highsave)    ;de=prev. hiscore
+  ld  hl,(worm1+score) ;hl=worm1's score
+  cal _cphlde ;sub hl,de
+  jr  c,NotNewHigh ;new<old
+  jr  z,NotNewHigh ;new<=old
+newhigh:            ;New>Old
+  ld  (highsave),hl ;store new hiscore
+  ld  de,highsave+2 ;to
+  ld  hl,worm1+name ;from
+  ld  bc,3 ;3 chars
+  ldir ;store new hiname
   cal loadhiscoreposinahl
-  cal _Set_Word_ahl ;de->(ahl)
- cal _RAM_PAGE_1
+  cal _SET_ABS_DEST_ADDR ;to ahl
+  xor a
+  ld hl,highsave
+  cal _SET_ABS_SRC_ADDR ;from local
+  ld  hl,5
+  cal _MM_LDIR_SET_SIZE ;save new
+  cal _RAM_PAGE_1
 
-NotNewHigh: ;de=current hiscore
-  ld  hl,$0807
-  ld  (_curRow),hl
+NotNewHigh:
+  ld  hl,$3149
+  ld  (_penCol),hl
   ld  hl,txthiscore
+  cal _vputs
+  ld  hl,$0C07
+  ld  (_curRow),hl
+  ld  hl,highsave+2
   cal _puts
-  ex  de,hl ;pop
+  ld  hl,(highsave)
   cal showHL
 hiscorecheckdone:
 
@@ -2009,8 +2014,7 @@ ExitNoStats:
   ld  hl,savestart
   cal _SET_ABS_SRC_ADDR
   ld  hl,saveend-savestart
-  cal _SET_MM_NUM_BYTES
-  cal _mm_ldir
+  cal _MM_LDIR_SET_SIZE
 
   cal releasekeys
   res 4,(iy+9)
@@ -2027,16 +2031,20 @@ loadhiscoreposinahl:
   ld  a,(nrlevels+1)
   ld  l,a ;skip peaworm slots for tron mode
 hi_:
+  add hl,hl ;one WORD per hiscore
   or  a ;Singleplayer?
   ld  b,0 ;offset 0 for SP
   jr  z,hi__
   ld  a,(Level)
   ld  b,a ;levels to skip (including 1 for singleplayer)
 addlevelposition:
+  inc hl
   inc hl ;add one word per level
+  inc hl
+  inc hl
+  inc hl ;plus 3 bytes for name
   dnz addlevelposition
 hi__:
-  add hl,hl ;one WORD per hiscore
   xor a ;ahl=0(+hl)
   ld  bc,defhiscrpos
 hiscrposhl =$-2
@@ -2044,6 +2052,8 @@ hiscrposhl =$-2
 hiscrposa =$+1
   adc a,0 ;ahl=saveloc
   ret
+highsave:
+  .db 0,0,"WOR ",0
 
 ;-----------------------------
 ;----------- worm ------------
@@ -2266,9 +2276,11 @@ GotFour:
 Hitworm:
   ld  a,(gameCar)
   ld  h,a
+#ifdef optdie
   and _datadie
   cal z,checkhitotherworm
   ld  a,h
+#endif
   and _datamultpeas ;&&bit
   jr  nz,multiple_peas
   ld  a,h
@@ -2313,7 +2325,6 @@ peagrowth =$-1
   cal removeworm
   pop hl                         ; << call
   pop hl                         ; << call
-  pop hl                         ; << levelp new
   ld  (ix+delay),2
   jp  StartLevel
 
@@ -2440,6 +2451,7 @@ nolap:
   ld  (ix+reserv),a
   ret
 
+#ifdef optdie
 checkhitotherworm:
  .db  $dd,$7d ;ld a,lx
   cp  worm2&255
@@ -2459,6 +2471,7 @@ chkworm:
  pop ix
   ret z ;not hit
   pop bc ;call
+#endif
 stopworm:
   ld  bc,0
 previouspos =$-2
@@ -3475,12 +3488,6 @@ circledraw:              ;destr:de
   ret
 
 
-
-
-
-
-
-
 ;-----------------------------
 ;----------- link ------------
 ;-----------------------------
@@ -3702,7 +3709,6 @@ txtNo:     .db "No",0
 txtKeyleft: .db ":left",0
 txtKeyright:.db "/right",0
 txtLevsel:  .db $CF," Select levels ",5,0
-txtEName:   .db "Enter name player ",0
 txtWaiting: .db "Waiting...",0
 txtReceive: .db "Receiving..." ;,0
 
@@ -3768,23 +3774,26 @@ gamerace     =  6 ;used
 datarace:   .db  %0000000,0,2,1,-1,-1, 8,10 ;Race (100 score, no collision)
 gamectf      =  7 ;used
 datactf:    .db  %1001000,0,4,1,-1,-1, 8, 9 ;CTF (90 score)
-_datasingle    = %1100110 ;(datasingle) usable like gamesingle
 
 worm1set:  .dw worm1p,worm1p
            .db %11110111,%00,-01,K_RIGHT,K_LEFT
-worm1name: .db "Wormy   ",0
+worm1name: .db "WORMY   ",0
 worm2set:  .dw worm2p,worm2p
            .db %11111011,%11,-01,K_F2,K_F1
-worm2name: .db "Viper   ",0
+worm2name: .db "VIPER   ",0
 worm3set:  .dw worm3p,worm3p
            .db %11111011,%00,-01,K_COMMA,K_STO
-worm3name: .db "Nibbler ",0
+worm3name: .db "NIBBLER ",0
 worm4set:  .dw worm4p,worm4p
            .db %11111011,%00,-01,K_PLUS,K_ENTER
-worm4name: .db "Jim     ",0
+worm4name: .db "JIM     ",0
 
 defhiscrpos:
-  .dw 0,0,0,0,0,0
+  .db 0,0,"SHI"
+  .db 0,0,"SHI"
+  .db 0,0,"SHI"
+  .db 0,0,"SHI"
+  .db 0,0,"SHI"
 
 saveend:
 
index 2fa13359e3d80bb3c01b8afc1715960044808d87..1f5127eb7a4a74106d9962f4398c368ee3006a32 100644 (file)
Binary files a/wormy001.lvl and b/wormy001.lvl differ