diff --git a/README.md b/README.md index 4ed84011bf..a5d1d57306 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,21 @@ height="112">

- - + v3.0.1 + ACE version - ACE download ACE issues - - + --> + BIF thread diff --git a/addons/advanced_ballistics/ACE_Settings.hpp b/addons/advanced_ballistics/ACE_Settings.hpp index 67bc51511e..757385deb3 100644 --- a/addons/advanced_ballistics/ACE_Settings.hpp +++ b/addons/advanced_ballistics/ACE_Settings.hpp @@ -5,23 +5,29 @@ class ACE_Settings { typeName = "BOOL"; value = 0; }; - class GVAR(alwaysSimulateForSnipers) { - displayName = "Always Enabled For Snipers"; - description = "Always enables advanced ballistics when high power optics are used"; + class GVAR(simulateForSnipers) { + displayName = "Enabled For Snipers"; + description = "Enables advanced ballistics for non local snipers (when using high power optics)"; typeName = "BOOL"; value = 1; }; - class GVAR(disabledInFullAutoMode) { - displayName = "Disabled In FullAuto Mode"; - description = "Disables the advanced ballistics during full auto fire"; + class GVAR(simulateForGroupMembers) { + displayName = "Enabled For Group Members"; + description = "Enables advanced ballistics for non local group members"; typeName = "BOOL"; value = 0; }; - class GVAR(onlyActiveForLocalPlayers) { - displayName = "Disabled For Non Local Players"; - description = "Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)"; + class GVAR(simulateForEveryone) { + displayName = "Enabled For Everyone"; + description = "Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)"; typeName = "BOOL"; - value = 1; + value = 0; + }; + class GVAR(disabledInFullAutoMode) { + displayName = "Disabled In FullAuto Mode"; + description = "Disables advanced ballistics during full auto fire"; + typeName = "BOOL"; + value = 0; }; /* // TODO: We currently do not have firedEHs on vehicles class GVAR(vehicleGunnerEnabled) { diff --git a/addons/advanced_ballistics/CfgVehicles.hpp b/addons/advanced_ballistics/CfgVehicles.hpp index 4e42f35f72..854930d639 100644 --- a/addons/advanced_ballistics/CfgVehicles.hpp +++ b/addons/advanced_ballistics/CfgVehicles.hpp @@ -17,24 +17,30 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 0; }; - class alwaysSimulateForSnipers { - displayName = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName"; - description = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description"; + class simulateForSnipers { + displayName = "$STR_ACE_AdvancedBallistics_simulateForSnipers_DisplayName"; + description = "$STR_ACE_AdvancedBallistics_simulateForSnipers_Description"; typeName = "BOOL"; defaultValue = 1; }; + class simulateForGroupMembers { + displayName = "$STR_ACE_AdvancedBallistics_simulateForGroupMembers_DisplayName"; + description = "$STR_ACE_AdvancedBallistics_simulateForGroupMembers_Description"; + typeName = "BOOL"; + defaultValue = 0; + }; + class simulateForEveryone { + displayName = "$STR_ACE_AdvancedBallistics_simulateForEveryone_DisplayName"; + description = "$STR_ACE_AdvancedBallistics_simulateForEveryone_Description"; + typeName = "BOOL"; + defaultValue = 0; + }; class disabledInFullAutoMode { displayName = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName"; description = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description"; typeName = "BOOL"; defaultValue = 0; }; - class onlyActiveForLocalPlayers { - displayName = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName"; - description = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description"; - typeName = "BOOL"; - defaultValue = 1; - }; /* // TODO: We currently do not have firedEHs on vehicles class vehicleGunnerEnabled { displayName = "Enabled For Vehicle Gunners"; diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index b59737412a..b199acb9e5 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -5,7 +5,7 @@ GVAR(currentbulletID) = -1; GVAR(Protractor) = false; -GVAR(ProtractorStart) = time; +GVAR(ProtractorStart) = ACE_time; GVAR(currentGrid) = 0; GVAR(initMessageEnabled) = false; diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index bb0b649da4..e2a0875e01 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -35,16 +35,18 @@ if (!([_unit] call EFUNC(common,isPlayer))) exitWith {}; if (underwater _unit) exitWith {}; if (!(_ammo isKindOf "BulletBase")) exitWith {}; if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {}; -if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then { - if (GVAR(alwaysSimulateForSnipers)) then { - // The shooter is non local +if (!GVAR(simulateForEveryone) && !(local _unit)) then { + // The shooter is non local + _abort = true; + if (GVAR(simulateForSnipers)) then { if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then { _opticsName = (primaryWeaponItems _unit) select 2; _opticType = getNumber(configFile >> "CfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); _abort = _opticType != 2; // We only abort if the non local shooter is not a sniper }; - } else { - _abort = true; + }; + if (GVAR(simulateForGroupMembers) && _abort) then { + _abort = (group ACE_player) != (group _unit); }; }; //if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // We currently do not have firedEHs on vehicles @@ -112,7 +114,7 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; -"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _AmmoCacheEntry select 0, _AmmoCacheEntry select 6, _AmmoCacheEntry select 7, _AmmoCacheEntry select 8, _AmmoCacheEntry select 5, _stabilityFactor, _WeaponCacheEntry select 1, _muzzleVelocity, _AmmoCacheEntry select 4, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; +"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _AmmoCacheEntry select 0, _AmmoCacheEntry select 6, _AmmoCacheEntry select 7, _AmmoCacheEntry select 8, _AmmoCacheEntry select 5, _stabilityFactor, _WeaponCacheEntry select 1, _muzzleVelocity, _AmmoCacheEntry select 4, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(ACE_time), ACE_time - floor(ACE_time)]; [{ private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; @@ -132,9 +134,9 @@ GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; }; if (_bulletTraceVisible && _bulletSpeed > 600) then { - drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.0157480315*_caliber,0.00787401574*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; + drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.02*_caliber,0.01*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; }; - call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]); + call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(ACE_time), ACE_time - floor(ACE_time)]); }, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf b/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf index ba7ea31a8f..186c0d0649 100644 --- a/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf +++ b/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf @@ -26,9 +26,10 @@ if !(_activated) exitWith {}; [_logic, QGVAR(ammoTemperatureEnabled), "ammoTemperatureEnabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(barrelLengthInfluenceEnabled), "barrelLengthInfluenceEnabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(bulletTraceEnabled), "bulletTraceEnabled"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(onlyActiveForLocalPlayers), "onlyActiveForLocalPlayers"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(simulateForEveryone), "simulateForEveryone"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(disabledInFullAutoMode), "disabledInFullAutoMode"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(alwaysSimulateForSnipers), "alwaysSimulateForSnipers"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(simulateForSnipers), "simulateForSnipers"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(simulateForGroupMembers), "simulateForGroupMembers"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(simulationInterval), "simulationInterval"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(simulationRadius), "simulationRadius"] call EFUNC(common,readSettingFromModule); diff --git a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf index 93a79138c6..b2fc7ba084 100644 --- a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf +++ b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf @@ -18,7 +18,7 @@ if (!GVAR(extensionAvailable)) exitWith {}; private ["_initStartTime", "_mapSize", "_mapGrids", "_gridCells", "_x", "_y", "_gridCenter", "_gridHeight", "_gridNumObjects", "_gridSurfaceIsWater"]; -_initStartTime = time; +_initStartTime = ACE_time; _mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize"); if (("ace_advanced_ballistics" callExtension format["init:%1:%2", worldName, _mapSize]) == "Terrain already initialized") exitWith { @@ -41,7 +41,7 @@ GVAR(currentGrid) = 0; if (GVAR(currentGrid) >= _gridCells) exitWith { if (GVAR(initMessageEnabled)) then { - systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", ceil(time - _initStartTime)]; + systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", ceil(ACE_time - _initStartTime)]; }; [_this select 1] call cba_fnc_removePerFrameHandler; }; diff --git a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf index cbf8731336..8a1a29f7b0 100644 --- a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf @@ -4,7 +4,7 @@ * Reads the weapon class config and updates the config cache * * Arguments: - * 0: ammo - classname + * 0: weapon - classname * * Return Value: * 0: [_barrelTwist, _twistDirection, _barrelLength] diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 565e4bd801..d39139ce36 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -37,13 +37,31 @@ Enables advanced ballistics Aktywuje zaawansowaną balistykę - - Always Enabled For Snipers - Zawsze akt. dla snajp. + + Enabled For Snipers - - Always enables advanced ballistics when high power optics are used - Aktywuje zaawansowaną balistykę zawsze, kiedy używana jest optyka + + Enables advanced ballistics for non local snipers (when using high power optics) + + + Enabled For Group Members + + + Enables advanced ballistics for non local group members + + + Enabled For Everyone + + + Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer) + + + Always Enabled For Group Members + Zawsze akt. dla czł. grupy + + + Always enables advanced ballistics when a group member fires + Aktywuje zaawansowaną balistykę dla wszystkich członków grupy Disabled In FullAuto Mode @@ -53,14 +71,6 @@ Disables the advanced ballistics during full auto fire Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego - - Disabled For Non Local Players - Wyłącz dla nielok. graczy - - - Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer) - Dezaktywuje zaawansowaną balistykę dla pocisków pochodzących od innych graczy(aktywuj tą opcję jeżeli odczuwasz spadki FPS podczas sporych strzelanin w MP) - Enable Ammo Temperature Simulation Symulacja temp. amunicji @@ -106,4 +116,4 @@ Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki. - \ No newline at end of file + diff --git a/addons/ai/script_component.hpp b/addons/ai/script_component.hpp index 6097849c6b..7add51c06c 100644 --- a/addons/ai/script_component.hpp +++ b/addons/ai/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT ai -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_AI #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_AI #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index 62bf2181c7..0277de1c14 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -4,7 +4,6 @@ ADDON = false; PREP(add_new_gun); PREP(calculate_range_card); -PREP(calculate_scope_base_angle); PREP(calculate_solution); PREP(calculate_target_range_assist); PREP(calculate_target_solution); diff --git a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf b/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf deleted file mode 100644 index fbd191bb79..0000000000 --- a/addons/atragmx/functions/fnc_calculate_scope_base_angle.sqf +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Author: Ruthberg - * Calculates a new scope base angle - * - * Arguments: - * 0: Bullet mass - * 1: Bore height - * 2: air friction - * 3: muzzle velocity - * 4: zero range - * - * Return Value: - * scope base angle - * - * Example: - * call ace_atragmx_calculate_scope_base_angle - * - * Public: No - */ -#include "script_component.hpp" - -private ["_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_zeroRange"]; -_bulletMass = _this select 0; -_boreHeight = _this select 1; -_airFriction = _this select 2; -_muzzleVelocity = _this select 3; -_zeroRange = _this select 4; - -private ["_scopeBaseAngle"]; -_scopeBaseAngle = 0; - -private ["_temperature", "_barometricPressure", "_relativeHumidity"]; -_temperature = 15; -_barometricPressure = 1013.25; -_relativeHumidity = 0; - -private ["_result"]; -_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0, 0] call FUNC(calculate_solution); - -_scopeBaseAngle + (_result select 0) / 60 diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index 2049398a9c..869ce8d098 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -37,7 +37,7 @@ * 8: Spin drift (MOA) * * Example: - * call ace_atragmx_calculate_target_range_assist + * call ace_atragmx_calculate_solution * * Public: No */ diff --git a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf index 6e47461cf3..9bc5b7e34f 100644 --- a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf +++ b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf @@ -30,7 +30,7 @@ if !(ctrlVisible 9000) then { if (!(GVAR(speedAssistTimer))) exitWith { GVAR(speedAssistTimer) = true; - ctrlSetText [8006, Str(Round((time - _startTime) * 10) / 10)]; + ctrlSetText [8006, Str(Round((ACE_time - _startTime) * 10) / 10)]; [] call FUNC(calculate_target_speed_assist); @@ -40,7 +40,7 @@ if !(ctrlVisible 9000) then { [_this select 1] call cba_fnc_removePerFrameHandler; }; - ctrlSetText [9001, Str(Round((time - _startTime) * 10) / 10)]; + ctrlSetText [9001, Str(Round((ACE_time - _startTime) * 10) / 10)]; - }, 0.1, [time]] call CBA_fnc_addPerFrameHandler; + }, 0.1, [ACE_time]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/attach/$PBOPREFIX$ b/addons/attach/$PBOPREFIX$ index 71a2f40af8..a647dc3672 100644 --- a/addons/attach/$PBOPREFIX$ +++ b/addons/attach/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\attach \ No newline at end of file +z\ace\addons\attach \ No newline at end of file diff --git a/addons/attach/script_component.hpp b/addons/attach/script_component.hpp index 6d468d89c1..409f74ab94 100644 --- a/addons/attach/script_component.hpp +++ b/addons/attach/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT attach -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_ATTACH #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 571112697a..e0cc3f203d 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -552,7 +552,7 @@ class CfgWeapons { }; initSpeed = -1.0; ACE_barrelTwist=381.0; - ACE_barrelLength=929.64; + ACE_barrelLength=730; }; class srifle_DMR_02_F: DMR_02_base_F { magazines[] = { diff --git a/addons/captives/functions/fnc_handleKilled.sqf b/addons/captives/functions/fnc_handleKilled.sqf index 720bde9df7..3eed932d5a 100644 --- a/addons/captives/functions/fnc_handleKilled.sqf +++ b/addons/captives/functions/fnc_handleKilled.sqf @@ -17,8 +17,10 @@ PARAMS_1(_oldUnit); +if (!local _oldUnit) exitWith {}; + if (_oldUnit getVariable [QGVAR(isHandcuffed), false]) then { - [_oldUnit, false] call FUNC(setSurrendered); + [_oldUnit, false] call FUNC(setHandcuffed); }; if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf index 22de70921d..c1a34b636c 100644 --- a/addons/captives/functions/fnc_setSurrendered.sqf +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -89,7 +89,7 @@ if (_state) then { PARAMS_2(_args,_pfID); EXPLODE_2_PVT(_args,_unit,_maxTime); //If waited long enough or they re-surrendered or they are unconscious, exit loop - if ((time > _maxTime) || {_unit getVariable [QGVAR(isSurrendering), false]} || {_unit getVariable ["ACE_isUnconscious", false]}) exitWith { + if ((ACE_time > _maxTime) || {_unit getVariable [QGVAR(isSurrendering), false]} || {_unit getVariable ["ACE_isUnconscious", false]}) exitWith { [_pfID] call CBA_fnc_removePerFrameHandler; }; //Only break animation if they are actualy the "hands up" animation (because we are using switchmove there won't be an transition) @@ -98,6 +98,6 @@ if (_state) then { //Break out of hands up animation loop [_unit, "ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); }; - }, 0, [_unit, (time + 20)]] call CBA_fnc_addPerFrameHandler; + }, 0, [_unit, (ACE_time + 20)]] call CBA_fnc_addPerFrameHandler; }; }; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index ba238c2796..e7bb232979 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -41,7 +41,7 @@ if (hasInterface) then { // hack to get PFH to work in briefing [QGVAR(onBriefingPFH), "onEachFrame", { - if (time > 0) exitWith { + if (ACE_time > 0) exitWith { [QGVAR(onBriefingPFH), "onEachFrame"] call BIS_fnc_removeStackedEventHandler; }; @@ -223,7 +223,7 @@ GVAR(OldIsCamera) = false; ["activeCameraChanged", [ACE_player, _isCamera]] call FUNC(localEvent); }; -}, 1, []] call cba_fnc_addPerFrameHandler; // feel free to decrease the sleep time if you need it. +}, 1, []] call cba_fnc_addPerFrameHandler; // feel free to decrease the sleep ACE_time if you need it. [QGVAR(StateArrested),false,true,QUOTE(ADDON)] call FUNC(defineVariable); @@ -244,7 +244,7 @@ GVAR(OldIsCamera) = false; // Lastly, do JIP events // JIP Detection and event trigger. Run this at the very end, just in case anything uses it -if(isMultiplayer && { time > 0 || isNull player } ) then { +if(isMultiplayer && { ACE_time > 0 || isNull player } ) then { // We are jipping! Get ready and wait, and throw the event [{ if(!(isNull player)) then { diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index ce7623ea38..a9476a3765 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -321,6 +321,8 @@ ACE_realTime = diag_tickTime; ACE_virtualTime = diag_tickTime; ACE_diagTime = diag_tickTime; ACE_gameTime = time; +ACE_pausedTime = 0; +ACE_virtualPausedTime = 0; PREP(timePFH); [FUNC(timePFH), 0, []] call cba_fnc_addPerFrameHandler; diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf index 9807896358..053ecb60b7 100644 --- a/addons/common/functions/fnc__handleSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleSyncedEvent.sqf @@ -28,7 +28,7 @@ if(isServer) then { if(_ttl > -1) then { _internalData = HASH_GET(GVAR(syncedEvents),_name); _eventLog = _internalData select 1; - _eventLog pushback [diag_tickTime, _args, _ttl]; + _eventLog pushback [ACE_diagTime, _args, _ttl]; }; }; diff --git a/addons/common/functions/fnc_addScrollWheelEventHandler.sqf b/addons/common/functions/fnc_addScrollWheelEventHandler.sqf index 9f63719649..d079b4b17e 100644 --- a/addons/common/functions/fnc_addScrollWheelEventHandler.sqf +++ b/addons/common/functions/fnc_addScrollWheelEventHandler.sqf @@ -1,7 +1,7 @@ /* * Author: commy2 * - * Add an event handler that executes every time the scroll wheel is used. This is needed, because adding a MouseZ display event handler to display 46 will break in save games. Argument will be [Interval] where 'Interval' is a number. + * Add an event handler that executes every ACE_time the scroll wheel is used. This is needed, because adding a MouseZ display event handler to display 46 will break in save games. Argument will be [Interval] where 'Interval' is a number. * * Argument: * 0: Code to execute (Code or String) diff --git a/addons/common/functions/fnc_cachedCall.sqf b/addons/common/functions/fnc_cachedCall.sqf index c03d498eaa..f9d9c74dd3 100644 --- a/addons/common/functions/fnc_cachedCall.sqf +++ b/addons/common/functions/fnc_cachedCall.sqf @@ -1,6 +1,6 @@ /* * Author: esteldunedain and Jaynus - * Returns the result of the function and caches it up to a given time or event + * Returns the result of the function and caches it up to a given ACE_time or event * * Arguments: * 0: Parameters @@ -21,8 +21,8 @@ PARAMS_5(_params,_function,_namespace,_uid,_duration); //IGNORE_PRIVATE_WARNING("_eventName"); -if (((_namespace getVariable [_uid, [-99999]]) select 0) < diag_tickTime) then { - _namespace setVariable [_uid, [diag_tickTime + _duration, _params call _function]]; +if (((_namespace getVariable [_uid, [-99999]]) select 0) < ACE_diagTime) then { + _namespace setVariable [_uid, [ACE_diagTime + _duration, _params call _function]]; // Does the cache needs to be cleared on an event? if (count _this > 5) then { diff --git a/addons/common/functions/fnc_displayIcon.sqf b/addons/common/functions/fnc_displayIcon.sqf index 6561dbf63b..2fd5245465 100644 --- a/addons/common/functions/fnc_displayIcon.sqf +++ b/addons/common/functions/fnc_displayIcon.sqf @@ -86,11 +86,11 @@ _refresh = { if (_show) then { if ({(_x select 0 == _iconId)} count _list == 0) then { - _list pushback [_iconId, _icon, _color, time]; + _list pushback [_iconId, _icon, _color, ACE_time]; } else { { if (_x select 0 == _iconId) exitwith { - _list set [_foreachIndex, [_iconId, _icon, _color, time]]; + _list set [_foreachIndex, [_iconId, _icon, _color, ACE_time]]; }; } forEach _list; }; diff --git a/addons/common/functions/fnc_displayText.sqf b/addons/common/functions/fnc_displayText.sqf index ced1fbb4af..22349962ac 100644 --- a/addons/common/functions/fnc_displayText.sqf +++ b/addons/common/functions/fnc_displayText.sqf @@ -36,7 +36,7 @@ if (isNil "_sound") then {_sound = DEFAULT_PLAY_SOUND}; if (isNil "_delay") then {_delay = DEFAULT_DELAY}; if (isNil "_priority") then {_priority = DEFAULT_PRIORITY}; -_time = time; +_time = ACE_time; if (_time > _lastHintTime + _delay || {_priority >= _lastHintPriority}) then { hintSilent _text; if (_sound) then {playSound "ACE_Sound_Click"}; diff --git a/addons/common/functions/fnc_getDeathAnim.sqf b/addons/common/functions/fnc_getDeathAnim.sqf index 1e84224b0f..539c8d2616 100644 --- a/addons/common/functions/fnc_getDeathAnim.sqf +++ b/addons/common/functions/fnc_getDeathAnim.sqf @@ -1,6 +1,6 @@ /* * Author: Glowbal, PabstMirror - * Get the death animation for the unit at current time + * Get the death animation for the unit at current ACE_time * * Arguments: * 0: unit diff --git a/addons/common/functions/fnc_hashGet.sqf b/addons/common/functions/fnc_hashGet.sqf index dfcf84e443..6b47b98ad9 100644 --- a/addons/common/functions/fnc_hashGet.sqf +++ b/addons/common/functions/fnc_hashGet.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" private ["_val", "_index"]; -// diag_log text format["%1 HASH GET: %2", diag_tickTime, _this]; +// diag_log text format["%1 HASH GET: %2", ACE_diagTime, _this]; PARAMS_2(_hash,_key); diff --git a/addons/common/functions/fnc_hashHasKey.sqf b/addons/common/functions/fnc_hashHasKey.sqf index 83ddfe3877..8d31a6fcb4 100644 --- a/addons/common/functions/fnc_hashHasKey.sqf +++ b/addons/common/functions/fnc_hashHasKey.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" private ["_val", "_index"]; -// diag_log text format["%1 HASH HAS KEY: %2", diag_tickTime, _this]; +// diag_log text format["%1 HASH HAS KEY: %2", ACE_diagTime, _this]; PARAMS_2(_hash,_key); diff --git a/addons/common/functions/fnc_hashSet.sqf b/addons/common/functions/fnc_hashSet.sqf index d6c9948e7a..1b3bded6e9 100644 --- a/addons/common/functions/fnc_hashSet.sqf +++ b/addons/common/functions/fnc_hashSet.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" private ["_index"]; -// diag_log text format["%1 HASH SET: %2", diag_tickTime, _this]; +// diag_log text format["%1 HASH SET: %2", ACE_diagTime, _this]; PARAMS_3(_hash,_key,_val); diff --git a/addons/common/functions/fnc_progressBar.sqf b/addons/common/functions/fnc_progressBar.sqf index f7d927556c..d6518a9f10 100644 --- a/addons/common/functions/fnc_progressBar.sqf +++ b/addons/common/functions/fnc_progressBar.sqf @@ -5,7 +5,7 @@ * Finish/Failure/Conditional are all passed [_args, _elapsedTime, _totalTime, _errorCode] * * Argument: - * 0: NUMBER - Total Time (in game "time" seconds) + * 0: NUMBER - Total Time (in game "ACE_time" seconds) * 1: ARRAY - Arguments, passed to condition, fail and finish * 2: CODE or STRING - On Finish: Code called or STRING raised as event. * 3: CODE or STRING - On Failure: Code called or STRING raised as event. @@ -53,7 +53,7 @@ _perFrameFunction = { EXPLODE_8_PVT(_parameters,_args,_onFinish,_onFail,_condition,_player,_startTime,_totalTime,_exceptions); private ["_elapsedTime", "_errorCode"]; - _elapsedTime = time - _startTime; + _elapsedTime = ACE_time - _startTime; _errorCode = -1; // this does not check: target fell unconscious, target died, target moved inside vehicle / left vehicle, target moved outside of players range, target moves at all. @@ -105,4 +105,4 @@ _perFrameFunction = { }; }; -[_perFrameFunction, 0, [_args, _onFinish, _onFail, _condition, _player, time, _totalTime, _exceptions]] call CBA_fnc_addPerFrameHandler; +[_perFrameFunction, 0, [_args, _onFinish, _onFail, _condition, _player, ACE_time, _totalTime, _exceptions]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/common/functions/fnc_receiveRequest.sqf b/addons/common/functions/fnc_receiveRequest.sqf index e7857b9436..dc028724f6 100644 --- a/addons/common/functions/fnc_receiveRequest.sqf +++ b/addons/common/functions/fnc_receiveRequest.sqf @@ -41,7 +41,7 @@ GVAR(RECIEVE_REQUEST_ADD_ACTION_DECLINE) = _target addAction ["Decline", compile GVAR(RECIEVE_REQUEST_ID_KEY_BINDING) = _requestID; -GVAR(RECIEVE_REQUEST_TIME_OUT_SCRIPT) = [time, _target, _requestID] spawn { +GVAR(RECIEVE_REQUEST_TIME_OUT_SCRIPT) = [ACE_time, _target, _requestID] spawn { private["_id", "_t", "_requestID", "_target"]; _t = (_this select 0) + 40; _target = _this select 1; @@ -50,7 +50,7 @@ GVAR(RECIEVE_REQUEST_TIME_OUT_SCRIPT) = [time, _target, _requestID] spawn { waituntil { _id = _target getvariable _requestID; - (time > _t || isnil "_id")}; + (ACE_time > _t || isnil "_id")}; _target setvariable [_requestID, nil]; GVAR(RECIEVE_REQUEST_ID_KEY_BINDING) = nil; if (!isnil QGVAR(RECIEVE_REQUEST_ADD_ACTION_ACCEPT)) then { diff --git a/addons/common/functions/fnc_setVariablePublic.sqf b/addons/common/functions/fnc_setVariablePublic.sqf index 791be6ad9c..f5ab1920db 100644 --- a/addons/common/functions/fnc_setVariablePublic.sqf +++ b/addons/common/functions/fnc_setVariablePublic.sqf @@ -1,13 +1,13 @@ /* * Author: commy2 * - * Sets a public variable, but wait a certain amount of time to transfer the value over the network. Changing the value by calling this function again resets the windup timer. + * Sets a public variable, but wait a certain amount of ACE_time to transfer the value over the network. Changing the value by calling this function again resets the windup timer. * * Argument: * 0: Object the variable should be assigned to (Object) * 1: Name of the variable (String) * 2: Value of the variable (Any) - * 3: Windup time (Number, optional. Default: 1) + * 3: Windup ACE_time (Number, optional. Default: 1) * * Return value: * Nothing. @@ -38,12 +38,12 @@ if (_idName in _allIdNames) exitWith {}; // when to push the value private "_syncTime"; -_syncTime = diag_tickTime + _sync; +_syncTime = ACE_diagTime + _sync; // add eventhandler [_idName, "onEachFrame", { // wait to sync the variable - if (diag_tickTime > _this select 2) then { + if (ACE_diagTime > _this select 2) then { // set value public (_this select 0) setVariable [_this select 1, (_this select 0) getVariable (_this select 1), true]; diff --git a/addons/common/functions/fnc_syncedEventPFH.sqf b/addons/common/functions/fnc_syncedEventPFH.sqf index 12ce0b0141..a5ec809706 100644 --- a/addons/common/functions/fnc_syncedEventPFH.sqf +++ b/addons/common/functions/fnc_syncedEventPFH.sqf @@ -24,7 +24,7 @@ private["_data"]; if(typeName _globalEventTTL == "CODE") then { _ttlReturn = [(_data select 0),_eventEntry] call _globalEventTTL; } else { - _ttlReturn = call { _globalEventTTL < 1 || {diag_tickTime < (_eventEntry select 0) + _globalEventTTL} }; + _ttlReturn = call { _globalEventTTL < 1 || {ACE_diagTime < (_eventEntry select 0) + _globalEventTTL} }; }; if(_ttlReturn) then { @@ -35,7 +35,7 @@ private["_data"]; if(typeName _eventTTL == "CODE") then { _ttlReturn = [(_data select 0),_eventEntry] call _eventTTL; } else { - _ttlReturn = call { _eventTTL < 1 || {diag_tickTime < (_eventEntry select 0) + _eventTTL} }; + _ttlReturn = call { _eventTTL < 1 || {ACE_diagTime < (_eventEntry select 0) + _eventTTL} }; }; }; diff --git a/addons/common/functions/fnc_throttledPublicVariable.sqf b/addons/common/functions/fnc_throttledPublicVariable.sqf index 3fc5fb288b..e7966c3b4d 100644 --- a/addons/common/functions/fnc_throttledPublicVariable.sqf +++ b/addons/common/functions/fnc_throttledPublicVariable.sqf @@ -19,7 +19,7 @@ PARAMS_3(_unit,_varName,_maxDelay); -// Create the publish scheduler PFH the first time +// Create the publish scheduler PFH the first ACE_time if (isNil QGVAR(publishSchedId)) then { GVAR(publishVarNames) = []; @@ -27,7 +27,7 @@ if (isNil QGVAR(publishSchedId)) then { GVAR(publishSchedId) = [{ - if (diag_tickTime > GVAR(publishNextTime)) then { + if (ACE_diagTime > GVAR(publishNextTime)) then { { EXPLODE_2_PVT(_x,_unit,_varName); _unit setVariable [_varName, (_unit getVariable _varName), true]; @@ -42,8 +42,8 @@ if (isNil QGVAR(publishSchedId)) then { // If the variable is not on the list if (GVAR(publishVarNames) find [_unit,_varName] == -1) exitWith { GVAR(publishVarNames) pushBack [_unit,_varName]; - GVAR(publishNextTime) = GVAR(publishNextTime) min (diag_tickTime + _maxDelay); + GVAR(publishNextTime) = GVAR(publishNextTime) min (ACE_diagTime + _maxDelay); }; // If the variable is on the list -GVAR(publishNextTime) = GVAR(publishNextTime) min (diag_tickTime + _maxDelay); \ No newline at end of file +GVAR(publishNextTime) = GVAR(publishNextTime) min (ACE_diagTime + _maxDelay); \ No newline at end of file diff --git a/addons/common/functions/fnc_timePFH.sqf b/addons/common/functions/fnc_timePFH.sqf index 6385c4d05e..40fef519a8 100644 --- a/addons/common/functions/fnc_timePFH.sqf +++ b/addons/common/functions/fnc_timePFH.sqf @@ -1,25 +1,26 @@ //#define DEBUG_MODE_FULL #include "script_component.hpp" -private["_lastRealTime", "_lastGameTime", "_delta"]; +private["_lastTickTime", "_lastGameTime", "_delta"]; -_lastRealTime = ACE_realTime; +_lastTickTime = ACE_diagTime; _lastGameTime = ACE_gameTime; ACE_gameTime = time; ACE_diagTime = diag_tickTime; -_delta = ACE_diagTime - _lastRealTime; +_delta = ACE_diagTime - _lastTickTime; if(ACE_gameTime <= _lastGameTime) then { + TRACE_1("paused",_delta); ACE_paused = true; // Game is paused or not running ACE_pausedTime = ACE_pausedTime + _delta; ACE_virtualPausedTime = ACE_pausedTime + (_delta * accTime); } else { + TRACE_1("live",_delta); ACE_paused = false; // Time is updating ACE_realTime = ACE_realTime + _delta; ACE_virtualTime = ACE_virtualTime + (_delta * accTime); ACE_time = ACE_virtualTime; }; - diff --git a/addons/common/functions/fnc_waitAndExecute.sqf b/addons/common/functions/fnc_waitAndExecute.sqf index 41301f0f29..a2878ae347 100644 --- a/addons/common/functions/fnc_waitAndExecute.sqf +++ b/addons/common/functions/fnc_waitAndExecute.sqf @@ -1,13 +1,13 @@ /* * Author: esteldunedain * - * Executes a code once with a given game time delay, using a PFH + * Executes a code once with a given game ACE_time delay, using a PFH * * Argument: * 0: Code to execute (Code) * 1: Parameters to run the code with (Array) * 2: Delay in seconds before executing the code (Number) - * 3: Interval of time in which the execution is evaluated, 0 means every frame (Number) + * 3: Interval of ACE_time in which the execution is evaluated, 0 means every frame (Number) * * Return value: * PFH handler ID @@ -22,8 +22,8 @@ PARAMS_4(_func,_params,_delay,_interval); EXPLODE_2_PVT(_params,_delayedExecParams,_startTime); EXPLODE_3_PVT(_delayedExecParams,_func,_funcParams,_delay); - // Exit if the time was not reached yet - if (time < _startTime + _delay) exitWith {}; + // Exit if the ACE_time was not reached yet + if (ACE_time < _startTime + _delay) exitWith {}; // Remove the PFH [_pfhId] call cba_fnc_removePerFrameHandler; @@ -32,5 +32,5 @@ PARAMS_4(_func,_params,_delay,_interval); _funcParams call _func; }, _interval, - [_this, time] + [_this, ACE_time] ] call CBA_fnc_addPerFrameHandler diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index bc9abbf127..e19a01df1b 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -64,7 +64,7 @@ if (isNull _holder) then { if (isNull _holder) exitWith { [_caller, _target, "Debug: Null Holder"] call FUNC(eventTargetFinish); }; -//Make sure only one drop operation at a time (using PFEH system as a queue) +//Make sure only one drop operation at a ACE_time (using PFEH system as a queue) if (_holder getVariable [QGVAR(holderInUse), false]) exitWith { [{ _this call FUNC(disarmDropItems); @@ -178,7 +178,7 @@ if (_holderIsEmpty) then { _needToRemoveVest = ((vest _target) != "") && {(vest _target) in _listOfItemsToRemove}; _needToRemoveUniform = ((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove}; - if ((time < _maxWaitTime) && {[_target] call FUNC(canBeDisarmed)} && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { + if ((ACE_time < _maxWaitTime) && {[_target] call FUNC(canBeDisarmed)} && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { //action drop weapons (keeps loaded magazine and attachements) { if (_x in _listOfItemsToRemove) then { @@ -234,7 +234,7 @@ if (_holderIsEmpty) then { clearItemCargoGlobal _holder; }; //Verify we didn't timeout waiting on drop action - if (time >= _maxWaitTime) exitWith { + if (ACE_time >= _maxWaitTime) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Drop Actions Timeout"] call FUNC(eventTargetFinish); }; @@ -264,4 +264,4 @@ if (_holderIsEmpty) then { [_caller, _target, ""] call FUNC(eventTargetFinish); }; -}, 0.0, [_caller,_target, _listOfItemsToRemove, _holder, _holderIsEmpty, (time + TIME_MAX_WAIT), _doNotDropAmmo, _targetMagazinesEnd]] call CBA_fnc_addPerFrameHandler; +}, 0.0, [_caller,_target, _listOfItemsToRemove, _holder, _holderIsEmpty, (ACE_time + TIME_MAX_WAIT), _doNotDropAmmo, _targetMagazinesEnd]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_eventCallerFinish.sqf b/addons/disarming/functions/fnc_eventCallerFinish.sqf index c87cb434b3..d95be98d5f 100644 --- a/addons/disarming/functions/fnc_eventCallerFinish.sqf +++ b/addons/disarming/functions/fnc_eventCallerFinish.sqf @@ -22,4 +22,4 @@ PARAMS_3(_caller,_target,_errorMsg); if (_caller != ACE_player) exitWith {}; systemChat format ["Debug-Caller: Disarm finished from [%1] with code [%2]", _target, _errorMsg]; -diag_log text format ["[ACE_Disarming] %1 - eventCallerFinish: %2", time, _this]; +diag_log text format ["[ACE_Disarming] %1 - eventCallerFinish: %2", ACE_time, _this]; diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf index 8cc67fa486..d702a554a5 100644 --- a/addons/disarming/functions/fnc_eventTargetFinish.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -21,6 +21,6 @@ PARAMS_3(_caller,_target,_errorMsg); if (_errorMsg != "") then { - diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", time, _this]; + diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", ACE_time, _this]; ["DisarmDebugCallback", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); }; diff --git a/addons/disposable/script_component.hpp b/addons/disposable/script_component.hpp index 375e44147d..af1f17bd86 100644 --- a/addons/disposable/script_component.hpp +++ b/addons/disposable/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT disposable -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_ATTACH #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/dragging/functions/fnc_carryObjectPFH.sqf b/addons/dragging/functions/fnc_carryObjectPFH.sqf index f3a9329d35..3ad1f89f77 100644 --- a/addons/dragging/functions/fnc_carryObjectPFH.sqf +++ b/addons/dragging/functions/fnc_carryObjectPFH.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" #ifdef DEBUG_ENABLED_DRAGGING - systemChat format ["%1 carryObjectPFH running", time]; + systemChat format ["%1 carryObjectPFH running", ACE_time]; #endif private ["_unit", "_target"]; diff --git a/addons/dragging/functions/fnc_dragObjectPFH.sqf b/addons/dragging/functions/fnc_dragObjectPFH.sqf index 8af8e62b90..465107af39 100644 --- a/addons/dragging/functions/fnc_dragObjectPFH.sqf +++ b/addons/dragging/functions/fnc_dragObjectPFH.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" #ifdef DEBUG_ENABLED_DRAGGING - systemChat format ["%1 dragObjectPFH running", time]; + systemChat format ["%1 dragObjectPFH running", ACE_time]; #endif private ["_unit", "_target"]; diff --git a/addons/dragging/functions/fnc_startCarry.sqf b/addons/dragging/functions/fnc_startCarry.sqf index ff201afb02..f5d543c959 100644 --- a/addons/dragging/functions/fnc_startCarry.sqf +++ b/addons/dragging/functions/fnc_startCarry.sqf @@ -26,7 +26,7 @@ if (_weight > GETMVAR(ACE_maxWeightCarry,1E11)) exitWith { }; private "_timer"; -_timer = time + 5; +_timer = ACE_time + 5; // handle objects vs persons if (_target isKindOf "CAManBase") then { @@ -46,7 +46,7 @@ if (_target isKindOf "CAManBase") then { [_unit, "AcinPknlMstpSnonWnonDnon_AcinPercMrunSnonWnonDnon", 2, true] call EFUNC(common,doAnimation); [_target, "AinjPfalMstpSnonWrflDnon_carried_Up", 2, true] call EFUNC(common,doAnimation); - _timer = time + 15; + _timer = ACE_time + 15; } else { @@ -62,7 +62,7 @@ if (_target isKindOf "CAManBase") then { [_unit, _target, true] call EFUNC(common,claim); -// prevents draging and carrying at the same time +// prevents draging and carrying at the same ACE_time _unit setVariable [QGVAR(isCarrying), true, true]; // required for aborting animation diff --git a/addons/dragging/functions/fnc_startCarryPFH.sqf b/addons/dragging/functions/fnc_startCarryPFH.sqf index d98522c5f2..47824a8e76 100644 --- a/addons/dragging/functions/fnc_startCarryPFH.sqf +++ b/addons/dragging/functions/fnc_startCarryPFH.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" #ifdef DEBUG_ENABLED_DRAGGING - systemChat format ["%1 startCarryPFH running", time]; + systemChat format ["%1 startCarryPFH running", ACE_time]; #endif private ["_unit", "_target", "_timeOut"]; @@ -24,13 +24,13 @@ if ((!([_target] call EFUNC(common,isAlive))) || {(_unit distance _target) > 10} // handle persons vs objects if (_target isKindOf "CAManBase") then { - if (time > _timeOut) exitWith { + if (ACE_time > _timeOut) exitWith { [_unit, _target] call FUNC(carryObject); [_this select 1] call CBA_fnc_removePerFrameHandler; }; } else { - if (time > _timeOut) exitWith { + if (ACE_time > _timeOut) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; // drop if in timeout diff --git a/addons/dragging/functions/fnc_startDrag.sqf b/addons/dragging/functions/fnc_startDrag.sqf index fbf0f4608c..6ce3b73a5f 100644 --- a/addons/dragging/functions/fnc_startDrag.sqf +++ b/addons/dragging/functions/fnc_startDrag.sqf @@ -48,7 +48,7 @@ if (_target isKindOf "CAManBase") then { [_target, "AinjPpneMrunSnonWnonDb_grab", 2, true] call EFUNC(common,doAnimation); }; -// prevents draging and carrying at the same time +// prevents draging and carrying at the same ACE_time _unit setVariable [QGVAR(isDragging), true, true]; -[FUNC(startDragPFH), 0.2, [_unit, _target, time + 5]] call CBA_fnc_addPerFrameHandler; +[FUNC(startDragPFH), 0.2, [_unit, _target, ACE_time + 5]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/dragging/functions/fnc_startDragPFH.sqf b/addons/dragging/functions/fnc_startDragPFH.sqf index d77a23457e..65cf0a2431 100644 --- a/addons/dragging/functions/fnc_startDragPFH.sqf +++ b/addons/dragging/functions/fnc_startDragPFH.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" #ifdef DEBUG_ENABLED_DRAGGING - systemChat format ["%1 startDragPFH running", time]; + systemChat format ["%1 startDragPFH running", ACE_time]; #endif private ["_unit", "_target", "_timeOut"]; @@ -22,8 +22,8 @@ if ((!([_target] call EFUNC(common,isAlive))) || {(_unit distance _target) > 10} [_this select 1] call CBA_fnc_removePerFrameHandler; }; -// timeout. Do nothing. Quit. time, because anim length is linked to ingame time. -if (time > _timeOut) exitWith { +// timeout. Do nothing. Quit. ACE_time, because anim length is linked to ingame ACE_time. +if (ACE_time > _timeOut) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; // drop if in timeout diff --git a/addons/explosives/CfgAmmo.hpp b/addons/explosives/CfgAmmo.hpp index 1471eb7e1e..c6d70bc64a 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -75,7 +75,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; }; - class IEDLandBig_Remote_Ammo: IEDUrbanBig_Remote_Ammo { + class IEDLandBig_Remote_Ammo: PipeBombBase { mineTrigger = "RangeTrigger"; triggerWhenDestroyed = 1; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; @@ -85,7 +85,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; }; - class IEDLandSmall_Remote_Ammo: IEDUrbanSmall_Remote_Ammo { + class IEDLandSmall_Remote_Ammo: PipeBombBase { mineTrigger = "RangeTrigger"; triggerWhenDestroyed = 1; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 998f73ccaf..88a7bbba95 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -14,6 +14,28 @@ * Public: No */ #include "script_component.hpp" + +//Start up a PFEH that scans all mines/explosives without defuseObjects attached and adds them +//Handles Editor Placed / Zeus / Scripted +if (isServer) then { + [{ + private ["_explosive", "_helpers", "_defuseHelper"]; + { + _explosive = _x; + _helpers = { + ((typeOf _x) == "ACE_DefuseObject") && {(_x getVariable [QGVAR(Explosive), objNull]) == _explosive} + } count (attachedObjects _explosive); + + if (_helpers == 0) then { + TRACE_3("Explosive without helper",_explosive,(getPosAsl _explosive),(typeOf _explosive)); + _defuseHelper = createVehicle ["ACE_DefuseObject", (getPos _explosive), [], 0, "NONE"]; + _defuseHelper attachTo [_explosive, [0,0,0], ""]; + _defuseHelper setVariable [QGVAR(Explosive),_explosive,true]; + }; + } forEach allMines; + }, 5, []] call CBA_fnc_addPerFrameHandler; +}; + if !(hasInterface) exitWith {}; GVAR(PlacedCount) = 0; GVAR(Setup) = objNull; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 917c874af6..959ac0c347 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -7,7 +7,7 @@ * 1: Max range (-1 to ignore) * 2: Explosive * 0: Explosive - * 1: Fuse time + * 1: Fuse ACE_time * * Return Value: * None diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index 4bed019d47..2e6a0ad2c5 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -25,6 +25,8 @@ private ["_ammo", "_explosive", "_attachedTo", "_expPos", "_magazineTrigger"]; EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars); DEFAULT_PARAM(6,_setupPlaceholderObject,objNull); +_unit playActionNow "PutDown"; + _attachedTo = objNull; if (!isNull _setupPlaceholderObject) then { _attachedTo = attachedTo _setupPlaceholderObject; diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index f133dbb080..323e8bd634 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -42,5 +42,5 @@ _player setVariable [QGVAR(PlantingExplosive), true]; [{_this setVariable [QGVAR(PlantingExplosive), false]}, _player, 1.5, 0.5] call EFUNC(common,waitAndExecute); _setup addEventHandler ["EpeContactStart", FUNC(onLanded)]; _setup enableSimulationGlobal true; -_player playActionNow "MedicOther"; +_player playActionNow "PutDown"; _player removeMagazine (_setup getVariable [QGVAR(Class), ""]); diff --git a/addons/fcs/XEH_clientInit.sqf b/addons/fcs/XEH_clientInit.sqf index 3338e739e1..f5131dd135 100644 --- a/addons/fcs/XEH_clientInit.sqf +++ b/addons/fcs/XEH_clientInit.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" GVAR(enabled) = false; -GVAR(time) = 0; +GVAR(ACE_time) = 0; GVAR(position) = [0,0,0]; if (!hasInterface) exitWith {}; diff --git a/addons/fcs/functions/fnc_getAngle.sqf b/addons/fcs/functions/fnc_getAngle.sqf index 03024d8b98..91150c110d 100644 --- a/addons/fcs/functions/fnc_getAngle.sqf +++ b/addons/fcs/functions/fnc_getAngle.sqf @@ -19,7 +19,7 @@ #include "script_component.hpp" #define PRECISION 0.1 -private ["_distance","_angleTarget","_maxElev","_initSpeed","_airFriction","_timeToLive","_timeToLive","_simulationStep","_angle","_posTargetX","_posTargetY","_posX","_posY","_velocityX","_velocityY","_velocityMagnitude"]; +private ["_distance", "_angleTarget", "_maxElev", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep", "_angle1", "_angle2", "_it2", "_f1", "_f2", "_temp", "_it1", "_angle"]; _distance = _this select 0; _angleTarget = _this select 1; @@ -32,7 +32,7 @@ _simulationStep = _this select 6; if (_simulationStep == 0) exitWith {_angleTarget}; FUNC(traceBullet) = { - private ["_distance", "_angleTarget", "_maxElev", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep", "_angle", "_posTargetX", "_posTargetY", "_posX", "_posY", "_velocityX", "_velocityY", "_velocityMagnitude"]; + private ["_distance", "_angleTarget", "_maxElev", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep", "_angle", "_posTargetX", "_posTargetY", "_posX", "_posY", "_velocityX", "_velocityY", "_velocityMagnitude", "_i"]; _distance = _this select 0; _angleTarget = _this select 1; diff --git a/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf b/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf index 31c2540790..899cf0da76 100644 --- a/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf +++ b/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf @@ -1,4 +1,7 @@ // by commy2 +#include "script_component.hpp" + +private ["_vehicle", "_projectile", "_zeroing", "_position", "_subMunition"]; _vehicle = _this select 0 select 0; _projectile = _this select 0 select 1; diff --git a/addons/fcs/functions/fnc_keyDown.sqf b/addons/fcs/functions/fnc_keyDown.sqf index 8646ce8468..a56e94bbf1 100644 --- a/addons/fcs/functions/fnc_keyDown.sqf +++ b/addons/fcs/functions/fnc_keyDown.sqf @@ -22,7 +22,7 @@ _distance = call FUNC(getRange); if !(!GVAR(enabled) && FUNC(canUseFCS)) exitWith {}; GVAR(Enabled) = true; -GVAR(Time) = time; +GVAR(Time) = ACE_time; if (_distance == 0) then { _distance = [5, 5000, 0] call EFUNC(common,getTargetDistance); // maximum distance: 5000m, 5m precision diff --git a/addons/fcs/functions/fnc_keyUp.sqf b/addons/fcs/functions/fnc_keyUp.sqf index a7bf8defe5..295137a6d3 100644 --- a/addons/fcs/functions/fnc_keyUp.sqf +++ b/addons/fcs/functions/fnc_keyUp.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -private ["_vehicle", "_turret", "_turretConfig", "_distance", "_weapons", "_magazines", "_showHint", "_playSound"]; +private ["_vehicle", "_turret", "_turretConfig", "_distance", "_weapons", "_magazines", "_showHint", "_playSound", "_i"]; _vehicle = _this select 0; _turret = _this select 1; @@ -60,7 +60,7 @@ private ["_movingAzimuth", "_posTarget", "_velocityTarget"]; // MOVING TARGETS _movingAzimuth = 0; -if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then { +if (ACE_time - GVAR(ACE_time) > 1 and GVAR(ACE_time) != -1 and count _this < 3) then { // calculate speed of target _posTarget = [ (getPos _vehicle select 0) + _distance * (_weaponDirection select 0), @@ -68,14 +68,14 @@ if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then { (getPos _vehicle select 2) + _distance * (_weaponDirection select 2) ]; _velocityTarget = [ - ((_posTarget select 0) - (GVAR(position) select 0)) / (time - GVAR(time)), - ((_posTarget select 1) - (GVAR(position) select 1)) / (time - GVAR(time)), - ((_posTarget select 2) - (GVAR(position) select 2)) / (time - GVAR(time)) + ((_posTarget select 0) - (GVAR(position) select 0)) / (ACE_time - GVAR(ACE_time)), + ((_posTarget select 1) - (GVAR(position) select 1)) / (ACE_time - GVAR(ACE_time)), + ((_posTarget select 2) - (GVAR(position) select 2)) / (ACE_time - GVAR(ACE_time)) ]; private ["_magazineType", "_ammoType", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep", "_initSpeedCoef", "_velocityMagnitude"]; - // estimate time to target + // estimate ACE_time to target _magazineType = _vehicle currentMagazineTurret _turret; _ammoType = getText (configFile >> "CfgMagazines" >> _magazineType >> "ammo"); _initSpeed = getNumber (configFile >> "CfgMagazines" >> _magazineType >> "initSpeed"); @@ -130,7 +130,7 @@ if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then { }; }; GVAR(enabled) = false; -GVAR(time) = -1; +GVAR(ACE_time) = -1; private ["_viewDiff", "_FCSAzimuth", "_FCSMagazines", "_FCSElevation"]; diff --git a/addons/fcs/functions/script_component.hpp b/addons/fcs/functions/script_component.hpp index 73e258a3b6..8ada0f7a71 100644 --- a/addons/fcs/functions/script_component.hpp +++ b/addons/fcs/functions/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT fcs -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_FCS #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_FCS #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/fcs/script_component.hpp b/addons/fcs/script_component.hpp index 73e258a3b6..8ada0f7a71 100644 --- a/addons/fcs/script_component.hpp +++ b/addons/fcs/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT fcs -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_FCS #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_FCS #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/fonts/$NOBIN$ b/addons/fonts/$NOBIN$ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/addons/fonts/$PBOPREFIX$ b/addons/fonts/$PBOPREFIX$ new file mode 100644 index 0000000000..3e0ff77f61 --- /dev/null +++ b/addons/fonts/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\fonts \ No newline at end of file diff --git a/addons/fonts/CfgFontFamilies.hpp b/addons/fonts/CfgFontFamilies.hpp new file mode 100644 index 0000000000..963a35fa8e --- /dev/null +++ b/addons/fonts/CfgFontFamilies.hpp @@ -0,0 +1,39 @@ +class CfgFontFamilies +{ + class PixelSplitterBold + { + fonts[] = { PATHTOF(PixelSplitterBold\PixelSplitterBold6), + PATHTOF(PixelSplitterBold\PixelSplitterBold7), + PATHTOF(PixelSplitterBold\PixelSplitterBold8), + PATHTOF(PixelSplitterBold\PixelSplitterBold9), + PATHTOF(PixelSplitterBold\PixelSplitterBold10), + PATHTOF(PixelSplitterBold\PixelSplitterBold11), + PATHTOF(PixelSplitterBold\PixelSplitterBold12), + PATHTOF(PixelSplitterBold\PixelSplitterBold13), + PATHTOF(PixelSplitterBold\PixelSplitterBold14), + PATHTOF(PixelSplitterBold\PixelSplitterBold15), + PATHTOF(PixelSplitterBold\PixelSplitterBold16), + PATHTOF(PixelSplitterBold\PixelSplitterBold17), + PATHTOF(PixelSplitterBold\PixelSplitterBold18), + PATHTOF(PixelSplitterBold\PixelSplitterBold19), + PATHTOF(PixelSplitterBold\PixelSplitterBold20), + PATHTOF(PixelSplitterBold\PixelSplitterBold21), + PATHTOF(PixelSplitterBold\PixelSplitterBold22), + PATHTOF(PixelSplitterBold\PixelSplitterBold23), + PATHTOF(PixelSplitterBold\PixelSplitterBold24), + PATHTOF(PixelSplitterBold\PixelSplitterBold25), + PATHTOF(PixelSplitterBold\PixelSplitterBold26), + PATHTOF(PixelSplitterBold\PixelSplitterBold27), + PATHTOF(PixelSplitterBold\PixelSplitterBold28), + PATHTOF(PixelSplitterBold\PixelSplitterBold29), + PATHTOF(PixelSplitterBold\PixelSplitterBold30), + PATHTOF(PixelSplitterBold\PixelSplitterBold31), + PATHTOF(PixelSplitterBold\PixelSplitterBold34), + PATHTOF(PixelSplitterBold\PixelSplitterBold35), + PATHTOF(PixelSplitterBold\PixelSplitterBold37), + PATHTOF(PixelSplitterBold\PixelSplitterBold46) + }; + spaceWidth = 0.5; + spacing = 0.065; + }; +}; \ No newline at end of file diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold10-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-01.paa new file mode 100644 index 0000000000..78b43acfc7 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold10-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold10-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold10-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-04.paa new file mode 100644 index 0000000000..e69cde44c0 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold10-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold10.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold10.fxy new file mode 100644 index 0000000000..72d19784a1 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold10.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold11-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-01.paa new file mode 100644 index 0000000000..2bf97b0f27 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold11-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold11-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold11-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-04.paa new file mode 100644 index 0000000000..3380b2bf89 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold11-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold11.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold11.fxy new file mode 100644 index 0000000000..99816f6fb5 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold11.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold12-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-01.paa new file mode 100644 index 0000000000..f501f2593b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold12-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold12-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold12-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-04.paa new file mode 100644 index 0000000000..c4bd46f004 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold12-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold12.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold12.fxy new file mode 100644 index 0000000000..1b3a245879 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold12.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold13-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-01.paa new file mode 100644 index 0000000000..4e9886d86b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold13-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold13-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold13-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-04.paa new file mode 100644 index 0000000000..54b7d03786 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold13-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold13.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold13.fxy new file mode 100644 index 0000000000..d5d1c2b97a Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold13.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold14-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-01.paa new file mode 100644 index 0000000000..38bcc7fec8 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold14-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold14-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold14-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-04.paa new file mode 100644 index 0000000000..b869615414 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold14-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold14.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold14.fxy new file mode 100644 index 0000000000..521aee9cd7 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold14.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold15-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-01.paa new file mode 100644 index 0000000000..2da68e44a4 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold15-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold15-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold15-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-04.paa new file mode 100644 index 0000000000..825cb08bff Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold15-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold15.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold15.fxy new file mode 100644 index 0000000000..24ed35a794 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold15.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold16-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-01.paa new file mode 100644 index 0000000000..c222ecde5d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold16-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold16-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold16-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-04.paa new file mode 100644 index 0000000000..e83ca4db68 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold16-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold16.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold16.fxy new file mode 100644 index 0000000000..160ce95f48 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold16.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold17-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-01.paa new file mode 100644 index 0000000000..a305aeb22b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold17-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold17-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold17-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-04.paa new file mode 100644 index 0000000000..86132e202a Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold17-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold17.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold17.fxy new file mode 100644 index 0000000000..f62a72aa44 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold17.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold18-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-01.paa new file mode 100644 index 0000000000..c8fccc0360 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold18-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold18-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold18-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-04.paa new file mode 100644 index 0000000000..fb1f319d7e Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold18-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold18.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold18.fxy new file mode 100644 index 0000000000..f1daafd800 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold18.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold19-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-01.paa new file mode 100644 index 0000000000..f10f953978 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold19-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold19-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold19-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-04.paa new file mode 100644 index 0000000000..9082ca9be1 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold19-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold19.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold19.fxy new file mode 100644 index 0000000000..7e2f36ddb0 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold19.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold20-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-01.paa new file mode 100644 index 0000000000..cdb9c27a1c Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold20-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold20-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold20-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-04.paa new file mode 100644 index 0000000000..eba8657321 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold20-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold20.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold20.fxy new file mode 100644 index 0000000000..f06b9c5220 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold20.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold21-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-01.paa new file mode 100644 index 0000000000..aef2913981 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold21-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold21-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold21-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-04.paa new file mode 100644 index 0000000000..9138800d94 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold21-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold21.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold21.fxy new file mode 100644 index 0000000000..fd68593304 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold21.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold22-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-01.paa new file mode 100644 index 0000000000..3856a801ce Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold22-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold22-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold22-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-04.paa new file mode 100644 index 0000000000..398cebc35e Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold22-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold22.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold22.fxy new file mode 100644 index 0000000000..51f292d305 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold22.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold23-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-01.paa new file mode 100644 index 0000000000..d47b92788e Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold23-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold23-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold23-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-04.paa new file mode 100644 index 0000000000..ff76bcc7ad Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold23-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold23.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold23.fxy new file mode 100644 index 0000000000..414e8bd522 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold23.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold24-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-01.paa new file mode 100644 index 0000000000..199c484061 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold24-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold24-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold24-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-04.paa new file mode 100644 index 0000000000..2642bc1ec0 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold24-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold24.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold24.fxy new file mode 100644 index 0000000000..5229e497c7 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold24.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold25-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-01.paa new file mode 100644 index 0000000000..bcadccf7d4 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold25-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold25-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold25-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-04.paa new file mode 100644 index 0000000000..2d5dfc2a2f Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold25-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold25.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold25.fxy new file mode 100644 index 0000000000..516cc9609b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold25.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold26-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-01.paa new file mode 100644 index 0000000000..d0e4c2120f Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold26-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold26-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold26-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-04.paa new file mode 100644 index 0000000000..de4f428730 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold26-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold26.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold26.fxy new file mode 100644 index 0000000000..24684f11ff Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold26.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold27-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-01.paa new file mode 100644 index 0000000000..152a4615c1 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold27-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold27-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold27-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-04.paa new file mode 100644 index 0000000000..d2eb7fc7ad Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold27-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold27.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold27.fxy new file mode 100644 index 0000000000..c6659bccaf Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold27.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold28-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-01.paa new file mode 100644 index 0000000000..09f14e9fa0 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold28-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold28-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold28-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-04.paa new file mode 100644 index 0000000000..9226ff30ae Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold28-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold28.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold28.fxy new file mode 100644 index 0000000000..d754c25e3d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold28.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold29-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-01.paa new file mode 100644 index 0000000000..05b0e57646 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold29-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold29-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold29-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-04.paa new file mode 100644 index 0000000000..c2fde72ac5 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold29-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold29.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold29.fxy new file mode 100644 index 0000000000..bd71731362 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold29.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold30-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-01.paa new file mode 100644 index 0000000000..bd0b967fd1 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold30-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold30-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold30-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-04.paa new file mode 100644 index 0000000000..a9dc6e6754 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold30-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold30.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold30.fxy new file mode 100644 index 0000000000..c1a63513ac Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold30.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold31-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-01.paa new file mode 100644 index 0000000000..e17b12e496 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold31-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold31-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold31-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-04.paa new file mode 100644 index 0000000000..fa2db13ffd Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold31-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold31.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold31.fxy new file mode 100644 index 0000000000..50b6284f32 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold31.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold34-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-01.paa new file mode 100644 index 0000000000..5668351dde Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold34-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold34-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold34-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-04.paa new file mode 100644 index 0000000000..e606e0ff53 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold34-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold34.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold34.fxy new file mode 100644 index 0000000000..eef16b2413 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold34.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold35-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-01.paa new file mode 100644 index 0000000000..c86eafbc81 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold35-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold35-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold35-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-04.paa new file mode 100644 index 0000000000..97ca9bae8b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold35-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold35.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold35.fxy new file mode 100644 index 0000000000..362f8a0ffc Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold35.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold37-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-01.paa new file mode 100644 index 0000000000..8d35477181 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold37-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold37-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold37-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-04.paa new file mode 100644 index 0000000000..fa36d3fa73 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold37-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold37.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold37.fxy new file mode 100644 index 0000000000..2bf38a4044 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold37.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold46-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-01.paa new file mode 100644 index 0000000000..23261136b9 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold46-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold46-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold46-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-04.paa new file mode 100644 index 0000000000..5bf7201a9a Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold46-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold46.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold46.fxy new file mode 100644 index 0000000000..a6bd7ea3ba Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold46.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold6-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-01.paa new file mode 100644 index 0000000000..3d2a0e102b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold6-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold6-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold6-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-04.paa new file mode 100644 index 0000000000..454956d448 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold6-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold6.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold6.fxy new file mode 100644 index 0000000000..6feee35d5b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold6.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold7-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-01.paa new file mode 100644 index 0000000000..392f2c7327 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold7-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold7-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold7-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-04.paa new file mode 100644 index 0000000000..896fb3261b Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold7-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold7.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold7.fxy new file mode 100644 index 0000000000..fa26952d21 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold7.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold8-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-01.paa new file mode 100644 index 0000000000..4138867d7e Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold8-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold8-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold8-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-04.paa new file mode 100644 index 0000000000..8972409d37 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold8-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold8.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold8.fxy new file mode 100644 index 0000000000..9deb881e39 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold8.fxy differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold9-01.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-01.paa new file mode 100644 index 0000000000..f450a93e43 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-01.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold9-02.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-02.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-02.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold9-03.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-03.paa new file mode 100644 index 0000000000..06dd11820d Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-03.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold9-04.paa b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-04.paa new file mode 100644 index 0000000000..e6a66810c8 Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold9-04.paa differ diff --git a/addons/fonts/PixelSplitterBold/PixelSplitterBold9.fxy b/addons/fonts/PixelSplitterBold/PixelSplitterBold9.fxy new file mode 100644 index 0000000000..f9f58bb7aa Binary files /dev/null and b/addons/fonts/PixelSplitterBold/PixelSplitterBold9.fxy differ diff --git a/addons/fonts/config.cpp b/addons/fonts/config.cpp new file mode 100644 index 0000000000..f37dba286c --- /dev/null +++ b/addons/fonts/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_main"}; + author[] = {"jaynus"}; + authorUrl = "https://github.com/jaynus/"; + VERSION_CONFIG; + }; +}; + +#include "CfgFontFamilies.hpp" diff --git a/addons/fonts/script_component.hpp b/addons/fonts/script_component.hpp new file mode 100644 index 0000000000..a8029b7105 --- /dev/null +++ b/addons/fonts/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT fonts +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_FONTS + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_FONTS + #define DEBUG_SETTINGS DEBUG_SETTINGS_FONTS +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/frag/ACE_Settings.hpp b/addons/frag/ACE_Settings.hpp index b160a127f3..5efba45057 100644 --- a/addons/frag/ACE_Settings.hpp +++ b/addons/frag/ACE_Settings.hpp @@ -1,8 +1,33 @@ class ACE_Settings { - class GVAR(enabled) { - displayName = "Frag System"; - description = "Enables the shrapnel system for explosives"; + class GVAR(Enabled) { + displayName = "$STR_ACE_frag_EnableFrag"; + description = "$STR_ACE_frag_EnableFrag_Desc"; typeName = "BOOL"; value = 1; }; + class GVAR(SpallEnabled) { + displayName = "$STR_ACE_frag_EnableSpall"; + description = "$STR_ACE_frag_EnableSpall_Desc"; + typeName = "BOOL"; + value = 0; + }; + class GVAR(maxTrack) { + displayName = "$STR_ACE_frag_MaxTrack"; + description = "$STR_ACE_frag_MaxTrack_Desc"; + typeName = "SCALAR"; + value = 500; + }; + class GVAR(MaxTrackPerFrame) { + displayName = "$STR_ACE_frag_MaxTrackPerFrame"; + description = "$STR_ACE_frag_MaxTrackPerFrame_Desc"; + typeName = "SCALAR"; + value = 50; + }; + + class GVAR(EnableDebugTrace) { + displayName = "$STR_ACE_frag_EnableDebugTrace"; + description = "$STR_ACE_frag_EnableDebugTrace_Desc"; + typeName = "BOOL"; + value = 0; + }; }; diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 19414965b2..41734d2806 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -8,6 +8,7 @@ class CfgAmmo { //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { // GVAR(skip) = 1; //}; + class Bo_GBU12_LGB; class ACE_GBU12 : Bo_GBU12_LGB { GVAR(enabled) = 1; @@ -470,4 +471,6 @@ class CfgAmmo { class ACE_frag_spall_huge: ACE_frag_huge { timeToLive = 0.3; }; + + #include "CfgAmmoReflections.hpp" }; diff --git a/addons/frag/CfgAmmoReflections.hpp b/addons/frag/CfgAmmoReflections.hpp new file mode 100644 index 0000000000..f59d67f89a --- /dev/null +++ b/addons/frag/CfgAmmoReflections.hpp @@ -0,0 +1,2522 @@ +//CfgAmmoReflections.hpp + +#define ACE_EXPLOSION_REFLECTION(range, hit) class ace_explosion_reflection_##range##_##hit : ace_explosion_reflection_base { indirectHitRange = range; indirectHit = hit; dangerRadiusHit = range*3; suppressionRadiusHit = range*2; }; +class ace_explosion_reflection_base : Sh_120mm_HE { + CraterWaterEffects = ""; + CraterEffects = ""; + effectsMissile = ""; + ExplosionEffects = ""; + effectFlare = ""; + class HitEffects { + hitWater = ""; + }; + multiSoundHit[] = {}; + explosionTime = 0.0001; + explosive = 1; + soundFakeFall[] = {}; + typicalSpeed = 0; + model = "\A3\Weapons_F\empty.p3d"; + craterShape = "\A3\weapons_f\empty.p3d"; +}; + +ACE_EXPLOSION_REFLECTION(2,10); +ACE_EXPLOSION_REFLECTION(2,20); +ACE_EXPLOSION_REFLECTION(2,30); +ACE_EXPLOSION_REFLECTION(2,40); +ACE_EXPLOSION_REFLECTION(2,50); +ACE_EXPLOSION_REFLECTION(2,60); +ACE_EXPLOSION_REFLECTION(2,70); +ACE_EXPLOSION_REFLECTION(2,80); +ACE_EXPLOSION_REFLECTION(2,90); +ACE_EXPLOSION_REFLECTION(2,100); +ACE_EXPLOSION_REFLECTION(2,110); +ACE_EXPLOSION_REFLECTION(2,120); +ACE_EXPLOSION_REFLECTION(2,130); +ACE_EXPLOSION_REFLECTION(2,140); +ACE_EXPLOSION_REFLECTION(2,150); +ACE_EXPLOSION_REFLECTION(2,160); +ACE_EXPLOSION_REFLECTION(2,170); +ACE_EXPLOSION_REFLECTION(2,180); +ACE_EXPLOSION_REFLECTION(2,190); +ACE_EXPLOSION_REFLECTION(2,200); +ACE_EXPLOSION_REFLECTION(2,210); +ACE_EXPLOSION_REFLECTION(2,220); +ACE_EXPLOSION_REFLECTION(2,230); +ACE_EXPLOSION_REFLECTION(2,240); +ACE_EXPLOSION_REFLECTION(2,250); +ACE_EXPLOSION_REFLECTION(2,260); +ACE_EXPLOSION_REFLECTION(2,270); +ACE_EXPLOSION_REFLECTION(2,280); +ACE_EXPLOSION_REFLECTION(2,290); +ACE_EXPLOSION_REFLECTION(2,300); +ACE_EXPLOSION_REFLECTION(2,310); +ACE_EXPLOSION_REFLECTION(2,320); +ACE_EXPLOSION_REFLECTION(2,330); +ACE_EXPLOSION_REFLECTION(2,340); +ACE_EXPLOSION_REFLECTION(2,350); +ACE_EXPLOSION_REFLECTION(2,360); +ACE_EXPLOSION_REFLECTION(2,370); +ACE_EXPLOSION_REFLECTION(2,380); +ACE_EXPLOSION_REFLECTION(2,390); +ACE_EXPLOSION_REFLECTION(2,400); +ACE_EXPLOSION_REFLECTION(2,410); +ACE_EXPLOSION_REFLECTION(2,420); +ACE_EXPLOSION_REFLECTION(2,430); +ACE_EXPLOSION_REFLECTION(2,440); +ACE_EXPLOSION_REFLECTION(2,450); +ACE_EXPLOSION_REFLECTION(2,460); +ACE_EXPLOSION_REFLECTION(2,470); +ACE_EXPLOSION_REFLECTION(2,480); +ACE_EXPLOSION_REFLECTION(2,490); +ACE_EXPLOSION_REFLECTION(2,500); +ACE_EXPLOSION_REFLECTION(4,10); +ACE_EXPLOSION_REFLECTION(4,20); +ACE_EXPLOSION_REFLECTION(4,30); +ACE_EXPLOSION_REFLECTION(4,40); +ACE_EXPLOSION_REFLECTION(4,50); +ACE_EXPLOSION_REFLECTION(4,60); +ACE_EXPLOSION_REFLECTION(4,70); +ACE_EXPLOSION_REFLECTION(4,80); +ACE_EXPLOSION_REFLECTION(4,90); +ACE_EXPLOSION_REFLECTION(4,100); +ACE_EXPLOSION_REFLECTION(4,110); +ACE_EXPLOSION_REFLECTION(4,120); +ACE_EXPLOSION_REFLECTION(4,130); +ACE_EXPLOSION_REFLECTION(4,140); +ACE_EXPLOSION_REFLECTION(4,150); +ACE_EXPLOSION_REFLECTION(4,160); +ACE_EXPLOSION_REFLECTION(4,170); +ACE_EXPLOSION_REFLECTION(4,180); +ACE_EXPLOSION_REFLECTION(4,190); +ACE_EXPLOSION_REFLECTION(4,200); +ACE_EXPLOSION_REFLECTION(4,210); +ACE_EXPLOSION_REFLECTION(4,220); +ACE_EXPLOSION_REFLECTION(4,230); +ACE_EXPLOSION_REFLECTION(4,240); +ACE_EXPLOSION_REFLECTION(4,250); +ACE_EXPLOSION_REFLECTION(4,260); +ACE_EXPLOSION_REFLECTION(4,270); +ACE_EXPLOSION_REFLECTION(4,280); +ACE_EXPLOSION_REFLECTION(4,290); +ACE_EXPLOSION_REFLECTION(4,300); +ACE_EXPLOSION_REFLECTION(4,310); +ACE_EXPLOSION_REFLECTION(4,320); +ACE_EXPLOSION_REFLECTION(4,330); +ACE_EXPLOSION_REFLECTION(4,340); +ACE_EXPLOSION_REFLECTION(4,350); +ACE_EXPLOSION_REFLECTION(4,360); +ACE_EXPLOSION_REFLECTION(4,370); +ACE_EXPLOSION_REFLECTION(4,380); +ACE_EXPLOSION_REFLECTION(4,390); +ACE_EXPLOSION_REFLECTION(4,400); +ACE_EXPLOSION_REFLECTION(4,410); +ACE_EXPLOSION_REFLECTION(4,420); +ACE_EXPLOSION_REFLECTION(4,430); +ACE_EXPLOSION_REFLECTION(4,440); +ACE_EXPLOSION_REFLECTION(4,450); +ACE_EXPLOSION_REFLECTION(4,460); +ACE_EXPLOSION_REFLECTION(4,470); +ACE_EXPLOSION_REFLECTION(4,480); +ACE_EXPLOSION_REFLECTION(4,490); +ACE_EXPLOSION_REFLECTION(4,500); +ACE_EXPLOSION_REFLECTION(6,10); +ACE_EXPLOSION_REFLECTION(6,20); +ACE_EXPLOSION_REFLECTION(6,30); +ACE_EXPLOSION_REFLECTION(6,40); +ACE_EXPLOSION_REFLECTION(6,50); +ACE_EXPLOSION_REFLECTION(6,60); +ACE_EXPLOSION_REFLECTION(6,70); +ACE_EXPLOSION_REFLECTION(6,80); +ACE_EXPLOSION_REFLECTION(6,90); +ACE_EXPLOSION_REFLECTION(6,100); +ACE_EXPLOSION_REFLECTION(6,110); +ACE_EXPLOSION_REFLECTION(6,120); +ACE_EXPLOSION_REFLECTION(6,130); +ACE_EXPLOSION_REFLECTION(6,140); +ACE_EXPLOSION_REFLECTION(6,150); +ACE_EXPLOSION_REFLECTION(6,160); +ACE_EXPLOSION_REFLECTION(6,170); +ACE_EXPLOSION_REFLECTION(6,180); +ACE_EXPLOSION_REFLECTION(6,190); +ACE_EXPLOSION_REFLECTION(6,200); +ACE_EXPLOSION_REFLECTION(6,210); +ACE_EXPLOSION_REFLECTION(6,220); +ACE_EXPLOSION_REFLECTION(6,230); +ACE_EXPLOSION_REFLECTION(6,240); +ACE_EXPLOSION_REFLECTION(6,250); +ACE_EXPLOSION_REFLECTION(6,260); +ACE_EXPLOSION_REFLECTION(6,270); +ACE_EXPLOSION_REFLECTION(6,280); +ACE_EXPLOSION_REFLECTION(6,290); +ACE_EXPLOSION_REFLECTION(6,300); +ACE_EXPLOSION_REFLECTION(6,310); +ACE_EXPLOSION_REFLECTION(6,320); +ACE_EXPLOSION_REFLECTION(6,330); +ACE_EXPLOSION_REFLECTION(6,340); +ACE_EXPLOSION_REFLECTION(6,350); +ACE_EXPLOSION_REFLECTION(6,360); +ACE_EXPLOSION_REFLECTION(6,370); +ACE_EXPLOSION_REFLECTION(6,380); +ACE_EXPLOSION_REFLECTION(6,390); +ACE_EXPLOSION_REFLECTION(6,400); +ACE_EXPLOSION_REFLECTION(6,410); +ACE_EXPLOSION_REFLECTION(6,420); +ACE_EXPLOSION_REFLECTION(6,430); +ACE_EXPLOSION_REFLECTION(6,440); +ACE_EXPLOSION_REFLECTION(6,450); +ACE_EXPLOSION_REFLECTION(6,460); +ACE_EXPLOSION_REFLECTION(6,470); +ACE_EXPLOSION_REFLECTION(6,480); +ACE_EXPLOSION_REFLECTION(6,490); +ACE_EXPLOSION_REFLECTION(6,500); +ACE_EXPLOSION_REFLECTION(8,10); +ACE_EXPLOSION_REFLECTION(8,20); +ACE_EXPLOSION_REFLECTION(8,30); +ACE_EXPLOSION_REFLECTION(8,40); +ACE_EXPLOSION_REFLECTION(8,50); +ACE_EXPLOSION_REFLECTION(8,60); +ACE_EXPLOSION_REFLECTION(8,70); +ACE_EXPLOSION_REFLECTION(8,80); +ACE_EXPLOSION_REFLECTION(8,90); +ACE_EXPLOSION_REFLECTION(8,100); +ACE_EXPLOSION_REFLECTION(8,110); +ACE_EXPLOSION_REFLECTION(8,120); +ACE_EXPLOSION_REFLECTION(8,130); +ACE_EXPLOSION_REFLECTION(8,140); +ACE_EXPLOSION_REFLECTION(8,150); +ACE_EXPLOSION_REFLECTION(8,160); +ACE_EXPLOSION_REFLECTION(8,170); +ACE_EXPLOSION_REFLECTION(8,180); +ACE_EXPLOSION_REFLECTION(8,190); +ACE_EXPLOSION_REFLECTION(8,200); +ACE_EXPLOSION_REFLECTION(8,210); +ACE_EXPLOSION_REFLECTION(8,220); +ACE_EXPLOSION_REFLECTION(8,230); +ACE_EXPLOSION_REFLECTION(8,240); +ACE_EXPLOSION_REFLECTION(8,250); +ACE_EXPLOSION_REFLECTION(8,260); +ACE_EXPLOSION_REFLECTION(8,270); +ACE_EXPLOSION_REFLECTION(8,280); +ACE_EXPLOSION_REFLECTION(8,290); +ACE_EXPLOSION_REFLECTION(8,300); +ACE_EXPLOSION_REFLECTION(8,310); +ACE_EXPLOSION_REFLECTION(8,320); +ACE_EXPLOSION_REFLECTION(8,330); +ACE_EXPLOSION_REFLECTION(8,340); +ACE_EXPLOSION_REFLECTION(8,350); +ACE_EXPLOSION_REFLECTION(8,360); +ACE_EXPLOSION_REFLECTION(8,370); +ACE_EXPLOSION_REFLECTION(8,380); +ACE_EXPLOSION_REFLECTION(8,390); +ACE_EXPLOSION_REFLECTION(8,400); +ACE_EXPLOSION_REFLECTION(8,410); +ACE_EXPLOSION_REFLECTION(8,420); +ACE_EXPLOSION_REFLECTION(8,430); +ACE_EXPLOSION_REFLECTION(8,440); +ACE_EXPLOSION_REFLECTION(8,450); +ACE_EXPLOSION_REFLECTION(8,460); +ACE_EXPLOSION_REFLECTION(8,470); +ACE_EXPLOSION_REFLECTION(8,480); +ACE_EXPLOSION_REFLECTION(8,490); +ACE_EXPLOSION_REFLECTION(8,500); +ACE_EXPLOSION_REFLECTION(10,10); +ACE_EXPLOSION_REFLECTION(10,20); +ACE_EXPLOSION_REFLECTION(10,30); +ACE_EXPLOSION_REFLECTION(10,40); +ACE_EXPLOSION_REFLECTION(10,50); +ACE_EXPLOSION_REFLECTION(10,60); +ACE_EXPLOSION_REFLECTION(10,70); +ACE_EXPLOSION_REFLECTION(10,80); +ACE_EXPLOSION_REFLECTION(10,90); +ACE_EXPLOSION_REFLECTION(10,100); +ACE_EXPLOSION_REFLECTION(10,110); +ACE_EXPLOSION_REFLECTION(10,120); +ACE_EXPLOSION_REFLECTION(10,130); +ACE_EXPLOSION_REFLECTION(10,140); +ACE_EXPLOSION_REFLECTION(10,150); +ACE_EXPLOSION_REFLECTION(10,160); +ACE_EXPLOSION_REFLECTION(10,170); +ACE_EXPLOSION_REFLECTION(10,180); +ACE_EXPLOSION_REFLECTION(10,190); +ACE_EXPLOSION_REFLECTION(10,200); +ACE_EXPLOSION_REFLECTION(10,210); +ACE_EXPLOSION_REFLECTION(10,220); +ACE_EXPLOSION_REFLECTION(10,230); +ACE_EXPLOSION_REFLECTION(10,240); +ACE_EXPLOSION_REFLECTION(10,250); +ACE_EXPLOSION_REFLECTION(10,260); +ACE_EXPLOSION_REFLECTION(10,270); +ACE_EXPLOSION_REFLECTION(10,280); +ACE_EXPLOSION_REFLECTION(10,290); +ACE_EXPLOSION_REFLECTION(10,300); +ACE_EXPLOSION_REFLECTION(10,310); +ACE_EXPLOSION_REFLECTION(10,320); +ACE_EXPLOSION_REFLECTION(10,330); +ACE_EXPLOSION_REFLECTION(10,340); +ACE_EXPLOSION_REFLECTION(10,350); +ACE_EXPLOSION_REFLECTION(10,360); +ACE_EXPLOSION_REFLECTION(10,370); +ACE_EXPLOSION_REFLECTION(10,380); +ACE_EXPLOSION_REFLECTION(10,390); +ACE_EXPLOSION_REFLECTION(10,400); +ACE_EXPLOSION_REFLECTION(10,410); +ACE_EXPLOSION_REFLECTION(10,420); +ACE_EXPLOSION_REFLECTION(10,430); +ACE_EXPLOSION_REFLECTION(10,440); +ACE_EXPLOSION_REFLECTION(10,450); +ACE_EXPLOSION_REFLECTION(10,460); +ACE_EXPLOSION_REFLECTION(10,470); +ACE_EXPLOSION_REFLECTION(10,480); +ACE_EXPLOSION_REFLECTION(10,490); +ACE_EXPLOSION_REFLECTION(10,500); +ACE_EXPLOSION_REFLECTION(12,10); +ACE_EXPLOSION_REFLECTION(12,20); +ACE_EXPLOSION_REFLECTION(12,30); +ACE_EXPLOSION_REFLECTION(12,40); +ACE_EXPLOSION_REFLECTION(12,50); +ACE_EXPLOSION_REFLECTION(12,60); +ACE_EXPLOSION_REFLECTION(12,70); +ACE_EXPLOSION_REFLECTION(12,80); +ACE_EXPLOSION_REFLECTION(12,90); +ACE_EXPLOSION_REFLECTION(12,100); +ACE_EXPLOSION_REFLECTION(12,110); +ACE_EXPLOSION_REFLECTION(12,120); +ACE_EXPLOSION_REFLECTION(12,130); +ACE_EXPLOSION_REFLECTION(12,140); +ACE_EXPLOSION_REFLECTION(12,150); +ACE_EXPLOSION_REFLECTION(12,160); +ACE_EXPLOSION_REFLECTION(12,170); +ACE_EXPLOSION_REFLECTION(12,180); +ACE_EXPLOSION_REFLECTION(12,190); +ACE_EXPLOSION_REFLECTION(12,200); +ACE_EXPLOSION_REFLECTION(12,210); +ACE_EXPLOSION_REFLECTION(12,220); +ACE_EXPLOSION_REFLECTION(12,230); +ACE_EXPLOSION_REFLECTION(12,240); +ACE_EXPLOSION_REFLECTION(12,250); +ACE_EXPLOSION_REFLECTION(12,260); +ACE_EXPLOSION_REFLECTION(12,270); +ACE_EXPLOSION_REFLECTION(12,280); +ACE_EXPLOSION_REFLECTION(12,290); +ACE_EXPLOSION_REFLECTION(12,300); +ACE_EXPLOSION_REFLECTION(12,310); +ACE_EXPLOSION_REFLECTION(12,320); +ACE_EXPLOSION_REFLECTION(12,330); +ACE_EXPLOSION_REFLECTION(12,340); +ACE_EXPLOSION_REFLECTION(12,350); +ACE_EXPLOSION_REFLECTION(12,360); +ACE_EXPLOSION_REFLECTION(12,370); +ACE_EXPLOSION_REFLECTION(12,380); +ACE_EXPLOSION_REFLECTION(12,390); +ACE_EXPLOSION_REFLECTION(12,400); +ACE_EXPLOSION_REFLECTION(12,410); +ACE_EXPLOSION_REFLECTION(12,420); +ACE_EXPLOSION_REFLECTION(12,430); +ACE_EXPLOSION_REFLECTION(12,440); +ACE_EXPLOSION_REFLECTION(12,450); +ACE_EXPLOSION_REFLECTION(12,460); +ACE_EXPLOSION_REFLECTION(12,470); +ACE_EXPLOSION_REFLECTION(12,480); +ACE_EXPLOSION_REFLECTION(12,490); +ACE_EXPLOSION_REFLECTION(12,500); +ACE_EXPLOSION_REFLECTION(14,10); +ACE_EXPLOSION_REFLECTION(14,20); +ACE_EXPLOSION_REFLECTION(14,30); +ACE_EXPLOSION_REFLECTION(14,40); +ACE_EXPLOSION_REFLECTION(14,50); +ACE_EXPLOSION_REFLECTION(14,60); +ACE_EXPLOSION_REFLECTION(14,70); +ACE_EXPLOSION_REFLECTION(14,80); +ACE_EXPLOSION_REFLECTION(14,90); +ACE_EXPLOSION_REFLECTION(14,100); +ACE_EXPLOSION_REFLECTION(14,110); +ACE_EXPLOSION_REFLECTION(14,120); +ACE_EXPLOSION_REFLECTION(14,130); +ACE_EXPLOSION_REFLECTION(14,140); +ACE_EXPLOSION_REFLECTION(14,150); +ACE_EXPLOSION_REFLECTION(14,160); +ACE_EXPLOSION_REFLECTION(14,170); +ACE_EXPLOSION_REFLECTION(14,180); +ACE_EXPLOSION_REFLECTION(14,190); +ACE_EXPLOSION_REFLECTION(14,200); +ACE_EXPLOSION_REFLECTION(14,210); +ACE_EXPLOSION_REFLECTION(14,220); +ACE_EXPLOSION_REFLECTION(14,230); +ACE_EXPLOSION_REFLECTION(14,240); +ACE_EXPLOSION_REFLECTION(14,250); +ACE_EXPLOSION_REFLECTION(14,260); +ACE_EXPLOSION_REFLECTION(14,270); +ACE_EXPLOSION_REFLECTION(14,280); +ACE_EXPLOSION_REFLECTION(14,290); +ACE_EXPLOSION_REFLECTION(14,300); +ACE_EXPLOSION_REFLECTION(14,310); +ACE_EXPLOSION_REFLECTION(14,320); +ACE_EXPLOSION_REFLECTION(14,330); +ACE_EXPLOSION_REFLECTION(14,340); +ACE_EXPLOSION_REFLECTION(14,350); +ACE_EXPLOSION_REFLECTION(14,360); +ACE_EXPLOSION_REFLECTION(14,370); +ACE_EXPLOSION_REFLECTION(14,380); +ACE_EXPLOSION_REFLECTION(14,390); +ACE_EXPLOSION_REFLECTION(14,400); +ACE_EXPLOSION_REFLECTION(14,410); +ACE_EXPLOSION_REFLECTION(14,420); +ACE_EXPLOSION_REFLECTION(14,430); +ACE_EXPLOSION_REFLECTION(14,440); +ACE_EXPLOSION_REFLECTION(14,450); +ACE_EXPLOSION_REFLECTION(14,460); +ACE_EXPLOSION_REFLECTION(14,470); +ACE_EXPLOSION_REFLECTION(14,480); +ACE_EXPLOSION_REFLECTION(14,490); +ACE_EXPLOSION_REFLECTION(14,500); +ACE_EXPLOSION_REFLECTION(16,10); +ACE_EXPLOSION_REFLECTION(16,20); +ACE_EXPLOSION_REFLECTION(16,30); +ACE_EXPLOSION_REFLECTION(16,40); +ACE_EXPLOSION_REFLECTION(16,50); +ACE_EXPLOSION_REFLECTION(16,60); +ACE_EXPLOSION_REFLECTION(16,70); +ACE_EXPLOSION_REFLECTION(16,80); +ACE_EXPLOSION_REFLECTION(16,90); +ACE_EXPLOSION_REFLECTION(16,100); +ACE_EXPLOSION_REFLECTION(16,110); +ACE_EXPLOSION_REFLECTION(16,120); +ACE_EXPLOSION_REFLECTION(16,130); +ACE_EXPLOSION_REFLECTION(16,140); +ACE_EXPLOSION_REFLECTION(16,150); +ACE_EXPLOSION_REFLECTION(16,160); +ACE_EXPLOSION_REFLECTION(16,170); +ACE_EXPLOSION_REFLECTION(16,180); +ACE_EXPLOSION_REFLECTION(16,190); +ACE_EXPLOSION_REFLECTION(16,200); +ACE_EXPLOSION_REFLECTION(16,210); +ACE_EXPLOSION_REFLECTION(16,220); +ACE_EXPLOSION_REFLECTION(16,230); +ACE_EXPLOSION_REFLECTION(16,240); +ACE_EXPLOSION_REFLECTION(16,250); +ACE_EXPLOSION_REFLECTION(16,260); +ACE_EXPLOSION_REFLECTION(16,270); +ACE_EXPLOSION_REFLECTION(16,280); +ACE_EXPLOSION_REFLECTION(16,290); +ACE_EXPLOSION_REFLECTION(16,300); +ACE_EXPLOSION_REFLECTION(16,310); +ACE_EXPLOSION_REFLECTION(16,320); +ACE_EXPLOSION_REFLECTION(16,330); +ACE_EXPLOSION_REFLECTION(16,340); +ACE_EXPLOSION_REFLECTION(16,350); +ACE_EXPLOSION_REFLECTION(16,360); +ACE_EXPLOSION_REFLECTION(16,370); +ACE_EXPLOSION_REFLECTION(16,380); +ACE_EXPLOSION_REFLECTION(16,390); +ACE_EXPLOSION_REFLECTION(16,400); +ACE_EXPLOSION_REFLECTION(16,410); +ACE_EXPLOSION_REFLECTION(16,420); +ACE_EXPLOSION_REFLECTION(16,430); +ACE_EXPLOSION_REFLECTION(16,440); +ACE_EXPLOSION_REFLECTION(16,450); +ACE_EXPLOSION_REFLECTION(16,460); +ACE_EXPLOSION_REFLECTION(16,470); +ACE_EXPLOSION_REFLECTION(16,480); +ACE_EXPLOSION_REFLECTION(16,490); +ACE_EXPLOSION_REFLECTION(16,500); +ACE_EXPLOSION_REFLECTION(18,10); +ACE_EXPLOSION_REFLECTION(18,20); +ACE_EXPLOSION_REFLECTION(18,30); +ACE_EXPLOSION_REFLECTION(18,40); +ACE_EXPLOSION_REFLECTION(18,50); +ACE_EXPLOSION_REFLECTION(18,60); +ACE_EXPLOSION_REFLECTION(18,70); +ACE_EXPLOSION_REFLECTION(18,80); +ACE_EXPLOSION_REFLECTION(18,90); +ACE_EXPLOSION_REFLECTION(18,100); +ACE_EXPLOSION_REFLECTION(18,110); +ACE_EXPLOSION_REFLECTION(18,120); +ACE_EXPLOSION_REFLECTION(18,130); +ACE_EXPLOSION_REFLECTION(18,140); +ACE_EXPLOSION_REFLECTION(18,150); +ACE_EXPLOSION_REFLECTION(18,160); +ACE_EXPLOSION_REFLECTION(18,170); +ACE_EXPLOSION_REFLECTION(18,180); +ACE_EXPLOSION_REFLECTION(18,190); +ACE_EXPLOSION_REFLECTION(18,200); +ACE_EXPLOSION_REFLECTION(18,210); +ACE_EXPLOSION_REFLECTION(18,220); +ACE_EXPLOSION_REFLECTION(18,230); +ACE_EXPLOSION_REFLECTION(18,240); +ACE_EXPLOSION_REFLECTION(18,250); +ACE_EXPLOSION_REFLECTION(18,260); +ACE_EXPLOSION_REFLECTION(18,270); +ACE_EXPLOSION_REFLECTION(18,280); +ACE_EXPLOSION_REFLECTION(18,290); +ACE_EXPLOSION_REFLECTION(18,300); +ACE_EXPLOSION_REFLECTION(18,310); +ACE_EXPLOSION_REFLECTION(18,320); +ACE_EXPLOSION_REFLECTION(18,330); +ACE_EXPLOSION_REFLECTION(18,340); +ACE_EXPLOSION_REFLECTION(18,350); +ACE_EXPLOSION_REFLECTION(18,360); +ACE_EXPLOSION_REFLECTION(18,370); +ACE_EXPLOSION_REFLECTION(18,380); +ACE_EXPLOSION_REFLECTION(18,390); +ACE_EXPLOSION_REFLECTION(18,400); +ACE_EXPLOSION_REFLECTION(18,410); +ACE_EXPLOSION_REFLECTION(18,420); +ACE_EXPLOSION_REFLECTION(18,430); +ACE_EXPLOSION_REFLECTION(18,440); +ACE_EXPLOSION_REFLECTION(18,450); +ACE_EXPLOSION_REFLECTION(18,460); +ACE_EXPLOSION_REFLECTION(18,470); +ACE_EXPLOSION_REFLECTION(18,480); +ACE_EXPLOSION_REFLECTION(18,490); +ACE_EXPLOSION_REFLECTION(18,500); +ACE_EXPLOSION_REFLECTION(20,10); +ACE_EXPLOSION_REFLECTION(20,20); +ACE_EXPLOSION_REFLECTION(20,30); +ACE_EXPLOSION_REFLECTION(20,40); +ACE_EXPLOSION_REFLECTION(20,50); +ACE_EXPLOSION_REFLECTION(20,60); +ACE_EXPLOSION_REFLECTION(20,70); +ACE_EXPLOSION_REFLECTION(20,80); +ACE_EXPLOSION_REFLECTION(20,90); +ACE_EXPLOSION_REFLECTION(20,100); +ACE_EXPLOSION_REFLECTION(20,110); +ACE_EXPLOSION_REFLECTION(20,120); +ACE_EXPLOSION_REFLECTION(20,130); +ACE_EXPLOSION_REFLECTION(20,140); +ACE_EXPLOSION_REFLECTION(20,150); +ACE_EXPLOSION_REFLECTION(20,160); +ACE_EXPLOSION_REFLECTION(20,170); +ACE_EXPLOSION_REFLECTION(20,180); +ACE_EXPLOSION_REFLECTION(20,190); +ACE_EXPLOSION_REFLECTION(20,200); +ACE_EXPLOSION_REFLECTION(20,210); +ACE_EXPLOSION_REFLECTION(20,220); +ACE_EXPLOSION_REFLECTION(20,230); +ACE_EXPLOSION_REFLECTION(20,240); +ACE_EXPLOSION_REFLECTION(20,250); +ACE_EXPLOSION_REFLECTION(20,260); +ACE_EXPLOSION_REFLECTION(20,270); +ACE_EXPLOSION_REFLECTION(20,280); +ACE_EXPLOSION_REFLECTION(20,290); +ACE_EXPLOSION_REFLECTION(20,300); +ACE_EXPLOSION_REFLECTION(20,310); +ACE_EXPLOSION_REFLECTION(20,320); +ACE_EXPLOSION_REFLECTION(20,330); +ACE_EXPLOSION_REFLECTION(20,340); +ACE_EXPLOSION_REFLECTION(20,350); +ACE_EXPLOSION_REFLECTION(20,360); +ACE_EXPLOSION_REFLECTION(20,370); +ACE_EXPLOSION_REFLECTION(20,380); +ACE_EXPLOSION_REFLECTION(20,390); +ACE_EXPLOSION_REFLECTION(20,400); +ACE_EXPLOSION_REFLECTION(20,410); +ACE_EXPLOSION_REFLECTION(20,420); +ACE_EXPLOSION_REFLECTION(20,430); +ACE_EXPLOSION_REFLECTION(20,440); +ACE_EXPLOSION_REFLECTION(20,450); +ACE_EXPLOSION_REFLECTION(20,460); +ACE_EXPLOSION_REFLECTION(20,470); +ACE_EXPLOSION_REFLECTION(20,480); +ACE_EXPLOSION_REFLECTION(20,490); +ACE_EXPLOSION_REFLECTION(20,500); +ACE_EXPLOSION_REFLECTION(22,10); +ACE_EXPLOSION_REFLECTION(22,20); +ACE_EXPLOSION_REFLECTION(22,30); +ACE_EXPLOSION_REFLECTION(22,40); +ACE_EXPLOSION_REFLECTION(22,50); +ACE_EXPLOSION_REFLECTION(22,60); +ACE_EXPLOSION_REFLECTION(22,70); +ACE_EXPLOSION_REFLECTION(22,80); +ACE_EXPLOSION_REFLECTION(22,90); +ACE_EXPLOSION_REFLECTION(22,100); +ACE_EXPLOSION_REFLECTION(22,110); +ACE_EXPLOSION_REFLECTION(22,120); +ACE_EXPLOSION_REFLECTION(22,130); +ACE_EXPLOSION_REFLECTION(22,140); +ACE_EXPLOSION_REFLECTION(22,150); +ACE_EXPLOSION_REFLECTION(22,160); +ACE_EXPLOSION_REFLECTION(22,170); +ACE_EXPLOSION_REFLECTION(22,180); +ACE_EXPLOSION_REFLECTION(22,190); +ACE_EXPLOSION_REFLECTION(22,200); +ACE_EXPLOSION_REFLECTION(22,210); +ACE_EXPLOSION_REFLECTION(22,220); +ACE_EXPLOSION_REFLECTION(22,230); +ACE_EXPLOSION_REFLECTION(22,240); +ACE_EXPLOSION_REFLECTION(22,250); +ACE_EXPLOSION_REFLECTION(22,260); +ACE_EXPLOSION_REFLECTION(22,270); +ACE_EXPLOSION_REFLECTION(22,280); +ACE_EXPLOSION_REFLECTION(22,290); +ACE_EXPLOSION_REFLECTION(22,300); +ACE_EXPLOSION_REFLECTION(22,310); +ACE_EXPLOSION_REFLECTION(22,320); +ACE_EXPLOSION_REFLECTION(22,330); +ACE_EXPLOSION_REFLECTION(22,340); +ACE_EXPLOSION_REFLECTION(22,350); +ACE_EXPLOSION_REFLECTION(22,360); +ACE_EXPLOSION_REFLECTION(22,370); +ACE_EXPLOSION_REFLECTION(22,380); +ACE_EXPLOSION_REFLECTION(22,390); +ACE_EXPLOSION_REFLECTION(22,400); +ACE_EXPLOSION_REFLECTION(22,410); +ACE_EXPLOSION_REFLECTION(22,420); +ACE_EXPLOSION_REFLECTION(22,430); +ACE_EXPLOSION_REFLECTION(22,440); +ACE_EXPLOSION_REFLECTION(22,450); +ACE_EXPLOSION_REFLECTION(22,460); +ACE_EXPLOSION_REFLECTION(22,470); +ACE_EXPLOSION_REFLECTION(22,480); +ACE_EXPLOSION_REFLECTION(22,490); +ACE_EXPLOSION_REFLECTION(22,500); +ACE_EXPLOSION_REFLECTION(24,10); +ACE_EXPLOSION_REFLECTION(24,20); +ACE_EXPLOSION_REFLECTION(24,30); +ACE_EXPLOSION_REFLECTION(24,40); +ACE_EXPLOSION_REFLECTION(24,50); +ACE_EXPLOSION_REFLECTION(24,60); +ACE_EXPLOSION_REFLECTION(24,70); +ACE_EXPLOSION_REFLECTION(24,80); +ACE_EXPLOSION_REFLECTION(24,90); +ACE_EXPLOSION_REFLECTION(24,100); +ACE_EXPLOSION_REFLECTION(24,110); +ACE_EXPLOSION_REFLECTION(24,120); +ACE_EXPLOSION_REFLECTION(24,130); +ACE_EXPLOSION_REFLECTION(24,140); +ACE_EXPLOSION_REFLECTION(24,150); +ACE_EXPLOSION_REFLECTION(24,160); +ACE_EXPLOSION_REFLECTION(24,170); +ACE_EXPLOSION_REFLECTION(24,180); +ACE_EXPLOSION_REFLECTION(24,190); +ACE_EXPLOSION_REFLECTION(24,200); +ACE_EXPLOSION_REFLECTION(24,210); +ACE_EXPLOSION_REFLECTION(24,220); +ACE_EXPLOSION_REFLECTION(24,230); +ACE_EXPLOSION_REFLECTION(24,240); +ACE_EXPLOSION_REFLECTION(24,250); +ACE_EXPLOSION_REFLECTION(24,260); +ACE_EXPLOSION_REFLECTION(24,270); +ACE_EXPLOSION_REFLECTION(24,280); +ACE_EXPLOSION_REFLECTION(24,290); +ACE_EXPLOSION_REFLECTION(24,300); +ACE_EXPLOSION_REFLECTION(24,310); +ACE_EXPLOSION_REFLECTION(24,320); +ACE_EXPLOSION_REFLECTION(24,330); +ACE_EXPLOSION_REFLECTION(24,340); +ACE_EXPLOSION_REFLECTION(24,350); +ACE_EXPLOSION_REFLECTION(24,360); +ACE_EXPLOSION_REFLECTION(24,370); +ACE_EXPLOSION_REFLECTION(24,380); +ACE_EXPLOSION_REFLECTION(24,390); +ACE_EXPLOSION_REFLECTION(24,400); +ACE_EXPLOSION_REFLECTION(24,410); +ACE_EXPLOSION_REFLECTION(24,420); +ACE_EXPLOSION_REFLECTION(24,430); +ACE_EXPLOSION_REFLECTION(24,440); +ACE_EXPLOSION_REFLECTION(24,450); +ACE_EXPLOSION_REFLECTION(24,460); +ACE_EXPLOSION_REFLECTION(24,470); +ACE_EXPLOSION_REFLECTION(24,480); +ACE_EXPLOSION_REFLECTION(24,490); +ACE_EXPLOSION_REFLECTION(24,500); +ACE_EXPLOSION_REFLECTION(26,10); +ACE_EXPLOSION_REFLECTION(26,20); +ACE_EXPLOSION_REFLECTION(26,30); +ACE_EXPLOSION_REFLECTION(26,40); +ACE_EXPLOSION_REFLECTION(26,50); +ACE_EXPLOSION_REFLECTION(26,60); +ACE_EXPLOSION_REFLECTION(26,70); +ACE_EXPLOSION_REFLECTION(26,80); +ACE_EXPLOSION_REFLECTION(26,90); +ACE_EXPLOSION_REFLECTION(26,100); +ACE_EXPLOSION_REFLECTION(26,110); +ACE_EXPLOSION_REFLECTION(26,120); +ACE_EXPLOSION_REFLECTION(26,130); +ACE_EXPLOSION_REFLECTION(26,140); +ACE_EXPLOSION_REFLECTION(26,150); +ACE_EXPLOSION_REFLECTION(26,160); +ACE_EXPLOSION_REFLECTION(26,170); +ACE_EXPLOSION_REFLECTION(26,180); +ACE_EXPLOSION_REFLECTION(26,190); +ACE_EXPLOSION_REFLECTION(26,200); +ACE_EXPLOSION_REFLECTION(26,210); +ACE_EXPLOSION_REFLECTION(26,220); +ACE_EXPLOSION_REFLECTION(26,230); +ACE_EXPLOSION_REFLECTION(26,240); +ACE_EXPLOSION_REFLECTION(26,250); +ACE_EXPLOSION_REFLECTION(26,260); +ACE_EXPLOSION_REFLECTION(26,270); +ACE_EXPLOSION_REFLECTION(26,280); +ACE_EXPLOSION_REFLECTION(26,290); +ACE_EXPLOSION_REFLECTION(26,300); +ACE_EXPLOSION_REFLECTION(26,310); +ACE_EXPLOSION_REFLECTION(26,320); +ACE_EXPLOSION_REFLECTION(26,330); +ACE_EXPLOSION_REFLECTION(26,340); +ACE_EXPLOSION_REFLECTION(26,350); +ACE_EXPLOSION_REFLECTION(26,360); +ACE_EXPLOSION_REFLECTION(26,370); +ACE_EXPLOSION_REFLECTION(26,380); +ACE_EXPLOSION_REFLECTION(26,390); +ACE_EXPLOSION_REFLECTION(26,400); +ACE_EXPLOSION_REFLECTION(26,410); +ACE_EXPLOSION_REFLECTION(26,420); +ACE_EXPLOSION_REFLECTION(26,430); +ACE_EXPLOSION_REFLECTION(26,440); +ACE_EXPLOSION_REFLECTION(26,450); +ACE_EXPLOSION_REFLECTION(26,460); +ACE_EXPLOSION_REFLECTION(26,470); +ACE_EXPLOSION_REFLECTION(26,480); +ACE_EXPLOSION_REFLECTION(26,490); +ACE_EXPLOSION_REFLECTION(26,500); +ACE_EXPLOSION_REFLECTION(28,10); +ACE_EXPLOSION_REFLECTION(28,20); +ACE_EXPLOSION_REFLECTION(28,30); +ACE_EXPLOSION_REFLECTION(28,40); +ACE_EXPLOSION_REFLECTION(28,50); +ACE_EXPLOSION_REFLECTION(28,60); +ACE_EXPLOSION_REFLECTION(28,70); +ACE_EXPLOSION_REFLECTION(28,80); +ACE_EXPLOSION_REFLECTION(28,90); +ACE_EXPLOSION_REFLECTION(28,100); +ACE_EXPLOSION_REFLECTION(28,110); +ACE_EXPLOSION_REFLECTION(28,120); +ACE_EXPLOSION_REFLECTION(28,130); +ACE_EXPLOSION_REFLECTION(28,140); +ACE_EXPLOSION_REFLECTION(28,150); +ACE_EXPLOSION_REFLECTION(28,160); +ACE_EXPLOSION_REFLECTION(28,170); +ACE_EXPLOSION_REFLECTION(28,180); +ACE_EXPLOSION_REFLECTION(28,190); +ACE_EXPLOSION_REFLECTION(28,200); +ACE_EXPLOSION_REFLECTION(28,210); +ACE_EXPLOSION_REFLECTION(28,220); +ACE_EXPLOSION_REFLECTION(28,230); +ACE_EXPLOSION_REFLECTION(28,240); +ACE_EXPLOSION_REFLECTION(28,250); +ACE_EXPLOSION_REFLECTION(28,260); +ACE_EXPLOSION_REFLECTION(28,270); +ACE_EXPLOSION_REFLECTION(28,280); +ACE_EXPLOSION_REFLECTION(28,290); +ACE_EXPLOSION_REFLECTION(28,300); +ACE_EXPLOSION_REFLECTION(28,310); +ACE_EXPLOSION_REFLECTION(28,320); +ACE_EXPLOSION_REFLECTION(28,330); +ACE_EXPLOSION_REFLECTION(28,340); +ACE_EXPLOSION_REFLECTION(28,350); +ACE_EXPLOSION_REFLECTION(28,360); +ACE_EXPLOSION_REFLECTION(28,370); +ACE_EXPLOSION_REFLECTION(28,380); +ACE_EXPLOSION_REFLECTION(28,390); +ACE_EXPLOSION_REFLECTION(28,400); +ACE_EXPLOSION_REFLECTION(28,410); +ACE_EXPLOSION_REFLECTION(28,420); +ACE_EXPLOSION_REFLECTION(28,430); +ACE_EXPLOSION_REFLECTION(28,440); +ACE_EXPLOSION_REFLECTION(28,450); +ACE_EXPLOSION_REFLECTION(28,460); +ACE_EXPLOSION_REFLECTION(28,470); +ACE_EXPLOSION_REFLECTION(28,480); +ACE_EXPLOSION_REFLECTION(28,490); +ACE_EXPLOSION_REFLECTION(28,500); +ACE_EXPLOSION_REFLECTION(30,10); +ACE_EXPLOSION_REFLECTION(30,20); +ACE_EXPLOSION_REFLECTION(30,30); +ACE_EXPLOSION_REFLECTION(30,40); +ACE_EXPLOSION_REFLECTION(30,50); +ACE_EXPLOSION_REFLECTION(30,60); +ACE_EXPLOSION_REFLECTION(30,70); +ACE_EXPLOSION_REFLECTION(30,80); +ACE_EXPLOSION_REFLECTION(30,90); +ACE_EXPLOSION_REFLECTION(30,100); +ACE_EXPLOSION_REFLECTION(30,110); +ACE_EXPLOSION_REFLECTION(30,120); +ACE_EXPLOSION_REFLECTION(30,130); +ACE_EXPLOSION_REFLECTION(30,140); +ACE_EXPLOSION_REFLECTION(30,150); +ACE_EXPLOSION_REFLECTION(30,160); +ACE_EXPLOSION_REFLECTION(30,170); +ACE_EXPLOSION_REFLECTION(30,180); +ACE_EXPLOSION_REFLECTION(30,190); +ACE_EXPLOSION_REFLECTION(30,200); +ACE_EXPLOSION_REFLECTION(30,210); +ACE_EXPLOSION_REFLECTION(30,220); +ACE_EXPLOSION_REFLECTION(30,230); +ACE_EXPLOSION_REFLECTION(30,240); +ACE_EXPLOSION_REFLECTION(30,250); +ACE_EXPLOSION_REFLECTION(30,260); +ACE_EXPLOSION_REFLECTION(30,270); +ACE_EXPLOSION_REFLECTION(30,280); +ACE_EXPLOSION_REFLECTION(30,290); +ACE_EXPLOSION_REFLECTION(30,300); +ACE_EXPLOSION_REFLECTION(30,310); +ACE_EXPLOSION_REFLECTION(30,320); +ACE_EXPLOSION_REFLECTION(30,330); +ACE_EXPLOSION_REFLECTION(30,340); +ACE_EXPLOSION_REFLECTION(30,350); +ACE_EXPLOSION_REFLECTION(30,360); +ACE_EXPLOSION_REFLECTION(30,370); +ACE_EXPLOSION_REFLECTION(30,380); +ACE_EXPLOSION_REFLECTION(30,390); +ACE_EXPLOSION_REFLECTION(30,400); +ACE_EXPLOSION_REFLECTION(30,410); +ACE_EXPLOSION_REFLECTION(30,420); +ACE_EXPLOSION_REFLECTION(30,430); +ACE_EXPLOSION_REFLECTION(30,440); +ACE_EXPLOSION_REFLECTION(30,450); +ACE_EXPLOSION_REFLECTION(30,460); +ACE_EXPLOSION_REFLECTION(30,470); +ACE_EXPLOSION_REFLECTION(30,480); +ACE_EXPLOSION_REFLECTION(30,490); +ACE_EXPLOSION_REFLECTION(30,500); +ACE_EXPLOSION_REFLECTION(32,10); +ACE_EXPLOSION_REFLECTION(32,20); +ACE_EXPLOSION_REFLECTION(32,30); +ACE_EXPLOSION_REFLECTION(32,40); +ACE_EXPLOSION_REFLECTION(32,50); +ACE_EXPLOSION_REFLECTION(32,60); +ACE_EXPLOSION_REFLECTION(32,70); +ACE_EXPLOSION_REFLECTION(32,80); +ACE_EXPLOSION_REFLECTION(32,90); +ACE_EXPLOSION_REFLECTION(32,100); +ACE_EXPLOSION_REFLECTION(32,110); +ACE_EXPLOSION_REFLECTION(32,120); +ACE_EXPLOSION_REFLECTION(32,130); +ACE_EXPLOSION_REFLECTION(32,140); +ACE_EXPLOSION_REFLECTION(32,150); +ACE_EXPLOSION_REFLECTION(32,160); +ACE_EXPLOSION_REFLECTION(32,170); +ACE_EXPLOSION_REFLECTION(32,180); +ACE_EXPLOSION_REFLECTION(32,190); +ACE_EXPLOSION_REFLECTION(32,200); +ACE_EXPLOSION_REFLECTION(32,210); +ACE_EXPLOSION_REFLECTION(32,220); +ACE_EXPLOSION_REFLECTION(32,230); +ACE_EXPLOSION_REFLECTION(32,240); +ACE_EXPLOSION_REFLECTION(32,250); +ACE_EXPLOSION_REFLECTION(32,260); +ACE_EXPLOSION_REFLECTION(32,270); +ACE_EXPLOSION_REFLECTION(32,280); +ACE_EXPLOSION_REFLECTION(32,290); +ACE_EXPLOSION_REFLECTION(32,300); +ACE_EXPLOSION_REFLECTION(32,310); +ACE_EXPLOSION_REFLECTION(32,320); +ACE_EXPLOSION_REFLECTION(32,330); +ACE_EXPLOSION_REFLECTION(32,340); +ACE_EXPLOSION_REFLECTION(32,350); +ACE_EXPLOSION_REFLECTION(32,360); +ACE_EXPLOSION_REFLECTION(32,370); +ACE_EXPLOSION_REFLECTION(32,380); +ACE_EXPLOSION_REFLECTION(32,390); +ACE_EXPLOSION_REFLECTION(32,400); +ACE_EXPLOSION_REFLECTION(32,410); +ACE_EXPLOSION_REFLECTION(32,420); +ACE_EXPLOSION_REFLECTION(32,430); +ACE_EXPLOSION_REFLECTION(32,440); +ACE_EXPLOSION_REFLECTION(32,450); +ACE_EXPLOSION_REFLECTION(32,460); +ACE_EXPLOSION_REFLECTION(32,470); +ACE_EXPLOSION_REFLECTION(32,480); +ACE_EXPLOSION_REFLECTION(32,490); +ACE_EXPLOSION_REFLECTION(32,500); +ACE_EXPLOSION_REFLECTION(34,10); +ACE_EXPLOSION_REFLECTION(34,20); +ACE_EXPLOSION_REFLECTION(34,30); +ACE_EXPLOSION_REFLECTION(34,40); +ACE_EXPLOSION_REFLECTION(34,50); +ACE_EXPLOSION_REFLECTION(34,60); +ACE_EXPLOSION_REFLECTION(34,70); +ACE_EXPLOSION_REFLECTION(34,80); +ACE_EXPLOSION_REFLECTION(34,90); +ACE_EXPLOSION_REFLECTION(34,100); +ACE_EXPLOSION_REFLECTION(34,110); +ACE_EXPLOSION_REFLECTION(34,120); +ACE_EXPLOSION_REFLECTION(34,130); +ACE_EXPLOSION_REFLECTION(34,140); +ACE_EXPLOSION_REFLECTION(34,150); +ACE_EXPLOSION_REFLECTION(34,160); +ACE_EXPLOSION_REFLECTION(34,170); +ACE_EXPLOSION_REFLECTION(34,180); +ACE_EXPLOSION_REFLECTION(34,190); +ACE_EXPLOSION_REFLECTION(34,200); +ACE_EXPLOSION_REFLECTION(34,210); +ACE_EXPLOSION_REFLECTION(34,220); +ACE_EXPLOSION_REFLECTION(34,230); +ACE_EXPLOSION_REFLECTION(34,240); +ACE_EXPLOSION_REFLECTION(34,250); +ACE_EXPLOSION_REFLECTION(34,260); +ACE_EXPLOSION_REFLECTION(34,270); +ACE_EXPLOSION_REFLECTION(34,280); +ACE_EXPLOSION_REFLECTION(34,290); +ACE_EXPLOSION_REFLECTION(34,300); +ACE_EXPLOSION_REFLECTION(34,310); +ACE_EXPLOSION_REFLECTION(34,320); +ACE_EXPLOSION_REFLECTION(34,330); +ACE_EXPLOSION_REFLECTION(34,340); +ACE_EXPLOSION_REFLECTION(34,350); +ACE_EXPLOSION_REFLECTION(34,360); +ACE_EXPLOSION_REFLECTION(34,370); +ACE_EXPLOSION_REFLECTION(34,380); +ACE_EXPLOSION_REFLECTION(34,390); +ACE_EXPLOSION_REFLECTION(34,400); +ACE_EXPLOSION_REFLECTION(34,410); +ACE_EXPLOSION_REFLECTION(34,420); +ACE_EXPLOSION_REFLECTION(34,430); +ACE_EXPLOSION_REFLECTION(34,440); +ACE_EXPLOSION_REFLECTION(34,450); +ACE_EXPLOSION_REFLECTION(34,460); +ACE_EXPLOSION_REFLECTION(34,470); +ACE_EXPLOSION_REFLECTION(34,480); +ACE_EXPLOSION_REFLECTION(34,490); +ACE_EXPLOSION_REFLECTION(34,500); +ACE_EXPLOSION_REFLECTION(36,10); +ACE_EXPLOSION_REFLECTION(36,20); +ACE_EXPLOSION_REFLECTION(36,30); +ACE_EXPLOSION_REFLECTION(36,40); +ACE_EXPLOSION_REFLECTION(36,50); +ACE_EXPLOSION_REFLECTION(36,60); +ACE_EXPLOSION_REFLECTION(36,70); +ACE_EXPLOSION_REFLECTION(36,80); +ACE_EXPLOSION_REFLECTION(36,90); +ACE_EXPLOSION_REFLECTION(36,100); +ACE_EXPLOSION_REFLECTION(36,110); +ACE_EXPLOSION_REFLECTION(36,120); +ACE_EXPLOSION_REFLECTION(36,130); +ACE_EXPLOSION_REFLECTION(36,140); +ACE_EXPLOSION_REFLECTION(36,150); +ACE_EXPLOSION_REFLECTION(36,160); +ACE_EXPLOSION_REFLECTION(36,170); +ACE_EXPLOSION_REFLECTION(36,180); +ACE_EXPLOSION_REFLECTION(36,190); +ACE_EXPLOSION_REFLECTION(36,200); +ACE_EXPLOSION_REFLECTION(36,210); +ACE_EXPLOSION_REFLECTION(36,220); +ACE_EXPLOSION_REFLECTION(36,230); +ACE_EXPLOSION_REFLECTION(36,240); +ACE_EXPLOSION_REFLECTION(36,250); +ACE_EXPLOSION_REFLECTION(36,260); +ACE_EXPLOSION_REFLECTION(36,270); +ACE_EXPLOSION_REFLECTION(36,280); +ACE_EXPLOSION_REFLECTION(36,290); +ACE_EXPLOSION_REFLECTION(36,300); +ACE_EXPLOSION_REFLECTION(36,310); +ACE_EXPLOSION_REFLECTION(36,320); +ACE_EXPLOSION_REFLECTION(36,330); +ACE_EXPLOSION_REFLECTION(36,340); +ACE_EXPLOSION_REFLECTION(36,350); +ACE_EXPLOSION_REFLECTION(36,360); +ACE_EXPLOSION_REFLECTION(36,370); +ACE_EXPLOSION_REFLECTION(36,380); +ACE_EXPLOSION_REFLECTION(36,390); +ACE_EXPLOSION_REFLECTION(36,400); +ACE_EXPLOSION_REFLECTION(36,410); +ACE_EXPLOSION_REFLECTION(36,420); +ACE_EXPLOSION_REFLECTION(36,430); +ACE_EXPLOSION_REFLECTION(36,440); +ACE_EXPLOSION_REFLECTION(36,450); +ACE_EXPLOSION_REFLECTION(36,460); +ACE_EXPLOSION_REFLECTION(36,470); +ACE_EXPLOSION_REFLECTION(36,480); +ACE_EXPLOSION_REFLECTION(36,490); +ACE_EXPLOSION_REFLECTION(36,500); +ACE_EXPLOSION_REFLECTION(38,10); +ACE_EXPLOSION_REFLECTION(38,20); +ACE_EXPLOSION_REFLECTION(38,30); +ACE_EXPLOSION_REFLECTION(38,40); +ACE_EXPLOSION_REFLECTION(38,50); +ACE_EXPLOSION_REFLECTION(38,60); +ACE_EXPLOSION_REFLECTION(38,70); +ACE_EXPLOSION_REFLECTION(38,80); +ACE_EXPLOSION_REFLECTION(38,90); +ACE_EXPLOSION_REFLECTION(38,100); +ACE_EXPLOSION_REFLECTION(38,110); +ACE_EXPLOSION_REFLECTION(38,120); +ACE_EXPLOSION_REFLECTION(38,130); +ACE_EXPLOSION_REFLECTION(38,140); +ACE_EXPLOSION_REFLECTION(38,150); +ACE_EXPLOSION_REFLECTION(38,160); +ACE_EXPLOSION_REFLECTION(38,170); +ACE_EXPLOSION_REFLECTION(38,180); +ACE_EXPLOSION_REFLECTION(38,190); +ACE_EXPLOSION_REFLECTION(38,200); +ACE_EXPLOSION_REFLECTION(38,210); +ACE_EXPLOSION_REFLECTION(38,220); +ACE_EXPLOSION_REFLECTION(38,230); +ACE_EXPLOSION_REFLECTION(38,240); +ACE_EXPLOSION_REFLECTION(38,250); +ACE_EXPLOSION_REFLECTION(38,260); +ACE_EXPLOSION_REFLECTION(38,270); +ACE_EXPLOSION_REFLECTION(38,280); +ACE_EXPLOSION_REFLECTION(38,290); +ACE_EXPLOSION_REFLECTION(38,300); +ACE_EXPLOSION_REFLECTION(38,310); +ACE_EXPLOSION_REFLECTION(38,320); +ACE_EXPLOSION_REFLECTION(38,330); +ACE_EXPLOSION_REFLECTION(38,340); +ACE_EXPLOSION_REFLECTION(38,350); +ACE_EXPLOSION_REFLECTION(38,360); +ACE_EXPLOSION_REFLECTION(38,370); +ACE_EXPLOSION_REFLECTION(38,380); +ACE_EXPLOSION_REFLECTION(38,390); +ACE_EXPLOSION_REFLECTION(38,400); +ACE_EXPLOSION_REFLECTION(38,410); +ACE_EXPLOSION_REFLECTION(38,420); +ACE_EXPLOSION_REFLECTION(38,430); +ACE_EXPLOSION_REFLECTION(38,440); +ACE_EXPLOSION_REFLECTION(38,450); +ACE_EXPLOSION_REFLECTION(38,460); +ACE_EXPLOSION_REFLECTION(38,470); +ACE_EXPLOSION_REFLECTION(38,480); +ACE_EXPLOSION_REFLECTION(38,490); +ACE_EXPLOSION_REFLECTION(38,500); +ACE_EXPLOSION_REFLECTION(40,10); +ACE_EXPLOSION_REFLECTION(40,20); +ACE_EXPLOSION_REFLECTION(40,30); +ACE_EXPLOSION_REFLECTION(40,40); +ACE_EXPLOSION_REFLECTION(40,50); +ACE_EXPLOSION_REFLECTION(40,60); +ACE_EXPLOSION_REFLECTION(40,70); +ACE_EXPLOSION_REFLECTION(40,80); +ACE_EXPLOSION_REFLECTION(40,90); +ACE_EXPLOSION_REFLECTION(40,100); +ACE_EXPLOSION_REFLECTION(40,110); +ACE_EXPLOSION_REFLECTION(40,120); +ACE_EXPLOSION_REFLECTION(40,130); +ACE_EXPLOSION_REFLECTION(40,140); +ACE_EXPLOSION_REFLECTION(40,150); +ACE_EXPLOSION_REFLECTION(40,160); +ACE_EXPLOSION_REFLECTION(40,170); +ACE_EXPLOSION_REFLECTION(40,180); +ACE_EXPLOSION_REFLECTION(40,190); +ACE_EXPLOSION_REFLECTION(40,200); +ACE_EXPLOSION_REFLECTION(40,210); +ACE_EXPLOSION_REFLECTION(40,220); +ACE_EXPLOSION_REFLECTION(40,230); +ACE_EXPLOSION_REFLECTION(40,240); +ACE_EXPLOSION_REFLECTION(40,250); +ACE_EXPLOSION_REFLECTION(40,260); +ACE_EXPLOSION_REFLECTION(40,270); +ACE_EXPLOSION_REFLECTION(40,280); +ACE_EXPLOSION_REFLECTION(40,290); +ACE_EXPLOSION_REFLECTION(40,300); +ACE_EXPLOSION_REFLECTION(40,310); +ACE_EXPLOSION_REFLECTION(40,320); +ACE_EXPLOSION_REFLECTION(40,330); +ACE_EXPLOSION_REFLECTION(40,340); +ACE_EXPLOSION_REFLECTION(40,350); +ACE_EXPLOSION_REFLECTION(40,360); +ACE_EXPLOSION_REFLECTION(40,370); +ACE_EXPLOSION_REFLECTION(40,380); +ACE_EXPLOSION_REFLECTION(40,390); +ACE_EXPLOSION_REFLECTION(40,400); +ACE_EXPLOSION_REFLECTION(40,410); +ACE_EXPLOSION_REFLECTION(40,420); +ACE_EXPLOSION_REFLECTION(40,430); +ACE_EXPLOSION_REFLECTION(40,440); +ACE_EXPLOSION_REFLECTION(40,450); +ACE_EXPLOSION_REFLECTION(40,460); +ACE_EXPLOSION_REFLECTION(40,470); +ACE_EXPLOSION_REFLECTION(40,480); +ACE_EXPLOSION_REFLECTION(40,490); +ACE_EXPLOSION_REFLECTION(40,500); +ACE_EXPLOSION_REFLECTION(42,10); +ACE_EXPLOSION_REFLECTION(42,20); +ACE_EXPLOSION_REFLECTION(42,30); +ACE_EXPLOSION_REFLECTION(42,40); +ACE_EXPLOSION_REFLECTION(42,50); +ACE_EXPLOSION_REFLECTION(42,60); +ACE_EXPLOSION_REFLECTION(42,70); +ACE_EXPLOSION_REFLECTION(42,80); +ACE_EXPLOSION_REFLECTION(42,90); +ACE_EXPLOSION_REFLECTION(42,100); +ACE_EXPLOSION_REFLECTION(42,110); +ACE_EXPLOSION_REFLECTION(42,120); +ACE_EXPLOSION_REFLECTION(42,130); +ACE_EXPLOSION_REFLECTION(42,140); +ACE_EXPLOSION_REFLECTION(42,150); +ACE_EXPLOSION_REFLECTION(42,160); +ACE_EXPLOSION_REFLECTION(42,170); +ACE_EXPLOSION_REFLECTION(42,180); +ACE_EXPLOSION_REFLECTION(42,190); +ACE_EXPLOSION_REFLECTION(42,200); +ACE_EXPLOSION_REFLECTION(42,210); +ACE_EXPLOSION_REFLECTION(42,220); +ACE_EXPLOSION_REFLECTION(42,230); +ACE_EXPLOSION_REFLECTION(42,240); +ACE_EXPLOSION_REFLECTION(42,250); +ACE_EXPLOSION_REFLECTION(42,260); +ACE_EXPLOSION_REFLECTION(42,270); +ACE_EXPLOSION_REFLECTION(42,280); +ACE_EXPLOSION_REFLECTION(42,290); +ACE_EXPLOSION_REFLECTION(42,300); +ACE_EXPLOSION_REFLECTION(42,310); +ACE_EXPLOSION_REFLECTION(42,320); +ACE_EXPLOSION_REFLECTION(42,330); +ACE_EXPLOSION_REFLECTION(42,340); +ACE_EXPLOSION_REFLECTION(42,350); +ACE_EXPLOSION_REFLECTION(42,360); +ACE_EXPLOSION_REFLECTION(42,370); +ACE_EXPLOSION_REFLECTION(42,380); +ACE_EXPLOSION_REFLECTION(42,390); +ACE_EXPLOSION_REFLECTION(42,400); +ACE_EXPLOSION_REFLECTION(42,410); +ACE_EXPLOSION_REFLECTION(42,420); +ACE_EXPLOSION_REFLECTION(42,430); +ACE_EXPLOSION_REFLECTION(42,440); +ACE_EXPLOSION_REFLECTION(42,450); +ACE_EXPLOSION_REFLECTION(42,460); +ACE_EXPLOSION_REFLECTION(42,470); +ACE_EXPLOSION_REFLECTION(42,480); +ACE_EXPLOSION_REFLECTION(42,490); +ACE_EXPLOSION_REFLECTION(42,500); +ACE_EXPLOSION_REFLECTION(44,10); +ACE_EXPLOSION_REFLECTION(44,20); +ACE_EXPLOSION_REFLECTION(44,30); +ACE_EXPLOSION_REFLECTION(44,40); +ACE_EXPLOSION_REFLECTION(44,50); +ACE_EXPLOSION_REFLECTION(44,60); +ACE_EXPLOSION_REFLECTION(44,70); +ACE_EXPLOSION_REFLECTION(44,80); +ACE_EXPLOSION_REFLECTION(44,90); +ACE_EXPLOSION_REFLECTION(44,100); +ACE_EXPLOSION_REFLECTION(44,110); +ACE_EXPLOSION_REFLECTION(44,120); +ACE_EXPLOSION_REFLECTION(44,130); +ACE_EXPLOSION_REFLECTION(44,140); +ACE_EXPLOSION_REFLECTION(44,150); +ACE_EXPLOSION_REFLECTION(44,160); +ACE_EXPLOSION_REFLECTION(44,170); +ACE_EXPLOSION_REFLECTION(44,180); +ACE_EXPLOSION_REFLECTION(44,190); +ACE_EXPLOSION_REFLECTION(44,200); +ACE_EXPLOSION_REFLECTION(44,210); +ACE_EXPLOSION_REFLECTION(44,220); +ACE_EXPLOSION_REFLECTION(44,230); +ACE_EXPLOSION_REFLECTION(44,240); +ACE_EXPLOSION_REFLECTION(44,250); +ACE_EXPLOSION_REFLECTION(44,260); +ACE_EXPLOSION_REFLECTION(44,270); +ACE_EXPLOSION_REFLECTION(44,280); +ACE_EXPLOSION_REFLECTION(44,290); +ACE_EXPLOSION_REFLECTION(44,300); +ACE_EXPLOSION_REFLECTION(44,310); +ACE_EXPLOSION_REFLECTION(44,320); +ACE_EXPLOSION_REFLECTION(44,330); +ACE_EXPLOSION_REFLECTION(44,340); +ACE_EXPLOSION_REFLECTION(44,350); +ACE_EXPLOSION_REFLECTION(44,360); +ACE_EXPLOSION_REFLECTION(44,370); +ACE_EXPLOSION_REFLECTION(44,380); +ACE_EXPLOSION_REFLECTION(44,390); +ACE_EXPLOSION_REFLECTION(44,400); +ACE_EXPLOSION_REFLECTION(44,410); +ACE_EXPLOSION_REFLECTION(44,420); +ACE_EXPLOSION_REFLECTION(44,430); +ACE_EXPLOSION_REFLECTION(44,440); +ACE_EXPLOSION_REFLECTION(44,450); +ACE_EXPLOSION_REFLECTION(44,460); +ACE_EXPLOSION_REFLECTION(44,470); +ACE_EXPLOSION_REFLECTION(44,480); +ACE_EXPLOSION_REFLECTION(44,490); +ACE_EXPLOSION_REFLECTION(44,500); +ACE_EXPLOSION_REFLECTION(46,10); +ACE_EXPLOSION_REFLECTION(46,20); +ACE_EXPLOSION_REFLECTION(46,30); +ACE_EXPLOSION_REFLECTION(46,40); +ACE_EXPLOSION_REFLECTION(46,50); +ACE_EXPLOSION_REFLECTION(46,60); +ACE_EXPLOSION_REFLECTION(46,70); +ACE_EXPLOSION_REFLECTION(46,80); +ACE_EXPLOSION_REFLECTION(46,90); +ACE_EXPLOSION_REFLECTION(46,100); +ACE_EXPLOSION_REFLECTION(46,110); +ACE_EXPLOSION_REFLECTION(46,120); +ACE_EXPLOSION_REFLECTION(46,130); +ACE_EXPLOSION_REFLECTION(46,140); +ACE_EXPLOSION_REFLECTION(46,150); +ACE_EXPLOSION_REFLECTION(46,160); +ACE_EXPLOSION_REFLECTION(46,170); +ACE_EXPLOSION_REFLECTION(46,180); +ACE_EXPLOSION_REFLECTION(46,190); +ACE_EXPLOSION_REFLECTION(46,200); +ACE_EXPLOSION_REFLECTION(46,210); +ACE_EXPLOSION_REFLECTION(46,220); +ACE_EXPLOSION_REFLECTION(46,230); +ACE_EXPLOSION_REFLECTION(46,240); +ACE_EXPLOSION_REFLECTION(46,250); +ACE_EXPLOSION_REFLECTION(46,260); +ACE_EXPLOSION_REFLECTION(46,270); +ACE_EXPLOSION_REFLECTION(46,280); +ACE_EXPLOSION_REFLECTION(46,290); +ACE_EXPLOSION_REFLECTION(46,300); +ACE_EXPLOSION_REFLECTION(46,310); +ACE_EXPLOSION_REFLECTION(46,320); +ACE_EXPLOSION_REFLECTION(46,330); +ACE_EXPLOSION_REFLECTION(46,340); +ACE_EXPLOSION_REFLECTION(46,350); +ACE_EXPLOSION_REFLECTION(46,360); +ACE_EXPLOSION_REFLECTION(46,370); +ACE_EXPLOSION_REFLECTION(46,380); +ACE_EXPLOSION_REFLECTION(46,390); +ACE_EXPLOSION_REFLECTION(46,400); +ACE_EXPLOSION_REFLECTION(46,410); +ACE_EXPLOSION_REFLECTION(46,420); +ACE_EXPLOSION_REFLECTION(46,430); +ACE_EXPLOSION_REFLECTION(46,440); +ACE_EXPLOSION_REFLECTION(46,450); +ACE_EXPLOSION_REFLECTION(46,460); +ACE_EXPLOSION_REFLECTION(46,470); +ACE_EXPLOSION_REFLECTION(46,480); +ACE_EXPLOSION_REFLECTION(46,490); +ACE_EXPLOSION_REFLECTION(46,500); +ACE_EXPLOSION_REFLECTION(48,10); +ACE_EXPLOSION_REFLECTION(48,20); +ACE_EXPLOSION_REFLECTION(48,30); +ACE_EXPLOSION_REFLECTION(48,40); +ACE_EXPLOSION_REFLECTION(48,50); +ACE_EXPLOSION_REFLECTION(48,60); +ACE_EXPLOSION_REFLECTION(48,70); +ACE_EXPLOSION_REFLECTION(48,80); +ACE_EXPLOSION_REFLECTION(48,90); +ACE_EXPLOSION_REFLECTION(48,100); +ACE_EXPLOSION_REFLECTION(48,110); +ACE_EXPLOSION_REFLECTION(48,120); +ACE_EXPLOSION_REFLECTION(48,130); +ACE_EXPLOSION_REFLECTION(48,140); +ACE_EXPLOSION_REFLECTION(48,150); +ACE_EXPLOSION_REFLECTION(48,160); +ACE_EXPLOSION_REFLECTION(48,170); +ACE_EXPLOSION_REFLECTION(48,180); +ACE_EXPLOSION_REFLECTION(48,190); +ACE_EXPLOSION_REFLECTION(48,200); +ACE_EXPLOSION_REFLECTION(48,210); +ACE_EXPLOSION_REFLECTION(48,220); +ACE_EXPLOSION_REFLECTION(48,230); +ACE_EXPLOSION_REFLECTION(48,240); +ACE_EXPLOSION_REFLECTION(48,250); +ACE_EXPLOSION_REFLECTION(48,260); +ACE_EXPLOSION_REFLECTION(48,270); +ACE_EXPLOSION_REFLECTION(48,280); +ACE_EXPLOSION_REFLECTION(48,290); +ACE_EXPLOSION_REFLECTION(48,300); +ACE_EXPLOSION_REFLECTION(48,310); +ACE_EXPLOSION_REFLECTION(48,320); +ACE_EXPLOSION_REFLECTION(48,330); +ACE_EXPLOSION_REFLECTION(48,340); +ACE_EXPLOSION_REFLECTION(48,350); +ACE_EXPLOSION_REFLECTION(48,360); +ACE_EXPLOSION_REFLECTION(48,370); +ACE_EXPLOSION_REFLECTION(48,380); +ACE_EXPLOSION_REFLECTION(48,390); +ACE_EXPLOSION_REFLECTION(48,400); +ACE_EXPLOSION_REFLECTION(48,410); +ACE_EXPLOSION_REFLECTION(48,420); +ACE_EXPLOSION_REFLECTION(48,430); +ACE_EXPLOSION_REFLECTION(48,440); +ACE_EXPLOSION_REFLECTION(48,450); +ACE_EXPLOSION_REFLECTION(48,460); +ACE_EXPLOSION_REFLECTION(48,470); +ACE_EXPLOSION_REFLECTION(48,480); +ACE_EXPLOSION_REFLECTION(48,490); +ACE_EXPLOSION_REFLECTION(48,500); +ACE_EXPLOSION_REFLECTION(50,10); +ACE_EXPLOSION_REFLECTION(50,20); +ACE_EXPLOSION_REFLECTION(50,30); +ACE_EXPLOSION_REFLECTION(50,40); +ACE_EXPLOSION_REFLECTION(50,50); +ACE_EXPLOSION_REFLECTION(50,60); +ACE_EXPLOSION_REFLECTION(50,70); +ACE_EXPLOSION_REFLECTION(50,80); +ACE_EXPLOSION_REFLECTION(50,90); +ACE_EXPLOSION_REFLECTION(50,100); +ACE_EXPLOSION_REFLECTION(50,110); +ACE_EXPLOSION_REFLECTION(50,120); +ACE_EXPLOSION_REFLECTION(50,130); +ACE_EXPLOSION_REFLECTION(50,140); +ACE_EXPLOSION_REFLECTION(50,150); +ACE_EXPLOSION_REFLECTION(50,160); +ACE_EXPLOSION_REFLECTION(50,170); +ACE_EXPLOSION_REFLECTION(50,180); +ACE_EXPLOSION_REFLECTION(50,190); +ACE_EXPLOSION_REFLECTION(50,200); +ACE_EXPLOSION_REFLECTION(50,210); +ACE_EXPLOSION_REFLECTION(50,220); +ACE_EXPLOSION_REFLECTION(50,230); +ACE_EXPLOSION_REFLECTION(50,240); +ACE_EXPLOSION_REFLECTION(50,250); +ACE_EXPLOSION_REFLECTION(50,260); +ACE_EXPLOSION_REFLECTION(50,270); +ACE_EXPLOSION_REFLECTION(50,280); +ACE_EXPLOSION_REFLECTION(50,290); +ACE_EXPLOSION_REFLECTION(50,300); +ACE_EXPLOSION_REFLECTION(50,310); +ACE_EXPLOSION_REFLECTION(50,320); +ACE_EXPLOSION_REFLECTION(50,330); +ACE_EXPLOSION_REFLECTION(50,340); +ACE_EXPLOSION_REFLECTION(50,350); +ACE_EXPLOSION_REFLECTION(50,360); +ACE_EXPLOSION_REFLECTION(50,370); +ACE_EXPLOSION_REFLECTION(50,380); +ACE_EXPLOSION_REFLECTION(50,390); +ACE_EXPLOSION_REFLECTION(50,400); +ACE_EXPLOSION_REFLECTION(50,410); +ACE_EXPLOSION_REFLECTION(50,420); +ACE_EXPLOSION_REFLECTION(50,430); +ACE_EXPLOSION_REFLECTION(50,440); +ACE_EXPLOSION_REFLECTION(50,450); +ACE_EXPLOSION_REFLECTION(50,460); +ACE_EXPLOSION_REFLECTION(50,470); +ACE_EXPLOSION_REFLECTION(50,480); +ACE_EXPLOSION_REFLECTION(50,490); +ACE_EXPLOSION_REFLECTION(50,500); +ACE_EXPLOSION_REFLECTION(52,10); +ACE_EXPLOSION_REFLECTION(52,20); +ACE_EXPLOSION_REFLECTION(52,30); +ACE_EXPLOSION_REFLECTION(52,40); +ACE_EXPLOSION_REFLECTION(52,50); +ACE_EXPLOSION_REFLECTION(52,60); +ACE_EXPLOSION_REFLECTION(52,70); +ACE_EXPLOSION_REFLECTION(52,80); +ACE_EXPLOSION_REFLECTION(52,90); +ACE_EXPLOSION_REFLECTION(52,100); +ACE_EXPLOSION_REFLECTION(52,110); +ACE_EXPLOSION_REFLECTION(52,120); +ACE_EXPLOSION_REFLECTION(52,130); +ACE_EXPLOSION_REFLECTION(52,140); +ACE_EXPLOSION_REFLECTION(52,150); +ACE_EXPLOSION_REFLECTION(52,160); +ACE_EXPLOSION_REFLECTION(52,170); +ACE_EXPLOSION_REFLECTION(52,180); +ACE_EXPLOSION_REFLECTION(52,190); +ACE_EXPLOSION_REFLECTION(52,200); +ACE_EXPLOSION_REFLECTION(52,210); +ACE_EXPLOSION_REFLECTION(52,220); +ACE_EXPLOSION_REFLECTION(52,230); +ACE_EXPLOSION_REFLECTION(52,240); +ACE_EXPLOSION_REFLECTION(52,250); +ACE_EXPLOSION_REFLECTION(52,260); +ACE_EXPLOSION_REFLECTION(52,270); +ACE_EXPLOSION_REFLECTION(52,280); +ACE_EXPLOSION_REFLECTION(52,290); +ACE_EXPLOSION_REFLECTION(52,300); +ACE_EXPLOSION_REFLECTION(52,310); +ACE_EXPLOSION_REFLECTION(52,320); +ACE_EXPLOSION_REFLECTION(52,330); +ACE_EXPLOSION_REFLECTION(52,340); +ACE_EXPLOSION_REFLECTION(52,350); +ACE_EXPLOSION_REFLECTION(52,360); +ACE_EXPLOSION_REFLECTION(52,370); +ACE_EXPLOSION_REFLECTION(52,380); +ACE_EXPLOSION_REFLECTION(52,390); +ACE_EXPLOSION_REFLECTION(52,400); +ACE_EXPLOSION_REFLECTION(52,410); +ACE_EXPLOSION_REFLECTION(52,420); +ACE_EXPLOSION_REFLECTION(52,430); +ACE_EXPLOSION_REFLECTION(52,440); +ACE_EXPLOSION_REFLECTION(52,450); +ACE_EXPLOSION_REFLECTION(52,460); +ACE_EXPLOSION_REFLECTION(52,470); +ACE_EXPLOSION_REFLECTION(52,480); +ACE_EXPLOSION_REFLECTION(52,490); +ACE_EXPLOSION_REFLECTION(52,500); +ACE_EXPLOSION_REFLECTION(54,10); +ACE_EXPLOSION_REFLECTION(54,20); +ACE_EXPLOSION_REFLECTION(54,30); +ACE_EXPLOSION_REFLECTION(54,40); +ACE_EXPLOSION_REFLECTION(54,50); +ACE_EXPLOSION_REFLECTION(54,60); +ACE_EXPLOSION_REFLECTION(54,70); +ACE_EXPLOSION_REFLECTION(54,80); +ACE_EXPLOSION_REFLECTION(54,90); +ACE_EXPLOSION_REFLECTION(54,100); +ACE_EXPLOSION_REFLECTION(54,110); +ACE_EXPLOSION_REFLECTION(54,120); +ACE_EXPLOSION_REFLECTION(54,130); +ACE_EXPLOSION_REFLECTION(54,140); +ACE_EXPLOSION_REFLECTION(54,150); +ACE_EXPLOSION_REFLECTION(54,160); +ACE_EXPLOSION_REFLECTION(54,170); +ACE_EXPLOSION_REFLECTION(54,180); +ACE_EXPLOSION_REFLECTION(54,190); +ACE_EXPLOSION_REFLECTION(54,200); +ACE_EXPLOSION_REFLECTION(54,210); +ACE_EXPLOSION_REFLECTION(54,220); +ACE_EXPLOSION_REFLECTION(54,230); +ACE_EXPLOSION_REFLECTION(54,240); +ACE_EXPLOSION_REFLECTION(54,250); +ACE_EXPLOSION_REFLECTION(54,260); +ACE_EXPLOSION_REFLECTION(54,270); +ACE_EXPLOSION_REFLECTION(54,280); +ACE_EXPLOSION_REFLECTION(54,290); +ACE_EXPLOSION_REFLECTION(54,300); +ACE_EXPLOSION_REFLECTION(54,310); +ACE_EXPLOSION_REFLECTION(54,320); +ACE_EXPLOSION_REFLECTION(54,330); +ACE_EXPLOSION_REFLECTION(54,340); +ACE_EXPLOSION_REFLECTION(54,350); +ACE_EXPLOSION_REFLECTION(54,360); +ACE_EXPLOSION_REFLECTION(54,370); +ACE_EXPLOSION_REFLECTION(54,380); +ACE_EXPLOSION_REFLECTION(54,390); +ACE_EXPLOSION_REFLECTION(54,400); +ACE_EXPLOSION_REFLECTION(54,410); +ACE_EXPLOSION_REFLECTION(54,420); +ACE_EXPLOSION_REFLECTION(54,430); +ACE_EXPLOSION_REFLECTION(54,440); +ACE_EXPLOSION_REFLECTION(54,450); +ACE_EXPLOSION_REFLECTION(54,460); +ACE_EXPLOSION_REFLECTION(54,470); +ACE_EXPLOSION_REFLECTION(54,480); +ACE_EXPLOSION_REFLECTION(54,490); +ACE_EXPLOSION_REFLECTION(54,500); +ACE_EXPLOSION_REFLECTION(56,10); +ACE_EXPLOSION_REFLECTION(56,20); +ACE_EXPLOSION_REFLECTION(56,30); +ACE_EXPLOSION_REFLECTION(56,40); +ACE_EXPLOSION_REFLECTION(56,50); +ACE_EXPLOSION_REFLECTION(56,60); +ACE_EXPLOSION_REFLECTION(56,70); +ACE_EXPLOSION_REFLECTION(56,80); +ACE_EXPLOSION_REFLECTION(56,90); +ACE_EXPLOSION_REFLECTION(56,100); +ACE_EXPLOSION_REFLECTION(56,110); +ACE_EXPLOSION_REFLECTION(56,120); +ACE_EXPLOSION_REFLECTION(56,130); +ACE_EXPLOSION_REFLECTION(56,140); +ACE_EXPLOSION_REFLECTION(56,150); +ACE_EXPLOSION_REFLECTION(56,160); +ACE_EXPLOSION_REFLECTION(56,170); +ACE_EXPLOSION_REFLECTION(56,180); +ACE_EXPLOSION_REFLECTION(56,190); +ACE_EXPLOSION_REFLECTION(56,200); +ACE_EXPLOSION_REFLECTION(56,210); +ACE_EXPLOSION_REFLECTION(56,220); +ACE_EXPLOSION_REFLECTION(56,230); +ACE_EXPLOSION_REFLECTION(56,240); +ACE_EXPLOSION_REFLECTION(56,250); +ACE_EXPLOSION_REFLECTION(56,260); +ACE_EXPLOSION_REFLECTION(56,270); +ACE_EXPLOSION_REFLECTION(56,280); +ACE_EXPLOSION_REFLECTION(56,290); +ACE_EXPLOSION_REFLECTION(56,300); +ACE_EXPLOSION_REFLECTION(56,310); +ACE_EXPLOSION_REFLECTION(56,320); +ACE_EXPLOSION_REFLECTION(56,330); +ACE_EXPLOSION_REFLECTION(56,340); +ACE_EXPLOSION_REFLECTION(56,350); +ACE_EXPLOSION_REFLECTION(56,360); +ACE_EXPLOSION_REFLECTION(56,370); +ACE_EXPLOSION_REFLECTION(56,380); +ACE_EXPLOSION_REFLECTION(56,390); +ACE_EXPLOSION_REFLECTION(56,400); +ACE_EXPLOSION_REFLECTION(56,410); +ACE_EXPLOSION_REFLECTION(56,420); +ACE_EXPLOSION_REFLECTION(56,430); +ACE_EXPLOSION_REFLECTION(56,440); +ACE_EXPLOSION_REFLECTION(56,450); +ACE_EXPLOSION_REFLECTION(56,460); +ACE_EXPLOSION_REFLECTION(56,470); +ACE_EXPLOSION_REFLECTION(56,480); +ACE_EXPLOSION_REFLECTION(56,490); +ACE_EXPLOSION_REFLECTION(56,500); +ACE_EXPLOSION_REFLECTION(58,10); +ACE_EXPLOSION_REFLECTION(58,20); +ACE_EXPLOSION_REFLECTION(58,30); +ACE_EXPLOSION_REFLECTION(58,40); +ACE_EXPLOSION_REFLECTION(58,50); +ACE_EXPLOSION_REFLECTION(58,60); +ACE_EXPLOSION_REFLECTION(58,70); +ACE_EXPLOSION_REFLECTION(58,80); +ACE_EXPLOSION_REFLECTION(58,90); +ACE_EXPLOSION_REFLECTION(58,100); +ACE_EXPLOSION_REFLECTION(58,110); +ACE_EXPLOSION_REFLECTION(58,120); +ACE_EXPLOSION_REFLECTION(58,130); +ACE_EXPLOSION_REFLECTION(58,140); +ACE_EXPLOSION_REFLECTION(58,150); +ACE_EXPLOSION_REFLECTION(58,160); +ACE_EXPLOSION_REFLECTION(58,170); +ACE_EXPLOSION_REFLECTION(58,180); +ACE_EXPLOSION_REFLECTION(58,190); +ACE_EXPLOSION_REFLECTION(58,200); +ACE_EXPLOSION_REFLECTION(58,210); +ACE_EXPLOSION_REFLECTION(58,220); +ACE_EXPLOSION_REFLECTION(58,230); +ACE_EXPLOSION_REFLECTION(58,240); +ACE_EXPLOSION_REFLECTION(58,250); +ACE_EXPLOSION_REFLECTION(58,260); +ACE_EXPLOSION_REFLECTION(58,270); +ACE_EXPLOSION_REFLECTION(58,280); +ACE_EXPLOSION_REFLECTION(58,290); +ACE_EXPLOSION_REFLECTION(58,300); +ACE_EXPLOSION_REFLECTION(58,310); +ACE_EXPLOSION_REFLECTION(58,320); +ACE_EXPLOSION_REFLECTION(58,330); +ACE_EXPLOSION_REFLECTION(58,340); +ACE_EXPLOSION_REFLECTION(58,350); +ACE_EXPLOSION_REFLECTION(58,360); +ACE_EXPLOSION_REFLECTION(58,370); +ACE_EXPLOSION_REFLECTION(58,380); +ACE_EXPLOSION_REFLECTION(58,390); +ACE_EXPLOSION_REFLECTION(58,400); +ACE_EXPLOSION_REFLECTION(58,410); +ACE_EXPLOSION_REFLECTION(58,420); +ACE_EXPLOSION_REFLECTION(58,430); +ACE_EXPLOSION_REFLECTION(58,440); +ACE_EXPLOSION_REFLECTION(58,450); +ACE_EXPLOSION_REFLECTION(58,460); +ACE_EXPLOSION_REFLECTION(58,470); +ACE_EXPLOSION_REFLECTION(58,480); +ACE_EXPLOSION_REFLECTION(58,490); +ACE_EXPLOSION_REFLECTION(58,500); +ACE_EXPLOSION_REFLECTION(60,10); +ACE_EXPLOSION_REFLECTION(60,20); +ACE_EXPLOSION_REFLECTION(60,30); +ACE_EXPLOSION_REFLECTION(60,40); +ACE_EXPLOSION_REFLECTION(60,50); +ACE_EXPLOSION_REFLECTION(60,60); +ACE_EXPLOSION_REFLECTION(60,70); +ACE_EXPLOSION_REFLECTION(60,80); +ACE_EXPLOSION_REFLECTION(60,90); +ACE_EXPLOSION_REFLECTION(60,100); +ACE_EXPLOSION_REFLECTION(60,110); +ACE_EXPLOSION_REFLECTION(60,120); +ACE_EXPLOSION_REFLECTION(60,130); +ACE_EXPLOSION_REFLECTION(60,140); +ACE_EXPLOSION_REFLECTION(60,150); +ACE_EXPLOSION_REFLECTION(60,160); +ACE_EXPLOSION_REFLECTION(60,170); +ACE_EXPLOSION_REFLECTION(60,180); +ACE_EXPLOSION_REFLECTION(60,190); +ACE_EXPLOSION_REFLECTION(60,200); +ACE_EXPLOSION_REFLECTION(60,210); +ACE_EXPLOSION_REFLECTION(60,220); +ACE_EXPLOSION_REFLECTION(60,230); +ACE_EXPLOSION_REFLECTION(60,240); +ACE_EXPLOSION_REFLECTION(60,250); +ACE_EXPLOSION_REFLECTION(60,260); +ACE_EXPLOSION_REFLECTION(60,270); +ACE_EXPLOSION_REFLECTION(60,280); +ACE_EXPLOSION_REFLECTION(60,290); +ACE_EXPLOSION_REFLECTION(60,300); +ACE_EXPLOSION_REFLECTION(60,310); +ACE_EXPLOSION_REFLECTION(60,320); +ACE_EXPLOSION_REFLECTION(60,330); +ACE_EXPLOSION_REFLECTION(60,340); +ACE_EXPLOSION_REFLECTION(60,350); +ACE_EXPLOSION_REFLECTION(60,360); +ACE_EXPLOSION_REFLECTION(60,370); +ACE_EXPLOSION_REFLECTION(60,380); +ACE_EXPLOSION_REFLECTION(60,390); +ACE_EXPLOSION_REFLECTION(60,400); +ACE_EXPLOSION_REFLECTION(60,410); +ACE_EXPLOSION_REFLECTION(60,420); +ACE_EXPLOSION_REFLECTION(60,430); +ACE_EXPLOSION_REFLECTION(60,440); +ACE_EXPLOSION_REFLECTION(60,450); +ACE_EXPLOSION_REFLECTION(60,460); +ACE_EXPLOSION_REFLECTION(60,470); +ACE_EXPLOSION_REFLECTION(60,480); +ACE_EXPLOSION_REFLECTION(60,490); +ACE_EXPLOSION_REFLECTION(60,500); +ACE_EXPLOSION_REFLECTION(62,10); +ACE_EXPLOSION_REFLECTION(62,20); +ACE_EXPLOSION_REFLECTION(62,30); +ACE_EXPLOSION_REFLECTION(62,40); +ACE_EXPLOSION_REFLECTION(62,50); +ACE_EXPLOSION_REFLECTION(62,60); +ACE_EXPLOSION_REFLECTION(62,70); +ACE_EXPLOSION_REFLECTION(62,80); +ACE_EXPLOSION_REFLECTION(62,90); +ACE_EXPLOSION_REFLECTION(62,100); +ACE_EXPLOSION_REFLECTION(62,110); +ACE_EXPLOSION_REFLECTION(62,120); +ACE_EXPLOSION_REFLECTION(62,130); +ACE_EXPLOSION_REFLECTION(62,140); +ACE_EXPLOSION_REFLECTION(62,150); +ACE_EXPLOSION_REFLECTION(62,160); +ACE_EXPLOSION_REFLECTION(62,170); +ACE_EXPLOSION_REFLECTION(62,180); +ACE_EXPLOSION_REFLECTION(62,190); +ACE_EXPLOSION_REFLECTION(62,200); +ACE_EXPLOSION_REFLECTION(62,210); +ACE_EXPLOSION_REFLECTION(62,220); +ACE_EXPLOSION_REFLECTION(62,230); +ACE_EXPLOSION_REFLECTION(62,240); +ACE_EXPLOSION_REFLECTION(62,250); +ACE_EXPLOSION_REFLECTION(62,260); +ACE_EXPLOSION_REFLECTION(62,270); +ACE_EXPLOSION_REFLECTION(62,280); +ACE_EXPLOSION_REFLECTION(62,290); +ACE_EXPLOSION_REFLECTION(62,300); +ACE_EXPLOSION_REFLECTION(62,310); +ACE_EXPLOSION_REFLECTION(62,320); +ACE_EXPLOSION_REFLECTION(62,330); +ACE_EXPLOSION_REFLECTION(62,340); +ACE_EXPLOSION_REFLECTION(62,350); +ACE_EXPLOSION_REFLECTION(62,360); +ACE_EXPLOSION_REFLECTION(62,370); +ACE_EXPLOSION_REFLECTION(62,380); +ACE_EXPLOSION_REFLECTION(62,390); +ACE_EXPLOSION_REFLECTION(62,400); +ACE_EXPLOSION_REFLECTION(62,410); +ACE_EXPLOSION_REFLECTION(62,420); +ACE_EXPLOSION_REFLECTION(62,430); +ACE_EXPLOSION_REFLECTION(62,440); +ACE_EXPLOSION_REFLECTION(62,450); +ACE_EXPLOSION_REFLECTION(62,460); +ACE_EXPLOSION_REFLECTION(62,470); +ACE_EXPLOSION_REFLECTION(62,480); +ACE_EXPLOSION_REFLECTION(62,490); +ACE_EXPLOSION_REFLECTION(62,500); +ACE_EXPLOSION_REFLECTION(64,10); +ACE_EXPLOSION_REFLECTION(64,20); +ACE_EXPLOSION_REFLECTION(64,30); +ACE_EXPLOSION_REFLECTION(64,40); +ACE_EXPLOSION_REFLECTION(64,50); +ACE_EXPLOSION_REFLECTION(64,60); +ACE_EXPLOSION_REFLECTION(64,70); +ACE_EXPLOSION_REFLECTION(64,80); +ACE_EXPLOSION_REFLECTION(64,90); +ACE_EXPLOSION_REFLECTION(64,100); +ACE_EXPLOSION_REFLECTION(64,110); +ACE_EXPLOSION_REFLECTION(64,120); +ACE_EXPLOSION_REFLECTION(64,130); +ACE_EXPLOSION_REFLECTION(64,140); +ACE_EXPLOSION_REFLECTION(64,150); +ACE_EXPLOSION_REFLECTION(64,160); +ACE_EXPLOSION_REFLECTION(64,170); +ACE_EXPLOSION_REFLECTION(64,180); +ACE_EXPLOSION_REFLECTION(64,190); +ACE_EXPLOSION_REFLECTION(64,200); +ACE_EXPLOSION_REFLECTION(64,210); +ACE_EXPLOSION_REFLECTION(64,220); +ACE_EXPLOSION_REFLECTION(64,230); +ACE_EXPLOSION_REFLECTION(64,240); +ACE_EXPLOSION_REFLECTION(64,250); +ACE_EXPLOSION_REFLECTION(64,260); +ACE_EXPLOSION_REFLECTION(64,270); +ACE_EXPLOSION_REFLECTION(64,280); +ACE_EXPLOSION_REFLECTION(64,290); +ACE_EXPLOSION_REFLECTION(64,300); +ACE_EXPLOSION_REFLECTION(64,310); +ACE_EXPLOSION_REFLECTION(64,320); +ACE_EXPLOSION_REFLECTION(64,330); +ACE_EXPLOSION_REFLECTION(64,340); +ACE_EXPLOSION_REFLECTION(64,350); +ACE_EXPLOSION_REFLECTION(64,360); +ACE_EXPLOSION_REFLECTION(64,370); +ACE_EXPLOSION_REFLECTION(64,380); +ACE_EXPLOSION_REFLECTION(64,390); +ACE_EXPLOSION_REFLECTION(64,400); +ACE_EXPLOSION_REFLECTION(64,410); +ACE_EXPLOSION_REFLECTION(64,420); +ACE_EXPLOSION_REFLECTION(64,430); +ACE_EXPLOSION_REFLECTION(64,440); +ACE_EXPLOSION_REFLECTION(64,450); +ACE_EXPLOSION_REFLECTION(64,460); +ACE_EXPLOSION_REFLECTION(64,470); +ACE_EXPLOSION_REFLECTION(64,480); +ACE_EXPLOSION_REFLECTION(64,490); +ACE_EXPLOSION_REFLECTION(64,500); +ACE_EXPLOSION_REFLECTION(66,10); +ACE_EXPLOSION_REFLECTION(66,20); +ACE_EXPLOSION_REFLECTION(66,30); +ACE_EXPLOSION_REFLECTION(66,40); +ACE_EXPLOSION_REFLECTION(66,50); +ACE_EXPLOSION_REFLECTION(66,60); +ACE_EXPLOSION_REFLECTION(66,70); +ACE_EXPLOSION_REFLECTION(66,80); +ACE_EXPLOSION_REFLECTION(66,90); +ACE_EXPLOSION_REFLECTION(66,100); +ACE_EXPLOSION_REFLECTION(66,110); +ACE_EXPLOSION_REFLECTION(66,120); +ACE_EXPLOSION_REFLECTION(66,130); +ACE_EXPLOSION_REFLECTION(66,140); +ACE_EXPLOSION_REFLECTION(66,150); +ACE_EXPLOSION_REFLECTION(66,160); +ACE_EXPLOSION_REFLECTION(66,170); +ACE_EXPLOSION_REFLECTION(66,180); +ACE_EXPLOSION_REFLECTION(66,190); +ACE_EXPLOSION_REFLECTION(66,200); +ACE_EXPLOSION_REFLECTION(66,210); +ACE_EXPLOSION_REFLECTION(66,220); +ACE_EXPLOSION_REFLECTION(66,230); +ACE_EXPLOSION_REFLECTION(66,240); +ACE_EXPLOSION_REFLECTION(66,250); +ACE_EXPLOSION_REFLECTION(66,260); +ACE_EXPLOSION_REFLECTION(66,270); +ACE_EXPLOSION_REFLECTION(66,280); +ACE_EXPLOSION_REFLECTION(66,290); +ACE_EXPLOSION_REFLECTION(66,300); +ACE_EXPLOSION_REFLECTION(66,310); +ACE_EXPLOSION_REFLECTION(66,320); +ACE_EXPLOSION_REFLECTION(66,330); +ACE_EXPLOSION_REFLECTION(66,340); +ACE_EXPLOSION_REFLECTION(66,350); +ACE_EXPLOSION_REFLECTION(66,360); +ACE_EXPLOSION_REFLECTION(66,370); +ACE_EXPLOSION_REFLECTION(66,380); +ACE_EXPLOSION_REFLECTION(66,390); +ACE_EXPLOSION_REFLECTION(66,400); +ACE_EXPLOSION_REFLECTION(66,410); +ACE_EXPLOSION_REFLECTION(66,420); +ACE_EXPLOSION_REFLECTION(66,430); +ACE_EXPLOSION_REFLECTION(66,440); +ACE_EXPLOSION_REFLECTION(66,450); +ACE_EXPLOSION_REFLECTION(66,460); +ACE_EXPLOSION_REFLECTION(66,470); +ACE_EXPLOSION_REFLECTION(66,480); +ACE_EXPLOSION_REFLECTION(66,490); +ACE_EXPLOSION_REFLECTION(66,500); +ACE_EXPLOSION_REFLECTION(68,10); +ACE_EXPLOSION_REFLECTION(68,20); +ACE_EXPLOSION_REFLECTION(68,30); +ACE_EXPLOSION_REFLECTION(68,40); +ACE_EXPLOSION_REFLECTION(68,50); +ACE_EXPLOSION_REFLECTION(68,60); +ACE_EXPLOSION_REFLECTION(68,70); +ACE_EXPLOSION_REFLECTION(68,80); +ACE_EXPLOSION_REFLECTION(68,90); +ACE_EXPLOSION_REFLECTION(68,100); +ACE_EXPLOSION_REFLECTION(68,110); +ACE_EXPLOSION_REFLECTION(68,120); +ACE_EXPLOSION_REFLECTION(68,130); +ACE_EXPLOSION_REFLECTION(68,140); +ACE_EXPLOSION_REFLECTION(68,150); +ACE_EXPLOSION_REFLECTION(68,160); +ACE_EXPLOSION_REFLECTION(68,170); +ACE_EXPLOSION_REFLECTION(68,180); +ACE_EXPLOSION_REFLECTION(68,190); +ACE_EXPLOSION_REFLECTION(68,200); +ACE_EXPLOSION_REFLECTION(68,210); +ACE_EXPLOSION_REFLECTION(68,220); +ACE_EXPLOSION_REFLECTION(68,230); +ACE_EXPLOSION_REFLECTION(68,240); +ACE_EXPLOSION_REFLECTION(68,250); +ACE_EXPLOSION_REFLECTION(68,260); +ACE_EXPLOSION_REFLECTION(68,270); +ACE_EXPLOSION_REFLECTION(68,280); +ACE_EXPLOSION_REFLECTION(68,290); +ACE_EXPLOSION_REFLECTION(68,300); +ACE_EXPLOSION_REFLECTION(68,310); +ACE_EXPLOSION_REFLECTION(68,320); +ACE_EXPLOSION_REFLECTION(68,330); +ACE_EXPLOSION_REFLECTION(68,340); +ACE_EXPLOSION_REFLECTION(68,350); +ACE_EXPLOSION_REFLECTION(68,360); +ACE_EXPLOSION_REFLECTION(68,370); +ACE_EXPLOSION_REFLECTION(68,380); +ACE_EXPLOSION_REFLECTION(68,390); +ACE_EXPLOSION_REFLECTION(68,400); +ACE_EXPLOSION_REFLECTION(68,410); +ACE_EXPLOSION_REFLECTION(68,420); +ACE_EXPLOSION_REFLECTION(68,430); +ACE_EXPLOSION_REFLECTION(68,440); +ACE_EXPLOSION_REFLECTION(68,450); +ACE_EXPLOSION_REFLECTION(68,460); +ACE_EXPLOSION_REFLECTION(68,470); +ACE_EXPLOSION_REFLECTION(68,480); +ACE_EXPLOSION_REFLECTION(68,490); +ACE_EXPLOSION_REFLECTION(68,500); +ACE_EXPLOSION_REFLECTION(70,10); +ACE_EXPLOSION_REFLECTION(70,20); +ACE_EXPLOSION_REFLECTION(70,30); +ACE_EXPLOSION_REFLECTION(70,40); +ACE_EXPLOSION_REFLECTION(70,50); +ACE_EXPLOSION_REFLECTION(70,60); +ACE_EXPLOSION_REFLECTION(70,70); +ACE_EXPLOSION_REFLECTION(70,80); +ACE_EXPLOSION_REFLECTION(70,90); +ACE_EXPLOSION_REFLECTION(70,100); +ACE_EXPLOSION_REFLECTION(70,110); +ACE_EXPLOSION_REFLECTION(70,120); +ACE_EXPLOSION_REFLECTION(70,130); +ACE_EXPLOSION_REFLECTION(70,140); +ACE_EXPLOSION_REFLECTION(70,150); +ACE_EXPLOSION_REFLECTION(70,160); +ACE_EXPLOSION_REFLECTION(70,170); +ACE_EXPLOSION_REFLECTION(70,180); +ACE_EXPLOSION_REFLECTION(70,190); +ACE_EXPLOSION_REFLECTION(70,200); +ACE_EXPLOSION_REFLECTION(70,210); +ACE_EXPLOSION_REFLECTION(70,220); +ACE_EXPLOSION_REFLECTION(70,230); +ACE_EXPLOSION_REFLECTION(70,240); +ACE_EXPLOSION_REFLECTION(70,250); +ACE_EXPLOSION_REFLECTION(70,260); +ACE_EXPLOSION_REFLECTION(70,270); +ACE_EXPLOSION_REFLECTION(70,280); +ACE_EXPLOSION_REFLECTION(70,290); +ACE_EXPLOSION_REFLECTION(70,300); +ACE_EXPLOSION_REFLECTION(70,310); +ACE_EXPLOSION_REFLECTION(70,320); +ACE_EXPLOSION_REFLECTION(70,330); +ACE_EXPLOSION_REFLECTION(70,340); +ACE_EXPLOSION_REFLECTION(70,350); +ACE_EXPLOSION_REFLECTION(70,360); +ACE_EXPLOSION_REFLECTION(70,370); +ACE_EXPLOSION_REFLECTION(70,380); +ACE_EXPLOSION_REFLECTION(70,390); +ACE_EXPLOSION_REFLECTION(70,400); +ACE_EXPLOSION_REFLECTION(70,410); +ACE_EXPLOSION_REFLECTION(70,420); +ACE_EXPLOSION_REFLECTION(70,430); +ACE_EXPLOSION_REFLECTION(70,440); +ACE_EXPLOSION_REFLECTION(70,450); +ACE_EXPLOSION_REFLECTION(70,460); +ACE_EXPLOSION_REFLECTION(70,470); +ACE_EXPLOSION_REFLECTION(70,480); +ACE_EXPLOSION_REFLECTION(70,490); +ACE_EXPLOSION_REFLECTION(70,500); +ACE_EXPLOSION_REFLECTION(72,10); +ACE_EXPLOSION_REFLECTION(72,20); +ACE_EXPLOSION_REFLECTION(72,30); +ACE_EXPLOSION_REFLECTION(72,40); +ACE_EXPLOSION_REFLECTION(72,50); +ACE_EXPLOSION_REFLECTION(72,60); +ACE_EXPLOSION_REFLECTION(72,70); +ACE_EXPLOSION_REFLECTION(72,80); +ACE_EXPLOSION_REFLECTION(72,90); +ACE_EXPLOSION_REFLECTION(72,100); +ACE_EXPLOSION_REFLECTION(72,110); +ACE_EXPLOSION_REFLECTION(72,120); +ACE_EXPLOSION_REFLECTION(72,130); +ACE_EXPLOSION_REFLECTION(72,140); +ACE_EXPLOSION_REFLECTION(72,150); +ACE_EXPLOSION_REFLECTION(72,160); +ACE_EXPLOSION_REFLECTION(72,170); +ACE_EXPLOSION_REFLECTION(72,180); +ACE_EXPLOSION_REFLECTION(72,190); +ACE_EXPLOSION_REFLECTION(72,200); +ACE_EXPLOSION_REFLECTION(72,210); +ACE_EXPLOSION_REFLECTION(72,220); +ACE_EXPLOSION_REFLECTION(72,230); +ACE_EXPLOSION_REFLECTION(72,240); +ACE_EXPLOSION_REFLECTION(72,250); +ACE_EXPLOSION_REFLECTION(72,260); +ACE_EXPLOSION_REFLECTION(72,270); +ACE_EXPLOSION_REFLECTION(72,280); +ACE_EXPLOSION_REFLECTION(72,290); +ACE_EXPLOSION_REFLECTION(72,300); +ACE_EXPLOSION_REFLECTION(72,310); +ACE_EXPLOSION_REFLECTION(72,320); +ACE_EXPLOSION_REFLECTION(72,330); +ACE_EXPLOSION_REFLECTION(72,340); +ACE_EXPLOSION_REFLECTION(72,350); +ACE_EXPLOSION_REFLECTION(72,360); +ACE_EXPLOSION_REFLECTION(72,370); +ACE_EXPLOSION_REFLECTION(72,380); +ACE_EXPLOSION_REFLECTION(72,390); +ACE_EXPLOSION_REFLECTION(72,400); +ACE_EXPLOSION_REFLECTION(72,410); +ACE_EXPLOSION_REFLECTION(72,420); +ACE_EXPLOSION_REFLECTION(72,430); +ACE_EXPLOSION_REFLECTION(72,440); +ACE_EXPLOSION_REFLECTION(72,450); +ACE_EXPLOSION_REFLECTION(72,460); +ACE_EXPLOSION_REFLECTION(72,470); +ACE_EXPLOSION_REFLECTION(72,480); +ACE_EXPLOSION_REFLECTION(72,490); +ACE_EXPLOSION_REFLECTION(72,500); +ACE_EXPLOSION_REFLECTION(74,10); +ACE_EXPLOSION_REFLECTION(74,20); +ACE_EXPLOSION_REFLECTION(74,30); +ACE_EXPLOSION_REFLECTION(74,40); +ACE_EXPLOSION_REFLECTION(74,50); +ACE_EXPLOSION_REFLECTION(74,60); +ACE_EXPLOSION_REFLECTION(74,70); +ACE_EXPLOSION_REFLECTION(74,80); +ACE_EXPLOSION_REFLECTION(74,90); +ACE_EXPLOSION_REFLECTION(74,100); +ACE_EXPLOSION_REFLECTION(74,110); +ACE_EXPLOSION_REFLECTION(74,120); +ACE_EXPLOSION_REFLECTION(74,130); +ACE_EXPLOSION_REFLECTION(74,140); +ACE_EXPLOSION_REFLECTION(74,150); +ACE_EXPLOSION_REFLECTION(74,160); +ACE_EXPLOSION_REFLECTION(74,170); +ACE_EXPLOSION_REFLECTION(74,180); +ACE_EXPLOSION_REFLECTION(74,190); +ACE_EXPLOSION_REFLECTION(74,200); +ACE_EXPLOSION_REFLECTION(74,210); +ACE_EXPLOSION_REFLECTION(74,220); +ACE_EXPLOSION_REFLECTION(74,230); +ACE_EXPLOSION_REFLECTION(74,240); +ACE_EXPLOSION_REFLECTION(74,250); +ACE_EXPLOSION_REFLECTION(74,260); +ACE_EXPLOSION_REFLECTION(74,270); +ACE_EXPLOSION_REFLECTION(74,280); +ACE_EXPLOSION_REFLECTION(74,290); +ACE_EXPLOSION_REFLECTION(74,300); +ACE_EXPLOSION_REFLECTION(74,310); +ACE_EXPLOSION_REFLECTION(74,320); +ACE_EXPLOSION_REFLECTION(74,330); +ACE_EXPLOSION_REFLECTION(74,340); +ACE_EXPLOSION_REFLECTION(74,350); +ACE_EXPLOSION_REFLECTION(74,360); +ACE_EXPLOSION_REFLECTION(74,370); +ACE_EXPLOSION_REFLECTION(74,380); +ACE_EXPLOSION_REFLECTION(74,390); +ACE_EXPLOSION_REFLECTION(74,400); +ACE_EXPLOSION_REFLECTION(74,410); +ACE_EXPLOSION_REFLECTION(74,420); +ACE_EXPLOSION_REFLECTION(74,430); +ACE_EXPLOSION_REFLECTION(74,440); +ACE_EXPLOSION_REFLECTION(74,450); +ACE_EXPLOSION_REFLECTION(74,460); +ACE_EXPLOSION_REFLECTION(74,470); +ACE_EXPLOSION_REFLECTION(74,480); +ACE_EXPLOSION_REFLECTION(74,490); +ACE_EXPLOSION_REFLECTION(74,500); +ACE_EXPLOSION_REFLECTION(76,10); +ACE_EXPLOSION_REFLECTION(76,20); +ACE_EXPLOSION_REFLECTION(76,30); +ACE_EXPLOSION_REFLECTION(76,40); +ACE_EXPLOSION_REFLECTION(76,50); +ACE_EXPLOSION_REFLECTION(76,60); +ACE_EXPLOSION_REFLECTION(76,70); +ACE_EXPLOSION_REFLECTION(76,80); +ACE_EXPLOSION_REFLECTION(76,90); +ACE_EXPLOSION_REFLECTION(76,100); +ACE_EXPLOSION_REFLECTION(76,110); +ACE_EXPLOSION_REFLECTION(76,120); +ACE_EXPLOSION_REFLECTION(76,130); +ACE_EXPLOSION_REFLECTION(76,140); +ACE_EXPLOSION_REFLECTION(76,150); +ACE_EXPLOSION_REFLECTION(76,160); +ACE_EXPLOSION_REFLECTION(76,170); +ACE_EXPLOSION_REFLECTION(76,180); +ACE_EXPLOSION_REFLECTION(76,190); +ACE_EXPLOSION_REFLECTION(76,200); +ACE_EXPLOSION_REFLECTION(76,210); +ACE_EXPLOSION_REFLECTION(76,220); +ACE_EXPLOSION_REFLECTION(76,230); +ACE_EXPLOSION_REFLECTION(76,240); +ACE_EXPLOSION_REFLECTION(76,250); +ACE_EXPLOSION_REFLECTION(76,260); +ACE_EXPLOSION_REFLECTION(76,270); +ACE_EXPLOSION_REFLECTION(76,280); +ACE_EXPLOSION_REFLECTION(76,290); +ACE_EXPLOSION_REFLECTION(76,300); +ACE_EXPLOSION_REFLECTION(76,310); +ACE_EXPLOSION_REFLECTION(76,320); +ACE_EXPLOSION_REFLECTION(76,330); +ACE_EXPLOSION_REFLECTION(76,340); +ACE_EXPLOSION_REFLECTION(76,350); +ACE_EXPLOSION_REFLECTION(76,360); +ACE_EXPLOSION_REFLECTION(76,370); +ACE_EXPLOSION_REFLECTION(76,380); +ACE_EXPLOSION_REFLECTION(76,390); +ACE_EXPLOSION_REFLECTION(76,400); +ACE_EXPLOSION_REFLECTION(76,410); +ACE_EXPLOSION_REFLECTION(76,420); +ACE_EXPLOSION_REFLECTION(76,430); +ACE_EXPLOSION_REFLECTION(76,440); +ACE_EXPLOSION_REFLECTION(76,450); +ACE_EXPLOSION_REFLECTION(76,460); +ACE_EXPLOSION_REFLECTION(76,470); +ACE_EXPLOSION_REFLECTION(76,480); +ACE_EXPLOSION_REFLECTION(76,490); +ACE_EXPLOSION_REFLECTION(76,500); +ACE_EXPLOSION_REFLECTION(78,10); +ACE_EXPLOSION_REFLECTION(78,20); +ACE_EXPLOSION_REFLECTION(78,30); +ACE_EXPLOSION_REFLECTION(78,40); +ACE_EXPLOSION_REFLECTION(78,50); +ACE_EXPLOSION_REFLECTION(78,60); +ACE_EXPLOSION_REFLECTION(78,70); +ACE_EXPLOSION_REFLECTION(78,80); +ACE_EXPLOSION_REFLECTION(78,90); +ACE_EXPLOSION_REFLECTION(78,100); +ACE_EXPLOSION_REFLECTION(78,110); +ACE_EXPLOSION_REFLECTION(78,120); +ACE_EXPLOSION_REFLECTION(78,130); +ACE_EXPLOSION_REFLECTION(78,140); +ACE_EXPLOSION_REFLECTION(78,150); +ACE_EXPLOSION_REFLECTION(78,160); +ACE_EXPLOSION_REFLECTION(78,170); +ACE_EXPLOSION_REFLECTION(78,180); +ACE_EXPLOSION_REFLECTION(78,190); +ACE_EXPLOSION_REFLECTION(78,200); +ACE_EXPLOSION_REFLECTION(78,210); +ACE_EXPLOSION_REFLECTION(78,220); +ACE_EXPLOSION_REFLECTION(78,230); +ACE_EXPLOSION_REFLECTION(78,240); +ACE_EXPLOSION_REFLECTION(78,250); +ACE_EXPLOSION_REFLECTION(78,260); +ACE_EXPLOSION_REFLECTION(78,270); +ACE_EXPLOSION_REFLECTION(78,280); +ACE_EXPLOSION_REFLECTION(78,290); +ACE_EXPLOSION_REFLECTION(78,300); +ACE_EXPLOSION_REFLECTION(78,310); +ACE_EXPLOSION_REFLECTION(78,320); +ACE_EXPLOSION_REFLECTION(78,330); +ACE_EXPLOSION_REFLECTION(78,340); +ACE_EXPLOSION_REFLECTION(78,350); +ACE_EXPLOSION_REFLECTION(78,360); +ACE_EXPLOSION_REFLECTION(78,370); +ACE_EXPLOSION_REFLECTION(78,380); +ACE_EXPLOSION_REFLECTION(78,390); +ACE_EXPLOSION_REFLECTION(78,400); +ACE_EXPLOSION_REFLECTION(78,410); +ACE_EXPLOSION_REFLECTION(78,420); +ACE_EXPLOSION_REFLECTION(78,430); +ACE_EXPLOSION_REFLECTION(78,440); +ACE_EXPLOSION_REFLECTION(78,450); +ACE_EXPLOSION_REFLECTION(78,460); +ACE_EXPLOSION_REFLECTION(78,470); +ACE_EXPLOSION_REFLECTION(78,480); +ACE_EXPLOSION_REFLECTION(78,490); +ACE_EXPLOSION_REFLECTION(78,500); +ACE_EXPLOSION_REFLECTION(80,10); +ACE_EXPLOSION_REFLECTION(80,20); +ACE_EXPLOSION_REFLECTION(80,30); +ACE_EXPLOSION_REFLECTION(80,40); +ACE_EXPLOSION_REFLECTION(80,50); +ACE_EXPLOSION_REFLECTION(80,60); +ACE_EXPLOSION_REFLECTION(80,70); +ACE_EXPLOSION_REFLECTION(80,80); +ACE_EXPLOSION_REFLECTION(80,90); +ACE_EXPLOSION_REFLECTION(80,100); +ACE_EXPLOSION_REFLECTION(80,110); +ACE_EXPLOSION_REFLECTION(80,120); +ACE_EXPLOSION_REFLECTION(80,130); +ACE_EXPLOSION_REFLECTION(80,140); +ACE_EXPLOSION_REFLECTION(80,150); +ACE_EXPLOSION_REFLECTION(80,160); +ACE_EXPLOSION_REFLECTION(80,170); +ACE_EXPLOSION_REFLECTION(80,180); +ACE_EXPLOSION_REFLECTION(80,190); +ACE_EXPLOSION_REFLECTION(80,200); +ACE_EXPLOSION_REFLECTION(80,210); +ACE_EXPLOSION_REFLECTION(80,220); +ACE_EXPLOSION_REFLECTION(80,230); +ACE_EXPLOSION_REFLECTION(80,240); +ACE_EXPLOSION_REFLECTION(80,250); +ACE_EXPLOSION_REFLECTION(80,260); +ACE_EXPLOSION_REFLECTION(80,270); +ACE_EXPLOSION_REFLECTION(80,280); +ACE_EXPLOSION_REFLECTION(80,290); +ACE_EXPLOSION_REFLECTION(80,300); +ACE_EXPLOSION_REFLECTION(80,310); +ACE_EXPLOSION_REFLECTION(80,320); +ACE_EXPLOSION_REFLECTION(80,330); +ACE_EXPLOSION_REFLECTION(80,340); +ACE_EXPLOSION_REFLECTION(80,350); +ACE_EXPLOSION_REFLECTION(80,360); +ACE_EXPLOSION_REFLECTION(80,370); +ACE_EXPLOSION_REFLECTION(80,380); +ACE_EXPLOSION_REFLECTION(80,390); +ACE_EXPLOSION_REFLECTION(80,400); +ACE_EXPLOSION_REFLECTION(80,410); +ACE_EXPLOSION_REFLECTION(80,420); +ACE_EXPLOSION_REFLECTION(80,430); +ACE_EXPLOSION_REFLECTION(80,440); +ACE_EXPLOSION_REFLECTION(80,450); +ACE_EXPLOSION_REFLECTION(80,460); +ACE_EXPLOSION_REFLECTION(80,470); +ACE_EXPLOSION_REFLECTION(80,480); +ACE_EXPLOSION_REFLECTION(80,490); +ACE_EXPLOSION_REFLECTION(80,500); +ACE_EXPLOSION_REFLECTION(82,10); +ACE_EXPLOSION_REFLECTION(82,20); +ACE_EXPLOSION_REFLECTION(82,30); +ACE_EXPLOSION_REFLECTION(82,40); +ACE_EXPLOSION_REFLECTION(82,50); +ACE_EXPLOSION_REFLECTION(82,60); +ACE_EXPLOSION_REFLECTION(82,70); +ACE_EXPLOSION_REFLECTION(82,80); +ACE_EXPLOSION_REFLECTION(82,90); +ACE_EXPLOSION_REFLECTION(82,100); +ACE_EXPLOSION_REFLECTION(82,110); +ACE_EXPLOSION_REFLECTION(82,120); +ACE_EXPLOSION_REFLECTION(82,130); +ACE_EXPLOSION_REFLECTION(82,140); +ACE_EXPLOSION_REFLECTION(82,150); +ACE_EXPLOSION_REFLECTION(82,160); +ACE_EXPLOSION_REFLECTION(82,170); +ACE_EXPLOSION_REFLECTION(82,180); +ACE_EXPLOSION_REFLECTION(82,190); +ACE_EXPLOSION_REFLECTION(82,200); +ACE_EXPLOSION_REFLECTION(82,210); +ACE_EXPLOSION_REFLECTION(82,220); +ACE_EXPLOSION_REFLECTION(82,230); +ACE_EXPLOSION_REFLECTION(82,240); +ACE_EXPLOSION_REFLECTION(82,250); +ACE_EXPLOSION_REFLECTION(82,260); +ACE_EXPLOSION_REFLECTION(82,270); +ACE_EXPLOSION_REFLECTION(82,280); +ACE_EXPLOSION_REFLECTION(82,290); +ACE_EXPLOSION_REFLECTION(82,300); +ACE_EXPLOSION_REFLECTION(82,310); +ACE_EXPLOSION_REFLECTION(82,320); +ACE_EXPLOSION_REFLECTION(82,330); +ACE_EXPLOSION_REFLECTION(82,340); +ACE_EXPLOSION_REFLECTION(82,350); +ACE_EXPLOSION_REFLECTION(82,360); +ACE_EXPLOSION_REFLECTION(82,370); +ACE_EXPLOSION_REFLECTION(82,380); +ACE_EXPLOSION_REFLECTION(82,390); +ACE_EXPLOSION_REFLECTION(82,400); +ACE_EXPLOSION_REFLECTION(82,410); +ACE_EXPLOSION_REFLECTION(82,420); +ACE_EXPLOSION_REFLECTION(82,430); +ACE_EXPLOSION_REFLECTION(82,440); +ACE_EXPLOSION_REFLECTION(82,450); +ACE_EXPLOSION_REFLECTION(82,460); +ACE_EXPLOSION_REFLECTION(82,470); +ACE_EXPLOSION_REFLECTION(82,480); +ACE_EXPLOSION_REFLECTION(82,490); +ACE_EXPLOSION_REFLECTION(82,500); +ACE_EXPLOSION_REFLECTION(84,10); +ACE_EXPLOSION_REFLECTION(84,20); +ACE_EXPLOSION_REFLECTION(84,30); +ACE_EXPLOSION_REFLECTION(84,40); +ACE_EXPLOSION_REFLECTION(84,50); +ACE_EXPLOSION_REFLECTION(84,60); +ACE_EXPLOSION_REFLECTION(84,70); +ACE_EXPLOSION_REFLECTION(84,80); +ACE_EXPLOSION_REFLECTION(84,90); +ACE_EXPLOSION_REFLECTION(84,100); +ACE_EXPLOSION_REFLECTION(84,110); +ACE_EXPLOSION_REFLECTION(84,120); +ACE_EXPLOSION_REFLECTION(84,130); +ACE_EXPLOSION_REFLECTION(84,140); +ACE_EXPLOSION_REFLECTION(84,150); +ACE_EXPLOSION_REFLECTION(84,160); +ACE_EXPLOSION_REFLECTION(84,170); +ACE_EXPLOSION_REFLECTION(84,180); +ACE_EXPLOSION_REFLECTION(84,190); +ACE_EXPLOSION_REFLECTION(84,200); +ACE_EXPLOSION_REFLECTION(84,210); +ACE_EXPLOSION_REFLECTION(84,220); +ACE_EXPLOSION_REFLECTION(84,230); +ACE_EXPLOSION_REFLECTION(84,240); +ACE_EXPLOSION_REFLECTION(84,250); +ACE_EXPLOSION_REFLECTION(84,260); +ACE_EXPLOSION_REFLECTION(84,270); +ACE_EXPLOSION_REFLECTION(84,280); +ACE_EXPLOSION_REFLECTION(84,290); +ACE_EXPLOSION_REFLECTION(84,300); +ACE_EXPLOSION_REFLECTION(84,310); +ACE_EXPLOSION_REFLECTION(84,320); +ACE_EXPLOSION_REFLECTION(84,330); +ACE_EXPLOSION_REFLECTION(84,340); +ACE_EXPLOSION_REFLECTION(84,350); +ACE_EXPLOSION_REFLECTION(84,360); +ACE_EXPLOSION_REFLECTION(84,370); +ACE_EXPLOSION_REFLECTION(84,380); +ACE_EXPLOSION_REFLECTION(84,390); +ACE_EXPLOSION_REFLECTION(84,400); +ACE_EXPLOSION_REFLECTION(84,410); +ACE_EXPLOSION_REFLECTION(84,420); +ACE_EXPLOSION_REFLECTION(84,430); +ACE_EXPLOSION_REFLECTION(84,440); +ACE_EXPLOSION_REFLECTION(84,450); +ACE_EXPLOSION_REFLECTION(84,460); +ACE_EXPLOSION_REFLECTION(84,470); +ACE_EXPLOSION_REFLECTION(84,480); +ACE_EXPLOSION_REFLECTION(84,490); +ACE_EXPLOSION_REFLECTION(84,500); +ACE_EXPLOSION_REFLECTION(86,10); +ACE_EXPLOSION_REFLECTION(86,20); +ACE_EXPLOSION_REFLECTION(86,30); +ACE_EXPLOSION_REFLECTION(86,40); +ACE_EXPLOSION_REFLECTION(86,50); +ACE_EXPLOSION_REFLECTION(86,60); +ACE_EXPLOSION_REFLECTION(86,70); +ACE_EXPLOSION_REFLECTION(86,80); +ACE_EXPLOSION_REFLECTION(86,90); +ACE_EXPLOSION_REFLECTION(86,100); +ACE_EXPLOSION_REFLECTION(86,110); +ACE_EXPLOSION_REFLECTION(86,120); +ACE_EXPLOSION_REFLECTION(86,130); +ACE_EXPLOSION_REFLECTION(86,140); +ACE_EXPLOSION_REFLECTION(86,150); +ACE_EXPLOSION_REFLECTION(86,160); +ACE_EXPLOSION_REFLECTION(86,170); +ACE_EXPLOSION_REFLECTION(86,180); +ACE_EXPLOSION_REFLECTION(86,190); +ACE_EXPLOSION_REFLECTION(86,200); +ACE_EXPLOSION_REFLECTION(86,210); +ACE_EXPLOSION_REFLECTION(86,220); +ACE_EXPLOSION_REFLECTION(86,230); +ACE_EXPLOSION_REFLECTION(86,240); +ACE_EXPLOSION_REFLECTION(86,250); +ACE_EXPLOSION_REFLECTION(86,260); +ACE_EXPLOSION_REFLECTION(86,270); +ACE_EXPLOSION_REFLECTION(86,280); +ACE_EXPLOSION_REFLECTION(86,290); +ACE_EXPLOSION_REFLECTION(86,300); +ACE_EXPLOSION_REFLECTION(86,310); +ACE_EXPLOSION_REFLECTION(86,320); +ACE_EXPLOSION_REFLECTION(86,330); +ACE_EXPLOSION_REFLECTION(86,340); +ACE_EXPLOSION_REFLECTION(86,350); +ACE_EXPLOSION_REFLECTION(86,360); +ACE_EXPLOSION_REFLECTION(86,370); +ACE_EXPLOSION_REFLECTION(86,380); +ACE_EXPLOSION_REFLECTION(86,390); +ACE_EXPLOSION_REFLECTION(86,400); +ACE_EXPLOSION_REFLECTION(86,410); +ACE_EXPLOSION_REFLECTION(86,420); +ACE_EXPLOSION_REFLECTION(86,430); +ACE_EXPLOSION_REFLECTION(86,440); +ACE_EXPLOSION_REFLECTION(86,450); +ACE_EXPLOSION_REFLECTION(86,460); +ACE_EXPLOSION_REFLECTION(86,470); +ACE_EXPLOSION_REFLECTION(86,480); +ACE_EXPLOSION_REFLECTION(86,490); +ACE_EXPLOSION_REFLECTION(86,500); +ACE_EXPLOSION_REFLECTION(88,10); +ACE_EXPLOSION_REFLECTION(88,20); +ACE_EXPLOSION_REFLECTION(88,30); +ACE_EXPLOSION_REFLECTION(88,40); +ACE_EXPLOSION_REFLECTION(88,50); +ACE_EXPLOSION_REFLECTION(88,60); +ACE_EXPLOSION_REFLECTION(88,70); +ACE_EXPLOSION_REFLECTION(88,80); +ACE_EXPLOSION_REFLECTION(88,90); +ACE_EXPLOSION_REFLECTION(88,100); +ACE_EXPLOSION_REFLECTION(88,110); +ACE_EXPLOSION_REFLECTION(88,120); +ACE_EXPLOSION_REFLECTION(88,130); +ACE_EXPLOSION_REFLECTION(88,140); +ACE_EXPLOSION_REFLECTION(88,150); +ACE_EXPLOSION_REFLECTION(88,160); +ACE_EXPLOSION_REFLECTION(88,170); +ACE_EXPLOSION_REFLECTION(88,180); +ACE_EXPLOSION_REFLECTION(88,190); +ACE_EXPLOSION_REFLECTION(88,200); +ACE_EXPLOSION_REFLECTION(88,210); +ACE_EXPLOSION_REFLECTION(88,220); +ACE_EXPLOSION_REFLECTION(88,230); +ACE_EXPLOSION_REFLECTION(88,240); +ACE_EXPLOSION_REFLECTION(88,250); +ACE_EXPLOSION_REFLECTION(88,260); +ACE_EXPLOSION_REFLECTION(88,270); +ACE_EXPLOSION_REFLECTION(88,280); +ACE_EXPLOSION_REFLECTION(88,290); +ACE_EXPLOSION_REFLECTION(88,300); +ACE_EXPLOSION_REFLECTION(88,310); +ACE_EXPLOSION_REFLECTION(88,320); +ACE_EXPLOSION_REFLECTION(88,330); +ACE_EXPLOSION_REFLECTION(88,340); +ACE_EXPLOSION_REFLECTION(88,350); +ACE_EXPLOSION_REFLECTION(88,360); +ACE_EXPLOSION_REFLECTION(88,370); +ACE_EXPLOSION_REFLECTION(88,380); +ACE_EXPLOSION_REFLECTION(88,390); +ACE_EXPLOSION_REFLECTION(88,400); +ACE_EXPLOSION_REFLECTION(88,410); +ACE_EXPLOSION_REFLECTION(88,420); +ACE_EXPLOSION_REFLECTION(88,430); +ACE_EXPLOSION_REFLECTION(88,440); +ACE_EXPLOSION_REFLECTION(88,450); +ACE_EXPLOSION_REFLECTION(88,460); +ACE_EXPLOSION_REFLECTION(88,470); +ACE_EXPLOSION_REFLECTION(88,480); +ACE_EXPLOSION_REFLECTION(88,490); +ACE_EXPLOSION_REFLECTION(88,500); +ACE_EXPLOSION_REFLECTION(90,10); +ACE_EXPLOSION_REFLECTION(90,20); +ACE_EXPLOSION_REFLECTION(90,30); +ACE_EXPLOSION_REFLECTION(90,40); +ACE_EXPLOSION_REFLECTION(90,50); +ACE_EXPLOSION_REFLECTION(90,60); +ACE_EXPLOSION_REFLECTION(90,70); +ACE_EXPLOSION_REFLECTION(90,80); +ACE_EXPLOSION_REFLECTION(90,90); +ACE_EXPLOSION_REFLECTION(90,100); +ACE_EXPLOSION_REFLECTION(90,110); +ACE_EXPLOSION_REFLECTION(90,120); +ACE_EXPLOSION_REFLECTION(90,130); +ACE_EXPLOSION_REFLECTION(90,140); +ACE_EXPLOSION_REFLECTION(90,150); +ACE_EXPLOSION_REFLECTION(90,160); +ACE_EXPLOSION_REFLECTION(90,170); +ACE_EXPLOSION_REFLECTION(90,180); +ACE_EXPLOSION_REFLECTION(90,190); +ACE_EXPLOSION_REFLECTION(90,200); +ACE_EXPLOSION_REFLECTION(90,210); +ACE_EXPLOSION_REFLECTION(90,220); +ACE_EXPLOSION_REFLECTION(90,230); +ACE_EXPLOSION_REFLECTION(90,240); +ACE_EXPLOSION_REFLECTION(90,250); +ACE_EXPLOSION_REFLECTION(90,260); +ACE_EXPLOSION_REFLECTION(90,270); +ACE_EXPLOSION_REFLECTION(90,280); +ACE_EXPLOSION_REFLECTION(90,290); +ACE_EXPLOSION_REFLECTION(90,300); +ACE_EXPLOSION_REFLECTION(90,310); +ACE_EXPLOSION_REFLECTION(90,320); +ACE_EXPLOSION_REFLECTION(90,330); +ACE_EXPLOSION_REFLECTION(90,340); +ACE_EXPLOSION_REFLECTION(90,350); +ACE_EXPLOSION_REFLECTION(90,360); +ACE_EXPLOSION_REFLECTION(90,370); +ACE_EXPLOSION_REFLECTION(90,380); +ACE_EXPLOSION_REFLECTION(90,390); +ACE_EXPLOSION_REFLECTION(90,400); +ACE_EXPLOSION_REFLECTION(90,410); +ACE_EXPLOSION_REFLECTION(90,420); +ACE_EXPLOSION_REFLECTION(90,430); +ACE_EXPLOSION_REFLECTION(90,440); +ACE_EXPLOSION_REFLECTION(90,450); +ACE_EXPLOSION_REFLECTION(90,460); +ACE_EXPLOSION_REFLECTION(90,470); +ACE_EXPLOSION_REFLECTION(90,480); +ACE_EXPLOSION_REFLECTION(90,490); +ACE_EXPLOSION_REFLECTION(90,500); +ACE_EXPLOSION_REFLECTION(92,10); +ACE_EXPLOSION_REFLECTION(92,20); +ACE_EXPLOSION_REFLECTION(92,30); +ACE_EXPLOSION_REFLECTION(92,40); +ACE_EXPLOSION_REFLECTION(92,50); +ACE_EXPLOSION_REFLECTION(92,60); +ACE_EXPLOSION_REFLECTION(92,70); +ACE_EXPLOSION_REFLECTION(92,80); +ACE_EXPLOSION_REFLECTION(92,90); +ACE_EXPLOSION_REFLECTION(92,100); +ACE_EXPLOSION_REFLECTION(92,110); +ACE_EXPLOSION_REFLECTION(92,120); +ACE_EXPLOSION_REFLECTION(92,130); +ACE_EXPLOSION_REFLECTION(92,140); +ACE_EXPLOSION_REFLECTION(92,150); +ACE_EXPLOSION_REFLECTION(92,160); +ACE_EXPLOSION_REFLECTION(92,170); +ACE_EXPLOSION_REFLECTION(92,180); +ACE_EXPLOSION_REFLECTION(92,190); +ACE_EXPLOSION_REFLECTION(92,200); +ACE_EXPLOSION_REFLECTION(92,210); +ACE_EXPLOSION_REFLECTION(92,220); +ACE_EXPLOSION_REFLECTION(92,230); +ACE_EXPLOSION_REFLECTION(92,240); +ACE_EXPLOSION_REFLECTION(92,250); +ACE_EXPLOSION_REFLECTION(92,260); +ACE_EXPLOSION_REFLECTION(92,270); +ACE_EXPLOSION_REFLECTION(92,280); +ACE_EXPLOSION_REFLECTION(92,290); +ACE_EXPLOSION_REFLECTION(92,300); +ACE_EXPLOSION_REFLECTION(92,310); +ACE_EXPLOSION_REFLECTION(92,320); +ACE_EXPLOSION_REFLECTION(92,330); +ACE_EXPLOSION_REFLECTION(92,340); +ACE_EXPLOSION_REFLECTION(92,350); +ACE_EXPLOSION_REFLECTION(92,360); +ACE_EXPLOSION_REFLECTION(92,370); +ACE_EXPLOSION_REFLECTION(92,380); +ACE_EXPLOSION_REFLECTION(92,390); +ACE_EXPLOSION_REFLECTION(92,400); +ACE_EXPLOSION_REFLECTION(92,410); +ACE_EXPLOSION_REFLECTION(92,420); +ACE_EXPLOSION_REFLECTION(92,430); +ACE_EXPLOSION_REFLECTION(92,440); +ACE_EXPLOSION_REFLECTION(92,450); +ACE_EXPLOSION_REFLECTION(92,460); +ACE_EXPLOSION_REFLECTION(92,470); +ACE_EXPLOSION_REFLECTION(92,480); +ACE_EXPLOSION_REFLECTION(92,490); +ACE_EXPLOSION_REFLECTION(92,500); +ACE_EXPLOSION_REFLECTION(94,10); +ACE_EXPLOSION_REFLECTION(94,20); +ACE_EXPLOSION_REFLECTION(94,30); +ACE_EXPLOSION_REFLECTION(94,40); +ACE_EXPLOSION_REFLECTION(94,50); +ACE_EXPLOSION_REFLECTION(94,60); +ACE_EXPLOSION_REFLECTION(94,70); +ACE_EXPLOSION_REFLECTION(94,80); +ACE_EXPLOSION_REFLECTION(94,90); +ACE_EXPLOSION_REFLECTION(94,100); +ACE_EXPLOSION_REFLECTION(94,110); +ACE_EXPLOSION_REFLECTION(94,120); +ACE_EXPLOSION_REFLECTION(94,130); +ACE_EXPLOSION_REFLECTION(94,140); +ACE_EXPLOSION_REFLECTION(94,150); +ACE_EXPLOSION_REFLECTION(94,160); +ACE_EXPLOSION_REFLECTION(94,170); +ACE_EXPLOSION_REFLECTION(94,180); +ACE_EXPLOSION_REFLECTION(94,190); +ACE_EXPLOSION_REFLECTION(94,200); +ACE_EXPLOSION_REFLECTION(94,210); +ACE_EXPLOSION_REFLECTION(94,220); +ACE_EXPLOSION_REFLECTION(94,230); +ACE_EXPLOSION_REFLECTION(94,240); +ACE_EXPLOSION_REFLECTION(94,250); +ACE_EXPLOSION_REFLECTION(94,260); +ACE_EXPLOSION_REFLECTION(94,270); +ACE_EXPLOSION_REFLECTION(94,280); +ACE_EXPLOSION_REFLECTION(94,290); +ACE_EXPLOSION_REFLECTION(94,300); +ACE_EXPLOSION_REFLECTION(94,310); +ACE_EXPLOSION_REFLECTION(94,320); +ACE_EXPLOSION_REFLECTION(94,330); +ACE_EXPLOSION_REFLECTION(94,340); +ACE_EXPLOSION_REFLECTION(94,350); +ACE_EXPLOSION_REFLECTION(94,360); +ACE_EXPLOSION_REFLECTION(94,370); +ACE_EXPLOSION_REFLECTION(94,380); +ACE_EXPLOSION_REFLECTION(94,390); +ACE_EXPLOSION_REFLECTION(94,400); +ACE_EXPLOSION_REFLECTION(94,410); +ACE_EXPLOSION_REFLECTION(94,420); +ACE_EXPLOSION_REFLECTION(94,430); +ACE_EXPLOSION_REFLECTION(94,440); +ACE_EXPLOSION_REFLECTION(94,450); +ACE_EXPLOSION_REFLECTION(94,460); +ACE_EXPLOSION_REFLECTION(94,470); +ACE_EXPLOSION_REFLECTION(94,480); +ACE_EXPLOSION_REFLECTION(94,490); +ACE_EXPLOSION_REFLECTION(94,500); +ACE_EXPLOSION_REFLECTION(96,10); +ACE_EXPLOSION_REFLECTION(96,20); +ACE_EXPLOSION_REFLECTION(96,30); +ACE_EXPLOSION_REFLECTION(96,40); +ACE_EXPLOSION_REFLECTION(96,50); +ACE_EXPLOSION_REFLECTION(96,60); +ACE_EXPLOSION_REFLECTION(96,70); +ACE_EXPLOSION_REFLECTION(96,80); +ACE_EXPLOSION_REFLECTION(96,90); +ACE_EXPLOSION_REFLECTION(96,100); +ACE_EXPLOSION_REFLECTION(96,110); +ACE_EXPLOSION_REFLECTION(96,120); +ACE_EXPLOSION_REFLECTION(96,130); +ACE_EXPLOSION_REFLECTION(96,140); +ACE_EXPLOSION_REFLECTION(96,150); +ACE_EXPLOSION_REFLECTION(96,160); +ACE_EXPLOSION_REFLECTION(96,170); +ACE_EXPLOSION_REFLECTION(96,180); +ACE_EXPLOSION_REFLECTION(96,190); +ACE_EXPLOSION_REFLECTION(96,200); +ACE_EXPLOSION_REFLECTION(96,210); +ACE_EXPLOSION_REFLECTION(96,220); +ACE_EXPLOSION_REFLECTION(96,230); +ACE_EXPLOSION_REFLECTION(96,240); +ACE_EXPLOSION_REFLECTION(96,250); +ACE_EXPLOSION_REFLECTION(96,260); +ACE_EXPLOSION_REFLECTION(96,270); +ACE_EXPLOSION_REFLECTION(96,280); +ACE_EXPLOSION_REFLECTION(96,290); +ACE_EXPLOSION_REFLECTION(96,300); +ACE_EXPLOSION_REFLECTION(96,310); +ACE_EXPLOSION_REFLECTION(96,320); +ACE_EXPLOSION_REFLECTION(96,330); +ACE_EXPLOSION_REFLECTION(96,340); +ACE_EXPLOSION_REFLECTION(96,350); +ACE_EXPLOSION_REFLECTION(96,360); +ACE_EXPLOSION_REFLECTION(96,370); +ACE_EXPLOSION_REFLECTION(96,380); +ACE_EXPLOSION_REFLECTION(96,390); +ACE_EXPLOSION_REFLECTION(96,400); +ACE_EXPLOSION_REFLECTION(96,410); +ACE_EXPLOSION_REFLECTION(96,420); +ACE_EXPLOSION_REFLECTION(96,430); +ACE_EXPLOSION_REFLECTION(96,440); +ACE_EXPLOSION_REFLECTION(96,450); +ACE_EXPLOSION_REFLECTION(96,460); +ACE_EXPLOSION_REFLECTION(96,470); +ACE_EXPLOSION_REFLECTION(96,480); +ACE_EXPLOSION_REFLECTION(96,490); +ACE_EXPLOSION_REFLECTION(96,500); +ACE_EXPLOSION_REFLECTION(98,10); +ACE_EXPLOSION_REFLECTION(98,20); +ACE_EXPLOSION_REFLECTION(98,30); +ACE_EXPLOSION_REFLECTION(98,40); +ACE_EXPLOSION_REFLECTION(98,50); +ACE_EXPLOSION_REFLECTION(98,60); +ACE_EXPLOSION_REFLECTION(98,70); +ACE_EXPLOSION_REFLECTION(98,80); +ACE_EXPLOSION_REFLECTION(98,90); +ACE_EXPLOSION_REFLECTION(98,100); +ACE_EXPLOSION_REFLECTION(98,110); +ACE_EXPLOSION_REFLECTION(98,120); +ACE_EXPLOSION_REFLECTION(98,130); +ACE_EXPLOSION_REFLECTION(98,140); +ACE_EXPLOSION_REFLECTION(98,150); +ACE_EXPLOSION_REFLECTION(98,160); +ACE_EXPLOSION_REFLECTION(98,170); +ACE_EXPLOSION_REFLECTION(98,180); +ACE_EXPLOSION_REFLECTION(98,190); +ACE_EXPLOSION_REFLECTION(98,200); +ACE_EXPLOSION_REFLECTION(98,210); +ACE_EXPLOSION_REFLECTION(98,220); +ACE_EXPLOSION_REFLECTION(98,230); +ACE_EXPLOSION_REFLECTION(98,240); +ACE_EXPLOSION_REFLECTION(98,250); +ACE_EXPLOSION_REFLECTION(98,260); +ACE_EXPLOSION_REFLECTION(98,270); +ACE_EXPLOSION_REFLECTION(98,280); +ACE_EXPLOSION_REFLECTION(98,290); +ACE_EXPLOSION_REFLECTION(98,300); +ACE_EXPLOSION_REFLECTION(98,310); +ACE_EXPLOSION_REFLECTION(98,320); +ACE_EXPLOSION_REFLECTION(98,330); +ACE_EXPLOSION_REFLECTION(98,340); +ACE_EXPLOSION_REFLECTION(98,350); +ACE_EXPLOSION_REFLECTION(98,360); +ACE_EXPLOSION_REFLECTION(98,370); +ACE_EXPLOSION_REFLECTION(98,380); +ACE_EXPLOSION_REFLECTION(98,390); +ACE_EXPLOSION_REFLECTION(98,400); +ACE_EXPLOSION_REFLECTION(98,410); +ACE_EXPLOSION_REFLECTION(98,420); +ACE_EXPLOSION_REFLECTION(98,430); +ACE_EXPLOSION_REFLECTION(98,440); +ACE_EXPLOSION_REFLECTION(98,450); +ACE_EXPLOSION_REFLECTION(98,460); +ACE_EXPLOSION_REFLECTION(98,470); +ACE_EXPLOSION_REFLECTION(98,480); +ACE_EXPLOSION_REFLECTION(98,490); +ACE_EXPLOSION_REFLECTION(98,500); +ACE_EXPLOSION_REFLECTION(100,10); +ACE_EXPLOSION_REFLECTION(100,20); +ACE_EXPLOSION_REFLECTION(100,30); +ACE_EXPLOSION_REFLECTION(100,40); +ACE_EXPLOSION_REFLECTION(100,50); +ACE_EXPLOSION_REFLECTION(100,60); +ACE_EXPLOSION_REFLECTION(100,70); +ACE_EXPLOSION_REFLECTION(100,80); +ACE_EXPLOSION_REFLECTION(100,90); +ACE_EXPLOSION_REFLECTION(100,100); +ACE_EXPLOSION_REFLECTION(100,110); +ACE_EXPLOSION_REFLECTION(100,120); +ACE_EXPLOSION_REFLECTION(100,130); +ACE_EXPLOSION_REFLECTION(100,140); +ACE_EXPLOSION_REFLECTION(100,150); +ACE_EXPLOSION_REFLECTION(100,160); +ACE_EXPLOSION_REFLECTION(100,170); +ACE_EXPLOSION_REFLECTION(100,180); +ACE_EXPLOSION_REFLECTION(100,190); +ACE_EXPLOSION_REFLECTION(100,200); +ACE_EXPLOSION_REFLECTION(100,210); +ACE_EXPLOSION_REFLECTION(100,220); +ACE_EXPLOSION_REFLECTION(100,230); +ACE_EXPLOSION_REFLECTION(100,240); +ACE_EXPLOSION_REFLECTION(100,250); +ACE_EXPLOSION_REFLECTION(100,260); +ACE_EXPLOSION_REFLECTION(100,270); +ACE_EXPLOSION_REFLECTION(100,280); +ACE_EXPLOSION_REFLECTION(100,290); +ACE_EXPLOSION_REFLECTION(100,300); +ACE_EXPLOSION_REFLECTION(100,310); +ACE_EXPLOSION_REFLECTION(100,320); +ACE_EXPLOSION_REFLECTION(100,330); +ACE_EXPLOSION_REFLECTION(100,340); +ACE_EXPLOSION_REFLECTION(100,350); +ACE_EXPLOSION_REFLECTION(100,360); +ACE_EXPLOSION_REFLECTION(100,370); +ACE_EXPLOSION_REFLECTION(100,380); +ACE_EXPLOSION_REFLECTION(100,390); +ACE_EXPLOSION_REFLECTION(100,400); +ACE_EXPLOSION_REFLECTION(100,410); +ACE_EXPLOSION_REFLECTION(100,420); +ACE_EXPLOSION_REFLECTION(100,430); +ACE_EXPLOSION_REFLECTION(100,440); +ACE_EXPLOSION_REFLECTION(100,450); +ACE_EXPLOSION_REFLECTION(100,460); +ACE_EXPLOSION_REFLECTION(100,470); +ACE_EXPLOSION_REFLECTION(100,480); +ACE_EXPLOSION_REFLECTION(100,490); +ACE_EXPLOSION_REFLECTION(100,500); + diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf index 6c8d64d1fb..95c921df64 100644 --- a/addons/frag/XEH_postInit.sqf +++ b/addons/frag/XEH_postInit.sqf @@ -1,5 +1,12 @@ #include "script_component.hpp" +if(GVAR(EnableDebugTrace) && !isMultiplayer) then { + GVAR(traceFrags) = true; + GVAR(autoTrace) = true; +}; + if(isServer) then { [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; -}; \ No newline at end of file +}; + +[FUNC(masterPFH), 0, []] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/frag/XEH_preInit.sqf b/addons/frag/XEH_preInit.sqf index 906a696ebf..cdd9342ffd 100644 --- a/addons/frag/XEH_preInit.sqf +++ b/addons/frag/XEH_preInit.sqf @@ -6,18 +6,16 @@ PREP(doSpall); PREP(fired); PREP(frago); PREP(spallTrack); -PREP(trackFragRound); GVAR(blackList) = []; GVAR(traceFrags) = false; -GVAR(trackedObjects) = []; GVAR(TOTALFRAGS) = 0; GVAR(spallHPData) = []; GVAR(spallIsTrackingCount) = 0; -GVAR(autoTrace) = true; +GVAR(autoTrace) = false; GVAR(traceID) = -1; GVAR(traces) = []; GVAR(tracesStarted) = false; @@ -32,4 +30,22 @@ PREP(startTracing); PREP(stopTracing); PREP(trackTrace); +// New tracking mechanisms +PREP(masterPFH); +PREP(pfhRound); +PREP(addPfhRound); +PREP(removePfhRound); // THIS SHOULD ABE USED SPARINGLY + +// Explosive Reflection +GVAR(replacedBisArtyWrapper) = true; +PREP(findReflections); +PREP(doExplosions); +PREP(doReflections); + + +GVAR(lastIterationIndex) = 0; +GVAR(objects) = []; +GVAR(objectTypes) = []; +GVAR(arguments) = []; + ADDON = true; diff --git a/addons/frag/functions/fnc_addPfhRound.sqf b/addons/frag/functions/fnc_addPfhRound.sqf new file mode 100644 index 0000000000..1fae55278e --- /dev/null +++ b/addons/frag/functions/fnc_addPfhRound.sqf @@ -0,0 +1,75 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private ["_enabled","_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"]; +PARAMS_3(_gun,_type,_round); + +if (!GVAR(enabled)) exitWith {}; + +//_enabled = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(enabled)); +//if(_enabled < 1) exitWith {}; + +if(_round in GVAR(blackList)) exitWith { + GVAR(blackList) = GVAR(blackList) - [_round]; +}; + +// Exit on max track +if( (count GVAR(objects)) > GVAR(MaxTrack)) exitWith { }; + +_doFragTrack = false; +if(_gun == ACE_player) then { + _doFragTrack = true; +} else { + if((gunner _gun) == ACE_player) then { + _doFragTrack = true; + } else { + if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then { + _doFragTrack = true; + }; + }; +}; +if(GVAR(SpallEnabled)) then { + if(GVAR(spallIsTrackingCount) <= 0) then { + GVAR(spallHPData) = []; + }; + if(GVAR(spallIsTrackingCount) > 5) then { + // ACE_player sideChat "LIMT!"; + _doSpall = false; + } else { + GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1; + }; +}; +// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)]; + +if(GVAR(autoTrace)) then { + [ACE_player, _round, [1,0,0,1]] call FUNC(addTrack); +}; + +// We only do the single track object check here. +// We should do an {!(_round in GVAR(objects))} +// But we leave that out here for optimization. So this cannot be a framework function +// Otherwise, it should only be added once and from the FiredEH +if(_doFragTrack && alive _round) then { + _spallTrack = []; + _spallTrackID = []; + + private["_args"]; + _args = [_round, (getPosASL _round), (velocity _round), _type, diag_frameno, _gun, _doSpall, _spallTrack, _spallTrackID, + (getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip))), + (getNumber (configFile >> "CfgAmmo" >> _type >> "explosive")), + (getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange")), + (getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force))), + (getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt((getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"))))) + ]; + TRACE_1("Initializing track", _round); + GVAR(objects) pushBack _round; + GVAR(arguments) pushBack _args; + + if(_doSpall) then { + [_round, 1, _spallTrack, _spallTrackID] call FUNC(spallTrack); + }; + // ACE_player sideChat "WTF2"; +}; + + + diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_addTrack.sqf index d4a4272a9c..32dec890c9 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_addTrack.sqf @@ -20,4 +20,4 @@ _positions set[(count _positions), [(getPos _obj), _objSpd]]; _data = [_origin, typeOf _origin, typeOf _obj, _objSpd, _positions, _color]; GVAR(traces) set[_index, _data]; -[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler; +[DFUNC(trackTrace), 0, [_obj, _index, ACE_time]] call cba_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_doExplosions.sqf b/addons/frag/functions/fnc_doExplosions.sqf new file mode 100644 index 0000000000..749c4bd2ec --- /dev/null +++ b/addons/frag/functions/fnc_doExplosions.sqf @@ -0,0 +1,26 @@ +//fnc_doExplosions.sqf +#include "script_component.hpp" + +private ["_params", "_explosions", "_index", "_i", "_exp", "_refExp", "_bpos", "_hit", "_distance", "_indirectHitRange", "_depth"]; +_params = _this select 0; +_explosions = _params select 0; +_index = _params select 1; +for "_i" from _index to ((_index+2) min (count _explosions)) do { + _exp = _explosions select _i; + _refExp = _exp select 0; + _bpos = _exp select 1; + _hit = _exp select 2; + _distance = _exp select 3; + _indirectHitRange = _exp select 4; + _depth = _exp select 5; + _refExp createVehicle (ASLtoATL _bpos); + // if(_hit >= 150 && _distance > _indirectHitRange) then { + // [_bpos, _refExp, _depth] call FUNC(doReflections); + // }; +}; +_index = _index + 2; +if(_index >= (count _explosions)) then { + [(_this select 1)] call cba_fnc_removePerFrameHandler; +} else { + _params set[1, _index]; +}; diff --git a/addons/frag/functions/fnc_doReflections.sqf b/addons/frag/functions/fnc_doReflections.sqf new file mode 100644 index 0000000000..911203dc5f --- /dev/null +++ b/addons/frag/functions/fnc_doReflections.sqf @@ -0,0 +1,22 @@ +//fnc_doReflections.sqf +#include "script_component.hpp" + +private ["_pos", "_ammo", "_depth", "_hit", "_range", "_hitFactor", "_indirectHitRange", "_indirectHit", "_testParams"]; + +_pos = _this select 0; +_ammo = _this select 1; +_depth = 1; +if(count _this > 2) then { + _depth = _this select 2; +}; +// TEST_ICONS pushBack [_pos, format["EXP!", _hit, _range, _hitFactor]]; +if(_depth <= 2) then { + _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHitRange"); + _indirectHit = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHit"); + + + + + _testParams = [_pos, [_indirectHitRange, _indirectHit], [], [], -4, _depth, 0]; + [DFUNC(findReflections), 0, _testParams] call cba_fnc_addPerFrameHandler; +}; diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index d2e64dbbfb..1e8e87bcb3 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -1,14 +1,10 @@ //fnc_doSpall.sqf #include "script_component.hpp" -#ifdef DEBUG_MODE_FULL - GVAR(traceFrags) = true; -#endif // ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; private ["_params", "_hitData", "_initialData", "_hpData", "_object", "_foundObjects", "_index", "_foundObjecsts", "_roundType", "_round", "_caliber", "_explosive", "_idh", "_alive", "_exit", "_vm", "_velocity", "_oldVelocity", "_curVelocity", "_diff", "_polar", "_unitDir", "_spallPos", "_pos1", "_i", "_pos2", "_blah", "_data", "_spallPolar", "_warn", "_c", "_m", "_k", "_gC", "_fragPower", "_fragTypes", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", "_fragType", "_fragment", "_pos"]; _params = _this select 0; -[(_this select 1)] call cba_fnc_removePerFrameHandler; _hitData = _params select 0; _initialData = GVAR(spallHPData) select (_hitData select 0); _hpData = (_hitData select 1) select (_params select 1); @@ -124,6 +120,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { [ACE_player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); }; @@ -145,6 +142,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { [ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack); }; diff --git a/addons/frag/functions/fnc_findReflections.sqf b/addons/frag/functions/fnc_findReflections.sqf new file mode 100644 index 0000000000..75c4ee2ae6 --- /dev/null +++ b/addons/frag/functions/fnc_findReflections.sqf @@ -0,0 +1,130 @@ +//fnc_findReflections.sqf +#include "script_component.hpp" + +private ["_split", "_radi", "_params", "_pos", "_explosiveInfo", "_los", "_nlos", "_zIndex", "_depth", "_indirectHitRange", + "_indirectHit", "_distanceCount", "_lastPos", "_test", "_vec", "_testPos", "_buckets", "_excludes", "_bucketIndex", "_bucketPos", + "_bucketList", "_c", "_index", "_blist", "_avgX", "_avgY", "_avgZ", "_bpos", "_distance", "_hitFactor", "_hit", "_range", "_refExp", + "_rand", "_i", "_x", "_res", "_forEachIndex", "_explosions", "_can", "_dirvec"]; + + +_params = _this select 0; +_pos = _params select 0; +_explosiveInfo = _params select 1; +_los = _params select 2; +_nlos = _params select 3; +_zIndex = _params select 4; +_depth = _params select 5; +_rand = _params select 6; + +_split = 15; +_radi = (360/_split*_depth); + +// player sideChat format["p: %1", _explosiveInfo]; +_indirectHitRange = _explosiveInfo select 0; +_indirectHit = _explosiveInfo select 1; +_distanceCount = (floor _indirectHitRange*4) min 100; + +if(_zIndex < 5) then { + _lastPos = _pos; + _zAng = _zIndex*20+2; + if(_zAng > 80) then { + _radi = 1; + _zAng = 90; + }; + for "_i" from 0 to _radi do { + _test = true; + _vec = [1, ((_i*_split)+_rand) mod 360, _zAng] call cba_fnc_polar2vect; + for "_x" from 1 to _distanceCount do { + _testPos = _pos vectorAdd (_vec vectorMultiply _x); + // drop ["\a3\data_f\Cl_basic","","Billboard",1,15,ASLtoATL _testPos,[0,0,0],1,1.275,1.0,0.0,[1],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + _res = lineIntersectsWith [_pos, _testPos]; + if(count _res > 0) exitWith { + _test = false; + _nlos pushBack _lastPos; + // { + // _x addEventHandler ["HandleDamage", { diag_log text format["this: %1", _this]; }]; + // } forEach _res; + // drop ["\a3\data_f\Cl_basic","","Billboard",1,15,ASLtoATL _testPos,[0,0,0],1,1.275,1.0,0.0,[1],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + // TEST_PAIRS pushBack [_pos, _lastPos, [1,0,0,1]]; + + }; + // if(terrainIntersectASL [_pos, _testPos]) exitWith {}; + _lastPos = _testPos; + }; + }; + _params set[4, _zIndex+1]; +} else { + _depth = _depth + 1; + _buckets = []; + _excludes = []; + _bucketIndex = 0; + _bucketPos = nil; + _bucketList = nil; + _c = 0; + while { count(_nlos) != count(_excludes) && _c < (count _nlos) } do { + scopeName "mainSearch"; + { + if(!(_forEachIndex in _excludes)) then { + _index = _buckets pushBack [_x, [_x]]; + _excludes pushBack _forEachIndex; + _bucketPos = _x; + _bucketList = (_buckets select _index) select 1; + breakTo "mainSearch"; + }; + } forEach _nlos; + { + if(!(_forEachIndex in _excludes)) then { + _testPos = _x; + if(_testPos vectorDistanceSqr _bucketPos <= 30) then { + _bucketList pushBack _x; + _excludes pushBack _forEachIndex; + }; + }; + } forEach _nlos; + _c = _c + 1; + }; + + // player sideChat format["c: %1", count _buckets]; + _explosions = []; + { + _blist = _x select 1; + _avgX = 0; + _avgY = 0; + _avgZ = 0; + + { + _avgX = _avgX + (_x select 0); + _avgY = _avgY + (_x select 1); + _avgZ = _avgZ + (_x select 2); + } forEach _blist; + _c = count _blist; + _bpos = [_avgX/_c, _avgY/_c, _avgZ/_c]; + + _distance = _pos vectorDistance _bpos; + _hitFactor = 1-(((_distance/(_indirectHitRange*4)) min 1) max 0); + // _hitFactor = 1/(_distance^2); + _hit = _indirectHit*_hitFactor; + _hit = (floor (_hit/4)) min 500; + _hit = _hit - (_hit%10); + _range = (floor (_indirectHitRange-(_distance/4))) min 100; + _range = _range - (_range%2); + + if(_hit >= 10 && _range > 0) then { + // TEST_ICONS pushBack [_bpos, format["h: %1, r: %2, hf: %3 d: %4 ihr: %5", _hit, _range, _hitFactor, _distance, _indirectHitRange*4]]; + // TEST_PAIRS pushBack [_pos, _bpos, [1,0,0,1]]; + _refExp = format["ace_explosion_reflection_%1_%2", _range, _hit]; + // _refExp createVehicle (ASLtoATL _bpos); + // drop ["\a3\data_f\Cl_basic","","Billboard",1,15,ASLtoATL _bpos,[0,0,0],1,1.275,1.0,0.0,[1],[[1,0,0,1]],[0],0.0,2.0,"","",""]; + + _explosions pushBack [_refExp, _bpos, _hit, _distance, _indirectHitRange/4, _depth]; + + }; + if(count _explosions > (_radi*2)/_depth) exitWith {}; + } forEach _buckets; + // _can = "Land_Bricks_V4_F" createVehicle (ASLtoATL _pos); + // _dirvec = _pos vectorFromTo ((ATLtoASL (player modelToWorldVisual (player selectionPosition "Spine3")))); + // _dirvec = _dirvec vectorMultiply 100; + // _can setVelocity _dirvec; + [DFUNC(doExplosions), 0, [_explosions, 0]] call cba_fnc_addPerFrameHandler; + [(_this select 1)] call cba_fnc_removePerFrameHandler; +}; diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 9b89e40897..a7c5577cb9 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -50,7 +50,7 @@ if(_doFragTrack && alive _round) then { GVAR(trackedObjects) pushBack _round; _spallTrack = []; _spallTrackID = []; - [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), _type, time, _gun, _doSpall, _spallTrack, _spallTrackID]] call cba_fnc_addPerFrameHandler; + [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), _type, ACE_time, _gun, _doSpall, _spallTrack, _spallTrackID]] call cba_fnc_addPerFrameHandler; if(_doSpall) then { [_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack); }; diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 43eb9d5a67..e8d0f0ffa6 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -8,7 +8,7 @@ if(!isServer) exitWith { }; -// _startTime = diag_tickTime; +// _startTime = ACE_diagTime; private ["_startTime", "_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_boundingBox", "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", "_currentCount", "_count", "_vecVar", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", "_sectorSize", "_sectorOffset", "_i", "_randomDir", "_endTime", "_target"]; @@ -106,8 +106,9 @@ _fragArcs set[360, 0]; ACE_player sideChat format["_fragRange: %1", _fragRange]; ACE_player sideChat format["_objects: %1", _objects]; #endif -_doRandom = false; +_doRandom = true; if(_isArmed && (count _objects) > 0) then { + [_lastPos, _shellType] call FUNC(doReflections); { //if(random(1) > 0.5) then { _target = _x; @@ -162,11 +163,8 @@ if(_isArmed && (count _objects) > 0) then { _fragObj setPosASL _lastPos; _fragObj setVectorDir _vec; _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif if(GVAR(traceFrags)) then { + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); }; _fragCount = _fragCount + 1; @@ -180,7 +178,7 @@ if(_isArmed && (count _objects) > 0) then { if(_fragCount > MAX_FRAG_COUNT) exitWith {}; } forEach _objects; if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; + _randomCount = ((ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0)+20; _sectorSize = 360 / (_randomCount max 1); // _doRandom = false; if(_doRandom) then { @@ -199,19 +197,18 @@ if(_isArmed && (count _objects) > 0) then { _fragObj setPosASL _lastPos; _fragObj setVectorDir _vec; _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif + if(GVAR(traceFrags)) then { + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); }; _fragCount = _fragCount + 1; }; }; + }; // #ifdef DEBUG_MODE_FULL // ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; // ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; // #endif -// _endTime = diag_tickTime; +// _endTime = ACE_diagTime; diff --git a/addons/frag/functions/fnc_masterPFH.sqf b/addons/frag/functions/fnc_masterPFH.sqf new file mode 100644 index 0000000000..4e81c4c609 --- /dev/null +++ b/addons/frag/functions/fnc_masterPFH.sqf @@ -0,0 +1,58 @@ +/* + * Author: jaynus + * + * Master single PFH abstraction for all rounds being tracked by frag/spall + * + * Arguments: + * + * + * Return Value: + * None + */ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +//PARAMS_2(_pfhArgs,_handle); + +if (!GVAR(enabled)) exitWith {}; + +private["_gcIndex"]; +_gcIndex = []; + +_iter = 0; +while { (count GVAR(objects)) > 0 && { _iter < GVAR(MaxTrackPerFrame) } } do { + private["_object", "_args"]; + if(GVAR(lastIterationIndex) >= (count GVAR(objects))) then { + GVAR(lastIterationIndex) = 0; + }; + _object = GVAR(objects) select GVAR(lastIterationIndex); + + if(!isNil "_object") then { + if(isNull _object) then { + _gcIndex pushBack GVAR(lastIterationIndex); + } else { + _args = GVAR(arguments) select GVAR(lastIterationIndex); + + if(!(_args call FUNC(pfhRound))) then { + _gcIndex pushBack GVAR(lastIterationIndex); // Add it to the GC if it returns false + }; + // If its not alive anymore, remove it from the queue, it already ran once on dead + if(!alive _object) then { + _gcIndex pushBack GVAR(lastIterationIndex); + }; + }; + }; + _iter = _iter + 1; + GVAR(lastIterationIndex) = GVAR(lastIterationIndex) + 1; +}; + +// clean up dead object references +private["_deletionCount", "_deleteIndex"]; +_deletionCount = 0; +{ + TRACE_1("GC Projectile", _x); + _deleteIndex = _x - _deletionCount; + GVAR(objects) deleteAt _deleteIndex; + GVAR(arguments) deleteAt _deleteIndex; + + _deletionCount = _deletionCount + 1; +} forEach _gcIndex; \ No newline at end of file diff --git a/addons/frag/functions/fnc_pfhRound.sqf b/addons/frag/functions/fnc_pfhRound.sqf new file mode 100644 index 0000000000..2c0d8944e7 --- /dev/null +++ b/addons/frag/functions/fnc_pfhRound.sqf @@ -0,0 +1,49 @@ +#include "script_component.hpp" +private ["_round", "_lastPos", "_lastVel", "_type", "_firedFrame", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; +_round = _this select 0; +_lastPos = _this select 1; +_lastVel = _this select 2; +_type = _this select 3; +_firedFrame = _this select 4; +_doSpall = _this select 6; +_spallTrack = _this select 7; +_foundObjectHPIds = _this select 8; +_skip = _this select 9; +_explosive = _this select 10; +_indirectRange = _this select 11; +_force = _this select 12; +_fragPower = _this select 13; + +if(_round in GVAR(blackList)) exitWith { + false +}; + +if (!alive _round) then { + if((diag_frameno - _firedFrame) > 1) then { + if(_skip == 0) then { + if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { + [QGVAR(frag_eh), _this] call ace_common_fnc_serverEvent; + }; + }; + }; + if(_doSpall) then { + GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; + // diag_log text format["F: %1", _foundObjectHPIds]; + { + if(!isNil "_x") then { + _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; + }; + } forEach _spallTrack; + }; +} else { + + _params set[1, (getPosASL _round)]; + _params set[2, (velocity _round)]; + if(_doSpall) then { + private["_scale"]; + _scale = ( (count GVAR(objects)) / GVAR(MaxTrackPerFrame) ) max 0.1; + [_round, _scale, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); + }; +}; + +true \ No newline at end of file diff --git a/addons/frag/functions/fnc_removePfhRound.sqf b/addons/frag/functions/fnc_removePfhRound.sqf new file mode 100644 index 0000000000..7fe3994d55 --- /dev/null +++ b/addons/frag/functions/fnc_removePfhRound.sqf @@ -0,0 +1,9 @@ +#include "script_component.hpp" + +// THIS FUNCTION SHOULD NOT BE USED BECAUSE IT CAUSES AN SEARCH AND REBUILD + +if(_round in GVAR(blackList)) then { + GVAR(blackList) = GVAR(blackList) - [_round]; +}; + +GVAR(objects) = GVAR(objects) - [_round]; \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallTrack.sqf b/addons/frag/functions/fnc_spallTrack.sqf index 4b7a06bc65..afe4bc1931 100644 --- a/addons/frag/functions/fnc_spallTrack.sqf +++ b/addons/frag/functions/fnc_spallTrack.sqf @@ -22,7 +22,7 @@ if (count _intersectsWith > 0) then { if(!(_x in _foundObjects)) then { // diag_log text format["Adding HP: %1", _x]; _index = (count GVAR(spallHPData)); - _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; + _hpId = _x addEventHandler ["hitPart", compile format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; _foundObjects set[(count _foundObjects), _x]; _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 8db68c99e8..e6a24f62bd 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -13,7 +13,7 @@ _foundObjectHPIds = _params select 8; if (!alive _round) then { [_this select 1] call cba_fnc_removePerFrameHandler; - if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { + if(_time != ACE_time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; _skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip)); if(_skip == 0) then { diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 3740ed23fa..78e13c7863 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT frag -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" //#define DEBUG_ENABLED_FRAG @@ -11,6 +11,6 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define ACE_TRACE_DRAW_INC 1 \ No newline at end of file diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index e7ebb7c1bf..a3a91b92d9 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,17 +1,35 @@  - - Disable Fragmentation - Keine Schrapnelle - Zakázat fragmentaci granátů - Desactivar fragmentación - Wyłącz fragmentację odłamków - Выключить разлёт осколков - Désactive la fragmentation - Repeszek letiltása - Disattiva la frammentazione - Desabilitar Fragmentação + + Fragmentation Simulation + + + Enable the ACE Fragmentation Simulation + + + Spalling Simulation + + + Enable the ACE Spalling Simulation + + + Maximum Projectiles Tracked + + + This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( >200 rounds in the air at once) + + + Maximum Projectiles Per Frame + + + The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further. + + + (SP Only) Frag/Spall Debug Tracing + + + (SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only. diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index 29a4859651..a4cb047629 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -17,16 +17,16 @@ private ["_interval", "_player", "_newVel", "_accel", "_currentGForce", "_averag EXPLODE_2_PVT(_this,_params,_pfhId); -_interval = time - GVAR(lastUpdateTime); +_interval = ACE_time - GVAR(lastUpdateTime); -// Update the g-forces at constant game time intervals +// Update the g-forces at constant game ACE_time intervals if (_interval < INTERVAL) exitWith {}; if (isNull ACE_player) exitWith {}; if !(alive ACE_player) exitWith {}; -GVAR(lastUpdateTime) = time; +GVAR(lastUpdateTime) = ACE_time; /*if !(vehicle ACE_player isKindOf "Air") exitWith { GVAR(GForces) = []; diff --git a/addons/gforces/script_component.hpp b/addons/gforces/script_component.hpp index cf665c21ec..ab3289842d 100644 --- a/addons/gforces/script_component.hpp +++ b/addons/gforces/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT gforces -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_GFORCES #define DEBUG_MODE_FULL @@ -9,7 +9,7 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_GFORCES #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define AVERAGEDURATION 6 #define INTERVAL 0.20 diff --git a/addons/goggles/functions/fnc_applyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf index 197b50b30d..17824253ff 100644 --- a/addons/goggles/functions/fnc_applyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -38,7 +38,7 @@ if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA GVAR(DustHandler) = -1; }; GVAR(DustHandler) = [{ - if (diag_tickTime >= GETDUSTT(DTIME) + 3) then { + if (ACE_diagTime >= GETDUSTT(DTIME) + 3) then { SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); private "_amount"; _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); diff --git a/addons/goggles/functions/fnc_dustHandler.sqf b/addons/goggles/functions/fnc_dustHandler.sqf index 9624fc21b3..af3c084e63 100644 --- a/addons/goggles/functions/fnc_dustHandler.sqf +++ b/addons/goggles/functions/fnc_dustHandler.sqf @@ -48,13 +48,13 @@ if (!_found) exitWith {}; _bullets = GETDUSTT(DBULLETS); -if ((diag_tickTime - GETDUSTT(DTIME)) > 1) then { +if ((ACE_diagTime - GETDUSTT(DTIME)) > 1) then { _bullets = 0; }; _bullets = _bullets + 1; SETDUST(DBULLETS,_bullets); -SETDUST(DTIME,diag_tickTime); +SETDUST(DTIME,ACE_diagTime); if (GETDUSTT(DAMOUNT) < 2) then { private "_bulletsRequired"; diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 9be24bcc47..50dc7cd288 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -103,7 +103,7 @@ _affected = _grenade nearEntities ["CAManBase", 20]; GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,(0.8 + _strength) min 1,[1,1,1,0],[0,0,0,1],[0,0,0,0]]; GVAR(flashbangPPEffectCC) ppEffectCommit 0.01; - //PARTIALRECOVERY - start decreasing effect over time + //PARTIALRECOVERY - start decreasing effect over ACE_time [{ PARAMS_1(_strength); GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,0,[1,1,1,0],[0,0,0,1],[0,0,0,0]]; diff --git a/addons/hearing/functions/fnc_updateVolume.sqf b/addons/hearing/functions/fnc_updateVolume.sqf index a0ca6af457..2e1db5c770 100644 --- a/addons/hearing/functions/fnc_updateVolume.sqf +++ b/addons/hearing/functions/fnc_updateVolume.sqf @@ -38,7 +38,7 @@ if (GVAR(currentDeafness) > 0.7) then { }; }; -// Deafness recovers with time +// Deafness recovers with ACE_time GVAR(currentDeafness) = GVAR(currentDeafness) - _recoverRate max 0; // needed until Bohemia fixes playSound to actually use the second argument diff --git a/addons/hearing/script_component.hpp b/addons/hearing/script_component.hpp index 6d4df68370..089bce86eb 100644 --- a/addons/hearing/script_component.hpp +++ b/addons/hearing/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT hearing -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_HEARING #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_HEARING #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index ee0ffe9504..1620349468 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -45,7 +45,7 @@ GVAR(keyDownSelfAction) = false; GVAR(keyDownTime) = 0; GVAR(openedMenuType) = -1; -GVAR(lastTime) = diag_tickTime; +GVAR(lastTime) = ACE_diagTime; GVAR(rotationAngle) = 0; GVAR(selectedAction) = [[],[]]; @@ -61,8 +61,8 @@ GVAR(lastPath) = []; GVAR(expanded) = false; -GVAR(startHoverTime) = diag_tickTime; -GVAR(expandedTime) = diag_tickTime; +GVAR(startHoverTime) = ACE_diagTime; +GVAR(expandedTime) = ACE_diagTime; GVAR(iconCtrls) = []; GVAR(iconCount) = 0; @@ -70,4 +70,9 @@ GVAR(collectedActionPoints) = []; GVAR(foundActions) = []; GVAR(lastTimeSearchedActions) = -1000; + +// Init CAManBase menus +["CAManBase"] call FUNC(compileMenu); +["CAManBase"] call FUNC(compileMenuSelfAction); + ADDON = true; diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 7b995375b7..60dc75d6b8 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -14,10 +14,12 @@ EXPLODE_1_PVT(_this,_target); -private ["_objectType","_actionsVarName"]; +private ["_objectType","_actionsVarName","_isMan"]; _objectType = _target; +_isMan = false; if (typeName _target == "OBJECT") then { _objectType = typeOf _target; + _isMan = _target isKindOf "CAManBase"; }; _actionsVarName = format [QGVAR(Act_%1), _objectType]; @@ -94,10 +96,16 @@ _recurseFnc = { _actions }; -private "_actionsCfg"; +private ["_actionsCfg","_actions"]; _actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions"; -missionNamespace setVariable [_actionsVarName, [_actionsCfg] call _recurseFnc]; +// If the classname inherits from CAManBase, just copy it's menu without recompiling a new one +_actions = if (_isMan) then { + + (missionNamespace getVariable QGVAR(Act_CAManBase)) +} else { + [_actionsCfg] call _recurseFnc +}; +missionNamespace setVariable [_actionsVarName, _actions]; /* [ diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index e767c3525d..7e53588325 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -14,10 +14,12 @@ EXPLODE_1_PVT(_this,_target); -private ["_objectType","_actionsVarName", "_canCollapse", "_children", "_enableInside", "_entry", "_entryCfg", "_i", "_insertChildren", "_modifierFunction", "_runOnHover"]; +private ["_objectType","_actionsVarName","_isMan"]; _objectType = _target; +_isMan = false; if (typeName _target == "OBJECT") then { _objectType = typeOf _target; + _isMan = _target isKindOf "CAManBase"; }; _actionsVarName = format [QGVAR(SelfAct_%1), _objectType]; @@ -78,7 +80,7 @@ _recurseFnc = { _actions }; -private "_actionsCfg"; +private ["_actionsCfg","_actions"]; _actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_SelfActions"; private ["_baseDisplayName", "_baseIcon"]; @@ -100,26 +102,31 @@ if (_objectType isKindOf "CAManBase") then { }; }; -// Create a master action to base on self action -_actions = [ +// If the classname inherits from CAManBase, just copy it's menu without recompiling a new one +_actions = if (_isMan) then { + + (missionNamespace getVariable QGVAR(SelfAct_CAManBase)) +} else { + // Create a master action to base on self action [ [ - "ACE_SelfActions", - _baseDisplayName, - _baseIcon, - { - // Dummy statement so it's not collapsed when there's no available actions - true - }, - {[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)}, - {}, - {}, - "Spine3", - 10, - [false,true,false] - ], - [_actionsCfg] call _recurseFnc + [ + "ACE_SelfActions", + _baseDisplayName, + _baseIcon, + { + // Dummy statement so it's not collapsed when there's no available actions + true + }, + {[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)}, + {}, + {}, + "Spine3", + 10, + [false,true,false] + ], + [_actionsCfg] call _recurseFnc + ] ] -]; +}; missionNamespace setVariable [_actionsVarName, _actions]; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 5976b99223..50e911c878 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -27,7 +27,7 @@ if (_menuType == 0) then { GVAR(keyDown) = false; GVAR(keyDownSelfAction) = true; }; -GVAR(keyDownTime) = diag_tickTime; +GVAR(keyDownTime) = ACE_diagTime; GVAR(openedMenuType) = _menuType; GVAR(lastTimeSearchedActions) = -1000; GVAR(ParsedTextCached) = []; diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 06c155ac54..66c9830a0c 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -48,7 +48,7 @@ if (GVAR(openedMenuType) >= 0) then { _closest = GVAR(currentOptions) select _closestSelection; _sPos = _closest select 1; - _cTime = diag_tickTime; + _cTime = ACE_diagTime; _delta = _cTime - GVAR(lastTime); GVAR(lastTime) = _cTime; @@ -73,17 +73,17 @@ if (GVAR(openedMenuType) >= 0) then { } forEach GVAR(lastPath); }; - if(_misMatch && {diag_tickTime-GVAR(expandedTime) > 0.25}) then { - GVAR(startHoverTime) = diag_tickTime; + if(_misMatch && {ACE_diagTime-GVAR(expandedTime) > 0.25}) then { + GVAR(startHoverTime) = ACE_diagTime; GVAR(lastPath) = _hoverPath; GVAR(expanded) = false; } else { - if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then { + if(!GVAR(expanded) && ACE_diagTime-GVAR(startHoverTime) > 0.25) then { GVAR(expanded) = true; // Start the expanding menu animation only if the user is not going up the menu if !([GVAR(menuDepthPath),GVAR(lastPath)] call FUNC(isSubPath)) then { - GVAR(expandedTime) = diag_tickTime; + GVAR(expandedTime) = ACE_diagTime; }; GVAR(menuDepthPath) = +GVAR(lastPath); diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index 0f4f17c017..707c3a3349 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -25,7 +25,7 @@ _fnc_renderNearbyActions = { #define MAXINTERACTOBJECTS 3 GVAR(foundActions) = []; - GVAR(lastTimeSearchedActions) = diag_tickTime; + GVAR(lastTimeSearchedActions) = ACE_diagTime; _numInteractObjects = 0; _nearestObjects = nearestObjects [ACE_player, ["All"], 13]; @@ -125,7 +125,7 @@ GVAR(collectedActionPoints) resize 0; if (GVAR(openedMenuType) == 0) then { if (vehicle ACE_player == ACE_player) then { - if (diag_tickTime > GVAR(lastTimeSearchedActions) + 0.20) then { + if (ACE_diagTime > GVAR(lastTimeSearchedActions) + 0.20) then { // Once every 0.2 secs, collect nearby objects active and visible action points and render them call _fnc_renderNearbyActions; } else { diff --git a/addons/interact_menu/functions/fnc_renderMenu.sqf b/addons/interact_menu/functions/fnc_renderMenu.sqf index 84c7799684..a82b82dcb7 100644 --- a/addons/interact_menu/functions/fnc_renderMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderMenu.sqf @@ -102,8 +102,8 @@ if (GVAR(UseListMenu)) then { // Animate menu scale if (_menuInSelectedPath && (_menuDepth == count _path)) then { - _scaleX = _scaleX * (0.3 + 0.7 * (((diag_tickTime - GVAR(expandedTime)) * 8) min 1)); - _scaleY = _scaleY * (0.3 + 0.7 * (((diag_tickTime - GVAR(expandedTime)) * 8) min 1)); + _scaleX = _scaleX * (0.3 + 0.7 * (((ACE_diagTime - GVAR(expandedTime)) * 8) min 1)); + _scaleY = _scaleY * (0.3 + 0.7 * (((ACE_diagTime - GVAR(expandedTime)) * 8) min 1)); }; _target = _actionObject; diff --git a/addons/interaction/functions/fnc_addPassengersActions.sqf b/addons/interaction/functions/fnc_addPassengersActions.sqf index 7a7d8618d1..7ee56415bf 100644 --- a/addons/interaction/functions/fnc_addPassengersActions.sqf +++ b/addons/interaction/functions/fnc_addPassengersActions.sqf @@ -25,7 +25,7 @@ _actions = []; { private ["_unit"]; _unit = _x; - if (_unit != _player) then { + if ((_unit != _player) && {(getText (configFile >> "CfgVehicles" >> (typeOf _x) >> "simulation")) != "UAVPilot"}) then { _actions pushBack [ [ diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index f9053e59f2..db808e2eba 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -46,7 +46,7 @@ playSound "ACE_Sound_Click"; _phase = _house animationPhase (_animations select 0); _position = getPosASL ACE_player; - _time = time + 0.2; + _time = ACE_time + 0.2; _usedMouseWheel = false; waitUntil { if (inputAction "PrevAction" > 0 || {inputAction "NextAction" > 0}) then { @@ -61,7 +61,7 @@ playSound "ACE_Sound_Click"; !GVAR(isOpeningDoor) || {getPosASL ACE_player distance _position > 1} }; - if (!_usedMouseWheel && {time < _time} && {[ACE_player, objNull, []] call EFUNC(common,canInteractWith)}) then { + if (!_usedMouseWheel && {ACE_time < _time} && {[ACE_player, objNull, []] call EFUNC(common,canInteractWith)}) then { _phase = [0, 1] select (_house animationPhase (_animations select 0) < 0.5); {_house animate [_x, _phase]} forEach _animations; diff --git a/addons/interaction/script_component.hpp b/addons/interaction/script_component.hpp index caa87ce3ce..68f22e96d7 100644 --- a/addons/interaction/script_component.hpp +++ b/addons/interaction/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT interaction -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_INTERACTION #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_INTERACTION #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/inventory/script_component.hpp b/addons/inventory/script_component.hpp index dd7c439c1a..248f324b36 100644 --- a/addons/inventory/script_component.hpp +++ b/addons/inventory/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT inventory -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_INVENTORY #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_INVENTORY #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 039484d1af..bf0481865d 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -20,7 +20,7 @@ _currentShooter = (vehicle ACE_player); _args = uiNamespace getVariable[QGVAR(arguments), [] ]; if( (count _args) > 0) then { _lastTick = _args select 0; - if(diag_tickTime - _lastTick > 1) then { + if(ACE_diagTime - _lastTick > 1) then { [] call FUNC(onOpticLoad); }; }; @@ -170,12 +170,12 @@ if (isNull _newTarget) then { // Lock on after 3 seconds if(_currentTarget != _newTarget) then { TRACE_1("New Target, reseting locking", _newTarget); - _lockTime = diag_tickTime; + _lockTime = ACE_diagTime; _currentTarget = _newTarget; playSound "ACE_Javelin_Locking"; } else { - if(diag_tickTime - _lockTime > __LOCKONTIME + _randomLockInterval) then { + if(ACE_diagTime - _lockTime > __LOCKONTIME + _randomLockInterval) then { TRACE_2("LOCKED!", _currentTarget, _lockTime); __JavelinIGUISeek ctrlSetTextColor __ColorGreen; @@ -217,9 +217,9 @@ if (isNull _newTarget) then { // Allow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); - if(diag_tickTime > _soundTime) then { + if(ACE_diagTime > _soundTime) then { playSound "ACE_Javelin_Locked"; - _soundTime = diag_tickTime + 0.25; + _soundTime = ACE_diagTime + 0.25; }; } else { __JavelinIGUITargeting ctrlShow true; @@ -251,9 +251,9 @@ if (isNull _newTarget) then { {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; - if(diag_tickTime > _soundTime) then { + if(ACE_diagTime > _soundTime) then { playSound "ACE_Javelin_Locking"; - _soundTime = diag_tickTime + 0.25; + _soundTime = ACE_diagTime + 0.25; }; // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); @@ -280,7 +280,7 @@ if (isNull _newTarget) then { //TRACE_2("", _newTarget, _currentTarget); // Save arguments for next run -_args set[0, diag_tickTime]; +_args set[0, ACE_diagTime]; _args set[1, _currentTarget]; _args set[2, _runTime]; _args set[3, _lockTime]; diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index 8e26806162..f5fab59497 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" TRACE_1("enter", _this); -#define __LOCKONTIMERANDOM 2 // Deviation in lock on time +#define __LOCKONTIMERANDOM 2 // Deviation in lock on ACE_time if((count _this) > 0) then { uiNameSpace setVariable ['ACE_RscOptics_javelin',_this select 0]; @@ -25,7 +25,7 @@ uiNameSpace setVariable [QGVAR(arguments), 0, // Run Time 0, // Lock Time 0, // Sound timer - (random __LOCKONTIMERANDOM), // random lock time addition + (random __LOCKONTIMERANDOM), // random lock ACE_time addition -1 ] ]; diff --git a/addons/javelin/script_component.hpp b/addons/javelin/script_component.hpp index 7234a1e3d4..984edc6988 100644 --- a/addons/javelin/script_component.hpp +++ b/addons/javelin/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT javelin -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_JAVELIN #define DEBUG_MODE_FULL @@ -9,7 +9,7 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_JAVELIN #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define ACE_JAV_FIREMODE_DIR 1 #define ACE_JAV_FIREMODE_TOP 2 diff --git a/addons/kestrel4500/XEH_postInit.sqf b/addons/kestrel4500/XEH_postInit.sqf index 7790386cf7..98136cbd0b 100644 --- a/addons/kestrel4500/XEH_postInit.sqf +++ b/addons/kestrel4500/XEH_postInit.sqf @@ -11,7 +11,7 @@ GVAR(MinAvgMax) = false; GVAR(MinAvgMaxMode) = 0; GVAR(referenceHeadingMenu) = 0; GVAR(referenceHeadingAutoSet) = true; -GVAR(manualSetCooldown) = diag_tickTime; +GVAR(manualSetCooldown) = ACE_diagTime; GVAR(headingSetDisplayTimer) = 0; GVAR(Menu) = 1; diff --git a/addons/kestrel4500/functions/fnc_buttonPressed.sqf b/addons/kestrel4500/functions/fnc_buttonPressed.sqf index c88d9df72f..8f38568462 100644 --- a/addons/kestrel4500/functions/fnc_buttonPressed.sqf +++ b/addons/kestrel4500/functions/fnc_buttonPressed.sqf @@ -33,12 +33,12 @@ switch (_this) do { case 2: { // Auto set GVAR(RefHeading) = (getDir ACE_player) % 360; GVAR(referenceHeadingMenu) = 0; - GVAR(headingSetDisplayTimer) = diag_tickTime; + GVAR(headingSetDisplayTimer) = ACE_diagTime; }; case 3: { // Manual set GVAR(RefHeading) = GVAR(TmpHeading); GVAR(referenceHeadingMenu) = 0; - GVAR(headingSetDisplayTimer) = diag_tickTime; + GVAR(headingSetDisplayTimer) = ACE_diagTime; }; }; }; @@ -73,13 +73,13 @@ switch (_this) do { GVAR(MinAvgMax) = !GVAR(MinAvgMax); } else { if (GVAR(referenceHeadingMenu) == 3) then { - if (diag_tickTime - GVAR(manualSetCooldown) < 0.2) then { + if (ACE_diagTime - GVAR(manualSetCooldown) < 0.2) then { GVAR(TmpHeading) = GVAR(TmpHeading) - 10; } else { GVAR(TmpHeading) = GVAR(TmpHeading) - 1; }; GVAR(TmpHeading) = (GVAR(TmpHeading) + 360) % 360; - GVAR(manualSetCooldown) = diag_tickTime; + GVAR(manualSetCooldown) = ACE_diagTime; }; }; }; @@ -88,13 +88,13 @@ switch (_this) do { GVAR(MinAvgMax) = !GVAR(MinAvgMax); } else { if (GVAR(referenceHeadingMenu) == 3) then { - if (diag_tickTime - GVAR(manualSetCooldown) < 0.2) then { + if (ACE_diagTime - GVAR(manualSetCooldown) < 0.2) then { GVAR(TmpHeading) = GVAR(TmpHeading) + 10; } else { GVAR(TmpHeading) = GVAR(TmpHeading) + 1; }; GVAR(TmpHeading) = (GVAR(TmpHeading) + 360) % 360; - GVAR(manualSetCooldown) = diag_tickTime; + GVAR(manualSetCooldown) = ACE_diagTime; }; }; }; diff --git a/addons/kestrel4500/functions/fnc_collectData.sqf b/addons/kestrel4500/functions/fnc_collectData.sqf index a20c944d1e..41f372d416 100644 --- a/addons/kestrel4500/functions/fnc_collectData.sqf +++ b/addons/kestrel4500/functions/fnc_collectData.sqf @@ -65,11 +65,17 @@ if (GVAR(MinAvgMaxMode) == 1) then { // HEADWIND _headwind = 0; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - _headwind = abs(cos(GVAR(RefHeading) - _playerDir) * _windSpeed); + _headwind = cos(GVAR(RefHeading) - _playerDir) * _windSpeed; } else { - _headwind = abs(cos(GVAR(RefHeading)) * _windSpeed); + _headwind = cos(GVAR(RefHeading)) * _windSpeed; }; - [4, _headwind] call _fnc_updateMemory; + if (abs(_headwind) > abs(GVAR(MAX) select 4)) then { + GVAR(MAX) set [4, _headwind]; + }; + if (abs(_headwind) < abs(GVAR(MIN) select 4)) then { + GVAR(MIN) set [4, _headwind]; + }; + GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _headwind]; }; [5, _temperature] call _fnc_updateMemory; diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index fc0a1f278a..679ecce6af 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -58,8 +58,8 @@ GVAR(Overlay) = true; [_this select 1] call CBA_fnc_removePerFrameHandler; }; - if (diag_tickTime > GVAR(updateTimer)) then { - GVAR(updateTimer) = diag_tickTime + 1; + if (ACE_diagTime > GVAR(updateTimer)) then { + GVAR(updateTimer) = ACE_diagTime + 1; private ["_outputData"]; _outputData = [] call FUNC(generateOutputData); diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index 106c1f3d32..fc7b94b711 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -14,7 +14,7 @@ */ #include "script_component.hpp" -if (diag_tickTime - GVAR(headingSetDisplayTimer) < 0.8) exitWith {["", "", " Heading Set", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]}; +if (ACE_diagTime - GVAR(headingSetDisplayTimer) < 0.8) exitWith {["", "", " Heading Set", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]}; private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_dayOfWeek", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"]; @@ -159,10 +159,10 @@ if (GVAR(referenceHeadingMenu) == 0) then { case 4: { // HEADWIND if (!GVAR(MinAvgMax)) then { if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - _textCenterBig = Str(round(abs(cos(GVAR(RefHeading) - _playerDir) * _windSpeed) * 10) / 10); + _textCenterBig = Str(round(cos(GVAR(RefHeading) - _playerDir) * _windSpeed * 10) / 10); _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)]; } else { - _textCenterBig = Str(round(abs(cos(GVAR(RefHeading)) * _windSpeed) * 10) / 10); + _textCenterBig = Str(round(cos(GVAR(RefHeading)) * _windSpeed * 10) / 10); _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; }; _textInfoLine2 = "- set heading"; diff --git a/addons/kestrel4500/functions/fnc_restoreUserData.sqf b/addons/kestrel4500/functions/fnc_restoreUserData.sqf index 3cd96d80af..0ce463ad67 100644 --- a/addons/kestrel4500/functions/fnc_restoreUserData.sqf +++ b/addons/kestrel4500/functions/fnc_restoreUserData.sqf @@ -16,3 +16,4 @@ #include "script_component.hpp" GVAR(Menu) = 0 max (profileNamespace getVariable ["ACE_Kestrel4500_menu", 0]) min ((count GVAR(Menus)) - 1); +GVAR(RefHeading) = 0 max (profileNamespace getVariable ["ACE_Kestrel4500_RefHeading", 0]) min 359; diff --git a/addons/kestrel4500/functions/fnc_storeUserData.sqf b/addons/kestrel4500/functions/fnc_storeUserData.sqf index 3b7ce9dd4d..a5d069b31d 100644 --- a/addons/kestrel4500/functions/fnc_storeUserData.sqf +++ b/addons/kestrel4500/functions/fnc_storeUserData.sqf @@ -16,3 +16,4 @@ #include "script_component.hpp" profileNamespace setVariable ["ACE_Kestrel4500_menu", GVAR(menu)]; +profileNamespace setVariable ["ACE_Kestrel4500_RefHeading", GVAR(RefHeading)]; diff --git a/addons/laser/README.md b/addons/laser/README.md index acd112e233..96a2bd7b19 100644 --- a/addons/laser/README.md +++ b/addons/laser/README.md @@ -1,7 +1,7 @@ ace_laser ========= -Contains various functions necessary for the realitic protrayal of laser mechanics in other components. +Contains various functions necessary for the realistic portrayal of laser mechanics in other components. ## Maintainers diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf index 9b5faa3859..901fa04b9a 100644 --- a/addons/laser/functions/fnc_laserOn.sqf +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" private ["_uuid", "_args"]; -_uuid = format["%1%2%3", floor diag_tickTime, floor random 1000, floor random 10000]; +_uuid = format["%1%2%3", floor ACE_diagTime, floor random 1000, floor random 10000]; _args = [_uuid, _this]; ["laser_laserOn", _args] call EFUNC(common,globalEvent); _uuid; diff --git a/addons/laser/script_component.hpp b/addons/laser/script_component.hpp index 77369ead96..6620f63c4d 100644 --- a/addons/laser/script_component.hpp +++ b/addons/laser/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT laser -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_LASER #define DEBUG_MODE_FULL @@ -9,7 +9,7 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define FIREMODE_DIRECT_LOAL 1 diff --git a/addons/laser_selfdesignate/$PBOPREFIX$ b/addons/laser_selfdesignate/$PBOPREFIX$ index 3871f5df99..821ffd07ea 100644 --- a/addons/laser_selfdesignate/$PBOPREFIX$ +++ b/addons/laser_selfdesignate/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\laser_selfdesignate \ No newline at end of file +z\ace\addons\laser_selfdesignate \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index e0c835814e..0da2866738 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -32,7 +32,7 @@ FUNC(laserHudDesignatePFH) = { }; if( (count _args) < 4) then { - _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; + _args set[3, ACE_diagTime + FCS_UPDATE_DELAY]; }; _forceUpdateTime = _args select 3; @@ -57,9 +57,9 @@ FUNC(laserHudDesignatePFH) = { }; */ - if(diag_tickTime > _forceUpdateTime) then { + if(ACE_diagTime > _forceUpdateTime) then { ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; + _args set[3, ACE_diagTime + FCS_UPDATE_DELAY]; }; _this set[0, _args]; diff --git a/addons/laser_selfdesignate/functions/script_component.hpp b/addons/laser_selfdesignate/functions/script_component.hpp index 38c6d2c44b..320dc825c7 100644 --- a/addons/laser_selfdesignate/functions/script_component.hpp +++ b/addons/laser_selfdesignate/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\Addons\laser_selfdesignate\script_component.hpp" +#include "\z\ace\addons\laser_selfdesignate\script_component.hpp" diff --git a/addons/laser_selfdesignate/script_component.hpp b/addons/laser_selfdesignate/script_component.hpp index 46e9c48d2f..d0e095924d 100644 --- a/addons/laser_selfdesignate/script_component.hpp +++ b/addons/laser_selfdesignate/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT laser_selfdesignate -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_LASER_SELFDESIGNATE #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_LASER_SELFDESIGNATE #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf index 67c5c4630b..e57e569dc1 100644 --- a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf +++ b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf @@ -9,7 +9,7 @@ * 2: Magazine is a belt * * Return Value: - * Array in format [time, isBullet, array of ammo counts] + * Array in format [ACE_time, isBullet, array of ammo counts] * * Example: * [10, [1,2,3,8], false] call ace_magazinerepack_fnc_simulateRepackEvents = diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index c4bd23f779..707ec21b63 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -5,8 +5,8 @@ #define MAJOR 3 #define MINOR 0 -#define PATCHLVL 0 -#define BUILD 3 +#define PATCHLVL 1 +#define BUILD 0 #define VERSION MAJOR.MINOR.PATCHLVL.BUILD #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD diff --git a/addons/map/$PBOPREFIX$ b/addons/map/$PBOPREFIX$ index 11a24a58d8..6fde8eb5b8 100644 --- a/addons/map/$PBOPREFIX$ +++ b/addons/map/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\map \ No newline at end of file +z\ace\addons\map \ No newline at end of file diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index ccaf9041ab..baca42a510 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -13,7 +13,7 @@ call FUNC(determineZoom); waitUntil {(!isNull findDisplay 12)}; GVAR(lastStillPosition) = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5]; - GVAR(lastStillTime) = time; + GVAR(lastStillTime) = ACE_time; GVAR(isShaking) = false; ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapEffects);}]; diff --git a/addons/map/functions/fnc_determineMapLight.sqf b/addons/map/functions/fnc_determineMapLight.sqf index 441dc8103a..9c205299e6 100644 --- a/addons/map/functions/fnc_determineMapLight.sqf +++ b/addons/map/functions/fnc_determineMapLight.sqf @@ -26,7 +26,7 @@ _fnc_blendColor = { (_c1 select 3) * (1 - _alpha) + (_c2 select 3) * _alpha] }; -// Ambient light tint depending on time of day +// Ambient light tint depending on ACE_time of day _lightTint = switch (true) do { case (sunOrMoon == 1.0) : { [0.5,0.5,0.5,1] }; case (sunOrMoon > 0.80) : {[[1.0 - overcast,0.2,0,1], [1,1,1,1], (sunOrMoon - 0.8)/0.2] call _fnc_blendColor}; diff --git a/addons/map/functions/fnc_updateMapEffects.sqf b/addons/map/functions/fnc_updateMapEffects.sqf index 027197a150..2725276a65 100644 --- a/addons/map/functions/fnc_updateMapEffects.sqf +++ b/addons/map/functions/fnc_updateMapEffects.sqf @@ -46,8 +46,8 @@ if (GVAR(mapShake)) then { _amplitude = (_speed - 0.1) / 5 * (1000 * _mapScale); _time = 0.1; - _shakePos = [(GVAR(lastStillPosition) select 0) + sin((time + _time - GVAR(lastStillTime))*100) * _amplitude * 0.25, - (GVAR(lastStillPosition) select 1) + sin((time + _time - GVAR(lastStillTime))*260) * _amplitude]; + _shakePos = [(GVAR(lastStillPosition) select 0) + sin((ACE_time + _time - GVAR(lastStillTime))*100) * _amplitude * 0.25, + (GVAR(lastStillPosition) select 1) + sin((ACE_time + _time - GVAR(lastStillTime))*260) * _amplitude]; _mapCtrl ctrlMapAnimAdd [_time, _mapScale, _shakePos]; ctrlMapAnimCommit _mapCtrl; @@ -64,7 +64,7 @@ if (GVAR(mapShake)) then { // The map is still, store state ctrlMapAnimClear _mapCtrl; GVAR(lastStillPosition) = _mapCtrl ctrlMapScreenToWorld [0.5, 0.5]; - GVAR(lastStillTime) = time; + GVAR(lastStillTime) = ACE_time; }; }; }; diff --git a/addons/map/script_component.hpp b/addons/map/script_component.hpp index 3f126eb653..c62086b03a 100644 --- a/addons/map/script_component.hpp +++ b/addons/map/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT map -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_MAP #define DEBUG_MODE_FULL @@ -9,7 +9,7 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MAP #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define MARKERNAME_MAPTOOL_FIXED "ACE_MapToolFixed" diff --git a/addons/maptools/$PBOPREFIX$ b/addons/maptools/$PBOPREFIX$ index 15fe8ae13f..89df7fa624 100644 --- a/addons/maptools/$PBOPREFIX$ +++ b/addons/maptools/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\maptools \ No newline at end of file +z\ace\addons\maptools \ No newline at end of file diff --git a/addons/maptools/script_component.hpp b/addons/maptools/script_component.hpp index 30a9f83d0d..5d5c524419 100644 --- a/addons/maptools/script_component.hpp +++ b/addons/maptools/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT maptools -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_MAPTOOLS #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MAPTOOLS #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 9848410c8c..064f29c8f9 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -50,11 +50,17 @@ class ACE_Medical_Actions { displayNameProgress = "$STR_ACE_Medical_Transfusing_Blood"; requiredMedic = 1; treatmentTime = 20; - items[] = {{"ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250"}}; + items[] = {"ACE_bloodIV"}; callbackSuccess = QUOTE(DFUNC(treatmentBasic_bloodbag)); animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; litter[] = {}; }; + class BloodIV_500: BloodIV { + items[] = {"ACE_bloodIV_500"}; + }; + class BloodIV_250: BloodIV { + items[] = {"ACE_bloodIV_250"}; + }; class BodyBag: Bandage { displayName = "$STR_ACE_Medical_PlaceInBodyBag"; displayNameProgress = "$STR_ACE_Medical_PlacingInBodyBag"; @@ -804,11 +810,11 @@ class ACE_Medical_Advanced { // specific details for the ACE_Morphine treatment action class Morphine { - painReduce = 1; + painReduce = 15; hrIncreaseLow[] = {-10, -30, 35}; hrIncreaseNormal[] = {-10, -50, 40}; hrIncreaseHigh[] = {-10, -40, 50}; - timeInSystem = 500; + timeInSystem = 900; maxDose = 4; inCompatableMedication[] = {}; viscosityChange = 10; @@ -824,9 +830,9 @@ class ACE_Medical_Advanced { }; class Atropine { painReduce = 0; - hrIncreaseLow[] = {20, 30, 15}; - hrIncreaseNormal[] = {-10, -50, 20}; - hrIncreaseHigh[] = {-10, -40, 10}; + hrIncreaseLow[] = {-5, -7, 15}; + hrIncreaseNormal[] = {-10, -30, 20}; + hrIncreaseHigh[] = {-10, -20, 10}; timeInSystem = 120; maxDose = 6; inCompatableMedication[] = {}; diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index d70b64a1d2..ab4e1de719 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -182,7 +182,7 @@ class CfgWeapons { descriptionShort = $STR_ACE_Medical_Aid_Kit_Desc_Short; descriptionUse = $STR_ACE_Medical_Aid_Kit_Desc_Use; class ItemInfo: InventoryItem_Base_F { - mass = 2; + mass = 10; }; }; class ACE_surgicalKit: ACE_ItemCore { @@ -193,7 +193,7 @@ class CfgWeapons { descriptionShort = $STR_ACE_Medical_SurgicalKit_Desc_Short; descriptionUse = $STR_ACE_Medical_SurgicalKit_Desc_Use; class ItemInfo: InventoryItem_Base_F { - mass = 5; + mass = 15; }; }; class ACE_bodyBag: ACE_ItemCore { @@ -204,7 +204,7 @@ class CfgWeapons { descriptionShort = $STR_ACE_Medical_Bodybag_Desc_Short; descriptionUse = $STR_ACE_Medical_Bodybag_Desc_Use; class ItemInfo: InventoryItem_Base_F { - mass = 15; + mass = 20; }; }; }; diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index f8129e5e78..a45662ef51 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -86,7 +86,7 @@ GVAR(effectPainCC) = [ // Initialize Other Variables GVAR(effectBlind) = false; -GVAR(effectTimeBlood) = time; +GVAR(effectTimeBlood) = ACE_time; // MAIN EFFECTS LOOP [{ @@ -133,8 +133,8 @@ GVAR(effectTimeBlood) = time; _bleeding = [ACE_player] call FUNC(getBloodLoss); // Bleeding Indicator - if (_bleeding > 0 and GVAR(effectTimeBlood) + 3.5 < time) then { - GVAR(effectTimeBlood) = time; + if (_bleeding > 0 and GVAR(effectTimeBlood) + 3.5 < ACE_time) then { + GVAR(effectTimeBlood) = ACE_time; [600 * _bleeding] call BIS_fnc_bloodEffect; }; @@ -150,27 +150,29 @@ GVAR(effectTimeBlood) = time; }, 0.5, []] call CBA_fnc_addPerFrameHandler; -GVAR(lastHeartBeat) = time; -GVAR(lastHeartBeatSound) = time; +GVAR(lastHeartBeat) = ACE_time; +GVAR(lastHeartBeatSound) = ACE_time; // HEARTRATE BASED EFFECTS [{ - private["_heartRate", "_interval", "_minTime", "_sound", "_strength"]; + private["_heartRate", "_interval", "_minTime", "_sound", "_strength", "_pain"]; _heartRate = ACE_player getVariable [QGVAR(heartRate), 70]; + _pain = ACE_player getVariable [QGVAR(pain), 0]; if (GVAR(level) == 1) then { - _heartRate = 60 + 40 * (ACE_player getVariable [QGVAR(pain), 0]); + _heartRate = 60 + 40 * _pain; }; if (_heartRate <= 0) exitwith {}; _interval = 60 / (_heartRate min 50); - if (time > GVAR(lastHeartBeat) + _interval) then { - GVAR(lastHeartBeat) = time; + + if (ACE_time > GVAR(lastHeartBeat) + _interval) then { + GVAR(lastHeartBeat) = ACE_time; // Pain effect - _strength = ACE_player getVariable [QGVAR(pain), 0]; + _strength = (_pain - (ACE_player getvariable [QGVAR(painSuppress), 0])) max 0; _strength = _strength * (ACE_player getVariable [QGVAR(painCoefficient), GVAR(painCoefficient)]); if (GVAR(painEffectType) == 1) then { GVAR(effectPainCC) ppEffectEnable false; - if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then { + if (_pain > (ACE_player getvariable [QGVAR(painSuppress), 0]) && {alive ACE_player}) then { _strength = _strength * 0.15; GVAR(effectPainCA) ppEffectEnable true; GVAR(effectPainCA) ppEffectAdjust [_strength, _strength, false]; @@ -192,7 +194,7 @@ GVAR(lastHeartBeatSound) = time; }; } else { GVAR(effectPainCA) ppEffectEnable false; - if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then { + if (_pain > (ACE_player getvariable [QGVAR(painSuppress), 0]) && {alive ACE_player}) then { _strength = _strength * 0.9; GVAR(effectPainCC) ppEffectEnable true; GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - _strength,1 - _strength,0,0,0,0.2,2]]; @@ -217,8 +219,8 @@ GVAR(lastHeartBeatSound) = time; if (GVAR(level) >= 2 && {_heartRate > 0}) then { _minTime = 60 / _heartRate; - if (time - GVAR(lastHeartBeatSound) > _minTime) then { - GVAR(lastHeartBeatSound) = time; + if (ACE_time - GVAR(lastHeartBeatSound) > _minTime) then { + GVAR(lastHeartBeatSound) = ACE_time; // Heart rate sound effect if (_heartRate < 60) then { _sound = GVAR(heartBeatSounds_Normal) select (random((count GVAR(heartBeatSounds_Normal)) -1)); @@ -250,7 +252,7 @@ if (USE_WOUND_EVENT_SYNC) then { [ {(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)}, - {(((_this select 0) getvariable [QGVAR(pain), 0]) > 0.9)}, + {(((_this select 0) getvariable [QGVAR(pain), 0]) - ((_this select 0) getvariable [QGVAR(painSuppress), 0])) > 0.9}, {(([_this select 0] call FUNC(getBloodLoss)) > 0.25)}, {((_this select 0) getvariable [QGVAR(inReviveState), false])}, {((_this select 0) getvariable [QGVAR(inCardiacArrest), false])}, @@ -274,5 +276,5 @@ if (hasInterface) then { ["PlayerJip", { diag_log format["[ACE] JIP Medical init for player"]; [player] call FUNC(init); - }] call FUNC(addEventHandler); + }] call EFUNC(common,addEventHandler); }; diff --git a/addons/medical/XEH_respawn.sqf b/addons/medical/XEH_respawn.sqf index 0a95e064fd..44060fa15c 100644 --- a/addons/medical/XEH_respawn.sqf +++ b/addons/medical/XEH_respawn.sqf @@ -13,7 +13,7 @@ if (!(_unit getVariable ["ACE_isUnconscious", false])) then { [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); }; -// Remove maximum unconsciousness time handler +// Remove maximum unconsciousness ACE_time handler _maxUnconHandle = _unit getVariable [QGVAR(maxUnconTimeHandle), -1]; if (_maxUnconHandle > 0) then { [_maxUnconHandle] call CBA_fnc_removePerFrameHandler; diff --git a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf index dbe0271e99..4c55cdabf6 100644 --- a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf +++ b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: The unit * 1: value - * 2: time in seconds + * 2: ACE_time in seconds * 3: callback * * Return Value: diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf index 23ca283693..083f949d9d 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -29,8 +29,8 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { [{ private ["_unit", "_interval"]; _unit = (_this select 0) select 0; - _interval = time - ((_this select 0) select 1); - (_this select 0) set [1, time]; + _interval = ACE_time - ((_this select 0) select 1); + (_this select 0) set [1, ACE_time]; if (!alive _unit || !local _unit) then { [_this select 1] call CBA_fnc_removePerFrameHandler; @@ -46,7 +46,7 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { private "_pain"; _pain = _unit getvariable [QGVAR(pain), 0]; - if (_pain > 0) then { + if (_pain > (_unit getvariable [QGVAR(painSuppress), 0])) then { if (_pain > 0.7 && {random(1) > 0.6}) then { [_unit] call FUNC(setUnconscious); }; @@ -54,5 +54,5 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { [_unit, _pain] call FUNC(playInjuredSound); }; }; - }, 1, [_unit, time]] call CBA_fnc_addPerFrameHandler; + }, 1, [_unit, ACE_time]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/medical/functions/fnc_addToTriageCard.sqf b/addons/medical/functions/fnc_addToTriageCard.sqf index 61add24cfc..4f08cf5c1e 100644 --- a/addons/medical/functions/fnc_addToTriageCard.sqf +++ b/addons/medical/functions/fnc_addToTriageCard.sqf @@ -30,7 +30,7 @@ _amount = 1; private "_info"; _info = _log select _foreachIndex; _info set [1,(_info select 1) + 1]; - _info set [2, time]; + _info set [2, ACE_time]; _log set [_foreachIndex, _info]; _amount = (_info select 1); @@ -39,7 +39,7 @@ _amount = 1; }foreach _log; if (!_inList) then { - _log pushback [_newItem, 1, time]; + _log pushback [_newItem, 1, ACE_time]; }; _unit setvariable [QGVAR(triageCard), _log, true]; ["Medical_onItemAddedToTriageCard", [_unit, _newItem, _amount]] call ace_common_fnc_localEvent; diff --git a/addons/medical/functions/fnc_getCardiacOutput.sqf b/addons/medical/functions/fnc_getCardiacOutput.sqf index a44e8a8e29..34d7be33af 100644 --- a/addons/medical/functions/fnc_getCardiacOutput.sqf +++ b/addons/medical/functions/fnc_getCardiacOutput.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" /* - Cardiac output (Q or or CO ) is the volume of blood being pumped by the heart, in particular by a left or right ventricle in the time interval of one minute. CO may be measured in many ways, for example dm3/min (1 dm3 equals 1 litre). + Cardiac output (Q or or CO ) is the volume of blood being pumped by the heart, in particular by a left or right ventricle in the ACE_time interval of one minute. CO may be measured in many ways, for example dm3/min (1 dm3 equals 1 litre). Source: http://en.wikipedia.org/wiki/Cardiac_output */ diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index 681116f226..f13fbc8c05 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -28,12 +28,12 @@ if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then { } forEach (_oldLitter select 1); }; -GVAR(allCreatedLitter) pushBack [time, [_litterObject]]; +GVAR(allCreatedLitter) pushBack [ACE_time, [_litterObject]]; if(!GVAR(litterPFHRunning) && {GVAR(litterCleanUpDelay) > 0}) then { [{ { - if (time - (_x select 0) >= GVAR(litterCleanUpDelay)) then { + if (ACE_time - (_x select 0) >= GVAR(litterCleanUpDelay)) then { { deleteVehicle _x; } forEach (_x select 1); diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 1d8c821d1f..5e58772a36 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -41,22 +41,6 @@ if (_selection in GVAR(SELECTIONS)) then { }; if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {_damageOld}; -// Figure out whether to prevent death before handling damage -if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { - _unit setVariable [QGVAR(frameNo), diag_frameno]; - _unit setVariable [QGVAR(wasUnconscious), _unit getVariable ["ACE_isUnconscious", false]]; - - _preventDeath = _unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]; - if (_unit getVariable ["ACE_isUnconscious", false]) then { - _preventDeath = _unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]; - if !([_unit] call EFUNC(common,isPlayer)) then { - _preventDeath = _preventDeath - 1; - }; - _preventDeath = _preventDeath > 0; - }; - _unit setVariable [QGVAR(preventDeath), _preventDeath]; -}; - // Get return damage _damageReturn = _damage; if (GVAR(level) < 2) then { @@ -64,7 +48,7 @@ if (GVAR(level) < 2) then { } else { if !([_unit] call FUNC(hasMedicalEnabled)) exitwith { // Because of the config changes, we cannot properly disable the medical system for a unit. - // lets use basic for the time being.. + // lets use basic for the ACE_time being.. _damageReturn = _this call FUNC(handleDamage_basic); }; _newDamage = _this call FUNC(handleDamage_caching); @@ -82,7 +66,7 @@ if (GVAR(level) < 2) then { }; }; - if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} || !alive vehicle _unit) then { + if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then { if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith { _damageReturn = 0.9; }; @@ -97,30 +81,45 @@ if (GVAR(level) < 2) then { }; [_unit] call FUNC(addToInjuredCollection); -// Prevent death if necessary -if (_unit getVariable QGVAR(preventDeath)) then { - if (_selection in ["", "head", "body"]) then { - _damageReturn = _damageReturn min 0.89; - }; - // Move the unit out of the vehicle if necessary - if (vehicle _unit != _unit and damage (vehicle _unit) == 1) then { +if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith { + if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then { [_unit] call EFUNC(common,unloadPerson); - if (_unit getVariable QGVAR(wasUnconscious)) then { - [_unit] call FUNC(setDead); - } else { - [_unit, true] call FUNC(setUnconscious); - }; }; - // Temporarily disable all damage to prevent stuff like - // being killed during the animation etc. - if (!_wasUnconscious and (_unit getVariable ["ACE_isUnconscious", false])) then { - _unit setVariable [QGVAR(allowDamage), false]; - [{ - _this setVariable [QGVAR(allowDamage), true]; - }, _unit, 0.7, 0] call EFUNC(common,waitAndExecute); + private "_delayedUnconsicous"; + _delayedUnconsicous = false; + if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then { + [_unit] call EFUNC(common,unloadPerson); + _delayedUnconsicous = true; }; + + if (_damageReturn >= 0.9 && {_selection in ["", "head", "body"]}) exitWith { + if (_unit getvariable ["ACE_isUnconscious", false]) exitwith { + [_unit] call FUNC(setDead); + 0.89 + }; + if (_delayedUnconsicous) then { + [{ + [_this select 0, true] call FUNC(setUnconscious); + }, [_unit], 0.7, 0] call EFUNC(common,waitAndExec); + } else { + [{ + [_this select 0, true] call FUNC(setUnconscious); + }, [_unit]] call EFUNC(common,execNextFrame); + }; + 0.89 + }; + _damageReturn min 0.89; +}; + +if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_damageReturn >= 0.9} && {_selection in ["", "head", "body"]}) exitWith { + if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then { + [_unit] call EFUNC(common,unloadPerson); + }; + [_unit] call FUNC(setDead); + + 0.89 }; _damageReturn diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index 7b308ad188..04049cfa7c 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -48,20 +48,28 @@ if (diag_frameno > (_unit getVariable [QGVAR(basic_frameNo), -3]) + 2) then { _unit setVariable [QGVAR(hitPoints), []]; _unit setVariable [QGVAR(damages), []]; _unit setVariable [QGVAR(structDamage), 0]; + + if (isnil {_unit getvariable QGVAR(structDamagePFH)}) then { // Assign orphan structural damage to torso - [{ - private ["_unit", "_damagesum"]; - _unit = _this select 0; - _damagesum = (_unit getHitPointDamage "HitHead") + - (_unit getHitPointDamage "HitBody") + - (_unit getHitPointDamage "HitLeftArm") + - (_unit getHitPointDamage "HitRightArm") + - (_unit getHitPointDamage "HitLeftLeg") + - (_unit getHitPointDamage "HitRightLeg"); - if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { - _unit setHitPointDamage ["HitBody", damage _unit]; - }; - }, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute); + [{ + private ["_unit", "_damagesum"]; + _unit = (_this select 0) select 0; + if (ACE_diagTime - (_unit getvariable [QGVAR(structDamagePFH),-2]) >= 2) then { + _unit setVariable [QGVAR(structDamagePFH), nil]; + _damagesum = (_unit getHitPointDamage "HitHead") + + (_unit getHitPointDamage "HitBody") + + (_unit getHitPointDamage "HitLeftArm") + + (_unit getHitPointDamage "HitRightArm") + + (_unit getHitPointDamage "HitLeftLeg") + + (_unit getHitPointDamage "HitRightLeg"); + if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { + _unit setHitPointDamage ["HitBody", damage _unit]; + }; + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + }, 0, [_unit]] call CBA_fnc_addPerFrameHandler; + }; + _unit setVariable [QGVAR(structDamagePFH), ACE_diagTime]; // Assign starting ACE_time or reset it }; _newDamage = _damage - (damage _unit); diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index 216fb8ed49..c0f9c15292 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -26,7 +26,7 @@ if (_local) then { if ((_unit getvariable ["ACE_isUnconscious",false]) && {count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 6}) then { private "_arguments"; _arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]); - _arguments set [2, time]; + _arguments set [2, ACE_time]; [DFUNC(unconsciousPFH), 0.1, _arguments ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 3877faf85d..c96c1b05f8 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -20,9 +20,9 @@ _interval = _this select 1; if (_interval == 0) exitWith {}; _lastTimeValuesSynced = _unit getvariable [QGVAR(lastMomentValuesSynced), 0]; -_syncValues = (time - _lastTimeValuesSynced >= (10 + floor(random(10))) && GVAR(keepLocalSettingsSynced)); +_syncValues = (ACE_time - _lastTimeValuesSynced >= (10 + floor(random(10))) && GVAR(keepLocalSettingsSynced)); if (_syncValues) then { - _unit setvariable [QGVAR(lastMomentValuesSynced), time]; + _unit setvariable [QGVAR(lastMomentValuesSynced), ACE_time]; }; _bloodVolume = (_unit getvariable [QGVAR(bloodVolume), 100]) + ([_unit] call FUNC(getBloodVolumeChange)); @@ -58,7 +58,7 @@ if (([_unit] call FUNC(getBloodLoss)) > 0) then { }; _painStatus = _unit getvariable [QGVAR(pain), 0]; -if (_painStatus > 0) then { +if (_painStatus > (_unit getvariable [QGVAR(painSuppress), 0])) then { if !(_unit getvariable [QGVAR(hasPain), false]) then { _unit setvariable [QGVAR(hasPain), true, true]; }; diff --git a/addons/medical/functions/fnc_hasMedicalEnabled.sqf b/addons/medical/functions/fnc_hasMedicalEnabled.sqf index fb5a45fe70..63fddd16b4 100644 --- a/addons/medical/functions/fnc_hasMedicalEnabled.sqf +++ b/addons/medical/functions/fnc_hasMedicalEnabled.sqf @@ -15,7 +15,7 @@ _unit = _this select 0; _medicalEnabled = _unit getvariable QGVAR(enableMedical); if (isnil "_medicalEnabled") exitwith { - (((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1)); + (((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1) || GVAR(level) == 1); }; _medicalEnabled; diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index 0ec6ce3ce2..27d80163a5 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -64,6 +64,7 @@ _unit setvariable [QGVAR(hasLostBlood), 0, true]; _unit setvariable [QGVAR(isBleeding), false, true]; _unit setvariable [QGVAR(hasPain), false, true]; _unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true]; +_unit setvariable [QGVAR(painSuppress), 0, true]; // medication _allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []]; diff --git a/addons/medical/functions/fnc_isInMedicalVehicle.sqf b/addons/medical/functions/fnc_isInMedicalVehicle.sqf index 5422ce8e1f..d376ce3824 100644 --- a/addons/medical/functions/fnc_isInMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isInMedicalVehicle.sqf @@ -21,4 +21,4 @@ _vehicle = vehicle _unit; if (_unit == _vehicle) exitWith {false}; if (_unit in [driver _vehicle, gunner _vehicle, commander _vehicle]) exitWith {false}; -_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant") == 1] +(_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant")]) > 0 diff --git a/addons/medical/functions/fnc_modifyMedicalAction.sqf b/addons/medical/functions/fnc_modifyMedicalAction.sqf index 179ae9eb83..268ba8e253 100644 --- a/addons/medical/functions/fnc_modifyMedicalAction.sqf +++ b/addons/medical/functions/fnc_modifyMedicalAction.sqf @@ -34,7 +34,7 @@ private ["_openWounds", "_amountOf"]; _openWounds = _target getvariable [QGVAR(openWounds), []]; { _amountOf = _x select 3; - if (_amountOf > 0 && {(_selectionN == (_x select 2))}) exitwith { + if (_amountOf > 0 && {(_selectionN == (_x select 2))} && {(_x select 4) > 0}) exitwith { _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; }; } foreach _openWounds; diff --git a/addons/medical/functions/fnc_onMedicationUsage.sqf b/addons/medical/functions/fnc_onMedicationUsage.sqf index c56f676744..904ad3ef88 100644 --- a/addons/medical/functions/fnc_onMedicationUsage.sqf +++ b/addons/medical/functions/fnc_onMedicationUsage.sqf @@ -7,7 +7,7 @@ * 1: Medication Treatment classname * 2: The medication treatment variablename * 3: Max dosage - * 4: The time in the system + * 4: The ACE_time in the system * 5: Incompatable medication > * * Return Value: @@ -18,7 +18,7 @@ #include "script_component.hpp" -private ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_classNamesUsed", "_decreaseAmount", "_viscosityChange", "_viscosityAdjustment", "_medicationConfig", "_onOverDose"]; +private ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_classNamesUsed", "_decreaseAmount", "_viscosityChange", "_viscosityAdjustment", "_medicationConfig", "_onOverDose", "_painReduce"]; _target = _this select 0; _className = _this select 1; _variable = _this select 2; @@ -26,6 +26,7 @@ _maxDosage = _this select 3; _timeInSystem = _this select 4; _incompatabileMeds = _this select 5; _viscosityChange = _this select 6; +_painReduce = _this select 7; _foundEntry = false; _allUsedMedication = _target getvariable [QGVAR(allUsedMedication), []]; @@ -84,7 +85,7 @@ _decreaseAmount = 1 / _timeInSystem; _viscosityAdjustment = _viscosityChange / _timeInSystem; [{ - private ["_args", "_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_usedMeds", "_viscosityAdjustment"]; + private ["_args", "_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_usedMeds", "_viscosityAdjustment", "_painReduce"]; _args = _this select 0; _target = _args select 0; _timeInSystem = _args select 1; @@ -92,6 +93,7 @@ _viscosityAdjustment = _viscosityChange / _timeInSystem; _amountDecreased = _args select 3; _decreaseAmount = _args select 4; _viscosityAdjustment = _args select 5; + _painReduce = _args select 6; _usedMeds = _target getvariable [_variable, 0]; _usedMeds = _usedMeds - _decreaseAmount; @@ -101,9 +103,10 @@ _viscosityAdjustment = _viscosityChange / _timeInSystem; // Restoring the viscosity while the medication is leaving the system _target setvariable [QGVAR(peripheralResistance), ((_target getvariable [QGVAR(peripheralResistance), 100]) - _viscosityAdjustment) max 0]; + _target setvariable [QGVAR(painSuppress), ((_target getvariable [QGVAR(painSuppress), 0]) - _painReduce) max 0]; if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _target) then { [(_this select 1)] call cba_fnc_removePerFrameHandler; }; _args set [3, _amountDecreased]; -}, 1, [_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment] ] call CBA_fnc_addPerFrameHandler; +}, 1, [_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment, _painReduce / _timeInSystem] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_playInjuredSound.sqf b/addons/medical/functions/fnc_playInjuredSound.sqf index c48e3d0a4c..3d41ec70db 100644 --- a/addons/medical/functions/fnc_playInjuredSound.sqf +++ b/addons/medical/functions/fnc_playInjuredSound.sqf @@ -1,7 +1,7 @@ /* * Author: Glowbal * Play the injured sound for a unit if the unit is damaged. The sound broadcasted across MP. - * Will not play if the unit has already played a sound within to close a time frame. + * Will not play if the unit has already played a sound within to close a ACE_time frame. * Delay: With minimal damage (below 1), the delay is (10 + random(50)) seconds. Otherwise it is 60 seconds / damage. * * Arguments: diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf index b4483defc2..0ff6eaccd4 100644 --- a/addons/medical/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical/functions/fnc_setCardiacArrest.sqf @@ -38,10 +38,10 @@ _timeInCardiacArrest = 120 + round(random(600)); [(_this select 1)] call cba_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inCardiacArrest), nil,true]; }; - if (time - _startTime >= _timeInCardiacArrest) exitwith { + if (ACE_time - _startTime >= _timeInCardiacArrest) exitwith { [(_this select 1)] call cba_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inCardiacArrest), nil,true]; [_unit] call FUNC(setDead); }; -}, 1, [_unit, time, _timeInCardiacArrest] ] call CBA_fnc_addPerFrameHandler; +}, 1, [_unit, ACE_time, _timeInCardiacArrest] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index 411fd6dc06..6cf82b32bd 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -40,7 +40,7 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal == }; _unit setvariable [QGVAR(inReviveState), true, true]; - _unit setvariable [QGVAR(reviveStartTime), time]; + _unit setvariable [QGVAR(reviveStartTime), ACE_time]; [_unit, true] call FUNC(setUnconscious); [{ @@ -49,7 +49,7 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal == _unit = _args select 0; _startTime = _unit getvariable [QGVAR(reviveStartTime), 0]; - if (time - _startTime > GVAR(maxReviveTime)) exitwith { + if (ACE_time - _startTime > GVAR(maxReviveTime)) exitwith { [(_this select 1)] call cba_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inReviveState), nil, true]; _unit setvariable [QGVAR(reviveStartTime), nil]; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 72d297b2c8..28ee530797 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: The unit that will be put in an unconscious state * 1: Set unconsciouns - * 2: Minimum unconscious time + * 2: Minimum unconscious ACE_time * * ReturnValue: * nil @@ -17,10 +17,11 @@ #define DEFAULT_DELAY (round(random(10)+5)) -private ["_unit", "_set", "_animState", "_originalPos", "_startingTime","_minWaitingTime"]; +private ["_unit", "_set", "_animState", "_originalPos", "_startingTime","_minWaitingTime", "_force"]; _unit = _this select 0; _set = if (count _this > 1) then {_this select 1} else {true}; _minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY}; +_force = if (count _this > 3) then {_this select 3} else {false}; // No change, fuck off. (why is there no xor?) if (_set isEqualTo (_unit getVariable ["ACE_isUnconscious", false])) exitWith {}; @@ -32,7 +33,7 @@ if !(_set) exitwith { if !(!(isNull _unit) && {(_unit isKindOf "CAManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; if (!local _unit) exitwith { - [[_unit], QUOTE(DFUNC(setUnconscious)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + [[_unit, _set, _minWaitingTime, _force], QUOTE(DFUNC(setUnconscious)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; _unit setvariable ["ACE_isUnconscious", true, true]; @@ -46,7 +47,7 @@ if (_unit == ACE_player) then { }; // if we have unconsciousness for AI disabled, we will kill the unit instead -if !([_unit] call EFUNC(common,isPlayer)) then { +if (!([_unit] call EFUNC(common,isPlayer)) && !_force) then { _enableUncon = _unit getVariable [QGVAR(enableUnconsciousnessAI), GVAR(enableUnconsciousnessAI)]; if (_enableUncon == 0 or {_enableUncon == 1 and (random 1) < 0.5}) exitWith { [_unit, true] call FUNC(setDead); @@ -96,7 +97,7 @@ _anim = [_unit] call EFUNC(common,getDeathAnim); }; }, [_unit, _anim], 0.5, 0] call EFUNC(common,waitAndExecute); -_startingTime = time; +_startingTime = ACE_time; [DFUNC(unconsciousPFH), 0.1, [_unit, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index f50ff505e0..8809dfa5d4 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -156,7 +156,7 @@ if (currentWeapon _caller == secondaryWeapon _caller) then { _caller selectWeapon (primaryWeapon _caller); }; -_wpn = ["non", "rfl", "pst"] select (["", primaryWeapon _caller, handgunWeapon _caller] find (currentWeapon _caller)); +_wpn = ["non", "rfl", "pst"] select (1 + ([primaryWeapon _caller, handgunWeapon _caller] find (currentWeapon _caller))); _callerAnim = [_callerAnim, "[wpn]", _wpn] call CBA_fnc_replace; if (vehicle _caller == _caller && {_callerAnim != ""}) then { if (primaryWeapon _caller == "") then { diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf index e385c5f7c0..544ef6ae55 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf @@ -58,6 +58,7 @@ if (alive _target) exitwith { _target setvariable [QGVAR(hasLostBlood), 0, true]; _target setvariable [QGVAR(isBleeding), false, true]; _target setvariable [QGVAR(hasPain), false, true]; + _target setvariable [QGVAR(painSuppress), 0, true]; // medication _allUsedMedication = _target getVariable [QGVAR(allUsedMedication), []]; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf index 934bc9239a..4936d0e412 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf @@ -73,15 +73,15 @@ if (alive _target) then { if (_painReduce > 0) then { // Reduce the pain level - _pain = _target getvariable [QGVAR(pain), 0]; - _target setvariable [QGVAR(pain), (_pain - (_pain * _painReduce)) max 0]; + _painSuppress = _target getvariable [QGVAR(painSuppress), 0]; + _target setvariable [QGVAR(painSuppress), (_painSuppress + _painReduce) max 0]; }; _resistance = _target getvariable [QGVAR(peripheralResistance), 100]; _resistance = _resistance + _viscosityChange; _target setvariable [QGVAR(peripheralResistance), _resistance max 0]; -// Call back to ensure that the medication is decreased over time -[_target, _classname, _varName, _maxDose, _timeInSystem, _inCompatableMedication, _viscosityChange] call FUNC(onMedicationUsage); +// Call back to ensure that the medication is decreased over ACE_time +[_target, _classname, _varName, _maxDose, _timeInSystem, _inCompatableMedication, _viscosityChange, _painReduce] call FUNC(onMedicationUsage); true diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf index 9d2c12280d..7cfb65a909 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf @@ -16,8 +16,9 @@ #include "script_component.hpp" -private ["_caller", "_target"]; +private ["_caller", "_target", "_treatmentClassname"]; _caller = _this select 0; _target = _this select 1; +_treatmentClassname = _this select 3; -[[_target], QUOTE(DFUNC(treatmentBasic_bloodbagLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ +[[_target, _treatmentClassname], QUOTE(DFUNC(treatmentBasic_bloodbagLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf index 9bbe04b35f..08057c9492 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf @@ -4,6 +4,7 @@ * * Arguments: * 0: The patient + * 1: Treatment Classname * * Return Value: * nil @@ -14,8 +15,15 @@ #include "script_component.hpp" #define BLOODBAGHEAL 70 -private ["_target","_blood"]; -_target = _this select 0; +PARAMS_2(_target,_treatmentClassname); -_blood = ((_target getVariable [QGVAR(bloodVolume), 100]) + BLOODBAGHEAL) min 100; +private ["_blood", "_bloodAdded"]; + +_bloodAdded = switch (true) do { + case (_treatmentClassname == "BloodIV_250"): {0.25 * BLOODBAGHEAL}; + case (_treatmentClassname == "BloodIV_500"): {0.5 * BLOODBAGHEAL}; + default {BLOODBAGHEAL}; +}; + +_blood = ((_target getVariable [QGVAR(bloodVolume), 100]) + _bloodAdded) min 100; _target setVariable [QGVAR(bloodVolume), _blood, true]; diff --git a/addons/medical/functions/fnc_treatmentIV.sqf b/addons/medical/functions/fnc_treatmentIV.sqf index c0f4e4681f..2b52d7d37a 100644 --- a/addons/medical/functions/fnc_treatmentIV.sqf +++ b/addons/medical/functions/fnc_treatmentIV.sqf @@ -27,6 +27,6 @@ _items = _this select 4; if (count _items == 0) exitwith {}; _removeItem = _items select 0; -[[_target, _removeItem], QUOTE(DFUNC(treatmentIVLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ +[[_target, _className], QUOTE(DFUNC(treatmentIVLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [_target, _removeItem] call FUNC(addToTriageCard); [_target, "activity", "STR_ACE_Medical_Activity_gaveIV", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); diff --git a/addons/medical/functions/fnc_treatmentIVLocal.sqf b/addons/medical/functions/fnc_treatmentIVLocal.sqf index 04708b965f..9abb5fda2f 100644 --- a/addons/medical/functions/fnc_treatmentIVLocal.sqf +++ b/addons/medical/functions/fnc_treatmentIVLocal.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: The medic - * 1: Item used classname + * 1: Treatment classname * * * Return Value: @@ -15,9 +15,9 @@ #include "script_component.hpp" -private ["_target", "_ivItem", "_config", "_volumeAdded", "_typeOf", "_varName", "_bloodVolume"]; +private ["_target", "_treatmentClassname", "_config", "_volumeAdded", "_typeOf", "_varName", "_bloodVolume"]; _target = _this select 0; -_ivItem = _this select 1; +_treatmentClassname = _this select 1; _bloodVolume = _target getvariable [QGVAR(bloodVolume), 100]; if (_bloodVolume >= 100) exitwith {}; @@ -27,10 +27,12 @@ _config = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "IV"); _volumeAdded = getNumber (_config >> "volume"); _typeOf = getText (_config >> "type"); -if (isClass (_config >> _ivItem)) then { - _config = (_config >> _ivItem); +if (isClass (_config >> _treatmentClassname)) then { + _config = (_config >> _treatmentClassname); if (isNumber (_config >> "volume")) then { _volumeAdded = getNumber (_config >> "volume");}; if (isText (_config >> "type")) then { _typeOf = getText (_config >> "type"); }; +} else { + ERROR("IV Treatment Classname not found"); }; _varName = format["ACE_Medical_IVVolume_%1",_typeOf]; diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf index 02484bbca6..5108bf8433 100644 --- a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -44,9 +44,9 @@ _target setvariable [QGVAR(tourniquets), _tourniquets, true]; // Tourniquet has been removed [(_this select 1)] call cba_fnc_removePerFrameHandler; }; - if (time - _time > 120) then { + if (ACE_time - _time > 120) then { _target setvariable [QGVAR(pain), (_target getvariable [QGVAR(pain), 0]) + 0.005]; }; -}, 5, [_target, _applyingTo, _part, time] ] call CBA_fnc_addPerFrameHandler; +}, 5, [_target, _applyingTo, _part, ACE_time] ] call CBA_fnc_addPerFrameHandler; true; diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index f0759a66ba..89330377c6 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -121,13 +121,13 @@ if (_parachuteCheck) then { }; if (!local _unit) exitwith { - _args set [3, _minWaitingTime - (time - _startingTime)]; + _args set [3, _minWaitingTime - (ACE_time - _startingTime)]; _unit setvariable [QGVAR(unconsciousArguments), _args, true]; [(_this select 1)] call cba_fnc_removePerFrameHandler; }; // Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs -if ((time - _startingTime) >= _minWaitingTime) exitwith { +if ((ACE_time - _startingTime) >= _minWaitingTime) exitwith { if (!([_unit] call FUNC(getUnconsciousCondition))) then { _unit setvariable ["ACE_isUnconscious", false, true]; }; diff --git a/addons/microdagr/CfgVehicles.hpp b/addons/microdagr/CfgVehicles.hpp index dc4ae7d237..949860742d 100644 --- a/addons/microdagr/CfgVehicles.hpp +++ b/addons/microdagr/CfgVehicles.hpp @@ -66,11 +66,24 @@ class CfgVehicles { description = "$STR_ACE_Dagr_Module_Description"; }; }; - + class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { MACRO_ADDITEM(ACE_microDAGR,10); }; }; -}; \ No newline at end of file + + class Item_Base_F; + class ACE_microDAGR_Item: Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = "$STR_ACE_microdagr_itemName"; + author = "$STR_ACE_Common_ACETeam"; + vehicleClass = "Items"; + icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa)); + class TransportItems { + MACRO_ADDITEM(ACE_microDAGR,1); + }; + }; +}; diff --git a/addons/microdagr/config.cpp b/addons/microdagr/config.cpp index 69032eafde..7a39df8980 100644 --- a/addons/microdagr/config.cpp +++ b/addons/microdagr/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {}; + units[] = {"ACE_microDAGR_Item"}; weapons[] = {"ACE_microDAGR"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; diff --git a/addons/missileguidance/functions/fnc_guidancePFH.sqf b/addons/missileguidance/functions/fnc_guidancePFH.sqf index 614323d63f..78f48250dd 100644 --- a/addons/missileguidance/functions/fnc_guidancePFH.sqf +++ b/addons/missileguidance/functions/fnc_guidancePFH.sqf @@ -24,7 +24,7 @@ _seekerParams = _args select 3; _stateParams = _args select 4; _lastRunTime = _stateParams select 0; -_runtimeDelta = diag_tickTime - _lastRunTime; +_runtimeDelta = ACE_diagTime - _lastRunTime; _adjustTime = 1; if(accTime > 0) then { @@ -100,7 +100,7 @@ _PS setDropInterval 3.0; hintSilent format["d: %1", _distanceToTarget]; #endif -_stateParams set[0, diag_tickTime]; +_stateParams set[0, ACE_diagTime]; _args set[4, _stateParams]; _this set[0, _args]; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index a184ba1ef4..f044d8242c 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -88,7 +88,7 @@ _args = [_this, getNumber ( _config >> "seekerAccuracy" ), getNumber ( _config >> "seekerMaxRange" ) ], - [ diag_tickTime, [], [] ] + [ ACE_diagTime, [], [] ] ]; // Hand off to the guiding unit. We just use local player so local PFH fires for now diff --git a/addons/missileguidance/script_component.hpp b/addons/missileguidance/script_component.hpp index 377469cdee..e2ab97a51e 100644 --- a/addons/missileguidance/script_component.hpp +++ b/addons/missileguidance/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT missileguidance -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_MISSILEGUIDANCE #define DEBUG_MODE_FULL @@ -9,6 +9,6 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSILEGUIDANCE #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define FIREMODE_DIRECT_LOAL 1 \ No newline at end of file diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index 6e5643754c..9b4c46ec10 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -72,7 +72,7 @@ if (_activated && local _logic) then { [(_this select 1)] call cba_fnc_removePerFrameHandler; }; - if (time - _lastTimePlayed >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { + if (ACE_time - _lastTimePlayed >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { _ambianceSounds = _args select 1; _minimalDistance = _args select 2; _maximalDistance = _args select 3; @@ -113,11 +113,11 @@ if (_activated && local _logic) then { // If no unit is to close to this position, we will play the sound. if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; - _args set [8, time]; + _args set [8, ACE_time]; }; }; }; - }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call cba_fnc_addPerFrameHandler; + }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, ACE_time] ] call cba_fnc_addPerFrameHandler; }; true; diff --git a/addons/mk6mortar/$PBOPREFIX$ b/addons/mk6mortar/$PBOPREFIX$ index a21eaf95f0..c5d6fd3fb2 100644 --- a/addons/mk6mortar/$PBOPREFIX$ +++ b/addons/mk6mortar/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\mk6mortar \ No newline at end of file +z\ace\addons\mk6mortar \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf index d1e0a8dd05..9d8b292070 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf @@ -21,7 +21,7 @@ Example: private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTimeDelta", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"]; -_startTime = diag_tickTime; +_startTime = ACE_diagTime; _muzzleVelocity = _this select 0; _rangeToHit = _this select 1; @@ -74,6 +74,6 @@ _lineAirDensDec = (_rangeToHit - (_lastTestResult select 0)) / 10; _lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1.1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); _lineAirDensInc = (_rangeToHit - (_lastTestResult select 0)) / 10; -// systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (diag_tickTime - _startTime)]; +// systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (ACE_diagTime - _startTime)]; [_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf index a45c415b40..cfba7c0e05 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -51,5 +51,5 @@ while {(_numberOfAttempts < MAX_ATTEMPTS) && {(abs _error) > 0.2}} do { }; if (_numberOfAttempts >= MAX_ATTEMPTS) exitWith {[]}; -//return the elevation and time required +//return the elevation and ACE_time required [_solutionElevation, (_lastTestResult select 1)] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf index 0e53807a6b..65f87256fe 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -45,7 +45,7 @@ _currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _currentTime = 0; _lastPos = _currentPos; -_kCoefficent = -1 * _relDensity * _airFriction; //save time in the loop and compute once +_kCoefficent = -1 * _relDensity * _airFriction; //save ACE_time in the loop and compute once while {((_currentVelocity select 2) > 0) || ((_currentPos select 2) >= _heightOfTarget)} do { _lastPos = _currentPos; @@ -64,7 +64,7 @@ _linConversion = linearConversion [(_lastPos select 2), (_currentPos select 2), _middlePos = (_lastPos vectorMultiply (1 - _linConversion)) vectorAdd (_currentPos vectorMultiply (_linConversion)); // _middlePosOld = (_lastPos vectorAdd _currentPos) vectorMultiply 0.5; -//Same to find travel time +//Same to find travel ACE_time _middleTotalTravelTime = _currentTime - (_timeStep * (1-_linConversion)); //Find shot offset (from crosswind), in degrees diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 284560b775..b95f39a70c 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -70,8 +70,8 @@ if (_newMuzzleVelocityCoefficent != 1) then { [_pfID] call cba_fnc_removePerFrameHandler; }; - _deltaT = time - _time; - _args set[2, time]; + _deltaT = ACE_time - _time; + _args set[2, ACE_time]; _bulletVelocity = velocity _shell; _bulletSpeed = vectorMagnitude _bulletVelocity; @@ -85,4 +85,4 @@ if (_newMuzzleVelocityCoefficent != 1) then { _shell setVelocity _bulletVelocity; -}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time, _relativeDensity]] call CBA_fnc_addPerFrameHandler; +}, 0, [_projectile, MK6_82mm_AIR_FRICTION, ACE_time, _relativeDensity]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp index e1d56d087e..b140a920cc 100644 --- a/addons/mk6mortar/script_component.hpp +++ b/addons/mk6mortar/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT mk6mortar -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_MK6MORTAR #define DEBUG_MODE_FULL @@ -9,6 +9,6 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MK6MORTAR #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" #define MK6_82mm_AIR_FRICTION -0.0001 \ No newline at end of file diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index cea2025dcc..4e40afafd0 100644 --- a/addons/nametags/XEH_postInit.sqf +++ b/addons/nametags/XEH_postInit.sqf @@ -14,7 +14,7 @@ GVAR(ShowNamesTime) = -10; if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement - GVAR(ShowNamesTime) = time; + GVAR(ShowNamesTime) = ACE_time; if (call FUNC(canShow)) then{ call FUNC(doShow); }; // Return false so it doesn't block other actions false @@ -22,6 +22,41 @@ GVAR(ShowNamesTime) = -10; {false}, [29, [false, false, false]], false] call cba_fnc_addKeybind; //LeftControl Key +// Monitor the assigned teams, and propegate them appropriately for the player +// This allows for assigned team colors to match across the entire group +[{ + private["_leader", "_playerIsLeader", "_unitTeam"]; + if (!(isNull ACE_player) && { alive ACE_player } ) then { + _leader = leader (group ACE_player); + _playerIsLeader = false; + + if(alive _leader) then { + if(_leader == ACE_player) then { + _playerIsLeader = true; + }; + }; + + if (_playerIsLeader) then { + { + if(alive _x) then { + _unitTeam = _x getVariable [QGVAR(teamAssignment),"MAIN"]; + if (_unitTeam != assignedTeam _x) then { + _x setVariable [QGVAR(teamAssignment), assignedTeam _x,true]; + }; + }; + } forEach units (group ACE_player); + } else { + { + if(alive _x) then { + _unitTeam = _x getVariable [QGVAR(teamAssignment),"MAIN"]; + if (_unitTeam != assignedTeam _x) then { + _x assignTeam _unitTeam; + }; + }; + } forEach units (group ACE_player); + }; + }; +}, 5, []] call CBA_fnc_addPerFrameHandler; // Draw handle addMissionEventHandler ["Draw3D", {_this call FUNC(onDraw3d);}]; diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index 6a7db7d5ac..c281b7f37e 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -31,8 +31,8 @@ private ["_height", "_position", "_color", "_name", "_rank", "_size", "_icon"]; PARAMS_5(_player,_target,_alpha,_heightOffset,_iconType); -if (_alpha < 0) exitWith {}; //Don't waste time if not visable -if (_iconType == ICON_NONE) exitWith {}; //Don't waste time if not visable +if (_alpha < 0) exitWith {}; //Don't waste ACE_time if not visable +if (_iconType == ICON_NONE) exitWith {}; //Don't waste ACE_time if not visable //Set Text: diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index 9efc70aeb9..9097574ebb 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -6,7 +6,7 @@ private ["_onKeyPressAlphaMax", "_defaultIcon", "_distance", "_alpha", "_icon", if (!alive ACE_player) exitWith {}; _onKeyPressAlphaMax = if ((GVAR(showPlayerNames) in [3,4])) then { - 2 + (GVAR(ShowNamesTime) - time); //after release 1 second of full opacity, 1 second of fading to 0 + 2 + (GVAR(ShowNamesTime) - ACE_time); //after release 1 second of full opacity, 1 second of fading to 0 } else { 1 }; diff --git a/addons/optics/XEH_postInit.sqf b/addons/optics/XEH_postInit.sqf index 7f68aece74..df6d0ae486 100644 --- a/addons/optics/XEH_postInit.sqf +++ b/addons/optics/XEH_postInit.sqf @@ -23,7 +23,7 @@ if (!hasInterface) exitWith {}; }; }] call EFUNC(common,addEventHandler); -// camera has to be re-created every time another camera is created. Otherwise r2t is either black or transparent. @todo Add popular custom cameras to the event in ACE_common. +// camera has to be re-created every ACE_time another camera is created. Otherwise r2t is either black or transparent. @todo Add popular custom cameras to the event in ACE_common. ["activeCameraChanged", { if !(_this select 1) then { deleteVehicle GVAR(camera); diff --git a/addons/overheating/functions/fnc_cooldown.sqf b/addons/overheating/functions/fnc_cooldown.sqf index f5a7f68c36..8fb0e0127b 100644 --- a/addons/overheating/functions/fnc_cooldown.sqf +++ b/addons/overheating/functions/fnc_cooldown.sqf @@ -16,7 +16,7 @@ EXPLODE_3_PVT(_this,_temperature,_barrelMass,_totalTime); -// If a long time passed since the last shot, there's no need to calculate anything; the weapon should be cool +// If a long ACE_time passed since the last shot, there's no need to calculate anything; the weapon should be cool if (_totalTime > 1800) exitWith {0}; private ["_barrelSurface", "_time", "_deltaTime"]; diff --git a/addons/overheating/functions/fnc_displayTemperature.sqf b/addons/overheating/functions/fnc_displayTemperature.sqf index 3012e480e3..521b998fa7 100644 --- a/addons/overheating/functions/fnc_displayTemperature.sqf +++ b/addons/overheating/functions/fnc_displayTemperature.sqf @@ -26,12 +26,12 @@ _time = _overheat select 1; _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Calculate cooling -_temperature = [_temperature, _barrelMass, time - _time] call FUNC(cooldown); +_temperature = [_temperature, _barrelMass, ACE_time - _time] call FUNC(cooldown); //["Overheating", _temperature, {format ["Temperature: %1 °C", _this]}] call EFUNC(common,log); // Store new temperature -_time = time; +_time = ACE_time; _player setVariable [_string, [_temperature, _time], false]; diff --git a/addons/overheating/functions/fnc_overheat.sqf b/addons/overheating/functions/fnc_overheat.sqf index 75ba1e1306..ee1c8f9ff5 100644 --- a/addons/overheating/functions/fnc_overheat.sqf +++ b/addons/overheating/functions/fnc_overheat.sqf @@ -44,12 +44,12 @@ _energyIncrement = 0.75 * 0.0005 * _bulletMass * (vectorMagnitudeSqr _velocity); _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Calculate cooling -_temperature = [_temperature, _barrelMass, time - _time] call FUNC(cooldown); +_temperature = [_temperature, _barrelMass, ACE_time - _time] call FUNC(cooldown); // Calculate heating _temperature = _temperature + _energyIncrement / (_barrelMass * 466); // Steel Heat Capacity = 466 J/(Kg.K) // set updated values -_time = time; +_time = ACE_time; _unit setVariable [_variableName, [_temperature, _time], false]; _scaledTemperature = (_temperature / 1000) min 1 max 0; diff --git a/addons/overheating/script_component.hpp b/addons/overheating/script_component.hpp index 46a31e6ea3..ff124851ad 100644 --- a/addons/overheating/script_component.hpp +++ b/addons/overheating/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT overheating -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_OVERHEATING #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_OVERHEATING #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/overpressure/script_component.hpp b/addons/overpressure/script_component.hpp index 21f4cea704..3a44df1f9b 100644 --- a/addons/overpressure/script_component.hpp +++ b/addons/overpressure/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT overpressure -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_OVERPRESSURE #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_OVERPRESSURE #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/parachute/functions/fnc_doLanding.sqf b/addons/parachute/functions/fnc_doLanding.sqf index 126a3b0720..a620c5a4ca 100644 --- a/addons/parachute/functions/fnc_doLanding.sqf +++ b/addons/parachute/functions/fnc_doLanding.sqf @@ -19,8 +19,8 @@ _unit = _this select 0; GVAR(PFH) = false; [_unit, "AmovPercMevaSrasWrflDf_AmovPknlMstpSrasWrflDnon", 2] call EFUNC(common,doAnimation); [{ - if (time >= ((_this select 0) select 0) + 1) then { + if (ACE_time >= ((_this select 0) select 0) + 1) then { ((_this select 0) select 1) playActionNow "Crouch"; [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); }; -}, 1, [time,_unit]] call CALLSTACK(cba_fnc_addPerFrameHandler); +}, 1, [ACE_time,_unit]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index 45816cc883..9960e3f727 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -39,7 +39,7 @@ GVAR(AltimeterActive) = true; _minute = floor ((daytime - _hour) * 60); _height = (getPosASL _unit) select 2; - _curTime = time; + _curTime = ACE_time; _timeDiff = _curTime - _prevTime; _descentRate = if(_timeDiff > 0) then {floor((_oldHeight - _height) / _timeDiff)} else {0}; @@ -49,4 +49,4 @@ GVAR(AltimeterActive) = true; (_this select 0) set [2, _height]; (_this select 0) set [3, _curTime]; -}, 0.2, [uiNamespace getVariable ["ACE_Altimeter", displayNull], _unit,floor ((getPosASL _unit) select 2), time]] call CALLSTACK(cba_fnc_addPerFrameHandler); +}, 0.2, [uiNamespace getVariable ["ACE_Altimeter", displayNull], _unit,floor ((getPosASL _unit) select 2), ACE_time]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/ragdolls/script_component.hpp b/addons/ragdolls/script_component.hpp index 3382ff70ce..a0de706e10 100644 --- a/addons/ragdolls/script_component.hpp +++ b/addons/ragdolls/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT ragdolls -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_RAGDOLLS #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_RAGDOLLS #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/realisticnames/script_component.hpp b/addons/realisticnames/script_component.hpp index 1d519dfdef..0dd8e679a7 100644 --- a/addons/realisticnames/script_component.hpp +++ b/addons/realisticnames/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT realisticnames -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_REALISTICNAMES #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_REALISTICNAMES #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf index fc802a025c..a14e0dfc1f 100644 --- a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf +++ b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf @@ -21,5 +21,5 @@ _target selectWeapon _weapon; if (currentWeapon _target != _weapon) exitWith {}; if (currentMagazine _target != "") exitWith {}; -// command is wip, reload time for launchers is not intended. +// command is wip, reload ACE_time for launchers is not intended. _target addWeaponItem [_weapon, _magazine]; diff --git a/addons/safemode/functions/fnc_lockSafety.sqf b/addons/safemode/functions/fnc_lockSafety.sqf index 5f8b4b9fbd..59aa9e78e5 100644 --- a/addons/safemode/functions/fnc_lockSafety.sqf +++ b/addons/safemode/functions/fnc_lockSafety.sqf @@ -53,7 +53,9 @@ if (_unit getVariable [QGVAR(actionID), -1] == -1) then { _unit setVariable [QGVAR(actionID), _id]; }; -_unit selectWeapon _muzzle;//_weapon +if ((typeName _muzzle) == (typeName "")) then { + _unit selectWeapon _muzzle;//_weapon +}; // play fire mode selector sound [_unit, _weapon, _muzzle] call FUNC(playChangeFiremodeSound); diff --git a/addons/safemode/script_component.hpp b/addons/safemode/script_component.hpp index c68b265489..04f10ed105 100644 --- a/addons/safemode/script_component.hpp +++ b/addons/safemode/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT safemode -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SAFEMODE #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_SAFEMODE #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index 526282a1b6..442d4c39d0 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -5,7 +5,8 @@ class CfgWeapons { class optic_LRPS : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { @@ -19,7 +20,8 @@ class CfgWeapons { class optic_SOS : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { @@ -33,7 +35,8 @@ class CfgWeapons { class optic_DMS : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 20 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { @@ -47,7 +50,8 @@ class CfgWeapons { class optic_AMS_base : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class AMS { @@ -61,7 +65,8 @@ class CfgWeapons { class optic_KHS_base : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class KHS { @@ -75,7 +80,8 @@ class CfgWeapons { class optic_KHS_old : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class KHS { diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index 31b85f309e..ac03046803 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -19,7 +19,7 @@ PARAMS_3(_unit,_turretAndDirection,_majorStep); if (!(_unit isKindOf "Man")) exitWith {false}; if (currentMuzzle _unit != currentWeapon _unit) exitWith {false}; -private ["_weaponIndex", "_zeroing", "_optic", "_increment", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero", "_adjustment"]; +private ["_weaponIndex", "_zeroing", "_optic", "_verticalIncrement", "_horizontalIncrement", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero", "_adjustment"]; _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {false}; @@ -34,28 +34,28 @@ if (isNil QGVAR(Optics)) then { }; _optic = GVAR(Optics) select _weaponIndex; -_increment = getNumber (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Increment"); +_verticalIncrement = getNumber (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_VerticalIncrement"); +_horizontalIncrement = getNumber (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_HorizontalIncrement"); _maxVertical = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Vertical"); _maxHorizontal = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Horizontal"); -if ((_increment == 0) or (count _maxHorizontal < 2) or (count _maxVertical < 2)) exitWith {false}; +if ((count _maxHorizontal < 2) || (count _maxVertical < 2)) exitWith {false}; +if ((_verticalIncrement == 0) && (_horizontalIncrement == 0)) exitWith {false}; _zeroing = _adjustment select _weaponIndex; _elevation = _zeroing select 0; _windage = _zeroing select 1; _zero = _zeroing select 2; -switch (_turretAndDirection) do -{ - case ELEVATION_UP: { _elevation = _elevation + _increment }; - case ELEVATION_DOWN: { _elevation = _elevation - _increment }; - case WINDAGE_LEFT: { _windage = _windage - _increment }; - case WINDAGE_RIGHT: { _windage = _windage + _increment }; +switch (_turretAndDirection) do { + case ELEVATION_UP: { _elevation = _elevation + _verticalIncrement }; + case ELEVATION_DOWN: { _elevation = _elevation - _verticalIncrement }; + case WINDAGE_LEFT: { _windage = _windage - _horizontalIncrement }; + case WINDAGE_RIGHT: { _windage = _windage + _horizontalIncrement }; }; if (_majorStep) then { - switch (_turretAndDirection) do - { + switch (_turretAndDirection) do { case ELEVATION_UP: { _elevation = ceil(_elevation) }; case ELEVATION_DOWN: { _elevation = floor(_elevation) }; case WINDAGE_LEFT: { _windage = floor(_windage) }; diff --git a/addons/scopes/functions/fnc_showZeroing.sqf b/addons/scopes/functions/fnc_showZeroing.sqf index a8df650374..7cefc68563 100644 --- a/addons/scopes/functions/fnc_showZeroing.sqf +++ b/addons/scopes/functions/fnc_showZeroing.sqf @@ -40,15 +40,15 @@ _horizontal = _display displayCtrl 13; _vertical ctrlSetText (str (_zeroing select 0)); _horizontal ctrlSetText (str (_zeroing select 1)); -// Set the time when to hide the knobs -GVAR(timeToHide) = diag_tickTime + 3.0; +// Set the ACE_time when to hide the knobs +GVAR(timeToHide) = ACE_diagTime + 3.0; if !(isNil QGVAR(fadePFH)) exitWith {}; // Launch a PFH to wait and fade out the knobs GVAR(fadePFH) = [{ - if (diag_tickTime >= GVAR(timeToHide)) exitWith { + if (ACE_diagTime >= GVAR(timeToHide)) exitWith { private "_layer"; _layer = [QGVAR(Zeroing)] call BIS_fnc_rscLayer; _layer cutFadeOut 2; diff --git a/addons/testmissions/$PBOPREFIX$ b/addons/testmissions/$PBOPREFIX$ index 30f861b8ff..c899a56127 100644 --- a/addons/testmissions/$PBOPREFIX$ +++ b/addons/testmissions/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\testmissions \ No newline at end of file +z\ace\addons\testmissions \ No newline at end of file diff --git a/addons/testmissions/script_component.hpp b/addons/testmissions/script_component.hpp index da17bfb7e2..d1674fb35c 100644 --- a/addons/testmissions/script_component.hpp +++ b/addons/testmissions/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT testmissions -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_TESTMISSIONS #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_ENABLED_TESTMISSIONS #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/thermals/script_component.hpp b/addons/thermals/script_component.hpp index acaf685557..97d7630b50 100644 --- a/addons/thermals/script_component.hpp +++ b/addons/thermals/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT thermals -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_THERMALS #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_THERMALS #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/vector/functions/fnc_onKeyDown.sqf b/addons/vector/functions/fnc_onKeyDown.sqf index feb706bc02..9fa51e9068 100644 --- a/addons/vector/functions/fnc_onKeyDown.sqf +++ b/addons/vector/functions/fnc_onKeyDown.sqf @@ -40,19 +40,19 @@ switch (_this select 0) do { // handle input in option menu if (GVAR(currentMode) == "settings") exitWith { - if (diag_tickTime < GVAR(keyDownTimeMenu) + 1) exitWith {}; + if (ACE_diagTime < GVAR(keyDownTimeMenu) + 1) exitWith {}; - if (diag_tickTime < GVAR(keyDownTimeAzimuth) + 0.5) then { + if (ACE_diagTime < GVAR(keyDownTimeAzimuth) + 0.5) then { GVAR(keyDownTabCountAzimuth) = (GETGVAR(keyDownTabCountAzimuth,0)) + 1; } else { GVAR(keyDownTabCountAzimuth) = 1; }; - GVAR(keyDownTimeAzimuth) = diag_tickTime; + GVAR(keyDownTimeAzimuth) = ACE_diagTime; }; if (GVAR(currentMode) == "config") exitWith { - if (diag_tickTime < GVAR(keyDownTimeMenu) + 0.5) exitWith {}; + if (ACE_diagTime < GVAR(keyDownTimeMenu) + 0.5) exitWith {}; ["config"] call FUNC(nextMode); }; @@ -66,30 +66,30 @@ switch (_this select 0) do { [false] call FUNC(showP1); // handle 5 times clicking - if (diag_tickTime < GVAR(keyDownTimeAzimuth) + 0.5) then { + if (ACE_diagTime < GVAR(keyDownTimeAzimuth) + 0.5) then { GVAR(keyDownTabCountAzimuth) = (GETGVAR(keyDownTabCountAzimuth,0)) + 1; - GVAR(keyDownTimeAzimuth) = diag_tickTime; + GVAR(keyDownTimeAzimuth) = ACE_diagTime; } else { GVAR(keyDownTabCountAzimuth) = 1; }; // open settings menu if (GVAR(keyDownTabCountAzimuth) == 5) exitWith { - GVAR(keyDownTimeMenu) = diag_tickTime; - GVAR(keyDownTimeAzimuth) = diag_tickTime; + GVAR(keyDownTimeMenu) = ACE_diagTime; + GVAR(keyDownTimeAzimuth) = ACE_diagTime; GVAR(keyDownTabCountAzimuth) = 0; GVAR(configTemp) = [GVAR(useFeet), GVAR(useMil)]; ["settings"] call FUNC(showText); "settings" call _fnc_setPFH; }; - if (diag_tickTime < GVAR(keyDownTimeAzimuth) + 0.5) exitWith { + if (ACE_diagTime < GVAR(keyDownTimeAzimuth) + 0.5) exitWith { "azimuth+inclination" call _fnc_setPFH; }; - GVAR(keyDownTimeAzimuth) = diag_tickTime; + GVAR(keyDownTimeAzimuth) = ACE_diagTime; - if (diag_tickTime > GVAR(keyDownTimeDistance) + 0.5) then { + if (ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5) then { if !(GETGVAR(isKeyDownDistance,false)) then { ["distance"] call FUNC(clearDisplay); "azimuth" call _fnc_setPFH; @@ -110,19 +110,19 @@ switch (_this select 0) do { // handle input in option menu if (GVAR(currentMode) == "config") exitWith { - if (diag_tickTime < GVAR(keyDownTimeMenu) + 0.5) exitWith {}; + if (ACE_diagTime < GVAR(keyDownTimeMenu) + 0.5) exitWith {}; - if (diag_tickTime < GVAR(keyDownTimeDistance) + 0.5) then { + if (ACE_diagTime < GVAR(keyDownTimeDistance) + 0.5) then { GVAR(keyDownTabCountDistance) = (GETGVAR(keyDownTabCountDistance,0)) + 1; } else { GVAR(keyDownTabCountDistance) = 1; }; - GVAR(keyDownTimeDistance) = diag_tickTime; + GVAR(keyDownTimeDistance) = ACE_diagTime; }; if (GVAR(currentMode) == "settings") exitWith { - if (diag_tickTime < GVAR(keyDownTimeMenu) + 0.5) exitWith {}; + if (ACE_diagTime < GVAR(keyDownTimeMenu) + 0.5) exitWith {}; ["settings"] call FUNC(nextMode); }; @@ -141,30 +141,30 @@ switch (_this select 0) do { [false] call FUNC(showP1); // handle 5 times clicking - if (diag_tickTime < GVAR(keyDownTimeDistance) + 0.5) then { + if (ACE_diagTime < GVAR(keyDownTimeDistance) + 0.5) then { GVAR(keyDownTabCountDistance) = (GETGVAR(keyDownTabCountDistance,0)) + 1; - GVAR(keyDownTimeDistance) = diag_tickTime; + GVAR(keyDownTimeDistance) = ACE_diagTime; } else { GVAR(keyDownTabCountDistance) = 1; }; // open config menu if (GVAR(keyDownTabCountDistance) == 5) exitWith { - GVAR(keyDownTimeMenu) = diag_tickTime; - GVAR(keyDownTimeDistance) = diag_tickTime; + GVAR(keyDownTimeMenu) = ACE_diagTime; + GVAR(keyDownTimeDistance) = ACE_diagTime; GVAR(keyDownTabCountDistance) = 0; GVAR(configTemp) = GVAR(modeReticle); ["config"] call FUNC(showText); "config" call _fnc_setPFH; }; - if (diag_tickTime < GVAR(keyDownTimeDistance) + 0.5) exitWith { + if (ACE_diagTime < GVAR(keyDownTimeDistance) + 0.5) exitWith { "height+distance" call _fnc_setPFH; }; - GVAR(keyDownTimeDistance) = diag_tickTime; + GVAR(keyDownTimeDistance) = ACE_diagTime; - if (diag_tickTime > GVAR(keyDownTimeAzimuth) + 0.5) then { + if (ACE_diagTime > GVAR(keyDownTimeAzimuth) + 0.5) then { if !(GETGVAR(isKeyDownAzimuth,false)) then { ["azimuth"] call FUNC(clearDisplay); "distance" call _fnc_setPFH; diff --git a/addons/vector/functions/fnc_onKeyHold.sqf b/addons/vector/functions/fnc_onKeyHold.sqf index 568ef2050c..ff4e5fc6ad 100644 --- a/addons/vector/functions/fnc_onKeyHold.sqf +++ b/addons/vector/functions/fnc_onKeyHold.sqf @@ -21,7 +21,7 @@ switch (_this select 0) do { case ("azimuth"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeAzimuth) + 0.2; + _isReady = ACE_diagTime > GVAR(keyDownTimeAzimuth) + 0.2; [false] call FUNC(showCenter); @@ -42,7 +42,7 @@ switch (_this select 0) do { case ("distance"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5; [_isReady] call FUNC(showCenter); @@ -66,7 +66,7 @@ switch (_this select 0) do { call FUNC(showAzimuth); private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5; [_isReady] call FUNC(showCenter); @@ -89,7 +89,7 @@ switch (_this select 0) do { case ("azimuth+inclination"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeAzimuth) + 0.2; + _isReady = ACE_diagTime > GVAR(keyDownTimeAzimuth) + 0.2; [false] call FUNC(showCenter); @@ -110,7 +110,7 @@ switch (_this select 0) do { case ("height+distance"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5; [_isReady] call FUNC(showCenter); @@ -132,7 +132,7 @@ switch (_this select 0) do { case ("relative_distance"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeAzimuth) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeAzimuth) + 0.5; [_isReady] call FUNC(showCenter); @@ -155,7 +155,7 @@ switch (_this select 0) do { case ("relative_height+length"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeAzimuth) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeAzimuth) + 0.5; [_isReady] call FUNC(showCenter); @@ -178,7 +178,7 @@ switch (_this select 0) do { case ("relative_azimuth+distance"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5; [_isReady] call FUNC(showCenter); @@ -201,7 +201,7 @@ switch (_this select 0) do { case ("fall_of_shot"): { private "_isReady"; - _isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5; + _isReady = ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5; [_isReady] call FUNC(showCenter); @@ -223,8 +223,8 @@ switch (_this select 0) do { }; case ("settings"): { - if (diag_tickTime < GVAR(keyDownTimeMenu) + 1) exitWith { - GVAR(keyDownTimeAzimuth) = diag_tickTime; + if (ACE_diagTime < GVAR(keyDownTimeMenu) + 1) exitWith { + GVAR(keyDownTimeAzimuth) = ACE_diagTime; }; [["meter", "feet"] select (GVAR(configTemp) select 0)] call FUNC(showText); @@ -247,7 +247,7 @@ switch (_this select 0) do { }; }; - if (GVAR(keyDownTabCountAzimuth) > 0 && {diag_tickTime > GVAR(keyDownTimeAzimuth) + 0.5}) exitWith { + if (GVAR(keyDownTabCountAzimuth) > 0 && {ACE_diagTime > GVAR(keyDownTimeAzimuth) + 0.5}) exitWith { ["clear_left"] call FUNC(showText); ["clear_right"] call FUNC(showText); @@ -264,8 +264,8 @@ switch (_this select 0) do { }; case ("config"): { - if (diag_tickTime < GVAR(keyDownTimeMenu) + 1) exitWith { - GVAR(keyDownTimeDistance) = diag_tickTime; + if (ACE_diagTime < GVAR(keyDownTimeMenu) + 1) exitWith { + GVAR(keyDownTimeDistance) = ACE_diagTime; }; switch (GVAR(configTemp)) do { @@ -315,7 +315,7 @@ switch (_this select 0) do { }; }; - if (GVAR(keyDownTabCountDistance) > 0 && {diag_tickTime > GVAR(keyDownTimeDistance) + 0.5}) exitWith { + if (GVAR(keyDownTabCountDistance) > 0 && {ACE_diagTime > GVAR(keyDownTimeDistance) + 0.5}) exitWith { ["clear_left"] call FUNC(showText); ["clear_right"] call FUNC(showText); diff --git a/addons/vehiclelock/readme.md b/addons/vehiclelock/readme.md index dc013145aa..64ae01a99c 100644 --- a/addons/vehiclelock/readme.md +++ b/addons/vehiclelock/readme.md @@ -31,7 +31,7 @@ Two key modes (can be used together): * `ACE_vehicleLock_lockpickStrength` - NUMBER: secons, determines how long lockpicking with take, overrides ACE_VehicleLock_DefaultLockpickStrength #### Public Functions: -`[bob, car1, true] call ACE_VehicleLock_fnc_addKeyForVehicle;` - will add a `ACE_magazine_customKey` to bob and program it to work on car1 +`[bob, car1, true] call ACE_VehicleLock_fnc_addKeyForVehicle;` - will add a `ACE_key_customKeyMagazine` to bob and program it to work on car1 ## Maintainers diff --git a/addons/vehicles/functions/fnc_startEngine.sqf b/addons/vehicles/functions/fnc_startEngine.sqf index 44adb9ed06..63afd78e2e 100644 --- a/addons/vehicles/functions/fnc_startEngine.sqf +++ b/addons/vehicles/functions/fnc_startEngine.sqf @@ -15,11 +15,11 @@ if (!_isEngineOn || {floor abs speed _vehicle > 0}) exitWith {}; _time = _this select 0 select 1; _direction = _this select 0 select 2; - if (time > _time) exitWith { + if (ACE_time > _time) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; _vehicle setVelocity [0, 0, 0]; _vehicle setVectorDirAndUp _direction; -} , 0, [_vehicle, time + STARTUP_DELAY, [vectorDir _vehicle, vectorUp _vehicle]]] call CBA_fnc_addPerFrameHandler; +} , 0, [_vehicle, ACE_time + STARTUP_DELAY, [vectorDir _vehicle, vectorUp _vehicle]]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/viewdistance/ACE_Settings.hpp b/addons/viewdistance/ACE_Settings.hpp index 42e022bb25..8db97caa52 100644 --- a/addons/viewdistance/ACE_Settings.hpp +++ b/addons/viewdistance/ACE_Settings.hpp @@ -8,24 +8,24 @@ class ACE_Settings { class GVAR(viewDistanceOnFoot) { typeName = "SCALAR"; isClientSettable = 1; - value = 11; // index, NOT value // Can set it to client's actual viewdistance in the init function once ACE_Settings supports numbers (if ever). - values[] = {"1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf + value = 0; // index, NOT value // Can set it to client's actual viewdistance in the init function once ACE_Settings supports numbers (if ever). + values[] = {"$STR_ACE_ViewDistance_videosettings","500","1000","1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf displayName = "$STR_ACE_ViewDistance_onFoot_DisplayName"; description = "$STR_ACE_ViewDistance_onFoot_Description"; }; class GVAR(viewDistanceLandVehicle) { typeName = "SCALAR"; isClientSettable = 1; - value = 11; // index, NOT value - values[] = {"1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf + value = 0; // index, NOT value + values[] = {"$STR_ACE_ViewDistance_videosettings","500","1000","1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf displayName = "$STR_ACE_ViewDistance_landVehicle_DisplayName"; description = "$STR_ACE_ViewDistance_landVehicle_Description"; }; class GVAR(viewDistanceAirVehicle) { typeName = "SCALAR"; isClientSettable = 1; - value = 11; // index, NOT value - values[] = {"1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf + value = 0; // index, NOT value + values[] = {"$STR_ACE_ViewDistance_videosettings","500","1000","1500","2000","2500","3000","3500","4000","5000","6000","7000","8000","9000","10000"}; // Values also need to be changed in functions/fnc_returnValue.sqf displayName = "$STR_ACE_ViewDistance_airVehicle_DisplayName"; description = "$STR_ACE_ViewDistance_airVehicle_Description"; }; diff --git a/addons/viewdistance/functions/fnc_changeViewDistance.sqf b/addons/viewdistance/functions/fnc_changeViewDistance.sqf index 7d5f8150dc..9060254c60 100644 --- a/addons/viewdistance/functions/fnc_changeViewDistance.sqf +++ b/addons/viewdistance/functions/fnc_changeViewDistance.sqf @@ -26,11 +26,17 @@ _new_view_distance = [_index_requested] call FUNC(returnValue); // changes the s _object_view_distance_coeff = [GVAR(objectViewDistanceCoeff)] call FUNC(returnObjectCoeff); // changes the setting index into a coefficient. _view_distance_limit = GVAR(limitViewDistance); // Grab the limit +setViewDistance (_new_view_distance min _view_distance_limit); + +if (_object_view_distance_coeff > 0) then { + setObjectViewDistance (_object_view_distance_coeff * viewDistance); +}; + if (_show_prompt) then { _text = if (_new_view_distance <= _view_distance_limit) then { - format ["%1 %2m", (localize "STR_ACE_ViewDistance_infotext"), str(_new_view_distance)]; + format ["%1 %2m", (localize "STR_ACE_ViewDistance_infotext"), str(viewDistance)]; } else { - format ["%1 %2m", (localize "STR_ACE_ViewDistance_invalid"), str(_view_distance_limit)]; + format ["%1 %2m", (localize "STR_ACE_ViewDistance_invalid"), str(viewDistance)]; }; if (GVAR(objectViewDistanceCoeff) > 0) then { @@ -38,9 +44,3 @@ if (_show_prompt) then { }; [parseText _text,2] call EFUNC(common,displayTextStructured); }; - -setViewDistance (_new_view_distance min _view_distance_limit); - -if (_object_view_distance_coeff > 0) then { - setObjectViewDistance (_object_view_distance_coeff * _new_view_distance); -}; diff --git a/addons/viewdistance/functions/fnc_returnValue.sqf b/addons/viewdistance/functions/fnc_returnValue.sqf index 9d4725c72e..fb449cf702 100644 --- a/addons/viewdistance/functions/fnc_returnValue.sqf +++ b/addons/viewdistance/functions/fnc_returnValue.sqf @@ -1,7 +1,7 @@ /* * Author: Winter * Returns the view distance value according to the given index - * + * * * Arguments: * 0: View Distance Index @@ -22,18 +22,21 @@ PARAMS_1(_index); private ["_return"]; _return = switch (_index) do { - case 0: {1500}; - case 1: {2000}; - case 2: {2500}; - case 3: {3000}; - case 4: {3500}; - case 5: {4000}; - case 6: {5000}; - case 7: {6000}; - case 8: {7000}; - case 9: {8000}; - case 10: {9000}; - case 11: {10000}; + case 0: {-1}; + case 1: {500}; + case 2: {1000}; + case 3: {1500}; + case 4: {2000}; + case 5: {2500}; + case 6: {3000}; + case 7: {3500}; + case 8: {4000}; + case 9: {5000}; + case 10: {6000}; + case 11: {7000}; + case 12: {8000}; + case 13: {9000}; + case 14: {10000}; default {1000}; }; diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index bbcfb9e60b..33d667b65f 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -96,6 +96,10 @@ That option is invalid! The limit is Ta opcja jest nieprawidłowa! Limit wynosi + + + Video Settings + Ustawienia wideo diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 455c336d96..9f5d94f182 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -5,11 +5,11 @@ GVAR(temperatureShift) = 3 - random 6; GVAR(badWeatherShift) = (random 1) ^ 2 * 10; GVAR(humidityShift) = (5 - random 10) / 100; -GVAR(wind_period_start_time) = time; -GVAR(rain_period_start_time) = time; +GVAR(wind_period_start_time) = ACE_time; +GVAR(rain_period_start_time) = ACE_time; -"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; -"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; +"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = ACE_time; }; +"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = ACE_time; }; "ACE_MISC_PARAMS" addPublicVariableEventHandler { if (!isServer) then { if (GVAR(syncMisc)) then { diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index a23394e992..5b123afaa0 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -16,7 +16,7 @@ if (isNil "ACE_WIND_PARAMS") exitWith { [0, 0, 0] }; EXPLODE_5_PVT(ACE_WIND_PARAMS,_dir,_dirChange,_spd,_spdChange,_period); private ["_periodPercent", "_periodPosition"]; -_periodPosition = (time - GVAR(wind_period_start_time)) min _period; +_periodPosition = (ACE_time - GVAR(wind_period_start_time)) min _period; _periodPercent = _periodPosition / _period; _spd = _spd + _spdChange * _periodPercent; diff --git a/addons/weather/functions/fnc_updateAceWeather.sqf b/addons/weather/functions/fnc_updateAceWeather.sqf index 8ed0bb0d10..de5a644835 100644 --- a/addons/weather/functions/fnc_updateAceWeather.sqf +++ b/addons/weather/functions/fnc_updateAceWeather.sqf @@ -45,7 +45,7 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); - GVAR(rain_period_start_time) = time; + GVAR(rain_period_start_time) = ACE_time; publicVariable "ACE_RAIN_PARAMS"; }; @@ -91,7 +91,7 @@ if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { GVAR(current_wind_direction) = _windDirection; GVAR(current_wind_speed) = _windSpeed; - GVAR(wind_period_start_time) = time; + GVAR(wind_period_start_time) = ACE_time; publicVariable "ACE_WIND_PARAMS"; }; diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index d240093443..ab89ea7225 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -18,7 +18,7 @@ if (!isNil "ACE_RAIN_PARAMS") then { EXPLODE_3_PVT(ACE_RAIN_PARAMS,_oldRain,_newRain,_period); private ["_periodPosition", "_periodPercent"]; - _periodPosition = (time - GVAR(rain_period_start_time)) min _period; + _periodPosition = (ACE_time - GVAR(rain_period_start_time)) min _period; _periodPercent = (_periodPosition / _period) min 1; 0 setRain (_oldRain + (_newRain - _oldRain) * _periodPercent); diff --git a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf index 4c2859f9b6..40e349095e 100644 --- a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf +++ b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf @@ -30,8 +30,8 @@ [_this select 1] call cba_fnc_removePerFrameHandler; }; - _deltaT = time - _time; - _args set[2, time]; + _deltaT = ACE_time - _time; + _args set[2, ACE_time]; if (vectorMagnitude ACE_wind > 0) then { _trueVelocity = _bulletVelocity vectorDiff ACE_wind; @@ -47,4 +47,4 @@ }; _bullet setVelocity _bulletVelocity; -}, GVAR(simulationInterval), [_this select 0, _this select 1, time]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file +}, GVAR(simulationInterval), [_this select 0, _this select 1, ACE_time]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/zeus/functions/fnc_bi_moduleCurator.sqf b/addons/zeus/functions/fnc_bi_moduleCurator.sqf index c254358f4b..016d1ae078 100644 --- a/addons/zeus/functions/fnc_bi_moduleCurator.sqf +++ b/addons/zeus/functions/fnc_bi_moduleCurator.sqf @@ -110,7 +110,7 @@ if (_activated) then { if (_name == "") then {_name = localize "STR_A3_curator";}; //--- Wait until mission starts - waituntil {time > 0}; + waituntil {ACE_time > 0}; //--- Refresh addon list, so it's broadcasted to clients _addons = curatoraddons _logic; diff --git a/addons/zeus/functions/fnc_bi_moduleProjectile.sqf b/addons/zeus/functions/fnc_bi_moduleProjectile.sqf index 6e2ee35387..203d058d5a 100644 --- a/addons/zeus/functions/fnc_bi_moduleProjectile.sqf +++ b/addons/zeus/functions/fnc_bi_moduleProjectile.sqf @@ -102,9 +102,9 @@ if (_activated) then { _side = side group _x; if (_side in [east,west,resistance,civilian]) then { //--- Play radio (only if it wasn't played recently) - if (time > _x getvariable ["BIS_fnc_moduleProjectile_radio",-_delay]) then { + if (ACE_time > _x getvariable ["BIS_fnc_moduleProjectile_radio",-_delay]) then { [[_side,_radio,"side"],"bis_fnc_sayMessage",_x] call bis_fnc_mp; - _x setvariable ["BIS_fnc_moduleProjectile_radio",time + _delay]; + _x setvariable ["BIS_fnc_moduleProjectile_radio",ACE_time + _delay]; }; }; }; diff --git a/documentation/development/Documentation guidelines and tips.md b/documentation/development/Documentation guidelines and tips.md index 620d4d9343..adb3c48b9c 100644 --- a/documentation/development/Documentation guidelines and tips.md +++ b/documentation/development/Documentation guidelines and tips.md @@ -42,6 +42,7 @@ Short description of sub-feature 2. - Step 3. ## 3. Dependencies + `ace_something` ## 4. Guides @@ -50,6 +51,7 @@ Short description of sub-feature 2. # Guidelines - A line between each entry like above. +- Use `ACE3` instead of `ACE 3`. - Remove each entry that is not used. - Don't forget to say what you're going to work on in #documentation in slack or [this topic] (https://github.com/acemod/ACE3/issues/1166) - Keybinds in ``` thoses thingies ``` diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md index c6d9009358..d87ca4145e 100644 --- a/documentation/development/ace3-config-entries.md +++ b/documentation/development/ace3-config-entries.md @@ -51,7 +51,8 @@ ace_gforcecoef ace_protection ace_scopeadjust_horizontal ace_scopeadjust_vertical -ace_scopeadjust_increment +ace_scopeadjust_verticalincrement +ace_scopeadjust_horizontalincrement ace_isusedlauncher ace_attachable ace_range diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md index 3de25d3ea9..9a2880b319 100644 --- a/documentation/development/setting-up-the-development-environment.md +++ b/documentation/development/setting-up-the-development-environment.md @@ -87,6 +87,7 @@ File Patching allows you to change the files in an addon while the game is runni ### 7.1 Enabling File Patching There are two ways to enable file patching: + - Load cba_cache_disable.pbo (included in CBA's optional folder) - Add the following to your test missions description.ext: diff --git a/documentation/feature/advanced_ballistics.md b/documentation/feature/advanced_ballistics.md index bbdf440fec..f50f6fcd8b 100644 --- a/documentation/feature/advanced_ballistics.md +++ b/documentation/feature/advanced_ballistics.md @@ -1,13 +1,13 @@ --- layout: wiki title: Advanced Ballistics -description: The advanced ballistics module improves internal- and external ballistics. +description: The advanced ballistics module improves internal and external ballistics. group: feature parent: wiki --- ## 1. Overview -The advanced ballistics module improves internal- and external ballistics. +The Advanced Ballistics module improves internal and external ballistics. ## 2. Features - Drag modeling based on real-world ballistic coefficients. @@ -17,15 +17,15 @@ The advanced ballistics module improves internal- and external ballistics. - Terrain features, buildings and other objects disrupt the wind. - [Magnus effect](https://en.wikipedia.org/wiki/Magnus_effect) (spin drift) - [Coriolis effect](https://en.wikipedia.org/wiki/Coriolis_effect) and [Eötvös effect](https://en.wikipedia.org/wiki/Eotvos_effect) (Earth rotation) -- Loss of stability during transonic flight -- Variable muzzle velocity based on on powder burn rate and barrel length +- Loss of stability during transonic flight. +- Variable muzzle velocity based on powder burn rate and barrel length. - Bullet trace effect for supersonic bullets (light refraction due to air pressure waves). - A protractor for quickly measuring the inclination angle. ## 3. Usage + +### 3.1 Protractor Press Ctrl+Shift+K while using a compatible weapon to toggle the protractor. The red line indicates the current inclination angle in degrees. The protractor will disappear if you lower or holster your weapon. -This module uses relatively complex scripting. Several options are provided in the ACE menu to reduce the performance impact of this module. - -## Dependencies +## 4. Dependencies `ace_ballistics`, `ace_weather`, `ace_modules` diff --git a/documentation/feature/ai.md b/documentation/feature/ai.md index 18f76562fa..a5deb17bdc 100644 --- a/documentation/feature/ai.md +++ b/documentation/feature/ai.md @@ -1,7 +1,7 @@ --- layout: wiki title: AI (Artifical Intelligence) -description: +description: Config based changes to AI to ensure compatibility with advanced AI modifications group: feature order: 5 parent: wiki @@ -14,17 +14,16 @@ The idea here is to reduce the AI's godlike aiming capabilties while retaining i Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for setSkill. ### 1.2 Firing in burst mode -AIs will now use the automatic mode of their weapons on short distances, instead of always relying on firing single shots in quick succession. +AI will now use the automatic mode of their weapons at short distances, instead of always relying on firing single shots in quick succession. ### 1.3 Longer engagement ranges The maximum engagement ranges are increased: AI will fire in bursts with variable length on high ranges of 500 - 700 meters, depending on their weapon and optic. ### 1.4 No deadzones in CQB -Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. ACE 3 removes this behaviour mostly notable in CQB by adding a valid firing mode. +Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. ACE3 removes this behaviour mostly notable in CQB by adding a valid firing mode. ### 1.5 No scripting -All changes of ACE 3 AI are config based to ensure full compatibility with advanced AI modifications like ASR AI. - +All changes of ACE3 AI are config based to ensure full compatibility with advanced AI modifications like ASR AI. ## 2. Dependencies diff --git a/documentation/feature/aircraft.md b/documentation/feature/aircraft.md index 19aec0337c..cb0ddb9c5f 100644 --- a/documentation/feature/aircraft.md +++ b/documentation/feature/aircraft.md @@ -1,7 +1,7 @@ --- layout: wiki title: Aircraft -description: +description: Changes the flight behaviour of various aircraft group: feature order: 5 parent: wiki @@ -18,10 +18,10 @@ Changes the flight behaviour of various aircraft. - AP rockets have less splash damage. ### 1.3 Missile lock warnings -Adds missile-lock warning systems to helicopters and planes based on the various real life capabilities. +Adds missile-lock warning systems to helicopters and planes based on the equivalent real life capabilities. ### 1.4 Semi-automatic flare mode -Adds the semi-automatic flare mode known from Arma 2. The key to switch the mode still exists in Arma 3's key settings, but is unused. +Adds the semi-automatic flare mode known from Arma 2. The key to switch modes existed in Arma 3's key settings, but wasn't operational until now. ### 1.5 Ejecting from pilot and copilot seats Pilots and copilots of all helicopters can now eject. @@ -32,14 +32,10 @@ Adds a laser marker to the copilot seat of the Wildcat. ### 1.7 HUD for AH-9 Adds a HUD to the AH-9 based on the Comanche's HUD. -## 1.8 Adjusted flight behaviour -Changes the flight behaviour of various aircraft. - ## 2. Usage ### 2.1 Switching flare modes -- ctrl+c (by default) - +Press Ctrl+C to switch between flare firing modes ## 3. Dependencies diff --git a/documentation/feature/apl.md b/documentation/feature/apl.md index c0705a2abe..e30de7613e 100644 --- a/documentation/feature/apl.md +++ b/documentation/feature/apl.md @@ -1,25 +1,15 @@ --- layout: wiki title: APL -description: +description: assets under APL license group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. -### Sub-feature 2 -Short description of sub-feature 2. +This folder regroup all assets released under the APL license. - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_main` diff --git a/documentation/feature/attach.md b/documentation/feature/attach.md index fafe4bf501..90bb33d585 100644 --- a/documentation/feature/attach.md +++ b/documentation/feature/attach.md @@ -1,7 +1,7 @@ --- layout: wiki title: Attach -description: +description: Allows players to attach items to objects group: feature parent: wiki --- @@ -11,26 +11,23 @@ parent: wiki ### 1.1 Attach items to uniform Allows players to attach IR grenades and chemlights to themselves. - ### 1.2 IR Strobe Adds an attachable IR strobe, which is only visible using night vision devices and offers better visibility than IR grenades. - ## 2. Usage ### 2.1 Attaching to yourself -- Self interact left windows (by default). -- Choose `equipment`. -- Choose `attach item`. +- Use Self Interact Ctrl+Left Windows. +- Choose `Equipment`. +- Choose `Attach item`. - Select which item you want to attach. -- Same thing to detach. +- Repeat to detach. -### 2.2 attaching to a vehicle -- Interact with the vehicle ctrl+left windows . -- Choose `attach item`. +### 2.2 Attaching to a vehicle +- Interact with the vehicle Left Windows. +- Choose `Attach item`. - Select your item and follow the instructions on the screen. -- To detach the item it's the same as placing it, use the interaction key from outside the vehicle. - +- Repeat to detach. ## 3. Dependencies diff --git a/documentation/feature/backpacks.md b/documentation/feature/backpacks.md index aedfb37d6a..aa803c2e3c 100644 --- a/documentation/feature/backpacks.md +++ b/documentation/feature/backpacks.md @@ -1,7 +1,7 @@ --- layout: wiki title: Backpacks -description: +description: Notifies a player when his backpack is opened group: feature parent: wiki --- @@ -9,7 +9,7 @@ parent: wiki ## 1. Overview ### 1.1 Zipping sounds -A zipper sound rings out, if someone tries to open your backpack. This helps to prevent banana theft. +A zipper sound is played when someone opens your backpack. This helps prevent banana theft. ## 2. Dependencies diff --git a/documentation/feature/ballistics.md b/documentation/feature/ballistics.md index cd44e618ba..3d82da9bc7 100644 --- a/documentation/feature/ballistics.md +++ b/documentation/feature/ballistics.md @@ -1,35 +1,38 @@ --- layout: wiki title: Ballistics -description: +description: Realistic ballistic improvements group: feature +order: 5 parent: wiki --- -# Overview -## Realistic ballistics +## 1. Overview + +### 1.1 Realistic ballistics Changes include adjusted muzzle velocity, air friction and dispersion based on real life values. -## Weaker body armor -Decreases protection values of vests, CSAT uniforms and various campaign only gear to levels comparable to Arma 2. +### 1.2 Weaker body armor +Decreases protection values of vests, CSAT uniforms and various campaign only gear to better represent realism. -## Realistic silencers and subsonic ammunition -Silencers no longer decrease the muzzle velocity and are generally less effective when used with normal ammunition. They now only remove the muzzle blast and flash. To prevent the crack caused by supersonic projectiles, ACE introduces subsonic ammunition for the 7.62mm caliber. This is also fully compatible with AI. +### 1.3 Realistic silencers and subsonic ammunition +Silencers no longer decrease the muzzle velocity and are generally less effective when used with normal ammunition. They now only remove the muzzle blast and flash. To prevent the crack caused by supersonic projectiles, ACE3 introduces subsonic ammunition for the 7.62mm caliber. This is also fully compatible with AI. -## Armour piercing ammunition -Armour piercing rounds have higher penetration values against light armoured targets or other obstacles on the battlefield. Their drawback is a slightly decreased man-stopping power. AP rounds are available in multiple calibers incudling 5.56mm and 7.62mm. +### 1.4 Flash suppressors +Flash suppressors are devices that reduce the muzzle flash while firing by cooling or dispersing the burning gases that exit the muzzle. Its intent is to reduce the chances that the shooter will be blinded in low-light shooting conditions as well as reducing the intensity of the flash visible to the enemy. -## IR-Dim tracer ammunition -IR-Dim ammunition is similar to tracer rounds, but their tracers are only visible using night vision devices. +### 1.5 Armor piercing ammunition +Armor piercing rounds have higher penetration values against light armored targets and other obstacles on the battlefield. Their drawback is a slightly decreased man-stopping power. AP rounds are available in multiple calibers incudling 5.56mm and 7.62mm. -## M118 long range ammunition +### 1.6 IR-Dim tracer ammunition +IR-Dim ammunition is similar to tracer rounds, but these tracers are only visible using night vision devices. + +### 1.7 M118 long range ammunition The M14 EBR now uses ammunition with decreased muzzle velocity and air friction to improve precision and energy retention at long ranges. -## Flash suppressors -Flash suppressors are similar to sound suppressors and prevent the muzzle flash from reducing visibility without decreasing combat effectiveness. Flash suppressors are available for the calibers 5.56mm, 6.5mm, 7.62mm, .45 ACP and 9mm. +### 1.8 Fully config-based +This module applies configuration changes only and does not decrease game performance. -## Fully config-based -This module uses configuration changes only and does not decrease game performance. +## 2. Dependencies -# Dependencies `ace_common` diff --git a/documentation/feature/captives.md b/documentation/feature/captives.md index 398210781e..14395e62a1 100644 --- a/documentation/feature/captives.md +++ b/documentation/feature/captives.md @@ -1,7 +1,7 @@ --- layout: wiki title: Captives -description: +description: System for taking and handling captives group: feature parent: wiki --- @@ -9,10 +9,10 @@ parent: wiki ## 1. Overview ### 1.1 Take captives -Introduces a captivity system for taking and moving prisoners. +Introduces a captivity system. ### 1.2 Load and unload captives into / from vehicles -You can load and unload captives from vehicles using ACE 3 interactions. +You can load and unload captives from vehicles using ACE3 interactions. ### 1.3 Frisk captives You can frisk a restrained captive. @@ -22,22 +22,22 @@ You can surrender. While surrendering AI will cease fire. ## 2. Usage -### 2.1 Capturing someone -- You need `cable ties`. -- Approach the victim / convict and use the interaction button left windows (by default). -- The interaction is around the hands in the form of a handcuffs icon. -- To free someone simply use that icon again. +### 2.1 Taking a unit into captivity +- You need `Cable Tie`. +- Approach the unit and Interact Left Windows. +- The interaction is located around the hands in the form of a handcuffs icon. +- Repeat to release. ### 2.2 Escorting a captive -- Interact with the captive left windows (by default). -- Select the escort prisoner option. -- To stop escorting just scroll down and select `release` or use self interaction ctrl+left windows (by default) and select `release`. +- Interact with the captive Left Windows. +- Select the `Escort prisoner` option. +- To stop escorting, use the mousewheel and select `Release` or use Self Interaction Ctrl+Left windows and select `Release`. -### 2.3 Loading and unloading a captive in vehicle -- Escort the person. -- Approach the vehicle you desire to load the captive in. -- Interact with the vehicle left windows (by default) and load him. -- Same for unloading, interact with the vehicle then unload. +### 2.3 Loading and unloading a captive into/from a vehicle +- Escort the captive. +- Approach the vehicle you wish to load the captive unit into. +- Interact with the vehicle Left Windows and select `Load captive`. +- Interact with the vehicle to unload. ## 3. Dependencies diff --git a/documentation/feature/common.md b/documentation/feature/common.md index 6a1dba0aa1..d15cad3573 100644 --- a/documentation/feature/common.md +++ b/documentation/feature/common.md @@ -1,18 +1,15 @@ --- layout: wiki title: Common -description: +description: Common functions and systems used by most other components. group: feature parent: wiki --- -## Overview +## 1. Overview -Module that provides common features required by many other modules. +Common functions and systems used by most other components. - -## Dependencies +## 2. Dependencies `ace_main` - -Note: The Common module is required by many other modules. Disabling it is not recommended. diff --git a/documentation/feature/difficulties.md b/documentation/feature/difficulties.md index 97bf5de4b4..cfb9c461fb 100644 --- a/documentation/feature/difficulties.md +++ b/documentation/feature/difficulties.md @@ -1,7 +1,7 @@ --- layout: wiki title: Difficulties -description: +description: Tweak to Vanilla hardest difficulty group: feature parent: wiki --- @@ -9,7 +9,7 @@ parent: wiki ## 1. Overview ### 1.1 Elite mode adjustments -Adjusts the default settings for the hardest difficulty to more closely resemble A2 settings. (No crosshair, stat screen, death messages...) +Adjusts the default settings of the hardest difficulty to better resemble A2 settings (no crosshair, stat screen, death messages). ## 2. Dependencies diff --git a/documentation/feature/disarming.md b/documentation/feature/disarming.md index ef9bb74c42..7feef4575a 100644 --- a/documentation/feature/disarming.md +++ b/documentation/feature/disarming.md @@ -8,15 +8,15 @@ parent: wiki ## 1. Overview -### 1.1 Searching someone -You can search the inventory and disarm someone that is unconscious or captive. - +### 1.1 Searching through a unit's inventory +You can search the inventory and disarm captured or unconscious units. ## 2. Usage -### 2.1 Disarming someone -- Interact with the person that is unconscious or captive ctrl+left windows . -- Select `open inventory`. +### 2.1 Searching and disarming +- Interact with the captured or unconscious unit Ctrl+Left Windows. +- Select `Open inventory`. +- Drag & Drop the items you wish to remove from the unit. ## 3. Dependencies diff --git a/documentation/feature/disposable.md b/documentation/feature/disposable.md index 5b79ae3481..c60ae729cf 100644 --- a/documentation/feature/disposable.md +++ b/documentation/feature/disposable.md @@ -1,15 +1,14 @@ --- layout: wiki title: Disposable -description: +description: Makes NLAW disposable and allows addons to do the same group: feature parent: wiki --- ## 1. Overview -### 1.1 NLAW disposable anti tank weapon -Makes the NLAW disposable and provides the tools for other addons to do the same. +The NLAW is shoulder fired and disposable, firing just once before being needed to be disposed of. This feature makes the NLAW disposable and provides the tools for other addons to do the same. ## 2. Dependencies diff --git a/documentation/feature/dragging.md b/documentation/feature/dragging.md index df699bbe8f..56928ff4a8 100644 --- a/documentation/feature/dragging.md +++ b/documentation/feature/dragging.md @@ -1,28 +1,22 @@ --- layout: wiki title: Dragging -description: +description: Adds the option to drag and carry units and objects group: feature parent: wiki --- ## 1. Overview -### 1.1 Dragging and carrying -This adds the option to drag or carry people or objects. +This adds the option to drag or carry units or objects. ## 2. Usage -### 2.1 Dragging / carrying a person -- You can only drag or carry an unconscious / injured person -- Interact with the person left windows (by default) -- Choose `drag`or `carry` -- To release someone scroll down and use `release` or self interact ctrl+left windows (by default) and `release` - -### 2.2 dragging / carrying an object -- Interact with the Object left windows (by default) -- Chose `drag`or `carry` -- To release an object scroll down and use `release` or self interact ctrl+left windows (by default) and `release` +### 2.1 Dragging / Carrying units and objects +- You can only drag or carry an unconscious unit. +- Interact with the unit or object Left Windows +- Choose `Drag` or `Carry` +- To release, use the mousewheel and select `Release` or use Self Interaction Ctrl+Left windows and select `Release`. ## 3. Dependencies diff --git a/documentation/feature/explosives.md b/documentation/feature/explosives.md index de3500a9d3..1fd02f9af1 100644 --- a/documentation/feature/explosives.md +++ b/documentation/feature/explosives.md @@ -1,7 +1,7 @@ --- layout: wiki title: Explosives -description: +description: Adds numerous improvements to using and handling explosives group: feature parent: wiki --- @@ -11,29 +11,29 @@ parent: wiki ### 1.1 Advanced explosives placement Enables more precise placement of explosives. -### 1.2 More trigger types +### 1.2 Numerous trigger types Offers different trigger types, like clackers and dead man switches. -### 1.3 Attack explosives to vehicles +### 1.3 Attach explosives to vehicles Enables attaching explosives to vehicles. ## 2. Usage ### 2.1 Placing explosives -- Use self interaction ctrl + left windows (by default) -- Navigate to `explosives` +- Use self interaction Ctrl+Left Windows +- Select `Explosives` - Choose your explosive type and follow the instructions on the screen ### 2.2 Arming and detonating explosives -- Interact with the explosive left windows (by default) +- Interact with the explosive Left Windows - Choose the arming method -- For clackers `self interact` -> `explosives` -> `detonate` +- For clackers use Self Interaction `Explosives` -> `Detonate` and choose the corresponding Firing Device ### 2.3 Defusing explosives -- A `defusal kit`is needed -- Interact with the explosive left windows (by default) -- Then choose `disarm` -- You are now free to pick it up. +- A `Defusal Kit` is required +- Interact with the explosive Left Windows +- Choose `Disarm` +- You are safe to pick it up after the action is complete. ## 3. Dependencies diff --git a/documentation/feature/fcs.md b/documentation/feature/fcs.md index 8085e47ee8..6ac4353599 100644 --- a/documentation/feature/fcs.md +++ b/documentation/feature/fcs.md @@ -6,25 +6,32 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Fire control system +### 1.1 Fire control system Offers a custom fire control system for tanks and helicopters. It enables engaging stationary and moving targets. -### Manual lasing targets +### 1.2 Manual lasing targets Changes the default rangefinders, including those in vehicles, to require manual lasing. -### Air burst ammunition +### 1.3 Air burst ammunition Anti air cannons can now use airburst ammunition. It will explode on the FCS' zeroed in range. -## Usage +## 2. Usage -To engage moving targets, place the crosshair on the enemy vehicle and press and hold tab. Follow the moving target with your crosshair for about 2 seconds and release tab. The optic will now be adjusted sideways to ensure a hit. +### 2.1 Engaging moving targets -To use manual lasing, place the crosshair on the object to range and press and hold tab. +- Place the crosshair on the enemy vehicle. +- Press and hold tab (by default) and follow the target for about 2 seconds. +- Release tab +- The optic is now adjusted sideways to ensue a hit. +### 2.2 Ranging stationary targets -## Dependencies +- Place the crosshair on the object to range. +- Tap tab (by default) the optic is now adjusted. + +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/hearing.md b/documentation/feature/hearing.md index 2f4c0b671d..01b8100bb1 100644 --- a/documentation/feature/hearing.md +++ b/documentation/feature/hearing.md @@ -6,22 +6,26 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Hearing damage simulation +### 1.1 Hearing damage simulation Introduces hearing damage caused by nearby explosions and large-caliber weapons. -### Earplugs +### 1.2 Earplugs Adds ear plugs to mitigate that effect. Soldiers with high caliber weapons or missile launchers will be equipped with those, but remember to put them in. -## Usage +## 2. Usage -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.1 Equipping earplugs +- For this you obviously need `Ear plugs`. +- Press the self interaction key ctrl+left windows (by default). +- Select `equipment`. +- Select `Earplugs in`. +- Same method to remove them but the option is `Earplugs out`. +- Note that you CAN re-use ear plugs. +## 3. Dependencies -## Dependencies - -`ace_interaction` +`ace_interaction` \ No newline at end of file diff --git a/documentation/feature/hitreactions.md b/documentation/feature/hitreactions.md index f5a4213908..fae394fa73 100644 --- a/documentation/feature/hitreactions.md +++ b/documentation/feature/hitreactions.md @@ -6,21 +6,12 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Falling under fire +If a unit is shot while running it falls to the ground in a prone position, the area where the shot lands does not matters. +Note that the shot needs to inflict a certain amout of damage to make the unit fall, a small cut won't make the unit stumble. -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_common` diff --git a/documentation/feature/interact_menu.md b/documentation/feature/interact_menu.md index 3335b32213..e66ea95406 100644 --- a/documentation/feature/interact_menu.md +++ b/documentation/feature/interact_menu.md @@ -6,22 +6,11 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +This handles the interaction layer of ACE3. -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_common` diff --git a/documentation/feature/interaction.md b/documentation/feature/interaction.md index 27b9f05e64..bd96771788 100644 --- a/documentation/feature/interaction.md +++ b/documentation/feature/interaction.md @@ -6,22 +6,11 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +This provides interaction options between units. -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_interact_menu` diff --git a/documentation/feature/inventory.md b/documentation/feature/inventory.md index fc10822917..20aa5204a2 100644 --- a/documentation/feature/inventory.md +++ b/documentation/feature/inventory.md @@ -6,18 +6,22 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Resized inventory UI +### 1.1 Resized inventory UI Makes the inventory dialog bigger and increases the number of items that can be seen in the list at once. -## Usage +## 2. Usage -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.1 Changing the size of the UI +- Press escape . +- Click on `ACE OPTIONS` on the top left corner of the screen. +- Click on `Make Inventory Display Bigger`. +- Choose the size desired on the right drop down menu. +- Press the `Close` button, your changes are automatically saved. -## Dependencies +## 3. Dependencies `ace_common` diff --git a/documentation/feature/javelin.md b/documentation/feature/javelin.md index 7095565ca9..be31f65e91 100644 --- a/documentation/feature/javelin.md +++ b/documentation/feature/javelin.md @@ -6,31 +6,30 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Improved locking +The locking capabilities of the Titan and Javelin got improved, you can now lock on anything that has a thermal signature, including houses. -### Sub-feature 2 -Short description of sub-feature 2. +### 1.2 Fire mode switching +The Titan / Javelin now posses the ability to be used in top down attack or direct. -## Usage +## 2. Usage -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.1 Locking with the Titan / Javelin +- For this feature you need to have a compatible launcher. +- Fully zoom with the launcher. +- Switch to thermals n (by default). +- While keeping your aim steadily on target press and hold tab . +- When the sound changes and a cross appears on the screen it's time to fire. -Steps to lock titan/Javelin: - -1. You must be zoomed ALL THE WAY IN -2. You must be in thermal view -3. You must have a missile loaded -4. Hold TAB over a target, it will start beeping and the constraint boxes will appear -5. Once the beeping changes to LOCK tone, and the lock crosshairs appear, click fire without releasing tab - -CTRL+TAB is default key to change firemode (configurable as a key) +### 2.2 Switching fire mode +- For this feature you need to have a compatible launcher. +- When aiming with your launcher press ctrl+tab (by default). +- On the right side of the screen (for most launchers) you should see that `TOP`is now in green that means that your missile will be fired in top down mode. -## Dependencies +## 3. Dependencies `ace_main`, `ace_common`, `ace_missileguidance` diff --git a/documentation/feature/laser.md b/documentation/feature/laser.md index af07f5bc90..78ab448e8c 100644 --- a/documentation/feature/laser.md +++ b/documentation/feature/laser.md @@ -6,21 +6,10 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +Contains various functions necessary for the realistic portrayal of laser mechanics in other components. -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_common` diff --git a/documentation/feature/laser_selfdesignate.md b/documentation/feature/laser_selfdesignate.md index 99432e0b4e..9130cc797e 100644 --- a/documentation/feature/laser_selfdesignate.md +++ b/documentation/feature/laser_selfdesignate.md @@ -6,21 +6,10 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +Allows gunners to lase their own targets. See [FCS] (http://ace3mod.com/wiki/feature/fcs.html) for more information. -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_laser` diff --git a/documentation/feature/laserpointer.md b/documentation/feature/laserpointer.md index cbc79effd0..ee6d566733 100644 --- a/documentation/feature/laserpointer.md +++ b/documentation/feature/laserpointer.md @@ -6,21 +6,18 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Visible light laser +ACE3 adds visible light laser. This feature is compatible with BI's lasers as well as supported modded ones. -### Sub-feature 2 -Short description of sub-feature 2. +## 2. Usage +### 2.1 Switching laser mode +- For this feature you need to have a compatible side attachment. +- Press ctrl+L (by default). +- A hint indicating the mode switch will appear in the top right corner. -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 3. Dependencies `ace_common` diff --git a/documentation/feature/logistics_uavbattery.md b/documentation/feature/logistics_uavbattery.md index 64f4775e46..a63a13cf4e 100644 --- a/documentation/feature/logistics_uavbattery.md +++ b/documentation/feature/logistics_uavbattery.md @@ -6,21 +6,17 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Rechargeable darters. +Adds an item `ACE_UAVBattery` that allows refuelling/recharging of the "Darter" quadcopter UAVs. -### Sub-feature 2 -Short description of sub-feature 2. +## 2. Usage +### 2.1 Recharging the darter +- For this you need a `UAV battery` and the UAV needs to be a quadcopter. +- INTERACTION LAYER NOT IMPLEMENTED YET TO BE COMPLETED. -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/logistics_wirecutter.md b/documentation/feature/logistics_wirecutter.md index dccf8d91cb..db93c85836 100644 --- a/documentation/feature/logistics_wirecutter.md +++ b/documentation/feature/logistics_wirecutter.md @@ -6,21 +6,19 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Wirecutter +Adds an item `ACE_wirecutter` that allows cutting of fences in A3 and AiA maps. -### Sub-feature 2 -Short description of sub-feature 2. +## 2. Usage +### 2.1 Using the wirecutter +- For this you need a `Wirecutter`. +- Approach the fence you want to cut. +- Press the interaction key left windows (by default). +- Find the interaction point and select `cut fence` (the only option). -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/magazinerepack.md b/documentation/feature/magazinerepack.md index 70cea9ac13..cc78dd1a00 100644 --- a/documentation/feature/magazinerepack.md +++ b/documentation/feature/magazinerepack.md @@ -6,20 +6,20 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Repacking magazines -Adds ability to repack magazines of the same type. An optional module provides -options to adjust the repacking time of single rounds and whole magazines to -the mission maker. +### 1.1 Repacking magazines +Adds the ability to repack magazines of the same type. -## Usage +## 2. Usage -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.1 Repacking +- For this you need multiple half empty mags of the same type. +- Press the self interaction button ctrl+left windows (by default). +- Select `Repack magazines`. +- Select the type of magazines you want to repack. - -## Dependencies +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/main.md b/documentation/feature/main.md index d5005ef163..3bfecf852a 100644 --- a/documentation/feature/main.md +++ b/documentation/feature/main.md @@ -6,13 +6,13 @@ group: feature parent: wiki --- -## Overview +## 1. Overview Main module which acts as the ACE core module. -## Dependencies +## 2. Dependencies -Arma 3 and CBA +`Arma 3` and `CBA (RC6 minimum)` -Note: Note: The Main module is required by all other modules. Do not disable it! +Note: The Main module is required by all other modules. Do not disable it! diff --git a/documentation/feature/map.md b/documentation/feature/map.md index 116d87eba1..b9dbb53c3b 100644 --- a/documentation/feature/map.md +++ b/documentation/feature/map.md @@ -6,21 +6,28 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Map styling +Better map styling (contours, legend, hiding bushes and trees, etc). -### Sub-feature 2 -Short description of sub-feature 2. +### 1.2 Map zoom level (optional) +The mission maker / server owner can restrict the maximum zoom level of the map. + +### 1.3 Map shake (optional) +While walking your map will move all around the place. + +### 1.4 Map illumination (optional) +The map illumination will be the same as your surroundings meaning that in a dark night you'll either need a lightsource or NVGs to see your map. + +### 1.5 Blufor tracker (optional) +With blufor tracker you'll never loose your leader anymore, it marks the position of your faction group leader on the map. -## Usage +## 2. Usage -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +- IMPORTANT NOTICE: The (optional) features above CAN be restricted by the mission maker / server owner. User experience may vary. - -## Dependencies +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/maptools.md b/documentation/feature/maptools.md index 71508df3f3..81b3507db2 100644 --- a/documentation/feature/maptools.md +++ b/documentation/feature/maptools.md @@ -6,21 +6,33 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Line drawing +This adds the possibility to draw accurate lines. -### Sub-feature 2 -Short description of sub-feature 2. +### 1.2 Map tools +This adds map tools that can be used to measure distances between two points on the map or bearings. + +### 1.3 GPS on map +If you are equipped with a vanilla GPS it will be shown on the map. (You don't need the map tools in your inventory for this.) + +## 2. Usage + +### 2.1 Using map tools +- For this you need to have `Map Tools`. +- Open the map M (by default). +- Press the self interaction key ctrl+left windows (by default). +- Select `Map tools`. +- Select the type of tools you want to use. +- Note that you can drag the Roamer (map tool) around with LMB and rotate it with ctrl+LMB . + +### 2.2 Drawing lines +- To draw lines `Map Tools` are not required. +- Press alt+left click (by default) to start the line, left click again to end it. +- To delete a line simply press delete around the center of the line. -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/markers.md b/documentation/feature/markers.md index a63adf89b7..c9e27b6a6d 100644 --- a/documentation/feature/markers.md +++ b/documentation/feature/markers.md @@ -6,18 +6,11 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Improved marker placement +### 1.1 Improved marker placement Expands the "Insert Marker" menu and allows to rotate map markers. Shows the currently selected channel to prevent misplacement. - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +## 2. Dependencies `ace_common` diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md index 4175f95e41..b77c1c8bba 100644 --- a/documentation/feature/medical-system.md +++ b/documentation/feature/medical-system.md @@ -67,7 +67,7 @@ In order to stop the bleeding, all injuries on every bodypart requires treatment While a unit is bleeding however, the blood volume decreases which will result in a change of vitals. Depending on the factors such as current blood volume, the blood loss rate, medication used, the blood pressure will start to drop. To counter this drop, also based upon the previously mentioned factors and others, the heart rate will adjust accordingly to attempt to keep blood pressure at safe levels. This means that for any patient it is required to keep an eye on the vitals. This is done through the interaction system by selecting check pulse or blood pressure on either the arms or head. #### 3.1.3 Medication -To stabalize the vitals and to counter for example pain, a player/medic can use medication. Advanced medical has 3 different medications available: +To stabilize the vitals and to counter for example pain, a player/medic can use medication. Advanced medical has 3 different medications available: * Atropine * Morphine @@ -75,7 +75,7 @@ To stabalize the vitals and to counter for example pain, a player/medic can use Atropine is a vagolytic and anticholinergic drug which in low dosages reduces heart rate but in high dosages increases it, countering effects of organophosphate poisoning (in NBC scenarios; anticholinesterase poisoning) and symptomatic bradycardia (in post-ROSC care and resuscitative medicine). -Morphine is used to alleviate large amounts of pain. Has an effect similar to Heroin due to its opiate properties. Must only ever be given once, and only when bleeding has been reduced to a minimum. Morphine must never be given to a casualty with a low heart rate, as it can stop the heart. +Morphine is used to alleviate large amounts of pain. Has an effect similar to Heroin due to its opiate properties. Must only ever be given once, and only when bleeding has been reduced to a minimum. Morphine must never be given to a casualty with a low heart rate, as it can stop the heart. It's effect lasts up to 15 minutes. Epinephrine is used to increase heart rate and blood pressure and alleviate unconsciousness. Epinephrine is a synthetic form of Adrenaline, which is naturally produced in the body. It can also be applied to counter-act the effects of Atropine. Be careful though, as it may only be given once. @@ -107,7 +107,7 @@ Advanced medical system brings more different types of wounds, each with its own * Cut wounds * Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision. * Sources: vehicle crashes, grenades, explosions, artillery shells, backblast, stabs - * Effects: pain - light, w zależności od głębokości i szerokości rany dosyć szybkie wykrwawianie się. + * Effects: pain - light, bleeding - speed depends on lenght and size of the woundę. * Lacerations * Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch. @@ -178,7 +178,7 @@ All bandage types weights about 50 grams each. * Can only be applied on limbs * Stops bleeding from wounds * Should be taken off as fast as possible and applied only to give medic time to bandage all the wounds - * If not taken off for a while it will cause pain to patient, can yield to death that way + * If not taken off for a while it will cause pain to patient, can cause death that way #### 3.1.6 Transfuzions In case of blood loss, blood could be replenished by three different types of IV: blood, plasma and saline. We distinguish 3 different sizes of IV bags: 250ml, 500ml and 1000ml. diff --git a/documentation/feature/mk6mortar.md b/documentation/feature/mk6mortar.md index 1693a9e23d..8995b8a761 100644 --- a/documentation/feature/mk6mortar.md +++ b/documentation/feature/mk6mortar.md @@ -1,26 +1,54 @@ --- layout: wiki title: Mk6 Mortar -description: +description: Improve the existing mk6 mortar. group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 mk6 mortar overhaul -### Sub-feature 2 -Short description of sub-feature 2. +ACE3 adds wind deflection for shells as well as a rangetable to accurately take out your target without the artillery computer. +## 2. Usage -## Usage +### 2.1 Switching charge +- Press F (fire mode switch) to switch between charges -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.2 Working with the rangetable +- To open the table: + - Self interact ctrl + left windows (by default). + - Select `equipment`. + - Select `Open 82mm Rangetable`. +- Using the table: + - Get the distance and elevation difference between you and the target for this you can use map tools. For this example we'll say we're 2 000m away and 50m below (we're at 20m they are at 70m, 70-20=50). + - Select the charge you want to use (0 = close / 1 = medium / 2 = far). For this case we're using charge 2. + - Check the range column on the table, we're at 2 000 then look at the corresponding entry in the column on the right (ELEV = elevation) For this example it's 1339. + - After that's done move by one column on the right that's the elevation for 100m heigh so in our case we're subtracting 2 (4:2 = 2) if our target was 300m above us we would have to subtract 12 from our elevation (3x4 = 12). + - After you finished your maths, it's time to aim, get the cross of the mortar on target, if you don't see it use a waypoint if possible. In our case ELEV is 1339-2 = 1337. + - On the right side of the screen, while looking through the mk6 scope you should see ELV, we need to match this number with the one we found. + - To adjust the ELV use pageUp and pageDown . + - Once the number you found and ELV are the same FIRE ! + - On top of that you can calculate the time the shell will take to land by using the third row from the left, in our case the shell need to travel 2000m that's 20xthe number indicated. so 20x0,5 = 10s. +### 2.3 Working with the rangetable (Crosswinds enabled) +- Same as above there's just an extra step, I'll provide an other example in case you forgot. + - Get the distance and elevation difference between you and the target for this you can use map tools. For this example we'll say we're 2 400m away and 223m below (we're at 2m they are at 225, 225-2=223) + - Select the charge you want to use (0 = close / 1 = medium / 2 = far). For this case we're using charge 2. + - Check the range column on the table, we're 2 400m a then look at the corresponding entry in the column on the right (ELEV = elevation) For this example it's 1145. + - After that's done move by one column on the right that's the elevation for 100m heigh so in our case we're subtracting 22 (2,2 x 10 (2,2 because we're around 220m below)). + - Extra step needed here, a kestrel 4500 IS NEEDED. + - Pick the crosswind on your kestrel (for this refer to the kestrel documentation). + - For this example the crosswind is of 2 MPS on my table I can see under Azimuth correction that for each 1MPS I need to correct by 2.5 mill. + - So in this case i'm subtracting 5 mill from the ELV. + - It's MATH TIME the ELV given by the table is 1 145, we subtract 22 because of the heigh, we also subtract 5 for the crosswind ( 1 145-22-5 = 1 118 ). + - After you finished your maths, it's time to aim, get the cross of the mortar on target, if you don't see it use a waypoint if possible. In our case ELEV is 1 118. + - On the right side of the screen, while looking through the mk6 scope you should see ELV, we need to match this number with the one we found. + - FIREEEE !!!! + - Little advantage of having crosswind enabled is that you don't have to calculate the flight time, it's marked on the table in this case it's 33,8s. -## Dependencies +## 3. Dependencies -`ace_interaction` +`ace_interaction` \ No newline at end of file diff --git a/documentation/feature/smallarms.md b/documentation/feature/smallarms.md index bc346b9cb9..5897123f9a 100644 --- a/documentation/feature/smallarms.md +++ b/documentation/feature/smallarms.md @@ -1,29 +1,22 @@ --- layout: wiki title: Small Arms -description: +description: Various improvements to small arms group: feature parent: wiki --- -## Overview +## 1. Overview -### Magazine Names +### 1.1 Magazine Names Unifies the name formatting of magazines similar to Arma 2 standards. -### No tracers in non-tracer mags +### 1.2 No tracers in non-tracer mags Assault rifles no longer have tracer rounds in their non-tracer magazines. This doesn't effect the additional tracers in the last rounds of machine gun magazines. -### Real magazine round counts +### 1.3 Real magazine round counts All pistol and sub machine gun magazines now have adjusted capacaties to match their real life counterparts. - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - ## Dependencies `ace_common` diff --git a/documentation/feature/vehiclelock.md b/documentation/feature/vehiclelock.md index 5431dc1624..e43dc40e33 100644 --- a/documentation/feature/vehiclelock.md +++ b/documentation/feature/vehiclelock.md @@ -1,26 +1,21 @@ --- layout: wiki title: Vehicle Lock -description: +description: The Vehiclelock module enables locking vehicles and their inventory group: feature parent: wiki --- -## Overview +## 1. Overview +ACE3 Vehicle Lock is disabled by default. This feature adds the ability to lock and unlock vehicles and their inventory using a key, as well as picking locks of locked vehicles. -### Sub-feature 1 -Short description of sub-feature 1. +## 2. Usage +Locking, unlocking and picking vehicle locks is possible via the ACE Interact menu. -### Sub-feature 2 -Short description of sub-feature 2. - - -## Usage - -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. - - -## Dependencies +
+
Note:
+

Different locking modes can be set, consult with your mission maker for more information.

+
+## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/viewdistance.md b/documentation/feature/viewdistance.md new file mode 100644 index 0000000000..23d44bfd3c --- /dev/null +++ b/documentation/feature/viewdistance.md @@ -0,0 +1,19 @@ +--- +layout: wiki +title: View Distance +description: The view distance module adds extra view distance settings +group: feature +parent: wiki +--- + +## 1. Overview +ACE3 View Distance is enabled by default. It adds the ability to have different view distance settings when on foot, in a vehicle or in the air. + +## 2. Usage +- When ingame, push ESC. +- Click `ACE Options` in the top-left corner. +- Scroll down to the `Client View Distance` settings. +- Adjust to taste. + +## 3. Dependencies +`ace_common` diff --git a/documentation/feature/weather.md b/documentation/feature/weather.md index b8bcf306b8..1c8f33978d 100644 --- a/documentation/feature/weather.md +++ b/documentation/feature/weather.md @@ -6,11 +6,13 @@ group: feature parent: wiki --- -## Overview +## 1. Overview +ACE3 Weather is enabled by default. This feature simulates realistic weather according to map location, time of day, date, etc and makes sure every player experiences the same weather effects. -ACE Weather is enabled by default. This feature simulates realistic weather according to map location, time of day, date, etc. - - -## Dependencies +## 2. Usage +### 2.1 Wind info +- Wind info is toggled on/off using Shift+K +- The arrow representing wind info is based on [Beaufort scale](http://en.wikipedia.org/wiki/Beaufort_scale#Modern_scale) +## 3. Dependencies `ace_common`, `ace_modules` diff --git a/documentation/feature/windeflection.md b/documentation/feature/windeflection.md index 386bd849c2..3a1c46b1e6 100644 --- a/documentation/feature/windeflection.md +++ b/documentation/feature/windeflection.md @@ -7,20 +7,16 @@ parent: wiki --- ## 1. Overview - -Wind Deflection is enabled by default. This feature simulates the wind deflection of projectiles fired by players and is designed to work independently or in conjunction with the Advanced Ballistic feature. +ACE3 Wind Deflection is enabled by default. This feature simulates the wind deflection of projectiles fired by players and is designed to work independently or in conjunction with the Advanced Ballistic feature.
Note:

The only affected projectiles are bullets and grenades. Mortar shells, tank shells, missiles and rockets are not affected.

- ## 2. Usage - -Wind Deflection can be disabled or modified via a Module in the 2D editor. +ACE3 Wind Deflection can be disabled or modified via a Module in the 2D editor. ## 3. Dependencies - `ace_weather` diff --git a/documentation/feature/zeus.md b/documentation/feature/zeus.md new file mode 100644 index 0000000000..d8381fa0c9 --- /dev/null +++ b/documentation/feature/zeus.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Zeus +description: The Zeus module improves the Vanilla functionality +group: feature +parent: wiki +--- + +## 1. Overview +ACE3 Zeus is enabled by default. This feature provides control over vanilla aspects of Zeus. + +## 2. Usage +ACE3 Zeus can be disabled or modified via a Module in the 2D editor. + +## 3. Dependencies +`ace_common`, `ace_modules` diff --git a/documentation/framework/settings.md b/documentation/framework/settings.md index 8a9acfdb8c..58208a873d 100644 --- a/documentation/framework/settings.md +++ b/documentation/framework/settings.md @@ -16,71 +16,80 @@ Part of this settings framework are global settings and client settings. Both us Settings are entries in the config that get translated to `missionnamespace` global variables. An example settings entry looks like this: -``` - class ACE_module_sampleSetting { - // Value - value = 1; - - // Type (SCALAR, BOOL, STRING, ARRAY, COLOR) - typeName = "SCALAR"; - - // Force the setting? - force = 0; - - // Does it appear on the options menu? - isClientSettable = 1; - - // The following settings only apply when isClientSettable == 1 - // Stringtable entry with the setting name - displayName = "$STR_ACE_Common_SettingName"; - - // Stringtable entry with the setting description - description = "$STR_ACE_Common_SettingDescription"; - - // Stringtable entries that describe the options - // Only applies if typeName == "SCALAR"; and is optional - values[] = {"Disabled", "Enabled", "Only Cursor", "Only On Keypress", "Only Cursor and KeyPress"}; - }; +```c++ +class ACE_module_sampleSetting { + // Value + value = 1; + + // Type (SCALAR, BOOL, STRING, ARRAY, COLOR) + typeName = "SCALAR"; + + // Force the setting? + force = 0; + + // Does it appear on the options menu? + isClientSettable = 1; + + // The following settings only apply when isClientSettable == 1 + // Stringtable entry with the setting name + displayName = "$STR_ACE_Common_SettingName"; + + // Stringtable entry with the setting description + description = "$STR_ACE_Common_SettingDescription"; + + // Stringtable entries that describe the options + // Only applies if typeName == "SCALAR"; and is optional + values[] = {"Disabled", "Enabled", "Only Cursor", "Only On Keypress", "Only Cursor and KeyPress"}; +}; ``` Settings are defined from the mods config but can be adjusted through the following methods: + * Optional config entries * Mission side modules ## 2. Load order The load order for the settings are: -* 1. Mod Config -* 2. Server Config + +* 1. Mod config +* 2. Server config * 3. Mission config * 4. Placed down mission modules -What this means is that at any the 3 points after the mod config it is possible to insert your adjusted settings and force those (optionally). This is a powerful tool for server admins, whom can ensure that everyone is using uniform settings across the board on their server. And it provides mission makers the ability to easily set settings for their mission, without creating a large dependancy on ACE; you do not have to place down mission modules. +What this means is that at any the 3 points after the mod config it is possible to insert your adjusted settings and force those (optionally). This is a powerful tool for server admins, whom can ensure that everyone is using uniform settings across the board on their server. And it provides mission makers the ability to easily set settings for their mission, without creating a large dependency on ACE3; you do not have to place down mission modules. ## 3. How do I use them? -In the 'how do they work' chapter an example of settings was shown. This is the same for any settings config. The only difference is the location. For ACE modules, the settings are placed in the class `ACE_settings`. The same goes for the mission config. +In the 'how do they work' chapter an example of settings was shown. This is the same for any settings config. The only difference is the location. For ACE3 modules, the settings are placed in the class `ACE_settings`. The same goes for the mission config. -The server config setting entries are done through our optional ACE_server.pbo, which can be found in the optionals folder of @ace. It also contains a userconfig folder, which inside contains the file ace\serverconfig.hpp. This is the location ACE settings are placed. There is no need for a sub class. +The server config setting entries are done through our optional ACE_server.pbo, which can be found in the optionals folder of @ace. It also contains a `userconfig` folder, which inside contains the file `ace\serverconfig.hpp`. This is the location ACE3 settings are placed. There is no need for a sub class. ### 3.1 Getting all the settings! -ACE contains a lot of settings; to tweak everything to your liking manually therefor can be quite a task. We have provided the option to export all settings in single player. For this, follow these simple steps: +ACE3 contains a lot of settings; for that reason tweaking everything to your liking manually can be quite a task. We have provided the option to export all settings in the editor (single-player). For this, follow these simple steps: -* Open the editor (Singleplayer). -* Under modules (f7), find ACE, `Config Export [ACE]`. +* Open the editor (single-player). +* Under modules (F7), find ACE, `Config Export [ACE]`. * Place down the module, ensure that the allow parameter is set to yes. -* Press preview, once in game, press Esc and open the ACE Options dialog (top left) -* This is the dialog where you can modify client side settings. On the bottom left of it, you will now see a button called 'Config Export'. Press it and a new dialog opens. -* You are now in the dialog that allows you to adjust all settings from ACE. Tweak this to your liking. -* Once you are done tweaking, press the 'Export' button and all settings will be copied to your clipboard. -* Paste the settings in your serverconfig.hpp file and done. +* Press preview, once in game, press Esc and open the ACE3 Options dialog (top left) +* This is the dialog where you can modify client side settings. On the bottom left of it, you will now see a button called `Config Export`. Press it and a new dialog opens. +* You are now in the dialog that allows you to adjust all settings from ACE3. Tweak this to your liking. +* Once you are done tweaking, press the `Export` button and all settings will be copied to your clipboard. +* Paste the settings in your `serverconfig.hpp` file and you're done. -Note that the format copied to your clipboard by this can also be used in the mission config, as long as they are in the class `ACE_Settings`. +Note that the format copied to your clipboard by this can also be used in the mission config (`description.ext`), as long as they are in the class `ACE_Settings`. -### 3.2 Loading up the serverconfig +```c++ +class ACE_Settings { + // add exported settings here +}; +``` -As stated before, the serverconfig gets loaded through the optional ACE_server.pbo. This pbo is only required (and should only be used on) the server - clients do not need to have this! It is for this reason we have not signed this pbo. -Load the ACE_server.pbo like any other addon you do on your server. Advised is to create an @aceServer mod folder and load that through `-serverMod=@aceServer`. +### 3.2 Loading up the server config + +As stated before, the server config gets loaded through the optional `ACE_server.pbo`. This PBO is only required (and should only be used) on the server - clients do not need to have this! It is for this reason we have not signed this PBO. + +Load the `ACE_server.pbo` like any other addon on your server. It is advised to create an `@aceServer` mod folder with an `addons` sub folder where you would paste the `ACE_server.pbo` and load that through `-serverMod=@aceServer`. diff --git a/documentation/missionmaker/classnames.md b/documentation/missionmaker/classnames.md index 62d80afe98..c6476c075d 100644 --- a/documentation/missionmaker/classnames.md +++ b/documentation/missionmaker/classnames.md @@ -1,6 +1,7 @@ --- layout: wiki title: Classnames +description: A list of all the classnames in ACE3, your wet dream came true. group: missionmaker order: 11 parent: wiki @@ -174,6 +175,9 @@ classname | in game name | type | --------- | --------- | --------- ACE_microDAGR | MicroDAGR GPS | ACE_ItemCore | +### mk6 mortar +`added in 3.0.0.3` + classname | in game name | type | --------- | --------- | --------- ACE_RangeTable_82mm | 82mm Rangetable | ACE_ItemCore | diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 2d7a7d80c1..5279f4793a 100644 --- a/documentation/missionmaker/modules.md +++ b/documentation/missionmaker/modules.md @@ -7,48 +7,51 @@ order: 5 parent: wiki --- -## 1. ACE +## 1. ACE3 ### 1.1 Advanced Ballistics *Part of: ace_advanced_ballistics* -This module allows to enable advanced external- and internal ballistics. +This module allows enabling and configuring advanced ballistic simulations. **Settings:** 1. **Advanced Ballistics (Boolean)**
Enables advanced ballistics.
`Default value: No` -2. **Always Enabled For Snipers (Boolean)**
-Always enables advanced ballistics when high power optics are used.
+2. **Enabled For Snipers (Boolean)**
+Enables advanced ballistics for non local snipers (when using high power optics).
`Default value: Yes` -3. **Disabled In FullAuto Mode (Boolean)**
+3. **Enabled For Group Members (Boolean)**
+Enables advanced ballistics for non local group members.
+`Default value: No` +4. **Enabled For Everyone (Boolean)**
+Enables advanced ballistics for all non local players (enabling this feature may degrade performance during heavy firefights in multiplayer).
+`Default value: No` +5. **Disabled In FullAuto Mode (Boolean)**
Disables the advanced ballistics during full auto fire.
`Default value: No` -4. **Disabled For Non Local Players (Boolean)**
-Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer).
-`Default value: Yes` -5. **Enable Ammo Temperature Simulation (Boolean)**
+6. **Enable Ammo Temperature Simulation (Boolean)**
Muzzle velocity varies with ammo temperature.
`Default value: Yes` -6. **Enable Barrel Length Simulation (Boolean)**
+7. **Enable Barrel Length Simulation (Boolean)**
Muzzle velocity varies with barrel length.
`Default value: Yes` -7. **Enable Bullet Trace Effect (Boolean)**
+8. **Enable Bullet Trace Effect (Boolean)**
Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics).
-8. **Simulation Interval (Number)**
+9. **Simulation Interval (Number)**
Defines the interval between every calculation step.
`Default value: 0.05` -9. **Simulation Radius (Number)**
+10. **Simulation Radius (Number)**
Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles.
`Default value: 3000` ### 1.2 Allow Config Export *Part of: ace_Optionmenu* -This modules allows to export all current ACE settings from the ACE Option menu to the clipboard and RPT file. +This modules allows to export all current ACE3 settings from the ACE3 Option menu to the clipboard and RPT file. 1. **Allow (Boolean)**
-Enables the "export" button in the ACE Option menu
+Enables the "export" button in the ACE3 Option menu
`Default value: Yes` ### 1.3 BlueForceTracking @@ -68,7 +71,7 @@ Hide markers for "AI only" groups.
### 1.4 Check PBOs *Part of: ace_common* -If you are worried that players haven't updated ACE or other mods to the version you're using on the server, you can place the "Check PBOs" module on your map. You can choose one of three posible actions that are being executed when a player joins that has a wrong version of ACE or an other mod: +If you are worried that players haven't updated ACE3 or other mods to the version you're using on the server, you can place the "Check PBOs" module on your map. You can choose one of three posible actions that are being executed when a player joins that has a wrong version of ACE3 or an other mod: * Warn once * Warn permanent @@ -81,7 +84,7 @@ What to do with people who do not have the right PBOs.
`Default value: "Warn once"` 2. **Check all addons (Boolean)**
-Check all addons instead of only those of ACE?
+Check all addons instead of only those of ACE3?
`Default value: "No"` 3. **Whitelist**
@@ -107,7 +110,7 @@ Example 3: @JSRS + @Blastcore-A3:
### 1.5 Explosive System *Part of: ace_explosive* -The "Explosive System" module lets you tweak the settings for the new explosive system that ACE introduces. +The "Explosive System" module lets you tweak the settings for the new explosive system that ACE3 introduces. **Settings:** @@ -236,7 +239,7 @@ This module enables Mission Makers to specificly enable units to move a rallypoi

It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework.

-To enable JIP players to move rally points have a look at [ACE Rallypoints](./mission-tools.html#1.-ace-rallypoints). +To enable JIP players to move rally points have a look at [ACE3 Rallypoints](./mission-tools.html#1.-ace-rallypoints). ### 1.15 Respawn System @@ -250,6 +253,7 @@ The "Respawn System" module enables players to respawn with the gear they had be Respawn with the gear a player had just before his death.
`Default value: No` + ### 1.16 SwitchUnits System *Part of: ace_switchunits* @@ -280,10 +284,13 @@ The safe zone around players from a different team (in meters)
### 1.17 Vehicle Lock *Part of: ace_vehiclelock* -#### 1.17.1 Vehicle Key Assign -Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start. +These modules allow you to lock and unlock vehicles and their inventory using a key. Players don't receive a key automatically; for key names, see [Classnames Wiki](http://ace3mod.com/wiki/missionmaker/classnames.html#vehicle-lock). -#### 1.17.2 Vehicle Lock Setup +#### 1.17.1 Vehicle Key Assign +Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start. +Example: `[bob, car1, true] call ACE_VehicleLock_fnc_addKeyForVehicle;` - will add a key to bob and program it to work only on car1 + +#### 1.17.2.1 Vehicle Lock Setup Settings for lockpick strength and initial vehicle lock state. Removes ambiguous lock states. **Settings:** @@ -298,26 +305,52 @@ Set lock state for all vehicles (removes ambiguous lock states)
Default Time to lockpick (in seconds)
`Default value: 10` +#### 1.17.2.2 Vehicle setVariables +* `ACE_VehicleLock_lockSide` - SIDE: overrides a vehicle's side, allowing locking and unlocking using a different side's key. For example: Unlocking INDEP vehicles with a BLUFOR key. +* `ACE_vehicleLock_lockpickStrength` - NUMBER: seconds, determines how long lockpicking with take, overrides the value set in the module for a specific vehicle of the mission maker's choice. -### 1.18 Weather + +### 1.18 View Distance Limiter +*Part of: ace_viewdistance* + +This module allows disabling the ACE3 View Distance feature as well as setting a view distance limit. + +**Settings:** + +1. **Enable ACE viewdistance (Boolean)**
+Enables ACE viewdistance
+`Default value: Yes` +2. **View Distance Limit (Number)**
+Sets the limit for how high clients can raise their view distance (<= 10000) +`Default value: 10000` + + +### 1.19 Weather *Part of: ace_weather* This module allows you to customize the weather settings.
Note:
-

ACE Weather overrides weather settings (editor, mission settings) and automatically calculates wind, temperature and pressure according to map location, date, time of day and cloud coverage and allows the weather to evolve realistically as the simulation progresses. Weather synchronization occurs between all clients.
Adjustment of the weather is possible by modifying the overcast value (for example: 0.7 may result in intermittent rain).

+

ACE3 Weather overrides weather settings (editor, mission settings) and automatically calculates wind, temperature and pressure according to map location, date, time of day and cloud coverage and allows the weather to evolve realistically as the simulation progresses. Weather synchronization occurs between all clients.
Adjustment of the weather is possible by modifying the overcast value (for example: 0.7 may result in intermittent rain).

- **Settings:** 1. **Weather propagation (Boolean)**
Enables sever side weather propagation.
`Default value: Yes` -2. **ACE Weather (Boolean)**
-Overrides the default weather with ACE weather (map based).
+
+
Note:
+

This is responsible for synchronizing weather between all clients. Disabling it is not recommended.

+
+2. **ACE3 Weather (Boolean)**
+Overrides the default weather with ACE3 weather (map based).
`Default value: Yes` +
+
Note:
+

This can be disabled without affecting the weather propagation above. Useful if you prefer changing weather settings manually.

+
3. **Sync Rain (Boolean)**
Synchronizes rain.
`Default value: Yes` @@ -331,7 +364,8 @@ Synchronizes lightnings, rainbow, fog, ...
Defines the interval (seconds) between weather updates.
`Default value: 60` -### 1.19 Wind Deflection + +### 1.20 Wind Deflection *Part of: ace_winddeflection* This module allows you to define when wind deflection is active. @@ -362,7 +396,7 @@ Defines the radius around the player (in meters) at which projectiles are wind d `Default value: 3000` -### 1.20 LSD Vehicles +### 1.21 LSD Vehicles *Part of: ace_core* And then there's the "LSD Vehicles" module … it does 'something' to all vehicles synced to that module. @@ -370,7 +404,8 @@ And then there's the "LSD Vehicles" module … it does 'something' to all v -## 2. ACE Medical + +## 2. ACE3 Medical *Part of: ace_medical* ### 2.1 Medical Settings @@ -508,7 +543,7 @@ Whether or not the objects in the list will be a medical vehicle.
`Default value: Yes` -## 3. ACE Mission Modules +## 3. ACE3 Mission Modules *Part of: ace_missionmodules* ### 3.1 Ambiance Sounds @@ -542,3 +577,28 @@ Follow players. If set to false, loop will play sounds only nearby logic positio 7. **Volume (Number)**
The volume of the sounds played
`Default value: 1` + + +## 4. ACE3 Zeus +*Part of: ace_zeus* + +### 4.1 Zeus Settings +This module provides control over vanilla aspects of Zeus. + +**Settings:** + +1. **Ascension Messages (Option)**
+Display global popup messages when a player is assigned as Zeus
+`Default value: No` +2. **Zeus Eagle (Boolean)**
+Spawn an eagle that follows the Zeus camera
+`Default value: No` +3. **Wind Sounds (Boolean)**
+Play wind sounds when Zeus remote controls a unit
+`Default value: No` +4. **Ordnance Warning (Boolean)**
+Play a radio warning when Zeus uses ordnance
+`Default value: No` +5. **Reveal Mines (Scalar)**
+Reveal mines to allies and/or place map markers
+`Default value: Disabled` diff --git a/documentation/user/installation-guide.md b/documentation/user/installation-guide.md new file mode 100644 index 0000000000..62f62b7a08 --- /dev/null +++ b/documentation/user/installation-guide.md @@ -0,0 +1,43 @@ +--- +layout: wiki +title: Installation Guide +description: Step-by-step guide for installing ACE3 +group: user +order: 0 +parent: wiki +--- + +## 1. Overview +This guide will explain how to get ACE3 up and running faster than you can say banana. + +## 2. Prerequisites +- Download [CBA](http://www.armaholic.com/page.php?id=18767). +- Download [ACE3](https://github.com/acemod/ACE3/releases/latest). +- Know how to extract .zip files. Use [Google](https://www.google.com) if not sure. + +## 3. Install ACE3 +- Extract both CBA and ACE3 .zip files into your Arma 3 folder. By default this is located in:
+32-Bit - `C:/Program Files/Steam/Steamapps/Common/Arma 3/`
+64-Bit - `C:/Program Files (x86)/Steam/Steamapps/Common/Arma 3/` +- After extraction you should have the `@ace` and `@CBA_A3` folders inside your Arma 3 folder. + +## 4. Launch Arma 3 with ACE3 +- Launch Arma 3 to start the official game Launcher. +- Click `Mods` and make sure the checkboxes next to `ace` and `CBA_A3` are ticked. +Arma 3 Vanilla Launcher +- Click `Play` + +## 5. Alternative launch methods + +### 5.1 Steam Launch Parameters +- Not supported with the new Arma 3 Launcher + +### 5.2 ArmA3Sync +- Inspect `Addon Options` and verify the `Addon Search Directories` are leading to your Arma 3 folder. +- Return to the `Addons` tab and click `Refresh`. +- Right-click inside `Addon Groups`, click `Create Group` and give it a name. +- Drag and drop `@ace` and `@CBA_A3` from `Available Addons` into the new Group you created inside `Addon Groups` and make sure the checkboxes are ticked. +Arma3Sync Launcher +- Click `Start Game` + +### 5.3 Play withSIX diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 48865f7f6b..06a398f342 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -82,7 +82,7 @@ double calculateRoughnessLength(double posX, double posY) { return 1.6; } - return roughness_lengths[2 + min(nearBuildings, 6)]; + return roughness_lengths[2 + std::min(nearBuildings, 6)]; } return 0.0024; @@ -230,7 +230,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity extern "C" { - __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); } void __stdcall RVExtension(char *output, int outputSize, const char *function) diff --git a/extensions/break_line/ace_break_line.cpp b/extensions/break_line/ace_break_line.cpp index 440566b744..8bb5af9572 100644 --- a/extensions/break_line/ace_break_line.cpp +++ b/extensions/break_line/ace_break_line.cpp @@ -20,7 +20,7 @@ #define MAXCHARACTERS 14 extern "C" { - __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); }; std::vector splitString(const std::string & input) { diff --git a/extensions/clipboard/ace_clipboard.cpp b/extensions/clipboard/ace_clipboard.cpp index 41e3a5721f..61960598ec 100644 --- a/extensions/clipboard/ace_clipboard.cpp +++ b/extensions/clipboard/ace_clipboard.cpp @@ -14,7 +14,7 @@ #include extern "C" { - __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); }; std::string gClipboardData; diff --git a/extensions/common/p3d/animation.cpp b/extensions/common/p3d/animation.cpp index 1c97399a1e..f47a40fe5a 100644 --- a/extensions/common/p3d/animation.cpp +++ b/extensions/common/p3d/animation.cpp @@ -2,7 +2,6 @@ #include "p3d/animation.hpp" #include "read_helpers.hpp" -#include "..\simulation\object.hpp" namespace ace { namespace p3d { @@ -69,4 +68,4 @@ namespace ace { animation::~animation() { } }; -}; \ No newline at end of file +}; diff --git a/extensions/common/p3d/compressed.cpp b/extensions/common/p3d/compressed.cpp index d614e2b490..47940542b8 100644 --- a/extensions/common/p3d/compressed.cpp +++ b/extensions/common/p3d/compressed.cpp @@ -1,5 +1,7 @@ #include "compressed.hpp" +#include + #include #include #include @@ -41,11 +43,7 @@ namespace ace { if (in.eof()) { in.clear(); } -#if _MSC_VER == 1800 - _data = std::make_shared(expected_size + (expected_size % 8)); -#else - _data = std::make_unique(expected_size + (expected_size % 8)); -#endif + _data = std::unique_ptr(new uint8_t[expected_size + (expected_size % 8)]); result = _mikero_lzo1x_decompress_safe(buffer, _data.get(), expected_size); if (result < 0) { diff --git a/extensions/common/p3d/compressed.hpp b/extensions/common/p3d/compressed.hpp index d9c3a5654b..31bd3fc7f7 100644 --- a/extensions/common/p3d/compressed.hpp +++ b/extensions/common/p3d/compressed.hpp @@ -37,34 +37,34 @@ namespace ace { compressed() { } compressed(std::istream &stream_, bool compressed_ = false, bool fill_ = false, uint32_t version = 68) { - stream_.read((char *)&size, sizeof(uint32_t)); + stream_.read((char *)&this->size, sizeof(uint32_t)); // if(version <) if(fill_) - READ_BOOL(fill); + READ_BOOL(this->fill); - assert(size < 4095 * 10); - if (size > 0) { - if (fill) { + assert(this->size < 4095 * 10); + if (this->size > 0) { + if (this->fill) { T val; stream_.read((char *)&val, sizeof(T)); - for (int x = 0; x < size; x++) { - data.push_back(val); + for (int x = 0; x < this->size; x++) { + this->data.push_back(val); } } else { if (version >= 64 && compressed_) { - READ_BOOL(flag); + READ_BOOL(this->flag); } - if ( (size * sizeof(T) >= 1024 && compressed_ && version < 64) || (flag && compressed_)) { - int32_t result = _decompress_safe(stream_, size * sizeof(T)); + if ( (this->size * sizeof(T) >= 1024 && compressed_ && version < 64) || (this->flag && compressed_)) { + int32_t result = this->_decompress_safe(stream_, this->size * sizeof(T)); assert(result > 0); - T * ptr = (T *)(_data.get()); - data.assign(ptr, ptr + size ); + T * ptr = (T *)(this->_data.get()); + this->data.assign(ptr, ptr + this->size ); } else { - for (int x = 0; x < size; x++) { + for (int x = 0; x < this->size; x++) { T val; stream_.read((char *)&val, sizeof(T)); - data.push_back(val); + this->data.push_back(val); } } } @@ -167,4 +167,4 @@ namespace ace { } }; } -} \ No newline at end of file +} diff --git a/extensions/common/pbo/archive.cpp b/extensions/common/pbo/archive.cpp index 71c11de3fe..13a879b8d6 100644 --- a/extensions/common/pbo/archive.cpp +++ b/extensions/common/pbo/archive.cpp @@ -16,7 +16,7 @@ namespace ace { std::streampos _save = stream_.tellg(); file_offset = begin_data_offset + entry->offset; - use_size = max(entry->size, entry->storage_size); + use_size = std::max(entry->size, entry->storage_size); output->data = new uint8_t[use_size]; bytes_read = 0; diff --git a/extensions/common/pbo/search.cpp b/extensions/common/pbo/search.cpp index f383bf5dc5..3ed299d327 100644 --- a/extensions/common/pbo/search.cpp +++ b/extensions/common/pbo/search.cpp @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include "search.hpp" #include #include @@ -298,4 +300,6 @@ namespace ace { return true; } } -} \ No newline at end of file +} + +#endif diff --git a/extensions/common/pbo/search.hpp b/extensions/common/pbo/search.hpp index 61aaccb9f0..9a3051b918 100644 --- a/extensions/common/pbo/search.hpp +++ b/extensions/common/pbo/search.hpp @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #pragma once #include "shared.hpp" @@ -24,4 +26,6 @@ namespace ace { }; typedef std::shared_ptr search_p; } -} \ No newline at end of file +} + +#endif diff --git a/extensions/common/shared.hpp b/extensions/common/shared.hpp index c84624132a..6c49b99fad 100644 --- a/extensions/common/shared.hpp +++ b/extensions/common/shared.hpp @@ -3,6 +3,8 @@ #include "targetver.h" #include #include +#include + #include #include #include @@ -23,8 +25,11 @@ #define EXTENSION_RETURN() return; #endif -#ifdef _WINDOWS +#ifdef _WIN32 #define sleep(x) Sleep(x) +#else +#define _strdup strdup +#define strtok_s strtok_r #endif namespace ace { @@ -40,6 +45,11 @@ namespace ace { std::vector &split(const std::string &s, char delim, std::vector &elems); std::vector split(const std::string &s, char delim); + template + std::unique_ptr make_unique(Args&&... args) { + return std::unique_ptr(new T(std::forward(args)...)); + } + // trim from start static inline std::string <rim(std::string &s) { s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun(std::isspace)))); @@ -74,4 +84,23 @@ namespace ace { #define ACE_ASSERT assert() #else #define ACE_ASSERT ace::runtime_assert() -#endif \ No newline at end of file +#endif + +#ifndef _WIN32 +#define __stdcall +#endif + +#if defined(_MSC_VER) + // Microsoft + #define EXPORT __declspec(dllexport) + #define IMPORT __declspec(dllimport) +#elif defined(_GCC) + // GCC + #define EXPORT __attribute__((visibility("default"))) + #define IMPORT +#else + // do nothing and hope for the best? + #define EXPORT + #define IMPORT + #pragma warning Unknown dynamic link import/export semantics. +#endif diff --git a/extensions/common/simplepipe_win32.cpp b/extensions/common/simplepipe_win32.cpp index f79af02857..469e803246 100644 --- a/extensions/common/simplepipe_win32.cpp +++ b/extensions/common/simplepipe_win32.cpp @@ -1,3 +1,5 @@ +#ifdef _WIN32 + #include "simplepipe_win32.hpp" #include #include @@ -176,4 +178,6 @@ namespace ace { return NULL; return &buf_[0]; } -} \ No newline at end of file +} + +#endif diff --git a/extensions/common/simplepipe_win32.hpp b/extensions/common/simplepipe_win32.hpp index 3c37c9637b..8f9247e4c3 100644 --- a/extensions/common/simplepipe_win32.hpp +++ b/extensions/common/simplepipe_win32.hpp @@ -1,5 +1,7 @@ #pragma once +#ifdef _WIN32 + #include #include #include @@ -55,3 +57,4 @@ namespace ace { }; } +#endif diff --git a/extensions/common/simulation/object.cpp b/extensions/common/simulation/object.cpp index 0831111711..aa702f34ac 100644 --- a/extensions/common/simulation/object.cpp +++ b/extensions/common/simulation/object.cpp @@ -1,8 +1,8 @@ #include "object.hpp" -#include "p3d\parser.hpp" +#include "p3d/parser.hpp" -#include "glm\gtc\matrix_transform.hpp" +#include "glm/gtc/matrix_transform.hpp" ace::simulation::vertex::vertex(vertex_table & _table, ace::vector3 _vertex, uint32_t _id) : table(_table), vertex_id(_id) { diff --git a/extensions/common/simulation/object.hpp b/extensions/common/simulation/object.hpp index a77da9d5cf..11ccf13390 100644 --- a/extensions/common/simulation/object.hpp +++ b/extensions/common/simulation/object.hpp @@ -8,10 +8,10 @@ #define GLM_PRECISION_HIGHP_FLOAT -#include "p3d\model.hpp" -#include "glm\glm.hpp" -#include "glm\vec3.hpp" -#include "glm\mat4x4.hpp" +#include "p3d/model.hpp" +#include "glm/glm.hpp" +#include "glm/vec3.hpp" +#include "glm/mat4x4.hpp" namespace ace { @@ -218,4 +218,4 @@ namespace ace { }; } -} \ No newline at end of file +} diff --git a/extensions/common/targetver.h b/extensions/common/targetver.h index 9a671c9f0b..14dae4e96f 100644 --- a/extensions/common/targetver.h +++ b/extensions/common/targetver.h @@ -2,7 +2,8 @@ #ifdef _WIN32 // #define WIN32_LEAN_AND_MEAN + #define NOMINMAX #include #else -#endif \ No newline at end of file +#endif diff --git a/extensions/common/vector.hpp b/extensions/common/vector.hpp index ac5b38bd1f..0eb348f312 100644 --- a/extensions/common/vector.hpp +++ b/extensions/common/vector.hpp @@ -5,7 +5,17 @@ #include "LinearMath\btVector3.h" #endif */ + #include "shared.hpp" + +#ifndef _WIN32 + +#define sinf(x) sin(x) +#define cosf(x) cos(x) +#define acosf(x) acos(x) + +#endif + namespace ace { template T acos(T n) { return -1; } @@ -158,4 +168,4 @@ namespace ace { T _x; T _y; }; -}; \ No newline at end of file +}; diff --git a/extensions/fcs/ace_fcs.cpp b/extensions/fcs/ace_fcs.cpp index 75ef3b240b..178711f54c 100644 --- a/extensions/fcs/ace_fcs.cpp +++ b/extensions/fcs/ace_fcs.cpp @@ -26,7 +26,7 @@ #define RADIANS(X) (X / (180 / M_PI)) extern "C" { - __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); }; std::vector splitString(std::string input) { diff --git a/mod.cpp b/mod.cpp index b878c76a6d..f9ae718fdc 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.0.0"; +name = "Advanced Combat Environment 3.0.1"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.0.0"; +description = "ACE3 - Version 3.0.1"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/optionals/compat_bwa3/$PBOPREFIX$ b/optionals/compat_bwa3/$PBOPREFIX$ new file mode 100644 index 0000000000..7331009959 --- /dev/null +++ b/optionals/compat_bwa3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_bwa3 \ No newline at end of file diff --git a/optionals/compat_bwa3/CfgAmmo.hpp b/optionals/compat_bwa3/CfgAmmo.hpp new file mode 100644 index 0000000000..599651ac10 --- /dev/null +++ b/optionals/compat_bwa3/CfgAmmo.hpp @@ -0,0 +1,135 @@ +class CfgAmmo { + class B_9x21_Ball; + class B_556x45_Ball_Tracer_Red; + class B_762x51_Tracer_Red; + class B_127x99_Ball_Tracer_Red; + class BWA3_B_556x45_Ball: B_556x45_Ball_Tracer_Red { + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; + }; + class BWA3_B_556x45_Ball_SD: BWA3_B_556x45_Ball { + // Reference? + ACE_ballisticCoefficients[]={}; + ACE_velocityBoundaries[]={}; + ACE_muzzleVelocities[]={}; + ACE_barrelLengths[]={}; + }; + class BWA3_B_556x45_Ball_AP: BWA3_B_556x45_Ball { + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.5359237; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.310}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820, 865, 880}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; + }; + class BWA3_B_762x51_Ball: B_762x51_Tracer_Red { + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; + }; + class BWA3_B_762x51_Ball_SD: BWA3_B_762x51_Ball { + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; + }; + class BWA3_B_762x51_Ball_AP: BWA3_B_762x51_Ball { + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=8.22946157; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.359}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={875, 910, 930}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; + }; + class BWA3_B_762x51_Ball_LR: BWA3_B_762x51_Ball { + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; + }; + class BWA3_B_127x99_Ball: B_127x99_Ball_Tracer_Red { + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={900}; + ACE_barrelLengths[]={736.6}; + }; + class BWA3_B_127x99_Ball_SD: BWA3_B_127x99_Ball { + // Reference? + ACE_ballisticCoefficients[]={}; + ACE_velocityBoundaries[]={}; + ACE_muzzleVelocities[]={}; + ACE_barrelLengths[]={}; + }; + class BWA3_B_127x99_Ball_AP: BWA3_B_127x99_Ball { + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9904; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={900}; + ACE_barrelLengths[]={736.6}; + }; + class BWA3_B_46x30_Ball: B_9x21_Ball { + ACE_caliber=4.902; + ACE_bulletLength=13.005; + ACE_bulletMass=2.0088; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.1455}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 720, 730, 740}; + ACE_barrelLengths[]={101.6, 177.8, 228.6, 304.8}; + }; + class BWA3_B_46x30_Ball_SD: BWA3_B_46x30_Ball { + // Reference? + ACE_ballisticCoefficients[]={}; + ACE_velocityBoundaries[]={}; + ACE_muzzleVelocities[]={}; + ACE_barrelLengths[]={}; + }; +}; \ No newline at end of file diff --git a/optionals/compat_bwa3/CfgWeapons.hpp b/optionals/compat_bwa3/CfgWeapons.hpp new file mode 100644 index 0000000000..9966eaafdf --- /dev/null +++ b/optionals/compat_bwa3/CfgWeapons.hpp @@ -0,0 +1,161 @@ +class CfgWeapons { + class Pistol_Base_F; + class Rifle_Base_F; + class Rifle_Long_Base_F; + class BWA3_P8: Pistol_Base_F { + ACE_barrelTwist=248.92; + ACE_barrelLength=108; + }; + class BWA3_MP7: Pistol_Base_F { + ACE_barrelTwist=160.02; + ACE_barrelLength=180; + }; + class BWA3_G36: Rifle_Base_F { + ACE_barrelTwist=177.8; + ACE_barrelLength=480; + }; + class BWA3_G36K: BWA3_G36 { + ACE_barrelTwist=177.8; + ACE_barrelLength=318; + }; + class BWA3_G28_Standard: Rifle_Long_Base_F { + ACE_barrelTwist=304.8; + ACE_barrelLength=419; + }; + class BWA3_G28_Assault: BWA3_G28_Standard { + ACE_barrelTwist=304.8; + ACE_barrelLength=305; + }; + class BWA3_G27: BWA3_G28_Standard { + ACE_barrelTwist=304.8; + ACE_barrelLength=406; + }; + class BWA3_MG4: Rifle_Long_Base_F { + ACE_barrelTwist=177.8; + ACE_barrelLength=480; + }; + class BWA3_MG5: Rifle_Long_Base_F { + ACE_barrelTwist=304.8; + ACE_barrelLength=550; + }; + class BWA3_G82: Rifle_Long_Base_F { + ACE_barrelTwist=381.0; + ACE_barrelLength=736.7; + }; + + class optic_Hamr; + class InventoryOpticsItem_Base_F; + + class BWA3_optic_ZO4x30 : optic_Hamr { + ACE_ScopeAdjust_Vertical[] = { -10, 10 }; + ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_VerticalIncrement = 0.2; + ACE_ScopeAdjust_HorizontalIncrement = 0.2; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 200 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_ZO4x30_NSV : optic_Hamr { + ACE_ScopeAdjust_Vertical[] = { -10, 10 }; + ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_VerticalIncrement = 0.2; + ACE_ScopeAdjust_HorizontalIncrement = 0.2; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 200 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_ZO4x30_IRV : optic_Hamr { + ACE_ScopeAdjust_Vertical[] = { -10, 10 }; + ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_VerticalIncrement = 0.2; + ACE_ScopeAdjust_HorizontalIncrement = 0.2; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 200 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_Shortdot : optic_Hamr { + ACE_ScopeAdjust_Vertical[] = { -0.1, 10.1 }; + ACE_ScopeAdjust_Horizontal[] = { -5.1, 5.1 }; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_20x50 : optic_Hamr { + ACE_ScopeAdjust_Vertical[] = { 0, 26 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_20x50_NSV : BWA3_optic_20x50 { + ACE_ScopeAdjust_Vertical[] = { 0, 26 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_24x72 : optic_Hamr { + ACE_ScopeAdjust_Vertical[] = { 0, 16 }; + ACE_ScopeAdjust_Horizontal[] = { -7, 7 }; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class BWA3_optic_24x72_NSV : BWA3_optic_20x50 { + ACE_ScopeAdjust_Vertical[] = { 0, 16 }; + ACE_ScopeAdjust_Horizontal[] = { -7, 7 }; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; +}; diff --git a/optionals/compat_bwa3/config.cpp b/optionals/compat_bwa3/config.cpp new file mode 100644 index 0000000000..e1ca37d121 --- /dev/null +++ b/optionals/compat_bwa3/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"BWA3_Weapons"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/compat_bwa3/script_component.hpp b/optionals/compat_bwa3/script_component.hpp new file mode 100644 index 0000000000..86bb669119 --- /dev/null +++ b/optionals/compat_bwa3/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT BWA3_Weapons_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/compat_hlcmods_ak/CfgWeapons.hpp b/optionals/compat_hlcmods_ak/CfgWeapons.hpp index 82e319ef7c..5f1c838e41 100644 --- a/optionals/compat_hlcmods_ak/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_ak/CfgWeapons.hpp @@ -58,7 +58,8 @@ class CfgWeapons class HLC_Optic_PSO1 : optic_dms { ACE_ScopeAdjust_Vertical[] = { 0, 0 }; ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; - ACE_ScopeAdjust_Increment = 0.5; + ACE_ScopeAdjust_VerticalIncrement = 0.0; + ACE_ScopeAdjust_HorizontalIncrement = 0.5; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { @@ -71,6 +72,5 @@ class CfgWeapons class HLC_Optic_1p29 : HLC_Optic_PSO1 { ACE_ScopeAdjust_Vertical[] = {}; ACE_ScopeAdjust_Horizontal[] = {}; - ACE_ScopeAdjust_Increment = 0; }; }; \ No newline at end of file diff --git a/optionals/compat_rh_acc/CfgWeapons.hpp b/optionals/compat_rh_acc/CfgWeapons.hpp index 4dda8ffbe0..ffd18bc12e 100644 --- a/optionals/compat_rh_acc/CfgWeapons.hpp +++ b/optionals/compat_rh_acc/CfgWeapons.hpp @@ -3,10 +3,21 @@ class CfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; + /* + // This would require MOA turrets + class RH_shortdot : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -1, 25 }; + ACE_ScopeAdjust_Horizontal[] = { -13, 13 }; + ACE_ScopeAdjust_VerticalIncrement = 0.5; + ACE_ScopeAdjust_Unit = "MOA"; + }; + */ + class RH_accupoint : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Accupoint { @@ -20,7 +31,8 @@ class CfgWeapons { class RH_m3lr : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class m3lr { @@ -34,7 +46,8 @@ class CfgWeapons { class RH_leu_mk4 : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class mk4 { @@ -48,7 +61,8 @@ class CfgWeapons { class RH_c79 : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class c79scope { @@ -62,7 +76,8 @@ class CfgWeapons { class RH_c79_2d : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class c79scope { @@ -76,7 +91,8 @@ class CfgWeapons { class RH_anpvs10 : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class pvs10 { @@ -90,7 +106,8 @@ class CfgWeapons { class RH_pas13cm : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class MTWS { @@ -104,7 +121,8 @@ class CfgWeapons { class RH_pas13cmg : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class MTWSmg { @@ -118,7 +136,8 @@ class CfgWeapons { class RH_pas13ch : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class HTWS { diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 90474a958f..bf5020dfc2 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -62,6 +62,7 @@ class CfgWeapons class rhs_acc_pso1m2: rhs_acc_sniper_base { ACE_ScopeAdjust_Vertical[] = { 0, 0 }; ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; - ACE_ScopeAdjust_Increment = 0.5; + ACE_ScopeAdjust_VerticalIncrement = 0.0; + ACE_ScopeAdjust_HorizontalIncrement = 0.5; }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 1cceb9a76b..fd9b1cf062 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -78,12 +78,24 @@ class CfgWeapons class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; }; class rhsusf_acc_LEUPOLDMK4_2: rhsusf_acc_sniper_base { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + }; + + class rhs_weap_fgm148 : launch_O_Titan_F { + ace_javelin_enabled = 1; + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = "\z\ace\addons\javelin\data\reticle_titan.p3d"; + + canLock = 0; + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; }; class rhs_weap_fgm148 : launch_O_Titan_F { diff --git a/optionals/compat_rksl_pm_ii/CfgWeapons.hpp b/optionals/compat_rksl_pm_ii/CfgWeapons.hpp index 621dd98b71..339759c2ba 100644 --- a/optionals/compat_rksl_pm_ii/CfgWeapons.hpp +++ b/optionals/compat_rksl_pm_ii/CfgWeapons.hpp @@ -6,7 +6,8 @@ class CfgWeapons { class RKSL_optic_PMII_312 : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { @@ -20,7 +21,8 @@ class CfgWeapons { class RKSL_optic_PMII_312_sunshade : ItemCore { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; - ACE_ScopeAdjust_Increment = 0.1; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { class OpticsModes { class Snip { diff --git a/optionals/compat_sma3_iansky/$PBOPREFIX$ b/optionals/compat_sma3_iansky/$PBOPREFIX$ new file mode 100644 index 0000000000..c570d4eb98 --- /dev/null +++ b/optionals/compat_sma3_iansky/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_sma3_iansky \ No newline at end of file diff --git a/optionals/compat_sma3_iansky/CfgWeapons.hpp b/optionals/compat_sma3_iansky/CfgWeapons.hpp new file mode 100644 index 0000000000..a387b76c1a --- /dev/null +++ b/optionals/compat_sma3_iansky/CfgWeapons.hpp @@ -0,0 +1,20 @@ + +class CfgWeapons { + class ItemCore; + class InventoryOpticsItem_Base_F; + + class iansky_nfbeast : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -0.9, 34 }; + ACE_ScopeAdjust_Horizontal[] = { -11, 11 }; + ACE_ScopeAdjust_VerticalIncrement = 0.2; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class NF25_MILDOT { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; +}; diff --git a/optionals/compat_sma3_iansky/config.cpp b/optionals/compat_sma3_iansky/config.cpp new file mode 100644 index 0000000000..4dfda50805 --- /dev/null +++ b/optionals/compat_sma3_iansky/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"iansky_opt"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/compat_sma3_iansky/script_component.hpp b/optionals/compat_sma3_iansky/script_component.hpp new file mode 100644 index 0000000000..5b627ce63a --- /dev/null +++ b/optionals/compat_sma3_iansky/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT sma3_iansky_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/server/script_component.hpp b/optionals/server/script_component.hpp index 18afd814f7..c81bf390de 100644 --- a/optionals/server/script_component.hpp +++ b/optionals/server/script_component.hpp @@ -1,5 +1,5 @@ #define COMPONENT server -#include "\z\ace\Addons\main\script_mod.hpp" +#include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SERVER #define DEBUG_MODE_FULL @@ -9,4 +9,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_SERVER #endif -#include "\z\ace\Addons\main\script_macros.hpp" +#include "\z\ace\addons\main\script_macros.hpp"