smashtv/MINE.ASM

244 lines
4.3 KiB
NASM
Raw Permalink Normal View History

2021-04-06 15:09:56 -07:00
.TITLE 'MINE.ASM'
.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"
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF BEGINOBJ2,WAVEYX,GAMSTATE,DELPAL,MIN_LIT,WAVE
.REF GET_VALID_XY,GET_WVADDR,FRANIM,RANGRAND
.REF OBJON,OBJOFF,HALT,CIRCUIT,STATUS,MCON
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF O_MINE,EXPMINE,O_ITEMS,O_ITEMS2
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS TMP,8
;
;EQUATES FIRST ORIGINATED IN THIS FILE
;
.TEXT
EXPMINE:
MOVE A10,A8
; MOVI CLSNEUT|TYPNEUT,A0
; MOVE A0,*A8(OID),W
MOVE *A8(OYPOS),A0
ADDI 033H,A0
MOVE A0,*A8(OYPOS)
MOVI 100,A0
MOVE A0,*A8(OZPOS)
MOVI BOOM3,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
; CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
CALLA DELOBJ
DIE
BOOM3:
.LONG EXPb1
.WORD NEWPALET|4
.LONG BULLET
.LONG EXPb2
.WORD 4
.LONG EXPb3
.WORD 5
.LONG EXPb4
.WORD 5
.LONG EXPb5
.WORD 5
.LONG EXPb6
.WORD 5
.LONG EXPb7
.WORD 6
.LONG EXPb8
.WORD 6
.LONG EXPb9
.WORD 6
.LONG 0
O_ITEMS:
;A2=# OF CASH ITEMS TO CREATE ON SCREEN
CREATE 0,SENDR
CREATE 0,SENDR2
RETS
O_ITEMS2:
;A2=# OF CASH ITEMS TO CREATE ON SCREEN
CREATE 0,SENDR3
CREATE 0,SENDR3
RETS
SENDR2 SLEEP 1
SENDR SLEEP 01B0H+90
SENDR3 MOVI 028H,A9 ;28
MOVI 023H,B0
MOVI 0D8H,B1
CALLA RANGRAND
MOVE A0,A10 ;A10=UPLFT X OF AREA
MOVI 02DH,B0
MOVI 0A4H,B1
CALLA RANGRAND
MOVE A0,A11 ;A11=UPLFT Y OF AREA
OH2 ;CREATE A BUNCH OF THEM
CREATE CSHPID,ANITEM
SLEEP 1
DSJNE A9,OH2
DIE
O_MINE:
;A2=# OF MINES TO CREATE ON SCREEN
CREATE MCYCPID,MIN_LIT
; MOVE @STATUS,A0
; CMPI 3,A0
; JRZ OH1
; CMPI 7,A2 ;EASIER FOR PLAYER 1
; JRC OH1
; SUBK 3,A2
OH1 PUSH A2 ;CREATE A BUNCH OF THEM
CREATE MNPID,AMINE
PULL A2
DSJNE A2,OH1
RETS
AMINE:
;AMINE IS CALLED AT THE START OF A WAVE TO PLACE X # OF HULKS ON SCREEN
;AT THE BEGINNING OF A WAVE
MOVI MINE,A2
CALLA GET_WVADDR
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS MINE
DEC A1
MOVE A1,*A0(16),W
MOVI MINE,A11
CALLA GET_VALID_XY ;MAKE SURE NEW BUST IS NOT
;OVERLAPPING ANY EXISTING SHAPE
;WHICH IS ALREADY ON SCRN AT START
;A0 & A1 ARE SET UP
;ADD IN OFFSETS FOR THIS PARTICULAR ARENA
MOVE @GAMSTATE,A2
CMPI INAMODE,A2
JREQ DMD
MOVE @WAVEYX,A2,L
;A2=PACKED OFFSETS
MOVX A2,A3
SLL 16,A3
ADD A3,A0 ;ADJUSTED A0 XVAL!
ANDI 0FFFF0000H,A2
ADD A2,A1 ;ADJUSTED A1 YVAL!
DMD CALLR IH1 ;INIT HULK (BEGIN_OBJ)
CALLA BEGINOBJ2
DIE
IH1:
MOVI m1,A2 ;DOES NOT MATTER
MOVE @WAVE,A3
CMPI 4,A3
JRLT IH1A
MOVI M2,A2 ;DOES NOT MATTER
IH1A MOVI 69,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPMINE,A5
CLR A6
CLR A7
RETS
ANITEM:
;AMINE IS CALLED AT THE START OF A WAVE TO PLACE X # OF HULKS ON SCREEN
;AT THE BEGINNING OF A WAVE
MOVI 0,B0
MOVI 04CH,B1
CALLA RANGRAND
ADD A11,A0
MOVE A0,A1
MOVI 0,B0
MOVI 074H,B1
CALLA RANGRAND
ADD A10,A0
SLL 16,A0
SLL 16,A1
;A0=X,A1=Y
;A0 & A1 ARE SET UP
;ADD IN OFFSETS FOR THIS PARTICULAR ARENA
MOVE @GAMSTATE,A2
CMPI INAMODE,A2
JREQ ADMD
MOVE @WAVEYX,A2,L
;A2=PACKED OFFSETS
MOVX A2,A3
SLL 16,A3
ADD A3,A0 ;ADJUSTED A0 XVAL!
ANDI 0FFFF0000H,A2
ADD A2,A1 ;ADJUSTED A1 YVAL!
ADMD CALLR IH2 ;INIT HULK (BEGIN_OBJ)
CALLA BEGINOBJ2
WAIT
MOVI 4*60-30,A0
SUB A9,A0
CALLA PRCSLP
;BLINK
;A8=ICON IMAGE PTR
MOVE @HALT,A0
JRNZ WAIT
MOVK 7,A10
;ABOUT 1 SECOND OF BLINK
BK
MOVE A8,A0
CALLA OBJOFF
SLEEP 5
MOVE A8,A0
CALLA OBJON
SLEEP 5
DSJS A10,BK
SLEEP 30
MOVE A8,A0
CALLA DELOBJ ;ICONS NOW GONE FOREVER!
DIE
IH2:
MOVE @CIRCUIT,A2
CMPI 2,A2
JRNZ IHJ
MOVE @MCON,A4
JRNZ IHJ
MOVK 4,A2
JRUC IHJJ
IHJ
MOVB @TMP,A2
INC A2
MOVB A2,@TMP
ANDI 03H,A2
IHJJ SLL 5,A2
ADDI GTBL,A2
MOVE *A2,A2,L
MOVI 99,A3 ;69
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPICON|SUBCSHI,A5
CLR A6
CLR A7
RETS
GTBL .LONG PRZ1,PRZ2,PRZ3,PRZ1,KEY
.END