From f63b4088eb923374f07eaf1c72d0a7e92a64c67a Mon Sep 17 00:00:00 2001 From: lambdatiger Date: Thu, 8 Feb 2024 17:11:36 -0600 Subject: [PATCH] Added commented 2.18 commands and updated script component --- addons/frag/functions/fnc_doFrag.sqf | 8 ++++---- addons/frag/functions/fnc_doFragRandom.sqf | 6 +----- addons/frag/functions/fnc_doSpall.sqf | 2 +- addons/frag/script_component.hpp | 22 +++++++++++++++++----- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/addons/frag/functions/fnc_doFrag.sqf b/addons/frag/functions/fnc_doFrag.sqf index 7a42b23ce8..0915111b98 100644 --- a/addons/frag/functions/fnc_doFrag.sqf +++ b/addons/frag/functions/fnc_doFrag.sqf @@ -38,13 +38,13 @@ private _timeSinceLastFrag = CBA_missionTime - GVAR(lastFragTime); if (_timeSinceLastFrag < ACE_FRAG_HOLDOFF || {_posASL isEqualTo [0, 0, 0] || _ammo isEqualTo ""}) exitWith { TRACE_3("timeExit",_timeSinceLastFrag,CBA_missionTime,GVAR(lastFragTime)); }; -private _maxFragCount = round linearConversion [0.1, 1.5, _timeSinceLastFrag, ACE_FRAG_COUNT_MIN, ACE_FRAG_COUNT_MAX, true]; +private _maxFragCount = round linearConversion [ACE_FRAG_COUNT_MIN_TIME, ACE_FRAG_COUNT_MAX_TIME, _timeSinceLastFrag, ACE_FRAG_COUNT_MIN, ACE_FRAG_COUNT_MAX, true]; TRACE_3("willFrag",_timeSinceLastFrag,CBA_missionTime,_maxFragCount); private _ammoArr = [_ammo] call FUNC(getFragInfo); _ammoArr params ["_fragRange", "_fragVel", "_fragTypes", "_modFragCount"]; // For low frag rounds limit the # of frags created -if (_modFragCount < 10) then { +if (_modFragCount < ACE_FRAG_LOW_FRAG_MOD_COUNT) then { _maxFragCount = _modFragCount * ACE_FRAG_LOW_FRAG_COEFF; GVAR(lastFragTime) = CBA_missionTime - ACE_FRAG_LOW_FRAG_HOLDOFF_REDUCTION; } else { @@ -53,10 +53,10 @@ if (_modFragCount < 10) then { // Offset for ground clearance private _heightATL = (ASLToATL _posASL)#2; if (_heightATL < ACE_FRAG_MIN_GROUND_OFFSET) then { - _posASL = _posASL vectorAdd [0, 0, ACE_FRAG_MIN_GROUND_OFFSET]; + _posASL = _posASL vectorAdd [0, 0, ACE_FRAG_MIN_GROUND_OFFSET - (0 min _heightATL)]; }; -TRACE_3("fnc_doFragTargeted IF", _fragRange, _timeSinceLastFrag, GVAR(fragSimComplexity)); +TRACE_3("fnc_doFragTargeted IF",_fragRange,_timeSinceLastFrag,GVAR(fragSimComplexity)); if (GVAR(fragSimComplexity) != 1 && _fragRange > 3) then { _maxFragCount = _maxFragCount - ([_posASL, _fragVel, _fragRange, _maxFragCount, _fragTypes, _modFragCount, _shotParents] call FUNC(doFragTargeted)); }; diff --git a/addons/frag/functions/fnc_doFragRandom.sqf b/addons/frag/functions/fnc_doFragRandom.sqf index 47384fe14d..6e6f8ecf51 100644 --- a/addons/frag/functions/fnc_doFragRandom.sqf +++ b/addons/frag/functions/fnc_doFragRandom.sqf @@ -37,11 +37,7 @@ private _hMode = switch (true) do { default {"_mid"}; }; -private _type = if (_fragType isNotEqualTo [] && {"ace_frag_tiny" isEqualTo (_fragType#0)}) then { - QGVAR(def_tiny_) -} else { - QGVAR(def_small_) -}; +private _type = [QGVAR(def_small_), QGVAR(def_tiny_)] select (_fragType isNotEqualTo [] && {"ace_frag_tiny" isEqualTo (_fragType#0)}); _maxFragCount = switch (true) do { case (_maxFragCount <= 5): {"5"}; diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index d2ac3e019a..d4ef252651 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -129,7 +129,7 @@ private _spallSpawner = createVehicle [ "CAN_COLLIDE" ]; _spallSpawner setVectorDirandUp [_lastVelocityUnit, _vectorUp]; -_spallSpawner setVelocity (_lastVelocityUnit vectorMultiply (_velocityChange/ACE_FRAG_SPALL_VELOCITY_INHERIT_COEFF)); +_spallSpawner setVelocity (_lastVelocityUnit vectorMultiply (_velocityChange * ACE_FRAG_SPALL_VELOCITY_INHERIT_COEFF)); _spallSpawner setShotParents _shotParents; #ifdef DEBUG_MODE_FULL diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 0b12094c37..d32af33ede 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -3,7 +3,7 @@ #include "\z\ace\addons\main\script_mod.hpp" // #define LOG_FRAG_INFO -// #define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL // #define DEBUG_MODE_DRAW // #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS @@ -18,19 +18,31 @@ #include "\z\ace\addons\main\script_macros.hpp" +// Mimimum hold-off time between frag events globally or per vehicle #define ACE_FRAG_HOLDOFF 0.25 #define ACE_FRAG_HOLDOFF_VEHICLE 1 -#define ACE_FRAG_SPALL_HOLDOFF 0.25 +// Scaling for the min/max # of fragments since last frag event +#define ACE_FRAG_COUNT_MIN_TIME 0.1 #define ACE_FRAG_COUNT_MIN 5 +#define ACE_FRAG_COUNT_MAX_TIME 1 #define ACE_FRAG_COUNT_MAX 50 +// Default hitpoint targets #define ACE_FRAG_HITPOINTS ["spine1", "spine1", "spine1", "spine2", "spine2", "spine2", "spine3", "spine3", "spine3", "pelvis", "pelvis", "pelvis", "head", "leftarm", "leftarmroll", "leftforearm", "rightarm", "rightarmroll", "rightforearm", "leftupleg", "leftuplegroll", "leftlegroll", "leftfoot", "rightupleg", "rightuplegroll", "rightleg", "rightlegroll", "rightfoot", "neck"] -// sqrt(2)/50 -#define ACE_FRAG_ROUND_COEF 0.02828427 // half of gravity approx 9.81/2 #define ACE_FRAG_HALF_GRAVITY_APPROX 4.905 // Lowest chance to hit of 0.5% #define ACE_FRAG_MIN_FRAG_HIT_CHANCE 0.005 #define ACE_FRAG_MIN_GROUND_OFFSET 0.25 +// Make frag hold-off time shortger for low frag +// value of 150/4/pi ~= 11.93662 +#define ACE_FRAG_LOW_FRAG_MOD_COUNT 11.93662 #define ACE_FRAG_LOW_FRAG_COEFF 4 #define ACE_FRAG_LOW_FRAG_HOLDOFF_REDUCTION 4 -#define ACE_FRAG_SPALL_VELOCITY_INHERIT_COEFF 2 +// Max frag distance - correlates to a a fragCount of 20k & hit chance of 0.5% +#define ACE_FRAG_MAX_FRAG_RANGE 565 + +// Spall values +#define ACE_FRAG_SPALL_HOLDOFF 0.25 +#define ACE_FRAG_SPALL_VELOCITY_INHERIT_COEFF 0.5 +// sqrt(2)/50 +#define ACE_FRAG_ROUND_COEF 0.02828427 \ No newline at end of file