1248 lines
22 KiB
NASM
1248 lines
22 KiB
NASM
|
.FILE 'GAL.ASM'
|
|||
|
.TITLE 'ROBO-RAMA GAME PROGRAM'
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L,T
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
;
|
|||
|
; INITIATED: JANUARY 29,1990
|
|||
|
; MODIFIED: FOREVER....
|
|||
|
; SOFTWARE: EUGENE JARVIS
|
|||
|
;
|
|||
|
; COPYRIGHT (C) 1990 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 "GALAGAS.TBL"
|
|||
|
|
|||
|
;
|
|||
|
;SOUNDS
|
|||
|
;
|
|||
|
.REF EXP3HI,TING2,EXP3
|
|||
|
;
|
|||
|
;SYMBOLS EXTERNALLY DEFINED
|
|||
|
;
|
|||
|
.REF ECON,ORB_LIT,FRANIM,BIG3A,SCRADD2,P1DATA,P2DATA
|
|||
|
.REF PSTOP,ADPCS4,HALT,FLASHME,CIRCUIT
|
|||
|
.REF GET_VALID_XY,GAMSTATE,WAVEYX,BEGINOBJ,BEGINOBJ2,EHALT
|
|||
|
.REF RANDPER,RANDOM,RANGRAND,DRINF,SET_GATE_2,GET_WVADDR,DEXIT
|
|||
|
.REF RANDU,SRAND
|
|||
|
.REF FINDPAL,PALSET,GETFPAL
|
|||
|
.REF GETPLYR,SCORPLAY,ORBBNDCK
|
|||
|
.REF SMLEXP
|
|||
|
;
|
|||
|
;SYMBOLS DEFINED IN THIS FILE
|
|||
|
;
|
|||
|
.DEF SPWN_GAL1,SPWN_GAL2,SPWN_GAL3,GALBUL,GALKIL,SMRT_GAL
|
|||
|
.DEF SPWN_GAL1A,GAL_CNT,MAXGAL,GALTYP,ZOOM4
|
|||
|
|
|||
|
.BSS GALTYP,16
|
|||
|
.BSS MAXGAL,8 ;MAXIMUM ON SCREEN FOR CURRENT WAVE
|
|||
|
.BSS GAL_CNT,16 ;GAL CNT ON SCREEN
|
|||
|
.BSS GAL_DN,16 ;0=NO, 1=YES
|
|||
|
|
|||
|
.TEXT
|
|||
|
|
|||
|
SPWN_GAL3
|
|||
|
;IS ONE SWARM ALREADY OUT?
|
|||
|
;IF SO, SKIP THIS
|
|||
|
MOVE @GAMSTATE,A0,W
|
|||
|
CMPI INAMODE,A0
|
|||
|
JREQ GALRET
|
|||
|
CREATE GALPID,SWARMST ;START A SWARM
|
|||
|
RETS
|
|||
|
|
|||
|
SPWN_GAL1A
|
|||
|
MOVE @GAL_CNT,A2
|
|||
|
MOVB @MAXGAL,A3
|
|||
|
CMP A3,A2 ;SAUCERS MAXED OUT?
|
|||
|
JRGT GALRET
|
|||
|
|
|||
|
CREATE GALPID,CHAINA
|
|||
|
RETS
|
|||
|
|
|||
|
|
|||
|
SPWN_GAL1
|
|||
|
MOVE @GAL_CNT,A2
|
|||
|
MOVB @MAXGAL,A3
|
|||
|
CMP A3,A2 ;SAUCERS MAXED OUT?
|
|||
|
JRGT GALRET
|
|||
|
|
|||
|
CREATE GALPID,CHAIN ;NOT REALLY A CHAIN!
|
|||
|
|
|||
|
GALRET RETS
|
|||
|
|
|||
|
SPWN_GAL2
|
|||
|
*
|
|||
|
*GET YOUR SAUCER GOING
|
|||
|
*
|
|||
|
MOVE @GAL_CNT,A2
|
|||
|
MOVB @MAXGAL,A3
|
|||
|
CMP A3,A2 ;SAUCERS MAXED OUT?
|
|||
|
JRGT GALRET
|
|||
|
; MOVI 1,A8
|
|||
|
;GALSTLP
|
|||
|
CREATE GALPID,GALDISP ;START ONE SAUCER
|
|||
|
; DSJS A8,GALSTLP
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*FORM A SWARM
|
|||
|
*PDATA+>20=LINK TO HEAD (COUNT OF BALLS IN HEAD)
|
|||
|
*PDATA+>60=X ACCEL RATE
|
|||
|
*PDATA+>80=Y ACCEL RATE
|
|||
|
*
|
|||
|
SWARMST
|
|||
|
CALLR SETUP_SWRM
|
|||
|
CALLR INIT_HD ;GET INITIAL GUY
|
|||
|
CREATE TYPGAL+SUBHEAD,HEAD
|
|||
|
MOVE A0,*A8(OPLINK),L
|
|||
|
MOVI 20,A9
|
|||
|
MOVE A9,*A0(PDATA+>20) ;BALL COUNT
|
|||
|
MOVE *A8(OXVAL),A10,L ;SAVE INITIAL COORD
|
|||
|
MOVE *A8(OYVAL),A11,L
|
|||
|
MOVE A0,A2
|
|||
|
MOVI >2000,A0
|
|||
|
CALLA RANDU
|
|||
|
ADDI >2000,A0
|
|||
|
MOVE A0,*A2(PDATA+>60),L ;GET ACCEL RATES
|
|||
|
MOVE A0,*A2(PDATA+>80),L
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A2(PDATA+>A0),L ;ZERO CURRENT ACCEL
|
|||
|
MOVE A0,*A2(PDATA+>C0),L
|
|||
|
MOVE A0,*A2(PDATA+>40),L
|
|||
|
SWMSTLP
|
|||
|
; CALLR SETUP_SWRM
|
|||
|
MOVE A10,A0
|
|||
|
MOVE A11,A1
|
|||
|
MOVE A2,-*SP,L ;SAVE A2
|
|||
|
CALLR INIT_BALL ;ENTRY POINT WITH EXISTING X,Y COORD
|
|||
|
CREATE TYPGAL+SUBBALL,SWARM
|
|||
|
MOVE *SP+,A2,L
|
|||
|
MOVE A2,*A0(PDATA+>20),L ;LINK TO BOSS PROCESS
|
|||
|
MOVE A0,*A8(OPLINK),L
|
|||
|
MOVE A0,A1
|
|||
|
MOVI >8000,A0
|
|||
|
CALLA RANDU
|
|||
|
ADDI >8000,A0
|
|||
|
MOVE A0,*A1(PDATA+>60),L ;GET ACCEL RATES
|
|||
|
MOVE A0,*A1(PDATA+>80),L
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A1(PDATA+>A0),L ;ZERO CURRENT ACCEL
|
|||
|
MOVE A0,*A1(PDATA+>C0),L
|
|||
|
MOVE A0,*A2(PDATA+>40),L
|
|||
|
DSJ A9,SWMSTLP
|
|||
|
DIE
|
|||
|
|
|||
|
; SLEEP 400
|
|||
|
; JRUC SWARMST
|
|||
|
*
|
|||
|
*SWARM O'BALLS
|
|||
|
*
|
|||
|
*PDATA+>20=LINK TO BOSS PROCESS
|
|||
|
*PDATA+>60=X ACCEL RATE
|
|||
|
*PDATA+>80=Y ACCEL RATE
|
|||
|
*PDATA+>A0=X CURR ACCEL
|
|||
|
*PDATA+>C0=Y CURR ACCEL
|
|||
|
*
|
|||
|
SWARM
|
|||
|
CALLR SWMVEL
|
|||
|
SWARML
|
|||
|
MOVI 300,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC SWARM1
|
|||
|
CALLR SWMVEL
|
|||
|
SWARM1
|
|||
|
MOVE *A13(PDATA+>20),A2,L ;GET HEAD PROCESS
|
|||
|
MOVE *A2(PA8),A2,L ;GET HEAD OBJECT
|
|||
|
JREQ SWMX ;HEAD IS DEAD
|
|||
|
MOVE *A13(PDATA+>A0),A4,L ;GET X ACCELL
|
|||
|
MOVE *A8(OXVEL),A0,L
|
|||
|
ADD A4,A0 ;ADD ACCELERATION
|
|||
|
MOVE A0,A1
|
|||
|
SRA 2,A1 ;DAMPING
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
MOVE *A13(PDATA+>C0),A4,L ;GET Y ACCELL
|
|||
|
MOVE *A8(OYVEL),A0,L
|
|||
|
ADD A4,A0 ;ADD ACCELERATION
|
|||
|
MOVE A0,A1
|
|||
|
SRA 2,A1 ;DAMPING
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
CALLA ORBBNDCK ;BOUNCE OFF WALLS
|
|||
|
SLOOP 2,SWARML
|
|||
|
*HEAD IS DEAD, BAG IT DUDES
|
|||
|
SWMX
|
|||
|
MOVK 15,A10 ;GET FLOAT TIME
|
|||
|
SWMXL
|
|||
|
CALLA ORBBNDCK ;BOUNCE OFF WALLS
|
|||
|
SLEEP 4
|
|||
|
DSJS A10,SWMXL
|
|||
|
|
|||
|
CALLA BLCLEAN
|
|||
|
|
|||
|
MOVI EXP3,A0
|
|||
|
CALLA ONESND
|
|||
|
|
|||
|
CREATE 0,GALBLO
|
|||
|
JAUC SUCIDE
|
|||
|
*
|
|||
|
*SWARM VELOCITY
|
|||
|
*
|
|||
|
*PDATA+>20=LINK TO BOSS PROCESS
|
|||
|
*PDATA+>60=X ACCEL RATE
|
|||
|
*PDATA+>80=Y ACCEL RATE
|
|||
|
*PDATA+>A0=X CURR ACCEL
|
|||
|
*PDATA+>C0=Y CURR ACCEL
|
|||
|
SWMVEL
|
|||
|
MOVE *A13(PDATA+>60),A4,L ;GET X ACCELERATION
|
|||
|
MOVE *A13(PDATA+>20),A2,L ;GET HEAD PROCESS
|
|||
|
MOVE *A2(PA8),A2,L ;GET HEAD OBJECT
|
|||
|
JREQ SWMVELX ;HEAD IS DEAD
|
|||
|
MOVE *A2(OXPOS),A1,W ;GET CORE POSITION
|
|||
|
MOVI 12,A0 ;ADD RANDOM
|
|||
|
CALLA SRAND
|
|||
|
ADD A0,A1
|
|||
|
MOVE *A8(OXPOS),A3,W
|
|||
|
SUB A1,A3
|
|||
|
JRN SWMV1
|
|||
|
NEG A4
|
|||
|
SWMV1
|
|||
|
MOVE A4,*A13(PDATA+>A0),L
|
|||
|
MOVE *A13(PDATA+>80),A4,L ;GET Y ACCELERATION
|
|||
|
MOVE *A2(OYPOS),A1,W ;GET CORE POSITION
|
|||
|
MOVI 12,A0 ;ADD RANDOM
|
|||
|
CALLA SRAND
|
|||
|
ADD A0,A1
|
|||
|
MOVE *A8(OYPOS),A3,W
|
|||
|
SUB A1,A3
|
|||
|
JRN SWMV2
|
|||
|
NEG A4
|
|||
|
SWMV2
|
|||
|
MOVE A4,*A13(PDATA+>C0),L
|
|||
|
SWMVELX
|
|||
|
RETS
|
|||
|
*
|
|||
|
*SWARM BOSS
|
|||
|
*PDATA+>20=NUMBER OF SWARMERS LEFT
|
|||
|
*PDATA+>60=X ACCEL RATE
|
|||
|
*PDATA+>80=Y ACCEL RATE
|
|||
|
*PDATA+>A0=X CURR ACCEL
|
|||
|
*PDATA+>C0=Y CURR ACCEL
|
|||
|
*
|
|||
|
HEAD
|
|||
|
MOVI BALLGAL,A9 ;ROTATE THE SUCKER
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
CALLR HDSVEL
|
|||
|
HEADL
|
|||
|
MOVE A8,A8 ;HEAD OBJECT IS DEAD, WAIT AROUND
|
|||
|
JREQ HEADIE
|
|||
|
|
|||
|
MOVI 60,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC HEAD1
|
|||
|
MOVI 60,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC HEAD0
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
HEAD0
|
|||
|
CALLR HDSVEL
|
|||
|
HEAD1
|
|||
|
MOVE *A13(PDATA+>A0),A4,L ;GET X ACCELL
|
|||
|
MOVE *A8(OXVEL),A0,L
|
|||
|
ADD A4,A0 ;ADD ACCELERATION
|
|||
|
MOVE A0,A1
|
|||
|
SRA 3,A1 ;DAMPING
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
MOVE *A13(PDATA+>C0),A4,L ;GET Y ACCELL
|
|||
|
MOVE *A8(OYVEL),A0,L
|
|||
|
ADD A4,A0 ;ADD ACCELERATION
|
|||
|
MOVE A0,A1
|
|||
|
SRA 3,A1 ;DAMPING
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
CALLA ORBBNDCK ;BOUNCE OFF WALLS
|
|||
|
HEAD2
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
JRNC HEADWT
|
|||
|
MOVI BALLGAL,A9
|
|||
|
JRUC HEAD2
|
|||
|
HEADWT
|
|||
|
SLOOP 1,HEADL
|
|||
|
HEADIE
|
|||
|
MOVE *A13(PDATA+>20),A0,W
|
|||
|
JAEQ SUCIDE ;TOTALLY DEAD
|
|||
|
SLOOP 4,HEADIE
|
|||
|
*
|
|||
|
*HEAD OF SWARM VELOCITY
|
|||
|
*A11=PLAYER TO GO AFTER
|
|||
|
*PDATA+>60=X ACCEL RATE
|
|||
|
*PDATA+>80=Y ACCEL RATE
|
|||
|
*PDATA+>A0=X CURR ACCEL
|
|||
|
*PDATA+>C0=Y CURR ACCEL
|
|||
|
*
|
|||
|
HDSVEL
|
|||
|
MOVE *A13(PDATA+>60),A4,L ;GET X ACCELERATION
|
|||
|
MOVE *A11(OXPOS),A1,W ;GET PLAYER POSITION
|
|||
|
MOVI 60,A0 ;ADD RANDOM
|
|||
|
CALLA SRAND
|
|||
|
ADD A0,A1
|
|||
|
MOVE *A8(OXPOS),A3,W
|
|||
|
SUB A1,A3
|
|||
|
JRN HDSV1
|
|||
|
NEG A4
|
|||
|
HDSV1
|
|||
|
MOVE A4,*A13(PDATA+>A0),L
|
|||
|
|
|||
|
MOVE *A13(PDATA+>80),A4,L ;GET Y ACCELERATION
|
|||
|
MOVE *A11(OYPOS),A1,W ;GET PLAYER POSITION
|
|||
|
MOVI 60,A0 ;ADD RANDOM
|
|||
|
CALLA SRAND
|
|||
|
ADD A0,A1
|
|||
|
MOVE *A8(OYPOS),A3,W
|
|||
|
SUB A1,A3
|
|||
|
JRN HDSV2
|
|||
|
NEG A4
|
|||
|
HDSV2
|
|||
|
MOVE A4,*A13(PDATA+>C0),L
|
|||
|
RETS
|
|||
|
*
|
|||
|
*FORM A CHAIN
|
|||
|
*
|
|||
|
CHAIN
|
|||
|
CALLA INIT_GAL ;GET INITIAL GUY
|
|||
|
CALLR SETUP_GAL ;INC CNT, SET DIR, SET DEATH FLAG, ETC
|
|||
|
CREATE TYPGAL,CHNPROC
|
|||
|
MOVE A0,*A8(OPLINK),L
|
|||
|
MOVI 1,A9 ;8
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A0(PDATA+>20),L ;CLEAR BACK LINK OF FIRST GUY
|
|||
|
MOVE *A8(OXVAL),A10,L ;SAVE INITIAL COORD
|
|||
|
MOVE *A8(OYVAL),A11,L
|
|||
|
; MOVE @CHNTOT,A2
|
|||
|
; INC A2
|
|||
|
; MOVE A2,@CHNTOT
|
|||
|
MOVI CLSENMY|TYPGAL|SUBCHN,A5 ;(OID)
|
|||
|
MOVE A5,*A8(OID),W
|
|||
|
;CHANGE TO OTHER PAL
|
|||
|
PUSH A0
|
|||
|
MOVI GALP2,A0 ;GPAL2
|
|||
|
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
|
|||
|
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
|
|||
|
PULL A0
|
|||
|
JRUC GOEND
|
|||
|
|
|||
|
CHAINA
|
|||
|
;REAL TRAIN GALAGA ENEMY
|
|||
|
|
|||
|
MOVE @GALTYP,A1
|
|||
|
JRZ CBA
|
|||
|
CALLA INIT_GAL2 ;GET INITIAL GUY
|
|||
|
;3RD CIRCUIT, CHANGE ARTWORK FOR THIS CHAIN.
|
|||
|
;CHANGE TO OTHER PAL
|
|||
|
MOVI SPDRP,A0
|
|||
|
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
|
|||
|
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
|
|||
|
JRUC CBAA
|
|||
|
|
|||
|
CBA
|
|||
|
CALLA INIT_GAL ;GET INITIAL GUY
|
|||
|
CBAA
|
|||
|
CALLR SETUP_GALA ;INC CNT, SET DIR, SET DEATH FLAG, ETC
|
|||
|
CREATE TYPGAL,CHNPROC
|
|||
|
MOVE A0,*A8(OPLINK),L
|
|||
|
MOVI 8,A9 ;8
|
|||
|
MOVE @GALTYP,A1
|
|||
|
JRZ CBV
|
|||
|
MOVK 3,A9
|
|||
|
CBV
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A0(PDATA+>20),L ;CLEAR BACK LINK OF FIRST GUY
|
|||
|
MOVE *A8(OXVAL),A10,L ;SAVE INITIAL COORD
|
|||
|
MOVE *A8(OYVAL),A11,L
|
|||
|
; MOVE @CHNTOT,A2
|
|||
|
; INC A2
|
|||
|
; MOVE A2,@CHNTOT
|
|||
|
MOVI CLSENMY|TYPGAL|SUBCHN,A5 ;(OID)
|
|||
|
MOVE A5,*A8(OID),W
|
|||
|
CHAINLP
|
|||
|
MOVE A0,A2
|
|||
|
MOVE A10,A0
|
|||
|
MOVE A11,A1
|
|||
|
MOVE A2,-*SP,L ;SAVE A2
|
|||
|
|
|||
|
CALLR INIT_GAL1 ;ENTRY POINT WITH EXISTING X,Y COORD
|
|||
|
|
|||
|
MOVE @GALTYP,A0
|
|||
|
JRZ CBB
|
|||
|
;3RD CIRCUIT, CHANGE ARTWORK FOR THIS CHAIN.
|
|||
|
;CHANGE TO OTHER PAL
|
|||
|
MOVI SPDRP,A0
|
|||
|
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
|
|||
|
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
|
|||
|
CBB
|
|||
|
MOVI CLSENMY|TYPGAL|SUBCHN,A5 ;(OID)
|
|||
|
MOVE A5,*A8(OID),W
|
|||
|
CREATE TYPGAL,CHNPROC
|
|||
|
MOVE @GAL_CNT,A5
|
|||
|
INC A5
|
|||
|
MOVE A5,@GAL_CNT
|
|||
|
MOVE *SP+,A2,L
|
|||
|
MOVE A0,*A8(OPLINK),L
|
|||
|
MOVE A2,*A0(PDATA+>20),L ;BACK LINK TO PREVIOUS
|
|||
|
MOVE A0,*A2(PDATA+>40),L ;FRONT LINK TO NEXT
|
|||
|
DSJ A9,CHAINLP
|
|||
|
GOEND:
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A0(PDATA+>40),L ;CLEAR FRONT LINK OF LAST GUY
|
|||
|
DIE
|
|||
|
|
|||
|
*
|
|||
|
*GALAGA CHAIN PROCESS
|
|||
|
*PDATA=HIT COUNT
|
|||
|
*PDATA+>20=LINK TO PREVIOUS PROCESS
|
|||
|
*PDATA+>40=LINK TO NEXT PROCESS
|
|||
|
CHNPROC
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A13(PDATA),L ;CLEAR BULLET HIT COUNT
|
|||
|
MOVI GRENGAL,A9 ;GET ANIMATION POINTER
|
|||
|
MOVE @GALTYP,A0
|
|||
|
JRZ CP1
|
|||
|
MOVI SPDRGAL,A9 ;GET ANIMATION POINTER
|
|||
|
CP1 MOVE A9,A10
|
|||
|
SLEEP 2
|
|||
|
MOVE @EHALT,A0
|
|||
|
JRNZ CHNPROC ;HALT GALS WHILE PLAYER ENTERS
|
|||
|
JRUC CHN1
|
|||
|
CHN:
|
|||
|
MOVI 20,A0 ;GET NEW PLAYER TO SEEK
|
|||
|
CALLA RANDPER
|
|||
|
JRNC CHNV01 ;NO
|
|||
|
CHN1
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
CHNV01
|
|||
|
MOVE *A13(PDATA+>20),A0,L
|
|||
|
JREQ CHNV02 ;LEADER
|
|||
|
CALLR CHNACC
|
|||
|
JRUC CHNV03
|
|||
|
CHNV02
|
|||
|
CALLR GALACC
|
|||
|
CHNV03
|
|||
|
MOVE *A8(OXVEL),A0,L
|
|||
|
MOVE *A8(OYVEL),A2,L
|
|||
|
CHNV030
|
|||
|
MOVE A0,A1
|
|||
|
ABS A1
|
|||
|
MOVE A2,A3
|
|||
|
ABS A3
|
|||
|
ADD A1,A3
|
|||
|
MOVE @GALTYP,A4
|
|||
|
JRZ GOB
|
|||
|
CMPI >30000,A3 ;40000
|
|||
|
JRUC GOB2
|
|||
|
GOB
|
|||
|
CMPI >20000,A3 ;40000
|
|||
|
GOB2
|
|||
|
JRLS CHNV03A
|
|||
|
MOVE A0,A4
|
|||
|
SRA 3,A4
|
|||
|
SUB A4,A0
|
|||
|
MOVE A2,A6
|
|||
|
SRA 3,A6
|
|||
|
SUB A6,A2
|
|||
|
JRUC CHNV030
|
|||
|
|
|||
|
CHNV03A
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
MOVE A2,*A8(OYVEL),L
|
|||
|
CALLA ORBBNDCK ;CHECK BOUNDARY COLLISION
|
|||
|
SLEEP 2
|
|||
|
CHNV04
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
JRNC CHN
|
|||
|
MOVE A10,A9 ;RESTORE FRANIM LIST PNTR
|
|||
|
JRUC CHNV04
|
|||
|
*
|
|||
|
*CHNACC
|
|||
|
*A0=GUY TO FOLLOW PROCESS
|
|||
|
*A8=GAL
|
|||
|
*
|
|||
|
CHNACC
|
|||
|
MOVE *A0(PA8),A0,L ;GET OBJECT POINTER
|
|||
|
MOVE *A0(OXVAL),A2,L
|
|||
|
MOVE *A0(OYVAL),A3,L
|
|||
|
MOVE *A8(OXVAL),A4,L
|
|||
|
MOVE *A8(OYVAL),A5,L
|
|||
|
SUB A4,A2
|
|||
|
SUB A5,A3
|
|||
|
SRA 6,A2
|
|||
|
SRA 6,A3
|
|||
|
MOVE @GALTYP,A1
|
|||
|
JRZ CHG1
|
|||
|
SLA 1,A2
|
|||
|
SLA 1,A3
|
|||
|
CHG1
|
|||
|
MOVE *A8(OYVEL),A0,L
|
|||
|
ADD A3,A0
|
|||
|
MOVE A0,A1 ;DAMPING
|
|||
|
SRA 3,A1
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
|
|||
|
MOVE *A8(OXVEL),A0,L
|
|||
|
ADD A2,A0
|
|||
|
MOVE A0,A1 ;DAMPING
|
|||
|
SRA 3,A1
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
RETS
|
|||
|
*
|
|||
|
*SAUCER START PROCESS
|
|||
|
*
|
|||
|
GALDISP
|
|||
|
CALLR GETDRA
|
|||
|
CALLA INIT_GALA
|
|||
|
CALLR SETUP_GALB ;INC CNT, SET DIR, SET DEATH FLAG, ETC
|
|||
|
*
|
|||
|
* PURPLE GALAGA PROCESS
|
|||
|
* A8=OBJECT
|
|||
|
* A11=PLAYER TO SEEK
|
|||
|
* A13=PROCESS
|
|||
|
* PDATA=BULLET HIT COUNT
|
|||
|
* 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 ;NULL OUT LINKS
|
|||
|
MOVE A0,*A13(PDATA+>40),L ;NULL OUT LINKS
|
|||
|
MOVI PURPGAL,A9 ;GET ANIMATION POINTER
|
|||
|
SLEEP 2
|
|||
|
MOVE @EHALT,A0
|
|||
|
JRNZ LUP_TOP ;HALT GALS WHILE PLAYER ENTERS
|
|||
|
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
CALLA GETGALV
|
|||
|
MV:
|
|||
|
|
|||
|
; MOVI 100,A0 ;GET NEW VELOCITY?
|
|||
|
; CALLA RANDPER
|
|||
|
; JRNC MVV01 ;NO
|
|||
|
; CALLR GETGALV
|
|||
|
CALLR GALACC
|
|||
|
|
|||
|
|
|||
|
|
|||
|
MOVE *A8(OXVEL),A0,L
|
|||
|
MOVE *A8(OYVEL),A2,L
|
|||
|
PRP030
|
|||
|
MOVE A0,A1
|
|||
|
ABS A1
|
|||
|
MOVE A2,A3
|
|||
|
ABS A3
|
|||
|
ADD A1,A3
|
|||
|
CMPI >40000,A3 ;40000
|
|||
|
JRLS PRP03A
|
|||
|
MOVE A0,A4
|
|||
|
SRA 3,A4
|
|||
|
SUB A4,A0
|
|||
|
MOVE A2,A6
|
|||
|
SRA 3,A6
|
|||
|
SUB A6,A2
|
|||
|
JRUC PRP030
|
|||
|
|
|||
|
PRP03A
|
|||
|
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
MOVE A2,*A8(OYVEL),L
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
MOVI 20,A0 ;GET NEW PLAYER TO SEEK
|
|||
|
CALLA RANDPER
|
|||
|
JRNC MVV01 ;NO
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE A0,A11
|
|||
|
MVV01
|
|||
|
CALLA ORBBNDCK ;CHECK BOUNDARY COLLISION
|
|||
|
|
|||
|
SLEEP 2
|
|||
|
MVV02
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
JRNC MV
|
|||
|
MOVI PURPGAL,A9
|
|||
|
JRUC MVV02
|
|||
|
*
|
|||
|
*GET SAUCER VELOCITY
|
|||
|
*TOTALLY RANDOM VELOCITY
|
|||
|
*RETURNS PDATA+>40 XACC; PDATA+>50 YACC
|
|||
|
*
|
|||
|
GETGALV
|
|||
|
MOVI >20000,A0
|
|||
|
CALLA SRAND
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
MOVI >20000,A0
|
|||
|
CALLA SRAND
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
RETS
|
|||
|
*
|
|||
|
*COMPUTE DISTANCE TO PLAYER BEING SEEKED
|
|||
|
*GET GALAGA ACCELERATION FOR ORBIT
|
|||
|
*
|
|||
|
GALACC
|
|||
|
MOVE *A8(OXPOS),A2,W
|
|||
|
MOVE *A8(OYPOS),A4,W
|
|||
|
MOVE *A11(OXPOS),A3,W
|
|||
|
MOVE *A11(OYPOS),A5,W
|
|||
|
SUB A2,A3
|
|||
|
MOVE A3,A6
|
|||
|
SUB A4,A5
|
|||
|
MOVE A5,A7
|
|||
|
MPYS A3,A3
|
|||
|
MPYS A5,A5
|
|||
|
ADD A3,A5
|
|||
|
MOVE A5,A1
|
|||
|
CALLA SQROOT
|
|||
|
MOVE A1,A2
|
|||
|
MOVI >7FFFFFFFF,A5
|
|||
|
DIVU A1,A5 ;CALC 1/D
|
|||
|
SRL 15,A5 ;ADJUST MAGNITUDE
|
|||
|
MOVE A6,A3
|
|||
|
MPYS A5,A3 ;X ACCEL
|
|||
|
MPYS A5,A7 ;Y ACCEL
|
|||
|
SRA 5,A3 ;ADJUST MAGNITUDE
|
|||
|
SRA 5,A7
|
|||
|
MOVE A3,A4
|
|||
|
MOVE A7,A5
|
|||
|
NEG A5
|
|||
|
SRA 4,A4 ;90 DEGREE ACCEL
|
|||
|
SRA 4,A5
|
|||
|
MOVE *A8(OYVEL),A0,L
|
|||
|
ADD A4,A0
|
|||
|
ADD A7,A0
|
|||
|
MOVE A0,A1 ;DAMPING
|
|||
|
SRA 7,A1
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
|
|||
|
|
|||
|
MOVE *A8(OXVEL),A0,L
|
|||
|
ADD A5,A0
|
|||
|
ADD A3,A0
|
|||
|
MOVE A0,A1 ;DAMPING
|
|||
|
SRA 7,A1
|
|||
|
SUB A1,A0
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
|
|||
|
RETS
|
|||
|
*
|
|||
|
*OPEN THE DOOR
|
|||
|
*RET A0=OXVAL, A1=OYVAL, A6=OXVEL, A7=OYVEL
|
|||
|
*
|
|||
|
GETDRA MOVK 3,A0
|
|||
|
JRUC GD1
|
|||
|
GETDOOR
|
|||
|
MOVK 4,A0
|
|||
|
GD1 CALLA RANDU
|
|||
|
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 GAL 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
|
|||
|
;NOW GIVE X/Y VEL FOR THIS GAL
|
|||
|
MOVI GALXV,A7
|
|||
|
ADD A2,A7
|
|||
|
MOVE *A7,A6,L
|
|||
|
ADDI GALYV-GALXV,A7
|
|||
|
MOVE *A7,A7,L
|
|||
|
RETS
|
|||
|
;DOOR #
|
|||
|
; 3
|
|||
|
;1 2
|
|||
|
; 4
|
|||
|
|
|||
|
GALXV: .LONG 0,10000H,-10000H,0,0
|
|||
|
GALYV: .LONG 0,0,0,10000H,-10000H
|
|||
|
;
|
|||
|
;INITIAL HEAD POSITION,IMAGE SHAPE,AGE ETC....
|
|||
|
;
|
|||
|
INIT_HD:
|
|||
|
CALLR GETDOOR
|
|||
|
MOVI GA1B,A2 ;(OIMG)
|
|||
|
MOVI >9E,A3 ;(OZPOS)
|
|||
|
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
|
|||
|
MOVI CLSENMY|TYPGAL|SUBHEAD,A5 ;(OID)
|
|||
|
CALLA BEGINOBJ
|
|||
|
JRUC CLR_MY_PAL
|
|||
|
; MOVE *A8(OPAL),A0,L
|
|||
|
; ANDI 0FFFFH,A0
|
|||
|
; MOVE A0,*A8(OPAL),L
|
|||
|
; RETS
|
|||
|
;
|
|||
|
;INITIAL SWARMER POSITION,IMAGE SHAPE, ETC....
|
|||
|
;
|
|||
|
INIT_BALL:
|
|||
|
CLR A6 ;(OXVEL)
|
|||
|
CLR A7 ;(OYVEL)
|
|||
|
MOVI SPHERE,A2 ;(OIMG)
|
|||
|
MOVI >9E,A3 ;(OZPOS)
|
|||
|
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
|
|||
|
MOVI CLSENMY|TYPGAL|SUBBALL,A5 ;(OID)
|
|||
|
CALLA BEGINOBJ2
|
|||
|
JRUC CLR_MY_PAL
|
|||
|
; MOVE *A8(OPAL),A0,L
|
|||
|
; ANDI 0FFFFH,A0
|
|||
|
; MOVE A0,*A8(OPAL),L
|
|||
|
; RETS
|
|||
|
*
|
|||
|
*INITIAL GAL POSITION, IMAGE SHAPE, AGE ETC....
|
|||
|
*DO STFOBF AND GET A0 PNTR
|
|||
|
*
|
|||
|
INIT_GAL2:
|
|||
|
CALLR GETDRA
|
|||
|
JRUC INIT_GALA
|
|||
|
INIT_GAL:
|
|||
|
CALLR GETDOOR
|
|||
|
INIT_GALA
|
|||
|
CALLR IH1
|
|||
|
CALLA BEGINOBJ
|
|||
|
JRUC CLR_MY_PAL
|
|||
|
|
|||
|
; MOVE *A8(OPAL),A0,L
|
|||
|
; ANDI 0FFFFH,A0
|
|||
|
; MOVE A0,*A8(OPAL),L
|
|||
|
; RETS
|
|||
|
;
|
|||
|
;A0=OXVAL
|
|||
|
;A1=OYVAL
|
|||
|
INIT_GAL1 ;ENTRY POINT WITH EXISTING X,Y COORD
|
|||
|
CLR A6 ;(OXVEL)
|
|||
|
CLR A7 ;(OYVEL)
|
|||
|
CALLR IH1
|
|||
|
MOVI GALC1,A2 ;SET IMAGE FOR GREEN DUDE
|
|||
|
CALLA BEGINOBJ2
|
|||
|
CLR_MY_PAL
|
|||
|
MOVE *A8(OPAL),A0,L
|
|||
|
ANDI 0FFFFH,A0
|
|||
|
MOVE A0,*A8(OPAL),L
|
|||
|
RETS
|
|||
|
;
|
|||
|
;STUFF NEEDED SHIT
|
|||
|
;A0=OXVAL
|
|||
|
;A1=OYVAL
|
|||
|
;A6=OXVEL
|
|||
|
;A7=OYVEL
|
|||
|
IH1: ;ENTER HERE IF ON SCRN TANK
|
|||
|
MOVI GB1,A2 ;(OIMG)
|
|||
|
MOVI 9EH,A3 ;(OZPOS)
|
|||
|
; MOVI 230,A3 ;(OZPOS)
|
|||
|
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
|
|||
|
MOVI CLSENMY|TYPGAL,A5 ;(OID)
|
|||
|
RETS
|
|||
|
|
|||
|
SETUP_SWRM:
|
|||
|
MOVI GALS3,A2
|
|||
|
CALLA GET_WVADDR
|
|||
|
JRUC SETA
|
|||
|
SETUP_GALB:
|
|||
|
MOVI GALS2,A2
|
|||
|
CALLA GET_WVADDR
|
|||
|
JRUC SETA
|
|||
|
SETUP_GALA:
|
|||
|
MOVI GALS1A,A2
|
|||
|
CALLA GET_WVADDR
|
|||
|
JRUC SETA
|
|||
|
SETUP_GAL:
|
|||
|
MOVI GALS1,A2
|
|||
|
CALLA GET_WVADDR
|
|||
|
SETA
|
|||
|
;
|
|||
|
; UPDATE GAL COUNT
|
|||
|
;
|
|||
|
MOVE @GAL_CNT,A2
|
|||
|
INC A2
|
|||
|
MOVE A2,@GAL_CNT
|
|||
|
|
|||
|
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS GAL
|
|||
|
DEC A1
|
|||
|
MOVE A1,*A0(16),W
|
|||
|
|
|||
|
RETS
|
|||
|
|
|||
|
SX: .LONG 0,-040000H,01960000H,0CA0000H,0CA0000H
|
|||
|
SY: .LONG 0,0830000H,0830000H,20000H,01140000H
|
|||
|
|
|||
|
*
|
|||
|
*CLEAN UP GAL MESS
|
|||
|
*A8=GAL
|
|||
|
*
|
|||
|
GALCLEAN
|
|||
|
MOVE *A8(OPLINK),A0,L ;LINK AROUND DUDE IN CHAIN
|
|||
|
MOVE *A8(OID),A1,W
|
|||
|
ZEXT A1,W
|
|||
|
CMPI CLSENMY|TYPGAL|SUBHEAD,A1 ;(OID)
|
|||
|
JRZ GALCLN00
|
|||
|
CMPI CLSENMY|TYPGAL|SUBBALL,A1 ;(OID)
|
|||
|
JRZ GALCLN00
|
|||
|
MOVE *A0(PDATA+>40),A1,L
|
|||
|
MOVE *A0(PDATA+>20),A2,L
|
|||
|
JREQ GALCLN0 ;TEST FOR NULL LINK
|
|||
|
MOVE A1,*A2(PDATA+>40),L
|
|||
|
GALCLN0
|
|||
|
MOVE A1,A1
|
|||
|
JREQ GALCLN00
|
|||
|
MOVE A2,*A1(PDATA+>20),L
|
|||
|
GALCLN00
|
|||
|
CALLA KILL ;KILLS PROCESS IN A0
|
|||
|
GALCLN1
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
MOVE @GAL_CNT,A0,W ;DELETE A FAT FROM CNT
|
|||
|
DEC A0
|
|||
|
MOVE A0,@GAL_CNT,W
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GAL HIT BY BULLET
|
|||
|
*A8=GAL
|
|||
|
*A0=BULLET THAT HIT US
|
|||
|
*
|
|||
|
GALBUL
|
|||
|
MMTM SP,A0,A1,A2,A3,A7
|
|||
|
MOVE *A8(OID),A1,W
|
|||
|
ZEXT A1,W
|
|||
|
CMPI CLSENMY|TYPGAL|SUBHEAD,A1 ;(OID)
|
|||
|
JREQ GALBULHD
|
|||
|
CMPI CLSENMY|TYPGAL|SUBBALL,A1 ;(OID)
|
|||
|
JREQ GALBULBL
|
|||
|
CMPI CLSENMY|TYPGAL|SUBCHN,A1 ;(OID)
|
|||
|
JREQ GALBULCH
|
|||
|
|
|||
|
; JRUC GALBULCH
|
|||
|
|
|||
|
|
|||
|
MOVE *A0(OXVEL),A1,L ;GIVE IT A PUSH
|
|||
|
MOVE *A8(OXVEL),A2,L
|
|||
|
SRA 1,A1
|
|||
|
ADD A1,A2
|
|||
|
MOVE A2,*A8(OXVEL),L
|
|||
|
MOVE *A0(OYVEL),A1,L
|
|||
|
MOVE *A8(OYVEL),A3,L
|
|||
|
SRA 1,A1 ;2,A1
|
|||
|
ADD A1,A3
|
|||
|
MOVE A3,*A8(OYVEL),L
|
|||
|
MOVE *A8(OPLINK),A7,L
|
|||
|
|
|||
|
MOVE *A0(OID),A1
|
|||
|
ZEXT A1,W
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A1
|
|||
|
JRZ GALBUL2
|
|||
|
|
|||
|
|
|||
|
|
|||
|
MOVE *A7(PDATA),A1,W ;INCREMENT HIT COUNT
|
|||
|
INC A1
|
|||
|
MOVE A1,*A7(PDATA),W
|
|||
|
CMPI 2,A1 ;4
|
|||
|
JRHS GALBUL2 ;TOO MANY HITS, BLOW IT UP
|
|||
|
CALLR BULEXP
|
|||
|
JRUC GALBULX
|
|||
|
|
|||
|
GALBULCH
|
|||
|
;TING SND
|
|||
|
|
|||
|
MOVE *A0(OXVEL),A1,L ;GIVE IT A PUSH
|
|||
|
MOVE *A8(OXVEL),A2,L
|
|||
|
SRA 1,A1
|
|||
|
ADD A1,A2
|
|||
|
MOVE A2,*A8(OXVEL),L
|
|||
|
MOVE *A0(OYVEL),A1,L
|
|||
|
MOVE *A8(OYVEL),A3,L
|
|||
|
SRA 1,A1 ;2,A1
|
|||
|
ADD A1,A3
|
|||
|
MOVE A3,*A8(OYVEL),L
|
|||
|
MOVE *A8(OPLINK),A7,L
|
|||
|
MOVE *A0(OID),A1
|
|||
|
ZEXT A1,W
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A1
|
|||
|
JRZ GALBUL2
|
|||
|
|
|||
|
MOVE *A7(PDATA),A1,W ;INCREMENT HIT COUNT
|
|||
|
INC A1
|
|||
|
MOVE A1,*A7(PDATA),W
|
|||
|
CMPI 4,A1 ;4
|
|||
|
JRHS GALBUL2 ;TOO MANY HITS, BLOW IT UP
|
|||
|
CALLR BULEXP
|
|||
|
MOVI TING2,A0
|
|||
|
CALLA ONESND
|
|||
|
JRUC GALBULX
|
|||
|
*
|
|||
|
*GAL IS HISTORY
|
|||
|
*
|
|||
|
GALBUL2
|
|||
|
|
|||
|
MOVI GALPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
CALLA SCORPLAY
|
|||
|
CALLA GALCLEAN
|
|||
|
CREATE 0,GALBLO
|
|||
|
GALBULX
|
|||
|
MMFM SP,A0,A1,A2,A3,A7
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*HEAD HIT BY BULLET
|
|||
|
*
|
|||
|
GALBULHD
|
|||
|
MOVI HEADPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
CALLA SCORPLAY
|
|||
|
CALLA HDCLEAN
|
|||
|
CREATE 0,GALBLO
|
|||
|
MMFM SP,A0,A1,A2,A3,A7
|
|||
|
RETS
|
|||
|
*
|
|||
|
*SWARM BALL HIT BY BULLET
|
|||
|
*
|
|||
|
GALBULBL
|
|||
|
MOVI SWARMPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
CALLA SCORPLAY
|
|||
|
CALLA BLCLEAN
|
|||
|
CREATE 0,GALBLO
|
|||
|
MMFM SP,A0,A1,A2,A3,A7
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLEAN UP SWARM HEAD
|
|||
|
*
|
|||
|
HDCLEAN
|
|||
|
MOVE *A8(OPLINK),A1,L
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A1(PA8),L ;INDICATE OBJECT IS DEAD
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLEAN UP AFTER BALLS
|
|||
|
*
|
|||
|
BLCLEAN
|
|||
|
MOVE *A8(OPLINK),A0,L ;GET PROCESS
|
|||
|
CALLA KILL ;KILLS PROCESS IN A0
|
|||
|
MOVE *A0(PDATA+>20),A1,L ;GET BOSS
|
|||
|
DECW *A1(PDATA+>20) ;DECREMENT COUNT
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*FLATFACE BULLET EXPLOSION
|
|||
|
*A0=BULLET
|
|||
|
*A8=FACE PART
|
|||
|
*
|
|||
|
BULEXP
|
|||
|
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9
|
|||
|
MOVI TING2,A0
|
|||
|
CALLA ONESND
|
|||
|
;FLASH SAUCER
|
|||
|
MOVI 03F3F0000H,A9
|
|||
|
CREATE 0,FLASHME
|
|||
|
|
|||
|
MOVE *A0(OYVAL),A1,L
|
|||
|
MOVE *A0(OXVAL),A0,L
|
|||
|
MOVI EXPb1,A2 ;(OIMG)
|
|||
|
MOVI 231,A3 ;(OZPOS)
|
|||
|
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
|
|||
|
MOVI CLSNEUT,A5 ;(OID)
|
|||
|
CLR A6 ;XV
|
|||
|
CLR A7 ;YV
|
|||
|
CALLA BEGINOBJ2
|
|||
|
MOVI SMLEXP,A9
|
|||
|
BULEXP1
|
|||
|
CREATE 0,BEXPRC
|
|||
|
MOVE A0,*A8(OPLINK),L ;FIX PROCESS LINK
|
|||
|
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9
|
|||
|
RETS
|
|||
|
*
|
|||
|
*BULLET EXPLOSION
|
|||
|
*A8=OBJECT
|
|||
|
*A9=ANIMATION
|
|||
|
BEXPRC
|
|||
|
MOVI EXP3,A0 ;AUDIO BOMB EXPLODE
|
|||
|
CALLA ONESND
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE A8,A0 ;KILL THE SHIT AND DIE
|
|||
|
CALLA DELOBJ
|
|||
|
; CALLA DELPAL
|
|||
|
JAUC SUCIDE
|
|||
|
|
|||
|
;SMART BOMB DEATH!
|
|||
|
;A8=GAL
|
|||
|
;A9=P1 OR P2DATA OF WHO SMARTED ME
|
|||
|
; MOVI GALPT,A1 ;AMOUNT OF SCORE FOR ORB
|
|||
|
; CALLA SCRADD2 ;DO IT!
|
|||
|
; CALLR GALCLEAN
|
|||
|
; CALLR OEXP
|
|||
|
; RETS
|
|||
|
*
|
|||
|
*KILL GAL BECAUSE OF COLLISION WITH RING
|
|||
|
*ENTER HERE FROM COLLISION ROUTINE - RINGS KILL GAL
|
|||
|
*A8=GAL
|
|||
|
*
|
|||
|
GALKIL
|
|||
|
MMTM SP,A0,A1,A2,A3,A7
|
|||
|
MOVE *A8(OID),A1,W
|
|||
|
ZEXT A1,W
|
|||
|
CMPI CLSENMY|TYPGAL|SUBHEAD,A1 ;(OID)
|
|||
|
JREQ GALBULHD
|
|||
|
CMPI CLSENMY|TYPGAL|SUBBALL,A1 ;(OID)
|
|||
|
JREQ GALBULBL
|
|||
|
|
|||
|
MOVI GALPT,A1 ;AMOUNT OF SCORE FOR GAL
|
|||
|
CALLA SCORPLAY
|
|||
|
CALLR GALCLEAN
|
|||
|
CALLR OEXP2 ;CHUNKS
|
|||
|
MMFM SP,A0,A1,A2,A3,A7
|
|||
|
RETS
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SMRT_GAL:
|
|||
|
;SMART BOMB GALAGA
|
|||
|
;A8=GAL
|
|||
|
;A9=P1/P2DATA
|
|||
|
MOVI GALPT,A1 ;AMOUNT OF SCORE FOR GAL
|
|||
|
MOVE A9,A2 ;PLAYER
|
|||
|
CALLA SCRADD2 ;DO IT!
|
|||
|
|
|||
|
CALLR GALCLEAN
|
|||
|
CALLR OEXP2 ;CHUNKS
|
|||
|
CLR A0
|
|||
|
MOVE A0,@GAL_CNT
|
|||
|
RETS
|
|||
|
*
|
|||
|
*ORB EXPLOSION PROCESS SMART BOMB, RINGS
|
|||
|
*
|
|||
|
OEXP2
|
|||
|
OEXP
|
|||
|
MOVI EXP3HI,A0
|
|||
|
CALLA ONESND
|
|||
|
CREATE 0,BIG3A
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GALAGA EXPLOSION PROCESS
|
|||
|
*A8=ORB
|
|||
|
*
|
|||
|
GALBLO:
|
|||
|
CLR A6
|
|||
|
CLR A7
|
|||
|
CALLA GETANIXY
|
|||
|
ADDI 050000H,A2 ;A1=Y OFFSET
|
|||
|
MOVE A2,A1
|
|||
|
MOVE A3,A0
|
|||
|
MOVI 199,A3 ;259
|
|||
|
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
|
|||
|
MOVI CLSNEUT|TYPNEUT,A5
|
|||
|
MOVI EXPb1,A2
|
|||
|
CALLA BEGINOBJ2
|
|||
|
|
|||
|
;CREATE EXPLOSION, AND THEN DIE
|
|||
|
MOVI EXP3,A0
|
|||
|
CALLA ONESND
|
|||
|
MOVI ZOOM4,A9
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
DIE
|
|||
|
ZOOM4:
|
|||
|
.LONG BC1
|
|||
|
.WORD NEWPALET|3
|
|||
|
.LONG nup2
|
|||
|
.LONG BC4
|
|||
|
.WORD 3
|
|||
|
.LONG MRM1
|
|||
|
.WORD 3
|
|||
|
.LONG MRM2
|
|||
|
.WORD 3
|
|||
|
.LONG MRM3
|
|||
|
.WORD 3
|
|||
|
.LONG MRM4
|
|||
|
.WORD 3
|
|||
|
.LONG CLD5
|
|||
|
.WORD 3
|
|||
|
.LONG CLD6
|
|||
|
.WORD 3
|
|||
|
.LONG CLD7
|
|||
|
.WORD 3
|
|||
|
.LONG CLD8
|
|||
|
.WORD 3
|
|||
|
.LONG CLD9
|
|||
|
.WORD 3
|
|||
|
.LONG CLD10
|
|||
|
.WORD 3
|
|||
|
.LONG CLD11
|
|||
|
.WORD 3
|
|||
|
.LONG 0
|
|||
|
|
|||
|
|
|||
|
|
|||
|
; .LONG EXPb1
|
|||
|
; .WORD NEWPALET|3
|
|||
|
; .LONG BULLET
|
|||
|
; .LONG EXPb2
|
|||
|
; .WORD NEWPALET|3
|
|||
|
; .LONG BULLET
|
|||
|
; .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
|
|||
|
*
|
|||
|
*SQUARE ROOT ROUTINE
|
|||
|
*A1= 32 BIT NUMBER UNSIGNED
|
|||
|
*RETURNS: A1=SQUARE ROOT (16 BIT INTEGER)
|
|||
|
*
|
|||
|
SQROOT:
|
|||
|
MMTM SP,A2,A3,A4,A5
|
|||
|
LMO A1,A2 ;FIND # OF BITS
|
|||
|
SUBK 31,A2
|
|||
|
NEG A2
|
|||
|
ADDK 2,A2
|
|||
|
SRL 1,A2 ;GET RID OF GARBAGE
|
|||
|
MOVI 32,A3
|
|||
|
SUB A2,A3
|
|||
|
NEG A3
|
|||
|
MOVK 1,A4
|
|||
|
RL 31,A4 ;SET MSB IN A5
|
|||
|
SRL A3,A4
|
|||
|
MOVE A4,A3
|
|||
|
SQRL
|
|||
|
SRL 1,A3
|
|||
|
JREQ SQRX ;FINISHED ITERATING
|
|||
|
MOVE A4,A5
|
|||
|
MPYU A4,A5
|
|||
|
CMP A5,A1
|
|||
|
JRLO SQR1
|
|||
|
JREQ SQRX
|
|||
|
ADD A3,A4
|
|||
|
JRUC SQRL
|
|||
|
SQR1
|
|||
|
SUB A3,A4
|
|||
|
JRUC SQRL
|
|||
|
SQRX
|
|||
|
MOVE A4,A1
|
|||
|
MMFM SP,A2,A3,A4,A5
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GALAGA ANIMATIONS
|
|||
|
*
|
|||
|
PURPGAL
|
|||
|
.LONG GB1
|
|||
|
.WORD 4
|
|||
|
.LONG GB2
|
|||
|
.WORD 4
|
|||
|
.LONG GB3
|
|||
|
.WORD 4
|
|||
|
.LONG GB4
|
|||
|
.WORD 4
|
|||
|
.LONG GB5
|
|||
|
.WORD 4
|
|||
|
.LONG 0
|
|||
|
GRENGAL
|
|||
|
.LONG GALC1
|
|||
|
.WORD 4
|
|||
|
.LONG GALC2
|
|||
|
.WORD 4
|
|||
|
.LONG GALC3
|
|||
|
.WORD 4
|
|||
|
.LONG GALC4
|
|||
|
.WORD 4
|
|||
|
.LONG GALC5
|
|||
|
.WORD 4
|
|||
|
.LONG 0
|
|||
|
SPDRGAL
|
|||
|
.LONG glg1
|
|||
|
.WORD 3
|
|||
|
.LONG glg2
|
|||
|
.WORD 2
|
|||
|
.LONG glg3
|
|||
|
.WORD 3
|
|||
|
.LONG glg4
|
|||
|
.WORD 2
|
|||
|
.LONG glg5
|
|||
|
.WORD 3
|
|||
|
.LONG glg4
|
|||
|
.WORD 2
|
|||
|
.LONG glg3
|
|||
|
.WORD 3
|
|||
|
.LONG glg2
|
|||
|
.WORD 2
|
|||
|
.LONG 0
|
|||
|
BALLGAL
|
|||
|
.LONG GA1
|
|||
|
.WORD 4
|
|||
|
.LONG GA2
|
|||
|
.WORD 4
|
|||
|
.LONG GA3
|
|||
|
.WORD 4
|
|||
|
.LONG GA4
|
|||
|
.WORD 4
|
|||
|
.LONG GA5
|
|||
|
.WORD 4
|
|||
|
.LONG GA6
|
|||
|
.WORD 4
|
|||
|
.LONG 0
|
|||
|
|
|||
|
.END
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|