some thoughts about UI:
1. for user interface (panels, buttons, map, quest log, etc) in SWTOR BioWare does use Scaleform_GFx - Scaleform - Wikipedia, the free encyclopedia - (like they do in MassEffect and DragonAge games)
2. when we say Lenin, we mean The Communist Party.... er... Scaleform_GFx is just a Flash-with-GPU-support. And Flash with own virtual machine is loosely coupled with other game engine parts.
to pass game events to UI used "registerInvokeListener" mechanism on Flash side and "invokeRegistered" functions on HeroScript side.
for example - this script pass queue status on server selection screen
Code:
hsl_TrackLine(191);
hsl_PopUntilTemporaries(0);
hsl_RefSystemNode(20, &v5, (unsigned int)&unk_74BE365A);
hsl_RefNodeFieldNodeRef(21, (int)&v4, (int)&v5, 11);
v6 = hsl_RefNodeFieldLookupList((int)&v4, 12);
hsl_TrackLine(192);
hsl_SF_GFx_ClearAndReserveParams_maybe(hsl_CurrentInterface, 2);
hsl_TrackLine(193);
LODWORD(v1) = hsl_RefLookupListElementByIntInt(v6, 0x290EDEE1u, 0x3BD0CBE3u);
hsl_SF_GFx_AddParamInteger(hsl_CurrentInterface, v1);
hsl_TrackLine(194);
LODWORD(v2) = hsl_RefLookupListElementByIntInt(v6, (int)unk_EC1CF1A9, 0xAF293F5Eu);
hsl_SF_GFx_AddParamInteger(hsl_CurrentInterface, v2);
hsl_TrackLine(195);
return hsl_SF_GFx_InvokeRegisteredWithParams_maybe(hsl_CurrentInterface, a1, 3, (int)&hs_setQueueData);
small part of in-game invoke-calls, without params (yet)
Code:
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: setPlayerPosition
InvokeRegistered: onChangedPlayerAbilitySlot
InvokeRegistered: onChangedQuickSlot
InvokeRegistered: onChangedQuickSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: setGlobalCooldownTime
InvokeRegistered: setGlobalCooldownTime
InvokeRegistered: onChangedPlayerAbilitySlot
InvokeRegistered: onChangedQuickSlot
InvokeRegistered: onChangedQuickSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: setGlobalCooldownTime
InvokeRegistered: onChangedPlayerEffectPositiveSlot
InvokeRegistered: onChangedCharacterEffectPositiveSlot
InvokeRegistered: onUpdateSocialAreaCount
InvokeRegistered: guiIsGameOptionsEnabled
InvokeRegistered: onCmdStart
InvokeRegistered: onCmdStop
InvokeRegistered: guiIsGameOptionsEnabled
InvokeRegistered: guiIsGameOptionsEnabled
InvokeRegistered: onCmdStart
InvokeRegistered: guiIsWorldMapEnabled
InvokeRegistered: showWorldMap
InvokeRegistered: removeMiniMapNotes
InvokeRegistered: guiIsWorldMapEnabled
InvokeRegistered: removeMiniMapNotes
InvokeRegistered: setCurrentMapID
InvokeRegistered: setWorldMapBounds
InvokeRegistered: clearMapNotes
InvokeRegistered: removeMapNotes
InvokeRegistered: onSetMapNotes
InvokeRegistered: guiIsWorldMapEnabled
InvokeRegistered: setWorldMapBounds
InvokeRegistered: setCurrentMapID
InvokeRegistered: setLocalMapID
InvokeRegistered: setAvailablePlanetMapID
InvokeRegistered: onSetGuiPlayerWorldMapName
InvokeRegistered: onCmdStop
InvokeRegistered: setInstanceTravelData
InvokeRegistered: guiIsGameOptionsEnabled
InvokeRegistered: onCmdStart
InvokeRegistered: guiIsCrewSkillsEnabled
InvokeRegistered: onChangedHasAnyCompanion
InvokeRegistered: onCmdStop
InvokeRegistered: onChangedCrewSkill
InvokeRegistered: onChangedCompanionInfo
InvokeRegistered: onChangedCrewTaskDone
InvokeRegistered: onChangedCrewTaskDone
InvokeRegistered: onChangedCrewTaskDone
InvokeRegistered: onChangedCrewTaskDone
InvokeRegistered: onChangedCrewAvailability
InvokeRegistered: onChangedGuiCrewSkillsEnabled
InvokeRegistered: guiIsCrewSkillsEnabled
InvokeRegistered: guiIsCrewMissionsEnabled
InvokeRegistered: onChangedGuiCraftingEnabled
InvokeRegistered: onChangedSchematicsAdd
InvokeRegistered: onChangedSubtypesAdd
InvokeRegistered: onChangedSchematicsDifficulty
InvokeRegistered: onChangedSchematicsDifficulty
InvokeRegistered: onChangedHolocomEnabled
InvokeRegistered: onChangedHolocomEnabled
InvokeRegistered: guiIsCrewSkillsEnabled
InvokeRegistered: guiIsCrewCraftingEnabled
InvokeRegistered: onChangedGuiCompanionCraftingClose
InvokeRegistered: onChangedGuiCompanionMissionsEnabled
InvokeRegistered: onChangedCompanionMissions
InvokeRegistered: setCompanionMissionsFilter
InvokeRegistered: onChangedCompanionMissions
InvokeRegistered: onChangedHolocomEnabled
InvokeRegistered: onChangedHolocomEnabled
InvokeRegistered: onChangedCompanionMissions
InvokeRegistered: addChatMessage
InvokeRegistered: onUpdateSocialAreaCount
InvokeRegistered: addChatMessage
InvokeRegistered: addChatMessage
InvokeRegistered: bannerMessage
InvokeRegistered: setCompanionNameWithGender
InvokeRegistered: onChangedCompanionAwayUntil
InvokeRegistered: onChangedTaskMissionInfo
InvokeRegistered: onChangedCrewAvailability
InvokeRegistered: onChangedTaskProgress
InvokeRegistered: guiIsTrainerWindowEnabled
InvokeRegistered: onChangedGuiCurrency
InvokeRegistered: setPlayerMoney
InvokeRegistered: onChangedCompanionMissions
InvokeRegistered: addChatMessage
InvokeRegistered: addChatMessage
InvokeRegistered: onChangedHolocomEnabled
also Flash standard external interface used to call GFx_Movie node's methods, which do all game engine interactions.
so if I install hooks on InvokeRegistered, then I can grab all events passing to UI and have all information, that UI have (almost done).
and if I can do external interface calls from my own code, then I can do all that UI can do in game (done).
and it is mean - crew skills automation, DPS rotation automation and many other good things.