include "TriggerLibs/HeroesLib"
//--------------------------------------------------------------------------------------------------
// Library: Warhead Junction
//--------------------------------------------------------------------------------------------------
// Preset Declarations
const int libMSC2_ge_MMSC2EventStates__None = 0;
const int libMSC2_ge_MMSC2EventStates_NoEvent = 1;
const int libMSC2_ge_MMSC2EventStates_CanisterWarning = 2;
const int libMSC2_ge_MMSC2EventStates_NukesActive = 3;
const int libMSC2_ge_MMSC2UIModes_None = 0;
const int libMSC2_ge_MMSC2UIModes_NoEvent = 1;
const int libMSC2_ge_MMSC2UIModes_CanisterWarning = 2;
const int libMSC2_ge_MMSC2UIModes_NukesActive = 3;
// Constants
const string libMSC2_gv_mMSC2MechanicName_C = "WarheadJunction";
const fixed libMSC2_gv_mMSC2FirstEventDelay_C = 180.0;
const fixed libMSC2_gv_mMSC2RepeatEventDelay_C = 35.0;
const fixed libMSC2_gv_mMSC2EventWarningDelayGasCanister_C = 30.0;
const fixed libMSC2_gv_mMSC2NukeArmingDuration_C = 5.0;
const fixed libMSC2_gv_mMSC2NukeInterruptDelay_C = 10.0;
const fixed libMSC2_gv_mMSC2NukeExpireDuration_C = 120.0;
const fixed libMSC2_gv_mMSC2NukeExpireWarningTime_C = 30.0;
const int libMSC2_gv_mMSC2BuiltWarheadsCountMax_C = 5;
const int libMSC2_gv_mMSC2DroppedWarheadsCountMax_C = 20;
const int libMSC2_gv_mMSC2TerrazineReward_C = 1;
const fixed libMSC2_gv_mMToDWaygateRevealArea_C = 5.0;
const int libMSC2_gv_mMFieldofSlaughterWaygateMaxCount_C = 2;
const fixed libMSC2_gv_mMSC2NukeDamageScalingDelay_C = 60.0;
// Structures
struct libMSC2_gs_MMToDWaygate {
point lv_position;
unit lv_waygateUnit;
unit lv_topWaygate;
unit lv_bottomWaygate;
};
struct libMSC2_gs_MMSC2_Nuke_Record {
bool[libCore_gv_bALMaxTeams + 1] lv_teamHasNukes;
bool[libCore_gv_bALMaxPlayers + 1] lv_playerNukeStateChanged;
};
struct libMSC2_gs_MMSC2WarheadPoints {
point lv_middleCanisterPoint;
point lv_leftCanisterPoint;
point lv_rightCanisterPoint;
doodad lv_middleCanisterDoodad;
doodad lv_leftCanisterDoodad;
doodad lv_rightCanisterDoodad;
};
struct libMSC2_gs_MMSC2UIPanel {
int lv_capturePointsPanel;
int lv_capturePointsTimerModeFrame;
int lv_capturePointsTimerModeNameLabel;
int lv_capturePointsTimerModeTimeLabel;
int lv_capturePointsTimerModeQuantityLabel;
int[libCore_gv_bALMaxTeams + 1] lv_ravenCourtTeamTributeFrame;
int[libCore_gv_bALMaxTeams + 1] lv_ravenCourtTeamTributeCounterLabel;
int[libCore_gv_bALMaxTeams + 1] lv_ravenCourtTeamTributeCounterLabel2;
int lv_ravenCourtCurseFrame;
int lv_ravenCourtCurseInfoLabel;
int lv_ravenCourtCurseTimerLabel;
int lv_ravenCourtCurseTimerLabel2;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_ravenCourtCurseTimerLabel3;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_ravenCourtCurseTimerLabel4;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_ravenCourtCurseTimerLabel5;
int lv_NukeFrameAllyTeam;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_NukeFrameAllyTeamPlayerIconBorders;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_NukeFrameAllyTeamPlayerIcons;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_NukeFrameAllyTeamPlayerTimer;
int lv_NukeFrameEnemyTeam;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_NukeFrameEnemyTeamPlayerIconBorders;
int[libCore_gv_bALMaxPlayersOnATeam + 1] lv_NukeFrameEnemyTeamPlayerIcons;
int lv_NukeFrameAllyTeam2;
int lv_NukeFrameAllyTeam3;
int lv_NukeFrameAllyTeam4;
int[libCore_gv_bALMaxTeams + 1] lv_backgroundImageBlueLeft;
int[libCore_gv_bALMaxTeams + 1] lv_backgroundImageBlueRight;
int[libCore_gv_bALMaxTeams + 1] lv_backgroundImageRedLeft;
int[libCore_gv_bALMaxTeams + 1] lv_backgroundImageRedRight;
int[libCore_gv_bALMaxTeams + 1] lv_nukeIconImageBlueLeft;
int[libCore_gv_bALMaxTeams + 1] lv_nukeIconImageBlueRight;
int[libCore_gv_bALMaxTeams + 1] lv_nukeIconImageRedLeft;
int[libCore_gv_bALMaxTeams + 1] lv_nukeIconImageRedRight;
};
// Variable Declarations
fixed libMSC2_gv_mMSC2NukePickupRange_C;
int libMSC2_gv_mMSC2EventState;
bool libMSC2_gv_mMSC2ThreeWarheadsSpawn;
int libMSC2_gv_mMSC2LastDoubleWarheadLane;
int libMSC2_gv_mMSC2LastEmptyWarheadLane;
timer libMSC2_gv_mMSC2TerrazineMainEventTimer;
unitgroup libMSC2_gv_mMSC2BuiltWarheadsActive;
unit[libMSC2_gv_mMSC2BuiltWarheadsCountMax_C + 1] libMSC2_gv_mMSC2BuiltWarheads;
revealer[libMSC2_gv_mMSC2BuiltWarheadsCountMax_C + 1][libCore_gv_bALMaxTeams + 1] libMSC2_gv_mMSC2BuiltWarheadsRevealer;
actor[libMSC2_gv_mMSC2BuiltWarheadsCountMax_C + 1] libMSC2_gv_mMSC2BuiltWarheadsWarningEffect;
unit[libMSC2_gv_mMSC2BuiltWarheadsCountMax_C + 1] libMSC2_gv_mMSC2BuiltWarheadsPreviewUnits;
int[libMSC2_gv_mMSC2BuiltWarheadsCountMax_C + 1] libMSC2_gv_mMSC2BuiltWarheadsWarningPing;
int libMSC2_gv_mMSC2BuiltWarheadsWarningEffectCount;
int[libCore_gv_bALMaxPlayers + 1][3] libMSC2_gv_mMSC2NukeCalldownPiing;
bool libMSC2_gv_mMSC2WarheadEventFirstTime;
fixed libMSC2_gv_mMSC2WarheadPickupReminderDelay_C;
timer libMSC2_gv_mMSC2BuiltWarheadReminderTimer;
int libMSC2_gv_mMSC2SpecialSpawnLane;
int libMSC2_gv_mMSC2EventTracker;
timer libMSC2_gv_mMSC2ObjectivePreviewTimer;
fixed libMSC2_gv_mMSC2ObjectivePreviewDelay_C;
libMSC2_gs_MMToDWaygate[libMSC2_gv_mMFieldofSlaughterWaygateMaxCount_C + 1] libMSC2_gv_mMToDWaygates;
libMSC2_gs_MMSC2_Nuke_Record libMSC2_gv_mMSC2_Nuke_Info;
libMSC2_gs_MMSC2WarheadPoints[4] libMSC2_gv_mMSC2WarheadData;
timer libMSC2_gv_mMSC2NukeDamageScalingTimer;
int[libCore_gv_bALMaxPlayers + 1] libMSC2_gv_mMSC2NukeDamageScalesDone;
int libMSC2_gv_mMSC2NukeDamageScalesNeeded;
int[libCore_gv_bALMaxPlayers + 1] libMSC2_gv_mMSC2NukeDamageDone;
timer libMSC2_gv_mMSC2DroppedWarheadReminderTimer;
unitgroup libMSC2_gv_mMSC2DroppedWarheadsGroup;
unit[libCore_gv_bALMaxTeams + 1] libMSC2_gv_nukeSiloUnit;
playergroup libMSC2_gv_mMSC2VOPlayingdelete;
bool libMSC2_gv_mMSC2GlobalConversationPlayingdelete;
bool libMSC2_gv_mMSC2GlobalConversationPlaying;
playergroup libMSC2_gv_mMSC2VOSoundPlaying;
libMSC2_gs_MMSC2UIPanel libMSC2_gv_mMSC2UIPanel;
int[libCore_gv_bALMaxEnginePlayerCount + 1][libCore_gv_bALMaxTeams + 1][libCore_gv_bALMaxPlayersOnATeam + 1] libMSC2_gv_mMSC2UINukeSiloPlayers;
// Function Declarations
void libMSC2_gf_MMSC2AddWarheadSpawnLocation (int lp_lane, doodad lp_leftCanisterPointDoodad, point lp_leftCannisterPoint, doodad lp_middleCanisterPointDoodad, point lp_middleCanisterPoint, doodad lp_rightCanisterPointDoodad, point lp_rightCannisterPoint);
int libMSC2_gf_MMSC2DetermineDoubleWarheadSpawnLane ();
int libMSC2_gf_MMSC2CountofNukesForPlayer (int lp_playerIndex);
void libMSC2_gf_MMSC2WarningStarts (int lp_specialLane);
void libMSC2_gf_MMSC2SetupandStartPreview (int lp_specialLane);
void libMSC2_gf_MMSC2CreateCanisterPreview (point lp_location);
void libMSC2_gf_MMSC2CreateCanisterSpawningSignal (point lp_location);
void libMSC2_gf_MMSC2ClearCanisterSpawningSignals ();
void libMSC2_gf_MMSC2ClearWarheadPreviews ();
void libMSC2_gf_MMSC2SpawnNukeCanisters (int lp_specialSpawnLane);
void libMSC2_gf_MMSC2NukeButtonStartFlashingForPlayer (int lp_player);
void libMSC2_gf_MMSC2NukeButtonStopFlashingForPlayer (int lp_player);
void libMSC2_gf_MMSC2BuiltWarheadSpawned (point lp_canisterSpawnLocation, int lp_gasAmount);
void libMSC2_gf_MMTodAddWaygate (int lp_waygateIndex, unit lp_waygateUnit, unit lp_topEntrance, unit lp_bottomEntrance);
void libMSC2_gf_MMToDActivateWaygates ();
int libMSC2_gf_MMSC2NukeCountforTeam (int lp_team);
void libMSC2_gf_MMSC2UpdateNukeTextTagsForPlayers ();
void libMSC2_gf_MMSC2ShowHideNukeTextTagsForPlayer (bool lp_showHide, int lp_player);
void libMSC2_gf_MMSC2NukeDamageScalingOnPickup (int lp_playerIndex);
void libMSC2_gf_MMSC2ArmNukeForUnit (unit lp_unit);
void libMSC2_gf_MMSC2PlayerUsesNuke (unit lp_unit);
void libMSC2_gf_MMSC2CanisterPlaformPlayBirthAnimations (doodad lp_doodad);
void libMSC2_gf_MMSC2CanisterEventDone ();
void libMSC2_gf_MMSC2PlayVOSoundforPlayer (soundlink lp_vOSound, int lp_player);
void libMSC2_gf_MMSC2TransmissionWarheadSpawnWarningQ ();
void libMSC2_gf_MMSC2TransmissionWarheadsSpawnedQ ();
void libMSC2_gf_MMSC2TransmissionPlayerCollectsNuke (int lp_player);
void libMSC2_gf_MMSC2TransmissionPlayerNukeReady (int lp_player);
void libMSC2_gf_MMSC2TransmissionPlayerFiresNuke (int lp_player);
void libMSC2_gf_MMSC2TransmissionAllNukesCollectedQ ();
void libMSC2_gf_MMSC2UIInit (int lp_parentPanel);
void libMSC2_gf_MMSC2UISetMode (int lp_mode);
void libMSC2_gf_MMSC2UIUpdateNukeStateInitForPlayer (int lp_player);
void libMSC2_gf_MMSC2UIUpdateNukeStateForPlayer (int lp_player);
void libMSC2_gf_MMSC2UISetEruptionWarningTime (int lp_remainingSeconds);
void libMSC2_gf_MMSC2UIEnableNukeUIStateForPlayer (int lp_player);
void libMSC2_gf_MMSC2UIDisableNukeUIStateForPlayer (int lp_player);
void libMSC2_gf_MMSC2UIUpdateNukeCountForTeam (int lp_count, int lp_team);
// Trigger Declarations
trigger libMSC2_gt_IncludeWarheadJunction;
trigger libMSC2_gt_MMSC2Init;
trigger libMSC2_gt_MMSC2InitializePingData;
trigger libMSC2_gt_MMSC2GatesOpened;
trigger libMSC2_gt_MMSC2MainThread;
trigger libMSC2_gt_MMSC2ObjectivePreviewTimerExpires;
trigger libMSC2_gt_MMSC2ActivateWaygates;
trigger libMSC2_gt_MMToDEnteredWaygate;
trigger libMSC2_gt_MMSC2BuiltWarheadReminderTimerExpires;
trigger libMSC2_gt_MMSC2NukeDamageScaling;
trigger libMSC2_gt_MMSC2BuiltWarheadChannelStarted;
trigger libMSC2_gt_MMSC2BuiltWarheadCaptured;
trigger libMSC2_gt_MMSC2NukeChannelingPing;
trigger libMSC2_gt_MMSC2NukeCancelingPing;
trigger libMSC2_gt_MMSC2NukeInterrupted;
trigger libMSC2_gt_MMSC2NukeUsed;
trigger libMSC2_gt_MMSC2NukeDamageDealt;
trigger libMSC2_gt_MMSC2PlayerDieswithNuke;
trigger libMSC2_gt_MMSC2DroppedWarheadSpawned;
trigger libMSC2_gt_MMSC2DroppedWarheadChannelStarted;
trigger libMSC2_gt_MMSC2DroppedWarheadCaptured;
trigger libMSC2_gt_MMSC2DroppedWarheadReminderTimerExpired;
trigger libMSC2_gt_InitNukeSilos;
trigger libMSC2_gt_MMSC2DebugVOTest;
trigger libMSC2_gt_MMSC2DebugVOCollect;
trigger libMSC2_gt_MMSC2DebugVOWarning;
trigger libMSC2_gt_MMSC2DebugVOCheck;
trigger libMSC2_gt_MMSC2DebugVOCheck2;
trigger libMSC2_gt_MMSC2UIModInitialize;
trigger libMSC2_gt_MMSC2UIHandler;
trigger libMSC2_gt_MMSC2DebugEventStart;
// Library Initialization
void libMSC2_InitVariables ();