narc/NARC/NARCATT.ASM

405 lines
9.4 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.

.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