Spearhead 1944 Known Issues and Workarounds: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (added info about bocage building positions. Some formatting)
(Updated content, wording and formatting)
Line 64: Line 64:
</sqf>
</sqf>


== Random Headgear assigned to units ==
== Random headgear assigned to units ==


To disable headgear randomization, insert the following code in the unit's init field:
To disable headgear randomization, insert the following code in the unit's init field:
Line 70: Line 70:
<sqf inline>this setVariable ["BIS_enableRandomization", false];</sqf>
<sqf inline>this setVariable ["BIS_enableRandomization", false];</sqf>


== Bocage Objects have Buidling Positions ==
== AI gets spawned inside bocage objects ==


As of version 1.01 bocage objects have building positions. They were originally added to support the destruction states of the bocage.
As of version 1.0.1 bocage objects have building positions. They were originally added to support the destruction states of the bocage.


If you have access to the scripts that work with buildings positions you can filter these bocage objects.
Now scripts/missions may spawn AI inside them due to building position often used by spawning AI script. Unfortunately the AI inside can't get out and can hardly get killed.
 
If you have access to the scripts that work with buildings positions you can filter out/exclude these bocage objects like this:


<sqf inline>private _validBuildings = _nearBuildings select {!(_x isKindOf "spe_bocage_base")};</sqf>
<sqf inline>private _validBuildings = _nearBuildings select {!(_x isKindOf "spe_bocage_base")};</sqf>
In the example _nearBuildings would be a list (array) of objects.
Usually AI spawning scripts are putting units inside building they will have something that looks like this:
<sqf>_nearestObjects = nearestObjects [_position, ["BUILDING","HIDE"], 100];
_objectsWithBuildingPositions = (_nearestObjects select {count (_x buildingPos -1) > 0});</sqf>
or this
<sqf>_nearestTerrainObjects = nearestTerrainObjects [_position, ["BUILDING","HIDE"], 100];
_terrainObjectsWithBuildingPositions = (_nearestTerrainObjects select {count (_x buildingPos -1) > 0});</sqf>
You would filter then these like:
<sqf>_objectsWithBuildingPositions = _objectsWithBuildingPositions select {!(_x isKindOf "spe_bocage_base")};</sqf>
or
<sqf>_terrainObjectsWithBuildingPositions = _terrainObjectsWithBuildingPositions select {!(_x isKindOf "spe_bocage_base")};</sqf>
= Recruited or spawned AI won't revive others / cannot get revived =
If you play with an AI recruiting feature, or the mission/game spawns AI mid mission and joins them to the player group, currently the Enhanced Revive system won't handle them.
# Name the revive module in the editor '''My_Revive_Module''' // to access it when calling the revive params function in your scripts
# Add to initPlayerLocal.sqf
{{Feature|informative|The code sets SPE_reviveToksaParams_initialized to false to have the revive params function run through completely rather then exiting early}}
<sqf>
[] spawn
{
waitUntil { !(isNil "My_Revive_Module") };
SPE_reviveToksaParams_initialized = false;
[revive_module] call SPE_MissionUtilityFunctions_fnc_ReviveToksaParams;
(group player) addEventHandler ["UnitJoined", {
params ["_group", "_newUnit"];
[_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaInit;
[_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaActionsInit;
}];
};</sqf>


[[Category: Spearhead 1944]]
[[Category: Spearhead 1944]]

Revision as of 15:34, 8 August 2023

Known Issues and Workarounds

Vehicle class SPE_Module_Indirect_Fire_Support no longer exists

Unfortunately an unintentional class name change slipped into 1.0.1 hotfix - please excuse the mishap!

We will revert the class name change in the next update, but will retain these temporary test classes for backwards compatibility. In simple terms - no change from your end needed with the next update!

Simple solution:

  1. Load the mission in Eden
  2. Force load despite the missing class
  3. Place the module again and configure it as desired

Advanced solution:

  1. Locate your mission folder
  2. Make a backup of your mission (copy the folder to another location)
  3. Open the mission.sqm in a text editor - best with a good one like Notepad++ or similar
  4. Search for below terms and replace them (one by one or mass replacement)
 SPE_Module_AI_Systems => SPE_Module_AI_Systems_Hotfix
 SPE_Module_Indirect_Fire_Support => SPE_Module_Indirect_Fire_Support_Hotfix
  1. Save the mission.sqm file
  2. Export your mission again/upload to workshop

Vehicle class SPE_Module_AI_Systems no longer exists

See one above.

IFS module is not fully working

Add the following code in the init.sqf

[] 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}]; }; };

Random headgear assigned to units

To disable headgear randomization, insert the following code in the unit's init field:

this setVariable ["BIS_enableRandomization", false];

AI gets spawned inside bocage objects

As of version 1.0.1 bocage objects have building positions. They were originally added to support the destruction states of the bocage.

Now scripts/missions may spawn AI inside them due to building position often used by spawning AI script. Unfortunately the AI inside can't get out and can hardly get killed.

If you have access to the scripts that work with buildings positions you can filter out/exclude these bocage objects like this:

private _validBuildings = _nearBuildings select {!(_x isKindOf "spe_bocage_base")};

In the example _nearBuildings would be a list (array) of objects.

Usually AI spawning scripts are putting units inside building they will have something that looks like this:

_nearestObjects = nearestObjects [_position, ["BUILDING","HIDE"], 100]; _objectsWithBuildingPositions = (_nearestObjects select {count (_x buildingPos -1) > 0});

or this

_nearestTerrainObjects = nearestTerrainObjects [_position, ["BUILDING","HIDE"], 100]; _terrainObjectsWithBuildingPositions = (_nearestTerrainObjects select {count (_x buildingPos -1) > 0});

You would filter then these like:

_objectsWithBuildingPositions = _objectsWithBuildingPositions select {!(_x isKindOf "spe_bocage_base")};

or

_terrainObjectsWithBuildingPositions = _terrainObjectsWithBuildingPositions select {!(_x isKindOf "spe_bocage_base")};

Recruited or spawned AI won't revive others / cannot get revived

If you play with an AI recruiting feature, or the mission/game spawns AI mid mission and joins them to the player group, currently the Enhanced Revive system won't handle them.

  1. Name the revive module in the editor My_Revive_Module // to access it when calling the revive params function in your scripts
  2. Add to initPlayerLocal.sqf
The code sets SPE_reviveToksaParams_initialized to false to have the revive params function run through completely rather then exiting early

[] spawn { waitUntil { !(isNil "My_Revive_Module") }; SPE_reviveToksaParams_initialized = false; [revive_module] call SPE_MissionUtilityFunctions_fnc_ReviveToksaParams; (group player) addEventHandler ["UnitJoined", { params ["_group", "_newUnit"]; [_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaInit; [_newUnit] call SPE_MissionUtilityFunctions_fnc_ReviveToksaActionsInit; }]; };