Skip to content

Commit

Permalink
[MISSIONS] Updated to ALiVE_Operation_Cobra.SPE_Normandy to v.1.00.3
Browse files Browse the repository at this point in the history
  • Loading branch information
DarrellJMartin committed Aug 10, 2023
1 parent 2a140e0 commit 55e47bf
Show file tree
Hide file tree
Showing 11 changed files with 254 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/ALiVE Operation Cobra v.1.00.1.txt
/ALiVE Operation Cobra v.1.00.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Changelog

ALiVE Operation Cobra v.1.00.3

- Updated dominant faction in CQB module
- Fixed issue where client's were running ALIVE_fnc_getNearProfiles from global trigger. ALIVE_fnc_getNearProfiles should only be called serverside since ALiVE_profileSystem is not PV'd to clients.
- Fixed locality issues when players JIP'd and interacted with MHQ
- Updated wording of Intel displayMenu's
- Added attack intel script
- Update initServer.sqf
- Update initServer.sqf
- Update initplayerlocal.sqf
- Update init.sqf
- Added empty vehicle markers
- Performance pass on mission.sqm
- Added Main base blacklist for IFS
- Fix for IFS dissapearing on respawn
- Update README.md



Original file line number Diff line number Diff line change
@@ -1,2 +1,44 @@
# ALiVE Operation Cobra
An Arma 3 multiplayer mission for the Spearhead 1944 CDLC by Jman & Atlas
# ALiVE | Operation Cobra

https://steamcommunity.com/sharedfiles/filedetails/?id=3009239549

Welcome to "ALiVE | Operation Cobra," a dynamic multiplayer scenario set during the intense battles of Operation Cobra in Normandy. Engage in challenging bocage fighting, where players take on the roles of American soldiers, tasked with capturing and defending objectives as determined by the AI commander, OPCOM.

**Key Features:**

- **Engaging Bocage Fighting:** Overcome challenging obstacles in immersive bocage combat, requiring strategic coordination for success.

- **Dynamic AI Commander Strategies:** Witness unpredictable battles as AI commanders employ different tactics to occupy and invade objectives. Commanders clash in an ongoing conflict, influencing the outcome of engagements.

- **Strategic Freedom:** Players have the freedom to assist AI units or execute their independent operations, providing diverse and engaging gameplay.

- **ALiVE's Commander Options:** Request reinforcements, access intel, and receive strategic tasks from the AI commander, enhancing immersion and game flow.

- **Military Logistics:** Experience dynamic reinforcement and resupply systems, shaping a constantly changing battlefield.

- **Combined Arms Operations:** Engage in company-level combined arms operations with combat air support, artillery, and logistics systems.

- **C2ISTAR System:** Utilize map overlays and SITREP systems for task/mission generation and management, enhancing tactical decision-making.

- **Player Logistics:** Coordinate complex maneuvers effortlessly with lift/shift operations, towing, and more.

- **Dynamic AT and AP Minefields:** Stay cautious and vigilant as you encounter dynamic minefields on the battlefield.

- **Virtual AI System:** Experience authentic combat with thousands of simulated AI land and air forces in large-scale scenarios.

- **MP Player Support Systems:** Enjoy admin actions, player tags, view distance control, gear persistence, multi-respawn, and more for smooth multiplayer experience.

- **Two Modes:** Choose between "Cadet" for newcomers and "Hardcore" for seasoned veterans, catering to all skill levels.

- **Mobile Headquarters:** Strategize and regroup efficiently with the mobile headquarters respawn point, AI recruitment, and arsenal.

- **Quality of Life Scripts:** Benefit from earplugs, vehicle anti-flip, garbage cleanup, friendly force tracker, and AI squadmate reset for improved gameplay.

- **Open-Ended Gameplay:** Lead your player squad or join forces with AI comrades as infantry, tanks, or planes to achieve victory.

**Mission Objective:**

Communicate openly with teammates, devise strategic plans, and mark key locations on the map to achieve your objectives. Foster collaborative efforts with friendly AI units, utilizing their capabilities to execute joint operations effectively. Adapt your strategies based on the evolving battlefield and seize victory in the intense battles of "ALiVE | Operation Cobra" in Normandy.

---
Prepare for an immersive and intense combat experience on Steam!
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@
call compile preprocessFileLineNumbers "scripts\frontline_data.sqf"
] call SPE_MISSIONUTILITYFUNCTIONS_fnc_generateFrontline;

if (hasInterface) then {

(group player) addEventHandler ["UnitJoined",
{
params ["_group", "_newUnit"];

[_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaInit;
[_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaActionsInit;
}]};


//Starting Init
["| Operation Cobra - Executing init.sqf..."] call ALiVE_fnc_dump;

Expand Down Expand Up @@ -48,6 +59,37 @@ if (side player == RESISTANCE) then {
[] execVM "Scripts\Earplugs.sqf";
[] execVM "Scripts\SquadResetInit.sqf";

//Fixes for IFS
[] spawn
{
// Wait for other initializations
sleep 15;

// Fix for clients not initializing scripts
if (!isServer) then {[] call SPE_MissionUtilityFunctions_fnc_IFS_Init};

// Fix for null variable on clients
if (isServer) then {publicVariable "SPE_IFS_availableCalls"};

// Fix for AI not utilizing supports
if (isServer) then
{
if (isNil "SPE_IFS_AmountMultiplier") then
{
SPE_IFS_AmountMultiplier = [[0.33,0.5,1],[0.33,0.5,1]];
};

publicVariable "SPE_IFS_AmountMultiplier";
};

// Fix for player respawn
if (hasInterface) then
{
player addEventHandler ["Respawn",{_this spawn SPE_MissionUtilityFunctions_fnc_IFS_onPlayerRespawn}];
};
};

/////////////////////////// T H I S H A S T O G O L A S T ////////////////////////////////////////////////
if (hasInterface) then {

["| Operation Cobra - Running ClientInit..."] call ALiVE_fnc_dump;
Expand Down Expand Up @@ -106,5 +148,4 @@ if (hasInterface) then {
["openSideSmall",0.4] call ALIVE_fnc_displayMenu;
["setSideSmallText",_text] call ALIVE_fnc_displayMenu;
};
};

};
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*
* */
// ====================================================================================
["Initialize", [true]] call BIS_fnc_dynamicGroups;

if (isDedicated) then {
disableRemoteSensors true;
};
Expand Down Expand Up @@ -66,7 +68,11 @@ skipTime 8;
0 setfog 0.01;
forceWeatherChange;

["Initialize", [true]] call BIS_fnc_dynamicGroups;

SPE_IFS_CASAvailability_Side = [east, west, independent];
publicVariable "SPE_IFS_CASAvailability_Side";

[] spawn {
waitUntil {!isNil "ALiVE_REQUIRE_INITIALISED" && time > 120};
ALiVE_Helper_opcomEventListener = compile preprocessFileLineNumbers "Scripts\opcomEventListener.sqf";
opcomEventListener = [nil,"create", ["ALiVE_Helper_opcomEventListener"]] call ALiVE_Helper_opcomEventListener;
};
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
_player = _this select 0;
_didJIP = _this select 1;


// --- Enable full spectator in respawn screen
{
missionNamespace setVariable [_x,true];
Expand Down Expand Up @@ -46,7 +45,12 @@ SPE_fnc_IFS_hasRadio =
_hasRadioItem
};

SPE_IFS_requestedsupportavailabilitydelay = [[210,210,210],[275,275,275],[200,480,300],[420,420,420]];

SPE_IFS_areablacklist = ["mainblacklist"];

SPE_IFS_shouldBlacklistBlockRequestedSupport = true;

// save loadout
[missionnamespace,"arsenalClosed", {[player, [missionNamespace, "inventory_var"]] call BIS_fnc_saveInventory;
diag_log format["%1: initPlayerLocal.sqf -> %2 inventory_var saved", missionName, missionNamespace];
Expand Down Expand Up @@ -95,16 +99,8 @@ if (_didJIP) then {
//Initialize BIS group menu
["InitializePlayer", [player, true]] call BIS_fnc_dynamicGroups;

// Initialize SPE Revive for units recruited in a player group
(group player) addEventHandler ["UnitJoined", {
params ["_group", "_newUnit"];

[_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaInit;
[_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaActionsInit;
}];

// Add Earplus addaction on mission start
PX_earPlugAction = player addAction [("<t color='#00FF00'>Insert Ear Plugs</t>"), {call PX_fnc_earPlugsInsert}, [], 1, false, true];

//Initialize Soldier Tracker Script
[] execVM "scripts\QS_icons.sqf";
[] execVM "scripts\QS_icons.sqf";
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
[player, [missionNamespace, "inventory_var"]] call BIS_fnc_loadInventory;
[] execVM "Scripts\SquadResetInit.sqf";
[] execVM "Scripts\SquadResetInit.sqf";

[] spawn {
waitUntil {!isNil "SPE_IFS_EM_ID" && time > 20};
player setVariable ['SPE_IFS_showCall_EM',false]; // does not work!
[player,SPE_IFS_EM_ID] call BIS_fnc_holdActionRemove; // works!
};
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ _QS_ST_GRPrequireGPSItem = FALSE; // BOOL. TRUE to require player have GP
//============================= CONFIGURE BONUS FEATURES ===========================//
//==================================================================================//

_QS_ST_showEmptyVehicles = FALSE; // BOOL. TRUE to mark certain unoccupied vehicles on the map. The vehicle must be assigned this variable: <vehicle> setVariable ['QS_ST_drawEmptyVehicle',TRUE,TRUE]; Default FALSE. Only works if _QS_ST_map_enableUnitIcons = TRUE;
_QS_ST_showEmptyVehicles = TRUE; // BOOL. TRUE to mark certain unoccupied vehicles on the map. The vehicle must be assigned this variable: <vehicle> setVariable ['QS_ST_drawEmptyVehicle',TRUE,TRUE]; Default FALSE. Only works if _QS_ST_map_enableUnitIcons = TRUE;
_QS_ST_iconColor_empty = [0.7,0.6,0,0.5]; // ARRAY (NUMBERS). Color of unoccupied vehicles, in RGBA. Default = [0.7,0.6,0,0.5];
_QS_ST_iconSize_empty = 20; // NUMBER. Icon size of unoccupied vehicles, if shown.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ _HMHQ = (HMHQ_Teleport_Veh select 0);



if (USMHQ getVariable ["Respawned", false]) then {
if (USMHQ getVariable ["Respawned", false] || USMHQ_Respawned == 1) then {

["mobileRespawn.sqf -> Respawned: %1", USMHQ getVariable ["Respawned", false]] call ALIVE_fnc_dump;
[nil,"respawnedText", nil, false] spawn BIS_fnc_MP;
Expand Down Expand Up @@ -69,12 +69,14 @@ if (USMHQ getVariable ["Respawned", false]) then {
["mobileRespawn.sqf -> Old MHQ Removed"] call ALIVE_fnc_dump;

USMHQ setVariable ["Respawed",false,true];
USMHQ_Respawned = 0;
publicVariable "USMHQ_Respawned";
};


USMHQ setVariable ['QS_ST_drawEmptyVehicle',true,true];

["mobileRespawn.sqf -> Respawned, Adding actions back, HMHQ_Deployed: %1", USMHQ getVariable ["HMHQ_Deployed", false]] call ALIVE_fnc_dump;
["mobileRespawn.sqf -> Respawned, Adding actions back, HMHQ_Deployed_Var: %1", HMHQ_Deployed_Var] call ALIVE_fnc_dump;

[USMHQ, ["<t color='#ffff00'>Deploy HQ</t>", {[_this,"HZE_fnc_deployHQ", false] call BIS_fnc_MP;},[],0,true,true,"","(!(_target getVariable ['HMHQ_Deployed', true])) && ((_this distance _target) < 4)"]] remoteExec ["addAction"];
[USMHQ, ["<t color='#ffff00'>Pack HQ</t>", {[_this,"HZE_fnc_packHQ", false] call BIS_fnc_MP;},[],0,true,true,"","(_target getVariable ['HMHQ_Deployed', false]) && ((_this distance _target) < 4)"]] remoteExec ["addAction"];
Expand All @@ -87,6 +89,8 @@ if (USMHQ getVariable ["Respawned", false]) then {
if (isServer) then {
USMHQ setVariable ["HMHQ_Deployed", false, true];

USMHQ_Respawned = 0;
publicVariable "USMHQ_Respawned";
HMHQ_Deployed_Var = 0;
publicVariable "HMHQ_Deployed_Var";
MHQ_marker_array = [];
Expand All @@ -113,6 +117,7 @@ if (isServer) then {
// Create Supply Crate
_supply = createVehicle [INS_MHQ_SUPPLYCRATE,[ (getPos USMHQ select 0)-2, (getPos USMHQ select 1)-6,(getPos USMHQ select 2)+0.1], [], 0, "CAN_COLLIDE"];
USMHQ setVariable ["SUPPLY", _supply];
_supply allowDamage false;
Deployed_Supply = _supply;
publicVariable "Deployed_Supply";
[Deployed_Supply, ["<t color='#0099FF'>Arsenal</t>", {["Open",true] spawn SPE_Arsenal_fnc_arsenal; }]] remoteExec ["addAction"];
Expand All @@ -132,6 +137,7 @@ if (isServer) then {
// Create the MHQ USBASE Flag
_flag = createVehicle [INS_MHQ_FLAGCLASS,[ (getPos USMHQ select 0)-2, (getPos USMHQ select 1)-10, (getPos USMHQ select 2)+0], [], 0, "CAN_COLLIDE"];
USMHQ setVariable ["FLAG", _flag];
_flag allowDamage false;
Deployed_Flag = _flag;
publicVariable "Deployed_Flag";
[Deployed_Flag, ["<t color='#ffff00'>Recruit Infantry</t>", {[Deployed_Flag] execVM "bon_recruit_units\open_dialog.sqf";},[],0,true,true,"",""]] remoteExec ["addAction"];
Expand Down Expand Up @@ -187,7 +193,7 @@ if (isServer) then {

if (!isDedicated) then {

["mobileRespawn.sqf -> !isDedicated, Adding actions, HMHQ_Deployed: %1", USMHQ getVariable ["HMHQ_Deployed", false]] call ALIVE_fnc_dump;
["mobileRespawn.sqf -> !isDedicated, Adding actions"] call ALIVE_fnc_dump;

USMHQ addAction ["<t color='#ffff00'>Deploy HQ</t>",{
[_this,"HZE_fnc_deployHQ", false] call BIS_fnc_MP;
Expand All @@ -201,14 +207,15 @@ if (!isDedicated) then {

[] spawn {

["mobileRespawn.sqf -> USBASE Teleport: %1", USBASE getVariable ["Pole", false]] call ALIVE_fnc_dump;
["mobileRespawn.sqf -> USBASE Teleport Action Status: %1", USBASE getVariable ["Pole", false]] call ALIVE_fnc_dump;

if !(USBASE getVariable ["Pole", false]) then {
private ["_veh_name", "_spawn"];
_veh_name = str(USMHQ);
_thisaction = USBASE addAction [("<t color=""#ffff00"">") + ("Teleport to Mobile Respawn Vehicle") + "</t>", {[_this select 1, _this select 3] call HZE_fnc_teleport}, _veh_name];
USBASE setVariable ["Teleport", _thisaction, true];
USBASE setVariable ["Pole", true,false];
["mobileRespawn.sqf -> USBASE Teleport Action Status: %1", USBASE getVariable ["Pole", false]] call ALIVE_fnc_dump;
};
};
};
Expand Down
Loading

0 comments on commit 55e47bf

Please sign in to comment.