Alterac Pass

Wiki
  • Capture the enemy Prison Camp to free your Cavalry.
  • Heroes channel an enemy Prison Camp for 3 seconds to start the breakout, then defend it until the capture timer completes.
  • The breakout timer starts at 25 seconds and goes up by 10 each objective phase, up to 55 seconds.
  • The first team to finish its breakout summons one Cavalry unit per lane.
  • Enemy Heroes can stop the breakout by channeling the Prison Camp; Guards can also retake it for their team.

Objective Timers

EventDurationSecondsSource
Capture Time (Round 1)0:2525slibMMAP_gv_captureFlagVictoryTimeGoalStart_C
Capture Time Increment0:1010slibMMAP_gv_captureFlagVictoryTimeGoalTimeIncrement_C
Capture Time (Max)0:5555slibMMAP_gv_captureFlagVictoryTimeGoalMax_C
Hero Channel0:033slibMMAP_gv_heroTimeToCap_C
Guard Retake Channel0:1010slibMMAP_gv_minionTimeToCap_C
Defender Respawn0:055slibMMAP_gv_defenderRespawnTime_C

Units

Cavalry

Alliance

XML
HP
8000
Speed
5
Armor
Structure: Splash 25, Basic 25, Ability 25
Scaling
Life
+150/min 1-5, +300/min 6-10, +400/min 11-15, +450/min 16-20, +550/min 21-25, +620/min 26+
Basic damage
+11/min 1-5, +16.5/min 6-10, +22/min 11-15, +27.5/min 16-20, +33/min 21-25, +38.5/min 26+
Weapons
IDDamagePeriodRange
AllianceSuperCavalryWeapon651s1

Horde

XML
HP
8000
Speed
5
Armor
Structure: Splash 25, Basic 25, Ability 25
Scaling
Life
+150/min 1-5, +300/min 6-10, +400/min 11-15, +450/min 16-20, +550/min 21-25, +620/min 26+
Basic damage
+11/min 1-5, +16.5/min 6-10, +22/min 11-15, +27.5/min 16-20, +33/min 21-25, +38.5/min 26+
Weapons
IDDamagePeriodRange
HordeSuperCavalryWeapon651s1

Capturing the Prison Camp

Heroes channel an enemy Prison Camp for 3 seconds to start the breakout, then defend it until the capture timer completes. Enemy Heroes can stop the breakout by channeling the Prison Camp; Guards retake the camp for their team with a longer 10-second channel.



    // Automatic Variable Declarations
    // Variable Initialization
    lv_computerPlayerInCapturingTeam = libGame_gf_ComputerPlayerInTeam(lp_teamCapturingFlag);

    // Implementation
    libMMAP_gf_UpdateFlagUI(lp_teamCapturingFlag, lp_teamOfCapturedFlag);
    libMMAP_gf_TrickleSpawnFlagDefenders(lp_teamOfCapturedFlag);
    while ((libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flagIsCaptured == true)) {
        if ((libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgress > 0.0) && (UnitGroupCount(libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flagEnemyHeroesCapturingUnitGroup, c_unitCountAlive) <= 0)) {
            libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgress -= libMMAP_gv_captureFlagCheckPeriod_C;
            libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressPercent = (100.0 - (100.0 * (libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgress / libMMAP_gv_captureFlagVictoryTimeGoal)));
            if ((libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressPercent >= 50.0) && (libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressCheckpoints[libMMAP_ge_VictoryProgressCheckpoints__50Percent] == false)) {
                libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressCheckpoints[libMMAP_ge_VictoryProgressCheckpoints__50Percent] = true;
                UnitCreateEffectPoint(libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flag, "AVLaunchRegenGlobe", RegionRandomPoint(libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_region[libMMAP_gv_currentCPIndex]));
                UnitBehaviorAdd(libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flag, "CageAttackSpeed", libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flag, 1);
            }

            if ((libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressPercent >= 75.0) && (libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressCheckpoints[libMMAP_ge_VictoryProgressCheckpoints__75Percent] == false)) {
                libMMAP_gv_aVMechanics[lp_teamCapturingFlag].lv_victoryProgressCheckpoints[libMMAP_ge_VictoryProgressCheckpoints__75Percent] = true;
                UnitBehaviorAdd(libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flag, "CageAttackSpeed", libMMAP_gv_aVMechanics[lp_teamOfCapturedFlag].lv_flag, 1);

Escalating Capture Time

The Prison Camp timer starts at 25 seconds, goes up by 10 after each objective phase, and caps at 55.


    }
    libMMAP_gf_FlagVictorySequence(lp_winningTeam, lp_losingTeam);
    libMMAP_gf_UpdateVictoriousTeamIcon(lp_winningTeam);
    DialogControlSendAnimationEvent(libMMAP_gv_aVUI.lv_victoryProgressBar[libMMAP_ge_AVUIProgressBars_Bottom], libGame_gf_PlayersOnTeamHeroes(lp_winningTeam, false), "Hide");
    DialogControlSendAnimationEvent(libMMAP_gv_aVUI.lv_victoryProgressBar[libMMAP_ge_AVUIProgressBars_Top], libGame_gf_PlayersOnTeamHeroes(lp_losingTeam, false), "Hide");
    DialogControlSendAnimationEvent(libMMAP_gv_aVUI.lv_mMContainer, PlayerGroupAll(), "MechanicDone");
    DialogControlSetAnimationState(libMMAP_gv_aVUI.lv_mMContainer, PlayerGroupAll(), "TeamWins", IntToString(lp_winningTeam));
    libMMAP_gv_aVMechanics[lp_winningTeam].lv_eventsWon += 1;
    if ((libMMAP_gv_captureFlagVictoryTimeGoal < libMMAP_gv_captureFlagVictoryTimeGoalMax_C)) {
        libMMAP_gv_captureFlagVictoryTimeGoal += libMMAP_gv_captureFlagVictoryTimeGoalTimeIncrement_C;
        libMMAP_gv_captureFlagVictoryTimeGoal = MinF(libMMAP_gv_captureFlagVictoryTimeGoal, libMMAP_gv_captureFlagVictoryTimeGoalMax_C);
    }

    if ((libMMAP_gv_defenderCount != libMMAP_gv_defenderCountMaximum_C)) {
        libMMAP_gv_defenderCount += libMMAP_gv_defenderIncrementCount_C;
    }

Cavalry Reinforcements

The winning team gets one Cavalry unit per lane (3 total). Cavalry push all lanes at the same time, attack enemies and Structures, give nearby allied Heroes +10% damage and +30% Movement Speed, and speed up nearby allied Minions.


    TriggerEnable(libMMAP_gv_aVMechanics[lp_team].lv_cavalryDeathTracker, true);
    if ((lp_team == libGame_gv_teamOrderIndex_C)) {
        libMMAP_gf_AllianceCavalryCharges();
    }
    else {
        libMMAP_gf_HordeCavalryCharges();
    }
    lv_i = 1;
    for ( ; ( (autoCF69F4A8_ai >= 0 && lv_i <= autoCF69F4A8_ae) || (autoCF69F4A8_ai < 0 && lv_i >= autoCF69F4A8_ae) ) ; lv_i += autoCF69F4A8_ai ) {
        libGame_gf_CalculateSpawnedMinionGoalPoints(lv_computerPlayer, libMMAP_gv_aVMechanics[lp_team].lv_cavalrySpawnPoint[lv_i]);
        libNtve_gf_CreateUnitsAtPoint2(1, libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnitType, 0, lv_computerPlayer, libMMAP_gv_aVMechanics[lp_team].lv_cavalrySpawnPoint[lv_i], null);
        libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnit[lv_i] = UnitLastCreated();
        UnitGroupAdd(libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnitGroup, libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnit[lv_i]);
        libGame_gf_UpdateScalingForUnit(libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnit[lv_i], libGame_gv_scalingTicks, 0);
        libAIAI_gf_MinionAIStartMinionAI(-1, libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnit[lv_i], libGame_gv_spawnedMinionLane, libGame_gv_spawnedMinionFirstWaypointIndex, true, false, false, 0, false);
        libCore_gf_CreateMinimapPingStormWithPlayerId(PlayerGroupAll(), "CavalrySpawned", libMMAP_gv_aVMechanics[lp_team].lv_cavalrySpawnPoint[lv_i], ColorWithAlpha(0,0,0,0), 5.0, lv_computerPlayer);
        PingSetUnit(PingLastCreated(), libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnit[lv_i]);
        libNtve_gf_SetDialogItemUnit(libMMAP_gv_aVUI.lv_mapMechanicHealthBar[lv_i], libMMAP_gv_aVMechanics[lp_team].lv_cavalryUnit[lv_i], PlayerGroupAll());
        DialogControlSetVisible(libMMAP_gv_aVUI.lv_mapMechanicHealthBar[lv_i], PlayerGroupAll(), true);
    }
    DialogControlSendAnimationEvent(libMMAP_gv_aVUI.lv_mMContainer, PlayerGroupAll(), "CavalryActive");

Timer Source

libmmap_h.galaxy — constants

const fixed libMMAP_gv_defenderRespawnTime_C = 5.0;
const int libMMAP_gv_minionTimeToCap_C = 10;
const int libMMAP_gv_heroTimeToCap_C = 3;
const fixed libMMAP_gv_captureFlagVictoryTimeGoalStart_C = 25.0;
const fixed libMMAP_gv_captureFlagVictoryTimeGoalMax_C = 55.0;
const fixed libMMAP_gv_captureFlagVictoryTimeGoalTimeIncrement_C = 10.0;

libmmap.galaxy — timer start


    // Implementation
    auto822A6E9D_ae = libMMAP_gv_defenderCount;
    lv_u = 1;
    for ( ; ( (auto822A6E9D_ai >= 0 && lv_u <= auto822A6E9D_ae) || (auto822A6E9D_ai < 0 && lv_u >= auto822A6E9D_ae) ) ; lv_u += auto822A6E9D_ai ) {
        if ((lp_unit == libMMAP_gv_aVMechanics[lp_team].lv_defenderUnit[lv_u])) {
            TimerStart(libMMAP_gv_aVMechanics[lp_team].lv_defenderSpawnTimer[lv_u], libMMAP_gv_defenderRespawnTime_C, false, c_timeGame);
            libMMAP_gv_aVMechanics[lp_team].lv_defenderNextSpawnPointIndex[lv_u] = libMMAP_gf_GetDefenderSpawnPointIndex(lp_team);
            ActorSend(libMMAP_gv_aVMechanics[lp_team].lv_defenderSpawnDoodadActor[libMMAP_gv_currentCPIndex][libMMAP_gv_aVMechanics[lp_team].lv_defenderNextSpawnPointIndex[lv_u]], "Signal Work");
            return ;
        }

    }

Source Files