//*** IMPORTANT!!! *** the number of variables in the vehWeaponStats_t struct (including all elements of arrays) must be reflected by NUM_VWEAP_PARMS!!!
//*** IMPORTANT!!! *** vWeapFields table correponds to this structure!
char*name;
qbooleanbIsProjectile;//traceline or entity?
qbooleanbHasGravity;//if a projectile, drops
qbooleanbIonWeapon;//disables ship shields and sends them out of control
qbooleanbSaberBlockable;//lightsabers can deflect this projectile
intiMuzzleFX;//index of Muzzle Effect
intiModel;//handle to the model used by this projectile
intiShotFX;//index of Shot Effect
intiImpactFX;//index of Impact Effect
intiG2MarkShaderHandle;//index of shader to use for G2 marks made on other models when hit by this projectile
floatfG2MarkSize;//size (diameter) of the ghoul2 mark
intiLoopSound;//index of loopSound
floatfSpeed;//speed of projectile/range of traceline
floatfHoming;//0.0 = not homing, 0.5 = half vel to targ, half cur vel, 1.0 = all vel to targ
floatfHomingFOV;
intiLockOnTime;//0 = no lock time needed, else # of ms needed to lock on
intiDamage;//damage done when traceline or projectile directly hits target
intiSplashDamage;//damage done to ents in splashRadius of end of traceline or projectile origin on impact
floatfSplashRadius;//radius that ent must be in to take splashDamage (linear fall-off)
intiAmmoPerShot;//how much "ammo" each shot takes
intiHealth;//if non-zero, projectile can be shot, takes this much damage before being destroyed
floatfWidth;//width of traceline or bounding box of projecile (non-rotating!)
floatfHeight;//height of traceline or bounding box of projecile (non-rotating!)
intiLifeTime;//removes itself after this amount of time
qbooleanbExplodeOnExpire;//when iLifeTime is up, explodes rather than simply removing itself
}vehWeaponInfo_t;
//NOTE: this MUST stay up to date with the number of variables in the vehFields table!!!
// The maximum number of muzzles a vehicle may have.
#define MAX_VEHICLE_MUZZLES 10
// The maximum number of exhausts a vehicle may have.
#define MAX_VEHICLE_EXHAUSTS 4
// The maxiumum number of different weapons a vehicle may have
#define MAX_VEHICLE_WEAPONS 2
#define MAX_VEHICLE_TURRETS 2
#define MAX_VEHICLE_TURRET_MUZZLES 2
typedefstruct
{
intiWeapon;//what vehWeaponInfo index to use
intiDelay;//delay between turret muzzle shots
intiAmmoMax;//how much ammo it has
intiAmmoRechargeMS;//how many MS between every point of recharged ammo
char*yawBone;//bone on ship that this turret uses to yaw
char*pitchBone;//bone on ship that this turret uses to pitch
intyawAxis;//axis on yawBone to which we should to apply the yaw angles
intpitchAxis;//axis on pitchBone to which we should to apply the pitch angles
floatyawClampLeft;//how far the turret is allowed to turn left
floatyawClampRight;//how far the turret is allowed to turn right
floatpitchClampUp;//how far the turret is allowed to title up
floatpitchClampDown;//how far the turret is allowed to tilt down
intiMuzzle[MAX_VEHICLE_TURRET_MUZZLES];//iMuzzle-1 = index of ship's muzzle to fire this turret's 1st and 2nd shots from
char*gunnerViewTag;//Where to put the view origin of the gunner (name)
floatfTurnSpeed;//how quickly the turret can turn
qbooleanbAI;//whether or not the turret auto-targets enemies when it's not manned
qbooleanbAILead;//whether
floatfAIRange;//how far away the AI will look for enemies
intpassengerNum;//which passenger, if any, has control of this turret (overrides AI)
}turretStats_t;
typedefstruct
{
//*** IMPORTANT!!! *** See note at top of next structure!!! ***
// Weapon stuff.
intID;//index into the weapon data
// The delay between shots for each weapon.
intdelay;
// Whether or not all the muzzles for each weapon can be linked together (linked delay = weapon delay * number of muzzles linked!)
intlinkable;
// Whether or not to auto-aim the projectiles/tracelines at the thing under the crosshair when we fire
qbooleanaimCorrect;
//maximum ammo
intammoMax;
//ammo recharge rate - milliseconds per unit (minimum of 100, which is 10 ammo per second)
intammoRechargeMS;
//sound to play when out of ammo (plays default "no ammo" sound if none specified)
intsoundNoAmmo;
}vehWeaponStats_t;
// Compiler pre-define.
structVehicle_t;
typedefstruct
{
//*** IMPORTANT!!! *** vehFields table correponds to this structure!
char*name;//unique name of the vehicle
//general data
vehicleType_ttype;//what kind of vehicle
intnumHands;//if 2 hands, no weapons, if 1 hand, can use 1-handed weapons, if 0 hands, can use 2-handed weapons
floatlookPitch;//How far you can look up and down off the forward of the vehicle
floatlookYaw;//How far you can look left and right off the forward of the vehicle
floatlength;//how long it is - used for body length traces when turning/moving?
floatwidth;//how wide it is - used for body length traces when turning/moving?
floatheight;//how tall it is - used for body length traces when turning/moving?
vec3_tcenterOfGravity;//offset from origin: {forward, right, up} as a modifier on that dimension (-1.0f is all the way back, 1.0f is all the way forward)
//speed stats
floatspeedMax;//top speed
floatturboSpeed;//turbo speed
floatspeedMin;//if < 0, can go in reverse
floatspeedIdle;//what speed it drifts to when no accel/decel input is given
floataccelIdle;//if speedIdle > 0, how quickly it goes up to that speed
floatacceleration;//when pressing on accelerator
floatdecelIdle;//when giving no input, how quickly it drops to speedIdle
floatthrottleSticks;//if true, speed stays at whatever you accel/decel to, unless you turbo or brake
floatstrafePerc;//multiplier on current speed for strafing. If 1.0f, you can strafe at the same speed as you're going forward, 0.5 is half, 0 is no strafing
//handling stats
floatbankingSpeed;//how quickly it pitches and rolls (not under player control)
floatrollLimit;//how far it can roll to either side
floatpitchLimit;//how far it can roll forward or backward
floatbraking;//when pressing on decelerator
floatmouseYaw;// The mouse yaw override.
floatmousePitch;// The mouse pitch override.
floatturningSpeed;//how quickly you can turn
qbooleanturnWhenStopped;//whether or not you can turn when not moving
floattraction;//how much your command input affects velocity
floatfriction;//how much velocity is cut on its own
floatmaxSlope;//the max slope that it can go up with control
qbooleanspeedDependantTurning;//vehicle turns faster the faster it's going
//durability stats
intmass;//for momentum and impact force (player mass is 10)
intarmor;//total points of damage it can take
intshields;//energy shield damage points
intshieldRechargeMS;//energy shield milliseconds per point recharged
floattoughness;//modifies incoming damage, 1.0 is normal, 0.5 is half, etc. Simulates being made of tougher materials/construction
intmalfunctionArmorLevel;//when armor drops to or below this point, start malfunctioning
intsurfDestruction;//can parts of this thing be torn off on impact? -rww
//individual "area" health -rww
inthealth_front;
inthealth_back;
inthealth_right;
inthealth_left;
//visuals & sounds
char*model;//what model to use - if make it an NPC's primary model, don't need this?
char*skin;//what skin to use - if make it an NPC's primary model, don't need this?
intg2radius;//render radius for the ghoul2 model
intriderAnim;//what animation the rider uses
intradarIconHandle;//what icon to show on radar in MP
char*droidNPC;//NPC to attach to *droidunit tag (if it exists in the model)
intsoundOn;//sound to play when get on it
intsoundOff;//sound to play when get off
intsoundLoop;//sound to loop while riding it
intsoundTakeOff;//sound to play when ship takes off
intsoundEngineStart;//sound to play when ship's thrusters first activate
intsoundSpin;//sound to loop while spiraling out of control
intsoundTurbo;//sound to play when turbo/afterburner kicks in
intsoundHyper;//sound to play when ship lands
intsoundLand;//sound to play when ship lands
intsoundFlyBy;//sound to play when they buzz you
intsoundFlyBy2;//alternate sound to play when they buzz you
intsoundShift1;//sound to play when accelerating
intsoundShift2;//sound to play when accelerating
intsoundShift3;//sound to play when decelerating
intsoundShift4;//sound to play when decelerating
intiExhaustFX;//exhaust effect, played from "*exhaust" bolt(s)
intiTurboFX;//turbo exhaust effect, played from "*exhaust" bolt(s) when ship is in "turbo" mode
intiTurboStartFX;//turbo begin effect, played from "*exhaust" bolts when "turbo" mode begins
intiTrailFX;//trail effect, played from "*trail" bolt(s)
intiImpactFX;//impact effect, for when it bumps into something
intiExplodeFX;//explosion effect, for when it blows up (should have the sound built into explosion effect)
intiWakeFX;//effect it makes when going across water
intiDmgFX;//effect to play on damage from a weapon or something
intiArmorLowFX;//played when armor is less than 30% of full
intiArmorGoneFX;//played when on armor is completely gone
//Weapon stats
vehWeaponStats_tweapon[MAX_VEHICLE_WEAPONS];
// Which weapon a muzzle fires (has to match one of the weapons this vehicle has). So 1 would be weapon 1,
// 2 would be weapon 2 and so on.
intweapMuzzle[MAX_VEHICLE_MUZZLES];
//turrets (if any) on the vehicle
turretStats_tturret[MAX_VEHICLE_TURRETS];
// The max height before this ship (?) starts (auto)landing.
floatlandingHeight;
//other misc stats
intgravity;//normal is 800
floathoverHeight;//if 0, it's a ground vehicle
floathoverStrength;//how hard it pushes off ground when less than hover height... causes "bounce", like shocks
qbooleanwaterProof;//can drive underwater if it has to
floatbouyancy;//when in water, how high it floats (1 is neutral bouyancy)
intfuelMax;//how much fuel it can hold (capacity)
intfuelRate;//how quickly is uses up fuel
intturboDuration;//how long turbo lasts
intturboRecharge;//how long turbo takes to recharge
intvisibility;//for sight alerts
intloudness;//for sound alerts
floatexplosionRadius;//range of explosion
intexplosionDamage;//damage of explosion
intmaxPassengers;// The max number of passengers this vehicle may have (Default = 0).
qbooleanhideRider;// rider (and passengers?) should not be drawn
qbooleankillRiderOnDeath;//if rider is on vehicle when it dies, they should die
qbooleanflammable;//whether or not the vehicle should catch on fire before it explodes
intexplosionDelay;//how long the vehicle should be on fire/dying before it explodes
//camera stuff
qbooleancameraOverride;//whether or not to use all of the following 3rd person camera override values
floatcameraRange;//how far back the camera should be - normal is 80
floatcameraVertOffset;//how high over the vehicle origin the camera should be - normal is 16
floatcameraHorzOffset;//how far to left/right (negative/positive) of of the vehicle origin the camera should be - normal is 0
floatcameraPitchOffset;//a modifier on the camera's pitch (up/down angle) to the vehicle - normal is 0
floatcameraFOV;//third person camera FOV, default is 80
floatcameraAlpha;//fade out the vehicle to this alpha (0.1-1.0f) if it's in the way of the crosshair
qbooleancameraPitchDependantVertOffset;//use the hacky AT-ST pitch dependant vertical offset
//NOTE: some info on what vehicle weapon to use? Like ATST or TIE bomber or TIE fighter or X-Wing...?