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