From b59c75bc0ede0651d1f1c91c437bf12a4d0ac662 Mon Sep 17 00:00:00 2001
From: EchoDidAThing <154573455+EchoDidAThing@users.noreply.github.com>
Date: Wed, 27 May 2026 02:02:19 -0400
Subject: [PATCH 1/4] TiltParam stuff for the EffectContainer;
---
.../Client/Game/Character/EffectContainer.cs | 59 +++++++++++++++++--
1 file changed, 53 insertions(+), 6 deletions(-)
diff --git a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
index 5e92ff3b0b..a19569b67d 100644
--- a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
+++ b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
@@ -13,12 +13,40 @@ public unsafe partial struct EffectContainer {
// [FieldOffset(0x26)] private short UnkRidingPillionValue;
// [FieldOffset(0x2C)] private float UnkTime2;
[FieldOffset(0x30)] public StatusEffect StatusEffects;
+ [FieldOffset(0x31)] public byte UnkTilt1;
+ [FieldOffset(0x32)] public byte Unktilt2;
+ [FieldOffset(0x33)] public 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(0x3C)] public TiltOrigin MountGroundTiltOrigin;
+ [FieldOffset(0x3D)] public byte MountGroundUnk1;
+ [FieldOffset(0x3E)] public byte MountGroundUnk2;
+ [FieldOffset(0x40)] public float MountGroundTiltAngle;
+ [FieldOffset(0x44)] public float MountGroundTiltSpeed;
+ [FieldOffset(0x48)] public TiltFlags MountGroundTiltFlags;
+
+ [FieldOffset(0x4C)] public TiltOrigin MountFlightSwimTiltOrigin;
+ [FieldOffset(0x4D)] public byte MountFlightSwimUnk1;
+ [FieldOffset(0x4E)] public 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)] public byte RiderGroundUnk1;
+ [FieldOffset(0x5E)] public byte RiderGroundUnk2;
+ [FieldOffset(0x60)] public float RiderGroundTiltAngle;
+ [FieldOffset(0x64)] public float RiderGroundTiltSpeed;
+ [FieldOffset(0x68)] public TiltFlags RiderGroundTiltFlags;
+
+ [FieldOffset(0x6C)] public TiltOrigin RiderFlightSwimTiltOrigin;
+ [FieldOffset(0x6D)] public byte RiderFlightSwimUnk1;
+ [FieldOffset(0x6E)] public ushort RiderFlightSwimUnk2;
+ [FieldOffset(0x70)] public float RiderFlightSwimTiltAngle;
+ [FieldOffset(0x74)] public float RiderFlightSwimTiltSpeed;
+ [FieldOffset(0x78)] public TiltFlags RiderFlightSwimReverseTilt;
[FieldOffset(0x40), Obsolete("Invalid since 7.1")] public byte TiltParam1Type;
[FieldOffset(0x44), Obsolete("Invalid since 7.1")] public float TiltParam1Value;
@@ -26,13 +54,32 @@ public unsafe partial struct EffectContainer {
[FieldOffset(0x4C), Obsolete("Invalid since 7.1")] 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();
+
+ ///
+ /// Mounted player tilt setup
+ ///
+ [MemberFunction("E8 ?? ?? ?? ?? C6 83 ?? ?? ?? ?? ?? 48 8B 45")]
+ public partial void LoadPlayerTiltData();
[Flags]
public enum StatusEffect : byte {
IsGPoseWet = 0x01,
}
+
+ [Flags]
+ public enum TiltFlags : byte {
+ ReverseRotation = 0x01,
+ }
+
+ //not exactly sure how to explain this, but this controls how the object pivots.
+ public enum TiltOrigin : byte {
+ Ground = 0x01,
+ Center = 0x02,
+ Waist = 0x03,
+ UpperBody = 0x04,
+ }
}
From ff795b9b901c0ff0d67e2f934200550362572d05 Mon Sep 17 00:00:00 2001
From: EchoDidAThing <154573455+EchoDidAThing@users.noreply.github.com>
Date: Wed, 27 May 2026 02:09:52 -0400
Subject: [PATCH 2/4] Correcting a type;
---
.../FFXIV/Client/Game/Character/EffectContainer.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
index a19569b67d..de4c2a33b9 100644
--- a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
+++ b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
@@ -43,7 +43,7 @@ public unsafe partial struct EffectContainer {
[FieldOffset(0x6C)] public TiltOrigin RiderFlightSwimTiltOrigin;
[FieldOffset(0x6D)] public byte RiderFlightSwimUnk1;
- [FieldOffset(0x6E)] public ushort RiderFlightSwimUnk2;
+ [FieldOffset(0x6E)] public byte RiderFlightSwimUnk2;
[FieldOffset(0x70)] public float RiderFlightSwimTiltAngle;
[FieldOffset(0x74)] public float RiderFlightSwimTiltSpeed;
[FieldOffset(0x78)] public TiltFlags RiderFlightSwimReverseTilt;
From fedd4f7c4c2f64d5ea6b62bc7d95e7f13a319197 Mon Sep 17 00:00:00 2001
From: Haselnussbomber
Date: Thu, 28 May 2026 00:34:34 +0200
Subject: [PATCH 3/4] Update EffectContainer
- Avoid breaking changes
- Made Unks private
---
.../Client/Game/Character/EffectContainer.cs | 52 +++++++++++--------
1 file changed, 31 insertions(+), 21 deletions(-)
diff --git a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
index de4c2a33b9..a9c61d9e23 100644
--- a/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
+++ b/FFXIVClientStructs/FFXIV/Client/Game/Character/EffectContainer.cs
@@ -13,45 +13,50 @@ public unsafe partial struct EffectContainer {
// [FieldOffset(0x26)] private short UnkRidingPillionValue;
// [FieldOffset(0x2C)] private float UnkTime2;
[FieldOffset(0x30)] public StatusEffect StatusEffects;
- [FieldOffset(0x31)] public byte UnkTilt1;
- [FieldOffset(0x32)] public byte Unktilt2;
- [FieldOffset(0x33)] public byte Unktilt3;
+ [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(0x3C)] public TiltOrigin MountGroundTiltOrigin;
- [FieldOffset(0x3D)] public byte MountGroundUnk1;
- [FieldOffset(0x3E)] public byte MountGroundUnk2;
+ [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)] public byte MountFlightSwimUnk1;
- [FieldOffset(0x4E)] public byte MountFlightSwimUnk2;
+ [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)] public byte RiderGroundUnk1;
- [FieldOffset(0x5E)] public byte RiderGroundUnk2;
+ [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)] public byte RiderFlightSwimUnk1;
- [FieldOffset(0x6E)] public byte RiderFlightSwimUnk2;
+ [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("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(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;
///
/// Mount tilt setup, and possibly unmounted tilt setup
@@ -59,6 +64,9 @@ public unsafe partial struct EffectContainer {
[MemberFunction("48 89 5C 24 ?? 55 48 83 EC ?? C6 41")]
public partial void LoadMountTiltData();
+ [Obsolete("Renamed to LoadMountTiltData", true)]
+ public void LoadTiltData() => LoadMountTiltData();
+
///
/// Mounted player tilt setup
///
@@ -67,19 +75,21 @@ public unsafe partial struct EffectContainer {
[Flags]
public enum StatusEffect : byte {
- IsGPoseWet = 0x01,
+ None = 0,
+ IsGPoseWet = 1 << 0,
}
[Flags]
public enum TiltFlags : byte {
- ReverseRotation = 0x01,
+ None = 0,
+ ReverseRotation = 1 << 0,
}
//not exactly sure how to explain this, but this controls how the object pivots.
public enum TiltOrigin : byte {
- Ground = 0x01,
- Center = 0x02,
- Waist = 0x03,
- UpperBody = 0x04,
+ Ground = 1,
+ Center = 2,
+ Waist = 3,
+ UpperBody = 4,
}
}
From f554e77f97c3f76dbf1ef0d67c3d49df49daa042 Mon Sep 17 00:00:00 2001
From: Haselnussbomber
Date: Thu, 28 May 2026 00:37:35 +0200
Subject: [PATCH 4/4] Update data.yml
---
ida/data.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
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