325 lines
6.2 KiB
NASM
325 lines
6.2 KiB
NASM
.FILE 'POW2.ASM (ORBITING LASER)'
|
||
.TITLE 'ROBO-RAMA GAME PROGRAM'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
;
|
||
; INITIATED: APRIL 26,1989
|
||
; MODIFIED: !
|
||
; SOFTWARE: MARK TURMELL & ROBERT ASHWORTH
|
||
;
|
||
; 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"
|
||
;
|
||
;SOUND HEADERS USED
|
||
;
|
||
.REF WOO2
|
||
;
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
;
|
||
.REF PUTA7,FLASHME
|
||
.REF GETANIXY,AFONT0
|
||
.REF GPALOBJ,STFOBJ,INSOBJ,ADJSTWTL
|
||
.REF FRANIM,KILOBJ,KILALL
|
||
.REF SCRTST
|
||
.REF DELOBJ
|
||
.REF GETCOS
|
||
.REF GETSIN
|
||
.REF DO_BND
|
||
.REF EXISTP
|
||
.REF KILL
|
||
.REF ICNFLG
|
||
;
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
;
|
||
.DEF POW2ON,LSHIT
|
||
.DEF LASRX,LASRY,ALIGNXY
|
||
;
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
;
|
||
.BSS LASRX,32
|
||
.BSS LASRY,32
|
||
|
||
;
|
||
;EQUATES
|
||
;
|
||
ADLTA .EQU (411775/(160/2))
|
||
|
||
; LASER/BLADES DATA STRUCTURE
|
||
;
|
||
PTRX .EQU PDATA ;UHW ;LAST X
|
||
PTRY .EQU PDATA+16 ;UHW ;LAST Y
|
||
ANIMTIK .EQU PDATA+32 ;UHL ;FRAME SLEEP TIME
|
||
THETA .EQU PDATA+64 ;SHL ;CURRENT PROGRESSION
|
||
DELTA .EQU PDATA+96 ;SHL ;DELTA ANGLE
|
||
LEG .EQU PDATA+128 ;UHL LEG OF PLAYER WHO COLLECTED ME
|
||
;
|
||
|
||
;
|
||
;EQUATES FOR THIS FILE
|
||
;
|
||
;
|
||
.TEXT
|
||
;
|
||
POW2ON:
|
||
;FROM COLLISION ROUTINE!
|
||
MOVE A0,A9 ;LEG PTR OF WHO GOT ME
|
||
; MOVE *A0(OPLINK),A0,L
|
||
; MOVK 1,A1
|
||
; MOVB A1,*A0(LSRFLG) ;HELPER ON FLAG FOR THIS PLAYER;
|
||
MOVE A8,A0
|
||
CALLA DELOBJ
|
||
MOVI WOO2,A0
|
||
CALLA ONESND
|
||
MOVK 1,A11 ;1 ORBITING OBJECT
|
||
ALL1:
|
||
CREATE LSRPID,LASER
|
||
DSJS A11,ALL1
|
||
RETS
|
||
|
||
; DO LASER MOVEMENT LOGIC
|
||
;A11 = OFFSET FOR VECTOR POINT FOR STARTING POSITION OF LASER
|
||
LASER:
|
||
;A9=LEG IMG PNTR OF PLAYER WHO TOUCHED ME
|
||
MOVE *A9(OPLINK),A7,L
|
||
MOVK 1,A0
|
||
MOVB A0,*A7(BNDTYP)
|
||
MOVB A0,@ICNFLG
|
||
CALLA DO_BND
|
||
|
||
CLR A0
|
||
MOVB A0,*A13(ANIMTIK)
|
||
MOVI ADLTA,A0
|
||
MOVE A0,*A13(DELTA),L
|
||
CALLA SETPOINT
|
||
;
|
||
ENCIRCLE:
|
||
; MAKE LASER MOVE IN A CIRCLE AROUND PLAYER
|
||
|
||
CALLA ANILASER ;ANIMATE LASER
|
||
CALLR ALIGNXY ;KEEP OBJECT ALIGNED WITH PLAYER
|
||
MOVE *A13(THETA),A2,L ;PROGRESSIVE THETA
|
||
MOVE *A13(DELTA),A0,L ;NEXT DELTA ANGLE
|
||
ADD A2,A0
|
||
CALLA GETCOS
|
||
MOVE A0,A11
|
||
MOVK 2,A0
|
||
MPYS A0,A11
|
||
MOVE A14,*A13(THETA),L
|
||
MOVE A14,A0
|
||
CALLA GETSIN
|
||
MOVE A0,A3
|
||
MOVK 2,A0
|
||
MPYS A0,A3
|
||
MOVE A3,A10
|
||
MOVE *A8(OXVAL),A3,L
|
||
MOVE *A8(OYVAL),A4,L
|
||
ADD A11,A3
|
||
ADD A10,A4
|
||
MOVE A3,*A8(OXVAL),L
|
||
MOVE A4,*A8(OYVAL),L
|
||
SLOOP 1,ENCIRCLE
|
||
ANILASER:
|
||
;ANIMATE LASER
|
||
MOVB *A13(ANIMTIK),A0
|
||
DEC A0
|
||
MOVB A0,*A13(ANIMTIK)
|
||
JRNN NOTNEXT
|
||
;FALLS HERE IF NEGATIVE
|
||
MOVK 4,A1
|
||
JSRP FRANIM ;1 FRAME STEP
|
||
MOVB A0,*A13(ANIMTIK) ;SAVE SLEEP TIME BETWEEN FRAMES
|
||
JRNC NOTNEXT
|
||
MOVI FLASER,A9
|
||
NOTNEXT:
|
||
CALLA GETANIXY
|
||
MOVE A2,@LASRY,L
|
||
MOVE A3,@LASRX,L
|
||
RETS
|
||
;
|
||
LASERDIE:
|
||
MOVE A11,*A8(OXVEL),L
|
||
MOVE A10,*A8(OYVEL),L
|
||
;TURN HELPER WHITE, FLOAT AWAY
|
||
; CLR A0
|
||
; MOVE A0,*A8(OID)
|
||
FLYER:
|
||
; CALLR ANILASER ;DO ANIMATION
|
||
MOVI [>23,>21],A2
|
||
MOVI [>FC,>171],A3
|
||
CALLA SCRTSTG
|
||
JRNZ LSER
|
||
MOVI 006060000H,A9
|
||
CREATE 0,FLASHME
|
||
SLOOP 10,FLYER
|
||
LSER:
|
||
CLR A0
|
||
MOVE A0,@LASRX,L
|
||
MOVE A0,@LASRY,L
|
||
MOVE A8,A0
|
||
CALLA DELOBJ ;KILL IMAGE
|
||
CLR A1
|
||
NOT A1 ;MASK FOR PROCESS EXIST ROUTINE
|
||
MOVK 2,A3 ;ASSUME CHAINSAW'S BOUNDARY
|
||
;MAKE THIS SMARTER!
|
||
MOVE *A13(PROCID),A2,W ;SAVE CURRENT PROCESS ID
|
||
MOVI DUM_ID,A0
|
||
MOVE A0,*A13(PROCID),W ;REPLACE ID FOR THIS PROCESS
|
||
MOVI CHNSWPID,A0 ;CHAINSAW PROCESS
|
||
CALLA EXISTP
|
||
JRNZ SETAREA ;BR = DOES EXIST
|
||
MOVK 1,A3 ;ASSUME CHNSW'S BOUNDARY
|
||
;WHAT?
|
||
MOVI LSRPID,A0 ;LASER PROCESS ID
|
||
CALLA EXISTP
|
||
JRNZ SETAREA ;BR = DOES EXIST
|
||
CLR A3 ;ASSUME NORMAL BOUNDARY
|
||
SETAREA:
|
||
MOVE *A13(LEG),A0,L
|
||
MOVE *A0(OPLINK),A7,L
|
||
|
||
MOVB A3,*A7(BNDTYP)
|
||
CLR A2
|
||
MOVB A2,*A7(PRVBND)
|
||
CALLA DO_BND
|
||
DIE
|
||
ALIGNXY:
|
||
; KEEP LASER WITHIN X CENTERPOINT OF PLAYER
|
||
; PARMS:
|
||
;
|
||
; A8 = PTR TO PLINDX
|
||
;
|
||
MOVE *A13(PTRX),A4,W ;OLD X,Y VALUES
|
||
MOVE *A13(PTRY),A5,W
|
||
MOVE A8,A10
|
||
MOVE *A13(LEG),A8,L
|
||
CALLA GETANIXY ;Y/X POSITION RETURNED IN A2,A3
|
||
MOVE A10,A8
|
||
SWAP A2,A3
|
||
SRL 16,A2
|
||
SRL 16,A3
|
||
MOVE A4,A4
|
||
JRZ PK
|
||
DIFF:
|
||
CMP A4,A2
|
||
JREQ DOY
|
||
JRGT ADDX ;NEW X POS > OLD X POS
|
||
SUBX:
|
||
SUB A2,A4
|
||
MOVE *A8(OXPOS),A6
|
||
SUB A4,A6
|
||
MOVE A6,*A8(OXPOS)
|
||
JRUC DOY
|
||
ADDX:
|
||
SUB A2,A4
|
||
NEG A4
|
||
MOVE *A8(OXPOS),A6
|
||
ADD A4,A6
|
||
MOVE A6,*A8(OXPOS)
|
||
DOY:
|
||
CMP A5,A3
|
||
JREQ PK ;NO DIFFERENCES IN X,Y BYE!
|
||
JRGT ADDY ;NEW Y POS > OLD Y POS
|
||
SUBY:
|
||
SUB A3,A5
|
||
MOVE *A8(OYPOS),A6
|
||
SUB A5,A6
|
||
MOVE A6,*A8(OYPOS)
|
||
JRUC PK
|
||
ADDY:
|
||
SUB A3,A5
|
||
NEG A5
|
||
MOVE *A8(OYPOS),A6
|
||
ADD A5,A6
|
||
MOVE A6,*A8(OYPOS)
|
||
PK:
|
||
MOVE A2,*A13(PTRX),W
|
||
MOVE A3,*A13(PTRY),W
|
||
RETS
|
||
|
||
SETPOINT:
|
||
MOVI INITAB,A14
|
||
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
|
||
CALLA STFOBJ ;STUFF OBJECT DATA
|
||
MOVE A13,*A0(OPLINK),L
|
||
CALLA ADJSTWTL ;PUT US IN THE WORLD
|
||
CALLA INSOBJ ;INSERT OBJECT INTO LIST
|
||
MOVE A0,A10
|
||
;A9=CORRECT LEG PTR
|
||
MOVE A9,*A13(LEG),L
|
||
;A7=A7 ALREADY?
|
||
MOVE *A9(OPLINK),A7,L ;LEGS HAVE SAME OPLINK AS TORSO!
|
||
;A7 NOW EQUALS TORSO PROC OF PLAYER WHO PICKED UP HELPER ICON
|
||
MOVE A0,*A7(LSRPTR),L
|
||
;THIS OKAY?
|
||
MOVE A9,A8
|
||
CALLA GETANIXY ;Y/X POSITION RETURNED IN A2,A3
|
||
MOVE A10,A8
|
||
ADDI [5,0],A2
|
||
MOVE A2,*A8(OYVAL),L
|
||
SUBI [7,0],A3
|
||
MOVE A3,*A8(OXVAL),L
|
||
CLR A0
|
||
MOVE A0,*A13(PTRX),W ;OLD X,Y VALUES
|
||
MOVE A0,*A13(PTRY),W
|
||
MOVE A0,*A13(THETA),L
|
||
MOVI FLASER,A9
|
||
RETS
|
||
|
||
LSHIT:
|
||
;CALLED FROM COLLISION ROUTINE
|
||
;ALSO CALLED FROM ROBO WHEN PLAYER DIES
|
||
;A8=HELPER IMG PNTR
|
||
MMTM SP,A0,A7,A13
|
||
;PUSHING ENOUGH STUFF HERE?
|
||
CLR A0
|
||
MOVE A0,*A8(OID)
|
||
MOVE *A8(OPLINK),A13,L ;GET PROCESS ID BACK
|
||
;HELPER TO FLY OFF
|
||
;RESET HERE
|
||
MOVE *A13(LEG),A0,L ;GET LEG I SURROUND
|
||
MOVE *A0(OPLINK),A0,L ;GET PLAYER PROC
|
||
CLR A7
|
||
MOVE A7,*A0(LSRPTR),L ;ZERO PLAYER PROC LASER PNTR
|
||
MOVE A13,A0
|
||
MOVI LASERDIE,A7
|
||
CALLA PUTA7 ;THIS HLPR WILL NOW WAKE UP AT A7 ADDR
|
||
MMFM SP,A0,A7,A13
|
||
RETS
|
||
|
||
INITAB:
|
||
.LONG 0,0,HLPR1
|
||
.WORD 171,DMAWNZ,CLSPLYR|TYPLSR ;171
|
||
.LONG 0,0
|
||
;
|
||
;ANIMATION TABLE FOR LASER
|
||
;
|
||
FLASER:
|
||
.LONG HLPR1
|
||
.WORD 3
|
||
.LONG HLPR2
|
||
.WORD 3
|
||
.LONG HLPR3
|
||
.WORD 3
|
||
.LONG HLPR4
|
||
.WORD 3
|
||
.LONG HLPR5
|
||
.WORD 3
|
||
.LONG HLPR6
|
||
.WORD 3
|
||
.LONG 0
|
||
|
||
|
||
.END
|
||
|
||
|