934 lines
16 KiB
NASM
Executable File
934 lines
16 KiB
NASM
Executable File
.FILE "RHO.ASM"
|
|
*----------------------------------------------------------------------------
|
|
*RHO (ONCOMING TRAFFIC)
|
|
*
|
|
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
|
|
*ALL RIGHTS RESERVED
|
|
*
|
|
|
|
.include MACS.EQU
|
|
.include OBJ.EQU
|
|
.include MPROC.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 COMM.EQU
|
|
|
|
|
|
RHO_WEAVER .set 1 ;DRUNK ONCOMER
|
|
|
|
*
|
|
*YELL B4 HIT TO PLAYER
|
|
B4HIT_SIZE .set 6
|
|
B4HIT_TABLEI .word B4HIT_TABLE
|
|
B4HIT_TABLE .word RH_GOFORIT,RH_TAKEHIM,RH_BABESCREAM1
|
|
.word RH_BABEWHOA,RH_HURRYUP,RH_GONNACRASH
|
|
|
|
*RHO FLAGS (RF_)
|
|
*
|
|
*
|
|
RF_WEAVER .set 001h ;may this become a weaver (SUICIDE)
|
|
RF_LONG .set 002h ;Eugenes system can't handle long vehicles under circumstances
|
|
|
|
RT_VEHIDX .set 0
|
|
RT_FLAG .set 1
|
|
RT_ONSCREAM .set 2
|
|
RT_SIZE .set 3
|
|
|
|
.bss NOLONG_VEHICLES,1
|
|
|
|
*
|
|
*RHO_TABLE
|
|
* .word VEHICLE_INDEX,RHO_FLAG
|
|
* .word ONCOMESCREAM ;either fixed or general
|
|
*
|
|
; .word SBUS_MOD,RF_LONG,BUSDOPL
|
|
RHO_TABLE_LENGTH .set 17
|
|
RHO_TABLEI .word RHO_TABLE
|
|
RHO_TABLE:
|
|
.word GTRUCK_MOD,0,DIESEL_DOPPLER
|
|
.word FTRUCK_MOD,RF_LONG,TRUCKHORN_BLAST
|
|
.word CBUS_MOD,RF_LONG,BUSDOPL
|
|
.word COPCAR_MOD,0,CARDOPL2
|
|
.word MUSCLE_MOD,RF_WEAVER,CARDOPL3
|
|
|
|
.word CARAVAN_MOD,0,CARDOPL3
|
|
.word SBUS_MOD,RF_LONG,BUSDOPL
|
|
.word PTRUCKG_MOD,0,SEMIDOPL
|
|
.word MUSTANG_MOD,0,CARDOPL2
|
|
.word JEEP_MOD,0,CARDOPL1
|
|
|
|
.word GTRUCK_MOD,0,DIESEL_DOPPLER
|
|
; .word CBUS_MOD,RF_LONG,BUSDOPL
|
|
.word COPCAR_MOD,0,CARDOPL2
|
|
.word MUSCLE_MOD,RF_WEAVER,CARDOPL3
|
|
.word CARAVAN_MOD,0,CARDOPL3
|
|
|
|
.word PTRUCKG_MOD,0,SEMIDOPL
|
|
.word MUSTANG_MOD,0,CARDOPL2
|
|
; .word SBUS_MOD,RF_LONG,BUSDOPL
|
|
.word JEEP_MOD,0,CARDOPL1
|
|
|
|
*----------------------------------------------------------------------------
|
|
*RHO DRONE ONCOMING TRAFFIC DRONE
|
|
*
|
|
*allocated standard drone
|
|
*
|
|
*starting position = end of the current universe (up ahead)
|
|
*
|
|
*in lane 0 or 1 accelerate past the player
|
|
*when rho has reached the begining of the universe
|
|
*
|
|
*
|
|
*RHO may be allocated as a suicide vehicle
|
|
*but in general plays a straight game as an
|
|
*oncomer.
|
|
*
|
|
|
|
.bss RHOFLAG,1
|
|
.bss RHOPAL,1
|
|
.GLOBL RHO_START
|
|
.GLOBL OM_DRONE
|
|
*
|
|
*RHO STARTER
|
|
*R4= VEHICLE INDEX
|
|
*R5= VEHICLE ID
|
|
*
|
|
*ENTRY POINT FOR RHO START BY OTHER GAME
|
|
RHO_START
|
|
STI AR6,@RHOPAL
|
|
STI R4,@RHOFLAG ;SAVE CAR ID #
|
|
LDI R5,R0 ;INDEX #
|
|
B IBOIBO
|
|
|
|
|
|
RHO_DRONE:
|
|
LDI 0,R5
|
|
STI R5,@RHOFLAG
|
|
|
|
RANDN RHO_TABLE_LENGTH ;INDEX #
|
|
|
|
IBOIBO
|
|
CLRI R4
|
|
LDI R0,R5 ;SAVE INDEX#
|
|
|
|
LDI R0,AR2
|
|
STI R0,*+AR7(RHO_INIT)
|
|
MPYI RT_SIZE,AR2
|
|
ADDI @RHO_TABLEI,AR2
|
|
|
|
LDI @NOLONG_VEHICLES,R0
|
|
BZ NONOLONG
|
|
|
|
LDI *+AR2(RT_FLAG),R0
|
|
TSTB RF_LONG,R0
|
|
BZ NONOLONG
|
|
LDI 5,R0
|
|
BU IBOIBO
|
|
NONOLONG
|
|
|
|
LDI *+AR2(RT_VEHIDX),R0
|
|
|
|
LDI R0,AR2
|
|
STI R0,*+AR7(DELTA_MODEL)
|
|
MPYI VEHTAB_SIZE,AR2
|
|
ADDI @VEHICLE_TABLEI,AR2
|
|
LDI *+AR2(VEHTAB_MODEL),AR2
|
|
STI R4,*+AR7(DELTA_INIT)
|
|
|
|
CALL OBJ_GETE
|
|
BC SUICIDE ;abort process if no object available
|
|
LDI AR0,AR4
|
|
|
|
LDI DRONE_C|VEHICLE_T|DRNE_RHO,R0
|
|
STI R0,*+AR4(OID)
|
|
|
|
LDI *+AR7(DELTA_MODEL),AR2
|
|
CALL VEHICLE_ANI_INIT ;UTIL.ASM
|
|
|
|
CALL DELTA_OINIT
|
|
LDF MAX_ACCEL_INIT,R0
|
|
STF R0,*+AR5(CARMAXACCEL) ;SET ACCEL POWER
|
|
LDI *+AR4(OID),R0
|
|
STI R0,*+AR5(CAR_ID)
|
|
STI R0,*+AR7(PID)
|
|
|
|
|
|
CALL SET_DRONE_PAL
|
|
|
|
|
|
RANDN 2
|
|
ADDI 2,R0
|
|
STI R0,*+AR7(DELTA_STATUS)
|
|
|
|
|
|
;init position at end of universe
|
|
;
|
|
LDI @DYNALIST_END,AR2
|
|
LDI *+AR2(OBLINK4),AR2
|
|
LDI *+AR2(OBLINK4),AR2
|
|
STI AR2,*+AR7(DELTA_TPIECE)
|
|
LDI *+AR2(OUSR1),R0
|
|
STI R0,*+AR7(DELTA_LAST_OID)
|
|
CALL SUB_FUNCTION_RVS
|
|
|
|
|
|
LDP @_VECTORA
|
|
LDF *+AR2(OPOSX),R0
|
|
ADDF @_VECTORA+X,R0
|
|
STF R0,*+AR4(OPOSX)
|
|
LDF *+AR2(OPOSY),R0
|
|
SUBF *+AR5(CARWHLTAB+1),R0
|
|
ADDF @_VECTORA+Y,R0
|
|
STF R0,*+AR4(OPOSY)
|
|
LDF *+AR2(OPOSZ),R0
|
|
ADDF @_VECTORA+Z,R0
|
|
STF R0,*+AR4(OPOSZ)
|
|
SETDP
|
|
|
|
|
|
;initialize Ytheta to the intentional direction
|
|
STF R2,*+AR4(ORADY)
|
|
STF R2,*+AR7(DELTA_RADYDELTA)
|
|
STF R2,*+AR5(CARYROT)
|
|
STF R2,*+AR5(CARVROT)
|
|
|
|
LDI AR4,AR2
|
|
ADDI OMATRIX,AR2
|
|
CALL FIND_YMATRIX
|
|
|
|
CLRI R0
|
|
STI R0,*+AR7(RHO_NOISE)
|
|
STI R0,*+AR7(RHO_YELL)
|
|
STI R0,*+AR7(DELTA_PLAYIT)
|
|
|
|
|
|
;is this a weaver? (drunk driver?)
|
|
;
|
|
;
|
|
;
|
|
LDI *+AR7(RHO_INIT),AR2
|
|
MPYI RT_SIZE,AR2
|
|
ADDI @RHO_TABLEI,AR2
|
|
LDI *+AR2(RT_FLAG),R0
|
|
TSTB RF_WEAVER,R0
|
|
BZ NOT_WEAVER
|
|
|
|
LDF @GAME_TIMER,R0 ;first minute - dont swerve
|
|
CMPF 1.1,R0
|
|
BLT NOT_WEAVER
|
|
|
|
|
|
; RANDN 10 ;1 in 10 chance
|
|
; CMPI 0,R0
|
|
; BNE NOT_WEAVER
|
|
|
|
LDI RHO_WEAVER,R0
|
|
STI R0,*+AR7(DELTA_PLAYIT)
|
|
|
|
FLOAT 576,R0
|
|
STF R0,*+AR7(DELTA_XLANE)
|
|
|
|
LDI 30,R0
|
|
STI R0,*+AR7(DELTA_PSTAT)
|
|
|
|
LDF 0.1,R0
|
|
CALL FRAND
|
|
ADDF 0.25,R0
|
|
STF R0,*+AR7(RHO_THETA_DELTA)
|
|
|
|
|
|
FLOAT 520,R0
|
|
CALL FRAND
|
|
FLOAT 2600,R1
|
|
ADDF R1,R0
|
|
STF R0,*+AR7(RHO_AMP)
|
|
|
|
|
|
FLOAT 576,R0
|
|
CALL SFRAND
|
|
STF R0,*+AR7(RHO_XHEAD)
|
|
|
|
CLRF R6 ;SIN
|
|
NOT_WEAVER
|
|
|
|
LDI @RHOFLAG,R0 ;CREATED BY OTHER MACHINE?
|
|
BZ RHOLL1 ;NO...
|
|
|
|
STI R0,*+AR5(CARNUM) ;YES, SAVE ID NUMBER
|
|
LDI @RHOPAL,R0 ;GET PALETTE
|
|
STI R0,*+AR4(OPAL)
|
|
|
|
LDI 1,R0
|
|
STI R0,*+AR5(CAR_OM) ;OTHER MACHINE IS IN CONTROL
|
|
B OM_DRONE ;GO DRONE IT
|
|
|
|
RHOLL1
|
|
.GLOBL DRONE_PTR_ADD
|
|
CALL DRONE_PTR_ADD
|
|
.globl SEND_RHO_CREATE
|
|
CALL SEND_RHO_CREATE
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*
|
|
*
|
|
RHO_LP:
|
|
LDI @SUSPEND_MODE,R0
|
|
CMPI SM_HALT,R0
|
|
BEQ RHO_SLP
|
|
|
|
|
|
CALL AHEAD_OF_PLAYER_P
|
|
LDIC 1,R0
|
|
LDINC 0,R0
|
|
STI R0,*+AR7(DELTA_PSTAT)
|
|
|
|
|
|
; ;CHECK TO SEE IF...
|
|
; ; WE ARE FAR ENOUGH BEHIND THE PLYR THAT
|
|
; ; WE CAN KILL OURSELVES
|
|
;
|
|
; CMPI 0,R0
|
|
; BNE NOTBEHIND_PLAYER
|
|
;
|
|
; LDI *+AR5(CARTRAK),AR0
|
|
; LDI *+AR0(OUSR1),R0
|
|
; LDI @PLYCBLK,AR1
|
|
; ADDI 4,R0
|
|
; CMPI *+AR1(CARTRAK),AR1
|
|
; LDI *+AR1(OUSR1),R0
|
|
; BLE RHO_DIE
|
|
;
|
|
;NOTBEHIND_PLAYER
|
|
|
|
|
|
;
|
|
;DRUNK ONCOMER?
|
|
;
|
|
|
|
LDI *+AR7(DELTA_PLAYIT),R0
|
|
CMPI RHO_WEAVER,R0
|
|
BNE NOT_WEAVER_LP
|
|
|
|
;
|
|
;
|
|
;
|
|
LDI @POSITION,R0
|
|
CMPI 5,R0
|
|
BGT ABORTWEAVE
|
|
;
|
|
;
|
|
|
|
|
|
LDI *+AR7(DELTA_TPIECE),AR2
|
|
CALL GET_LANES
|
|
CMPI 1,R0
|
|
BEQ DONTABORT
|
|
|
|
;if at any point we come into a 2 lane
|
|
;situation, ABORT weaver and go into
|
|
;straight mode
|
|
|
|
ABORTWEAVE
|
|
CLRI R0
|
|
STI R0,*+AR7(DELTA_PLAYIT)
|
|
|
|
RANDN 2
|
|
ADDI 2,R0
|
|
STI R0,*+AR7(DELTA_STATUS)
|
|
BU NOT_WEAVER_LP
|
|
DONTABORT
|
|
|
|
LDI 100,AR2
|
|
CALL RANDPER
|
|
BNC III
|
|
|
|
LDF 0.1,R0
|
|
CALL FRAND
|
|
ADDF 0.25,R0
|
|
STF R0,*+AR7(RHO_THETA_DELTA)
|
|
|
|
FLOAT 520,R0
|
|
CALL FRAND
|
|
FLOAT 2600,R1
|
|
ADDF R1,R0
|
|
STF R0,*+AR7(RHO_AMP)
|
|
|
|
|
|
|
|
III
|
|
LDI 200,AR2
|
|
CALL RANDPER
|
|
BNC III4
|
|
|
|
FLOAT 576,R0
|
|
CALL SFRAND
|
|
STF R0,*+AR7(RHO_XHEAD)
|
|
III4
|
|
|
|
|
|
|
|
|
|
|
|
LDF *+AR7(RHO_THETA),R2
|
|
ADDF *+AR7(RHO_THETA_DELTA),R2
|
|
CALL NORMIT
|
|
STF R2,*+AR7(RHO_THETA)
|
|
CALL _SINE
|
|
|
|
MPYF *+AR7(RHO_AMP),R0
|
|
ADDF *+AR7(RHO_XHEAD),R0
|
|
STF R0,*+AR7(DELTA_XLANE)
|
|
NOT_WEAVER_LP
|
|
|
|
|
|
;check to see if collision has occurred
|
|
LDI *+AR5(CAR_BUMP),R0
|
|
BNZ RHO_ISHIT
|
|
|
|
|
|
|
|
|
|
;make sure to check for relative speed for
|
|
;2x sound calls
|
|
;(once sounds are received)
|
|
|
|
LDI *+AR7(RHO_NOISE),R0
|
|
BNZ NONOISE
|
|
|
|
LDF *+AR7(DELTA_PLYRDIST),R0
|
|
STF R0,*+AR7(DELTA_OPLYRDIST)
|
|
CALL DIST_TO_PLYR
|
|
STF R0,*+AR7(DELTA_PLYRDIST)
|
|
|
|
|
|
LDI *+AR7(DELTA_PSTAT),R3 ;IN FRONT OF PLAYER?
|
|
BZ NONOISE
|
|
|
|
FLOAT 7500,R1
|
|
CMPF R1,R0
|
|
BGT NONOISE
|
|
|
|
LDI 1,R0
|
|
STI R0,*+AR7(RHO_NOISE)
|
|
|
|
LDI *+AR7(DELTA_MODEL),AR2
|
|
MPYI VEHTAB_SIZE,AR2
|
|
ADDI @VEHICLE_TABLEI,AR2
|
|
LDI *+AR2(VEHTAB_PASSBY),AR2
|
|
CMPI 0,AR2
|
|
BEQ NONOISE
|
|
CALL ONESNDFX
|
|
NONOISE
|
|
CALL CKCAROFF ;OFF THE UNIVERSE ???
|
|
BZ RHO_DIE ;YES
|
|
|
|
;
|
|
;simply drive towards the start of the universe by walking
|
|
;through the universe backwards
|
|
;
|
|
|
|
|
|
;see if we should track the next piece
|
|
CHECK_DIST:
|
|
LDI *+AR7(DELTA_LAST_OID),R0 ;CHECK TO SEE IF IT IS IN THE RANGE
|
|
.if DEBUG
|
|
BLT $ ;SEARCHING INVALID (/DELETED?) OBJECT
|
|
.endif
|
|
RS 8,R0
|
|
LDI @SECTIONIDX,R1
|
|
SUBI @DGROUP_COUNT,R1
|
|
CMPI R1,R0
|
|
BGT ALLOK66
|
|
|
|
BU $ ;probably RHO_DIE
|
|
|
|
ALLOK66
|
|
LDI *+AR7(DELTA_TPIECE),AR2
|
|
LDI *+AR2(OBLINK4),R0
|
|
BZ RHO_DIE ;should we kill ourselves
|
|
|
|
|
|
LDI *+AR7(DELTA_PLAYIT),R0
|
|
CMPI RHO_WEAVER,R0
|
|
BNE NOT_WEAVER_LP2
|
|
|
|
CALL GET_TRACK_POS_RVS_XLANE
|
|
BU L9999
|
|
|
|
NOT_WEAVER_LP2
|
|
CALL GET_TRACK_POS_RVS ;CHECK IF WE SHOULD ADVANCE
|
|
|
|
L9999 FLOAT 5000,R1 ;TO THE NEXT ROADPIECE
|
|
CMPF R1,R0
|
|
BGT THIS_PIECE
|
|
|
|
LDI *+AR7(DELTA_TPIECE),AR2
|
|
LDI *+AR2(OBLINK4),R0
|
|
.if DEBUG
|
|
BZ $ ;HOW DID WE MISS THIS?
|
|
.endif
|
|
STI R0,*+AR7(DELTA_TPIECE)
|
|
LDI R0,AR0
|
|
LDI *+AR0(OUSR1),R0
|
|
.if DEBUG
|
|
BLT $
|
|
.endif
|
|
STI R0,*+AR7(DELTA_LAST_OID) ;SAVE THE LAST KNOWN VALID OID
|
|
BU CHECK_DIST
|
|
|
|
THIS_PIECE
|
|
LDF *+AR5(CARSPEED),R1
|
|
LDFLE 30,R1 ;if 0 or less assume 30 mph
|
|
FLOATP @NFRAMES,R2
|
|
MPYF R2,R1
|
|
CALL DIV_F ;R0/R1 (distance to piece/speed) -> # frames to achieve
|
|
FIX R0,R7
|
|
|
|
LDI *+AR7(DELTA_TPIECE),AR2
|
|
LDP @_VECTORA ;lane position
|
|
LDF *+AR2(OPOSX),R2 ;X
|
|
SUBF *+AR4(OPOSX),R2
|
|
ADDF @_VECTORA+X,R2
|
|
LDF *+AR2(OPOSZ),R3 ;Z
|
|
SUBF *+AR4(OPOSZ),R3
|
|
ADDF @_VECTORA+Z,R3
|
|
SETDP
|
|
JOINUP998
|
|
|
|
|
|
;find the theta delta to this position
|
|
;
|
|
CALL ARCTANF ;-> R0
|
|
SUBF HALFPI,R0 ;R0 DESIRED THETA (float)
|
|
|
|
LDF *+AR4(ORADY),R2 ;R2 CURRENT THETA
|
|
CALL GETTHETADIFF ;->R0 THETA DELTA (float)
|
|
FLOAT R7,R1 ;theta / number of turns to achieve
|
|
SUBF 1,R1 ;DBG
|
|
BZ NODIV
|
|
CALL DIV_F ;-> R0
|
|
NODIV STF R0,*+AR7(DELTA_RADYDELTA)
|
|
|
|
|
|
LDI *+AR7(RHO_YELL),R0
|
|
BNZ NOTPRECOL
|
|
|
|
|
|
|
|
CALL PRECOLLIDE_PLYR
|
|
BNC NOTPRECOL
|
|
|
|
CALL PLYR_RIDE_RIGHT
|
|
BC NOTPRECOL
|
|
|
|
LDI *+AR7(DELTA_PSTAT),R0 ;IN FRONT OF PLAYER?
|
|
BZ NOTPRECOL
|
|
|
|
LDI 1,R0
|
|
STI R0,*+AR7(RHO_YELL)
|
|
|
|
RANDN 10
|
|
CMPI 7,R0
|
|
BGT IIIL
|
|
|
|
LDI *+AR7(RHO_INIT),AR2
|
|
MPYI RT_SIZE,AR2
|
|
ADDI @RHO_TABLEI,AR2
|
|
LDI *+AR2(RT_ONSCREAM),AR2
|
|
CMPI 0,AR2
|
|
CALL ONESNDFX
|
|
LDIC 1,R0
|
|
LDINC 0,R0
|
|
STI R0,*+AR7(RHO_YELL)
|
|
BU NONOISE
|
|
|
|
LDI *+AR7(RHO_INIT),R0
|
|
MPYI RT_SIZE,R0
|
|
ADDI @RHO_TABLEI,R0
|
|
LDI R0,AR2
|
|
|
|
LDI *+AR2(RT_ONSCREAM),R0
|
|
BZ NOLOAD
|
|
LDI R0,AR2
|
|
BU LLL88
|
|
|
|
IIIL
|
|
NOLOAD
|
|
RANDN B4HIT_SIZE
|
|
LDI R0,AR2
|
|
ADDI @B4HIT_TABLEI,AR2
|
|
LDI *AR2,AR2
|
|
LLL88 CALL ONESNDFX
|
|
LDIC 1,R0
|
|
LDINC 0,R0
|
|
STI R0,*+AR7(RHO_YELL)
|
|
|
|
LDF *+AR7(DELTA_THROTTLE),R2
|
|
MPYF 0.01,R2
|
|
STF R2,*+AR5(CARTHROTTLE)
|
|
BU L99
|
|
|
|
NOTPRECOL
|
|
;set throttle
|
|
|
|
CLRF R2
|
|
STF R2,*+AR5(CARBRAKE)
|
|
|
|
LDF *+AR7(DELTA_THROTTLE),R2
|
|
MPYF 1.01,R2
|
|
CMPF MIN_THROTTLE,R2
|
|
LDFLT MIN_THROTTLE,R2
|
|
CMPF MAX_THROTTLE,R2
|
|
LDFGT MAX_THROTTLE,R2
|
|
STF R2,*+AR7(DELTA_THROTTLE)
|
|
STF R2,*+AR5(CARTHROTTLE)
|
|
L99
|
|
LDF *+AR7(DELTA_RADYDELTA),R2
|
|
MPYF 2.50,R2 ;depending on plyr.asm this may have to
|
|
|
|
CALL DRONEGO
|
|
CALL GETTRAK
|
|
|
|
RHO_SLP:
|
|
LDI @HEAD2HEAD_ON,R0 ;HEAD 2 HEAD RACE???
|
|
|
|
.GLOBL SEND_RHO_POS
|
|
CALLNZ SEND_RHO_POS ;SEND YOUR POSITION TO LINKED GAME
|
|
CALL CKCAROFF ;OFF THE UNIVERSE ???
|
|
BZ RHO_DIE ;YES
|
|
|
|
SLEEP 1
|
|
BU RHO_LP
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*CHECK IF OFF THE UNIVERSE
|
|
*RET EQ (R0=0) IF OFF UNIVERSE, NE (R0=1) IF IN BOUNDS
|
|
*AR7=DRONE PROCESS
|
|
*
|
|
CKCAROFF
|
|
LDI *+AR7(DELTA_TPIECE),R0
|
|
LDI @DYNALIST_TRUEBEGIN,AR0
|
|
CMPI AR0,R0
|
|
BEQ CKCXFAIL
|
|
|
|
LDI *+AR0(OUSR1),R0
|
|
LDI *+AR7(DELTA_LAST_OID),R1
|
|
CMPI R0,R1
|
|
BLE CKCXFAIL
|
|
|
|
LDI @DYNALIST_END,AR0 ;GET FURTHEST ROAD ID
|
|
LDI *+AR0(OUSR1),R0
|
|
CMPI R0,R1
|
|
BLT CKCXPASS
|
|
CKCXFAIL
|
|
LDI 0,R0
|
|
RETS
|
|
CKCXPASS
|
|
LDI 1,R0
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
*FREE UP THE ALLOCATED STRUCTURES, DELINK THE LINKS, AND
|
|
*KILL THE PROCESS
|
|
*
|
|
|
|
RHO_DIE:
|
|
|
|
LDI @HEAD2HEAD_ON,R0 ;HEAD 2 HEAD RACE???
|
|
BZ RHO_DIE1 ;NO, BLOW OUT...
|
|
|
|
CALL COMPTRAK
|
|
BLE RHO_DIE0
|
|
|
|
CALL SEND_RHO_XSFER
|
|
B OM_DRONE ;CONTROL SWAPS TO OTHER MACHINE
|
|
|
|
RHO_DIE0
|
|
|
|
LDI *+AR5(CARNUM),R0 ;GET ID
|
|
CALL SEND_RHO_KILL ;KILL OFF THE UTHA MACHINES MUTHA
|
|
|
|
RHO_DIE1
|
|
|
|
CALL FREE_DRONE
|
|
LDI AR5,AR2
|
|
CALL DELCAR
|
|
|
|
|
|
LDI 1,R0
|
|
LS O_PROC_B,R0
|
|
LDI *+AR4(OFLAGS),R1
|
|
ANDN R0,R1
|
|
STI R1,*+AR4(OFLAGS)
|
|
|
|
LDI *+AR4(OFLAGS),R0
|
|
TSTB O_DYNAMIC,R0
|
|
BZ NODYNALEAN
|
|
|
|
LDI *+AR4(ORADZ),AR2
|
|
CALL PRC_KILL
|
|
|
|
NODYNALEAN
|
|
|
|
LDI AR4,AR2
|
|
CALL OBJ_DELETE
|
|
DIE
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*THE RHO HAS BEEN HIT NOW CHOOSE
|
|
*
|
|
* uneffected (if low intensity)?
|
|
* smoke out death?
|
|
* flame out?
|
|
* flame burst?
|
|
* total explosion?
|
|
* geometric expansion?
|
|
* star trek fadeout?
|
|
* defender pixelate?
|
|
* lawnmower-man ping pong?
|
|
* toaster smear?
|
|
* other ridiculas event?
|
|
*
|
|
*
|
|
;COLTABI .word COLTAB
|
|
;COLTAB .word SCOLLA,SCOLLB,SCOLLC
|
|
RHO_ISHIT:
|
|
LDI *+AR4(OID),R0
|
|
ANDN TYPE_M,R0
|
|
OR DEAD_VEH_T,R0
|
|
STI R0,*+AR4(OID)
|
|
STI R0,*+AR5(CAR_ID)
|
|
STI R0,*+AR7(PID)
|
|
|
|
; INCM @CAR_COLLS
|
|
CREATEC SMOKE_PUFF,SPAWNER_C
|
|
CREATEC EXP_PUFF,SPAWNER_C
|
|
|
|
LDI 10,AR6
|
|
RHO_ISHITLP
|
|
LDI @SUSPEND_MODE,R0
|
|
CMPI SM_HALT,R0
|
|
BEQ RHOISHIT_SLP
|
|
|
|
DEC AR6
|
|
CMPI 0,AR6
|
|
BLT NOSMK
|
|
CREATEC SMOKE_PUFF,SPAWNER_C
|
|
NOSMK
|
|
|
|
;dont disolve
|
|
;
|
|
;
|
|
LDI *+AR5(CARTRAK),R0
|
|
STI R0,*+AR7(DELTA_TPIECE)
|
|
|
|
|
|
;find piece which points to piece if it is not found
|
|
;or it is the initial piece exit rho code and commit
|
|
;suicide
|
|
|
|
LDI *+AR5(CARTRAK),AR1
|
|
LDI @DYNALIST_TRUEBEGIN,AR0
|
|
CMPI AR0,AR1
|
|
BEQ RHO_DIE
|
|
|
|
LDI *+AR0(OUSR1),R0
|
|
LDI *+AR1(OUSR1),R1
|
|
CMPI R0,R1
|
|
BLT RHO_DIE
|
|
|
|
;for now we die out
|
|
CLRF R2
|
|
STF R2,*+AR7(DELTA_THROTTLE)
|
|
STF R2,*+AR5(CARTHROTTLE)
|
|
; LDF *+AR7(DELTA_RADYDELTA),R2
|
|
STF R2,*+AR7(DELTA_RADYDELTA)
|
|
|
|
|
|
CALL DRONEGO
|
|
CALL GETTRAK
|
|
RHOISHIT_SLP
|
|
SLEEP 1
|
|
|
|
LDI @HEAD2HEAD_ON,R0 ;HEAD 2 HEAD RACE???
|
|
CALLNZ SEND_RHO_POS ;SEND YOUR POSITION TO LINKED GAME
|
|
|
|
BU RHO_ISHITLP
|
|
*----------------------------------------------------------------------------
|
|
|
|
*
|
|
*TRANSFER CAR TO OTHER MACHINE
|
|
*AR4=CAR
|
|
*AR5=CAR BLOCK
|
|
*AR7=PROCESS
|
|
*
|
|
|
|
SEND_RHO_XSFER:
|
|
LDI CB_RHO_XSFER,R0 ;MESSAGE HEADER
|
|
|
|
*SEND MESSAGE HEADER
|
|
|
|
LDI @COMMQ_TMP_BUFFI,AR2
|
|
STI R0,*AR2
|
|
|
|
*SEND CAR ID #
|
|
|
|
LDI *+AR5(CARNUM),R0
|
|
STI R0,*+AR2(1)
|
|
|
|
*SEND CAR STATE, 1=HIT
|
|
|
|
LDI *+AR4(OID),R0
|
|
AND DEAD_VEH_T,R0
|
|
STI R0,*+AR2(2)
|
|
|
|
LDI 3-1,RC
|
|
CALL MESSAGE_ADD
|
|
|
|
POP R0 ;CLEAN OFF STACK
|
|
LDI 1,R0
|
|
STI R0,*+AR5(CAR_OM)
|
|
B OM_DRONE ;NOW CONTROLLED BY OTHER MACHINE
|
|
*
|
|
*GET A CAR FROM OTHER MACHINE
|
|
*AR4=CAR
|
|
*AR5=CAR BLOCK
|
|
*AR7=PROCESS
|
|
*
|
|
*NOTE SHOULD ADD IN FUTURE: CAR_SPIN,CARSPRAD,CARGEAR,CARRPM,CARSKID
|
|
|
|
.GLOBL DECODE_RACER_XSFER
|
|
|
|
DECODE_RHO_XSFER:
|
|
LDI @IGNORE_UPDATES,R0 ;RACE OVER?
|
|
BNZ DECRHOX2 ;YES, NO UPDATES ALLOWED...
|
|
|
|
CALL FIND_DRONE ;FIND CAR ID #
|
|
BNZ DECRHOX ;CAR NOT FOUND
|
|
|
|
*INITIALIZE SHIT
|
|
|
|
LDI AR0,AR4 ;SAVE CAR INDEX
|
|
LDI *+AR4(OCARBLK),AR5 ;GET CAR BLOCK
|
|
LDI *+AR4(OPLINK),AR7 ;GET PROCESS
|
|
|
|
LDI @RHO_ACTIVE_XSFERI,R2
|
|
STI R2,*+AR7(PWAKE) ;CHANGE WAKE-UP ADDR
|
|
|
|
LDI *AR2++,R0 ;GET CAR STATE 1=HIT, 0=ACTIVE
|
|
STI R0,*+AR7(PR4) ;SAVE CODE IN REGISTER
|
|
RETS
|
|
DECRHOX2
|
|
ADDI 2,AR2 ;UPDATES NOT ALLOWED
|
|
RETS
|
|
DECRHOX
|
|
ADDI 1,AR2 ;COULDN'T FIND CAR ERROR
|
|
RETS
|
|
*
|
|
*TRANSFER ACTIVE RHO
|
|
*
|
|
RHO_ACTIVE_XSFERI .WORD RHO_ACTIVE_XSFER
|
|
RHO_ACTIVE_XSFER:
|
|
|
|
LDI 0,R0
|
|
STI R0,*+AR5(CAR_OM) ;CAR BELONGS TO ME NOW!!!
|
|
|
|
LDI *+AR5(CARTRACK_ID),R2 ;GET TRACK ID
|
|
STI R2,*+AR7(DELTA_LAST_OID) ;SAVE IT HERE ALSO
|
|
|
|
LDI @DYNALIST_END,AR0 ;GET FURTHEST ROAD ID
|
|
LDI *+AR0(OUSR1),R0
|
|
CMPI R0,R2
|
|
BGT RHO_DIE0 ;TOO FAR OUT, DIE
|
|
|
|
LDI @DYNALIST_TRUEBEGIN,AR0
|
|
LDI *+AR0(OUSR1),R0
|
|
CMPI R0,R2
|
|
BLT RHO_DIE0 ;BEHIND US KILL HIM
|
|
|
|
CALL FIND_DYNA ;GET TRACKING PIECE POINTER
|
|
STI AR2,*+AR7(DELTA_TPIECE)
|
|
|
|
LDF 0,R0
|
|
STF R0,*+AR5(CARDROT) ;CLEAN UP REENTRY
|
|
STF R0,*+AR5(CARSPRAD)
|
|
STF R0,*+AR5(CARSKID)
|
|
|
|
LDI 0,R0
|
|
STI R0,*+AR5(CAR_SPIN)
|
|
LDI R4,R4 ;CHECK HIT RHO
|
|
BZ RHO_LP
|
|
|
|
LDI 0,AR6 ;WERE HIT, GO TO DEAD LOOP
|
|
|
|
LDI *+AR4(OID),R0 ;MAKE 'EM DEAD
|
|
ANDN TYPE_M,R0
|
|
OR DEAD_VEH_T,R0
|
|
STI R0,*+AR4(OID)
|
|
STI R0,*+AR5(CAR_ID)
|
|
STI R0,*+AR7(PID)
|
|
|
|
CALL GETTRAK
|
|
LDF 0,R0
|
|
STF R0,*+AR7(DELTA_RADYDELTA) ;CLEAR THIS BULLSHIT
|
|
B RHO_ISHITLP
|
|
|
|
*
|
|
*KILL OFF RHO MESSAGE
|
|
*R0=ID
|
|
*
|
|
SEND_RHO_KILL:
|
|
LDI @COMMQ_TMP_BUFFI,AR2
|
|
LDI CB_RHO_KILL,R1
|
|
STI R1,*AR2
|
|
STI R0,*+AR2(1)
|
|
|
|
LDI 2-1,RC
|
|
CALL MESSAGE_ADD
|
|
RETS
|
|
|
|
*
|
|
*KILL OFF RHO
|
|
*
|
|
DECODE_RHO_KILL:
|
|
LDI @IGNORE_UPDATES,R0
|
|
BNZ DRKXX
|
|
|
|
CALL FIND_DRONE ;GET DRONE OBJ IN AR0
|
|
BNZ DRKX
|
|
|
|
LDI *+AR0(OPLINK),AR7
|
|
LDI @RHO_DIE1I,R2 ;KILL THE SOMBITCH
|
|
STI R2,*+AR7(PWAKE) ;CHANGE WAKE-UP ADDR
|
|
DRKX
|
|
RETS
|
|
DRKXX
|
|
INC AR2
|
|
RETS
|
|
|
|
RHO_DIE1I .WORD RHO_DIE1
|
|
|
|
.GLOBL DECODE_RHO_KILL,DECODE_RHO_XSFER
|
|
.GLOBL COMPTRAK,FIND_DRONE,FIND_DYNA
|
|
*----------------------------------------------------------------------------
|
|
.END
|
|
|