1183 lines
21 KiB
NASM
1183 lines
21 KiB
NASM
|
.FILE 'LZRORB.ASM'
|
|||
|
.TITLE 'ROBO-RAMA GAME PROGRAM'
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L,T
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
;
|
|||
|
; INITIATED: DECEMBER 20, 1989
|
|||
|
; MODIFIED: FOREVER....
|
|||
|
; SOFTWARE: EUGENE JARVIS
|
|||
|
;
|
|||
|
; 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"
|
|||
|
; .INCLUDE "MARK.EQU"
|
|||
|
|
|||
|
;
|
|||
|
;SOUNDS
|
|||
|
;
|
|||
|
.REF EXP1,EXP3,LAZSND,EXP3HI
|
|||
|
;
|
|||
|
;SYMBOLS EXTERNALLY DEFINED
|
|||
|
;
|
|||
|
; .REF LASERSPD
|
|||
|
.REF ECON,ORB_LIT,FRANIM,BIG3,SCRADD2,P1DATA,P2DATA,DEXIT
|
|||
|
.REF PSTOP,ADPCS4,HALT,BOUND,WAVE
|
|||
|
.REF GET_VALID_XY,GAMSTATE,WAVEYX,EHALT
|
|||
|
.REF RANDPER,RANDOM,RANGRAND,DRINF,SET_GATE_2,GET_WVADDR
|
|||
|
.REF RANDU,SRAND,PLYROBJS
|
|||
|
.REF FINDPAL,PALSET,DELPAL,GETFPAL
|
|||
|
;
|
|||
|
;SYMBOLS DEFINED IN THIS FILE
|
|||
|
;
|
|||
|
.DEF SPAWN_ORB,ONSCRN_ORB,ORB_CNT,ORB_DN,MAXORB,OFSCRTST
|
|||
|
.DEF SCORPLAY,ORBBNDCK,BOOM4
|
|||
|
.DEF KILL_O1,ORB_ORB,KILL_LZR,ORBLAZ,ORBBUL,KILL_OB,GETPLYR
|
|||
|
|
|||
|
;
|
|||
|
;UNINITIALIZED RAM DEFINITIONS
|
|||
|
;
|
|||
|
.BSS MAXORB,8 ;MAXIMUM ON SCREEN FOR CURRENT WAVE
|
|||
|
.BSS ORB_CNT,16 ;ORB CNT ON SCREEN
|
|||
|
.BSS ORB_DN,16 ;0=NO, 1=YES
|
|||
|
|
|||
|
;
|
|||
|
;EQUATES/STRUCURES FOR THIS FILE TO FOLLOW
|
|||
|
;
|
|||
|
;
|
|||
|
;ORB DATA STRUCTURE
|
|||
|
;
|
|||
|
.TEXT
|
|||
|
;
|
|||
|
ONSCRN_ORB:
|
|||
|
;A2=# OF ORBS TO CREATE ON SCREEN AT START OF WAVE
|
|||
|
CREATE CYCPID,ORB_LIT
|
|||
|
MOVB A2,@ECON ;YES ENEMY TO ENEMY!
|
|||
|
OH1 PUSH A2 ;CREATE A BUNCH OF THEM
|
|||
|
CREATE ORBPID,OORB
|
|||
|
PULL A2
|
|||
|
DSJNE A2,OH1
|
|||
|
PUSH A11
|
|||
|
MOVI ORBCTB0,A11
|
|||
|
MOVE @WAVE,A0
|
|||
|
CMPI 1,A0
|
|||
|
JRZ OH2
|
|||
|
CMPI 2,A0
|
|||
|
JRZ OH2
|
|||
|
CMPI 8,A0
|
|||
|
JRZ OH2
|
|||
|
CMPI 13,A0
|
|||
|
JRZ OH2
|
|||
|
MOVI 700,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRC OH2
|
|||
|
MOVI ORBCTB1,A11
|
|||
|
OH2
|
|||
|
CREATE 0,ORBCOL
|
|||
|
PULL A11
|
|||
|
RETS
|
|||
|
|
|||
|
ORBDLY SLEEP 4*60
|
|||
|
MOVI CYCPID,A0
|
|||
|
MOVE A0,*A10(PROCID)
|
|||
|
DIE
|
|||
|
*
|
|||
|
*COLOR CYCLE YOUR ORBS
|
|||
|
*A11=TABLE TO USE
|
|||
|
ORBCOL
|
|||
|
SLEEP 4
|
|||
|
MOVE A13,A10
|
|||
|
CREATE 0,ORBDLY
|
|||
|
MOVI NUORB,A0
|
|||
|
CALLA FINDPAL
|
|||
|
JREQ ORBCOL
|
|||
|
|
|||
|
SLL 24,A0 ;ISOLATE THE NUMBER
|
|||
|
SRL 16,A0
|
|||
|
CLR A10
|
|||
|
MOVE A0,A9
|
|||
|
ORBCOLP
|
|||
|
|
|||
|
MOVE A9,A1 ;GET DESTINATION
|
|||
|
MOVI 24,A2
|
|||
|
INC A10
|
|||
|
CMPI 3,A10
|
|||
|
JRLO ORBCOL1
|
|||
|
CLR A10
|
|||
|
ORBCOL1
|
|||
|
MOVE A10,A0
|
|||
|
SLL 5,A0
|
|||
|
ADD A11,A0
|
|||
|
MOVE *A0,A0,L
|
|||
|
CALLA PALSET
|
|||
|
SLEEP 6
|
|||
|
JRUC ORBCOLP
|
|||
|
|
|||
|
ORBCTB0 .LONG NUORB2+16,NUORB+16,NUORB3+16 ;BLUE GLOWER
|
|||
|
ORBCTB1 .LONG NUORB5+16,NUORB4+16,NUORB5+16 ;GREEN-YELLOW GLOWER
|
|||
|
|
|||
|
OORB:
|
|||
|
;OORB IS CALLED AT THE START OF A WAVE TO PLACE X # OF ORBS ON SCREEN
|
|||
|
;AT THE BEGINNING OF A WAVE
|
|||
|
|
|||
|
;CLEAR ANY STRUCTURE VARIABLES HERE
|
|||
|
MOVI 60,A0
|
|||
|
MOVI 60,A1
|
|||
|
MOVB @BOUND,A2
|
|||
|
JRNZ TOPIT
|
|||
|
|
|||
|
CLR A11 ;A11 CLR=SKIP CIRCLE TABLE ALIGNMENT
|
|||
|
CALLA GET_VALID_XY ;MAKE SURE NEW ORB IS NOT
|
|||
|
;OVERLAPPING ANY EXISTING SHAPE
|
|||
|
;WHICH IS ALREADY ON SCRN AT START
|
|||
|
;A0 & A1 ARE SET UP
|
|||
|
;ADD IN OFFSETS FOR THIS PARTICULAR ARENA
|
|||
|
TOPIT 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 ORB (BEGINOBJ)
|
|||
|
CALLA BEGINOBJ2 ;STUFF OBJ
|
|||
|
CALLR SETUP_ORB ;INC ORB_CNT
|
|||
|
|
|||
|
JRUC LUP_TOP
|
|||
|
|
|||
|
SPAWN_ORB:
|
|||
|
;CALLED TO SEND OUT 1 ORB FROM A RANDOM DOOR.
|
|||
|
;SPAWN ORB IS CALLED FROM 'WAVE OVERLORD' CODE WHICH DISPERSES
|
|||
|
;ALL THE BAD GUYS THROUGHOUT A WAVE
|
|||
|
MOVE @ORB_DN,A0 ;0=STILL SOME TO COME OUT
|
|||
|
;1=ALL FINISHED!
|
|||
|
JRNZ ORB_OUT
|
|||
|
MOVE @ORB_CNT,A2 ;MOVE BYTE (# ORB ON SCRN) TO A2
|
|||
|
MOVB @MAXORB,A3
|
|||
|
CMP A3,A2 ;ORBS MAXED OUT?
|
|||
|
JRGT ORB_OUT ;
|
|||
|
|
|||
|
MOVB A3,@ECON ;YES ENEMY TO ENEMY!
|
|||
|
CREATE ORBPID,AORB ;START ONE ORB
|
|||
|
ORB_OUT:
|
|||
|
RETS
|
|||
|
;
|
|||
|
AORB:
|
|||
|
;YES A NEW ORB WILL APPEAR
|
|||
|
;THIS ORB WAS SPAWNED FROM 'WAVE OVERLORD' CODE
|
|||
|
CALLA INIT_ORB
|
|||
|
CALLR SETUP_ORB ;INC CNT, SET DIR, SET DEATH FLAG, ETC
|
|||
|
|
|||
|
*
|
|||
|
* ORB PROCESS
|
|||
|
* A8=OBJECT
|
|||
|
* A11=PLAYER TO SEEK
|
|||
|
* A13=PROCESS
|
|||
|
* PDATA=BULLET HIT COUNT
|
|||
|
* PDATA+>10=ORB FIRING LASER = LASER PROCESS OR 0
|
|||
|
* PDATA+>30=ORB CRASHING >=1
|
|||
|
* PDATA+>40=XACC
|
|||
|
* PDATA+>50=YACC
|
|||
|
LUP_TOP:
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A13(PDATA),L ;CLEAR BULLET HIT COUNT
|
|||
|
MOVE A0,*A13(PDATA+>20),L ;CLEAR LASER FIRE AND CRASH FLAGS
|
|||
|
SLEEP 2
|
|||
|
MOVE @EHALT,A0
|
|||
|
JRNZ LUP_TOP ;HALT ORBS WHILE PLAYER ENTERS
|
|||
|
|
|||
|
SLEEP 30
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
CALLA GETORBV
|
|||
|
MV:
|
|||
|
MOVI 100,A0 ;GET NEW VELOCITY?
|
|||
|
CALLA RANDPER
|
|||
|
JRNC MVV01 ;NO
|
|||
|
CALLR GETORBV
|
|||
|
MOVI 20,A0 ;GET NEW PLAYER TO SEEK
|
|||
|
CALLA RANDPER
|
|||
|
JRNC MVV01 ;NO
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
|
|||
|
MVV01
|
|||
|
MOVE *A13(PDATA+>40),A0,W ;GET ACCELERATIONS
|
|||
|
MOVE *A13(PDATA+>50),A1,W
|
|||
|
MOVE *A8(OXVEL),A2,L
|
|||
|
MOVE *A8(OYVEL),A3,L
|
|||
|
ADD A0,A2
|
|||
|
ADD A1,A3
|
|||
|
MOVE A2,A0
|
|||
|
MOVE A3,A1
|
|||
|
SRA 4,A0 ;SUB OUT DAMPING FACTOR
|
|||
|
SRA 4,A1
|
|||
|
SUB A0,A2
|
|||
|
SUB A1,A3
|
|||
|
MOVE A2,*A8(OXVEL),L
|
|||
|
MOVE A3,*A8(OYVEL),L
|
|||
|
|
|||
|
CALLR ORBBNDCK ;CHECK BOUNDARY COLLISION
|
|||
|
|
|||
|
MOVI 09,A0 ;08
|
|||
|
CALLA RANDPER
|
|||
|
JRNC MV1
|
|||
|
|
|||
|
CALLR GETLZDIR ;GET LAZER DIRECTION
|
|||
|
SLL 5,A0 ;ADJUST FOR LONG WORDS
|
|||
|
MOVI LASTAB,A10 ;RANDOM FIRING ANGLE
|
|||
|
ADD A0,A10 ;GROUPS OF THREE
|
|||
|
ADD A0,A10
|
|||
|
ADD A0,A10
|
|||
|
MOVE *A10+,A0,L ;GET FIRING IMAGE
|
|||
|
MOVE *A10+,A9,L ;GET POSITIONING ANIMATION
|
|||
|
MOVE *A8(OIMG),A1,L
|
|||
|
CMP A0,A1 ;ON FIRING IMAGE?
|
|||
|
JREQ MVV ;YES
|
|||
|
|
|||
|
MOVK 1,A1 ;ROTATE INTO POSITION
|
|||
|
JSRP FRANIM
|
|||
|
MVV
|
|||
|
CALLA PSTOP ;STOP THE ORB
|
|||
|
|
|||
|
; MOVE @HALT,A0
|
|||
|
; JRNZ MVFIRLP
|
|||
|
|
|||
|
CLR A1
|
|||
|
|
|||
|
MOVI LZRPID,A1
|
|||
|
|
|||
|
MOVE *A10,A7,L
|
|||
|
CALLA GETPRC
|
|||
|
MOVE A8,*A0(PDATA),L ;TELL LASER WHO FIRED IT
|
|||
|
|
|||
|
MOVE A0,*A13(PDATA+>10),L ;TELL ORB LASER PROCESS
|
|||
|
MOVI LAZSND,A0
|
|||
|
CALLA ONESND
|
|||
|
|
|||
|
MVFIRLP
|
|||
|
SLEEP 4
|
|||
|
MOVE *A13(PDATA+>10),A0,L ;LASER STILL GOING ?
|
|||
|
JRNE MVFIRLP ;YES
|
|||
|
|
|||
|
CLR A0 ;LASER IS DONE
|
|||
|
MOVE A0,*A13(PDATA+>20),W
|
|||
|
CALLR GETORBV ;GET ORB VELOCITY
|
|||
|
|
|||
|
MV1
|
|||
|
SLEEP 2
|
|||
|
JRUC MV
|
|||
|
|
|||
|
LASTAB
|
|||
|
.LONG ORB1,ROTSD,LASRR,ORB1,ROTSD,LASRL
|
|||
|
.LONG ORB4,ROTUP,LASRU,ORB4,ROTUP,LASRD
|
|||
|
.LONG ORB1,ROTSD,LASRR,ORB1,ROTSD,LASRL
|
|||
|
.LONG ORB4,ROTUP,LASRU,ORB4,ROTUP,LASRD
|
|||
|
*
|
|||
|
*GET LASER DIRECTION
|
|||
|
*A8=ORB, A11=TARGET
|
|||
|
*RETURNS A0=0(RT),1(LFT),2(UP),3(DOWN)
|
|||
|
GETLZDIR:
|
|||
|
*CALCULATE DELTAX, DELTAY
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
MOVE *A11(OXPOS),A2,W
|
|||
|
MOVE *A11(OYPOS),A3,W
|
|||
|
SUB A0,A2
|
|||
|
SUB A1,A3
|
|||
|
MOVE A2,A4
|
|||
|
MOVE A3,A5
|
|||
|
ABS A4
|
|||
|
ABS A5
|
|||
|
CLR A0
|
|||
|
CMP A4,A5
|
|||
|
JRHI GTLZDR0
|
|||
|
MOVE A2,A2
|
|||
|
JRNN GTLZDRX
|
|||
|
MOVK 1,A0
|
|||
|
JRUC GTLZDRX
|
|||
|
GTLZDR0
|
|||
|
MOVK 2,A0
|
|||
|
MOVE A3,A3
|
|||
|
JRN GTLZDRX
|
|||
|
MOVK 3,A0
|
|||
|
GTLZDRX
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GET ORB VELOCITY
|
|||
|
*A11=PLAYER TO SEEK
|
|||
|
*RETURNS PDATA+>40 XACC; PDATA+>50 YACC
|
|||
|
*
|
|||
|
GETORBV
|
|||
|
MOVI 50,A0
|
|||
|
CALLA SRAND
|
|||
|
MOVE A0,A1
|
|||
|
MOVI 50,A0
|
|||
|
CALLA SRAND
|
|||
|
MOVE *A11(OXPOS),A2,W
|
|||
|
MOVE *A11(OYPOS),A3,W
|
|||
|
ADD A0,A2
|
|||
|
ADD A1,A3
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
SUB A0,A2
|
|||
|
SUB A1,A3
|
|||
|
SLL 6,A2
|
|||
|
SLL 6,A3
|
|||
|
MOVE A2,*A13(PDATA+>40),W
|
|||
|
MOVE A3,*A13(PDATA+>50),W
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CHECK ORB OUT OF BOUNDS
|
|||
|
*A0,A1,A2,A3 DESTROYED
|
|||
|
ORBBNDCK:
|
|||
|
MOVI [>3A,>2A],A2 ;BOUNDS CHECK
|
|||
|
MOVI [>E8,>166],A3
|
|||
|
CALLA SCRTSTG
|
|||
|
JREQ MV0 ;IN BOUNDS O.K.
|
|||
|
|
|||
|
MOVE *A8(OXVEL),A1,L
|
|||
|
MOVE *A8(OYVEL),A2,L
|
|||
|
DEC A0
|
|||
|
JRNE MV01
|
|||
|
ABS A1 ;MAKE XV POSITIVE
|
|||
|
JRUC MV00
|
|||
|
MV01
|
|||
|
DEC A0
|
|||
|
JRNE MV02
|
|||
|
ABS A1 ;MAKE XV NEGATIVE
|
|||
|
NEG A1
|
|||
|
JRUC MV00
|
|||
|
MV02
|
|||
|
ABS A2
|
|||
|
DEC A0
|
|||
|
JREQ MV00 ;UP CASE
|
|||
|
NEG A2 ;DOWN WALL CASE
|
|||
|
|
|||
|
MV00
|
|||
|
MOVE A1,*A8(OXVEL),L
|
|||
|
MOVE A2,*A8(OYVEL),L
|
|||
|
MV0
|
|||
|
RETS
|
|||
|
|
|||
|
INIT_ORB:
|
|||
|
;INITIAL ORB POSITION,IMAGE SHAPE,AGE ETC....
|
|||
|
;DO STFOBF AND GET A0 PNTR
|
|||
|
MOVI 0,B0 ;DOORS 1-4
|
|||
|
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
|
|||
|
|
|||
|
PUSH A0 ;A0=DOOR 1-4
|
|||
|
MOVI >1F,A1 ;TIME FOR DOOR TO REMAIN OPEN
|
|||
|
;OPEN DOOR
|
|||
|
CALLA SET_GATE_2
|
|||
|
|
|||
|
;NOW PLACE ORB BEHIND APPROPRIATE DOOR
|
|||
|
PULL A2
|
|||
|
|
|||
|
MOVI SX,A1
|
|||
|
SLL 5,A2 ;INTO DOOR X/Y TABLES
|
|||
|
ADD A2,A1
|
|||
|
MOVE *A1,A0,L
|
|||
|
MOVI SY,A1
|
|||
|
ADD A2,A1
|
|||
|
MOVE *A1,A1,L
|
|||
|
;A0=OXVAL
|
|||
|
;A1=OYVAL
|
|||
|
PUSH A2 ;INDEX BASED ON DOOR 1-4
|
|||
|
CALLR IH1
|
|||
|
CALLA BEGINOBJ
|
|||
|
PULL A2
|
|||
|
;NOW GIVE X/Y VEL FOR THIS ORB
|
|||
|
MOVI ORBXV,A0
|
|||
|
ADD A2,A0
|
|||
|
MOVE *A0,A0,L
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
ADDI ORBYV,A2
|
|||
|
MOVE *A2,A0,L
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
RETS
|
|||
|
;DOOR #
|
|||
|
; 3
|
|||
|
;1 2
|
|||
|
; 4
|
|||
|
|
|||
|
ORBXV: .LONG 0,10000H,-10000H,0,0
|
|||
|
ORBYV: .LONG 0,0,0,10000H,-10000H
|
|||
|
|
|||
|
|
|||
|
IH1: ;ENTER HERE IF ON SCRN TANK
|
|||
|
;STUFF NEEDED SHIT
|
|||
|
;A0=OXVAL
|
|||
|
;A1=OYVAL
|
|||
|
MOVI ORB1,A2 ;(OIMG) DOES NOT MATTER
|
|||
|
; MOVI NUORB2,A2 ;(OIMG) DOES NOT MATTER
|
|||
|
MOVI 230,A3 ;(OZPOS)
|
|||
|
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
|
|||
|
MOVI CLSENMY|TYPORB,A5 ;(OID)
|
|||
|
CLR A6 ;(OXVEL)
|
|||
|
CLR A7 ;(OYVEL)
|
|||
|
RETS
|
|||
|
|
|||
|
SETUP_ORB:
|
|||
|
;
|
|||
|
; UPDATE ORB COUNT
|
|||
|
;
|
|||
|
MOVE @ORB_CNT,A0
|
|||
|
INC A0
|
|||
|
MOVE A0,@ORB_CNT
|
|||
|
|
|||
|
MOVI ORB,A2
|
|||
|
CALLA GET_WVADDR
|
|||
|
|
|||
|
MOVE *A0(32),A1,W ;GET DIFFICULTY LEVEL FOR THIS ORB
|
|||
|
; MOVE A1,*A13(LEVEL),W
|
|||
|
|
|||
|
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS ORB
|
|||
|
DEC A1
|
|||
|
MOVE A1,*A0(16),W
|
|||
|
JRNZ BZ
|
|||
|
|
|||
|
;END OF THIS WAVES ORB CNT
|
|||
|
MOVK 1,A1
|
|||
|
MOVE A1,@ORB_DN
|
|||
|
|
|||
|
CREATE 0,DEXIT ;TURNS ON ARROW, ETC.
|
|||
|
;CREATE THIS ONLY WHEN ALL ENEMIES
|
|||
|
;ARE GONE!
|
|||
|
;
|
|||
|
BZ
|
|||
|
RETS
|
|||
|
|
|||
|
SX: .LONG 0,-040000H,01960000H,0CA0000H,0CA0000H
|
|||
|
SY: .LONG 0,0830000H,0830000H,20000H,01140000H
|
|||
|
*
|
|||
|
*ORB KILL LAZER
|
|||
|
*A8=ORB OBJECT
|
|||
|
*KILL LAZER IF ANY
|
|||
|
*
|
|||
|
ORBKILLZR
|
|||
|
MMTM SP,A0,A1,A2,A7,A8
|
|||
|
MOVE *A8(OPLINK),A2,L ;ORB PROCESS
|
|||
|
MOVE *A2(PDATA+>10),A1,L ;LINK TO LASER PROCESS
|
|||
|
JREQ KLX ;NO LAZER
|
|||
|
MOVE *A1(PA8),A8,L ;GET LAZER OBJECT
|
|||
|
JRUC KILL_LZR1
|
|||
|
*
|
|||
|
*LAZER COLLIDE WITH PLAYER OR ORB
|
|||
|
*
|
|||
|
KILL_LZR
|
|||
|
;A8=LAZER PNTR
|
|||
|
;A0=WHAT I HIT
|
|||
|
MMTM SP,A0,A1,A2,A7,A8
|
|||
|
MOVE *A8(OPLINK),A1,L
|
|||
|
MOVE *A1(PDATA),A1,L ;DID I HIT MY OWN ORB??
|
|||
|
CMP A0,A1
|
|||
|
JREQ KLX ;YES, NO ACTION
|
|||
|
MOVE *A1(OPLINK),A2,L
|
|||
|
KILL_LZR1
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A2(PDATA+>10),L ;NULL OUT POINTER TO LASER
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
CALLA DELPAL
|
|||
|
**********************
|
|||
|
MOVI >5432,A2
|
|||
|
**********************
|
|||
|
MOVE *A8(OPLINK),A0,L
|
|||
|
CALLA KILL
|
|||
|
KLX
|
|||
|
MMFM SP,A0,A1,A2,A7,A8
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLEAN UP ORB MESS
|
|||
|
*A8=ORB
|
|||
|
*
|
|||
|
ORBCLEAN
|
|||
|
MOVE *A8(OPLINK),A0,L
|
|||
|
CALLA KILL ;KILLS PROCESS IN A0
|
|||
|
ORBCLN1
|
|||
|
CALLR ORBKILLZR ;KILL LASER IF ANY
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
|
|||
|
CALLA DELOBJ
|
|||
|
MOVE @ORB_CNT,A0,W ;DELETE A FAT FROM CNT
|
|||
|
DEC A0
|
|||
|
MOVE A0,@ORB_CNT,W
|
|||
|
RETS
|
|||
|
*
|
|||
|
*ORB HIT BY ORB
|
|||
|
*
|
|||
|
;RESTORE EVERYTHING EXCEPT A0,A8
|
|||
|
;A0=KILLER
|
|||
|
;A8=VICTIM
|
|||
|
ORB_ORB:
|
|||
|
MMTM SP,A1,A2,A3,A4,A5,A6,A7
|
|||
|
CMP A8,A0 ;PROCESS ONLY ONCE
|
|||
|
JRHS ORBORBX
|
|||
|
|
|||
|
MOVE *A8(OXPOS),A1,W
|
|||
|
MOVE *A0(OXPOS),A2,W
|
|||
|
SUB A2,A1
|
|||
|
MOVE A1,A2
|
|||
|
ABS A2
|
|||
|
CMPI 16,A2
|
|||
|
JRHI ORBORBX ;NOT CLOSE ENOUGH FOR COLLISION
|
|||
|
|
|||
|
MOVE *A8(OYPOS),A3,W
|
|||
|
MOVE *A0(OYPOS),A4,W
|
|||
|
SUB A4,A3
|
|||
|
MOVE A3,A4
|
|||
|
ABS A4
|
|||
|
CMPI 16,A4
|
|||
|
JRHI ORBORBX ;NOT CLOSE ENOUGH FOR COLLISION
|
|||
|
|
|||
|
SLL 16,A1
|
|||
|
SLL 16,A3
|
|||
|
SRA 5,A1
|
|||
|
SRA 5,A3
|
|||
|
|
|||
|
MOVE *A8(OPLINK),A5,L ;ORB PROCESS
|
|||
|
MOVE *A5(PDATA+>10),A5,L ;LASER LINK
|
|||
|
JRNE ORBORB1
|
|||
|
|
|||
|
MOVE *A8(OXVEL),A2,L
|
|||
|
SRA 1,A2
|
|||
|
ADD A2,A1
|
|||
|
MOVE A1,*A8(OXVEL),L
|
|||
|
MOVE *A8(OYVEL),A4,L
|
|||
|
SRA 1,A4
|
|||
|
ADD A4,A3
|
|||
|
MOVE A3,*A8(OYVEL),L
|
|||
|
ORBORB1
|
|||
|
MOVE *A0(OPLINK),A6,L ;ORB PROCESS
|
|||
|
MOVE *A6(PDATA+>10),A6,L ;LASER LINK
|
|||
|
JRNE ORBORBX ;YES, DONT MOVE
|
|||
|
|
|||
|
NEG A1
|
|||
|
MOVE *A0(OXVEL),A2,L
|
|||
|
SRA 1,A2
|
|||
|
ADD A2,A1
|
|||
|
MOVE A1,*A0(OXVEL),L
|
|||
|
NEG A3
|
|||
|
MOVE *A0(OYVEL),A4,L
|
|||
|
SRA 1,A4
|
|||
|
ADD A4,A3
|
|||
|
MOVE A3,*A0(OYVEL),L
|
|||
|
ORBORBX
|
|||
|
MMFM SP,A1,A2,A3,A4,A5,A6,A7
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*ORB HIT BY BULLET
|
|||
|
*A8=ORB
|
|||
|
*A0=BULLET THAT HIT US
|
|||
|
*
|
|||
|
ORBBUL
|
|||
|
MMTM SP,A0,A1,A2,A3,A7
|
|||
|
MOVE *A8(OPLINK),A7,L ;ORB PROCESS
|
|||
|
MOVE *A7(PDATA+>10),A1,L ;LASER LINK
|
|||
|
JRNE ORBBUL1 ;DONT PUSH GUY SHOOTING
|
|||
|
|
|||
|
MOVE *A0(OXVEL),A1,L ;GIVE IT A PUSH
|
|||
|
MOVE *A8(OXVEL),A2,L
|
|||
|
SRA 2,A1 ;2,A1
|
|||
|
ADD A1,A2
|
|||
|
MOVE A2,*A8(OXVEL),L
|
|||
|
MOVE *A0(OYVEL),A1,L
|
|||
|
MOVE *A8(OYVEL),A3,L
|
|||
|
SRA 2,A1 ;2,A1
|
|||
|
ADD A1,A3
|
|||
|
MOVE A3,*A8(OYVEL),L
|
|||
|
|
|||
|
ORBBUL1
|
|||
|
MOVE A0,A1 ;SAVE AO
|
|||
|
MOVE *A7(PDATA),A0,W ;INCREMENT HIT COUNT
|
|||
|
INC A0
|
|||
|
MOVE A0,*A7(PDATA),W
|
|||
|
CMPI 3,A0 ;4
|
|||
|
JRHS ORBBUL2 ;TOO MANY HITS, BLOW IT UP
|
|||
|
|
|||
|
MOVI 300,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC ORBBULX ;IS THE GUY HISTORY??...NO
|
|||
|
*
|
|||
|
*ORB IS HISTORY GO INTO CRASH SPIN
|
|||
|
*KILL LASER IF ANY
|
|||
|
*
|
|||
|
ORBBUL2
|
|||
|
MOVE *A7(PDATA+>30),A0,W
|
|||
|
JRNE ORBBULX ;ALREADY CRASHING
|
|||
|
|
|||
|
*DIE GRAY
|
|||
|
; MOVI NUORB2,A0 ;DULL GRAY DEATH
|
|||
|
; CALLA GETFPAL
|
|||
|
; MOVE A0,*A8(OPAL),W
|
|||
|
|
|||
|
MOVE A1,A0 ;RESTORE A0, BULLET OBJECT THAT HIT YOU
|
|||
|
MOVI ORBPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
CALLA SCORPLAY
|
|||
|
CALLR ORBKILLZR ;KILL LASER IF ANY
|
|||
|
MOVE *A8(OPLINK),A0,L ;ORB PROCESS
|
|||
|
MOVI ORBPID,A1,W ;GET ID
|
|||
|
MOVI ORBCRASH,A7
|
|||
|
CALLA XFERPROC
|
|||
|
ORBBULX
|
|||
|
MMFM SP,A0,A1,A2,A3,A7
|
|||
|
RETS
|
|||
|
|
|||
|
OCRCTB .LONG NUORB4,NUORB5
|
|||
|
*
|
|||
|
*SPIN AND CRASH THE ORB
|
|||
|
*
|
|||
|
ORBCRASH
|
|||
|
MOVI 6,A0
|
|||
|
CALLA RANDU
|
|||
|
ADDI 3,A0
|
|||
|
MOVE A0,A10
|
|||
|
MOVI SPNORB,A9 ;TRY SPINNING ACTION
|
|||
|
MOVK 2,A0 ;GET SPIN RATE
|
|||
|
CALLA RANDU
|
|||
|
MOVE A0,*A13(PDATA+>30),W ;SET CRASHING FLAG
|
|||
|
CMPI 1,A0 ;ADJUST TIME FOR FAST SPIN
|
|||
|
JRNE ORBCRL
|
|||
|
ADDK 2,A10
|
|||
|
ORBCRL
|
|||
|
MOVE *A13(PDATA+>30),A11,W ;GET SPIN RATE
|
|||
|
ORBCRL1
|
|||
|
SLEEP 1
|
|||
|
MOVI [>50,>40],A2 ;BOUNDS CHECK
|
|||
|
MOVI [>D0,>146],A3
|
|||
|
CALLA SCRTSTG
|
|||
|
JRNE ORBBLO ;HIT A WALL
|
|||
|
DSJS A11,ORBCRL1
|
|||
|
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
JRNC ORBCRL
|
|||
|
|
|||
|
MOVI SPNORB,A9 ;TRY SPINNING ACTION
|
|||
|
DSJS A10,ORBCRL
|
|||
|
|
|||
|
*CLEAN UP THE MESS AND BLOW IT UP !!!!
|
|||
|
ORBBLO
|
|||
|
CALLR ORBCLN1
|
|||
|
CALLR OEXP2 ;START THE EXPLOSION
|
|||
|
JAUC SUCIDE ;CAN THE PROCESS
|
|||
|
KILL_OB
|
|||
|
;SMART BOMB DEATH!
|
|||
|
;A8=ORB
|
|||
|
;A9=P1 OR P2DATA OF WHO SMARTED ME
|
|||
|
|
|||
|
MOVI ORBPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
MOVE A9,A2 ;PLAYER
|
|||
|
CALLA SCRADD2 ;DO IT!
|
|||
|
CALLR ORBCLEAN
|
|||
|
CALLR OEXP
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*KILL ORB BECAUSE OF COLLISION WITH RING
|
|||
|
*EXTER HERE FROM COLLISION ROUTINE - RINGS KILL ORB
|
|||
|
*A8=ORB
|
|||
|
*
|
|||
|
KILL_O1
|
|||
|
MMTM SP,A1,A2,A7
|
|||
|
MOVI ORBPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
CALLA SCORPLAY
|
|||
|
CALLR ORBCLEAN
|
|||
|
CALLR OEXP2 ;CHUNKS
|
|||
|
MMFM SP,A1,A2,A7
|
|||
|
RETS
|
|||
|
*
|
|||
|
*PLAYER SCORE
|
|||
|
*A0=BULLET OBJECT THAT KILLED
|
|||
|
*A1=AMOUNT TO ADD (8 DIGIT BCD)
|
|||
|
*
|
|||
|
SCORPLAY
|
|||
|
MMTM SP,A0,A1,A2,A4,A7 ;SCRADD2 IS DIRTY, SAVE THESE
|
|||
|
MOVE *A0(OPLINK),A0,L
|
|||
|
MOVB *A0(MYPLYR),A0 ;A0=PLAYER NUMBER
|
|||
|
*FIND A2=P1DATA OR P2DATA
|
|||
|
MOVI P1DATA,A2
|
|||
|
DEC A0
|
|||
|
JREQ SCPL1
|
|||
|
MOVI P2DATA,A2
|
|||
|
SCPL1
|
|||
|
CALLA SCRADD2 ;DO IT!
|
|||
|
MMFM SP,A0,A1,A2,A4,A7
|
|||
|
RETS
|
|||
|
*
|
|||
|
*ORB EXPLOSION PROCESS SMART BOMB, RINGS
|
|||
|
*
|
|||
|
OEXP
|
|||
|
MOVI EXP3,A0
|
|||
|
CALLA ONESND
|
|||
|
CREATE 0,BIG3
|
|||
|
RETS
|
|||
|
OEXP2
|
|||
|
MOVI EXP1,A0
|
|||
|
CALLA ONESND
|
|||
|
CREATE 0,ORB_EXP
|
|||
|
CREATE 0,ADPCS4
|
|||
|
RETS
|
|||
|
*
|
|||
|
*ORB COLLIDES WITH LAZER
|
|||
|
*A8=ORB IMAGE PTR
|
|||
|
*A0=LAZER
|
|||
|
*
|
|||
|
ORBLAZ:
|
|||
|
MMTM SP,A1,A2,A7
|
|||
|
MOVE *A0(OPLINK),A1,L
|
|||
|
MOVE *A1(PDATA),A1,L
|
|||
|
CMP A1,A8 ;MY OWN LASER ?
|
|||
|
JREQ KILORBX ;YES, DONT DIE
|
|||
|
|
|||
|
CALLR ORBCLEAN
|
|||
|
CREATE 0,ORB_EXP
|
|||
|
CREATE 0,ADPCS4
|
|||
|
MOVI EXP3HI,A0
|
|||
|
CALLA ONESND
|
|||
|
KILORBX
|
|||
|
MMFM SP,A1,A2,A7
|
|||
|
RETS
|
|||
|
*
|
|||
|
*ORB EXPLOSION PROCESS
|
|||
|
*A8=ORB
|
|||
|
*
|
|||
|
ORB_EXP:
|
|||
|
CLR A6
|
|||
|
CLR A7
|
|||
|
CALLA GETANIXY
|
|||
|
; ADDI 0350000H,A2 ;A1=Y OFFSET
|
|||
|
MOVE A2,A1
|
|||
|
MOVE A3,A0
|
|||
|
MOVI 199,A3 ;259
|
|||
|
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
|
|||
|
MOVI CLSNEUT|TYPNEUT,A5
|
|||
|
MOVI EXPb1,A2
|
|||
|
|
|||
|
CALLA BEGINOBJ2
|
|||
|
|
|||
|
;CREATE EXPLOSION, AND THEN DIE
|
|||
|
MOVI BOOM4,A9
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
DIE
|
|||
|
*
|
|||
|
*FIRE LASER TO THE RIGHT
|
|||
|
*A8=FIRING ORB OBJECT
|
|||
|
*GET A0=OXVAL, A1=OYVAL, A2=OIMG, A3=ZPOS, A4=OFLAGS, A5=OID, A6=XV, A7=YV
|
|||
|
LASRR
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
ADDK 20,A0
|
|||
|
SLL 16,A0
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
ADDK 6,A1
|
|||
|
SLL 16,A1
|
|||
|
MOVI HLINE,A2
|
|||
|
MOVI 230,A3
|
|||
|
MOVI DMAWNZ,A4
|
|||
|
MOVI CLSENMY|TYPORBL,A5
|
|||
|
CLR A6
|
|||
|
CLR A7
|
|||
|
CALLA BEGINOBJ2
|
|||
|
MOVI >010001,A1 ;SHRINK TO POINT
|
|||
|
MOVE A1,*A8(OSIZEX),L
|
|||
|
MOVE A0,A8
|
|||
|
*
|
|||
|
*LASER RIGHT PROCESS
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROC
|
|||
|
LASRRP
|
|||
|
MOVI [>23-5,>1A],A2 ;BOUNDS CHECK
|
|||
|
MOVI [>FC,>171+5],A3
|
|||
|
CALLA OFSCRTST ;IS IT IN BOUNDS ?
|
|||
|
JRNE LASRRDIE ;DIE OFF RIGHT LASER IN WALL
|
|||
|
|
|||
|
MOVE *A8(OSIZEX),A0,W ;GROW THE SUCKER
|
|||
|
; MOVE @LASERSPD,A1
|
|||
|
; ADD A1,A0 ;ADDK 3
|
|||
|
ADDK 3,A0
|
|||
|
MOVE A0,*A8(OSIZEX),W
|
|||
|
SLOOP 1,LASRRP
|
|||
|
*
|
|||
|
*FIRE LASER TO THE LEFT
|
|||
|
*A8=FIRING ORB OBJECT
|
|||
|
*GET A0=OXVAL, A1=OYVAL, A2=OIMG, A3=ZPOS, A4=OFLAGS, A5=OID, A6=XV, A7=YV
|
|||
|
LASRL
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
SLL 16,A0
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
ADDK 6,A1
|
|||
|
SLL 16,A1
|
|||
|
MOVI HLINE,A2
|
|||
|
MOVI 230,A3
|
|||
|
MOVI DMAWNZ,A4
|
|||
|
MOVI CLSENMY|TYPORBL,A5
|
|||
|
CLR A6
|
|||
|
CLR A7
|
|||
|
CALLA BEGINOBJ2
|
|||
|
MOVI >010001,A1 ;SHRINK TO POINT
|
|||
|
MOVE A1,*A8(OSIZEX),L
|
|||
|
MOVE A0,A8
|
|||
|
*
|
|||
|
*LASER LEFT PROCESS
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROC
|
|||
|
LASRLP
|
|||
|
MOVI [>23-5,>1A],A2 ;BOUNDS CHECK
|
|||
|
MOVI [>FC,>171+5],A3
|
|||
|
CALLA OFSCRTST
|
|||
|
JRNE LASRLDIE ;DIE OFF RIGHT LASER IN WALL
|
|||
|
|
|||
|
MOVE *A8(OSIZEX),A0,W ;GROW THE SUCKER
|
|||
|
; MOVE @LASERSPD,A1
|
|||
|
; ADD A1,A0 ;ADDK 3
|
|||
|
ADDK 3,A0
|
|||
|
MOVE *A8(OXPOS),A1,W
|
|||
|
SUBK 3,A1
|
|||
|
MOVE A1,*A8(OXPOS),W ;MOVE OVER TOP LEFT
|
|||
|
MOVE A0,*A8(OSIZEX),W
|
|||
|
SLOOP 1,LASRLP
|
|||
|
*
|
|||
|
*FIRE LASER UP
|
|||
|
*A8=FIRING ORB OBJECT
|
|||
|
*GET A0=OXVAL, A1=OYVAL, A2=OIMG, A3=ZPOS, A4=OFLAGS, A5=OID, A6=XV, A7=YV
|
|||
|
LASRU
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
ADDK 8,A0
|
|||
|
SLL 16,A0
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
SLL 16,A1
|
|||
|
MOVI VLINE,A2
|
|||
|
MOVI 230,A3
|
|||
|
MOVI DMAWNZ,A4
|
|||
|
MOVI CLSENMY|TYPORBL,A5
|
|||
|
CLR A6
|
|||
|
CLR A7
|
|||
|
CALLA BEGINOBJ2
|
|||
|
MOVI >010004,A1 ;SHRINK TO POINT
|
|||
|
MOVE A1,*A8(OSIZEX),L
|
|||
|
MOVE A0,A8
|
|||
|
*
|
|||
|
*LASER UP PROCESS
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROC
|
|||
|
LASRUP
|
|||
|
MOVI [>23-5,>1A],A2 ;BOUNDS CHECK
|
|||
|
MOVI [>FC,>171+5],A3
|
|||
|
CALLA OFSCRTST
|
|||
|
JRNE LASRUDIE ;DIE OFF RIGHT LASER IN WALL
|
|||
|
|
|||
|
MOVE *A8(OSIZEY),A0,W ;GROW THE SUCKER
|
|||
|
; MOVE @LASERSPD,A1
|
|||
|
; ADD A1,A0 ;ADDK 3
|
|||
|
ADDK 3,A0
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
SUBK 3,A1
|
|||
|
MOVE A1,*A8(OYPOS),W ;MOVE OVER TOP LEFT
|
|||
|
MOVE A0,*A8(OSIZEY),W
|
|||
|
SLOOP 1,LASRUP
|
|||
|
*
|
|||
|
*FIRE LASER DOWN
|
|||
|
*A8=FIRING ORB OBJECT
|
|||
|
*GET A0=OXVAL, A1=OYVAL, A2=OIMG, A3=ZPOS, A4=OFLAGS, A5=OID, A6=XV, A7=YV
|
|||
|
LASRD
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
ADDK 7,A0
|
|||
|
SLL 16,A0
|
|||
|
MOVE *A8(OYPOS),A1,W
|
|||
|
ADDK 16,A1
|
|||
|
SLL 16,A1
|
|||
|
MOVI VLINE,A2
|
|||
|
MOVI 230,A3
|
|||
|
MOVI DMAWNZ,A4
|
|||
|
MOVI CLSENMY|TYPORBL,A5
|
|||
|
CLR A6
|
|||
|
CLR A7
|
|||
|
CALLA BEGINOBJ2
|
|||
|
MOVI >010004,A1 ;SHRINK TO POINT
|
|||
|
MOVE A1,*A8(OSIZEX),L
|
|||
|
MOVE A0,A8
|
|||
|
*
|
|||
|
*LASER DOWN PROCESS
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROC
|
|||
|
LASRDP
|
|||
|
MOVI [>23-5,>1A],A2 ;BOUNDS CHECK
|
|||
|
MOVI [>F2,>171+5],A3
|
|||
|
CALLA OFSCRTST
|
|||
|
JRNE LASRDDIE ;DIE OFF RIGHT LASER IN WALL
|
|||
|
|
|||
|
MOVE *A8(OSIZEY),A0,W ;GROW THE SUCKER
|
|||
|
; MOVE @LASERSPD,A1
|
|||
|
; ADD A1,A0 ;ADDK 3
|
|||
|
ADDK 3,A0
|
|||
|
; ADDK 3,A0
|
|||
|
MOVE A0,*A8(OSIZEY),W
|
|||
|
SLOOP 1,LASRDP
|
|||
|
*
|
|||
|
*RIGHT LASER DIE
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROCESS
|
|||
|
LASRRDIE:
|
|||
|
MOVE *A8(OXPOS),A0,W ;SET X COORD TO END
|
|||
|
MOVE *A8(OSIZEX),A1,W
|
|||
|
ADD A1,A0
|
|||
|
MOVI 1,A1 ;SET WIDTH TO 1
|
|||
|
MOVE A1,*A8(OSIZEX),W
|
|||
|
MOVE A0,*A8(OXPOS),W
|
|||
|
MOVI SPLSHRT,A9
|
|||
|
LASRDIE1
|
|||
|
CALLA PSTOP ;STOP LASER
|
|||
|
MOVE *A13(PDATA),A0,L ;KILL POINTER IN ORB PROCESS
|
|||
|
MOVE *A0(OPLINK),A0,L
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A0(PDATA+>10),L ;NULL OUT POINTER TO LASER
|
|||
|
|
|||
|
MOVI CLSNEUT,A0,W ;CHANGE TO CLASS NEUTRAL, NO COLLISIONS
|
|||
|
MOVE A0,*A8(OID),W
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
|
|||
|
MOVE A8,A0 ;KILL THE SHIT AND DIE
|
|||
|
CALLA DELOBJ
|
|||
|
CALLA DELPAL
|
|||
|
JAUC SUCIDE
|
|||
|
*
|
|||
|
*LEFT LASER DIE
|
|||
|
*
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROCESS
|
|||
|
LASRLDIE:
|
|||
|
MOVI SPLSHLFT,A9
|
|||
|
JRUC LASRDIE1
|
|||
|
*
|
|||
|
*UP LASER DIE
|
|||
|
*
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROCESS
|
|||
|
LASRUDIE:
|
|||
|
MOVI SPLSHUP,A9
|
|||
|
JRUC LASRDIE1
|
|||
|
*
|
|||
|
*DOWN LASER DIE
|
|||
|
*
|
|||
|
*A8=OBJECT
|
|||
|
*A13=PROCESS
|
|||
|
LASRDDIE:
|
|||
|
MOVE *A8(OYPOS),A0,W ;SET Y COORD TO END
|
|||
|
MOVE *A8(OSIZEY),A1,W
|
|||
|
ADD A1,A0
|
|||
|
MOVI 1,A1 ;SET LENGTH TO 1
|
|||
|
MOVE A1,*A8(OSIZEY),W
|
|||
|
MOVE A0,*A8(OYPOS),W
|
|||
|
MOVI SPLSHDWN,A9
|
|||
|
JRUC LASRDIE1
|
|||
|
*
|
|||
|
*TEST IF ANY PART OF OBJECT OFF SCREEN
|
|||
|
*A2=TOP LEFT Y:X
|
|||
|
*A3=BOT RT Y:X
|
|||
|
*A8=OBJECT
|
|||
|
*RETURNS EQ IF ON SCREEN
|
|||
|
*A0=LEFT=1,RIGHT=2,UP=3,DOWN=4
|
|||
|
OFSCRTST
|
|||
|
MMTM SP,A1,A2,A3,A4
|
|||
|
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
|
|||
|
MOVE *A8(OSIZE),A1,L
|
|||
|
ADDXY A0,A1 ;GET LOWER RT OF OBJECT
|
|||
|
|
|||
|
CLR A4
|
|||
|
CMPXY A2,A0
|
|||
|
JRYLE SCRTFU ;ABOVE...
|
|||
|
JRXLE SCRTFL ;TO THE LEFT..
|
|||
|
|
|||
|
CMPXY A3,A1 ;IS IT LOWER THAN LOWER RT?
|
|||
|
JRXGE SCRTFR ;TO THE RIGHT
|
|||
|
JRYLT OFSCRTX ;NOT LOWER
|
|||
|
|
|||
|
SCRTFD INC A4
|
|||
|
SCRTFU INC A4
|
|||
|
SCRTFR INC A4
|
|||
|
SCRTFL INC A4
|
|||
|
|
|||
|
OFSCRTX
|
|||
|
MOVE A4,A0
|
|||
|
MMFM SP,A1,A2,A3,A4
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GET A RANDOM PLAYER 1 OR 2
|
|||
|
*RETURNS A0 WITH RANDOM PLAYER INDEX
|
|||
|
GETPLYR
|
|||
|
CALLA RANDOM
|
|||
|
JRN GETPLYR2
|
|||
|
MOVE @PLYROBJS,A0,L
|
|||
|
JRNE GETPLYRX
|
|||
|
MOVE @PLYROBJS+32,A0,L
|
|||
|
GETPLYRX
|
|||
|
RETS
|
|||
|
GETPLYR2
|
|||
|
MOVE @PLYROBJS+32,A0,L
|
|||
|
JRNE GETPLYRX
|
|||
|
MOVE @PLYROBJS,A0,L
|
|||
|
RETS
|
|||
|
;
|
|||
|
;FRANIM LISTS FOR ORB ROTATES
|
|||
|
;
|
|||
|
ROTUP:
|
|||
|
;ORB ROTATE VERTICAL FROM SIDE TO SIDE ORIENTATION
|
|||
|
.LONG ORB2
|
|||
|
.WORD 5
|
|||
|
.LONG ORB3
|
|||
|
.WORD 5
|
|||
|
.LONG ORB4
|
|||
|
.WORD 5
|
|||
|
.LONG 0
|
|||
|
ROTSD:
|
|||
|
;ORB ROTATE TO SIDE FROM TOP ORIENTATION
|
|||
|
.LONG ORB3
|
|||
|
.WORD 5
|
|||
|
.LONG ORB2
|
|||
|
.WORD 5
|
|||
|
.LONG ORB1
|
|||
|
.WORD 5
|
|||
|
.LONG 0
|
|||
|
|
|||
|
*LASER SPLASH ON RIGHT
|
|||
|
SPLSHRT:
|
|||
|
.LONG OSPLSHV1
|
|||
|
.WORD FLIPBITS|3,M_FLIPH
|
|||
|
.LONG OSPLSHV2
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV3
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV4
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV2
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV1
|
|||
|
.WORD 3
|
|||
|
.LONG 0
|
|||
|
*LASER SPLASH ON LEFT
|
|||
|
SPLSHLFT:
|
|||
|
.LONG OSPLSHV1
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV2
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV3
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV4
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV2
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSHV1
|
|||
|
.WORD 3
|
|||
|
.LONG 0
|
|||
|
*LASER SPLASH UP
|
|||
|
SPLSHUP:
|
|||
|
.LONG OSPLSH1H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH2H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH3H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH4H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH2H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH1H
|
|||
|
.WORD 3
|
|||
|
.LONG 0
|
|||
|
*LASER SPLASH DOWN
|
|||
|
SPLSHDWN:
|
|||
|
.LONG OSPLSH1H
|
|||
|
.WORD FLIPBITS|3,M_FLIPV
|
|||
|
.LONG OSPLSH2H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH3H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH4H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH2H
|
|||
|
.WORD 3
|
|||
|
.LONG OSPLSH1H
|
|||
|
.WORD 3
|
|||
|
.LONG 0
|
|||
|
|
|||
|
*SPIN AROUND THE ORB
|
|||
|
SPNORB:
|
|||
|
.LONG ORB1
|
|||
|
.WORD FLIPBITS|2,0
|
|||
|
.LONG ORB2
|
|||
|
.WORD 2
|
|||
|
.LONG ORB3
|
|||
|
.WORD 2
|
|||
|
.LONG ORB4
|
|||
|
.WORD 2
|
|||
|
|
|||
|
.LONG ORB3
|
|||
|
.WORD FLIPBITS|2,M_FLIPH
|
|||
|
.LONG ORB2
|
|||
|
.WORD 2
|
|||
|
.LONG 0
|
|||
|
BOOM4:
|
|||
|
.LONG EXPb1
|
|||
|
.WORD 3
|
|||
|
.LONG EXPb2
|
|||
|
.WORD 3
|
|||
|
.LONG EXPb3
|
|||
|
.WORD 4
|
|||
|
.LONG EXPb4
|
|||
|
.WORD 4
|
|||
|
.LONG EXPb5
|
|||
|
.WORD 4
|
|||
|
.LONG EXPb4
|
|||
|
.WORD 4
|
|||
|
.LONG EXPb3
|
|||
|
.WORD 5
|
|||
|
.LONG EXPb2
|
|||
|
.WORD 5
|
|||
|
.LONG EXPb1
|
|||
|
.WORD 5
|
|||
|
.LONG 0
|
|||
|
|
|||
|
|
|||
|
.END
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|