Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ public unsafe partial struct MoveController {
[FieldOffset(0x3E0)] public BattleChara* OwnerObject;

[FieldOffset(0x410)] public MovementStateOptions MovementState;
[BitField<bool>(nameof(IsSurfacePlacementComplete), 0)] // when not set, the game tries to place the owner on the nearest collision below its position on each frame. gets set when succeeded, skipped or disabled.
[BitField<bool>(nameof(IsSurfacePlacementDisabled), 2)] // skips surface placement on objects which are supposed to be kept at a fixed height (mounts, hovering minions, preview characters, some event NPCs)
[BitField<bool>(nameof(IsSwimming), 5)] // found in Client::Game::Event::EventSceneModuleUsualImpl.IsSwimming
[BitField<bool>(nameof(IsSurfacePlacementPending), 7)] // queues a placement attempt which is delayed by a few frames. placement has to be completed and not disabled for this to work.
[FieldOffset(0x438)] private byte Flags438;

[MemberFunction("E8 ?? ?? ?? ?? 38 05")]
Expand Down
7 changes: 7 additions & 0 deletions FFXIVClientStructs/FFXIV/Client/Game/Object/GameObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public unsafe partial struct GameObject {
[FieldOffset(0x97)] public byte Visibility;
[FieldOffset(0x9A)] public ObjectTargetableFlags TargetableStatus; // Determines whether the game object can be targeted by the user
[FieldOffset(0x9B)] public ObjectUpdateFlags UpdateFlags;
[FieldOffset(0x9C)] public ObjectSceneFlags SceneFlags;
[FieldOffset(0xB0)] public Vector3 Position;
[FieldOffset(0xC0)] public float Rotation;
[FieldOffset(0xC4)] public float Scale;
Expand Down Expand Up @@ -430,6 +431,12 @@ public enum VisibilityFlags : ulong {
Nameplate = 1ul << 11
}

[Flags]
public enum ObjectSceneFlags : byte {
VisualsLoaded = 1 << 4, // found in Client::Game::Object::GameObject.Update; set once drawing is enabled, DrawObject.LoadState reaches 3 and vf57 (object type based checks) agrees, cleared by EnableDraw and DisableDraw
CountsForPresenceChecks = 1 << 6, // found in Client::LayoutEngine::Group::SGDoorActionController; a local client object with this flag active can actuate doors
}

[Flags]
public enum ObjectUpdateFlags : byte {
/// <summary>Seen when Name is modified.</summary>
Expand Down
Loading