Cursed Hollow

Wiki
  • 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

EventDurationSecondsSource
First Tribute Spawn warning appears 30s earlier3:00180s
Tribute Respawn ±20s random variance1:1070slibMapM_gv_mMRavenTributeSpawnTime_C
Post-Curse Tribute 2:00-2:40 after curse ends2:00120s
Curse Duration1:1070slibMapM_gv_mMRavenCurseDuration_C
Tribute Warning0:3030slibMapM_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);

Source Files