diff --git a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
index 5e92ff3b0b..a9c61d9e23 100644
--- a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
+++ b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
@@ -13,26 +13,83 @@ public unsafe partial struct EffectContainer {
// [FieldOffset(0x26)] private short UnkRidingPillionValue;
// [FieldOffset(0x2C)] private float UnkTime2;
[FieldOffset(0x30)] public StatusEffect StatusEffects;
+ [FieldOffset(0x31)] private byte UnkTilt1;
+ [FieldOffset(0x32)] private byte Unktilt2;
+ [FieldOffset(0x33)] private byte Unktilt3;
[FieldOffset(0x34)] public int MountTiltSetupState1;
[FieldOffset(0x38)] public int MountTiltSetupState2;
- [FieldOffset(0x40)] public float GroundTiltAngle;
- [FieldOffset(0x44)] public float GroundTiltSpeed;
- [FieldOffset(0x50)] public float FlightTiltAngle;
- [FieldOffset(0x54)] public float FlightTiltSpeed;
- [FieldOffset(0x40), Obsolete("Invalid since 7.1")] public byte TiltParam1Type;
- [FieldOffset(0x44), Obsolete("Invalid since 7.1")] public float TiltParam1Value;
- [FieldOffset(0x48), Obsolete("Invalid since 7.1")] public byte TiltParam2Type;
- [FieldOffset(0x4C), Obsolete("Invalid since 7.1")] public float TiltParam2Value;
+ [FieldOffset(0x3C)] public TiltOrigin MountGroundTiltOrigin;
+ [FieldOffset(0x3D)] private byte MountGroundUnk1;
+ [FieldOffset(0x3E)] private byte MountGroundUnk2;
+ [FieldOffset(0x40)] public float MountGroundTiltAngle;
+ [FieldOffset(0x44)] public float MountGroundTiltSpeed;
+ [FieldOffset(0x48)] public TiltFlags MountGroundTiltFlags;
+
+ [FieldOffset(0x4C)] public TiltOrigin MountFlightSwimTiltOrigin;
+ [FieldOffset(0x4D)] private byte MountFlightSwimUnk1;
+ [FieldOffset(0x4E)] private byte MountFlightSwimUnk2;
+ [FieldOffset(0x50)] public float MountFlightSwimTiltAngle;
+ [FieldOffset(0x54)] public float MountFlightSwimTiltSpeed;
+ [FieldOffset(0x58)] public TiltFlags MountFlightSwimTiltFlags;
+
+ //Set 3 and 4 are loaded into the ownerobject. Looking at code may need to have the owner tilt flags set to enabled in mount.
+ [FieldOffset(0x5C)] public TiltOrigin RiderGroundTiltOrigin;
+ [FieldOffset(0x5D)] private byte RiderGroundUnk1;
+ [FieldOffset(0x5E)] private byte RiderGroundUnk2;
+ [FieldOffset(0x60)] public float RiderGroundTiltAngle;
+ [FieldOffset(0x64)] public float RiderGroundTiltSpeed;
+ [FieldOffset(0x68)] public TiltFlags RiderGroundTiltFlags;
+
+ [FieldOffset(0x6C)] public TiltOrigin RiderFlightSwimTiltOrigin;
+ [FieldOffset(0x6D)] private byte RiderFlightSwimUnk1;
+ [FieldOffset(0x6E)] private byte RiderFlightSwimUnk2;
+ [FieldOffset(0x70)] public float RiderFlightSwimTiltAngle;
+ [FieldOffset(0x74)] public float RiderFlightSwimTiltSpeed;
+ [FieldOffset(0x78)] public TiltFlags RiderFlightSwimReverseTilt;
+
+ [FieldOffset(0x40), Obsolete("Renamed to MountGroundTiltAngle")] public float GroundTiltAngle;
+ [FieldOffset(0x44), Obsolete("Renamed to MountGroundTiltSpeed")] public float GroundTiltSpeed;
+ [FieldOffset(0x50), Obsolete("Renamed to MountFlightSwimTiltAngle")] public float FlightTiltAngle;
+ [FieldOffset(0x54), Obsolete("Renamed to MountFlightSwimTiltSpeed")] public float FlightTiltSpeed;
+
+ [FieldOffset(0x40), Obsolete("Invalid since 7.1", true)] public byte TiltParam1Type;
+ [FieldOffset(0x44), Obsolete("Invalid since 7.1", true)] public float TiltParam1Value;
+ [FieldOffset(0x48), Obsolete("Invalid since 7.1", true)] public byte TiltParam2Type;
+ [FieldOffset(0x4C), Obsolete("Invalid since 7.1", true)] public float TiltParam2Value;
///
- /// Called when mounting/dismounting and maybe other state changes to set new tilt values
+ /// Mount tilt setup, and possibly unmounted tilt setup
///
[MemberFunction("48 89 5C 24 ?? 55 48 83 EC ?? C6 41")]
- public partial void LoadTiltData();
+ public partial void LoadMountTiltData();
+
+ [Obsolete("Renamed to LoadMountTiltData", true)]
+ public void LoadTiltData() => LoadMountTiltData();
+
+ ///
+ /// Mounted player tilt setup
+ ///
+ [MemberFunction("E8 ?? ?? ?? ?? C6 83 ?? ?? ?? ?? ?? 48 8B 45")]
+ public partial void LoadPlayerTiltData();
[Flags]
public enum StatusEffect : byte {
- IsGPoseWet = 0x01,
+ None = 0,
+ IsGPoseWet = 1 << 0,
+ }
+
+ [Flags]
+ public enum TiltFlags : byte {
+ None = 0,
+ ReverseRotation = 1 << 0,
+ }
+
+ //not exactly sure how to explain this, but this controls how the object pivots.
+ public enum TiltOrigin : byte {
+ Ground = 1,
+ Center = 2,
+ Waist = 3,
+ UpperBody = 4,
}
}
diff --git a/ida/data.yml b/ida/data.yml
index ab6ab17954..02e445bc67 100644
--- a/ida/data.yml
+++ b/ida/data.yml
@@ -11329,7 +11329,8 @@ classes:
base: Client::Game::Character::ContainerInterface
funcs:
0x1408C85C0: CalculateFloatHeight
- 0x1408c9440: LoadTiltData
+ 0x1408c9440: LoadMountTiltData
+ 0x1408C9760: LoadPlayerTiltData
Client::Game::Character::ReaperShroudContainer:
vtbls:
- ea: 0x14218C850