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 ();