982 lines
18 KiB
NASM
982 lines
18 KiB
NASM
.FILE 'FATMAN.ASM'
|
||
.TITLE 'ROBO-RAMA GAME PROGRAM'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
;
|
||
; INITIATED: APRIL 26,1989
|
||
; MODIFIED: !
|
||
; SOFTWARE: MARK TURMELL
|
||
;
|
||
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
|
||
;
|
||
;
|
||
; GET THE SYSTEM STUFF
|
||
|
||
.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 "ROBO.EQU"
|
||
|
||
;
|
||
;SOUNDS EXTERNAL
|
||
;
|
||
.REF EXP3HI,EXP1,GDTH1,UGH2,UGH3
|
||
;
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
;
|
||
.REF GET_VALID_DOOR,SPINFLGS,FRANIM_DIE
|
||
.REF BEGINOBJ2,BEGINOBJ,RANGRAND,FRANIM,INTO,BIG2,FATHITS
|
||
.REF P1DATA,SCRADD2,GET_WVADDR,DO_DIFF2,RANDPER,SHAKER,SHK_ON
|
||
.REF GAMSTATE,WAVEYX,P2DATA
|
||
.REF KEEPXY,RAMXY,WAVE_RAM,HALT,EHALT
|
||
.REF GETANIXY,PLYROBJS,FLASHME
|
||
.REF SET_GATE_2,DRINF
|
||
.REF WAVE,CVRT2,GETFPAL
|
||
.REF BOOM3
|
||
.REF FROMDR,PCNT
|
||
.REF INFOTBL,GETADIR2,XYSKOBJ,BULL_TOP,MEBNCS
|
||
.REF ADPCS2,PCTOT
|
||
;
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
;
|
||
.DEF SPAWN_FAT,ONSCRN_FAT,MAXFAT,FAT_CNT,MAXFAT,GETUGH
|
||
.DEF KILL_F1,PUSH_FT,KILL_F2,YKIL_FT,KILL_F2_NO
|
||
;
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
;
|
||
.BSS SCNTR,8
|
||
.BSS MAXFAT,8 ;MAX NUMBER OF FAT ALLOWED ON SCRN
|
||
.BSS FAT_CNT,16 ;TOTAL FAT ON SCREEN
|
||
.BSS TMP,16
|
||
; .BSS FAT_DN,16
|
||
;
|
||
;EQUATES FOR THIS FILE
|
||
;
|
||
;FAT DATA STRUCTURE
|
||
;
|
||
;DELYDT .EQU PDATA ;UHB-OBJECT AGE
|
||
INDEX .EQU PDATA+8 ;UHB-INDEX 0,1,2,3,4
|
||
DIR .EQU PDATA+16 ;UHW OBJECT DIRECTION
|
||
DIS .EQU PDATA+32 ;OBJECT DISTANCE COUNT
|
||
CFLAGS .EQU PDATA+48 ;CONTROL FLAGS FOR OBJECT
|
||
SK_DIR .EQU PDATA+64 ;SEEK DIR FOR SPIN
|
||
LEVEL .EQU PDATA+80 ;DIFFICULTY LEVEL FOR SPEEDS ETC.
|
||
HSPD .EQU PDATA+96
|
||
H2SPD .EQU PDATA+128
|
||
VSPD .EQU PDATA+160
|
||
V2SPD .EQU PDATA+192
|
||
ABSRB .EQU PDATA+224 ;UHB
|
||
;
|
||
;TANK/SHRAPNEL BULLET DATA STRUCTURE
|
||
;
|
||
BNCS .EQU PDATA ;UHB
|
||
LAST .EQU PDATA+8 ;UHB
|
||
FDLY .EQU PDATA+16 ;UHB ;FRANIM DELAY
|
||
;
|
||
HSPEED .EQU 08000H
|
||
;MAXHIT .EQU 10
|
||
|
||
.TEXT
|
||
|
||
SPAWN_FAT:
|
||
;SPAWN FAT IS CALLED FROM 'WAVE OVERLORD' CODE WHICH DISPERSES
|
||
;BAD GUYS THROUGHOUT A WAVE
|
||
MOVE @FAT_CNT,A2 ;MOVE BYTE (# FAT ON SCRN) TO A2
|
||
MOVB @MAXFAT,A3
|
||
CMP A3,A2 ;FAT MAXED OUT?
|
||
JRGT FAT_OUT ;
|
||
MOVE @HALT,A0
|
||
JRNZ FAT_OUT
|
||
CREATE FATPID,AFAT ;START ONE FAT
|
||
FAT_OUT:
|
||
RETS
|
||
|
||
ONSCRN_FAT:
|
||
;A2=# OF FATMEN TO CREATE ON SCREEN
|
||
MOVE A2,A10
|
||
OH1 PUSH A10 ;CREATE A BUNCH OF THEM
|
||
CREATE FATPID,OFAT
|
||
PULL A10
|
||
DSJS A10,OH1
|
||
RETS
|
||
OFAT:
|
||
;OFAT IS CALLED AT THE START OF A WAVE TO PLACE X # OF FAT ON SCREEN
|
||
;AT THE BEGINNING OF A WAVE
|
||
DEC A10 ;INDEX 0,1,2,3,4
|
||
MOVB A10,*A13(INDEX)
|
||
; MOVK 1,A0
|
||
; MOVE A0,*A13(DIR)
|
||
SLL 5,A10
|
||
MOVI DIRTBL,A0
|
||
ADD A10,A0
|
||
MOVE *A0,A0
|
||
MOVE A0,*A13(DIR)
|
||
|
||
ADDI CRNRYX,A10
|
||
MOVE *A10,A0,L
|
||
MOVE A0,A1
|
||
SLL 16,A0 ;A0=X
|
||
ANDI 0FFFF0000H,A1 ;A1=Y
|
||
;A0 & A1 ARE SET UP
|
||
;ADD IN OFFSETS FOR THIS PARTICULAR ARENA
|
||
MOVE @GAMSTATE,A2
|
||
CMPI INAMODE,A2
|
||
JREQ DMD
|
||
MOVE @WAVEYX,A2,L
|
||
;A2=PACKED OFFSETS
|
||
MOVX A2,A3
|
||
SLL 16,A3
|
||
ADD A3,A0 ;ADJUSTED A0 XVAL!
|
||
ANDI 0FFFF0000H,A2
|
||
ADD A2,A1 ;ADJUSTED A1 YVAL!
|
||
DMD
|
||
;A0,A1 ARE SETUP.
|
||
CALLR IH1 ;INIT FAT (BEGINOBJ)
|
||
CALLA BEGINOBJ2
|
||
MOVE *A8(OPAL),A0,L
|
||
ANDI 0FFFFH,A0
|
||
MOVE A0,*A8(OPAL),L
|
||
CALLR SETUP_FAT ;INC CNT, SET DIR, SET DEATH FLAG, ETC
|
||
MOVI HSPEED,A1 ;FAT SPEED
|
||
CALLA DO_DIFF2 ;SET UP HIS RAM SPEED AREA
|
||
CALLR GET_DIS ;SET DISTANCE CNT FOR THIS DIR
|
||
CALLR GET_STAND ;FAT STANDS AND SPINS UNTIL A MATCH
|
||
;THIS GETS CORRECT OIMG, OFLAGS
|
||
MOVE @WAVE,A0
|
||
CMPI 8,A0
|
||
JRLO APAA
|
||
;CHANGE TO PURPLE PAL
|
||
MOVI BP,A0
|
||
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
|
||
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
|
||
APAA
|
||
JRUC LUP_TOP
|
||
AFAT:
|
||
;YES A NEW FAT WILL APPEAR
|
||
;UPDATE WAVE_INFO RAM TABLE TO REFLECT THIS NEW ENTRY!
|
||
;THIS FAT WAS SPAWNED FROM 'WAVE OVERLORD' CODE
|
||
;
|
||
CALLR INIT_FAT ;INITIAL FAT PARAMS (BEGINOBJ)
|
||
CALLR SETUP_FAT ;INC CNT, SET DIR, SET DEATH FLAG, ETC
|
||
MOVI HSPEED,A1
|
||
CALLA DO_DIFF2
|
||
MOVE *A13(DIR),A0
|
||
CALLA INTO
|
||
CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR
|
||
;THIS FAT DIRECTION
|
||
MOVK 3,A0 ;FAT WILL SPIN TO SK_DIR
|
||
MOVE A0,*A13(CFLAGS)
|
||
MOVE @WAVE,A0
|
||
CMPI 7,A0
|
||
JRLO APA
|
||
;CHANGE TO PURPLE PAL
|
||
MOVI BP,A0
|
||
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
|
||
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
|
||
APA
|
||
;
|
||
;
|
||
; LOOP TOP FOR FATMAN
|
||
;
|
||
LUP_TOP:
|
||
;TOP OF FAT LOGIC
|
||
MOVE @HALT,A0
|
||
JRNZ GOTOP0
|
||
|
||
MOVE @EHALT,A0
|
||
JRZ MV ;BR=HALT ALL FAT!!
|
||
;PLAYER IS WALKING INTO ARENA
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE A0,*A8(OYVEL),L
|
||
SLEEP 2
|
||
JRUC LUP_TOP
|
||
MV:
|
||
MOVE *A13(CFLAGS),A0
|
||
BTST 0,A0
|
||
JRZ NOSPN
|
||
;THIS FAT MAN IS SPINNING, DO SPIN
|
||
MOVE *A13(SK_DIR),A1
|
||
MOVE *A13(DIR),A0,W
|
||
CALLR WAY
|
||
MOVE *A13(SK_DIR),A1
|
||
MOVE *A13(DIR),A0,W
|
||
CMP A0,A1
|
||
JREQ GOODNEWS
|
||
;ANI IN NEW STAND/SPIN DIR
|
||
; CALLA GET_STAND
|
||
GOTOP SLEEP 5
|
||
JRUC LUP_TOP
|
||
GOTOP0 SLEEP 5
|
||
MOVK 15,A0 ;5
|
||
MOVE A0,*A13(DIS)
|
||
JRUC LUP_TOP
|
||
|
||
SHKX .BYTE 01,-2,0,1,-1,-1,1,-1,1,1,-1
|
||
SHKY .BYTE -1,1,2,-1,1,-1,-2,1,0,-2,2
|
||
.EVEN
|
||
|
||
GOODNEWS:
|
||
MOVE *A13(DIS),A0
|
||
JRNZ GD2
|
||
;THIS GUY TO EXPLODE
|
||
SLEEP 40 ;SHAKE A BIT!
|
||
MOVK 10,A9
|
||
LPS MOVE A9,A0
|
||
SLL 3,A0
|
||
MOVI SHKX,A1
|
||
ADD A0,A1
|
||
MOVB *A1,A1
|
||
ADDI SHKY,A0
|
||
MOVB *A0,A0
|
||
MOVE *A8(OXPOS),A2,W
|
||
ADD A1,A2
|
||
MOVE A2,*A8(OXPOS),W
|
||
MOVE *A8(OYPOS),A2,W
|
||
ADD A0,A2
|
||
MOVE A2,*A8(OYPOS),W
|
||
SLEEP 2
|
||
DSJS A9,LPS
|
||
MOVE *A13(DIR),A9
|
||
CLR A10
|
||
CREATE 0,SHRAPNL
|
||
MOVK 1,A10
|
||
CREATE 0,SHRAPNL
|
||
MOVK 2,A10
|
||
CREATE 0,SHRAPNL
|
||
MOVK 3,A10
|
||
CREATE 0,SHRAPNL
|
||
MOVK 4,A10
|
||
CREATE 0,SHRAPNL
|
||
|
||
CREATE 0,FAT_EXP ;BULLETS DIR WILL BE IN A10
|
||
;FAT_EXP WHEN IT WAKES UP
|
||
MOVE A13,A0
|
||
CALLA KILL ;KILLS PROCESS IN A0
|
||
MOVE A8,A0
|
||
CALLA DELOBJ
|
||
DIE
|
||
|
||
YKIL_FT MMTM SP,A1,A2,A7,A9
|
||
;KILL FATGUY! WITH BULLETS
|
||
MOVB @PCTOT,A2
|
||
CMPI 019H,A2
|
||
JRGE FE0
|
||
;HAVE ROOM FOR PIECES
|
||
PUSH A0
|
||
CREATE 0,ADPCS2
|
||
PULL A0
|
||
FE0
|
||
MMFM SP,A1,A2,A7,A9
|
||
JRUC KILL_F1
|
||
|
||
PUSH_FT
|
||
;A8=FAT IMG PNTR, A0=KILLER IMG PNTR
|
||
MMTM SP,A1,A2,A7,A9
|
||
MOVE *A8(OPLINK),A1,L
|
||
MOVB *A1(ABSRB),A2
|
||
INC A2
|
||
MOVB A2,*A1(ABSRB)
|
||
MOVE @FATHITS,A7
|
||
CMP A7,A2
|
||
JRNE PFT
|
||
|
||
MOVB @PCTOT,A2
|
||
CMPI 019H,A2
|
||
JRGE FE
|
||
;HAVE ROOM FOR PIECES
|
||
PUSH A0
|
||
CREATE 0,ADPCS2
|
||
PULL A0
|
||
FE
|
||
MMFM SP,A1,A2,A7,A9
|
||
JRUC KILL_F1
|
||
|
||
GETUGH
|
||
MOVI UGH2,A0 ;SQUEAL!
|
||
MOVB @PCNT,A1
|
||
ANDI 1,A1
|
||
JRZ YAG
|
||
MOVI UGH3,A0 ;OOF
|
||
YAG
|
||
CALLA ONESND
|
||
RETS
|
||
|
||
PFT
|
||
;FLASH THIS GUY
|
||
PUSH A0
|
||
CALLA GETUGH
|
||
MOVI 03F3F0000H,A9
|
||
CREATE 0,FLASHME
|
||
PULL A0
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
;WILL BE BOGUS IF SOMETHING OTHER THAN A BULLET STRUCK FAT
|
||
MOVE *A1(BLTDIR),A2
|
||
SLL 3,A2
|
||
MOVI YAD,A0
|
||
ADD A2,A0
|
||
MOVB *A0,A10 ;A10=AMOUT TO ADD TO Y OF FATMAN
|
||
|
||
|
||
MOVE *A8(OYPOS),A0,W
|
||
MOVE *A8(OXPOS),A1,W
|
||
SLL 16,A0
|
||
MOVX A1,A0 ;GET TOP LEFT OF OBJECT
|
||
MOVE @WORLDTL,A1,L
|
||
SUBXY A1,A0 ;SUBTRACT OUT WORLD BASE
|
||
MOVX A0,A1
|
||
SLL 16,A1 ;A1=X,A0=Y
|
||
|
||
ADD A10,A0
|
||
CMPI >280000,A0
|
||
JRLT SKP
|
||
CMPI >E10000,A0
|
||
JRGE SKP
|
||
;OKAY
|
||
MOVE *A8(OYPOS),A0,W
|
||
ADD A10,A0
|
||
MOVE A0,*A8(OYPOS)
|
||
SKP
|
||
ADDI XAD,A2
|
||
MOVB *A2,A2 ;A1=AMOUNT TO ADD TO X OF FAT
|
||
ADD A2,A1
|
||
CMPI >200000,A1
|
||
JRLT SKP2
|
||
CMPI >15C0000,A1
|
||
JRGE SKP2
|
||
MOVE *A8(OXPOS),A0
|
||
ADD A0,A2
|
||
MOVE A2,*A8(OXPOS)
|
||
SKP2
|
||
; MOVI GDTH1,A0
|
||
; CALLA ONESND
|
||
MMFM SP,A1,A2,A7,A9
|
||
RETS
|
||
|
||
YAD: .BYTE 0,-6,-6,0,6,6,6,0,-6
|
||
XAD: .BYTE 0,0,6,6,6,0,-6,-6,-6
|
||
.EVEN
|
||
|
||
KILL_F1 ;KILL FAT GUY BECAUSE OF SMART BOMB OR COLLISION WITH RING
|
||
;OR BULLETS
|
||
;EXTER HERE FROM COLLISION ROUTINE - RINGS KILL FATMAN
|
||
;ENTER HERE WITH SMART BOMB
|
||
;A8=FAT IMG PNTR
|
||
MMTM SP,A1,A2,A7
|
||
MOVE *A0(OPLINK),A0,L
|
||
MOVB *A0(MYPLYR),A0
|
||
MOVI P1DATA,A2
|
||
CMPI 1,A0
|
||
JREQ J5
|
||
CMPI 2,A0
|
||
JRNZ J55
|
||
MOVI P2DATA,A2
|
||
J5
|
||
;A2=P1DATA OR P2DATA
|
||
MOVI FATPT,A1 ;AMOUNT OF SCORE
|
||
CALLA SCRADD2 ;DO IT!
|
||
|
||
J55 MOVE *A8(OPLINK),A0,L
|
||
CALLA KILL ;KILLS PROCESS IN A0
|
||
MOVE A8,A0
|
||
; CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
|
||
CALLA DELOBJ
|
||
CREATE 0,FEXP
|
||
;EXP3
|
||
; CALLA GETUGH
|
||
MOVI EXP3HI,A0
|
||
CALLA ONESND
|
||
MMFM SP,A1,A2,A7
|
||
RETS
|
||
KILL_F2 ;KILL FAT GUY BECAUSE OF SMART BOMB
|
||
;ENTER HERE WITH SMART BOMB
|
||
;A8=FAT IMG PNTR
|
||
;A9=P1/P2DATA
|
||
MOVE A9,A2
|
||
;A2=P1DATA OR P2DATA
|
||
MOVI FATPT,A1 ;AMOUNT OF SCORE
|
||
CALLA SCRADD2 ;DO IT!
|
||
|
||
KILL_F2_NO
|
||
MOVE *A8(OPLINK),A0,L
|
||
CALLA KILL ;KILLS PROCESS IN A0
|
||
MOVI CLSNEUT|TYPNEUT,A0
|
||
MOVE A0,*A8(OID)
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE A0,*A8(OYVEL),L
|
||
MOVE @FAT_CNT,A3 ;DELETE A FAT FROM CNT
|
||
DEC A3
|
||
MOVE A3,@FAT_CNT
|
||
CREATE 0,KILL_F3
|
||
RETS
|
||
KILL_F3
|
||
MOVE *A8(OYPOS),A2
|
||
ADDI 05H,A2 ;A2=Y OFFSET
|
||
MOVE A2,*A8(OYPOS)
|
||
MOVI BOOM3,A9 ;BOOM3 CHANGES PALETTE TO EXPLOSION!
|
||
JAUC FRANIM_DIE
|
||
; MOVK 1,A1
|
||
; JSRP FRANIM
|
||
; MOVE A8,A0
|
||
; CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
|
||
; CALLA DELOBJ
|
||
; DIE
|
||
|
||
FAT_EXP:
|
||
;ONLY NORMAL EXPLODE HAS CHUNKS
|
||
MOVB @PCTOT,A2
|
||
CMPI 018H,A2
|
||
JRGE FEXP
|
||
;HAVE ROOM FOR PIECES
|
||
CREATE 0,ADPCS2
|
||
MOVB @SHK_ON,A0
|
||
JRNZ FEXP
|
||
MOVI 7,A10
|
||
CALLA SHAKER
|
||
FEXP
|
||
MOVI EXP3HI,A0 ;FAT GUY EXPLODE
|
||
CALLA ONESND
|
||
|
||
MOVE @FAT_CNT,A3 ;DELETE A FAT FROM CNT
|
||
DEC A3
|
||
MOVE A3,@FAT_CNT
|
||
|
||
;TURN ON FIRE BALL EXP ALSO
|
||
CREATE 0,BIG2
|
||
DIE
|
||
;KILL
|
||
|
||
GD2
|
||
MOVE *A13(CFLAGS),A0
|
||
CMPI 3,A0
|
||
JREQ GD3
|
||
|
||
CALLR GET_RUN ;ZEROS STAND FLAG ALSO
|
||
CALLR GET_DIS ;SEND FOR THIS DISTANCE
|
||
|
||
MOVE *A13(DIR),A0
|
||
CALLA INTO ;GET PROPER VELOCITY FOR THIS DIR
|
||
SLEEP 1
|
||
JRUC LUP_TOP
|
||
GD3
|
||
MOVK 2,A0
|
||
MOVE A0,*A13(CFLAGS)
|
||
SLEEP 1
|
||
JRUC LUP_TOP
|
||
|
||
NOSPN:
|
||
MOVE *A13(DIS),A0 ;UPDATE DISTANCE COUNT
|
||
DEC A0
|
||
MOVE A0,*A13(DIS) ;STUFF NEW COUNT
|
||
JRNZ ADOT ;BR=CONTINUE CURRENT DIRECTION
|
||
MOVE *A13(CFLAGS),A0
|
||
CMPI 2,A0
|
||
JRNE AP
|
||
;GUY WALKED IN THRU DOOR, NOW TURN ACCORDINGLY
|
||
CALLR GET_DIS
|
||
MOVB *A13(INDEX),A0
|
||
SLL 3,A0
|
||
ADDI SKINDX2,A0
|
||
JRUC INHERE
|
||
|
||
;TIME TO SEEK TOWARD PLAYER AND EXPLODE
|
||
;START SEEK
|
||
AP
|
||
MOVB @SCNTR,A3
|
||
INC A3
|
||
MOVB A3,@SCNTR
|
||
ANDI 01,A3
|
||
SLL 5,A3
|
||
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
|
||
CALLA GETADIR2
|
||
SLL 3,A0
|
||
ADDI CVRT,A0
|
||
INHERE:
|
||
MOVB *A0,A0
|
||
MOVE A0,*A13(SK_DIR)
|
||
MOVK 1,A0 ;FAT WILL SPIN TO SK_DIR
|
||
MOVE A0,*A13(CFLAGS)
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE A0,*A8(OYVEL),L
|
||
SLEEP 1
|
||
JRUC LUP_TOP
|
||
|
||
; 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
|
||
CVRT .BYTE 0,3,7,5,1,4,6,2,8
|
||
.EVEN
|
||
|
||
; 04
|
||
; 12 11
|
||
; 08 07
|
||
; 16 15
|
||
; 02 01
|
||
; 10 09
|
||
; 06 05
|
||
; 14 13
|
||
; 03
|
||
|
||
|
||
ADOT
|
||
; MOVB *A13(DELYDT),A0
|
||
; JRZ KS
|
||
; DEC A0
|
||
; MOVB A0,*A13(DELYDT)
|
||
; JRUC DOANI
|
||
;KS
|
||
MOVE *A8(OYPOS),A0,W
|
||
MOVE *A8(OXPOS),A1,W
|
||
SLL 16,A0
|
||
MOVX A1,A0 ;GET TOP LEFT OF OBJECT
|
||
MOVE @WORLDTL,A1,L
|
||
SUBXY A1,A0 ;SUBTRACT OUT WORLD BASE
|
||
MOVX A0,A1
|
||
SLL 16,A1 ;A1=X,A0=Y
|
||
|
||
MOVE *A13(DIR),A2,W
|
||
CMPI 1,A2
|
||
JREQ U1
|
||
CMPI 3,A2
|
||
JREQ U2
|
||
CMPI 5,A2
|
||
JREQ U3
|
||
;LFT
|
||
CMPI >200000,A1
|
||
JRGE DOANI
|
||
MOVK 1,A0
|
||
JRUC CRCT
|
||
U1: CMPI >280000,A0
|
||
JRGE DOANI
|
||
MOVK 3,A0
|
||
JRUC CRCT
|
||
U2: CMPI >15C0000,A1
|
||
JRLT DOANI
|
||
MOVK 5,A0
|
||
JRUC CRCT
|
||
U3: CMPI >DD0000,A0 ;E1
|
||
JRLT DOANI
|
||
MOVK 7,A0
|
||
CRCT:
|
||
;CORRECT WALL HIT
|
||
MOVE A0,*A13(SK_DIR),W
|
||
;FAT MAN WILL SEEK TO A 45 DEGREE ANGLE
|
||
MOVK 1,A0 ;FAT WILL SPIN TO SK_DIR
|
||
MOVE A0,*A13(CFLAGS)
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE A0,*A8(OYVEL),L
|
||
; MOVI 20,A1
|
||
; MOVB A1,*A13(DELYDT)
|
||
SLEEP 1
|
||
JRUC LUP_TOP
|
||
|
||
CRNRYX: .LONG [40,40],[40,360],[235,40],[235,360]
|
||
.LONG [70,90],[90,300],[190,110],[180,310],[200,240]
|
||
DIRTBL .LONG 1,1,1,1,3,1,1,1,1
|
||
SKFAT .BYTE 3,5,1,7,3,7,3,5,1
|
||
SKINDX: .BYTE 0,3,1,2,4,5,6,7,8
|
||
SKINDX2:
|
||
.BYTE 1,3,7,5,5,7,3,1,3
|
||
.EVEN
|
||
|
||
;DO FRANIM ANIMATION ON THIS MOVING FAT
|
||
DOANI CLR A1
|
||
JSRP FRANIM
|
||
JRNC CHECK_NEXT ;BR=NOT AT END OF SCRIPT YET
|
||
CALLR GET_RUN
|
||
|
||
CHECK_NEXT:
|
||
JRUC LUP_TOP
|
||
GET_SK:
|
||
MOVB *A13(INDEX),A0
|
||
SLL 3,A0
|
||
ADDI SKFAT,A0
|
||
MOVB *A0,A0
|
||
MOVE A0,*A13(SK_DIR)
|
||
MOVK 1,A0 ;FAT WILL SPIN TO SK_DIR
|
||
MOVE A0,*A13(CFLAGS)
|
||
; MOVI 40,A1
|
||
; MOVB A1,*A13(DELYDT)
|
||
RETS
|
||
|
||
|
||
SETUP_FAT:
|
||
;DIR IS BASED ON WHAT DOOR HE IS ENTERING THROUGH!
|
||
;IF THIS IS AN ONSCREEN FAT, THEN ANY DIR IS OKAY!
|
||
;
|
||
CALLR GET_SK
|
||
;
|
||
; UPDATE FAT COUNT
|
||
;
|
||
CLR A0
|
||
MOVB A0,*A13(ABSRB)
|
||
|
||
MOVE @FAT_CNT,A0
|
||
INC A0
|
||
MOVE A0,@FAT_CNT
|
||
|
||
MOVI FAT,A2
|
||
CALLA GET_WVADDR
|
||
|
||
MOVE *A0(32),A1,W ;GET DIFFICULTY LEVEL
|
||
MOVE A1,*A13(LEVEL),W
|
||
|
||
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS FAT
|
||
DEC A1
|
||
MOVE A1,*A0(16),W
|
||
|
||
RETS
|
||
;
|
||
GET_DIS:
|
||
MOVI 30,B0
|
||
MOVI 100,B1
|
||
CALLA RANGRAND
|
||
MOVE A0,*A13(DIS) ;TIME BEFORE WE GET NEW VELOCITIES
|
||
RETS
|
||
YVTBL .LONG 0,Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8
|
||
XVTBL .LONG 0,X1,X2,X3,X4,X5,X6,X7,X8
|
||
|
||
X8: .LONG 0,-10000H,-1C000H,-20000H,-20000H
|
||
Y8: .LONG -18000H,-1C000H,-1A000H,-10000H,0
|
||
;Y8: .LONG -18000H,-1C000H,10000H,-10000H,0
|
||
;
|
||
X1: .LONG -20000H,-10000H,0,10000H,20000H ;UP
|
||
Y1: .LONG -10000H,-18000H,-1C000H,-18000H,-10000H
|
||
|
||
X2: .LONG 0,10000H,1C000H,20000H,20000H
|
||
Y2: .LONG -18000H,-1C000H,-1A000H,-10000H,0
|
||
|
||
X3: .LONG 10000H,20000H,23000H,20000H,10000H
|
||
Y3: .LONG -20000H,-10000H,0,10000H,20000H
|
||
|
||
X4: .LONG 0,10000H,1C000H,20000H,20000H
|
||
Y4: .LONG 18000H,1C000H,1A000H,10000H,0
|
||
|
||
X5: .LONG -20000H,-10000H,0,10000H,20000H
|
||
Y5: .LONG 10000H,18000H,1C000H,18000H,10000H
|
||
|
||
X6: .LONG 0,-10000H,-1C000H,-20000H,-20000H
|
||
Y6: .LONG 18000H,1C000H,1A000H,10000H,0
|
||
|
||
X7: .LONG -10000H,-20000H,-23000H,-20000H,-10000H
|
||
Y7: .LONG -20000H,-10000H,0,10000H,20000H
|
||
|
||
SHRAPNL:
|
||
;TURN ON OBJECT AT CORRECT XY
|
||
;GET VELOCITY BASED ON DIRECTION IN A9 INDEX INTO TABLE WITH A10
|
||
SLL 5,A9
|
||
MOVI YVTBL,A0
|
||
ADD A9,A0
|
||
MOVE *A0,A7,L
|
||
ADDI XVTBL,A9 ;GET VELOCITY TABLE
|
||
MOVE *A9,A6,L
|
||
SLL 5,A10
|
||
ADD A10,A6
|
||
MOVE *A6,A6,L
|
||
ADD A10,A7
|
||
MOVE *A7,A7,L
|
||
|
||
CALLA GETANIXY
|
||
* A2 = APOINT OYVAL, 32 BITS *
|
||
* A3 = APOINT OXVAL, 32 BITS *
|
||
MOVE A2,A1
|
||
MOVE A3,A0
|
||
MOVI 133,A3 ;159
|
||
MOVI DMAWNZ|M_PIXSCAN,A4
|
||
MOVI CLSENMY|TYPCBALL,A5
|
||
MOVI MTL1,A2
|
||
CALLA BEGINOBJ2
|
||
MOVI SHRAP,A9
|
||
MOVI SHRAP,A10
|
||
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(FDLY) ;FRANIM DELAY
|
||
JAUC BULL_TOP
|
||
|
||
|
||
WAY:
|
||
;A1=SEEK DIR
|
||
;A0=DIR IMAGE IS FACING NOW
|
||
SUB A0,A1
|
||
MOVE A1,A2
|
||
ABS A1
|
||
CMPI 5,A1
|
||
JRLT N0
|
||
NEG A2
|
||
N0: BTST 31,A2
|
||
JRZ IC
|
||
DEC A0
|
||
JRP T1
|
||
MOVK 8,A0
|
||
JRUC T1
|
||
IC: INC A0 ;ROTATE TOWARD PLAYER
|
||
CMPI 9,A0
|
||
JRNE T1
|
||
MOVK 1,A0
|
||
T1: MOVE A0,*A13(DIR),W
|
||
CALLA GET_STAND ;DOES ANI OF CORRECT VIEW
|
||
RETS
|
||
|
||
GET_RUN:
|
||
;GET FRANIM BASE ADDRESS FOR THIS FAT MANS DIRECTION
|
||
;
|
||
MOVE *A13(DIR),A4
|
||
ANDI 0FH,A4 ;TAKE OUT
|
||
SLL 5,A4 ;*32 FOR LONG WORD LOOKUP TABLE
|
||
ADDI WALK_LIST,A4 ;CALCULATE OFFSET IN TABLE
|
||
MOVE *A4,A9,L ;MOVE TABLE VALUE INTO A9
|
||
;NEW ANIMATION SCRIPT
|
||
MOVE *A13(CFLAGS),A0
|
||
ANDI 0FFFEH,A0 ;
|
||
MOVE A0,*A13(CFLAGS) ;ZERO STANDING/SPIN FLAG
|
||
RETS
|
||
|
||
SPINFRMS:
|
||
.LONG new12c,fms105,f9wc,fms75,f6wc,fms75,f9wc,fms105
|
||
;SPINFLGS:
|
||
; .WORD DMAWNZ,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ
|
||
; .WORD DMAWNZ,DMAWNZ,DMAWNZ
|
||
;SPINFLGS:
|
||
; .WORD DMAWNZ,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ
|
||
; .WORD DMAWNZ,DMAWNZ,DMAWNZ
|
||
|
||
GET_STAND:
|
||
;ANI ONTO SCREEN THIS fat mans STANDING POSITION
|
||
MOVE *A13(DIR),A0 ;CURRENT DIR FAT IS FACING
|
||
DEC A0
|
||
; ANDI 07H,A0 ;TAKE OUT
|
||
MOVE A0,A2
|
||
SLL 5,A0
|
||
ADDI SPINFRMS,A0
|
||
MOVE *A0,A1,L ;NEW OIMG
|
||
SLL 4,A2
|
||
ADDI SPINFLGS,A2
|
||
MOVE *A2,A4,W ;NEW OFLAGS
|
||
CALLA ANI
|
||
RETS
|
||
|
||
INIT_FAT:
|
||
;INITIAL FAT POSITION,IMAGE SHAPE,AGE ETC....
|
||
;DO STFOBF AND GET A0 PNTR
|
||
;
|
||
CALLA GET_VALID_DOOR
|
||
INC A0
|
||
MOVE A0,@TMP
|
||
; MOVI 0,B0
|
||
; MOVI 4,B1
|
||
; CALLA RANGRAND ;TIE THIS IN WITH DIFFICULTY!
|
||
; MOVE A0,A1
|
||
; SLL 5,A1
|
||
; ADDI DRINF,A1
|
||
; MOVE *A1,A1,L
|
||
; MOVB *A1,A1
|
||
; JRZ G
|
||
; CMPI 06,A1
|
||
; JRGE G
|
||
;DOOR THIS GUY WILL BE SENT TO IS CLOSING RIGHT NOW. SO SEND HIM TO DOOR 4
|
||
; MOVI 4,A0 ;DOOR 4
|
||
;G MOVE A0,@TMP
|
||
;
|
||
; DEC A0
|
||
;
|
||
; MOVE A0,A2
|
||
|
||
SLL 3,A2
|
||
MOVI SKINDX,A1
|
||
ADD A2,A1
|
||
MOVB *A1,A1
|
||
MOVB A1,*A13(INDEX)
|
||
SLL 1,A2
|
||
MOVI SD,A1
|
||
ADD A2,A1
|
||
MOVE *A1,A1
|
||
MOVE A1,*A13(DIR)
|
||
MOVI SX,A1
|
||
SLL 1,A2
|
||
ADD A2,A1
|
||
MOVE *A1,A0,L
|
||
MOVI SY,A1
|
||
ADD A2,A1
|
||
MOVE *A1,A1,L
|
||
MMTM SP,A0,A1
|
||
MOVE @TMP,A0
|
||
MOVI >17,A1
|
||
CALLA SET_GATE_2
|
||
MMFM SP,A0,A1
|
||
CALLR IH1
|
||
CALLA BEGINOBJ
|
||
MOVE *A8(OPAL),A0,L
|
||
ANDI 0FFFFH,A0
|
||
MOVE A0,*A8(OPAL),L
|
||
|
||
MOVI 20,A3 ;ENOUGH TO GET OUT OF DOOR
|
||
MOVE @WAVE,A0
|
||
CMPI 4,A0
|
||
JREQ IH9
|
||
CMPI 6,A0
|
||
JREQ IH9
|
||
IH8 MOVE A3,*A13(DIS) ;CHANGE BASED ON FAT SPEED?
|
||
|
||
RETS
|
||
IH9
|
||
MOVB @PCNT,A0
|
||
ANDI 03H,A0
|
||
JRNE IH8
|
||
MOVI 90,A3 ;ENOUGH TO GET OUT OF DOOR
|
||
MOVE A3,*A13(DIS) ;CHANGE BASED ON FAT SPEED?
|
||
|
||
RETS
|
||
IH1: ;ENTER HERE IF ON SCRN FAT
|
||
MOVI f6wa,A2 ;DOES NOT MATTER
|
||
MOVI 159,A3
|
||
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
|
||
MOVI CLSENMY|TYPFAT,A5
|
||
CLR A6
|
||
CLR A7
|
||
RETS
|
||
|
||
SX: .LONG -040000H,01960000H,0CA0000H,0CA0000H
|
||
SY: .LONG 0830000H,0830000H,20000H,01100000H ;114
|
||
SD: .WORD 3,7,5,1
|
||
|
||
;812
|
||
;7 3
|
||
;654
|
||
WALK_LIST:
|
||
.LONG UP,UP,RGT,RGT,DN,DN,LFT,LFT,RGT
|
||
.LONG UP,UP,RGT,RGT,DN,DN,LFT,LFT,RGT
|
||
.LONG UP,UP,RGT,RGT,DN,DN,LFT,LFT,RGT
|
||
;
|
||
;MAN(FAT) ANIMATION TABLES
|
||
;
|
||
DN
|
||
.LONG f6wa
|
||
.WORD FLIPBITS|05,0
|
||
.LONG f6wb
|
||
.WORD 5
|
||
.LONG f6wc
|
||
.WORD 5
|
||
.LONG f6wd
|
||
.WORD 5
|
||
.LONG f6we
|
||
.WORD 5
|
||
.LONG f6wd
|
||
.WORD 5
|
||
.LONG f6wc
|
||
.WORD 5
|
||
.LONG f6wb
|
||
.WORD 5
|
||
.LONG 0
|
||
RGT
|
||
.LONG f9wa
|
||
.WORD FLIPBITS|05,(M_FLIPH)
|
||
.LONG f9wb
|
||
.WORD 5
|
||
.LONG f9wc
|
||
.WORD 5
|
||
.LONG f9wd
|
||
.WORD 5
|
||
.LONG f9we
|
||
.WORD 5
|
||
.LONG f9wd
|
||
.WORD 5
|
||
.LONG f9wc
|
||
.WORD 5
|
||
.LONG f9wb
|
||
.WORD 5
|
||
.LONG 0
|
||
LFT
|
||
.LONG f9wa
|
||
.WORD FLIPBITS|05,0
|
||
.LONG f9wb
|
||
.WORD 5
|
||
.LONG f9wc
|
||
.WORD 5
|
||
.LONG f9wd
|
||
.WORD 5
|
||
.LONG f9we
|
||
.WORD 5
|
||
.LONG f9wd
|
||
.WORD 5
|
||
.LONG f9wc
|
||
.WORD 5
|
||
.LONG f9wb
|
||
.WORD 5
|
||
.LONG 0
|
||
UP
|
||
.LONG new12a
|
||
.WORD FLIPBITS|05,0
|
||
.LONG new12b
|
||
.WORD 5
|
||
.LONG new12c
|
||
.WORD 5
|
||
.LONG new12d
|
||
.WORD 5
|
||
.LONG new12e
|
||
.WORD 5
|
||
.LONG new12d
|
||
.WORD 5
|
||
.LONG new12c
|
||
.WORD 5
|
||
.LONG new12b
|
||
.WORD 5
|
||
.LONG 0
|
||
|
||
SHRAP .LONG MTL1
|
||
.WORD 3
|
||
.LONG MTL2
|
||
.WORD 3
|
||
.LONG MTL3
|
||
.WORD 3
|
||
.LONG MTL4
|
||
.WORD 3
|
||
.LONG MTL5
|
||
.WORD 3
|
||
.LONG MTL6
|
||
.WORD 3
|
||
.LONG MTL7
|
||
.WORD 3
|
||
.LONG MTL8
|
||
.WORD 3
|
||
.LONG MTL9
|
||
.WORD 3
|
||
.LONG MTL10
|
||
.WORD 3
|
||
.LONG 0
|
||
|
||
.END
|
||
|
||
|
||
|
||
|