total-carnage/ARAB.ASM

1189 lines
23 KiB
NASM
Raw Permalink Normal View History

2021-04-06 15:15:31 -07:00
**************************************************************
*
* Software: Mark Turmell
* Initiated: 3/12/91
*
* Modified: Shawn Liptak, 11/16/91 -Cleanup
*
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 11/26/91 22:38
**************************************************************
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "GAME.EQU"
.INCLUDE "AKHBBOSS.TBL"
;SOUNDS EXTERNAL
.REF TURTSND,EXP3
;SYMBOLS EXTERNALLY DEFINED
.REF AFTR_WRP,WAVE,OGUNBUL
.REF XYSKOBJ,BEGINOBJ2,RANGRAND,HALT,RANDPER,PLYROBJS
.REF SCRTST,OUT_FLG,FRANIM,BSTART
;SYMBOLS DEFINED IN THIS FILE
.DEF STRT_GPIT
.DEF TTORSO,START_PJ,BURST,START_PJ2,BOOB_BURST
;UNINITIALIZED RAM DEFINITIONS
.BSS SCNTR,16
.BSS KEEP_BOOB,32
;EQUATES FOR THIS FILE
MYLIST .EQU PDATA+64 ;UHL FRANIM LIST FOR THIS PC UPON DEATH
;SAME AS FROM MINE.ASM
MYSND .EQU PDATA+96 ;UHL SOUND HEADER FOR GOO TYP DEATH
;SAME AS FROM MINE.ASM
;TORSO DATA STRUCTURE
KPTSOBJ .EQU PDATA ;UHL FOR BTR60
;KPTSOBJ IS DEFINED IN T72.ASM
KIND .EQU PDATA+32 ;UHW-KIND OF GUNNER 0=ARAB,1=BTR60
;2=SAND BAG DUDE, 3=BOOB SHIP TURRET
TDIR .EQU PDATA+48 ;UHW OBJECT DIRECTION
TCFLAGS .EQU PDATA+64 ;UHW CONTROL FLAGS FOR OBJECT
TSK_DIR .EQU PDATA+80 ;UHW SEEK DIR FOR SPIN
KPTANKO .EQU PDATA+96 ;UHL 88+32 ;UHL
;KPTANKO IS REFERENCED IN FIEND.ASM!
MODE .EQU PDATA+128 ;UHW
TCNTR .EQU PDATA+144 ;UHW
SPDLY .EQU PDATA+160 ;UHW
FIRED .EQU PDATA+176 ;UHW
TPNTR .EQU PDATA+192 ;UHW
KOFF .EQU PDATA+208 ;UHW
;224
ABSRB .EQU PDATA+256 ;UHW
;ABSRB IS DEFINED IN FIEND.ASM
.TEXT
********************************
STRT_GPIT
;SAND BAGS
;COULD BE GUNPIT,VGUNPIT, OR GUNPIT FLIPPED, OR VGUNPIT FLIPPED
;MOVI CLSNEUT|TYPGATE|SUBLAY,A4 ;WILL BOUNCE OFF OF
;A8=SAND BAGS FOR PIT
MOVK 2,A9 ;TURRET KIND
MOVE *A8(OIMG),A0,L
MOVE *A0(32),A0,L ;DATA ADDR
MOVI GUNPIT2,A1
MOVE *A1(64),A1,L ;DATA ADDR
CMP A0,A1
JRZ SG1
MOVE *A8(OFLAGS),A1
BTST B_FLIPH,A1
JRZ AD3
MOVI VGUNPIT2,A1
MOVE *A1(64),A1,L ;DATA ADDR
CMP A0,A1
JRNZ ADI
MOVI VGUNPIT2,A1 ;CHANGE OIMG TO BE WIMP TYPE
JRUC SG2
AD3 MOVI VGUNPIT2,A1 ;CHANGE OIMG TO BE WIMP TYPE
MOVE A1,*A8(OIMG),L
ADI DIE
;LEFT/RGT GUN PIT
;TURN ON GUNNER DUDE
SG1 MOVI GUNPIT2,A1
SG2 MOVE A1,*A8(OIMG),L
MOVE A13,A10
MOVE @AFTR_WRP,A0
JRNZ ADI ;BR=COMING BACK FROM A WARP!
MOVE *A8(OYPOS),A0
MOVE @WORLDTLY+16,A1
ADDI 250,A1
CMP A0,A1
JRC ADI
CREATE T72PID,TTORSO
DIE
TTORSO
;A8=TANK IMG PNTR
;A9=0 FOR ARAB DUDE,1=GUN ON TOP OF BTR60,2=GUNNER DUDE,3=BOOB SHIP TURRET
;A10=BIG TANK PROC PNTR
;TURN ON TORSO WITH SAME X/Y AS CURRENT A8
MOVK 13,A0 ;9
MOVE A0,*A13(TDIR)
MOVE A0,*A13(TSK_DIR)
CLR A0
MOVE A0,*A13(ABSRB)
MOVE A9,*A13(KIND)
MOVE A0,*A13(MODE)
MOVK 1,A0
MOVE A0,*A13(SPDLY)
MOVE A0,*A13(TCNTR)
MOVE A8,*A13(KPTANKO),L ;TANK OBJECT PNTR
CALLA GETANIXY
CLR A6
CLR A7
MOVE A2,A1
MOVE A3,A0
MOVI 163,A3 ;133
MOVI DMAWNZ,A4
MOVI CLSENMY|TYPTORSO,A5
MOVI FNDGUN9A,A2
MOVE A9,A9 ;CMPI 0,A9
JRZ AD
MOVI CLSENMY|TYPTORSO|SUB60,A5
MOVI TURT9,A2 ;GUN ON BTR60 ;TURT12
CMPI 1,A9
JRZ AD
CMPI 3,A9
JRNZ AD20
;BOOB SHIP TURRET
MOVI CLSENMY|TYPTORSO|SUBBOOB,A5
MOVI BBTURRET1,A2 ;BOOB SHIP GUNNER
JRUC AD
AD20 CMPI 2,A9
JRNZ AD2
;GUNPIT DUDE HZ
MOVI CLSENMY|TYPTORSO|SUBPIT,A5
MOVI PTGNR1,A2 ;PIT GUNNER
;SET THIS GUNNER DOWN AT PROPER X/Y LOCATION
ADDI [14H,0],A0
SUBI [0CH,0],A1
MOVE *A8(OFLAGS),A9
BTST B_FLIPH,A9
JRZ AD
SUBI [29H,0],A0
MOVE *A8(OIMG),A9,L
MOVI VGUNPIT2,A8
CMP A9,A8
JRNZ AD
;VERTICAL GUN PIT DUDE
SUBI [28H,0],A0
SUBI [1AH,0],A1
JRUC AD
AD2
;OTHER GUNNERS!
AD CALLA BEGINOBJ2
MOVE A8,*A10(KPTSOBJ),L
clr a0
move a0,*a8(OCONST)
MOVI 35,B0
MOVI 50,B1
CALLA RANGRAND
MOVE A0,*A13(TCNTR)
MOVI 60*10,A0 ;INITIAL TIME BEFORE WE DO SCTST ON
MOVE A0,*A13(KOFF) ;THIS GUNNER
TLP_TOP
;MODE 0=ROTATE WITH TANK. TORSO WILL ALWAYS POINT AT DIR TANK IS FACING.
;MODE 1=JUST SITTING ON TOP OF TANK, NOT CARING WHAT DIR TORSO IS FACING.
;MODE 2=ACTIVELY SEEKING A DIR TO SHOOT, THEN FIRE AT END OF SEEK.
;MODE 3=ACTIVELY SEEKING TO DIR TANK IS FACING.
;MODE 4=AIM TOWARD PLAYER
;MODE 5=CONTINUE TO FIRE IN CURRENT DIRECTION
;MODE 6=OSCILLATE AND FIRE
MOVE *A13(KIND),A0
subk 2,a0
JRNZ YOSIT
MOVE *A13(KOFF),A0
DEC A0
MOVE A0,*A13(KOFF)
JRNZ NOSIT
MOVI 4*60,A0
MOVE A0,*A13(KOFF)
;CHECK FOR OFF SCRN
CALLA SCRTST
JRZ NOSIT
;KILL OFF
;FALLS IN HERE IF GUNNER IS DOWN BELOW SCREEN OR TO SIDE!
jauc DELOBJDIE
YOSIT CALLR SIT ;ALIGN TORSO EVERY FRAME
NOSIT MOVE @HALT,A0
JRZ DOG1
;NEED TO START THESE GUYS BACK UP AFTER YOU DIE
;CHECK NDSP1 STOP OBJ FLAGS! (NOMOV?)
SLEEPK 2
JRUC TLP_TOP
DOG1
*******************************************************************************
;;TEST A SPECIFIC DIRECTION FOR ALIGNMENT
; MOVK 1,A0
; MOVE A0,*A13(TDIR),W
; CALLA GET_STANDT ;DOES ANI OF CORRECT VIEW
; MOVE A13,A9
; CREATE0 CBALL ;CANNON BALL
; SLEEPK 10
; JRUC TLP_TOP
*******************************************************************************
MOVE *A13(MODE),A1
JRZ NOSPNT
CMPI 4,A1 ;AIM AT PLAYER
JREQ NOSPNT
CMPI 5,A1 ;SHOOTING AT PLAYER
JREQ NOSPNT
CMPI 6,A1 ;SHOOTING AT PLAYER
JREQ NOSPNT
MOVE *A13(SPDLY),A1
CMPI 7,A1
JRLT AF
MOVK 5,A1
AF
DEC A1
MOVE A1,*A13(SPDLY)
JRNN TAG
JRUC NOSPNT
DECIT MOVE *A13(TDIR),A0,W
CALLR INHERE
MOVE A0,*A13(TDIR),W
JRUC OUT
INCIT
MOVE *A13(TDIR),A0,W
CALLR IC
MOVE A0,*A13(TDIR),W
OUT
CALLR GET_STANDT ;DOES ANI OF CORRECT VIEW
JRUC TAG
NOSPNT MOVE *A13(MODE),A0
JRNZ NZ
CALLR MODECHNG
; CALLA STIK
JRUC TAG
NZ CMPI 1,A0
JRNZ SK
;JUST SITTING HERE
CALLR MODECHNG
JRUC TAG
SK CMPI 2,A0
JRNE SK2
;SEEK TO SKDIR, SHOOT(UNLESS MODE=3), THEN CHANGE MODE
SKIN1 MOVE *A13(SPDLY),A0
sll 32-8,a0
srl 32-8,a0
CMPI 7,A0
JRLT SC
MOVK 1,A0
SC
DEC A0
MOVE A0,*A13(SPDLY)
JRNZ TAG
MOVE *A13(TSK_DIR),A1
MOVE *A13(TDIR),A0,W
CALLR WAY
MOVE A0,*A13(TDIR),W
CALLR GET_STANDT ;DOES ANI OF CORRECT VIEW
MOVE A10,A10
JREQ NSPRAY
MOVE A13,A9
CREATE0 CBALL ;CANNON BALL
NSPRAY MOVE *A13(TSK_DIR),A1
MOVE *A13(TDIR),A0
CMP A0,A1
JREQ GDNEWS
MOVK 4,A0
MOVE A0,*A13(SPDLY)
JRUC TAG
;HAVE SEEKED TO CORRECT SKDIR
;SHOOT
GDNEWS
CLR A10
MOVE *A13(MODE),A0
subk 4,a0
JRNE GG
MOVI 900,A0 ;500
CALLA RANDPER
JRC AP
;SWEEPING OSCILLATE BULLETS
DOSWP MOVK 6,A0
MOVE A0,*A13(MODE)
MOVK 6,B0
MOVK 20,B1
CALLA RANGRAND
; MOVE @TANKDIFF,A1
; MOVK 2,A1
CLR A1
ADD A1,A0
MOVE A0,*A13(FIRED)
MOVK 1,A0
MOVE A0,*A13(SPDLY)
CLR A0
MOVE A0,*A13(TPNTR)
JRUC TAG
AP
;NORMAL FIRE AT PLAYER
MOVK 5,A0
MOVE A0,*A13(MODE)
MOVK 4,B0 ;2
MOVK 7,B1
CALLA RANGRAND
; MOVE @TANKDIFF,A1
; MOVK 2,A1
CLR A1
ADD A1,A0
MOVE A0,*A13(FIRED)
MOVK 1,A0
MOVE A0,*A13(SPDLY)
JRUC TAG
GG MOVI 100,A0 ;800
CALLA RANDPER
JRC GG2
;80% BE SMART
;BE SMART
MOVK 4,A0
MOVE A0,*A13(MODE)
JRUC TAG
GG2
MOVK 1,A0
MOVE A0,*A13(MODE)
JRUC TAG
SK2 CMPI 3,A0
JRNE AIM
;SEEK TO DIR OF TANK UNDER THIS TORSO
;NOW LINED UP WITH TANK DIR
;SET MODE TO STICK
CLR A0
MOVE A0,*A13(MODE)
MOVI 01,A0 ;2F
MOVE A0,*A13(TCNTR)
TAG SLEEPK 1
JRUC TLP_TOP
AIM
CMPI 4,A0
JRNZ FIREX
;MODE=4
MOVE @SCNTR,A3
INC A3
MOVE A3,@SCNTR
sll 32-1,a3
srl 32-1-5,a3 ;*32
MOVI PLYROBJS,A2
ADD A3,A2
MOVE *A2,A0,L ;GET FIRST ENTRY
JRNZ PX
XORI 32,A3
ADDI PLYROBJS,A3
MOVE *A3,A0,L
PX CALLA XYSKOBJ
MOVE A5,A1
MOVE A6,A2
CALLR GETHDR
SLL 3,A0
ADDI CVRT,A0
MOVB *A0,A0
;DIR TO FACE IN A0
;A0=DIR TO SEEK TO FACE PLAYER
MOVE *A13(TDIR),A1
;
CMPI 17,A1
JRC OKAYZ
;FIX BUG
CLR A1
MOVE A1,*A13(TDIR)
OKAYZ
CMP A0,A1
JREQ AIM2
;NOT =
MOVE A0,*A13(TSK_DIR),W
JRUC SKIN1
AIM2
MOVE A13,A9
CREATE0 CBALL
MOVI 400,A0
CALLA RANDPER
JRC DOSWP ;DO SWEEP BULLETS
MOVI 400,A0
CALLA RANDPER
MOVK 4,A0
JRC AIM3 ;DO SWEEP BULLETS
MOVK 3,A0
AIM3 MOVE A0,*A13(MODE)
JRUC TAG
FIREX
CMPI 5,A0
JRNZ OSC
;CONTINUALLY FIRE IN CURRENT DIRECTION
MOVE *A13(SPDLY),A0
DEC A0
MOVE A0,*A13(SPDLY)
JRNN TAG
MOVK 5,A0
MOVE A0,*A13(SPDLY)
MOVE *A13(FIRED),A0
DEC A0
MOVE A0,*A13(FIRED)
JREQ RESET
;FIRE A BULLET
MOVE A13,A9
CREATE0 CBALL
JRUC TAG
RESET
MOVI 900,A0
CALLA RANDPER
JRC SLW
;SEEK PLAYER AGAIN
MOVK 4,A0
MOVE A0,*A13(MODE)
JRUC TAG
SLW MOVK 1,A0
MOVE A0,*A13(MODE)
JRUC TAG
OSC:
CMPI 6,A0
JRNE SWING
;OSCILLATE AND FIRE
MOVE *A13(SPDLY),A0
DEC A0
MOVE A0,*A13(SPDLY)
JRNN TAG
; MOVE @TANKDIFF2,A0
MOVK 6,A0 ;TIE IN TO LEVEL OF DIFFICULTY!
MOVE A0,*A13(SPDLY)
MOVE *A13(FIRED),A0
DEC A0
MOVE A0,*A13(FIRED)
JREQ RESET
;FIRE A BULLET
MOVE A13,A9
CREATE0 CBALL
;NOW ANGLE OFF
MOVE *A13(TPNTR),A0
INC A0
MOVE A0,*A13(TPNTR)
CMPI 9,A0
JRLT AB
MOVK 1,A0
MOVE A0,*A13(TPNTR)
AB SLL 5,A0
ADDI WAYTBL,A0
MOVE *A0,A0,L
JUMP A0
WAYTBL .LONG 0,INCIT,INCIT,DECIT,DECIT,DECIT,DECIT,INCIT,INCIT
SWING:
;SWING AROUND AND AROUND SPRAYING BULLETS
JRUC TAG
MODECHNG
MOVE *A13(TCNTR),A0
sll 32-8,a0
srl 32-8,a0
CMPI 200,A0
JRLT AV
MOVI 30,A0 ;50
AV
DEC A0
MOVE A0,*A13(TCNTR)
JRNN EX
;TCNTR UP, MAYBE RESET MODE
MOVI 35,B0
MOVI 50,B1 ;80
CALLA RANGRAND
MOVE A0,*A13(TCNTR)
MOVI 700,A0
CALLA RANDPER
JRNC EX ;NO CHANGE OF MODE
;COULD BE IN SIT MODE OR STICK MODE
MOVI 1,B0
MOVI 13,B1 ;4
CALLA RANGRAND
CMPI 5,A0
JRLT AK
MOVK 4,A0
AK:
CMPI 1,A0
JREQ SHOOT
MOVE A0,*A13(MODE)
CMPI 3,A0
JREQ EX
MOVE *A13(TDIR),A1
MOVI 4,B0
MOVI 15,B1
CALLA RANGRAND
ADD A0,A1
CMPI 17,A1
JRLT AGN
SUBI 16,A1
AGN MOVE A1,*A13(TSK_DIR)
MOVK 1,A10
EX
MOVE *A13(MODE),A0
CMPI 3,A0
JRNE RTY1
MOVK 1,A0 ;JUST SIT
MOVE A0,*A13(MODE)
RTY1 RETS
SHOOT
;SHOOT
MOVE A13,A9
CREATE0 CBALL
MOVK 1,A0
MOVE A0,*A13(MODE)
RETS
SIT MOVE A8,A0
MOVE *A13(KPTANKO),A8,L
CALLA GETANIXY
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
MOVE A0,A8
RETS
;FOR ARAB ON TANK
XOFSET: .LONG 0B0000H,0220000H,02B0000H,0340000H,0370000H,0380000H,02E0000H
.LONG 01E0000H,0F0000H,010000H,0FFFFH,020000H,0,0,010000H,000000H
YOFSET: .LONG 020000H,020000H,020000H,020000H,0D0000H,0210000H,02D0000H
.LONG 02E0000H,0360000H,02F0000H,02C0000H,0200000H,0E0000H,020000H
.LONG 010000H,020000H
;FOR GUN ON TOP OF BTR60
;FOR PUFF OF FIRE NEAR GUN ON TOP OF BTR60 AFTER IT FIRES
XOFSET2:
.LONG 0D0000H,0260000H,02E0000H,03A0000H,03A0000H,0380000H,02E0000H
.LONG 0220000H,0E0000H,030000H,020000H,020000H,0,0,010000H,000000H
YOFSET2:
.LONG 0FFFD0000H,020000H,020000H,020000H,0D0000H,0210000H,02D0000H
.LONG 02F0000H,0360000H,02F0000H,02C0000H,0230000H,0D0000H,020000H
.LONG 010000H,020000H
.LONG 0 ;OUT
;FOR SAND BAG GUNNER
XOFSET3:
.LONG 0E0000H,0270000H,0350000H,03C0000H,04A0000H,03E0000H,0310000H
.LONG 0240000H,0E0000H,010000H,[-3,0],0,[-4,0],[-2,0],[-3,0],0
YOFSET3:
.LONG [-2,0],0,[-2,0],0,0A0000H,0290000H,0340000H ;36
.LONG 03C0000H,03F0000H,03B0000H,0380000H,0280000H,0A0000H,0
.LONG [-3,0],[-2,0]
;FOR BOOB SHIP TURRET
XOFSET4:
.LONG 0,0320000H,0320000H,0320000H,0320000H,02B0000H,0260000H
.LONG 01E0000H,0C0000H,020000H,030000H,040000H,0,0,0,0
YOFSET4:
.LONG 060000H,060000H,060000H,060000H,060000H,0120000H,01A0000H
.LONG 0200000H,0250000H,01F0000H,0190000H,0110000H,060000H,060000H
.LONG 060000H,060000H
XVL: .LONG 0,0B433H,019999H,019999H,019999H,019999H,019999H,0B433H,0
.LONG -0B433H,-019999H,-019999H,-019999H,-019999H,-019999H,-0B433H
YVL: .LONG -019999H,-019999H,-019999H,-0CCCCH,0,0CCCCH,019999H,019999H,019999H
.LONG 019999H,019999H,0CCCCH,0,-0CCCCH,-019999H,-019999H
BXVL: .LONG -019999H,019999H,019999H,019999H,019999H,019999H,019999H,0B433H,0
.LONG -0B433H,-019999H,-019999H,-019999H,-019999H,-019999H,-019999H
BYVL: .LONG 0,0,0,0,0,0CCCCH,019999H,019999H,019999H
.LONG 019999H,019999H,0CCCCH,0,0,0,0
XVL2: .LONG 0,0E8F5H,02147AH,02147AH,02147AH,02147AH,02147AH,0E8F5H,0
.LONG -0E8F5H,-02147AH,-02147AH,-02147AH,-02147AH,-02147AH,-0E8F5H
YVL2: .LONG -02147AH,-02147AH,-02147AH,-010A3CH,0,010A3CH,02147AH,02147AH,02147AH
.LONG 02147AH,02147AH,010A3CH,0,-010A3CH,-02147AH,-02147AH
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
CBALL:
;A9=TORSOS' A13 THAT FIRED THIS BALL
;A8=TORSO IMG
MOVE @WAVE,A0
CMPI 13,A0
JRGE CBL1
;EARLY DESERT GUNNER DUDE
MOVI 250,A0 ;450
CALLA RANDPER
JAC SUCIDE
CBL1
MOVI DMAWNZ,A11 ;FLAGS
MOVE *A9(KPTANKO),A0,L
MOVE *A0(OXVEL),A6,L ;RETAIN TANK VELOCITY
MOVE *A0(OYVEL),A7,L
MOVE *A9(TDIR),A2,W
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
DEC A2
SLL 5,A2
MOVE *A9(KIND),A3
SUBK 3,A3
JRNZ REGBU
;BOOB TURRET
MOVI BXVL,A3
ADD A2,A3
MOVE *A3,A3,L
ADD A3,A6
MOVI BYVL,A3
MOVI BOOB_BURST,A10
MOVE A10,@KEEP_BOOB,L
JRUC BOOB1
REGBU MOVI XVL,A3
ADD A2,A3
MOVE *A3,A3,L
ADD A3,A6
MOVI YVL,A3
MOVI BURST,A10
MOVE A10,@KEEP_BOOB,L
BOOB1
;RECOIL
PUSH A7
;KIND .EQU PDATA+32 ;UHW-KIND OF GUNNER 0=ARAB,1=BTR60
;2=SAND BAG DUDE, 3=BOOB TURRET
MOVI TBLS,A0
MOVE @WAVE,A4
CMPI 18,A4
JRZ KJD
CMPI 17,A4
JRNZ KJ1
KJD MOVI TBLSZ,A0 ;FOR PINK BULLET
KJ1 MOVE *A9(KIND),A4
SLL 5,A4
ADD A4,A0
MOVE *A0,A0,L
MOVE *A9(TDIR),A7
MOVE A7,A10
SLL 4,A7
MOVI TK_SPINFLGS-16,A11
ADD A7,A11
MOVE *A11,A11,W
SLL 1,A7
ADD A0,A7
MOVE *A7,A5,L
CMPI 64,A4
; JRZ SKP
JRNC SKP ;BR=SAND BAG DUDE OR BOOB TURRET
CREATE0 FLAMEIT ;RECOIL GUN
MOVE A4,A4 ;*A9(KIND),A0
JRZ AD7
CREATE0 PUFF ;PUFF OF FIRE AROUND BARREL
JRUC AD7O
SKP CREATE0 PUFF ;PUFF FOR GUNNER DUDE
AD7 CMPI 96,A4
JRZ AD7O
CREATE0 RECOIL
AD7O
;RENTER
PULL A7
ADD A2,A3
MOVE *A3,A3,L
ADD A3,A7
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVE A5,A8
MOVI LSTA,A5
ADD A4,A5
MOVE *A5,A3,L
ADDI LSTB,A4
MOVE *A4,A5,L
ADD A2,A3
MOVE *A3,A3,L
ADD A3,A0
ADD A2,A5
MOVE *A5,A3,L
ADD A3,A1
MOVE A8,A2
;YVAL IN A1
MOVI CLSENMY|TYPGOO,A5 ;ENMY|TYPSHOT,A5
MOVE A11,A4
;ID IN A5
MOVI 160,A3 ;133
;ZPOS IN A3
;XVEL IN A6
;YVEL IN A7
MOVE @KEEP_BOOB,A10,L
START_PJ
CALLA BEGINOBJ2
MOVI TURTSND,A0
CALLA ONESND
START_PJ2
; MOVI BURST,A0
MOVE A10,*A13(MYLIST),L
MOVI EXP3,A0
MOVE A0,*A13(MYSND),L
CLR A9 ;THIS BALL WILL NOT ANIMATE
MOVE A9,*A13(MYPLYR)
JRUC BSTART
TBLS .LONG BANGL1-32,BANGL2-32,BANGL-32,BANGL3-32
TBLSZ .LONG BANGL1-32,BANGL2Z-32,BANGL-32,BANGL3-32
;BOOB SHIP TURRET
BANGL3 .LONG LASER5,LASER5,LASER5,LASER5,LASER5
.LONG LASER4,LASER3,LASER2,LASER1
.LONG LASER2,LASER3,LASER4,LASER5,LASER5
.LONG LASER5,LASER5
BANGL .LONG GNNRBUL12,GNNRBUL115,GNNRBUL11,GNNRBUL10,GNNRBUL9
.LONG GNNRBUL85,GNNRBUL8,GNNRBUL7,GNNRBUL6
.LONG GNNRBUL7,GNNRBUL8,GNNRBUL85,GNNRBUL9,GNNRBUL10
.LONG GNNRBUL11,GNNRBUL115
BANGL1
; .LONG GBUL12,GBUL115,GBUL11,GBUL10,GBUL9
;T72 ARAB
; .LONG GBUL85,GBUL8,GBUL7,GBUL6
; .LONG GBUL7,GBUL8,GBUL85,GBUL9,GBUL10
; .LONG GBUL11,GBUL115
BANGL2 .LONG GUNBUL,GUNBUL,GUNBUL,GUNBUL,GUNBUL,GUNBUL
.LONG GUNBUL,GUNBUL,GUNBUL,GUNBUL,GUNBUL,GUNBUL
.LONG GUNBUL,GUNBUL,GUNBUL,GUNBUL
BANGL2Z .LONG OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL
.LONG OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL
.LONG OGUNBUL,OGUNBUL,OGUNBUL,OGUNBUL
;BTR60
.LONG GNNRBUL85,GNNRBUL8,GNNRBUL7,GNNRBUL6
.LONG GNNRBUL7,GNNRBUL8,GNNRBUL85,GNNRBUL9,GNNRBUL10
.LONG GNNRBUL11,GNNRBUL115
LSTA .LONG XOFSET,XOFSET2,XOFSET3,XOFSET4
LSTB .LONG YOFSET,YOFSET2,YOFSET3,YOFSET4
BTYPE .LONG GUNBUL,GUNBUL,GUNBUL
BURST .LONG FIRE1
.WORD NEWPALET|5
.LONG BULLET
.LONG FIRE2
.WORD 5
.LONG FIRE3
.WORD 5
.LONG FIRE4
.WORD 5
.LONG FIRE5
.WORD 5
.LONG FIRE6
.WORD 9
.LONG FIRE5
.WORD 5
.LONG FIRE4
.WORD 5
.LONG FIRE3
.WORD 5
.LONG FIRE2
.WORD 3
.LONG 0
BOOB_BURST
.LONG LSPLAT1
.WORD NEWPALET|5
.long GRNFCP
.LONG LSPLAT2
.WORD 5
.LONG LSPLAT1
.WORD 5
.LONG LSPLAT2
.WORD 5
.LONG LSPLAT1
.WORD 5
.LONG LSPLAT2
.WORD 5
.LONG 0
PUFF
;A9=TORSOS' A13 THAT FIRED
;A8=TORSO IMG
MOVE *A9(TDIR),A2
DEC A2
SLL 5,A2
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVE *A9(KIND),A3
CMPI 3,A3
JRNZ OPF1
;BOOB SHIP TURRET PUFF
MOVI XOFSET4,A3
MOVI YOFSET4,A5
MOVI BOOB_PUFL,A9
MOVI LBLAST1,A6
JRUC PF2
OPF1
MOVI GNFR1,A6
MOVI PUFL,A9
CMPI 2,A3
JRZ PF1
MOVI XOFSET2,A3
MOVI YOFSET2,A5
JRUC PF2
PF1 MOVI XOFSET3,A3
MOVI YOFSET3,A5
PF2 ADD A2,A3
MOVE *A3,A3,L
ADD A3,A0
ADD A2,A5
MOVE *A5,A3,L
ADD A3,A1
; MOVI GNFR1,A2
MOVE A6,A2
MOVI CLSDEAD,A5
move *a8(OXVEL),A6,L
move *a8(OYVEL),A7,L
; CLR A6
; CLR A7
MOVI DMAWNZ|M_NOCOLL,A4 ;FLAGS
MOVI 170,A3 ;133
CALLA BEGINOBJ2
; MOVI PUFL,A9
jauc FRQDELDIE
PUFL .LONG GNFR1
.WORD 2
.LONG GNFR2
.WORD 2
.LONG GNFR3
.WORD 2
.LONG 0
BOOB_PUFL
.LONG LBLAST1
.WORD 2
.LONG LBLAST2
.WORD 2
.LONG 0
RECOIL MOVE A10,A0
SLL 4,A0
MOVI XCHG,A1
ADD A0,A1
MOVE *A1,A10,W ;X MOD
MOVI YCHG,A2
ADD A0,A2
MOVE *A2,A9,W
MOVE *A8(OYPOS),A0
ADD A9,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADD A10,A0
MOVE A0,*A8(OXPOS)
SLEEPK 2
MOVE *A8(OYPOS),A0
SUB A9,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUB A10,A0
MOVE A0,*A8(OXPOS)
DIE
XCHG: .WORD 0,0,-1,-2,-2,-2,-2,-2,-1,0,1,2,2,2,2,2,1
YCHG: .WORD 0,2,2,2,1,0,-1,-2,-2,-2,-2,-2,-1,0,1,2,2
FLAMEIT
;A9=TORSO PROC PNTR
;A10=DIR TORSO FACING
;A8=TORSO PNTR
DEC A10
sll 32-4,a10
srl 32-4,a10
MOVE A10,A1
SLL 5,A1
MOVE *A9(KIND),A0
JRZ AD8
ADDI FLMVW2,A1
JRUC AD8O
AD8 ADDI FLMVW,A1
AD8O MOVE *A1,A1,L
MOVE *A8(OFLAGS),A4,W
CALLA ANI
SLEEPK 3
MOVE *A9(TDIR),A0
DEC A0
CMP A10,A0
JRNZ DOF
;PUT NORMAL NON FLAME VIEW BACK
MOVE A10,A1
SLL 5,A1
MOVE *A9(KIND),A9
JRZ AD5
ADDI TSPINFRMS2,A1
JRUC AD5O
AD5 ADDI TSPINFRMS,A1
AD5O MOVE *A1,A1,L ;NEW OIMG
MOVE *A8(OFLAGS),A4,W
CALLA ANI
DOF DIE
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
;701
;6 2
;543
CVRT .BYTE 0,5,13,9,1,7,11,3,15,6,12,2,16,8,10,4
CVRT2 .BYTE 0,05,13,09,01,07,11,03,15
.EVEN
; 04
; 12 11
; 08 07
; 16 15
; 02 01
; 10 09
; 06 05
; 14 13
; 03
;GETHDR - RETURNS 1 OF 16 DIRECTIONS BASED ON OBJECTS X,Y VELOCITIES
;PARAMS:
; A1 = OBJ X VELOCITY
; A2 = OBJ Y VELOCITY
;RETURNS:
; A0 = 4,B,7,F,1,9,5,D,3,E,6,A,2,10,8,C = CW DIRECTION STARTING AT 12 O'CLOCK
; 4
; 2 1
; 3
GETHDR:
MOVE A1,A3
MOVE A2,A4
ABS A3 ;ABSOLUTE X VELOCITY
ABS A4 ;ABSOLUTE Y VELOCITY
MOVE A3,A5
ADD A4,A5 ;SUM Y+X
JRNE GAD1 ;BR = THERE IS A DIRECTION HERE!
CLR A3 ;STANDING CASE
JRUC SETDVAL
GAD1:
MOVK 3,A5
MOVK 3,A7
MPYU A3,A5 ;CALC 3*X
MPYU A4,A7 ;CALC 3*Y
CMP A7,A3 ;XV>3*YV ?
JRHS GADX ;BR = CHECK X VELOCITY CASE
CMP A5,A4 ;YV>3*XV ?
JRHS GADY ;BR = CHECK Y VELOCITY CASE
;
;DIAGONAL XY VELOCITY CASE
;4 POSSIBLE QUADRANTS 0-3
; 3 2
; 1 0
MOVE A1,A3 ;SAVE X,Y VELOCITIES
MOVE A2,A4
SRL 31,A1 ;X VEL
SRL 31,A2 ;Y VEL
SLL 1,A2
ADD A1,A2
;WE NOW HAVE THE QUADRANT NOW CHECK FOR 1 OF 3 DIRECTIONS WITHIN QUADRANT
;IN A2
ABS A3 ;X UNSIGNED COMPARE
ABS A4 ;Y
CMP A3,A4 ;Y>X?
JRGT DIFF ;BR = YES
SUB A4,A3
CMPI >2800,A3 ;-4000?
JRLT INRNGE ;WITHIN RANGE, USE QUADRANT K
ADDK 9,A2 ;RANGE LO
JRUC SETRNGE
DIFF:
SUB A3,A4
CMPI >2800,A4 ;+4000
JRLT INRNGE ;WITHIN RANGE USE QUADRANT K
ADDK >D,A2 ;RANGE HI
JRUC SETRNGE
INRNGE:
ADDK 5,A2
SETRNGE:
MOVE A2,A3
JRUC SETDVAL
;X VELOCITY CASE
GADX:
MOVK 1,A3 ;DISCRETE RYTE
MOVE A1,A1
JRNN SETDVAL ;
MOVK 2,A3 ;LEFT
JRUC SETDVAL
;Y VELOCITY CASE
GADY:
MOVK 3,A3 ;DISCRETE DOWN
MOVE A2,A2
JRNN SETDVAL
MOVK 4,A3 ;UP
;HAVE OFFSET IN A3
SETDVAL:
MOVE A3,A0
RETS
;
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
;ARAB DUDE
TSPINFRMS:
.LONG FNDGUN12A,FNDGUN115A,FNDGUN11A,FNDGUN10A,FNDGUN9A
.LONG FNDGUN85A,FNDGUN8A,FNDGUN7A
.LONG FNDGUN6A,FNDGUN7A,FNDGUN8A,FNDGUN85A,FNDGUN9A,FNDGUN10A
.LONG FNDGUN11A,FNDGUN115A
FLMVW:
.LONG FNDGUN12B,FNDGUN115B,FNDGUN11B,FNDGUN10B,FNDGUN9B
.LONG FNDGUN85B,FNDGUN8B,FNDGUN7B
.LONG FNDGUN6B,FNDGUN7B,FNDGUN8B,FNDGUN85B,FNDGUN9B,FNDGUN10B
.LONG FNDGUN11B,FNDGUN115B
;FOR GUN ON TOP OF BTR60
TSPINFRMS2:
.LONG TURT12,TURT11,TURT10,TURT9B,TURT9
.LONG TURT8,TURT7,TURT6B
.LONG TURT6,TURT6B,TURT7,TURT8,TURT9,TURT9B,TURT10
.LONG TURT11
FLMVW2:
.LONG TURT12A,TURT11A,TURT10A,TURT9BA,TURT9A
.LONG TURT8A,TURT7A,TURT6BA
.LONG TURT6A,TURT6BA,TURT7A,TURT8A,TURT9A,TURT9BA,TURT10A
.LONG TURT11A
;FOR GUN IN SAND BAG PIT
TSPINFRMS3:
.LONG PTGNR9,PTGNR8,PTGNR7,PTGNR6,PTGNR5
.LONG PTGNR4,PTGNR3,PTGNR2
.LONG PTGNR1,PTGNR2,PTGNR3,PTGNR4,PTGNR5,PTGNR6,PTGNR7
.LONG PTGNR8
;FOR BOOB SHIP TURRET
TSPINFRMS4:
.LONG BBTURRET5,BBTURRET5,BBTURRET5,BBTURRET5,BBTURRET5
.LONG BBTURRET4,BBTURRET3,BBTURRET2
.LONG BBTURRET1,BBTURRET2,BBTURRET3,BBTURRET4,BBTURRET5
.LONG BBTURRET5,BBTURRET5,BBTURRET5
TK_SPINFLGS:
.WORD DMAWNZ,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH
.WORD DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH
.WORD DMAWNZ+M_FLIPH
.WORD DMAWNZ,DMAWNZ,DMAWNZ
.WORD DMAWNZ,DMAWNZ,DMAWNZ
.WORD DMAWNZ,DMAWNZ
GET_STANDT:
;ANI ONTO SCREEN THIS TANKS STANDING POSITION
MOVE *A13(TDIR),A0 ;CURRENT DIR TANK IS FACING
DEC A0
sll 32-4,a0
srl 32-4,a0
MOVE A0,A2
SLL 5,A0
MOVE *A13(KIND),A1
SLL 5,A1
ADDI SPIN_LIST,A1
MOVE *A1,A1,L
ADD A1,A0
; JRZ AD1
; CMPI 1,A1
; JRNZ AD2X
; ADDI TSPINFRMS2,A0
; JRUC ADO
;AD2X
; ADDI TSPINFRMS3,A0 ;GUNNER IN PIT
; JRUC ADO
;AD1 ADDI TSPINFRMS,A0
;ADO
MOVE *A0,A1,L ;NEW OIMG
SLL 4,A2
ADDI TK_SPINFLGS,A2
MOVE *A2,A4,W ;NEW OFLAGS
jauc ANI
SPIN_LIST
.LONG TSPINFRMS,TSPINFRMS2,TSPINFRMS3,TSPINFRMS4
WAY:
;SPIN LEFT OR RIGHT
;A1=SEEK DIR
;A0=DIR IMAGE IS FACING NOW
;812
;7 3
;654
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
SUB A0,A1
MOVE A1,A2
ABS A1
CMPI 9,A1 ;5
JRLT N0
NEG A2
N0: BTST 31,A2
JRZ IC
INHERE: DEC A0
JRP TDEC
MOVK 16,A0 ;8
TDEC CLRC ;MEANS DEC
RETS
IC: INC A0 ;ROTATE TOWARD PLAYER
CMPI 17,A0 ;9
JRNE T1
MOVK 1,A0
T1: SETC ;MEANS INC
RETS
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
.END