Vehicle Asset (BO2): Difference between revisions

From COD Engine Research
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 16: Line 16:
};
};


enum CameraMode : short
enum EVehicleCameraMode : short
{
{
   first = 0,
   VEH_MODE_FIRSTPERSON = 0x0,
   chase = 1,
   VEH_MODE_CHASECAM = 0x1,
   view = 2,
   VEH_MODE_HLO = 0x2,
   strafe = 3,
   VEH_MODE_STRAFE = 0x3,
   horse = 4,
   VEH_MODE_HORSE = 0x4,
   oldtank = 5,
   VEH_MODE_OLDTANK = 0x5,
   hover = 6,
   VEH_MODE_HOVER = 0x6,
   vtol = 7
   VEH_MODE_VTOL = 0x7,
  VEH_MODE_MAX = 0x8,
};
};


Line 36: Line 37:
};
};


struct PassengerSpans
struct view_limits_t
{
{
   float horizSpanLeft;
   float horizSpanLeft;
Line 42: Line 43:
   float vertSpanUp;
   float vertSpanUp;
   float vertSpanDown;
   float vertSpanDown;
  float horizResistLeft;
  float horizResistRight;
  float vertResistUp;
  float vertResistDown;
};
};


struct unknownVehicleInternal1
enum surfaceNames_t
{
{
   int drive_by_sound_apex;
   bark,
   char * drive_by_sound_name;
  brick,
   int unknown;
  carpet,
  cloth,
  concrete,
  dirt,
  flesh,
  foliage,
  glass,
  grass,
  gravel,
  ice,
  metal,
  mud,
  paper,
  plaster,
  rock,
  sand,
  snow,
  water,
  wood,
  asphalt,
  ceramic,
  plastic,
  rubber,
  cushion,
  fruit,
  paintedmetal,
  player,
  tallgrass,
  riotshield,
  opaqueglass
};
 
struct DevGraph
{
  vec2_t *knots;
  int *knotCount;
  int knotCountMax;
  int selectedKnot;
  void (__cdecl *eventCallback)(DevGraph *, DevEventType, LocalClientNum_t);
  void (__cdecl *textCallback)(DevGraph *, const float, const float, char *, const int);
  void *data;
  bool disableEditingEndPoints;
};
 
//This is unused in the FF files, and acts as a sort of buffer in memory.
struct GraphFloat
{
  char name[64];
  vec2_t knots[32];
  int knotCount;
  float scale;
  DevGraph devguiGraph;
};
 
struct VehicleParameter
{
  float m_speed_max;
  float m_accel_max;
  float m_reverse_scale;
  float m_steer_angle_max;
  float m_steer_angle_speed_scale;
  float m_steer_speed;
  float m_wheel_radius;
  float m_susp_spring_k;
  float m_susp_damp_k;
  float m_susp_adj;
  float m_susp_hard_limit;
  float m_susp_min_height;
  float m_tire_fric_fwd;
  float m_tire_fric_side;
  float m_tire_fric_brake;
  float m_tire_fric_hand_brake;
  float m_body_mass;
  float m_roll_stability;
  float m_pitch_stability;
  float m_pitch_roll_resistance;
  float m_yaw_resistance;
  float m_upright_strength;
  float m_tilt_fakey;
  float m_peel_out_max_speed;
  float m_tire_damp_coast;
  float m_tire_damp_brake;
  float m_tire_damp_hand;
  float m_auto_hand_brake_min_speed;
  TractionType m_traction_type;
  const char *m_name;
  vec3_t m_bbox_min;
  vec3_t m_bbox_max;
  vec3_t m_mass_center_offset;
  vec3_t m_buoyancybox_min;
  vec3_t m_buoyancybox_max;
  float m_water_speed_max;
  float m_water_accel_max;
  float m_water_turn_accel;
  float m_water_turn_speed_max;
  float m_water_ebrake_power;
  vec3_t m_boat_motor_offset;
  float m_boat_speed_rise;
  float m_boat_speed_tilt;
  float m_boat_side_fric_scale;
  float m_boat_forward_fric_scale;
  float m_boat_vertical_fric_scale;
  float m_jump_force;
  float m_tire_fric_side_max;
  bool m_drive_on_walls;
  float m_linear_drag_scale;
  float m_angular_drag_scale;
};
 
struct VehicleDriveBySound
{
  int apex;
  const char *name;
  unsigned int alias;
};
 
struct VehicleEngineSound
{
   const char *name;
  unsigned int alias;
  float params[5];
};
 
struct VehicleGearData
{
  float minRPM;
  float maxRPM;
  float ratio;
};
 
struct VehicleEngine
{
  float idleRpms;
  float maxRpms;
  float maxTorque;
  float brakingCoeff;
  float onLoadFadeInStart;
  float onLoadFadeInEnd;
  float offLoadFadeOutStart;
  float offLoadFadeOutEnd;
  float loadScale;
  float loadSmoothing;
  float throttleLag;
  float pitchScale;
  VehicleEngineSound onload[5];
  VehicleEngineSound offload[5];
   int numGears;
  int loopLastGear;
  VehicleGearData gears[10];
};
 
struct VehicleAntenna
{
  float springK;
  float damp;
  float length;
  float gravity;
};
};


Line 62: Line 223:
   int projectileSplashDamage;
   int projectileSplashDamage;
   int heavyExplosiveDamage;
   int heavyExplosiveDamage;
   CameraMode cameraMode;
   EVehicleCameraMode cameraMode;
   int autoRecenterOnAccel;
   int autoRecenterOnAccel;
   int thirdPersonDriver;
   int thirdPersonDriver;
Line 71: Line 232:
   float thirdPersonCameraMinPitchClamp;
   float thirdPersonCameraMinPitchClamp;
   float thirdPersonCameraMaxPitchClamp;
   float thirdPersonCameraMaxPitchClamp;
  float thirdPersonCameraHeightMin;
   float thirdPersonCameraHeight[2];
   float thirdPersonCameraHeight;
   float thirdPersonCameraPitch[2];
  float thirdPersonCameraPitchMin;
   float thirdPersonCameraPitch;
   int cameraAlwaysAutoCenter;
   int cameraAlwaysAutoCenter;
   float cameraAutoCenterLerpRate;
   float cameraAutoCenterLerpRate;
Line 83: Line 242:
   float cameraFOV;
   float cameraFOV;
   float cameraRollFraction;
   float cameraRollFraction;
   float tagPlayerOffset[3];
   vec3_t tagPlayerOffset;
   int killcamCollision;
   int killcamCollision;
   float killcamDist;
   float killcamDist;
Line 130: Line 289:
   float tiltSpeedRoll;
   float tiltSpeedRoll;
   const char * turretWeapon;
   const char * turretWeapon;
   float turretHorizSpanLeft;
   view_limits_t turretViewLimits;
  float turretHorizSpanRight;
  float turretVertSpanUp;
  float turretVertSpanDown;
  float turretHorizResistLeft;
  float turretHorizResistRight;
  float turretVertResistUp;
  float turretVertResistDown;
   float turretRotRate;
   float turretRotRate;
   int turretClampPlayerView;
   int turretClampPlayerView;
   int turretLockTurretToPlayerView;
   int turretLockTurretToPlayerView;
   const char * gunnerWeapon[4];
   const char * gunnerWeapon[4];
      int unknown1[2];
  unsigned __int16 gunnerWeaponIndex[4];
   float gunnerRotRate;
   float gunnerRotRate;
      char unknown2[0x20];
   vec2_t gunnerRestAngles[4];
   PassengerSpans passenger1;
   view_limits_t passengerViewLimits[6];
      char unknown3[0x10];
   const char * turretSpinSndName;
   PassengerSpans passenger2;
   const char * turretStopSndName;
      char unknown4[0x10];
   unsigned int turretSpinSndIndex;
   PassengerSpans passenger3;
   unsigned int turretStopSndIndex;
      char unknown5[0x10];
   const char * wheelRoadNoiseSnd;
   PassengerSpans passenger4;
   const char * wheelSlidingSnd;
      char unknown6[0x10];
   const char * wheelPeelingOutSnd;
  PassengerSpans passenger5;
      char unknown7[0x10];
   PassengerSpans passenger6;
      char unknown8[0x10];
   char * turretSpinSnd;
  char * turretStopSnd;
      char unknown9[8];
   char * wheelRoadNoiseSnd;
   char * wheelSlidingSnd;
   char * wheelPeelingOutSnd;
   float skidSpeedMin;
   float skidSpeedMin;
   float skidSpeedMax;
   float skidSpeedMax;
   char * futzSnd;
   const char *futzName;
   float futzBlend;
   float futzBlend;
   int animType;
   int animType;
   char * animSet;
   const char *animSet;
   int scriptedAnimationEntry;
   int scriptedAnimationEntry;
   float mantleAngleFront;
   float mantleAngleFront;
Line 178: Line 320:
   ScriptString extraWheelLeft2;
   ScriptString extraWheelLeft2;
   ScriptString extraWheelRight2;
   ScriptString extraWheelRight2;
   ScriptString driverHideTag1;
   ScriptString driverHideTag;
   XModel * mod[4];
   XModel * attachmentModels[4];
   ScriptString tag[4];
   ScriptString attachmentTags[4];
   XModel * dmod[4];
   XModel * deathAttachmentModels[4];
   ScriptString dtag[4];
   ScriptString deathAttachmentTags[4];
   float tracerOffsetForward;
   float tracerOffsetForward;
   float tracerOffsetUp;
   float tracerOffsetUp;
   XModel * worldModel;
   XModel * model;
   XModel * viewModel;
   XModel * viewModel;
   XModel * deathModel;
   XModel * deathModel;
Line 192: Line 334:
   FxEffectDef * exhaustFx;
   FxEffectDef * exhaustFx;
   int oneExhaust;
   int oneExhaust;
   FxEffectDef * treadFxDefault;
   FxEffectDef *treadFx[32]; //See surfaceNames_t for the names of these.
  FxEffectDef * treadFxBark;
   FxEffectDef *deathFx;
  FxEffectDef * treadFxBrick;
  FxEffectDef * treadFxCarpet;
  FxEffectDef * treadFxCloth;
  FxEffectDef * treadFxConcrete;
  FxEffectDef * treadFxDirt;
  FxEffectDef * treadFxFlesh;
  FxEffectDef * treadFxFoliage;
  FxEffectDef * treadFxGlass;
  FxEffectDef * treadFxGrass;
  FxEffectDef * treadFxGravel;
  FxEffectDef * treadFxIce;
  FxEffectDef * treadFxMetal;
  FxEffectDef * treadFxMud;
  FxEffectDef * treadFxPaper;
  FxEffectDef * treadFxPlaster;
  FxEffectDef * treadFxRock;
  FxEffectDef * treadFxSand;
  FxEffectDef * treadFxSnow;
  FxEffectDef * treadFxWater;
  FxEffectDef * treadFxWood;
  FxEffectDef * treadFxAsphalt;
  FxEffectDef * treadFxCeramic;
  FxEffectDef * treadFxPlastic;
  FxEffectDef * treadFxRubber;
  FxEffectDef * treadFxCushion;
  FxEffectDef * treadFxFruit;
  FxEffectDef * treadFxPaintedMetal;
      char unknown10[0xC];
   FxEffectDef * deathFxName;
   ScriptString deathFxTag;
   ScriptString deathFxTag;
   char * deathFxSound;
   const char * deathFxSound;
   FxEffectDef * lightFxName[4];
   FxEffectDef * lightFxName[4];
   ScriptString lightFxTag[4];
   ScriptString lightFxTag[4];
   FxEffectDef * FriendlyLightFxName;
   FxEffectDef * friendlyLightFx;
   ScriptString FriendlyLightFxTag;
   ScriptString friendlyLightFxTag;
   FxEffectDef * EnemyLightFxName;
   FxEffectDef * enemyLightFx;
   ScriptString EnemyLightFxTag;
   ScriptString enemyLightFxTag;
   float radiusDamageMin;
   float radiusDamageMin;
   float radiusDamageMax;
   float radiusDamageMax;
   float radiusDamageRadius;
   float radiusDamageRadius;
   char * shootShock;
   const char *shootShock;
   char * shootRumble;
   const char *shootRumble;
   float deathQuakeScale;
   float deathQuakeScale;
   float deathQuakeDuration;
   float deathQuakeDuration;
   float deathQuakeRadius;
   float deathQuakeRadius;
   char * rumbleType;
   const char *rumbleType;
   float rumbleScale;
   float rumbleScale;
   float rumbleDuration;
   float rumbleDuration;
Line 248: Line 361:
   int healthMin;
   int healthMin;
   int healthMax;
   int healthMax;
   int team;
   int eTeam;
   int boostAccelMultiplier;
   int boostAccelMultiplier;
   float boostDuration;
   float boostDuration;
Line 254: Line 367:
   int addToCompass;
   int addToCompass;
   int addToCompassEnemy;
   int addToCompassEnemy;
   char * compassIcon;
   const char *compassIcon;
      int unknown11;
  Material *compassIconMaterial;
   char * gasButton;
   const char *gasButtonName;
   int gasButtonIndex;
   int gasButton;
   char * reverseBrakeButton;
   const char *reverseBrakeButtonName;
   int reverseBrakeButtonIndex;
   int reverseBrakeButton;
   char * handBrakeButton;
   const char *handBrakeButtonName;
   int handBrakeButtonIndex;
   int handBrakeButton;
   char * attackButton;
   const char *attackButtonName;
   int attackButtonIndex;
   int attackButton;
   char * attackSecondaryButton;
   const char *attackSecondaryButtonName;
   int attackSecondaryButtonIndex;
   int attackSecondaryButton;
   char * boostButton;
   const char *boostButtonName;
   int boostButtonIndex;
   int boostButton;
   char * moveUpButton;
   const char *moveUpButtonName;
   int moveUpButtonIndex;
   int moveUpButton;
   char * moveDownButton;
   const char *moveDownButtonName;
   int moveDownButtonIndex;
   int moveDownButton;
   char * switchSeatsButton;
   const char *switchSeatButtonName;
   int switchSeatsButtonIndex;
   int switchSeatButton;
   char * steerGraph;
   const char *steerGraphName;
      int unknown12;
  GraphFloat *steerGraph;
   char * accelGraph;
   const char *accelGraphName;
      int unknown13;
  GraphFloat *accelGraph;
   int isNitrous;
   int isNitrous;
   int isFourWheelSteering;
   int isFourWheelSteering;
Line 313: Line 426:
   float joltWaves;
   float joltWaves;
   float joltIntensity;
   float joltIntensity;
   int maxSpeed2;    //For some reason, there are 2 of these defined and they are always equal.
   VehicleParameter nitrousVehParams;
  int accel2;
  float nitrous_reverse_scale;
  float nitrous_steer_angle_max;
  float nitrous_steer_angle_speed_scale;
  float nitrous_steer_speed;
  float nitrous_wheel_radius;
  float nitrous_susp_spring_k;
  float nitrous_susp_damp_k;
  float nitrous_susp_adj;
  float nitrous_susp_hard_limit;
  float nitrous_susp_min_height;
  float nitrous_tire_fric_fwd;
  float nitrous_tire_fric_side;
  float nitrous_tire_fric_brake;
  float nitrous_tire_fric_hand_brake;
  int nitrous_body_mass;
  float nitrous_roll_stability;
  float nitrous_pitch_stability;
  float nitrous_roll_resistance;
  float nitrous_yaw_resistance;
  float nitrous_upright_strength;
  float nitrous_tilt_fakey;
  float nitrous_peel_out_max_speed;
  float nitrous_tire_damp_coast;
  float nitrous_tire_damp_brake;
  float nitrous_tire_damp_hand;
  int autoHandbrakeMinSpeed;
  TractionType nitrous_traction_type;
      int unknown14;
  float nitrous_bbox_min[3];
  float nitrous_bbox_max[3];
  float nitrous_mass_center_offset[3];
  float nitrous_buoyancybox_min[3];
  float nitrous_buoyancybox_max[3];
  float nitrous_water_speed_max;
  float nitrous_water_accel_max;
  float nitrous_water_turn_accel;
  float nitrous_water_turn_speed_max;
  float nitrous_boat_ebrake_power;
  float nitrous_boat_motor_offset[3];
  float nitrous_boat_speed_rise;
  float nitrous_boat_speed_tilt;
  float nitrous_boat_side_fric;
  float nitrous_boat_forward_fric;
  float nitrous_boat_vertical_fric;
  float nitrous_jump_force;
  float nitrous_tire_fric_side_max;
  bool nitrous_drive_on_walls;
  float nitrous_linear_drag_scale;
  float nitrous_angular_drag_scale;
   float p_driveby_sound_radius;
   float p_driveby_sound_radius;
   float s_driveby_sound_radius;
   float s_driveby_sound_radius;
      unknownVehicleInternal1 p[20];
  VehicleDriveBySound p[20];
      unknownVehicleInternal1 s[20];
  VehicleDriveBySound s[20];
   int doFootSteps;
   int doFootSteps;
   int isSentient;
   int isSentient;
   float idleRpms;
   VehicleEngine engine;
   float maxRpms;
   VehicleAntenna antenna[2];
  float maxTorque;
   char *csvInclude;
  float brakingCoeff;
  float onLoadFadeInStart;
  float onLoadFadeInEnd;
  float offLoadFadeOutStart;
  float offLoadFadeOutEnd;
  float loadScale;
  float loadSmooting;
  float throttleLag;
  float pitchScale;
  const char * on_engsnd_name0;
      char unknown15[4];
  float on_engsnd_fade_in_start0;
  float on_engsnd_fade_in_end0;
  float on_engsnd_fade_out_start0;
  float on_engsnd_fade_out_end0;
  float on_engsnd_pitch_ref0;
  const char * on_engsnd_name1;
      char unknown16[4];
  float on_engsnd_fade_in_start1;
  float on_engsnd_fade_in_end1;
  float on_engsnd_fade_out_start1;
  float on_engsnd_fade_out_end1;
  float on_engsnd_pitch_ref1;
  const char * on_engsnd_name2;
      char unknown17[4];
  float on_engsnd_fade_in_start2;
  float on_engsnd_fade_in_end2;
  float on_engsnd_fade_out_start2;
  float on_engsnd_fade_out_end2;
  float on_engsnd_pitch_ref2;
  const char * on_engsnd_name3;
      char unknown18[4];
  float on_engsnd_fade_in_start3;
  float on_engsnd_fade_in_end3;
  float on_engsnd_fade_out_start3;
  float on_engsnd_fade_out_end3;
  float on_engsnd_pitch_ref3;
  const char * on_engsnd_name4;
      char unknown19[4];
  float on_engsnd_fade_in_start4;
  float on_engsnd_fade_in_end4;
  float on_engsnd_fade_out_start4;
  float on_engsnd_fade_out_end4;
  float on_engsnd_pitch_ref4;
  const char * off_engsnd_name0;
      char unknown20[4];
  float off_engsnd_fade_in_start0;
  float off_engsnd_fade_in_end0;
  float off_engsnd_fade_out_start0;
  float off_engsnd_fade_out_end0;
  float off_engsnd_pitch_ref0;
  const char * off_engsnd_name1;
      char unknown21[4];
  float off_engsnd_fade_in_start1;
  float off_engsnd_fade_in_end1;
  float off_engsnd_fade_out_start1;
  float off_engsnd_fade_out_end1;
  float off_engsnd_pitch_ref1;
  const char * off_engsnd_name2;
      char unknown22[4];
  float off_engsnd_fade_in_start2;
  float off_engsnd_fade_in_end2;
  float off_engsnd_fade_out_start2;
  float off_engsnd_fade_out_end2;
  float off_engsnd_pitch_ref2;
  const char * off_engsnd_name3;
      char unknown23[4];
  float off_engsnd_fade_in_start3;
  float off_engsnd_fade_in_end3;
  float off_engsnd_fade_out_start3;
  float off_engsnd_fade_out_end3;
  float off_engsnd_pitch_ref3;
  const char * off_engsnd_name4;
      char unknown24[4];
   float off_engsnd_fade_in_start4;
  float off_engsnd_fade_in_end4;
  float off_engsnd_fade_out_start4;
  float off_engsnd_fade_out_end4;
  float off_engsnd_pitch_ref4;
  int numGears;
  int loopLastGear;
  float gear_min_rpm0;
  float gear_max_rpm0;
  float gear_ratio0;
  float gear_min_rpm1;
  float gear_max_rpm1;
  float gear_ratio1;
  float gear_min_rpm2;
  float gear_max_rpm2;
  float gear_ratio2;
  float gear_min_rpm3;
  float gear_max_rpm3;
  float gear_ratio3;
  float gear_min_rpm4;
  float gear_max_rpm4;
  float gear_ratio4;
  float gear_min_rpm5;
  float gear_max_rpm5;
  float gear_ratio5;
  float gear_min_rpm6;
  float gear_max_rpm6;
  float gear_ratio6;
  float gear_min_rpm7;
  float gear_max_rpm7;
  float gear_ratio7;
  float gear_min_rpm8;
  float gear_max_rpm8;
  float gear_ratio8;
  float gear_min_rpm9;
  float gear_max_rpm9;
  float gear_ratio9;
  float antenna1SpringK;
  float antenna1Damp;
  float antenna1Length;
  float antenna1Gravity;
  float antenna2SpringK;
  float antenna2Damp;
  float antenna2Length;
  float antenna2Gravity;
  const char * csvInclude;
   float customFloat[3];
   float customFloat[3];
   int customBool[3];
   int customBool[3];

Latest revision as of 07:12, 24 December 2014

The vehicle asset was added on World at War and has been on every Call of Duty game since. The purpose of this asset is to declare vehicles, mostly used for killstreaks.

enum VehicleTypes : short
{
  VEH_WHEELS_4,
  VEH_MOTORCYCLE,
  VEH_TANK,
  VEH_PLANE,
  VEH_BOAT,
  VEH_ARTILLERY,
  VEH_HELICOPTER,
  NUM_VEHICLE_TYPES
};

enum EVehicleCameraMode : short
{
  VEH_MODE_FIRSTPERSON = 0x0,
  VEH_MODE_CHASECAM = 0x1,
  VEH_MODE_HLO = 0x2,
  VEH_MODE_STRAFE = 0x3,
  VEH_MODE_HORSE = 0x4,
  VEH_MODE_OLDTANK = 0x5,
  VEH_MODE_HOVER = 0x6,
  VEH_MODE_VTOL = 0x7,
  VEH_MODE_MAX = 0x8,
};

enum TractionType : int
{
  TRACTION_TYPE_FRONT = 0,
  TRACTION_TYPE_BACK = 1,
  TRACTION_TYPE_ALL_WD = 2,
  NUM_TRACTION_TYPES
};

struct view_limits_t
{
  float horizSpanLeft;
  float horizSpanRight;
  float vertSpanUp;
  float vertSpanDown;
  float horizResistLeft;
  float horizResistRight;
  float vertResistUp;
  float vertResistDown;
};

enum surfaceNames_t
{
  bark,
  brick,
  carpet,
  cloth,
  concrete,
  dirt,
  flesh,
  foliage,
  glass,
  grass,
  gravel,
  ice,
  metal,
  mud,
  paper,
  plaster,
  rock,
  sand,
  snow,
  water,
  wood,
  asphalt,
  ceramic,
  plastic,
  rubber,
  cushion,
  fruit,
  paintedmetal,
  player,
  tallgrass,
  riotshield,
  opaqueglass
};

struct DevGraph
{
  vec2_t *knots;
  int *knotCount;
  int knotCountMax;
  int selectedKnot;
  void (__cdecl *eventCallback)(DevGraph *, DevEventType, LocalClientNum_t);
  void (__cdecl *textCallback)(DevGraph *, const float, const float, char *, const int);
  void *data;
  bool disableEditingEndPoints;
};

//This is unused in the FF files, and acts as a sort of buffer in memory.
struct GraphFloat
{
  char name[64];
  vec2_t knots[32];
  int knotCount;
  float scale;
  DevGraph devguiGraph;
};

struct VehicleParameter
{
  float m_speed_max;
  float m_accel_max;
  float m_reverse_scale;
  float m_steer_angle_max;
  float m_steer_angle_speed_scale;
  float m_steer_speed;
  float m_wheel_radius;
  float m_susp_spring_k;
  float m_susp_damp_k;
  float m_susp_adj;
  float m_susp_hard_limit;
  float m_susp_min_height;
  float m_tire_fric_fwd;
  float m_tire_fric_side;
  float m_tire_fric_brake;
  float m_tire_fric_hand_brake;
  float m_body_mass;
  float m_roll_stability;
  float m_pitch_stability;
  float m_pitch_roll_resistance;
  float m_yaw_resistance;
  float m_upright_strength;
  float m_tilt_fakey;
  float m_peel_out_max_speed;
  float m_tire_damp_coast;
  float m_tire_damp_brake;
  float m_tire_damp_hand;
  float m_auto_hand_brake_min_speed;
  TractionType m_traction_type;
  const char *m_name;
  vec3_t m_bbox_min;
  vec3_t m_bbox_max;
  vec3_t m_mass_center_offset;
  vec3_t m_buoyancybox_min;
  vec3_t m_buoyancybox_max;
  float m_water_speed_max;
  float m_water_accel_max;
  float m_water_turn_accel;
  float m_water_turn_speed_max;
  float m_water_ebrake_power;
  vec3_t m_boat_motor_offset;
  float m_boat_speed_rise;
  float m_boat_speed_tilt;
  float m_boat_side_fric_scale;
  float m_boat_forward_fric_scale;
  float m_boat_vertical_fric_scale;
  float m_jump_force;
  float m_tire_fric_side_max;
  bool m_drive_on_walls;
  float m_linear_drag_scale;
  float m_angular_drag_scale;
};

struct VehicleDriveBySound
{
  int apex;
  const char *name;
  unsigned int alias;
};

struct VehicleEngineSound
{
  const char *name;
  unsigned int alias;
  float params[5];
};

struct VehicleGearData
{
  float minRPM;
  float maxRPM;
  float ratio;
};

struct VehicleEngine
{
  float idleRpms;
  float maxRpms;
  float maxTorque;
  float brakingCoeff;
  float onLoadFadeInStart;
  float onLoadFadeInEnd;
  float offLoadFadeOutStart;
  float offLoadFadeOutEnd;
  float loadScale;
  float loadSmoothing;
  float throttleLag;
  float pitchScale;
  VehicleEngineSound onload[5];
  VehicleEngineSound offload[5];
  int numGears;
  int loopLastGear;
  VehicleGearData gears[10];
};

struct VehicleAntenna
{
  float springK;
  float damp;
  float length;
  float gravity;
};

struct VehicleDef
{
  const char * name;
  VehicleTypes type;
  int remoteControl;
  int bulletDamage;
  int armorPiercingDamage;
  int grenadeDamage;
  int projectileDamage;
  int projectileSplashDamage;
  int heavyExplosiveDamage;
  EVehicleCameraMode cameraMode;
  int autoRecenterOnAccel;
  int thirdPersonDriver;
  int thirdPersonUseVehicleRoll;
  int thirdPersonCameraPitchVehicleRelative;
  int thirdPersonCameraHeightWorldRelative;
  float thirdPersonCameraRange;
  float thirdPersonCameraMinPitchClamp;
  float thirdPersonCameraMaxPitchClamp;
  float thirdPersonCameraHeight[2];
  float thirdPersonCameraPitch[2];
  int cameraAlwaysAutoCenter;
  float cameraAutoCenterLerpRate;
  float cameraAutoCenterMaxLerpRate;
  float thirdPersonCameraSpringDistance;
  float thirdPersonCameraSpringTime;
  float thirdPersonCameraHandbrakeTurnRateInc;
  float cameraFOV;
  float cameraRollFraction;
  vec3_t tagPlayerOffset;
  int killcamCollision;
  float killcamDist;
  float killcamZDist;
  float killcamMinDist;
  float killcamZTargetOffset;
  float killcamFOV;
  float killcamNearBlur;
  float killcamNearBlurStart;
  float killcamNearBlurEnd;
  float killcamFarBlur;
  float killcamFarBlurStart;
  float killcamFarBlurEnd;
  int isDrivable;
  int numberOfSeats;
  int numberOfGunners;
  int seatSwitchOrder[11];
  int driverControlledGunPos;
  float enterRadiusDriver;
  float enterRadiusGunner[4];
  float texureScrollScale;
  float wheelRotRate;
  float extraWheelRotScale;
  int wheelChildTakesSteerYaw;
  float maxSpeed;
  float maxSpeedVertical;
  float accel;
  float accelVertical;
  float rotRate;
  float rotAccel;
  float maxBodyPitch;
  float maxBodyRoll;
  float collisionDamage;
  float collisionSpeed;
  float suspensionTravel;
  float heliCollisionScalar;
  float viewPitchOffset;
  float viewInfluence;
  float tiltFromAccelerationPitch;
  float tiltFromAccelerationRoll;
  float tiltFromDecelerationPitch;
  float tiltFromDecelerationRoll;
  float tiltFromVelocityPitch;
  float tiltFromVelocityRoll;
  float tiltSpeedPitch;
  float tiltSpeedRoll;
  const char * turretWeapon;
  view_limits_t turretViewLimits;
  float turretRotRate;
  int turretClampPlayerView;
  int turretLockTurretToPlayerView;
  const char * gunnerWeapon[4];
  unsigned __int16 gunnerWeaponIndex[4];
  float gunnerRotRate;
  vec2_t gunnerRestAngles[4];
  view_limits_t passengerViewLimits[6];
  const char * turretSpinSndName;
  const char * turretStopSndName;
  unsigned int turretSpinSndIndex;
  unsigned int turretStopSndIndex;
  const char * wheelRoadNoiseSnd;
  const char * wheelSlidingSnd;
  const char * wheelPeelingOutSnd;
  float skidSpeedMin;
  float skidSpeedMax;
  const char *futzName;
  float futzBlend;
  int animType;
  const char *animSet;
  int scriptedAnimationEntry;
  float mantleAngleFront;
  float mantleAngleBack;
  float mantleAngleLeft;
  float mantleAngleRight;
  ScriptString extraWheelLeft1;
  ScriptString extraWheelRight1;
  ScriptString extraWheelLeft2;
  ScriptString extraWheelRight2;
  ScriptString driverHideTag;
  XModel * attachmentModels[4];
  ScriptString attachmentTags[4];
  XModel * deathAttachmentModels[4];
  ScriptString deathAttachmentTags[4];
  float tracerOffsetForward;
  float tracerOffsetUp;
  XModel * model;
  XModel * viewModel;
  XModel * deathModel;
  XModel * enemyModel;
  float modelSwapDelay;
  FxEffectDef * exhaustFx;
  int oneExhaust;
  FxEffectDef *treadFx[32]; //See surfaceNames_t for the names of these.
  FxEffectDef *deathFx;
  ScriptString deathFxTag;
  const char * deathFxSound;
  FxEffectDef * lightFxName[4];
  ScriptString lightFxTag[4];
  FxEffectDef * friendlyLightFx;
  ScriptString friendlyLightFxTag;
  FxEffectDef * enemyLightFx;
  ScriptString enemyLightFxTag;
  float radiusDamageMin;
  float radiusDamageMax;
  float radiusDamageRadius;
  const char *shootShock;
  const char *shootRumble;
  float deathQuakeScale;
  float deathQuakeDuration;
  float deathQuakeRadius;
  const char *rumbleType;
  float rumbleScale;
  float rumbleDuration;
  float rumbleRadius;
  float rumbleBaseTime;
  float rumbleAdditionalTime;
  int healthDefault;
  int healthMin;
  int healthMax;
  int eTeam;
  int boostAccelMultiplier;
  float boostDuration;
  float boostSpeedIncrease;
  int addToCompass;
  int addToCompassEnemy;
  const char *compassIcon;
  Material *compassIconMaterial;
  const char *gasButtonName;
  int gasButton;
  const char *reverseBrakeButtonName;
  int reverseBrakeButton;
  const char *handBrakeButtonName;
  int handBrakeButton;
  const char *attackButtonName;
  int attackButton;
  const char *attackSecondaryButtonName;
  int attackSecondaryButton;
  const char *boostButtonName;
  int boostButton;
  const char *moveUpButtonName;
  int moveUpButton;
  const char *moveDownButtonName;
  int moveDownButton;
  const char *switchSeatButtonName;
  int switchSeatButton;
  const char *steerGraphName;
  GraphFloat *steerGraph;
  const char *accelGraphName;
  GraphFloat *accelGraph;
  int isNitrous;
  int isFourWheelSteering;
  int useCollmap;
  float radius;
  float minHeight;
  float maxHeight;
  float max_fric_tilt_angle;
  float max_fric_tilt;
  int noDirectionalDamage;
  int fakeBodyStabilizer;
  float vehHelicopterBoundsRadius;
  float vehHelicopterDecelerationFwd;
  float vehHelicopterDecelerationSide;
  float vehHelicopterDecelerationUp;
  float vehHelicopterTiltFromControllerAxes;
  float vehHelicopterTiltFromFwdAndYaw;
  float vehHelicopterTiltFromFwdAndYaw_VelAtMaxTilt;
  float vehHelicopterTiltMomentum;
  int vehHelicopterQuadRotor;
  int vehHelicopterAccelTwardsView;
  float maxRotorArmMovementAngle;
  float maxRotorArmRotationAngle;
  int vehHelicopterMaintainHeight;
  int vehHelicopterMaintainMaxHeight;
  float vehHelicopterMaintainHeightLimit;
  float vehHelicopterMaintainHeightAccel;
  float vehHelicopterMaintainHeightMinimum;
  float vehHelicopterMaintainHeightMaximum;
  float vehHelicopterMaintainCeilingMinimum;
  int joltVehicle;
  int joltVehicleDriver;
  float joltMaxTime;
  float joltTime;
  float joltWaves;
  float joltIntensity;
  VehicleParameter nitrousVehParams;
  float p_driveby_sound_radius;
  float s_driveby_sound_radius;
  VehicleDriveBySound p[20];
  VehicleDriveBySound s[20];
  int doFootSteps;
  int isSentient;
  VehicleEngine engine;
  VehicleAntenna antenna[2];
  char *csvInclude;
  float customFloat[3];
  int customBool[3];
};

Source Format

The vehicle source files are raw text files with no extension, located at "raw/vehicles/". They use the same format as many other assets, with each setting name and value separated by a back-slash. The first setting identifies the file, and for vehicles the identifier string is "VEHICLEFILE".