Skip to content

Instantly share code, notes, and snippets.

@camden-smallwood-zz
Last active November 13, 2017 21:51
Show Gist options
  • Save camden-smallwood-zz/94b308ce31a2709f82fa958605108d5e to your computer and use it in GitHub Desktop.
Save camden-smallwood-zz/94b308ce31a2709f82fa958605108d5e to your computer and use it in GitHub Desktop.
#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