Vehicle Asset (BO2)
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 VehicleType : short
{
four_wheel = 0,
motorcycle = 1,
tank = 2,
plane = 3,
boat = 4,
artillery = 5,
helicopter = 6,
VEHTYPE_MAX
};
enum CameraMode : short
{
first = 0,
chase = 1,
view = 2,
strafe = 3,
horse = 4,
oldtank = 5,
hover = 6,
vtol = 7
};
enum TractionType : int
{
TRACTION_TYPE_FRONT = 0,
TRACTION_TYPE_BACK = 1,
TRACTION_TYPE_ALL_WD = 2,
TRACTION_TYPE_MAX
};
struct PassengerSpans
{
float horizSpanLeft;
float horizSpanRight;
float vertSpanUp;
float vertSpanDown;
};
struct unknownVehicleInternal1
{
int drive_by_sound_apex;
char * drive_by_sound_name;
int unknown;
};
struct Vehicle
{
const char * name;
VehicleType type;
int remoteControl;
int bulletDamage;
int armorPiercingDamage;
int grenadeDamage;
int projectileDamage;
int projectileSplashDamage;
int heavyExplosiveDamage;
CameraMode cameraMode;
int autoRecenterOnAccel;
int thirdPersonDriver;
int thirdPersonUseVehicleRoll;
int thirdPersonCameraPitchVehicleRelative;
int thirdPersonCameraHeightWorldRelative;
float thirdPersonCameraRange;
float thirdPersonCameraMinPitchClamp;
float thirdPersonCameraMaxPitchClamp;
float thirdPersonCameraHeightMin;
float thirdPersonCameraHeight;
float thirdPersonCameraPitchMin;
float thirdPersonCameraPitch;
int cameraAlwaysAutoCenter;
float cameraAutoCenterLerpRate;
float cameraAutoCenterMaxLerpRate;
float thirdPersonCameraSpringDistance;
float thirdPersonCameraSpringTime;
float thirdPersonCameraHandbrakeTurnRateInc;
float cameraFOV;
float cameraRollFraction;
float tagPlayerOffset[3];
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;
float turretHorizSpanLeft;
float turretHorizSpanRight;
float turretVertSpanUp;
float turretVertSpanDown;
float turretHorizResistLeft;
float turretHorizResistRight;
float turretVertResistUp;
float turretVertResistDown;
float turretRotRate;
int turretClampPlayerView;
int turretLockTurretToPlayerView;
const char * gunnerWeapon[4];
int unknown1[2];
float gunnerRotRate;
char unknown2[0x20];
PassengerSpans passenger1;
char unknown3[0x10];
PassengerSpans passenger2;
char unknown4[0x10];
PassengerSpans passenger3;
char unknown5[0x10];
PassengerSpans passenger4;
char unknown6[0x10];
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 skidSpeedMax;
char * futzSnd;
float futzBlend;
int animType;
char * animSet;
int scriptedAnimationEntry;
float mantleAngleFront;
float mantleAngleBack;
float mantleAngleLeft;
float mantleAngleRight;
ScriptString extraWheelLeft1;
ScriptString extraWheelRight1;
ScriptString extraWheelLeft2;
ScriptString extraWheelRight2;
ScriptString driverHideTag1;
XModel * mod[4];
ScriptString tag[4];
XModel * dmod[4];
ScriptString dtag[4];
float tracerOffsetForward;
float tracerOffsetUp;
XModel * worldModel;
XModel * viewModel;
XModel * deathModel;
XModel * enemyModel;
float modelSwapDelay;
FxEffectDef * exhaustFx;
int oneExhaust;
FxEffectDef * treadFxDefault;
FxEffectDef * treadFxBark;
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;
char * deathFxSound;
FxEffectDef * lightFxName[4];
ScriptString lightFxTag[4];
FxEffectDef * FriendlyLightFxName;
ScriptString FriendlyLightFxTag;
FxEffectDef * EnemyLightFxName;
ScriptString EnemyLightFxTag;
float radiusDamageMin;
float radiusDamageMax;
float radiusDamageRadius;
char * shootShock;
char * shootRumble;
float deathQuakeScale;
float deathQuakeDuration;
float deathQuakeRadius;
char * rumbleType;
float rumbleScale;
float rumbleDuration;
float rumbleRadius;
float rumbleBaseTime;
float rumbleAdditionalTime;
int healthDefault;
int healthMin;
int healthMax;
int team;
int boostAccelMultiplier;
float boostDuration;
float boostSpeedIncrease;
int addToCompass;
int addToCompassEnemy;
char * compassIcon;
int unknown11;
char * gasButton;
int gasButtonIndex;
char * reverseBrakeButton;
int reverseBrakeButtonIndex;
char * handBrakeButton;
int handBrakeButtonIndex;
char * attackButton;
int attackButtonIndex;
char * attackSecondaryButton;
int attackSecondaryButtonIndex;
char * boostButton;
int boostButtonIndex;
char * moveUpButton;
int moveUpButtonIndex;
char * moveDownButton;
int moveDownButtonIndex;
char * switchSeatsButton;
int switchSeatsButtonIndex;
char * steerGraph;
int unknown12;
char * accelGraph;
int unknown13;
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;
int maxSpeed2; //For some reason, there are 2 of these defined and they are always equal.
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 s_driveby_sound_radius;
unknownVehicleInternal1 p[20];
unknownVehicleInternal1 s[20];
int doFootSteps;
int isSentient;
float idleRpms;
float maxRpms;
float maxTorque;
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];
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".