total-carnage/SHOTS.ASM

3153 lines
46 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************
*
* Software: Mark Turmell
* Initiated: 8/30/90
*
* Modified: Shawn Liptak, 10/27/91 -Orcus mods
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 1/9/92 17:07
**************************************************************
.FILE 'SHOTS.ASM'
.TITLE 'PROJECTILES FROM PLAYERS STUFF'
.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 "FINGRNT.TBL"
.INCLUDE "THROW.TBL"
.include "shawn.hdr" ;Macros
;
;SOUNDS EXTERNAL
;
.REF EXP2HI,SHOT,TOTCARN,FLAMSND,SHOT2,SCASH,KEYSND,WOO1
.REF WOO2,GRNSND,THUMP,THUMP2,MTING,GETWPN,SEXP2HI,SALTXP4,TING
.REF SETDWN,GULP,TING2,TING3,NOWAY,ONESNDOVR
.REF TORCH,SCASH2,GAMSTATE
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF missile_fire2,DONT_WARP,WAVE,ORCHINT,PLYROBJS,RANDPER
.REF PCNT,OUT_FLG,FRANIM,FRANIMQ,BCURRENT,CLEANUP,SKIPR_CNT
.ref SHAKER,INHERE,RINGS,AHMD_CNT,FND_CNT,JEEP2,JEEP,JEEP4
.REF SCRADD2,P1DATA,P2DATA,DO_EXTRA,FREETOT,KILL_H1,PEXIST,TBOMBD2
.REF KILL_F2,GETFPAL,BGDO,HALT,KILL_LY,COMEOUT,BLUEEXP
.REF WARPOUT,PLYRPRCS,GETUGH,CYCLEON
.ref slt_smartbomb,NEUTRONB,DOBINGO,HULK_CNT,DODUD
.ref AKHLIMO
.ref SPAWN_MISL_GOOD
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF STRT_MISLS,DOIT,ONHEAD
.DEF BMBLTSON,ADDBMB,TINGSND
.DEF STRT_WPN,KILL_BULL,SPRAYON,NSTPON,EXPCNT,FLAMING
.DEF KEYON,RINGON,SMRTON,SHOEON,EXTRA,BMBON,DEL_BULL,TCSH,BOOMS
.DEF FIREON,GRENON,SPDGON,CLNICN,CHK_BULL,SBOMB,KILL_BULL2
.def SBSND,KILL_BULLG
;UNINITIALIZED RAM DEFINITIONS
.BSS EXPCNT,16 ;SMART BOMB EXP CNT
;EQUATES FIRST ORIGINATED IN THIS FILE
;PUT IN ANGLE VELOCITIES!
BLTYVEL .EQU 072000H ;>164000
BLTXVEL .EQU 072000H ;>164000
BL3YVEL .EQU 032000H ;>164000
BL3XVEL .EQU 039000H ;>164000
BLT5YVEL .EQU 038000H ;>164000
BLT5XVEL .EQU 040000H ;>164000
GRNYVEL .EQU 000H
GRNXVEL .EQU 2000H
;-18000 FOR FLATFACE
;GRNYVEL2 .EQU -018000H
;
;GRNXVEL2 .EQU -018000H
.TEXT
msllnchsnd .word >f290,10,>80b9,0 ;Missile launch
;msllnchsnd .word >f290,10,>80b6,0 ;Missile launch
;msllnchsnd .word >f290,10,>812C,0 ;Missile launch
STRT_MISLS
; DIE
MOVK 4,A11
MOVE @WAVE,A0
CMPI 1,A0
JRZ SM1
MOVK 4,A11 ;MISL CNT FOR BASEMENT AREA #1
CMPI 38,A0
JRZ SM1
MOVK 14,A11
CMPI 18,A0
JRNZ SM1
MOVK 3,A11 ;INTO AIRPORT GATE
SM1
MOVE *A8(OYPOS),A0
MOVE @WORLDTLY+16,A1
ADDI 240,A1
CMP A0,A1
JRLT SMD
SLEEP 110
MOVE @HALT,A0
JRNZ SM1
MOVE @WAVE,A0
CMPI 38,A0
JRNZ SM50
MOVI 400,A0
CALLA RANDPER
JRC SM1
JRUC SM01
SM50 SUBK 1,A0
JRNZ SM01
MOVI 850,A0
CALLA RANDPER
JRC SM1
SM01
movi msllnchsnd,a0
calla ONESND
MOVK 8,A10
MOVE *A8(OFLAGS),A0
BTST B_FLIPH,A0
JRZ SM2
MOVK 24,A10
SM2 MOVI missileo_t,A9
CREATE BOSSPID,missile_fire2
;missile_fire ;A8=*Src obj, A9=*Offset_t, A10=Dir 0-31
DSJ A11,SM1
SMD DIE
missileo_t
.word 12H,6
RINGON:
;TURN RING ON AROUND PLAYER ICON PICKUP
;REDUCE MMTM!!!
MMTM SP,A1,A7,A9
MOVE @GAMSTATE,A1
CMPI INAMODE,A1
JRZ ROUT
MOVE *A0(OPLINK),A0,L
MOVE *A0(PNUM),A9
MOVI GULP,A0
CALLA ONESND
MOVI 50,A10 ;TIME RINGS ARE ON
; MOVE @RINGTIME,A10
;GOOD PLAYERS WILL GET RING TIME CUT DOWN
CMPI 1,A9
JRZ SM16
MOVE @timerp2,A1
CMPI 280,A1
JRGE MKHRD0 ;IF CURRENT GAME IS TOO LONG!
MOVE @timerp2sd,A1 ;Player 2 seconds since death
CMPI 170,A1
JRLT NOCHNG6
MKHRD0 MOVI 39,A10
JRUC NOCHNG6
SM16
MOVE @timerp1,A1
CMPI 280,A1
JRGE MKHRD0 ;IF CURRENT GAME IS TOO LONG!
MOVE @timerp1sd,A1 ;Player 1 seconds since death
CMPI 170,A1
JRLT NOCHNG6
MOVI 39,A10
NOCHNG6
MOVE @WAVE,A0
CMPI 38,A0
JRNZ PAT
MOVK 19,A10
PAT
;IF ALREADY A RING FOR THIS PLYR
;KILL OLD PROC AND RESTART ANEW
CMPI 1,A9
JRZ ONEP
MOVI B2PID,A0
CALLA KIL1C
MOVI RNG2PID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ STRT2
move *A0(PA9),A1,L
CALLA KILL
MOVE A1,A0
CALLA DELOBJ
STRT2
; MOVI 50,A10 ;TIME RINGS ARE ON
CREATE RNG2PID,RINGS ;PLACE RING AROUND PLAYER X
JRUC ROUT
ONEP
MOVI B1PID,A0
CALLA KIL1C
MOVI RNG1PID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ STRT1
move *A0(PA9),A1,L
CALLA KILL
MOVE A1,A0
CALLA DELOBJ
STRT1
; MOVI 50,A10 ;TIME RINGS ARE ON
CREATE RNG1PID,RINGS ;PLACE RING AROUND PLAYER X
ROUT CALLR CLNICN
MMFM SP,A1,A7,A9
RETS
BMBLTSON
MMTM SP,A1,A7,A9,A11
MOVE *A0(OPLINK),A11,L
MOVE *A11(PNUM),A9
CMPI 1,A9
JRZ ONEP4
MOVI BMBLT2PID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ STRT4
CALLA KILL
STRT4
MOVK 10,A10 ;# OF BOMBS TO DROP FOR PLYR
CREATE BMBLT2PID,DOBMBS
JRUC ADSHOE
ONEP4
MOVI BMBLT1PID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ STRT14
CALLA KILL
STRT14
MOVK 10,A10
CREATE BMBLT1PID,DOBMBS
ADSHOE
;TURN ON FAST SHOES ALSO
MOVE *A11(LEG_PRC),A9,L
;PICKED UP TENNIS SHOES!
MOVI 08140H,A1
MOVE A1,*A9(SHOECNT),W
CALLR CLNICN
MMFM SP,A1,A7,A9,A11
RETS
DOBMBS
;A9=1 OR 2 FOR PLYR #
;A10=# OF BOMBS TO DROP
MOVE A9,A1
DEC A1
SLL 5,A1
MOVI PLYRPRCS,A11
ADD A1,A11
MOVE *A11,A11,L
DB2
MOVE @WARPOUT,A0
JRNZ DI ;NOBM
MOVE @HALT,A0
JRNZ NOBM
;PLACE TIME BOMB HERE
MOVE *A11(DEAD),A0
JRNZ DI
;PLACE BOMB ON GROUND
CREATE BMBPID,TBOMBD2
MOVI SETDWN,A0 ;SET DOWN SND
CALLA ONESND
DEC A10
JRZ DI
NOBM SLEEPK 25
JRUC DB2
EXTRA:
;A0=PLYR
;A8=ICON
MMTM SP,A1,A2,A3,A4,A5,A6,A7
MOVE *A8(OIMG),A1,L
CMPI ORCHINT,A1 ;HINTS
JRZ AWARP
CMPI SPIN1,A1 ;WARP
JRZ AWARP
CMPI MAPBUTN,A1
JRNZ EX1
;THIS IS A MAPBUTN
MOVI BGDO,A7
MOVK 1,A0
MOVE A0,@HALT
EX2 MOVE *A8(OPLINK),A0,L
CLR A1
CALLA XFERPROC
MOVE *A8(OFLAGS),A0
ORI M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
EX3 MOVK 1,A0
MOVE A0,@OUT_FLG
NOPE MMFM SP,A1,A2,A3,A4,A5,A6,A7
RETS
AWARP MOVE @DONT_WARP,A7 ;NEUTRON BMB BLOWING UP!
JRNZ EX3
MOVI COMEOUT,A7
MOVE A0,A9
JRUC EX2
EX1 CMPI PLAYER,A1
JRNZ NOPE
;FREE MAN ICON TOUCHED
MOVE *A0(OPLINK),A10,L
CREATE0 FLASHME
MOVE *A10(PNUM),A10
MOVI P1DATA,A2
CMPI 1,A10
JRZ TAG1
MOVI P2DATA,A2
TAG1 CALLA DO_EXTRA
; MOVE *A8(OPLINK),A0,L
; JRZ TAG2 ;BR=BONUS MAN SITTING INSIDE A WARP
;CHECK TO SEE IF PIXSCAN BIT IS SET!
;IF SO, WE HAVE A BONUS MAN IN A WARP!
MOVE *A8(OFLAGS),A0
BTST B_PIXSCAN,A0 ;.EQU 10
JRNZ TAG2
;
; MOVE *A8(OYPOS),A0
;;CHECK IF WARP LOCKDOWN FREE MAN
; CMPI 127+200+60,A0
; JRNZ TAG1A
; MOVE *A8(OXPOS),A0
; CMPI 180+200-3,A0
; JRZ TAG2
; CMPI 220+200-3,A0
; JRZ TAG2
;TAG1A
MOVE @FREETOT,A0
INC A0
MOVE A0,@FREETOT
JRUC FLYCONT
TAG2
CLR A11
JRUC FLYCONTA
KEYON:
;PLAYER NOW CARRIES KEY
;A0=PLYR
;A8=ICON
MMTM SP,A1,A2,A3,A4,A5,A6,A7
MOVE *A0(OPLINK),A10,L
CREATE0 FLASHME
MOVE *A10(PNUM),A10
MOVI P1DATA,A2
; MOVE A2,@MAPON
MOVI KEYPT,A1
CMPI 1,A10
JRZ KEY1
MOVI P2DATA,A2
KEY1
MOVE *A2(TKEYS),A0
INC A0
MOVE A0,*A2(TKEYS)
CALLA SCRADD2
MOVI KEYSND,A0 ;KEY VOICE CALL
CALLA ONESND
FLYCONT
MOVK 1,A11
FLYCONTA
MOVI CLSDEAD,A0
MOVE A0,*A8(OID)
MOVI DMAWNZ|M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
MOVI 300,A0
MOVE A0,*A8(OZPOS)
MOVE *A8(OPLINK),A0,L
DEC A10
FLYCONT2
MOVI ICONPID,A1
MOVI INHERE,A7 ;FLOAT TOWARD SCORE BOARD
CALLA XFERPROC
MOVK 1,A0
MOVE A0,@OUT_FLG
MMFM SP,A1,A2,A3,A4,A5,A6,A7
RETS
ONHEAD
CMPI P1DATA,A9
JRNZ ONH1
;P1
CLR A10
MOVE @PLYROBJS,A7,L
ONH2 MOVE *A7(OXVAL),A0,L
CLR A11
SUBI [1,0],A0
MOVE *A7(OYVAL),A1,L
ADDI [1,0],A1
MOVI PLAYER,A2
MOVI 300,A3
MOVI DMAWNZ|M_NOCOLL,A4
MOVI CLSDEAD,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVI ICONPID,A0
MOVE A0,*A13(PROCID)
SLEEPK 20 ;SHOW HIM!
JAUC INHERE
ONH1 MOVE @PLYROBJS+32,A7,L
MOVK 1,A10
JRUC ONH2
TCSH:
;TOUCH CASH ON FLOOR
;A0=PLYR
;A8=BMB IMG
MMTM SP,A1,A2,A3,A4,A5,A6,A7
MOVE *A0(OPLINK),A0,L
MOVE *A0(PNUM),A10
MOVI P1DATA,A1
DEC A10
JRZ X0
MOVI P2DATA,A1
X0 MOVE *A8(OIMG),A0,L
CMPI DET1,A0
JRNZ NOT_BMB
;PLAYER PICKED UP EXTRA BOMB
PUSH A0
MOVI P1DATA+BMB_CNT,A0
MOVE A10,A10
JRZ TBMB0
MOVI P2DATA+BMB_CNT,A0
TBMB0
CALLR ADDBMB
PULL A0
MOVI SCASH2,A0
JRUC X2A
NOT_BMB
CMPI PLAYER,A0 ;FREE MAN?
JRNZ NOTMAN
MOVI P1DATA,A2
MOVE A10,A10
JRZ TKEY10
MOVI P2DATA,A2
TKEY10
CALLA DO_EXTRA
;DO_EXTRA
;EXTRA MAN
;A2 = P1DATA OR P2DATA
JRUC X2AA
NOTMAN CMPI KEY,A0
JRNZ NOT_KEY
MOVI P1DATA,A2
MOVI KEYPT,A1
MOVE A10,A10
JRZ TKEY1
MOVI P2DATA,A2
TKEY1
MOVE *A2(TKEYS),A0
INC A0
MOVE A0,*A2(TKEYS)
CALLA SCRADD2
MOVI KEYSND,A0 ;KEY VOICE CALL
JRUC X2A
NOT_KEY CMPI USFLG,A0
JRNZ X1
MOVE *A1(TFLAGS),A0 ;TOTAL FLAGS PICKED UP
INC A0
MOVE A0,*A1(TFLAGS)
JRUC X2
X1 MOVE *A1(CASHCNT),A0
INC A0
MOVE A0,*A1(CASHCNT)
X2 MOVE @WAVE,A0
CMPI 40,A0
JRNZ X3Z
;PLEASURE DOME CASH
MOVI P1DATA,A2
MOVI PLSRPTS,A1 ;PLEASURE DOME PNTS
MOVE A10,A10
JRZ TPL
MOVI P2DATA,A2
TPL
CALLA SCRADD2
;SUBTRACT OUT TWPNS PICKED UP
X3Z MOVI SCASH,A0 ;GET CASH PICKUP SND
X2A CALLA ONESND
X2AA MOVE *A1(TWPNS),A0
DEC A0
MOVE A0,*A1(TWPNS)
MOVI CLSDEAD,A0
MOVE A0,*A8(OID)
MOVI DMAWNZ|M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
MOVI 500,A0 ;300
MOVE A0,*A8(OZPOS)
MOVE *A8(OPLINK),A0,L
JRZ X3
CALLA KILL
X3
;JEWEL ON GROUND JUMPS IN HERE
;A10=0 OR 1 FOR PLYR #
;A8=ICON IMG
;A11=1 IF FROM KEY FLOATING TO SCORE BOARD
CLR A11
CREATE FUTUREPID,INHERE
MMFM SP,A1,A2,A3,A4,A5,A6,A7
RETS
;CSHSND .LONG SCASH1,SCASH2,SCASH3,SCASH4,SCASH5
; .LONG SCASH4,SCASH2,SCASH5
BMBON:
;PLAYER PICKED UP EXTRA BOMB
;A0=PLYR
;A8=BMB IMG
MMTM SP,A1,A2,A3,A4,A5,A6,A7
MOVE *A0(OPLINK),A0,L
MOVE *A0(PNUM),A10
MOVI SCASH2,A0
CALLA ONESND
MOVI P2DATA+BMB_CNT,A0
CMPI 1,A10
JRNZ FLY
MOVI P1DATA+BMB_CNT,A0
FLY CALLR ADDBMB
MOVI CLSDEAD,A0
MOVE A0,*A8(OID)
MOVI DMAWNZ|M_FLIPH|M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
MOVI 300,A0
MOVE A0,*A8(OZPOS)
MOVE *A8(OPLINK),A0,L
DEC A10
CLR A11
JRUC FLYCONT2
ADDBMB MOVE *A0,A2,W ;@P1DATA+BMB_CNT,A2
CMPI 15,A2 ;CAN CARRY MAXIMUM OF 18 BMBS
JRNC NOADD
INC A2
MOVE A2,*A0,W ;@P1DATA+BMB_CNT
NOADD RETS
FLASHME
;A10=PROC OF PLYR TO FLASH (TORSO STRUCTURE)
MOVE *A10(TSO_PTR),A8,L
MOVE *A10(LEG_PTR),A11,L
; MOVE *A8(OPAL),A10,W
;GIVE THESE IMAGES OTHER PAL
MOVI nup2a,A0
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
SLEEPK 8
;GIVE THESE IMAGES OTHER PAL
MOVI nup1,A0
MOVE *A10(PNUM),A1
CMPI 1,A1
JRZ XS
MOVI nup2,A0
XS CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
MOVE A0,*A11(OPAL),W
DIE
SHOEON:
;A8=SHOE ICON
;FAST SHOES
;REDUCE MMTM!!!
MMTM SP,A1,A7,A9,A10
MOVE *A0(OPLINK),A10,L
PUSH A0
CREATE0 FLASHME
PULL A0
MOVE *A10(LEG_PRC),A9,L
MOVE *A10(PNUM),A7
MOVE *A8(OIMG),A10,L
CMPI SHOES,A10
JRZ BOOTS
;PICKED UP TENNIS SHOES!
MOVI 08280H,A1
CMPI 1,A7
JRZ SM15
MOVE @timerp2sd,A7 ;Player 2 seconds since death
CMPI 80,A7
JRLT SH3
MOVI 081C0H,A1
JRUC SH3
SM15
MOVE @timerp1sd,A7 ;Player 1 seconds since death
CMPI 80,A7
JRLT SH3
MOVI 081C0H,A1
JRUC SH3
BOOTS
MOVE *A9(SHOECNT),A1
JRZ SHOE2
BTST 15,A1
JRZ SH2
;HAVE TENNIS SHOES ON! TAKE'EM OFF
SHOE2 MOVE A0,A10
CREATE0 FLOAT
SH2 MOVI 0A0H,A1 ;150 ;TIME SHOES ARE ON
SH3 MOVE A1,*A9(SHOECNT),W
CALLR CLNICN
MOVI FEET,A0
CALLA ONESND
MMFM SP,A1,A7,A9,A10
RETS
FEET .WORD >F06E,>18,>80CA,0 ;FAST FEET PICKUP
FLOAT
;A10=LEG IMG
;A9=LEG PROCESS
MOVE *A9(TSO_PTR),A8,L
MOVK 15,A11
FLT2
SLEEPK 8
MOVE *A9(SHOECNT),A0
JRZ DI
BTST 15,A0
JRNZ DI
MOVE *A10(OYPOS),A0
XORI 1,A0
MOVE A0,*A10(OYPOS)
DSJ A11,FLT2
MOVK 15,A11
MOVE A8,A0
MOVE A10,A8
CALLA GETANIXY
MOVE *A8(OFLAGS),A4,W
ORI M_NOCOLL,A4
CALLA GANISAG
MOVE A0,A8
;TURN BACK ON TORSO OBJECT
JRUC FLT2
DI DIE
SMRTON:
;SMART BOMB EVERYTHING ON SCREEN
MMTM SP,A1,A7,A10
MOVE A0,A9
MOVE *A0(OPLINK),A10,L
CREATE0 FLASHME
PUSH A9
CALLR CLNICN
PULL A9
MOVI 100,A0 ;230
MOVE *A10(PNUM),A1
CMPI 1,A1
JRZ SM1T
;GOOD PLAYERS WILL GET SMART BOMB 80% DUD RATE
.REF timerp2sd,timerp1sd,timerp1,timerp2
MOVE @timerp2,A1
CMPI 360,A1
JRGE MKHRD01 ;IF CURRENT GAME IS TOO LONG!
MOVE @timerp2sd,A1 ;Player 2 seconds since death
CMPI 90,A1
JRLT NOCHNG
JRUC MKHRD01
SM1T
MOVE @timerp1,A1
CMPI 360,A1
JRGE MKHRD01 ;IF CURRENT GAME IS TOO LONG!
MOVE @timerp1sd,A1 ;Player 1 seconds since death
CMPI 90,A1
JRLT NOCHNG
MKHRD01 MOVI 450,A0
NOCHNG
CALLA RANDPER
JRNC ZSM1
MOVE @WAVE,A0
JRZ ZSM1
CMPI 10,A0
JRZ ZSM1
;DUD!
CREATE0 DODUD
MOVI WHAWHA,A0
CALLA ONESNDOVR
JRUC XSM1
WHAWHA .WORD >FBEE,90,>8088,0 ;WHAWHA
ZSM1
CREATE0 DOBINGO
CREATE0 SBSND
MOVE @WAVE,A0
SUBK 32,A0
JRZ XSM1
CREATE0 SBOMB
MOVI 30,A10
CALLA SHAKER
XSM1
MMFM SP,A1,A7,A10
RETS
SBSND
MOVI SALTXP4,A0
MOVK 2,A1 ;REPEAT IT 3 TIMES
CALLA SNDLD ;GO DO IT
JSRP BOOMS
MOVI TOTCARN,A0 ;SPEECH
CALLA ONESND
DIE
BOOMS
MOVI SEXP2HI,A0
MOVK 1,A1 ;REPEAT IT 3 TIMES
CALLA SNDLD ;GO DO IT
SLEEPK 5
MOVI SEXP2HI,A0
MOVK 1,A1 ;REPEAT IT 3 TIMES
CALLA SNDLD ;GO DO IT
SLEEPK 5
MOVI SEXP2HI,A0
MOVK 1,A1 ;REPEAT IT 3 TIMES
CALLA SNDLD ;GO DO IT
SLEEPK 5
MOVI SEXP2HI,A0
MOVK 1,A1 ;REPEAT IT 3 TIMES
CALLA SNDLD ;GO DO IT
SLEEPK 21
RETP
SBOMB
;SMART BOMB
;A9=PLYR IMG PTR WHO GOT ME
CLR A0
MOVE A0,@EXPCNT ;SMART BOMB EXP CNT - MAX OUT AT 15!
MOVE *A9(OPLINK),A0,L
MOVE *A0(PNUM),A0
MOVI P1DATA,A9
DEC A0
JRZ BAD0
MOVI P2DATA,A9
;A9=P1 OR P2DATA FOR SCORING SMART BOMB POINTS
BAD0
MOVI CLSENMY|TYPHULK,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD10
;FOUND A HULK
MOVE A0,A8
CALLA KILL_H1 ;KILL_HULK
JRUC BAD0
BAD10 CLR A0
MOVE A0,@HULK_CNT
BAD1
MOVI CLSENMY|TYPFND,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD2A
;FOUND A FIEND
MOVE A0,A8
CALLA KILL_F2 ;KILL_FIEND
JRUC BAD1
BAD2A CLR A0
MOVE A0,@FND_CNT
BAD2
MOVI CLSENMY|TYPGOO,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD3
;FOUND A GOOB
MOVE A0,A8
MOVE *A8(OPLINK),A0,L
CALLA PEXIST
JRZ NOK
CALLA KILL
NOK CALLA DELOBJA8
JRUC BAD2
BAD3
MOVI CLSENMY|TYPGRW,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD4
;FOUND A HULK GROWING
MOVE A0,A8
CALLA KILL_H1 ;KILL_HULK
JRUC BAD3
BAD4
MOVI CLSENMY|TYPLAYR,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD5
;FOUND A MINE LAYER
MOVE A0,A8
CALLA KILL_LY ;KILL MINE LAYER TOO!
JRUC BAD4
BAD5
MOVI CLSPLYR|TYPHLPR|SUBLAY,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD6
MOVE *A0(OIMG),A8,L
; CMPI T72TNK,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB T72 TANK!
; CMPI BTR60,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB BTR60!
; CMPI BTRECK,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB BTR60 WRECK!
; CMPI JEEP,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB JEEP!
; CMPI JEEP2,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB JEEP!
; CMPI JEEP4,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB JEEP!
; CMPI SCUD1,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB SCUD TRUCK!
; CMPI NEUTRONB,A8
; JRZ BAD6 ;BR=DON'T SMART BOMB NEUTBONB!
; CMPI AKHLIMO,A8
; JRZ BAD6
MOVI TANK_LIST,A2
LOOP MOVE *A2+,A3,L
JRZ BAD6
CMP A8,A3
JRNZ LOOP
;FOUND A MINE LAYER WITH CLSPLYR BIT SET FOR A MOMENT!
MOVE A0,A8
CALLA KILL_LY ;KILL MINE LAYER TOO!
JRUC BAD5
TANK_LIST
.LONG MTNK10,RTNK,MTNK11,MTNK12,MTNK12B,MTNK6
.LONG MTNK6B,MTNK7,MTNK8,MTNK9,MTNK9B,0
BAD6
MOVI CLSENMY|TYPAHMD,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD7A
MOVE A0,A8
CALLA KILL_H1 ;KILL HULK AS WELL AS AHMED
JRUC BAD6
BAD7A CLR A0
MOVE A0,@AHMD_CNT
BAD7
MOVI CLSENMY|TYPLAYR|SUBFLM,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD8
;FOUND A FLAME
CALLA DELOBJ
JRUC BAD7
BAD8
movi CLSENMY|TYPSL,a0
movi >ff00,a1
calla EXISTOBJ
jrz BAD9
move a0,a8
calla slt_smartbomb
jruc BAD8
BAD9 movi SHRAPPID,a0
calla KIL1C
clr a0
move a0,@SKIPR_CNT
;
;INSERT OTHERS HERE
;
;HULKFIX MOVI HULKPID,A0
; CLR A1
; NOT A1
; CALLA EXISTP
;* Z BIT SET = NO MATCH, A0 = 0
;* Z BIT CLR = MATCH, A0 = PTR TO PROCESS
; JRZ BADCLN
; MOVE A0,A2
; move *A0(PA8),A0,L
; CALLA ISOBJ
;* Z BIT SET = NO OBJECT, A0 = 0 *
;* Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT *
; JRZ KILLIT
; MOVE *A0(OID),A1
; CMPI CLSDEAD,A1
; JRZ HULKFIX
; CMPI CLSENMY|TYPGRW,A1
; JRZ HULKFIX
; CMPI CLSENMY|TYPHULK,A1
; JRZ HULKFIX
;KILLIT MOVE A2,A0
; CALLA KILL
; JRUC HULKFIX
BADCLN
MOVI CLSENMY|TYPSHOT,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BADO
;FOUND A CBALL/SHRAPNEL
;NO SCORE
MOVE A0,A8
;ALSO USED FOR SHRAPNEL FROM FAT MAN
MOVE *A8(OPLINK),A0,L
JREQ BADCLN
CLR A1
MOVE A1,*A8(OPLINK),L
CALLA KILL
CALLA DELOBJA8
JRUC BADCLN
BADO
;RESET ALL CNTS!
DIE
SNDA
MOVI GETWPN,A0
CALLA ONESND
SLEEPK 18H
MOVI WOO2,A0
CALLA ONESND
DIE
********************************
* Collision code for weapon icons
* A0=*Plyr leg obj
* A8=*Icon obj
NSTPON
PUSH a1,a2,a7,a9,a10
MOVK SUBNOSTP,A2 ;BULLET SUBTYPE
JRUC ICONIN
SPDGON
PUSH a1,a2,a7,a9
MOVK SUBSPDG1,A2 ;BULLET SUBTYPE
JRUC ICONIN
GRENON
PUSH a1,a2,a7,a9
MOVK SUBGRND,A2 ;BULLET SUBTYPE
JRUC ICONIN
FIREON
PUSH a1,a2,a7,a9
MOVK SUBTHROW,A2
MOVE @PCNT,A7
SLL 32-2,A7
JRZ ICONIN
MOVK SUBFIRE1,A2 ;BULLET SUBTYPE
JRUC ICONIN
SPRAYON
PUSH a1,a2,a7,a9
MOVK SUBSPRY,A2 ;BULLET SUBTYPE
ICONIN move *a0(OPLINK),a10,L
CALLR DO_CNT
CREATE0 SNDA
CALLR CLNICN
CREATE0 FLASHME
PULL a1,a2,a7,a9,a10
RETS
********************************
* Setup new weapon
* A2=Weapon #
* A10=*Plyr process
* Trashes A0-A2,A7,A9
DO_CNT
move a2,*a10(WPN_TYP)
sll 4,a2
addi TIMERS,a2
movi timerp1,a14
move *a10(PNUM),a1
subk 1,a1
jreq dc40
movi timerp2,a14
dc40 move *a14+,a7 ;Seconds since buyin
cmpi 240,a7
jrgt dc150 ;Hard?
move *a14,a1 ;Seconds since death
cmpi 80,a1
jrlt dc300 ;Normal?
dc150 cmpi 290,a7
jrlt dc200 ;No missile?
move a0,a9 ;A9=*Plyr leg obj
move @PCNT,a0
sll 32-1,a0
jrnz dc200 ;50%?
move @WAVE,a0
subk 16,a0
jrlt dc180 ;Msl launch ok?
subk 18-16,a0
jrle dc200 ;Bad wave for msl?
subi 35-18,a0
jrlt dc200 ;^
dc180 movi MSLSLOWPID,a0
movi -1,a1
calla EXISTP
jrnz dc200
CREATE MSLSLOWPID,SPAWN_MISL_GOOD
dc200 addi TIMER2-TIMERS,a2 ;Less ammo
dc300 move *a2,a1
move a1,*a10(SHOTCNT)
rets
;STUFF SHOT CNT FOR THIS WEAPON
;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS
;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE
;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN
;SUBGRND .EQU 0004H ;GRENADE
;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET
;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN
TIMERS .WORD 0,0,41,60,60,52,110,56
TIMER2 .WORD 0,0,30,45,45,38,70,40 ;FOR GOOD PLAYERS
CLNICN
MOVE *A8(OFLAGS),A1
ORI M_NOCOLL,A1
MOVE A1,*A8(OFLAGS)
MOVE *A8(OPLINK),A0,L
MOVE *A0(PTIME),A9 ;TIME IT STILL HAD LEFT TO SLEEP
MOVI CLEANUP,A7
MOVI ICONPID,A1
CALLA XFERPROC
MOVK 1,A0
MOVE A0,@OUT_FLG
RETS
DEL_BULL
;DEL BULLET OBJ
;NOW DELETE OBJECT FROM OBJLST
MOVE *A8(OPLINK),A0,L
;INC BULLET HIT TOTAL FOR THIS PLAYER
MOVI P1DATA,A2
MOVE *A0(MYPLYR),A1
DEC A1
JRZ ADB2
; SUBK 1,A1
; JRNZ BUGSKIP
MOVI P2DATA,A2
ADB2 MOVE *A2(THITS),A1
INC A1
MOVE A1,*A2(THITS)
;BUGSKIP
MOVE A1,@OUT_FLG ;TELL SCANNER TO STOP
CALLA KILL
CALLA DELOBJA8
RETS
KILL_BULLG
MOVE @PCNT,A0
sll 32-3,a0
JRNZ KILL_BULL
CALLA GETUGH
KILL_BULL
; KILL BULLET WITH AN EXPLOSION
MOVI REGEXP,A7
KBL MOVE *A8(OPLINK),A0,L
;INC BULLET HIT TOTAL FOR THIS PLAYER
;MYPLYR .EQU PDATA+48 ;UHW PLAYER 1 OR 2 FIRED ME=1 OR 2
MOVI P1DATA,A2
MOVE *A0(MYPLYR),A1
DEC A1
JRZ DB5
SUBK 1,A1
MOVI P2DATA,A2
DB5 MOVE *A2(THITS),A1
INC A1
MOVE A1,*A2(THITS)
MOVE A1,@OUT_FLG ;TELL SCANNER TO STOP
MOVI BULPID,A1
CALLA XFERPROC
MOVE *A8(OFLAGS),A0
ORI M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
RETS
SUBR KILL_BULL3
movi cldbpurp_l,a9
movi kb3exp,a7
jruc kb2
cldbpurp_l
LWL CLDB1,NEWPALET|2,PURPPAL
LW CLDB2,2
LW CLDB3,2
LW CLDB4,2
LW CLD8,2
LW CLD9,2
LW CLD10,2
LWL0 CLD11,2
KILL_BULL2
MOVI FIREEXP,A9 ;FRBALL
movi ONON,a7
kb2 MOVE @PCNT,A0
sll 32-2,a0
srl 32-2-5,a0
ADDI TINGLST,A0
MOVE *A0,A0,L
CALLA ONESND
JRUC KBL
TINGLST .LONG TING,TING2,TING3,TING
TINGSND
MOVE @PCNT,A0
SLL 32-2,A0
SRL 32-7,A0 ;*32
ADDI TINGLST,A0
MOVE *A0,A0,L
JAUC ONESND
kb3exp move *a8(OYPOS),a0
addk 13,a0
move a0,*a8(OYPOS)
movi 160,a4
jruc re10
REGEXP
;REGULAR EXPLOSION HERE
MOVI FRBALL,A9 ;FRBALL
MOVI 180,A4
re10 MOVE A4,*A8(OZPOS)
ONON
MOVE *A8(OXVEL),A4,L
sra 2,a4
MOVE A4,*A8(OXVEL),L
MOVE *A8(OYVEL),A4,L
sra 2,a4
RG4 MOVE A4,*A8(OYVEL),L
jauc FRQDELDIE ;EXPLODE BULLET NOW!
REGEXP2
MOVI FIREEXP,A9 ;FRBALL
JRUC ONON
FIREEXP LWL ABLST1,NEWPALET|3,TNKPAL
LW ABLST2,3
LW ABLST3,3
LW ABLST4,3
LW ABLST5,3
LW ABLST6,3
LWL0 ABLST7,3
FRBALL LW FRBAL1,2 ;BULLET FIRE BALL EXPLOSION
LW FRBAL2,2
LWL0 FRBAL3,2
FRBL LW EXPb1,5
LW EXPb2,5
LW EXPb3,4
LW EXPb4,4
LWL0 EXPb5,4
FRBLBIG LWL THROW1,NEWPALET|4,BLUBOOM
LW THROW2,4
LW THROW3,4
LW THROW4,3
LW THROW5,3
LW THROW6,3
LW THROW7,3
LW THROW8,3
LW THROW9,3
LW THROW10,3
LW THROW11,2
LWL0 THROW12,2
; LWL0 THROW13,3
BULYV .LONG -BLTYVEL,-BLTYVEL,0,BLTYVEL,BLTYVEL,BLTYVEL,0,-BLTYVEL
BULXV .LONG 0,BLTXVEL,BLTXVEL,BLTXVEL,0,-BLTXVEL,-BLTXVEL,-BLTXVEL
BUL3AYV .LONG -BL3YVEL,-BL3YVEL,0,BL3YVEL,BL3YVEL,BL3YVEL,0,-BL3YVEL
BUL3AXV .LONG 0,BL3XVEL,BL3XVEL,BL3XVEL,0,-BL3XVEL,-BL3XVEL,-BL3XVEL
BUL5YV .LONG -BLT5YVEL,-BLT5YVEL,0,BLT5YVEL,BLT5YVEL,BLT5YVEL,0,-BLT5YVEL
BUL5XV .LONG 0,BLT5XVEL,BLT5XVEL,BLT5XVEL,0,-BLT5XVEL,-BLT5XVEL,-BLT5XVEL
GRNYV .LONG -GRNYVEL,-GRNYVEL,0,GRNYVEL,GRNYVEL,GRNYVEL,0,-GRNYVEL
GRNXV .LONG 0,GRNXVEL,GRNXVEL,GRNXVEL,0,-GRNXVEL,-GRNXVEL,-GRNXVEL
;GRNYV2 .LONG -GRNYVEL2,-GRNYVEL2,0,GRNYVEL2,GRNYVEL2,GRNYVEL2,0,-GRNYVEL2
;GRNXV2 .LONG 0,GRNXVEL2,GRNXVEL2,GRNXVEL2,0,-GRNXVEL2,-GRNXVEL2,-GRNXVEL2
BUL2YV .LONG -BLTYVEL,-BLTYVEL,-(BLTYVEL/2),BLTYVEL/2,BLTYVEL
.LONG BLTYVEL,BLTYVEL/2,-BLTYVEL
BUL2XV .LONG -(BLTXVEL/2),BLTXVEL/2,BLTXVEL,BLTXVEL,BLTXVEL/2
.LONG -(BLTXVEL/2),-BLTXVEL,-(BLTXVEL/2)
BUL3YV .LONG -BLTYVEL,-(BLTYVEL/2),BLTYVEL/2,BLTYVEL,BLTYVEL
.LONG BLTYVEL/2,-(BLTYVEL/2),-(BLTYVEL/2)
BUL3XV .LONG BLTXVEL/2,BLTXVEL,BLTXVEL,BLTXVEL/2,-(BLTXVEL/2)
.LONG -BLTXVEL,-BLTXVEL,-BLTXVEL
BXL .LONG -010000H,008000H,0018000H,08000H,-010000H,-28000H,-30000H,-28000H
BXH .LONG 0010000H,028000H,030000H,28000H,010000H,-08000H,-018000H,-08000H
BYL .LONG -028000H,-28000H,-010000H,08000H,018000H,008000H,-010000H,-28000H
BYH .LONG -018000H,-08000H,0010000H,28000H,28000H,028000H,0010000H,-08000H
WHICHXV .LONG BULXV,BUL2XV,BUL3XV
WHICHYV .LONG BULYV,BUL2YV,BUL3YV
;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS
;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE
;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN
;SUBGRND .EQU 0004H ;GRENADE
;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET
;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN
;SUBTHROW .EQU 0007H ;BIG FLAME THROWER
WPLIST ;SUB BULLET TYPES
.LONG NORM,NORM,SPRY,FIREB,GREND,NSTP,MGUN,THROWR
********************************
* Starts a weapon, called from torso process
STRT_WPN ;A8=*Player obj, A9=Dir 1-8
MOVE *A13(WPN_TYP),A1
JRZ CONTA
MOVE *A13(SHOTCNT),A0 ;NONSTANDARD WEAPON WILL DEC SHOTCNT
DEC A0
MOVE A0,*A13(SHOTCNT)
JRNZ CONTA
MOVE A0,*A13(WPN_TYP)
CONTA SLL 5,A1
ADDI WPLIST,A1
MOVE *A1,A0,L
MOVE *A13(PNUM),A11 ;A11=Player who fired me
MOVE A11,A2
MOVI P1DATA,A10
DEC A2
JRZ CONTB
MOVI P2DATA,A10
CONTB MOVE *A10(TSHOTS),A2
INC A2
MOVE A2,*A10(TSHOTS)
JUMP A0
**************************************************************************
NORM
;WEAPON 1 - NORMAL FIRE POWER
CREATE BULPID,WPN1 ;BULPID
; MOVE *A13(LSRPTR),A0,L ;HELPER ON FLAG 1=YES
; JRZ NOLASER
; CREATE BULPID,WPN1A
;NOLASER
MOVI SHOT,A0 ;RIFLE SHOT
jauc ONESND
NSTP CREATE BULPID,WPN5
CREATE BULPID,WPN5A
MOVE *A10(TSHOTS),A2
INC A2
MOVE A2,*A10(TSHOTS)
MOVI THUMP,A0
jauc ONESND
MGUN ;MACHINE GUN
CREATE BULPID,WPN6
MOVI THUMP2,A0
jauc ONESND
FIREB ;FIRE BALL WEAPON
MOVI FRBL,A10
CREATE BULPID,WPN3
MOVI FLAMSND,A0
jauc ONESND
THROWR ;BIG GREEN FLAME THROWER
MOVI FRBLBIG,A10
CREATE BULPID,WPN3
MOVI FLAMSND,A0
jauc ONESND
GREND
;WEAPON 4 - GRENADE WEAPON
CREATE BULPID,WPN4
MOVI GRNSND,A0
jauc ONESND
SPRY
;SPRAY WEAPON
;WEAPON 2
MOVE *A10(TSHOTS),A2
ADDK 2,A2
MOVE A2,*A10(TSHOTS)
CLR A10
CREATE BULPID,WPN2
MOVK 1,A10
CREATE BULPID,WPN2
MOVK 2,A10
CREATE BULPID,WPN2
MOVI SHOT2,A0 ;SPRY
jauc ONESND
********************************
SHOT_INIT ;A6=*XVel_t, A7=*YVel_t, A9=Dir 1-8, A11=Player #1-2
move a11,*a13(MYPLYR)
move a9,*a13(BLTDIR)
subk 1,a9
sll 5,a9 ;A9=(Dir-1)*32
add a9,a6
move *a6,a6,L ;A6=XVel
add a9,a7
move *a7,a7,L ;A7=YVel
rets
;WEAPON 5 - NON STOPPING BULLET
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
WPN5
MOVI BUL5XV,A6
MOVI BUL5YV,A7
CALLR SHOT_INIT
MOVE *A8(OXVEL),A2,L ;ADD IN PLAYER VELOCITIES
ADD A2,A6
MOVE *A8(OYVEL),A2,L
ADD A2,A7
move a9,a2
addi B5_TYP,a2
move *a2,a2,L ;A2=*Img
srl 1,a9 ;/2
move a9,a4
addi B1_INFO,a4 ;Has PIXSCAN
move *a4,a4 ;A4=FLAGS
move *a8(OXVAL),a0,L ;A8=*Torso for player that fired me
move *a8(OYVAL),a1,L
addi XYOFFSET5,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=XVal
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=YVal
MOVI CLSPLYR|TYPPLBL|SUBNOSTP,A5
JRUC DO_IT
;WEAPON 5A - WITH NON STOPPING BULLET
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
WPN5A
MOVI BULXV,A6
MOVI BULYV,A7
CALLR SHOT_INIT
MOVI BALL6,A2 ;A2=*IMG
MOVI DMAWNZ,A4 ;FLAGS IN A4
move *a8(OXVAL),a0,L ;A8=*Torso for player that fired me
move *a8(OYVAL),a1,L
srl 1,a9 ;/2
addi XYOFFSET5,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=XVal
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=YVal
JRUC SPDCONT
;WEAPON 2 - 3 BULLETS SPRAYED OUT
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
WPN2
SLL 5,A10 ;GET VELS FOR THIS PROJECTILE
MOVI WHICHXV,A6
ADD A10,A6
MOVE *A6,A6,L
MOVI WHICHYV,A7
ADD A10,A7
MOVE *A7,A7,L
CALLR SHOT_INIT
MOVI CNNBLL,A2
MOVI DMAWNZ,A4
; MOVI DMAWNZ+M_PIXSCAN,A4 ;TAKE OUT PIXSCAN?
;SPDCONT
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
srl 1,a9 ;/2
addi XYOFFSET2,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=XVal
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=YVal
SPDCONT
MOVI CLSPLYR|TYPPLBL|SUBSPRY,A5
JRUC DO_IT
WPN3
;FIRE BALL
MOVI FIRE1,A2 ;A2=*IMG
MOVI BUL3AXV,A6
MOVI BUL3AYV,A7
CALLR SHOT_INIT
MOVE *A8(OXVEL),A4,L ;ADD IN PLAYERS XY VEL TO FLAMES
ADD A4,A6
MOVE *A8(OYVEL),A4,L
ADD A4,A7
MOVI DMAWNZ,A4 ;A4=FLAGS, NO PIXSCAN
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
srl 1,a9 ;/2
addi XYOFFSET3,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=X
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=Y
MOVI 159,A3 ;A3=ZPOS
MOVI CLSPLYR|TYPPLBL|SUBNOSTP,A5 ;A5=ID
CALLA BEGINOBJ2
MOVE A10,A9 ;MOVI FRBL,A9
W3_TP
CALLR CHK_BULL ;CHECK RECTANGLES
JRNC NOH
CLR A0 ;HIT
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
JSRP FRANIMQ
C32X jauc DELOBJDIE
NOH CLR A1
JSRP FRANIM
JRC C32X
JRUC W3_TP
;WEAPON 6 - MACHINE GUN
WPN6
MOVI BULXV,A6
MOVI BULYV,A7
CALLR SHOT_INIT
MOVE *A8(OXVEL),A2,L
ADD A2,A6
MOVE *A8(OYVEL),A2,L
ADD A2,A7
MOVI SPDBL,A2 ;A2=*IMG
MOVI DMAWNZ|M_PIXSCAN,A4 ;A4=FLAGS
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
srl 1,a9 ;/2
addi XYOFFSET6,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=XVal
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=YVal
MOVI CLSPLYR|TYPPLBL|SUBSPDG1,A5
JRUC DO_IT
* WEAPON 4 - GRENADE
WPN4
MOVI GRNXV,A6
MOVI GRNYV,A7
CALLR SHOT_INIT
MOVE *A8(OXVEL),A2,L
ADD A2,A6 ;A6=XV
MOVE *A8(OYVEL),A2,L
ADD A2,A7 ;A7=YV
MOVI DMAWNZ,A4
MOVI BALL1,A2 ;GRND1
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVI TOSSDIR,A11
ADD A9,A11
MOVE *A11,A11,L ;LIST OF OFFSET BYTES!
MOVI TOSS2DIR,A10
ADD A9,A10
MOVE *A10,A10,L ;LIST OF OFFSET BYTES!
srl 1,a9 ;/2
addi XYOFFSET4,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=X
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=Y
MOVI CLSDEAD,A5 ;ID
MOVI 253,A3 ;Z
PUSH A0
CALLA BEGINOBJ2
PULL A0
PUSH A8
ADDI 0180000H,A1
MOVI GSHAD1,A2
MOVI 58,A3
CALLA BEGINOBJ2
MOVE A8,A9
PULL A8
CLR A7
MOVE A7,*A13(GTMP)
W4_TP:
MOVE *A13(GTMP),A7
MOVE A7,A1
SLL 5,A1
ADDI TOSSG,A1
MOVE *A1,A1,L
JRZ BLWUP
CMPI 15,A7 ;19
JRNZ V1
;SET OID
;TURN ON COLLISIONS ALSO!
; MOVI CLSPLYR|TYPPLBL|SUBGRND,A5
; MOVE A5,*A8(OID),W
V1
MOVI DMAWNZ,A4 ;GET NEW FLAGS (SAME!)
CALLA ANI
MOVB *A11,A0 ;GET X OFFSET
addk 8,a11
MOVB *A10,A2 ;GET X OFFSET
addk 8,a10
MOVE *A8(OXPOS),A1,W
ADD A0,A1
MOVE A1,*A8(OXPOS),W
MOVE *A9(OXPOS),A1,W
ADD A2,A1
MOVE A1,*A9(OXPOS),W
MOVB *A11,A0
addk 8,a11
MOVB *A10,A2
addk 8,a10
MOVE *A8(OYPOS),A1,W
ADD A0,A1
MOVE A1,*A8(OYPOS),W
MOVE *A9(OYPOS),A1,W
ADD A2,A1
MOVE A1,*A9(OYPOS),W
INC A7
MOVE A7,*A13(GTMP)
SLEEPK 1
JRUC W4_TP
BLWUP:
MOVI MTING,A0 ;AUDIO BOMB EXPLODE
CALLA ONESND ;GRENADE LANDING ON GROUND
BLW2:
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE A9,A0 ;DELETE SHADOW
CALLA DELOBJ
;ABOVE ORCUS
MOVI 370,A0 ;EXPLOSION OF GRENADE AT IMPACT
MOVE A0,*A8(OZPOS)
MOVI CLSPLYR|TYPPLBL|SUBGRND,A5
MOVE A5,*A8(OID),W
MOVI FIREEXP,A9 ;FRBALL
; MOVI BLUEEXP,A9
JAUC FRQDELDIE
;WEAPON 1 - NORMAL BULLET
WPN1
MOVI BULXV,A6
MOVI BULYV,A7
CALLR SHOT_INIT
move a9,a2
addi B1_TYP,a2
move *a2,a2,L ;A2=*IMG
srl 1,a9 ;/2
move a9,a4
addi B1_INFO,a4
move *a4,a4 ;A4=FLAGS
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
addi XYOFFSET,a9
move *a9,a5
sll 16,a5
add a5,a0 ;A0=XVal
move *a9(8*16),a5
sll 16,a5
add a5,a1 ;A1=YVal
MOVI CLSPLYR|TYPPLBL|SUBLZR,A5 ;A5=ID
DO_IT
MOVI 159,A3 ;A3=ZPOS
;XVEL IN A6
;YVEL IN A7
CALLA BEGINOBJ2
LP_TP
;REGULAR BULLETS
;COULD DO THIS SCRTST LESS FREQUENTLY!
MOVE *A13(AGE),A0
INC A0
MOVE A0,*A13(AGE)
sll 32-2,a0
JRNZ C1
MOVI [>0,>0],A2 ;21,20
MOVI [>FF,>1A3],A3 ;FC,173
CALLA SCRTSTG
JRZ C1
;A0=1,2,3 OR 4 WHICH IS RETURNED FROM SCRTSTG!
jauc DELOBJDIE
C1
CALLR CHK_BULL
JRNC NXT
CLR A4
MOVE A4,*A8(OXVEL),L
MOVI FRBALL,A9 ;FRBALL
JRUC RG4
NXT SLEEPK 4 ;SLEEP 2 MAYBE?
JRUC LP_TP
;CHECK FOR RECTANGLE COLLISIONS!
CHK_BULL
MOVE *A8(OXPOS),A4
MOVE *A8(OYPOS),A6
MOVE @BCURRENT,A0,L ;CURRENT RECT LIST
JRZ OUT
JRUC NEXT0
NEXT3 ADDK 16,A0
NEXT2 ADDK 16,A0
NEXT1 ADDK 16,A0
NEXT0 MOVE *A0+,A1
JRZ OUT
CMP A1,A4
JRLT NEXT3 ;IF BRNCH RECT LFT EDGE > PLYR X
MOVE *A0+,A1
CMP A1,A6
JRLT NEXT2 ;IF BRNCH RECT TOP EDGE > PLYR Y
MOVE *A0+,A1
CMP A1,A4
JRGT NEXT1 ;IF BRNCH RECT RGT EDGE < PLYR X
MOVE *A0+,A1
CMP A1,A6
JRGT NEXT0 ;IF BRNCH RECT BOT EDGE < PLYR Y
SETC ;HIT
RETS
OUT CLRC
RETS
B1_TYP ;NORMAL WEAPON (1)
.long BULUP,BULUPLFT,BULLFT,BULUPLFT
.long BULUP,BULUPLFT,BULLFT,BULUPLFT
B5_TYP ;NON STOPPING BULLET
.long B2UP,B245,B2SIDE,B245
.long B2UP,B245,B2SIDE,B245
B1_INFO ;NORMAL WEAPON (1), PIXSCAN!
.WORD DMAWNZ+M_PIXSCAN, DMAWNZ+M_FLIPH+M_PIXSCAN
.WORD DMAWNZ+M_FLIPH+M_PIXSCAN, DMAWNZ+M_FLIPH+M_FLIPV+M_PIXSCAN
.WORD DMAWNZ+M_FLIPV+M_PIXSCAN, DMAWNZ+M_FLIPV+M_PIXSCAN
.WORD DMAWNZ+M_PIXSCAN, DMAWNZ+M_PIXSCAN
;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS
;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE
;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN
;SUBGRND .EQU 0004H ;GRENADE
;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET
;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN
XYOFFSET ;NORMAL WEAPON (1)
.word 15,16,25,23,5,3,1,4 ;X
.word 0,5,10,22,25,22,10,5 ;Y
XYOFFSET2 ;SPRAY WEAPON
.word 14,16,25,21,5,5,3,4 ;X
.word 5,5,10,22,25,22,10,5 ;Y
XYOFFSET3 ;FLAME THROWER
.word 15,19,33,24,5,2,1,2 ;X
.word 0,1,10,26,32,26,9,1 ;Y
XYOFFSET4 ;GRENADE LAUCHER
.word 15,10,25,25,5,1,1,11 ;X
.word 0,3,1,3,10,3,2,3 ;Y
XYOFFSET5 ;NON STOP WEAPON
.word 15,16,33,24,5,3,1,6 ;X
.word 0,5,4,22,25,22,4,5 ;Y
XYOFFSET6 ;MACHINE GUN WEAPON
.word 16,20,25,23,7,9,1,4 ;X
.word 3,5,10,22,25,20,10,5 ;Y
; 1
; 8 5
;7 4 OLD CRAP!!!
; 9 6
; 2
TOSSDIR .LONG TSUP,TSUPRT,TSRT,TSDNRT,TSDN,TSDNLT,TSLT,TSUPLT
TOSS2DIR
.LONG TSUP2,TSUPRT2,TSRT2,TSDNRT2,TSDN2,TSDNLT2,TSLT2,TSUPLT2
TOSSG .LONG BALL1,BALL2,BALL3,BALL3,BALL4,BALL5,BALL5,BALL6
.LONG BALL6,BALL7,BALL7,BALL6,BALL6,BALL5,BALL5,BALL4
.LONG BALL4,BALL3,BALL3,BALL2,BALL2,BALL1,0
TSRT .BYTE 3 ;X
.BYTE -2 ;Y ADJUST
.BYTE 4
.BYTE -2
.BYTE 4
.BYTE -2
.BYTE 5
.BYTE -3
.BYTE 5
.BYTE -3
.BYTE 6
.BYTE -3
.BYTE 6
.BYTE -2
.BYTE 6
.BYTE -2
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 2
.BYTE 6
.BYTE 2
.BYTE 6
.BYTE 3
.BYTE 6
.BYTE 3
.BYTE 6
.BYTE 4
.BYTE 6
.BYTE 5
.BYTE 5
.BYTE 5
.BYTE 4
.BYTE 5
.BYTE 4
.BYTE 4
.BYTE 4
.BYTE 4
.BYTE 3
.BYTE 4
.BYTE 2
.BYTE 3
.BYTE 2
.BYTE 3
TSLT .BYTE -3
.BYTE -2
.BYTE -4
.BYTE -2
.BYTE -4
.BYTE -2
.BYTE -5
.BYTE -3
.BYTE -5
.BYTE -3
.BYTE -6
.BYTE -3
.BYTE -6
.BYTE -2
.BYTE -6
.BYTE -2
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 2
.BYTE -6
.BYTE 2
.BYTE -6
.BYTE 3
.BYTE -6
.BYTE 3
.BYTE -6
.BYTE 4
.BYTE -6
.BYTE 5
.BYTE -5
.BYTE 5
.BYTE -4
.BYTE 5
.BYTE -4
.BYTE 5
.BYTE -4
.BYTE 4
.BYTE -3
.BYTE 4
.BYTE -2
.BYTE 3
.BYTE -2
.BYTE 3
TSUPLT .BYTE 0
.BYTE -5
.BYTE -1
.BYTE -6
.BYTE -2
.BYTE -6
.BYTE -2
.BYTE -6
.BYTE -3
.BYTE -6
.BYTE -3
.BYTE -6
.BYTE -4
.BYTE -6
.BYTE -4
.BYTE -6
.BYTE -4
.BYTE -5
.BYTE -5
.BYTE -5
.BYTE -5
.BYTE -4
.BYTE -6
.BYTE -3
.BYTE -6
.BYTE -3
.BYTE -6
.BYTE -2
.BYTE -6
.BYTE -2
.BYTE -5
.BYTE -2
.BYTE -5
.BYTE -1
.BYTE -4
.BYTE -1
.BYTE -4
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -3
.BYTE 0
.BYTE -3
.BYTE 0
TSUPRT .BYTE 0
.BYTE -5
.BYTE 1
.BYTE -6
.BYTE 2
.BYTE -6
.BYTE 2
.BYTE -6
.BYTE 3
.BYTE -6
.BYTE 3
.BYTE -6
.BYTE 4
.BYTE -6
.BYTE 4
.BYTE -6
.BYTE 4
.BYTE -5
.BYTE 5
.BYTE -5
.BYTE 5
.BYTE -4
.BYTE 6
.BYTE -3
.BYTE 6
.BYTE -3
.BYTE 6
.BYTE -2
.BYTE 6
.BYTE -2
.BYTE 5
.BYTE -2
.BYTE 5
.BYTE -1
.BYTE 4
.BYTE -1
.BYTE 4
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 3
.BYTE 0
TSDNLT .BYTE -1
.BYTE 0
.BYTE -2
.BYTE 0
.BYTE -3
.BYTE 1
.BYTE -4
.BYTE 1
.BYTE -5
.BYTE 2
.BYTE -5
.BYTE 2
.BYTE -6
.BYTE 2
.BYTE -6
.BYTE 3
.BYTE -6
.BYTE 3
.BYTE -6
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -5
.BYTE 5
.BYTE -4
.BYTE 5
.BYTE -3
.BYTE 6
.BYTE -3
.BYTE 6
.BYTE -2
.BYTE 6
.BYTE -2
.BYTE 6
.BYTE -1
.BYTE 6
.BYTE -1
.BYTE 6
.BYTE -1
.BYTE 6
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
TSDNRT .BYTE 1
.BYTE 0
.BYTE 2
.BYTE 0
.BYTE 3
.BYTE 1
.BYTE 4
.BYTE 1
.BYTE 5
.BYTE 2
.BYTE 5
.BYTE 2
.BYTE 6
.BYTE 2
.BYTE 6
.BYTE 3
.BYTE 6
.BYTE 3
.BYTE 6
.BYTE 4
.BYTE 5
.BYTE 4
.BYTE 5
.BYTE 5
.BYTE 4
.BYTE 5
.BYTE 3
.BYTE 6
.BYTE 3
.BYTE 6
.BYTE 2
.BYTE 6
.BYTE 2
.BYTE 6
.BYTE 1
.BYTE 6
.BYTE 1
.BYTE 6
.BYTE 1
.BYTE 6
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
TSUP .BYTE 0
.BYTE -4
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -3
.BYTE 0
.BYTE -2
.BYTE 0
.BYTE -1
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
TSDN .BYTE 0
.BYTE 0
.BYTE 0
.BYTE 1
.BYTE 0
.BYTE 2
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 4
TSRT2 .BYTE 3
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 6
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 2
.BYTE 0
.BYTE 2
.BYTE 0
TSLT2 .BYTE -3
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -3
.BYTE 0
.BYTE -2
.BYTE 0
.BYTE -2
.BYTE 0
TSUPLT2 .BYTE -5+5
.BYTE -1-10
.BYTE -3
.BYTE -3
.BYTE -4-5
.BYTE -4+10
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -4
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -4
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -4
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -4
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -4
.BYTE -4
.BYTE -5
.BYTE -4
.BYTE -4
.BYTE -4
.BYTE -5
.BYTE -2
.BYTE -4
TSUPRT2 .BYTE 5+5
.BYTE -1-10
.BYTE 3
.BYTE -3
.BYTE 4-5
.BYTE -4+10
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -4
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -4
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -4
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -4
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -4
.BYTE 4
.BYTE -5
.BYTE 4
.BYTE -4
.BYTE 4
.BYTE -5
.BYTE 2
.BYTE -4
TSDNLT2 .BYTE -3
.BYTE 11
.BYTE -3
.BYTE 3
.BYTE -3
.BYTE 2
.BYTE -4
.BYTE 3
.BYTE -3
.BYTE 3
.BYTE -4
.BYTE 3
.BYTE -3
.BYTE 3
.BYTE -4
.BYTE 3
.BYTE -3
.BYTE 2
.BYTE -3
.BYTE 3
.BYTE -3
.BYTE 3
.BYTE -3
.BYTE 2
.BYTE -4
.BYTE 3
.BYTE -3
.BYTE 2
.BYTE -3
.BYTE 3
.BYTE -3
.BYTE 2
.BYTE -4
.BYTE 3
.BYTE -3
.BYTE 2
.BYTE -3
.BYTE 2
.BYTE -3
.BYTE 2
.BYTE -3
.BYTE 2
.BYTE -3
.BYTE 2
TSDNRT2 .BYTE 3
.BYTE 11
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 2
.BYTE 4
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 4
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 4
.BYTE 3
.BYTE 3
.BYTE 2
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 2
.BYTE 4
.BYTE 3
.BYTE 3
.BYTE 2
.BYTE 3
.BYTE 3
.BYTE 3
.BYTE 2
.BYTE 4
.BYTE 3
.BYTE 3
.BYTE 2
.BYTE 3
.BYTE 2
.BYTE 3
.BYTE 2
.BYTE 3
.BYTE 2
.BYTE 3
.BYTE 2
TSUP2 .BYTE 0
.BYTE -4
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -6
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -5
.BYTE 0
.BYTE -4
.BYTE 0
.BYTE -4
TSDN2 .BYTE 0
.BYTE 0
.BYTE 0
.BYTE 1
.BYTE 0
.BYTE 2
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 5
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 4
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 3
.BYTE 0
.BYTE 2
.BYTE 0
.BYTE 1
.BYTE 0
.BYTE 1
.EVEN
FLAMING
;MAYBE ALIGN WITH THIS (A10) AHMED GUY AS I FLAME
;A10 IS FLAME THROWER AHMED PNTR
MOVI TORCH,A0
CALLA ONESND
MOVE A9,*A13(PDATA)
MOVK 2,A0
MOVE A0,*A13(PDATA+32)
MOVE A8,*A13(PDATA+64),L ;STUB PC BASE
MOVI BLASTA,A0
MOVE A0,*A13(PDATA+96),L
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVE *A8(OFLAGS),A4
MOVI AHMEDBLST1,A2
MOVI 160,A3
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE A8,*A13(PDATA+128),L
MOVI BLASTA2,A0
MOVE A0,*A13(PDATA+160),L
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVE *A8(OFLAGS),A4
MOVI AHMEDBLST1,A2
MOVI 160,A3
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE A8,*A13(PDATA+192),L
MOVI BLASTA3,A0
MOVE A0,*A13(PDATA+224),L
DSF0
MOVE *A13(PDATA+64),A8,L
MOVE *A13(PDATA+96),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+96),L
MOVE *A13(PDATA+128),A8,L
MOVE *A13(PDATA+160),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+160),L
MOVE *A13(PDATA+192),A8,L
MOVE *A13(PDATA+224),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+224),L
JRC NXTF
;A0=SLP TIME
MOVE A0,A11
DSF CALLR ALIGNF
SLEEPK 1
DSJS A11,DSF
JRUC DSF0
NXTF
MOVI BLASTB,A9
MOVE A9,*A13(PDATA+96),L
MOVI BLASTB2,A9
MOVE A9,*A13(PDATA+160),L
MOVI BLASTB3,A9
MOVE A9,*A13(PDATA+224),L
NXTFA
MOVE *A13(PDATA+64),A8,L
MOVE *A13(PDATA+96),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+96),L
MOVE *A13(PDATA+128),A8,L
MOVE *A13(PDATA+160),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+160),L
MOVE *A13(PDATA+192),A8,L
MOVE *A13(PDATA+224),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+224),L
JRC NXTF1
MOVE A0,A11
DSF2 CALLR ALIGNF
SLEEPK 1
DSJS A11,DSF2
JRUC NXTFA
NXTF1 MOVE *A13(PDATA+32),A0
DEC A0
MOVE A0,*A13(PDATA+32)
JRNZ NXTF
MOVI BLASTC,A9
MOVE A9,*A13(PDATA+96),L
MOVI BLASTC2,A9
MOVE A9,*A13(PDATA+160),L
MOVI BLASTC3,A9
MOVE A9,*A13(PDATA+224),L
DSF4
MOVE *A13(PDATA+64),A8,L
MOVE *A13(PDATA+96),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+96),L
MOVE *A13(PDATA+128),A8,L
MOVE *A13(PDATA+160),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+160),L
MOVE *A13(PDATA+192),A8,L
MOVE *A13(PDATA+224),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+224),L
JRC NXTF2
MOVE A0,A11
DSF3 CALLR ALIGNF
SLEEPK 1
DSJS A11,DSF3
JRUC DSF4
NXTF2
MOVE *A13(PDATA+64),A0,L
CALLA DELOBJ
MOVE *A13(PDATA+128),A0,L
CALLA DELOBJ
MOVE *A13(PDATA+192),A0,L
CALLA DELOBJ
****************JARV PATCH
MOVE @WAVE,A0
CMPI 16,A0 ;ORCUS WAVE USES FLAMES
JAEQ SUCIDE
******************************
MOVE *A10(OPLINK),A10,L
CLR A0
BULPRC .EQU PDATA+352 ;UHL BULLET PROCESS FIRING BULLS!
MOVE A0,*A10(BULPRC),L
DIE
**********************JARV PATCH
DOIT
MOVI 160,A3
MOVI AHMEDBLST1,A2
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
MOVE A8,A10
CALLA BEGINOBJ2
CREATE HULKPID,FLAMING
DIE
*************************************
ALIGNF
MOVE *A13(PDATA+64),A0,L
MOVE A10,A8
CALLA GETANIXY
MOVE *A13(PDATA),A6
SLL 5,A6
ADDI FIREYX,A6
MOVE *A6,A6,L
ADD A6,A2
SLL 16,A6
ADD A6,A3
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
MOVE *A13(PDATA+128),A0,L
MOVE A10,A8
CALLA GETANIXY
MOVE *A13(PDATA),A6
SLL 5,A6
ADDI FIREYX,A6
MOVE *A6,A6,L
ADD A6,A2
SLL 16,A6
ADD A6,A3
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
MOVE *A13(PDATA+192),A0,L
MOVE A10,A8
CALLA GETANIXY
MOVE *A13(PDATA),A6
SLL 5,A6
ADDI FIREYX,A6
MOVE *A6,A6,L
ADD A6,A2
SLL 16,A6
ADD A6,A3
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
RETS
;2=4 OCLOCK
;3=8 OCLOCK
************************JARV PATCH
FIREYX .LONG [4FH,0FFF8H],[04FH,9],[1,3],[1,0FFFDH],[29H,-8],[29H,8]
***************************************
BLASTA .LONG AHMEDBLST1
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG BLST3C
.WORD 2
.LONG 0
BLASTB
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG 0
BLASTC3
BLASTC .LONG BLST3C
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG AHMEDBLST1
.WORD 2
.LONG 0
BLASTA2 .LONG AHMEDBLST1 ;INVISIBLE
.WORD 2
.LONG AHMEDBLST2 ;''
.WORD 2
.LONG BLST3B
.WORD 2
.LONG 0
BLASTB2
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG 0
BLASTC2 .LONG BLST3B
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG AHMEDBLST1
.WORD 2
.LONG 0
BLASTA3 .LONG AHMEDBLST1 ;INVISIBLE
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG BLST3C ;STILL INV
.WORD 2
.LONG 0
BLASTB3
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG 0
.END