Garden of Terror

Wiki
  • When the objective activates, one Seed appears somewhere on the map.
  • The first team to collect 3 Seeds summons three Garden Terrors, one per lane, that push at the same time.
  • Shamblers guard each Seed. Kill or distract them, then channel the Seed.
  • After a Seed is captured, the next one spawns 50-80 seconds later. After all Garden Terrors die, it's 90-120 seconds.

Objective Timers

EventDurationSecondsSource
Laning Phase warning fires at this time; seeds appear 0:30 later2:00120slibGRDN_gv_laningTimeAtGameStart_C
Objective Warning Lead time between warning and seed spawn0:3030slibGRDN_gv_seedSpawnTime_C

Units

Garden Terror

HP
11000
Speed
4.3984
Scaling
Life
+200/min 1-5, +300/min 6-10, +400/min 11-15, +500/min 16-20, +800/min 21-25, +1100/min 26+
Basic damage
+12/min 1-5, +18/min 6-10, +24/min 11-15, +30/min 16-20, +36/min 21+
Weapons
IDDamagePeriodRange
VehiclePlantHorror3061.5s2

Collecting Seeds

The first objective activates at 2:30, after a 30-second warning. One Seed is up at a time and appears somewhere on the map. Shamblers guard the Seed; kill or distract them, then a Hero channels for 6 seconds to collect it. The first team to 3 Seeds wins the round and summons three Garden Terrors, one per lane.


    for (;; auto31ABF747_u -= 1) {
        lv_seedDefender = UnitGroupUnitFromEnd(auto31ABF747_g, auto31ABF747_u);
        if (lv_seedDefender == null) { break; }
        UnitBehaviorAdd(lv_seedDefender, "UnitGivesNoXP", lv_seedDefender, 1);
        UnitKill(lv_seedDefender);
    }
    libNtve_gf_CreateUnitsWithDefaultFacing(1, "RegenGlobe", 0, libGame_gf_ComputerPlayerInTeam(lv_team), UnitGetPosition(lv_seed), null);
    libGame_gf_DropLootBannerinSconce(libGRDN_gv_seedSpawns[lv_location].lv_lootBannerSconce, PlayerBanner(lv_player), lv_player, true);
    libGRDN_gf_UpdateSeedCountUI();
    libGRDN_gf_ShowHideGathertheSeedsSlideout(false);
    if ((libGRDN_gv_seedsCollected[lv_team] >= libGRDN_gv_seedsNeeded_C)) {
        libNtve_gf_CreateActorAtPoint("UI_Game_Ping_GardenOfTerror_Terror_Summoned", libGRDN_gv_seedSpawns[lv_location].lv_point);
        libGRDN_gf_EndSeedPhase(lv_team);
    }
    else {
        libNtve_gf_CreateActorAtPoint("UI_Game_Ping_GardenOfTerror_Seed_Collected", libGRDN_gv_seedSpawns[lv_location].lv_point);
        TimerStart(libGRDN_gv_eventWarningTimer, libGRDN_gf_RandomCursedPacingSeedSpawnDelay(), false, c_timeGame);
        TimerStart(libGRDN_gv_eventPreviewTimer, libGRDN_gv_shortPreviewDelay_C, false, c_timeGame);
    }
    libNtve_gf_CreateActorAtPoint("Event_GardenOfTerror_Seed_Pickup_Sound", libGRDN_gv_seedSpawns[lv_location].lv_point);
    return true;

Seed Respawn Delay

After a Seed is captured, the next one spawns 50-80 seconds later (randomized). After all Garden Terrors die, the delay is 90-120 seconds instead.


    libGRDN_gv_seedSpawns[lp_locationIndex].lv_favoredTeam = lp_favoredTeam;
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_steppingStones[1] = ActorFromDoodad(lp_doodad1);
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_steppingStones[2] = ActorFromDoodad(lp_doodad2);
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_steppingStones[3] = ActorFromDoodad(lp_doodad3);
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_steppingStones[4] = ActorFromDoodad(lp_doodad4);
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_steppingStones[5] = ActorFromDoodad(lp_doodad5);
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_steppingStones[6] = ActorFromDoodad(lp_doodad6);
    libGRDN_gv_seedSpawns[lp_locationIndex].lv_lootBannerSconce = lp_sconce;
}

fixed libGRDN_gf_RandomCursedPacingSeedSpawnDelay () {
    // Variable Declarations
    fixed lv_difference;

    // Automatic Variable Declarations
    // Variable Initialization
    lv_difference = (libGRDN_gv_delayBetweenSeedsMax_C - libGRDN_gv_delayBetweenSeedsMin_C);

    // Implementation
    return (libGRDN_gv_delayBetweenSeedsMin_C + RandomFixed(0.0, lv_difference));
}

Garden Terror Lane Assignment

The winning team gets three Garden Terrors, one per lane. They burrow to the front of each lane and push.


        }
    }
    else {
        if ((lv_furthestMinionPosX > lv_furthestStructurePosX)) {
            return PointWithOffset(lv_furthestStructurePos, (lv_additionalStructureOffset_C * -1.0), 0.0);
        }
        else {
            return lv_furthestMinionPos;
        }
    }
}

void libGRDN_gf_SpawnGardenTerrors () {
    // Variable Declarations
    int lv_lane;
    int lv_winningTeam;

    // Automatic Variable Declarations
    const int autoB967247D_ae = libGRDN_gv_laneCount_C;
    const int autoB967247D_ai = 1;

    // Variable Initialization

    // Implementation
    if ((libGRDN_gv_seedsCollected[libGame_gv_teamOrderIndex_C] > libGRDN_gv_seedsCollected[libGame_gv_teamChaosIndex_C])) {

Timer Source

libgrdn_h.galaxy — constants

const fixed libGRDN_gv_laningTimeAtGameStart_C = 120.0;
const fixed libGRDN_gv_seedSpawnTime_C = 30.0;

libgrdn.galaxy — timer start

    libNtve_gf_CreateActorAtPoint("UI_Game_Ping_GardenOfTerror_EventWarning", libGRDN_gv_seedSpawns[lp_location].lv_point);
    if ((libGRDN_gv_firstSeedEventWarningPlayed == false)) {
        SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
        libSond_gf_SoundtrackApplyNewDefaultSoundtrackForPlayerGroup("MX_GardenOfTerror_EventWarning", PlayerGroupAll());
    }

    Wait(libGRDN_gv_seedSpawnTime_C, c_timeGame);
    libGRDN_gf_ShowHideObjectivePreviewatLocation(false, lp_location);
    if ((libGRDN_gv_firstSeedEventWarningPlayed == false)) {
        SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
        libSond_gf_SoundtrackPlayMapSoundtrackAsDefaultSoundtrackForAllPlayers();
        libGRDN_gv_firstSeedEventWarningPlayed = true;
    }

// ...

    // Actions
    if (!runActions) {
        return true;
    }

    TimerStart(libGRDN_gv_eventPreviewTimer, libGRDN_gv_longPreviewDelay_C, false, c_timeGame);
    TimerStart(libGRDN_gv_eventWarningTimer, libGRDN_gv_laningTimeAtGameStart_C, false, c_timeGame);
    SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);
    libSond_gf_SoundtrackApplyNewDefaultSoundtrackForPlayerGroup("MX_GardenOfTerror_GameStart", PlayerGroupAll());
    return true;
}

//--------------------------------------------------------------------------------------------------

// ...

    }
    else {
        libGRDN_gf_PlaySeedWarningRepeatTransmission();
    }
    SoundPlayForPlayer(SoundLink("UI_CampaignHintNotify", -1), c_maxPlayers, PlayerGroupAll(), 100.0, 0.1);
    libGRDN_gf_SpawnSeedatLocation(libGRDN_gv_currentSeedSpawnLocation);
    TimerStart(libGRDN_gv_eventStartTimer, libGRDN_gv_seedSpawnTime_C, false, c_timeGame);
    return true;
}

//--------------------------------------------------------------------------------------------------
void libGRDN_gt_EventWarningTimerExpires_Init () {
    libGRDN_gt_EventWarningTimerExpires = TriggerCreate("libGRDN_gt_EventWarningTimerExpires_Func");

Source Files