cruisin-usa/COMMDRNE.ASM

407 lines
7.3 KiB
NASM
Executable File

.FILE "COMMDRNE.ASM"
*----------------------------------------------------------------------------
*
*
*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 COMM.EQU
.include RACER.EQU
.include H2HOBJ.EQU
.text
*----------------------------------------------------------------------------
*Startup Position Table
*
*39 words per plyr (13*3)
*
*
STARTUP_POS_TABLEI .word STARTUP_POS_TABLE
STARTUP_POS_TABLE: ;PLYR1 (on PLYR2)
.float 576,-180,3287 ;GG
.float -1928700,4654,584166 ;SF
.float -2611877,14000,-628750 ;H280
.float -3277335,15063,-1078194 ;RW
.float -2257363,21013,-1158765 ;BH
.float -2426363,10814,-2164529 ;LA
.float -4120644,20316,-3599815 ;DV
.float -4073652,24315,-3414549 ;AZ
.float -2802001,12395,-3353785 ;GC
.float -2465719,6191,-4562865 ;IOWA
.float -3156184,-9609,-4101941 ;CH
.float -3514890,-3107,-3573365 ;IN
.float -2353033,-16317,-2927294 ;APPAL
;PLYR2 (on PLYR1)
.float 1728,-177,2875 ;GG
.float -1929780,4638,583767 ;SF
.float -2611381,13982,-627690 ;H280
.float -3276459,15050,-1078966 ;RW
.float -2257834,21013,-1157630 ;BH
.float -2426125,10798,-2163396 ;LA
.float -4121699,20312,-3600288 ;DV
.float -4074714,24350,-3414037 ;AZ
.float -2802209,12410,-3355048 ;GC
.float -2466458,6193,-4563828 ;IOWA
.float -3157144,-9607,-4101204 ;CH
.float -3515279,-3107,-3574450 ;IN
.float -2353891,-16335,-2928112 ;APPAL
.bss PLY2CAR,1
*----------------------------------------------------------------------------
*Communications drone
*
*
*
COMM_DRONE:
.if CDEBUG
CMPI -1,R0
BEQ $
.endif
LDI R0,AR1
CMPI 4,AR1
LDIEQ JEEP_MOD,R0
CMPI 5,AR1
LDIEQ PLYR_SBUS_MOD,R0
CMPI 6,AR1
LDIEQ PLYR_COPCAR_MOD,R0
CMPI 7,AR1
LDIEQ 3,R0
DOGENRLB
STI R0,*+AR7(DELTA_MODEL)
LDI R0,AR2
LDI R0,AR5
MPYI VEHTAB_SIZE,AR2
ADDI @VEHICLE_TABLEI,AR2
LDI *+AR2(VEHTAB_MODEL),AR2
CALL OBJ_GETE
BC SUICIDE
LDI AR0,AR4
*STORE OBJECT POINTER
STI AR4,@PLY2CAR
LDI R4,AR1
ADDI @RACER_PTRI,AR1
STI AR4,*AR1
LDI AR5,AR2
CALL VEHICLE_ANI_INIT
CALL DELTA_OINIT
*SET PROPER PALETTE
; LDI *+AR7(INITINDEX),AR0
;
; LDI *+AR0(RD_PALETTE),R0
; BZ NOOTHERPAL
;
; LDI R0,AR2
; CALL PAL_FIND_RAW
; STI R0,*+AR4(OPAL)
; ORM O_1PAL,*+AR4(OFLAGS)
;NOOTHERPAL
LDI 1,R0
STI R0,*+AR5(CAR_OM) ;SET OTHER MACHINES VEHICLE FLAG
LDF *+AR5(CARRDFR),R0
MPYF 1.5,R0 ;OFFROAD = 1.5X ONROAD
STF R0,*+AR5(CAROFRDFR)
LDI *+AR7(INITINDEX),AR0
LDF *+AR0(RD_XLANE),R0
STF R0,*+AR7(DELTA_XLANE)
STF R0,*+AR7(ROADOFFSET)
LDI 2,R2 ;SET LANE STATUS
FLOAT 600,R1
CMPF R1,R0
LDIGT 3,R2
STI R2,*+AR7(DELTA_STATUS)
LDF 1.0,R0 ;FOR ATTRACT ALWAYS 1 DIFFICULTY
MPYF *+AR0(RD_MAXACCEL),R0
STF R0,*+AR5(CARMAXACCEL) ;SET ACCEL POWER
LDF *+AR0(RD_REL),R0
STF R0,*+AR7(RELATIVITY) ;SET RELATIVITY COEFFICIENT
*
*INIT POSITION N ROAD PIECES FROM BEGINNING
*
LDI @DYNALIST_TRUEBEGIN,AR2
LDI *+AR2(OUSR1),R0
ANDN 0FFh,R0
LDI *+AR2(OLINK4),AR2 ;SKIP FIRST GROUP
LDI *+AR0(RD_POSITION),AR3 ;NUMBER OF PIECES AHEAD
CALL SPOS_INIT ;INIT STARTING POSITION
;initialize Ytheta to the intentional direction
STF R2,*+AR4(ORADY)
STF R2,*+AR5(CARYROT)
STF R2,*+AR5(CARVROT)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI DRONE_C|VEHICLE_T|DRNE_RACER,R0
STI R0,*+AR4(OID)
STI R0,*+AR5(CAR_ID)
STI R0,*+AR7(PID)
*INIT THROTTLE AND BRAKE
CLRF R0
STF R0,*+AR5(CARBRAKE)
STF R0,*+AR5(CARSPEED)
LDF 0.44,R0
STF R0,*+AR5(CARTRACTION)
LDF 1.0,R0
STF R0,*+AR7(DELTA_THROTTLE)
STF R0,*+AR7(POWERSURGE)
LDF 0.05,R0
CALL FRAND
ADDF 1.20,R0
STF R0,*+AR7(POWERCATCH) ;BLAST FROM START RANDOM TIME
LDI 120,R0 ;WAIT A LITTLE BEFORE UPDATE
STI R0,*+AR7(SURGETIME)
STI R0,*+AR7(CATCHTIME)
LDI 0,R0
STI R0,*+AR7(STEALTHMODE) ;NO STEALTH INIT
LDI AR4,AR2
CALL OBJ_PULL
CALL OBJ_INSERT
LDI *+AR4(OCARBLK),AR5
LDI *+AR4(OCARBLK),R3 ;GET CAR DATA AREA
CALL CAR_ROAD_COLL ;MAKE SORT WORK RIGHT
LDF *+AR5(CARYROT),R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR4,R2
ADDI OMATRIX,R2
LDI R2,R3
CALL CONCATMAT ;FIX THE MATRIX
LDL h2p1,AR2
LDI *+AR7(DELTA_INIT),R0
CMPI 8,R0
BEQ NNDDF3
LDL h2p2,AR2
NNDDF3 CALL OBJ_GETE
LDI AR0,AR2
LDI AR0,AR6
STI AR0,@COMM_DRONE_PTR
CALL OBJ_INSERT
LDI 1,R1
LS O_3DROT_B,R1
LDI *+AR6(OFLAGS),R0
OR O_IROT|O_1PAL|O_NOROT,R0
OR R1,R0
STI R0,*+AR6(OFLAGS)
LDL H2HPAL1,AR2
CALL PAL_FIND_RAW
STI R0,*+AR6(OPAL)
LDI *+AR7(DELTA_INIT),R0
STI R0,*+AR6(OCARBLK)
CMPI @PLY2CAR,AR4
BNE NOTPLYR
LDI @CHOSEN_RACE,R0
CMPI RACE_APPL,R0
BGT NOTPLYR ;washington DC doesn't count
MPYI 3,R0
LDI 0,AR2
LDI @DIPRAM,R1
TSTB CMDP_MASTER,R1
;Z == MASTER
LDIZ 39,AR2
ADDI R0,AR2
ADDI @STARTUP_POS_TABLEI,AR2
; LDF *AR2++,R0
; STF R0,*+AR4(OPOSX)
; LDF *AR2++,R0
; STF R0,*+AR4(OPOSY)
; LDF *AR2++,R0
; STF R0,*+AR4(OPOSZ)
; LDI AR4,AR2
; CALL OBJ_PULL
; CALL OBJ_INSERT
NOTPLYR
CLRI R5 ;blink counter
COMMDRNE_LP
PUSH R5
PUSH AR6
LDI *+AR4(OCARBLK),R3 ;GET CAR DATA AREA
PUSH AR4
PUSH AR5
CALL ROADSCAN ;MAKE SORT WORK RIGHT
POP AR5
POP AR4
POP AR6
POP R5
CALL SEND_OM_TRACK
SLEEP 1
BU COMMDRNE_LP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
COMM_DRONE_PTR_SORT:
LDI @COMM_DRONE_PTR,AR6
LDI @PLY2CAR,AR4
REGULAR LDI *+AR4(ODIST),IR1
ASH -4,IR1 ;quickly divide by 16
LDI @INVTABI,AR2 ;inverse table dedicated ptr
LDF *+AR2(IR1),R0
CALL INV_F30
CMPF 16,R0 ;
LDFLT 16,R0 ;
STF R0,*+AR6(OMAT00)
STF R0,*+AR6(OMAT11)
STF R0,*+AR6(OMAT22)
LDF *+AR4(OPOSX),R0
STF R0,*+AR6(OPOSX)
LDF *+AR4(OPOSY),R0
FLOAT 35,R1
MPYF *+AR6(OMAT00),R1
SUBF R1,R0
SUBF 20,R0
STF R0,*+AR6(OPOSY)
LDF *+AR4(OPOSZ),R0
STF R0,*+AR6(OPOSZ)
LDI AR6,AR2
CALL OBJ_PULL
LDI *AR4,R0
STI R0,*AR6
STI AR6,*AR4
LDI *+AR4(OFLAGS),R0
AND O_LIST_M,R0
OR *+AR6(OFLAGS),R0
STI R0,*+AR6(OFLAGS)
;
; CALL OBJ_INSERT
RETS
*----------------------------------------------------------------------------
.globl OM_DRONE
*----------------------------------------------------------------------------
*
*OTHER MACHINE DRONE LOOP
*
OM_DRONE:
LDI 1,R0 ;OTHER GUYS CAR NOW....
STI R0,*+AR5(CAR_OM)
OM_DRONEL
LDI *+AR4(OCARBLK),R3 ;GET CAR DATA AREA
PUSH AR4
PUSH AR5
CALL ROADSCAN ;MAKE SORT WORK RIGHT
POP AR5
POP AR4
LDF 0,R0 ;CLEAR OUT SOME SHIT
STF R0,*+AR5(CARDROT)
STF R0,*+AR5(CARSPRAD)
STF R0,*+AR5(CARSKID)
LDF *+AR5(CARYROT),R0
STF R0,*+AR4(ORADY) ;STORE CAR OBJECT RADY
LDI 0,R0
STF R0,*+AR5(CAR_SPIN)
******************************
*TEST FOR NO UPDATE
LDI 0,R0
STI R0,*+AR5(CARUPD)
SLEEP 1
LDI *+AR5(CARUPD),R0
BNE DRONELL
NOP
DRONELL
************
B OM_DRONEL
*----------------------------------------------------------------------------
.END