296 lines
6.0 KiB
NASM
296 lines
6.0 KiB
NASM
|
.FILE 'POW1.ASM (BLADE ATTACK)'
|
|||
|
.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"
|
|||
|
;
|
|||
|
;SOUND HEADERS USED
|
|||
|
;
|
|||
|
.REF ICON,BLDS,YAMOFF,TING
|
|||
|
;
|
|||
|
;SYMBOLS EXTERNALLY DEFINED
|
|||
|
;
|
|||
|
.REF ALIGNXY
|
|||
|
.REF GETANIXY,AFONT0
|
|||
|
.REF GPALOBJ,STFOBJ,INSOBJ,ADJSTWTL
|
|||
|
.REF FRANIM,KILOBJ
|
|||
|
.REF SCRTSTG,PUTA7
|
|||
|
.REF DELOBJ
|
|||
|
.REF GETCOS
|
|||
|
.REF GETSIN
|
|||
|
.REF DO_BND
|
|||
|
.REF EXISTP
|
|||
|
.REF KILALL
|
|||
|
.REF KILL,ICNFLG
|
|||
|
;
|
|||
|
;SYMBOLS DEFINED IN THIS FILE
|
|||
|
;
|
|||
|
.DEF POW1ON,CHAINHIT,FLYSLUP,CHAINHIT2,PCNT
|
|||
|
;
|
|||
|
;UNINITIALIZED RAM DEFINITIONS
|
|||
|
;
|
|||
|
.BSS PCNT,8
|
|||
|
;
|
|||
|
;EQUATES
|
|||
|
;
|
|||
|
MAXHITS .EQU 5 ;MAXIMUM HITS PER CHNSW CAN TAKE
|
|||
|
ADLTA .EQU (411775/(160/3)) ;RADIUS OF CIRCLE
|
|||
|
|
|||
|
;
|
|||
|
;EQUATES FOR THIS FILE
|
|||
|
;
|
|||
|
;
|
|||
|
.TEXT
|
|||
|
;
|
|||
|
POW1ON:
|
|||
|
;CHECK HERE FOR COLL2 USAGE OF THESE REGISTERS! DO_BND?!?!
|
|||
|
MMTM SP,A1,A7
|
|||
|
MOVE A0,A9
|
|||
|
MOVE *A0(OPLINK),A0,L
|
|||
|
MOVB *A0(PNUM),A10 ;A10=1 OR 2
|
|||
|
MOVK 1,A1
|
|||
|
MOVB A1,*A0(BLDFLG) ;BLADES ON FLAG FOR THIS PLAYER
|
|||
|
MOVB A1,@ICNFLG ;ICON GOT FLAG
|
|||
|
CREATE 0,DOSAWS ;PASS PLAYER PNTR WHO TOUCHED ME
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ
|
|||
|
MOVI BLDS,A0
|
|||
|
CALLA ONESND
|
|||
|
MMFM SP,A1,A7
|
|||
|
RETS
|
|||
|
;
|
|||
|
DOSAWS:
|
|||
|
;A9=PLAYER PNTR WHO TOUCHED ME
|
|||
|
MOVE A10,A8
|
|||
|
MOVE *A9(OPLINK),A10,L
|
|||
|
MOVK 2,A1 ;BLADES INTO BNDTYP
|
|||
|
MOVB A1,*A10(BNDTYP)
|
|||
|
MOVE A10,A7 ;DO BND NEEDS PLYR PRC IN A7
|
|||
|
CALLA DO_BND
|
|||
|
|
|||
|
MOVK 5,A11 ;5 ORBITING OBJECTS
|
|||
|
SAWLUP:
|
|||
|
SLEEP >B
|
|||
|
CREATE CHNSWPID,CHAINSAW
|
|||
|
DSJS A11,SAWLUP
|
|||
|
; MOVI BLDS,A0
|
|||
|
; CALLA ONESND
|
|||
|
DIE
|
|||
|
;
|
|||
|
; DO CHNSW MOVEMENT LOGIC
|
|||
|
;A11 = OFFSET FOR STARTING POSITION OF CHNSW
|
|||
|
;A10=THIS PLAYER PROCESS PTR
|
|||
|
;A8=PNUM 1 OR 2
|
|||
|
CHAINSAW:
|
|||
|
CLR A0
|
|||
|
MOVB A8,*A13(MYPLYR) ;PLAYER # I SURROUND
|
|||
|
MOVE A10,*A13(PLYRPC),L ;KEEP PLAYER PROCESS PTR
|
|||
|
MOVB A0,*A13(HITS)
|
|||
|
MOVB A0,*A13(ANIMTIK)
|
|||
|
MOVI ADLTA,A0
|
|||
|
MOVE A0,*A13(DELTA),L
|
|||
|
CALLA SETPOINT
|
|||
|
;
|
|||
|
ENCIRCLE:
|
|||
|
; MAKE CHNSW MOVE IN A CIRCLE AROUND PLAYER
|
|||
|
CALLR ANICHNSW ;ANIMATE CHNSW
|
|||
|
; MOVB @PCNT,A0
|
|||
|
; ANDI 1,A0
|
|||
|
; JRZ IP
|
|||
|
CALLA ALIGNXY ;KEEP OBJECT ALIGNED WITH PLAYER
|
|||
|
;IP
|
|||
|
MOVE *A13(THETA),A2,L ;PROGRESSIVE THETA
|
|||
|
MOVE *A13(DELTA),A0,L ;NEXT DELTA ANGLE
|
|||
|
ADD A2,A0
|
|||
|
CALLA GETCOS
|
|||
|
MOVE A0,A11
|
|||
|
MOVK 5,A0
|
|||
|
MPYS A0,A11
|
|||
|
MOVE A14,*A13(THETA),L
|
|||
|
MOVE A14,A0
|
|||
|
CALLA GETSIN
|
|||
|
MOVE A0,A3
|
|||
|
MOVK 5,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
|
|||
|
|
|||
|
FLYSLUP2:
|
|||
|
;COLLISION ROUTINE SENDS BLADE HERE
|
|||
|
NEG A11
|
|||
|
NEG A10
|
|||
|
MOVE A11,*A8(OXVEL),L
|
|||
|
MOVE A10,*A8(OYVEL),L
|
|||
|
MOVI TING,A0
|
|||
|
CALLA ONESND
|
|||
|
JRUC FLY1
|
|||
|
FLYSLUP:
|
|||
|
;COLLISION ROUTINE SENDS BLADE HERE
|
|||
|
MOVE A11,*A8(OXVEL),L
|
|||
|
MOVE A10,*A8(OYVEL),L
|
|||
|
FLY1:
|
|||
|
CALLR ANICHNSW ;ANIMATE FAST SAW
|
|||
|
MOVI [>23,>21],A2
|
|||
|
MOVI [>FC,>171],A3
|
|||
|
CALLA SCRTSTG
|
|||
|
JRNZ CHNSWDIE
|
|||
|
SLOOP 1,FLY1
|
|||
|
CHNSWDIE:
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELOBJ ;KILL CHAINSAW IMAGE
|
|||
|
CLR A1
|
|||
|
NOT A1 ;MASK FOR PROCESS EXIST ROUTINE
|
|||
|
MOVK 2,A3 ;ASSUME CHAINSAW'S BOUNDARY
|
|||
|
;
|
|||
|
;MAKE THIS JUST A CHECK OF A FLAG FOR EFFICIENCY!
|
|||
|
;
|
|||
|
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 DNBL ;BR = STILL A BLADE AROUND
|
|||
|
;TURN OFF BLADE SOUND
|
|||
|
MOVI YAMOFF,A0
|
|||
|
CALLA ONESND
|
|||
|
|
|||
|
;RESET BLADE FLAG FOR THIS PLAYER
|
|||
|
MOVE *A13(PLYRPC),A7,L ;GET PLAYER PRC THESE BLADES SURROUND
|
|||
|
CLR A0
|
|||
|
MOVB A0,*A7(BLDFLG)
|
|||
|
|
|||
|
MOVK 1,A3 ;ASSUME HELPER BOUNDARY
|
|||
|
MOVE *A13(PLYRPC),A7,L ;GET PLAYER PRC THESE BLADES SURROUND
|
|||
|
MOVI LSRPID,A0 ;CHNSW PROCESS ID
|
|||
|
CLR A1
|
|||
|
NOT A1
|
|||
|
CALLA EXISTP
|
|||
|
JRNZ SETBND ;BR = DOES EXIST
|
|||
|
CLR A3 ;ASSUME NORMAL BOUNDARY
|
|||
|
JRUC SET2
|
|||
|
SETBND:
|
|||
|
;SOMEONE HAS A HELPER, IS IT ME?
|
|||
|
MOVE *A0(TORSO),A1,L ;PLAYER THIS HELPER SURROUNDS
|
|||
|
MOVE *A1(OPLINK),A1,L
|
|||
|
CMP A1,A7
|
|||
|
JREQ SET2 ;BR=YES! I HAVE HELPER ALSO!
|
|||
|
CLR A3
|
|||
|
SET2
|
|||
|
MOVB A3,*A7(BNDTYP)
|
|||
|
CLR A2
|
|||
|
MOVB A2,*A7(PRVBND)
|
|||
|
CALLA DO_BND
|
|||
|
DNBL
|
|||
|
DIE
|
|||
|
;
|
|||
|
;ANIMATE CHNSW ROUTINE
|
|||
|
;
|
|||
|
ANICHNSW:
|
|||
|
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 BLADES,A9
|
|||
|
NOTNEXT:
|
|||
|
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,A8
|
|||
|
MOVE A8,A10
|
|||
|
;A9=PLAYER WHO TURNED ME ON
|
|||
|
MOVE *A9(OPLINK),A0,L
|
|||
|
MOVE *A0(TSO_PTR),A8,L
|
|||
|
MOVE A8,*A13(TORSO),L ;PLACE TORSO PTR INTO BLADE PDATA
|
|||
|
CALLA GETANIXY ;Y/X POSITION RETURNED IN A2,A3
|
|||
|
MOVE A10,A8
|
|||
|
SUBI [13,0],A2
|
|||
|
SUBI [4,0],A3
|
|||
|
MOVE A2,*A8(OYVAL),L ;INITIAL POSITION OFFSET OF OBJECT
|
|||
|
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 BLADES,A9
|
|||
|
RETS
|
|||
|
|
|||
|
CHAINHIT2:
|
|||
|
;CALLED FROM COLLISION ROUTINE
|
|||
|
MOVE *A8(OPLINK),A0,L ;GET PROCESS ID BACK
|
|||
|
;BLADE TO FLY OFF
|
|||
|
;RESET HERE
|
|||
|
MOVI FLYSLUP2,A7
|
|||
|
CALLA PUTA7 ;THIS BLADE WILL NOW WAKE UP AT A7 ADDR
|
|||
|
RETS
|
|||
|
;
|
|||
|
CHAINHIT:
|
|||
|
;CALLED FROM COLLISION ROUTINE
|
|||
|
MMTM SP,A1,A13
|
|||
|
MOVE *A8(OPLINK),A13,L ;GET PROCESS ID BACK
|
|||
|
MOVB *A13(HITS),A1
|
|||
|
INC A1
|
|||
|
MOVB A1,*A13(HITS)
|
|||
|
CMPI MAXHITS,A1
|
|||
|
JRLT HO
|
|||
|
;BLADE TO FLY OFF
|
|||
|
;RESET HERE
|
|||
|
MOVE A13,A0
|
|||
|
MOVI FLYSLUP,A7
|
|||
|
CALLA PUTA7 ;THIS BLADE WILL NOW WAKE UP AT A7 ADDR
|
|||
|
HO MMFM SP,A1,A13
|
|||
|
RETS
|
|||
|
|
|||
|
INITAB:
|
|||
|
.LONG 0,0,BLD1
|
|||
|
.WORD 170,DMAWNZ,CLSPLYR|TYPPRSM
|
|||
|
.LONG 0,0
|
|||
|
;
|
|||
|
;ANIMATION TABLE FOR CHAINSAW
|
|||
|
;
|
|||
|
BLADES .LONG BLD4
|
|||
|
.WORD 1
|
|||
|
.LONG BLD3
|
|||
|
.WORD 1
|
|||
|
.LONG BLD2
|
|||
|
.WORD 1
|
|||
|
.LONG BLD1
|
|||
|
.WORD 1
|
|||
|
.LONG 0
|
|||
|
|
|||
|
|
|||
|
.END
|
|||
|
|