revolution-x/GXBGDATA.ASM

553 lines
13 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.MLIB "GXMACS.LIB"
.FILE "GXBGDATA.ASM"
.TITLE " <<< GXBGDATA -- GENERATION X BACKGROUND DATA >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
.INCLUDE GX.INC ;sys\*.inc sys\*.equ *.equ
.INCLUDE BGNDTBL.GLO
.INCLUDE BGNDEQU.H
;*** GLOBAL SYMBOLS IN THIS FILE
.def BAKPLANE,BAKTL,BAKBITS,BAKMODS
.def StrtBgnd
.DEF CREDIT_BGND, START_BONUS, JFACTR_BGND
.DEF STAR_BGND,DESERT_BGND
.DEF AERO_BGND
.DEF DISC_BGND
.DEF TEACHER_BGND
.DEF CDOFFER_BGND
*SYMBOLS IN T2BGND.ASM
.ref BGND_UD1,BAK_STRT,BAK_END
*SYMBOLS IN T2RAM.ASM
.REF SKYCOLOR ;UHW full color of sky (parm to SKYUP)
.REF WAVE_SCROLL
.BSS BAKTL,32
.BSS BAKMODS,32
.BSS BAKBITS,32
PLANEBITS .set 40*32 ;keep multiple of 32
;THIS TBL USED TO TELL IF A GIVEN BLOCK NEEDS TO BE INSERT ON BGND
.BSS BITTBL,PLANEBITS*MAXPLANES,1
;THIS TBL USED TO TELL IF BLOCK OF DEATH STAR IS NOT DESTROYED
DSBITS .set PLANEBITS*3 ;DEATH STAR FRONTPLANE NEEDS THREE
.BSS DSBITTBL,DSBITS,1 ;PLANES WORTH OF BITS
*VARIABLE BONUS BACKGROUND
.BSS BONUS_BGND,(2*16)+(2*32) ;VARIABLE BONUS BACKGROUND LIST
.BSS BAKPLANE,16 ;really a byte, but keep aligned
.bss filler,16 ; to keep long word aligned
;OFFSET FROM REGULAR BITTBL PTR (OPLINK) TO DSBITTBL
DSPLANE0 .set 7
DSBITOFF .SET DSBITTBL-(BITTBL+(DSPLANE0*PLANEBITS))
*
bakpln .set PDATA
bakmods .set PDATA+020h
bakbits .set PDATA+040h
xrate .set PDATA+060h
*ALTERNATE ENTRIES FOR BGNDMODULE OF PLANE TABLE
BMODFUNC .set 2 ;EXECUTE THE PLANE FUNCTION
.text
**************************************************************************
* *
* KILL_ALL_BG - ROUTINE TO KILL ALL BGLISTS EXCEPT PLANE 0 *
* *
**************************************************************************
KILL_ALL_BG:
*NOW DO THE BACKGROUND OBJECTS
MOVI BGLISTS,A0
; ADDI PLNSIZ,A0 ;SKIP FIRST LIST
MOVE @BGPLANECT,A1,W
jrz KBBB_X ;skip if no planes
; DEC A1
KBBB_LP
CALLR DEL_OBJLIST
ADDI PLNSIZ,A0
DSJS A1,KBBB_LP
KBBB_X:
RETS
**************************************************************************
* *
* KILL_ALL_OBJECTS - ROUTINE TO KILL ALL OF THE OBJECT LISTS. *
* *
**************************************************************************
KILL_ALL_OBJECTS:
MMTM SP,A0,A1
*DO THE FOREGROUND FIRST
MOVI FGLIST,A0
CALLR DEL_OBJLIST
CALLA KILL_ALL_BG
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* DEL_OBJLIST - FUNCTION TO DELETE AN ENTIRE OBJECT LIST. *
* A0 = PTR TO LIST *
* *
**************************************************************************
DEL_OBJLIST
MMTM SP,A0,A5,A8
MOVE A0,A5
MOVE *A0,A0,L ;GET THE FIRST
CMP A0,A5
JREQ DOBJL_X ;BR = LIST IS EMPTY
DOBJL_LP
MOVE *A0,A8,L ;GET NEXT
CALLA ZAPOBJ ;DELETE THIS ONE
MOVE A8,A0 ;WAS NEXT END?
CMP A0,A5
JRNE DOBJL_LP ;BR = NO
DOBJL_X
MMFM SP,A0,A5,A8
RETS
**************************************************************************
* *
* START_BONUS - ROUTINE INSERT THE BONUS BACKGROUND DIRECTLY ABOVE *
* THE SCREEN. SCROLLING UP SHOULD GET YOU THERE. *
* *
**************************************************************************
START_BONUS
**** MMTM SP,A0,A5,A7
**** MOVIM BONUSBMOD,@BONUS_BGND,L
**** MOVE @BGLISTS+(P_XPOS+16),@BONUS_BGND+32,W
**** MOVE @BGLISTS+(P_YPOS+16),A14,W
**** SUBI HBONUS,A14
**** MOVE A14,@BONUS_BGND+48,W
**** MOVIM 0FFFFFFFFH,@BONUS_BGND+64,L
**** MOVE @PACTIVE,A0,L
**** MOVI PID_BGND,A5
****SB_LP
**** MOVE *A0(PROCID),A14,W
**** CMP A5,A14
**** JREQ SB_FOUND
**** MOVE *A0,A0,L
**** JRNZ SB_LP
**** JRUC SB_X
****SB_FOUND
**** MOVIM BONUS_BGND,*A0(bakmods),L ;THROW IN A NEW MOD
**** movi BITTBL,A5 ;CLEAR BITS FOR THIS PLANE
**** movi PLANEBITS/32,A7
**** clr A14
****SB_CLRBITS
**** move A14,*A5+,L
**** dsjs A7,SB_CLRBITS
**** MOVI DO_BGND,A7
**** CALLA PUTWAKE
****SB_X
**** MMFM SP,A0,A5,A7
RETS
****************************************************************************
InitDSTbl
;INITIALIZE the bit table of which death star blocks have not been destroyed
;(sets all bits of DSBITTBL to 1)
mmtm SP,A0,A1,A2
movi DSBITTBL,A0
movi DSBITS/32,A1
movi 0FFFFFFFFh,A2
SetBits move A2,*A0+,L
dsjs A1,SetBits
mmfm SP,A0,A1,A2
rets
****************************************************************************
****************************************************************************
DSKILBLK:
;A8 ptr to OBJ which is part of front plane of death star
;clear bit which says that block is not destroyed
mmtm SP,A0,A14
move *A8(OPLINK),A0,L
.IF DEBUG
jrz $
.ENDIF
addi DSBITOFF,A0
movb *A0,A14
.IF DEBUG
jrnn $
.ENDIF
andi 07Fh,A14
movb A14,*A0
; clr A0
; move A0,*A8(OPLINK),L
mmfm SP,A0,A14
rets
****************************************************************************
****************************************************************************
DSCKBLK:
;A0 ptr to OBJ which is part of front plane of death star
;IF BLOCK IS NOT YET DESTROYED RETURN (NEG)
PUSH A0
move *A0(OPLINK),A0,L
addi DSBITOFF,A0
movb *A0,A0
PULL A0
rets
****************************************************************************
**************************************************************************
* *
* SINGLE_PLANE - ROUTINE TO INITIALIZE THE DISPLAY SYSTEM TO ONE SINGLE *
* FOREGROUND PLANE. *
* *
**************************************************************************
SINGLE_PLANE
PUSH A10
MOVI NULL_BGND,A10
CALLR StrtBgnd
PULLQ A10
RETS
**************************************************************************
* *
* NULL_BGND - DEFINITION OF A SINGLE FOREGROUND PLANE, NO BACKGROUND. *
* USED FOR SINGLE PAGE STUFF. *
* *
**************************************************************************
NULL_BGND
.LONG 0 ;End of Planes marker
.long DUMRETS
**************************************************************************
* *
* Note on Infinity plane background tables. *
* *
* A BLIMP module is now justified so that it's bottom is *
* sitting on the horizon line (if y offset = 0). To move *
* the module above the horizon, you must provide a negative *
* Y offset, and vice-versa to move it below. *
* *
* If a background is made of multiple modules, the BLSTSTRT and *
* BLSTEND operations still work. *
* *
**************************************************************************
CDOFFER_BGND
.LONG CDOFFERBMOD
.WORD 00,-50H ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16,16]
.LONG 0 ;End of Planes marker
.long DUMRETS
TEACHER_BGND
.LONG BLKBOARDBMOD
.WORD -20,10H ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16,16]
.LONG 0 ;End of Planes marker
.long DUMRETS
DISC_BGND
.LONG PLATDISCBMOD
.WORD 4CH,-10H ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16,16]
.LONG 0 ;End of Planes marker
.long DUMRETS
AERO_BGND
.LONG TITLE1BMOD ;module
.WORD -26,36 ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16,16]
.LONG 0 ;End of Planes marker
.long DUMRETS
*
*BACKGROUND TABLE FOR CREDIT SCREEN
*
CREDIT_BGND
;***** RATING BACKGROUND
.LONG PREVIEWBMOD ;module
.WORD 0,250 ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16,16]
.LONG 0 ;End of Planes marker
.long DUMRETS
*
*STARFIELD BACKGROUND
*
STAR_BGND
.LONG stars2BMOD ;MODULE
.WORD 0,0 ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16.16]
.LONG 0 ;End of Planes marker
.long DUMRETS
*
*DESERT BACKGROUND
*
DESERT_BGND
.LONG MIDFINITYBMOD ;MODULE
.WORD 0,0 ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16.16]
.LONG 0 ;End of Planes marker
.long DUMRETS
*
*JAPANESE FACTORY BACKGROUND (LEFT)
*
JFACTR_BGND
.LONG FACMODBMOD ;MODULE
.WORD -75,175 ;x start , y offset from horizon
.LONG 0FFFFFFFFH ;end of module list
.LONG 0H ;XRATE [16.16]
.LONG 0 ;End of Planes marker
.long DUMRETS
**************************************************************************
* WAVE SCROLL FUNCTIONS *
* *
**************************************************************************
**************************************************************************
* DUMSCROLL
* Temp proc to make bgnd move for examination purposes
****DUMSCROLL
**** movi 010000h,A0
**** move A0,@SCROLLX,L
**** SLEEP WRHPLANE1-SCRWIDTH
**** movi -010000h,A0
**** move A0,@SCROLLX,L
**** SLEEP WRHPLANE1-SCRWIDTH
**** jruc DUMSCROLL
**************************************************************************
* *
* END WAVE SCROLL FUNCTIONS *
* *
**************************************************************************
****************************************************************************
KillBgnd:
mmtm SP,A0,A1,A2,A5,A6,A7,A9,A10,A11
clr a10
CLRM @BGPLANECT,W
jruc BgEntry
StrtBgnd:
;A10 Plane Table
mmtm SP,A0,A1,A2,A5,A6,A7,A9,A10,A11
BgEntry:
.IF IMGBGND
calla InitBTbl ;Init the Block Tables
.ENDIF
;*** CLEAR OUT BIT TBL FOR ALL PLANES ***
movi BITTBL,A0
movi MAXPLANES*PLANEBITS/32,A1
clr A2
CBits1 move A2,*A0+,L
dsjs A1,CBits1
clr A11 ;Plane BG #
movi BGLISTS,A6 ;A6 = ptr to BG PLANE struct of disp.asm
MOVI PID_BGND,A0
MOVI 0FF00H,A1
CALLA KILALL
*FILL FOREGROUND VARIABLES JUST FOR NOW.
MOVIM 010000H,@FGLIST+P_XRATE,L
move a10,a10
jrz SkBFunc ;Abort if no bg to kill old one.
PlaneLp:
move *A10+,A0,L ;Another Plane?
jrz PlaneX
move A0,A14
andi 0Fh,A14
jrz MkBgPln
cmpi BMODFUNC,A14
jreq DoPlnFnc
.IF DEBUG
jruc $
.ENDIF
;DO SOME SPECIAL FUNCTION: i.e. check if being used in attract mode
DoPlnFnc
;**** GOT A PLANE FUNCTION ****
srl 4,A0
sll 4,A0
call A0
jruc PlaneLp
;MAKE A BACKGROUND PLANE
MkBgPln
subk 020h,A10
.IF IMGBGND
move A10,A0
calla DnLdMods
.ENDIF
move *A10(020h),A9,W ;should be start X of ground
move *A10(030h),A2,W ;should be start Y of ground
movi PID_BGND,A1
SLL 4,A11
or A11,A1
SRL 4,A11
movi DO_BGND,A7
calla GETPPRC
jrz PlaneX
move A11,A7
movk 3,A1
modu A1,A7
move A7,*A0(PTIME),W ;sleep from 0 to 2 (don't do all together)
move A0,A7
move A10,*A7(bakmods),L
;* GET PTR TO BACKGROUND OBJECT LIST
move A6,*A7(bakpln),L
; clr A1
; move A1,*A6,L ;no objs on bakpln yet
;* find end of module list
WalkMods:
addi 64,A10 ;Look at next Module
move *A10,A0,L
inc A0 ;looking for 0FFFFFFFFh
jrnz WalkMods
addk 32,A10 ;go to entry after module list
;* set BAKBITS ptr
movi PLANEBITS,A1
mpyu A11,A1
addi BITTBL,A1
move A1,*A7(bakbits),L
move *A10+,A0,L ;get XRATE
move A0,*A6(P_XRATE),L
move A0,*A7(xrate),L
; move A6,A0 ;A0 ptr to a plane
; calla SetPlaneXPos
CLRM *A6(P_XPOS),L
MOVE @HORIZON,A14,W
MOVE @HORIZON_BASE,A0,W
SUB A14,A0
SLL 16,A0
MOVE A0,*A6(P_YPOS),L
;*** go on to next bgnd plane ***
INCM @BGPLANECT,W
inc A11
addi PLNSIZ,A6
jruc PlaneLp
;NO MORE PLANES TO BE MADE, JUST PROCESS REST OF BGND SPEC
PlaneX:
move *A10+,A0,L
jrz SkBFunc
call A0
SkBFunc:
mmfm SP,A0,A1,A2,A5,A6,A7,A9,A10,A11
rets
****************************************************************************
****************************************************************************
DO_BGND:
;* PROCESS TO UPDATE THE BAKLST WHEN NECESSARY
;A8-PTR TO BAKPLANE
;A11-PLANE #
;
;A9-USED INTERNALLY AS LAST X POSITION UPDATED
move *A13(bakmods),A0,L
move *A0,A0,L
; cmpi nullBMOD,A0
; jaeq SUCIDE
move *A13(bakpln),A8,L
move *A8(P_XPOS+010h),A1,W
MOVE *A8(P_YPOS+010h),A14,W
SLL 16,A14
MOVY A14,A1
jruc DoUpdate
BGNDLP:
;CHECK DISTANCE FROM LAST UPDATE XPOS TO CURRENT XPOS
move *A8(P_XPOS+010h),A1,W
MOVE *A8(P_YPOS+010h),A14,W
SLL 16,A14
MOVY A14,A1
move A9,A0
SUBXY A1,A0
ABSXY A0
GotXDist:
**** cmpi 020h,A0
MOVI [020h,020h],A14
CMPXY A14,A0
JRXGE DoUpdate
JRYLT SkUpdate
**** jrlt SkUpdate
DoUpdate:
move A1,A9 ;save last x position
*** move @WORLDXY,A2,L
*** movx A1,A2
*** move A2,@BAKTL,L
move A1,@BAKTL,L
move *A13(bakmods),A0,L
move A0,@BAKMODS,L
move *A13(bakbits),A0,L
move A0,@BAKBITS,L
movb A11,@BAKPLANE
calla BGND_UD1
SkUpdate:
movk 3,A0
movi BGNDLP,A7
jauc PRCLSP
.end