include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Sky Temple
//--------------------------------------------------------------------------------------------------
// Preset Declarations
const int libMLCP_ge_MMSkyTempleTempleIndex__None = 0;
const int libMLCP_ge_MMSkyTempleTempleIndex_Top = 1;
const int libMLCP_ge_MMSkyTempleTempleIndex_Middle = 2;
const int libMLCP_ge_MMSkyTempleTempleIndex_Bottom = 3;
const int libMLCP_ge_MMSkyTempleUIModes_Idle = 0;
const int libMLCP_ge_MMSkyTempleUIModes_Timer = 1;
const int libMLCP_ge_MMSkyTempleUIModes_Temple = 2;
const int libMLCP_ge_MMSkyTempleUIState_None = 0;
const int libMLCP_ge_MMSkyTempleUIState_Idle = 1;
const int libMLCP_ge_MMSkyTempleUIState_Preparing = 2;
const int libMLCP_ge_MMSkyTempleUIState_Blessed = 3;
// Constants
const string libMLCP_gv_mMSkyTempleMechanicName_C = "SkyTemple";
const int libMLCP_gv_mMSkyTempleMaxCount_C = 10;
const int libMLCP_gv_mMSkyTempleTempleCaptureRadius_C = 5;
const int libMLCP_gv_mMSkyTempleTempleCaptureTime_C = 2;
const fixed libMLCP_gv_mMSkyTempleFirstTempleStartTime_C = 180.0;
const fixed libMLCP_gv_mMSkyTempleTempleBlessWarningTimeLong_C = 30.0;
const int libMLCP_gv_mMSkyTempleTempleCaptureOverTime_C = 0;
const fixed libMLCP_gv_mMSkyTempleTempleCooldown_C = 120.0;
const fixed libMLCP_gv_mMSkyTempleTempleFinalBlastLifeThreshold_C = 500.0;
const int libMLCP_gv_mMSkyTempleTempleFinalShotCount_C = 5;
const int libMLCP_gv_mMSkyTempleTempleTotalShots = 45;
const fixed libMLCP_gv_mMSkyTempleTempleStageDuration_C = 40.0;
// Structures
struct libMLCP_gs_MMSkyTemple {
unit lv_temple;
point lv_blockerLoc;
unit lv_beacon;
int lv_beaconIndex;
int[3][7] lv_attackTownTargetingOrder;
int[3] lv_attackTownTargetingIndex;
unit lv_minimapIcon;
unit lv_bannerSconce;
bool lv_blessed;
fixed lv_progress;
int lv_spawnStage;
bool lv_finalStage;
int lv_finalShots;
unit lv_targetUnit;
int[libCore_gv_bALMaxTeams + 1] lv_targetPing;
int lv_helperText;
revealer[11] lv_targetRevealers;
int lv_targetRevealerCount;
point[7] lv_defenderSpawnPoints;
unit[6] lv_defenderArray;
unit lv_defenderBossPathingBlocker;
int lv_defenderAIIndex;
unitgroup lv_defendersActivated;
};
struct libMLCP_gs_MMSkyTemplePanelDEPRECATE {
int lv_capturePointsPanel;
int lv_capturePointsTimerModeFrame;
int lv_capturePointsTimerModeNameLabel;
int lv_capturePointsTimerModeTimeLabel;
int lv_capturePointsTempleModeFrame;
int[4] lv_capturePointsTempleBGImageBlue;
int[4] lv_capturePointsTempleBGImageRed;
int[4] lv_capturePointsTempleDisabledImage;
int[4] lv_capturePointsTempleEnabledImage;
int[4] lv_capturePointsTempleProgress2;
bool[4] lv_shotProgressBracketFadeIn;
int[4] lv_capturePointsTempleProgress1;
int[4] lv_capturePointsTempleFinalShotsPanel;
int[4][6] lv_capturePointsTempleFinalShots;
int[4] lv_capturePointsTempleTimerLabel;
int[4] lv_capturePointsTempleFireEffect;
int[31] lv_capturePointsTempleFireEffect2;
int[3] lv_capturePointsTempleFireEffect3;
int[3][6] lv_capturePointsTempleFireEffect4;
int[3][6] lv_capturePointsTempleFireEffect5;
};
struct libMLCP_gs_MMSkyTemplePanel {
int lv_mainContainerPanel;
int lv_capturePointsTimerModeFrame;
int lv_capturePointsTimerModeNameLabel;
int lv_capturePointsTimerModeTimeLabel;
int lv_capturePointsTempleModeFrame;
};
struct libMLCP_gs_MMSkyTempleIconProgressPanel {
int lv_containerPanel;
int lv_fireEffect;
int lv_shrineIcon;
int lv_shrineProgress;
int lv_shrineCaptureProgressMask;
int[6] lv_bullets;
int lv_cooldownLabel;
};
// Variable Declarations
libMLCP_gs_MMSkyTemple[libMLCP_gv_mMSkyTempleMaxCount_C + 1] libMLCP_gv_mMSkyTemples;
int libMLCP_gv_mMSkyTempleCount;
fixed libMLCP_gv_mMSkyTempleTempleBlessWarningTime;
bool libMLCP_gv_mMSkyTempleBlessingFirstTime;
timer libMLCP_gv_mMSkyTempleBlessingWarningTimer;
int libMLCP_gv_mMSkyTempleBlessIndex;
int[libMLCP_gv_mMSkyTempleMaxCount_C + 1] libMLCP_gv_mMSkyTempleBlessTemplesActivationGoal;
int[libMLCP_gv_mMSkyTempleMaxCount_C + 1] libMLCP_gv_mMSkyTempleBlessTemplesActivation;
bool[libMLCP_gv_mMSkyTempleMaxCount_C + 1] libMLCP_gv_mMSkyTempleBlessTemplesDisabledForNext;
bool[libMLCP_gv_mMSkyTempleMaxCount_C + 1] libMLCP_gv_mMSkyTempleBlessNextTemples;
bool[libMLCP_gv_mMSkyTempleMaxCount_C + 1] libMLCP_gv_mMSkyTempleBlessLastTemples;
bool libMLCP_gv_mMSkyTempleBlessNextTemples3ed;
bool libMLCP_gv_mMSkyTempleBlessNextTemples1ed;
int libMLCP_gv_mMSkyTempleBlessNextTemplesPreviousCount;
int libMLCP_gv_mMSkyTempleBless1TempleRepeatCount;
int libMLCP_gv_mMSkyTempleBless2TemplesRepeatCount;
timer libMLCP_gv_mMSkyTempleBlessWarningLongWaitTimer;
timer libMLCP_gv_mMSkyTempleObjectivePreviewTimer;
fixed libMLCP_gv_mMSkyTempleObjectivePreviewDelay_C;
unitgroup libMLCP_gv_mMSkyTempleDefenderWithGlobes;
libMLCP_gs_MMSkyTemplePanelDEPRECATE libMLCP_gv_mMSkyTemplePanelDEPRECATE;
libMLCP_gs_MMSkyTemplePanel libMLCP_gv_mMSkyTemplePanel;
libMLCP_gs_MMSkyTempleIconProgressPanel[4] libMLCP_gv_mMSkyTemplePanelIcons;
int[3] libMLCP_gv_mMSkyTempleDamageLabelExtraIndex;
// Function Declarations
void libMLCP_gf_MMSkyTempleAddTemple (unit lp_temple, point lp_blockerLoc, int lp_team1AttackingTown1_1, int lp_team1AttackingTown1_2, int lp_team1AttackingTown1_3, int lp_team1AttackingTown1_4, int lp_team1AttackingTown1_5, int lp_team1AttackingTown1_6, int lp_team1AttackingTown2_1, int lp_team1AttackingTown2_2, int lp_team1AttackingTown2_3, int lp_team1AttackingTown2_4, int lp_team1AttackingTown2_5, int lp_team1AttackingTown2_6);
void libMLCP_gf_MMSkyTempleAddTempleDefenderSpawnLocations (point lp_location1, point lp_location2, point lp_location3, point lp_location4, point lp_location5);
point libMLCP_gf_MMSkyTempleLocation (int lp_templeIndex);
void libMLCP_gf_MMSkyTempleRandomNextTemples (int lp_blessCount, bool lp_removeDisabled);
void libMLCP_gf_MMSkyTempleNextTemplesLogic ();
void libMLCP_gf_MMSkyTemplePrepareTemples ();
void libMLCP_gf_MMSkyTempleSetupPreview ();
void libMLCP_gf_MMSkyTempleBlessTemple (int lp_templeIndex);
void libMLCP_gf_MMSkyTempleBlessTempleDone (int lp_templeIndex);
int libMLCP_gf_MMSkyTempleActivateTempleCount (bool lp_next);
bool libMLCP_gf_MMSkyTempleAnyTempleActive ();
void libMLCP_gf_MMSkyTemplePrepareTempleDefenders (int lp_templeIndex);
void libMLCP_gf_MMSkyTemplePrepareTempleDefenderStatue (int lp_templeIndex, int lp_defenderIndex, unit lp_defender);
void libMLCP_gf_MMSkyTempleActivateTempleDefenderWaves (int lp_templeIndex, int lp_stage);
void libMLCP_gf_MMSkyTempleActivateTempleDefender (int lp_templeIndex, unit lp_defender);
void libMLCP_gf_MMSkyTempleDeactivateTempleDefender (unit lp_defender);
int libMLCP_gf_MMSkyTempleTempleIndexForDefenders (int lp_defenderAIIndex);
unit libMLCP_gf_MMSkyTempleNextTarget (int lp_templeIndex);
unitgroup libMLCP_gf_MMSkyTempleFinalShotNextTarget (int lp_templeIndex);
unitgroup libMLCP_gf_MMSkyTempleClosestUnits (unitgroup lp_group, int lp_count, point lp_sourceLocation);
bool libMLCP_gf_MMSkyTempleTownAlive (int lp_town, int lp_player);
bool libMLCP_gf_MMSkyTempleTownAliveForFinalBlast (int lp_town, int lp_player);
bool libMLCP_gf_MMSkyTempleBuildingGoodForFinalBlast (unit lp_building);
int libMLCP_gf_MMSkyTempleTempleStage (int lp_index);
void libMLCP_gf_MMSkyTempleBlessingProgress (int lp_templeIndex);
void libMLCP_gf_MMSkyTempleClearTargetRevealers (int lp_templeIndex, fixed lp_delay);
void libMLCP_gf_MMSkyTempleStopShooting (int lp_templeIndex);
string libMLCP_gf_MMSkyTempleShootingBeam (fixed lp_distance);
void libMLCP_gf_MMSkyTempleShootingPing (int lp_templeIndex, unit lp_target);
void libMLCP_gf_MMSkyTempleShootingPingBackup (int lp_templeIndex, unit lp_target);
void libMLCP_gf_MMSkyTempleBlessTempleFinalBlast (int lp_templeIndex);
void libMLCP_gf_MMSkyTempleUIInit (int lp_parentPanel);
void libMLCP_gf_MMSkyTempleUIShowHidePanel (bool lp_showHide);
void libMLCP_gf_MMSkyTempleUISetMode (int lp_mode);
void libMLCP_gf_MMSkyTempleUISetWarningTime (int lp_time);
void libMLCP_gf_MMSkyTempleUIEnableDisableTemple (bool lp_enableDisable, int lp_templeIndex);
void libMLCP_gf_MMSkyTempleUISetTempleCaptureProgress (int lp_templeIndex, int lp_team, int lp_progress, int lp_progerssMax);
void libMLCP_gf_MMSkyTempleUISetTempleStage (int lp_templeIndex, int lp_stage, int lp_progress);
void libMLCP_gf_MMSkyTempleUISetTempleOwner (int lp_team, int lp_templeIndex);
void libMLCP_gf_MMSkyTempleUISetTempleContested (int lp_templeIndex, bool lp_team);
void libMLCP_gf_MMSkyTempleUIShowDamageLabel (int lp_fromTeam, int lp_labelAnchor, int lp_damage);
void libMLCP_gf_TempleMasterSendAwardData ();
void libMLCP_gf_MMSkyTempleSetLevel ();
void libMLCP_gf_MMSkyTempleTransmissionTempleActivationWarningQ (playergroup lp_players);
void libMLCP_gf_MMSkyTempleTransmissionTempleActivatedQ (playergroup lp_players);
void libMLCP_gf_MMSkyTempleTransmissionTempleDeactivatedQ (playergroup lp_players);
// Trigger Declarations
trigger libMLCP_gt_MMSkyTempleInit;
trigger libMLCP_gt_MMSkyTemplePingDataInit;
trigger libMLCP_gt_MMSkyTempleAnnouncerInit;
trigger libMLCP_gt_MMSkyTempleGatesOpened;
trigger libMLCP_gt_MMSkyTempleObjectivePreviewTimerExpires;
trigger libMLCP_gt_MMSkyTempleBlessWarningTimerExpires;
trigger libMLCP_gt_MMSkyTempleDefenderAttackLogic;
trigger libMLCP_gt_MMSkyTempleTempleDefenderDies;
trigger libMLCP_gt_MMSkyTempleBeaconCaptured;
trigger libMLCP_gt_MMSkyTempleGameOver;
trigger libMLCP_gt_MMSkyTempleBeaconColor;
trigger libMLCP_gt_MMSkyTempleAttacks;
trigger libMLCP_gt_MMSkyTempleUIModInitialize;
trigger libMLCP_gt_MMSkyTempleUIHandler;
trigger libMLCP_gt_MMSkyTempleUIHandlerCaptureProgress;
trigger libMLCP_gt_MMSkyTempleHarrisonJonesEvent;
trigger libMLCP_gt_MMSkyTempleHarrisonJonesEnding;
trigger libMLCP_gt_MMSkyTempleDebugStart1;
trigger libMLCP_gt_MMSkyTempleDebugStart;
trigger libMLCP_gt_MMSkyTempleDebugNext;
trigger libMLCP_gt_MMSkyTempleDebugScalingTime;
trigger libMLCP_gt_MMSkyTempleSpawnTestTemple;
// Library Initialization
void libMLCP_InitVariables ();