-.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
.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
.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
.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
.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
.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