- Collect Spider Gems dropped by enemy spider minions and Heroes, then turn them in at the Spider Queen's Altars.
- Hitting the gem threshold summons three Webweavers, one per lane.
- The threshold starts at 50 Gems, goes up by 5 per activation, and caps at 80.
- Webweavers spawn 15 seconds after turn-in. They lose Health over time, use Death Wave, and summon Cryptcrawlers.
Objective Timers
| Event | Duration | Seconds | Source |
|---|---|---|---|
| First Altar Activation | 3:00 | 180s | libMSOC_gv_mMTombSpiderQueenTreasureChestEventDelay_C |
| Altar Reactivation after all Webweavers die | 0:15 | 15s | libMSOC_gv_mMTombSpiderQueenPostAuraWaitTime_C |
| Webweaver Summon Delay | 0:15 | 15s | libMSOC_gv_mMTombSpiderQueenSoulEaterSummonTime |
Units
Webweaver
- HP
- 8000
- Speed
- 3
Scaling
- Life
- +74/min 1-5, +111/min 6-10, +148/min 11-15, +185/min 16-20, +222/min 21+
- Basic damage
- +4/min 1-5, +6/min 6-10, +8/min 11-15, +10/min 16-20, +12/min 21+
Abilities
- QSpawn Minions
SoulEaterSpawnMinionsSpawn 3 minions for the Soul Eater.
- WDeath Wave
SoulEaterDeathWave
Weapons
| ID | Damage | Period | Range |
|---|---|---|---|
SoulEaterRangedWeapon | 80 | 2s | — |
SoulEaterRangedWeaponAITargetStructure | 80 | 2s | — |
Cryptcrawler
- HP
- 900
- Speed
- 3.5
Scaling
- Life
- +10/min 1-5, +15/min 6-10, +20/min 11-15, +25/min 16-20, +30/min 21+
- Basic damage
- +4/min 1-5, +6/min 6-10, +8/min 11-15, +10/min 16-20, +12/min 21+
Weapons
| ID | Damage | Period | Range |
|---|---|---|---|
SoulEaterMinionWeapon | 80 | 1s | 1 |
SoulEaterMinionWeaponAITargetStructure | 80 | 1s | 1 |
Gem Turn-In and Escalating Cost
Each team has its own Gem counter. Heroes turn in Gems at the Spider Queen's Altars. The threshold starts at 50 Gems, goes up by 5 after each Webweaver wave, and caps at 80.
// Constants
const string libMSOC_gv_mMTombSpiderQueenMechanicName_C = "TombOfTheSpiderQueen";
const int libMSOC_gv_mMTombSpiderQueenCount_C = 2;
const fixed libMSOC_gv_mMTombSpiderQueenAuraDuration_C = 70.0;
const fixed libMSOC_gv_mMTombSpiderQueenPostAuraWaitTime_C = 15.0;
const fixed libMSOC_gv_mMTombSpiderQueenSpawnTimer_C = 30.0;
const fixed libMSOC_gv_mMTombSpiderQueenInitialStatueTimer_C = 0.0;
const fixed libMSOC_gv_mMTombSpiderQueenInteractTime_C = 2.0;
const int libMSOC_gv_mMTombSpiderQueenActivationAmountStart_C = 50;
const int libMSOC_gv_mMTombSpiderQueenActivationAmountIncrement_C = 5;
const int libMSOC_gv_mMTombSpiderQueenActivationAmountCap_C = 80;
const int libMSOC_gv_mMTombSpiderQueenGemCap_C = 200;
const int libMSOC_gv_mMTombSpiderQueenHeroGem_C = 3;
const int libMSOC_gv_mMTombSpiderQueenMinionPriest_C = 1;
const int libMSOC_gv_mMTombSpiderQueenSiegeGiant_C = 2;
const int libMSOC_gv_mMTombSpiderQueenKnight_C = 4;
const int libMSOC_gv_mMTombSpiderQueenGolem_C = 5;
Webweaver Wave
When a team turns in enough Gems, three Webweavers spawn 15 seconds later, one per lane. They lose Health over time, use Death Wave, and periodically summon Cryptcrawlers.
}
libMSOC_gf_MMTombSpiderQueenAnimationHandlerMain(libMSOC_ge_MMTombSpiderQueenAnimStates_EventStart);
SoundPlayForPlayer(SoundLink("Event_LuxCrypt_SpiderCurse_Curse_Start", -1), c_maxPlayers, PlayerGroupAll(), 100.0, 0.0);
SoundChannelMute(PlayerGroupAll(), c_soundCategoryAmbient, true);
SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
libSond_gf_SoundtrackApplyNewDefaultSoundtrackForPlayerGroup("MX_LuxCrypt_CurseActive", PlayerGroupAll());
libMSOC_gf_MMTombSpiderQueenTransmissionSoulEatersSpawnQ(lv_soulEaterTeam);
TriggerEnable(libMSOC_gt_MMTombSpiderQueenSoulEaterImpactsATarget, true);
lv_itSpawnLocation = 1;
for ( ; ( (autoCEBBB573_ai >= 0 && lv_itSpawnLocation <= autoCEBBB573_ae) || (autoCEBBB573_ai < 0 && lv_itSpawnLocation >= autoCEBBB573_ae) ) ; lv_itSpawnLocation += autoCEBBB573_ai ) {
libNtve_gf_CreateUnitsWithDefaultFacing(1, "SoulEater", c_unitCreateIgnorePlacement, libGame_gf_ComputerPlayerInTeam(lv_soulEaterTeam), libMSOC_gv_mMTombSpiderQueenSoulEaterSpawnPoints[lv_soulEaterTeam][lv_itSpawnLocation], null);
libMSOC_gv_mMTombSpiderQueenSoulEaters[lv_itSpawnLocation] = UnitLastCreated();
libMSOC_gv_mMTombSpiderQueenQueensBirthing[lv_itSpawnLocation] = UnitLastCreated();
libGame_gf_CalculateSpawnedMinionGoalPoints(UnitGetOwner(UnitLastCreated()), UnitGetPosition(UnitLastCreated()));
libAIAI_gf_MinionAIStartMinionAI(-1, UnitLastCreated(), libGame_gv_spawnedMinionLane, libGame_gv_spawnedMinionFirstWaypointIndex, false, false, false, 0, true);
}
libMSOC_gv_mMTombSpiderQueen[lv_soulEaterTeam].lv_summoning = false;
libMSOC_gf_MMTombSpiderQueenSoulEaterLifeMonitor();
return true;
}
Timer Source
libmsoc_h.galaxy — constants
const fixed libMSOC_gv_mMTombSpiderQueenPostAuraWaitTime_C = 15.0;
const fixed libMSOC_gv_mMTombSpiderQueenTreasureChestEventDelay_C = 180.0;
const fixed libMSOC_gv_mMTombSpiderQueenSoulEaterSummonTime = 15.0;
libmsoc.galaxy — timer start
libMSOC_gv_mMTombSpiderQueen[lv_soulEaterTeam].lv_active = true;
libMSOC_gv_mMTombSpiderQueen[lv_soulEaterTeam].lv_summoning = true;
SoundPlayForPlayer(SoundLink("Event_LuxCrypt_SpiderCurse_Curse_Release_Start", -1), c_maxPlayers, PlayerGroupAll(), 100.0, 0.0);
SoundPlayForPlayer(SoundLink("Event_LuxCrypt_SpiderCurse_Curse_Amb", -1), c_maxPlayers, PlayerGroupAll(), 100.0, 0.0);
SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
libSond_gf_SoundtrackApplyNewDefaultSoundtrackForPlayerGroup("MX_LuxCrypt_ReleaseStart", PlayerGroupAll());
TimerStart(libMSOC_gv_mMTombSpiderQueenSoulEaterSummonTimer, libMSOC_gv_mMTombSpiderQueenSoulEaterSummonTime, false, c_timeGame);
libMapM_gf_JungleStartHibernateCamps();
while (true) {
if ((TimerGetRemaining(libMSOC_gv_mMTombSpiderQueenSoulEaterSummonTimer) == 0.0)) {
auto2DFF501F_ae = libMSOC_gv_mMTombSpiderQueenSoulEatersMaxCount_C;
lv_itSoulEater = 1;
for ( ; lv_itSoulEater <= auto2DFF501F_ae ; lv_itSoulEater += 1 ) {
// ...
libMSOC_gf_MMTombSpiderQueenTurnInPointTeamColor(0);
libGame_gf_SpecialLightingEventEnd("StormSoulEaterSpawnFinal", PlayerGroupAll(), 2.0);
if ((libMSOC_gv_mMTombSpiderQueenDisableEvent == true)) {
return true;
}
TimerStart(libMSOC_gv_mMTombSpiderQueenWaitTimer, libMSOC_gv_mMTombSpiderQueenPostAuraWaitTime_C, false, c_timeGame);
TimerStart(libMSOC_gv_mMTombSpiderQueenAnimationHandlerTimer, libMSOC_gv_mMTombSpiderQueenAnimationHandlerTime, false, c_timeGame);
TextTagCreate(StringToText(""), 36, PointWithOffset(PointFromId(277), 0.0, 2.0), 0.5, true, false, PlayerGroupAll());
lv_waitTimerTop = TextTagLastCreated();
TextTagCreate(StringToText(""), 36, PointWithOffset(PointFromId(231), 0.0, 2.0), 0.5, true, false, PlayerGroupAll());
lv_waitTimerBottom = TextTagLastCreated();
libNtve_gf_SetDialogItemText(libMSOC_gv_mMTombSpiderQueenPanel.lv_theCryptsSoulEaterCooldownLabel, TextTimeFormat(StringToText("<mintotal/>:<sec2/>"), FixedToInt(TimerGetRemaining(libMSOC_gv_mMTombSpiderQueenWaitTimer))), PlayerGroupAll());
Source Files
- libmsoc.galaxy
- libmsoc_h.galaxy
- tombofthespiderqueen.stormmod/abildata.xml
- tombofthespiderqueen.stormmod/behaviordata.xml
- tombofthespiderqueen.stormmod/buttondata.xml
- tombofthespiderqueen.stormmod/effectdata.xml
- tombofthespiderqueen.stormmod/goaldata.xml
- tombofthespiderqueen.stormmod/mapdata.xml
- tombofthespiderqueen.stormmod/moverdata.xml
- tombofthespiderqueen.stormmod/unitdata.xml
- tombofthespiderqueen.stormmod/userdata.xml
- tombofthespiderqueen.stormmod/validatordata.xml
- tombofthespiderqueen.stormmod/weapondata.xml