- An Angelic and Demonic Immortal spawn in the center arena and fight each other.
- Heroes damage the enemy Immortal while defending their own. Immortals use Cleave and Explosions, telegraphed by ground indicators.
- The winning Immortal gains a Shield equal to its remaining Health and pushes whichever enemy lane has the least Structure damage.
- A new duel begins 105 seconds later.
Objective Timers
| Event | Duration | Seconds | Source |
|---|---|---|---|
| First Immortal Spawn | 3:00 | 180s | libMLBD_gv_mMBossDuelInitialDelay_C |
| Immortal Respawn | 1:45 | 105s | libMLBD_gv_mMBossDuelEventCooldown_C |
| Spawn Warning | 0:30 | 30s | libMLBD_gv_mMBossDuelWarningDelayLong_C |
Units
Immortal (Heaven)
Laner
XML- HP
- 10500
- Speed
- 4.3984
Scaling
- Life
- +800/min 1-5, +850/min 6-10, +900/min 11-15, +950/min 16+
- Basic damage
- +24/min 1-10, +28/min 11-15, +32/min 16+
Abilities
- QAngelic Explosions
AngelicExplosionsDamages and stuns enemies in multiple areas around the caster. There must be nearby heroes around to activate.
- WAngelic Cleave
AngelicCleaveDeals area damage and knocks back targets around the caster.
Weapons
| ID | Damage | Period | Range |
|---|---|---|---|
BossDuelLanerRangedWeaponHeaven | 450 | 2s | — |
BossDuelLanerMeleeWeaponHeaven | 450 | 2s | 1.5 |
Objective
XML- HP
- 16250
- Speed
- 15
Scaling
- Life
- +750/min 1-5, +1125/min 6-10, +1500/min 11-15, +1875/min 16-20, +2250/min 21+
Abilities
- QAngelic Explosions
AngelicExplosionsDamages and stuns enemies in multiple areas around the caster. There must be nearby heroes around to activate.
- WAngelic Cleave
AngelicCleaveDeals area damage and knocks back targets around the caster.
Weapons
| ID | Damage | Period | Range |
|---|---|---|---|
BossDuelBossDummyHeavenWeapon | — | 2s | 100 |
Immortal (Hell)
Laner
XML- HP
- 10500
- Speed
- 4.3984
Scaling
- Life
- +800/min 1-5, +850/min 6-10, +900/min 11-15, +950/min 16+
- Basic damage
- +24/min 1-10, +28/min 11-15, +32/min 16+
Abilities
- QDemonic Explosions
DemonicExplosionsDamages and stuns enemies in multiple areas around the caster. There must be nearby heroes around to activate.
- WDemonic Cleave
DemonicCleaveDeals area damage and knocks back targets around the caster.
Weapons
| ID | Damage | Period | Range |
|---|---|---|---|
BossDuelLanerRangedWeaponHell | 450 | 2s | — |
BossDuelLanerMeleeWeaponHell | 450 | 2s | 1.5 |
Objective
XML- HP
- 16250
- Speed
- 15
Scaling
- Life
- +750/min 1-5, +1125/min 6-10, +1500/min 11-15, +1875/min 16-20, +2250/min 21+
Abilities
- QDemonic Explosions
DemonicExplosionsDamages and stuns enemies in multiple areas around the caster. There must be nearby heroes around to activate.
- WDemonic Cleave
DemonicCleaveDeals area damage and knocks back targets around the caster.
Weapons
| ID | Damage | Period | Range |
|---|---|---|---|
BossDuelBossDummyHellWeapon | — | 2s | 100 |
The Duel
An Angelic and a Demonic Immortal spawn in the center arena and fight each other. Heroes can damage the opposing Immortal while protecting their allied one. During the duel, Immortals use Cleave and Explosions, both telegraphed by ground indicators. The first Immortal reduced to 0 Health loses; the survivor wins.
if ((EventUnit() == libMLBD_gv_mMBOEBosses[1])) {
UnitSetPropertyFixed(libMLBD_gv_mMBOEBosses[1], c_unitPropLife, 0.5);
lv_winningUnit = libMLBD_gv_mMBOEBosses[2];
libGame_gf_DropLootBannerinSconce(libMLBD_gv_mMBOEMiddleBannerSconce, libGame_gv_players[libMLBD_gv_mMBOELastBossAttackers[1]].lv_lootContent.lv_loot_Banner.lv_bannerID, libMLBD_gv_mMBOELastBossAttackers[1], true);
}
else {
UnitSetPropertyFixed(libMLBD_gv_mMBOEBosses[2], c_unitPropLife, 0.5);
lv_winningUnit = libMLBD_gv_mMBOEBosses[1];
libGame_gf_DropLootBannerinSconce(libMLBD_gv_mMBOEMiddleBannerSconce, libGame_gv_players[libMLBD_gv_mMBOELastBossAttackers[2]].lv_lootContent.lv_loot_Banner.lv_bannerID, libMLBD_gv_mMBOELastBossAttackers[2], true);
}
libMLBD_gv_mMBOEEventWinningTeam = libGame_gf_TeamNumberOfPlayer(UnitGetOwner(lv_winningUnit));
libNtve_gf_MakeUnitInvulnerable(lv_winningUnit, true);
libNtve_gf_ChangeUnitDamage(lv_winningUnit, libNtve_ge_UnitDamageTakenDealt_Damage_Take, libNtve_ge_UnitDamageChangeOption_No);
UnitBehaviorAdd(libMLBD_gv_mMBOEBosses[1], "BossDuelDuelCompleteBehavior", libMLBD_gv_mMBOEBosses[1], 1);
UnitBehaviorAdd(libMLBD_gv_mMBOEBosses[2], "BossDuelDuelCompleteBehavior", libMLBD_gv_mMBOEBosses[2], 1);
libMLBD_gf_MMBOEUISetBossHP();
lv_team = 1;
for ( ; ( (autoD1DA67FE_ai >= 0 && lv_team <= autoD1DA67FE_ae) || (autoD1DA67FE_ai < 0 && lv_team >= autoD1DA67FE_ae) ) ; lv_team += autoD1DA67FE_ai ) {
RemoveUnitOfInterest(libMLBD_gv_mMBOEBosses[lv_team], "DefendImmortal", libAIAI_gf_ConvertIntegertoGoalTeam(lv_team));
RemoveUnitOfInterest(libMLBD_gv_mMBOEBosses[lv_team], "KillEnemyImmortal", libAIAI_gf_ConvertIntegertoGoalTeam(libGame_gf_EnemyTeam(lv_team)));
}
HP → Lane-Push Shield
The winning Immortal gains a Shield equal to its remaining Health during the Objective phase, then flies to the enemy lane that has taken the least Structure damage.
lv_townHP2 = libMLBD_gf_MMBOETownHealth(lp_town2, lp_player);
if (((lv_townHP1 - lv_townHP2) > libMLBD_gv_mMBossDuelMeaningfulTownHPDifference_C)) {
return 1;
}
if (((lv_townHP2 - lv_townHP1) > libMLBD_gv_mMBossDuelMeaningfulTownHPDifference_C)) {
return -1;
}
return 0;
}
int libMLBD_gf_MMBOEBossPushingLane (int lp_team) {
// Variable Declarations
int lv_teamEnemy;
int lv_computerEnemy;
int lv_lane;
// Automatic Variable Declarations
int auto782BE736_val;
// Variable Initialization
// Implementation
lv_teamEnemy = libGame_gf_EnemyTeam(lp_team);
Timer Source
libmlbd_h.galaxy — constants
const fixed libMLBD_gv_mMBossDuelInitialDelay_C = 180.0;
const fixed libMLBD_gv_mMBossDuelWarningDelayLong_C = 30.0;
const fixed libMLBD_gv_mMBossDuelEventCooldown_C = 105.0;
libmlbd.galaxy — timer start
}
if ((libMapM_gv_mMMapMechanicDisabled == true)) {
return true;
}
TimerStart(libMLBD_gv_mMBOEEventInitDelayTimer, (libMLBD_gv_mMBossDuelInitialDelay_C - libMLBD_gv_mMBossDuelWarningDelay), false, c_timeGame);
libMLBD_gf_MMBOECalculateNewSpawnLocations(1);
libMLBD_gf_MMBOEDuelPreviewSetup(false);
libNtve_gf_WaitForTimer(TimerLastStarted(), 0.0, false);
if ((TriggerIsEnabled(TriggerGetCurrent()) == false)) {
return true;
}
// ...
libMLBD_gv_mMBOEBossesLaning = null;
libMapM_gf_JungleStopHibernateCamps();
Wait(1.0, c_timeGame);
libMLBD_gv_mMBOEEventStage = libMLBD_ge_MMBOEEventStage_Idle;
lv_winningTeam = libMLBD_gv_mMBOEEventWinningTeam;
libMLBD_gv_mMBOEEventWinningTeam = 0;
TimerStart(libMLBD_gv_mMBOEEventCooldownTimer, (libMLBD_gv_mMBossDuelEventCooldown_C - libMLBD_gv_mMBossDuelWarningDelay), false, c_timeGame);
Wait(1.5, c_timeGame);
libMLBD_gf_MMBOETransmissionBossRetreatedQ(lv_winningTeam);
libMLBD_gf_MMBOECalculateNewSpawnLocations(1);
libMLBD_gf_MMBOEDuelPreviewSetup(false);
libNtve_gf_WaitForTimer(TimerLastStarted(), 0.0, false);
if ((libMLBD_gv_mMBOEDebugUsed == false)) {
Source Files
- libmlbd.galaxy
- libmlbd_h.galaxy
- battlefieldofeternity.stormmod/abildata.xml
- battlefieldofeternity.stormmod/accumulatordata.xml
- battlefieldofeternity.stormmod/behaviordata.xml
- battlefieldofeternity.stormmod/buttondata.xml
- battlefieldofeternity.stormmod/effectdata.xml
- battlefieldofeternity.stormmod/goaldata.xml
- battlefieldofeternity.stormmod/mapdata.xml
- battlefieldofeternity.stormmod/moverdata.xml
- battlefieldofeternity.stormmod/unitdata.xml
- battlefieldofeternity.stormmod/userdata.xml
- battlefieldofeternity.stormmod/validatordata.xml
- battlefieldofeternity.stormmod/weapondata.xml
- libmlhh.galaxy
- libmlhh_h.galaxy
- heavenhell.stormmod/abildata.xml
- heavenhell.stormmod/behaviordata.xml
- heavenhell.stormmod/buttondata.xml
- heavenhell.stormmod/cliffdata.xml
- heavenhell.stormmod/effectdata.xml
- heavenhell.stormmod/moverdata.xml
- heavenhell.stormmod/terrainobjectdata.xml
- heavenhell.stormmod/unitdata.xml
- heavenhell.stormmod/userdata.xml
- heavenhell.stormmod/validatordata.xml
- heavenhell.stormmod/weapondata.xml