- 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
| Event | Duration | Seconds | Source |
|---|---|---|---|
| Capture Time (Round 1) | 0:25 | 25s | libMMAP_gv_captureFlagVictoryTimeGoalStart_C |
| Capture Time Increment | 0:10 | 10s | libMMAP_gv_captureFlagVictoryTimeGoalTimeIncrement_C |
| Capture Time (Max) | 0:55 | 55s | libMMAP_gv_captureFlagVictoryTimeGoalMax_C |
| Hero Channel | 0:03 | 3s | libMMAP_gv_heroTimeToCap_C |
| Guard Retake Channel | 0:10 | 10s | libMMAP_gv_minionTimeToCap_C |
| Defender Respawn | 0:05 | 5s | libMMAP_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
| ID | Damage | Period | Range |
|---|---|---|---|
AllianceSuperCavalryWeapon | 65 | 1s | 1 |
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
| ID | Damage | Period | Range |
|---|---|---|---|
HordeSuperCavalryWeapon | 65 | 1s | 1 |
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
- libmmap.galaxy
- libmmap_h.galaxy
- alteracpass.stormmod/abildata.xml
- alteracpass.stormmod/accumulatordata.xml
- alteracpass.stormmod/behaviordata.xml
- alteracpass.stormmod/capturepointdefender.xml
- alteracpass.stormmod/cavalry.xml
- alteracpass.stormmod/coregeneraldata.xml
- alteracpass.stormmod/effectdata.xml
- alteracpass.stormmod/goaldata.xml
- alteracpass.stormmod/moverdata.xml
- alteracpass.stormmod/reaver.xml
- alteracpass.stormmod/snowdrift.xml
- alteracpass.stormmod/unitdata.xml
- alteracpass.stormmod/userdata.xml
- alteracpass.stormmod/validatordata.xml
- alteracpass.stormmod/weapondata.xml