cruisin-usa/INTRO.ASM

3874 lines
60 KiB
NASM
Executable File
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 "INTRO.ASM"
*----------------------------------------------------------------------------
*INTRO SCREENS AND RELATED ROUTINES
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
*
.include MACS.EQU
.include MPROC.EQU
.include OBJ.EQU
.include VUNIT.EQU
.include CMOS.EQU
.include SYSID.EQU
.include SYS.EQU
.include GLOBALS.EQU
.include SNDTAB.EQU
.include PALL.EQU
.include OBJECTS.EQU
.include TEXT.EQU
.include DELTA.EQU
.include ERROR.EQU
.include H2HOBJ.EQU
.include COMM.EQU
.text
.bss START_HIT,1
.bss CHOSEN_VEHICLE,1 ;WHEEL POSITION W/HYSTERISUS
.bss CHOSEN_TRANSMISSION,1
.bss CHOSEN_RACE,1
.bss END_OF_GAMEP,1
.bss RACE_MODE,1 ;USA (A-Z) || SINGLE
.bss FIRST_RACE,1 ;T or F
.bss POSES,1 ;for the WHEEL
.bss GAMEDIFF,1
.bss CHECKPOINT_NUM,1
.bss H2H_FLAGSTATE,1 ;WAVEFLAG
*----------------------------------------------------------------------------
*
*
*
*
romdata
JINOW .string "JOIN IN NOW",0
.text
HEAD2HEAD_LOGO_WAIT:
LDI 1,AR6
BU H2HLE
HEAD2HEAD_LOGO:
CLRI AR6
H2HLE
LDI 2,R0
STI R0,@FRAMRATE ;frame governor
LDI @_MODE,R0 ;shut off infinity
AND MMODE,R0
STI R0,@_MODE
LDL redhd1,AR2
LDI 0,R2
LDI 0,R3
LDI 368,RC
CALL OBJ_QMAKE
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL H2HPAL2,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
STI AR0,*+AR7(PDATA) ;red (bottom)
LDL yelhd1,AR2
LDI 0,R2
LDI 0,R3
LDI 368,RC
CALL OBJ_QMAKE
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL H2HPAL2,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
STI AR0,*+AR7(PDATA+1) ;yellow (bottom)
LDL big2,AR2
LDI 0,R2
LDI 0,R3
LDI 368,RC
CALL OBJ_QMAKE
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL H2HPAL3,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
STI AR0,*+AR7(PDATA+2) ;big2
FLOAT 160,R6 ;60+4*25
FLOAT 4000,R7 ;big2
LDI 25,AR5
H2HLLP
LDI *+AR7(PDATA+1),AR0 ;red (bottom)
STF R6,*+AR0(OPOSY)
LDI *+AR7(PDATA),AR0 ;yellow
NEGF R6,R0
STF R0,*+AR0(OPOSY)
LDI *+AR7(PDATA+2),AR0 ;big2
STF R7,*+AR0(OPOSZ)
SUBF 4,R6
LDLF 360,R0
SUBF R0,R7,R1
MPYF 0.1,R1
SUBF R1,R7
CALL JINMSG
CALL KABOSHP
BC KABOSH
SLEEP 1
DBU AR5,H2HLLP
READADJ ADJ_ATTRACT_MODE_SOUND
CMPI 1,R0
BNE NOSND1
SOND1 STAMP
NOSND1
;cycle HEAD 2 HEAD punch
;
LDI *+AR7(PDATA),AR4 ;yellow
FLOAT 120,R6
JSRP THROBIT
CALL KABOSHP
BC KABOSH
LDI *+AR7(PDATA+2),AR4 ;big2
FLOAT 300,R6
JSRP THROBIT
CALL KABOSHP
BC KABOSH
LDI *+AR7(PDATA+1),AR4 ;red (bottom)
FLOAT 120,R6
JSRP THROBIT
CALL KABOSHP
BC KABOSH
;
;
CMPI 1,AR6 ;are we waiting for a joiner??
BEQ WFC
CALL KABOSHP
BC KABOSH
SLEEP 30
BR CYCLE_ATTR
WFC:
LDI 1,R0
STI R0,@FRAMRATE ;frame governor
WFCLP342
LDI @ICF,R0
BGT NOMSGG
LDL JINOW,AR2
FLOAT 256,R2
FLOAT 100,R3
LDI 1,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
NOMSGG
SLEEP 1
CALL KABOSHP
BNC WFCLP342
; LDI @TRANSMISSION_ACTIVE,R0
; BZ KABOSH
;
; LDI @OM_MODE,R0
; AND MMODE,R0
; CMPI MBONUS,R0
; BEQ WFCLP342
; CMPI MINIT,R0
; BEQ WFCLP342
; CMPI MINSERT_COINS,R0
; BEQ WFCLP342
;
; LDI @OM_LINKWAIT,R0
; BNZ WFCLP342
KABOSH
CALL CLEAR_LINK
LDI -2,R0
STI R0,@_ATTR_MODE
BU SET_ATTR
*----------------------------------------------------------------------------
*RETURNS CARRY SET ON KABOSH THIS MESS
*
*
KABOSHP:
LDI @TRANSMISSION_ACTIVE,R0
BZ TKABOSH
LDI @OM_MODE,R0
AND MMODE,R0
CMPI MBONUS,R0
BEQ FKABOSH
CMPI MINIT,R0
BEQ FKABOSH
CMPI MINSERT_COINS,R0
BEQ FKABOSH
CMPI MATTR,R0
BEQ TKABOSH
LDI @OM_LINKWAIT,R0
BZ TKABOSH
FKABOSH
CLRC
RETS
TKABOSH
SETC
RETS
JINMSG:
CMPI 1,AR6
BNE NOJINMSG
LDL JINOW,AR2
FLOAT 256,R2
FLOAT 100,R3
LDI 1,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
NOJINMSG
RETS
ADDFL .MACRO VAL,REG
.data
l? .float :VAL:
.text
ADDF @l?,:REG:
.ENDM
SUBFL .MACRO VAL,REG
.data
l? .float :VAL:
.text
SUBF @l?,:REG:
.ENDM
*----------------------------------------------------------------------------
THROBIT:
LDI 1,AR5
THROBLP1
LDF *+AR4(OPOSZ),R0
SUBF R6,R0
STF R0,*+AR4(OPOSZ)
CALL JINMSG
CALL KABOSHP
BC ENDTHROB
SLEEP 1
DBU AR5,THROBLP1
READADJ ADJ_ATTRACT_MODE_SOUND
CMPI 1,R0
BNE NOSND2
SOND1 STAMP
NOSND2
LDI 4,AR5
KKGKG CALL JINMSG
CALL KABOSHP
BC ENDTHROB
SLEEP 1
DBU AR5,KKGKG
LDI 1,AR5
THROBLP2
LDF *+AR4(OPOSZ),R0
ADDF R6,R0
STF R0,*+AR4(OPOSZ)
CALL JINMSG
CALL KABOSHP
BC ENDTHROB
SLEEP 1
DBU AR5,THROBLP2
ENDTHROB
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
romdata
WFCHAL1 .string "WAITING",0
WFCHAL2 .string "FOR CHALLENGER",0
WFCHAL3 .string "HOLD RADIO OR VIEW3 TO CANCEL",0
.text
.bss FRAMELAG,1
*
*
WAIT_FOR_CHALLENGER:
LDI 5,R0
STI R0,@FRAMELAG
.globl BOILEROBJ
CLRI R0
STI R0,@BOILEROBJ
;IF NO TRANSMISSIONS ARE HAPPENING
;(OTHER == SINGLE PLAYER) THEN IGNORE THIS MESS AND ASSUME
;SINGLE PLAYER
;
LDI @TRANSMISSION_ACTIVE,R0
BZ WFCLPXXX
LDI @NOASK_LINK,R0
BNZ WFCLPXXX
LDI @FIRST_RACE,R0
BNZ CHAHC
.globl BOILERPLATE_INIT
CALL BOILERPLATE_INIT
LDI AR0,AR2
CALL OBJ_INSERTP
CHAHC
CLRI R0
STI R0,@START_HIT
STI R0,@miniidle
LDI @_MODE,R0
OR MGO,R0
STI R0,@_MODE
;if no challenger
LDI 20,R0
STI R0,@_countdown
CALL SEND_VEHICLE
WFCLP
CALL SEND_VEHICLE
LDI @COINDROP,R0
BZ NOWORRY
CLRI R0
STI R0,@COINDROP
LDI 20,R1
BU JJFHF
NOWORRY
LDI @_countdown,R1
LDI @OM_MODE,R0
AND MMODE,R0
CMPI MINIT,R0
LDIEQ 20,R1
CMPI MBONUS,R0
LDIEQ 20,R1
JJFHF STI R1,@_countdown
;IF challenger found THEN wait until ready then exit
;
LDI @HEAD2HEAD_ON,R0
BZ BABAB
LDI @OM_VEHICLE,R0
BGE WAITX ;WE'RE THERE DUDE!
BABAB
LDI @HEAD2HEAD_ON,R0
BNZ HHFBF
LDI @_countdown,R0
BLE WFCLPXXX
HHFBF
LDI @FRAMELAG,R0
DEC R0
LDILT 0,R0
STI R0,@FRAMELAG
BGT NOMSG768
LDL WFCHAL1,AR2
FLOAT 256,R2
FLOAT 100,R3
LDI 1,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
LDL WFCHAL2,AR2
FLOAT 256,R2
FLOAT 146,R3
LDI 1,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
NOMSG768
;if it is a linked game AND he hasn't chosen his vehicle
;then wait for him to choose his vehicle
;
LDI @HEAD2HEAD_ON,R0
BZ BABAHH
SLEEP 1
BU WFCLP
BABAHH
*ELP CHANGE
; LDI @miniidle,R0
; INC R0
; CMPI 2,R0
; LDIGE 0,R0
; STI R0,@miniidle
; CMPI 0,R0
; BNE JJFJFJ
LDI @SWITCHBUTS,R0
RS 16,R0
; AND SW_VIEW0_H|SW_VIEW1_H|SW_VIEW2_H|SW_RADIO_H,R0
AND SW_VIEW2_H|SW_RADIO_H,R0
BZ JJFJFJ
LDI @_countdown,R0
DEC R0
LDILT 0,R0
STI R0,@_countdown
JJFJFJ
*ELP END CHANGE
LDI @FRAMELAG,R0
BGT NOMSG123
CALL WAITINTROTIMER
LDL WFCHAL3,AR2
FLOAT 256,R2
FLOAT 192,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
NOMSG123
SLEEP 1
BU WFCLP
WFCLPXXX
CLRI R0
STI R0,@MY_LINKWAIT
STI R0,@HEAD2HEAD_ON
CALL SEND_LINKCANCELLED
SLEEP 1
CALL SETONE ;1 PLAYER GAME
WAITX
;*****
;***** WE CAN NO LONGER ACCEPT A DUDE
;*****
;*****
LDI @BOILEROBJ,AR2
CMPI 0,AR2
CALLNE OBJ_DELETE
LDI @_MODE,R0
ANDN MGO,R0
STI R0,@_MODE
LDI 5,R0 ;so player doesn't puke (see near call)
STI R0,@_countdown
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*an issue start game has been called and
*it has been determined that the other machine
*is either in MBONUS or MINIT. at that point
*we will wait for the other machine to enter
*MATTR, or MINTRO
*
*
*
CHECK_ENDBONUS:
LDI @TRANSMISSION_ACTIVE,R0
BZ CEBT
LDI @OM_BONUS_WAITFLAG,R0
BNZ CEBT
LDI @OM_LINKWAIT,R0
BNZ CEBT
LDI @HEAD2HEAD_ON,R0
BNZ CEBT
LDI @OM_MODE,R0
AND MMODE,R0
CMPI MATTR,R0
BEQ CEBT
CLRC
RETS
CEBT
SETC
RETS
pbss BONUS_WAITFLAG,1
pbss OM_BONUS_WAITFLAG,1
WAIT_FOR_ENDBONUS:
PUSHP R6
SLEEP 2
CALL CHECK_ENDBONUS
BC ISGAME5
POPP R6
CMPI 1,R6
BEQ NOOBJSSS
LDL H2HPAL2,AR2
CALL PAL_ALLOC_RAW
LDL H2HPAL3,AR2
CALL PAL_ALLOC_RAW
LDL redhd1,AR2
LDI 0,R2
LDI -60,R3
LDI 368,RC
CALL OBJ_QMAKE
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
PUSHP AR2
CALL OBJ_INSERTP
LDI AR2,AR0
LDL H2HPAL2,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDL yelhd1,AR2
LDI 0,R2
LDI 60,R3
LDI 368,RC
CALL OBJ_QMAKE
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
PUSHP AR2
CALL OBJ_INSERTP
LDI AR2,AR0
LDL H2HPAL2,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDL big2,AR2
LDI 0,R2
LDI 0,R3
LDI 368,RC
CALL OBJ_QMAKE
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
PUSHP AR2
CALL OBJ_INSERTP
LDI AR2,AR0
LDL H2HPAL3,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
BU LKJASDFGD
NOOBJSSS
.globl BOILERPLATE_INIT
CALL BOILERPLATE_INIT
LDI AR0,AR2
CALL OBJ_INSERTP
LKJASDFGD
PUSHP R6
WAIT_FOR_ENDBONUS_LP
LDI 1,R0
STI R0,@BONUS_WAITFLAG
LDL WFCHAL1,AR2
FLOAT 256,R2
FLOAT 100,R3
LDI 1,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
LDL WFCHAL2,AR2
FLOAT 256,R2
FLOAT 160,R3
LDI 1,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
CALL CHECK_ENDBONUS
BC ISGAME5
SLEEP 1
BU WAIT_FOR_ENDBONUS_LP
ISGAME5
CLRI R0
STI R0,@BONUS_WAITFLAG
SLEEP 2
POPP R6
CMPI 1,R6
BEQ NOJHASD
POPP AR2
CALL OBJ_DELETE
POPP AR2
CALL OBJ_DELETE
POPP AR2
CALL OBJ_DELETE
LDL H2HPAL2,AR2
CALL PAL_DELETE_RAW
LDL H2HPAL3,AR2
CALL PAL_DELETE_RAW
BU IURENDFL
NOJHASD
LDI @BOILEROBJ,AR2
CMPI 0,AR2
CALLNE OBJ_DELETE
IURENDFL
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
ISSUE_STARTGAME_TSEL:
LDI 1,R6
BU LKAS534
ISSUE_STARTGAME:
CLRI R6
LKAS534
LDI @TRANSMISSION_ACTIVE,R0
BZ NOGAME
; LDI @OM_MODE,R0
; AND MMODE,R0
; CMPI MGAME,R0
; BEQ NOGAME
*ELP CHANGE
LDI @FIRST_RACE,R0
BNZ NOTNND
LDI @WAS_HEAD2HEAD_ON,R0
BNZ NOTNND
LDI @OM_MODE,R0
AND MMODE,R0
CMPI MBONUS,R0
BEQ NOGAME
CMPI MINIT,R0
BEQ NOGAME
CMPI MINSERT_COINS,R0
BEQ NOGAME
NOTNND
;IF THE OTHER GAME IS:
;  MBONUS
;  MINIT
;THEN
; PLACE WAIT FOR CHALLENGER ON SCREEN
; IF PLAYER WAITS THEN WAIT FOR OTHER ISSUE START GAME
; ELSE IF PLAYER SINGLE THEN SINGLE PLAYER
;
LDI @OM_MODE,R0
AND MMODE,R0
CMPI MBONUS,R0
BEQ DOIT6
CMPI MINSERT_COINS,R0
BEQ DOIT6
CMPI MINIT,R0
BNE NODOIT6
DOIT6
JSRP WAIT_FOR_ENDBONUS
NODOIT6
LDI @WAS_HEAD2HEAD_ON,R0
BNZ DOITANY4
LDI @OM_BONUS_WAITFLAG,R0
BNZ DOITANY4
LDI @_ATTR_MODE,R0
CMPI -7,R0
BEQ DOITANY4
LDI @OM_MODE,R0
AND MMODE,R0
CMPI MATTR,R0
BEQ DOITANY4
*ELP CHANGE
; BNE PLAPA55
; LDI @FIRST_RACE,R0
; BNZ DOITANY4
;PLAPA55
*ELP END CHANGE
;we were not playing a linked game,
;AND we were both playing race across
;the usa
;THEREFORE
;to continue is to play a single player game
;
*ELP CHANGE February 8,1995
;when the player hits start there is a slight pause
;when the player goes into INTRO (1) but before
;he goes to issue start game (2)
;(1) MINTRO on start button decode then calls COLD_ENTER
;(2) creates the PLYR_INTRO process, and 1st sequence
; then sends the LINK predicate to the other machine
;(note:)
; a. prior to FEB 8th the game would go to MGAME
; b. the game needs to switch modes to note drain the coins
;
;
CMPI MINTRO,R0
BNE NOGAME
; BU NOGAME
*ELP END CHANGE
DOITANY4
CLRI R0
STI R0,@BONUS_WAITFLAG
*ELP END CHANGE
CLRI R0
STI R0,@LINKEDP
CALL SEND_START_GAME
LDI 30,AR5
WTFORRETVAL
DEC AR5
CMPI 0,AR5
BLE NTINLK
SLEEP 1
*ELP CHANGE
LDI @TRANSMISSION_ACTIVE,R0
BZ NOGAME
*ELP END CHANGE
LDI @LINKEDP,R0 ;0 = invalid
;1 = linked
;2 = not linked
BZ WTFORRETVAL
CMPI 1,R0
BNE NTINLK
LDI 1,R0
STI R0,@HEAD2HEAD_ON
INCAUD AUD_H2HGAMES
CLRI R0
STI R0,@OM_LINKWAIT
STI R0,@MY_LINKWAIT
NTINLK
.bss NOASK_LINK,1
CLRI R0
STI R0,@NOASK_LINK
RETP
NOGAME
*ELP CHANGE
CALL SEND_LINKCANCELLED
SLEEP 1
*ELP END CHANGE
CALL CLEAR_LINK
LDI 1,R0
STI R0,@NOASK_LINK
CALL SETONE
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
PLYR_INTRO:
LDI RM_SINGLE,R0
STI R0,@RACE_MODE
LDI MINTRO|MGO,R0
STI R0,@_MODE
CLRI R0
STI R0,@WAS_HEAD2HEAD_ON
LDI 1,R0
STI R0,@FIRST_RACE
JSRP ISSUE_STARTGAME
CALL INIT_LASTHS_TABLE ;Initialize the table for players hs entries
LDI -1,R2
SETADJ ADJ_INITIALS
INCAUD AUD_GAMENUMBER
INCAUD AUD_GAMES_START
CALL HSTDEC
CLRI R0
STI R0,@BONUS_WAVE
LDF 1.0,R0
STF R0,@GAMEDIFF
READAUD AUD_UNFINISHED_GAMES
PUSH R0
READAUD AUD_UNFINISHED_GAMES_FOUND
POP R1
CMPI R1,R0
BEQ NOULOG
ERRON U,EC_UNFINISHED
LDI R1,R2
SETAUD AUD_UNFINISHED_GAMES_FOUND
NOULOG
INCAUD AUD_NUM_UNFINISHED
LDI 1,R0 ;SHUFFLE DRIVIN
STI R0,@TUNE_IDX
CNR_ENTER
LDP @IN_RESET_MODE
LDI @IN_RESET_MODE,R0
SETDP
BZ CONTINUE
SLEEP 1
BU CNR_ENTER
CONTINUE
SOND1 START_THEME
LDI BUT_START,R0 ;BUTTON OVERWRITE (MAYBE USE MASK IN FUTURE)
STI R0,@BUTTON_STATUS
CLRI R0 ;INITIALIZE SCORE
STI R0,@SCORE
STI R0,@END_OF_GAMEP ;END OF GAME FLAG
STI R0,@_MPH
STI R0,@STARTSECTION ;BEGIN LEG OF JOURNEY
STI R0,@CAR_CHOICE_GOTTEN
STI R0,@CHOSEN_RACE
LDI -1,R0
STI R0,@IS_HIDDEN
CALL GETCMOS_VALUES
CALL INIT_PEDALCHK
CALL OBJ_INIT
CALL TEXT_INIT
JSRP TRACK_SELECTION
LDI @FIRST_RACE,R0
BZ LOAD_NEW_SELECTION
CALL INIT_PEDALCHK
CALL OBJ_INIT
CALL TEXT_INIT
.bss DCALL,1 ;IS CHOOSE TRANSMISSION ACTIVE?
CLRI R0
STI R0,@DCALL
JSRP CHOOSE_TRANSMISSION
LDI 1,R0
STI R0,@DCALL
JSRP CHOOSECAR
LDI BUT_VIEW2,R0 ;BUTTON OVERWRITE (MAYBE USE MASK IN FUTURE)
STI R0,@BUTTON_STATUS
WFSNP SLEEP 1
LDI @START_NOW_P,R0
BZ WFSNP
ALL_JOINUP
LDI @_MODE,R0
OR MINFIN,R0
STI R0,@_MODE
READAUD ADJ_TIME_TO_START
MPYI 5,R0
ADDI 60,R0
STI R0,@_countdown
CREATEC WAVEFLAG,UTIL_C|MONKEY_T
CALL CLEANUP_TRACKSEL_PALS
LDI UTIL_C|CHOOSECAR_T,R0
LDI -1,R1
CALL PRC_KILLALL
;
;SETUP THE GAME
;
CLRF R0
STF R0,@GAME_TIMER
INCAUD AUD_NUM_BUYINS
LDI 0AAh,R0
STI R0,@BGNDCOLA
LDI 1,R0 ;SET GAME FRAME RATE
STI R0,@FRAMRATE
STI R0,@TIMECLR
STI R0,@DRONE_DISPATCH_P
CLRI R0
STI R0,@SCREENWIPE_DONE
STI R0,@NEXT_STARTUP
STI R0,@CHALLENGE_RACE
LDI 9,R0
STI R0,@POSITION
READAUD ADJ_CHECKPOINT_BONUS
STI R0,@CHECKPOINT_TIME_BONUS
LDI 1,R0
STI R0,@NOAERASE
;///////////////////////////////
LDI @FIRST_RACE,R0
BZ _PLYR
CLRI R2 ;FIRST WAVE
SETAUD AUD_LAST_LEG
LDF 1.0,R0
STF R0,@WHEELPWR
DIE
.bss START_NOW_P,1
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
CHOOSE_NEXT_RACE:
CALL TEXT_INIT
LDI UTIL_C|TEXTP_T,R0
LDI -1,R1
CALL PRC_KILLALL
LDI PLYR_C|PLYR1_T,R0
LDI -1,R1
CALL PRC_KILLALL
LDI @_MODE,R0
ANDN MINFIN|MWATER,R0
STI R0,@_MODE
CALL OBJ_INIT
CALL DYNAOBJ_INIT ;init DYNAMIC OBJECTS
CALL CARB_INIT ;init CAR BLOCKS
CALL INIT_RDDEBRIS ;initialize ROAD DEBRIS list(s)
CLRI R0
STI R0,@FIRST_RACE
;
SLEEP 4
;
BU CNR_ENTER
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
LOAD_NEW_SELECTION:
LDI @CHOSEN_RACE,AR0
ADDI @FULLSETUP_TABLEI,AR0
LDI *AR0,R0
CALLU R0
LDI MINTRO|MINFIN,R0
STI R0,@_MODE
LDF @START_POS+X,R0
LDF @START_POS+Y,R1
LDF @START_POS+Z,R2
LDP @_CAMERAPOS+X
STF R0,@_CAMERAPOS+X
STF R1,@_CAMERAPOS+Y
STF R2,@_CAMERAPOS+Z
SETDP
LDI @CHOSEN_RACE,AR0
ADDI @RACE_STARTING_POINTSI,AR0
LDI *AR0,R0
STI R0,@STARTSECTION
CALL BGD_INIT
CALL INIT_GAMELEG
LDI MGAME,R0
STI R0,@_MODE
CALL SCREENWIPE_OPEN
SLEEP 6
LDI MGAME|MHUD|MINFIN,R0
STI R0,@_MODE
LDI @CHOSEN_RACE,AR0
ADDI @BONUS_POSTLAUNCHI,AR0
LDI *AR0,R0
CALLU R0
LDI BUT_VIEW2,R0 ;BUTTON OVERWRITE (MAYBE USE MASK IN FUTURE)
STI R0,@BUTTON_STATUS
BU ALL_JOINUP
*----------------------------------------------------------------------------
PLYPOS2YL .set -400
PLYPOS2ZL .set 2200
*----------------------------------------------------------------------------
*
*PARAMETERS
* AR4 PLYRS CAR
*
WATCH_PLYRS_CAR:
LDF @START_RADY,R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR2,R2
CALL CLR_VECTORA
FLOAT -PLYPOS2ZL,R0
STF R0,*+AR2(Z)
FLOAT PLYPOS2YL,R0
STF R0,*+AR2(Y)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR4(OPOSX),R0
LDF *+AR4(OPOSY),R1
LDF *+AR4(OPOSZ),R2
ADDF *+AR2(X),R0
ADDF *+AR2(Y),R1
ADDF *+AR2(Z),R2
LDP @_CAMERAPOS
STF R0,@_CAMERAPOS+X
STF R1,@_CAMERAPOS+Y
STF R2,@_CAMERAPOS+Z
SETDP
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
INIT_GAMELEG:
CLRI R0
STI R0,@SMOKE_COUNT
STI R0,@DID_TIMED_OUT
STI R0,@CHECKPOINT_NUM
STI R0,@REAL_CHECKPOINTS
STI R0,@MOTION_STOP_HIT
STI R0,@H2H_FLAGSTATE
LDI 2,R0
STI R0,@FRAMRATE
LDF 0,R0
STF R0,@ROADKILL_SOUND_TIMER
CREATE RHO_DISPATCHER,SPAWNER_C|TRAFFIC_T
CREATE SIGMA_DISPATCHER,SPAWNER_C|TRAFFIC_T
CREATE CPOINT_LIGHT,SPAWNER_C|COLORCYC_T
CREATEC POSITION_FINDER,SPAWNER_C|TRAFFIC_T
CREATE MOVEIN_HUD_EQUIP,UTIL_C
LDI SM_HALT,R0
STI R0,@SUSPEND_MODE
LDI 0,R4
CREATE RACER_DRONE,DRONE_C
LDI 1,R4
CREATE RACER_DRONE,DRONE_C
LDI 2,R4
CREATE RACER_DRONE,DRONE_C
LDI 3,R4
CREATE RACER_DRONE,DRONE_C
LDI 4,R4
CREATE RACER_DRONE,DRONE_C
LDI 5,R4
CREATE RACER_DRONE,DRONE_C
LDI 6,R4
CREATE RACER_DRONE,DRONE_C
LDI 7,R4
CREATE RACER_DRONE,DRONE_C
LDI 9,R4
LDI @DIPRAM,R0
TSTB DIP_COMMP,R0
BNZ BABA66
TSTB CMDP_MASTER,R0
BZ BABA66
LDI 8,R4
BABA66
CREATE RACER_DRONE,DRONE_C
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*CHOOSECAR
*
CCTI .word CCT
CCT .string "CHOOSE CAR",0
CCTABI .word CCTAB
romdata
;all Y's were 0
;
CCTAB
.word -1384,-164,-4708,cvettem
.float PI
.word 0481h
.word -448,-200,-4708,hotrodm
.float PI
.word 0482h
.word 464,-177,-4708,misslem
.float PI
.word 0483h
.word 1424,-147,-4708,testorm
.float PI
.word 0484h
.word -1
.text
.bss CHOOSENCAR,1
RACE_STARTING_POINTSI .word RACE_STARTING_POINTS
romdata
RACE_STARTING_POINTS
.word 0
.word L_LEG2_BEGIN+1
.word L_LEG3_BEGIN+1
.word L_LEG4_BEGIN+1
.word L_LEG5_BEGIN+1
.word L_LEG6_BEGIN+1
.word L_LEG7_BEGIN+1
.word L_LEG8_BEGIN+1
.word L_LEG9_BEGIN+1
.word L_LEG10_BEGIN+1
.word L_LEG11_BEGIN+1
.word L_LEG12_BEGIN+1
.word L_LEG13_BEGIN+1
.word L_LEG14_BEGIN+1
.text
*
*CAMERA POSITION IS ASSUMED TO BE SET BY THE TIME
*THIS ROUTINE IS REACHED.
*
*
CHOOSECAR:
LDI @CHOSEN_RACE,AR0
ADDI @FULLSETUP_TABLEI,AR0
LDI *AR0,R0
CALLU R0
LDI @CHOSEN_RACE,AR0
ADDI @RACE_STARTING_POINTSI,AR0
LDI *AR0,R0
STI R0,@STARTSECTION
CALL BGD_INIT
LDI MINTRO|MINFIN|MWATER|MGO,R0
STI R0,@_MODE
CLRI R0
STI R0,@BGNDCOLA
STI R0,@START_HIT
CALL TEXT_INIT
SOND1 CHOOSEUCAR
CREATEC HIDDEN_VEHICLES,UTIL_C|CHOOSECAR_T
LDI @CCTI,AR2
FLOAT 256,R2
FLOAT 50,R3
LDI 600,RC
CALL TEXT_ADD
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
CALL SET40FONT
JT75 LDI @CAR_CHOICE_GOTTEN,R0
BNZ KIBO
SLEEP 1
BU JT75
KIBO
LDL crace_PALETTES,AR2
CALL dealloc_section
.data
XOFFSETI .word XOFFSET
XOFFSET .float -1384
.float -448
.float 464
.float 1424
.text
LDI @CHOSEN_VEHICLE,AR0
ADDI @XOFFSETI,AR0
LDF *AR0,R6
FLOAT 576,R1
SUBRF R1,R6
LANESIZE .set 1152
;if a slave then ALWAYS appear on right side
;
;
LDI @DIPRAM,R0
TSTB DIP_COMMP,R0
BNZ BABA
TSTB CMDP_MASTER,R0
BZ BABA
FLOAT LANESIZE,R1
ADDF R1,R6
BABA
LDF @START_RADY,R2
LDI @MATRIXAI,AR2
CALL HPFIND_YMATRIX
LDI AR2,R2
CALL CLR_VECTORA
STF R6,*+AR2(X)
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R6
LDF *+AR2(Z),R7
LDI @SINGLE_SECTION_TEMPPTR,R0
NLD LDI R0,AR0
LDF *+AR0(OPOSX),R0
ADDF R6,R0
STF R0,*+AR0(OPOSX)
LDF *+AR0(OPOSZ),R0
ADDF R7,R0
STF R0,*+AR0(OPOSZ)
LDI *+AR0(OLINK2),R0
BNZ NLD
LDI @CAMERAPOSI,AR2
LDF *+AR2(X),R0
ADDF R6,R0
STF R0,*+AR2(X)
LDF *+AR2(Z),R0
ADDF R7,R0
STF R0,*+AR2(Z)
LDL CAR_ARRAY,AR3
LDI 3,AR5
LNNN LDI *AR3++,AR0
LDF *+AR0(OPOSX),R0
ADDF R6,R0
STF R0,*+AR0(OPOSX)
LDF *+AR0(OPOSZ),R0
ADDF R7,R0
STF R0,*+AR0(OPOSZ)
DBU AR5,LNNN
LDI @_MODE,R0
ANDN MGO,R0
STI R0,@_MODE
LDI 5,R0 ;WAVEFLAG routine properly sets this
STI R0,@_countdown ;we just need to set so PLYR doesnt puke
LDI 100h,R0 ;FULL START INDEX
STI R0,@RACER_GRID_START
CALL TEXT_INIT ;ELIMINATE THE 'CHOOSE CAR' TEXT
LDI @CHOSEN_VEHICLE,R0
LDI @IS_HIDDEN,R1
CMPI -1,R1
BEQ NOHIDE
PUSH R0
LDI @CHOSEN_VEHICLE,AR2
CMPI 5,AR2
LDIEQ 1,AR2
CMPI 6,AR2
LDIEQ 2,AR2
CMPI 7,AR2
LDIEQ 3,AR2
ADDI AUD_CAR_SELECTION+4,AR2
CALL AUDIT_INC
POP R0
ADDI 4,R0
BU TMP886
NOHIDE
PUSH R0
LDI @CHOSEN_VEHICLE,AR2
ADDI AUD_CAR_SELECTION,AR2
CALL AUDIT_INC
POP R0
TMP886 STI R0,@CHOOSENCAR
LDI UTIL_C|CHOOSECAR_T,R0
LDI -1,R1
CALL PRC_KILLALL
LDI @DIPRAM,R0
TSTB DIP_COMMP,R0
BNZ JAJAKKA
JSRP WAIT_FOR_CHALLENGER
JAJAKKA
CALL INIT_GAMELEG
CREATE DROPTHEWHEEL,UTIL_C|CHOOSECAR_T
CREATE DROPTHECYCLE,UTIL_C|CHOOSECAR_T
CREATE DROPTHETURN,UTIL_C|CHOOSECAR_T
CREATE RAISE_DOOR,UTIL_C|CHOOSECAR_T ;in 50
;(BECOMES PLYR PROC)
CREATE ZOOMTOCAR,UTIL_C|CHOOSECAR_T ;in 25 (TRANS.ASM)
SLEEP 70
SLEEP 1
LDI UTIL_C|CHOOSECAR_T,R0
LDI -1,R1
CALL PRC_KILLALL
CALL CLEANUP_DIMCAR_PALS
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
.bss CAR_CHOICE_GOTTEN,1
THE_CAR_CHOICE_PROC:
; SLEEP 15
CLRI R0
STI R0,@CAR_CHOICE_GOTTEN
STI R0,@START_HIT
*
*CHOOSE CAR LOOP
*
LDI 12,R0
STI R0,@_countdown
CALL INIT_PEDALCHK
CCLP
LDI @START_HIT,R0
BNZ CCLPX
CALL GETCHOICE
CALL TRANSCHOICE
CALL DIAL_ROUT
CALL SHOW_CAR_STATISTICS
;-------time remaining
;
LDL time,AR2
LDI 242,R2 ;R2 POS X
LDI 337,R3 ;R3 POS Y
LDI TM|ZS,R4
CALL BLTMOD2D
CALL PEDALCHK
BC CCLPX
CALL INTROTIMER
SLEEP 1
LDI @_countdown,R0
BGT CCLP
CCLPX
*
*END CHOOSE CAR LOOP
*
LDI 1,R0
STI R0,@CAR_CHOICE_GOTTEN
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*CAR IS CHOOSEN, THEN RAISE THE GARAGE DOOR
*
*
*
RAISE_DOOR:
SOND1 GOPEN
LDI 49,AR5
LDI @CHOSEN_VEHICLE,AR2
ADDI 501h,AR2
CALL OBJ_FIND_FIRST
LDI AR0,AR4
RDLP
LDF *+AR4(OPOSY),R0
SUBF 14,R0
STF R0,*+AR4(OPOSY)
SLEEP 1
DBU AR5,RDLP
DIE
*----------------------------------------------------------------------------
.include DELTA.EQU
.include RACER.EQU
*----------------------------------------------------------------------------
*
*
*THIS PROCESS:
* 1) MOVES THE CAMERA TO THE VEHICLE
* 2) LOWERS VEHICLE TO GROUND
* 3) TURNS VEHICLE TO FACING OUT
* 4) DRIVES VEHICLE FORWARD (WHILE TRACKING
* WITH CAMERA)
* 5) INITIALIZES AS PLAYERS CAR
* 6) TRANSFERS CONTROL TO THE PLYRS
* MAIN ROUTINE
*
*
*
ZOOMTOCAR:
.globl START_NOW_P
CLRI R0
STI R0,@START_NOW_P
LDI @CHOSEN_VEHICLE,AR2
ADDI 481h,AR2
CALL OBJ_FIND_FIRST
LDI AR0,AR4
LDF @START_RADY,R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI 25,AR5
ZTCLP
;NOW MOVE TO IN FRONT OF OBJECT
LDF @START_RADY,R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR2,R2
CALL CLR_VECTORA
FLOAT -PLYPOS2ZL,R0
STF R0,*+AR2(Z)
FLOAT PLYPOS2YL,R0
STF R0,*+AR2(Y)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR4(OPOSX),R0
LDF *+AR4(OPOSY),R1
LDF *+AR4(OPOSZ),R2
ADDF *+AR2(X),R0
ADDF *+AR2(Y),R1
ADDF *+AR2(Z),R2
LDP @_CAMERAPOS
SUBF @_CAMERAPOS+X,R0
SUBF @_CAMERAPOS+Y,R1
SUBF @_CAMERAPOS+Z,R2
MPYF 0.2,R0
MPYF 0.2,R1
MPYF 0.2,R2
ADDF @_CAMERAPOS+X,R0
ADDF @_CAMERAPOS+Y,R1
ADDF @_CAMERAPOS+Z,R2
STF R0,@_CAMERAPOS+X
STF R1,@_CAMERAPOS+Y
STF R2,@_CAMERAPOS+Z
SETDP
;TURN CAR TO FACE AWAY (SMOOTH)
LDF @START_RADY,R2
CALL NORMITS
LDF R2,R0
LDF *+AR4(ORADY),R2
CALL NORMITS
STF R2,*+AR4(ORADY)
CALL GETTHETADIFF
ABSF R0,R1
CMPF 0.04,R1
BLT DOALL1
MPYF 0.10,R0
ADDF R0,R2
BU IBO45A
DOALL1 ADDF R0,R2
IBO45A STF R2,*+AR4(ORADY)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
;LOWER CAR TO GROUND
LDF *+AR4(OPOSY),R0
LDF *+AR4(OUSR1),R1
SUBF R0,R1,R0
MPYF 0.15,R0
LDF R0,R1
ADDF *+AR4(OPOSY),R0
STF R0,*+AR4(OPOSY)
LDI @CHOSEN_VEHICLE,AR2
ADDI 401h,AR2
CALL OBJ_FIND_FIRST
LDF *+AR0(OPOSY),R0
ADDF R1,R0
STF R0,*+AR0(OPOSY)
SLEEP 1
DBU AR5,ZTCLP
;NOW SET ALL FACING PROPERLY
;
PUSH AR4
LDI @CHOSEN_VEHICLE,AR2
ADDI 481h,AR2
CALL OBJ_FIND_FIRST
LDI AR0,AR4
POP AR4
LDI PLYR_C|PLYR1_T,R0
STI R0,*+AR7(PID)
*
*
*
*
;NOW MOVE TO IN FRONT OF OBJECT
LDI @CAMERAPOSI,AR6
LDI @CHOSEN_VEHICLE,AR2
CMPI 4,AR2
BLT NDO
SUBI 4,AR2
NDO ADDI 401h,AR2
CALL OBJ_FIND_FIRST
LDI AR0,AR2
CALL OBJ_DELETE
;TURN CAR TO FACE AWAY
LDF *+AR4(ORADY),R2
LDF @START_RADY,R0
CALL GETTHETADIFF
ADDF R0,R2
STF R2,*+AR4(ORADY)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
;LOWER CAR TO GROUND
LDF *+AR4(OPOSY),R0
LDF *+AR4(OUSR1),R1
SUBF R0,R1,R0
ADDF *+AR4(OPOSY),R0
STF R0,*+AR4(OPOSY)
SONDFX ENGINESTART
*
*
*
LDI 24,AR5
LDI @CHOSEN_VEHICLE,AR2
CMPI 4,AR2
BLT NDO2
SUBI 4,AR2
NDO2
ADDI 481h,AR2
CALL OBJ_FIND_FIRST
LDI AR0,AR4
LDI AR4,AR2
CALL OBJ_PULL
CALL PLYR_CAR_INIT
LDF 1,R6
PUSH AR5
PUSHFL R6
LDI *+AR4(OCARBLK),AR5
STF R6,*+AR5(CARSPEED)
LDF @START_RADY,R6
STF R6,*+AR5(CARYROT)
STF R6,*+AR5(CARVROT)
STF R6,*+AR5(CARDROT)
CLRF R2
CALL DRONEGO
POPFL R6
POP AR5
CALL WATCH_PLYRS_CAR
SONDFX STARTLINEREVS2
*
*NOW WE MOVE FORWARD AND INTO THE POSITION
*OF INSIDE LANE OF ROAD PIECE (OUSR1==0102h)
*
LDI @DYNALIST_TRUEBEGIN,AR0
LDI *+AR0(OUSR1),R1
ANDN 0FFh,R1
LDI *+AR0(OLINK4),AR0
LDI AR0,AR5
;MOVE FORWARD LOOP
;
MOVELOOP
LDF *+AR5(OPOSX),R0
SUBF *+AR4(OPOSX),R0
MPYF R0,R0
LDF *+AR5(OPOSZ),R1
SUBF *+AR4(OPOSZ),R1
MPYF R1,R1
ADDF R1,R0
LDF R0,R4
FLOAT 700,R1
;if a slave then ALWAYS appear on right side
;
LDI @DIPRAM,R3
TSTB DIP_COMMP,R3
BNZ BABADUY
TSTB CMDP_MASTER,R3
BZ BABADUY
FLOAT LANESIZE,R3
ADDF R3,R1
BABADUY
MPYF R1,R1
CMPF R1,R0
BLE IBODONE
PUSH AR5
LDI *+AR4(OCARBLK),AR5
LDF 0.5,R0
STF R0,*+AR5(CARTHROTTLE)
CLRF R2
CALL DRONEGO
POP AR5
CALL WATCH_PLYRS_CAR
SLEEP 1
BU MOVELOOP
IBODONE
LDI @DIPRAM,R3
TSTB DIP_COMMP,R3
BNZ BABADUY4
LDI AR5,AR2
TSTB CMDP_MASTER,R3
LDIZ 572,AR3
LDINZ 1724,AR3
FLOAT AR3,R0
STF R0,*+AR7(DELTA_XLANE)
LDI 0,AR3
CALL SPOS_INIT ;INIT STARTING POSITION
BABADUY4
LDI 1,R0
STI R0,@START_NOW_P
LDI MGAME|MINFIN|MWATER,R0 ;NOT MGO NOT MHUD
STI R0,@_MODE
BU PLYR_INTRO_ENTER
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
.bss CAR_ARRAY,4
GETTHECARS:
LDF @START_RADY,R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDL CAR_ARRAY,AR3
LDI @CCTABI,AR4
CLRI R4
LISTLP CALL OBJ_GET
LDI @VECTORAI,AR2
FLOAT *AR4++,R1 ;GET X POSITION
STF R1,*+AR2(X)
FLOAT *AR4++,R1 ;GET Y POSITION
STF R1,*+AR2(Y)
FLOAT *AR4++,R1 ;GET Z POSITION
STF R1,*+AR2(Z)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R0
ADDF @START_POS+X,R0
STF R0,*+AR0(OPOSX)
LDF *+AR2(Y),R0
ADDF @START_POS+Y,R0
STF R0,*+AR0(OPOSY)
LDF *+AR2(Z),R0
ADDF @START_POS+Z,R0
STF R0,*+AR0(OPOSZ)
LDI *AR4++,R0
STI R0,*+AR0(OROMDATA)
STI AR0,*AR3++
LDI AR0,AR2
CALL OBJ_INSERT
LDI AR7,AR1
ADDI PDATA,AR1
ADDI R4,AR1
STI AR0,*AR1
INC R4
LDF *AR4++,R2
ADDF @START_RADY,R2
LDI AR0,AR2
ADDI OMATRIX,AR2
STF R2,*+AR0(ORADY)
CALL FIND_YMATRIX
LDI *AR4++,R0
STI R0,*+AR0(OID)
LDI *AR4,R0
CMPI -1,R0
BNE LISTLP
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*SHOW CAR STATISTICS
*
*USES
* AR4,AR5,AR6,R4,R5
*
SCS_TABI .word SCS_TAB
SCS_TAB .float 10,70,170,230
SHOW_CAR_STATISTICS:
LDI @DCALL,R0
RETSZ
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
LDI @CHOSEN_VEHICLE,AR7
ADDI @SCS_TABI,AR7
LDL TITLES,AR5
LDI 5-1,AR3
GBERLP LDI *AR5++,AR2
LDF *AR7,R2
FLOAT 180,R3
FLOAT AR3,R0
MPYF 10,R0
SUBF R0,R3
LDI 1,RC
CALL TEXT_ADDDS
CALL SETFIXEDFONTDS
DBU AR3,GBERLP
LDI @CHOSEN_VEHICLE,AR5
ADDI @TEXTTABSI,AR5
LDI *AR5,AR5
LDI 5,AR3
GNNERLP
LDI *AR5++,AR2
LDF *AR7,R2
ADDF 100,R2
CMPI 6,AR3
LDFEQ *AR7,R2
FLOAT 180,R3
FLOAT AR3,R0
MPYF 10,R0
SUBF R0,R3
LDI 1,RC
CALL TEXT_ADDDS
CALL SETFIXEDFONTDS
DBU AR3,GNNERLP
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
RETS
*----------------------------------------------------------------------------
.bss CAR1PAL,129
.bss CAR2PAL,129
.bss CAR3PAL,129
.bss CAR4PAL,129
CARPAL_TABLEI .word CARPAL_TABLE
CARSRCPAL_TABI .word CARSRCPAL_TAB
romdata
CARPAL_TABLE .word CAR1PAL,CAR2PAL,CAR3PAL,CAR4PAL
CARSRCPAL_TAB .word cvette_p,hotrod_p,missle_p,testor_p
.text
*----------------------------------------------------------------------------
*
*(AND OVERHEAD LIGHT CLEANUP)
*
*
CLEANUP_DIMCAR_PALS:
LDL flour_lghtof,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
LDL CAR1PAL,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
LDL CAR2PAL,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
LDL CAR3PAL,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
LDL CAR4PAL,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*GENERAL PURPOSE CHOOSE CAR LOOP ROUTINE
*
*
;THE CAR
RNDR_C1_DYH .set PDATA+1 ;desired Y height
RNDR_C1_SYH .set PDATA+2 ;starting y height
RNDR_C2_DYH .set PDATA+3
RNDR_C2_SYH .set PDATA+4
RNDR_C3_DYH .set PDATA+5
RNDR_C3_SYH .set PDATA+6
RNDR_C4_DYH .set PDATA+7
RNDR_C4_SYH .set PDATA+8
;THE LIFT
RNDR_L1_DYH .set PDATA+9 ;desired Y height
RNDR_L1_SYH .set PDATA+10 ;starting y height
RNDR_L2_DYH .set PDATA+11
RNDR_L2_SYH .set PDATA+12
RNDR_L3_DYH .set PDATA+13
RNDR_L3_SYH .set PDATA+14
RNDR_L4_DYH .set PDATA+15
RNDR_L4_SYH .set PDATA+16
CDYH .set 0
CSYH .set 1
C_SIZE .set 2
C_STRT .set PDATA+1
C_OFF2LIFT .set 8
*----------------------------------------------------------------------------
*
*
*
*
*PARAMETERS
* AR2 RAW PALETTE CAR1PAL
* AR3 ID OF VEHICLE
* IR0 RNDR_C1_DYH
* IR1 INDEX OF VEHCILE
*
GETTHECAR:
LDI 1,R0
STI R0,*AR2
CALL PAL_ALLOC_RAW
LDI R0,R6
LDI AR3,AR2
CALL OBJ_FIND_FIRST
BNC $
LDI *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI R0,*+AR0(OFLAGS)
STI R6,*+AR0(OPAL)
LDF *+AR0(OPOSY),R0
STF R0,*+AR7(IR0)
INC IR0
STF R0,*+AR7(IR0)
STF R0,*+AR0(OUSR1)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
ROUNDER:
LDL CAR1PAL,AR2
LDI 481h,AR3
LDI RNDR_C1_DYH,IR0
CALL GETTHECAR
LDL CAR2PAL,AR2
LDI 482h,AR3
LDI RNDR_C2_DYH,IR0
CALL GETTHECAR
LDL CAR3PAL,AR2
LDI 483h,AR3
LDI RNDR_C3_DYH,IR0
CALL GETTHECAR
LDL CAR4PAL,AR2
LDI 484h,AR3
LDI RNDR_C4_DYH,IR0
CALL GETTHECAR
LDI 401h,AR2
CALL OBJ_FIND_FIRST
LDF *+AR0(OPOSY),R0
STF R0,*+AR7(RNDR_L1_DYH)
STF R0,*+AR7(RNDR_L1_SYH)
LDI 402h,AR2
CALL OBJ_FIND_FIRST
LDF *+AR0(OPOSY),R0
STF R0,*+AR7(RNDR_L2_DYH)
STF R0,*+AR7(RNDR_L2_SYH)
LDI 403h,AR2
CALL OBJ_FIND_FIRST
LDF *+AR0(OPOSY),R0
STF R0,*+AR7(RNDR_L3_DYH)
STF R0,*+AR7(RNDR_L3_SYH)
LDI 404h,AR2
CALL OBJ_FIND_FIRST
LDF *+AR0(OPOSY),R0
STF R0,*+AR7(RNDR_L4_DYH)
STF R0,*+AR7(RNDR_L4_SYH)
LDI 0,AR0
LDF 0.5,R0
CALL CAR_DIMMER
LDI 1,AR0
LDF 0.5,R0
CALL CAR_DIMMER
LDI 2,AR0
LDF 0.5,R0
CALL CAR_DIMMER
LDI 3,AR0
LDF 0.5,R0
CALL CAR_DIMMER
CALL LIGHT_INIT
LDI @CHOSEN_VEHICLE,R0
STI R0,@SPINCURR
CLRI R0
STI R0,*+AR7(PDATA)
ROUNDERLP
LDI @CHOSEN_VEHICLE,AR2
LDI *+AR7(PDATA),R0
CMPI R0,AR2
BEQ RLL
STI AR2,*+AR7(PDATA)
LDI @DCALL,R1
BZ NODO56
PUSH AR2
PUSH R0
SONDFX HYDRO
POP R0
POP AR2
NODO56
LDI R0,IR0
MPYI C_SIZE,IR0
ADDI C_STRT,IR0
INC IR0
LDF *+AR7(IR0),R1
DEC IR0
STF R1,*+AR7(IR0)
PUSH AR2
LDI R0,AR2
CALL LIGHT_OFF
POP AR2
LDI R0,AR0
LDF 0.5,R0
CALL CAR_DIMMER
LDI AR2,IR0
MPYI C_SIZE,IR0
ADDI C_STRT,IR0
INC IR0
LDF *+AR7(IR0),R0
DEC IR0
FLOAT 300,R1
SUBF R1,R0
STF R0,*+AR7(IR0)
PUSH AR2
CALL LIGHT_ON
POP AR2
LDI AR2,AR0
LDF 1.0,R0
CALL CAR_DIMMER
RLL
CALL AFFECT_THE_CARS
SLEEP 1
BU ROUNDERLP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*AFFECT CARS
*
*
*PARAMETERS
* INDEX OF CAR
*
*
*OPERATION
* RAISE VEHICLE AND SPIN
*
*
AFFECT_THE_CARS:
LDI 481h,AR2
LDI RNDR_C1_DYH,IR0
LDI 0,IR1
CALL AFFECTED_CAR
LDI 482h,AR2
LDI RNDR_C2_DYH,IR0
LDI 1,IR1
CALL AFFECTED_CAR
LDI 483h,AR2
LDI RNDR_C3_DYH,IR0
LDI 2,IR1
CALL AFFECTED_CAR
LDI 484h,AR2
LDI RNDR_C4_DYH,IR0
LDI 3,IR1
CALL AFFECTED_CAR
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*HIDDEN VEHICLES
*
*
*
.bss IS_HIDDEN,1
HIDDEN_TABLEI .word HIDDEN_TABLE
HIDDEN_TABLE .word jeepm,sbuspm,copcar,gtruck
HIDDEN_VEHICLES:
LDI -1,R0
STI R0,@IS_HIDDEN
HIDDEN_VEHICLES_LP
SLEEP 1
LDI @CAR_CHOICE_GOTTEN,R0
BZ NSCD
DIE
NSCD
LDI @SWITCHBUTS,R0
RS 16,R0
AND SW_VIEW0_H|SW_VIEW1_H,R0
BZ SETAS_ORIGINALS
SETAS_HIDDEN
LDI @IS_HIDDEN,R0
CMPI -1,R0
CALLNE RESET_ORIGINAL
LDI @CHOSEN_VEHICLE,AR2
; CMPI 1,AR2
; BEQ HIDDEN_VEHICLES_LP
CMPI 3,AR2
BEQ HIDDEN_VEHICLES_LP
STI AR2,@IS_HIDDEN
ADDI 481h,AR2
CALL OBJ_FIND_FIRST
LDI @CHOSEN_VEHICLE,AR2
ADDI @HIDDEN_TABLEI,AR2
LDI *AR2,R0
STI R0,*+AR0(OROMDATA)
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
BU HIDDEN_VEHICLES_LP
SETAS_ORIGINALS
LDI @IS_HIDDEN,R0
CMPI -1,R0
BEQ HIDDEN_VEHICLES_LP ;no one was hidden,
;just ignore
CALL RESET_ORIGINAL
LDI -1,R0
STI R0,@IS_HIDDEN
BU HIDDEN_VEHICLES_LP
*PARAMETERS
* R0 INDEX OF PREVIOUS VEHICLES
*
RESET_ORIGINAL:
;insert code here to set the old vehicle
;as
;
PUSH R0
LDI R0,AR2
ADDI 481h,AR2
CALL OBJ_FIND_FIRST
POP AR2
MPYI 6,AR2
ADDI @CCTABI,AR2
LDI *+AR2(3),R0
STI R0,*+AR0(OROMDATA)
LDI *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI R0,*+AR0(OFLAGS)
RETS
*----------------------------------------------------------------------------
.bss SPINCURR,1
*----------------------------------------------------------------------------
*
*
*PARAMETERS
* AR2 ID
* IR0 DESIRED HEIGHT OFFSET of AR7
* IR1 IDX OF CAR
*
*
AFFECTED_CAR:
CALL OBJ_FIND_FIRST
LDF *+AR0(OPOSY),R0
LDF *+AR7(IR0),R1
SUBF R0,R1,R0
MPYF 0.15,R0
ADDF *+AR0(OPOSY),R0
STF R0,*+AR0(OPOSY)
PUSH IR0
PUSH AR0
LDI AR0,AR1
SUBI 080h,AR2
CALL OBJ_FIND_FIRST
LDF *+AR1(OPOSY),R0
INC IR0
SUBF *+AR7(IR0),R0
ADDI C_OFF2LIFT,IR0
ADDF *+AR7(IR0),R0
STF R0,*+AR0(OPOSY)
POP AR0
POP IR0
LDI @SPINCURR,R0
LDI @CHOSEN_VEHICLE,R1
CMPI R0,R1
BEQ IBOIBO
CMPI R0,IR1
BNE N12
;track to PI
LDF *+AR0(ORADY),R2
LDLF 0.392699,R1
ADDF R1,R2
CALL NORMITS
LDF PI,R0
ADDF @START_RADY,R0
PUSHFL R2
LDF R0,R2
CALL NORMITS
LDF R2,R0
POPFL R2
CALL GETTHETADIFF
PUSHFL R2
LDF R0,R2
CALL NORMITS
LDF R2,R0
POPFL R2
CMPF 0.04,R0
BLT DOALL
MPYF 0.10,R0
ADDF R0,R2
BU IBO45
DOALL ADDF R0,R2
LDI @CHOSEN_VEHICLE,R1
STI R1,@SPINCURR
IBO45 STF R2,*+AR0(ORADY)
LDI AR0,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
IBOIBO CMPI R1,IR1
BNE N12
;just spin
LDF *+AR0(ORADY),R2
ADDF 0.1,R2
STF R2,*+AR0(ORADY)
LDI AR0,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
N12
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*PARAMETERS
* AR0 CAR INDEX
* R0 (FL) DIMMER VALUE
*
CAR_DIMMER:
LDI AR0,AR1
ADDI @CARPAL_TABLEI,AR1
LDI *AR1,AR1 ;NOW HOLDS RAM LOCATION
ADDI @CARSRCPAL_TABI,AR0
LDI *AR0,AR0
ADDI @PALROMI,AR0
LDI *AR0,AR0
CALL PAL_DIMMER
RETS
*----------------------------------------------------------------------------
.include glight.pal
*----------------------------------------------------------------------------
LIGHT_INIT:
PUSH AR2
LDL flour_lghtof,AR2
CALL PAL_ALLOC_RAW
LDI 0,AR2
CALL LIGHT_OFF
LDI 1,AR2
CALL LIGHT_OFF
LDI 2,AR2
CALL LIGHT_OFF
LDI 3,AR2
CALL LIGHT_OFF
POP AR2
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*PARAMETERS
* AR2 INDEX (0 to 3)
*
LIGHT_OFF:
PUSH R0
PUSH AR0
PUSH AR2
ADDI 601h,AR2
PUSH AR2
CALL OBJ_FIND_FIRST
LDL flour_lghtof,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDI *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI R0,*+AR0(OFLAGS)
POP AR2
SUBI 200h,AR2
CALL OBJ_FIND_FIRST
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
POP AR2
POP AR0
POP R0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*as above
*
LIGHT_ON:
PUSH R0
PUSH AR0
PUSH AR2
ADDI 601h,AR2
CALL OBJ_FIND_FIRST
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
SUBI 200h,AR2
CALL OBJ_FIND_FIRST
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
POP AR2
POP AR0
POP R0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*USES
* R5 AS A DEDICATED REG
*
INIT_PEDALCHK:
CLRI R5 ;FLAG : HAS THE PEDAL BEEN RELEASEDP
LDI @_pot1,R0
FIX @PEDALMN,R1
ADDI 20,R1
CMPI R1,R0
LDIGE 1,R5 ;GE -> IT HASN'T
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
GETCHOICE:
PUSHF R4
PUSH R4
LDI @_MODE,R4
AND MMODE,R4
FLOAT @_pot0,R3 ;GET CURRENT WHEEL
FLOAT @POSES,R1 ;GET # POSES
LDF @STEERFR,R0
CALL DIV_F
LDF R0,R1
MPYF 0.5,R1
FLOAT @POSE,R2 ;@CHOSEN_VEHICLE,R2
MPYF R0,R2
ADDF R1,R2 ;MIDDLE OF ZONE
ADDF @STEERMN,R2 ;ADD IN MINIMUM
CMPI MINIT,R4
BEQ GETCHA
STF R2,@WHEELPOS
GETCHA
SUBF R3,R2
ABSF R2,R3 ;FIND DIFFERENCE
MPYF 0.6,R0 ;SLIGHT HYSTERESIS
CMPF R0,R3
BLE GETCHX
LDF R2,R2
LDILT 1,R0
LDIGE -1,R0
ADDI @POSE,R0 ;CHOSEN_VEHICLE,R0
LDFLT 0,R0
CMPI @POSES,R0
BLT GETCH1
LDI @POSES,R0
SUBI 1,R0
GETCH1 STI R0,@POSE
GETCHX
POP R4
POPF R4
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*USES
* R5 see above
*RETURNS
* NC FALSE
* C TRUE
*
PEDALCHK:
LDI @_pot1,R0 ;set in main IRQ
LDP @PEDALMN
FIX @PEDALMN,R1
ADDI 20,R1
CMPI R1,R0
LDILT 0,R5
BLT SKIPKEY
LDI R5,R5 ;IF the pedal has not yet been released
BZ PEDALTRUE ;up do not accept this as a valid pedal choice
SKIPKEY
PEDALFALSE
CLRC
RETS
PEDALTRUE
SETC
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
romdata
T_READY .string "READY",0
T_SET .string "SET",0
T_GO .string "GO",0
T_CHALLENG .string "CHALLENGE RACE",0
.text
TLIST .word T_READY,CHICK_READY,SEND_WAVEFL_READY
.word T_SET,CHICK_SET,SEND_WAVEFL_SET
TLGO .word T_GO,CHICK_GO,SEND_WAVEFL_GO
.bss BABE_CONTROL,1
.bss CURR_FLAGSTATE,1
WAVEFLAG:
LDP @STOPWATCH_CNTL
CLRI R0
STI R0,@STOPWATCH_CNTL
STI R0,@BABE_CONTROL
LDP @STOPWATCH
STI R0,@STOPWATCH
LDI @_MODE,R0
LDI R0,R5
OR MHUD|MSLINE,R0
STI R0,@_MODE
READADJ ADJ_FREEGAME
CMPI 0,R0
BEQ FGLL
CREATE BLINK_FREEBE,UTIL_C
LDI @_MODE,R0
AND MMODE,R0
CMPI MATTR,R0
BEQ FGLL
CREATE SHOW_RACE_NAME,UTIL_C
FGLL
; LDI @HEAD2HEAD_ON,R0
; CALLNZ SEND_BSYNC0
SLEEP 5
LDI @_MODE,R0
AND MMODE,R0
CMPI MATTR,R0
BEQ NOBABE
CREATEC BABE_WAVEFLAG,UTIL_C
NOBABE
CLRI R0
STI R0,@CURR_FLAGSTATE
LDI @HEAD2HEAD_ON,R0
BZ NOHEAD2HEAD
CLRI R0
STI R0,@OM_BSYNC
H2HWTLP
SLEEP 1
CALL SEND_BSYNC3
LDI @OM_BSYNC,R0
CMPI 3,R0
BNE H2HWTLP
NOHEAD2HEAD
;-----------------------------------
; -----------------------------------
; -----------------------------------
SONDFX STARTLINEREVS2
LDI 2,AR5
LDL TLIST,AR6
WAVEFLAGLP
LDI @HEAD2HEAD_ON,R0
BZ JDJFF
LDI @DIPRAM,R0
TSTB CMDP_MASTER,R0
BZ JDJFF
JFF LDI @CURR_FLAGSTATE,R0
CMPI 3,R0
BEQ JUMPOUT
CMPI @H2H_FLAGSTATE,R0
BLT NXTSTAT
SLEEP 1
BU JFF
NXTSTAT LDI @H2H_FLAGSTATE,R0
STI R0,@CURR_FLAGSTATE
BU KKLFF
JDJFF
SLEEP 20
KKLFF
LDI *AR6++,AR2
FLOAT 256,R2
FLOAT 160,R3
LDI 20,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
LDI *AR6++,AR2
CALL ONESNDFX
;if H2H_ON && MASTER
;then SEND_STATE
;
LDI @HEAD2HEAD_ON,R0
BZ BABAD
LDI @DIPRAM,R0
TSTB CMDP_MASTER,R0
BNZ BABAD
LDI *AR6,R0
CALLU R0
BABAD ADDI 1,AR6
DEC AR5
CMPI 0,AR5
BGT WAVEFLAGLP
JUMPOUT LDL TLGO,AR6
SLEEP 15
LDI 1,R0
STI R0,@BABE_CONTROL
SLEEP 5
LDI *AR6++,AR2
FLOAT 256,R2
FLOAT 160,R3
LDI 20,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
LDI *AR6++,AR2
CALL ONESNDFX
LDI @HEAD2HEAD_ON,R0
BZ BABAD666
LDI @DIPRAM,R0
TSTB CMDP_MASTER,R0
BNZ BABAD666
CALL SEND_WAVEFL_GO
BABAD666
OR MGO,R5 ;SAVED MODE
ANDN MSLINE,R5
STI R5,@_MODE
STI R5,@STOPWATCH_CNTL ;STOPWATCH TIMER
.globl CHECK_MOTION_DIP,CHECK_MOTION_PRESENT
CALL CHECK_MOTION_DIP
BNZ NANAD ;RETURN IF NON MOVING
CALL CHECK_MOTION_PRESENT
BNE NANAD
CLRI AR2
LDP @991030h
LDI @991030h,R2
LDI *AR2,AR2
SETDP
LDL 0FF80h,R1
AND R1,R2
BZ NANAD
MOTION_ERROR_TIKS .set (57*5)
.globl WAITTIK
LDI MOTION_ERROR_TIKS,R1
STI R1,@WAITTIK
BU NANAD
NOERR .globl ABORT_RESET_GALIL
CALL ABORT_RESET_GALIL
.globl XQ,SEND_CMD,WAIT_ACK
LDL XQ,AR2 ;tell galil to continue executing program
CALL SEND_CMD
CALL WAIT_ACK
NANAD
LDI SM_GO,R0
STI R0,@SUSPEND_MODE
SONDFX PEELOUT
READAUD ADJ_TIME_TO_START
MPYI 5,R0
ADDI 60,R0
STI R0,@_countdown
LDI @HEAD2HEAD_ON,R0
BZ NOTHHHH
LDI @OM_RACE_MODE,R0
CMPI RM_USA,R0
BNE NOTHHHH
LDI RM_USA,R0
STI R0,@RACE_MODE
NOTHHHH
LDI @_MODE,R0 ;MAKE SURE MODE IS IN GAME
AND MMODE,R0
CMPI MATTR,R0
CALLNE RESUME_TUNE_NT
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
RACESEL_TIMER:
LDI @_countdown,R2
LDI @COUNTDOWN_BUFI,AR2
CALL _itoa
BUD IT_E2
FLOAT 256,R2
FLOAT 253,R3
LDI 1,RC
;----> BUD IT_E2
*----------------------------------------------------------------------------
WAITINTROTIMER:
FLOAT 215,R3
BU LKJAFSD
INTROTIMER:
FLOAT 350,R3
LKJAFSD
PUSHF R3
LDI @_countdown,R2
LDI @COUNTDOWN_BUFI,AR2
CALL _itoa
POPF R3
FLOAT 256,R2
LDI 1,RC
IT_E2 CALL TEXT_ADD
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
CALL SETN43FONT
.globl lgnum43_coolyelo
LDL lgnum43_coolyelo,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*DIAL ROUT
*
*SET THE PROPER OBJECT COLOR CYCLING
*
.bss LASTCHOICE,1
DIAL_ROUT:
LDI @POSE,AR2
CMPI 0,AR2
LDILT 0,AR2
CMPI 3,AR2
LDIGT 3,AR2
STPI AR2,@CHOSEN_VEHICLE
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*END OF PLAYERS GAME
*
* COMPUTE TIME
* SHOW STATISTICS
* IDENTIFY GAME OVER
* HSTD IF NESSESARY
* GOTO ATTRACT MODE
*
*
ENDPLAYER:
CLRI R2
SETAUD AUD_BCREDITS
LDI AUD_NUM_UNFINISHED,AR2
CALL AUDIT_READ
DEC R0
LDI R0,R2
SETAUD AUD_NUM_UNFINISHED
LDI 0,R0
STI R0,@FRAMRATE ;RESET FRAME RATE TO ATTRACT MODE
; LDI -5,AR2 ;HSTD SHOULD BE NEXT SCREEN!
LDI -2,AR2 ;HSTD SHOULD BE NEXT SCREEN!
STI AR2,@_ATTR_MODE
LDI DRONE_C,R0
LDI CLASS_M,R1
CALL PRC_KILLALL
LDI SPAWNER_C,R0
LDI CLASS_M,R1
CALL PRC_KILLALL
*ELP CHANGE
FIFO_CLRP R0 ;IS THE FIFO CLEAR
DMA_WT R0
LDI 1,R0
STI R0,@CLEARRDY ;READY FOR INTERRUPT
KK5 LDI @CLEARRDY,R0
BNZ KK5
*ELP END CHANGE
*
*NOW CLEAN UP THE SYSTEM,. REINITIALIZE EVERYTHING AND
*GO INTO ATTRACT MODE
*
CALL TEXT_INIT
; CLRI AR2
; CALL SENDSND
; SOND1 GAMEOVR
*ELP CHANGE
; LDL _SECggate,AR2
; CALL LOAD_SECTION_REQ
*ELP END CHANGE
CLRI R0 ;R0 (B0-15) PID
CLRI R1 ;R1 (B0-15) MASK
CALL PRC_KILLALL
BU SET_ATTR
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*GAME AVAILABLE P
*RETURNS
* CARRY SET CREDIT ENTER - GAME IS AVAILABLE
* CARRY CLR NO CREDIT AVAILABLE
* R0 CREDITS AVAILABLE
*
GAME_AVAILABLEP:
PUSH R2
PUSH AR2
READADJ ADJ_FREE_PLAY
CMPI 1,R0
BEQ GA_TRUE
.ref GET_CREDITS_TO_START
CALL GET_CREDITS_TO_START
READAUD AUD_CREDITS
CMPI R1,R0
BLT GA_FALSE
GA_TRUE
SETC
POP AR2
POP R2
RETS
GA_FALSE
CLRC
POP AR2
POP R2
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*START BUTTON
*
*
_start:
LDI @_MODE,R0
AND MMODE,R0
CMPI MCT,R0
BEQ CN
CMPI MBONUS,R0
BEQ CN
CMPI MINSERT_COINS,R0
BEQ CN
CMPI MINIT,R0
BEQ CN
CMPI MINTRO,R0
BNE NOTINTRO
CN LDI 1,R0
STI R0,@START_HIT
DIE
NOTINTRO
NOTINSRT
CMPI MGAME,R0
BEQ _startX
CALL GAME_AVAILABLEP
BC CANSTART
;NO CREDITS TO START!
LDI @TEASE_COUNT,R0
CMPI 0,R0
BGT _startX
INC R0
STI R0,@TEASE_COUNT
SOND1 TEASE_TURNKEY
DIE
CANSTART
CALL GET_CREDITS_TO_START
SUBI R1,R0
LDI R0,R2
CMPI 0,R2
LDILT 0,R2
SETAUD AUD_CREDITS ;DECREMENT CREDIT COUNT
LDI 0,R2
LDI AUD_BCREDITS,AR2
CALL AUDIT_WRITE
startgame
LDI @_MODE,R0
.if DEBUG
LDI R0,R1
ANDN MMODE,R0
AND MMODE,R1
CMPI MATTR,R1 ;this kludge allows us, in debugging
BEQ CYCLEOUT ;more to cycle out of game mode into
OR MATTR,R1 ;attract mode...
STI R1,@_MODE ;
;
;SYSTEM SHUTDOWN, STRAIGHTLINE CODE NOW ACTIVE
;
BR CYCLE_ATTR
;
;
CYCLEOUT
.endif
ANDN MMODE,R0
*ELP CHANGE February 8,1995
; OR MGAME,R0
;we must begin the game in MINTRO
;
;
OR MINTRO,R0
*ELP END CHANGE
STI R0,@_MODE
CLRI R0
STI R0,@(_plyr1+PLY_CAR)
LDP @FASTSTKI ;GET PAGE OF STORED ADDRESS
LDI @FASTSTKI,SP ;LOAD THE ADDRESS INTO SP
LDI 1,AR2
CALL WAVE
BR COLD_ENTER ;RESET SYSTEM RUNNING
_startX
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*PARAMETERS
* AR4 OBJECT
*
*
ULTRA_PROC:
CLRF R6
UPLP LDF 0.0349078,R0
FLOAT @NFRAMES,R1
MPYF R1,R0
SUBF R0,R6
LDF R6,R2
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
SLEEP 1
BU UPLP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
ULTRA_LOGO:
CALL OBJ_GET
RETSC
LDIL nintendo,R0
STI R0,*+AR0(OROMDATA)
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
CLRF R0
STF R0,*+AR0(OPOSX)
FLOAT 50,R0
STF R0,*+AR0(OPOSY)
FLOAT 368,R0
STF R0,*+AR0(OPOSZ)
LDI AR0,AR2
CALL OBJ_INSERTP
LDI AR2,AR4
PUSH AR0
PUSH AR2
CREATE ULTRA_PROC,UTIL_C
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
LOGO_SMALL:
LDI @DIPRAM,R0
TSTB DIP_COMMP,R0
RETSNZ
LDL redhd1,AR2 ;red (bottom)
LDI 230,R2
LDI -190-60,R3
LDI 926,RC ;368*2
CALL OBJ_QMAKE
RETSC
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERT
LDL H2HPAL2,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDL yelhd1,AR2 ;top
LDI 230,R2
LDI -190+60,R3
LDI 926,RC ;368*2
CALL OBJ_QMAKE
RETSC
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERT
LDL H2HPAL2,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDL big2,AR2
LDI 230,R2
LDI -190,R3
LDI 924,RC ;(368*2)-2
CALL OBJ_QMAKE
RETSC
LDI O_IROT|O_NOROT|O_NOUROT|O_NOUNIV|O_1PAL,R0
OR *+AR0(OFLAGS),R0
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERT
LDL H2HPAL3,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*STRAIGHT LINE CODE, SYSTEM SHUTDOWN
*THIS ROUTINE IS BRANCHED TO, NOT CALLED!
*
*
SET_ATTR:
CALL SILENT
LDI @FASTSTKI,SP ;GET PAGE OF STORED ADDRESS
LDI @_ATTR_MODE,AR2 ;AND INTO FP TOO
CALL WAVE
BU COLD_ENTER
CYCLE_ATTR:
_debug:
CALL SILENT
CALL LOAD_FIXED_PALETTES
LDI @FASTSTKI,SP ;GET PAGE OF STORED ADDRESS
LDI @_ATTR_MODE,AR2 ;AND INTO FP TOO
DEC AR2
CMPI -4,AR2
LDILT -1,AR2
STI AR2,@_ATTR_MODE
CALL WAVE
BU COLD_ENTER ;RESET SYSTEM RUNNING
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*ATTRACT MODE TIMEOUT MECHANISM
*SLEEP _timer TIKS THEN JUMP TO CYCLE_ATTR
*
.bss _timer,1
_timeout:
LDI @_timer,AR2
CALL SLEEP
BU CYCLE_ATTR
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*INSERT COINS ROUTINES
*
* INSMORE JSRPed FROM PLYR.ASM
* COIN_CNTDOWN CREATED, KILLED
*
TROI SPTR "INSERT COINS"
ICCI SPTR "TO CONTINUE"
PSCI SPTR "PRESS START"
.bss SAVEDMODE,1
INSMORE:
LDI @_MODE,R0
STI R0,@SAVEDMODE
CALL CHECK_MOTION_DIP
BNZ KFFDA
CALL ABORT_RESET_GALIL
LDI 0,R0
.globl MOTION_STOP_HIT,MOTION_SAFETY_ON
STI R0,@MOTION_STOP_HIT
STI R0,@MOTION_SAFETY_ON
.globl WAITTIK
STI R0,@WAITTIK
KFFDA
;
LDF @GAME_TIMER,R2
MPYF 100,R2
FIX R2
READAUD AUD_TOTAL_TIME
ADDI R0,R2
SETAUD AUD_TOTAL_TIME
READAUD AUD_NUM_BUYINS
LDI R0,R1
LDI R2,R0
CALL DIV_I30
LDI R0,R2
SETAUD AUD_AVG_TIME
;
LDI 20,R0
STI R0,@_countdown
CALL SILENT
SOND1 DISCODUCK
CLRI R0
STI R0,@STOPWATCH_CNTL
STI R0,@START_HIT
LDI @_MODE,R0
ANDN MMODE,R0
OR MINSERT_COINS|MGO,R0
STI R0,@_MODE
LDI @TROI,AR2
FLOAT 256,R2
FLOAT 100,R3
LDI 9999,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
LDI AR0,AR4 ;SAVE POINTERS FOR TEXT CHANGE
LDI @ICCI,AR2
FLOAT 256,R2
FLOAT 150,R3
LDI 9999,RC
CALL TEXT_ADD
CALL SET40FONT
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
CREATEC COIN_CNTDOWN,034h
READAUD AUD_BCREDITS
LDI R0,R4 ;WATCH CREDITS
CLRI R5 ;TO START TOGGLE
LDI 15,AR6 ;wait at least 15 frames to continue
LDI 0,R0
STI R0,@miniidle
;wait for a coin to be dropped in
;if coins are in change text to PRESS START
INSMORE_LP
CALL INSERT_MORE_COINS
READAUD AUD_BCREDITS
CMPI R0,R4
BEQ NOINCTIM
LDI R0,R4
LDI 20,R0
STI R0,@_countdown
NOINCTIM
LDI R5,R5
BNZ CHECKHIT
READADJ ADJ_FREE_PLAY
CMPI 1,R0
BEQ FREEP
READAUD AUD_CREDITS
.ref GET_CREDITS_TO_CONTINUE
CALL GET_CREDITS_TO_CONTINUE
CMPI R1,R0
BLT JUSTGOON
; CMPI 0,R0
; BEQ JUSTGOON
FREEP
LDI @PSCI,R0 ;change the text
STI R0,*+AR4(TEXT_PTR)
LDI 1,R5
LDI @BUTTON_STATUS,R0
OR BUT_START,R0
STI R0,@BUTTON_STATUS
JUSTGOON
;check to see if plyr hit start (decrement count)
LDI R5,R5
BNZ CANWT
TOSLP
;HITTING THE BUTTON W/O CREDITS
LDI @START_HIT,R0
BZ NRST
CLRI R0
STI R0,@START_HIT
LDI 20,R0
STI R0,@_countdown
NRST
LDI @miniidle,R0 ;only every 10th frame
CMPI 0,R0
LDI @SWITCHBUTS,R0
LDL SW_RADIO|SW_VIEW0|SW_VIEW1|SW_VIEW2,R1
AND R1,R0
BZ TOSLP2
CMPI R1,R0 ;but if ALL are pressed...dont decrement
BEQ TOSLP2
LDI @_countdown,R0
DEC R0
STI R0,@_countdown
TOSLP2
DEC AR6
CMPI 0,AR6
BGT CANWT
LDI @SWITCHBUTS,R0
TSTB SW_START,R0
BZ CANWT
; LDI AR5,R0 ;if no decrement -> DONT
; BNZ CANWT
LDI @_countdown,R0
DEC R0
STI R0,@_countdown
LDI 15,AR6 ;wait at least 15 frames to continue
CANWT
.bss miniidle,1
LDI @miniidle,R0
INC R0
CMPI 25,R0
LDIGE 0,R0
STI R0,@miniidle
SLEEP 1
LDI @_countdown,R0
BNZ INSMORE_LP
CLRI AR6
BU RETURNTOPLYR
CHECKHIT
LDI @START_HIT,R0
BZ TOSLP
;Secret Button Combo!!
;
;if the plyr holds all the view buttons and radio as he
;hits the start button, he gets to CRUISE the USA
;-ELP August 11,1994
;
LDI @SWITCHBUTS,R0
LDIL (SW_RADIO|SW_VIEW0|SW_VIEW1|SW_VIEW2),R1
AND R1,R0
CMPI R1,R0
BNE NOSECRET_CRUISE
LDI RM_USA,R0
STI R0,@RACE_MODE
NOSECRET_CRUISE
LDI 0,R2
LDI AUD_BCREDITS,AR2
CALL AUDIT_WRITE
READAUD AUD_CREDITS
CALL GET_CREDITS_TO_CONTINUE
SUBI R1,R0
; DEC R0
LDILT 0,R0
LDI R0,R2
SETAUD AUD_CREDITS
LDI @_MODE,R0
ANDN MMODE,R0
OR MGAME,R0
STI R0,@_MODE
LDI 1,R0
STI R0,@STOPWATCH_CNTL
LDI 60,R0
STI R0,@_countdown
LDI 1,AR6
LDI @BUTTON_STATUS,R0
ANDN BUT_START,R0
STI R0,@BUTTON_STATUS
INCAUD AUD_NUM_BUYINS
RETURNTOPLYR
LDI @SAVEDMODE,R0
STI R0,@_MODE
LDI 034h,R0
LDI -1,R1
CALL PRC_KILLALL
CALL TEXT_INIT
CALL RESUME_TUNE_NT
CLRF R0
STPF R0,@GAME_TIMER
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*PLACE THE COUNTDOWN TIMER
*
*
COIN_CNTDOWN:
LDI @_countdown,R4
COIN_CNTDOWN_LP
LDI @_countdown,R2
LDI @COUNTDOWN_BUFI,AR2
CALL _itoa
FLOAT 256,R2
FLOAT 270,R3
LDI 1,RC
CALL TEXT_ADD
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
CALL SETN43FONT
.globl lgnum43_coolyelo
LDL lgnum43_coolyelo,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
SLEEP 1
BU COIN_CNTDOWN_LP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
.bss DIRTY_SHARED,1
LOAD_SHARED:
CLRI R0
STI R0,@DIRTY_SHARED
LDL _SECshared,AR2
CALL LOAD_SECTION_REQ
LDI bottom_gtmp_p,R0 ;ONE TO OVERWRITE
LDI R0,R1 ;WHAT TO OVERWRITE IT WITH
CALL PAL_OVERWRITE
LDI bottom2_gtmp_p,R0
LDI R0,R1
CALL PAL_OVERWRITE
LDI shldr2_gtmp_p,R0
LDI R0,R1
CALL PAL_OVERWRITE
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
.include light.pal
TRAFFIC_LIGHT:
SLEEP 20
LDL TRAFFIC_LL,AR5
TLT_LP
LDI light_p,AR2
CALL PAL_FIND
BNC NSSD
BR SUICIDE
NSSD
LDI *AR5++,AR2
CMPI -1,AR2
BNE CCC
LDL TRAFFIC_LL,AR5
LDI *AR5++,AR2
CCC
LDI R0,R2
LDIL 8000000Ah,R3 ;16
CALL PAL_SET
LDI *AR5++,AR2
CALL SLEEP
BU TLT_LP
TRAFFIC_LL .word light_yellowon,10,light_redon,32,light_greenon,32,-1
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
CPOINT_LIGHT:
LDI @RGBTAB_CPI,AR4
INC AR4
LDI checks_p,AR2
CALL PAL_FIND
BNC SDASDFA
BR SUICIDE
SDASDFA
LDI R0,AR6
CPL_LP
LDI AR4,AR2
LDI AR6,R2
ADDI 251,R2
LDI 5,R3
CALL PAL_SET
LDI *++AR4(5),R0
BNN CNT
LDI @RGBTAB_CPI,AR4
CNT
LDI *AR4++,AR2
CALL SLEEP
B CPL_LP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
RGBTAB_CPI .word RGBTAB_CP
RGBTAB_CP
.word 4
RGB 212,212,0
RGB 212,212,0
RGB 212,212,0
.word 0,0
.word 2
RGB 255,255,0
RGB 255,255,0
RGB 255,255,0
.word 0,0
.word 4
.word 0,0,0
RGB 212,212,0
RGB 212,212,0
.word 2
.word 0,0,0
RGB 255,255,0
RGB 255,255,0
.word -1
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*
*
SHOW_RACE_NAME:
LDI @BONUS_WAVE,AR2
ADDI @LEG_NAMESI,AR2
LDI *AR2,AR2
FLOAT 256,R2
FLOAT 360,R3
LDI 340,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
LDI AR0,AR4
LDI AR1,AR5
FLOAT -100,R6
LDI 20,AR6
SLLP1 FLOAT 256,R0
SUBF R6,R0
MPYF 0.2,R0
ADDF R0,R6
STF R6,*+AR5(TEXT_POSX)
LDF R6,R0
ADDF 3,R0
STF R0,*+AR4(TEXT_POSX)
SLEEP 1
DBU AR6,SLLP1
;CENTER IT
;
FLOAT 256,R6
STF R6,*+AR5(TEXT_POSX)
LDF R6,R0
ADDF 3,R0
STF R0,*+AR4(TEXT_POSX)
SLEEP 50
LDI 20,AR6
SLLP1A FLOAT -100,R0
SUBF R6,R0
MPYF 0.2,R0
ADDF R0,R6
STF R6,*+AR5(TEXT_POSX)
LDF R6,R0
ADDF 3,R0
STF R0,*+AR4(TEXT_POSX)
SLEEP 1
DBU AR6,SLLP1A
DIE
*----------------------------------------------------------------------------
;*----------------------------------------------------------------------------
;SKYPALSI .word SKYPALS
; romdata
; .include sky.pal
;SKYPALS .word sky1_dusk,sky1_dark,sky1_dred
; .word sky1_az,sky1_genorg,sky1_dblue
; .text
;
;*
;*
;* AR2 PARAMETERS
;*
; .globl SETSKYPAL
;SETSKYPAL:
;
; LDI sky1_p,AR2
; CALL PAL_FIND
; LDI R0,R2
;
; LDI 1,AR2
; ADDI @SKYPALSI,AR2
; LDI *AR2,AR2
; LDI *AR2++,R3
; CALL PAL_SET
; RETS
;*----------------------------------------------------------------------------
.END