Skip to content

Spectators spectators spectators - #1907

Open
redstrate wants to merge 4 commits into
aers:mainfrom
redstrate:work/redstrate/spectator
Open

Spectators spectators spectators#1907
redstrate wants to merge 4 commits into
aers:mainfrom
redstrate:work/redstrate/spectator

Conversation

@redstrate

Copy link
Copy Markdown
Contributor

This has a big white whale for me: it's a super obscure system in the game and yet its the closest thing we'll ever get to a noclip-esque camera without building one from scratch. No, this cannot be used for camera hacking - with the way it works it actually moves your character, still responds to collision etc. You'll appear flying and will get bonked accordingly!

See individual commits as I broke this patch down into four parts:

  • ExcelSheetWaiter bits (it uses this for loading the Spectator sheet)
  • SpectatorManager and SpectatorSystem for the actual spectator management
  • SpectatorList packet used for a minor feature of the UI
  • AgentPvPSpectator which isn't all that useful, but I needed this to figure out why some portions of the spectator UI was hidden by default.

If you can't make head or tails of the Spectator sheet, see this PR for improving that too.

@redstrate

redstrate commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

No, this cannot be used for camera hacking - with the way it works it actually moves your character, still responds to collision etc. You'll appear flying and will get bonked accordingly!

I strongly suspect that's what character mode 15 is for (commented out right now) as it just makes your character invisible? I don't know yet though, especially without a packet capture :(

@redstrate
redstrate force-pushed the work/redstrate/spectator branch from a66f005 to c74f177 Compare August 2, 2026 15:20

@Haselnussbomber Haselnussbomber left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without going into the actual PR, just some formatting notes.

Comment thread FFXIVClientStructs/FFXIV/Common/Component/Excel/ExcelSheet.cs Outdated
Comment thread FFXIVClientStructs/FFXIV/Client/Game/SpectatorManager.cs Outdated
Comment thread FFXIVClientStructs/FFXIV/Client/Game/Control/SpectatorSystem.cs Outdated
Comment thread FFXIVClientStructs/FFXIV/Client/Game/Control/SpectatorSystem.cs Outdated
I figured out one the vfuncs must be for when the waiter finishes, as a
future waiter I'm adding invokes a callback here.
The names are guesswork, but their purpose is clear: managing the
spectator system (at least the for CC Custom Matches.) The manager
exists as a global and is initialized via an ActorControl, while the
SpectatorSystem is held by Control and appears to do more of the
grunt-work for the camera.
This is used to fill the spectator list seen in CC Custom Matches
accessible from the Duty Menu but also the PvP spectator menu. It's just
a list of entity IDs, with an unknown but less important flag (probably
used for counting and some other misc task.)
This is the agent responsible for the PvP spectator UI, and I really
only focused on how it updated the visibility for its addons.
@redstrate
redstrate force-pushed the work/redstrate/spectator branch from c74f177 to bc2b167 Compare August 2, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants