include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Blackheart's Bay (Mod)
//--------------------------------------------------------------------------------------------------
// Preset Declarations
const int libBBAY_ge_MMBBMapMechanicsBlackheartsBayModes_Doubloons = 0;
const int libBBAY_ge_MMBBMapMechanicsBlackheartsBayModes_Cannon = 1;
const int libBBAY_ge_MMBBCannonballsState_Starting = 0;
const int libBBAY_ge_MMBBCannonballsState_Paying = 1;
const int libBBAY_ge_MMBBCannonballsState_Shooting = 2;
// Constants
const string libBBAY_gv_mMBBCannonballsMechanicName_C = "BlackheartsBay";
const int libBBAY_gv_mMBBCannonballsStartInBattleship_C = 0;
const int libBBAY_gv_mMBBCannonballsBallsSubmitMax_C = 8;
const int libBBAY_gv_mMBBCannonballsBallsSubmitMaxInc_C = 2;
const int libBBAY_gv_mMBBCannonballsStockedInBattleship_C = 12;
const int libBBAY_gv_mMBBShotsPerBarrage_C = 3;
const int libBBAY_gv_mMBBCannonballsHeroStatusBarIconVisibleThreadhold_C = 1;
const fixed libBBAY_gv_mMBBCannonballsTreasureChestFirstTimerDur_C = 90.0;
const fixed libBBAY_gv_mMBBCannonballsTreasureChestTimerMin_C = 150.0;
const fixed libBBAY_gv_mMBBCannonballsTreasureChestTimerMid_C2 = 180.0;
const fixed libBBAY_gv_mMBBCannonballsTreasureChestTimerMax_C = 210.0;
const int libBBAY_gv_mMBBCannonballsGhostChestCoinsDrop_C = 5;
const int libBBAY_gv_mMBBCannonballsTreasureChestMaxCount_C = 3;
const fixed libBBAY_gv_mMBBCannonballsTreasureChestPingTimerTime = 15.0;
const int libBBAY_gv_mMBBMapMechanicsBlackheartsBayCannonballCount_C = 12;
const fixed libBBAY_gv_mMBBMapMechanicsBlackheartsBayChestsSpawnedFrameTimerDuration_C = 8.0;
// Variable Declarations
int[6][4] libBBAY_gv_chestPatterns;
point libBBAY_gv_mMBBCannonballsGhostShipLoc;
fixed libBBAY_gv_mMBBCannonballsGhostShipSpawnTimer;
point libBBAY_gv_mMBBCannonballsGhostShipBeaconLoc;
int[3] libBBAY_gv_mMBBCannonballsBallsSubmitMaxCurrent;
bool[libCore_gv_bALMaxPlayers + 1] libBBAY_gv_mMBBTurnInUsed;
bool[libCore_gv_bALMaxPlayers + 1] libBBAY_gv_mMBBChestsAttacked;
unit libBBAY_gv_mMBBBlackheartsLootBannerSconce;
unit libBBAY_gv_mMBBCannonballsGhostShip;
int libBBAY_gv_mMBBCannonballsGhostShipTotalAmmo;
int[3] libBBAY_gv_mMBBCannonballsGhostShipTargetTownIndex;
int[3][21] libBBAY_gv_mMBBCannonballsGhostShipTargetTownOrders;
int[3] libBBAY_gv_mMBBCannonballsGhostShipTargetTownOrdersCount;
unit libBBAY_gv_mMBBCannonballsGhostShipMissile;
int libBBAY_gv_mMBBCannonballsGhostShipMissileTargetPing;
bool libBBAY_gv_mMBBCannonballsGhostShipShooting;
unit libBBAY_gv_mMBBCannonballsGhostShipBeacon;
unit libBBAY_gv_mMBBCannonballsGhostShipCaptain;
point libBBAY_gv_mMBBCannonballsGhostShipCaptainWorkPoint;
region libBBAY_gv_mMBBCannonballsGhostShipPlayerDetectorRegion;
int[3] libBBAY_gv_mMBBCannonballsBallsSubmitted;
int libBBAY_gv_mMBBCannonballsGhostShipActivationCount;
int libBBAY_gv_mMBBCannonballsGhostShipLastTeam;
unit[13] libBBAY_gv_mMBB_CannonTarget;
point[13] libBBAY_gv_mMBB_CannonTargetPoint;
int libBBAY_gv_mMBB_CannonsFired;
int libBBAY_gv_mMBBCannonballsChestOccurance;
int[6] libBBAY_gv_mMBBCannonballsTreasureChestMaxCountPerOccurance;
point[4] libBBAY_gv_mMBBCannonballsGhostChestLocations;
timer libBBAY_gv_mMBBCannonballsTreasureChestTimer;
unit[4] libBBAY_gv_mMBBCannonballsTreasureChestChests;
timer libBBAY_gv_mMBBCannonballsTreasureChestPingTimer;
bool libBBAY_gv_mMBBCannonballsTreasureChestIsFirstChest;
timer libBBAY_gv_mMBBMapMechanicsBlackheartsBayChestsSpawnedFrameTimer;
int libBBAY_gv_mMBBMapMechanicsBlackheartsBayCurrentMode;
int[libCore_gv_bALMaxPlayers + 1] libBBAY_gv_mMBBDoubloonsCollected;
int[libCore_gv_bALMaxPlayers + 1] libBBAY_gv_mMBBDoubloonsDropped;
int[libCore_gv_bALMaxPlayers + 1] libBBAY_gv_mMBBDoubloonsTurnedIn;
int[libCore_gv_bALMaxTeams + 1] libBBAY_gv_mMBBEventsStarted;
bool libBBAY_gv_mMBBCannonballsTrasmissionPlaying;
int libBBAY_gv_mMBBCannonballsTransmissionFiringIndex;
int libBBAY_gv_mMBBCannonballsTransmissionFiringRandomness;
// Function Declarations
void libBBAY_gf_MMBBCannonballsInitGhostshipInfo (point lp_shipLoc, point lp_beaconLoc);
void libBBAY_gf_MMBBCannonballsInitTreasureChestInfo (point lp_chestLocation1, point lp_chestLocation2, point lp_chestLocation3);
int libBBAY_gf_MMBBCannonballsHeroCannonballsCount (int lp_player, unit lp_heroUnit);
int libBBAY_gf_MMBBCannonballsPirateShipCost (int lp_team);
void libBBAY_gf_MMBBCannonballsAddGhostShipTargetOrder (int lp_team, int lp_townIndex);
void libBBAY_gf_InitializePatterns ();
int libBBAY_gf_MMBBCannonballsTeamCannonballsCount (int lp_team);
int libBBAY_gf_MMBBCannonballsCurrentlyCarriedforTeam (int lp_team);
void libBBAY_gf_MMBBCannonballsSubmitReqIncrease (int lp_team);
void libBBAY_gf_MMBBCannonballsSetHeroCannonballsCount (int lp_player, unit lp_heroUnit, int lp_count);
void libBBAY_gf_MMBBCannonballsGhostShipWakeUp (int lp_team, bool lp_new);
void libBBAY_gf_MMBBCannonballsDisableBeacon ();
void libBBAY_gf_MMBBCannonballsBattleshipBehavior ();
int libBBAY_gf_MMBBCannonballsBattleshipAmmoLeft ();
unit libBBAY_gf_MMBBCannonballsBattleshipNextTarget ();
void libBBAY_gf_MMBBCannonballsBattleshipShooting (unit lp_target);
bool libBBAY_gf_MMBBCannonballsTownAlive (int lp_town, int lp_player);
void libBBAY_gf_MMBBCannonballsBattleshipShootingShakingCamera (point lp_targetLocation);
void libBBAY_gf_MMBBEnableDisableBlackheartInteractGoals (bool lp_toggle, unit lp_blackheartUnit);
text libBBAY_gf_MMBBCannonballsTreasureSetTextTagHelp ();
text libBBAY_gf_MMBBCannonballsTreasureSetTextTagDoubloonCount (int lp_coins);
void libBBAY_gf_MMBBCannonballsTreasureTheFirstTimer ();
void libBBAY_gf_MMBBCannonballsTreasureStartTimer ();
void libBBAY_gf_MMBBMapMechanicsBlackheartsBayShowHidePanel (bool lp_showHide);
void libBBAY_gf_MMBBMapMechanicsBlackheartsBaySetMode (int lp_mode);
void libBBAY_gf_MMBBMapMechanicsBlackheartsBayShowChestsSpawnedFrame ();
void libBBAY_gf_MMBBMapMechanicsBlackheartsBayShowCannonballForTeam (int lp_team);
void libBBAY_gf_MMBBMapMechanicsBlackheartsBaySetDoubloonCountForTeam (int lp_count, int lp_maxCount, int lp_team);
void libBBAY_gf_MMBBMapMechanicsBlackheartsBaySetShotCountForTeam (int lp_count, int lp_team);
void libBBAY_gf_MMBBUpdateHeldDoubloonDisplay ();
void libBBAY_gf_MMBBCannonballsObjectiveUIUpdateText ();
void libBBAY_gf_MMBBCannonballsTransmissionSpawningQ (playergroup lp_players);
void libBBAY_gf_MMBBCannonballsTransmissionSummonedQ (int lp_shipTeam);
void libBBAY_gf_MMBBCannonballsTransmissionFiringQ (playergroup lp_players);
void libBBAY_gf_MMBBCannonballsTransmissionLeavingQ (playergroup lp_players);
void libBBAY_gf_MMBBCannonballsTransmissionChestSpawningFirstQ (playergroup lp_players);
void libBBAY_gf_MMBBCannonballsTransmissionChestSpawningRepeatQ (playergroup lp_players);
// Trigger Declarations
trigger libBBAY_gt_MMBBCannonballsInit;
trigger libBBAY_gt_MMBBPingDataInit;
trigger libBBAY_gt_MMBBCannonballsHeroSpawned;
trigger libBBAY_gt_MMBBCannonballsHeroMapMechanicStatusSetup;
trigger libBBAY_gt_MMBBCannonballsHeroDies;
trigger libBBAY_gt_MMBBCannonballCreated;
trigger libBBAY_gt_MMBBCannonballsGatesAreOpenComplete;
trigger libBBAY_gt_MMBBCannonballsEventStart;
trigger libBBAY_gt_MMBBCannonballsHeroPickup;
trigger libBBAY_gt_MMBBCannonballsBallsHandedIn;
trigger libBBAY_gt_MMBBCannonballsCreepRewards;
trigger libBBAY_gt_MMBBCannonballsOpenChestUponRespawn;
trigger libBBAY_gt_MMBBCannonballsBattleshipShootingMissileCreated;
trigger libBBAY_gt_MMBBCannonballsBattleshipKilledATown;
trigger libBBAY_gt_MMBBKeepOrFortGetsTakenOver;
trigger libBBAY_gt_MMBBCannonballsTreasureSpawnChests;
trigger libBBAY_gt_MMBBCannonballsTreasureChestSpawnsDoubloon;
trigger libBBAY_gt_MMBBCannonballsTreasureChestPingTimerExpires;
trigger libBBAY_gt_MMBBCannonballsTreasureAChestDies;
trigger libBBAY_gt_MMBBCannonballsTreasureChestsAreDead;
trigger libBBAY_gt_MMBBCannonballsTreasureChestAttacked;
trigger libBBAY_gt_MMBBCannonballsObjectiveUIHandler;
trigger libBBAY_gt_MMBBCannonballsDoubloonDropped;
trigger libBBAY_gt_MMBBCannonballsShootingStart;
trigger libBBAY_gt_MMBBCannonballsShootingEnd;
trigger libBBAY_gt_MMBBCannonballsGameOver;
trigger libBBAY_gt_MMBB_DebugCannonballsEventStart;
trigger libBBAY_gt_MMBB_DebugTriggerBombard;
// Library Initialization
void libBBAY_InitVariables ();