include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Infernal Shrines (Mod)
//--------------------------------------------------------------------------------------------------
// Preset Declarations
const int libMSHE_ge_MMISShrineTypes_None = 0;
const int libMSHE_ge_MMISShrineTypes_CombatShrine = 1;
const int libMSHE_ge_MMISShrineTypes_MonsterShrine = 2;
const int libMSHE_ge_MMISShrineTypes_SiegeShrine = 3;
const int libMSHE_ge_MMISShrineTypes_FrozenShrine = 4;
const int libMSHE_ge_MMISShrineTypes_BombardShrine = 5;
const int libMSHE_ge_MMISShrineTypes_ThunderstormShrine = 6;
const int libMSHE_ge_MMISShrineTypes_ArcaneShrine = 7;
const int libMSHE_ge_MMISUIModes_Idle = 0;
const int libMSHE_ge_MMISUIModes_ShrineWarning = 1;
const int libMSHE_ge_MMISUIModes_ShrineActive = 2;
const int libMSHE_ge_MMISUIModes_Punisher = 3;
const int libMSHE_ge_MMISUIModes_CursedEvent = 4;
const int libMSHE_ge_MMISUIModes_Engine = 5;
const int libMSHE_ge_MMISUIModes_Reinforcements = 6;
const int libMSHE_ge_MMISUIModes_PunisherSpawning = 7;
// Constants
const string libMSHE_gv_mMISMechanicName_C = "InfernalShrines";
const int libMSHE_gv_mMISTotalMonsters_C = 10;
const fixed libMSHE_gv_mMDiabloShrineRefreshMonster_C = 5.0;
const fixed libMSHE_gv_mMDiabloShrinesShrineTimerDuration_C = 150.0;
const fixed libMSHE_gv_mMDiabloShrinesBuffTimerDuration_C = 90.0;
const fixed libMSHE_gv_mMDiabloShrineWarningTimerLong_C = 30.0;
const fixed libMSHE_gv_mMDiabloShrinesExperinceTimer_C = 60.0;
const int libMSHE_gv_mMDiabloShrineCursedEventTotal_C = 40;
const int libMSHE_gv_mMISMoltenScalingAmount_C = 2;
const int libMSHE_gv_mMISThunderstormScalingAmount_C = 7;
const int libMSHE_gv_mMISArcaneScalingAmount_C = 8;
const int libMSHE_gv_mMISFrozenScalingAmount_C = 18;
const int libMSHE_gv_mMISMortarScalingAmount_C = 17;
// Structures
struct libMSHE_gs_MMTowerPushPanel {
int lv_mainPanel;
int[3] lv_towerPushEnergyGlobePower;
int lv_shrineWarningFrame;
int lv_shrineWarningInfoLabel;
int lv_shrineWarningTimerLabel;
int lv_shrineActiveFrame;
int lv_shrineActiveInfoLabel;
int lv_crystalMortarIcon;
int lv_crystalFrozenIcon;
int lv_crystalArcaneIcon;
int lv_reinforcementWarningFrame;
int lv_reinforcementWarningInfoLabel;
int lv_reinforcementWarningTimerLabel;
int lv_hauntedMinesSkullModeFrame;
int[libCore_gv_bALMaxTeams + 1] lv_hauntedMinesSkullModeSkullCounterLabel;
int lv_punisherFrame;
int lv_punisherHealthBar;
int lv_punisherTimer;
int lv_punisherInfoLabel;
int lv_punisherArcaneAllyIcon;
int lv_punisherArcaneEnemyIcon;
int lv_punisherFrozenAllyIcon;
int lv_punisherFrozenEnemyIcon;
int lv_punisherMortarAllyIcon;
int lv_punisherMortarEnemyIcon;
};
// Variable Declarations
fixed libMSHE_gv_mMDiabloShrinesShrineTimerWarning;
int libMSHE_gv_mMDiabloShrinesShrineNotificationTimer;
timer libMSHE_gv_mMISShrineTimer;
timer libMSHE_gv_mMISBuffTimer;
timer libMSHE_gv_mMISShrineWarningTimer;
timer libMSHE_gv_mMISExperince;
timer libMSHE_gv_mMISCursedRefreshTimer;
timer libMSHE_gv_mMISLongWarningTimer;
playergroup libMSHE_gv_mMISMonsterGroup;
bool libMSHE_gv_mMISCursedEvent;
unitgroup libMSHE_gv_mMISCursedCreatures;
int[libCore_gv_bALMaxTeams + 1] libMSHE_gv_mMISTextTag;
int[libCore_gv_bALMaxPlayers + 1] libMSHE_gv_mMISDamageDoneToShrineMinions;
unitgroup libMSHE_gv_mMISInactiveShrines;
unitgroup libMSHE_gv_mMISActiveShrines;
unit[4] libMSHE_gv_mMISShrines;
unitgroup[4] libMSHE_gv_mMISShrineGroups;
int libMSHE_gv_mMISUnitGroupIndex;
point libMSHE_gv_mMISMonsterShrine;
int libMSHE_gv_mMISBuffedTeam;
unit libMSHE_gv_mMISPunisher;
text libMSHE_gv_mMISShrineBuffText;
int libMSHE_gv_mMISNumberofShrinesAllowed;
int libMSHE_gv_mMISNumberOfShrinesEvents;
int libMSHE_gv_mMISTotalShrineCount;
int libMSHE_gv_mMISLastShrine;
int libMSHE_gv_mMISLastShrineCounter;
int libMSHE_gv_mMISCurrentShrine;
fixed libMSHE_gv_mMISMonsterXP;
revealer[3] libMSHE_gv_mMISRevealers;
unit libMSHE_gv_mMISWarningUnit;
string libMSHE_gv_mMISBuff;
int libMSHE_gv_mMISBuffIndex;
int libMSHE_gv_mMISLastBuff;
region[4] libMSHE_gv_mMISRegions;
int[3] libMSHE_gv_mMISKillCount;
playergroup libMSHE_gv_mMISShrineGroup;
unitgroup libMSHE_gv_mMISParalyzeStorage;
bool libMSHE_gv_mMISShowOjectiveTimer;
bool libMSHE_gv_mMISShrineIsActive;
timer libMSHE_gv_mMISObjectivePreviewTimer;
fixed libMSHE_gv_mMISObjectivePreviewDelay_C;
int libMSHE_gv_mMISShrineReminderDelay_C;
timer libMSHE_gv_mMISShrineReminderTimer;
int libMSHE_gv_mMISShrineNotificationDelay_C;
timer libMSHE_gv_mMISShrineNotificationTimer;
timer libMSHE_gv_mMISPunisherSpawnTimer;
string[libCore_gv_bALMaxEnginePlayerCount + 1] libMSHE_gv_mMUnderworldAmbience;
timer libMSHE_gv_mMISAffixTimer;
int libMSHE_gv_mMISAffixTimerDuration;
int libMSHE_gv_punisherDuration;
fixed libMSHE_gv_punisherHeroDamage;
fixed libMSHE_gv_punisherSiegeDamage;
int libMSHE_gv_mMDiabloShrinesPunisherPushLane;
libMSHE_gs_MMTowerPushPanel libMSHE_gv_mMTowerPushPanel;
unit libMSHE_gv_mMISUIPunisherUnit;
int libMSHE_gv_forcedPunisherType;
// Function Declarations
void libMSHE_gf_MMISMapData (point lp_monsterShrine, unit lp_diabloShrineTop, unit lp_diabloShrineMiddle, unit lp_diabloShrineBottom, region lp_diabloShrineTopRegion, region lp_diabloShrineMiddleRegion, region lp_diabloShrineBottomRegion);
void libMSHE_gf_MMISTextTagScoreHandler (int lp_enemyTeam, int lp_team, unit lp_currentShrine);
void libMSHE_gf_MMISRandomizeNextShrineandShowPreview ();
int libMSHE_gf_MMISGetWhichShrine ();
void libMSHE_gf_MMISActivateShrine (int lp_shrine);
void libMSHE_gf_MMISAnnouncementShrineCaptured (unit lp_shrineUnit, int lp_shrine, int lp_team);
void libMSHE_gf_MMISWarningAnnouncementShrine (int lp_shrine);
void libMSHE_gf_MMISGrantShrineRewardToTeam (int lp_team, unit lp_shrine, string lp_shrineBuff);
string libMSHE_gf_MMISGetIconForShrine (int lp_shrine);
text libMSHE_gf_MMISGetShrineText (int lp_shrine);
string libMSHE_gf_MMISGetBuffForShrine (int lp_shrine);
void libMSHE_gf_MMISSpawnShrineMonster (int lp_affix, int lp_team);
void libMSHE_gf_MMBOEUpdateAmbience (int lp_player);
void libMSHE_gf_MMBOEChangeAmbience (string lp_ambience, string lp_reverb, playergroup lp_players);
void libMSHE_gf_MMISTransmissionShrineWarningActivating ();
void libMSHE_gf_MMISTransmissionShrineActivating ();
void libMSHE_gf_MMISTransmissionPunisherSummoned (int lp_team, int lp_shrineType);
void libMSHE_gf_MMISTransmissionPunisherKilled (int lp_team);
void libMSHE_gf_MMTowerPushUIShowHidePanel (bool lp_showHide);
void libMSHE_gf_MMTowerPushUISetGoblinCount (int lp_count, int lp_count2);
void libMSHE_gf_MMTowerPushUISetMode (int lp_mode);
void libMSHE_gf_MMTowerPushUISetEnergyGlobalProgressUnit3 (int lp_progressUnit);
void libMSHE_gf_MMTowerPushUISetEnergyGlobalProgressUnit5 (int lp_progressUnit);
void libMSHE_gf_MMTowerPushUISetEnergyGlobalProgressUnit (unit lp_progressUnit);
void libMSHE_gf_MMTowerPushUIInit (int lp_parentPanel);
void libMSHE_gf_MMISUIPunisherSpawnTimer (int lp_team);
// Trigger Declarations
trigger libMSHE_gt_MMISInit;
trigger libMSHE_gt_MMISPingDataInit;
trigger libMSHE_gt_MMISGateOpen;
trigger libMSHE_gt_MMISWarningTimerLong;
trigger libMSHE_gt_MMISCursedEventMinionTracker;
trigger libMSHE_gt_MMISCursedEventScoreTracker;
trigger libMSHE_gt_MMISCursedEventTimerRespawner;
trigger libMSHE_gt_MMISCursedEventMinionDamageTracker;
trigger libMSHE_gt_MMISExperienceTimerExpired;
trigger libMSHE_gt_MMISInitializeShrines;
trigger libMSHE_gt_MMISShrineTimerExpired;
trigger libMSHE_gt_MMISObjectivePreviewTimerExpires;
trigger libMSHE_gt_MMISBuffTimerExpired;
trigger libMSHE_gt_MMISWarningTimerExpired;
trigger libMSHE_gt_MMISStartShrineTimer;
trigger libMSHE_gt_MMISShrineUsedbyPlayer;
trigger libMSHE_gt_GameOver;
trigger libMSHE_gt_MMISShrineReminderTimerExpired;
trigger libMSHE_gt_MMInfernalShrinesPlayerMovesCamera;
trigger libMSHE_gt_MMISAffixScaling;
trigger libMSHE_gt_PunisherLeap;
trigger libMSHE_gt_PunisherFixateOn;
trigger libMSHE_gt_PunisherFixateOff;
trigger libMSHE_gt_PunisherDamageTracking;
trigger libMSHE_gt_PunisherDurationTracking;
trigger libMSHE_gt_MMISUIModInitialize;
trigger libMSHE_gt_MMISUIHandler;
trigger libMSHE_gt_MMISForcePunisherType;
trigger libMSHE_gt_MMISDebugSpawnNextShrine;
trigger libMSHE_gt_MMISDebugWarningShrine;
trigger libMSHE_gt_MMISDebugLongShrineTimer;
trigger libMSHE_gt_MMISDebugShowObjectiveTimer;
trigger libMSHE_gt_MMISDebugDisableEvent;
// Library Initialization
void libMSHE_InitVariables ();