From f3a94f03ed94059840c8c67287ca2ece5c17d38e Mon Sep 17 00:00:00 2001
From: commy2 <commy-2@gmx.de>
Date: Sun, 15 Feb 2015 17:14:09 +0100
Subject: [PATCH] clean up backblast

---
 .../functions/fnc_backblastDamage.sqf         | 39 ++++++++++---------
 .../functions/fnc_fireLauncherBackblast.sqf   | 24 +++++++-----
 .../functions/fnc_fireOverpressureZone.sqf    | 23 ++++++-----
 .../backblast/functions/fnc_getDistance.sqf   |  6 +--
 .../functions/fnc_overpressureDamage.sqf      | 37 ++++++++++--------
 5 files changed, 74 insertions(+), 55 deletions(-)

diff --git a/addons/backblast/functions/fnc_backblastDamage.sqf b/addons/backblast/functions/fnc_backblastDamage.sqf
index 21d2e81736..651dc58830 100644
--- a/addons/backblast/functions/fnc_backblastDamage.sqf
+++ b/addons/backblast/functions/fnc_backblastDamage.sqf
@@ -1,5 +1,5 @@
 /*
- * Author: Commy2 and CAA-Picard
+ * Author: commy2 and CAA-Picard
  *
  * Calculate and apply backblast damage to potentially affected local units
  *
@@ -16,52 +16,55 @@
 
 EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon);
 
-private ["_backblastAngle","_backblastRange","_backblastDamage"];
-_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2;
-_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range");
-_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage");
+private ["_backblastAngle", "_backblastRange", "_backblastDamage"];
+
+_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2;
+_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range));
+_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage));
+
 TRACE_4("Parameters:",_backblastAngle,_backblastRange,_backblastDamage,_weapon);
 
+private "_pos";
 _pos = _posASL;
 if (!surfaceIsWater _pos) then {
     _pos = ASLtoATL _pos;
 };
 
-_affected = _pos nearEntities ["CAManBase", _backblastRange];
 {
-    _unit = _x;
-    if (local _unit && _unit != _firer && vehicle _unit == _unit) then {
+    if (local _x && {_x != _firer} && {vehicle _x == _x}) then {
+        private ["_targetPositionASL", "_relativePosition", "_axisDistance", "_distance", "_angle", "_line", "_line2"];
 
-        _targetPositionASL = eyePos _unit;
+        _targetPositionASL = eyePos _x;
         _relativePosition = _targetPositionASL vectorDiff _posASL;
         _axisDistance = _relativePosition vectorDotProduct _direction;
         _distance = vectorMagnitude _relativePosition;
         _angle = acos (_axisDistance / _distance);
 
-        _line = [_posASL, _targetPositionASL, _firer, _unit];
+        _line = [_posASL, _targetPositionASL, _firer, _x];
         _line2 = [_posASL, _targetPositionASL];
-        TRACE_4("Affected:",_unit,_axisDistance,_distance,_angle);
+        TRACE_4("Affected:",_x,_axisDistance,_distance,_angle);
+
         if (_angle < _backblastAngle && {_distance < _backblastRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then {
+            private ["_alpha", "_beta", "_damage"];
+
             _alpha = sqrt (1 - _distance / _backblastRange);
             _beta = sqrt (1 - _angle / _backblastAngle);
 
             _damage = 2 * _alpha * _beta * _backblastDamage;
 
             // If the target is the ACE_player
-            if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect};
+            if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect};
 
             // TODO: Sort this interaction with medical
             if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then {
-                [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage);
-                _unit spawn {
+                [_x, "HitBody", ([_x, "", (_x getHitPointDamage "HitBody") + _damage, objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage);
+                _x spawn {
                     sleep 0.5;
                     [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage);
                 };
             } else {
-                _unit setDamage (damage _unit + _damage);
+                _x setDamage (damage _x + _damage);
             };
         };
     };
-} forEach _affected;
-
-
+} forEach (_pos nearEntities ["CAManBase", _backblastRange]);
diff --git a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf
index 5970e7b9c2..a35af9f19d 100644
--- a/addons/backblast/functions/fnc_fireLauncherBackblast.sqf
+++ b/addons/backblast/functions/fnc_fireLauncherBackblast.sqf
@@ -23,27 +23,32 @@ EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
 // Prevent AI from causing backblast damage
 if !([_firer] call EFUNC(common,isPlayer)) exitWith {};
 
-private ["_position","_direction","_distance","_alpha","_beta","_damage","_affected"];
+private ["_position", "_direction"];
+
 _position = getPosASL _projectile;
 _direction = [0, 0, 0] vectorDiff (vectorDir _projectile);
 
-private ["_backblastAngle","_backblastRange","_backblastDamage"];
-_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Angle") / 2;
-_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Range");
-_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_Backblast_Damage");
+private ["_backblastAngle", "_backblastRange", "_backblastDamage"];
 
+_backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2;
+_backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range));
+_backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage));
 
 // Damage to others
+private "_affected";
 _affected = getPos _projectile nearEntities ["CAManBase", _backblastRange];
-// Let each client handle their own affected units
-["backblast", _affected, [_firer,_position,_direction,_weapon]] call EFUNC(common,targetEvent);
 
+// Let each client handle their own affected units
+["backblast", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent);
 
 // Damage to the firer
+private "_distance";
 _distance = [_position, _direction, _backblastRange] call FUNC(getDistance);
-TRACE_1("Distance", _distance);
+
+TRACE_1("Distance",_distance);
 
 if (_distance < _backblastRange) then {
+    private ["_alpha", "_beta", "_damage"];
 
     _alpha = sqrt (1 - _distance / _backblastRange);
     _beta = sqrt 0.5;
@@ -66,6 +71,7 @@ if (_distance < _backblastRange) then {
         [1,1,0,1]
     ] call EFUNC(common,addLineToDebugDraw);
 
+    private "_ref";
     _ref = _direction call EFUNC(common,createOrthonormalReference);
     [   _position,
         _position vectorAdd (_direction vectorMultiply _backblastRange) vectorAdd ((_ref select 1) vectorMultiply _backblastRange * tan _backblastAngle),
@@ -88,4 +94,4 @@ if (_distance < _backblastRange) then {
         _position vectorAdd (_direction vectorMultiply (_distance min _backblastRange)),
         [1,0,0,1]
     ] call EFUNC(common,addLineToDebugDraw);
-#endif
\ No newline at end of file
+#endif
diff --git a/addons/backblast/functions/fnc_fireOverpressureZone.sqf b/addons/backblast/functions/fnc_fireOverpressureZone.sqf
index c638f4ad82..0ded8f974b 100644
--- a/addons/backblast/functions/fnc_fireOverpressureZone.sqf
+++ b/addons/backblast/functions/fnc_fireOverpressureZone.sqf
@@ -14,28 +14,32 @@
  *
  * Return value:
  * None
- *///#define DEBUG_MODE_FULL
+ */
+//#define DEBUG_MODE_FULL
 #include "script_component.hpp"
 
 EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
 
 // Prevent AI from causing backblast damage
-if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {};
+if !([gunner _firer] call EFUNC(common,isPlayer)) exitWith {};  //@todo non-maingun turrets?
+
+private ["_position", "_direction"];
 
-private ["_position","_direction","_distance","_alpha","_beta","_damage","_affected"];
 _position = getPosASL _projectile;
 _direction = vectorDir _projectile;
 
-private ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"];
-_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2;
-_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range");
-_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage");
+private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"];
 
+_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2;
+_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range));
+_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage));
 
 // Damage to others
+private "_affected";
 _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange];
+
 // Let each client handle their own affected units
-["overpressure", _affected, [_firer,_position,_direction,_weapon]] call EFUNC(common,targetEvent);
+["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent);
 
 // Draw debug lines
 #ifdef DEBUG_MODE_FULL
@@ -44,6 +48,7 @@ _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange];
         [1,0,0,1]
     ] call EFUNC(common,addLineToDebugDraw);
 
+    private "_ref";
     _ref = _direction call EFUNC(common,createOrthonormalReference);
     [   _position,
         _position vectorAdd (_direction vectorMultiply _dangerZoneRange) vectorAdd ((_ref select 1) vectorMultiply _dangerZoneRange * tan _dangerZoneAngle),
@@ -62,4 +67,4 @@ _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange];
         [1,1,0,1]
     ] call EFUNC(common,addLineToDebugDraw);
 
-#endif
\ No newline at end of file
+#endif
diff --git a/addons/backblast/functions/fnc_getDistance.sqf b/addons/backblast/functions/fnc_getDistance.sqf
index b6f61548c6..6ffa60f7af 100644
--- a/addons/backblast/functions/fnc_getDistance.sqf
+++ b/addons/backblast/functions/fnc_getDistance.sqf
@@ -1,5 +1,5 @@
 /*
- * Author: Commy2 and CAA-Picard
+ * Author: commy2 and CAA-Picard
  *
  * Calculate the distance to the first intersection of a line
  *
@@ -13,10 +13,10 @@
  */
 #include "script_component.hpp"
 
-private ["_distance", "_interval", "_line", "_line"];
-
 EXPLODE_3_PVT(_this,_posASL,_direction,_maxDistance);
 
+private ["_distance", "_interval", "_line", "_intersections"];
+
 _distance = _maxDistance;
 _interval = _distance;
 _line = [_posASL, []];
diff --git a/addons/backblast/functions/fnc_overpressureDamage.sqf b/addons/backblast/functions/fnc_overpressureDamage.sqf
index 5dd7447ce8..995c5db9e4 100644
--- a/addons/backblast/functions/fnc_overpressureDamage.sqf
+++ b/addons/backblast/functions/fnc_overpressureDamage.sqf
@@ -1,5 +1,5 @@
 /*
- * Author: Commy2 and CAA-Picard
+ * Author: commy2 and CAA-Picard
  *
  * Calculate and apply overpressure damage to potentially affected local units
  *
@@ -16,50 +16,55 @@
 
 EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon);
 
-private ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"];
-_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Angle") / 2;
-_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Range");
-_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ACE_DangerZone_Damage");
+private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"];
+
+_dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2;
+_dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range));
+_dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage));
+
 TRACE_4("Parameters:",_dangerZoneAngle,_dangerZoneRange,_dangerZoneDamage,_weapon);
 
+private "_pos";
 _pos = _posASL;
 if (!surfaceIsWater _pos) then {
     _pos = ASLtoATL _pos;
 };
 
-_affected = _pos nearEntities ["CAManBase", _dangerZoneRange];
 {
-    _unit = _x;
-    if (local _unit && _unit != _firer && vehicle _unit == _unit) then {
+    if (local _x && {_x != _firer} && {vehicle _x == _x}) then {
+        private ["_targetPositionASL", "_relativePosition", "_axisDistance", "_distance", "_angle", "_line", "_line2"];
 
-        _targetPositionASL = eyePos _unit;
+        _targetPositionASL = eyePos _x;
         _relativePosition = _targetPositionASL vectorDiff _posASL;
         _axisDistance = _relativePosition vectorDotProduct _direction;
         _distance = vectorMagnitude _relativePosition;
         _angle = acos (_axisDistance / _distance);
 
-        _line = [_posASL, _targetPositionASL, _firer, _unit];
+        _line = [_posASL, _targetPositionASL, _firer, _x];
         _line2 = [_posASL, _targetPositionASL];
-        TRACE_4("Affected:",_unit,_axisDistance,_distance,_angle);
+        TRACE_4("Affected:",_x,_axisDistance,_distance,_angle);
+
         if (_angle < _dangerZoneAngle && {_distance < _dangerZoneRange} && {!lineIntersects _line} && {!terrainIntersectASL _line2}) then {
+            private ["_alpha", "_beta", "_damage"];
+
             _alpha = sqrt (1 - _distance / _dangerZoneRange);
             _beta = sqrt (1 - _angle / _dangerZoneAngle);
 
             _damage = 2 * _alpha * _beta * _dangerZoneDamage;
 
             // If the target is the ACE_player
-            if (_unit == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect};
+            if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect};
 
             // @todo: Sort this interaction with medical
             if (isClass (configFile >> "CfgPatches" >> "ACE_Medical")) then {
-                [_unit, "HitBody", ([_unit, "", ((_unit getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage);
-                _unit spawn {
+                [_x, "HitBody", ([_x, "", ((_x getHitPointDamage "HitBody") + _damage), objNull, objNull] call EFUNC(medical,handleDamage))] call EFUNC(medical,setHitPointDamage);
+                _x spawn {
                     sleep 0.5;
                     [_this, "", 0, objNull, objNull] call EFUNC(medical,handleDamage);
                 };
             } else {
-                _unit setDamage (damage _unit + _damage);
+                _x setDamage (damage _x + _damage);
             };
         };
     };
-} forEach _affected;
+} forEach (_pos nearEntities ["CAManBase", _dangerZoneRange]);