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