00001
00002 #ifndef WEAPON_H
00003 #define WEAPON_H
00004
00005 #ifdef _PC
00006 #include "draw.h"
00007 #endif
00008 #include "newcoll.h"
00009 #include "particle.h"
00010 #include "body.h"
00011 #include "object.h"
00012 #include "Spark.h"
00013
00014
00015
00016 #define TURBO_NTRAILS 4
00017
00018 #define SHOCKWAVE_VEL 6000.0f
00019 #define SHOCKWAVE_MIN_VEL 3000.0f
00020 #define SHOCKWAVE_MAX_AGE 2.0f
00021 #define SHOCKWAVE_RAD 40.0f
00022 #define SHOCKWAVE_PULL_MAX_MUL 0.1f
00023 #define SHOCKWAVE_PULL_MIN_MUL 0.5f
00024
00025 #define OILSLICK_LIST_MAX 64
00026
00027 #define OILY_WHEEL_TIME TO_TIME(Real(2.5))
00028
00029 #define OILSLICK_GRAV 2048.0f
00030 #define OILSLICK_MIN_SIZE 32.0f
00031 #define OILSLICK_MAX_SIZE 96.0f
00032
00033 #define DROPPER_GAP 64.0f
00034
00035 #define ELECTRO_RANGE 192.0f
00036 #define ELECTRO_KILL_TIME 3.0f
00037
00038 #define CHROMEBALL_MIN_RAD 4.0f
00039 #define CHROMEBALL_MAX_RAD 64.0f
00040
00041 #define WATERBOMB_RADIUS 30.0f
00042 #define WATERBOMB_MAX_AGE 30.0f
00043 #define WATERBOMB_BANG_VAR 2000.0f
00044 #define WATERBOMB_BANG_MIN 500.0f
00045
00046 #define PUTTYBOMB_COUNTDOWN 10.0f
00047 #define PUTTYBOMB_COUNTDOWN2 1.0f
00048 #define PUTTYBOMB_NORETURN_TIME 1.0f
00049 #define PUTTYBOMB_SMOKE_NUM 8
00050 #define PUTTYBOMB_BANG_NUM 64
00051 #define PUTTYBOMB_BANG_TIME 2.5f
00052 #define PUTTYBOMB_ONE_BANG_TIME 2.0f
00053 #define PUTTYBOMB_SPHERE_TIME 0.5f
00054 #define PUTTYBOMB_BANG_STAGGER (PUTTYBOMB_BANG_TIME - PUTTYBOMB_ONE_BANG_TIME)
00055 #define PUTTYBOMB_BANG_RADIUS 128.0f
00056 #define PUTTYBOMB_SCORCH_RADIUS 256.0f
00057 #define PUTTYBOMB_PUSH_RANGE 64.0f
00058 #define PUTTYBOMB_BANG_IMPULSE_RANGE 128.0f
00059
00060 #define WEAPON_RANGE_MIN Real(100.0)
00061 #define WEAPON_RANGE_MAX Real(3500.0)
00062 #define WEAPON_RANGE_OFFSET Real(200.0)
00063 #define WEAPON_DIR_OFFSET Real(0.25)
00064
00065
00066
00067 typedef struct {
00068 long Alive;
00069 REAL Age, Reach;
00070 VEC OldPos;
00071 BBOX Box;
00072 } SHOCKWAVE_OBJ;
00073
00074 typedef struct {
00075 OBJECT *Target;
00076 bool Exploded;
00077 REAL Age;
00078 REAL SmokeTime;
00079 REAL SparkTime;
00080 TRAIL *Trail;
00081 REAL TrailTime;
00082 } FIREWORK_OBJ;
00083
00084 typedef struct {
00085 VEC Pos, Vel;
00086 REAL Age, Size, Life;
00087 } PUTTYBOMB_BANG;
00088
00089 typedef struct {
00090 REAL Timer, SphereRadius;
00091 REAL OrigAerialLen;
00092 VEC Pos;
00093 BBOX Box;
00094 PUTTYBOMB_BANG Bang[PUTTYBOMB_BANG_NUM];
00095 long SmokeVert[PUTTYBOMB_SMOKE_NUM];
00096 REAL SmokeTime;
00097 } PUTTYBOMB_OBJ;
00098
00099 typedef struct {
00100 REAL Time, TimeAdd;
00101 } PUTTYBOMB_VERT;
00102
00103 typedef struct {
00104 REAL Age, BangTol, ScalarHoriz, ScalarVert;
00105 } WATERBOMB_OBJ;
00106
00107 typedef struct {
00108 REAL Age;
00109 MODEL Model;
00110 long JumpFlag;
00111 VEC JumpPos1[MAX_NUM_PLAYERS], JumpPos2[MAX_NUM_PLAYERS];
00112 void *Player[MAX_NUM_PLAYERS];
00113 } ELECTROPULSE_OBJ;
00114
00115 typedef struct {
00116 long Mode;
00117 REAL Age, LandHeight, Size, MaxSize, Ymin, Ymax;
00118 VEC Pos[4], Vel[4];
00119 } OILSLICK_OBJ;
00120
00121 typedef struct {
00122 long Count;
00123 REAL Age;
00124 VEC LastPos;
00125 } OILSLICK_DROPPER_OBJ;
00126
00127 typedef struct {
00128 REAL Age, Radius;
00129 } CHROMEBALL_OBJ;
00130
00131 typedef struct {
00132 } CLONE_OBJ;
00133
00134 typedef struct {
00135 REAL Age, LifeTime, SparkTime, TrailTime;
00136 REAL Force;
00137 TRAIL *TurboTrail[TURBO_NTRAILS];
00138 } TURBO_OBJ;
00139
00140 typedef struct {
00141 REAL Age, LifeTime;
00142 } TURBO2_OBJ;
00143
00144 typedef struct {
00145 } SPRING_OBJ;
00146
00147 typedef struct {
00148 REAL Time, TimeAdd;
00149 } ELECTROPULSE_VERT;
00150
00151 typedef struct {
00152 REAL X, Z, Radius, SquaredRadius;
00153 REAL Ymin, Ymax;
00154 } OILSLICK_LIST;
00155
00156 typedef struct {
00157 MODEL Model;
00158 } ELECTROZAPPED_OBJ;
00159
00160 typedef struct {
00161 REAL Time, TimeAdd;
00162 } ELECTROZAPPED_VERT;
00163
00164 typedef struct {
00165 REAL Timer;
00166 MODEL Model;
00167 } BOMBGLOW_OBJ;
00168
00169 typedef struct {
00170 REAL Time, TimeAdd;
00171 } BOMBGLOW_VERT;
00172
00173
00174
00175 void ResetOilSlickList(void);
00176
00177 extern long InitShockwave(OBJECT *obj, long *flags);
00178 extern long InitFirework(OBJECT *obj, long *flags);
00179 extern long InitPuttyBomb(OBJECT *obj, long *flags);
00180 extern long InitWaterBomb(OBJECT *obj, long *flags);
00181 extern long InitElectroPulse(OBJECT *obj, long *flags);
00182 extern long InitOilSlick(OBJECT *obj, long *flags);
00183 extern long InitOilSlickDropper(OBJECT *obj, long *flags);
00184 extern long InitChromeBall(OBJECT *obj, long *flags);
00185 extern long InitClone(OBJECT *obj, long *flags);
00186 extern long InitTurbo(OBJECT *obj, long *flags);
00187 extern long InitTurbo2(OBJECT *obj, long *flags);
00188 extern long InitSpring(OBJECT *obj, long *flags);
00189 extern long InitElectroZapped(OBJECT *obj, long *flags);
00190 extern long InitBombGlow(OBJECT *obj, long *flags);
00191
00192 extern void ShockwaveHandler(OBJECT *obj);
00193 extern void FireworkHandler(OBJECT *obj);
00194 extern void PuttyBombHandler(OBJECT *obj);
00195 extern void PuttyBombBang(OBJECT *obj);
00196 extern void WaterBombHandler(OBJECT *obj);
00197 extern void ElectroPulseHandler(OBJECT *obj);
00198 extern void OilSlickHandler(OBJECT *obj);
00199 extern void OilSlickDropperHandler(OBJECT *obj);
00200 extern void ChromeBallHandler(OBJECT *obj);
00201 extern void CloneHandler(OBJECT *obj);
00202 extern void Turbo2Handler(OBJECT *obj);
00203 extern void SpringHandler(OBJECT *obj);
00204 extern void ElectroZappedHandler(OBJECT *obj);
00205 extern void BombGlowHandler(OBJECT *obj);
00206
00207 extern void RenderShockwave(OBJECT *obj);
00208 extern void ShockwaveWorldMeshFxChecker(void *data);
00209 extern void ShockwaveModelMeshFxChecker(void *data);
00210 extern void PuttyBombWorldMeshFxChecker(void *data);
00211 extern void PuttyBombModelMeshFxChecker(void *data);
00212 extern void RenderElectroPulse(OBJECT *obj);
00213 extern void RenderOilSlick(OBJECT *obj);
00214 extern void RenderChromeBall(OBJECT *obj);
00215 extern void RenderElectroZapped(OBJECT *obj);
00216 extern void RenderBombGlow(OBJECT *obj);
00217 extern void RenderWaterBomb(OBJECT *obj);
00218 extern void RenderPuttyBombBang(OBJECT *obj);
00219 extern void PuttyBombMove(OBJECT *obj);
00220
00221 extern OBJECT *WeaponTarget(OBJECT *playerObj);
00222
00223
00224
00225 extern long OilSlickCount;
00226 extern OILSLICK_LIST OilSlickList[];
00227
00228
00229 #ifdef PSX
00230
00231 void DrawOil(VEC *p0, VEC *p1, VEC *p2, VEC *p3, REAL tu, REAL tv, REAL twidth, REAL theight, long * OT, MATRIX *Cam, VECTOR * CamPos );
00232 void ProcessWeapons( CAR * car, long * OT, CAMERA * Cam );
00233
00234
00235
00236 #endif
00237
00238
00239 #endif