forked from historicalsource/total-carnage
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCARN.ASV
5319 lines (5030 loc) · 93.7 KB
/
CARN.ASV
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
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
.FILE 'CARN.ASM'
;FINAL RELEASE CHANGES:
;FACCHECK IN MENU.ASM SHOULD SLEEP 60 NOT 1
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: JULY 17,1990
; MODIFIED: !
; SOFTWARE: MARK TURMELL
;
; COPYRIGHT (C) 1990 WILLIAMS ELECTRONICS GAMES, INC.
;
;
; GET THE SYSTEM STUFF
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\GSP.INC" ;GSP ASSEMBLER EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "GAME.EQU"
.INCLUDE "AUDIT.EQU"
;
;SOUNDS EXTERNAL
;
.REF CROWD2,UGH,SHKSND,EXP3,MCSPK9,MUSICOFF
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF STATUS,DEF_PAGE,GAMSTATE,INIT_ALL,UNSTACK,GET_AUD,PCNT
.REF FACCHECK,KILBGND,CLSCRACH,RANDOM,POWERTST,SCORE_FLAG,PCTOT
.REF ADD_DUMP,FIRE_DIRECTION,STRT_WPN,P1CTRL,P2CTRL,SENDH_TOP
.REF B_DIR,FRANIM,CHUNK_PLYR,BLOOD_LST2,EXPMINE2,SCRADD2,SNDPRC
.REF OBJOFF,OBJON,MSG_PROC2,GAMEOVER,GETFPAL,SHORT_PLYR,COLCYC
.REF P1DATA,P2DATA,PSTAT,CNTDIG1,CNTDIG2,HALT,STUFF_LVADDR
.REF THIS_PLYR,GETCPNT,BGND_UD1,SCRIPTPLAY,OFFSCRN,START,ICN2
.REF ONARRW,ARWOFF,PUMP_RED,RANGRAND,GOOBP,ZONE_TXT,RUNIN
.REF CYCLE_TABLE,SPAWN_HULKS,WAVE,FRANIM_DIE,BEGIN_CHNK,ICLIST
.REF MAXHULK,HULK_CNT,SEND_TOP,HULK_DN,DO_ALL_STUFF,ENRECT4
.REF ERECT2,EN_CURRENT,ERECT3,ENRECT3,KEEPIT,ERECT4,LSHIT,SHAKER
.REF MAPON,PULLOBJ,JUMPXY,JUMPXY2,RANDPER,ERECT7,ERECT8,SPAWN_LYR
.REF TBOMBD,STRT_S,DELAYALL,ZONE_TXT2,LYR_CNT,MAXLYR,SPAWN_AHMD
.REF DBRECT2,DRECT2,TBLST,LAY_EXP,AHMD_CNT,MAXAHMD
.REF ENRECT0,ERECT10,CTOTAL,HTYPE,SPAWN_T72
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF INIT_PROG,DRAW_PLYR_TORSO,EHALT,CTRLS,BNC_PLYR,ANI_FLAG
.DEF PLYRPRCS,PLYROBJS,KILLP1,KILLP2,BNC_PLYR2,CURRENT,RECT1
.DEF WARMSET,KILL_PLYR,TARGET,TARGET_NUM,BCURRENT,BRECT1,RINGS
.DEF CPULEFT,CPUAVG,ANI_HSTG,XYSEEK2,ANI_STAT,DOLORD,WAVE_RAM
.DEF ANI_EYES,ANI_HD,ANI_LARM,ANI_RARM,ANI_TYP,ANI_MTH,ENEMY_RECT
.DEF ZEROCNTS,STRT_G,SHIFTLM,KPLARM,INTRO,ISTATE,SHOTKILL,ENDWV
.DEF CKFORY,SETPXY2,SETPXY1
.DEF HSTGSET,WARP_KIL
.IF DEBUG
.DEF FORDBG
; .BSS KEEPA0,32
; .BSS KEEPA5,32
.ENDIF
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS PALTMP,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PLYROBJS,64 ;2 ENTRIES-PLYR1,PLYR2 TORSO PTR
.BSS PLYRPRCS,64 ;2 ENTRIES-PLYR1,PLYR2 PROCESS PTR
.BSS EHALT,16
.BSS CURRENT,32 ;PNTR TO LIST OF RECTANGLES
.BSS BCURRENT,32 ;PNTR TO LIST OF RECTANGLES (BULLETS)
.BSS ENEMY_RECT,32 ;PNTR TO ENEMY SPAWN RECTANGLES
.BSS CPUAVG,16
.BSS CPULEFT,16
.BSS TARGET_NUM,16 ;TARGET NUM FOR SCROLLING
.BSS WAVE_RAM,6*16*10 ;6=ELEMENTS,16=WORD SIZE
.BSS KPLARM,32 ;GI WALKIE TALKIE ARM
.BSS INTRO,16 ;INTRO # FOR CONTROL RM 0=PROF,1=GEN
.BSS ISTATE,16
.BSS RAMLST,32*35 ;IMG PNTRS FOR DELETION WHILE SCROLL
.BSS HSTGSET,16
;
;EQUATES FOR THIS FILE
;
VNORMVEL .EQU 016000H
HNORMVEL .EQU 016000H
VSLOVEL .EQU 0FA00H ;VNORMVEL*.707
HSLOVEL .EQU 0FA00H ;HNORMVEL*.707
;
VNORMVEL2 .EQU 01F000H
HNORMVEL2 .EQU 01F000H
VSLOVEL2 .EQU 018000H ;VNORMVEL*.707
HSLOVEL2 .EQU 018000H ;HNORMVEL*.707
;
VNORMVEL3 .EQU 025000H
HNORMVEL3 .EQU 027000H
VSLOVEL3 .EQU 01CA00H ;VNORMVEL*.707
HSLOVEL3 .EQU 01CA00H ;HNORMVEL*.707
;
TEMP .EQU PDATA
.TEXT
INIT_PROG:
DINT ;DISABLE INTERRUPTS
;
; SET FIELD PARAMETERS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
; SET THE STACK POINTER TO THE END OF SCRATCHPAD
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
; MOVE @WDOGRAM,A0,L ;MARK SYSTEM AS INITIALIZED
; CMPI WDOGNUM,A0
; JRNZ WARMSET0
; MOVI AUDLOCK,A0
; CALLA AUD1
;DUMP REPORT OF WATCHDOG
; .IF DEBUG
; .ELSE
; CALLERR 11,0
; .ENDIF
;JUMP TO RECOVER CODE
; MOVI AUDSTAT,A0
; CALLA GET_AUD
; MOVE A1,A1
; JREQ WARMSET ;ATTRACT MODE GLITCH
; CLR A1
; CALLA STORE_AUDIT ;WARP ONLY ONCE, DUDE!!!
;
; JAUC BONUS_WARP
;WARMSET0:
; JAUC POWERTST
WARMSET:
DINT ;DISABLE INTERRUPTS
;
; SET FIELD PARAMETERS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
; SET THE STACK POINTER TO THE END OF SCRATCHPAD
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
; RESET TODAYS HIGH SCORE TABLE
; CALLA INIT_TAB
; CLEAR SCRATCHPAD, INITIALIZE PROCESSES
CALLA CLSCRACH ;CLR SCRATCH RAM
CALLA INIT_ALL ;INITIALIZE Z-UNIT
MAIN0
CREATE 0,FACCHECK ;START ATTRACT IF THINGS O.K.
CREATE PLIST_ID,UNSTACK ;CREATE SWITCH UNSTACKER
;
; MAIN LINE LOGIC LOOP
;
MAINLP:
CALLA PRCDSP ;DISPATCH PROCESSES
MOVE A13,A13
JRZ MAINPOK
.IF DEBUG
LOCKUP
EINT
.ELSE
CALLERR 10,0
.ENDIF
;
MAINPOK:
CALLA SNDPRC ;DISPATCH AND TIME THE SOUND CALLS
CALLA RANDOM ;NEW SEED PLEASE
.IF DEBUG
callr StCpuLft
.ENDIF
; TEST ROM PROTECT INTERRUPT
;
; .IF DEBUG
; JRUC SKIPCK
; dint
; MOVE @INTENB,A0,0 ;ENABLE ROM PROTECT INTERRUPT (ext2)
; ORI X2E,A0
; MOVE A0,@INTENB,0
; eint
; move @>ffe00000,a0,0
; move a0,@>ffe00000,0
;SKIPCK
; .ENDIF
MOVB @PCNT,A0
DEC A0
MOVB A0,@PCNT
MOVE @GAMSTATE,A0
CMPI INDIAG,A0
JRNZ NODIAG
MOVI AMDEPID,A0
CLR A1
NOT A1
CALLA KILALL
CALLA KILBGND
CLR A0
MOVE A0,@SCORE_FLAG
NODIAG:
JRUC MAINLP
*****************************************************************************
ZEROCNTS
CLR A0
MOVE A0,@HULK_CNT
MOVE A0,@AHMD_CNT
MOVE A0,@LYR_CNT
RETS
SETMAX:
;FOR HULK/GRUNT
MOVE @WAVE,A0
SLL 3,A0
ADDI HMAX,A0
MOVB *A0,A0
MOVK 4,A1 ;SUBTRACT THIS AMOUNT IF 1 PLYR GAME
CALLR ONEPADJ
; CALLR ADJMAX ;DIFFICULTY ADJUST
MOVE A0,@MAXHULK
MOVE @WAVE,A0
SLL 3,A0
ADDI HTYP,A0
MOVB *A0,A0
MOVB A0,@HTYPE
;FOR MINE LAYER
MOVE @WAVE,A0
SLL 3,A0
ADDI LMAX,A0
MOVB *A0,A0
CLR A1 ;SUBTRACT THIS AMOUNT IF 1 PLYR GAME
CALLR ONEPADJ
; CALLR ADJMAX ;DIFFICULTY ADJUST
MOVE A0,@MAXLYR
;FOR AHMED FLAME THROWER
MOVE @WAVE,A0
SLL 3,A0
ADDI AMAX,A0
MOVB *A0,A0
CLR A1 ;SUBTRACT THIS AMOUNT IF 1 PLYR GAME
CALLR ONEPADJ
; CALLR ADJMAX ;DIFFICULTY ADJUST
MOVE A0,@MAXAHMD
RETS
ONEPADJ
MOVE @STATUS,A2
CMPI 3,A2
JRZ TWEEK1
SUB A1,A0
TWEEK1
RETS
HTYP
;0=REGULAR SOLDIER GRUNT
;1=AXE CARRYING DEMON GRUNT
;2=AHMED FLAME THROWER GRUNT
.BYTE 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
HMAX .BYTE 2,20,24,28,26,25,20,25,30,20,19 ;(WAVE 10 AT END)
.BYTE 20,20,20 ;GRUNT/HULK
LMAX .BYTE 2,2,2,2,2,2,2,2,2,2,2
.BYTE 1,1,1 ;MINE LAYER
AMAX .BYTE 3,3,3,3,3,3,3,3,3,0,0
.BYTE 0,3,3 ;AHMED GRUNT
.EVEN
WAVE_INFO:
;RECORDS LOOK LIKE THIS
;TYPES:DIFFERENT ID'S
;#:TOTAL NUMBER PER WAVE
;DIFFICULTY:0,1,2,3 0=EASIEST
;RATE:# OF CYCLES/3 (SLP CNTR) BEFORE SPAWN IS CALLED
;ONSCRN:# OF TYPE ON SCREEN AT START OF WAVE
;CNTR USED IN WAVE RAM UPDATING
;RECORD LAYOUT
;TYPE # LEVEL RATE ONSCRN CNTR
;WAVE 1
.WORD HULK,165,2,18,0,20
.WORD 0
;WAVE 2
.WORD HULK,235,2,1,0,1
.WORD 0
;WAVE 3
.WORD HULK,290,2,9,0,1 ;REACTOR AREA
.WORD 0
;WAVE 4
.WORD HULK,305,2,8,0,1 ;NEAR ELEVATOR DOWN
.WORD 0
;WAVE 5
.WORD HULK,95,2,15,0,1 ;SECRET PATH REACTOR AREA
.WORD 0
;WAVE 6
.WORD HULK,65,3,20,0,20 ;SECRET PATH MIDDLE AREA
.WORD 0
;WAVE 7
.WORD HULK,245,4,13,0,1 ;SECRET PATH ROADWAY AREA,CARS ETC.
.WORD 0
;WAVE 8
.WORD HULK,285,4,10,0,90 ;SECRET PATH TOP AREA (END)
.WORD 0
;WAVE 9
.WORD HULK,285,4,10,0,90 ;UN USED
.WORD 0
;WAVE 10
.WORD HULK,280,2,3,0,1 ;START OF GAME AT DESERT - 1ST LOCKDOWN
.WORD TANK,5,3,55,0,200
.WORD AT72,1,0,0,0,675
.WORD 0
;WAVE 11
.WORD HULK,285,4,10,0,90 ;
.WORD AHMD,3,2,180,0,200
.WORD TANK,5,3,140,0,1
.WORD 0
TYP_TBL2:
;FOR SPAWNING
.LONG SPAWN_HULKS,SPAWN_LYR,SPAWN_AHMD,SPAWN_T72
OVERLORD:
SLEEP 3
MOVI BMBPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ OVERLORD
; MOVK 10,A0
; MOVE A0,@WAVE
; MOVB A0,@ECON ;NO ENEMY TO ENEMY COLLIDE ON!
; MOVB A0,@ENON ;NO ENEMY TO NEUTRAL COLLIDE ON!
CALLR SETMAX
CLR A3
MOVE A3,@HULK_DN
MOVI WAVE_INFO,A1
MOVE @WAVE,A0 ;WAVE 1 IS THE FIRST WAVE
DEC A0
JRNZ OL00
MOVE A1,A5
OL00: CLR A4
OL0: INC A4
MOVE *A1,A2,W
JRZ OL1
ADDI 6*16,A1
JRUC OL0
OL1: CMPI 0,A0
JRZ GOTIT
ADDK 16,A1 ;POINT TO NEXT WAVE INFO TABLE
INC A3
CMP A0,A3
JRNE OL00
MOVE A1,A5
GOTIT:
MOVE A5,A1 ;A5=ADDR OF THIS WAVE IN ROM
; CLEAR WAVE RAM
MOVI WAVE_RAM,A0
CLR A6
MOVI 29,A7
GT00 MOVE A6,*A0+,L
DSJS A7,GT00
; PUT WAVE INFO INTO RAM FOR UPDATING
MOVK 8,A4 ;CAN IT AT 8!
MOVI WAVE_RAM,A0
GT0 MOVI 6,A3 ;# OF FIELDS PER BAD GUY
GT MOVE *A1+,*A0+,W
DSJS A3,GT
DSJS A4,GT0
; NOW PUT ONSCRN # OF EACH TYPE ONTO SCREEN!
SLEEP 60*2 ;DELAY BEFORE BAD GUYS MOVE
RLSE:
;DISPERSE ENEMIES THROUGHOUT WAVE
MOVI WAVE_RAM,A0
MOVE @HALT,A1,W
JRNZ RDN
RTOP
MOVE *A0(0),A1
JRZ RDN
MOVE *A0(16),A1 ;A1=HOW MANY ARE LEFT
JRZ NXTR
MOVE *A0(5*16),A1 ;SPAWN RATE CNTR
DEC A1
MOVE A1,*A0(5*16)
JRNZ NXTR
MOVE *A0(3*16),A1 ;SPAWN RATE IN CYCLES
MOVE A1,*A0(5*16)
;TIME TO SPAWN
MOVE *A0(0),A1
DEC A1
SLL 5,A1
ADDI TYP_TBL2,A1
MOVE *A1,A1,L
PUSH A0
CALL A1
PULL A0
NXTR ADDI 6*16,A0
JRUC RTOP
;ALL ENEMIES HAVE BEEN CHECKED FOR RELEASE
RDN SLEEP 3
JRUC RLSE
RINGS:
;A10=TIME RINGS ARE ON
;A9=PLAYER NUMBER 1/2 TO RING
;TURN OFF EXISTING RINGS AROUND THIS PLAYER PLUS ITS COLOR CYCLE
MOVB A9,*A13(MYPLYR)
;SET BOUNDARIES TO ORBITING TYPE BNDRY
;SET BOUNDARIES FOR CORRECT PLAYER!
DEC A9
SLL 5,A9
MOVI PLYRPRCS,A1,L
ADD A9,A1
MOVE *A1,A1,L
MOVE *A1(LEG_PTR),A11,L
MOVI CLSPLYR|TYPPLYR|SUBRNG1,A5 ;FOR BOTH PLYRS
MOVE A5,*A11(OID)
MOVK 5,A0
MOVE A0,*A13(TEMP)
MOVI 01FEH,A0
MOVE A0,*A1(DELYDET) ;KEEP STUFFING A VALUE IN HERE
RTP
MOVI PLYRPRCS,A1,L
ADD A9,A1
MOVE *A1,A1,L
MOVE *A1(TSO_PTR),A8,L
MOVE *A1(LEG_PTR),A11,L
;GIVE THESE IMAGES OTHER PAL
MOVI nup1a,A0
MOVE *A13(TEMP),A1
CMPI 2,A1
JRNZ RCL
MOVI nup2a,A0
RCL CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
MOVE A0,*A11(OPAL),W ;STORE THE NEW PALETTE
MOVE *A13(TEMP),A0
CALLA PRCSLP
MOVE A9,A9
JRZ P01
MOVI nup2,A0
JRUC P001
P01 MOVI nup1,A0
P001 CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
;GIVE THESE IMAGES OTHER PAL
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
MOVE A0,*A11(OPAL),W
MOVE *A13(TEMP),A0
CALLA PRCSLP
DEC A10
JRZ XOUT
CMPI 25,A10
JRNZ RTP
MOVK 2,A0
MOVE A0,*A13(TEMP)
JRUC RTP
XOUT
;RESTORE CORRECT OID
MOVI RESTUF,A1
ADD A9,A1
MOVE *A1,A1,L
MOVE A1,*A11(OID)
;GIVE TORSO SOME DELAY DETECTION
MOVE *A8(OPLINK),A0,L
MOVI 40,A1 ;10
MOVE A1,*A0(DELYDET) ;KEEP STUFFING A VALUE IN HERE
DIE
RESTUF .LONG CLSPLYR|TYPPLYR|SUBPL_1,CLSPLYR|TYPPLYR|SUBPL_2
ANI_STAT:
;A8=STATIC IMAGE FROM BACKGROUND UPDATER
SLEEP 1
MOVE @DELAYALL,A0
JRNZ ANI_STAT
SLEEP 1CH
MOVI STATLST,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
STATLST .LONG STAT2
.WORD 7
.LONG STAT3
.WORD 7
.LONG STAT4
.WORD 5
.LONG STAT5
.WORD 5
.LONG STAT6
.WORD 4
.LONG 0
ANI_TYP:
;A8=TYPIST ARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 4*60
MOVE *A8(OYPOS),A0
SUBI 46H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUBK 1DH,A0
MOVE A0,*A8(OXPOS)
ANI_TYP2:
MOVI TYPLST,A9
MOVK 1,A1
JSRP FRANIM
JRUC ANI_TYP2
TYPLST .LONG TARM1
.WORD 30
.LONG TARM2
.WORD 5
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 6
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 20
.LONG TARM2
.WORD 4
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 4
.LONG TARM1
.WORD 5
.LONG 0
ANI_HD:
;A8=GENERAL HEAD IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVE *A8(OYPOS),A0
SUBK 4,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 11H,A0
MOVE A0,*A8(OXPOS)
;FOR IRAQ MAP
MOVI HDLST3,A9
MOVK 1,A1
JSRP FRANIM
MOVK 10,A10
IMP MOVI HDLST,A9
MOVK 1,A1
JSRP FRANIM
DSJS A10,IMP
DIE
;FOR PURPLE MONSTER
; MOVK 2,A10
;ANI_HD2:
; MOVI HDLST,A9
; MOVK 1,A1
; JSRP FRANIM
; DSJS A10,ANI_HD2
; SLEEP 20
; MOVI HDLST2,A9
; MOVK 1,A1
; JSRP FRANIM
; MOVK 10,A10
; JRUC ANI_HD2
HDLST3
.LONG GH2
.WORD 5
.LONG GH1
.WORD 03EH
.LONG GH2
.WORD 5
.LONG GH3
.WORD 10
.LONG GH2
.WORD 5
.LONG GH1
.WORD 30
.LONG GH2
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 8
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 60
.LONG 0
HDLST2 .LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 8
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 120
.LONG 0
HDLST
.LONG GH2
.WORD 5
.LONG GH1
.WORD 30
.LONG GH2
.WORD 5
.LONG GH3
.WORD 50
.LONG GH2
.WORD 5
.LONG GH1
.WORD 0D0H
.LONG GH2
.WORD 5
.LONG GH3
.WORD 58H
.LONG 0
ANI_LARM:
;A8=GENERAL LARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 1
MOVE @DELAYALL,A0
JRNZ ANI_LARM
MOVE *A8(OYPOS),A0
SUBI 3AH,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDI 23H,A0
MOVE A0,*A8(OXPOS)
CREATE INTROPID,UPR
ANI_LARM2:
MOVI LARMLST,A9
MOVK 1,A1
JSRP FRANIM
JRUC ANI_LARM2
UPR SLEEP 120
MOVI 7FD3H,A0
MOVE A0,*A8(OZPOS)
DIE
LARMLST
.LONG GLARM1
.WORD 40
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 60
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 098H
.LONG GLARM4
.WORD 5
.LONG GLARM5
.WORD 5
.LONG GLARM6
.WORD 08FH
.LONG GLARM5
.WORD 5
.LONG GLARM4
.WORD 5
.LONG GLARM3
.WORD 30
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 60
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG 0
RARMLST
.LONG GRARM1
.WORD 40
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 60
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 098H
.LONG GRARM4
.WORD 5
.LONG GRARM5
.WORD 5
.LONG GRARM6
.WORD 08FH
.LONG GRARM5
.WORD 5
.LONG GRARM4
.WORD 5
.LONG GRARM3
.WORD 30
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 60
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG 0
ANI_RARM:
;A8=GENERAL RARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 1
MOVE @DELAYALL,A0
JRNZ ANI_RARM
MOVE *A8(OYPOS),A0
SUBI 39H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUBK 1EH,A0
MOVE A0,*A8(OXPOS)
ANI_RARM2:
MOVI RARMLST,A9
MOVK 1,A1
JSRP FRANIM
JRUC ANI_RARM2
ANI_MTH:
MOVE @INTRO,A0
JRZ AM2
;GI MOUTH
SLEEP 7AH
MOVI T0G,A9
AM1 MOVE *A9+,A0,W
JRZ OUY
CALLA PRCSLP
MOVE A8,A0
CALLA OBJOFF
MOVE *A9+,A0,W
CALLA PRCSLP
MOVE A8,A0
CALLA OBJON
JRUC AM1
OUY MOVE A8,A0
CALLA DELOBJ
MOVK 1,A0
MOVE A0,@ISTATE
;TRIGGER INTO MOUTH
;TURN ON SOLDIER TILT IMAGE
;DELETE SOLDIER HALVES - GIPID OID!
MOVI SOLD,A14
CALLA DO_ALL_STUFF
; MOVE A8,A0
; CALLA ADJSTWTL
MOVI GIPID,A0 ;TWO SOLDIER HALVES
CLR A1
NOT A1
CALLA KILOBJ
SLEEP 5
MOVI SOLDR3,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
MOVI 087H+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
SLEEP 5
CREATE INTROPID,KIP
DIE
SOLD:
.LONG [09FH+20,0],[038FH,0],SOLDR1
.WORD 103H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT ;109
.LONG 0,0
T0G .WORD 20,3,10,4,40,5,5,5,20,2,15,5,10,50,5,5,5,20,2,15,5,10
.WORD 2,15,5,10,0
AM2
;A8=PROF MOUTH IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 0C0H
MOVE *A8(OYPOS),A0
SUBI 56H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 0CH,A0
MOVE A0,*A8(OXPOS)
MOVI MTHLST0,A9
MOVK 1,A1
JSRP FRANIM
MOVK 7,A10
ANI_MTH2:
MOVI MTHLST,A9
MOVK 1,A1
JSRP FRANIM
DSJS A10,ANI_MTH2
SLEEP 8
MOVI PMTH4,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
DIE
MTHLST0 .LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH3
.WORD 10H ;30H
.LONG 0
MTHLST .LONG PMTH3
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH3
.WORD 18
.LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 10
.LONG PMTH2
.WORD 4
.LONG 0
ANI_EYES:
MOVE @INTRO,A0
JRZ AE2
SLEEP 120
;INTRO WITH GI
FT SLEEP 1
MOVE @ISTATE,A0
JRZ FT
;ABOUT TO SLIDE INTO MOUTH
MOVE A8,A0
CALLA OBJOFF
MOVE @KPLARM,A0,L
CALLA OBJOFF
SLEEP 5
;TURN ON A LEG AT NEW LOCATION
MOVI SOLDR4,A1
MOVE *A8(OFLAGS),A4
ORI M_FLIPH,A4
CALLA ANI
MOVE A8,A0
CALLA OBJON
MOVI 087H+23+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H+29,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
PUSH A8
MOVE @KPLARM,A8,L
MOVI SOLDR4,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
MOVE A8,A0
CALLA OBJON
MOVI 087H-25+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H+29,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
CREATE INTROPID,KIP
PULL A8
CREATE INTROPID,KIP
DIE
KIP
;MOVE IT AROUND AND KPLARM AROUND
;DELETE IT
MOVK 6,A10
LP9 MOVK 10,A9
LPS MOVE A9,A0
CALLR DOXY
SLEEP 3
DSJS A9,LPS
CMPI 3,A10
JRNZ LKI
MOVE *A8(OYPOS),A0
SUBK 0FH,A0
MOVE A0,*A8(OYPOS)
CREATE INTROPID,OOUP
LKI DSJ A10,LP9
SLEEP 10
MOVE A8,A0
CALLA DELOBJ
DIE
OOUP MOVE *A8(OIMG),A0,L
CMPI SOLDR3,A0
JRZ OP2
SLEEP 034H
OP1 MOVI 100H,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
DIE
OP2 MOVI 1200,A0
MOVE A0,*A8(OZPOS)