407 lines
7.3 KiB
NASM
Executable File
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
|