-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNARZOD.ASM
445 lines (445 loc) · 16.1 KB
/
NARZOD.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
; *********************************************************
; *********************************************************
; *** ***
; *** G C E === V E C T R E X === ***
; *** ***
; *** F O R T R E S S O F N A R Z O D ***
; *** ***
; *********************************************************
; *********************************************************
;
;
;=============================================================================
;
; REV DATE PROG COMMENT(S)
; --- ---- ---- ----------
;
; B 8/25/83 JJH MISC. CODE COMPACTION
; ADDED LISTING CONTROLS
; CORRECTED BLASTER COUNTER DURING TWO PLAYER MODE
; CORRECTED KILLER ABORT / TWO PLAYER SWITCHING
;
; A 5/05/83 JJH EXPANDED THE INTER-LINE SPACING FOR THE
; 'ABANDON ALL HOPE' MESSAGE
;
; - 12/26/82 JJH INITIAL RELEASE
;
;=============================================================================
;
;
;
; *********************************************************
; *********************************************************
; *** ***
; *** L I S T I N G C O N T R O L S ***
; *** ***
; *********************************************************
; *********************************************************
;
;
LIST -F
;
;
ON EQU 1
OFF EQU 0
;
;
;
L.ALL EQU ON ; OVER-RIDE ALL LISTING SECTIONS ?
;
;
L.STOR EQU ON OR L.ALL ; LIST WORKING STORAGE ?
;
L.INIT EQU ON OR L.ALL ; LIST SECTION 'INIT.NAR' ?
L.MAIN EQU ON OR L.ALL ; LIST SECTION 'MAIN.NAR' ?
L.KIL EQU ON OR L.ALL ; LIST SECTION 'KILLER.NAR' ?
;
L.BLST EQU OFF OR L.ALL ; LIST SECTION 'GBLAST.NAR' ?
L.BLT EQU OFF OR L.ALL ; LIST SECTION 'GBULET.NAR' ?
L.GRD EQU OFF OR L.ALL ; LIST SECTION 'GGUARD.NAR' ?
L.SPK EQU OFF OR L.ALL ; LIST SECTION 'GSPIKE.NAR' ?
L.BRD EQU OFF OR L.ALL ; LIST SECTION 'GBIRD.NAR' ?
L.TAIL EQU ON OR L.ALL ; LIST SECTION 'TAIL.NAR' ?
;
L.CIT EQU OFF OR L.ALL ; LIST SECTION 'CITDEL.NAR' ?
L.SND EQU OFF OR L.ALL ; LIST SECTION 'SOUND.NAR' ?
L.COL EQU OFF OR L.ALL ; LIST SECTION 'COLLIDE.NAR' ?
L.TMR EQU OFF OR L.ALL ; LIST SECTION 'TIMERS.NAR' ?
L.SUBR EQU OFF OR L.ALL ; LIST SECTION 'SUBR.NAR' ?
;
L.GAM EQU OFF OR L.ALL ; LIST SECTION 'GAME.NAR' ?
L.WALL EQU OFF OR L.ALL ; LIST SECTION 'WALLS.NAR' ?
L.PRS EQU OFF OR L.ALL ; LIST SECTION 'PRSPCT.NAR' ?
L.PCK EQU OFF OR L.ALL ; LIST SECTION 'PACKS.NAR' ?
;
;
;
;
; ***************************************
; ***************************************
; *** ***
; *** E Q U A T E S ***
; *** ***
; ***************************************
; ***************************************
;
BULETS EQU 5 ; SIZE OF BULLET TABLE
GUARDS EQU 6 ; SIZE OF GUARDIAN TABLE
BIRDS EQU 3 ; SIZE OF WAR-BIRD TABLE
;
BLEFT EQU KEY0 ; BLASTER LEFT BUTTON
BRGHT EQU KEY1 ; BLASTER RIGHT BUTTON
BFIRE EQU KEY3 ; FIRE BUTTON
;
LLIMIT EQU $90 ; BLASTER LOWER-LIMIT
ULIMIT EQU $10 ; BLASTER UPPER-LIMIT (ACTIVE = 1)
GLIMIT EQU $5C ; BLASTER UPPER-LIMIT (ACTIVE = 0)
KLIMIT EQU $F0 ; BLASTER UPPER-LIMIT (KILLER SEQUENCE)
BLBIAS EQU $05 ; BLASTER SIZE VS. DEPTH BIAS
;
SPKSPD EQU $40 ; SPIKER SPEED
;
WALLA EQU 0 ; WALL ANGLE
WALLYS EQU WALLA + 1 ; WALL STARTING 'Y' POINT
WALLYE EQU WALLYS + 1 ; WALL ENDING 'Y' POINT
WALLXS EQU WALLYE + 1 ; WALL STARTING 'X' POINT
WALLXE EQU WALLXS + 1 ; WALL ENDING 'X' POINT
;
;
;
;
IF L.STOR = OFF ;-------------------------------------------
LIST -L ;-- WORKING STORAGE ----------------------
ENDIF ;-------------------------------------------
;
;
;
;
; *******************************************************
; *******************************************************
; *** ***
; *** W O R K I N G S T O R A G E ***
; *** ***
; *******************************************************
; *******************************************************
;
ORG $C8B6
; === =====
;
LASTY DW 0 ; LAST 'Y' POSITION
NEXTY DW 0 ; NEXT 'Y' POSITION
LASTX DW 0 ; LAST 'X' POSITION
NEXTX DW 0 ; NEXT 'X' POSITION
;
DELTAY DW 0 ; 'Y' AXIS DISPLACEMENT
DELTAX DW 0 ; 'X' AXIS DISPLACEMENT
DOTTMP DW 0 ; WORKING STORAGE FOR DOT PRODUCT
BNCTBL DW 0 ; POINTER TO BOUNCE LOOK-UP TABLE
;
CWALYS DB 0 ; 'Y' START FOR INDICATED WALL
CWALYE DB 0 ; 'Y' END FOR INDICATED WALL
CWALXS DB 0 ; 'X' START FOR INDICATED WALL
CWALXE DB 0 ; 'X' END FOR INDICATED WALL
;
ABORT DB 0 ; GAME ABORT FLAG
LOCK DB 0 ; LOCK-UP ON GAME SEQUENCE
;
;
LFLAG DB 0 ; ROAD-WAY LEVEL FLAG
GRDTYP DB 0 ; GUARDIAN TYPE FOR THIS LEVEL
;
;
GAMCMD DB 0 ; LEVEL COMMAND FLAGS
ACTLVL DB 0 ; ACTIVE GAME LEVEL
TOTGRD DB 0 ; TOTAL GUARDIAN COUNT FOR THIS TYPE
TOTBRD DB 0 ; TOTAL WAR-BIRD COUNT
GUARDY DW 0 ; GUARDIAN VERTICAL SPEED
GUARDX DW 0 ; GUARDIAN HORIZONTAL SPEED
;
CITFLG DB 0 ; BLASTER STILL ON ROADWAY
ACTIVE DB 0 ; GAME ACTIVITY PENDING - INHIBIT GATEWAY
;
KILFLG DB 0 ; KILLER LEVEL FLAG
KILHIT DB 0 ; KILLER HIT COUNTER
KILXD DW 0 ; KILLER 'X' DISPLACEMENT
KILDED DB 0 ; KILLER DEAD FLAG
;
;
BLSTYD DW 0 ; 'Y' DISPLACEMENT FOR BLASTER
BLSTXD DW 0 ; 'X' DISPLACEMENT FOR BLASTER
BLSTY DW 0 ; ABSOLUTE 'Y' FOR BLASTER
BLSTX DW 0 ; ABSOLUTE 'X' FOR BLASTER
BLSTYX DW 0 ; ABSOLUTE 'YX' VALUE FOR BLASTER
;
BLSTSZ DB 0 ; CURRENT BLASTER SIZE
BLSTR DB 0 ; CURRENT RIGHT LIMIT FOR BLASTER
BLSTL DB 0 ; CURRENT LEFT LIMIT FOR BLASTER
BLSTBX DW 0 ; CURRENT COLLISION BOX FOR BLASTER
;
BLSTMR DB 0 ; TIMER FOR BLASTER
;
;
SHOOT DB 0 ; BULLET FIRING SOUND FLAG
OUCH DB 0 ; GUARDIAN OUCH SOUND FLAG
SIZZLE DB 0 ; CITADEL DISINTEGRATING SOUND FLAG
SQUAWK DB 0 ; WAR-BIRD SQUAWK SOUND FLAG
EXPLO1 DB 0 ; GUARDIAN EXPLOSION SOUND FLAG
EXPLO2 DB 0 ; BLASTER EXPLOSION SOUND FLAG
;
BASFRQ DS 2 ; BASE FREQUENCY FOR GUARDIAN OUCH
SIZCNT DS 1 ; TIMER FOR MAXIMUM INTENSITY DURING SIZZLE
;
;
EKLTMR DB 0 ; KILLER EXPLOSION TIMER
EXPTMR DB 0 ; BLASTER EXPLOSION TIMER
KLLINT DB 0 ; FORTRESS INTENSITY FOR KILLER SEQUENCE
;
EBLYD1 DW 0 ; POSITION FOR BLASTER FRAGMENT #1
EBLXD1 DW 0 ; .
EBLYW1 DW 0 ; .
EBLXW1 DW 0 ; .
EBLYX1 DW 0 ; .
EBLRT1 DB 0 ; .
;
EBLYD2 DW 0 ; POSITION FOR BLASTER FRAGMENT #2
EBLXD2 DW 0 ; .
EBLYW2 DW 0 ; .
EBLXW2 DW 0 ; .
EBLYX2 DW 0 ; .
EBLRT2 DB 0 ; .
;
EBLYD3 DW 0 ; POSITION FOR BLASTER FRAGMENT #3
EBLXD3 DW 0 ; .
EBLYW3 DW 0 ; .
EBLXW3 DW 0 ; .
EBLYX3 DW 0 ; .
EBLRT3 DB 0 ; .
;
BLSCNT DB 0 ; CURRENT BLASTER COUNT FOR ACTIVE PLAYER
;
;
CBLT DB 0 ; ACTIVE BULLET COUNTER
CGRD DB 0 ; ACTIVE GUARDIAN COUNTER
CSPK DB 0 ; ACTIVE SPIKER COUNTER
CBRD DB 0 ; ACTIVE WAR-BIRD COUNTER
;
BTNTMR DW 0 ; PLAYER ACTIVITY TIMER
SPKTIM DB 0 ; RANDOM SPIKER RELEASE TIMER
LVLTMR DB 0 ; LEVEL DISPLAY TIMER
TIMOUT DW 0 ; LONG TIME-OUT DELAY
LCKTMR DB 0 ; LOCK-UP TIMER
;
;
TBLPT1 DW 0 ; GAME-LEVEL TABLE POINTERS
DB 0 ; . PLAYER #1
DB 0 ; . . LEVEL FLAG
DB 0 ; . . GUARDIAN COUNTER
DB 0 ; . . WAR-BIRD COUNTER
DB 0 ; . . BLASTER COUNT
;
TBLPT2 DW 0 ; . PLAYER #2
DB 0 ; . . GUARDIAN TYPE
DB 0 ; . . LEVEL FLAG
DB 0 ; . . GUARDIAN COUNTER
DB 0 ; . . WAR-BIRD COUNTER
DB 0 ; . . BLASTER COUNT
;
FIELD1 DS 7 ; ACTIVE FIELD FOR PLAYER #1
FIELD2 DS 7 ; ACTIVE FIELD FOR PLAYER #2;
;
;
;
;
; BULLET TABLE
; ============
;
BLTFLG EQU 0 ; BULLET FLAG
BLTYD EQU BLTFLG + 1 ; WORKING 'Y' DISPLACEMENT
BLTXD EQU BLTYD + 2 ; WORKING 'X' DISPLACEMENT
BLTYW EQU BLTXD + 2 ; WORKING 'Y' POSITION
BLTXW EQU BLTYW + 2 ; WORKING 'X' POSITION
BLTYX EQU BLTXW + 2 ; ABSOLUTE 'YX' POSITION
BLTANG EQU BLTYX + 2 ; CURRENT BULLET ANGLE
BLTERG EQU BLTANG + 1 ; BULLET ENERGY LEVEL
BLTBNC EQU BLTERG + 1 ; BULLET BOUNCE COUNTER
BLTHLD EQU BLTBNC + 1 ; BULLET BOUNCE HOLD-OFF
;
BLTLEN EQU BLTHLD + 1 ; BULLET TABLE LENGTH
;
BLTTBL DS BLTLEN * BULETS
;
WARBLT DS BLTLEN * 4 ; MINI-BULLET TABLE FOR WAR-BIRD
;
ENDBLT EQU *
;
;
;
;
; GUARDIAN TABLE
; ==============
;
GRDFLG EQU 0 ; GUARDIAN FLAG
; 01 = LEVEL #1
; 09 = LEVEL #2
; 11 = LEVEL #3
; 19 = KILLER SEGMENT #0
; 21 = KILLER SEGMENT #1
; 29 = KILLER SEGMENT #2
; 40 = GUARDIAN IS FALLING
; 80 = GUARDIAN IS DYING
GRDYD EQU GRDFLG + 1 ; WORKING 'Y' DISPLACEMENT
GRDXD EQU GRDYD + 2 ; WORKING 'X' DISPLACEMENT
GRDYW EQU GRDXD + 2 ; WORKING 'Y' POSITION
GRDXW EQU GRDYW + 2 ; WORKING 'X' POSITION
GRDYX EQU GRDXW + 2 ; ABSOLUTE 'YX' POSITION
GRDANG EQU GRDYX + 2 ; ANGLE OF MOTION
GRDSIZ EQU GRDANG + 1 ; GUARDIAN ZOOM SIZE
GRDTMR EQU GRDSIZ + 1 ; GUARDIAN TIMER
GRDERG EQU GRDTMR + 1 ; GUARDIAN ENERGY LEVEL
;
GRDLEN EQU GRDERG + 1 ; TABLE LENGTH
;
GRDTBL DS GRDLEN * GUARDS
;
ENDGRD EQU *
;
GRD.00 EQU GRDTBL
GRD.01 EQU GRD.00 + GRDLEN
GRD.02 EQU GRD.01 + GRDLEN
GRD.03 EQU GRD.02 + GRDLEN
;
;
;
;
; SPIKER TABLE
; ============
;
SPKFLG EQU 0 ; SPIKER FLAG
; 80 = GUARDIAN IS STILL HOLDING SPIKER
; 40 = SPLIT SPIKER
SPKYD EQU SPKFLG + 1 ; WORKING 'Y' DISPLACEMENT
SPKXD EQU SPKYD + 2 ; WORKING 'X' DISPLACEMENT
SPKYW EQU SPKXD + 2 ; WORKING 'Y' POSITION
SPKXW EQU SPKYW + 2 ; WORKING 'X' POSITION
SPKYX EQU SPKXW + 2 ; ABSOLUTE 'YX' POSITION
SPKANG EQU SPKYX + 2 ; CURRENT SPIKER ANGLE
SPKSIZ EQU SPKANG + 1 ; SPIKER ZOOM SIZE
SPKHLD EQU SPKSIZ + 1 ; SPIKER BOUNCE HOLD-OFF
;
SPKLEN EQU SPKHLD + 1 ; TABLE LENGTH
;
SPKTBL DS SPKLEN * GUARDS
;
SPK.00 EQU SPKTBL
SPK.01 EQU SPK.00 + SPKLEN
SPK.02 EQU SPK.01 + SPKLEN
SPK.03 EQU SPK.02 + SPKLEN
;
;
DBLSPK DS SPKLEN * 4
;
ENDSPK EQU *
;
;
;
;
; WAR-BIRD TABLE
; ==============
;
BRDFLG EQU 0 ; WAR-BIRD FLAG
; 80 = SHIELD MODE
; 40 = OVER ROAD-WAY FLAG
BRDYD EQU BRDFLG + 1 ; WORKING 'Y' DISPLACEMENT
BRDXD EQU BRDYD + 2 ; WORKING 'X' DISPLACEMENT
BRDYW EQU BRDXD + 2 ; WORKING 'Y' POSITION
BRDXW EQU BRDYW + 2 ; WORKING 'X' POSITION
BRDYX EQU BRDXW + 2 ; ABSOLUTE 'YX' POSITION
BRDANG EQU BRDYX + 2 ; ANGLE OF MOTION
BRDSIZ EQU BRDANG + 1 ; ZOOM SIZE
BRDTMR EQU BRDSIZ + 1 ; MOTION TIMER
BRDBOX EQU BRDTMR + 1 ; COLLISION BOX PARAMETERS
;
BRDLEN EQU BRDBOX + 2 ; TABLE LENGTH
;
BRDTBL DS BRDLEN * BIRDS
;
ENDBRD EQU *
;
BRD.00 EQU BRDTBL
BRD.01 EQU BRD.00 + BRDLEN
BRD.02 EQU BRD.01 + BRDLEN
BRD.03 EQU BRD.02 + BRDLEN
;
;
;
;
; EXPLOSION TABLE FOR KILLER SEQUENCE
; ===================================
;
EKLYD EQU 0 ; 'Y' DISPLACEMENT
EKLXD EQU EKLYD + 2 ; 'X' DISPLACEMENT
EKLYW EQU EKLXD + 2 ; CURRENT 'Y' POSITION
EKLXW EQU EKLYW + 2 ; CURRENT 'X' POSITION
EKLYX EQU EKLXW + 2 ; CURRENT 'YX' POSITION
EKLROT EQU EKLYX + 2 ; ROTATIONAL COUNTER
;
EKLLEN EQU EKLROT + 1 ; TABLE LENGTH
;
EKLTBL EQU BRDTBL
;
EKL.00 EQU EKLTBL
EKL.01 EQU EKL.00 + EKLLEN
EKL.02 EQU EKL.01 + EKLLEN
EKL.03 EQU EKL.02 + EKLLEN
;
;
;
RSPKR DS $20 ; ROTATING SPIKER 'DUFFY'
;
RGRD1 EQU RSPKR ; ROTATING GUARDIAN DISMEMBERMENT
RGRD2 DS $20 ; .
RGRD3 DS $20 ; .
;
;
CR.LIM DS 32 ; RIGHT LIMITS OF ROADWAY
CL.LIM DS 32 ; LEFT LIMITS OF ROADWAY
;
CHRLIM DS 32 ; RIGHT LIMITS OF HIDDEN ROADWAY
CHLLIM DS 32 ; LEFT LIMITS OF HIDDEN ROADWAY
;
ENDRAM EQU *
;
;
MSG 'END OF RAM = ',*
;
;
IF L.STOR = OFF ;-------------------------------------------
LIST * ;-------------------------------------------
ENDIF ;-------------------------------------------
;
;
;
;
LINK INIT.NAR
LINK MAIN.NAR
LINK KILLER.NAR
;
LINK GBLAST.NAR
LINK GBULET.NAR
LINK GGUARD.NAR
LINK GSPIKE.NAR
LINK GBIRD.NAR
;
LINK TAIL.NAR
LINK CITDEL.NAR
LINK SOUND.NAR
;
LINK COLLIDE.NAR
;
LINK TIMERS.NAR
LINK SUBR.NAR
;
LINK GAME.NAR
LINK WALLS.NAR
LINK PRSPCT.NAR
LINK PACKS.NAR