diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/AP_Player_StickyProtossBuildButtons.galaxy b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/AP_Player_StickyProtossBuildButtons.galaxy
index 619a9ad2d..e6112bb1b 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/AP_Player_StickyProtossBuildButtons.galaxy
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/AP_Player_StickyProtossBuildButtons.galaxy
@@ -28,7 +28,7 @@ const int AP_Sticky_NUM_FACTIONS_PER_CLASS = 4;
const int AP_Sticky_NUM_UNITS = 30;
const int AP_Sticky_NUM_GATEWAY_UNITS = 21;
-const int AP_Sticky_NUM_ROBO_UNITS = 9;
+const int AP_Sticky_NUM_ROBO_UNITS = 10;
const int AP_Sticky_NUM_STARGATE_UNITS = 11;
const int AP_Sticky_BUILDING_GATEWAY = 0;
@@ -89,6 +89,7 @@ void initLists() {
roboTrainToUnitClass[6] = AP_Sticky_CLASS_IMMORTAL; // Vanguard
roboTrainToUnitClass[7] = AP_Sticky_CLASS_DISRUPTOR; // Reaver
roboTrainToUnitClass[8] = AP_Sticky_CLASS_DISRUPTOR; // Disruptor
+ roboTrainToUnitClass[9] = AP_Sticky_CLASS_IMMORTAL; // Stalwart
// stargate train ID -> class
stargateTrainToUnitClass[0] = AP_Sticky_CLASS_PHOENIX; // Phoenix
@@ -129,7 +130,7 @@ void initLists() {
abilityIndices[AP_Sticky_CLASS_ADEPT][AP_Sticky_FACTION_NERAZIM] = 18; // Dark Archon
abilityIndices[AP_Sticky_CLASS_ADEPT][AP_Sticky_FACTION_TALDARIM] = -1; // -
abilityIndices[AP_Sticky_CLASS_IMMORTAL][AP_Sticky_FACTION_AIUR] = 3; // Immortal
- abilityIndices[AP_Sticky_CLASS_IMMORTAL][AP_Sticky_FACTION_PURIFIER] = -1; // -
+ abilityIndices[AP_Sticky_CLASS_IMMORTAL][AP_Sticky_FACTION_PURIFIER] = 9; // Stalwart
abilityIndices[AP_Sticky_CLASS_IMMORTAL][AP_Sticky_FACTION_NERAZIM] = 5; // Annihilator
abilityIndices[AP_Sticky_CLASS_IMMORTAL][AP_Sticky_FACTION_TALDARIM] = 6; // Vanguard
abilityIndices[AP_Sticky_CLASS_COLOSSUS][AP_Sticky_FACTION_AIUR] = -1; // -
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/AbilData.xml b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/AbilData.xml
index 56a243937..04c7190bb 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/AbilData.xml
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/AbilData.xml
@@ -5917,6 +5917,10 @@
+
+
+
+
@@ -6028,6 +6032,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ActorData.xml b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ActorData.xml
index 6d61660cb..17d4ec27c 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ActorData.xml
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ActorData.xml
@@ -12544,6 +12544,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ButtonData.xml b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ButtonData.xml
index c086bc95f..5bfb0b53f 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ButtonData.xml
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ButtonData.xml
@@ -2420,6 +2420,14 @@
+
+
+
+
+
+
+
+
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ModelData.xml b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ModelData.xml
index c625a186a..3d66eebd8 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ModelData.xml
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/ModelData.xml
@@ -14569,4 +14569,12 @@
+
+
+
+
+
+
+
+
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UnitData.xml b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UnitData.xml
index 1f6afde00..09a150e9b 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UnitData.xml
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UnitData.xml
@@ -12339,6 +12339,14 @@
+
+
+
+
+
+
+
+
@@ -18738,6 +18746,7 @@
+
@@ -18764,6 +18773,7 @@
+
@@ -18865,6 +18875,7 @@
+
@@ -18888,6 +18899,7 @@
+
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UpgradeData.xml b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UpgradeData.xml
index 2900e1f49..70d8bf33c 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UpgradeData.xml
+++ b/Mods/ArchipelagoPlayer.SC2Mod/Base.SC2Data/GameData/UpgradeData.xml
@@ -845,6 +845,8 @@
+
+
@@ -1089,6 +1091,8 @@
+
+
@@ -7913,6 +7917,7 @@
+
@@ -7955,6 +7960,7 @@
+
@@ -7997,6 +8003,7 @@
+
@@ -8038,6 +8045,7 @@
+
@@ -8079,6 +8087,7 @@
+
@@ -8328,6 +8337,7 @@
+
@@ -8413,6 +8423,7 @@
+
@@ -8498,6 +8509,7 @@
+
@@ -8582,6 +8594,7 @@
+
@@ -8666,6 +8679,7 @@
+
diff --git a/Mods/ArchipelagoPlayer.SC2Mod/enUS.SC2Data/LocalizedData/GameStrings.txt b/Mods/ArchipelagoPlayer.SC2Mod/enUS.SC2Data/LocalizedData/GameStrings.txt
index a47e97d51..4de22742a 100644
--- a/Mods/ArchipelagoPlayer.SC2Mod/enUS.SC2Data/LocalizedData/GameStrings.txt
+++ b/Mods/ArchipelagoPlayer.SC2Mod/enUS.SC2Data/LocalizedData/GameStrings.txt
@@ -1098,6 +1098,7 @@ Button/Name/AP_HyperjumpHercules=Tactical Jump
Button/Name/AP_Immortal=Warp In Immortal
Button/Name/AP_ImmortalAdvancedTargetingMechanics=Advanced Targeting Mechanics
Button/Name/AP_ImmortalAiur=Warp in Immortal
+Button/Name/AP_ImmortalPurifier=Warp in Stalwart
Button/Name/AP_ImmortalBarrierBase=Barrier
Button/Name/AP_ImmortalHallucination=Summon Immortal Hallucination
Button/Name/AP_ImmortalOverload=Barrier
@@ -2136,6 +2137,7 @@ Button/Tooltip/AP_HyperjumpHercules=Warps to the target location. Hercules is in
Button/Tooltip/AP_Immortal=Assault strider. Can use Barrier to absorb damage.Can attack ground units.
Button/Tooltip/AP_ImmortalAdvancedTargetingMechanics=Immortals and Annihilators can attack air units.
Button/Tooltip/AP_ImmortalAiur=Aiur FactionAssault strider. Can use Barrier to absorb damage.Can attack ground units.
+Button/Tooltip/AP_ImmortalPurifier=Assault strider. Has shields that deflect high-damage attacks.Can attack ground units.
Button/Tooltip/AP_ImmortalBarrier=Assault strider. Can use Barrier to absorb damage.Can attack ground units.
Button/Tooltip/AP_ImmortalBarrierBase=Absorbs up to damage. Lasts for seconds.
Button/Tooltip/AP_ImmortalHallucination=These hallucinated copies function like the original unit, but they cannot use active abilities, deal damage, warp in structures, or gather resources, and they die more easily. Hallucinations last before they disappear.
@@ -5004,6 +5006,7 @@ Unit/Name/AP_ZerglingRespawnControllerUnit=Zergling Reconstitution Controller Un
Unit/Name/AP_ZerglingRespawnWeapon=Zergling Reconstitution Weapon
Unit/Name/AP_Overseer=Overseer
Unit/Name/AP_OverlordCocoon=Overseer Cocoon
+Unit/Name/AP_ImmortalPurifier=Stalwart
Unit/ShieldArmorName/AP_DefensiveMatrixShields=Defensive Matrix
Unit/ShieldArmorName/AP_NovaShieldArmor=Terran Energy Shields
Unit/ShieldArmorName/AP_TerranShieldArmor=Terran Energy Shields
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B.galaxy b/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B.galaxy
index 9fe8ae606..d5b7ff9bb 100644
--- a/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B.galaxy
+++ b/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B.galaxy
@@ -1194,7 +1194,7 @@ void libABFE498B_gf_AP_Triggers_unlockProtossUnits2 (int lp_player, int lp_bitAr
libABFE498B_gf_AP_Triggers_Protoss_unlockTaldarimMothership, // 6
libABFE498B_gf_AP_Triggers_Protoss_unlockArbiter, // 7
libABFE498B_gf_AP_Triggers_Protoss_unlockOracle, // 8
- ap_triggers_PlayerConsumer_sig, // 9
+ libABFE498B_gf_AP_Triggers_Protoss_unlockStalwart, // 9
ap_triggers_PlayerConsumer_sig, // 10
ap_triggers_PlayerConsumer_sig, // 11
ap_triggers_PlayerConsumer_sig, // 12
@@ -6395,6 +6395,18 @@ void libABFE498B_gf_AP_Triggers_Protoss_unlockVanguard (int lp_player) {
}
+void libABFE498B_gf_AP_Triggers_Protoss_unlockStalwart (int lp_player) {
+ // Automatic Variable Declarations
+ // Implementation
+ if ((libABFE498B_gv_aP_Triggers_Protoss_has_Stalwart[lp_player] == false)) {
+ libABFE498B_gv_aP_Triggers_Protoss_has_Stalwart[lp_player] = true;
+ libABFE498B_gf_AP_Triggers_Protoss_unlockRoboticsFacility(lp_player);
+ TechTreeUnitAllow(lp_player, "AP_ImmortalPurifier", true);
+ libNtve_gf_SetUpgradeLevelForPlayer(lp_player, "AP_RoboFactionPurifier", 1);
+ }
+
+}
+
void libABFE498B_gf_AP_Triggers_Protoss_unlockColossusPurifier (int lp_player) {
// Automatic Variable Declarations
// Implementation
@@ -7619,6 +7631,7 @@ void libABFE498B_gf_AP_Triggers_clearProtossTech (int lp_player) {
TechTreeUnitAllow(lp_player, "AP_ImmortalAiur", false);
TechTreeUnitAllow(lp_player, "AP_ImmortalShakuras", false);
TechTreeUnitAllow(lp_player, "AP_ImmortalTaldarim", false);
+ TechTreeUnitAllow(lp_player, "AP_ImmortalPurifier", false);
TechTreeUnitAllow(lp_player, "AP_ColossusPurifier", false);
TechTreeUnitAllow(lp_player, "AP_ColossusTaldarim", false);
TechTreeUnitAllow(lp_player, "AP_Reaver", false);
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B_h.galaxy b/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B_h.galaxy
index f1d778968..e9f5067e6 100644
--- a/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B_h.galaxy
+++ b/Mods/ArchipelagoTriggers.SC2Mod/Base.SC2Data/LibABFE498B_h.galaxy
@@ -84,6 +84,7 @@ bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_WarpPrism;
bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_ImmortalAiur;
bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_Annihilator;
bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_Vanguard;
+bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_Stalwart;
bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_ColossusPurifier;
bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_Wrathwalker;
bool[21] libABFE498B_gv_aP_Triggers_Protoss_has_Reaver;
@@ -635,6 +636,7 @@ void libABFE498B_gf_AP_Triggers_Protoss_unlockWarpPrism (int lp_player);
void libABFE498B_gf_AP_Triggers_Protoss_unlockImmortalAiur (int lp_player);
void libABFE498B_gf_AP_Triggers_Protoss_unlockAnnihilator (int lp_player);
void libABFE498B_gf_AP_Triggers_Protoss_unlockVanguard (int lp_player);
+void libABFE498B_gf_AP_Triggers_Protoss_unlockStalwart (int lp_player);
void libABFE498B_gf_AP_Triggers_Protoss_unlockColossusPurifier (int lp_player);
void libABFE498B_gf_AP_Triggers_Protoss_unlockWrathwalker (int lp_player);
void libABFE498B_gf_AP_Triggers_Protoss_unlockReaver (int lp_player);
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/DocumentHeader b/Mods/ArchipelagoTriggers.SC2Mod/DocumentHeader
index c703c02f6..bbdbd1001 100644
Binary files a/Mods/ArchipelagoTriggers.SC2Mod/DocumentHeader and b/Mods/ArchipelagoTriggers.SC2Mod/DocumentHeader differ
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/GameText.version b/Mods/ArchipelagoTriggers.SC2Mod/GameText.version
index 572755164..a652f2bd1 100644
Binary files a/Mods/ArchipelagoTriggers.SC2Mod/GameText.version and b/Mods/ArchipelagoTriggers.SC2Mod/GameText.version differ
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/Triggers b/Mods/ArchipelagoTriggers.SC2Mod/Triggers
index 18f99423f..8a7fc89c4 100644
--- a/Mods/ArchipelagoTriggers.SC2Mod/Triggers
+++ b/Mods/ArchipelagoTriggers.SC2Mod/Triggers
@@ -3932,7 +3932,7 @@
libABFE498B_gf_AP_Triggers_Protoss_unlockTaldarimMothership, // 6
libABFE498B_gf_AP_Triggers_Protoss_unlockArbiter, // 7
libABFE498B_gf_AP_Triggers_Protoss_unlockOracle, // 8
- ap_triggers_PlayerConsumer_sig, // 9
+ libABFE498B_gf_AP_Triggers_Protoss_unlockStalwart, // 9
ap_triggers_PlayerConsumer_sig, // 10
ap_triggers_PlayerConsumer_sig, // 11
ap_triggers_PlayerConsumer_sig, // 12
@@ -51227,6 +51227,7 @@
+
@@ -51507,6 +51508,17 @@
false
+
+
+
+
+
+
+
+
+ false
+
+
@@ -51714,6 +51726,7 @@
+
@@ -54959,6 +54972,124 @@
false
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AP_ImmortalPurifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ AP_RoboFactionPurifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
Colossus Tier
@@ -64939,6 +65070,7 @@
+
@@ -65512,6 +65644,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AP_ImmortalPurifier
+
+
+
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/Triggers.version b/Mods/ArchipelagoTriggers.SC2Mod/Triggers.version
index 38e13b872..f3229f128 100644
Binary files a/Mods/ArchipelagoTriggers.SC2Mod/Triggers.version and b/Mods/ArchipelagoTriggers.SC2Mod/Triggers.version differ
diff --git a/Mods/ArchipelagoTriggers.SC2Mod/enUS.SC2Data/LocalizedData/TriggerStrings.txt b/Mods/ArchipelagoTriggers.SC2Mod/enUS.SC2Data/LocalizedData/TriggerStrings.txt
index 280b6f246..c6b86d81c 100644
--- a/Mods/ArchipelagoTriggers.SC2Mod/enUS.SC2Data/LocalizedData/TriggerStrings.txt
+++ b/Mods/ArchipelagoTriggers.SC2Mod/enUS.SC2Data/LocalizedData/TriggerStrings.txt
@@ -688,6 +688,7 @@ FunctionDef/Name/lib_ABFE498B_DC99237C=AP_Triggers_Zerg_UltraliskOrganicCarapace
FunctionDef/Name/lib_ABFE498B_DCBAF056=AP_Triggers_Zerg_unlockDevourer
FunctionDef/Name/lib_ABFE498B_DD02F4F8=AP_Triggers_Terran_unlockFirebatJuggernautPlating
FunctionDef/Name/lib_ABFE498B_DD51D531=AP_Triggers_Protoss_unlockWarpPrismGraviticDrive
+FunctionDef/Name/lib_ABFE498B_DD70556E=AP_Triggers_Protoss_unlockStalwart
FunctionDef/Name/lib_ABFE498B_DD8BC236=AP_Triggers_Zerg_DefilerComorbidity
FunctionDef/Name/lib_ABFE498B_DDAE95D4=AP_Triggers_unlockZergUpgrades
FunctionDef/Name/lib_ABFE498B_DEB5E002=AP_Triggers_Zerg_DevourerGapingMaw
@@ -976,6 +977,7 @@ ParamDef/Name/lib_ABFE498B_440669BE=player
ParamDef/Name/lib_ABFE498B_4454D6A1=player
ParamDef/Name/lib_ABFE498B_44A4977B=SoAPlayers
ParamDef/Name/lib_ABFE498B_44B05D8E=player
+ParamDef/Name/lib_ABFE498B_44BFF159=player
ParamDef/Name/lib_ABFE498B_451C4E77=player
ParamDef/Name/lib_ABFE498B_452AABC9=player
ParamDef/Name/lib_ABFE498B_4565F190=player
@@ -1657,6 +1659,7 @@ Variable/Name/lib_ABFE498B_A4361B8E=armory6Value
Variable/Name/lib_ABFE498B_A54B32FA=abilityValue
Variable/Name/lib_ABFE498B_A613AA23=upgradeLevels
Variable/Name/lib_ABFE498B_A93B0EB8=currentUnit
+Variable/Name/lib_ABFE498B_A9B1AAB5=AP_Triggers_Protoss_has_Stalwart
Variable/Name/lib_ABFE498B_AA6D36F6=difficulty
Variable/Name/lib_ABFE498B_AAD2978F=AP_Triggers_Option_SoAPresenceNoBuild
Variable/Name/lib_ABFE498B_AC7E9244=AP_Triggers_Protoss_has_Havoc