EverQuest UI Control Surface
What You Can Automate
| Layer | Files | What | How |
|---|---|---|---|
| Full UI layout | UI_Char_Server.ini | Window positions, sizes, visibility | Template deployment (full overwrite) |
| Chat routing | UI_Char_Server.ini [ChatManager] | 107 channels → windows | make layout via TypeScript |
| Chat colors | eqclient.ini [TextColors] | 91 WCAG-compliant colors | make colors via TypeScript |
| Performance | eqclient.ini [Defaults] | 47 managed settings, 5 profiles | make configure via TypeScript |
| UI appearance | uifiles/<skin>/EQUI_*.xml | Window structure, fonts, borders | Custom UI skin |
| Hotkeys/macros | socials_*.ini | Command bindings, multi-line actions | Template deployment |
| Logs | Logs/eqlog_*.txt | Ground truth event stream | EQLogParser, parsing |
What You Cannot Automate
| Thing | Why | Workaround |
|---|---|---|
| Chat window creation | EQ engine: containers only created in-game | One-time manual setup (~2 min) |
| Chat tab names | Stored in non-clean INI format, overwritten by EQ | Use window index, not name |
| Container positions | Binary internal state, not in INI | Set in-game, persists once set |
| Runtime UI state | No external hook without injection tools | N/A |
| Dynamic text/labels | Generated by game engine at runtime | N/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
- Initial UI layout — deploy full INI template
- Message routing — inject channel filters via TypeScript
- Logs — parse for truth, classify events, drive external tools
Everything else is either a one-time manual step or an illusion.