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