Files
GTASource/game/modelinfo/VehicleModelInfoMods.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

532 lines
15 KiB
C++

//
// VehicleModelInfoMods.h
// Data file for vehicle mod settings
//
// Rockstar Games (c) 2013
#ifndef INC_VEHICLE_MODELINFO_MODS_H_
#define INC_VEHICLE_MODELINFO_MODS_H_
#include "atl/array.h"
#include "atl/hashstring.h"
#include "data/base.h"
#include "parser/macros.h"
#include "renderer/color.h"
#include "renderer/HierarchyIds.h"
#include "streaming/streamingdefs.h"
//#include "system/noncopyable.h"
//#include "modelinfo/VehicleModelInfoColors.h"
//#include "modelinfo/VehicleModelInfoPlates.h"
//#include "modelinfo/VehicleModelInfoLights.h"
//#include "modelinfo/VehicleModelInfoSirens.h"
#include "modelinfo/VehicleModelInfoEnums.h"
class CVehicleStreamRenderGfx;
class CCustomShaderEffectVehicleType;
#define INVALID_MOD ((u8)-1)
//#define INVALID_KIT ((u16)-1) // Ambiguous, please use either INVALID_VEHICLE_KIT_INDEX or INVALID_VEHICLE_KIT_ID instead
#define INVALID_KIT_U8 ((u8)-1) // ...unless for save / replay compatibility, then use this one.
class CVehicleModColor
{
public:
ConstString name;
u8 col;
u8 spec;
PAR_SIMPLE_PARSABLE;
};
class CVehicleModPearlescentColors
{
public:
atArray<CVehicleModColor> m_baseCols;
atArray<CVehicleModColor> m_specCols;
PAR_SIMPLE_PARSABLE;
};
class CVehicleModColors
{
public:
atArray<CVehicleModColor> m_metallic;
atArray<CVehicleModColor> m_classic;
atArray<CVehicleModColor> m_matte;
atArray<CVehicleModColor> m_metals;
atArray<CVehicleModColor> m_chrome;
CVehicleModPearlescentColors m_pearlescent;
PAR_SIMPLE_PARSABLE;
};
class CVehicleModColorsGen9
{
public:
atArray<CVehicleModColor> m_chameleon;
PAR_SIMPLE_PARSABLE;
};
// describes a single renderable vehicle mod
class CVehicleModVisible
{
friend class CVehicleStreamRenderGfx;
public:
// enum to map bone vehicle bones names to bone ids. only the ones likely to be used for mods are exposed.
// can add new ones here if needed
enum eVehicleModBone
{
none = -1,
chassis = VEH_CHASSIS,
bodyshell = VEH_BODYSHELL,
bumper_f = VEH_BUMPER_F,
bumper_r = VEH_BUMPER_R,
wing_rf = VEH_WING_RF,
wing_lf = VEH_WING_LF,
bonnet = VEH_BONNET,
boot = VEH_BOOT,
exhaust = VEH_EXHAUST,
exhaust_2 = VEH_EXHAUST_2,
exhaust_3 = VEH_EXHAUST_3,
exhaust_4 = VEH_EXHAUST_4,
exhaust_5 = VEH_EXHAUST_5,
exhaust_6 = VEH_EXHAUST_6,
exhaust_7 = VEH_EXHAUST_7,
exhaust_8 = VEH_EXHAUST_8,
exhaust_9 = VEH_EXHAUST_9,
exhaust_10 = VEH_EXHAUST_10,
exhaust_11 = VEH_EXHAUST_11,
exhaust_12 = VEH_EXHAUST_12,
exhaust_13 = VEH_EXHAUST_13,
exhaust_14 = VEH_EXHAUST_14,
exhaust_15 = VEH_EXHAUST_15,
exhaust_16 = VEH_EXHAUST_16,
extra_1 = VEH_EXTRA_1,
extra_2 = VEH_EXTRA_2,
extra_3 = VEH_EXTRA_3,
extra_4 = VEH_EXTRA_4,
extra_5 = VEH_EXTRA_5,
extra_6 = VEH_EXTRA_6,
extra_7 = VEH_EXTRA_7,
extra_8 = VEH_EXTRA_8,
extra_9 = VEH_EXTRA_9,
extra_10 = VEH_EXTRA_10,
extra_11 = VEH_EXTRA_11,
extra_12 = VEH_EXTRA_12,
break_extra_1 = VEH_BREAKABLE_EXTRA_1,
break_extra_2 = VEH_BREAKABLE_EXTRA_2,
break_extra_3 = VEH_BREAKABLE_EXTRA_3,
break_extra_4 = VEH_BREAKABLE_EXTRA_4,
break_extra_5 = VEH_BREAKABLE_EXTRA_5,
break_extra_6 = VEH_BREAKABLE_EXTRA_6,
break_extra_7 = VEH_BREAKABLE_EXTRA_7,
break_extra_8 = VEH_BREAKABLE_EXTRA_8,
break_extra_9 = VEH_BREAKABLE_EXTRA_9,
break_extra_10 = VEH_BREAKABLE_EXTRA_10,
mod_col_1 = VEH_MOD_COLLISION_1,
mod_col_2 = VEH_MOD_COLLISION_2,
mod_col_3 = VEH_MOD_COLLISION_3,
mod_col_4 = VEH_MOD_COLLISION_4,
mod_col_5 = VEH_MOD_COLLISION_5,
mod_col_6 = VEH_MOD_COLLISION_6,
mod_col_7 = VEH_MOD_COLLISION_7,
mod_col_8 = VEH_MOD_COLLISION_8,
mod_col_9 = VEH_MOD_COLLISION_9,
mod_col_10 = VEH_MOD_COLLISION_10,
mod_col_11 = VEH_MOD_COLLISION_11,
mod_col_12 = VEH_MOD_COLLISION_12,
mod_col_13 = VEH_MOD_COLLISION_13,
mod_col_14 = VEH_MOD_COLLISION_14,
mod_col_15 = VEH_MOD_COLLISION_15,
mod_col_16 = VEH_MOD_COLLISION_16,
misc_a = VEH_MISC_A,
misc_b = VEH_MISC_B,
misc_c = VEH_MISC_C,
misc_d = VEH_MISC_D,
misc_e = VEH_MISC_E,
misc_f = VEH_MISC_F,
misc_g = VEH_MISC_G,
misc_h = VEH_MISC_H,
misc_i = VEH_MISC_I,
misc_j = VEH_MISC_J,
misc_k = VEH_MISC_K,
misc_l = VEH_MISC_L,
misc_m = VEH_MISC_M,
misc_n = VEH_MISC_N,
misc_o = VEH_MISC_O,
misc_p = VEH_MISC_P,
misc_q = VEH_MISC_Q,
misc_r = VEH_MISC_R,
misc_s = VEH_MISC_S,
misc_t = VEH_MISC_T,
misc_u = VEH_MISC_U,
misc_v = VEH_MISC_V,
misc_w = VEH_MISC_W,
misc_x = VEH_MISC_X,
misc_y = VEH_MISC_Y,
misc_z = VEH_MISC_Z,
misc_1 = VEH_MISC_1,
misc_2 = VEH_MISC_2,
handlebars = VEH_STEERING_WHEEL,
swingarm = VEH_TRANSMISSION_R,
forks_u = VEH_SUSPENSION_LF,
forks_l = VEH_SUSPENSION_RF,
headlight_l = VEH_HEADLIGHT_L,
headlight_r = VEH_HEADLIGHT_R,
indicator_lr = VEH_INDICATOR_LR,
indicator_lf = VEH_INDICATOR_LF,
indicator_rr = VEH_INDICATOR_RR,
indicator_rf = VEH_INDICATOR_RF,
taillight_l = VEH_TAILLIGHT_L,
taillight_r = VEH_TAILLIGHT_R,
window_lf = VEH_WINDOW_LF,
window_rf = VEH_WINDOW_RF,
window_rr = VEH_WINDOW_RR,
window_lr = VEH_WINDOW_LR,
window_lm = VEH_WINDOW_LM,
window_rm = VEH_WINDOW_RM,
hub_lf = VEH_WHEELHUB_LF,
hub_rf = VEH_WHEELHUB_RF,
windscreen_r = VEH_WINDSCREEN_R,
turret_1 = VEH_TURRET_1_MOD,
turret_2 = VEH_TURRET_2_MOD,
turret_3 = VEH_TURRET_3_MOD,
turret_4 = VEH_TURRET_4_MOD,
mod_a = VEH_MOD_A,
mod_b = VEH_MOD_B,
mod_c = VEH_MOD_C,
mod_d = VEH_MOD_D,
mod_e = VEH_MOD_E,
mod_f = VEH_MOD_F,
mod_g = VEH_MOD_G,
mod_h = VEH_MOD_H,
mod_i = VEH_MOD_I,
mod_j = VEH_MOD_J,
mod_k = VEH_MOD_K,
mod_l = VEH_MOD_L,
mod_m = VEH_MOD_M,
mod_n = VEH_MOD_N,
mod_o = VEH_MOD_O,
mod_p = VEH_MOD_P,
mod_q = VEH_MOD_Q,
mod_r = VEH_MOD_R,
mod_s = VEH_MOD_S,
mod_t = VEH_MOD_T,
mod_u = VEH_MOD_U,
mod_v = VEH_MOD_V,
mod_w = VEH_MOD_W,
mod_x = VEH_MOD_X,
mod_y = VEH_MOD_Y,
mod_z = VEH_MOD_Z,
mod_aa = VEH_MOD_AA,
mod_ab = VEH_MOD_AB,
mod_ac = VEH_MOD_AC,
mod_ad = VEH_MOD_AD,
mod_ae = VEH_MOD_AE,
mod_af = VEH_MOD_AF,
mod_ag = VEH_MOD_AG,
mod_ah = VEH_MOD_AH,
mod_ai = VEH_MOD_AI,
mod_aj = VEH_MOD_AJ,
mod_ak = VEH_MOD_AK,
turret_a1 = VEH_TURRET_A1_MOD,
turret_a2 = VEH_TURRET_A2_MOD,
turret_a3 = VEH_TURRET_A3_MOD,
turret_a4 = VEH_TURRET_A4_MOD,
turret_b1 = VEH_TURRET_B1_MOD,
turret_b2 = VEH_TURRET_B2_MOD,
turret_b3 = VEH_TURRET_B3_MOD,
turret_b4 = VEH_TURRET_B4_MOD,
// Extra arena mode bones
rblade_1mod = VEH_BLADE_R_1_MOD,
rblade_1fast = VEH_BLADE_R_1_FAST,
rblade_2mod = VEH_BLADE_R_2_MOD,
rblade_2fast = VEH_BLADE_R_2_FAST,
rblade_3mod = VEH_BLADE_R_3_MOD,
rblade_3fast = VEH_BLADE_R_3_FAST,
fblade_1mod = VEH_BLADE_F_1_MOD,
fblade_1fast = VEH_BLADE_F_1_FAST,
fblade_2mod = VEH_BLADE_F_2_MOD,
fblade_2fast = VEH_BLADE_F_2_FAST,
fblade_3mod = VEH_BLADE_F_3_MOD,
fblade_3fast = VEH_BLADE_F_3_FAST,
sblade_1mod = VEH_BLADE_S_1_MOD,
sblade_l_1fast = VEH_BLADE_S_1_L_FAST,
sblade_r_1fast = VEH_BLADE_S_1_R_FAST,
sblade_2mod = VEH_BLADE_S_2_MOD,
sblade_l_2fast = VEH_BLADE_S_2_L_FAST,
sblade_r_2fast = VEH_BLADE_S_2_R_FAST,
sblade_3mod = VEH_BLADE_S_3_MOD,
sblade_l_3fast = VEH_BLADE_S_3_L_FAST,
sblade_r_3fast = VEH_BLADE_S_3_R_FAST,
spike_1mod = VEH_SPIKE_1_MOD,
spike_1ped_col = VEH_SPIKE_1_PED,
spike_1car_col = VEH_SPIKE_1_CAR,
spike_2mod = VEH_SPIKE_2_MOD,
spike_2ped_col = VEH_SPIKE_2_PED,
spike_2car_col = VEH_SPIKE_2_CAR,
spike_3mod = VEH_SPIKE_3_MOD,
spike_3ped_col = VEH_SPIKE_3_PED,
spike_3car_col = VEH_SPIKE_3_CAR,
scoop_1mod = VEH_SCOOP_1_MOD,
scoop_2mod = VEH_SCOOP_2_MOD,
scoop_3mod = VEH_SCOOP_3_MOD,
miscwobble_1 = VEH_BOBBLE_MISC_1,
miscwobble_2 = VEH_BOBBLE_MISC_2,
miscwobble_3 = VEH_BOBBLE_MISC_3,
miscwobble_4 = VEH_BOBBLE_MISC_4,
miscwobble_5 = VEH_BOBBLE_MISC_5,
miscwobble_6 = VEH_BOBBLE_MISC_6,
miscwobble_7 = VEH_BOBBLE_MISC_7,
miscwobble_8 = VEH_BOBBLE_MISC_8,
supercharger_1 = VEH_SUPERCHARGER_1,
supercharger_2 = VEH_SUPERCHARGER_2,
supercharger_3 = VEH_SUPERCHARGER_3,
reversinglight_l = VEH_REVERSINGLIGHT_L,
reversinglight_r = VEH_REVERSINGLIGHT_R,
};
CVehicleModVisible() : m_type(VMT_SPOILER), m_bone(chassis), m_collisionBone(none), m_weight(0), m_turnOffExtra(false), m_disableBonnetCamera(false), m_allowBonnetSlide(true), m_weaponSlot(-1), m_weaponSlotSecondary(-1), m_disableProjectileDriveby(false), m_disableDriveby(false), m_disableDrivebySeat(-1), m_VariationFragIdx(-1), m_VariationFragCseType(NULL) {}
~CVehicleModVisible() {}
u32 GetNameHash() const { return m_modelName.GetHash(); }
atHashString GetNameHashString() const { return m_modelName; }
u32 GetNumLinkedModels() const { return m_linkedModels.GetCount(); }
u32 GetLinkedModelHash(u32 model ) const { return m_linkedModels[model].GetHash(); }
atHashString GetLinkedModelHashString(u32 model ) const { return m_linkedModels[model]; }
eVehicleModType GetType() const { return m_type; }
eVehicleModBone GetBone() const { return m_bone; }
eVehicleModBone GetCollisionBone() const { return m_collisionBone; }
u32 GetNumBonesToTurnOff() const { return m_turnOffBones.GetCount(); }
eVehicleModBone GetBoneToTurnOff(u32 index) const { return m_turnOffBones[index]; }
eVehicleModCameraPos GetCameraPos() const { return m_cameraPos; }
u8 GetWeightModifier() const { return m_weight; }
bool GetTurnOffExtra() const { return m_turnOffExtra; }
bool IsBonnetCameraDisabled() const { return m_disableBonnetCamera; }
bool AllowBonnetSlide() const { return m_allowBonnetSlide; }
s8 GetWeaponSlot() const { return m_weaponSlot; }
s8 GetWeaponSlotSecondary() const { return m_weaponSlotSecondary; }
bool IsProjectileDriveByDisabled() const { return m_disableProjectileDriveby; }
bool IsDriveByDisabled() const { return m_disableDriveby; }
s32 GetDrivebyDisabledSeat() const { return m_disableDrivebySeat; }
s32 GetDrivebyDisabledSeatSecondary() const { return m_disableDrivebySeatSecondary; }
const char* GetModShopLabel() const { return m_modShopLabel.c_str(); }
float GetAudioApply() const { return m_audioApply; }
private:
// CVehicleModelInfoVariation:
strLocalIndex m_VariationFragIdx;
CCustomShaderEffectVehicleType* m_VariationFragCseType;
private:
void PostLoad();
atHashString m_modelName;
ConstString m_modShopLabel;
atArray<atHashString> m_linkedModels;
eVehicleModType m_type;
eVehicleModBone m_bone;
eVehicleModBone m_collisionBone;
atArray<eVehicleModBone> m_turnOffBones;
eVehicleModCameraPos m_cameraPos;
float m_audioApply;
u8 m_weight;
bool m_turnOffExtra;
bool m_disableBonnetCamera;
bool m_allowBonnetSlide;
s8 m_weaponSlot;
s8 m_weaponSlotSecondary;
bool m_disableProjectileDriveby;
bool m_disableDriveby;
s32 m_disableDrivebySeat;
s32 m_disableDrivebySeatSecondary;
PAR_SIMPLE_PARSABLE;
};
// a linked renderable mod that cannot be selected by its own
class CVehicleModLink
{
friend class CVehicleStreamRenderGfx;
public:
CVehicleModLink() : m_bone(CVehicleModVisible::chassis), m_turnOffExtra(false), m_VariationFragIdx(-1), m_VariationFragCseType(NULL) {}
~CVehicleModLink() {}
u32 GetNameHash() const { return m_modelName.GetHash(); }
atHashString GetNameHashString() const { return m_modelName; }
CVehicleModVisible::eVehicleModBone GetBone() const { return m_bone; }
bool GetTurnOffExtra() const { return m_turnOffExtra; }
private:
// CVehicleModelInfoVariation:
strLocalIndex m_VariationFragIdx;
CCustomShaderEffectVehicleType* m_VariationFragCseType;
private:
atHashString m_modelName;
CVehicleModVisible::eVehicleModBone m_bone;
bool m_turnOffExtra;
PAR_SIMPLE_PARSABLE;
};
// describes a single stats vehicle mod. it doesn't have a drawable only stat modifiers
class CVehicleModStat
{
public:
CVehicleModStat() {}
~CVehicleModStat() {}
u32 GetModifier() const { return m_modifier; }
u8 GetWeightModifier() const { return m_weight; }
eVehicleModType GetType() const { return m_type; }
float GetAudioApply() const { return m_audioApply; }
u32 GetIdentifierHash() const { return m_identifier.GetHash(); }
atHashString GetIdentifierString() const { return m_identifier; }
private:
atHashString m_identifier;
eVehicleModType m_type;
u32 m_modifier;
float m_audioApply;
u8 m_weight;
PAR_SIMPLE_PARSABLE;
};
enum eModKitType
{
MKT_STANDARD = 0,
MKT_SPORT,
MKT_SUV,
MKT_SPECIAL,
MKT_MAX
};
typedef u16 VehicleKitId;
enum { INVALID_VEHICLE_KIT_ID = 0xFFFF };
enum { INVALID_VEHICLE_KIT_INDEX = 0xFFFF };
// describes a single vehicle mod kit
class CVehicleKit
{
public:
struct sSlotNameOverride
{
eVehicleModType slot;
ConstString name;
PAR_SIMPLE_PARSABLE;
};
CVehicleKit() : m_id(INVALID_VEHICLE_KIT_ID) {}
~CVehicleKit() {}
u32 GetNameHash() const { return m_kitName.GetHash(); }
VehicleKitId GetId() const { return m_id; }
void SetId(VehicleKitId id) { m_id = id; }
atHashString GetNameHashString() const { return m_kitName; }
eModKitType GetType() const { return m_kitType; }
const atArray<CVehicleModVisible>& GetVisibleMods() const { return m_visibleMods; }
const atArray<CVehicleModLink>& GetLinkMods() const { return m_linkMods; }
const atArray<CVehicleModStat>& GetStatMods() const { return m_statMods; }
const CVehicleModLink* FindLinkMod(u32 nameHash, u8& index) const;
const char* GetModSlotName(eVehicleModType slot) const;
const char* GetLiveryName(u32 livery) const;
const char* GetLivery2Name(u32 livery2) const;
private:
atHashString m_kitName;
VehicleKitId m_id;
eModKitType m_kitType;
atArray<CVehicleModVisible> m_visibleMods;
atArray<CVehicleModLink> m_linkMods;
atArray<CVehicleModStat> m_statMods;
atArray<sSlotNameOverride> m_slotNames;
atArray<ConstString> m_liveryNames;
atArray<ConstString> m_livery2Names;
PAR_SIMPLE_PARSABLE;
};
typedef u32 vehicleWheelId;
enum { INVALID_VEHICLE_WHEEL_ID = 0xFFFFFFFF };
// describes a single vehicle wheel
class CVehicleWheel
{
friend class CVehicleStreamRenderGfx;
public:
CVehicleWheel() : m_VariationDrawableIdx(-1), m_VariationDrawableCseType(NULL), m_VariationDrawableVarIdx(-1), m_VariationDrawableVarCseType(NULL) {}
~CVehicleWheel() {}
u32 GetNameHash() const { return m_wheelName.GetHash(); }
atHashString GetNameHashString() const { return m_wheelName; }
bool HasVariation() const { return m_wheelVariation.GetHash() != 0; }
u32 GetVariationHash() const { return m_wheelVariation.GetHash(); }
atHashString GetVariationHashString() const { return m_wheelVariation; }
float GetRimRadius() const { return m_rimRadius; }
bool IsRearWheel() const { return m_rear; }
const char* GetModShopLabel() const { return m_modShopLabel.c_str(); }
inline vehicleWheelId GetId() const { return GetNameHash(); }
private:
// CVehicleModelInfoVariation:
s32 m_VariationDrawableIdx;
CCustomShaderEffectVehicleType* m_VariationDrawableCseType;
s32 m_VariationDrawableVarIdx;
CCustomShaderEffectVehicleType* m_VariationDrawableVarCseType;
private:
atHashString m_wheelName;
atHashString m_wheelVariation;
ConstString m_modShopLabel;
float m_rimRadius;
bool m_rear;
PAR_SIMPLE_PARSABLE;
};
#endif // INC_VEHICLE_MODELINFO_MODS_H_