Skip to content

Commit

Permalink
feat: misc (#274)
Browse files Browse the repository at this point in the history
- added a `REX::Enum<T>` to address the situation where an enum member
variable has a different underlying type than the enum type itself. It
should be a cut down version of `EnumSet` as they aren't flags.
- for example: `FormType` internally is a int32_t, but is often used as
either an uint8_t, uint32_t, or even uint64_t in some classes.
  • Loading branch information
qudix authored Sep 22, 2024
1 parent ec2309f commit 469dc37
Show file tree
Hide file tree
Showing 70 changed files with 901 additions and 1,088 deletions.
8 changes: 4 additions & 4 deletions include/RE/A/AVMData.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace RE
struct AVMData
{
public:
enum class TYPE
enum class Type : std::uint32_t
{
kNone,
kSimpleGroup,
Expand All @@ -28,9 +28,9 @@ namespace RE
};

// members
stl::enumeration<TYPE, std::uint32_t> type; // 00
BSFixedString category; // 08
Entry unk10; // 10
Type type; // 00
BSFixedString category; // 08
Entry unk10; // 10
};
static_assert(sizeof(AVMData) == 0x28);
}
202 changes: 101 additions & 101 deletions include/RE/A/Actor.h

Large diffs are not rendered by default.

85 changes: 42 additions & 43 deletions include/RE/A/ActorValueInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,49 +20,48 @@ namespace RE
~ActorValueInfo() override; // 00

// members

BGSEditorID editorID; // 040
std::uint64_t unk050; // 050
std::uint64_t unk058; // 058
std::uint64_t unk060; // 060
std::uint64_t unk068; // 068
std::uint64_t unk070; // 070
std::uint64_t unk078; // 078
std::uint64_t unk080; // 080
std::uint64_t unk088; // 088
std::uint64_t unk090; // 090
std::uint64_t unk098; // 098
std::uint64_t unk0A0; // 0A0
std::uint64_t unk0A8; // 0A8
std::uint64_t unk0B0; // 0B0
std::uint64_t unk0B8; // 0B8
std::uint64_t unk0C0; // 0C0
std::uint64_t unk0C8; // 0C8
std::uint64_t unk0D0; // 0D0
std::uint64_t unk0D8; // 0D8
std::uint64_t unk0E0; // 0E0
std::uint64_t unk0E8; // 0E8
std::uint64_t unk0F0; // 0F0
std::uint64_t unk0F8; // 0F8
std::uint64_t unk100; // 100
std::uint64_t unk108; // 108
std::uint64_t unk110; // 110
std::uint64_t unk118; // 118
std::uint64_t unk120; // 120
std::uint64_t unk128; // 128
std::uint64_t unk130; // 130
std::uint64_t unk138; // 138
BGSResource* resource; // 140
BSFixedString abbreviation; // 148
std::uint32_t index; // 150
std::uint32_t flags; // 154
stl::enumeration<ActorValue::AVType, std::uint32_t> avType; // 158
std::uint32_t unk15C; // 15C
std::uint32_t fullCacheIndex; // 160
std::uint32_t permanentCacheIndex; // 164
std::uint64_t unk168; // 168
std::uint32_t unk170; // 170
std::uint32_t sortIndex; // 174
BGSEditorID editorID; // 040
std::uint64_t unk050; // 050
std::uint64_t unk058; // 058
std::uint64_t unk060; // 060
std::uint64_t unk068; // 068
std::uint64_t unk070; // 070
std::uint64_t unk078; // 078
std::uint64_t unk080; // 080
std::uint64_t unk088; // 088
std::uint64_t unk090; // 090
std::uint64_t unk098; // 098
std::uint64_t unk0A0; // 0A0
std::uint64_t unk0A8; // 0A8
std::uint64_t unk0B0; // 0B0
std::uint64_t unk0B8; // 0B8
std::uint64_t unk0C0; // 0C0
std::uint64_t unk0C8; // 0C8
std::uint64_t unk0D0; // 0D0
std::uint64_t unk0D8; // 0D8
std::uint64_t unk0E0; // 0E0
std::uint64_t unk0E8; // 0E8
std::uint64_t unk0F0; // 0F0
std::uint64_t unk0F8; // 0F8
std::uint64_t unk100; // 100
std::uint64_t unk108; // 108
std::uint64_t unk110; // 110
std::uint64_t unk118; // 118
std::uint64_t unk120; // 120
std::uint64_t unk128; // 128
std::uint64_t unk130; // 130
std::uint64_t unk138; // 138
BGSResource* resource; // 140
BSFixedString abbreviation; // 148
std::uint32_t index; // 150
std::uint32_t flags; // 154
ActorValue::Type avType; // 158
std::uint32_t unk15C; // 15C
std::uint32_t fullCacheIndex; // 160
std::uint32_t permanentCacheIndex; // 164
std::uint64_t unk168; // 168
std::uint32_t unk170; // 170
std::uint32_t sortIndex; // 174
};
static_assert(sizeof(ActorValueInfo) == 0x178);
}
2 changes: 1 addition & 1 deletion include/RE/A/ActorValues.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace RE
public BSTSingletonImplicit<ActorValue> // 000
{
public:
enum class AVType
enum class Type : std::uint32_t
{
kDerivedAttribute,
kAttribute,
Expand Down
18 changes: 9 additions & 9 deletions include/RE/B/BGSAimDownSightModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ namespace RE
const BSFixedString& GetFormDataType() override; // 06 - { return "AimDownSightData"; }

// members
TESImageSpaceModifier* imod; // 08
NiPoint3 cameraOffset; // 10
float distanceFromCameraOffsetADS; // 1C
float fovMult; // 20
bool heightDelayEnabledADS; // 24
float heightDelayADS; // 28
bool depthEnabledADS; // 2C
float depthDelayADS; // 30
stl::enumeration<OVERLAY, std::uint8_t> overlay; // 34
TESImageSpaceModifier* imod; // 08
NiPoint3 cameraOffset; // 10
float distanceFromCameraOffsetADS; // 1C
float fovMult; // 20
bool heightDelayEnabledADS; // 24
float heightDelayADS; // 28
bool depthEnabledADS; // 2C
float depthDelayADS; // 30
REX::EnumSet<OVERLAY, std::uint8_t> overlay; // 34
};
static_assert(sizeof(AimDownSightData) == 0x38);

Expand Down
7 changes: 3 additions & 4 deletions include/RE/B/BGSArtObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace RE
SF_RTTI_VTABLE(BGSArtObject);
SF_FORMTYPE(ARTO);

enum class ArtType
enum class ArtType : std::uint32_t
{
kMagicCastingArt = 0,
kMagicHitEffect = 1,
Expand All @@ -26,10 +26,9 @@ namespace RE

struct Data // DNAM
{
public:
// members
stl::enumeration<ArtType, std::uint32_t> artType; // 0
std::uint32_t unk04; // 4
ArtType artType; // 0
std::uint32_t unk04; // 4
};
static_assert(sizeof(Data) == 0x8);

Expand Down
10 changes: 5 additions & 5 deletions include/RE/B/BGSAtmosphere.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,11 @@ namespace RE

struct MiscSettings
{
stl::enumeration<ATMOSPHERE_TYPE, std::uint32_t> atmosphereType; // 00
BSTArray<BGSResource*> inorganicResources; // 08
TESImageSpace* imageSpaceDay; // 18
TESImageSpace* imageSpaceNight; // 20
TESClimate* climateOverride; // 28
REX::Enum<ATMOSPHERE_TYPE, std::uint32_t> atmosphereType; // 00
BSTArray<BGSResource*> inorganicResources; // 08
TESImageSpace* imageSpaceDay; // 18
TESImageSpace* imageSpaceNight; // 20
TESClimate* climateOverride; // 28
};
static_assert(sizeof(MiscSettings) == 0x30);

Expand Down
38 changes: 19 additions & 19 deletions include/RE/B/BGSBodyPartData.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,25 @@ namespace RE
{
public:
// members
float unk00; // 00
float unk04; // 04
std::uint8_t flags; // 08
stl::enumeration<BGSBodyPartDefs::LIMB_ENUM, std::uint8_t> limbEnum; // 09
std::uint8_t unk0A; // 0A
std::uint16_t unk0C; // 0C
BGSDebris* onCrippleDebris; // 10
BGSExplosion* onCrippleExplosion; // 18
BGSImpactDataSet* onCrippleImpactDataSet; // 20
ActorValueInfo* actorValue; // 28
BGSArtObject* onCrippleArt; // 30
BGSMaterialType* goreEffectsMaterial; // 38
BGSMaterialType* onCrippleMaterial; // 40
BGSBodyPartDefs::HitReactionData hitReactionData; // 48
BSFixedString unk70; // 70
BSFixedString unk78; // 78
BSFixedString unk80; // 80
BSFixedStringCS unk88; // 88
BSFixedString unk90; // 90
float unk00; // 00
float unk04; // 04
std::uint8_t flags; // 08
REX::Enum<BGSBodyPartDefs::LIMB_ENUM, std::uint8_t> limbEnum; // 09
std::uint8_t unk0A; // 0A
std::uint16_t unk0C; // 0C
BGSDebris* onCrippleDebris; // 10
BGSExplosion* onCrippleExplosion; // 18
BGSImpactDataSet* onCrippleImpactDataSet; // 20
ActorValueInfo* actorValue; // 28
BGSArtObject* onCrippleArt; // 30
BGSMaterialType* goreEffectsMaterial; // 38
BGSMaterialType* onCrippleMaterial; // 40
BGSBodyPartDefs::HitReactionData hitReactionData; // 48
BSFixedString unk70; // 70
BSFixedString unk78; // 78
BSFixedString unk80; // 80
BSFixedStringCS unk88; // 88
BSFixedString unk90; // 90
};
static_assert(sizeof(BGSBodyPart) == 0x98);

Expand Down
32 changes: 16 additions & 16 deletions include/RE/B/BGSCameraShot.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,22 @@ namespace RE
};

// members
stl::enumeration<CAM_ACTION, std::int32_t> cameraAction; // 00
stl::enumeration<CAM_OBJECT, std::int32_t> location; // 04
stl::enumeration<CAM_OBJECT, std::int32_t> target; // 08
std::uint32_t flags; // 0C
float playerTimeMult; // 10
float targetTimeMult; // 14
float globalTimeMult; // 18
float maxTime; // 1C
float minTime; // 20
float targetPercentBetweenActors; // 24
float nearTargetDistance; // 28
float locationSpring; // 2C
float targetSpring; // 30
float rotationOffsetX; // 34
float rotationOffsetY; // 38
float rotationOffsetZ; // 3C
REX::Enum<CAM_ACTION, std::int32_t> cameraAction; // 00
REX::Enum<CAM_OBJECT, std::int32_t> location; // 04
REX::Enum<CAM_OBJECT, std::int32_t> target; // 08
std::uint32_t flags; // 0C
float playerTimeMult; // 10
float targetTimeMult; // 14
float globalTimeMult; // 18
float maxTime; // 1C
float minTime; // 20
float targetPercentBetweenActors; // 24
float nearTargetDistance; // 28
float locationSpring; // 2C
float targetSpring; // 30
float rotationOffsetX; // 34
float rotationOffsetY; // 38
float rotationOffsetZ; // 3C
};
static_assert(sizeof(CAMERA_SHOT_DATA) == 0x40);

Expand Down
12 changes: 6 additions & 6 deletions include/RE/B/BGSCollisionLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace RE
SF_RTTI_VTABLE(BGSCollisionLayer);
SF_FORMTYPE(COLL);

enum class FLAG // GNAM
enum class Flag // GNAM
{
kNone = 0,
kTriggerVolume = 1 << 0,
Expand All @@ -23,11 +23,11 @@ namespace RE
~BGSCollisionLayer() override; // 00

// members
std::uint32_t collisionIdx; // 30
std::uint32_t debugColor; // 34
stl::enumeration<FLAG, std::uint32_t> flags; // 38
BSFixedString name; // 40
BSTArray<BGSCollisionLayer*> collidesWith; // 48
std::uint32_t collisionIdx; // 30
std::uint32_t debugColor; // 34
REX::EnumSet<Flag, std::uint32_t> flags; // 38
BSFixedString name; // 40
BSTArray<BGSCollisionLayer*> collidesWith; // 48
};
static_assert(sizeof(BGSCollisionLayer) == 0x58);
}
6 changes: 3 additions & 3 deletions include/RE/B/BGSColorForm.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ namespace RE
{
std::uint32_t color;
float remappingIndex;
}; // 40
TESCondition conditions; // 48
stl::enumeration<Flag, std::uint32_t> flags; // 58
}; // 40
TESCondition conditions; // 48
REX::EnumSet<Flag, std::uint32_t> flags; // 58
};
static_assert(sizeof(BGSColorForm) == 0x60);
}
2 changes: 1 addition & 1 deletion include/RE/B/BGSConstructibleObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ namespace RE
BGSCurveForm* unk168; // 168
TESGlobal* buildLimit; // 170
BSTArray<BSTTuple3<TESForm*, BGSCurveForm*, BGSTypedFormValuePair::SharedVal>>* unk178; // 178
stl::enumeration<LEARN_METHOD, std::uint8_t> learnMethod; // 180
REX::Enum<LEARN_METHOD, std::uint8_t> learnMethod; // 180
TESGlobal* unk188; // 188
BGSKeyword* unk190; // 190
std::uint32_t unk198; // 198
Expand Down
6 changes: 3 additions & 3 deletions include/RE/B/BGSDefaultObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ namespace RE
~BGSDefaultObject() override; // 00

// members
BGSEditorID formEditorID; // 30
TESForm* object; // 40
stl::enumeration<FormType, std::uint8_t> objectType; // 48
BGSEditorID formEditorID; // 30
TESForm* object; // 40
REX::Enum<FormType, std::uint8_t> objectType; // 48
};
static_assert(sizeof(BGSDefaultObject) == 0x50);
}
12 changes: 6 additions & 6 deletions include/RE/B/BGSDefaultObjectManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -394,11 +394,11 @@ namespace RE
{
public:
// members
const char* name; // 00
stl::enumeration<FormType, std::uint8_t> type; // 08
char uniqueID[4]; // 0C
stl::enumeration<DEFAULT_OBJECT_TYPE, std::uint32_t> doType; // 10
const char* newObjectName; // 18
const char* name; // 00
REX::Enum<FormType, std::uint8_t> type; // 08
char uniqueID[4]; // 0C
REX::Enum<DEFAULT_OBJECT_TYPE, std::uint32_t> doType; // 10
const char* newObjectName; // 18
};
static_assert(sizeof(DEFAULT_OBJECT_DATA) == 0x20);

Expand Down Expand Up @@ -428,7 +428,7 @@ namespace RE
[[nodiscard]] TESForm* GetDefaultObject(DEFAULT_OBJECT a_obj) const noexcept
{
assert(a_obj < DEFAULT_OBJECT::kTotal);
return objectArray[stl::to_underlying(a_obj)];
return objectArray[std::to_underlying(a_obj)];
}

template <class T>
Expand Down
8 changes: 4 additions & 4 deletions include/RE/B/BGSEquipSlot.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ namespace RE
~BGSEquipSlot() override; // 00

// members
BGSEditorID formEditorID; // 30
BSTArray<BGSEquipSlot*> parentSlots; // 40
ActorValueInfo* conditionActorValue; // 50
stl::enumeration<Flag, std::uint32_t> flags; // 58
BGSEditorID formEditorID; // 30
BSTArray<BGSEquipSlot*> parentSlots; // 40
ActorValueInfo* conditionActorValue; // 50
REX::EnumSet<Flag, std::uint32_t> flags; // 58
};
static_assert(sizeof(BGSEquipSlot) == 0x60);
}
Loading

0 comments on commit 469dc37

Please sign in to comment.