338 lines
5.8 KiB
NASM
338 lines
5.8 KiB
NASM
.FILE 'CHASER.ASM'
|
||
.TITLE 'ROBO-RAMA GAME PROGRAM CHASER'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
;
|
||
; INITIATED: APRIL 13,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"
|
||
;
|
||
;SOUNDS
|
||
;
|
||
.REF TING,EXP1,LEGOSND
|
||
;
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
;
|
||
.REF GETADIR,CIRCUIT,PLYROBJS,DOCHS,BLOW
|
||
.REF BEGINOBJ,SET_GATE_2
|
||
.REF RANGRAND,RANDPER,EHALT,WAVE
|
||
;
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
;
|
||
.DEF STRT_CHSR,HIT_CHSR,SCRL,KILL_CHSR,KC2
|
||
;
|
||
;EQUATES FIRST ORIGINATED IN THIS FILE
|
||
;
|
||
MAXPCS .EQU 1
|
||
LSTPC .EQU MAXPCS-1
|
||
;
|
||
;DATA STRUCTURE OF MASTER PIECE POINTER
|
||
;
|
||
BLDVW .EQU PDATA ;UHB BLADE VIEW 0-3
|
||
CDELAY .EQU PDATA+8 ;UHB DELAY BEFORE UPDATING
|
||
DLY .EQU PDATA+16 ;UHL DLY VEL UPDATE FOR THIS CNT
|
||
GDIE .EQU PDATA+48 ;UHB GONNA DIE FLAG
|
||
NONO .EQU PDATA+56 ;UHB 1=COMING OUT,0=DO NOT ENTER SAFE AREA
|
||
;
|
||
;
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
;
|
||
.BSS TRAM1,32*MAXPCS+32
|
||
.BSS SCRL,8
|
||
.BSS TRAM2,32*MAXPCS
|
||
|
||
SX: .LONG -080000H,01980000H,0C20000H,0C20000H
|
||
SY: .LONG 0700000H,0700000H,-20000H,0F00000H
|
||
|
||
CIDS: .LONG CID1,CID2,CID3 ;CIRCUIT INFO FOR CHASER DOOR
|
||
CID1:
|
||
|
||
.WORD 3,2,1,3,2,1,2,1,1,1 ;WAVE 1-10 (DOOR CHASER COMES FROM)
|
||
CID2:
|
||
.WORD 1,1,2,1,2,1,1,1,1,1,1,3,1,1,1,2,1,2
|
||
CID3:
|
||
.WORD 1,1,2,1,2,1,1,1,1,1,1,3,1,1,1,2,1,2,1,1,1,1
|
||
HIT_CHSR
|
||
MMTM SP,A1
|
||
MOVE *A0(OPLINK),A10,L
|
||
;WILL BE BOGUS IF SOMETHING OTHER THAN A BULLET STRUCK HULK!
|
||
MOVE *A8(OPLINK),A0,L
|
||
MOVE A10,*A0(DLY),L
|
||
MOVI TING,A0
|
||
CALLA ONESND
|
||
MMFM SP,A1
|
||
RETS
|
||
KILL_CHSR
|
||
MMTM SP,A1
|
||
MOVE *A8(OPLINK),A0,L
|
||
MOVB *A0(GDIE),A1
|
||
JRNE NX
|
||
;
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(GDIE)
|
||
CREATE KCHAS,KCHS
|
||
|
||
NX MMFM SP,A1
|
||
RETS
|
||
KC2 ;COMES HERE IF RING HIT CHASER
|
||
MMTM SP,A1
|
||
MOVE *A8(OPLINK),A0,L
|
||
MOVB *A0(GDIE),A1
|
||
JRNE NX2
|
||
;
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(GDIE)
|
||
CREATE 0,KCHS1
|
||
|
||
NX2 MMFM SP,A1
|
||
RETS
|
||
|
||
KCHS
|
||
SLEEP 30
|
||
KCHS1 MOVE *A8(OPLINK),A0,L
|
||
CALLA KILL
|
||
|
||
MOVI EXP1,A0
|
||
CALLA ONESND
|
||
CLR A1
|
||
NOT A1
|
||
MOVI CHSR2PID,A0
|
||
CALLA EXISTP
|
||
JRNZ NXO
|
||
;DID NOT FIND AGAIN PROC
|
||
CREATE CHSR2PID,AGAIN
|
||
NXO
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE A0,*A8(OYVEL),L
|
||
MOVE A0,*A8(OID)
|
||
JAUC BLOW
|
||
|
||
AGAIN
|
||
SLEEP 60*4 ;6
|
||
;SEND OUT ANOTHER ROUND OF THESE CHASER GUYS
|
||
CREATE CHSR2PID,DOCHS
|
||
|
||
MOVI LEGOSND,A0 ;LETS GO
|
||
CALLA ONESND
|
||
DIE
|
||
|
||
STRT_CHSR:
|
||
;A9=0 OR 32
|
||
MOVE @CIRCUIT,A0
|
||
SLL 5,A0
|
||
ADDI CIDS,A0
|
||
MOVE *A0,A0,L
|
||
MOVE @WAVE,A1
|
||
DEC A1
|
||
SLL 4,A1
|
||
ADD A1,A0
|
||
MOVE *A0,A0,W
|
||
;COME OUT OF DOOR OTHER THAN EXIT DOORS
|
||
MOVE A0,A8
|
||
MOVI 25,A1 ;OPEN TIME
|
||
CALLA SET_GATE_2
|
||
|
||
MOVI TRAM1,A11
|
||
CMPI 32,A9
|
||
JRNE TRW
|
||
MOVI TRAM2,A11
|
||
|
||
TRW MOVI PLYROBJS,A0
|
||
ADD A9,A0
|
||
MOVE *A0,A0,L
|
||
MOVE A0,*A11,L ;MOVE OBJECT BLOCK PTR INTO TOP OF RAM STACK
|
||
|
||
MOVI MAXPCS,A9 ;CHASER LENGTH
|
||
MOVK 1,A10
|
||
LPA:
|
||
CREATE CHSRPID,CHASER
|
||
INC A10
|
||
CMP A9,A10
|
||
JRLE LPA
|
||
DIE
|
||
;JERK: .LONG [0,5],[0,-5],[5,0],[-5,0]
|
||
CHASER:
|
||
DEC A8 ;A8=DOOR 1-4
|
||
SLL 5,A8
|
||
MOVI SX,A0
|
||
ADD A8,A0
|
||
MOVE *A0,A0,L ;X
|
||
ADDI SY,A8
|
||
MOVE *A8,A1,L ;Y
|
||
MOVI BLD1,A2
|
||
MOVI 159,A3
|
||
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
|
||
MOVI CLSNEUT|TYPCHSR,A5
|
||
CLR A6
|
||
CLR A7
|
||
MOVE A7,*A13(DLY),L
|
||
CALLA BEGINOBJ
|
||
|
||
MOVE A10,A0
|
||
SLL 5,A0
|
||
;A11=TRAM PTR
|
||
ADD A11,A0
|
||
MOVE A8,*A0,L
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(CDELAY)
|
||
MOVB A0,*A13(NONO)
|
||
MOVB A0,*A13(BLDVW)
|
||
CLR A0
|
||
MOVB A7,*A13(GDIE)
|
||
SLEEP 2
|
||
LPTP:
|
||
;CHECK MAGIC BOXES
|
||
;DO NOT ALLOW ENTRY
|
||
; MOVI [>43,>41],A2
|
||
; MOVI [>DC,>151],A3
|
||
; CALLA SCRTSTG
|
||
; JRZ C32
|
||
;
|
||
;A0=1,2,3 OR 4 WHICH IS RETURNED FROM SCRTSTG!
|
||
;
|
||
; DEC A0
|
||
; SLL 5,A0
|
||
; ADDI JERK,A0
|
||
; MOVE *A0,A0,L
|
||
; MOVY A0,A1
|
||
; SRL 16,A1
|
||
; CLR A2
|
||
; MOVX A0,A2
|
||
; MOVE *A8(OXPOS),A3
|
||
; ADD A2,A3
|
||
; MOVE A3,*A8(OXPOS)
|
||
; MOVE *A8(OYPOS),A3
|
||
; ADD A1,A3
|
||
; MOVE A3,*A8(OYPOS)
|
||
;
|
||
;
|
||
;C32
|
||
MOVB @SCRL,A0
|
||
JRZ LOO
|
||
CLR A0
|
||
MOVE A0,*A8(OXVEL),L
|
||
MOVE A0,*A8(OYVEL),L
|
||
JRUC NO_SK
|
||
|
||
LOO MOVE *A13(DLY),A0,L
|
||
JRZ LPO
|
||
;BULLET HAS HIT BLADE
|
||
CLR A1
|
||
MOVE A1,*A13(DLY),L
|
||
MOVE *A0(BLTDIR),A0
|
||
SLL 4,A0
|
||
MOVI CHSX,A1
|
||
ADD A0,A1
|
||
MOVE *A1,A1,W
|
||
MOVE *A8(OXPOS),A2
|
||
ADD A1,A2
|
||
MOVE A2,*A8(OXPOS)
|
||
|
||
MOVI CHSY,A1
|
||
ADD A0,A1
|
||
MOVE *A1,A1,W
|
||
MOVE *A8(OYPOS),A0
|
||
ADD A1,A0
|
||
MOVE A0,*A8(OYPOS)
|
||
LPO
|
||
MOVB *A13(CDELAY),A1
|
||
ANDI 07H,A1
|
||
DEC A1
|
||
MOVB A1,*A13(CDELAY)
|
||
JRNE NO_SK
|
||
MOVI 15,A1
|
||
MOVB A1,*A13(CDELAY)
|
||
MOVE A10,A1
|
||
LPTP2 DEC A1
|
||
MOVE A1,A0
|
||
SLL 5,A0
|
||
ADD A11,A0
|
||
MOVE *A0,A0,L ;OBJ TO SK
|
||
JRZ LPTP2
|
||
CALLR PLTLINE
|
||
MOVE A5,*A8(OXVEL),L
|
||
MOVE A6,*A8(OYVEL),L
|
||
NO_SK
|
||
;UPDATE VIEW OF BLADE
|
||
MOVB *A13(BLDVW),A0
|
||
ANDI 07H,A0
|
||
INC A0
|
||
MOVB A0,*A13(BLDVW)
|
||
CMPI 4,A0 ;4
|
||
JRNE KP_GO
|
||
CLR A0
|
||
MOVB A0,*A13(BLDVW)
|
||
KP_GO
|
||
MOVI CHSRIMG,A1
|
||
SLL 5,A0
|
||
ADD A0,A1
|
||
MOVE *A1,A1,L ;GET NEW OIMG FOR THIS CHASER PIECE
|
||
MOVE *A8(OFLAGS),A4
|
||
CALLA ANI
|
||
SLEEP 3
|
||
JRUC LPTP
|
||
|
||
CHSX .WORD 0,0,6,5,6,0,-5,-6,-6
|
||
CHSY .WORD 0,-5,-6,0,6,5,6,0,-6
|
||
;8 1 2
|
||
;7 3
|
||
;6 5 4
|
||
;A10 SHOULD BE 1-8!
|
||
CHSRIMG:
|
||
.LONG BLB4,BLB3
|
||
.LONG BLB2,BLB1
|
||
.LONG BLB4,BLB3
|
||
.LONG BLB2,BLB1
|
||
|
||
; PLTLINE - MAKE AN OBJECT TRAVEL FROM PNT. A TO PNT. B
|
||
;
|
||
; A8 = OBJECT SEEKING
|
||
; A0 = OBJECT SEEKED
|
||
; RETURNS:
|
||
; A5 = X VEL UHL
|
||
; A6 = Y VEL UHL
|
||
PLTLINE:
|
||
MOVE *A0(OXPOS),A5,W
|
||
MOVE *A0(OYPOS),A6,W
|
||
; ADDI 15,A6
|
||
MOVE *A8(OXPOS),A3,W
|
||
MOVE *A8(OYPOS),A4,W
|
||
SUB A3,A5 ;FIND DIFFERENCE
|
||
SUB A4,A6
|
||
MOVE A6,A3 ;
|
||
MOVE A5,A1
|
||
ABS A5
|
||
ABS A6
|
||
ADD A5,A6 ;CALC SUM ABS(DX+DY)
|
||
SLL 16,A1 ;SHIFT TO ACCOMODATE FRACTIONAL VELOCITY
|
||
SLL 16,A3
|
||
DIVS A6,A1 ;GENERATE SPEED RATIOS
|
||
DIVS A6,A3
|
||
MOVI 8,A2
|
||
MOVK 3,A5 ;MULTIPLY BY VELOCITY FACTOR
|
||
MPYU A2,A5
|
||
MPYS A5,A3
|
||
MPYS A1,A5 ;FINAL X VEL
|
||
SRA 4,A3
|
||
SRA 4,A5
|
||
MOVE A3,A6 ;FINAL Y VEL
|
||
RETS
|
||
|
||
.END
|
||
|
||
|