include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Garden of Terror
//--------------------------------------------------------------------------------------------------
// Constants
const fixed libGRDN_gv_laningTimeAtGameStart_C = 120.0;
const fixed libGRDN_gv_shortPreviewDelay_C = 15.0;
const fixed libGRDN_gv_longPreviewDelay_C = 30.0;
const fixed libGRDN_gv_seedSpawnTime_C = 30.0;
const fixed libGRDN_gv_delayBetweenSeedsMin_C = 20.0;
const fixed libGRDN_gv_delayBetweenSeedsMax_C = 50.0;
const fixed libGRDN_gv_terrorSpawnTime_C = 10.0;
const fixed libGRDN_gv_extraDelayAfterEvent_C = 40.0;
const int libGRDN_gv_seedsNeeded_C = 3;
const int libGRDN_gv_seedSpawnLocationCount_C = 6;
const int libGRDN_gv_steppingStoneCount_C = 6;
const int libGRDN_gv_recentSeedSpawnMemory_C = 2;
const int libGRDN_gv_seedDefenderCount_C = 4;
const int libGRDN_gv_laneCount_C = 3;
// Structures
struct libGRDN_gs_SeedSpawn {
point lv_point;
int lv_topBottomHemisphere;
int lv_favoredTeam;
unit lv_lootBannerSconce;
unit lv_seedUnit;
unit lv_previewUnit;
actor[libGRDN_gv_steppingStoneCount_C + 1] lv_steppingStones;
};
struct libGRDN_gs_GardenUI {
int lv_eventWarningFrame;
int lv_eventWarningTextLabel;
int lv_eventWarningTimerLabel;
int lv_gatherTheSeedsFrame;
int lv_gardenTerrorHealthFrame;
int[libGRDN_gv_laneCount_C + 1] lv_gardenTerrorHealthStatuses;
int lv_gardenTerrorHealthIconBlue;
int lv_gardenTerrorHealthIconRed;
};
// Variable Declarations
timer libGRDN_gv_eventPreviewTimer;
timer libGRDN_gv_eventWarningTimer;
timer libGRDN_gv_eventStartTimer;
timer libGRDN_gv_terrorSpawnTimer;
libGRDN_gs_SeedSpawn[libGRDN_gv_seedSpawnLocationCount_C + 1] libGRDN_gv_seedSpawns;
int[libCore_gv_bALMaxTeams + 1] libGRDN_gv_seedsCollected;
int libGRDN_gv_currentSeedSpawnLocation;
int[libGRDN_gv_recentSeedSpawnMemory_C + 1] libGRDN_gv_recentSeedLocations;
unitgroup libGRDN_gv_seedDefenders;
bool libGRDN_gv_firstSeedEventWarningPlayed;
unit[libGRDN_gv_laneCount_C + 1] libGRDN_gv_gardenTerrors;
point[libGRDN_gv_laneCount_C + 1] libGRDN_gv_gardenTerrorEmergePoints;
libGRDN_gs_GardenUI libGRDN_gv_gardenUI;
bool libGRDN_gv_firstSeedSpawnTransmissionPlayed;
bool libGRDN_gv_firstTerrorSpawnTransmissionPlayed;
// Function Declarations
void libGRDN_gf_InitializeSeedLocation (int lp_locationIndex, point lp_spawnPoint, int lp_hemisphere, int lp_favoredTeam, doodad lp_doodad1, doodad lp_doodad2, doodad lp_doodad3, doodad lp_doodad4, doodad lp_doodad5, doodad lp_doodad6, unit lp_sconce);
fixed libGRDN_gf_RandomCursedPacingSeedSpawnDelay ();
int libGRDN_gf_SeedLocationIndex (unit lp_seed);
int libGRDN_gf_GetNextSeedSpawnLocation ();
void libGRDN_gf_SpawnSeedatLocation (int lp_location);
void libGRDN_gf_SpawnSeedDefender (point lp_spawnPoint);
void libGRDN_gf_EndSeedPhase (int lp_winningTeam);
point libGRDN_gf_GardenTerrorUnburrowPoint (int lp_lane, int lp_team);
void libGRDN_gf_SpawnGardenTerrors ();
void libGRDN_gf_FollowTerrortoLane (unit lp_terrorUnit, int lp_laneNumber);
void libGRDN_gf_EndTerrorPhase (int lp_terrorOwningTeam);
void libGRDN_gf_RunNightfallEnvironmentEffects ();
void libGRDN_gf_RunDaybreakEnvironmentEffects ();
void libGRDN_gf_InitializeGardenUI ();
void libGRDN_gf_UpdateSeedCountUI ();
void libGRDN_gf_ShowHideSeedUI (bool lp_toggle);
void libGRDN_gf_ShowHideGardenTerrorHealthUI (bool lp_toggle, int lp_terrorTeam);
void libGRDN_gf_ShowSeedUICounterLabel (int lp_team);
void libGRDN_gf_ShowSeedUIActiveLabel (int lp_team);
void libGRDN_gf_ShowHideGathertheSeedsSlideout (bool lp_toggle);
void libGRDN_gf_ShowHideObjectivePreviewatLocation (bool lp_toggle, int lp_locationIndex);
void libGRDN_gf_ShowSeedWarningSlideoutwithTimer (fixed lp_waitTime);
void libGRDN_gf_PingUnitUntilitsDead (unit lp_unit, bool lp_longFirstPing);
void libGRDN_gf_PlaySeedWarningFirstTransmission ();
void libGRDN_gf_PlaySeedWarningRepeatTransmission ();
void libGRDN_gf_PlaySeedSpawnFirstTransmission ();
void libGRDN_gf_PlaySeedSpawnRepeatTransmission ();
void libGRDN_gf_PlayTerrorsSpawningSoonTransmission ();
void libGRDN_gf_PlayTerrorsSummonedTransmission (int lp_activeTeam);
void libGRDN_gf_PlayTerrorsDefeatedTransmission (int lp_activeTeam);
// Trigger Declarations
trigger libGRDN_gt_MapInitialization;
trigger libGRDN_gt_IncludeModInitialization;
trigger libGRDN_gt_GatesOpen;
trigger libGRDN_gt_EventPreviewTimerExpires;
trigger libGRDN_gt_EventWarningTimerExpires;
trigger libGRDN_gt_EventStartTimerExpires;
trigger libGRDN_gt_SeedChannelStart;
trigger libGRDN_gt_SeedChannelStop;
trigger libGRDN_gt_SeedGathered;
trigger libGRDN_gt_TerrorSpawnTimerExpires;
trigger libGRDN_gt_GardenTerrorKilled;
trigger libGRDN_gt_GardenTerrorAppearsinLane;
trigger libGRDN_gt_eventstart;
trigger libGRDN_gt_transterrors1soon;
trigger libGRDN_gt_transterrors1now;
trigger libGRDN_gt_transterrors1dead;
trigger libGRDN_gt_terrors;
trigger libGRDN_gt_rainon;
trigger libGRDN_gt_rainoff;
trigger libGRDN_gt_rainleft;
trigger libGRDN_gt_rainright;
trigger libGRDN_gt_night;
trigger libGRDN_gt_day;
// Library Initialization
void libGRDN_InitVariables ();