include "TriggerLibs/HeroesLib_h"



//--------------------------------------------------------------------------------------------------

// Library: Maps

//--------------------------------------------------------------------------------------------------

// Preset Declarations

const int libMapM_ge_JungleCampDefenderTypes_Custom = 0;

const int libMapM_ge_JungleCampDefenderTypes_SiegeGiants = 1;

const int libMapM_ge_JungleCampDefenderTypes_Knights = 2;

const int libMapM_ge_JungleCampDefenderTypes_GraveGolem = 3;

const int libMapM_ge_JungleCampDefenderTypes_Doubloons = 4;

const int libMapM_ge_JungleCampDefenderTypes_SiegeCamp1 = 5;

const int libMapM_ge_JungleCampDefenderTypes_SiegeCamp2 = 6;

const int libMapM_ge_JungleCampDefenderTypes_SiegeCamp3 = 7;

const int libMapM_ge_JungleCampDefenderTypes_BruiserCamp1 = 8;

const int libMapM_ge_JungleCampDefenderTypes_BruiserCamp2 = 9;

const int libMapM_ge_JungleCampDefenderTypes_BruiserCamp3 = 10;

const int libMapM_ge_JungleCampDefenderTypes_BossCamp1 = 11;

const int libMapM_ge_JungleCampDefenderTypes_BossCamp2 = 12;

const int libMapM_ge_JungleCampDefenderTypes_BossCamp3 = 13;

const int libMapM_ge_JungleCampMercTypes_Custom = 0;

const int libMapM_ge_JungleCampMercTypes_SiegeGiants = 1;

const int libMapM_ge_JungleCampMercTypes_Ogres = 2;

const int libMapM_ge_JungleCampMercTypes_GraveGolem = 3;

const int libMapM_ge_JungleCampMercTypes_AshenvaleAncients = 4;

const int libMapM_ge_JungleCampMercTypes_SiegeCamp1 = 5;

const int libMapM_ge_JungleCampMercTypes_SiegeCamp2 = 6;

const int libMapM_ge_JungleCampMercTypes_SiegeCamp3 = 7;

const int libMapM_ge_JungleCampMercTypes_BruiserCamp1 = 8;

const int libMapM_ge_JungleCampMercTypes_BruiserCamp2 = 9;

const int libMapM_ge_JungleCampMercTypes_BruiserCamp3 = 10;

const int libMapM_ge_JungleCampMercTypes_BossCamp1 = 11;

const int libMapM_ge_JungleCampMercTypes_BossCamp2 = 12;

const int libMapM_ge_JungleCampMercTypes_BossCamp3 = 13;

const int libMapM_ge_JungleCampTypes_MercCamp = 0;

const int libMapM_ge_JungleCampTypes_DoubloonCamp = 1;

const int libMapM_ge_JungleCampTypes_DoubloonSmallCamp = 2;

const int libMapM_ge_JungleCampTypes_AshenvaleForestGuardians = 3;

const int libMapM_ge_JungleCampTypes_TryMeCamp = 4;

const int libMapM_ge_JungleCampTypes_Custom1 = 5;

const int libMapM_ge_JungleCampTypes_Custom2 = 6;

const int libMapM_ge_JungleCampTypes_Custom3 = 7;

const int libMapM_ge_JungleCampStates_Idle = 0;

const int libMapM_ge_JungleCampStates_Busy = 1;

const int libMapM_ge_JungleCampStates_Dead = 2;

const int libMapM_ge_JungleCampStates_Paused = 3;

const int libMapM_ge_JungleCampStates_Hibernating = 4;

const int libMapM_ge_JungleCampStates_HibernatingReadyToRespawn = 5;

string libMapM_ge_JungleCampStates_Ident (int lp_val);

const int libMapM_ge_MapMechanicAnnouncementAllyOptions_Neutral = 0;

const int libMapM_ge_MapMechanicAnnouncementAllyOptions_Ally = 1;

const int libMapM_ge_MapMechanicAnnouncementAllyOptions_Enemy = 2;

const int libMapM_ge_MapMechanicAnnouncementAllyOptions_AllySmall = 3;

const int libMapM_ge_MMRavenCurseState_Starting = 0;

const int libMapM_ge_MMRavenCurseState_TributeSpawning = 1;

const int libMapM_ge_MMRavenCurseState_TributeSpawned = 2;

const int libMapM_ge_MMRavenCurseState_NoActivity = 3;

const int libMapM_ge_MMRavenCurseState_Cursed = 4;

const int libMapM_ge_MMRavenCurseState_Lifted = 5;

const int libMapM_ge_MMGardensDragonState_Idle = 0;

const int libMapM_ge_MMGardensDragonState_ObelisksWarning = 1;

const int libMapM_ge_MMGardensDragonState_ObelisksAvailable = 2;

const int libMapM_ge_MMGardensDragonState_DragonRampaging = 3;



// Constants

const fixed libMapM_gv_bALJungleBirthDelay = 3.0;

const fixed libMapM_gv_bALJungleCampCaptureTime = 1.5;

const fixed libMapM_gv_bALJungleCampCaptureRadius = 3.0;

const int libMapM_gv_dataJungleMaxNumberOfDefenderTypes = 15;

const int libMapM_gv_dataJungleMaxNumberOfDefendersPerCamp = 10;

const int libMapM_gv_dataJungleMaxNumberOfMercTypes = 15;

const int libMapM_gv_dataJungleMaxNumberOfMercsSpawned = 10;

const int libMapM_gv_dataJungleMaxNumberOfPaths = 6;

const int libMapM_gv_jungleMaxCamps = 15;

const int libMapM_gv_jungleMaxMercGroups = 30;

const int libMapM_gv_mapMechanicsMaxCount_C = 4;

const int libMapM_gv_mMRepulseRegionPunchTargetMax_C = 4;

const string libMapM_gv_mMRavenMechanicName_C = "CursedHollow";

const int libMapM_gv_mMRavenTributeSpawnPointsCountMax_C = 50;

const fixed libMapM_gv_mMRavenRevealRadius_C = 4.5;

const fixed libMapM_gv_mMRavenSpawnWarningTimerTime_C = 30.0;

const fixed libMapM_gv_mMRavenTributeSpawnTimeFirst_C = 17.0;

const fixed libMapM_gv_mMRavenTributeSpawnTime_C = 70.0;

const int libMapM_gv_mMRavenTributeThreshold_C = 3;

const fixed libMapM_gv_mMRavenCurseDuration_C = 70.0;

const string libMapM_gv_mMGardensDragonMechanicName_C = "DragonShire";

const int libMapM_gv_mMGardensDragonDragonTowerObeliskCount_C = 2;

const int libMapM_gv_mMGardensDragonDragonTowerMaxCount = 10;

const fixed libMapM_gv_mMGardensDragonWarningTime_C = 30.0;

const fixed libMapM_gv_mMGardensDragonDragonTowerStartTime_C = 60.0;

const fixed libMapM_gv_mMGardensDragonDragonTowerRespawnTime_C = 90.0;

const fixed libMapM_gv_mMGardensDragonDragonKnightStartingTime_C = 55.0;

const fixed libMapM_gv_mMGardensDragonDragonTowerOverCaptureTime_C = 0.0;

const fixed libMapM_gv_mMGardensDragonDragonballTowerCaptureRadius_C = 4.0;

const fixed libMapM_gv_mMGardensDragonDragonStatueReminderTimerTime_C = 15.0;

const fixed libMapM_gv_mMGardensDragonDragonStatueChannelTime_C = 3.0;

const fixed libMapM_gv_mMGardensDragonDragonStatueHelperTextTagHeightOffset_C = -2.5;

const fixed libMapM_gv_mMGardensDragonDragonTowerCaptureTime_C = 4.0;

const int libMapM_gv_vehicle_MaxNumberOfVehicles_C = 30;



// Structures

struct libMapM_gs_JungleCampDefenderData {

    bool lv_campIsSoloable;

    bool lv_campIsElite;

    bool lv_defendersCoweronDeath;

    bool[libMapM_gv_dataJungleMaxNumberOfDefendersPerCamp + 1] lv_defenderCoweringUnit;

    fixed lv_initialSpawnDelay;

    fixed lv_respawnTime;

    int lv_numberOfCreeps;

    text lv_campTypeMinimapTitleLabel;

    text lv_campTypeMinimapLabel;

    text lv_customTextTagTitle;

    text lv_customTextTagInfoText;

    string[libMapM_gv_dataJungleMaxNumberOfDefendersPerCamp + 1] lv_creepUnitTypes;

    fixed lv_xPAwardForCapture;

    int lv_numberOfRanks;

    int[libCore_gv_dataScalingMaxScalingTicks + 1] lv_campLevel;

    string lv_aIGoalLink;

};



struct libMapM_gs_JungleCampPathData {

    region lv_townRegion;

    point lv_waypoint;

};



struct libMapM_gs_JungleCampMercData {

    int lv_numberOfMinionsSpawned;

    string[libMapM_gv_dataJungleMaxNumberOfMercsSpawned + 1] lv_spawnedMinionUnitTypes;

    int lv_numberOfRanks;

};



struct libMapM_gs_JungleCampUI {

    int lv_jungleCreepCampsParentPanel;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsDialog;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCamp_PositionControl;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfoPanel;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfo_Label_Timer;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfo_Label_Title;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfo_Label_PlayerName;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfo_Label_Description;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfo_Label_Debug;

    int[libMapM_gv_jungleMaxCamps + 1] lv_jungleCreepCampsInfoPanel2;

};



struct libMapM_gs_JungleCreepCamps {

    int lv_mapDataCampType;

    int lv_mapDataCampDefenderType;

    point lv_mapDataCampCaptainSpawnPoint;

    point[libMapM_gv_dataJungleMaxNumberOfDefendersPerCamp + 1] lv_mapDataDefenderSpawnPoints;

    region lv_mapDataDefenderLeashRegion;

    string lv_mapDataCapturePointSplatModel;

    string lv_mapDataMinimapIcon;

    fixed lv_mapDataMinimapIconScale;

    bool lv_mapDataMinimapIconUseTeamColor;

    bool lv_mapDataCampIsElite;

    int lv_mapDataMercSpawnType;

    int lv_mapDataBattleshipSpawnType;

    unit lv_mapDataCampBuildingBuilding;

    bool lv_defenderCampIsSoloable;

    bool lv_defenderCampInstantlyGrantsReward;

    int lv_defenderNumberofCreeps;

    string[libMapM_gv_dataJungleMaxNumberOfDefendersPerCamp + 1] lv_defenderUnitTypes;

    fixed lv_defenderInitialSpawnDelay;

    fixed lv_defenderRespawnTime;

    int lv_defenderNumberOfRanks;

    int[libCore_gv_dataScalingMaxScalingTicks + 1] lv_defenderCampLevel;

    fixed lv_defenderCaptureXPValue;

    bool lv_defenderDefendersCoweronDeath;

    bool lv_defenderSuppressActiveLanerCounter;

    text lv_defenderCampTypeMinimapTitle;

    text lv_defenderCampTypeMinimapLabel;

    bool lv_defenderDefendersHaveStaggeredBirth;

    fixed lv_defenderDefendersStaggeredBirthPeriod;

    bool[libMapM_gv_dataJungleMaxNumberOfDefendersPerCamp + 1] lv_defenderCoweringUnit;

    unitgroup lv_defenderCoweringLivingUnitGroup;

    unitgroup lv_defenderCoweringDeadUnitGroup;

    unitgroup lv_defenderUnitGroup;

    bool lv_defenderDamagesCoreOnCapture;

    int lv_defenderDefendersBribedCount;

    int lv_mercNumberOfMinionsSpawned;

    string[libMapM_gv_dataJungleMaxNumberOfMercsSpawned + 1] lv_mercSpawnedMinionUnitType;

    fixed[libMapM_gv_dataJungleMaxNumberOfMercsSpawned + 1] lv_mercSpawnedMinionAIThreatValueforAITeamDelegateSystem;

    int lv_mercNumberOfRanks;

    bool[libCore_gv_bALMaxTeams + 1] lv_mercMercCampHasSingleWaypoint;

    libMapM_gs_JungleCampPathData[libMapM_gv_dataJungleMaxNumberOfPaths + 1] lv_mercOrderMercCampPathing;

    libMapM_gs_JungleCampPathData[libMapM_gv_dataJungleMaxNumberOfPaths + 1] lv_mercChaosMercCampPathing;

    bool lv_mercCampHibernateswhenmatchingcampsareactive;

    int[libCore_gv_bALMaxTeams + 1] lv_mercLaneToSpawnIn;

    int[libCore_gv_bALMaxTeams + 1] lv_mercLaneLastSpawnedIn;

    int[libCore_gv_bALMaxTeams + 1] lv_mercSpawnFirstWaypointIndex;

    int lv_piratesNumberOfRanks;

    unit lv_campIconUnit;

    unit lv_campOwnershipFlagUnit;

    point lv_campOwnershipFlagPosition;

    int lv_campHelperTextTagOrder;

    int lv_campHelperTextTagChaos;

    int lv_capturingPlayer;

    bool lv_campAwardsRegenGlobe;

    bool lv_stateIsEnabled;

    bool lv_statePersonalHiberationisEnabled;

    timer lv_stateCreepBirthTimer;

    timer lv_stateCreepRespawnTimer;

    timer lv_stateCreepActiveTimer;

    int lv_stateCurrentDefenderScalingTicks;

    int lv_stateCurrentMercScalingTicks;

    bool lv_stateHasSpawned;

    int lv_aIState;

    int lv_aIDefenderAIIndex;

    string lv_aICampGoalLink;

    region lv_captureCaptureRegion;

    unit lv_captureCircleOfPowerUnit;

    bool lv_captureCaptureEnabled;

    int lv_captureCaptureCounter;

    int lv_captureCapturePointIndex;

    int lv_statTrackingOrderCaptures;

    int lv_statTrackingChaosCaptures;

    fixed lv_statTrackingDamageDoneByLastCapture;

};



struct libMapM_gs_MapMechanicUsedTracker {

    bool lv_healingFountainUsed;

    bool lv_dragonShrine;

    bool lv_dragonStatue;

    bool lv_minesEntrance;

    bool lv_minesExit;

    bool lv_ravenTribute;

};



struct libMapM_gs_RavenCurseTeamStats {

    int lv_triburteCollected;

    bool lv_cursed;

};



struct libMapM_gs_MMGardensDragonDragonballTowers {

    unit lv_shrineUnit;

    region lv_captureRegion;

    bool lv_enabled;

    int lv_captureBeaconIndex;

    int lv_helperText;

    unit lv_shrineBeamTargetUnit;

};



struct libMapM_gs_Vehicle {

    unit lv_unit_Vehicle;

    unit lv_unit_UnitInsideVehicle;

    unit lv_unit_LinkedVehicle;

    int lv_player_PlayerControllingVehicle;

};



// Variable Declarations

fixed libMapM_gv_bALJungleLeashRespawnTime;

fixed libMapM_gv_bALJungleCampScalingTimerDuration;

fixed libMapM_gv_bALJungleOgreMageAuraAbilityPowerPercentage;

fixed libMapM_gv_genericMercCampInitialSpawnDelay_C;

fixed libMapM_gv_genericMercBossCampInitialSpawnDelay_C;

fixed libMapM_gv_mercSapperDefaultSpawnTime_C;

fixed libMapM_gv_mercSapperDefaultRespawnTime_C;

fixed libMapM_gv_reconCampInitialSpawnDelay_C;

libMapM_gs_JungleCampDefenderData[libMapM_gv_dataJungleMaxNumberOfDefenderTypes + 1] libMapM_gv_dataJungleCampDefenderData;

libMapM_gs_JungleCampMercData[libMapM_gv_dataJungleMaxNumberOfMercTypes + 1] libMapM_gv_dataJungleCampMercData;

libMapM_gs_JungleCampUI libMapM_gv_uIJungleCampPanel;

bool libMapM_gv_jungleCreepCampsInitialized;

int libMapM_gv_jungleCreepCampsCurrentCallbackIndex;

libMapM_gs_JungleCreepCamps[libMapM_gv_jungleMaxCamps + 1] libMapM_gv_jungleCreepCamps;

int libMapM_gv_jungleNumberOfCreepCamps;

int libMapM_gv_jungleNumberOfActiveMercGroups;

unitgroup[libMapM_gv_jungleMaxMercGroups + 1] libMapM_gv_jungleMiniMapIconGroup;

unit[libMapM_gv_jungleMaxMercGroups + 1] libMapM_gv_jungleMiniMapLeader;

int[libMapM_gv_jungleMaxMercGroups + 1] libMapM_gv_jungleMiniMapPath;

int[libMapM_gv_jungleMaxMercGroups + 1] libMapM_gv_jungleMiniMapPathCurrentIndex;

int[libMapM_gv_jungleMaxMercGroups + 1] libMapM_gv_jungleMiniMapPathIndexMaximum;

text[libMapM_gv_jungleMaxCamps + 1][libMapM_gv_jungleMaxCamps + 1] libMapM_gv_jungleCreepCampTextTagText;

bool libMapM_gv_jungleAllCampsShouldBeHibernating;

string[libMapM_gv_mapMechanicsMaxCount_C + 1] libMapM_gv_mapMechanics;

actor libMapM_gv_mapMechanicControllerActor;

int libMapM_gv_mapMechanicsCount;

trigger[libMapM_gv_mapMechanicsMaxCount_C + 1] libMapM_gv_mapMechanicsInitCallbacks;

text libMapM_gv_mapMechanicsObserverCountLabelText;

libMapM_gs_MapMechanicUsedTracker[libCore_gv_bALMaxPlayers + 1] libMapM_gv_mapMechanicUsedTracker;

int[libCore_gv_bALMaxEnginePlayerCount + 1] libMapM_gv_mMIntroCutscene;

int libMapM_gv_mMIntroCutscenePlayer;

bool[libCore_gv_bALMaxEnginePlayerCount + 1] libMapM_gv_mMIntroCutsceneCompleted;

bool[libCore_gv_bALMaxEnginePlayerCount + 1] libMapM_gv_mMIntroCutsceneFinished;

int libMapM_gv_mMAnnouncementDialog;

int[libCore_gv_bALMaxEnginePlayerCount + 1] libMapM_gv_mMAnnouncementDialogsMultiple;

bool[6] libMapM_gv_mMRunConversationDone;

int libMapM_gv_mMRunConversationDoneCount;

region[libCore_gv_bALMaxTeams + 1] libMapM_gv_mMRepulseRegions;

point[libCore_gv_bALMaxTeams + 1][libMapM_gv_mMRepulseRegionPunchTargetMax_C + 1] libMapM_gv_mMRepulseRegionPunchTarget;

unitgroup libMapM_gv_mMRepulseRegionPunchedGroup;

region[libCore_gv_bALMaxTeams + 1] libMapM_gv_mMSafeRegions;

int libMapM_gv_countOfMMAIUnits;

trigger libMapM_gv_mMEnableMapEventTrigger;

trigger libMapM_gv_mMDisableMapEventTrigger;

bool libMapM_gv_mMMapMechanicDisabled;

bool libMapM_gv_mMMapEventHasOccured;

libMapM_gs_RavenCurseTeamStats[libCore_gv_bALMaxTeams + 1] libMapM_gv_mMRavenTeamStats;

point[libMapM_gv_mMRavenTributeSpawnPointsCountMax_C + 1] libMapM_gv_mMRavenTributeSpawnPoints;

point libMapM_gv_mMRavenTributeNextSpawnPoint;

int libMapM_gv_mMRavenTributeSpawnPointsCount;

bool libMapM_gv_mMRavenUseManualTributeSpawns;

revealer libMapM_gv_mMRavenOrderRevealer;

revealer libMapM_gv_mMRavenChaosRevealer;

unitgroup libMapM_gv_mMRavenTributes;

unitgroup libMapM_gv_mMRavenTributeWarnings;

unit libMapM_gv_mMRavenTributeWarning;

unit libMapM_gv_mMRavenTributePreview;

fixed libMapM_gv_mMRavenStartTime;

int libMapM_gv_mMRavenTributeSpawnTimeVariance;

fixed libMapM_gv_mMRavenTributePostCurseWaitTime;

int libMapM_gv_mMRavenTributesCollected;

timer libMapM_gv_mMRavenStartTimer;

timer libMapM_gv_mMRavenWarningTimer;

timer libMapM_gv_mMRavenTributeSpawnTimer;

bool libMapM_gv_mMRavenUseTributePreviews;

int libMapM_gv_mMRavenTributeSpawnCount;

int libMapM_gv_mMRavenLastTributeSpawnIndex1;

int libMapM_gv_mMRavenLastTributeSpawnIndex2;

int libMapM_gv_mMRavenTributeSpawnGroupIndex;

sound libMapM_gv_mMRavenSpawnSound;

fixed libMapM_gv_mMRavenFirstEventTiming;

timer libMapM_gv_mMRavenObjectivePreviewTimer;

fixed libMapM_gv_mMRavenObjectivePreviewLongDelay;

fixed libMapM_gv_mMRavenObjectivePreviewShortDelay;

timer libMapM_gv_mMRavenCurseTimer;

bool libMapM_gv_mMRavenCurseLifted;

sound libMapM_gv_mMRavenCurseSound;

fixed[libCore_gv_bALMaxPlayers + 1] libMapM_gv_siegeDamagePreCurse;

fixed[libCore_gv_bALMaxPlayers + 1] libMapM_gv_totalCurseSiegeDamage;

timer[6] libMapM_gv_mMRavenTimers;

int libMapM_gv_mMRavenTimerCount;

bool[6] libMapM_gv_mMRavenTimers3;

bool libMapM_gv_mMRavenTimers2;

bool libMapM_gv_mMRavenEventFirstTime;

text libMapM_gv_mMGardensDragonDragonballKnightNameC;

text libMapM_gv_mMGardensDragonDragonballShrineNameC;

unit libMapM_gv_mMGardensDragonTowerMoonBeamTarget;

unit libMapM_gv_mMGardensDragonTowerMoon;

unit libMapM_gv_mMGardensDragonTowerStar;

unit libMapM_gv_mMGardensDragonTowerStarBeamTarget;

sound libMapM_gv_mMGardensDragonAmbientSound;

unit libMapM_gv_mMGardensDragonUnit;

int libMapM_gv_mMGardensDragonPlayer;

unit libMapM_gv_mMGardensDragonStatue;

int libMapM_gv_mMGardensDragonStatueTextTag;

int libMapM_gv_mMGardensDragonStatueTextTagAllyOwned;

int libMapM_gv_mMGardensDragonStatueTextTagEnemyOwned;

timer libMapM_gv_mMGardensDragonDragonKnightLifeTimer;

point libMapM_gv_mMGardensDragonDragonKnightRespawnPoint;

int libMapM_gv_mMGardensDragonCurrentState;

bool libMapM_gv_mMGardensDragonSpawnFirstTime;

timer libMapM_gv_mMGardensDragonDragonTowerStartTimer;

timer libMapM_gv_mMGardensDragonDragonTowerRespawnTimer;

timer libMapM_gv_mMGardensDragonDragonTowerWarningTimer;

timer libMapM_gv_mMGardensDragonDragonTowerGoalActivationTimer;

timer libMapM_gv_mMGardensDragonDragonStatueActiveReminderTimer;

int libMapM_gv_mMGardensDragonDragonTowerCount;

libMapM_gs_MMGardensDragonDragonballTowers[libMapM_gv_mMGardensDragonDragonTowerMaxCount + 1] libMapM_gv_mMGardensDragonDragonTowers;

actor libMapM_gv_mMGardensDragonSoundRegionActor;

region libMapM_gv_mMGardensDragonSoundRegion;

int libMapM_gv_mMGardensDragonDragonCaptures;

point libMapM_gv_mMGardensDragonSpawnPoint;

bool libMapM_gv_mMDragonballsTransmissionShrinesRechargeFirstTime;

libMapM_gs_Vehicle[libMapM_gv_vehicle_MaxNumberOfVehicles_C + 1] libMapM_gv_vehicle;

int libMapM_gv_vehicle_VehicleCount;



// Function Declarations

void libMapM_gf_InitializeSiegeTrooperMercType (int lp_campType, text lp_mercName);

void libMapM_gf_InitializeSummonerMercType (int lp_campType, text lp_summonerName, text lp_summonedUnitName);

void libMapM_gf_InitializeHellbatMercType (int lp_campType, text lp_mercName, fixed lp_initialSpawnDelay, fixed lp_respawnTime, bool lp_cowerOnDeath);

void libMapM_gf_InitializeSapperMercType (int lp_campType, text lp_mercName, fixed lp_initialSpawnDelay, fixed lp_respawnDelay);

void libMapM_gf_DataInitializeScalingDataForDefender (int lp_defenderType, string lp_scalingBehavior);

void libMapM_gf_DataInitializeScalingDataForMerc (int lp_mercType, string lp_scalingBehavior);

void libMapM_gf_JungleInitializeDefenderData (int lp_camp);

void libMapM_gf_JungleInitializeMercCampData (int lp_camp);

void libMapM_gf_JungleUpdateMercCampData (int lp_camp);

point libMapM_gf_JungleDetermineMercWaypoint (int lp_owningTeam, int lp_camp);

void libMapM_gf_JungleInitializeDoubloonCampData (int lp_camp);

void libMapM_gf_JungleInitializeDoubloonSmallCampData (int lp_camp);

void libMapM_gf_JungleInitializeTryMeCampData (int lp_camp);

void libMapM_gf_JungleInitializeCreepCampDelayMinimapIcons (unit lp_unit, fixed lp_delayTime);

void libMapM_gf_JungleInitializeCreepCamp (int lp_camp);

int libMapM_gf_JungleGetJungleCampForUnit (unit lp_unit);

int libMapM_gf_JungleGetJungleUnitIndexForUnit (unit lp_unit);

string libMapM_gf_JungleGetCurrentIconForJungleCamp (int lp_camp, bool lp_alive);

string libMapM_gf_JungleGetPortraitForJungleCamp (int lp_camp);

string libMapM_gf_JungleGetPortraitForUnitType (string lp_unitType);

text libMapM_gf_JungleGetNameTextForJungleCamp (int lp_camp);

unit libMapM_gf_JungleGetRandomEnemyHeroInRangeOfMinionWithMinimumRangeRequirements (unit lp_creep, point lp_position, fixed lp_minimumRange, fixed lp_maximumRange, unit lp_restrictedUnit);

int libMapM_gf_JungleGetCampIndexFromDefenderIndex (int lp_defenderIndex);

void libMapM_gf_JungleUpdateTextTagForCamp (int lp_camp);

void libMapM_gf_JungleSwitchToTextTagForCamp (int lp_camp);

void libMapM_gf_JungleUpdateMinimapTooltipForCamp (int lp_camp);

void libMapM_gf_JungleRespawnCreepsForCamp (int lp_camp);

void libMapM_gf_JungleDebugResetCamp (int lp_Player, int lp_Camp);

void libMapM_gf_JungleTransitionCampIntoState (int lp_camp, int lp_state);

void libMapM_gf_JungleHibernateCampDefender (unit lp_defender);

void libMapM_gf_JungleStopHibernatingCampDefender (unit lp_defender, point lp_location);

void libMapM_gf_JungleStartHibernateCamps ();

void libMapM_gf_JungleHibernateMatchingCamps (string lp_leaderUnitType);

void libMapM_gf_JungleStopHibernateCamps ();

void libMapM_gf_JungleStopHibernateCampsByLeaderUnit (string lp_laningUnitType);

void libMapM_gf_JungleTurnOnCampCaptureBeacon (int lp_camp);

void libMapM_gf_JungleTurnOffCampCaptureBeacon (int lp_camp, int lp_owner);

void libMapM_gf_JungleTransitionCampCaptureBeacontoHidden (int lp_camp);

void libMapM_gf_JungleGrantCaptureRewards (int lp_camp, int lp_owner, bool lp_hasMercLordTalent);

void libMapM_gf_JungleMercCampCapturedAnnouncement (int lp_camp, int lp_owner);

void libMapM_gf_JungleSpawnMercMinions (int lp_camp, int lp_owner, bool lp_hasMercLordTalent);

int libMapM_gf_JungleGetMercCampForUnit (unit lp_unit);

int libMapM_gf_JungleGetMercLanerGroupForUnit (unit lp_unit);

void libMapM_gf_JungleSetMiniMapIconForMercMinions (int lp_camp, int lp_mercGroupIndex, string lp_mercUnitMiniMapModel, unitgroup lp_mercUnitGroup);

void libMapM_gf_JungleCreateMercPath (unit lp_mercLeader, bool lp_newPath);

void libMapM_gf_JungleDropLootBannerinMercCamp (int lp_campIndex, playergroup lp_creditPlayerGroup);

void libMapM_gf_JungleUpdateMercDamageTracker (int lp_camp, fixed lp_damageDealt);

void libMapM_gf_MapMechanicAdd (string lp_mechanic, trigger lp_initializeCallback);

int libMapM_gf_MapMechanicIndex (string lp_mechanic);

bool libMapM_gf_MapMechanicExistsOnMap (string lp_mechanic);

string libMapM_gf_PrimaryMapMechanic ();

void libMapM_gf_PlayMapMechanicIntroForPlayer (int lp_player, string lp_cutscene, string lp_filter);

bool libMapM_gf_MapMechanicIntroFinished (int lp_player);

void libMapM_gf_MapMechanicDisplayAnnouncement (text lp_announcement, bool lp_writeOut, fixed lp_writeOutDuration, fixed lp_duration, int lp_allyOption, playergroup lp_players);

void libMapM_gf_MapMechanicDisplayAnnouncementWait (text lp_announcement, bool lp_writeOut, fixed lp_writeOutDuration, fixed lp_duration, int lp_allyOption, playergroup lp_players, bool lp_waitOption);

void libMapM_gf_MMAnnouncementClearnup (int lp_dlg, int lp_label, fixed lp_duration, playergroup lp_players);

void libMapM_gf_MapMechanicDisplayAnnouncementMultipleAllowed (text lp_announcement, bool lp_writeOut, fixed lp_writeOutDuration, fixed lp_duration, int lp_allyOption, playergroup lp_players);

void libMapM_gf_MMAnnouncementMultiplePerPlayer (int lp_player, text lp_announcement, bool lp_writeOut, fixed lp_writeOutDuration, fixed lp_duration, int lp_allyOption);

void libMapM_gf_MapMechanicRunConversation (string lp_convoOrder, string lp_convoChaos, string lp_convoObserver);

void libMapM_gf_MMRunConversationIndividual (string lp_convo, playergroup lp_players);

void libMapM_gf_MapSetRepulseRegion (int lp_team, region lp_pulseRegion, point lp_punchTargetLocation1, point lp_punchTargetLocation2, point lp_punchTargetLocation3, point lp_punchTargetLocation4);

void libMapM_gf_MMRepulseRegionAddToPunchedGroup (unit lp_punchedUnit);

void libMapM_gf_MapSetSafeRegion (int lp_team, region lp_safeRegion);

void libMapM_gf_RestrictAbilitiesToRegionForUnit (unit lp_unit, region lp_region);

int libMapM_gf_RegisterMapMechanicAIUnitCustomValue ();

void libMapM_gf_ShareVisionofUnitForBothTeams (unit lp_tributeWarningUnit);

void libMapM_gf_CreateSnapshotOfUnitForBothTeams (unit lp_unit);

void libMapM_gf_RegisterMapEventEnableDisableTriggers (trigger lp_disableMapEventTrigger, trigger lp_enableMapEventTrigger);

void libMapM_gf_EnableDisableMapEvent (bool lp_enableOrDisable);

void libMapM_gf_MMRavenCurseAddTributeSpawnLocation (point lp_spawnLocation);

bool libMapM_gf_MMRavenCurseStarted ();

fixed libMapM_gf_MMRavenStartTime ();

fixed libMapM_gf_MMRavenTributeSpawnTime ();

int libMapM_gf_MMRavenTributeThresholdAmount ();

string libMapM_gf_MMRavenTributeUnitType ();

point libMapM_gf_MMRavenRandomSpawnPoint ();

int libMapM_gf_MMRavenSpawnPointSide (int lp_index);

void libMapM_gf_MMRavenStartSpawnTimer5090 ();

void libMapM_gf_MMRavenCreatePreviewTribute (point lp_previewLocation);

void libMapM_gf_MMRavenTributeCollectionThresholdReached (int lp_winningTeam);

void libMapM_gf_MMRavenCurseStart (int lp_cursedPlayerID);

void libMapM_gf_MMRavenApplyCurseEffectOnMinion (unit lp_unit);

void libMapM_gf_MMRavenRemoveCurseEffectOnMinion (unit lp_minion);

void libMapM_gf_MMRavenPlayCurseSound (int lp_cursedTeam);

void libMapM_gf_MMRavenWaitForandPlayCurseEndWarning ();

void libMapM_gf_MMRavenObjectiveUIUpdateText ();

void libMapM_gf_PreCurseSiegeDamageCache (int lp_cursingTeam);

void libMapM_gf_CalculateCurseSiegeDamageDone (int lp_cursingTeam);

void libMapM_gf_PauseUnpauseCurseHollowTimers (bool lp_pauseUnpause);

void libMapM_gf_MMRavenTransmissionFirstEventStartQ ();

void libMapM_gf_MMRavenTransmissionRepeatEventStartQ ();

void libMapM_gf_MMRavenTransmissionCurseActiveQ (int lp_cursedTeam);

void libMapM_gf_MMRavenTransmissionCurseEndsQ ();

void libMapM_gf_MMGardensDragonInitTowers (unit lp_towerMoon, unit lp_towerStar);

void libMapM_gf_MMGardensDragonChangeDragonballTowerOwnership (int lp_dragonballTowerIndex, int lp_newOwner, playergroup lp_capturingPlayers);

void libMapM_gf_MMGardensDragonDeactivateStatue (int lp_computerPlayer);

void libMapM_gf_MMGardensDragonActivateStatueForTeam (int lp_computerPlayer);

fixed libMapM_gf_MMGardensDragonDragonDuration ();

bool libMapM_gf_MMGardensDragonObeliskFullyCaptured (unit lp_obeliskUnit);

void libMapM_gf_MMGardensDragonDragonHasEnteredArtHooks ();

void libMapM_gf_MMGardensDragonDragonHasLeftArtHooks ();

void libMapM_gf_MMDragonballsTransmissionObelisksChargingFirstQ ();

void libMapM_gf_MMDragonballsTransmissionObelisksChargingRepeatQ ();

void libMapM_gf_MMDragonballsTransmissionObelisksSpawnFirstQ ();

void libMapM_gf_MMDragonballsTransmissionObelisksSpawnRepeatQ ();

void libMapM_gf_MMDragonballsTransmissionDragonCapturableQ (int lp_activeTeam);

void libMapM_gf_MMDragonballsTransmissionDragonActiveQ (int lp_activeTeam);

void libMapM_gf_MMDragonballsTransmissionDragonExpireQ ();

void libMapM_gf_AddVehicle (unit lp_vehicleUnit);

void libMapM_gf_RemoveVehicle (unit lp_vehicleUnit);

void libMapM_gf_SwapVehicleForPlayer (unit lp_originalVehicle, unit lp_newVehicle);

void libMapM_gf_LinkVehicleToVehicle (unit lp_vehicleUnit_1, unit lp_vehicleUnit_2);

void libMapM_gf_PlayerEntersVehicle (unit lp_unitEnteringVehicle, unit lp_vehicleUnit);

void libMapM_gf_PlayerLeavesVehicle (int lp_vehicleIndex);

int libMapM_gf_GetVehicleIndexOfUnit (unit lp_vehicleUnit);



// Trigger Declarations

trigger libMapM_gt_IncludeMapMechanics;

trigger libMapM_gt_SummonerMinionLanerScaling;

trigger libMapM_gt_DataJungleCampDefenderDoubloons;

trigger libMapM_gt_DataJungleCampDefenderSiegeGiants;

trigger libMapM_gt_DataJungleCampDefenderKnights;

trigger libMapM_gt_DataJungleCampDefenderGraveGolem;

trigger libMapM_gt_DataJungleCampMercSiegeGiants;

trigger libMapM_gt_DataJungleCampMercOgres;

trigger libMapM_gt_DataJungleCampMercGraveGolem;

trigger libMapM_gt_DataJungleCampDefenderData;

trigger libMapM_gt_DataJungleCampMercData;

trigger libMapM_gt_InitializeJungleCamps;

trigger libMapM_gt_StartJungleCampTimers;

trigger libMapM_gt_JungleCreepCampRespawnTimerExpires;

trigger libMapM_gt_JungleRespawnTimerTextTagCountdown;

trigger libMapM_gt_JungleDefendersBeginFighting;

trigger libMapM_gt_JungleDefendersEndFighting;

trigger libMapM_gt_JungleAllDefendersKilled;

trigger libMapM_gt_JungleHibernateCampsStart;

trigger libMapM_gt_JungleHibernateCampsEnd;

trigger libMapM_gt_JungleHibernateDefendersThatLeash;

trigger libMapM_gt_JungleHibernateDefendersThatJustSpawned;

trigger libMapM_gt_JungleCampOwnershipChange;

trigger libMapM_gt_JungleMercLeaderDies;

trigger libMapM_gt_JungleMercOgreShieldUsedOgre;

trigger libMapM_gt_JungleMercOgreShieldUsedHero;

trigger libMapM_gt_DEBUGJungleMercDamageDetection;

trigger libMapM_gt_JungleSiegeGiantTaunt;

trigger libMapM_gt_InitializeMapMechanics;

trigger libMapM_gt_MMHelpbuttonClicked;

trigger libMapM_gt_MMIntroCutsceneStart;

trigger libMapM_gt_MMIntroCutsceneEnd;

trigger libMapM_gt_MMIntroSkippable;

trigger libMapM_gt_MMRepulseRegionPunchBehavior;

trigger libMapM_gt_MMSafeRegionBehavior;

trigger libMapM_gt_MMRemoveStackingCoreShieldMechanic;

trigger libMapM_gt_EnableDisableMapEvent;

trigger libMapM_gt_MMRavenCurseInit;

trigger libMapM_gt_MMRavenCurseGateOpen;

trigger libMapM_gt_MMRavenStartSpawning;

trigger libMapM_gt_MMRavenSpawnTribute;

trigger libMapM_gt_MMRavenObjectivePreviewTimerExpires;

trigger libMapM_gt_MMRavenTributeCollectStarted;

trigger libMapM_gt_MMRavenTributeCollectCanceled;

trigger libMapM_gt_MMRavenTributeCollectInterrupted;

trigger libMapM_gt_MMRavenTributeObtained;

trigger libMapM_gt_MMRavenCurseReapplication;

trigger libMapM_gt_MMRavenCurseStartLightTransition;

trigger libMapM_gt_MMRavenCurseFinished;

trigger libMapM_gt_MMRavenObjectiveUIHandler;

trigger libMapM_gt_MMRavenDisableEvent;

trigger libMapM_gt_MMRavenEnableEvent;

trigger libMapM_gt_MMRavenDebugStartWarning;

trigger libMapM_gt_MMRavenDebugStartElunees;

trigger libMapM_gt_MMRavenDebugStartNexten;

trigger libMapM_gt_MMRavenDebugStartCurseec;

trigger libMapM_gt_CalculateCurseSiegeDamageDone;

trigger libMapM_gt_MMGardensDragonInit;

trigger libMapM_gt_MMGardensDragonGateOpen;

trigger libMapM_gt_MMGardensDragonWarningTimerStart;

trigger libMapM_gt_MMGardensDragonTowerGoalActivationTimerExpires;

trigger libMapM_gt_MMGardensDragonWarningTimerExpires;

trigger libMapM_gt_MMGardensDragonDragonEventStarts;

trigger libMapM_gt_MMGardensDragonDragonEventEnds;

trigger libMapM_gt_MMGardensDragonTurnOnDragonTowersFirstTime;

trigger libMapM_gt_MMGardensDragonTurnOnDragonTowersAgain;

trigger libMapM_gt_MMGardensDragonDragonTowerChangeOwnershipEventFires;

trigger libMapM_gt_MMGardensDragonDragonTowerCheckObeliskStatus;

trigger libMapM_gt_MMGardensDragonTransformChannelStart;

trigger libMapM_gt_MMGardensDragonTransformChannelFinish;

trigger libMapM_gt_MMGardensDragonTakeDragonReminderTimerExpires;

trigger libMapM_gt_MMGardensDragonDragonKnightDiesorExpires;

trigger libMapM_gt_MMGardensDragonObjectiveUIHandler;

trigger libMapM_gt_MMGardensDragonDisableEvent;

trigger libMapM_gt_MMGardensDragonDebugCheatStartObelisksso;

trigger libMapM_gt_MMGardensDragonCreateDragon;

trigger libMapM_gt_MMGardensDragonExtendLife;

trigger libMapM_gt_DEBUGAddVehicle;

trigger libMapM_gt_DEBUGRemoveVehicle;

trigger libMapM_gt_DEBUGLinkVehicle;



// Library Initialization

void libMapM_InitVariables ();