Galaxy Native Coverage and Implementation Priorities
This is the Markdown companion to the JSON inventory, captured from the local client on September 27,
2026 after the event-callback and unit-native bindings. It records 818 reachable script functions, 191 missing bindings, and 126
placeholder candidates. See Galaxy scripting for protected errors and runtime evidence, and
presentation state for the implemented objective/actor/catalog subset.
The unit selection, cargo and order queries, AI option, team color, plane, ability, weapon, behavior, cooldown, and charge natives are also bound now. They keep bookkeeping on the unit without running catalog behavior; see Unit state. The snapshot below still lists them as missing until the audit is rerun.
What the Counts Mean
- Missing: a call reachable from the audit roots has neither a loaded script-function body nor a name in the SC2 host binding table.
- Placeholder candidate: the registered C function matches the tool's simple constant-return/no-op pattern. Read its contract to
distinguish an incomplete stub from a legitimate constant. Other stub shapes and partial functions are not necessarily detected.
- Audit roots are
InitMap and every literal TriggerCreate("callback") in the supplied sources, including library callbacks.
Both sides of every conditional are followed; this is not a runtime trace, a map-only call list, or proof that all roots register today.
- The regex-based tool does not preprocess includes, discover arbitrary computed callback names, validate signatures, or prove native
semantics. Supply all three libraries. It does not count uncalled global initializer expressions as independent roots.
- A successful intro covers only one route through these scripts. A native present in the table can still have the wrong ABI or
insufficient state behavior;
ActorCreate demonstrated this directly.
The JSON remains the machine-readable snapshot. Regenerate it with the audit tool and refresh the tables/counts below when changing
coverage; neither representation is a promise of complete campaign conformance.
Reproduce From Authoritative Archives
From the repository root (local Blizzard assets are required only for this diagnostic, not for unit tests):
mkdir -p /tmp/sc2-galaxy-audit
build/bin/mpqtool -mpq data/StarCraft2/Campaigns/Liberty.SC2Campaign/Base.SC2Maps cat Maps/Campaign/TRaynor01.SC2Map/MapScript.galaxy > /tmp/sc2-galaxy-audit/MapScript.galaxy
build/bin/mpqtool -mpq data/StarCraft2/Mods/Core.SC2Mod/Base.SC2Data cat TriggerLibs/NativeLib.galaxy > /tmp/sc2-galaxy-audit/NativeLib.galaxy
build/bin/mpqtool -mpq data/StarCraft2/Mods/Core.SC2Mod/Base.SC2Data cat TriggerLibs/natives.galaxy > /tmp/sc2-galaxy-audit/natives.galaxy
build/bin/mpqtool -mpq data/StarCraft2/Mods/Liberty.SC2Mod/Base.SC2Data cat TriggerLibs/LibertyLib.galaxy > /tmp/sc2-galaxy-audit/LibertyLib.galaxy
build/bin/mpqtool -mpq data/StarCraft2/Campaigns/LibertyStory.SC2Campaign/Base.SC2Data cat TriggerLibs/CampaignLib.galaxy > /tmp/sc2-galaxy-audit/CampaignLib.galaxy
python3 tools/galaxy_audit.py /tmp/sc2-galaxy-audit/MapScript.galaxy /tmp/sc2-galaxy-audit/NativeLib.galaxy /tmp/sc2-galaxy-audit/LibertyLib.galaxy /tmp/sc2-galaxy-audit/CampaignLib.galaxy > /tmp/sc2-galaxy-audit/coverage.json
Use the extracted natives.galaxy to check parameter order and return types. The audit needs script bodies and the local C registry;
it does not need native declarations as an additional input. Preserve archive paths when creating focused test fixtures.
Proposed Implementation Order
This is an architectural recommendation based on the observed dependencies, not additional completed work:
| Order |
Subsystem |
Contract/evidence to establish |
| 1 |
Trigger identity and execution state |
Implement current/enabled/stop/count semantics across nested and yielded callbacks; objective-create triggers disable themselves through TriggerGetCurrent |
| 2 |
Event registration and dispatch |
Unit, time, player, and order callbacks retain filters and publish from the server; dialog and purchase filters are stored, and their UI producers are still missing, so InitLibs stays off |
| 3 |
Map-unit identity and unit groups |
Resolve UnitFromId from placed-object IDs and live edicts; preserve group membership and iteration for mission conditions |
| 4 |
Player ownership and world state |
Reconcile script/lobby/client numbering; implement ownership, state queries, and orders against server data rather than constant returns |
| 5 |
Combat and mission progress |
Generate damage/death/range/region/order events and let authored callbacks update objectives and victory/defeat |
| 6 |
Presentation |
Bind objective/help/dialog state to authored layouts; resolve actor models/attachments and localization through their native catalogs |
| 7 |
Campaign persistence and remaining library UI |
Implement bank/conversation/progression contracts and restore full library initialization once dependencies are real |
Use WC3 native wrappers, quest state, trigger execution, and server-authored UI as ownership references. Match the SC2 ABI and source
data rather than importing WC3-specific assumptions. Do not register empty event callbacks solely to get InitMap to return.
For each subsystem: inspect the mounted declaration and reachable script uses; capture a bounded failing trace; implement retained
state plus its producer/consumer; add focused fixture regressions; rerun the affected mission route; update this inventory.
Complete Snapshot by Native Family
Family headings group names for navigation only; they do not introduce new module ownership. Each name appears exactly once.
AI
| Native |
Status |
AIDisableAllScouting |
Placeholder candidate |
AIGivingUp |
Missing |
AIGoodGame |
Missing |
AIIsCampaign |
Missing |
Achievement
| Native |
Status |
AchievementAward |
Placeholder candidate |
AchievementTermQuantitySet |
Placeholder candidate |
Achievements
| Native |
Status |
AchievementsDisable |
Placeholder candidate |
Actor
| Native |
Status |
ActorFromScope |
Placeholder candidate |
ActorRegionCreate |
Placeholder candidate |
ActorRegionSend |
Placeholder candidate |
Bank
| Native |
Status |
BankDeleteCampaignBanks |
Missing |
BankExists |
Placeholder candidate |
BankKeyExists |
Missing |
BankKeyRemove |
Placeholder candidate |
BankLastCreated |
Placeholder candidate |
BankLoad |
Placeholder candidate |
BankRemove |
Missing |
BankSave |
Placeholder candidate |
BankSectionExists |
Missing |
BankValueGetAsFlag |
Missing |
BankValueGetAsInt |
Missing |
BankValueGetAsString |
Missing |
BankValueGetAsText |
Missing |
BankValueSetFromFlag |
Placeholder candidate |
BankValueSetFromInt |
Placeholder candidate |
BankValueSetFromString |
Placeholder candidate |
BankValueSetFromText |
Placeholder candidate |
Battle
| Native |
Status |
BattleReportPanelGetSelectedBattleReport |
Missing |
Camera
| Native |
Status |
CameraGetTarget |
Placeholder candidate |
CameraInfoDefault |
Placeholder candidate |
CameraInfoGetTarget |
Missing |
CameraInfoGetValue |
Missing |
CameraLockInput |
Placeholder candidate |
CameraSetValue |
Missing |
CameraShakeStart |
Placeholder candidate |
Campaign
| Native |
Status |
CampaignMode |
Placeholder candidate |
CampaignProgressSetCampaignFinished |
Missing |
CampaignProgressSetImageFilePath |
Missing |
CampaignProgressSetText |
Missing |
Catalog
| Native |
Status |
CatalogFieldValueGet |
Placeholder candidate |
Character
| Native |
Status |
CharacterSheetPanelSetNameText |
Missing |
CharacterSheetPanelSetPortraitModelLink |
Missing |
Color
| Native |
Status |
ColorFromIndex |
Missing |
Console
| Native |
Status |
ConsoleCommand |
Missing |
Conversation
| Native |
Status |
ConversationDataLoadNodeState |
Missing |
ConversationDataLoadStateValues |
Missing |
ConversationDataResetNodeState |
Placeholder candidate |
ConversationDataResetStateValues |
Placeholder candidate |
ConversationDataSaveNodeState |
Placeholder candidate |
ConversationDataSaveStateValue |
Missing |
ConversationDataSaveStateValues |
Placeholder candidate |
ConversationDataStateAbilCmd |
Missing |
ConversationDataStateFixedValue |
Placeholder candidate |
ConversationDataStateGetValue |
Placeholder candidate |
ConversationDataStateIndex |
Placeholder candidate |
ConversationDataStateMoviePath |
Missing |
ConversationDataStateSetValue |
Placeholder candidate |
ConversationDataStateUpgrade |
Missing |
ConversationDataStop |
Missing |
Data
| Native |
Status |
DataTableSetString |
Placeholder candidate |
DataTableValueExists |
Placeholder candidate |
Dialog
| Native |
Status |
DialogControlCreate |
Missing |
DialogControlDestroy |
Missing |
DialogControlFadeTransparency |
Missing |
DialogControlGetHeight |
Missing |
DialogControlGetWidth |
Missing |
DialogControlLastCreated |
Missing |
DialogControlSetEnabled |
Missing |
DialogControlSetPosition |
Missing |
DialogControlSetPositionRelative |
Missing |
DialogControlSetPropertyAsBool |
Missing |
DialogControlSetPropertyAsColor |
Missing |
DialogControlSetPropertyAsInt |
Missing |
DialogControlSetPropertyAsString |
Missing |
DialogControlSetPropertyAsText |
Placeholder candidate |
DialogControlSetSize |
Missing |
DialogControlSetVisible |
Placeholder candidate |
DialogCreate |
Missing |
DialogDestroy |
Missing |
DialogIsVisible |
Missing |
DialogLastCreated |
Missing |
DialogSetImageVisible |
Missing |
DialogSetPosition |
Missing |
DialogSetSubtitlePositionOverride |
Missing |
DialogSetTransparency |
Missing |
DialogSetVisible |
Missing |
Difficulty
| Native |
Status |
DifficultyNameCampaign |
Placeholder candidate |
Event
| Native |
Status |
EventBattleReportPanelDifficultySelected |
Missing |
EventVictoryPanelDifficultySelected |
Missing |
Game
| Native |
Status |
GameCheatAllow |
Placeholder candidate |
GameCheatsEnabled |
Missing |
GameIsDebugOptionSet |
Placeholder candidate |
GameIsTestMap |
Placeholder candidate |
GameIsTransitionMap |
Placeholder candidate |
GameMapIsBlizzard |
Placeholder candidate |
GameOver |
Missing |
GamePauseAllCharges |
Placeholder candidate |
GameSaveCreate |
Missing |
GameSetBackground |
Placeholder candidate |
GameSetNextMap |
Missing |
GameSetSeedLocked |
Placeholder candidate |
GameSetSpeedLocked |
Placeholder candidate |
GameSetSpeedValue |
Placeholder candidate |
GameSetSpeedValueMinimum |
Missing |
GameSetTransitionMap |
Missing |
GameTimeOfDayPause |
Placeholder candidate |
GameTimeOfDaySet |
Placeholder candidate |
Help
| Native |
Status |
HelpPanelAddTip |
Placeholder candidate |
HelpPanelAddTutorial |
Placeholder candidate |
HelpPanelDisplayPage |
Placeholder candidate |
HelpPanelEnableTechTreeButton |
Placeholder candidate |
HelpPanelShowTechTreeRace |
Placeholder candidate |
Make
| Native |
Status |
MakeMsgTextureSelectBySlot |
Missing |
Max
| Native |
Status |
MaxI |
Missing |
Mercenary
| Native |
Status |
MercenaryCreate |
Missing |
MercenaryGetSelected |
Missing |
MercenaryLastCreated |
Missing |
MercenaryPurchase |
Missing |
MercenarySetCost |
Missing |
MercenarySetDescriptionText |
Missing |
MercenarySetImageFilePath |
Missing |
MercenarySetModelLink |
Missing |
MercenarySetScenePath |
Missing |
MercenarySetSpecialText |
Missing |
MercenarySetState |
Missing |
MercenarySetTitleText |
Missing |
MercenarySetUnitText |
Missing |
Min
| Native |
Status |
MinI |
Missing |
Minimap
| Native |
Status |
MinimapPing |
Placeholder candidate |
Mod
| Native |
Status |
ModI |
Missing |
Movie
| Native |
Status |
MovieStartRecording |
Missing |
MovieStopRecording |
Missing |
Perf
| Native |
Status |
PerfTestGetFPS |
Missing |
PerfTestStart |
Missing |
PerfTestStop |
Missing |
Ping
| Native |
Status |
PingCreate |
Placeholder candidate |
PingDestroy |
Placeholder candidate |
PingLastCreated |
Placeholder candidate |
PingSetScale |
Placeholder candidate |
PingSetTooltip |
Placeholder candidate |
Player
| Native |
Status |
PlayerGetColorIndex |
Missing |
PlayerName |
Missing |
PlayerPauseAllCharges |
Placeholder candidate |
PlayerPauseAllCooldowns |
Placeholder candidate |
PlayerScoreValueEnableAll |
Placeholder candidate |
PlayerStatus |
Missing |
Portrait
| Native |
Status |
PortraitCreate |
Missing |
PortraitLastCreated |
Missing |
PortraitSetBorderVisible |
Missing |
PortraitSetFullscreen |
Missing |
PortraitSetVisible |
Missing |
PortraitUseTransition |
Missing |
Preload
| Native |
Status |
PreloadObject |
Placeholder candidate |
Purchase
| Native |
Status |
PurchaseCategoryCreate |
Missing |
PurchaseCategoryLastCreated |
Missing |
PurchaseCategorySetNameText |
Missing |
PurchaseCategorySetState |
Missing |
PurchaseGetSelectedPurchaseCategory |
Missing |
PurchaseGetSelectedPurchaseItem |
Missing |
PurchaseGroupCreate |
Missing |
PurchaseGroupLastCreated |
Missing |
PurchaseGroupSetIconFilePath |
Missing |
PurchaseGroupSetNameText |
Missing |
PurchaseGroupSetSlot |
Missing |
PurchaseGroupSetState |
Missing |
PurchaseGroupSetUnitLink |
Missing |
PurchaseItemCreate |
Missing |
PurchaseItemLastCreated |
Missing |
PurchaseItemPurchase |
Missing |
PurchaseItemSetCost |
Missing |
PurchaseItemSetDescriptionText |
Missing |
PurchaseItemSetIconFilePath |
Missing |
PurchaseItemSetMovieFilePath |
Missing |
PurchaseItemSetNameText |
Missing |
PurchaseItemSetState |
Missing |
PurchaseItemSetTooltipText |
Missing |
PurchaseSetSelectedPurchaseCategory |
Missing |
Region
| Native |
Status |
RegionEntireMap |
Placeholder candidate |
RegionFromId |
Placeholder candidate |
RegionPlayableMap |
Placeholder candidate |
RegionRandomPoint |
Placeholder candidate |
Research
| Native |
Status |
ResearchCategoryCreate |
Missing |
ResearchCategoryLastCreated |
Missing |
ResearchCategorySetCurrentLevel |
Missing |
ResearchCategorySetLastLevel |
Missing |
ResearchCategorySetNameText |
Missing |
ResearchItemCreate |
Missing |
ResearchItemGetSelected |
Missing |
ResearchItemLastCreated |
Missing |
ResearchItemPurchase |
Missing |
ResearchItemSetConfirmationText |
Missing |
ResearchItemSetDescriptionText |
Missing |
ResearchItemSetIconFilePath |
Missing |
ResearchItemSetMovieFilePath |
Missing |
ResearchItemSetNameText |
Missing |
ResearchItemSetState |
Missing |
ResearchItemSetTooltipText |
Missing |
ResearchTierCreate |
Missing |
ResearchTierLastCreated |
Missing |
ResearchTierSetMaxPurchasesAllowed |
Missing |
ResearchTierSetRequiredLevel |
Missing |
Set
| Native |
Status |
SetNextMissionDifficulty |
Missing |
Sound
| Native |
Status |
SoundChannelSetVolume |
Placeholder candidate |
SoundLastPlayed |
Missing |
SoundStop |
Placeholder candidate |
SoundStopAllTriggerSounds |
Missing |
Soundtrack
| Native |
Status |
SoundtrackDefault |
Placeholder candidate |
SoundtrackPause |
Placeholder candidate |
SoundtrackPlay |
Placeholder candidate |
SoundtrackStop |
Missing |
String
| Native |
Status |
StringLength |
Missing |
StringToFixed |
Missing |
Tech
| Native |
Status |
TechTreeAbilityAllow |
Placeholder candidate |
TechTreeAbilityIsAllowed |
Placeholder candidate |
TechTreeRestrictionsEnable |
Placeholder candidate |
TechTreeUnitAllow |
Missing |
TechTreeUnitHelp |
Placeholder candidate |
TechTreeUnitHelpDefault |
Placeholder candidate |
TechTreeUpgradeAddLevel |
Placeholder candidate |
TechTreeUpgradeAllow |
Missing |
TechTreeUpgradeCount |
Placeholder candidate |
Text
| Native |
Status |
TextTagAttachToUnit |
Missing |
TextTagCreate |
Missing |
TextTagDestroy |
Missing |
TextTagLastCreated |
Missing |
TextTagSetAlignment |
Missing |
TextTagSetBackgroundBorderSize |
Missing |
TextTagSetBackgroundImage |
Missing |
TextTagSetColor |
Missing |
TextTagSetMaxSize |
Missing |
TextTagSetTextShadow |
Missing |
TextTagSetTime |
Missing |
TextTagShow |
Missing |
TextTagShowBackground |
Missing |
TextWithColor |
Missing |
Timer
| Native |
Status |
TimerGetElapsed |
Missing |
Transmission
| Native |
Status |
TransmissionClear |
Placeholder candidate |
TransmissionClearAll |
Placeholder candidate |
TransmissionLastSent |
Placeholder candidate |
TransmissionSetOption |
Placeholder candidate |
TransmissionSource |
Placeholder candidate |
TransmissionSourceFromModel |
Placeholder candidate |
TransmissionSourceFromMovie |
Missing |
TransmissionSourceFromUnit |
Placeholder candidate |
Trigger
| Native |
Status |
TriggerAddEventBattleReportPanelExit |
Missing |
TriggerAddEventBattleReportPanelPlayMission |
Missing |
TriggerAddEventBattleReportPanelPlayScene |
Missing |
TriggerAddEventMercenaryPanelExit |
Missing |
TriggerAddEventMercenaryPanelPurchase |
Missing |
TriggerAddEventMercenaryPanelSelectionChanged |
Missing |
TriggerAddEventResearchPanelExit |
Missing |
TriggerAddEventResearchPanelPurchase |
Missing |
TriggerAddEventVictoryPanelExit |
Missing |
TriggerAddEventVictoryPanelPlayMissionAgain |
Missing |
TriggerDebugOutput |
Placeholder candidate |
TriggerQueueClear |
Placeholder candidate |
TriggerQueueEnter |
Placeholder candidate |
TriggerQueueExit |
Placeholder candidate |
TriggerQueueIsEmpty |
Placeholder candidate |
TriggerQueuePause |
Placeholder candidate |
TriggerSkippableBegin |
Placeholder candidate |
TriggerStop |
Placeholder candidate |
UI
| Native |
Status |
UIAlertPoint |
Placeholder candidate |
UIAlertUnit |
Placeholder candidate |
UIClearMessages |
Placeholder candidate |
UIDisplayMessage |
Missing |
UIFlyerHelperClearOverride |
Placeholder candidate |
UIFlyerHelperOverride |
Placeholder candidate |
UIFrameVisible |
Placeholder candidate |
UISetCursorVisible |
Placeholder candidate |
UISetFrameVisible |
Placeholder candidate |
UISetGameMenuItemVisible |
Placeholder candidate |
UISetMode |
Placeholder candidate |
UISetNextLoadingScreen |
Missing |
UISetNextLoadingScreenImageScale |
Missing |
UISetNextLoadingScreenTextPosition |
Missing |
UISetRestartLoadingScreen |
Placeholder candidate |
UISetWorldVisible |
Missing |
Unit
| Native |
Status |
UnitBehaviorAdd |
Placeholder candidate |
UnitBehaviorAddPlayer |
Missing |
UnitBehaviorRemove |
Placeholder candidate |
UnitBehaviorRemovePlayer |
Missing |
UnitCargoLastCreatedGroup |
Placeholder candidate |
UnitCargoValue |
Missing |
UnitClearSelection |
Placeholder candidate |
UnitFilter |
Placeholder candidate |
UnitFilterMatch |
Placeholder candidate |
UnitGroup |
Placeholder candidate |
UnitGroupFilter |
Placeholder candidate |
UnitGroupSelect |
Missing |
UnitGroupSelected |
Missing |
UnitSetInfoText |
Placeholder candidate |
UnitSetScale |
Placeholder candidate |
UnitSetTeamColorIndex |
Placeholder candidate |
UnitTypeFromString |
Placeholder candidate |
UnitTypeGetName |
Placeholder candidate |
Victory
| Native |
Status |
VictoryPanelAddAchievement |
Placeholder candidate |
VictoryPanelAddCustomStatisticLine |
Placeholder candidate |
VictoryPanelAddTrackedStatistic |
Placeholder candidate |
VictoryPanelSetAchievementsTitle |
Missing |
VictoryPanelSetBackgroundFilePath |
Missing |
VictoryPanelSetMissionText |
Missing |
VictoryPanelSetMissionTimeText |
Missing |
VictoryPanelSetMissionTimeTitle |
Missing |
VictoryPanelSetMissionTitle |
Missing |
VictoryPanelSetRewardCredits |
Missing |
VictoryPanelSetRewardTitle |
Missing |
VictoryPanelSetStatisticsTitle |
Missing |
VictoryPanelSetSummaryBackgroundFilePath |
Missing |
VictoryPanelSetVictoryText |
Missing |
Vis
| Native |
Status |
VisEnable |
Placeholder candidate |
VisExploreArea |
Placeholder candidate |
VisRevealArea |
Placeholder candidate |
VisRevealerCreate |
Placeholder candidate |
VisRevealerDestroy |
Placeholder candidate |
VisRevealerEnable |
Missing |
VisRevealerLastCreated |
Placeholder candidate |