- 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
| Event | Duration | Seconds | Source |
|---|---|---|---|
| Laning Phase warning fires at this time; seeds appear 0:30 later | 2:00 | 120s | libGRDN_gv_laningTimeAtGameStart_C |
| Objective Warning Lead time between warning and seed spawn | 0:30 | 30s | libGRDN_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
| ID | Damage | Period | Range |
|---|---|---|---|
VehiclePlantHorror | 306 | 1.5s | 2 |
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
- libgrdn.galaxy
- libgrdn_h.galaxy
- gardenofterror.stormmod/behaviordata.xml
- gardenofterror.stormmod/daynightdata.xml
- gardenofterror.stormmod/effectdata.xml
- gardenofterror.stormmod/gardenplantdata.xml
- gardenofterror.stormmod/goaldata.xml
- gardenofterror.stormmod/herodata.xml
- gardenofterror.stormmod/horrordata.xml
- gardenofterror.stormmod/jungledata.xml
- gardenofterror.stormmod/kingscoredata.xml
- gardenofterror.stormmod/lightingdata.xml
- gardenofterror.stormmod/lignifydata.xml
- gardenofterror.stormmod/mercdata.xml
- gardenofterror.stormmod/miniondata.xml
- gardenofterror.stormmod/seeddata.xml
- gardenofterror.stormmod/unitdata.xml
- gardenofterror.stormmod/userdata.xml
- gardenofterrordata.stormmod/behaviordata.xml
- gardenofterrordata.stormmod/daynightdata.xml
- gardenofterrordata.stormmod/gardenplantdata.xml
- gardenofterrordata.stormmod/herodata.xml
- gardenofterrordata.stormmod/horrordata.xml
- gardenofterrordata.stormmod/jungledata.xml
- gardenofterrordata.stormmod/kingscoredata.xml
- gardenofterrordata.stormmod/lightingdata.xml
- gardenofterrordata.stormmod/lignifydata.xml
- gardenofterrordata.stormmod/mercdata.xml
- gardenofterrordata.stormmod/miniondata.xml
- gardenofterrordata.stormmod/seeddata.xml
- gardenofterrordata.stormmod/unitdata.xml