- Collect Tributes offered by the Raven Lord. Only one is up at a time.
- Collecting 3 Tributes curses the enemy team for 70 seconds. Their Towers, Forts, and Keeps stop attacking, and their lane minions are reduced to 1 Health.
- Once a Tribute is collected, the next one spawns 50-90 seconds later.
- After a Curse ends, the next Tribute takes longer to appear: 2:00-2:40.
Objective Timers
| Event | Duration | Seconds | Source |
|---|---|---|---|
| First Tribute Spawn warning appears 30s earlier | 3:00 | 180s | — |
| Tribute Respawn ±20s random variance | 1:10 | 70s | libMapM_gv_mMRavenTributeSpawnTime_C |
| Post-Curse Tribute 2:00-2:40 after curse ends | 2:00 | 120s | — |
| Curse Duration | 1:10 | 70s | libMapM_gv_mMRavenCurseDuration_C |
| Tribute Warning | 0:30 | 30s | libMapM_gv_mMRavenSpawnWarningTimerTime_C |
Tribute Respawn Variance
Tribute spawn timing is randomized. Once a Tribute is collected, the next one shows up 50-90 seconds later. After a Curse ends, the next one takes 2:00-2:40 to appear.
// Variable Declarations
fixed lv_spawnTime;
// Automatic Variable Declarations
// Variable Initialization
// Implementation
if ((libMapM_gv_mMRavenUseManualTributeSpawns == false)) {
lv_spawnTime = (libMapM_gv_mMRavenTributeSpawnTime_C + RandomFixed((libMapM_gv_mMRavenTributeSpawnTimeVariance * -1), libMapM_gv_mMRavenTributeSpawnTimeVariance));
TimerStart(libMapM_gv_mMRavenWarningTimer, (lv_spawnTime - libMapM_gv_mMRavenSpawnWarningTimerTime_C), false, c_timeGame);
}
}
void libMapM_gf_MMRavenCreatePreviewTribute (point lp_previewLocation) {
// Automatic Variable Declarations
// Implementation
The Curse
Three Tributes curse the enemy team for 70 seconds. While cursed, their Towers, Forts, and Keeps stop attacking, and their lane minions drop to 1 Health.
libMapM_gv_mMRavenTeamStats[libGame_gf_TeamNumberOfPlayer(lp_cursedPlayerID)].lv_cursed = true;
libAIAI_gf_AITeamDelegateActivateDeactivateMapReward(libAIAI_ge_AITeamDelegateActivateDeactivateMapToken_Activate);
libAIAI_gf_AITeamDelegateResetMapEventProgressforTeam(lv_enemyTeamWinningTeam);
auto1E839FCC_ae = libGame_gv_townTownCount;
lv_townIndex = 1;
for ( ; ( (auto1E839FCC_ai >= 0 && lv_townIndex <= auto1E839FCC_ae) || (auto1E839FCC_ai < 0 && lv_townIndex >= auto1E839FCC_ae) ) ; lv_townIndex += auto1E839FCC_ai ) {
if ((libGame_gv_townTownData[lv_townIndex].lv_owner == lp_cursedPlayerID)) {
autoCEB3961F_ae = libGame_gv_townTownData[lv_townIndex].lv_structureCount;
lv_structureIndex = 1;
for ( ; ( (autoCEB3961F_ai >= 0 && lv_structureIndex <= autoCEB3961F_ae) || (autoCEB3961F_ai < 0 && lv_structureIndex >= autoCEB3961F_ae) ) ; lv_structureIndex += autoCEB3961F_ai ) {
lv_structureUnit = libGame_gv_townTownData[lv_townIndex].lv_structureUnits[lv_structureIndex];
if ((UnitIsAlive(libGame_gv_townTownData[lv_townIndex].lv_structureUnits[lv_structureIndex]) == true) && ((libGame_gf_TownGetTownStructurePresetFromUnit(libGame_gv_townTownData[lv_townIndex].lv_structureUnits[lv_structureIndex]) == libGame_ge_TownStructureTypes_TownHall) || (libGame_gf_TownGetTownStructurePresetFromUnit(libGame_gv_townTownData[lv_townIndex].lv_structureUnits[lv_structureIndex]) == libGame_ge_TownStructureTypes_CannonTower))) {
UnitBehaviorAdd(lv_structureUnit, "RavenLordsCurseStructures", lv_structureUnit, 1);
UnitBehaviorSetDuration(lv_structureUnit, "RavenLordsCurseStructures", libMapM_gv_mMRavenCurseDuration_C);
UnitBehaviorAdd(lv_structureUnit, "RavenLordsCurseStructuresWarning", lv_structureUnit, 1);
UnitBehaviorSetDuration(lv_structureUnit, "RavenLordsCurseStructuresWarning", (libMapM_gv_mMRavenCurseDuration_C - 5.0));
}
}
}
}
auto4E0D066B_g = UnitGroup(null, lp_cursedPlayerID, RegionEntireMap(), libCore_gv_filtersMinionsTownMinions, 0);
auto4E0D066B_u = UnitGroupCount(auto4E0D066B_g, c_unitCountAll);
for (;; auto4E0D066B_u -= 1) {
Timer Source
mapmechanicslib_h.galaxy — constants
const fixed libMapM_gv_mMRavenSpawnWarningTimerTime_C = 30.0;
const fixed libMapM_gv_mMRavenTributeSpawnTime_C = 70.0;
const fixed libMapM_gv_mMRavenCurseDuration_C = 70.0;
mapmechanicslib.galaxy — timer start
// Automatic Variable Declarations
// Variable Initialization
// Implementation
if ((libMapM_gv_mMRavenUseManualTributeSpawns == false)) {
lv_spawnTime = (libMapM_gv_mMRavenTributeSpawnTime_C + RandomFixed((libMapM_gv_mMRavenTributeSpawnTimeVariance * -1), libMapM_gv_mMRavenTributeSpawnTimeVariance));
TimerStart(libMapM_gv_mMRavenWarningTimer, (lv_spawnTime - libMapM_gv_mMRavenSpawnWarningTimerTime_C), false, c_timeGame);
}
}
void libMapM_gf_MMRavenCreatePreviewTribute (point lp_previewLocation) {
// Automatic Variable Declarations
// ...
for (;; auto4E0D066B_u -= 1) {
auto4E0D066B_var = UnitGroupUnitFromEnd(auto4E0D066B_g, auto4E0D066B_u);
if (auto4E0D066B_var == null) { break; }
libMapM_gf_MMRavenApplyCurseEffectOnMinion(auto4E0D066B_var);
}
TriggerExecute(libMapM_gt_MMRavenCurseStartLightTransition, true, false);
TimerStart(libMapM_gv_mMRavenCurseTimer, libMapM_gv_mMRavenCurseDuration_C, false, c_timeGame);
libMapM_gf_MMRavenWaitForandPlayCurseEndWarning();
}
void libMapM_gf_MMRavenApplyCurseEffectOnMinion (unit lp_unit) {
// Automatic Variable Declarations
// Implementation
// ...
libMapM_gf_ShareVisionofUnitForBothTeams(UnitLastCreated());
libNtve_gf_CreateUnitsWithDefaultFacing(1, "RavenLordTribute", c_unitCreateIgnorePlacement, libCore_gv_cOMPUTER_Neutral, lv_spawnPoint, null);
UnitBehaviorAdd(UnitLastCreated(), "MapMechanicCoolUp", UnitLastCreated(), 1);
UnitBehaviorSetDuration(UnitLastCreated(), "MapMechanicCoolUp", (libMapM_gv_mMRavenSpawnWarningTimerTime_C+.5));
UnitBehaviorSetDurationRemaining(UnitLastCreated(), "MapMechanicCoolUp", (libMapM_gv_mMRavenSpawnWarningTimerTime_C+.5));
AddUnitOfInterest(UnitLastCreated(), 500.0, 0.0, "Tribute", libNtve_ge_GoalTeam_Both, 0);
TimerStart(libMapM_gv_mMRavenTributeSpawnTimer, libMapM_gv_mMRavenSpawnWarningTimerTime_C, false, c_timeGame);
libNtve_gf_WaitForTimer(libMapM_gv_mMRavenTributeSpawnTimer, 0.0, false);
UnitKill(libMapM_gv_mMRavenTributeWarning);
libNtve_gf_CreateModelAtPoint("RavenLordTributeSpawn", lv_spawnPoint);
Wait(0.5, c_timeReal);
ActorSend(libNtve_gf_ActorLastCreated(), "AnimBracketStop BSD");
libCore_gf_CreateMinimapPingStorm(PlayerGroupAll(), "StormAlert", lv_spawnPoint, ColorWithAlpha(100.00, 100.00, 0.00, 0.00), 3.0);