Last active
November 13, 2017 21:51
-
-
Save camden-smallwood-zz/94b308ce31a2709f82fa958605108d5e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include "Blam\Math\Bounds.hpp" | |
#include "Blam\Math\RealColorRGB.hpp" | |
#include "Blam\Math\RealEulerAngles3D.hpp" | |
#include "Blam\Math\RealPoint3D.hpp" | |
#include "Blam\Tags\TagBlock.hpp" | |
#include "Blam\Tags\TagData.hpp" | |
#include "Blam\Tags\TagReference.hpp" | |
#include "Blam\Text\StringID.hpp" | |
namespace Blam::Objects | |
{ | |
struct ObjectDefinition | |
{ | |
enum class ObjectTypeValue : short; | |
enum class ObjectFlagBits : unsigned short; | |
enum class LightmapShadowModeValue : short; | |
enum class MultipleAirprobeModeValue : char; | |
enum class SweetenerSizeValue : char; | |
enum class WaterDensityValue : char; | |
struct EarlyMoverProperty; | |
struct AiProperty; | |
struct Function; | |
struct Attachment; | |
struct ChangeColor; | |
struct NodeMap; | |
struct MultiplayerProperty; | |
struct ModelDatum; | |
ObjectDefinition::ObjectTypeValue ObjectType : 16; | |
ObjectDefinition::ObjectFlagBits ObjectFlags : 16; | |
float BoundingRadius; | |
Math::RealPoint3D BoundingOffset; | |
float AccelerationScale; | |
ObjectDefinition::LightmapShadowModeValue LightmapShadowMode : 16; | |
ObjectDefinition::SweetenerSizeValue SweetenerSize : 8; | |
ObjectDefinition::WaterDensityValue WaterDensity : 8; | |
long RuntimeFlags; | |
float DynamicLightSphereRadius; | |
Math::RealPoint3D DynamicLightSphereOffset; | |
Text::StringID DefaultModelVariant; | |
Tags::TagReference Model; | |
Tags::TagReference CrateObject; | |
Tags::TagReference CollisionDamage; | |
Tags::TagBlock<ObjectDefinition::EarlyMoverProperty> EarlyMoverProperties; | |
Tags::TagReference CreationEffect; | |
Tags::TagReference MaterialEffects; | |
Tags::TagReference ArmorSounds; | |
Tags::TagReference MeleeImpact; | |
Tags::TagBlock<ObjectDefinition::AiProperty> AiProperties; | |
Tags::TagBlock<ObjectDefinition::Function> Functions; | |
short HudTextMessageIndex; | |
short : 16; | |
Tags::TagBlock<ObjectDefinition::Attachment> Attachments; | |
Tags::TagBlock<Tags::TagReference> Widgets; | |
Tags::TagBlock<ObjectDefinition::ChangeColor> ChangeColors; | |
Tags::TagBlock<ObjectDefinition::NodeMap> NodeMaps; | |
Tags::TagBlock<ObjectDefinition::MultiplayerProperty> MultiplayerProperties; | |
Tags::TagBlock<Tags::TagReference> RevivingEquipment; | |
Tags::TagBlock<ObjectDefinition::ModelDatum> ModelData; | |
enum class ObjectDefinition::ObjectTypeValue : short | |
{ | |
None = -1, | |
Biped, | |
Vehicle, | |
Weapon, | |
Equipment, | |
AlternateRealityDevice, | |
Terminal, | |
Projectile, | |
Scenery, | |
Machine, | |
Control, | |
SoundScenery, | |
Crate, | |
Creature, | |
Giant, | |
EffectScenery | |
}; | |
static_assert(sizeof(ObjectDefinition::ObjectTypeValue) == 0x2, | |
"Blam::Objects::ObjectDefinition::ObjectTypeValue"); | |
enum class ObjectDefinition::ObjectFlagBits : unsigned short | |
{ | |
None = 0, | |
DoesNotCastShadow = 1 << 0, | |
SearchCardinalDirectionMaps = 1 << 1, | |
Bit2 = 1 << 2, | |
NotAPathfindingObstacle = 1 << 3, | |
ExtensionOfParent = 1 << 4, | |
DoesNotCauseCollisionDamage = 1 << 5, | |
EarlyMover = 1 << 6, | |
EarlyMoverLocalizedPhysics = 1 << 7, | |
UseStaticMassiveLightmapSample = 1 << 8, | |
ObjectScalesAttachments = 1 << 9, | |
InheritsPlayersAppearance = 1 << 10, | |
DeadBipedsCantLocalize = 1 << 11, | |
AttachToClustersByDynamicSphere = 1 << 12, | |
EffectsDoNotSpawnObjectsInMultiplayer = 1 << 13, | |
Bit14 = 1 << 14, | |
Bit15 = 1 << 15 | |
}; | |
static_assert(sizeof(ObjectDefinition::ObjectFlagBits) == 0x2, | |
"Blam::Objects::ObjectDefinition::ObjectFlagBits"); | |
enum class ObjectDefinition::LightmapShadowModeValue : short | |
{ | |
Default, | |
Never, | |
Always, | |
Blur | |
}; | |
static_assert(sizeof(ObjectDefinition::LightmapShadowModeValue) == 0x2, | |
"Blam::Objects::ObjectDefinition::LightmapShadowModeValue"); | |
enum class ObjectDefinition::MultipleAirprobeModeValue : char | |
{ | |
Default, | |
Always | |
}; | |
static_assert(sizeof(ObjectDefinition::MultipleAirprobeModeValue) == 0x1, | |
"Blam::Objects::ObjectDefinition::MultipleAirprobeModeValue"); | |
enum class ObjectDefinition::SweetenerSizeValue : char | |
{ | |
Small, | |
Medium, | |
Large | |
}; | |
static_assert(sizeof(ObjectDefinition::SweetenerSizeValue) == 0x1, | |
"Blam::Objects::ObjectDefinition::SweetenerSizeValue"); | |
enum class ObjectDefinition::WaterDensityValue : char | |
{ | |
Default, | |
Least, | |
Some, | |
Equal, | |
More, | |
MoreStill, | |
LotsMore | |
}; | |
static_assert(sizeof(ObjectDefinition::WaterDensityValue) == 0x1, | |
"Blam::Objects::ObjectDefinition::WaterDensityValue"); | |
struct ObjectDefinition::EarlyMoverProperty | |
{ | |
Text::StringID Name; | |
Math::Bounds<float> XBounds; | |
Math::Bounds<float> YBounds; | |
Math::Bounds<float> ZBounds; | |
Math::RealEulerAngles3D Angles; | |
}; | |
static_assert(sizeof(ObjectDefinition::EarlyMoverProperty) == 0x28, | |
"Blam::Objects::ObjectDefinition::EarlyMoverProperty"); | |
struct ObjectDefinition::AiProperty | |
{ | |
enum class FlagBits : long; | |
enum class SizeValue : short; | |
enum class DistanceValue : short; | |
ObjectDefinition::AiProperty::FlagBits Flags : 32; | |
Text::StringID AiTypeName; | |
ObjectDefinition::AiProperty::SizeValue Size : 16; | |
ObjectDefinition::AiProperty::DistanceValue LeapJumpSpeed : 16; | |
enum class ObjectDefinition::AiProperty::FlagBits : long | |
{ | |
None = 0, | |
DestroyableCover = 1 << 0, | |
PathfindingIgnoreWhenDead = 1 << 1, | |
DynamicCover = 1 << 2 | |
}; | |
static_assert(sizeof(ObjectDefinition::AiProperty::FlagBits) == 0x4, | |
"Blam::Objects::ObjectDefinition::AiProperty::FlagBits"); | |
enum class ObjectDefinition::AiProperty::SizeValue : short | |
{ | |
Default, | |
Tiny, | |
Small, | |
Medium, | |
Large, | |
Huge, | |
Immobile | |
}; | |
static_assert(sizeof(ObjectDefinition::AiProperty::SizeValue) == 0x2, | |
"Blam::Objects::ObjectDefinition::AiProperty::SizeValue"); | |
enum class ObjectDefinition::AiProperty::DistanceValue : short | |
{ | |
None, | |
Down, | |
Step, | |
Crouch, | |
Stand, | |
Storey, | |
Tower, | |
Infinite | |
}; | |
static_assert(sizeof(ObjectDefinition::AiProperty::DistanceValue) == 0x2, | |
"Blam::Objects::ObjectDefinition::AiProperty::DistanceValue"); | |
}; | |
static_assert(sizeof(ObjectDefinition::AiProperty) == 0xC, | |
"Blam::Objects::ObjectDefinition::AiProperty"); | |
struct ObjectDefinition::Function | |
{ | |
enum class FlagBits : long; | |
ObjectDefinition::Function::FlagBits Flags : 32; | |
Text::StringID ImportName; | |
Text::StringID ExportName; | |
Text::StringID TurnOffWith; | |
float MinimumValue; | |
Tags::TagData<void> DefaultFunction; | |
Text::StringID ScaleBy; | |
enum class ObjectDefinition::Function::FlagBits : long | |
{ | |
None = 0, | |
Invert = 1 << 0, | |
MappingDoesNotControlsActive = 1 << 1, | |
AlwaysActive = 1 << 2, | |
RandomTimeOffset = 1 << 3 | |
}; | |
static_assert(sizeof(ObjectDefinition::Function::FlagBits) == 0x4, | |
"Blam::Objects::ObjectDefinition::Function::FlagBits"); | |
}; | |
static_assert(sizeof(ObjectDefinition::Function) == 0x2C, | |
"Blam::Objects::ObjectDefinition::Function"); | |
struct ObjectDefinition::Attachment | |
{ | |
enum class FlagBits : long; | |
enum class ChangeColorValue : short; | |
ObjectDefinition::Attachment::FlagBits Flags : 32; | |
Tags::TagReference Type; | |
Text::StringID Marker; | |
ChangeColorValue ChangeColor; | |
short Unknown; | |
Text::StringID PrimaryScale; | |
Text::StringID SecondaryScale; | |
enum class ObjectDefinition::Attachment::FlagBits : long | |
{ | |
None = 0, | |
GameplayVisionMode = 1 << 0, | |
TheaterVisionMode = 1 << 1 | |
}; | |
static_assert(sizeof(ObjectDefinition::Attachment::FlagBits) == 0x4, | |
"Blam::Objects::ObjectDefinition::Attachment::FlagBits"); | |
enum class ObjectDefinition::Attachment::ChangeColorValue : short | |
{ | |
None, | |
Primary, | |
Secondary, | |
Tertiary, | |
Quaternary | |
}; | |
static_assert(sizeof(ObjectDefinition::Attachment::ChangeColorValue) == 0x2, | |
"Blam::Objects::ObjectDefinition::Attachment::ChangeColorValue"); | |
}; | |
static_assert(sizeof(ObjectDefinition::Attachment) == 0x24, | |
"Blam::Objects::ObjectDefinition::Attachment"); | |
struct ObjectDefinition::ChangeColor | |
{ | |
struct Permutation; | |
struct Function; | |
Tags::TagBlock<ObjectDefinition::ChangeColor::Permutation> InitialPermutations; | |
Tags::TagBlock<ObjectDefinition::ChangeColor::Function> Functions; | |
struct ObjectDefinition::ChangeColor::Permutation | |
{ | |
float Weight; | |
Math::RealColorRGB ColorLowerBound; | |
Math::RealColorRGB ColorUpperBound; | |
Text::StringID VariantName; | |
}; | |
static_assert(sizeof(ObjectDefinition::ChangeColor::Permutation) == 0x20, | |
"Blam::Objects::ObjectDefinition::ChangeColor::Permutation"); | |
struct ObjectDefinition::ChangeColor::Function | |
{ | |
enum class ScaleFlagBits : long; | |
ObjectDefinition::ChangeColor::Function::ScaleFlagBits ScaleFlags : 32; | |
Math::RealColorRGB ColorLowerBound; | |
Math::RealColorRGB ColorUpperBound; | |
Text::StringID DarkenBy; | |
Text::StringID ScaleBy; | |
enum class ObjectDefinition::ChangeColor::Function::ScaleFlagBits : long | |
{ | |
None = 0, | |
BlendInHsv = 1 << 0, | |
MoreColors = 1 << 1 | |
}; | |
static_assert(sizeof(ObjectDefinition::ChangeColor::Function::ScaleFlagBits) == 0x4, | |
"Blam::Objects::ObjectDefinition::ChangeColor::Function::ScaleFlagBits"); | |
}; | |
static_assert(sizeof(ObjectDefinition::ChangeColor::Function) == 0x24, | |
"Blam::Objects::ObjectDefinition::ChangeColor::Function"); | |
}; | |
static_assert(sizeof(ObjectDefinition::ChangeColor) == 0x18, | |
"Blam::Objects::ObjectDefinition::ChangeColor"); | |
struct ObjectDefinition::NodeMap | |
{ | |
char TargetNode; | |
}; | |
static_assert(sizeof(ObjectDefinition::NodeMap) == 0x1, | |
"Blam::Objects::ObjectDefinition::NodeMap"); | |
struct ObjectDefinition::MultiplayerProperty | |
{ | |
enum class EngineFlagBits : unsigned short; | |
enum class TeleporterFlagBits : unsigned char; | |
enum class FlagBits : unsigned short; | |
enum class ObjectTypeValue : char; | |
enum class SpawnTimerModeValue : char; | |
enum class ShapeValue : char; | |
ObjectDefinition::MultiplayerProperty::EngineFlagBits EngineFlags : 16; | |
ObjectDefinition::MultiplayerProperty::ObjectTypeValue ObjectType : 8; | |
ObjectDefinition::MultiplayerProperty::TeleporterFlagBits TeleporterFlags : 8; | |
ObjectDefinition::MultiplayerProperty::FlagBits Flags : 16; | |
ObjectDefinition::MultiplayerProperty::ShapeValue Shape : 8; | |
ObjectDefinition::MultiplayerProperty::SpawnTimerModeValue SpawnTimerMode : 8; | |
short SpawnTime; | |
short UnknownSpawnTime; | |
float RadiusWidth; | |
float Length; | |
float Top; | |
float Bottom; | |
unsigned long Unknown2; | |
unsigned long Unknown3; | |
unsigned long Unknown4; | |
long Unknown5; | |
long Unknown6; | |
Tags::TagReference ChildObject; | |
long Unknown7; | |
Tags::TagReference ShapeShader; | |
Tags::TagReference UnknownShader; | |
Tags::TagReference Unknown8; | |
Tags::TagReference Unknown9; | |
Tags::TagReference Unknown10; | |
Tags::TagReference Unknown11; | |
Tags::TagReference Unknown12; | |
Tags::TagReference Unknown13; | |
enum class ObjectDefinition::MultiplayerProperty::EngineFlagBits : unsigned short | |
{ | |
None = 0, | |
CaptureTheFlag = 1 << 0, | |
Slayer = 1 << 1, | |
Oddball = 1 << 2, | |
KingOfTheHill = 1 << 3, | |
Juggernaut = 1 << 4, | |
Territories = 1 << 5, | |
Assault = 1 << 6, | |
Vip = 1 << 7, | |
Infection = 1 << 8, | |
Bit9 = 1 << 9 | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty::EngineFlagBits) == 0x2, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty::EngineFlagBits"); | |
enum class ObjectDefinition::MultiplayerProperty::TeleporterFlagBits : unsigned char | |
{ | |
None, | |
DisallowsPlayers = 1 << 0, | |
AllowsLandVehicles = 1 << 1, | |
AllowsHeavyVehicles = 1 << 2, | |
AllowsFlyingVehicles = 1 << 3, | |
AllowsProjectiles = 1 << 4 | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty::TeleporterFlagBits) == 0x1, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty::TeleporterFlagBits"); | |
enum class ObjectDefinition::MultiplayerProperty::FlagBits : unsigned short | |
{ | |
None, | |
OnlyRenderIfEditable = 1 << 0, | |
PhasedPhysicsInForge = 1 << 1, | |
ValidInitialPlayerSpawn = 1 << 2, | |
FixedBoundaryOrientation = 1 << 3, | |
CandyMonitorShouldIgnore = 1 << 4, | |
InheritOwningTeamColor = 1 << 5, | |
BoundaryVolumeDoesnTKillImmediately = 1 << 6, | |
OnlyCollisionIfEditable = 1 << 7, | |
OnlyPhysicsIfEditable = 1 << 8, | |
ForceRenderInForge = 1 << 9, | |
RespawnPlayerSpawn = 1 << 10, | |
FallbackPlayerSpawn = 1 << 11 | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty::FlagBits) == 0x2, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty::FlagBits"); | |
enum class ObjectDefinition::MultiplayerProperty::ObjectTypeValue : char | |
{ | |
Ordinary, | |
Weapon, | |
Grenade, | |
Projectile, | |
Powerup, | |
Equipment, | |
LightLandVehicle, | |
HeavyLandVehicle, | |
FlyingVehicle, | |
Teleporter2way, | |
TeleporterSender, | |
TeleporterReceiver, | |
PlayerSpawnLocation, | |
PlayerRespawnZone, | |
HoldSpawnObjective, | |
CaptureSpawnObjective, | |
HoldDestinationObjective, | |
CaptureDestinationObjective, | |
HillObjective, | |
InfectionHavenObjective, | |
TerritoryObjective, | |
VipBoundaryObjective, | |
VipDestinationObjective, | |
JuggernautDestinationObjective | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty::ObjectTypeValue) == 0x1, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty::ObjectTypeValue"); | |
enum class ObjectDefinition::MultiplayerProperty::SpawnTimerModeValue : char | |
{ | |
DefaultOne, | |
Multiple | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty::SpawnTimerModeValue) == 0x1, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty::SpawnTimerModeValue"); | |
enum class ObjectDefinition::MultiplayerProperty::ShapeValue : char | |
{ | |
None, | |
Sphere, | |
Cylinder, | |
Box | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty::ShapeValue) == 0x1, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty::ShapeValue"); | |
}; | |
static_assert(sizeof(ObjectDefinition::MultiplayerProperty) == 0xC4, | |
"Blam::Objects::ObjectDefinition::MultiplayerProperty"); | |
struct ObjectDefinition::ModelDatum | |
{ | |
enum class TypeValue : short; | |
ObjectDefinition::ModelDatum::TypeValue Type : 16; | |
short Unknown; | |
Math::RealPoint3D Offset; | |
float Radius; | |
enum class ObjectDefinition::ModelDatum::TypeValue : short | |
{ | |
NotSet, | |
UserDefined, | |
AutoGenerated | |
}; | |
static_assert(sizeof(ObjectDefinition::ModelDatum::TypeValue) == 0x2, | |
"Blam::Objects::ObjectDefinition::ModelDatum::TypeValue"); | |
}; | |
static_assert(sizeof(ObjectDefinition::ModelDatum) == 0x14, | |
"Blam::Objects::ObjectDefinition::ModelDatum"); | |
}; | |
static_assert(sizeof(ObjectDefinition) == 0x120, | |
"Blam::Objects::ObjectDefinition"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment