include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Towers of Doom
//--------------------------------------------------------------------------------------------------
// Preset Declarations
const int libMTOD_ge_MMToDTownStateChange_SwapTeams = 0;
const int libMTOD_ge_MMToDTownStateChange_Remove = 1;
const int libMTOD_ge_MMToDTownStateChange_Add = 2;
// Constants
const string libMTOD_gv_mMToDMechanicName_C = "TowersOfDoom";
const fixed libMTOD_gv_mMToDCoreShots_C = 1.0;
const int libMTOD_gv_mMToDScoringAltarMaxCount_C = 4;
const fixed libMTOD_gv_mMToDScoringAltarAnimTime_C = 4.0;
const fixed libMTOD_gv_mMToDScoringEventDelay_C = 180.0;
const fixed libMTOD_gv_mMToDAltarRespawnDelay_C = 110.0;
const fixed libMTOD_gv_mMToDScoringAltarWarningTime_C = 30.0;
const int libMTOD_gv_mMToDScoringAltarMaxConfigs_C = 6;
const fixed libMTOD_gv_mMToDScoringAltarRevealArea_C = 4.5;
const fixed libMTOD_gv_mMToDScoringAltarSecondSpawnSoundTime_C = 15.0;
const fixed libMTOD_gv_mMToDPhaseTwoDelay_C = 720.0;
const fixed libMTOD_gv_mMToDPhaseTwoWarningTime_C = 15.0;
const int libMTOD_gv_mMToDTownsMaxCount_C = 6;
const int libMTOD_gv_mMToDTownStructureMaxCount_C = 20;
const int libMTOD_gv_mMToDTownFlipDelayTime_C = 2;
const int libMTOD_gv_mMToDBossCannonShots_C = 4;
const fixed libMTOD_gv_data_XP_GoblinSapperCapture_C = 0.0;
const fixed libMTOD_gv_data_XP_GraveGolemCapture_C = 0.0;
const fixed libMTOD_gv_mMToDDefenderHeadSpellScaling_C = 0.1;
const fixed libMTOD_gv_mMToDLanerHeadSpellScaling_C = 0.1;
const fixed libMTOD_gv_mMToDLanerSapperSuicideScaling_C = 0.11;
const fixed libMTOD_gv_mMToDBaseProtectionScaling = 25.0;
const int libMTOD_gv_mMToDCannonRangeThreshold = 15;
const fixed libMTOD_gv_mMToDWaygateRevealArea_C = 5.0;
const int libMTOD_gv_mMFieldofSlaughterWaygateMaxCount_C = 1;
const fixed libMTOD_gv_mMToDSpiritHealerVOCooldown = 6.0;
// Structures
struct libMTOD_gs_MMToDScoringAltar {
unit lv_unit;
bool lv_active;
};
struct libMTOD_gs_MMFieldOfSlaughterTown2 {
string lv_buildingType;
point lv_buildingPosition;
fixed lv_buildingFacing;
};
struct libMTOD_gs_MMToDTown {
text lv_townName;
int lv_owningTeam;
int lv_originalOwningTeam;
unit lv_fortUnit;
libMTOD_gs_MMFieldOfSlaughterTown2 lv_fortInfo;
libMTOD_gs_MMFieldOfSlaughterTown2[libMTOD_gv_mMToDTownStructureMaxCount_C + 1] lv_structureArray;
unit lv_capturePointUnit;
int lv_capturePointIndex;
};
struct libMTOD_gs_MMToDWaygate {
point lv_position;
unit lv_waygateUnit;
unit lv_orderEntrance;
unit lv_chaosEntrance;
};
struct libMTOD_gs_MMToDTownPanels {
int lv_mainTownPanel;
int lv_blueTownPanel;
int lv_blueTownHealth;
int lv_blueTownHealthFrame;
int lv_redTownPanel;
int lv_redTownHealth;
int lv_redTownHealthFrame;
};
struct libMTOD_gs_MMToDPanelEntries {
int lv_mainPanel;
libMTOD_gs_MMToDTownPanels[libMTOD_gv_mMToDTownsMaxCount_C + 1] lv_townHealth;
int lv_mainHealthPanel;
int lv_mainAltarTimerPanel;
int lv_altarInfoLabel;
int lv_altarLabel;
int lv_altarTimerLabel;
int lv_mainPotentialShotsPanel;
int lv_mainPotentialShotsLabel;
int lv_leftPotentialShotsLabel;
int lv_rightPotentialShotsLabel;
int lv_enemyCaptureNotificationPanel;
int lv_enemyCaptureNotificationLabel;
int lv_enemyCaptureNotificationTargetLabel;
int lv_allyCaptureNotificationPanel;
int lv_allyCaptureNotificationLabel;
int lv_allyCaptureNotificationTargetLabel;
int lv_waygateNotificationPanel;
int lv_townUpgradeNotificationPanel;
int lv_ravenNotificationPanel;
int lv_ravenNotificationLabel;
int lv_necroNotificationPanel;
int lv_necroNotificationLabel;
};
// Variable Declarations
unitgroup libMTOD_gv_mMToDOrderBases;
unitgroup libMTOD_gv_mMToDChaosBases;
bool libMTOD_gv_mMToDSixTownEventActive;
bool libMTOD_gv_mMToDFirstEventSpawned;
timer libMTOD_gv_mMToDScoringAltarTimer;
libMTOD_gs_MMToDScoringAltar[libMTOD_gv_mMToDScoringAltarMaxCount_C + 1] libMTOD_gv_mMToDScoringAltars;
revealer[libMTOD_gv_mMToDScoringAltarMaxCount_C + 1] libMTOD_gv_mMToDScoringAltarOrderRevealers;
revealer[libMTOD_gv_mMToDScoringAltarMaxCount_C + 1] libMTOD_gv_mMToDScoringAltarChaosRevealers;
playergroup[libMTOD_gv_mMToDScoringAltarMaxConfigs_C + 1] libMTOD_gv_mMToDScoringAltarConfigs;
playergroup libMTOD_gv_mMToDScoringAltarRemainingConfigs;
playergroup libMTOD_gv_mMToDScoringAltarRemainingConfigsThreeAltarEvent;
int libMTOD_gv_mMToDScoringAltarsActive;
int libMTOD_gv_mMToDEventNumber;
int libMTOD_gv_mMToDEventCurrentPointGroup;
timer libMTOD_gv_mMToDObjectivePreviewTimer;
fixed libMTOD_gv_mMToDObjectivePreviewDelay_C;
timer libMTOD_gv_mMToDPhaseTwoTimer;
fixed libMTOD_gv_mMToDSixCapDelay_C;
timer libMTOD_gv_mMToDSixCapTimer;
libMTOD_gs_MMToDTown[libMTOD_gv_mMToDTownsMaxCount_C + 1] libMTOD_gv_mMToDTowns;
timer libMTOD_gv_mMToDScalingTimer;
unit libMTOD_gv_mMToDHorsemanCannon;
region[libCore_gv_bALMaxTeams + 1] libMTOD_gv_mMToDBaseKillZones;
unitgroup[libCore_gv_bALMaxTeams + 1] libMTOD_gv_mMToDProtectionTowers;
libMTOD_gs_MMToDWaygate[libMTOD_gv_mMFieldofSlaughterWaygateMaxCount_C + 1] libMTOD_gv_mMToDWaygates;
unit libMTOD_gv_mMToDSpiritHealer;
bool libMTOD_gv_mMToDSpiritHealerClicked;
int[libCore_gv_bALMaxPlayers + 1] libMTOD_gv_mMToDSpiritHealerTextTags;
timer[libCore_gv_bALMaxPlayers + 1] libMTOD_gv_mMToDSpiritHealerVOTimers;
int[libCore_gv_bALMaxPlayers + 1] libMTOD_gv_mMToDAltarDamageDoneTotal;
bool libMTOD_gv_mMToDBanterVariable;
timer libMTOD_gv_mMToDBanterTimer;
libMTOD_gs_MMToDPanelEntries libMTOD_gv_mMToDPanels;
bool libMTOD_gv_mMToDPhaseTwoCheatUsed;
bool libMTOD_gv_mMToDMapEventDisabled;
// Function Declarations
void libMTOD_gf_MMToDInitMercs ();
void libMTOD_gf_MMToDUpdateTownState (unit lp_base, int lp_computerPlayer, int lp_stateChange);
void libMTOD_gf_MMToDUpdatePotentialShotsLabels ();
void libMTOD_gf_MMTodAddScoringAltarData (unit lp_altarUnit, int lp_pointNumber);
void libMTOD_gf_MMToDTurnOnOffScoringAltar (bool lp_onOff, int lp_altarIndex);
void libMTOD_gf_MMToDDefineNextAltarsandCreatePreviews ();
void libMTOD_gf_MMToDAltarFireCannons (int lp_teamScored);
void libMTOD_gf_MMToDSixCapFireCannons ();
void libMTOD_gf_MMTodAddTownData (unitgroup lp_buildingUnitGroup, int lp_townNumber, text lp_townName);
void libMTOD_gf_MMToDRespawnTown (int lp_townNumber, unit lp_fortUnit, int lp_oldOwningTeam);
void libMTOD_gf_MMToDBuildTownStructure (int lp_townNum, int lp_structureNum);
void libMTOD_gf_MMToDRemoveDeathModelsInRegion (region lp_region);
void libMTOD_gf_MMToDAnnouncementTownCaptured (unit lp_fortUnit, int lp_team);
void libMTOD_gf_MMToDChangeMarkerOwnershipOnAltars (int lp_townNumber, int lp_newOwner);
void libMTOD_gf_MMToDChangeTownMarkerOwnershipInRegion (region lp_region, int lp_newOwningTeam);
unit libMTOD_gf_MMToDGetTownFort (int lp_townIndex);
void libMTOD_gf_MMToDBossCampFireCannons (int lp_firingTeam);
void libMTOD_gf_MMTodInitializeProtectionTowers (region lp_orderKillzone, region lp_chaosKillzone);
void libMTOD_gf_MMTodAddWaygate (int lp_waygateIndex, unit lp_waygateUnit, unit lp_orderEntrance, unit lp_chaosEntrance);
void libMTOD_gf_MMToDActivateWaygates ();
void libMTOD_gf_MMToDCannonballImpactShakingCamera (point lp_targetLocation);
void libMTOD_gf_MMToDAltarDamageDoneCache (int lp_player, int lp_townCount);
void libMTOD_gf_MMToDTransmissionBellTowersActivating ();
void libMTOD_gf_MMToDTransmissionBellTowersActivate ();
void libMTOD_gf_MMToDTransmissionTeleporterActivated ();
void libMTOD_gf_MMToDTransmissionBellTowersFiring (int lp_team);
void libMTOD_gf_MMToDTransmissionBellSixTowersTaken ();
void libMTOD_gf_MMToDTownHallDestroyedForTeam (int lp_team);
void libMTOD_gf_MMToDUIInit (int lp_parentPanel);
void libMTOD_gf_MMToDUIDisplayCaptureNotification (int lp_teamThatCapturedTown, int lp_townThatWasCaptured);
void libMTOD_gf_MMToDUIDisplayTowerUpgradeUI ();
void libMTOD_gf_MMToDUIDisplayRavenNecroNotifications (text lp_text, int lp_team, playergroup lp_players);
void libMTOD_gf_MMToDShowHideTownOwnershipUI (bool lp_showHide, int lp_townNumber, int lp_owningTeam);
// Trigger Declarations
trigger libMTOD_gt_IncludeToD;
trigger libMTOD_gt_MMToDInit;
trigger libMTOD_gt_MMToDPingDataInit;
trigger libMTOD_gt_MMToDInitializeScoringAltars;
trigger libMTOD_gt_MMToDGateOpen;
trigger libMTOD_gt_MMToDArchwayAnims;
trigger libMTOD_gt_MMToDMinimapHealthMonitor;
trigger libMTOD_gt_MMToDFastSpawnMinions;
trigger libMTOD_gt_MMToDScoringAltarTimerTrigger;
trigger libMTOD_gt_MMToDObjectivePreviewTimerExpires;
trigger libMTOD_gt_MMToDScoringAltarCaptured;
trigger libMTOD_gt_MMToDStartPhaseTwoTimer;
trigger libMTOD_gt_MMToDL2FortMorphsIntoL3Keep;
trigger libMTOD_gt_MMToDL2TowerMorphsIntoL3Tower;
trigger libMTOD_gt_MMToDL2MoonwellMorphsIntoL3Moonwell;
trigger libMTOD_gt_MMToDSixCapCannonActivation;
trigger libMTOD_gt_MMToDOwnedTownDies;
trigger libMTOD_gt_MMToDTownFinishedBuilding;
trigger libMTOD_gt_MMToDMercScaling;
trigger libMTOD_gt_MMToDMercDamageTracking;
trigger libMTOD_gt_MMToDMercLanerHorsemanSummonsHead;
trigger libMTOD_gt_MMToDBossHorsemanCreated;
trigger libMTOD_gt_MMToDBossHorsemanDies;
trigger libMTOD_gt_MMToDHeadlessHorsemanCampCaptured;
trigger libMTOD_gt_MMToDProtectionTowerScan;
trigger libMTOD_gt_MMToDEnteredWaygate;
trigger libMTOD_gt_MMToDInitStoreSpiritHealer;
trigger libMTOD_gt_MMToDShowSpiritHealer;
trigger libMTOD_gt_MMToDHideSpiritHealer;
trigger libMTOD_gt_MMToDSpiritHealerClicked;
trigger libMTOD_gt_MMToDCannonMissileCreated;
trigger libMTOD_gt_MMToDEndofGameCleanUp;
trigger libMTOD_gt_MMToDBanterTimer;
trigger libMTOD_gt_MMToDTownHealthTracker;
trigger libMTOD_gt_MMToDUIModInitialize;
trigger libMTOD_gt_MMToDDisableJungle;
trigger libMTOD_gt_MMToDDebugFlipTown;
trigger libMTOD_gt_MMToDDebugPhaseTwo;
trigger libMTOD_gt_MMToDDebugWaygates;
trigger libMTOD_gt_MMToDDebugAllCannons;
trigger libMTOD_gt_MMToDDebugOrderCannons;
trigger libMTOD_gt_MMToDDebugChaosCannons;
trigger libMTOD_gt_MMToDDebugBossCannons;
trigger libMTOD_gt_MMToDDebugWarningOn;
trigger libMTOD_gt_MMToDDebugAltarsOn;
trigger libMTOD_gt_MMToDDebugEventStart;
// Library Initialization
void libMTOD_InitVariables ();