narc/NARC/NARCATT.ASM

405 lines
9.4 KiB
NASM
Raw Permalink Normal View History

2021-04-06 14:36:38 -07:00
.FILE 'NARCATT.ASM'
.TITLE " <<< N A R C -- ATTRACT MODE >>>"
.OPTION B,D,L
.MNOLIST
* GET THE SYSTEM STUFF
.INCLUDE "\video\MPROCEQU.ASM" ;MPROC equates
.INCLUDE "\video\DISPEQU.ASM" ;Display processor equates
.INCLUDE "\video\GSP.INC" ;GSP assembler equates
.INCLUDE "\video\SYS.INC" ;Zunit system equates
.INCLUDE "\video\MACROS.HDR" ;Macros, Yeah!
* LOCAL STUFF
.INCLUDE "NARCEQU.ASM" ;NARC Equates
.BSS AWAVE,32
.TEXT
*
*GLOBALS IN THIS FILE
.GLOBAL ATSTRT
*
*EXTERNALS
.GLOBAL HSTDTAB,TITLPAGE,FBIBADGE,CRED_P,CRD_SCRN
.GLOBAL NRAMINIT,INITFGND,GOALXFER
*ATTRACT MODE START UP ROUTINE
ATSTRT
MMTM SP,A0,A1,A7
MOVE @GAMSTATE,A0
CMPI INDIAG,A0
JREQ ATSTRTX
MOVK 1,A0
MOVE A0,@DISPLAYON,W ;TURN DISPLAY PROCESSOR ON
CALLA NRAMINIT ;INITIALIZE GAME RAM
MOVI INAMODE,A0
MOVE A0,@GAMSTATE,W
CALLA AUTOEOFF ;TURN OFF AUTOERASE
CALLA SYNCFULL
CALLA CLR_SCRN ;ZERO THE BIT MAP
CALLA COLRSTRT ;START THE COLORS
CREATE AMODPID,AMODE ;CREATE THE ATTRACT MODE
CLR A0
MOVE A0,@PLAYPAGE,W ;CLEAR AMODE PLAY PAGE
ATSTRTX
MMFM SP,A0,A1,A7
RETS
*AMODUS ZYKLEN
AMODE
CALLA WIPEOUT
CALLA COLRSTRT ;START THE COLORS
JSRP HSTDTAB
CALLA WIPEOUT
CALLA COLRSTRT
JSRP ATTPLAY ;DO SOME ATTRACT MODE PLAY STUFF
JRUC AMODE2
AMODE1
CALLA WIPEOUT
CALLA COLRSTRT
JSRP ATTPLAY ;DO SOME ATTRACT MODE PLAY STUFF
CALLA WIPEOUT
CALLA COLRSTRT ;START THE COLORS
JSRP HSTDTAB
CALLA WIPEOUT
CALLA COLRSTRT
JSRP ATTPLAY ;DO SOME ATTRACT MODE PLAY STUFF
AMODE2
CALLA WIPEOUT
CALLA COLRSTRT ;START THE COLORS
JSRP TITLPAGE
CALLA WIPEOUT
CALLA COLRSTRT
JSRP ATTPLAY ;DO SOME ATTRACT MODE PLAY STUFF
CALLA WIPEOUT
CALLA COLRSTRT ;START THE COLORS
JSRP FBIBADGE
*** CALLA CRED_P
*** JRZ AMODE1 ;DON'T SHOW 0 CREDITS BOZO
JSRP CRD_SCRN
SLEEP 600
MOVI AMODPID,A0
MOVE A0,*A13(PROCID),W ;I AM WHAT I AM!
JRUC AMODE1
**************************************************************************
* *
* ATTPLAY - ATTRACT MODE GAME PLAY *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
NATTWAVS .EQU 3 ;# OF ATTRACT MODE WAVES
ATTPLAY
MOVK 1,A0
MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF
MOVE @AWAVE,A0,W
INC A0
CMPI NATTWAVS,A0
JRLS ATTWGO
ATTWRST
MOVK 1,A0 ;RESET TO WAVE 1
ATTWGO
MOVE A0,@AWAVE,W
MOVE A0,@WAVE,W
MOVK 1,A0
MOVE A0,@PLAYPAGE,W ;MARK IT AS THE PLAY PAGE
JSRP AMODWAVE
MOVI P1DATA,A11
CLR A8
MOVE A8,*A11(PDRUGS),W ;CLEAR COUNTERS FOR SAFETY
MOVE A8,*A11(PMONEY),W
MOVE A8,*A11(PBUSTS),W
ATTWRELD
MOVE @AWAVE,A9,W
DEC A9
SLL 5,A9
ADDI AMOVETAB,A9
MOVE *A9,A9,L ;GET THIS WAVES MOVEMENT TABLE
ATTNEXT
MOVE *A9+,A0,W ;GET SOME JOYSTICK BITS
CMPI 0FFFFFFFFH,A0
JREQ ATTWRELD ;RELOAD THE TABLE
MOVE A0,@P1CTRL,W
MOVE *A9+,A10,W ;GET THE SLEEP TIME
JSRP ATTPSLP
JRNC ATTNEXT
INC A8
CMPI 2,A8
JRHS ATTP1DUN
SLEEP 160
JRUC ATTNEXT
ATTP1DUN
SLEEP 60
ATTWXXX
CLR A0
MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON
MOVE A0,@P1DATA+POBJ,L ;MAKE SURE ALL OBJECT PTRS ARE CLEAR
MOVE A0,@P1DATA+PLOBJ,L
MOVE A0,@P2DATA+POBJ,L
MOVE A0,@P2DATA+PLOBJ,L
RETP
AMOVETAB
.LONG AWAV1MOV,AWAV2MOV,AWAV3MOV,AWAV4MOV,AWAV5MOV,AWAV6MOV
.LONG AWAV1MOV,AWAV2MOV,AWAV3MOV,AWAV4MOV,AWAV5MOV,AWAV6MOV
.LONG AWAV1MOV,AWAV2MOV,AWAV3MOV,AWAV4MOV,AWAV5MOV,AWAV6MOV
*
*ATTRACT MODE PLAYER MOVEMENT TABLES
* .WORD STICK_BITS,SLEEP_TIME
* .
* .
* .WORD 0FFFFH
AWAV1MOV
AWAV4MOV
AWAV5MOV
.WORD PRYTE,20H
.WORD PRYTE|PUP|PFIRE,30H
.WORD PRYTE,20H
.WORD PLEFT|PCROUCH,1
.WORD PCROUCH|PFIRE,20H
.WORD PJUMP|PDOWN|PRYTE,20H
.WORD 0,30H
.WORD PCROUCH|PFROCK,16H
.WORD PCROUCH|PUP,10H
.WORD PCROUCH|PRYTE,20H
.WORD PJUMP|PFIRE,20H
.WORD PDOWN|PLEFT,40H
.WORD PRYTE|PCROUCH,1
.WORD PCROUCH|PFROCK,20H
.WORD PLEFT,20H
.WORD PUP,10H
.WORD 0FFFFH
AWAV2MOV
.WORD PRYTE|PUP,20H
.WORD PRYTE|PUP|PJUMP,30H
.WORD PFIRE,20H
.WORD PCROUCH|PFIRE,20H
.WORD 0,30H
.WORD PRYTE|PDOWN,10H
.WORD PRYTE,10H
.WORD PLEFT|PCROUCH,1
.WORD PCROUCH|PFIRE,10H
.WORD PJUMP|PFROCK,20H
.WORD PDOWN|PLEFT,40H
.WORD PRYTE|PCROUCH,1
.WORD PCROUCH|PFROCK,20H
.WORD PLEFT,20H
.WORD PUP,10H
.WORD PRYTE,20H
.WORD PRYTE|PUP|PFIRE,30H
.WORD PRYTE,20H
.WORD PLEFT|PCROUCH,1
.WORD PCROUCH|PFIRE,20H
.WORD PJUMP|PDOWN|PRYTE,20H
.WORD 0,30H
.WORD 0FFFFH
AWAV3MOV
.WORD PUP,20H
.WORD PLEFT|PFIRE,10H
.WORD PLEFT|PFROCK,10H
.WORD PRYTE,5H
.WORD PRYTE|PFROCK,10H
.WORD PRYTE|PFIRE,10H
.WORD PRYTE|PDOWN,38H
.WORD PRYTE,50H
.WORD PRYTE|PJUMP,20H
.WORD PRYTE,60H
.WORD PLEFT,30H
.WORD PCROUCH,5
.WORD PFIRE|PLEFT,20H
.WORD PCROUCH,10H
.WORD PRYTE,50H
.WORD PRYTE|PFROCK,1H
.WORD PRYTE|PUP,18H
.WORD PRYTE|PDOWN,30H
.WORD PRYTE|PUP,18H
.WORD PJUMP,10H
.WORD 0,30H
.WORD PCROUCH|PFROCK,16H
.WORD PCROUCH|PUP,10H
.WORD PCROUCH|PRYTE,20H
.WORD PJUMP|PFIRE,20H
.WORD PDOWN|PLEFT,40H
.WORD PRYTE|PCROUCH,1
.WORD PCROUCH|PFROCK,20H
.WORD PLEFT,20H
.WORD PUP,10H
.WORD 0FFFFH
AWAV6MOV
.WORD PLEFT|PFIRE|PCROUCH|PUP,20H
.WORD PDOWN,10H
.WORD PCROUCH|PFROCK,10H
.WORD 0,10H
.WORD PRYTE|PFROCK,20H
.WORD 0,2
.WORD PFROCK,20H
.WORD 0,2
.WORD PJUMP,5H
.WORD PFROCK,5H
.WORD 0,10H
.WORD PRYTE,20H
.WORD PRYTE|PUP|PFIRE,30H
.WORD PRYTE,20H
.WORD PLEFT|PCROUCH,1
.WORD PCROUCH|PFIRE,20H
.WORD PJUMP|PDOWN|PRYTE,20H
.WORD 0,30H
.WORD PCROUCH|PFROCK,16H
.WORD PCROUCH|PUP,10H
.WORD PCROUCH|PRYTE,20H
.WORD PJUMP|PFIRE,20H
.WORD PDOWN|PLEFT,40H
.WORD PRYTE|PCROUCH,1
.WORD PCROUCH|PFROCK,20H
.WORD PLEFT,20H
.WORD PUP,10H
.WORD PRYTE|PUP,20H
.WORD PRYTE|PUP|PJUMP,30H
.WORD PFIRE,20H
.WORD PCROUCH|PFIRE,20H
.WORD 0,30H
.WORD PRYTE|PDOWN,10H
.WORD PRYTE,10H
.WORD PLEFT|PCROUCH,1
.WORD PCROUCH|PFIRE,10H
.WORD PJUMP|PFROCK,20H
.WORD PDOWN|PLEFT,40H
.WORD PRYTE|PCROUCH,1
.WORD PCROUCH|PFROCK,20H
.WORD PLEFT,20H
.WORD PUP,10H
.WORD PRYTE,20H
.WORD PRYTE|PUP|PFIRE,30H
.WORD 0FFFFH
**************************************************************************
* *
* ATTPSLP - ATTRACT MODE PLAYER SLEEP, CHECKS FOR DEATH EACH TICK *
* A10 = # TICKS TO SLEEP *
* A11 = PLINDX *
* RETURNS: *
* CARRY CLEAR = NOT DEAD YET *
* CARRY SET = DEAD! *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
ATTPSLP
PUSHP A10
ATTPSLPL
MOVE *A11(PFLAGS),A0,L
BTST BDEAD,A0
JRNE ATTPSLPD ;BR = CAN IT, HE'S DEAD
SLEEP 1
DSJS A10,ATTPSLPL
CLRC
JRUC ATTPSLPX
ATTPSLPD
SETC
ATTPSLPX
PULLP A10
RETP
**************************************************************************
* *
* AMODWAVE - INITIALIZE AN ATTRACT MODE WAVE: *
* - MAKE BACKGROUND BLOCKS USING WAVE BGND INIT. TABLE *
* - FIRE OFF ALL PROCESS USING WAVE PROC. INIT. TABLE *
* CURRENT ATTRACT WAVE MUST BE INDICATED IN VARIABLE, AWAVE. *
* IT IS ASSUMED THAT THE DISPLAYON FLAG IS CLEAR WHEN THIS IS CALLED. *
* THIS ROUTINE WILL SET THAT FLAG BEFORE FINISHING. *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
AMODWAVE
MMTM A12,A8,A9,A10,A11
CLR A0
MOVE A0,@DISPLAYON,W
CALLA DMAQWAIT
CALLA CLR_SCRN
CALLA MYOINIT
CALLA WRAMINIT ;INITIALIZE WAVE RAM
CALLA BBINIT
CALLA GETWAVE ;SET UP WAVE DIFFICULTY PARAMS
MOVK 1,A0
MOVE A0,@DISPLAYON,W
*SET UP SCORE AREA
CALLA P1LLINIT ;SEND OUT PLAYER ONE
MOVI P1DATA,A11
CREATE P1PID|PMPID,PRESCONT
MOVI P2DATA,A11
CREATE P2PID|PMPID,PRESCONT
MOVI SCRNMID,A0 ;POINT FROM WHICH TO START THE EXPAND
MOVE A0,@SCRNTL,L
MOVE A0,@SCRNLR,L ;MAKE THE SCREEN WINDOW A POINT
MOVI WAVEBGND,A10
MOVE @AWAVE,A0,W
DEC A0 ;MAKE WAVE # 0 BASED
SLL 28,A0 ;WAVE ONLY SIGNIFICANT TO 4 BITS RIGHT NOW
SRL 23,A0
*** SLL 5,A0
MOVI BAKSTAKS,A1
MOVE A1,@BAKSTAKP,L ;INITIALIZE BACKGROUND STACK POINTER
MOVI OBJSTAKS,A1
MOVE A1,@OBJSTAKP,L ;INITIALIZE OBJECT STACK POINTER
ADD A0,A10
MOVE *A10,A10,L
CALLA INITBGND ;INITIALIZE THE CURRENT BACKGROUND
MOVE *A10+,A1,W ;AND THE SCROLL STOPPER
MOVE A1,@GOALCARD,W
CALLA GOALXFER ;TRANSFER GOAL DATA TO RAM BLOCK
MOVI GOALDOOR,A14
CALLA INITFGND ;INITIALIZE THESE FORE GROUND DITTIES
CALLA SCORAREA
CREATE BGNDPID,BSCHKG ;CREATE THE SCROLL CHECKER
CREATE BUPDPID,BBOFSCRN ;CREATE THE BACKGROUND UPDATE PROCESS
**** CREATE INDPID,GAMEOTXT ;PUT UP THE "GAME OVER" TEXT
MOVI 40,A0
MOVI SCRNST,A10
MOVI SCRNEND,A11
JSRP SCREXP32 ;EXPAND THE PLAYFIELD SCREEN
MOVI 1000H,A9
CREATE SKYPID,SKYUP
CREATE MASTERID,MASTERDP ;CREATE MASTER DISPATCH
MOVK 2,A1
MOVE A1,@GAMERASE,W ;FULL SCREEN AUTO-ERASE
MMFM A12,A8,A9,A10,A11
RETP
.STRING "NNAARRCC CCOOPPYYRRIIGGHHTT ((CC)) 11998888 "
.STRING "WWIILLLLIIAAMMSS EELLEECCTTRROONNIICCSS GGAAMMEESS,, IINNCC.."
.EVEN