EverQuest UI Control Surface

What You Can Automate

LayerFilesWhatHow
Full UI layoutUI_Char_Server.iniWindow positions, sizes, visibilityTemplate deployment (full overwrite)
Chat routingUI_Char_Server.ini [ChatManager]107 channels → windowsmake layout via TypeScript
Chat colorseqclient.ini [TextColors]91 WCAG-compliant colorsmake colors via TypeScript
Performanceeqclient.ini [Defaults]47 managed settings, 5 profilesmake configure via TypeScript
UI appearanceuifiles/<skin>/EQUI_*.xmlWindow structure, fonts, bordersCustom UI skin
Hotkeys/macrossocials_*.iniCommand bindings, multi-line actionsTemplate deployment
LogsLogs/eqlog_*.txtGround truth event streamEQLogParser, parsing

What You Cannot Automate

ThingWhyWorkaround
Chat window creationEQ engine: containers only created in-gameOne-time manual setup (~2 min)
Chat tab namesStored in non-clean INI format, overwritten by EQUse window index, not name
Container positionsBinary internal state, not in INISet in-game, persists once set
Runtime UI stateNo external hook without injection toolsN/A
Dynamic text/labelsGenerated by game engine at runtimeN/A

Architecture Principle

Deploy templates, don’t mutate state.

Template (known-good INI) → Full overwrite → Channel routing injection → Done

NOT:

Read INI → Parse → Modify individual keys → Write back → Hope EQ doesn't overwrite

Three Real Levers

  1. Initial UI layout — deploy full INI template
  2. Message routing — inject channel filters via TypeScript
  3. Logs — parse for truth, classify events, drive external tools

Everything else is either a one-time manual step or an illusion.