41bf14dbde72c1637087a2ca11909611befbe133
[wormy.git] / wormlvl.z80
1 ;128x57 FIELD:
2 ;       +-----------------+
3 ;(0,0)> |####(BORDER)#####|
4 ;       |#*(2,2)         #|
5 ;       |#               #|
6 ;       |#(63,28)*(64,28)#|
7 ;       |#               #|
8 ;       |#      (125,54)*#|
9 ;       |#################| <(127,56)
10 ;       +-----------------+
11 ;Drawable screen is (2,2)-(125,54); center is (63.5,28)
12
13
14 #include "asm86.h"
15 #include "ti86asm.inc"
16
17
18 ;---------- HEADER ----------
19
20   .org $F3E3-16                ;$F3E3-[name size]
21             ;^^ <-MUST EQUAL NAME SIZE BELOW!!! If not, Worm will crash!
22
23   .db 'w',90                   ;wormLevel header (version .90)
24   .db 16,"Worm LevelPack I"    ;name size (UPDATE .ORG!!!); level name
25   .dw hiscore-single           ;leveldata size
26
27
28 levelsdata:
29
30   .dw single          ;points to singleplayer levels below
31   .dw peaworm         ;...peaworm level
32   .dw deathmatch      ;...deathmatch
33   .dw foodmatch       ;...foodmatch
34   .dw linkmatch       ;...linkmatch
35   .dw race            ;...race
36   .dw ctf             ;...capture the flag
37   .dw domination      ;...domination
38
39 ;note: use <.dw 0> if no levels present (empty level will be used).
40
41   .db 2,3,3,2         ;max. choosable level+1 for each gametype
42   .db 2,2,2,2         ;so: 2 = level 1 only; 4 = level 1 to 3 available
43
44 ;again .db 0 indicates no levels present.
45
46
47 ;---------- LEVELS ----------
48
49 ;LEVEL-FORMAT:
50 ;------------
51 ; .db 5               ;nr. of peas in level
52 ; .db 4               ;delay (0=fastest, 4=normal)
53 ; .db 15              ;growth per pea
54 ; .db 15              ;begin size
55 ; .db 4               ;sprite size (1-8; 0=use default sprite)
56 ; .db %01100000       ;the sprite
57 ; .db %11110000
58 ; .db %11110000
59 ; .db %01100000
60 ; .db 2               ;bouncing balls (0-40)
61 ; .db 2               ;BALL #1: begin y-position
62 ; .db 4               ;         begin-x
63 ; .db %00             ;         direction (%00=right+down, %11=left+up)
64 ; .db 2,7,%00         ;BALL #2: y,x,direction
65 ; .db 0               ;your start direction (0=down,$40=right,$80=up,$C0=left)
66 ; .db 2               ;your y-position (2=at top)
67 ; .db 63              ;your x-position (63=center)
68 ;                     ;IN MULTIPLAYER LEVELS also set positions for worm 2-4:
69 ;(.db $C0,28,125 )    ;player 2 moves left
70 ;(.db $00, 2, 63 )    ;player 3 moves down
71 ;(.db $80,54, 63 )    ;player 4 moves up
72 ;
73 ; .db 128,57          ;field size: width (128-255), height (57-255)
74 ;                     ; screen will SCROLL if size is more than 128,57
75 ; .db 2               ;number of lines:
76 ; .db 28,14,100,41    ;LINE #1 coordinates: (x1,y1)-(x2,y2)
77 ; .db 28,41,100,14    ;LINE #2: the same
78 ; .db 1               ;number of boxes:
79 ; .db 16,12,48,12     ;BOX #1: x1,y1,x2,ysize(y2-y1)
80 ;------------         ;THAT'S ALL; repeat for all levels
81
82
83 single:               ;singleplayer levels start here
84
85   .db 5,4,15          ;peas/delay/growth
86   .db 15,5            ;size/spritesize
87   .db %01110000       ;sprite
88   .db %10001000
89   .db %10001000
90   .db %10001000
91   .db %01110000
92   .db 0               ;balls
93   .db 0,2,63          ;d/y/x
94   .db 128,57          ;field size
95   .db 0,0             ;no lines/boxes
96
97   .db 8,4,15,15,0
98   .db 0               ;no sprite
99   .db $40,14,2
100   .db 128,57
101   .db 1
102   .db 28,28,100,28
103   .db 0
104
105   .db 9,4,15,15,0,0
106   .db $40,8,2
107   .db 128,57
108   .db 2
109   .db 28,14,100,14
110   .db 28,41,100,41
111   .db 0
112
113   .db 4,3,15,10,0,1
114   .db 2,4,0           ;ball
115   .db 0,2,124
116   .db 128,57
117   .db 2               ;lines
118   .db 28,14,100,41
119   .db 28,41,100,14
120   .db 0
121
122   .db 9,3,15,15,0,0
123   .db $40,8,2
124   .db 128,80
125   .db 2
126   .db 64,14,64,66
127   .db 20,40,108,40
128   .db 0
129
130   .db 10,3,15,15,0,0
131   .db 2,8,$40
132   .db 128,90
133   .db 3               ;lines
134   .db 18,20,18,70
135   .db 110,20,110,70
136   .db 18,45,110,45
137   .db 0
138
139   .db 7,3,15,15,0,0
140   .db 64,4,0
141   .db 128,86
142   .db 6
143   .db 34,13,56,35
144   .db 34,71,56,49
145   .db 72,35,94,13
146   .db 72,49,94,71
147   .db 16,20,16,64
148   .db 110,20,110,64
149   .db 0
150
151   .db 9,3,15,15,0,0
152   .db $40,4,10
153   .db 128,82
154   .db 3               ;lines
155   .db 0,20,74,20
156   .db 54,40,128,40
157   .db 0,60,74,60
158   .db 0
159
160   .db 12,3,15,15,0,0
161   .db $40,2,2
162   .db 128,90
163   .db 6
164   .db 20,16,54,16
165   .db 74,16,110,16
166   .db 20,16,20,72
167   .db 110,16,110,72
168   .db 20,72,54,72
169   .db 74,72,110,72
170   .db 0
171
172   .db 8,2,15,15,0,0
173   .db $C0,67,48
174   .db 128,128
175   .db 13              ;lines
176   .db 34,56,56,34
177   .db 34,72,56,94
178   .db 72,34,94,56
179   .db 72,94,94,72
180   .db 46,64,80,64
181   .db 22,11,22,33
182   .db 11,22,33,22
183   .db 22,95,22,117
184   .db 11,106,33,106
185   .db 103,11,103,33
186   .db 91,22,115,22
187   .db 103,95,103,117
188   .db 91,106,115,106
189   .db 0
190
191   .db 255             ;end marker: no more levels
192
193 ;Code to run when all levels are done:
194 ;Worm waits a second, then screen is cleared and this code will be run.
195 ;End with <ret> (stats-screen will then be displayed.)
196 ;If you don't want an ending, simply put <ret>.
197
198    ld   hl,endtext
199    call _puts         ;display text
200    jp   _getkey       ;wait for a key
201                       ;jp ? = call ? + ret
202 endtext:
203   .db "  Congratulations!!",0
204
205
206 peaworm:
207   .db 5,4,15
208   .db 15,5
209   .db %01110000
210   .db %10001000
211   .db %10001000
212   .db %10001000
213   .db %01110000
214   .db 0
215   .db 0,2,63
216   .db 128,57
217   .db 0,0
218
219   .db 5,4,15,15,0,0
220   .db 0,2,63
221   .db 128,57
222   .db 0,0
223
224
225 deathmatch:
226   .db 8,5,15,31,0,0
227   .db $40,28,2        ;begin stats for each player
228   .db $C0,28,125
229   .db $00,2,63
230   .db $80,54,63
231   .db 128,57          ;field size
232   .db 0
233   .db 4               ;4 boxes
234   .db 16,12,48,12
235   .db 80,12,112,12
236   .db 16,34,48,12
237   .db 80,34,112,12
238
239   .db 8,4,18,15,0,0
240   .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
241   .db 128,57
242   .db 0,0
243
244
245 foodmatch:
246 ctf:
247 domination:
248   .db 8,5,18,15,0,0
249   .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
250   .db 128,57
251   .db 0,0
252
253
254 linkmatch:
255   .db 8,0,15,15,0,0
256   .db $40,30,2,$C0,30,125, $00,2,64,$80,54,64
257   .db 228,157
258   .db 0,0
259
260
261 race:
262   .db 8,4,15,10,0,0
263   .db $40,3,2,$40,6,2, $40,9,2,$40,12,2
264   .db 128,57
265   .db 0
266   .db 2
267   .db 22,21,104,15
268   .db 52,10,74,37
269
270
271 hiscore:
272   .dw 0               ;singleplayer hiscore will be saved here
273   .dw 1,2             ;peaworm hiscore for each peaworm-level
274
275
276   .end
277 .end