worm 0.90.0501: title picture, mode-specific improvements
[wormy.git] / wormlvl.z80
index 00c42682c4c3fa9894fb6f915bfdfbf35873a013..41bf14dbde72c1637087a2ca11909611befbe133 100644 (file)
-.org $EA00-16
+;128x57 FIELD:
+;       +-----------------+
+;(0,0)> |####(BORDER)#####|
+;       |#*(2,2)         #|
+;       |#               #|
+;       |#(63,28)*(64,28)#|
+;       |#               #|
+;       |#      (125,54)*#|
+;       |#################| <(127,56)
+;       +-----------------+
+;Drawable screen is (2,2)-(125,54); center is (63.5,28)
 
-.dw  single,peaworm,deathmatch,foodmatch
-.dw  linkmatch,hunting,race,ctf
 
-;-----------------------------
-;---------- levels -----------
-;-----------------------------
+#include "asm86.h"
+#include "ti86asm.inc"
 
-NUM_LEVELS = 10
 
-single:
-peaworm:
+;---------- HEADER ----------
+
+  .org $F3E3-16                ;$F3E3-[name size]
+            ;^^ <-MUST EQUAL NAME SIZE BELOW!!! If not, Worm will crash!
+
+  .db 'w',90                   ;wormLevel header (version .90)
+  .db 16,"Worm LevelPack I"    ;name size (UPDATE .ORG!!!); level name
+  .dw hiscore-single           ;leveldata size
+
+
+levelsdata:
+
+  .dw single          ;points to singleplayer levels below
+  .dw peaworm         ;...peaworm level
+  .dw deathmatch      ;...deathmatch
+  .dw foodmatch       ;...foodmatch
+  .dw linkmatch       ;...linkmatch
+  .dw race            ;...race
+  .dw ctf             ;...capture the flag
+  .dw domination      ;...domination
+
+;note: use <.dw 0> if no levels present (empty level will be used).
+
+  .db 2,3,3,2         ;max. choosable level+1 for each gametype
+  .db 2,2,2,2         ;so: 2 = level 1 only; 4 = level 1 to 3 available
+
+;again .db 0 indicates no levels present.
+
+
+;---------- LEVELS ----------
+
+;LEVEL-FORMAT:
+;------------
+; .db 5               ;nr. of peas in level
+; .db 4               ;delay (0=fastest, 4=normal)
+; .db 15              ;growth per pea
+; .db 15              ;begin size
+; .db 4               ;sprite size (1-8; 0=use default sprite)
+; .db %01100000       ;the sprite
+; .db %11110000
+; .db %11110000
+; .db %01100000
+; .db 2               ;bouncing balls (0-40)
+; .db 2               ;BALL #1: begin y-position
+; .db 4               ;         begin-x
+; .db %00             ;         direction (%00=right+down, %11=left+up)
+; .db 2,7,%00         ;BALL #2: y,x,direction
+; .db 0               ;your start direction (0=down,$40=right,$80=up,$C0=left)
+; .db 2               ;your y-position (2=at top)
+; .db 63              ;your x-position (63=center)
+;                     ;IN MULTIPLAYER LEVELS also set positions for worm 2-4:
+;(.db $C0,28,125 )    ;player 2 moves left
+;(.db $00, 2, 63 )    ;player 3 moves down
+;(.db $80,54, 63 )    ;player 4 moves up
+;
+; .db 128,57          ;field size: width (128-255), height (57-255)
+;                     ; screen will SCROLL if size is more than 128,57
+; .db 2               ;number of lines:
+; .db 28,14,100,41    ;LINE #1 coordinates: (x1,y1)-(x2,y2)
+; .db 28,41,100,14    ;LINE #2: the same
+; .db 1               ;number of boxes:
+; .db 16,12,48,12     ;BOX #1: x1,y1,x2,ysize(y2-y1)
+;------------         ;THAT'S ALL; repeat for all levels
 
-  .db 5,4,15,0      ;peas,speed,begin_size,balls
-  .db 0,2,63        ;start d, y, x
-  .db 128,57        ;field width (128-255), height (57-255)
-  .db 0,0           ;no additional lines, boxes
 
-  .db 8,4,15,0
+single:               ;singleplayer levels start here
+
+  .db 5,4,15          ;peas/delay/growth
+  .db 15,5            ;size/spritesize
+  .db %01110000       ;sprite
+  .db %10001000
+  .db %10001000
+  .db %10001000
+  .db %01110000
+  .db 0               ;balls
+  .db 0,2,63          ;d/y/x
+  .db 128,57          ;field size
+  .db 0,0             ;no lines/boxes
+
+  .db 8,4,15,15,0
+  .db 0               ;no sprite
   .db $40,14,2
   .db 128,57
   .db 1
-  .db 28,28,100,28  ;line coords: x1,y1,x2,y2
+  .db 28,28,100,28
   .db 0
 
-  .db 9,4,15,0
+  .db 9,4,15,15,0,0
   .db $40,8,2
   .db 128,57
   .db 2
@@ -32,7 +110,16 @@ peaworm:
   .db 28,41,100,41
   .db 0
 
-  .db 9,3,15,0
+  .db 4,3,15,10,0,1
+  .db 2,4,0           ;ball
+  .db 0,2,124
+  .db 128,57
+  .db 2               ;lines
+  .db 28,14,100,41
+  .db 28,41,100,14
+  .db 0
+
+  .db 9,3,15,15,0,0
   .db $40,8,2
   .db 128,80
   .db 2
@@ -40,24 +127,16 @@ peaworm:
   .db 20,40,108,40
   .db 0
 
-  .db 10,3,15,0
+  .db 10,3,15,15,0,0
   .db 2,8,$40
   .db 128,90
-  .db 3
+  .db 3               ;lines
   .db 18,20,18,70
   .db 110,20,110,70
   .db 18,45,110,45
   .db 0
 
- .db 4,3,10,1 \ .dw $20F
- .db 0,2,63
- .db 128,57
- .db 2
- .db 28,14,100,41
- .db 28,41,100,14
- .db 0
-
-  .db 7,3,15,0
+  .db 7,3,15,15,0,0
   .db 64,4,0
   .db 128,86
   .db 6
@@ -69,17 +148,17 @@ peaworm:
   .db 110,20,110,64
   .db 0
 
-  .db 9,3,15,0
+  .db 9,3,15,15,0,0
   .db $40,4,10
   .db 128,82
-  .db 3
+  .db 3               ;lines
   .db 0,20,74,20
   .db 54,40,128,40
   .db 0,60,74,60
   .db 0
 
-  .db 12,3,15,0
-  .db $40,4,0
+  .db 12,3,15,15,0,0
+  .db $40,2,2
   .db 128,90
   .db 6
   .db 20,16,54,16
@@ -90,10 +169,10 @@ peaworm:
   .db 74,72,110,72
   .db 0
 
-  .db 8,2,15,0
-  .db $C0,72,48
+  .db 8,2,15,15,0,0
+  .db $C0,67,48
   .db 128,128
-  .db 13
+  .db 13              ;lines
   .db 34,56,56,34
   .db 34,72,56,94
   .db 72,34,94,56
@@ -109,51 +188,90 @@ peaworm:
   .db 91,106,115,106
   .db 0
 
-deathmatch:
-  .db 8,5,31,0
-  .db $40,28,2,$C0,28,125, $00,2,63,$80,54,63
+  .db 255             ;end marker: no more levels
+
+;Code to run when all levels are done:
+;Worm waits a second, then screen is cleared and this code will be run.
+;End with <ret> (stats-screen will then be displayed.)
+;If you don't want an ending, simply put <ret>.
+
+   ld   hl,endtext
+   call _puts         ;display text
+   jp   _getkey       ;wait for a key
+                      ;jp ? = call ? + ret
+endtext:
+  .db "  Congratulations!!",0
+
+
+peaworm:
+  .db 5,4,15
+  .db 15,5
+  .db %01110000
+  .db %10001000
+  .db %10001000
+  .db %10001000
+  .db %01110000
+  .db 0
+  .db 0,2,63
+  .db 128,57
+  .db 0,0
+
+  .db 5,4,15,15,0,0
+  .db 0,2,63
   .db 128,57
+  .db 0,0
+
+
+deathmatch:
+  .db 8,5,15,31,0,0
+  .db $40,28,2        ;begin stats for each player
+  .db $C0,28,125
+  .db $00,2,63
+  .db $80,54,63
+  .db 128,57          ;field size
   .db 0
-  .db 4             ;4 boxes
-  .db 4,19,16,14    ;xsize,ysize,xpos,ypos
-  .db 4,19,80,14
-  .db 4,19,16,34
-  .db 4,19,80,34
+  .db 4               ;4 boxes
+  .db 16,12,48,12
+  .db 80,12,112,12
+  .db 16,34,48,12
+  .db 80,34,112,12
+
+  .db 8,4,18,15,0,0
+  .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
+  .db 128,57
+  .db 0,0
+
 
 foodmatch:
 ctf:
-  .db 8,5,15,0
+domination:
+  .db 8,5,18,15,0,0
   .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
   .db 128,57
   .db 0,0
 
+
 linkmatch:
-  .db 8,0,15,0
+  .db 8,0,15,15,0,0
   .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
   .db 228,157
   .db 0,0
 
-hunting:
-  .db 8,7,17,0
-#ifdef 0
-huntersize = 31
-#endif
-  .db $40,28,2,$C0,28,125, $00,2,63,$80,54,63
-  .db 128,57
-  .db 0
-  .db 4
-  .db 4,19,16,14
-  .db 4,19,80,14
-  .db 4,19,16,34
-  .db 4,19,80,34
 
 race:
-  .db 8,2,10,0
+  .db 8,4,15,10,0,0
   .db $40,3,2,$40,6,2, $40,9,2,$40,12,2
   .db 128,57
   .db 0
-  .db 1
-  .db 8,29,32,20
+  .db 2
+  .db 22,21,104,15
+  .db 52,10,74,37
+
+
+hiscore:
+  .dw 0               ;singleplayer hiscore will be saved here
+  .dw 1,2             ;peaworm hiscore for each peaworm-level
+
 
   .end
 .end
\ No newline at end of file