Skip to content

Commit

Permalink
Ballistics - Improve arsenal muzzle velocity stat (#10594)
Browse files Browse the repository at this point in the history
  • Loading branch information
LinkIsGrim authored Dec 23, 2024
1 parent 5285ec4 commit 671aa51
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Text statement for the magazine ammo muzzle velocity stat.
*
* Arguments:
* 0: Type what it is here <TYPE> (unused)
* 0: Stats <ARRAY> (unused)
* 1: Item config path <CONFIG>
*
* Return Value:
Expand All @@ -13,47 +13,17 @@
* Public: No
*/

params ["", "_configMagazine"];
params ["_stats", "_configMagazine"];

if (EGVAR(arsenal,currentLeftPanel) == 2002) then {
private _primaryMag = primaryWeaponMagazine EGVAR(arsenal,center);
[primaryWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]]
} else {
private _primaryMag = handgunMagazine EGVAR(arsenal,center);
[handgunWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]]
} params ["_weapon", "_magazine"];
private _magClass = configName _configMagazine;
private _weapons = [primaryWeapon EGVAR(arsenal,center), handgunWeapon EGVAR(arsenal,center)];
private _weaponIndex = _weapons findIf {_x canAdd [_magClass, _x]};

// we might be looking at random mags not related to our weapon
private _magIsForCurrentWeapon = (configName _configMagazine == _magazine) && {_weapon != ""};
private _configWeapon = configNull;
// Defer to weapon stat if mag fits in the primary muzzle of an equipped weapon (except launchers)
if (_weaponIndex != -1) exitWith {
[_stats, configFile >> "CfgWeapons" >> _weapons select _weaponIndex, _configMagazine] call FUNC(statTextStatement_weaponMuzzleVelocity);
};

private _muzzleVelocity = getNumber (_configMagazine >> "initSpeed");
private _initSpeedCoef = 0;
if (_magIsForCurrentWeapon) then {
_configWeapon = configFile >> "CfgWeapons" >> _weapon;
_initSpeedCoef = getNumber (_configWeapon >> "initSpeed");
};
if (_initSpeedCoef < 0) then {
_muzzleVelocity = _muzzleVelocity * -_initSpeedCoef;
};
if (_initSpeedCoef > 0) then {
_muzzleVelocity = _initSpeedCoef;
};

private _abAdjustText = "";
if (
_magIsForCurrentWeapon &&
{missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]} &&
{missionNamespace getVariable [QEGVAR(advanced_ballistics,barrelLengthInfluenceEnabled), false]} // this can be on while AB is off or vice-versa
) then {
private _configAmmo = (configFile >> "CfgAmmo" >> (getText (_configMagazine >> "ammo")));
private _barrelLength = getNumber (_configWeapon >> "ACE_barrelLength");
private _muzzleVelocityTable = getArray (_configAmmo >> "ACE_muzzleVelocities");
private _barrelLengthTable = getArray (_configAmmo >> "ACE_barrelLengths");
private _abShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift);
if (_abShift != 0) then {
_abAdjustText = " [AB]";
_muzzleVelocity = _abShift;
};
};
format ["%1 m/s (%2 ft/s)%3", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0, _abAdjustText]
format ["%1 m/s (%2 ft/s)", _muzzleVelocity toFixed 0, (_muzzleVelocity * METERS_TO_FEET_MULT) toFixed 0]
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,49 @@
* Text statement for the weapon muzzle velocity stat.
*
* Arguments:
* 0: Type what it is here <TYPE> (unused)
* 1: Item config path <CONFIG>
* 0: Stats <ARRAY> (unused)
* 1: Weapon config path <CONFIG>
* 2: Magazine config path <CONFIG> (default: configNull)
*
* Return Value:
* Display text <STRING>
*
* Public: No
*/

params ["", "_configWeapon"];
params ["", "_configWeapon", ["_configMagazine", configNull]];

if (EGVAR(arsenal,currentLeftPanel) == 2002) then {
private _primaryMag = primaryWeaponMagazine EGVAR(arsenal,center);
[primaryWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]]
} else {
private _primaryMag = handgunMagazine EGVAR(arsenal,center);
[handgunWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]]
} params ["_weapon", "_magazine"];
if (isNull _configMagazine) then { // Get the current weapon's mag
_configMagazine = configFile >> "CfgMagazines" >> (weaponState EGVAR(arsenal,center)) select 3;;
};

if (_magazine isEqualTo "") then {
if (isNull _configMagazine) exitWith { // Nothing in the magwell
localize "str_empty";
};

private _muzzleVelocity = getNumber (_configMagazine >> "initSpeed");

private _abAdjustText = "";
private _useAB = missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false] && {EGVAR(advanced_ballistics,barrelLengthInfluenceEnabled)};

if (_useAB) then {
private _configAmmo = configFile >> "CfgAmmo" >> (getText (_configMagazine >> "ammo"));
private _barrelLength = getNumber (_configWeapon >> "ACE_barrelLength");
private _muzzleVelocityTable = getArray (_configAmmo >> "ACE_muzzleVelocities");
private _barrelLengthTable = getArray (_configAmmo >> "ACE_barrelLengths");
private _abShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift);
if (_abShift != 0) then {
_abAdjustText = " [AB]";
_muzzleVelocity = _abShift;
};
} else {
private _configMagazine = configFile >> "CfgMagazines" >> _magazine;
private _muzzleVelocity = getNumber (_configMagazine >> "initSpeed");
private _initSpeedCoef = getNumber (_configWeapon >> "initSpeed");
if (_initSpeedCoef < 0) then {
_muzzleVelocity = _muzzleVelocity * -_initSpeedCoef;
};
if (_initSpeedCoef > 0) then {
_muzzleVelocity = _initSpeedCoef;
};

private _abAdjustText = "";
if (
missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false] &&
{missionNamespace getVariable [QEGVAR(advanced_ballistics,barrelLengthInfluenceEnabled), false]} // this can be on while AB is off or vice-versa
) then {
private _configAmmo = (configFile >> "CfgAmmo" >> (getText (_configMagazine >> "ammo")));
private _barrelLength = getNumber (_configWeapon >> "ACE_barrelLength");
private _muzzleVelocityTable = getArray (_configAmmo >> "ACE_muzzleVelocities");
private _barrelLengthTable = getArray (_configAmmo >> "ACE_barrelLengths");
private _abShift = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift);
if (_abShift != 0) then {
_abAdjustText = " [AB]";
_muzzleVelocity = _abShift;
};
};
format ["%1 m/s (%2 ft/s)%3", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0, _abAdjustText]
};

format ["%1 m/s (%2 ft/s)%3", _muzzleVelocity toFixed 0, (_muzzleVelocity * METERS_TO_FEET_MULT) toFixed 0, _abAdjustText]
2 changes: 2 additions & 0 deletions addons/ballistics/script_component.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@
#endif

#include "\z\ace\addons\main\script_macros.hpp"

#define METERS_TO_FEET_MULT 3.28084

0 comments on commit 671aa51

Please sign in to comment.