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