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