Haunted Mines

Wiki
  • Underground mines open periodically. Both teams descend to fight undead monsters and collect Cursed Skulls.
  • Risen Miners drop 2 Cursed Skulls each; the underground Grave Golem drops up to 38 skulls across its HP thresholds.
  • Each team is capped at 55 Cursed Skulls; the mine phase ends when either team reaches that cap.
  • Both teams spawn a Grave Golem, whose strength scales with the number of skulls collected by its team.
  • Later mine events begin after both lane Golems have died.

Objective Timers

EventDurationSecondsSource
First Mine Warning2:30150slibMHtM_gv_mMUnderworldStartTime_C
Mine Cooldown1:3090slibMHtM_gv_mMUnderworldEventCooldown_C
Prep Phase0:3030slibMHtM_gv_mMUnderworldPrepDuration_C
Golem Summon Delay0:3030slibMHtM_gv_mMUnderworldSummonedBossDuration_C

Skull Collection

Heroes collect Cursed Skulls in the underground mine. Risen Miners drop 2 Cursed Skulls each; the underground Grave Golem drops skulls progressively at 75%, 50%, and 25% Health, then drops the rest on death. Each team is capped at 55 Cursed Skulls, and the mine phase ends as soon as either team reaches that cap.


int libMHtM_gf_MMUnderworldSkullCollected () {
    // Variable Declarations
    int lv_itGroupIndex;

    // Automatic Variable Declarations
    // Variable Initialization

    // Implementation
    return (libMHtM_gv_mMUnderworldSkullCollected[1] + libMHtM_gv_mMUnderworldSkullCollected[2]);
}

bool libMHtM_gf_MMUnderworldCleared () {
    // Variable Declarations
    int lv_skullsCollectedTeam1;
    int lv_skullsCollectedTeam2;

    // Automatic Variable Declarations
    // Variable Initialization

    // Implementation
    if (((libMHtM_gv_mMUnderworldSkullCollected[1] >= libMHtM_gv_mMUnderworldTotalSkulls_C) || (libMHtM_gv_mMUnderworldSkullCollected[2] >= libMHtM_gv_mMUnderworldTotalSkulls_C))) {
        return true;
    }
    else {
        return false;
    }
}

trigger auto_libMHtM_gf_MMUnderworldSpawnMonsters_Trigger = null;

// ...

    TriggerExecute(libMHtM_gt_MMHMSummonedBossUIBar, true, false);
    while (!(((UnitIsAlive(libMHtM_gv_mMUnderworldSummonedBoss[1]) == true) || (UnitIsAlive(libMHtM_gv_mMUnderworldSummonedBoss[2]) == true)))) {
        Wait(0.0625, c_timeGame);
    }
    SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
    libSond_gf_SoundtrackApplyNewDefaultSoundtrackForPlayerGroup("Storm_Music_Mines_Golems_Event", PlayerGroupAll());
    if ((libMHtM_gv_mMUnderworldSummonedBossRevive == false)) {
        libMHtM_gv_mMUnderworldSummonedBossRevive = true;
        if (((libMHtM_gv_mMUnderworldSkullCollected[1] - libMHtM_gv_mMUnderworldSkullCollected[2]) >= 5)) {
            libMHtM_gf_MMUnderworldTransmissionGolemSummonedQ(1);
        }
        else if (((libMHtM_gv_mMUnderworldSkullCollected[1] - libMHtM_gv_mMUnderworldSkullCollected[2]) <= -5)) {
            libMHtM_gf_MMUnderworldTransmissionGolemSummonedQ(2);
        }
        else if (true) {
            libMHtM_gf_MMUnderworldTransmissionGolemSummonedQ(0);
        }
    }
    else {
        if (((libMHtM_gv_mMUnderworldSkullCollected[1] - libMHtM_gv_mMUnderworldSkullCollected[2]) >= 5)) {
            libMHtM_gf_MMUnderworldTransmissionGolemRevivedQ(1);
        }
        else if (((libMHtM_gv_mMUnderworldSkullCollected[1] - libMHtM_gv_mMUnderworldSkullCollected[2]) <= -5)) {
            libMHtM_gf_MMUnderworldTransmissionGolemRevivedQ(2);
        }
        else if (true) {
            libMHtM_gf_MMUnderworldTransmissionGolemRevivedQ(0);
        }
    }
}


// ...

    UnitSetState(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], c_unitStateTargetable, false);
    libNtve_gf_MakeUnitInvulnerable(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], true);
    UnitSetState(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], c_unitStateSelectable, false);
    UnitSetState(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], c_unitStateStatusBar, false);
    libMHtM_gf_MMUnderworldApplySummonedBossScaling(lp_team, false);
    libGame_gf_SendEventMapHauntedMinesBossSummoned(UnitLastCreated());
    StatEventCreate("HauntedMinesGolemsSpawned");
    StatEventAddDataFixed(StatEventLastCreated(), "TeamID", lp_team);
    StatEventAddDataFixed(StatEventLastCreated(), "SkullCount", libMHtM_gv_mMUnderworldSkullCollected[lp_team]);
    StatEventAddDataFixed(StatEventLastCreated(), "GameTime", libUIUI_gf_HeroesGameTime());
    StatEventSend(StatEventLastCreated());
    Wait(1.0, c_timeGame);
    if ((lv_effect != null)) {
        libNtve_gf_KillModel(lv_effect);
    }

    Wait(1.0, c_timeGame);

// ...

    else {
        libMHtM_gf_MMUnderworldChangeAmbience("Ambient_Underworld_Mines", null, PlayerGroupSingle(lp_player));
    }
}

bool libMHtM_gf_MMUnderworldSummonedBossBetter (int lp_team) {
    // Automatic Variable Declarations
    // Implementation
    if ((libMHtM_gv_mMUnderworldSkullCollected[lp_team] >= ((libMHtM_gv_mMUnderworldSkullTotal + 0) / 2))) {
        return true;
    }

    return false;
}

void libMHtM_gf_MMUnderworldApplySummonedBossScaling (int lp_team, bool lp_displayNumber) {
    // Variable Declarations

// ...

    // Variable Initialization

    // Implementation
    if ((libMHtM_gv_mMUnderworldScalingTick == 0)) {
        libMHtM_gv_mMUnderworldScalingTick = libGame_gv_scalingTicks;
    }

    libGame_gf_UpdateScalingForUnit(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], libMHtM_gv_mMUnderworldScalingTick, 0);
    UnitBehaviorAdd(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], "UnderworldBossSkullStacks", libMHtM_gv_mMUnderworldSummonedBoss[lp_team], FixedToInt((-0.0054*libMHtM_gv_mMUnderworldSkullCollected[lp_team]*libMHtM_gv_mMUnderworldSkullCollected[lp_team]+1.2913*libMHtM_gv_mMUnderworldSkullCollected[lp_team])));
    lv_enemyTeam = libGame_gf_EnemyTeam(lp_team);
    if ((libMHtM_gf_MMUnderworldSummonedBossBetter(lp_team) == true)) {
        libNtve_gf_SendActorMessageToUnit(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], "ModelSwap UnderworldSummonedBossBetter 1");
        lv_sizeScale = 120.0;
        UnitSetScale(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], lv_sizeScale, lv_sizeScale, lv_sizeScale);
    }
    else {
        if ((libMHtM_gf_MMUnderworldSummonedBossBetter(lv_enemyTeam) == true)) {

// ...

    // Variable Declarations
    int lv_indexTeam;
    int lv_indexTeamEnemy;

    // Automatic Variable Declarations
    // Variable Initialization

    // Implementation
    libUIUI_gf_MapMechanicsHauntedMinesSetSkullCountForTeam(libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamOrderIndex_C], libGame_gv_teamOrderIndex_C);
    libUIUI_gf_MapMechanicsHauntedMinesSetSkullCountForTeam(libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamChaosIndex_C], libGame_gv_teamChaosIndex_C);
    libUIUI_gf_MapMechanicsHauntedMinesSetSkullsRemaining((libMHtM_gv_mMUnderworldTotalSkulls_C));
}

trigger auto_libMHtM_gf_MMUnderworldTransmissionUnderworldOpeningFirstQ_Trigger = null;

void libMHtM_gf_MMUnderworldTransmissionUnderworldOpeningFirstQ () {
    if (auto_libMHtM_gf_MMUnderworldTransmissionUnderworldOpeningFirstQ_Trigger == null) {
        auto_libMHtM_gf_MMUnderworldTransmissionUnderworldOpeningFirstQ_Trigger = TriggerCreate("auto_libMHtM_gf_MMUnderworldTransmissionUnderworldOpeningFirstQ_TriggerFunc");

// ...

    auto1F59D3D4_g = libMHtM_gv_mMUnderworldGatesAbove;
    auto1F59D3D4_u = UnitGroupCount(auto1F59D3D4_g, c_unitCountAll);
    for (;; auto1F59D3D4_u -= 1) {
        lv_itGate = UnitGroupUnitFromEnd(auto1F59D3D4_g, auto1F59D3D4_u);
        if (lv_itGate == null) { break; }
        ActorCreate(ActorScopeFromUnit(lv_itGate), "UI_Game_Ping_Mines_Ready", null, null, null);
    }
    TriggerExecute(libMHtM_gt_MMHMPingGatesWhileEventinProgress, true, false);
    libMHtM_gv_mMUnderworldSkullCollected[1] = 0;
    libMHtM_gv_mMUnderworldSkullCollected[2] = 0;
    libMHtM_gf_MMUnderworldSpawnMonsters();
    TriggerEnable(libMHtM_gt_MMHMPlayerMovesCamera, true);
    while (true) {
        if ((libMHtM_gf_MMUnderworldCleared() == true)) {
            TriggerExecute(libMHtM_gt_MMHMMinesCleared, true, false);
            return true;
        }


// ...

    // Automatic Variable Declarations
    // Variable Initialization
    lv_dyingMonster = EventUnit();
    lv_killingPlayer = libNtve_gf_KillingPlayer();
    lv_groupIndex = libMHtM_gf_MMUnderworldMineMinionGroupIndex(lv_dyingMonster);

    // Conditions
    if (testConds) {
        if (!((libMHtM_gv_mMUnderworldSkullCollected[1] < libMHtM_gv_mMUnderworldTotalSkulls_C))) {
            return false;
        }

        if (!((libMHtM_gv_mMUnderworldSkullCollected[2] < libMHtM_gv_mMUnderworldTotalSkulls_C))) {
            return false;
        }

        if (!(((UnitGetType(lv_dyingMonster) == "UnderworldMinion") || (UnitGetType(lv_dyingMonster) == "UnderworldRangedMinion") || (UnitGetType(lv_dyingMonster) == "UnderworldBoss")))) {
            return false;
        }
    }


// ...

    lv_collectingPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);
    lv_textTagPlayers = PlayerGroupEmpty();

    // Actions
    if (!runActions) {
        return true;
    }

    libMHtM_gv_mMUnderworldSkullCollected[libGame_gf_TeamNumberOfPlayer(lv_collectingPlayer)] += 1;
    libMHtM_gv_mMUnderworldSkullCollected[libGame_gf_TeamNumberOfPlayer(lv_collectingPlayer)] = MinI(libMHtM_gv_mMUnderworldSkullCollected[libGame_gf_TeamNumberOfPlayer(lv_collectingPlayer)], libMHtM_gv_mMUnderworldTotalSkulls_C);
    lv_alliedSkullCount = libMHtM_gv_mMUnderworldSkullCollected[libGame_gf_TeamNumberOfPlayer(lv_collectingPlayer)];
    SoundPlayAtPointForPlayer(SoundLink("UI_Game_Skull_Pickup", -1), c_maxPlayers, PlayerGroupAll(), lv_collectingUnitPosition, 0.5, 100.0, 0.0);
    libNtve_gf_AddPlayerGroupToPlayerGroup(libGame_gf_AlliedPlayerGroupOfPlayer(lv_collectingPlayer), lv_textTagPlayers);
    PlayerGroupAdd(lv_textTagPlayers, libCore_gv_oBSERVER_ObserverUIPlayer);
    TextTagCreate(StringExternal("Param/Value/lib_MHtM_B3F82875"), 24, lv_collectingUnitPosition, 1.0, true, true, lv_textTagPlayers);
    TextTagSetVelocity(TextTagLastCreated(), 1.5, 90.0);
    TextTagSetTime(TextTagLastCreated(), c_textTagTimeDuration, 3.0);
    TextTagSetFogVisibility(TextTagLastCreated(), c_visTypeFog);
    TextTagCreate(StringExternal("Param/Value/lib_MHtM_977047CE"), 24, lv_collectingUnitPosition, 1.0, true, true, libGame_gf_EnemyPlayerGroupOfPlayer(lv_collectingPlayer));
    TextTagSetVelocity(TextTagLastCreated(), 1.5, 90.0);
    TextTagSetTime(TextTagLastCreated(), c_textTagTimeDuration, 3.0);
    TextTagSetFogVisibility(TextTagLastCreated(), c_visTypeFog);
    libGame_gf_SendEventMapHauntedMinesSkullCollected(libMHtM_gv_mMUnderworldSkullCollected[1], libMHtM_gv_mMUnderworldSkullCollected[2], lv_collectingPlayer);
    if (((libMHtM_gv_mMUnderworldSkullCollected[1] + libMHtM_gv_mMUnderworldSkullCollected[2]) >= libMHtM_gv_mMUnderworldSkullTotal) && (lv_alliedSkullCount >= 80)) {
        Wait(6.0, c_timeGame);
        libGame_gf_SendEventMapObjectiveCapturedByUnit(lv_collectingUnit);
    }

    return true;
}

//--------------------------------------------------------------------------------------------------

// ...

        UnitRemove(libMHtM_gv_mMUnderworldBoss);
        PingDestroy(libCore_gf_PingStoredForUnit(libMHtM_gv_mMUnderworldBoss, 1));
    }
    lv_team = libGame_gf_TeamNumberOfPlayer(EventPlayer());
    if (((lv_team < 1) || (lv_team > 2))) {
        lv_team = 1;
    }

    libMHtM_gv_mMUnderworldSkullCollected[lv_team] = StringToInt(StringWord(EventChatMessage(false), 2));
    libMHtM_gv_mMUnderworldSkullCollected[libGame_gf_EnemyTeam(lv_team)] = (libMHtM_gv_mMUnderworldSkullTotal - libMHtM_gv_mMUnderworldSkullCollected[lv_team]);
    return true;
}

//--------------------------------------------------------------------------------------------------
void libMHtM_gt_MMHMDebugUnderworldClear_Init () {
    libMHtM_gt_MMHMDebugUnderworldClear = TriggerCreate("libMHtM_gt_MMHMDebugUnderworldClear_Func");
    TriggerEnable(libMHtM_gt_MMHMDebugUnderworldClear, false);
    TriggerAddEventChatMessage(libMHtM_gt_MMHMDebugUnderworldClear, c_playerAny, "MINECLEAR", false);

// ...

        return true;
    }

    libMHtM_gv_mMUnderworldSummonedBoss[1] = UnitGroupUnit(UnitGroupSelected(1), 1);
    autoD805E682_ae = StringToInt(StringWord(EventChatMessage(false), 2));
    lv_indexMin = 1;
    for ( ; ( (autoD805E682_ai >= 0 && lv_indexMin <= autoD805E682_ae) || (autoD805E682_ai < 0 && lv_indexMin >= autoD805E682_ae) ) ; lv_indexMin += autoD805E682_ai ) {
    }
    libMHtM_gv_mMUnderworldSkullCollected[1] = StringToInt(StringWord(EventChatMessage(false), 3));
    libMHtM_gv_mMUnderworldSkullCollected[2] = (100 - libMHtM_gv_mMUnderworldSkullCollected[1]);
    libMHtM_gf_MMUnderworldApplySummonedBossScaling(1, true);
    return true;
}

//--------------------------------------------------------------------------------------------------
void libMHtM_gt_MMHMDebugSummonBossScaling_Init () {
    libMHtM_gt_MMHMDebugSummonBossScaling = TriggerCreate("libMHtM_gt_MMHMDebugSummonBossScaling_Func");
    TriggerEnable(libMHtM_gt_MMHMDebugSummonBossScaling, false);

// ...

        UnitSetState(UnitLastCreated(), c_unitStateSelectable, false);
        UnitSetState(UnitLastCreated(), c_unitStateHighlightable, false);
        UnitSetState(UnitLastCreated(), c_unitStateDetectable, false);
        UnitSetState(UnitLastCreated(), c_unitStateCursorable, false);
        UnitSetPropertyFixed(UnitLastCreated(), c_unitPropLifeMax, 2000.0);
    }
    UnitSetPropertyFixed(lv_tempGolems[1], c_unitPropLifePercent, 0.1);
    UnitSetPropertyFixed(lv_tempGolems[2], c_unitPropLifePercent, 0.1);
    libUIUI_gf_MapMechanicsHauntedMinesSetUpGolemForTeam(lv_tempGolems[libGame_gv_teamOrderIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamOrderIndex_C], libGame_gv_teamOrderIndex_C);
    libUIUI_gf_MapMechanicsHauntedMinesSetUpGolemForTeam(lv_tempGolems[libGame_gv_teamChaosIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamChaosIndex_C], libGame_gv_teamChaosIndex_C);
    libUIUI_gf_MapMechanicsHauntedMinesSetUpGolemForObserver(lv_tempGolems[libGame_gv_teamOrderIndex_C], lv_tempGolems[libGame_gv_teamChaosIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamOrderIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamChaosIndex_C]);
    libUIUI_gf_MapMechanicsHauntedMinesSetMode(libUIUI_ge_MapMechanicsHauntedMinesModes_Golem);
    while (true) {
        lv_current = (TimerGetElapsed(lv_summonTimer)*100/TimerGetDuration(lv_summonTimer));
        if ((lv_current > 0.1)) {
            UnitSetPropertyFixed(lv_tempGolems[1], c_unitPropLifePercent, lv_current);
            UnitSetPropertyFixed(lv_tempGolems[2], c_unitPropLifePercent, lv_current);
        }


// ...

        if ((TimerGetRemaining(lv_summonTimer) == 0.0)) {
            break;
        }

    }
    while (!(((UnitIsAlive(libMHtM_gv_mMUnderworldSummonedBoss[1]) == true) && (UnitIsAlive(libMHtM_gv_mMUnderworldSummonedBoss[2]) == true)))) {
        Wait(0.25, c_timeGame);
    }
    libUIUI_gf_MapMechanicsHauntedMinesSetUpGolemForTeam(libMHtM_gv_mMUnderworldSummonedBoss[libGame_gv_teamOrderIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamOrderIndex_C], libGame_gv_teamOrderIndex_C);
    libUIUI_gf_MapMechanicsHauntedMinesSetUpGolemForTeam(libMHtM_gv_mMUnderworldSummonedBoss[libGame_gv_teamChaosIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamChaosIndex_C], libGame_gv_teamChaosIndex_C);
    libUIUI_gf_MapMechanicsHauntedMinesSetUpGolemForObserver(libMHtM_gv_mMUnderworldSummonedBoss[libGame_gv_teamOrderIndex_C], libMHtM_gv_mMUnderworldSummonedBoss[libGame_gv_teamChaosIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamOrderIndex_C], libMHtM_gv_mMUnderworldSkullCollected[libGame_gv_teamChaosIndex_C]);
    UnitRemove(lv_tempGolems[1]);
    UnitRemove(lv_tempGolems[2]);
    return true;
}

//--------------------------------------------------------------------------------------------------
void libMHtM_gt_MMHMSummonedBossUIBar_Init () {
    libMHtM_gt_MMHMSummonedBossUIBar = TriggerCreate("libMHtM_gt_MMHMSummonedBossUIBar_Func");

Golem Power Scaling

Each team's Grave Golem scales with the number of Cursed Skulls that team collected.



    // Automatic Variable Declarations
    // Variable Initialization

    // Implementation
    if ((libMHtM_gv_mMUnderworldScalingTick == 0)) {
        libMHtM_gv_mMUnderworldScalingTick = libGame_gv_scalingTicks;
    }

    libGame_gf_UpdateScalingForUnit(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], libMHtM_gv_mMUnderworldScalingTick, 0);
    UnitBehaviorAdd(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], "UnderworldBossSkullStacks", libMHtM_gv_mMUnderworldSummonedBoss[lp_team], FixedToInt((-0.0054*libMHtM_gv_mMUnderworldSkullCollected[lp_team]*libMHtM_gv_mMUnderworldSkullCollected[lp_team]+1.2913*libMHtM_gv_mMUnderworldSkullCollected[lp_team])));
    lv_enemyTeam = libGame_gf_EnemyTeam(lp_team);
    if ((libMHtM_gf_MMUnderworldSummonedBossBetter(lp_team) == true)) {
        libNtve_gf_SendActorMessageToUnit(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], "ModelSwap UnderworldSummonedBossBetter 1");
        lv_sizeScale = 120.0;
        UnitSetScale(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], lv_sizeScale, lv_sizeScale, lv_sizeScale);
    }
    else {
        if ((libMHtM_gf_MMUnderworldSummonedBossBetter(lv_enemyTeam) == true)) {
            lv_sizeScale = 90.0;
            UnitSetScale(libMHtM_gv_mMUnderworldSummonedBoss[lp_team], lv_sizeScale, lv_sizeScale, lv_sizeScale);

Timer Source

libmhtm_h.galaxy — constants

const fixed libMHtM_gv_mMUnderworldStartTime_C = 150.0;
const fixed libMHtM_gv_mMUnderworldEventCooldown_C = 90.0;
const fixed libMHtM_gv_mMUnderworldPrepDuration_C = 30.0;
const fixed libMHtM_gv_mMUnderworldSummonedBossDuration_C = 30.0;

libmhtm.galaxy — timer start

        libNtve_gf_CreateUnitsWithDefaultFacing(1, "UnderworldSummonedBossBody", c_unitCreateIgnorePlacement, libGame_gf_ComputerPlayerInTeam(libGame_gv_teamOrderIndex_C), libMHtM_gv_mMUnderworldSummonedBossLocation[libGame_gv_teamOrderIndex_C], null);
        libMHtM_gv_mMUnderworldSummonedBossBody[libGame_gv_teamOrderIndex_C] = UnitLastCreated();
        libNtve_gf_CreateUnitsWithDefaultFacing(1, "UnderworldSummonedBossBody", c_unitCreateIgnorePlacement, libGame_gf_ComputerPlayerInTeam(libGame_gv_teamChaosIndex_C), libMHtM_gv_mMUnderworldSummonedBossLocation[libGame_gv_teamChaosIndex_C], null);
        libMHtM_gv_mMUnderworldSummonedBossBody[libGame_gv_teamChaosIndex_C] = UnitLastCreated();
    }

    TimerStart(libMHtM_gv_mMUnderworldPrepTimer, libMHtM_gv_mMUnderworldPrepDuration_C, false, c_timeGame);
}

unit libMHtM_gf_MMUnderworldPlayerHeroUnit (int lp_player) {
    // Automatic Variable Declarations
    // Implementation
    if ((libGame_gv_players[lp_player].lv_activeVehicle != null) && (UnitIsAlive(libGame_gv_players[lp_player].lv_activeVehicle) == true)) {

// ...

    else if (auto65E2544A_val == 2) {
        libCore_gf_CreateMinimapPingStorm(libCore_gv_playerGroupFromPlayer[libCore_gv_oBSERVER_ObserverUIPlayer], "StormAlert", libMHtM_gv_mMUnderworldSummonedBossLocation[lp_team], libCore_gv_cOLOREnemyColor, 0.0);
        lv_pingPreSpawnObserver = PingLastCreated();
    }
    else {
    }
    Wait(libMHtM_gv_mMUnderworldSummonedBossDuration_C, c_timeGame);
    PingDestroy(lv_pingPreSpawn1);
    PingDestroy(lv_pingPreSpawn2);
    PingDestroy(lv_pingPreSpawnObserver);
    UnitRemove(libMHtM_gv_mMUnderworldSummonedBossBody[lp_team]);
    libMHtM_gv_mMUnderworldSummonedBossBody[lp_team] = null;
    libNtve_gf_UnitCreateFacingPoint(1, "UnderworldSummonedBoss", c_unitCreateIgnorePlacement, libGame_gf_ComputerPlayerInTeam(lp_team), libMHtM_gv_mMUnderworldSummonedBossLocation[lp_team], UnitGetPosition(libGame_gv_teams[lv_enemyTeam].lv_core), null);

// ...


    // Automatic Variable Declarations
    // Implementation
    SoundPlayAtPointForPlayer(SoundLink("Event_Mines_Boss_Summon_Start", -1), c_maxPlayers, PlayerGroupAll(), libMHtM_gv_mMUnderworldSummonedBossLocation[lp_team], 1.0, 100.0, 0.0);
    Wait(SoundLengthSync(SoundLink("Event_Mines_Boss_Summon_Start", -1)), c_timeGame);
    SoundPlayAtPointForPlayer(SoundLink("Event_Mines_Boss_Summon_Loop", -1), c_maxPlayers, PlayerGroupAll(), libMHtM_gv_mMUnderworldSummonedBossLocation[lp_team], 1.0, 100.0, 0.0);
    Wait((libMHtM_gv_mMUnderworldSummonedBossDuration_C - SoundLengthSync(SoundLink("Event_Mines_Boss_Summon_Start", -1))), c_timeGame);
    SoundStop(SoundLastPlayed(), true);
    SoundPlayForPlayer(SoundLink("Event_Mines_Boss_Summon_End", -1), c_maxPlayers, libGame_gf_PlayersOnTeamHeroes(lp_team, false), 100.0, 0.0);
    return true;
}

void libMHtM_gf_MMUnderworldChangeAmbience (string lp_ambience, string lp_reverb, playergroup lp_players) {

// ...

    // Actions
    if (!runActions) {
        return true;
    }

    TriggerEnable(TriggerGetCurrent(), false);
    Wait(libMHtM_gv_mMUnderworldStartTime_C, c_timeGame);
    libMHtM_gf_MMUnderworldPrepare();
    return true;
}

//--------------------------------------------------------------------------------------------------
void libMHtM_gt_MMHMGatesOpened_Init () {

// ...

    }

    if ((UnitIsAlive(libMHtM_gv_mMUnderworldSummonedBoss[1]) == false) && (UnitIsAlive(libMHtM_gv_mMUnderworldSummonedBoss[2]) == false)) {
        libMHtM_gf_MMUnderworldTransmissionGolemDefeatedQ();
        SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
        libSond_gf_SoundtrackPlayMapSoundtrackAsDefaultSoundtrackForAllPlayers();
        TimerStart(libMHtM_gv_mMHM_EventCooldownTimer, (libMHtM_gv_mMUnderworldEventCooldown_C - 12.0), false, c_timeGame);
    }

    return true;
}

//--------------------------------------------------------------------------------------------------

// ...


    // Actions
    if (!runActions) {
        return true;
    }

    TimerStart(lv_summonTimer, libMHtM_gv_mMUnderworldSummonedBossDuration_C, false, c_timeGame);
    lv_itTeam = 1;
    for ( ; ( (auto7E879F4E_ai >= 0 && lv_itTeam <= auto7E879F4E_ae) || (auto7E879F4E_ai < 0 && lv_itTeam >= auto7E879F4E_ae) ) ; lv_itTeam += auto7E879F4E_ai ) {
        libNtve_gf_CreateUnitsWithDefaultFacing(1, "UnderworldSummonedBoss", c_unitCreateIgnorePlacement, libGame_gf_ComputerPlayerInTeam(lv_itTeam), Point(0.0, 0.0), null);
        lv_tempGolems[lv_itTeam] = UnitLastCreated();
        libNtve_gf_ShowHideUnit(UnitLastCreated(), false);
        libNtve_gf_MakeUnitInvulnerable(UnitLastCreated(), true);

Source Files