diff --git a/AUTHORS.txt b/AUTHORS.txt index c9fdea1351..d33f9f41c7 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -24,22 +24,30 @@ VKing Walter Pearce # CONTRIBUTORS -11RDP-LoupVert [BIG]Bull +11RDP-LoupVert ACCtomeek +adam3adam Adanteh aeroson -alef Aggr094 +alef +Aleksey EpMAK Yermakov Alganthe Anthariel +Asgar Serran +Bla1337 +BlackPixxel BlackQwar Brakoviejo Brisse BullHorn Clon1998 Codingboy +Coren Crusty +Dharma Bellamkonda +Dimaslg eRazeri evromalarkey Falke75 @@ -49,31 +57,37 @@ Filip Basara FreeZbe geraldbolso1899 Ghost +Gianmarco Varriale (TeamNuke) GieNkoV gpgpgpgp Grzegorz -Gianmarco Varriale (TeamNuke) Hamburger SV Harakhti havena Hawkins jokoho48 Jonpas +Kavinsky Kllrt +legman Legolasindar "Viper" licht-im-Norden87 MarcBook meat Michail Nikolaev nic547 +nikolauska nomisum +OnkelDisMaster oscarmolinadev pokertour +Professor rakowozz +ramius86 Raspu86 Riccardo Petricca Robert Boklahánics -ramius86 +ruPaladin SilentSpike simon84 Sniperwolf572 @@ -82,19 +96,6 @@ Toaster Tonic Tourorist Valentin Torikian -zGuba -Aleksey EpMAK Yermakov -ruPaladin -BlackPixxel -Asgar Serran -Kavinsky -Coren -OnkelDisMaster -Dimaslg VyMajoris(W-Cephei) -Bla1337 -nikolauska -adam3adam -Professor Winter -Dharma Bellamkonda +zGuba 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..0c321aa833 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -28,82 +28,115 @@ Advanced Ballistics Zaawansowana balistyka + Balística avanzada Advanced Ballistics Zaawansowana balistyka + Balística avanzada Enables advanced ballistics Aktywuje zaawansowaną balistykę + Activa la balística avanzada - - Always Enabled For Snipers - Zawsze akt. dla snajp. + + Enabled For Snipers + Activada para francotiradores - - 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) + Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica) + + + Enabled For Group Members + Activada para miembros de grupo + + + Enables advanced ballistics for non local group members + Activada la balística avanzada para miembros de grupo no locales + + + Enabled For Everyone + Activada para todos + + + Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer) + Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador). + + + Always Enabled For Group Members + Zawsze akt. dla czł. grupy + Siempre activada para miembros de grupo + + + Always enables advanced ballistics when a group member fires + Aktywuje zaawansowaną balistykę dla wszystkich członków grupy + Activada la balística avanzada siempre cuando miembros de grupo disparan Disabled In FullAuto Mode Wył. podczas ognia auto. + Desactivada en modo automático 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) + Desactivada la balística avanzada durante el fuego automático Enable Ammo Temperature Simulation Symulacja temp. amunicji + Activar simulación de temperatura de munición Muzzle velocity varies with ammo temperature Prędkość wylotowa pocisku jest zależna od temperatury amunicji + La velocidad de salida varía con la temperatura de la munición Enable Barrel Length Simulation Symulacja długości lufy + Habilitar la simulación de longitud del cañón Muzzle velocity varies with barrel length Prędkość wylotowa pocisku jest zależna od długości lufy + La velocidad de salidal varía con la longitud del cañón Enable Bullet Trace Effect Efekt smugi pocisku + Activar el efecto trazador de la bala Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics) Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę) + Activa el efecto trazador de la balas de gran calibre (solo visible cuando se mira a través de una mira telescópica) Simulation Interval Interwał symulacji + Intervalo de simulación Defines the interval between every calculation step Określa interwał pomiędzy każdym krokiem kalkulacji + Define el intervalo entre cada cálculo Simulation Radius Zasięg symulacji + Radio de simulación Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków + Define el radio alrededor del jugador (en metros) en el cual se aplica la balística avanzada a los proyectiles 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/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index cefc7a26eb..97dad6e7b6 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -152,7 +152,7 @@ class ATragMX_Display { type=0; font="TahomaB"; SizeEX=0.025; - idc=-1; + idc=720000; style=48; x=0.55*safezoneW+safezoneX-0.256; y=0.265*safezoneH+safezoneY-0.1; @@ -160,7 +160,7 @@ class ATragMX_Display { h=1.024*4/3; colorBackground[]={1,1,1,1}; colorText[]={1,1,1,1}; - text=PATHTOF(UI\atrag.paa); + text=PATHTOF(UI\atrag_d.paa); }; class POWER: ATragMX_RscButton { idc=-1; diff --git a/addons/atragmx/UI/ATRAG.paa b/addons/atragmx/UI/ATRAG_D.paa similarity index 100% rename from addons/atragmx/UI/ATRAG.paa rename to addons/atragmx/UI/ATRAG_D.paa diff --git a/addons/atragmx/UI/ATRAG_N.paa b/addons/atragmx/UI/ATRAG_N.paa new file mode 100644 index 0000000000..a588fdbc8b Binary files /dev/null and b/addons/atragmx/UI/ATRAG_N.paa differ diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 1e86838b8b..9663ec0a92 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -6,41 +6,41 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; } else { // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model - GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], + GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006469, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], - ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], - ["12.7x99mm" , 900, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], + ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003722, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], + ["12.7x99mm" , 900, 100, 0.0623, -0.0005942, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], - ["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], + ["12.7x54mm" , 300, 100, 0.3395, -0.0001877, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], - [".408 Chey Tac" , 910, 100, 0.0571, -0.0003950, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], + [".408 Chey Tac" , 910, 100, 0.0571, -0.0003958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ], - ["9.3×64mm" , 870, 100, 0.0619, -0.0010600, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], + ["9.3×64mm" , 870, 100, 0.0619, -0.0010921, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ], - [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], - [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], - [".338LM API526" , 895, 100, 0.0601, -0.0006730, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ], + [".338LM 250gr" , 880, 100, 0.0598, -0.0006234, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], + [".338LM 300gr" , 800, 100, 0.0677, -0.0005397, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], + [".338LM API526" , 895, 100, 0.0601, -0.0007120, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ], - [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], - [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], - [".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"], + [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0007305, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], + [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0006326, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], + [".300WM Berger OTM" , 853, 100, 0.0622, -0.0005271, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"], - ["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], + ["7.62x54mmR" , 800, 100, 0.0692, -0.0010165, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], - ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], - ["7.62x51mm M118LR" , 780, 100, 0.0710, -0.0008525, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], - ["7.62x51mm Mk319" , 910, 100, 0.0585, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], - ["7.62x51mm M993" , 930, 100, 0.0585, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"], - ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], + ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010319, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], + ["7.62x51mm M118LR" , 780, 100, 0.0710, -0.0008497, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], + ["7.62x51mm Mk319" , 910, 100, 0.0585, -0.0010435, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], + ["7.62x51mm M993" , 930, 100, 0.0585, -0.0010914, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"], + ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004145, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], - ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], - ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], - ["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006510, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"], + ["6.5x39mm" , 800, 100, 0.0683, -0.0007728, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], + ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0006977, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], + ["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006136, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"], - ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], - ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], - ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ], - ["5.56x45mm M995" , 869, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]]; + ["5.56x45mm M855" , 870, 100, 0.0626, -0.0013685, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], + ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011287, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], + ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0013064, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ], + ["5.56x45mm M995" , 869, 100, 0.0616, -0.0012972, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]]; [] call FUNC(clear_user_data); profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; 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_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 6951137577..df71f9beb9 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -15,6 +15,9 @@ */ #include "script_component.hpp" +#define __dsp (uiNamespace getVariable "ATragMX_Display") +#define __ctrlBackground (__dsp displayCtrl 720000) + if (GVAR(active)) exitWith { false }; if (underwater ACE_player) exitWith { false }; if (!("ACE_ATragMX" in (uniformItems ACE_player)) && !("ACE_ATragMX" in (vestItems ACE_player))) exitWith { false }; @@ -49,4 +52,11 @@ GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer); GVAR(active) = true; +GVAR(DialogPFH) = [{ + if (!GVAR(active)) exitWith { + [_this select 1] call cba_fnc_removePerFrameHandler; + }; + __ctrlBackground ctrlSetText format [QUOTE(PATHTOF(UI\ATRAG_%1.paa)), ["N", "D"] select (call EFUNC(common,ambientBrightness))]; +}, 60, []] call cba_fnc_addPerFrameHandler; + true diff --git a/addons/atragmx/functions/fnc_on_close_dialog.sqf b/addons/atragmx/functions/fnc_on_close_dialog.sqf index 32ba4e4c43..46cbbfc146 100644 --- a/addons/atragmx/functions/fnc_on_close_dialog.sqf +++ b/addons/atragmx/functions/fnc_on_close_dialog.sqf @@ -1,4 +1,5 @@ #include "script_component.hpp" uiNamespace setVariable ['ATragMX_Display', nil]; -GVAR(active) = false; \ No newline at end of file +GVAR(active) = false; +[GVAR(DialogPFH)] call cba_fnc_removePerFrameHandler; \ No newline at end of file diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index 31f38f63c9..ce566416f4 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -59,7 +59,7 @@ if (GVAR(currentUnit) == 1) then { private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifleTwist", "_muzzleVelocity", "_zeroRange"]; _boreHeight = parseNumber(ctrlText 120000); _bulletMass = parseNumber(ctrlText 120010); -_bulletDiameter = parseNumber(ctrlText 120020); +_bulletDiameter = parseNumber(ctrlText 120020) * 10; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { _airFriction = 0.1 max parseNumber(ctrlText 120030) min 2; } else { @@ -71,7 +71,7 @@ _zeroRange = parseNumber (ctrlText 120060); if (GVAR(currentUnit) != 2) then { _boreHeight = _boreHeight * 2.54; _bulletMass = _bulletMass * 0.06479891; - _bulletDiameter = _bulletDiameter * 10 * 2.54; + _bulletDiameter = _bulletDiameter * 2.54; _rifleTwist = _rifleTwist * 2.54; _muzzleVelocity = _muzzleVelocity / 3.2808399; }; 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/atragmx/functions/fnc_update_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf index b11b214500..6332506006 100644 --- a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf @@ -30,7 +30,7 @@ if (GVAR(currentUnit) != 2) then { if (GVAR(currentUnit) != 2) then { ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) / 10 / 2.54 * 1000) / 1000)]; } else { - ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)]; + ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) / 10 * 1000) / 1000)]; }; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)]; diff --git a/addons/atragmx/initKeybinds.sqf b/addons/atragmx/initKeybinds.sqf index 8bc37752f3..0638e5cea8 100644 --- a/addons/atragmx/initKeybinds.sqf +++ b/addons/atragmx/initKeybinds.sqf @@ -2,7 +2,10 @@ { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; - if (GVAR(active)) exitWith {false}; + if (GVAR(active)) exitWith { + closeDialog 0; + false + }; // Statement [] call FUNC(create_dialog); false diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 585070d401..40d62e440e 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.5 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.6 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/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 3ab265091e..74b8d1e4c3 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -20,11 +20,11 @@ class CfgAmmo { }; class B_556x45_Ball : BulletBase { - airFriction=-0.001265; + airFriction=-0.0013685; hit=8; typicalSpeed=750; - tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerStartTime=0.073; // M856 tracer burns out to 800m + tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator ACE_caliber=5.69; ACE_bulletLength=23.012; ACE_bulletMass=4.0176; @@ -37,7 +37,7 @@ class CfgAmmo { 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 ACE_556x45_Ball_Mk262 : B_556x45_Ball { - airFriction=-0.001125; + airFriction=-0.0011287; caliber=0.8; deflecting=18; hit=11; @@ -54,7 +54,7 @@ class CfgAmmo { ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class ACE_556x45_Ball_Mk318 : B_556x45_Ball { - airFriction=-0.001120; + airFriction=-0.0013064; caliber=0.8; deflecting=18; hit=9; @@ -71,7 +71,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class ACE_556x45_Ball_M995_AP : B_556x45_Ball { - airFriction=-0.001120; + airFriction=-0.0012972; caliber=1.6; deflecting=18; hit=6; @@ -85,14 +85,14 @@ class CfgAmmo { ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820, 865, 880}; - ACE_barrelLengths[]={254.0, 393.7, 508.0}; + ACE_barrelLengths[]={254.0, 368.3, 508.0}; }; class B_556x45_Ball_Tracer_Red; class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red { nvgOnly = 1; }; class ACE_545x39_Ball_7N6M : B_556x45_Ball { - airFriction=-0.001162; + airFriction=-0.001222; caliber=0.6; deflecting=18; hit=7; @@ -110,13 +110,13 @@ class CfgAmmo { }; class B_556x45_Ball_Tracer_Green; class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green { - airFriction=-0.001162; + airFriction=-0.001222; caliber=0.6; deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime=0.073; // 7T3M tracer burns out to 850m + tracerEndTime=1.70236; // Time in seconds calculated with ballistics calculator ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.22704; @@ -129,7 +129,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_65x39_Caseless : BulletBase { - airFriction=-0.000785; + airFriction=-0.0007728; typicalSpeed=800; ACE_caliber=6.706; ACE_bulletLength=32.893; @@ -151,7 +151,7 @@ class CfgAmmo { nvgOnly = 1; }; class ACE_65x47_Ball_Scenar: B_65x39_Caseless { - airFriction=-0.00078; + airFriction=-0.0006977; typicalSpeed=820 ; caliber=0.9; ACE_caliber=6.706; @@ -166,7 +166,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_65_Creedmor_Ball: B_65x39_Caseless { - airFriction=-0.000651; + airFriction=-0.0006136; typicalSpeed=860 ; caliber=1.1; ACE_caliber=6.706; @@ -181,11 +181,11 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_762x51_Ball : BulletBase { - airFriction=-0.001035; + airFriction=-0.0010319; typicalSpeed=833; hit=9; - tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m + tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -202,7 +202,7 @@ class CfgAmmo { nvgOnly = 1; }; class ACE_762x51_Ball_M118LR : B_762x51_Ball { - airFriction=-0.0008525; + airFriction=-0.0008497; caliber=1.8; hit=16; typicalSpeed=790; @@ -218,7 +218,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball { - airFriction=-0.0008525; + airFriction=-0.0008421; caliber=1.8; hit=16; typicalSpeed=790; @@ -234,7 +234,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { - airFriction=-0.00103; + airFriction=-0.0010435; caliber=1.5; hit=14; typicalSpeed=900; @@ -250,7 +250,7 @@ class CfgAmmo { ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class ACE_762x51_Ball_M993_AP : B_762x51_Ball { - airFriction=-0.00103; + airFriction=-0.0010914; caliber=2.2; hit=11; typicalSpeed=910; @@ -266,7 +266,7 @@ class CfgAmmo { ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class ACE_762x51_Ball_Subsonic : B_762x51_Ball { - airFriction=-0.000535; + airFriction=-0.0004145; caliber=1; hit=6; typicalSpeed=320; @@ -282,7 +282,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_30_06_M1_Ball : B_762x51_Ball { - airFriction=-0.0009; + airFriction=-0.0008290; typicalSpeed=800; caliber=2.0; hit=10; @@ -298,7 +298,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { - airFriction=-0.0008; + airFriction=-0.0005809; typicalSpeed=820; caliber=2.1; hit=8; @@ -314,7 +314,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_243_Winchester_Ball : B_762x51_Ball { - airFriction=-0.00095; + airFriction=-0.0007010; typicalSpeed=915; caliber=2.3; hit=6; @@ -330,7 +330,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { - airFriction=-0.000830; + airFriction=-0.0007305; caliber=1.8; hit=17; typicalSpeed=900; @@ -346,7 +346,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { - airFriction=-0.000815; + airFriction=-0.0006326; caliber=1.9; hit=18; typicalSpeed=867; @@ -362,7 +362,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { - airFriction=-0.00076; + airFriction=-0.0005271; caliber=2.0; hit=19; typicalSpeed=853; @@ -378,7 +378,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_762x54_Ball: B_762x51_Ball { - airFriction=-0.001023; + airFriction=-0.0010165; typicalSpeed=820; ACE_caliber=7.925; ACE_bulletLength=28.956; @@ -392,7 +392,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x54_Ball_7N14 : B_762x51_Ball { - airFriction=-0.001023; + airFriction=-0.0010165; caliber=1.5; hit=15; typicalSpeed=820; @@ -409,12 +409,12 @@ class CfgAmmo { }; class B_762x54_Tracer_Green; class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { - airFriction=-0.001023; + airFriction=-0.0010369; caliber=1.5; hit=15; typicalSpeed=800; - tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds - tracerEndTime = 3; + tracerStartTime=0.073; // Based on the 7T2 which burns three seconds + tracerEndTime=3; ACE_caliber=7.925; ACE_bulletLength=28.956; ACE_bulletMass=9.6552; @@ -427,7 +427,7 @@ class CfgAmmo { ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x35_Ball : B_762x51_Ball { - airFriction=-0.000821; + airFriction=-0.0012406; caliber=1.5; hit=11; typicalSpeed=790; @@ -443,7 +443,7 @@ class CfgAmmo { ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; class ACE_762x39_Ball : B_762x51_Ball { - airFriction=-0.0015168; + airFriction=-0.0014519; hit=12; caliber=1.5; typicalSpeed=716; @@ -477,7 +477,7 @@ class CfgAmmo { ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_9x21_Ball : BulletBase { - airFriction=-0.00125; + airFriction=-0.0021165; typicalSpeed=390; hit=6; ACE_caliber=9.042; @@ -493,7 +493,7 @@ class CfgAmmo { }; class ACE_9x18_Ball_57N181S : B_9x21_Ball { hit=5; - airFriction=-0.001234; + airFriction=-0.0015655; typicalSpeed=298; ACE_caliber=9.271; ACE_bulletLength=15.494; @@ -507,7 +507,7 @@ class CfgAmmo { ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class ACE_9x19_Ball : B_9x21_Ball { - airFriction=-0.001234; + airFriction=-0.0015833; typicalSpeed=370; hit=6; ACE_caliber=9.017; @@ -537,7 +537,7 @@ class CfgAmmo { ACE_barrelLengths[]={101.6, 117.094, 228.6}; }; class ACE_765x17_Ball: B_9x21_Ball { - airFriction=-0.001213; + airFriction=-0.001410; typicalSpeed=282; hit=7; ACE_caliber=7.938; @@ -552,7 +552,7 @@ class CfgAmmo { ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class ACE_303_Ball : ACE_762x51_Ball_M118LR { - airFriction=-0.00083; + airFriction=-0.0008410; typicalSpeed=761; caliber=2.0; ACE_caliber=7.899; @@ -567,7 +567,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_93x64_Ball : BulletBase { - airFriction=-0.00106; + airFriction=-0.0010921; typicalSpeed=880; ACE_caliber=9.296; ACE_bulletLength=34.29; @@ -582,7 +582,7 @@ class CfgAmmo { }; class B_408_Ball : BulletBase { timeToLive=10; - airFriction=-0.000395; + airFriction=-0.0003958; typicalSpeed=910; ACE_caliber=10.363; ACE_bulletLength=54.0; @@ -611,7 +611,7 @@ class CfgAmmo { }; class B_338_Ball : BulletBase { timeToLive=10; - airFriction=-0.000606; + airFriction=-0.0006234; typicalSpeed=915; ACE_caliber=8.585; ACE_bulletLength=39.573; @@ -625,7 +625,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_338_NM_Ball : BulletBase { - airFriction=-0.000537; + airFriction=-0.0005434; typicalSpeed=820; ACE_caliber=8.585; ACE_bulletLength=43.18; @@ -640,7 +640,7 @@ class CfgAmmo { }; class ACE_338_Ball : B_338_Ball { timeToLive=10; - airFriction=-0.000535; + airFriction=-0.0005397; typicalSpeed=826; ACE_caliber=8.585; ACE_bulletLength=43.18; @@ -655,7 +655,7 @@ class CfgAmmo { }; class ACE_338_Ball_API526 : B_338_Ball { timeToLive=10; - airFriction=-0.000673; + airFriction=-0.0007120; caliber=2.8; typicalSpeed=895; ACE_caliber=8.585; @@ -670,7 +670,7 @@ class CfgAmmo { ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_127x54_Ball : BulletBase { - airFriction=-0.00014; + airFriction=-0.0001877; typicalSpeed=300; ACE_caliber=12.954; ACE_bulletLength=64.516; @@ -685,7 +685,7 @@ class CfgAmmo { }; class B_127x99_Ball : BulletBase { timeToLive=10; - airFriction=-0.0006; + airFriction=-0.0005942; typicalSpeed=900; ACE_caliber=12.954; ACE_bulletLength=58.674; @@ -700,7 +700,7 @@ class CfgAmmo { }; class ACE_127x99_API : BulletBase { timeToLive=10; - airFriction=-0.0006; + airFriction=-0.0005886; typicalSpeed=900; hit=25; caliber=4.0; @@ -717,7 +717,7 @@ class CfgAmmo { }; class ACE_127x99_Ball_AMAX : B_127x99_Ball { timeToLive=10; - airFriction=-0.000374; + airFriction=-0.0003722; typicalSpeed=860; caliber=3.0; ACE_caliber=12.954; @@ -733,7 +733,7 @@ class CfgAmmo { }; class B_127x108_Ball : BulletBase { timeToLive=10; - airFriction=-0.00064; + airFriction=-0.0006469; typicalSpeed=820; ACE_caliber=12.979; ACE_bulletLength=64.008; @@ -747,7 +747,7 @@ class CfgAmmo { ACE_barrelLengths[]={728.98}; }; class B_45ACP_Ball : BulletBase { - airFriction=-0.0007182; + airFriction=-0.0007312; typicalSpeed=250; ACE_caliber=11.481; ACE_bulletLength=17.272; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 32121e4e87..6d1a3c7b89 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -55,7 +55,7 @@ class CfgMagazines { displayName = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name"; displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort"; descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description"; - initSpeed = 1046; + initSpeed = 865; }; class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag { author = "$STR_ACE_Common_ACETeam"; 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/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 85ac44b4de..17c3238c66 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -1595,6 +1595,7 @@ [ACE] Ammo Supply Crate [ACE] Skrzynka z amunicją + [ACE] Caja de suministros de munición - + \ No newline at end of file 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/captives/stringtable.xml b/addons/captives/stringtable.xml index 07cf780e19..071282c5f9 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -196,10 +196,12 @@ Make Unit Surrender Poddaj się! + Hacer que la unidad se rinda Sync a unit to make them surrender.<br />Source: ace_captives Zsynchronizuj z jednostką aby sprawić by się poddała<br />Źródło: ace_captives + Sincroniza una unidad para hacer que se rinda.<br />Fuente: ace_captives - + \ No newline at end of file diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index c76b5bee7b..20fb4694b0 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -3,12 +3,6 @@ //IGNORE_PRIVATE_WARNING("_handleNetEvent", "_handleRequestAllSyncedEvents", "_handleRequestSyncedEvent", "_handleSyncedEvent"); -// Load settings from profile -if (hasInterface) then { - call FUNC(loadSettingsFromProfile); - call FUNC(loadSettingsLocalizedText); -}; - // Listens for global "SettingChanged" events, to update the force status locally ["SettingChanged", { PARAMS_2(_name,_value); @@ -41,7 +35,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 +217,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 +238,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 { @@ -261,3 +255,19 @@ if(isMultiplayer && { time > 0 || isNull player } ) then { call compile GVAR(checkPBOsWhitelist) ] call FUNC(checkPBOs) }] call FUNC(addEventHandler); + +GVAR(commonPostInited) = true; + +// Create a pfh to wait until all postinits are ready and settings are initialized +[{ + // If post inits are not ready then wait + if !(SLX_XEH_MACHINE select 8) exitWith {}; + // If settings are not initialized then wait + if !(GVAR(SettingsInitialized)) exitWith {}; + + [(_this select 1)] call cba_fnc_removePerFrameHandler; + + diag_log text format["[ACE] Settings initialized"]; + ["SettingsInitialized", []] call FUNC(localEvent); + +}, 0, []] call cba_fnc_addPerFrameHandler; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index ce7623ea38..fbd5f3ddd5 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -180,6 +180,7 @@ PREP(toHex); PREP(toNumber); PREP(uniqueElementsOnly); PREP(unloadPerson); +PREP(unloadPersonLocal); PREP(unmuteUnit); PREP(useItem); PREP(useMagazine); @@ -286,15 +287,30 @@ PREP(_handleRequestSyncedEvent); PREP(_handleRequestAllSyncedEvents); GVAR(syncedEvents) = HASH_CREATE; +GVAR(waitAndExecArray) = []; // @TODO: Generic local-managed global-synced objects (createVehicleLocal) //Debug ACE_COUNTERS = []; -// Load settings +// Wait for server settings to arrive +GVAR(SettingsInitialized) = false; +["ServerSettingsReceived", { + diag_log text format["[ACE] Settings received from server"]; + // Load user settings from profile + if (hasInterface) then { + call FUNC(loadSettingsFromProfile); + call FUNC(loadSettingsLocalizedText); + }; + GVAR(SettingsInitialized) = true; +}] call FUNC(addEventhandler); + +// Load settings on the server and broadcast them if (isServer) then { call FUNC(loadSettingsOnServer); + // Raise a local event for other modules to listen too + ["ServerSettingsReceived", []] call FUNC(localEvent); }; ACE_player = player; @@ -321,6 +337,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_unloadPerson.sqf b/addons/common/functions/fnc_unloadPerson.sqf index 4db16a50a8..cd421fd3e5 100644 --- a/addons/common/functions/fnc_unloadPerson.sqf +++ b/addons/common/functions/fnc_unloadPerson.sqf @@ -10,12 +10,12 @@ * * Public: No */ - +//#define DEBUG_MODE_FULL #include "script_component.hpp" #define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) -private ["_vehicle", "_loaded", "_emptyPos"]; +private ["_vehicle","_emptyPos"]; PARAMS_1(_unit); _vehicle = vehicle _unit; @@ -25,20 +25,8 @@ if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;}; _emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]); if (count _emptyPos == 0) exitwith {false}; -_unit setPos _emptyPos; -unassignVehicle _unit; -if (!alive _unit) then { - _unit action ["Eject", vehicle _unit]; -}; - -[_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide); - -_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; -_loaded = _loaded - [_unit]; -_vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; - -if (!([_unit] call FUNC(isAwake))) then { - [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation); +if (!isNull _vehicle) then { + [[_unit], QUOTE(FUNC(unloadPersonLocal)), _unit, false] call EFUNC(common,execRemoteFnc); }; true; diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf new file mode 100644 index 0000000000..a927858f9a --- /dev/null +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -0,0 +1,44 @@ +/* + * Author: ViperMaul + * Unload a person from a vehicle, local + * + * Arguments: + * 0: unit + * + * Return Value: + * Returns true if succesfully unloaded person + * + * Public: No + */ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) + +private ["_vehicle", "_loaded", "_emptyPos"]; +PARAMS_1(_unit); +_vehicle = vehicle _unit; + +if (_vehicle == _unit) exitwith {false;}; +if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;}; + +_emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]); +if (count _emptyPos == 0) exitwith {false}; + +_unit setPos _emptyPos; +unassignVehicle _unit; +if (!alive _unit) then { + _unit action ["Eject", vehicle _unit]; +}; + +[_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide); + +_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; +_loaded = _loaded - [_unit]; +_vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; + +if (!([_unit] call FUNC(isAwake))) then { + [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation); +}; + +true; diff --git a/addons/common/functions/fnc_waitAndExecute.sqf b/addons/common/functions/fnc_waitAndExecute.sqf index 41301f0f29..f7318ac1c8 100644 --- a/addons/common/functions/fnc_waitAndExecute.sqf +++ b/addons/common/functions/fnc_waitAndExecute.sqf @@ -1,36 +1,37 @@ /* * 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) * * Return value: - * PFH handler ID + * None + * + * Example: + * [{(_this select 0) setVelocity [0,0,200];}, [player], 10] call ace_common_fnc_waitAndExecute + * + * Public: No */ #include "script_component.hpp" -PARAMS_4(_func,_params,_delay,_interval); +PARAMS_3(_func,_params,_delay); -[ - { - EXPLODE_2_PVT(_this,_params,_pfhId); - EXPLODE_2_PVT(_params,_delayedExecParams,_startTime); - EXPLODE_3_PVT(_delayedExecParams,_func,_funcParams,_delay); +GVAR(waitAndExecArray) pushBack [(ACE_time + _delay), _func, _params]; +GVAR(waitAndExecArray) sort true; - // Exit if the time was not reached yet - if (time < _startTime + _delay) exitWith {}; - - // Remove the PFH - [_pfhId] call cba_fnc_removePerFrameHandler; - - // Execute the function - _funcParams call _func; - }, - _interval, - [_this, time] -] call CBA_fnc_addPerFrameHandler +if ((count GVAR(waitAndExecArray)) == 1) then { + [{ + while {((count GVAR(waitAndExecArray)) > 0) && {((GVAR(waitAndExecArray) select 0) select 0) <= ACE_Time}} do { + private ["_entry"]; + _entry = GVAR(waitAndExecArray) deleteAt 0; + (_entry select 2) call (_entry select 1); + }; + if ((count GVAR(waitAndExecArray)) == 0) then { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + }, 0, []] call CBA_fnc_addPerFrameHandler; +}; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 1b960de982..67d0b932f7 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -473,54 +473,67 @@ Check PBOs Sprawdzaj PBO + Comprobar PBOs Sprawdzaj spójność addonów z serwerem + Este módulo verifica la integridad de los addons con los que iniciamos el simulador Action Akcja + Acción What to do with people who do not have the right PBOs? Co zrobić z graczami, którzy nie mają właściwych PBO? + ¿Qué hacer con la gente que no tiene correctamente los PBOs? Warn once Ostrzeż raz + Avisar una vez Warn (permanent) Ostrzeżenie (permanentne) + Avisar (permanente) Kick Kick + Expulsar Check all addons Sprawdź wsz. addony + Comprobar todos los addons Check all addons instead of only those of ACE? Sprawdzaj wszystkie addony czy tylko te z ACE? + Comprobar todos los addons en vez de solo los del ACE Whitelist Biała lista + Lista blanca What addons are allowed regardless? Jakie addony są dozwolone? + Qué addons están permitidos igualmente LSD Vehicles Pojazdy LSD + Vehículos LSD Adds LSD effect to synchronized vehicle Dodaje efekt LSD pod zsynchronizowany pojazd + Añade el efecto LSD al vehículo sincronizado - + \ No newline at end of file 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 fc9e4712dc..c6d70bc64a 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -2,85 +2,92 @@ class CfgAmmo { // All explosive based Ammo classes. These are all listed in case they become required. class Default; - class TimeBombCore:Default { + class TimeBombCore: Default { ACE_DefuseTime = 5; }; /* - class BoundingMineCore:TimeBombCore; - class BoundingMineBase:BoundingMineCore; - class APERSBoundingMine_Range_Ammo:BoundingMineBase; + class BoundingMineCore: TimeBombCore; + class BoundingMineBase: BoundingMineCore; + class APERSBoundingMine_Range_Ammo: BoundingMineBase; class MineCore: TimeBombCore; - class MineBase:MineCore; - class APERSMine_Range_Ammo:MineBase; - class ATMine_Range_Ammo:MineBase; + class MineBase: MineCore; + class APERSMine_Range_Ammo: MineBase; + class ATMine_Range_Ammo: MineBase; - class UnderwaterMine_Range_Ammo:MineBase; - class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo; - class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo; + class UnderwaterMine_Range_Ammo: MineBase; + class UnderwaterMineAB_Range_Ammo: UnderwaterMine_Range_Ammo; + class UnderwaterMinePDM_Range_Ammo: UnderwaterMine_Range_Ammo; - class DirectionalBombCore:TimeBombCore; - class DirectionalBombBase:DirectionalBombCore; - class APERSTripMine_Wire_Ammo:DirectionalBombBase; + class DirectionalBombCore: TimeBombCore; + class DirectionalBombBase: DirectionalBombCore; + class APERSTripMine_Wire_Ammo: DirectionalBombBase; - class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase; + class SLAMDirectionalMine_Wire_Ammo: DirectionalBombBase; class PipeBombCore: TimeBombCore; - class PipeBombBase:PipeBombCore; + class PipeBombBase: PipeBombCore; */ class DirectionalBombBase; - class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{ + class ClaymoreDirectionalMine_Remote_Ammo: DirectionalBombBase { ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; + soundActivation[] = {"", 0, 0, 0}; + soundDeactivation[] = {"", 0, 0, 0}; }; - //class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo; + //class ClaymoreDirectionalMine_Remote_Ammo_Scripted: ClaymoreDirectionalMine_Remote_Ammo; - class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{ + class SLAMDirectionalMine_Wire_Ammo: DirectionalBombBase { indirectHitRange = 20; ACE_explodeOnDefuse = 1; }; - class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo { + class SLAMDirectionalMine_Command_Ammo: SLAMDirectionalMine_Wire_Ammo { mineTrigger = "RemoteTrigger"; ACE_explodeOnDefuse = 0; }; - class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo { + class SLAMDirectionalMine_Timer_Ammo: SLAMDirectionalMine_Wire_Ammo { mineTrigger = "TimeTrigger"; ACE_explodeOnDefuse = 0; }; - class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo { + class SLAMDirectionalMine_Magnetic_Ammo: SLAMDirectionalMine_Wire_Ammo { mineTrigger = "MagneticTrigger"; }; class PipeBombBase; - class DemoCharge_Remote_Ammo:PipeBombBase{ + class DemoCharge_Remote_Ammo: PipeBombBase { ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; + soundActivation[] = {"", 0, 0, 0}; + soundDeactivation[] = {"", 0, 0, 0}; hit = 500; indirectHit = 500; indirectHitRange = 7; }; - class SatchelCharge_Remote_Ammo:PipeBombBase{ + class SatchelCharge_Remote_Ammo: PipeBombBase { ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; + soundActivation[] = {"", 0, 0, 0}; + soundDeactivation[] = {"", 0, 0, 0}; }; - /* - class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo; - class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo; + + /*class DemoCharge_Remote_Ammo_Scripted: DemoCharge_Remote_Ammo; + class SatchelCharge_Remote_Ammo_Scripted: SatchelCharge_Remote_Ammo;*/ -TODO: Configure IEDs to use the system. - class IEDLandBig_Remote_Ammo:PipeBombBase{ - triggerWhenDestroyed = 1; -}; -class IEDLandSmall_Remote_Ammo:PipeBombBase{ -triggerWhenDestroyed = 1; -}; -class IEDUrbanBig_Remote_Ammo:PipeBombBase{ -triggerWhenDestroyed = 1; -}; -class IEDUrbanSmall_Remote_Ammo:PipeBombBase{ -triggerWhenDestroyed = 1; -};*/ + class IEDUrbanBig_Remote_Ammo: PipeBombBase { + mineTrigger = "RangeTrigger"; + triggerWhenDestroyed = 1; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; + }; + class IEDLandBig_Remote_Ammo: PipeBombBase { + mineTrigger = "RangeTrigger"; + triggerWhenDestroyed = 1; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; + }; + class IEDUrbanSmall_Remote_Ammo: PipeBombBase { + mineTrigger = "RangeTrigger"; + triggerWhenDestroyed = 1; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; + }; + 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/CfgMagazines.hpp b/addons/explosives/CfgMagazines.hpp index b89a207992..248ee12640 100644 --- a/addons/explosives/CfgMagazines.hpp +++ b/addons/explosives/CfgMagazines.hpp @@ -1,6 +1,6 @@ class CfgMagazines { class CA_Magazine; - class ATMine_Range_Mag:CA_Magazine{ + class ATMine_Range_Mag: CA_Magazine { ACE_Placeable = 1; useAction = 0; ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object. @@ -12,7 +12,7 @@ class CfgMagazines { }; }; }; - class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{ + class APERSBoundingMine_Range_Mag: ATMine_Range_Mag { ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine"; class ACE_Triggers { SupportedTriggers[] = {"PressurePlate"}; @@ -21,7 +21,7 @@ class CfgMagazines { }; }; }; - class APERSMine_Range_Mag:ATMine_Range_Mag{ + class APERSMine_Range_Mag: ATMine_Range_Mag { ACE_SetupObject = "ACE_Explosives_Place_APERSMine"; class ACE_Triggers { SupportedTriggers[] = {"PressurePlate"}; @@ -30,7 +30,7 @@ class CfgMagazines { }; }; }; - class APERSTripMine_Wire_Mag:ATMine_Range_Mag{ + class APERSTripMine_Wire_Mag: ATMine_Range_Mag { ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine"; class ACE_Triggers { SupportedTriggers[] = {"Tripwire"}; @@ -38,7 +38,7 @@ class CfgMagazines { }; }; - class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{ + class ClaymoreDirectionalMine_Remote_Mag: CA_Magazine { ACE_Placeable = 1; useAction = 0; ACE_SetupObject = "ACE_Explosives_Place_Claymore"; @@ -51,7 +51,7 @@ class CfgMagazines { }; }; - class SatchelCharge_Remote_Mag:CA_Magazine{ + class SatchelCharge_Remote_Mag: CA_Magazine { ACE_Placeable = 1; useAction = 0; ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge"; @@ -64,16 +64,16 @@ class CfgMagazines { class Command { FuseTime = 0.5; }; - class MK16_Transmitter:Command{}; - class DeadmanSwitch:Command{}; + class MK16_Transmitter: Command {}; + class DeadmanSwitch: Command {}; }; }; - class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{ + class DemoCharge_Remote_Mag: SatchelCharge_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_DemoCharge"; model = "\A3\Weapons_F\explosives\c4_charge_small_d"; }; - class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{ + class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag { ACE_SetupObject = "ACE_Explosives_Place_SLAM"; class ACE_Triggers { SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"}; @@ -99,29 +99,51 @@ class CfgMagazines { class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"}; class Command { FuseTime = 0.5; }; - class DeadmanSwitch:Command{}; - class Cellphone:Command{}; + class DeadmanSwitch:Command {}; + class Cellphone:Command {}; + class PressurePlate { + displayName = $STR_ACE_Explosives_SLAME_Magnetic; + digDistance = 0; + ammo = "IEDUrbanBig_Remote_Ammo"; + pitch = 0; + }; }; }; - class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ + class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; + class ACE_Triggers: ACE_Triggers { + class PressurePlate: PressurePlate { + ammo = "IEDLandBig_Remote_Ammo"; + }; + }; }; class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"}; class Command { FuseTime = 0.5; }; - class DeadmanSwitch:Command{}; - class Cellphone:Command{}; + class DeadmanSwitch: Command {}; + class Cellphone: Command {}; + class PressurePlate { + displayName = $STR_ACE_Explosives_SLAME_Magnetic; + digDistance = 0; + ammo = "IEDUrbanSmall_Remote_Ammo"; + pitch = 0; + }; }; }; class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; + class ACE_Triggers: ACE_Triggers { + class PressurePlate: PressurePlate { + ammo = "IEDLandSmall_Remote_Ammo"; + }; + }; }; }; 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/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 5f5076175d..f80a0e784c 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -508,26 +508,31 @@ Explosive System System ładunków wybuchowych + Sistema de explosivos Require specialists? Wymagaj specjalistów? + ¿Requiere especialista? Require explosive specialists to disable explosives? Default: No Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie + Requiere especialista en explosivos para desactivar explosivos?. Por defecto: No Punish non-specialists? Karaj nie-specjalistów? + ¿Penalizar a los no especialistas? Increase the time it takes to complete actions for non-specialists? Default: Yes Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak + Aumenta el tiempo que lleva completar acciones para los no especialstas?. Por defecto: Si Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem. - + \ No newline at end of file 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..9e2e88aa4b 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,17 +1,44 @@  - - 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 + Simulación de fragmentación + + + Enable the ACE Fragmentation Simulation + Activa la simulación de fragmentación ACE + + + Spalling Simulation + Simulación de astillamiento + + + Enable the ACE Spalling Simulation + Activa la simulación de astillamiento ACE + + + Maximum Projectiles Tracked + Máximos proyectiles rastreados + + + 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) + Este ajuste controla la cantidad máxima de proyectiles del sistema de fragmentación y astillamiento de los que se hará un seguimiento en cualquier momento dado. Si se disparan más proyectiles, no serán rastreados. Baja esta opción si no deseas una bajada de FPS en escenarios con muchos proyectiles (>200 proyectiles en el aire a la vez) + + + Maximum Projectiles Per Frame + Máximos proyectiles por cuadro + + + 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 + (Solo SP) Seguimiento de depuración de Fragmentación/Astillamiento + + + (SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only. + (Solo SP) Requiere un reinicio misión/editor. Permite el seguimiento visual de la fragmentación y astillamientos de los proyectiles en modo SP. - + \ No newline at end of file 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/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index a6fe7c415f..a63004083d 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -47,6 +47,8 @@ GVAR(DustHandler) = -1; GVAR(RainDrops) = objNull; GVAR(RainActive) = false; GVAR(RainLastLevel) = 0; +GVAR(surfaceCache) = ""; +GVAR(surfaceCacheIsDust) = false; FUNC(CheckGlasses) = { if (GVAR(Current) != (goggles ace_player)) then { 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..44475d1acc 100644 --- a/addons/goggles/functions/fnc_dustHandler.sqf +++ b/addons/goggles/functions/fnc_dustHandler.sqf @@ -15,7 +15,7 @@ * Public: No */ #include "script_component.hpp" -private ["_bullets", "_position", "_surface", "_found", "_weapon", "_cloudType", "_unit"]; +private ["_bullets", "_position", "_surface", "_weapon", "_cloudType", "_unit"]; EXPLODE_2_PVT(_this,_unit,_weapon); if (_unit != ace_player) exitWith {true}; _cloudType = ""; @@ -39,22 +39,24 @@ if (surfaceIsWater _position) exitWith {}; if ((_position select 2) > 0.2) exitWith {}; _surface = surfaceType _position; -_surface = ([_surface, "#"] call CBA_fnc_split) select 1; -_found = false; -_found = getNumber (ConfigFile >> "CfgSurfaces" >> _surface >> "dust") >= 0.1; +if (_surface != GVAR(surfaceCache)) then { + GVAR(surfaceCache) = _surface; + _surface = ([_surface, "#"] call CBA_fnc_split) select 1; + GVAR(surfaceCacheIsDust) = getNumber (ConfigFile >> "CfgSurfaces" >> _surface >> "dust") >= 0.1; +}; -if (!_found) exitWith {}; +if (!GVAR(surfaceCacheIsDust)) 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/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 9e960f6d63..a5a36ac77e 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -112,14 +112,17 @@ Hearing Słuch + Audición Enable combat deafness? Wł. głuchotę bojową + ¿Habilitar sordera de combate? Enable combat deafness? Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów + Habilita la sordera de combate 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..75c960522b 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]; @@ -26,12 +28,12 @@ if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; private "_recurseFnc"; _recurseFnc = { - private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_position", "_condition", "_showDisabled", "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction", "_i"]; + private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_position", "_condition", "_showDisabled", "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"]; EXPLODE_1_PVT(_this,_actionsCfg); _actions = []; - for "_i" from 0 to (count _actionsCfg) - 1 do { - _entryCfg = _actionsCfg select _i; + { + _entryCfg = _x; if(isClass _entryCfg) then { _displayName = getText (_entryCfg >> "displayName"); _distance = getNumber (_entryCfg >> "distance"); @@ -90,14 +92,20 @@ _recurseFnc = { ]; _actions pushBack _entry; }; - }; + } forEach (configProperties [_actionsCfg, "isClass _x", true]); _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..10426460d7 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]; @@ -31,8 +33,8 @@ _recurseFnc = { EXPLODE_1_PVT(_this,_actionsCfg); _actions = []; - for "_i" from 0 to (count _actionsCfg) - 1 do { - _entryCfg = _actionsCfg select _i; + { + _entryCfg = _x; if(isClass _entryCfg) then { _displayName = getText (_entryCfg >> "displayName"); @@ -74,11 +76,11 @@ _recurseFnc = { ]; _actions pushBack _entry; }; - }; + } forEach (configProperties [_actionsCfg, "isClass _x", true]); _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 cb416cedf0..db808e2eba 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -private ["_info", "_animations", "_phase", "_position", "_time", "_usedMouseWheel"]; +private ["_info", "_phase", "_position", "_time", "_usedMouseWheel", "_getDoorAnimations"]; _info = [2] call FUNC(getDoor); @@ -24,9 +24,9 @@ EXPLODE_2_PVT(_info,_house,_door); if (isNull _house) exitWith {}; -_animations = [_house, _door] call FUNC(getDoorAnimations); +_getDoorAnimations = [_house, _door] call FUNC(getDoorAnimations); -EXPLODE_2_PVT(_animations,_animations,_lockedVariable); +EXPLODE_2_PVT(_getDoorAnimations,_animations,_lockedVariable); if (count _animations == 0) exitWith {}; @@ -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/interaction/stringtable.xml b/addons/interaction/stringtable.xml index b2e75ccdff..6c999b679a 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -796,14 +796,17 @@ Interaction System System interakcji + Sistema de interacción Enable Team Management Wł. zarządzanie drużyną + Habilitar gestión de equipos Should players be allowed to use the Team Management Menu? Default: Yes Czy gracze mogą korzystać z menu zarządzania drużyną? Domyślnie: Tak + ¿Deben tener permitido los jugadores el uso del menu de gestión de equipos? Por defecto: Si 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/CfgMagazines.hpp b/addons/javelin/CfgMagazines.hpp new file mode 100644 index 0000000000..3053cf1fa1 --- /dev/null +++ b/addons/javelin/CfgMagazines.hpp @@ -0,0 +1,18 @@ +class CfgMagazines { + //Static Titan Magazine + class 5Rnd_GAT_missiles; + class 1Rnd_GAT_missiles: 5Rnd_GAT_missiles { + ammo = "ACE_Javelin_FGM148_static"; //from misssileGuidance, was "M_Titan_AT_static" + }; + + //Handheld Titan "AT" Magazine (Locking - "Anti-Tank") + class Titan_AA; + class Titan_AT: Titan_AA { + ammo = "ACE_Javelin_FGM148"; //from misssileGuidance, was "M_Titan_AT" + }; + + //Handheld Titan "AP" Magazine (SACLOS? "Anti-personal") + // class Titan_AP: Titan_AA { + //??? + // }; +}; diff --git a/addons/javelin/config.cpp b/addons/javelin/config.cpp index cb76da0010..8dfc970902 100644 --- a/addons/javelin/config.cpp +++ b/addons/javelin/config.cpp @@ -14,4 +14,5 @@ class CfgPatches { #include "RscInGameUI.hpp" #include "CfgSounds.hpp" #include "CfgWeapons.hpp" -#include "CfgVehicles.hpp" \ No newline at end of file +#include "CfgVehicles.hpp" +#include "CfgMagazines.hpp" diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 039484d1af..36da24d2d2 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); }; }; @@ -35,8 +35,17 @@ _soundTime = _args select 4; _randomLockInterval = _args select 5; _fireDisabledEH = _args select 6; -_configs = configProperties [configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)), QUOTE(configName _x == QUOTE(QGVAR(enabled))), false]; -if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith { +private["_ammo", "_magazineConfig", "_weaponConfig"]; +_weaponConfig = configProperties [configFile >> "CfgWeapons" >> (currentWeapon _currentShooter), QUOTE(configName _x == QUOTE(QGVAR(enabled))), false]; +_magazineConfig = if ((currentMagazine _currentShooter) != "") then { + _ammo = getText (configFile >> "CfgMagazines" >> (currentMagazine _currentShooter) >> "ammo"); + configProperties [(configFile >> "CfgAmmo" >> _ammo), "(configName _x) == 'ace_missileguidance'", false]; +} else { + [] +}; + +//Only enable if both weapon and currentMagazine are enabled (bandaid to allow firing the "AP" missle) +if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1} || {(count _magazineConfig) < 1} || {(getNumber ((_magazineConfig select 0) >> "enabled")) != 1}) exitWith { __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; @@ -170,12 +179,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 +226,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 +260,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 +289,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/RscTitles.hpp b/addons/kestrel4500/RscTitles.hpp index b091a07561..fe0adf2c4b 100644 --- a/addons/kestrel4500/RscTitles.hpp +++ b/addons/kestrel4500/RscTitles.hpp @@ -2,8 +2,7 @@ #define ST_RIGHT 1 #define ST_CENTER 2 -class Kestrel4500_RscText -{ +class Kestrel4500_RscText { idc=-1; type=0; style=ST_CENTER; @@ -19,8 +18,7 @@ class Kestrel4500_RscText sizeEx=0.04; shadow=0; }; -class Kestrel4500_RscButton -{ +class Kestrel4500_RscButton { text=""; colorText[]={0,0,0,1}; colorDisabled[]={0,0,0,0}; @@ -49,8 +47,7 @@ class Kestrel4500_RscButton borderSize=0; shadow=0; }; -class Kestrel4500_Display -{ +class Kestrel4500_Display { name="Kestrel4500_Display"; idd=-1; onLoad="uiNamespace setVariable ['Kestrel4500_Display', (_this select 0)]"; @@ -58,10 +55,8 @@ class Kestrel4500_Display movingEnable=1; controlsBackground[]={}; objects[]={}; - class controls - { - class BACKGROUND - { + class controls { + class BACKGROUND { moving=1; type=0; font="TahomaB"; @@ -76,18 +71,16 @@ class Kestrel4500_Display colorText[]={1,1,1,1}; text=PATHTOF(UI\Kestrel4500.paa); }; - class POWER: Kestrel4500_RscButton - { + class POWER: Kestrel4500_RscButton { idc=-1; x=safezoneX+0.385; y=safezoneY+1.125; w=0.042; h=0.042*4/3; - action="closeDialog 0"; + action=QUOTE(7 call FUNC(buttonPressed)); onMouseButtonDown = "playSound 'kestrel4500_exit_button_click'"; }; - class ENTER: POWER - { + class ENTER: POWER { idc=-1; x=safezoneX+0.46; y=safezoneY+1.0; @@ -95,8 +88,7 @@ class Kestrel4500_Display action=QUOTE(0 call FUNC(buttonPressed)); onMouseButtonDown = "playSound 'kestrel4500_center_button_click'"; }; - class TOP: Kestrel4500_RscButton - { + class TOP: Kestrel4500_RscButton { idc=-1; x=safezoneX+0.46; y=safezoneY+0.93; @@ -105,15 +97,13 @@ class Kestrel4500_Display action=QUOTE(1 call FUNC(buttonPressed)); onMouseButtonDown = "playSound 'kestrel4500_top_button_click'"; }; - class BOTTOM: TOP - { + class BOTTOM: TOP { idc=-1; y=safezoneY+1.1; action=QUOTE(2 call FUNC(buttonPressed)); onMouseButtonDown = "playSound 'kestrel4500_bottom_button_click'"; }; - class LEFT: Kestrel4500_RscButton - { + class LEFT: Kestrel4500_RscButton { idc=-1; x=safezoneX+0.4; y=safezoneY+0.97; @@ -122,15 +112,13 @@ class Kestrel4500_Display action=QUOTE(3 call FUNC(buttonPressed)); onMouseButtonDown = "playSound 'kestrel4500_left_button_click'"; }; - class RIGHT: LEFT - { + class RIGHT: LEFT { idc=-1; x=safezoneX+0.58; action=QUOTE(4 call FUNC(buttonPressed)); onMouseButtonDown = "playSound 'kestrel4500_right_button_click'"; }; - class MEMORY: Kestrel4500_RscButton - { + class MEMORY: Kestrel4500_RscButton { idc=-1; x=safezoneX+0.395; y=safezoneY+0.87; @@ -138,15 +126,13 @@ class Kestrel4500_Display h=0.045*4/3; action=QUOTE(5 call FUNC(buttonPressed)); }; - class BACKLIGHT: MEMORY - { + class BACKLIGHT: MEMORY { idc=-1; x=safezoneX+0.585; action=QUOTE(6 call FUNC(buttonPressed)); }; - class TEXT_TOP: Kestrel4500_RscText - { + class TEXT_TOP: Kestrel4500_RscText { idc=74100; x=safezoneX+0.40; y=safezoneY+0.58; @@ -154,68 +140,86 @@ class Kestrel4500_Display h=0.04; text=""; }; - class TEXT_CENTER_BIG: TEXT_TOP - { + class TEXT_CENTER_BIG: TEXT_TOP { idc=74200; y=safezoneY+0.61; h=0.10; SizeEx=0.06; - text=""; }; - class TEXT_CENTER_LINE_1_LEFT: TEXT_TOP - { + class TEXT_CENTER: TEXT_TOP { + idc=74201; + y=safezoneY+0.64; + }; + class TEXT_CENTER_LINE_1_LEFT: TEXT_TOP { idc=74300; y=safezoneY+0.60; style=ST_LEFT; h=0.10; SizeEx=0.05; - text=""; }; - class TEXT_CENTER_LINE2_LEFT: TEXT_CENTER_LINE_1_LEFT - { + class TEXT_CENTER_LINE2_LEFT: TEXT_CENTER_LINE_1_LEFT { idc=74301; y=safezoneY+0.64; - text=""; }; - class TEXT_CENTER_LINE_3_LEFT: TEXT_CENTER_LINE2_LEFT - { + class TEXT_CENTER_LINE_3_LEFT: TEXT_CENTER_LINE2_LEFT { idc=74302; y=safezoneY+0.68; - text=""; }; - class TEXT_CENTER_LINE_1_RIGHT: TEXT_CENTER_LINE_1_LEFT - { + class TEXT_CENTER_LINE_1_RIGHT: TEXT_CENTER_LINE_1_LEFT { idc=74303; style=ST_RIGHT; }; - class TEXT_CENTER_LINE2_RIGHT: TEXT_CENTER_LINE2_LEFT - { + class TEXT_CENTER_LINE2_RIGHT: TEXT_CENTER_LINE2_LEFT { idc=74304; style=ST_RIGHT; }; - class TEXT_CENTER_LINE_3_RIGHT: TEXT_CENTER_LINE_3_LEFT - { + class TEXT_CENTER_LINE_3_RIGHT: TEXT_CENTER_LINE_3_LEFT { idc=74305; style=ST_RIGHT; }; - class TEXT_INFO_LINE_1: TEXT_TOP - { + class TEXT_INFO_LINE_1: TEXT_TOP { idc=74400; - y=safezoneY+0.69; - text=""; + y=safezoneY+0.68; }; - class TEXT_INFO_LINE_2: TEXT_TOP - { + class TEXT_INFO_LINE_2: TEXT_TOP { idc=74401; y=safezoneY+0.72; - text=""; + }; + class TEXT_BOTTOM_BIG: TEXT_TOP { + idc=74500; + y=safezoneY+0.67; + h=0.10; + SizeEx=0.06; + }; + class TEXT_CENTER_LINE_1: TEXT_TOP { + idc=74600; + y=safezoneY+0.58; + SizeEx=0.03; + }; + class TEXT_CENTER_LINE_2: TEXT_CENTER_LINE_1 { + idc=74601; + y=safezoneY+0.61; + }; + class TEXT_CENTER_LINE_3: TEXT_CENTER_LINE_1 { + idc=74602; + y=safezoneY+0.64; + }; + class TEXT_CENTER_LINE_4: TEXT_CENTER_LINE_1 { + idc=74603; + y=safezoneY+0.67; + }; + class TEXT_CENTER_LINE_5: TEXT_CENTER_LINE_1 { + idc=74604; + y=safezoneY+0.70; + }; + class TEXT_CENTER_LINE_6: TEXT_CENTER_LINE_1 { + idc=74605; + y=safezoneY+0.73; }; }; }; -class RscTitles -{ - class RscKestrel4500 - { +class RscTitles { + class RscKestrel4500 { idd=-1; onLoad="with uiNameSpace do { RscKestrel4500 = _this select 0 };"; onUnload=(_this call FUNC(onCloseDisplay)); @@ -223,10 +227,8 @@ class RscTitles duration=60; fadeIn="false"; fadeOut="false"; - class controls - { - class RscKestrel4500 - { + class controls { + class RscKestrel4500 { idc=75000; moving=0; type=0; @@ -241,8 +243,7 @@ class RscTitles colorText[]={1,1,1,1}; text=PATHTOF(UI\Kestrel4500_0.paa); }; - class RscTextTop: Kestrel4500_RscText - { + class RscTextTop: Kestrel4500_RscText { idc=75100; x=safezoneX-0.05+0.40*0.75; y=safezoneY+0.7+0.58*0.75; @@ -251,16 +252,18 @@ class RscTitles SizeEx=0.04*0.75; text=""; }; - class RscTextCenterBig: RscTextTop - { + class RscTextCenterBig: RscTextTop { idc=75200; y=safezoneY+0.7+0.61*0.75; h=0.10*0.75; SizeEx=0.06*0.75; text=""; }; - class RscTextCenterLine1Left: RscTextTop - { + class RscTextCenter: RscTextTop { + idc=75201; + y=safezoneY+0.7+0.64*0.75; + }; + class RscTextCenterLine1Left: RscTextTop { idc=75300; y=safezoneY+0.7+0.60*0.75; style=ST_LEFT; @@ -268,45 +271,70 @@ class RscTitles SizeEx=0.05*0.75; text=""; }; - class RscTextCenterLine2Left: RscTextCenterLine1Left - { + class RscTextCenterLine2Left: RscTextCenterLine1Left { idc=75301; y=safezoneY+0.7+0.64*0.75; text=""; }; - class RscTextCenterLine3Left: RscTextCenterLine2Left - { + class RscTextCenterLine3Left: RscTextCenterLine2Left { idc=75302; y=safezoneY+0.7+0.68*0.75; text=""; }; - class RscTextCenterLine1Right: RscTextCenterLine1Left - { + class RscTextCenterLine1Right: RscTextCenterLine1Left { idc=75303; style=ST_RIGHT; }; - class RscTextCenterLine2Right: RscTextCenterLine2Left - { + class RscTextCenterLine2Right: RscTextCenterLine2Left { idc=75304; style=ST_RIGHT; }; - class RscTextCenterLine3Right: RscTextCenterLine3Left - { + class RscTextCenterLine3Right: RscTextCenterLine3Left { idc=75305; style=ST_RIGHT; }; - class RscTextInfoLine1: RscTextTop - { + class RscTextInfoLine1: RscTextTop { idc=75400; - y=safezoneY+0.7+0.69*0.75; + y=safezoneY+0.7+0.68*0.75; text=""; }; - class RscTextInfoLine2: RscTextTop - { + class RscTextInfoLine2: RscTextTop { idc=75401; y=safezoneY+0.7+0.72*0.75; text=""; }; + class RscTextBottomBig: RscTextTop { + idc=75500; + y=safezoneY+0.7+0.67*0.75; + h=0.10*0.75; + SizeEx=0.06*0.75; + text=""; + }; + class RscTextCenterLine1: RscTextTop { + idc=75600; + y=safezoneY+0.7+0.58*0.75; + SizeEx=0.03*0.75; + }; + class RscTextCenterLine2: RscTextCenterLine1 { + idc=75601; + y=safezoneY+0.7+0.61*0.75; + }; + class RscTextCenterLine3: RscTextCenterLine1 { + idc=75602; + y=safezoneY+0.7+0.64*0.75; + }; + class RscTextCenterLine4: RscTextCenterLine1 { + idc=75603; + y=safezoneY+0.7+0.67*0.75; + }; + class RscTextCenterLine5: RscTextCenterLine1 { + idc=75604; + y=safezoneY+0.7+0.70*0.75; + }; + class RscTextCenterLine6: RscTextCenterLine1 { + idc=75605; + y=safezoneY+0.7+0.73*0.75; + }; }; }; diff --git a/addons/kestrel4500/XEH_postInit.sqf b/addons/kestrel4500/XEH_postInit.sqf index eb22aa1de2..98136cbd0b 100644 --- a/addons/kestrel4500/XEH_postInit.sqf +++ b/addons/kestrel4500/XEH_postInit.sqf @@ -2,22 +2,27 @@ #include "initKeybinds.sqf" -GVAR(Menus) = ["Direction", "Wind SPD m/s", "CROSSWIND m/s", "HEADWIND m/s", "TEMP °C", "HUMIDITY %", "BARO hPA", "ALTITUDE m", "User Screen 1", "User Screen 2"]; +GVAR(Menus) = ["Date", "Direction", "Wind SPD m/s", "CROSSWIND m/s", "HEADWIND m/s", "TEMP °C", "CHILL °C", "HUMIDITY %", "HEAT INDEX °C", "DEW POINT °C", "WET BULB °C", "BARO hPA", "ALTITUDE m", "User Screen 1", "User Screen 2"]; -GVAR(TOTAL) = [0, 0, 0, 0, 0, 0, 0, 0]; -GVAR(ENTRIES) = [0, 0, 0, 0, 0, 0, 0, 0]; +GVAR(TOTAL) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; +GVAR(ENTRIES) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; GVAR(MinAvgMax) = false; GVAR(MinAvgMaxMode) = 0; +GVAR(referenceHeadingMenu) = 0; +GVAR(referenceHeadingAutoSet) = true; +GVAR(manualSetCooldown) = ACE_diagTime; +GVAR(headingSetDisplayTimer) = 0; GVAR(Menu) = 1; GVAR(Directions) = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]; GVAR(Direction) = 0; GVAR(RefHeading) = 0; +GVAR(TmpHeading) = 0; GVAR(updateTimer) = 0; -GVAR(outputData) = ["", "", "", "", "", "", "", "", "", ""]; +GVAR(outputData) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]; GVAR(MeasuredWindSpeed) = 0; GVAR(ImpellerState) = 0; diff --git a/addons/kestrel4500/functions/fnc_buttonPressed.sqf b/addons/kestrel4500/functions/fnc_buttonPressed.sqf index 1d73f9ac79..8f38568462 100644 --- a/addons/kestrel4500/functions/fnc_buttonPressed.sqf +++ b/addons/kestrel4500/functions/fnc_buttonPressed.sqf @@ -17,37 +17,106 @@ switch (_this) do { case 0: { // Enter - if (!GVAR(MinAvgMax) && (GVAR(Menu) == 2 || GVAR(Menu) == 3)) then { - GVAR(RefHeading) = getDir ACE_player; + if (!GVAR(MinAvgMax) && (GVAR(Menu) == 3 || GVAR(Menu) == 4)) then { + switch (GVAR(referenceHeadingMenu)) do { + case 0: { // Head- and Crosswind main page + GVAR(TmpHeading) = GVAR(RefHeading); + GVAR(referenceHeadingMenu) = 1; + }; + case 1: { // Mode selection + if (GVAR(referenceHeadingAutoSet)) then { + GVAR(referenceHeadingMenu) = 2; + } else { + GVAR(referenceHeadingMenu) = 3; + }; + }; + case 2: { // Auto set + GVAR(RefHeading) = (getDir ACE_player) % 360; + GVAR(referenceHeadingMenu) = 0; + GVAR(headingSetDisplayTimer) = ACE_diagTime; + }; + case 3: { // Manual set + GVAR(RefHeading) = GVAR(TmpHeading); + GVAR(referenceHeadingMenu) = 0; + GVAR(headingSetDisplayTimer) = ACE_diagTime; + }; + }; }; - if (GVAR(MinAvgMax) && GVAR(Menu) > 0 && GVAR(Menu) < 4) then { + if (GVAR(MinAvgMax) && GVAR(Menu) > 1 && GVAR(Menu) < 5) then { if (GVAR(MinAvgMaxMode) != 1) then { { GVAR(MIN) set [_x, 0]; GVAR(MAX) set [_x, 0]; GVAR(TOTAL) set [_x, 0]; GVAR(ENTRIES) set [_x, 0]; - } forEach [1, 2, 3]; + } forEach [2, 3, 4]; }; GVAR(MinAvgMaxMode) = (GVAR(MinAvgMaxMode) + 1) % 3; }; }; case 1: { // Top - GVAR(Menu) = (GVAR(Menu) - 1 + (count GVAR(Menus))) % (count GVAR(Menus)); + if (GVAR(referenceHeadingMenu) == 1) then { + GVAR(referenceHeadingAutoSet) = !GVAR(referenceHeadingAutoSet); + } else { + GVAR(Menu) = (GVAR(Menu) - 1 + (count GVAR(Menus))) % (count GVAR(Menus)); + }; }; case 2: { // Bottom - GVAR(Menu) = (GVAR(Menu) + 1 + (count GVAR(Menus))) % (count GVAR(Menus)); + if (GVAR(referenceHeadingMenu) == 1) then { + GVAR(referenceHeadingAutoSet) = !GVAR(referenceHeadingAutoSet); + } else { + GVAR(Menu) = (GVAR(Menu) + 1 + (count GVAR(Menus))) % (count GVAR(Menus)); + }; }; case 3: { // Left - GVAR(MinAvgMax) = !GVAR(MinAvgMax); + if (GVAR(referenceHeadingMenu) == 0) then { + GVAR(MinAvgMax) = !GVAR(MinAvgMax); + } else { + if (GVAR(referenceHeadingMenu) == 3) 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) = ACE_diagTime; + }; + }; }; case 4: { // Right - GVAR(MinAvgMax) = !GVAR(MinAvgMax); + if (GVAR(referenceHeadingMenu) == 0) then { + GVAR(MinAvgMax) = !GVAR(MinAvgMax); + } else { + if (GVAR(referenceHeadingMenu) == 3) 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) = ACE_diagTime; + }; + }; }; case 5: { // Memory }; case 6: { // Backlight }; + case 7: { // Exit + private ["_exit"]; + _exit = true; + if (GVAR(referenceHeadingMenu) == 1) then { + GVAR(referenceHeadingMenu) = 0; + _exit = false; + }; + if (GVAR(referenceHeadingMenu) > 1) then { + GVAR(referenceHeadingMenu) = 1; + _exit = false; + }; + if (_exit) then { + closeDialog 0; + }; + }; }; [] call FUNC(updateDisplay); diff --git a/addons/kestrel4500/functions/fnc_collectData.sqf b/addons/kestrel4500/functions/fnc_collectData.sqf index 60bab4b9ec..41f372d416 100644 --- a/addons/kestrel4500/functions/fnc_collectData.sqf +++ b/addons/kestrel4500/functions/fnc_collectData.sqf @@ -14,38 +14,44 @@ */ #include "script_component.hpp" -private ["_playerAltitude", "_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"]; +private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_updateMemory", "_windSpeed", "_crosswind", "_headwind"]; +_playerDir = getDir ACE_player; _playerAltitude = (getPosASL ACE_player) select 2; +_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight); +_humidity = EGVAR(weather,currentHumidity); +_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure); +_altitude = EGVAR(weather,Altitude) + _playerAltitude; +_chill = [_temperature, _humidity] call EFUNC(weather,calculateWindChill); +_heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex); +_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint); +_wetBulb = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateWetBulb); if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then { - _temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight); - _humidity = EGVAR(weather,currentHumidity); - _barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure); - _altitude = EGVAR(weather,Altitude) + _playerAltitude; - GVAR(MIN) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude]; - GVAR(MAX) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude]; + GVAR(MIN) = [0, _playerDir, 0, 0, 0, _temperature, _chill, _humidity, _heatIndex, _dewPoint, _wetBulb, _barometricPressure, _altitude]; + GVAR(MAX) = [0, _playerDir, 0, 0, 0, _temperature, _chill, _humidity, _heatIndex, _dewPoint, _wetBulb, _barometricPressure, _altitude]; }; { GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1]; -} forEach [0, 4, 5, 6 ,7]; +} forEach [1, 5, 6, 7, 8, 9, 10, 11, 12]; -// Direction -_playerDir = getDir ACE_player; -GVAR(MIN) set [0, (GVAR(MIN) select 0) min _playerDir]; -GVAR(MAX) set [0, _playerDir max (GVAR(MAX) select 0)]; -GVAR(TOTAL) set [0, (GVAR(TOTAL) select 0) + _playerDir]; +_fnc_updateMemory = { + PARAMS_2(_slot,_value); + GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value]; + GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)]; + GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value]; +}; + +[0, _playerDir] call _fnc_updateMemory; if (GVAR(MinAvgMaxMode) == 1) then { { GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1]; - } forEach [1, 2, 3]; + } forEach [2, 3, 4]; // Wind SPD _windSpeed = call FUNC(measureWindSpeed); - GVAR(MIN) set [1, (GVAR(MIN) select 1) min _windSpeed]; - GVAR(MAX) set [1, _windSpeed max (GVAR(MAX) select 1)]; - GVAR(TOTAL) set [1, (GVAR(TOTAL) select 1) + _windSpeed]; + [2, _windSpeed] call _fnc_updateMemory; // CROSSWIND _crosswind = 0; @@ -54,42 +60,29 @@ if (GVAR(MinAvgMaxMode) == 1) then { } else { _crosswind = abs(sin(GVAR(RefHeading)) * _windSpeed); }; - GVAR(MIN) set [2, (GVAR(MIN) select 2) min _crosswind]; - GVAR(MAX) set [2, _crosswind max (GVAR(MAX) select 2)]; - GVAR(TOTAL) set [2, (GVAR(TOTAL) select 2) + _crosswind]; + [3, _crosswind] call _fnc_updateMemory; // 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; }; - GVAR(MIN) set [3, (GVAR(MIN) select 3) min _headwind]; - GVAR(MAX) set [3, _headwind max (GVAR(MAX) select 3)]; - GVAR(TOTAL) set [3, (GVAR(TOTAL) select 3) + _headwind]; + 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]; }; -// TEMP -_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight); -GVAR(MIN) set [4, (GVAR(MIN) select 4) min _temperature]; -GVAR(MAX) set [4, _temperature max (GVAR(MAX) select 4)]; -GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _temperature]; - -// HUMIDITY -_humidity = EGVAR(weather,currentHumidity); -GVAR(MIN) set [5, (GVAR(MIN) select 5) min _humidity]; -GVAR(MAX) set [5, _humidity max (GVAR(MAX) select 5)]; -GVAR(TOTAL) set [5, (GVAR(TOTAL) select 5) + _humidity]; - -// BARO -_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure); -GVAR(MIN) set [6, (GVAR(MIN) select 6) min _barometricPressure]; -GVAR(MAX) set [6, _barometricPressure max (GVAR(MAX) select 6)]; -GVAR(TOTAL) set [6, (GVAR(TOTAL) select 6) + _barometricPressure]; - -// ALTITUDE -_altitude = EGVAR(weather,Altitude) + _playerAltitude; -GVAR(MIN) set [7, (GVAR(MIN) select 7) min _altitude]; -GVAR(MAX) set [7, _altitude max (GVAR(MAX) select 7)]; -GVAR(TOTAL) set [7, (GVAR(TOTAL) select 7) + _altitude]; \ No newline at end of file +[5, _temperature] call _fnc_updateMemory; +[6, _chill] call _fnc_updateMemory; +[7, _humidity] call _fnc_updateMemory; +[8, _heatIndex] call _fnc_updateMemory; +[9, _dewPoint] call _fnc_updateMemory; +[10, _wetBulb] call _fnc_updateMemory; +[11, _barometricPressure] call _fnc_updateMemory; +[12, _altitude] call _fnc_updateMemory; diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index 8eb2cea0ad..679ecce6af 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -18,6 +18,7 @@ #define __ctrlKestrel4500 (__dsp displayCtrl 75000) #define __ctrlTop (__dsp displayCtrl 75100) #define __ctrlCenterBig (__dsp displayCtrl 75200) +#define __ctrlCenter (__dsp displayCtrl 75201) #define __ctrlCenterLine1Left (__dsp displayCtrl 75300) #define __ctrlCenterLine2Left (__dsp displayCtrl 75301) #define __ctrlCenterLine3Left (__dsp displayCtrl 75302) @@ -26,6 +27,13 @@ #define __ctrlCenterLine3Right (__dsp displayCtrl 75305) #define __ctrlInfoLine1 (__dsp displayCtrl 75400) #define __ctrlInfoLine2 (__dsp displayCtrl 75401) +#define __ctrlBottomBig (__dsp displayCtrl 75500) +#define __ctrlCenterLine1 (__dsp displayCtrl 75600) +#define __ctrlCenterLine2 (__dsp displayCtrl 75601) +#define __ctrlCenterLine3 (__dsp displayCtrl 75602) +#define __ctrlCenterLine4 (__dsp displayCtrl 75603) +#define __ctrlCenterLine5 (__dsp displayCtrl 75604) +#define __ctrlCenterLine6 (__dsp displayCtrl 75605) if (GVAR(Overlay)) exitWith { GVAR(Overlay) = false; @@ -50,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); @@ -63,17 +71,40 @@ GVAR(Overlay) = true; __ctrlTop ctrlSetText (_outputData select 0); __ctrlCenterBig ctrlSetText (_outputData select 1); + __ctrlCenter ctrlSetText (_outputData select 2); - __ctrlCenterLine1Left ctrlSetText (_outputData select 2); - __ctrlCenterLine2Left ctrlSetText (_outputData select 3); - __ctrlCenterLine3Left ctrlSetText (_outputData select 4); + __ctrlCenterLine1Left ctrlSetText (_outputData select 3); + __ctrlCenterLine2Left ctrlSetText (_outputData select 4); + __ctrlCenterLine3Left ctrlSetText (_outputData select 5); - __ctrlCenterLine1Right ctrlSetText (_outputData select 5); - __ctrlCenterLine2Right ctrlSetText (_outputData select 6); - __ctrlCenterLine3Right ctrlSetText (_outputData select 7); + __ctrlCenterLine1Right ctrlSetText (_outputData select 6); + __ctrlCenterLine2Right ctrlSetText (_outputData select 7); + __ctrlCenterLine3Right ctrlSetText (_outputData select 8); - __ctrlInfoLine1 ctrlSetText (_outputData select 8); - __ctrlInfoLine2 ctrlSetText (_outputData select 9); + __ctrlInfoLine1 ctrlSetText (_outputData select 9); + __ctrlInfoLine2 ctrlSetText (_outputData select 10); + + __ctrlBottomBig ctrlSetText (_outputData select 11); + + __ctrlCenterLine1 ctrlSetText (_outputData select 12); + __ctrlCenterLine2 ctrlSetText (_outputData select 13); + __ctrlCenterLine3 ctrlSetText (_outputData select 14); + __ctrlCenterLine4 ctrlSetText (_outputData select 15); + __ctrlCenterLine5 ctrlSetText (_outputData select 16); + __ctrlCenterLine6 ctrlSetText (_outputData select 17); + + if (GVAR(referenceHeadingMenu) == 1) then { + if (GVAR(referenceHeadingAutoSet)) then { + __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 0.6]; + __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0]; + } else { + __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 1.0]; + __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 0.6]; + }; + } else { + __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 1.0]; + __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0]; + }; }; call FUNC(updateImpellerState); diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index 1549bbe9cb..fc7b94b711 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -14,12 +14,15 @@ */ #include "script_component.hpp" -private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir"]; +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"]; [] call FUNC(collectData); _textTop = GVAR(Menus) select GVAR(Menu); _textCenterBig = ""; +_textCenter = ""; _textCenterLine1Left = ""; _textCenterLine2Left = ""; @@ -31,6 +34,15 @@ _textCenterLine3Right = ""; _textInfoLine1 = ""; _textInfoLine2 = ""; +_textBottomBig = ""; + +_textCenterLine1 = ""; +_textCenterLine2 = ""; +_textCenterLine3 = ""; +_textCenterLine4 = ""; +_textCenterLine5 = ""; +_textCenterLine6 = ""; + _windSpeed = call FUNC(measureWindSpeed); _windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); @@ -39,6 +51,24 @@ _playerAltitude = (getPosASL ACE_player) select 2; _temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight); _humidity = EGVAR(weather,currentHumidity); +_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure); +_chill = [_temperature, _humidity] call EFUNC(weather,calculateWindChill); +_heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex); +_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint); +_wetBulb = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateWetBulb); + +_fnc_dayOfWeek = { + private ["_year", "_month", "_day", "_table"]; + _year = _this select 0; + _month = _this select 1; + _day = _this select 2; + + _table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]; + if (_month < 3) then { + _year = _year - 1; + }; + (_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7 +}; GVAR(Direction) = 4 * floor(_playerDir / 90); if (_playerDir % 90 > 10) then { GVAR(Direction) = GVAR(Direction) + 1}; @@ -47,172 +77,258 @@ if (_playerDir % 90 > 55) then { GVAR(Direction) = GVAR(Direction) + 1}; if (_playerDir % 90 > 80) then { GVAR(Direction) = GVAR(Direction) + 1}; GVAR(Direction) = GVAR(Direction) % 16; -switch (GVAR(Menu)) do { - case 0: { // Direction - if (!GVAR(MinAvgMax)) then { - _textCenterBig = format["%1", format["%1 %2", GVAR(Directions) select GVAR(Direction), round(_playerDir)]]; - } else { - _textCenterLine1Left = "Min"; - _textCenterLine2Left = "Avg"; - _textCenterLine3Left = "Max"; - _textCenterLine1Right = "N/A"; - _textCenterLine2Right = "N/A"; - _textCenterLine3Right = "N/A"; +if (GVAR(referenceHeadingMenu) == 0) then { + switch (GVAR(Menu)) do { + case 0: { // Date + EXPLODE_3_PVT(date,_year,_month,_day); + _dayString = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] select (date call _fnc_dayOfWeek); + _monthString = localize (["str_january","str_february","str_march","str_april","str_may","str_june","str_july","str_august","str_september","str_october","str_november","str_december"] select (_month - 1)); + _textTop = _dayString; + _textCenter = format["%1 %2 %3", _day, _monthString, _year]; + _textBottomBig = [daytime, "HH:MM:SS"] call bis_fnc_timeToString; }; - }; - case 1: { // Wind SPD - if (!GVAR(MinAvgMax)) then { - _textCenterBig = Str(round(abs(_windSpeed) * 10) / 10); - } else { - _textCenterLine1Left = "Max"; - _textCenterLine2Left = "Avg"; - switch (GVAR(MinAvgMaxMode)) do { - case 0: { - _textCenterLine1Right = "--. -"; - _textCenterLine2Right = "--. -"; - _textInfoLine2 = "- average"; - }; - case 1: { - _textCenterLine1Right = Str(round((GVAR(Max) select 1) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 1) / (GVAR(Entries) select 1) * 10) / 10); - _textInfoLine2 = "- stop"; - }; - case 2: { - _textCenterLine1Right = Str(round((GVAR(Max) select 1) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 1) / (GVAR(Entries) select 1) * 10) / 10); - _textInfoLine2 = "- clear"; - }; - }; - }; - }; - case 2: { // CROSSWIND - if (!GVAR(MinAvgMax)) then { - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - _textCenterBig = Str(round(abs(sin(GVAR(RefHeading) - _playerDir) * _windSpeed) * 10) / 10); - _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)]; + case 1: { // Direction + if (!GVAR(MinAvgMax)) then { + _textCenterBig = format["%1", format["%1 %2", GVAR(Directions) select GVAR(Direction), round(_playerDir)]]; } else { - _textCenterBig = Str(round(abs(sin(GVAR(RefHeading)) * _windSpeed) * 10) / 10); - _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; - }; - _textInfoLine2 = "- set heading"; - } else { - _textCenterLine1Left = "Max"; - _textCenterLine2Left = "Avg"; - switch (GVAR(MinAvgMax)Mode) do { - case 0: { - _textCenterLine1Right = "--. -"; - _textCenterLine2Right = "--. -"; - _textInfoLine2 = "- average"; - }; - case 1: { - _textCenterLine1Right = Str(round((GVAR(Max) select 2) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 2) / (GVAR(Entries) select 2) * 10) / 10); - _textInfoLine2 = "- stop"; - }; - case 2: { - _textCenterLine1Right = Str(round((GVAR(Max) select 2) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 2) / (GVAR(Entries) select 2) * 10) / 10); - _textInfoLine2 = "- clear"; - }; + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = "N/A"; + _textCenterLine2Right = "N/A"; + _textCenterLine3Right = "N/A"; }; }; - }; - case 3: { // 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); - _textInfoLine1 = format["%1 m/s @ %2", round((abs(cos(_playerDir - _windDir)) * _windSpeed) * 10) / 10, round(_playerDir)]; + case 2: { // Wind SPD + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(abs(_windSpeed) * 10) / 10); } else { - _textCenterBig = Str(round(abs(cos(GVAR(RefHeading)) * _windSpeed) * 10) / 10); - _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; - }; - _textInfoLine2 = "- set heading"; - } else { - _textCenterLine1Left = "Max"; - _textCenterLine2Left = "Avg"; - switch (GVAR(MinAvgMax)Mode) do { - case 0: { - _textCenterLine1Right = "--. -"; - _textCenterLine2Right = "--. -"; - _textInfoLine2 = "- average"; - }; - case 1: { - _textCenterLine1Right = Str(round((GVAR(Max) select 3) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 3) / (GVAR(Entries) select 3) * 10) / 10); - _textInfoLine2 = "- stop"; - }; - case 2: { - _textCenterLine1Right = Str(round((GVAR(Max) select 3) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 3) / (GVAR(Entries) select 3) * 10) / 10); - _textInfoLine2 = "- clear"; + _textCenterLine1Left = "Max"; + _textCenterLine2Left = "Avg"; + switch (GVAR(MinAvgMaxMode)) do { + case 0: { + _textCenterLine1Right = "--. -"; + _textCenterLine2Right = "--. -"; + _textInfoLine2 = "- average"; + }; + case 1: { + _textCenterLine1Right = Str(round((GVAR(Max) select 2) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 2) / (GVAR(Entries) select 2) * 10) / 10); + _textInfoLine2 = "- stop"; + }; + case 2: { + _textCenterLine1Right = Str(round((GVAR(Max) select 2) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 2) / (GVAR(Entries) select 2) * 10) / 10); + _textInfoLine2 = "- clear"; + }; }; }; }; - }; - case 4: { // TEMP - if (!GVAR(MinAvgMax)) then { - _textCenterBig = Str(round(_temperature * 10) / 10); - } else { - _textCenterLine1Left = "Min"; - _textCenterLine2Left = "Avg"; - _textCenterLine3Left = "Max"; - _textCenterLine1Right = Str(round((GVAR(Min) select 4) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 4) / (GVAR(Entries) select 4) * 10) / 10); - _textCenterLine3Right = Str(round((GVAR(Max) select 4) * 10) / 10); + case 3: { // CROSSWIND + if (!GVAR(MinAvgMax)) then { + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { + _textCenterBig = Str(round(abs(sin(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(sin(GVAR(RefHeading)) * _windSpeed) * 10) / 10); + _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; + }; + _textInfoLine2 = "- set heading"; + } else { + _textCenterLine1Left = "Max"; + _textCenterLine2Left = "Avg"; + switch (GVAR(MinAvgMax)Mode) do { + case 0: { + _textCenterLine1Right = "--. -"; + _textCenterLine2Right = "--. -"; + _textInfoLine2 = "- average"; + }; + case 1: { + _textCenterLine1Right = Str(round((GVAR(Max) select 3) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 3) / (GVAR(Entries) select 3) * 10) / 10); + _textInfoLine2 = "- stop"; + }; + case 2: { + _textCenterLine1Right = Str(round((GVAR(Max) select 3) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 3) / (GVAR(Entries) select 3) * 10) / 10); + _textInfoLine2 = "- clear"; + }; + }; + }; + }; + case 4: { // HEADWIND + if (!GVAR(MinAvgMax)) then { + if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { + _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(cos(GVAR(RefHeading)) * _windSpeed * 10) / 10); + _textInfoLine1 = format["%1 m/s @ %2", round(_windSpeed * 10) / 10, round(_windDir)]; + }; + _textInfoLine2 = "- set heading"; + } else { + _textCenterLine1Left = "Max"; + _textCenterLine2Left = "Avg"; + switch (GVAR(MinAvgMax)Mode) do { + case 0: { + _textCenterLine1Right = "--. -"; + _textCenterLine2Right = "--. -"; + _textInfoLine2 = "- average"; + }; + case 1: { + _textCenterLine1Right = Str(round((GVAR(Max) select 4) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 4) / (GVAR(Entries) select 4) * 10) / 10); + _textInfoLine2 = "- stop"; + }; + case 2: { + _textCenterLine1Right = Str(round((GVAR(Max) select 4) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 4) / (GVAR(Entries) select 4) * 10) / 10); + _textInfoLine2 = "- clear"; + }; + }; + }; + }; + case 5: { // TEMP + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_temperature * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 5) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 5) / (GVAR(Entries) select 5) * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 5) * 10) / 10); + }; + }; + case 6: { // CHILL + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_chill * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 6) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 6) / (GVAR(Entries) select 6) * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 6) * 10) / 10); + }; + }; + case 7: { // HUMIDITY + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_humidity * 100 * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 7) * 100 * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 7) / (GVAR(Entries) select 7) * 100 * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 7) * 100 * 10) / 10); + }; + }; + case 8: { // HEAT INDEX + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_heatIndex * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 8) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 8) / (GVAR(Entries) select 8) * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 8) * 10) / 10); + }; + }; + case 9: { // DEW POINT + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_dewPoint * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 9) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 9) / (GVAR(Entries) select 9) * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 9) * 10) / 10); + }; + }; + case 10: { // WET BULB + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_wetBulb * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 10) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 10) / (GVAR(Entries) select 10) * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 10) * 10) / 10); + }; + }; + case 11: { // BARO + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(_barometricPressure * 10) / 10); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round((GVAR(Min) select 11) * 10) / 10); + _textCenterLine2Right = Str(round((GVAR(Total) select 11) / (GVAR(Entries) select 11) * 10) / 10); + _textCenterLine3Right = Str(round((GVAR(Max) select 11) * 10) / 10); + }; + }; + case 12: { // ALTITUDE + if (!GVAR(MinAvgMax)) then { + _textCenterBig = Str(round(EGVAR(weather,Altitude) + _playerAltitude)); + } else { + _textCenterLine1Left = "Min"; + _textCenterLine2Left = "Avg"; + _textCenterLine3Left = "Max"; + _textCenterLine1Right = Str(round(GVAR(Min) select 12)); + _textCenterLine2Right = Str(round((GVAR(Total) select 12) / (GVAR(Entries) select 12))); + _textCenterLine3Right = Str(round(GVAR(Max) select 12)); + }; + }; + case 13: { // User Screen 1 + _textCenterLine1Left = Str(round(_playerDir)); + _textCenterLine2Left = Str(round(EGVAR(weather,Altitude) + _playerAltitude)); + _textCenterLine3Left = Str(round(abs(_windSpeed) * 10) / 10); + _textCenterLine1Right = GVAR(Directions) select GVAR(Direction); + _textCenterLine2Right = "m"; + _textCenterLine3Right = "m/s"; + }; + case 14: { // User Screen 2 + _textCenterLine1Left = Str(round(_temperature * 10) / 10); + _textCenterLine2Left = Str(round(_humidity * 100 * 10) / 10); + _textCenterLine3Left = Str(round((_playerAltitude call EFUNC(weather,calculateBarometricPressure)) * 10) / 10); + _textCenterLine1Right = "C"; + _textCenterLine2Right = "%"; + _textCenterLine3Right = "hPA"; }; }; - case 5: { // HUMIDITY - if (!GVAR(MinAvgMax)) then { - _textCenterBig = Str(round(_humidity * 100 * 10) / 10); - } else { - _textCenterLine1Left = "Min"; - _textCenterLine2Left = "Avg"; - _textCenterLine3Left = "Max"; - _textCenterLine1Right = Str(round((GVAR(Min) select 5) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 5) / (GVAR(Entries) select 5) * 10) / 10); - _textCenterLine3Right = Str(round((GVAR(Max) select 5) * 10) / 10); +} else { + _textTop = ""; + switch (GVAR(referenceHeadingMenu)) do { + case 1: { + _textCenterLine1 = "MAGNETIC HEADING"; + _textCenterLine2 = Str(round(GVAR(RefHeading))); + _textCenterLine3 = "Auto Set "; + _textCenterLine4 = "Manual Set "; + _textCenterLine5 = "================"; + _textCenterLine6 = "- select (|) exit"; }; - }; - case 6: { // BARO - if (!GVAR(MinAvgMax)) then { - _textCenterBig = Str(round((_playerAltitude call EFUNC(weather,calculateBarometricPressure)) * 10) / 10); - } else { - _textCenterLine1Left = "Min"; - _textCenterLine2Left = "Avg"; - _textCenterLine3Left = "Max"; - _textCenterLine1Right = Str(round((GVAR(Min) select 6) * 10) / 10); - _textCenterLine2Right = Str(round((GVAR(Total) select 6) / (GVAR(Entries) select 6) * 10) / 10); - _textCenterLine3Right = Str(round((GVAR(Max) select 6) * 10) / 10); + case 2: { + _textCenterLine1 = "MAGNETIC HEADING"; + _textCenterLine2 = Str(round(_playerDir)); + _textCenterLine3 = "Point Down the"; + _textCenterLine4 = "Runway or Range"; + _textCenterLine5 = "================"; + _textCenterLine6 = "- set heading"; }; - }; - case 7: { // ALTITUDE - if (!GVAR(MinAvgMax)) then { - _textCenterBig = Str(round(EGVAR(weather,Altitude) + _playerAltitude)); - } else { - _textCenterLine1Left = "Min"; - _textCenterLine2Left = "Avg"; - _textCenterLine3Left = "Max"; - _textCenterLine1Right = Str(round(GVAR(Min) select 7)); - _textCenterLine2Right = Str(round((GVAR(Total) select 7) / (GVAR(Entries) select 7))); - _textCenterLine3Right = Str(round(GVAR(Max) select 7)); + case 3: { + _textCenterLine1 = "MAGNETIC HEADING"; + _textCenterLine2 = Str(round(GVAR(TmpHeading))); + _textCenterLine3 = "Press < and >"; + _textCenterLine4 = "to Adjust"; + _textCenterLine5 = "================"; + _textCenterLine6 = "- set heading"; }; }; - case 8: { // User Screen 1 - _textCenterLine1Left = Str(round(_playerDir)); - _textCenterLine2Left = Str(round(EGVAR(weather,Altitude) + _playerAltitude)); - _textCenterLine3Left = Str(round(abs(_windSpeed) * 10) / 10); - _textCenterLine1Right = GVAR(Directions) select GVAR(Direction); - _textCenterLine2Right = "m"; - _textCenterLine3Right = "m/s"; - }; - case 9: { // User Screen 2 - _textCenterLine1Left = Str(round(_temperature * 10) / 10); - _textCenterLine2Left = Str(round(_humidity * 100 * 10) / 10); - _textCenterLine3Left = Str(round((_playerAltitude call EFUNC(weather,calculateBarometricPressure)) * 10) / 10); - _textCenterLine1Right = "C"; - _textCenterLine2Right = "%"; - _textCenterLine3Right = "hPA"; - }; }; -[_textTop, _textCenterBig, _textCenterLine1Left, _textCenterLine2Left, _textCenterLine3Left, _textCenterLine1Right, _textCenterLine2Right, _textCenterLine3Right, _textInfoLine1, _textInfoLine2] +[_textTop, _textCenterBig, _textCenter, _textCenterLine1Left, _textCenterLine2Left, _textCenterLine3Left, _textCenterLine1Right, _textCenterLine2Right, _textCenterLine3Right, _textInfoLine1, _textInfoLine2, _textBottomBig, _textCenterLine1, _textCenterLine2, _textCenterLine3, _textCenterLine4, _textCenterLine5, _textCenterLine6] 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/kestrel4500/functions/fnc_updateDisplay.sqf b/addons/kestrel4500/functions/fnc_updateDisplay.sqf index 0f8be4f873..90f77f5f6a 100644 --- a/addons/kestrel4500/functions/fnc_updateDisplay.sqf +++ b/addons/kestrel4500/functions/fnc_updateDisplay.sqf @@ -14,20 +14,47 @@ */ #include "script_component.hpp" +#define __dsp (uiNamespace getVariable "Kestrel4500_Display") +#define __ctrlCenterLine3 (__dsp displayCtrl 74602) +#define __ctrlCenterLine4 (__dsp displayCtrl 74603) + private ["_outputData"]; _outputData = [] call FUNC(generateOutputData); ctrlSetText [74100, _outputData select 0]; ctrlSetText [74200, _outputData select 1]; +ctrlSetText [74201, _outputData select 2]; -ctrlSetText [74300, _outputData select 2]; -ctrlSetText [74301, _outputData select 3]; -ctrlSetText [74302, _outputData select 4]; +ctrlSetText [74300, _outputData select 3]; +ctrlSetText [74301, _outputData select 4]; +ctrlSetText [74302, _outputData select 5]; -ctrlSetText [74303, _outputData select 5]; -ctrlSetText [74304, _outputData select 6]; -ctrlSetText [74305, _outputData select 7]; +ctrlSetText [74303, _outputData select 6]; +ctrlSetText [74304, _outputData select 7]; +ctrlSetText [74305, _outputData select 8]; -ctrlSetText [74400, _outputData select 8]; -ctrlSetText [74401, _outputData select 9]; \ No newline at end of file +ctrlSetText [74400, _outputData select 9]; +ctrlSetText [74401, _outputData select 10]; + +ctrlSetText [74500, _outputData select 11]; + +ctrlSetText [74600, _outputData select 12]; +ctrlSetText [74601, _outputData select 13]; +ctrlSetText [74602, _outputData select 14]; +ctrlSetText [74603, _outputData select 15]; +ctrlSetText [74604, _outputData select 16]; +ctrlSetText [74605, _outputData select 17]; + +if (GVAR(referenceHeadingMenu) == 1) then { + if (GVAR(referenceHeadingAutoSet)) then { + __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 0.6]; + __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0]; + } else { + __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 1.0]; + __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 0.6]; + }; +} else { + __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 1.0]; + __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0]; +}; diff --git a/addons/kestrel4500/initKeybinds.sqf b/addons/kestrel4500/initKeybinds.sqf index f910bdf552..2105d906d8 100644 --- a/addons/kestrel4500/initKeybinds.sqf +++ b/addons/kestrel4500/initKeybinds.sqf @@ -2,8 +2,10 @@ { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; - if(GVAR(Kestrel4500)) exitWith { false }; - + if (GVAR(Kestrel4500)) exitWith { + closeDialog 0; + false + }; // Statement [] call FUNC(createKestrelDialog); false 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/logistics_uavbattery/CfgVehicles.hpp b/addons/logistics_uavbattery/CfgVehicles.hpp index 5feba4c9a8..c82938942f 100644 --- a/addons/logistics_uavbattery/CfgVehicles.hpp +++ b/addons/logistics_uavbattery/CfgVehicles.hpp @@ -1,15 +1,25 @@ class CfgVehicles { - class Helicopter_Base_F; - class UAV_01_base_F: Helicopter_Base_F { + class Air; + class Helicopter: Air { class ACE_Actions { - class ACE_MainActions { + class ACE_MainActions {}; + }; + }; + class Helicopter_Base_F: Helicopter { + class ACE_Actions: ACE_Actions{ + class ACE_MainActions: ACE_MainActions {}; + }; + }; + class UAV_01_base_F: Helicopter_Base_F { + class ACE_Actions: ACE_Actions{ + class ACE_MainActions: ACE_MainActions { class GVAR(RefuelUAV) { displayName = "$STR_ACE_logistics_uavbattery_Recharge"; distance = 4; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRefuelUAV)); statement = QUOTE([ARR_2(_player, _target)] call FUNC(refuelUAV)); - showDisabled = 0; \ - priority = 1.245; \ + showDisabled = 0; + priority = 1.245; icon = QUOTE(PATHTOF(ui\UAV_battery_ca.paa)); }; }; 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_blueForceTrackingUpdate.sqf b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf index edbe484f04..71e4e8c818 100644 --- a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf +++ b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf @@ -1,4 +1,6 @@ +// #define ENABLE_PERFORMANCE_COUNTERS #include "script_component.hpp" +// BEGIN_COUNTER(blueForceTrackingUpdate); private ["_groupsToDrawMarkers", "_playerSide", "_anyPlayers", "_markerType", "_colour", "_marker"]; @@ -7,6 +9,7 @@ private ["_groupsToDrawMarkers", "_playerSide", "_anyPlayers", "_markerType", "_ deleteMarkerLocal _x; } forEach GVAR(BFT_markers); +GVAR(BFT_markers) = []; if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then { @@ -38,3 +41,5 @@ if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then { GVAR(BFT_markers) pushBack _marker; } forEach _groupsToDrawMarkers; }; + +// END_COUNTER(blueForceTrackingUpdate); 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..3550df517c 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; @@ -57,14 +57,14 @@ if (GVAR(mapShake)) then { } else { if (GVAR(isShaking)) then { // Stop shaking, return to original position + ctrlMapAnimClear _mapCtrl; _mapCtrl ctrlMapAnimAdd [0, _mapScale, GVAR(lastStillPosition)]; ctrlMapAnimCommit _mapCtrl; GVAR(isShaking) = false; } else { // 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/map/stringtable.xml b/addons/map/stringtable.xml index c93ff4c286..f59c2652ff 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -4,38 +4,47 @@ Map Mapa + Mapa Map illumination? Oświetlenie mapy + ¿Iluminación de mapa? Calculate dynamic map illumination based on light conditions? Oblicza dynamiczne oświetlenie mapy bazujące na warunkach oświetleniowych + Calcula la iluminación dinámica del mapa basandose en las condiciones de luz Map shake? Drżenie mapy + ¿Temblor de mapa? Make map shake when walking? Ekran mapy drży podczas ruchu + Hace que el mapa tiemble cuando caminas Limit map zoom? Ograniczony zoom + ¿Limitar el zoom de mapa? Limit the amount of zoom available for the map? Ogranicza maksymalny stopień przybliżenia mapy + Limita la cantidad de zoom disponible para el mapa Show cursor coordinates? Koordynaty pod kursorem + ¿Mostrar coordenadas de cursor? Show the grid coordinates on the mouse pointer? Pokazuje pod kursorem koordynaty wskazanego kwadratu mapy + Muestra las coordenadas de la cuadricula en el puntero del ratón @@ -44,22 +53,27 @@ Blue Force Tracking Blue Force Tracking + Seguimiento de fuerzas amigas Interval Interwał + Intervalo How often the markers should be refreshed (in seconds) Jak często markery powinny być odświeżane (w sekundach) + Frecuencia de actualización de los marcadores (en segundos) Hide AI groups? Ukryj grupy AI + ¿Ocultar grupos de IA? Hide markers for 'AI only' groups? Ukrywa markery dla grup złożonych tylko z AI + Oculta las marcas de grupos 'solo IA' 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..31a53a6eba 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -156,7 +156,7 @@ class CfgWeapons { class ACE_salineIV_500: ACE_salineIV { displayName = $STR_ACE_Medical_Saline_IV_500; class ItemInfo: InventoryItem_Base_F { - mass = 2.5; + mass = 5; }; }; class ACE_salineIV_250: ACE_salineIV { @@ -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_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index bb66147f2a..96c7251d6b 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -22,12 +22,6 @@ _drag = if (count _this > 2) then {_this select 2} else {false}; // cannot unload a unit not in a vehicle. if (vehicle _target == _target) exitwith {}; -if (([_target] call cse_fnc_isAwake)) exitwith {}; +if (([_target] call EFUNC(common,isAwake))) exitwith {}; -if ([_target] call EFUNC(common,unloadPerson)) then { - if (_drag) then { - if ((vehicle _caller) == _caller) then { - [[_caller, _target, true], QUOTE(DFUNC(actionDragUnit)), _caller, false] call EFUNC(common,execRemoteFnc); // TODO replace by event - }; - }; -}; +[_target] call EFUNC(common,unloadPerson) \ No newline at end of file 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 c95db059df..083f949d9d 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -27,8 +27,11 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { _unit setvariable [QGVAR(addedToUnitLoop), true, true]; [{ - private "_unit"; + private ["_unit", "_interval"]; _unit = (_this select 0) select 0; + _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; if (!local _unit) then { @@ -39,11 +42,11 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { _unit setvariable [QGVAR(bloodVolume), _unit getvariable [QGVAR(bloodVolume), 100], true]; }; } else { - [_unit] call FUNC(handleUnitVitals); + [_unit, _interval] call FUNC(handleUnitVitals); 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); }; @@ -51,5 +54,5 @@ if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { [_unit, _pain] call FUNC(playInjuredSound); }; }; - }, 1, [_unit]] 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 ebfb8be746..c96c1b05f8 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -15,16 +15,14 @@ private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues", "_airwayStatus", "_blood", "_bloodPressureH", "_bloodPressureL", "_interval"]; _unit = _this select 0; - -_interval = time - (_unit getVariable [QGVAR(lastMomentVitalsHandled), 0]); -_unit setVariable [QGVAR(lastMomentVitalsHandled), time]; +_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)); @@ -60,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_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index ffe67d21bc..b3b6e9d52a 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -55,3 +55,8 @@ if (isNil _callback) then { _args call _callback; _args call FUNC(createLitter); + +//If we're not already tracking vitals, start: +if (!(_target getvariable [QGVAR(addedToUnitLoop),false])) then { + [_target] call FUNC(addToInjuredCollection); +}; 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/medical/stringtable.xml b/addons/medical/stringtable.xml index 9e818e8ca3..6be791a7ca 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -2704,298 +2704,372 @@ ACE Medical ACE Opcje medyczne + Médico ACE Medical Settings [ACE] Ustawienia medyczne [ACE] + Ajustes médicos [ACE] Medical Level Poziom medyczny + Nivel médico What is the medical simulation level? Jaki jest poziom symulacji medycznej? + ¿Cuál es el nivel de simulación médica? Basic Podstawowy + Básico Advanced Zaawansowany + Avanzado Medics setting Poziom medyków + Configuración médica What is the level of detail prefered for medics? Jaki jest poziom detali medycznych wyświetlanych dla medyków? + ¿Cuál es el nivel de detalle preferido para los médicos? Disable medics Wyłącz medyków + Desactivar médicos Enable Litter Aktywuj odpadki + Activar restos médicos Enable litter being created upon treatment Twórz odpadki medyczne podczas leczenia + Activar los restos médicos que se crean en el tratamiento Life time of litter objects Długość życia odpadków + Tiempo de vida de los restos médicos How long should litter objects stay? In seconds. -1 is forever. Ile czasu musi upłynąć, aby odpadki zaczęły znikać? W sekundach. -1 dla nieskończoności. + ¿Por cuánto tiempo deben permanecer los restos médicos? En segundos. -1 es para siempre. Enable Screams Aktywuj wrzaski + Activar gritos Enable screaming by injuried units Aktywuj wrzeszczenie z bólu przez ranne jednostki + Activar gritos para unidades heridas Player Damage Próg obrażeń graczy + Daño de jugador What is the damage a player can take before being killed? Jaki jest próg obrażeń, jakie gracz może otrzymać zanim zostanie zabity? + ¿Cuál es el daño que un jugador puede sufrir antes de morir? AI Damage Próg obrażeń AI + Daño IA What is the damage an AI can take before being killed? Jaki jest próg obrażeń, jakie AI może otrzymać zanim zostanie zabite? + ¿Cuál es el daño que la IA puede sufrir antes de morir? AI Unconsciousness Nieprzytomność AI + Inconsciencia IA Allow AI to go unconscious Czy AI może być nieprzytomne od odniesionych obrażeń? + Permita a la IA caer inconsciente Disabled Wyłączone + Activado Enabled Włączone + Desactivado Prevent instant death Wył. natychmiast. śmierć + Prevenir muerte instantánea Have a unit move to unconscious instead of death Spraw, aby jednostka została przeniesiona do stanu nieprzytomności zamiast ginąć na miejscu od śmiertelnych obrażeń + Mover una unidad a inconsciente en vez de a muerta Bleeding coefficient Mnożnik krwawienia + Coeficiente de sangrado Coefficient to modify the bleeding speed Mnożnik modyfikujący prędkość wykrwawiania się + Coeficiente para modificar la velocidad de sangrado Pain coefficient Mnożnik bólu + Coeficiente de dolor Coefficient to modify the pain intensity Mnożnik modyfikujący intensywność bólu + Coeficiente para modificar la intensidad del dolor Sync status Synchronizuj status + Sincronizador estado Keep unit status synced. Recommended on. Utrzymuj synchronizację statusu jednostek. Zalecane zostawienie tej opcji włączonej. + Mantener el estado de la unidad sincronizado. Recomendado activado Provides a medical system for both players and AI. Moduł ten dostarcza system medyczny dla graczy oraz AI. + Proporciona un sistema médico para jugadores e IA. Advanced Medical Settings [ACE] Zaawansowane ustawienia medyczne [ACE] + Ajustes médicos avanzados [ACE] Enabled for Aktywne dla + Hablitado para Select what units the advanced medical system will be enabled for Wybierz dla kogo zaawansowany system medyczny będzie aktywny + Seleccione para qué unidades será habilitado el sistema médico avanzado Players only Tylko dla graczy + Solo jugadores Players and AI Gracze oraz AI + Jugadors e IA Enable Advanced wounds Akt. zaawansowane rany + Activa heridas avanzadas Allow reopening of bandaged wounds? Pozwól na otwieranie się zabandażowanych ran? + Permitir la reapertura de las heridas vendadas? Vehicle Crashes Obrażenia od kolizji + Accidentes de vehículos Do units take damage from a vehicle crash? Czy jednostki otrzymują obrażenia w wyniku kolizji pojazdów? + ¿Las unidades reciben daño de un accidente de tráfico? Allow PAK Ust. apteczek osobistych + Permitir EPA Who can use the PAK for full heal? Kto może skorzystać z apteczki osobistej w celu pełnego uleczenia? + ¿Quién puede utilizar el EPA para una cura completa? Anyone Wszyscy + Nadie Medics only Tylko medycy + Solo médicos Doctors only Tylko doktorzy + Solo doctores Remove PAK on use Usuń apteczkę po użyciu + Eliminar EPA después del uso Should PAK be removed on usage? Czy apteczka osobista powinna zniknąć z ekwipunku po jej użyciu? + El EPA será eliminado después de usarlo Locations PAK Ogr. apteczek osobistych + Ubicacions del EPA Where can the personal aid kit be used? Gdzie można korzystać z apteczek osobistych? + ¿Dónde se puede utilizar el equipo de primeros auxilios? Anywhere Wszędzie + Donde sea Medical vehicles Pojazdy medyczne + Vehiculos médicos Medical facility Budynki medyczne + Centro médico Vehicles & facility Pojazdy i budynki medyczne + Vehículos y centros Disabled Wyłączone + Desactivado Allow Surgical kit (Adv) Ust. zestawu chirurg. + Permitir equipo quirúrgico (Avanzado) Who can use the surgical kit? Kto może skorzystać z zestawu chirurgicznego w celu zszycia ran? + ¿Quién puede utilizar el equipo quirúrgico? Remove Surgical kit (Adv) Usuń zest. chir. po użyciu + Eliminar equipo quirúrgico (Avanzado) Should Surgical kit be removed on usage? Czy zestaw chirurgiczny powinien zniknąć z ekwipunku po jego użyciu? + Eliminar el equipo quirúrgico después del uso Locations Surgical kit (Adv) Ogr. zestawu chirurg. + Ubicaciones del equipo quirúrgico (Avanzado) Where can the Surgical kit be used? Gdzie można korzystać z zestawu chirurgicznego? + Dónde se puede utilizar el equipo quirúrgico Configure the treatment settings from ACE Medical Skonfiguruj zaawansowane ustawienia leczenia systemu medycznego ACE + Configure las opciones de tratamiento del ACE Médico Revive Settings [ACE] Ustawienia wskrzeszania [ACE] + Sistema de resucitado [ACE] Enable Revive Aktywuj wskrzeszanie + Habilitar resucitado Enable a basic revive system Aktywuj podstawowy system wskrzeszania + Habilitar un sistema básico de resucitado Max Revive time Maks. czas agonii + Tiempo máximo de resucitado Max amount of seconds a unit can spend in revive state Maksymalna długość agonii w sekundach (czas na wskrzeszenie) + Cantidad máxima de segundos que una unidad puede gastar en estado de resucitación Max Revive lives Maks. ilość wskrzeszeń + Vidas máximas de resucitado Max amount of lives a unit. 0 or -1 is disabled. Maksymalna ilość wskrzeszeń. Wpisz 0 lub -1 aby wyłączyć. + Cantidad máxima de vidas por unidad. 0 o -1 es desactivado. Provides a medical system for both players and AI. Moduł ten aktywuje podstawowy system wskrzeszania. Jednostka po otrzymaniu śmiertelnych obrażeń przechodzi do stanu agonii, która trwa określoną długość czasu. W tym czasie aby wskrzesić i jednocześnie odratować jednostkę należy opatrzeć jej rany i wykonać RKO. + Proporciona un sistema médico para jugadores e IA. Set Medic Class [ACE] Ustaw klasę medyka [ACE] + Establecer case médica [ACE] List Lista + Lista List of unit names that will be classified as medic, separated by commas. Lista nazw jednostek, które są sklasyfikowane jako medycy, oddzielone przecinkami. + Lista de los nombres de las unidades que se clasifican como médico, separados por comas. Is Medic Klasa medyczna + Es médico @@ -3004,66 +3078,82 @@ None Żadna + Nada Regular medic Zwykły medyk + Médico regular Doctor (Only Advanced Medics) Doktor (tylko zaawansowani medycy) + Doctor (Solo medicina avanzada) Assigns the ACE medic class to a unit Moduł ten przypisuje klasę medyka ACE do jednostek. + Asigna la clase médico ACE a una unidad Set Medical Vehicle [ACE] Ustaw pojazd medyczny [ACE] + Establecer vehículos médicos [ACE] List Lista + Lista List of vehicles that will be classified as medical vehicle, separated by commas. Lista nazw pojazdów, które są sklasyfikowane jako pojazdy medyczne, oddzielone przecinkami. + Lista de los vehículos que se clasifican como vehículo médicos, separados por comas. Is Medical Vehicle Jest pojazdem med. + Es vehículo médico Whatever or not the objects in the list will be a medical vehicle. Czy pojazdy z tej listy są pojazdami medycznymi. + Cualquiera de la lista o fuera de ella será un vehículo médico. Assigns the ACE medic class to a unit Moduł ten pozwala na przypisanie danym pojazdom statusu pojazdów medycznych. Wewnątrz takiego pojazdu można wykonywać zaawansowane zabiegi medyczne. + Asigna la clase médico ACE a una unidad Set Medical Facility [ACE] Ustaw budynek medyczny [ACE] + Establece el centro médico [ACE] Is Medical Facility Jest budynkiem med. + Es centro médico Registers an object as a medical facility Przypisuje danemu obiektowi status budynku medycznego + Registra un objeto como un centro médico Defines an object as a medical facility. This allows for more advanced treatments. Can be used on buildings and vehicles. Moduł ten pozwala przypisać status budynku medycznego danemu obiektowi. Budynek taki pozwala na wykonywanie zaawansowanych zabiegów medycznych. Może być użyte na pojazdach i budynkach. + Define un objeto como un centro médico. Esto permite tratamientos más avanzados. Se puede utilizar en edificios y vehículos. [ACE] Medical Supply Crate (Basic) [ACE] Skrzynka z zapasami medycznymi (podstawowa) + [ACE] Caja de suministros médicos (Básica) [ACE] Medical Supply Crate (Advanced) [ACE] Skrzynka z zapasami medycznymi (zaawansowana) + [ACE] Caja de suministros médicos (Avanzada) Yes @@ -3090,4 +3180,4 @@ No - + \ No newline at end of file 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/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index b1bac6976b..16d27464bd 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -304,30 +304,37 @@ MicroDAGR Map Fill Wypełnienie mapy MicroDAGR + Relleno del mapa MicroDAGR MicroDAGR Map Fill Wypełnienie mapy MicroDAGR + Relleno del mapa MicroDAGR How much map data is filled on MicroDAGR's Jak duża część informacji mapy jest załadowana do MicroDAGR? + Cuanta información está disponible en el mapa del MicroDAG Full Satellite + Buildings Pełna satelitarna + budynki + Satelite completo + Edificios Topographical + Roads Topograficzna + drogi + Topografico + Carreteras None (Cannot use map view) Żadna (wyłącza ekran mapy) + Nada (No se puede el mapa) Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap.<br />Source: microDAGR.pbo Moduł ten pozwala kontrolować jak duża ilość informacji jest załadowana do przedmiotów MicroDAGR. Mniejsza ilość danych ogranicza widok mapy pokazując mniej rzeczy na minimapie.<br />Źródło: microDAGR.pbo + Controla la cantidad de información disponible en el microDAGR. Menos datos limitan la vista del mapa a mostrar menos en el minimapa.<br />Fuente: microDAGR.pbo - + \ No newline at end of file diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 680a410506..6c0e54eb3a 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -94,47 +94,59 @@ class CfgAmmo { }; // Titan - class M_Titan_AT : MissileBase { + class M_Titan_AT : MissileBase {}; + + class ACE_Javelin_FGM148: M_Titan_AT { irLock = 0; laserLock = 0; airLock = 0; // Turn off arma crosshair-guidance manualControl = 0; - + hit = 1400; // default: 800 indirectHit = 20; indirectHitRange = 2; // ACE uses these values //trackOversteer = 1; //trackLead = 0; - + + initTime = 2; + // Begin ACE guidance Configs class ADDON { enabled = 1; - + minDeflection = 0.00005; // Minium flap deflection for guidance maxDeflection = 0.025; // Maximum flap deflection for guidance incDeflection = 0.00005; // The incrmeent in which deflection adjusts. - + canVanillaLock = 0; - + // Guidance type for munitions defaultSeekerType = "Optic"; - seekerTypes[] = { "Optic" }; - + seekerTypes[] = { "Optic" }; + defaultSeekerLockMode = "LOBL"; seekerLockModes[] = { "LOBL" }; - + seekerAngle = 180; // Angle in front of the missile which can be searched seekerAccuracy = 1; // seeker accuracy multiplier - + seekerMinRange = 0; seekerMaxRange = 2500; // Range from the missile which the seeker can visually search - + // Attack profile type selection defaultAttackProfile = "JAV_TOP"; attackProfiles[] = { "JAV_TOP", "JAV_DIR" }; }; }; -}; \ No newline at end of file + class ACE_Javelin_FGM148_static: ACE_Javelin_FGM148 { + //Take config changes from (M_Titan_AT_static: M_Titan_AT) + initTime = 0.25; //"How long (in seconds) the projectile waits before starting it's engine.", - but doesn't seem to do anything + effectsMissileInit = "RocketBackEffectsStaticRPG"; + class ADDON: ADDON { + enabled = 1; + }; + }; +}; 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/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index 798b2aafcd..2b0b60664b 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -100,14 +100,17 @@ Off Wyłącz + Desactivado Player Only Tylko gracz + Solo jugador Player and AI Gracz oraz AI + Jugador e IA - + \ 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/missionmodules/stringtable.xml b/addons/missionmodules/stringtable.xml index 1532827378..d577db8899 100644 --- a/addons/missionmodules/stringtable.xml +++ b/addons/missionmodules/stringtable.xml @@ -1,73 +1,90 @@ - + ACE Mission Modules ACE Moduły misji + Módulo de misiones ACE Ambiance Sounds [ACE] Dźwięki [ACE] + [ACE] Sonidos ambiente Sounds Dźwięki + Sonidos Class names of the ambiance sounds to be played. Seperated by ',' Class name-y dźwięków do odtwarzania. Oddzielone przy użyciu ',' + Class names de los sonidos ambiente que se reproducirán. Separados por ',' Minimal Distance Minimalny dystans + Distancia mínima Used for calculating a random position and sets the minimal distance between the players and the played sound file(s) Używany do obliczania losowej pozycji a także ustawia minimalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi + Usado para calcular una posición aleatoria y establecer la distancia mínima entre los jugadores y los ficheros de sonido reproducidos Maximum Distance Maksymalny dystans + Distancia máxima Used for calculating a random position and sets the maximum distance between the players and the played sound file(s) Używany do obliczania losowej pozycji a także ustawia maksymalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi + Usado para calcular una posición aleatoria y establecer la distancia máxima entre los jugadores y los ficheros de sonido reproducidos Minimal Delay Minimalne opóźnienie + Retraso mínimo Minimal delay between sounds played Minimalne opóźnienie pomiędzy odtwarzanymi dźwiękami + Retraso mínimo entre los sonidos reproducidos Maximum Delay Maksymalne opóźnienie + Retraso máximo Maximum delay between sounds played Maksymalne opóźnienie pomiędzy odtwarzanymi dźwiękami + Retraso máximo entre los sonidos reproducidos Follow Players Podążaj za graczami + Seguir jugadores Follow players. If set to false, loop will play sounds only nearby logic position. Podążaj za graczami. Jeżeli ustawione na 'Nie', pętla będzie odtwarzana tylko w pobliżu pozycji logiki. + Seguir jugadores. Si esta desabilitado (false), se reproducirán sonidos en bucle solo cerca de la posición lógica. Volume Głośność + Volumen The volume of the sounds played Głośność odtwarzanych dźwięków + Volumen de los sonidos reproducidos Ambiance sounds loop (synced across MP) Pętla odtwarzania dzwięków (synchronizowana na MP) + Bucle de sonidos ambiente (sincronizados en MP) \ No newline at end of file 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/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index 37c7d322ad..563e14d68f 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -52,34 +52,41 @@ MK6 Settings Moździerz MK6 - Ustawienia + Ajustes MK6 Air Resistance Opór powietrza + Resistencia al aire For Player Shots, Model Air Resistance and Wind Effects Modeluj opór powietrza oraz wpływ wiatru na tor lotu pocisku dla strzałów z moździerza MK6 przez graczy + Para disparos del jugador, modelo de resistencia al aire y efectos de viento Allow MK6 Computer Komputer MK6 + Habilitar ordenador del MK6 Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance) Zezwól na komputer i dalmierz (opcja ta MUSI zostać wyłączona jeżeli aktywowałeś opór powietrza) + Muestra el ordenador y el medidor de distancia (DEBEN ser quitados si se activa la resistecia al aire) Allow MK6 Compass Kompas MK6 + Habilitar brujula del MK6 Show the MK6 Digital Compass Pokaż kompas MK6 + Muestra la brujula digital en el MK6 Moduł ten pozwala dostosować ustawienia moździerza MK6. - + \ No newline at end of file diff --git a/addons/nametags/ACE_Settings.hpp b/addons/nametags/ACE_Settings.hpp index a2c81e61b4..90d2b7d8c9 100644 --- a/addons/nametags/ACE_Settings.hpp +++ b/addons/nametags/ACE_Settings.hpp @@ -54,4 +54,12 @@ class ACE_Settings { typeName = "SCALAR"; isClientSettable = 0; }; + class GVAR(tagSize) { + value = 2; + typeName = "SCALAR"; + isClientSettable = 1; + displayName = "$STR_ACE_nametags_tagsize_name"; + description = "$STR_ACE_nametags_tagsize_description"; + values[] = {"$str_very_small", "$str_small", "$str_medium", "$str_large", "$str_very_large"}; + }; }; \ No newline at end of file diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index cea2025dcc..e34038950a 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,44 @@ 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);}]; +// Wait until the colors are defined before starting to draw the nametags +["SettingsInitialized", { + // Draw handle + addMissionEventHandler ["Draw3D", {_this call FUNC(onDraw3d);}]; +}] call EFUNC(common,addEventHandler); diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index 6a7db7d5ac..1fdd703d62 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -16,24 +16,27 @@ #include "script_component.hpp" -#define TEXTURES_RANKS [ \ - "", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \ - "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \ - ] - -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 +private ["_position", "_color", "_name", "_rank", "_size", "_icon", "_scale"]; + if (_iconType == ICON_NONE) exitWith {}; //Don't waste time if not visable +//Set Icon: +_icon = ""; +_size = 0; +if ((_iconType == ICON_NAME_SPEAK) || (_iconType == ICON_SPEAK)) then { + _icon = QUOTE(PATHTOF(UI\soundwave)) + str (floor (random 10)) + ".paa"; + _size = 1; + _alpha = _alpha max 0.6;//Boost alpha when speaking +} else { + if (_iconType == ICON_NAME_RANK) then { + _icon = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1); + _size = 1; + }; +}; + +if (_alpha < 0) exitWith {}; //Don't waste time if not visable //Set Text: _name = if (_iconType in [ICON_NAME, ICON_NAME_RANK, ICON_NAME_SPEAK]) then { @@ -42,41 +45,28 @@ _name = if (_iconType in [ICON_NAME, ICON_NAME_RANK, ICON_NAME_SPEAK]) then { "" }; -//Set Icon: -_icon = ""; -_size = 0; -if ((_iconType == ICON_NAME_SPEAK) || (_iconType == ICON_SPEAK)) then { - _icon = QUOTE(PATHTOF(UI\soundwave)) + str (floor (random 10)) + ".paa"; - _size = 0.75; - _alpha = _alpha + 0.6;//Boost alpha when speaking -} else { - if (_iconType == ICON_NAME_RANK) then { - _icon = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1); - _size = 0.75; - }; -}; - //Set Color: if !(group _target == group _player) then { _color = +GVAR(defaultNametagColor); //Make a copy, then multiply both alpha values (allows client to decrease alpha in settings) _color set [3, (_color select 3) * _alpha]; } else { - _color = [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select (["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find (if (_target == _player) then {0} else {assignedTeam _target})) max 0 + _color = [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select ((["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find (assignedTeam _target)) max 0); }; -_height = [2, 1.5, 1, 1.5, 1] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find (stance _target)); // Convert position to ASLW (expected by drawIcon3D) and add height offsets -_position = _target modelToWorldVisual [0, 0, (_height + _heightOffset)]; +_position = _target modelToWorldVisual ((_target selectionPosition "pilot") vectorAdd [0,0,(_heightOffset + .35)]); + +_scale = [0.333, 0.5, 0.666, 0.83333, 1] select GVAR(tagSize); drawIcon3D [ _icon, _color, _position, -_size, -_size, +(_size * _scale), +(_size * _scale), 0, _name, 2, -0.033, +(0.05 * _scale), "PuristaMedium" ]; diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index 9efc70aeb9..8ea8b63298 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -1,12 +1,15 @@ #include "script_component.hpp" -private ["_onKeyPressAlphaMax", "_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_pos2", "_vecy", "_relPos", "_projDist", "_pos", "_target"]; +private ["_onKeyPressAlphaMax", "_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_pos2", "_vecy", "_relPos", "_projDist", "_pos", "_target", "_targetEyePosASL", "_ambientBrightness", "_maxDistance"]; //don't show nametags in spectator -if (!alive ACE_player) exitWith {}; +if ((isNull ACE_player) || {!alive ACE_player}) exitWith {}; + +_ambientBrightness = ((([] call EFUNC(common,ambientBrightness)) + ([0, 0.4] select ((currentVisionMode ace_player) != 0))) min 1) max 0; +_maxDistance = _ambientBrightness * GVAR(PlayerNamesViewDistance); _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 }; @@ -29,8 +32,7 @@ if (GVAR(showCursorTagForVehicles) && {_onKeyPressAlphaMax > 0}) then { {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && {!(_target getVariable ["ACE_hideName", false])}) then { _distance = ACE_player distance _target; - _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); - _alpha = _alpha min _onKeyPressAlphaMax; + _alpha = (((1 - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(PlayerNamesMaxAlpha)) min _onKeyPressAlphaMax; [ACE_player, _target, _alpha, _distance * 0.026, _defaultIcon] call FUNC(drawNameTagIcon); }; }; @@ -46,8 +48,7 @@ if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then { {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && {!(_target getVariable ["ACE_hideName", false])}) then { _distance = ACE_player distance _target; - _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); - _alpha = _alpha min _onKeyPressAlphaMax; + _alpha = (((1 - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(PlayerNamesMaxAlpha)) min _onKeyPressAlphaMax; _icon = ICON_NONE; if (GVAR(showSoundWaves) == 2) then { //icon will be drawn below, so only show name here _icon = if (([_target] call FUNC(isSpeaking)) && {(vehicle _target) == _target}) then {ICON_NAME} else {_defaultIcon}; @@ -61,7 +62,7 @@ if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then { if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(showSoundWaves) == 2}) then { _pos = positionCameraToWorld [0, 0, 0]; - _targets = _pos nearObjects ["CAManBase", GVAR(PlayerNamesViewDistance) + 5]; + _targets = _pos nearObjects ["CAManBase", _maxDistance + 5]; if (!surfaceIsWater _pos) then { _pos = ATLtoASL _pos; @@ -89,18 +90,14 @@ if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(sho {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && {!(_target getVariable ["ACE_hideName", false])}) then { - if (lineIntersects [_pos, (visiblePositionASL _target) vectorAdd [0,0,1], vehicle ACE_player, _target]) exitWith {}; // Check if there is line of sight + _targetEyePosASL = eyePos _target; + if (lineIntersects [_pos, _targetEyePosASL, ACE_player, _target]) exitWith {}; // Check if there is line of sight + _relPos = (visiblePositionASL _target) vectorDiff _pos; _distance = vectorMagnitude _relPos; _projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy)); - _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min (1 - 0.15 * (_projDist * 5 - _distance - 3)) min 1) * GVAR(PlayerNamesMaxAlpha); - - if ((GVAR(showSoundWaves) == 2) && {([_target] call FUNC(isSpeaking)) && {(vehicle _target) == _target}}) then { - _alpha = 1; - } else { - _alpha = _alpha min _onKeyPressAlphaMax; - }; + _alpha = (((1 - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(PlayerNamesMaxAlpha)) min _onKeyPressAlphaMax; [ACE_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); }; diff --git a/addons/nametags/script_component.hpp b/addons/nametags/script_component.hpp index e80768a723..da912b48c4 100644 --- a/addons/nametags/script_component.hpp +++ b/addons/nametags/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_NAMETAGS - #define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_NAMETAGS - #define DEBUG_SETTINGS DEBUG_SETTINGS_NAMETAGS +#define DEBUG_SETTINGS DEBUG_SETTINGS_NAMETAGS #endif #include "\z\ace\addons\main\script_macros.hpp" @@ -16,3 +16,15 @@ #define ICON_NAME_RANK 2 #define ICON_NAME_SPEAK 3 #define ICON_SPEAK 4 + +//todo?: custom rank icons?? +#define TEXTURES_RANKS [ \ + "", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \ + ] \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index ef94140510..4bcc093814 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -112,50 +112,62 @@ Name Tags Ustawienia imion + Etiquetas de nombre Player Names View Dist. Zasięg imion graczy + Distancia de vision para nombres de jugadores Distance in meters at which player names are shown. Default: 5 Dystans w metrach, na którym wyświetlane są imiona graczy. Domyślnie: 5 + Distancia en metros a la que se muestran los nombres de los jugadores. Por defecto: 5 Show name tags for AI? Imiona AI + ¿Mostrar nombres para la IA? Show the name and rank tags for friendly AI units? Default: Do not force Pokaż imiona i rangi przyjaznych jednostek AI? Domyślnie: Nie wymuszaj + Muestra etiquetas de nombre y rango para las unidades IA amigas? Por defecto: No forzar Do Not Force Nie wymuszaj + No forzar Force Hide Wymuś ukrycie + Ocultar forzado Force show Wymuś wyświetlanie + Mostrar forzado Show crew info? Pokaż załogę + ¿Mostrar información de la tripulación? Show vehicle crew info, or by default allows players to choose it on their own. Default: Do Not Force Pokaż informacje o obsadzie pojazdu, lub pozwól graczom ustawić tą opcje według własnego uznania. Domyślnie: Nie wymuszaj + Muestra información de la tripulación, o por defecto permite a los jugadores elegirlo. Por defecto: No forzar Show for Vehicles Pokaż dla pojazdów + Mostrar para vehiculos Show cursor NameTag for vehicle commander (only if client has name tags enabled)Default: No Pokazuj imię dowódcy pojazdu nad pojazdem (tylko jeżeli klient ma włączone imiona graczy). Domyślnie: Nie + Muestra etiquetas de nombre en el cursor para el comandante del vehiculo (solo si el cliente tiene las etiquetas de nombre activadas) Por defecto: No @@ -164,38 +176,51 @@ Disabled Wyłączone + Desactivado Enabled Włączone + Activado Only Cursor Tylko pod kursorem + Solo cursor Only On Keypress Tylko po wciśnięciu klawisza + Solo al pulsar tecla Only Cursor and KeyPress Tylko pod kursorem i po wciśnięciu klawisza + En cursor y al pulsar tecla Use Nametag settings Użyj ustawień imion + Usar ajustes de etiquetas de nombre Always Show All Zawsze pokazuj wszystkie + Mostrar siempre todo - Opcja ta pozwala dostosować sposób wyświetlania imion nad głowami graczy. Opcja "Tylko po wciśnięciu klawisza" wyświetla imiona tylko przytrzymania klawisza "Modyfikator" dostępnego w menu ustawień addonów -> ACE3. + Opcja ta pozwala dostosować sposób wyświetlania imion nad głowami graczy. Opcja "Tylko po wciśnięciu klawisza" wyświetla imiona tylko przytrzymania klawisza "Modyfikator" dostępnego w menu ustawień addonów -> ACE3. Opcja ta pozwala dostosować sposób wyświetlania efektu fal dźwiękowych nad głowami mówiących graczy, wyświetlanych po przytrzymaniu klawisza PTT. Opcja ta współpracuje z TFAR oraz ACRE2. + + Nametags Size + + + Text and Icon Size Scaling + - + \ No newline at end of file diff --git a/addons/optics/CfgRscTitles.hpp b/addons/optics/CfgRscTitles.hpp index 068bb0aa20..b7d2005d77 100644 --- a/addons/optics/CfgRscTitles.hpp +++ b/addons/optics/CfgRscTitles.hpp @@ -41,7 +41,7 @@ class RscInGameUI { }; class ACE_RscWeapon_base: RscWeaponZeroing { - controls[] = {"CA_Zeroing","CA_FOVMode","ACE_DrawReticleHelper","ReticleDay","ReticleNight","BodyNight","BodyDay"}; // don't change this order + controls[] = {"CA_Zeroing","CA_FOVMode","ACE_DrawReticleHelper","ReticleDay","ReticleNight","BodyNight","BodyDay", "trippleHeadLeft", "trippleHeadRight"}; // don't change this order class CA_FOVMode: RscOpticsValue { // idea by Taosenai. Apparently this can be used via isNil check to determine wheter the scope or the kolimator is used idc = 154; @@ -70,9 +70,9 @@ class RscInGameUI { colorText[] = {1,1,1,0}; colorBackground[] = {0,0,0,0}; x = safezoneX+0.5*safezoneW-0.5*SIZEX; - y = safezoneY+0.5*safezoneH-0.5*SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4); + y = safezoneY+0.5*safezoneH-0.5*SIZEX*(4/3); w = SIZEX; - h = SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4); + h = SIZEX*(4/3); }; class ReticleNight: ReticleDay { @@ -86,15 +86,32 @@ class RscInGameUI { idc = 1713005; text = ""; x = safezoneX+0.5*safezoneW-0.5*SIZEX; - y = safezoneY+0.5*safezoneH-0.5*SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4); + y = safezoneY+0.5*safezoneH-0.5*SIZEX*(4/3); w = SIZEX; - h = SIZEX*safezoneW/safezoneH*(16/9)/(getResolution select 4); + h = SIZEX*(4/3); }; class BodyNight: BodyDay { idc = 1713006; text = ""; }; + + //These are just black side panels to cover the areas that the optics p3d doesn't cover + //It will ONLY effect tripple head users as (safezoneX == safeZoneXAbs) for everyone else + //Reference PR #1156: + class trippleHeadLeft: RscText { + idc = 1713010; + x = "safeZoneXAbs"; + Y = "safezoneY"; + W = "(safezoneX - safeZoneXAbs) * ((getResolution select 4)/(16/3))"; + H = "safeZoneH"; + colorBackground[] = {0,0,0,1}; + }; + class trippleHeadRight: trippleHeadLeft { + idc = 1713011; + x = "safeZoneXAbs + safeZoneWAbs - (safezoneX - safeZoneXABS) * ((getResolution select 4)/(16/3))"; + colorBackground[] = {0,0,0,1}; + }; }; class ACE_RscWeapon_Hamr: ACE_RscWeapon_base { @@ -177,12 +194,12 @@ _ctrl = (D displayCtrl 1713006); _sizeX = 1.54/(getResolution select 5); _sizeY = _sizeX*safezoneW/safezoneH; -_ctrl ctrlSetPosition [ +_ctrl ctrlSetPosition [ safezoneX+0.5*safezoneW-0.5*_sizeX, safezoneY+0.5*safezoneH-0.5*_sizeY, - _sizeX, - _sizeY + _sizeX, + _sizeY ]; _ctrl ctrlCommit 0 -*/ + */ 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/optics/functions/fnc_handleFired.sqf b/addons/optics/functions/fnc_handleFired.sqf index 51da4c8ead..f0399c37fc 100644 --- a/addons/optics/functions/fnc_handleFired.sqf +++ b/addons/optics/functions/fnc_handleFired.sqf @@ -52,7 +52,7 @@ _scopeShiftY = _recoilCoef * linearConversion [0, 1, random 1, SCOPE_SHIFT_Y_MIN private ["_sizeX", "_sizeY"]; _sizeX = (0.75+_recoilScope)/(getResolution select 5); -_sizeY = _sizeX*safezoneW/safezoneH*(16/9)/(getResolution select 4); +_sizeY = _sizeX*(4/3); private "_positionReticle"; _positionReticle = [ @@ -83,7 +83,7 @@ _positionBody = [ // Bring them all back _sizeX = 0.75/(getResolution select 5); -_sizeY = _sizeX*safezoneW/safezoneH*(16/9)/(getResolution select 4); +_sizeY = _sizeX*(4/3); _positionReticle = [ safezoneX+0.5*safezoneW-0.5*_sizeX, diff --git a/addons/optics/functions/fnc_onDrawScope2D.sqf b/addons/optics/functions/fnc_onDrawScope2D.sqf index 30cdb927c7..7abee8f122 100644 --- a/addons/optics/functions/fnc_onDrawScope2D.sqf +++ b/addons/optics/functions/fnc_onDrawScope2D.sqf @@ -12,24 +12,29 @@ if (!ctrlShown (_display displayCtrl 154)) exitWith { (_display displayCtrl 1713002) ctrlShow false; (_display displayCtrl 1713005) ctrlShow false; (_display displayCtrl 1713006) ctrlShow false; -}; - -GVAR(camera) setposATL positioncameratoworld [0,0,0.4]; -GVAR(camera) camPrepareTarget positioncameratoworld [0,0,50]; -GVAR(camera) camCommitPrepared 0; - -// @todo, check if that needs to be done at all -if (cameraView == "GUNNER") then { - GVAR(camera) camsetFOV 0.7; - GVAR(camera) camcommit 0; -} else { - GVAR(camera) camsetFOV 0.01; - GVAR(camera) camcommit 0; + (_display displayCtrl 1713010) ctrlShow false; + (_display displayCtrl 1713011) ctrlShow false; }; // @todo, all weapon types -private "_optic"; +private ["_optic", "_isPIP"]; _optic = (primaryWeaponItems ACE_player) select 2; +_isPIP = (getText (configFile >> "CfgWeapons" >> _optic >> "ItemInfo" >> "modelOptics")) == QUOTE(PATHTOF(models\ace_optics_pip.p3d)); + +if (_isPIP) then { + GVAR(camera) setposATL positioncameratoworld [0,0,0.4]; + GVAR(camera) camPrepareTarget positioncameratoworld [0,0,50]; + GVAR(camera) camCommitPrepared 0; + + // @todo, check if that needs to be done at all + if (cameraView == "GUNNER") then { + GVAR(camera) camsetFOV 0.7; + GVAR(camera) camcommit 0; + } else { + GVAR(camera) camsetFOV 0.01; + GVAR(camera) camcommit 0; + }; +}; // calculate lighting private ["_dayOpacity", "_nightOpacity"]; @@ -48,9 +53,11 @@ _nightOpacity = [1,0] select (_dayOpacity == 1); (_display displayCtrl 1713002) ctrlCommit 0; (_display displayCtrl 1713005) ctrlCommit 0; (_display displayCtrl 1713006) ctrlCommit 0; -*/ + */ (_display displayCtrl 1713001) ctrlShow true; (_display displayCtrl 1713002) ctrlShow true; (_display displayCtrl 1713005) ctrlShow true; (_display displayCtrl 1713006) ctrlShow true; +(_display displayCtrl 1713010) ctrlShow _isPIP; +(_display displayCtrl 1713011) ctrlShow _isPIP; diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index 68dc7fbecd..af5309a7f2 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -18,8 +18,6 @@ private ["_compiledConfig", "_name", "_typeName", "_isClientSetable", "_localizedName", "_localizedDescription", "_possibleValues", "_defaultValue", "_value", "_compiledConfigEntry"]; -_compiledConfig = " -"; { /*_settingData = [ _name, @@ -55,25 +53,11 @@ class %1 { force = 1; };", _name, _value, format['"%1"', _typeName]]; - _compiledConfig = _compiledConfig + _compiledConfigEntry; + "ace_clipboard" callExtension _compiledConfigEntry; }; } forEach EGVAR(common,settings); -FUNC(clipboardExport) = { - private["_chunks"]; - _chunks = []; - - _chunks = [_this select 0, ";"] call CBA_fnc_split; - - { - private["_chunk"]; - _chunk = _x + ";"; - "ace_clipboard" callExtension format["%1", _chunk]; - } forEach _chunks; - - "ace_clipboard" callExtension "--COMPLETE--"; -}; -[_compiledConfig] call FUNC(clipboardExport); + "ace_clipboard" callExtension "--COMPLETE--"; ["STR_ACE_OptionsMenu_settingsExported"] call EFUNC(common,displayTextStructured); diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 22a1a88cfa..7ad035cd82 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -244,46 +244,57 @@ Allow Config Export [ACE] Pozwól na eksport ustawień [ACE] + [ACE] Permitir exportar configuración Allow Zezwól + Permitir Allow export of all settings to a server config formatted. Zezwól na eksport wszystkich ustawień do formatu konfiguracji serwera. + Permitir la exportación de todos los ajustes de configuración a un servidor con formato. When allowed, you have access to the settings modification and export in SP. Clicking export will place the formated config on your clipboard. Jeżeli ustawione na zezwól, wtedy będziesz mieć dostęp do ekranu modyfikacji wszystich ustawień i zmiennych ACE, a także będziesz mieć możliwość eksportu tychże ustawień do formatu rozpoznawalnego przez userconfig serwera. Kliknięcie opcji Eksportuj skopiuje wszystkie ustawienia do schowka. Działa tylko w trybie SP. + Cuando esta permitido, se tiene acceso a los ajustes de modificación y exportación en SP. Pulsar en exportar copiara la configuración al portapapeles. Hide Ukryj + Ocultar Top right, downwards Po prawej u góry, w dół + Arriba a la derecha, hacia abajo Top right, to the left Po prawej u góry, do lewej + Arriba a la derecha, hacia la izquierda Top left, downwards Po lewej u góry, w dół + Arriba a la izquierda, hacia abajo Top left, to the right Po lewej u góry, do prawej + Arriba a la izquierda, hacia la derecha Top Góra + Arriba Bottom Dół + Abajo - + \ No newline at end of file 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/respawn/stringtable.xml b/addons/respawn/stringtable.xml index d7d5b7ac98..3a3abb6560 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -148,22 +148,27 @@ Respawn System System odrodzenia + Sistema de reaparición Save Gear? Zapisać ekwipunek? + ¿Guardar equipo? Respawn with the gear a soldier had just before his death? Odradzaj z ekwipunkiem jaki żołnierz miał tuż przed swoją śmiercią? + Reaparece con el equipo que el soldado tenía justo antes de morir Remove bodies? Usuwać ciała? + ¿Eliminar cuerpos? Remove player bodies after disconnect? Usuwaj ciała graczy po rozłączeniu z serwera? + Elimina los cuerpos de los jugadores cuando se desconecten @@ -172,6 +177,7 @@ Friendly Fire Messages Wiadomości Friendly Fire + Mensajes de fuego amigo @@ -180,18 +186,21 @@ Rallypoint System System punktu zbiórki + Sistema de punto de reunión - Moduł ten pozwala zastosować na misji "punkt zbiórki", do którego można szybko przeteleportować się z "bazy". Wymaga postawienia odpowiednich obiektów na mapie - bazy oraz flagi. Obydwa dostępne są w kategorii Puste -> ACE Odrodzenie. + Moduł ten pozwala zastosować na misji "punkt zbiórki", do którego można szybko przeteleportować się z "bazy". Wymaga postawienia odpowiednich obiektów na mapie - bazy oraz flagi. Obydwa dostępne są w kategorii Puste -> ACE Odrodzenie. Move Rallypoint Przenieś punkt zbiórki + Mover punto de reunión ACE Respawn ACE Odrodzenie + Reaparición ACE - + \ No newline at end of file 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/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index cdde0f8ff1..af99ac8417 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -28,58 +28,71 @@ SwitchUnits System System zmiany stron + Sistema de cambio de unidad Switch to West? Zmiana na Zachód? + ¿Cambiar a Oeste? Allow switching to west units? Pozwolić zmieniać graczom stronę na Zachód? + ¿Permitir cambios a unidades del Oeste? Switch to East? Zmiana na Wschód? + ¿Cambiar a Este? Allow switching to east units? Pozwolić zmieniać graczom stronę na Wschód? + ¿Permitir cambios a unidades del Este? Switch to Independent? Zmiana na Ruch Oporu? + ¿Cambiar a Independiente? Allow switching to independent units? Pozwolić zmieniać stronę na Ruch Oporu? + ¿Permitir cambios a unidades Independientes? Switch to Civilian? Zmiana na Cywili? + ¿Cambiar a Civil? Allow switching to civilian units? Pozwolić zmieniać stronę na Cywili? + ¿Permitir cambios a unidades Civiles Enable Safe Zone? Aktywuj bezp. strefę? + ¿Habilitar zona segura? Enable a safe zone around enemy units? Players can't switch to units inside of the safe zone. Aktywuje bezpieczną strefę wokół jednostek przeciwnika. Gracze nie mogą zmieniać strony wewnątrz tej strefy. + Habilita una zona segura alrededor de las unidades enemigas. Los jugadores no pueden cambiar de unidad dentro de la zona segura. Safe Zone Radius Promień bezp. strefy + Radio de la zona segura The safe zone around players from a different team. Default: 200 Promień bezpiecznej strefy wokół graczy z innych drużyn. Domyślnie: 200 + La zona segura alrededor de los jugadores de distintos equipos. Por defecto: 200 - + \ No newline at end of file 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/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index 4738d045df..7987e3b916 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -136,54 +136,67 @@ Vehicle Lock Setup Ustawienie blokady pojazdów + Configuración del cierre del vehiculo Lock Vehicle Inventory Zablokuj ekwipunek pojazdu + Bloquear inventario del vehículo Locks the inventory of locked vehicles Blokuje dostęp do ekwipunku pojazdu + Bloquea el inventario de los vehículos cerrados Vehicle Starting Lock State Początkowy stan blok. poj. + Estado inicial del cierre en vehículos Set lock state for all vehicles (removes ambiguous lock states) Ustawia początkowy stan blokady dla wszystkich pojazdów (usuwa dwuznaczne stany blokady) + Establece el estado de cierre para todos los vehículos (elimina estados de cierre ambiguos) As Is Jak jest + Está Locked Zablokowany + Cerrado Unlocked Odblokowany + Abierto Default Lockpick Strength Czas włamywania + Durabilidad de la ganzua por defecto Default Time to lockpick (in seconds). Default: 10 Domyślny czas potrzebny na otwarcie pojazdu (w sekundach). Domyślnie: 10 + Tiempo por defecto para forzar cerradura (en segundos). Por defecto: 10 Settings for lockpick strength and initial vehicle lock state. Removes ambiguous lock states.<br />Source: vehiclelock.pbo Ustawienia czasu włamywania oraz domyślnego stanu blokady pojazdów. Wyłącza dwuznaczne ustawienia blokady. Moduł ten umożliwia więc np. zamknięcie pojazdów przeciwnika na klucz tak, że gracze bez odpowiedniego sprzętu (wytrycha) nie będą mogli ich używać.<br />Źródło: vehiclelock.pbo + Ajustes de la durabilidad de la ganzua y el estado inicial del cierre de los vehículos. Elimina estados de cierre ambiguos.<br />Fuente: vehiclelock.pbo Vehicle Key Assign Przydział kluczyka do pojazdu + Asignacion de la llave del vehículo Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start.<br />Source: vehiclelock.pbo Zsynchronizuj z pojazdami i graczami. Rozda klucze dla graczy dla każdego zsynchronizowanego pojazdu. Działa tylko na pojazdy obecne na misji od samego początku (postawione w edytorze).<br />Źródło: vehiclelock.pbo + Sincronizar con vehiculos y jugadores. Distribuirá llaves personalizadas a los jugadores para todos los vehículos sincronizados. Solo valido para objetos presentes al inicio de la mision.<br />Fuente: vehiclelock.pbo - + \ No newline at end of file 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 a3460cddf3..87acad5667 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[] = {"Video settings","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 = "Client View Distance (On Foot)"; description = "Changes in game view distance when the player is on foot."; }; 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[] = {"Video settings","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 = "Client View Distance (Land Vehicle)"; description = "Changes in game view distance when the player is in a land vehicle."; }; 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[] = {"Video settings","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 = "Client View Distance (Air Vehicle)"; description = "Changes in game view distance when the player is in an air vehicle."; }; diff --git a/addons/viewdistance/functions/fnc_changeViewDistance.sqf b/addons/viewdistance/functions/fnc_changeViewDistance.sqf index 7c70a612eb..30d308dc51 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 ["View Distance: %1m",str(_new_view_distance)]; + format ["View Distance: %1m", str(viewDistance)]; } else { - format ["That option is invalid! The limit is %1m",str(_view_distance_limit)]; + format ["That option is invalid! The limit is %1m", 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/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/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 85166ce356..2a6487f51c 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -5,8 +5,12 @@ ADDON = false; PREP(calculateAirDensity); PREP(calculateBarometricPressure); +PREP(calculateDewPoint); +PREP(calculateHeatIndex); PREP(calculateRoughnessLength); PREP(calculateTemperatureAtHeight); +PREP(calculateWetBulb); +PREP(calculateWindChill); PREP(calculateWindSpeed); PREP(displayWindInfo); PREP(getMapData); diff --git a/addons/weather/functions/fnc_calculateDewPoint.sqf b/addons/weather/functions/fnc_calculateDewPoint.sqf new file mode 100644 index 0000000000..76656b1f55 --- /dev/null +++ b/addons/weather/functions/fnc_calculateDewPoint.sqf @@ -0,0 +1,30 @@ +/* + * Author: Ruthberg + * + * Calculates dew point based on temperature and relative humidity + * + * Arguments: + * 0: temperature - degrees celcius + * 2: relativeHumidity - value between 0.0 and 1.0 + * + * Return Value: + * 0: dew point + * + * Return value: + * None + */ +#include "script_component.hpp" + +#define __b 17.67 +#define __c 243.5 + +PARAMS_2(_t,_rh); + +if (_rh == 0) exitWith { CELSIUS(0) }; + +// Source: https://en.wikipedia.org/wiki/Dew_point + +private ["_gamma"]; +_gamma = ln(_rh) + (__b * _t) / (__c + _t); + +(__c * _gamma) / (__b - _gamma) diff --git a/addons/weather/functions/fnc_calculateHeatIndex.sqf b/addons/weather/functions/fnc_calculateHeatIndex.sqf new file mode 100644 index 0000000000..473360c867 --- /dev/null +++ b/addons/weather/functions/fnc_calculateHeatIndex.sqf @@ -0,0 +1,34 @@ +/* + * Author: Ruthberg + * + * Calculates heat index based on temperature and relative humidity + * + * Arguments: + * 0: temperature - degrees celcius + * 2: relativeHumidity - value between 0.0 and 1.0 + * + * Return Value: + * 0: heat index + * + * Return value: + * None + */ +#include "script_component.hpp" + +#define __C1 0.363445176 +#define __C2 0.988622465 +#define __C3 4.777114035 +#define __C4 -0.114037667 +#define __C5 -0.000850208 +#define __C6 -0.020716198 +#define __C7 0.000687678 +#define __C8 0.000274954 + +PARAMS_2(_t,_rh); + +// Source: https://en.wikipedia.org/wiki/Heat_index + +_t = TO_FAHRENHEIT(_t); +_rh = _rh * 100; // relative humidity in % + +TO_CELSIUS(__C1 + __C2 * _t + __C3 * _rh + __C4 * _t * _rh + __C5 * _t^2 + __C6 * _rh^2 + __C7 * _t^2 * _rh + __C8 * _t * _rh^2) diff --git a/addons/weather/functions/fnc_calculateWetBulb.sqf b/addons/weather/functions/fnc_calculateWetBulb.sqf new file mode 100644 index 0000000000..c180cf8384 --- /dev/null +++ b/addons/weather/functions/fnc_calculateWetBulb.sqf @@ -0,0 +1,41 @@ +/* + * Author: Ruthberg + * + * Calculates wet bulb based on temperature and relative humidity + * + * Arguments: + * 0: temperature - degrees celcius + * 1: pressure - hPa + * 2: relativeHumidity - value between 0.0 and 1.0 + * + * Return Value: + * 0: wet bulb + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_es", "_e", "_eDiff", "_eGuessPrev", "_cTempDelta", "_twGuess", "_eguess"]; + +PARAMS_3(_temperature,_pressure,_relativeHumidity); + +// Source: http://cosmoquest.org/forum/showthread.php?155366-Calculating-Wet-Bulb-Temperature-from-RH-amp-Dry-Bulb +_es = 6.112 * exp((17.67 * _temperature) / (_temperature + 243.5)); +_e = _es * _relativeHumidity; +_eDiff = _es - _e; +_eGuessPrev = _es; +_cTempDelta = 3.3145; +_twGuess = _temperature; + +for "_j" from 1 to 50 do { + _twGuess = _twGuess - _cTempDelta; + _eguess = 6.112 * exp((17.67 * _twGuess) / (_twGuess + 243.5)); + _eguess = _eguess - (_pressure * (_temperature - _twGuess) * 0.00066 * (1 + (0.00115 * _twGuess))); + _eDiff = _eguess - _e; + if (abs(_eDiff) <= 0.001) exitWith {}; + _cTempDelta = _eDiff / ((_eguessprev - _eguess) / _cTempDelta); + _eguessprev = _eguess; +}; + +_twGuess diff --git a/addons/weather/functions/fnc_calculateWindChill.sqf b/addons/weather/functions/fnc_calculateWindChill.sqf new file mode 100644 index 0000000000..021d2f8b99 --- /dev/null +++ b/addons/weather/functions/fnc_calculateWindChill.sqf @@ -0,0 +1,25 @@ +/* + * Author: Ruthberg + * + * Calculates wind chill based on temperature and wind speed + * + * Arguments: + * 0: temperature - degrees celcius + * 2: wind speed - m/s + * + * Return Value: + * 0: wind chill + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_t,_v); + +// Source: https://en.wikipedia.org/wiki/Wind_chill + +if (_t > 10) exitWith { _t }; +if (_v < 1.39) exitWith { _t }; + +_v = _v * 3,6; // wind speed in km/h +(13.12 + 0.6215 * _t - 11.37 * _v ^ 0.16 + 0.3965 * _t * _v ^ 0.16) 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/weather/script_component.hpp b/addons/weather/script_component.hpp index edc1ac64d0..2a6aeb0393 100644 --- a/addons/weather/script_component.hpp +++ b/addons/weather/script_component.hpp @@ -18,3 +18,5 @@ #define WATER_VAPOR_MOLAR_MASS 0.018016 #define DRY_AIR_MOLAR_MASS 0.028964 #define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058 +#define TO_CELSIUS(t) ((t - 32) / 1.8) +#define TO_FAHRENHEIT(t) (t * 1.8 + 32) diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 02c0964e03..e4967b47e0 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -16,58 +16,72 @@ Weather Pogoda + Clima Multiplayer synchronized ACE weather module Synchronizowana pogoda ACE + Modulo climático del ACE sincronizado en multijugador Weather propagation Zmiany pogody + Propagación del clima Enables server side weather propagation Aktywuje zmiany pogody po stronie serwera + Permite al servidor controlar la propagación del clima ACE Weather Pogoda ACE + Clima ACE Overrides the default weather (editor, mission settings) with ACE weather (map based) Nadpisuje domyślne ustawienia pogody (edytor, wywiad) przy użyciu pogody ACE (zależna od mapy) + Sobreescribe el sistema climático por defecto (editor, ajustes de mision) con clima del ACE (basado en el mapa) Sync Rain Synchronizuj deszcz + Sincronizar lluvia Synchronizes rain Synchronizuje deszcz + Sincroniza la lluvia Sync Wind Synchronizuj wiatr + Sincronizar viento Synchronizes wind Synchronizuje wiatr + Sincroniza el viento Sync Misc Synchronizuj różne + Sincronizar otros Synchronizes lightnings, rainbow, fog, ... Synchronizuje pioruny, tęcze, mgłę, ... + Sincroniza relampagos, arcoiris, niebla ... Update Interval Interwał aktualizacji + Intervalo de actualización Defines the interval (seconds) between weather updates Określa interwał (sekundy) pomiędzy aktualizacjami pogody + Defina el intervalo (en segundos) entre actualizacions de clima \ No newline at end of file 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/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 806bf4c449..212c1dbd11 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -65,43 +65,53 @@ Wind Deflection Wpływ wiatru + Desviación por viento Wind Deflection Wpływ wiatru + Desviación por viento Enables wind deflection Aktywuje wpływ wiatru na trajektorię lotu pocisków + Activa la desviación por viento Vehicle Enabled Włączone dla pojazdów + Habilitada en vehículos Enables wind deflection for static/vehicle gunners Aktywuje wpływ wiatru na trajektorię lotu pocisków dla broni statycznej i na pojazdach + Habilita la desviación por viento para artilleros estaticos/de vehículos Simulation Interval Interwał symulacji + Intervalo de simulación Defines the interval between every calculation step Określa interwał pomiędzy każdym krokiem kalkulacji + Define el intervalo entre cada calculo Simulation Radius Zasięg symulacji + Radio de simulación Defines the radius around the player (in meters) at which projectiles are wind deflected Określa obszar naokoło gracza (w metrach), na którym pociski są znoszone przez wiatr + Define el radio alrededor del jugador (en metros) en el cual los proyectiles son desviados por el viento Wind influence on projectiles trajectory Wpływ wiatru na trajektorię lotu pocisków + Influencia del viento en la trayectoria de proyectiles - + \ 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 new file mode 100644 index 0000000000..adb3c48b9c --- /dev/null +++ b/documentation/development/Documentation guidelines and tips.md @@ -0,0 +1,65 @@ +--- +layout: wiki +title: Documentation guidelines and tips +group: development +parent: wiki +order: 19 +--- + +# Documentation guidelines + + + + + +## Example entry +``` +--- +layout: wiki +title: Mission Modules +group: feature +parent: wiki +--- + +## 1. Overview + +### 1.1 Sub-feature 1 +Short description of sub-feature 1. + +### 1.2 Sub-feature 2 +Short description of sub-feature 2. + +## 2. Usage + +### 2.1 thing n°1 +- Step 1. +- Step 2. +- Step 3. + +### 2.2 thing n°2 +- Step 1. +- Step 2. +- Step 3. + +## 3. Dependencies + +`ace_something` + +## 4. Guides +``` + +# 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 ``` +- Keywords in ``` `thoses thingies` ``` +- Capitals at the start of a sentence and `.`at the end. +- VERIFY EVERYTHING IN GAME, ALL THE THINGS + +# Tips + +- Use http://dillinger.io/ to keep your sanity +- [Markdown cheat sheet] (https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) 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/branching-and-release.md b/documentation/development/branching-and-release.md new file mode 100644 index 0000000000..ae7b67b1e9 --- /dev/null +++ b/documentation/development/branching-and-release.md @@ -0,0 +1,37 @@ +--- +layout: wiki +title: Branching and Release +description: +group: development +parent: wiki +order: 5 +--- + + +## 1 Versioning + +For ACE3 we use an versioning strategy based on Semver. This means our version numbering is structured `MAJOR.MINOR.PATCH.BUILD`. + +Because this modification is for Arma and backwards compatability is not always possible, our `MAJOR.MINOR.PATCH.BUILD` rules are slightly different. We increment the: + + MAJOR version when we switch to a new arma version (ie Arma 4 or standalone expansion), + MINOR version when we add new features or large amount of bug fixes. + PATCH version when a release only contains bug fixes. + +## 2 Branching and releases + +We have a release scheduled every 2 weeks on a Tuesday. On the Friday before release, the project management will decide whether or not this scheduled release will continue. When continuing with the release, the current `master branch` will be merged into the `release branch`. The release branch will not contain any direct commits and no other branches will be merged into this branch. The exception being `hotfixes`, which are branched off `Release` and merged back into `Release` and `Master`. + +`Hotfixes` are fixes for critical bugs that prevent stable gameplay with the currently available version of ACE3. + +During this release process between the Friday and Tuesday, the day of release, work can continue on as normal on the `Master branch`. This includes new features, bug fixes that won't make it for release or other work. These will not be merged into the `Release branch` until the next release cycle, normally 2 weeks later. + +### 2.1 Branching + +* New features, bug fixes that are not a hotfix or other work will always be branched off `master` or another branch but never a `hotfix` or the `Release branch`. +* Hotfixes are always branched off the `Release branch` +* The release branch is never merged or deleted. Only master or hotfixes are allowed to merge into the `Release branch`. + +### 2.2 Diagram + +Release and branching flowchart 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 67a8afc7c0..a5deb17bdc 100644 --- a/documentation/feature/ai.md +++ b/documentation/feature/ai.md @@ -1,31 +1,30 @@ --- 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 --- -## Overview +## 1. Overview -### Adjusted AI skill values +### 1.1 Adjusted AI skill values The idea here is to reduce the AI's godlike aiming capabilties while retaining it's high intelligence. The AI should be smart enough to move through a town, but also be 'human' in their reaction time and aim. Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for setSkill. -### 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. +### 1.2 Firing in burst mode +AI will now use the automatic mode of their weapons at short distances, instead of always relying on firing single shots in quick succession. -### Longer engagement ranges +### 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. -### 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. +### 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. ACE3 removes this behaviour mostly notable in CQB by adding a valid firing mode. -### No scripting -All changes of ACE 3 AI are config based to ensure full compatibility with advanced AI modifications like ASR AI. +### 1.5 No scripting +All changes of ACE3 AI are config based to ensure full compatibility with advanced AI modifications like ASR AI. - -## Dependencies +## 2. Dependencies `ace_common` diff --git a/documentation/feature/aircraft.md b/documentation/feature/aircraft.md index c3696e37d9..cb0ddb9c5f 100644 --- a/documentation/feature/aircraft.md +++ b/documentation/feature/aircraft.md @@ -1,44 +1,42 @@ --- layout: wiki title: Aircraft -description: +description: Changes the flight behaviour of various aircraft group: feature order: 5 parent: wiki --- -## Overview +## 1. Overview -### Adjusted flight behaviour +### 1.1 Adjusted flight behaviour Changes the flight behaviour of various aircraft. -### Various adjustments to aircraft and gunships munitions +### 1.2 Various adjustments to aircraft and gunships munitions - Higher capacity magazines for the Comanche. - Gatling rate of fire (ROF) increased. - AP rockets have less splash damage. -### Missile lock warnings -Adds missile-lock warning systems to helicopters and planes based on the various real life capabilities. +### 1.3 Missile lock warnings +Adds missile-lock warning systems to helicopters and planes based on the equivalent real life capabilities. -### 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. +### 1.4 Semi-automatic flare mode +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. -### Ejecting from pilot and copilot seats +### 1.5 Ejecting from pilot and copilot seats Pilots and copilots of all helicopters can now eject. -### Laser marker for Wildcat +### 1.6 Laser marker for Wildcat Adds a laser marker to the copilot seat of the Wildcat. -### HUD for AH-9 +### 1.7 HUD for AH-9 Adds a HUD to the AH-9 based on the Comanche's HUD. +## 2. Usage -## Usage +### 2.1 Switching flare modes +Press Ctrl+C to switch between flare firing modes -### Adjusted flight behaviour -Changes the flight behaviour of various aircraft. - - -## Dependencies +## 3. Dependencies `ace_common` 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 ffb43ce263..90bb33d585 100644 --- a/documentation/feature/attach.md +++ b/documentation/feature/attach.md @@ -1,35 +1,34 @@ --- layout: wiki title: Attach -description: +description: Allows players to attach items to objects group: feature parent: wiki --- -## Overview +## 1. Overview -### Attach items to uniform +### 1.1 Attach items to uniform Allows players to attach IR grenades and chemlights to themselves. -### IR Strobe +### 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 -## Usage +### 2.1 Attaching to yourself +- Use Self Interact Ctrl+Left Windows. +- Choose `Equipment`. +- Choose `Attach item`. +- Select which item you want to attach. +- Repeat to detach. -### Attaching to yourself -- Press the self interaction key -- Go to the equipment section -- Choose the item to attach/detach +### 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. +- Repeat to detach. -### Attaching to a vehicle -- Approach the vehicle and use the interaction key -- Go to the attach item section -- Choose the item and where you want to place it - -To detach the item use the interaction key from outside the vehicle - - -## Dependencies +## 3. Dependencies `ace_interaction` diff --git a/documentation/feature/backpacks.md b/documentation/feature/backpacks.md index 857d6aae16..aa803c2e3c 100644 --- a/documentation/feature/backpacks.md +++ b/documentation/feature/backpacks.md @@ -1,23 +1,16 @@ --- layout: wiki title: Backpacks -description: +description: Notifies a player when his backpack is opened group: feature parent: wiki --- -## Overview +## 1. Overview -### Lock backpack -Adds the ability to lock backpacks. Locked backpacks can't be accessed by others. +### 1.1 Zipping sounds +A zipper sound is played when someone opens your backpack. This helps prevent banana theft. - -## 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/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 a81d107082..14395e62a1 100644 --- a/documentation/feature/captives.md +++ b/documentation/feature/captives.md @@ -1,46 +1,44 @@ --- layout: wiki title: Captives -description: +description: System for taking and handling captives group: feature parent: wiki --- -## Overview +## 1. Overview -### Take captives -Introduces a captivity system for taking and moving prisoners. +### 1.1 Take captives +Introduces a captivity system. -### Load and unload captives into / from vehicles -You can load and unload captives from vehicles using ACE 3 interactions. +### 1.2 Load and unload captives into / from vehicles +You can load and unload captives from vehicles using ACE3 interactions. -### Frisk captives +### 1.3 Frisk captives You can frisk a restrained captive. -### Surrendering +### 1.4 Surrendering You can surrender. While surrendering AI will cease fire. +## 2. Usage -## Usage +### 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. -### Capturing a target -- You need cable ties. -- Approach the target and use the interaction button. -- The interaction is around the hands in the form of a handcuffs icon. -- To release, interact with the captive. +### 2.2 Escorting a captive +- 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`. -### Escorting a captive -- Interact with the captive. -- Select the "Escort prisoner" option. -- To stop escorting just scroll down or use self interaction. - -### Loading and unloading a captive in a vehicle +### 2.3 Loading and unloading a captive into/from a vehicle - Escort the captive. -- Approach the vehicle you desire to load the captive in. -- Interact with the vehicle and load the captive. -- To unload, interact with the vehicle. +- 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. - -## Dependencies +## 3. Dependencies `ace_interaction` 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 962d7f9ff0..cfb9c461fb 100644 --- a/documentation/feature/difficulties.md +++ b/documentation/feature/difficulties.md @@ -1,23 +1,16 @@ --- layout: wiki title: Difficulties -description: +description: Tweak to Vanilla hardest difficulty group: feature parent: wiki --- -## Overview +## 1. Overview -### Elite mode adjustments -Adjusts the default settings for the hardest difficulty to more closely resemble A2 settings. (No crosshair, stat screen, death messages...) +### 1.1 Elite mode adjustments +Adjusts the default settings of the hardest difficulty to better resemble A2 settings (no crosshair, stat screen, death messages). - -## 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/disarming.md b/documentation/feature/disarming.md index 94597c87fc..7feef4575a 100644 --- a/documentation/feature/disarming.md +++ b/documentation/feature/disarming.md @@ -6,21 +6,18 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 Searching through a unit's inventory +You can search the inventory and disarm captured or unconscious units. -### Sub-feature 2 -Short description of sub-feature 2. +## 2. Usage +### 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. -## 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/disposable.md b/documentation/feature/disposable.md index 75c85f1280..c60ae729cf 100644 --- a/documentation/feature/disposable.md +++ b/documentation/feature/disposable.md @@ -1,23 +1,15 @@ --- layout: wiki title: Disposable -description: +description: Makes NLAW disposable and allows addons to do the same group: feature parent: wiki --- -## Overview +## 1. Overview -### 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. - -## 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/dragging.md b/documentation/feature/dragging.md index befe1b5606..56928ff4a8 100644 --- a/documentation/feature/dragging.md +++ b/documentation/feature/dragging.md @@ -1,25 +1,23 @@ --- layout: wiki title: Dragging -description: +description: Adds the option to drag and carry units and objects 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 adds the option to drag or carry units or objects. +## 2. Usage -## Usage +### 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`. -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/explosives.md b/documentation/feature/explosives.md index 43ab609fdd..1fd02f9af1 100644 --- a/documentation/feature/explosives.md +++ b/documentation/feature/explosives.md @@ -1,29 +1,40 @@ --- layout: wiki title: Explosives -description: +description: Adds numerous improvements to using and handling explosives group: feature parent: wiki --- -## Overview +## 1. Overview -### Advanced explosives placement +### 1.1 Advanced explosives placement Enables more precise placement of explosives. -### More trigger types +### 1.2 Numerous trigger types Offers different trigger types, like clackers and dead man switches. -### Attack explosives to vehicles +### 1.3 Attach explosives to vehicles Enables attaching explosives to vehicles. +## 2. Usage -## Usage +### 2.1 Placing explosives +- Use self interaction Ctrl+Left Windows +- Select `Explosives` +- Choose your explosive type and follow the instructions on the screen -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.2 Arming and detonating explosives +- Interact with the explosive Left Windows +- Choose the arming method +- For clackers use Self Interaction `Explosives` -> `Detonate` and choose the corresponding Firing Device +### 2.3 Defusing explosives +- 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. -## Dependencies +## 3. Dependencies `ace_interaction` 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/flashsuppressors.md b/documentation/feature/flashsuppressors.md index c78ba31679..eebf908369 100644 --- a/documentation/feature/flashsuppressors.md +++ b/documentation/feature/flashsuppressors.md @@ -6,21 +6,10 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +Adds flash suppressors, they reduce the muzzle flash of your weapon. -### 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/frag.md b/documentation/feature/frag.md index e6b74de8e7..949597aad2 100644 --- a/documentation/feature/frag.md +++ b/documentation/feature/frag.md @@ -6,21 +6,10 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +Adds a shrapnel system for explosives. -### 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/gforces.md b/documentation/feature/gforces.md index ed4340967c..fcc4758ee5 100644 --- a/documentation/feature/gforces.md +++ b/documentation/feature/gforces.md @@ -6,21 +6,10 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +Adds G-force induced tunnel vision and unconsciousness. -### 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/goggles.md b/documentation/feature/goggles.md index ad65958e82..17e9670d1b 100644 --- a/documentation/feature/goggles.md +++ b/documentation/feature/goggles.md @@ -6,20 +6,19 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Visual Effects for eyewear +### 1.1 Visual Effects for eyewear Adds color tint to sunglasses and other eyewear. Causes raindrops to appear on the screen in rain. Causes dirt to appear on the screen when dirt is kicked up -nearby (e.g. explsions, rotor wash, bullet impacts). +nearby (e.g. explosions, rotor wash, bullet impacts, muzzle blast). -## 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 Cleaning your goggles +-To clean your goggles press shift+alt+T(default keybind) - -## Dependencies +## 3. Dependencies `ace_common` diff --git a/documentation/feature/grenades.md b/documentation/feature/grenades.md index 603b5300fe..4cfe023e1f 100644 --- a/documentation/feature/grenades.md +++ b/documentation/feature/grenades.md @@ -6,24 +6,28 @@ group: feature parent: wiki --- -## Overview +## 1. Overview -### Throw modes +### 1.1 Throw modes Provides different modes for throwing grenades (high throw, precision throw and drop mode). -### Hand flares -Adds throwable hand flares in the colors white, red, green and yellow. Additionally buffs existing flares. +### 1.2 Hand flares +Adds throwable hand flares in the colors white, red, green and yellow. Additionally buffs existing flares by making them brighter and last longer. -### M84 stun grenade +### 1.3 M84 stun grenade Adds stun grenade. This will also affect AI. -## 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 Switching between throw modes +- Press 8 (by default) + +### 2.2 Switching between grenades +- Press 6 (by default) to switch between `LETHAL` grenades +- Press 7 (by default) to switch between `NON LETHAL` grenades -## Dependencies +## 3. Dependencies `ace_common` 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 e2a9d35aea..b77c1c8bba 100644 --- a/documentation/feature/medical-system.md +++ b/documentation/feature/medical-system.md @@ -32,6 +32,16 @@ To stop the bleeding, the combat life saver needs to bandage every wounded limb. Should a unit be in pain, materializing itself with a chromatic aberration screen effect, he can be given morphine. +### 2.2 Basic medical system - recommended gear +* Soldier: + * 10 x Bandage (basic) + +* Medic: + * 15-25 x Bandage (basic) + * 6 x Blood IV (500ml) + * 10 x Morphine Autoinjector + * 10 x Epinephrine Autoinjector + ## 3. Advanced Medical The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE/CMS medical system. It focuses on a more realistic model for injuries and treatment, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to not get shot. @@ -57,18 +67,177 @@ 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 * Epinephrine 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. _Epinephrine must never be given to a casualty with a high heart rate or blood pressure._ +#### 3.1.4 Types of wounds +Advanced medical system brings more different types of wounds, each with its own effects on patient. We distinguish minor, medium and large wound sizes. Below there is a list of those wounds: + +* Abrasions (or scrapes) + * Also called scrapes, they occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees). + * Sources: falling, ropeburn, vehicle crashes. + * Effects: pain - extremely light, bleeding - extremely slowly + +* Avulsions + * Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions. + * Sources: explosions, vehicle crashes, grenades, artillery shells, bullets, backblast, bites. + * Effects: pain - extremely high, bleeding - extremely fast (depends on wound size). + +* Contusions + * Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions. + * Sources: bullets, backblast, punches, vehicle crashes, falling. + * Effects: pain - light, no bleeding. + +* Crush wounds + * Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures. + * Sources: falling, vehicle crashes, punches. + * Effects: pain - light, bleeding - extremely slowly. + +* 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, 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. + * Sources: vehicle crashes, punches + * Effects: pain - light, bleeding - slow to medium speed (depends on wound size). + +* Velocity wounds + * They are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel. + * Sources: bullets, grenades, explosions, artillery shells. + * Effects: pain - extremely high, bleeding - medium speed (depends on wound size). + +* Puncture wounds + * Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass. + * Sources: stabs, grenades. + * Effects: pain - light, bleeding - slowly. + +We also distinguish different types of fractures (WIP/not implemented yet): +* Broken femur + * Description + * Sources: bullets, vehicle crashes, backblast, explosions, artillery shells, grenades. + * Effects: pain - extremely high, unable to stand until healed by medic. + +#### 3.1.5 Bandage types +Advanced medical system brings 4 different types of bandages and also properly working tourniquet. Below there is a list of all bandage types with effectiveness vs different wound types. Higher effectiveness bandages needs to be applied fewer times than ones with lower effectiveness. That depends on wound size. Applying bad type of bandage on given wound can yield wound opening after a while if not stiched fast enough. +All bandage types weights about 50 grams each. + +* Bandage (basic) + * Abrasions - highest effectiveness + * Avulsions - lowest effectiveness + * Contusions - highest effectiveness + * Crush wounds - low effectiveness + * Cut wounds - very low effectiveness + * Lacerations - medium effectiveness + * Velocity wounds - lowest effectiveness + * Puncture wounds - low effectiveness + +* Bandage (packing) + * Abrasions - highest effectiveness + * Avulsions - highest effectiveness + * Contusions - highest effectiveness + * Crush wounds - low effectiveness + * Cut wounds - lowest effectiveness + * Lacerations - lowest effectiveness + * Velocity wounds - highest effectiveness + * Puncture wounds - lowest effectiveness + +* Bandage (elastic) + * Abrasions - highest effectiveness + * Avulsions - lowest effectiveness + * Contusions - highest effectiveness + * Crush wounds - highest effectiveness + * Cut wounds - highest effectiveness + * Lacerations - highest effectiveness + * Velocity wounds - low effectiveness + * Puncture wounds - high effectiveness + +* QuikClot + * Abrasions - medium effectiveness + * Avulsions - high effectiveness + * Contusions - medium effectiveness + * Crush wounds - medium effectiveness + * Cut wounds - medium effectiveness + * Lacerations - medium effectiveness + * Velocity wounds - high effectiveness + * Puncture wounds - high effectiveness + +* Tourniquet + * 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 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. +Transfuzing 250ml of given IV takes about 1 minute to complete! + ++#### 3.1.7 PAK and Surgical kit +Using Personal Aid Kit brings patient to the best possible health state. Depending on module options, PAK can be used only in specified situations, specified place and by specified person. +Surgical kit is used to stich bandaged wounds so they will never open again. Depending on module options, surgical kit can be used only in specified situations, specified place and by specified person. + +### 3.2 Advanced medical system - recommended gear + +* Soldier: + * 4 x Bandage (basic) + * 3 x Bandage (elastic) + * 3 x Bandage (packing) + * 3 x QuikClot + * 1 x Morphine Autoinjector + * 1 x Tourniquet + +* Combat First Responder (CFR): + * 10-15 x Bandage (basic) + * 15-20 x Bandage (elastic) + * 5-8 x Bandage (packing) + * 10-15 x QuikClot + * 3 x Tourniquet + * 4 x Saline IV (500ml) + * 5 x Morphine Autoinjector + * 5 x Epinephrine Autoinjector + * 8 x Atropine Autoinjector + +* Medic: + * 10-15 x Bandage (basic) + * 15-20 x Bandage (elastic) + * 8 x Bandage (packing) + * 10-15 x QuikClot + * 5 x Tourniquet + * 6 x Saline IV (500ml) + * 8 x Morphine Autoinjector + * 8 x Epinephrine Autoinjector + * 12 x Atropine Autoinjector + * 1-3 x *Surgical kit* + * 1-3 x *Personal Aid Kit* + +* Paramedic: + * 10-15 x Bandage (basic) + * 15-20 x Bandage (elastic) + * 8 x Bandage (packing) + * 10-15 x QuikClot + * 5 x Tourniquet + * 2 x Saline IV (500ml) + * 3 x Blood IV (1000ml) - Taken from vehicle inventory only when needed + * 3 x Plasma IV (1000ml) - Taken from vehicle inventory only when needed + * 8 x Morphine Autoinjector + * 8 x Epinephrine Autoinjector + * 12 x Atropine Autoinjector + * 1-3 x *Surgical kit* + * 1-3 x *Personal Aid Kit* + +*medical item* - number of items that should be carried depends on module settings + ## Dependencies `ace_interaction`, `ace_modules`, `ace_apl` 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 35e9e772f2..3a1c46b1e6 100644 --- a/documentation/feature/windeflection.md +++ b/documentation/feature/windeflection.md @@ -6,16 +6,17 @@ group: feature parent: wiki --- -## Overview +## 1. Overview +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. -Wind Deflection is enabled by default. This feature simulates the wind deflection of projectiles 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 +ACE3 Wind Deflection can be disabled or modified via a Module in the 2D editor. -## Usage - -Wind Deflection can be disabled or modified via a Module in the 2D editor. - - -## Dependencies - +## 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 new file mode 100644 index 0000000000..c6476c075d --- /dev/null +++ b/documentation/missionmaker/classnames.md @@ -0,0 +1,245 @@ +--- +layout: wiki +title: Classnames +description: A list of all the classnames in ACE3, your wet dream came true. +group: missionmaker +order: 11 +parent: wiki +--- + +### Atragmx +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- | +ACE_ATragMX | ATragMX | ACE_ItemCore | + +### Attachable +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- | +ACE_IR_Strobe_Item | IR strobe | ACE_ItemCore | + +### Ballistics +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- | +ACE_100Rnd_65x39_caseless_mag_Tracer_Dim | 6.5mm IR-DIM | Magazine | +ACE_200Rnd_65x39_cased_Box_Tracer_Dim | 6.5mm IR-DIM | Magazine | +ACE_30Rnd_65x39_caseless_mag_Tracer_Dim | 6.5mm IR-DIM | Magazine | +ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim | 6.5mm IR-DIM | Magazine | +ACE_30Rnd_556x45_Stanag_M995_AP_mag | 5.56mm AP | Magazine | +ACE_30Rnd_556x45_Stanag_Mk262_mag | 5.56mm Mk262 | Magazine | +ACE_30Rnd_556x45_Stanag_Mk318_mag | 5.56mm Mk318 | Magazine | +ACE_30Rnd_556x45_Stanag_Tracer_Dim | 5.56mm IR-DIM | Magazine | +ACE_20Rnd_762x51_Mag_Tracer | 7.62mm Tracer | Magazine | +ACE_20Rnd_762x51_Mag_Tracer_Dim | 7.62mm IR-DIM | Magazine | +ACE_20Rnd_762x51_Mag_SD | 7.62mm SD | Magazine | +ACE_10Rnd_762x51_M118LR_Mag | 7.62mm M118LR | Magazine | +ACE_10Rnd_762x51_Mk316_Mod_0_Mag | 7.62mm Mk316 | Magazine| +ACE_10Rnd_762x51_Mk319_Mod_0_Mag | 7.62mm Mk319 | Magazine | +ACE_10Rnd_762x51_M993_AP_Mag | 7.62mm AP | Magazine | +ACE_20Rnd_762x51_M118LR_Mag | 7.62mm M118LR | Magazine | +ACE_20Rnd_762x51_Mk316_Mod_0_Mag | 7.62mm Mk316 | Magazine | +ACE_20Rnd_762x51_Mk319_Mod_0_Mag | 7.62mm Mk319 | Magazine | +ACE_20Rnd_762x51_M993_AP_Mag | 7.62mm AP | Magazine | +ACE_20Rnd_762x67_Mk248_Mod_0_Mag | 7.62mm Mk248 | Magazine | +ACE_20Rnd_762x67_Mk248_Mod_1_Mag | 7.62mm Mk248 | Magazine | +ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag | 7.62mm OTM | Magazine | +ACE_30Rnd_65x47_Scenar_mag | 6.5mm Lapua | Magazine | +ACE_30Rnd_65_Creedmor_mag | 6.5mm CM | Magazine | +ACE_10Rnd_338_300gr_HPBT_Mag |.338 HPBT | Magazine | +ACE_10Rnd_338_API526_Mag |.338 AP | Magazine | +ACE_5Rnd_127x99_Mag | 12.7mm | Magazine | +ACE_5Rnd_127x99_API_Mag | 12.7mm API | Magazine | +ACE_5Rnd_127x99_AMAX_Mag | 12.7mm | Magazine | +ACE_30Rnd_9x19_mag | 9x19mm | Magazine | +ACE_16Rnd_9x19_mag | 9x19mm | Magazine | +ACE_10Rnd_762x54_Tracer_mag | 7.62mm | Magazine | + +### Captive +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_CableTie | cable tie | ACE_ItemCore | + +### Common +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_Banana | banana | ACE_ItemCore | + +### Disposable +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_launch_NLAW_Used_F | used NLAW | Weapon | + +### Explosives +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_Clacker| M57 Firing Device | ACE_ItemCore | +ACE_M26_Clacker| M26 Firing Device | ACE_ItemCore | +ACE_DefusalKit | Defusal Kit | ACE_ItemCore | +ACE_DeadManSwitch | Dead Man's Switch | ACE_ItemCore | +ACE_Cellphone | Cellphone | ACE_ItemCore | + +### Grenades +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_HandFlare_White | M127A1 Hand Held Signal (White) | Grenade | +ACE_HandFlare_Red | M127A1 Hand Held Signal (Red | Grenade | +ACE_HandFlare_Green | M127A1 Hand Held Signal (Green) | Grenade | +ACE_HandFlare_Yellow | M127A1 Hand Held Signal (Yellow) | Grenade | +ACE_M84 | M84 Stun Grenade | + +### hearing +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_EarPlugs | Ear Plugs | ACE_ItemCore | + +### Kestrel +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_Kestrel4500 | Kestrel 4500NV | ACE_ItemCore | + +### Laser pointers +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +acc_pointer_IR | Laser Pointer (red) | Weapon accessory | +ACE_acc_pointer_red | Laser Pointer (green) | Weapon accessory | +ACE_acc_pointer_green_IR | Laser Pointer (green) | Weapon accessory | +ACE_acc_pointer_green | Laser Pointer (green) | Weapon accessory | + +### logistics +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_UAVBattery | UAV Battery | ACE_ItemCore | +ACE_wirecutter | Wirecutter | ACE_ItemCore | + +### Map tools +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_MapTools | Map Tools | ACE_ItemCore | + +# Medical +`added in 3.0.0.3` + + +classname | in game name | type | +--------- | --------- | --------- +ACE_atropine | Atropin autoinjector | ACE_ItemCore | +ACE_fieldDressing | Bandage (Basic) | ACE_ItemCore | +ACE_elasticBandage | Bandage (Elastic) | ACE_ItemCore | +ACE_quikclot | Basic Field Dressing (QuikClot) | ACE_ItemCore | +ACE_bloodIV | Blood IV (1000ml) | ACE_ItemCore | +ACE_bloodIV_500 | Blood IV (500ml) | ACE_ItemCore | +ACE_bloodIV_250 | Blood IV (250ml) | ACE_ItemCore | +ACE_bodyBag | Bodybag | ACE_ItemCore | +ACE_epinephrine | Epinephrine autoinjector | ACE_ItemCore | +ACE_morphine | Morphine autoinjector | ACE_ItemCore | +ACE_packingBandage | Packing Bandage | ACE_ItemCore | +ACE_personalAidKit | Personal Aid Kit | ACE_ItemCore | +ACE_plasmaIV | Plasma IV (1000ml) | ACE_ItemCore | +ACE_plasmaIV_500 | Plasma IV (500ml) | ACE_ItemCore | +ACE_plasmaIV_250 | Plasma IV (250ml) | ACE_ItemCore | +ACE_salineIV | Saline IV (1000ml) | ACE_ItemCore | +ACE_salineIV_500 | Saline IV (500ml) | ACE_ItemCore | +ACE_salineIV_250 | Saline IV (250ml) | ACE_ItemCore | +ACE_surgicalKit | Surgical Kit | ACE_ItemCore | +ACE_tourniquet | Tourniquet (CAT) | ACE_ItemCore | + +### Microdagr +`added in 3.0.0.3` + +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 | + +### Nightvision +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_NVG_Gen1 | NV Goggles (Gen1) | Nvgs | +ACE_NVG_Gen2 | NV Goggles (Gen2) | Nvgs | +ACE_NVG_Gen3 | NV Goggles (Gen3) | Nvgs | +ACE_NVG_Gen4 | NV Goggles (Gen4) | Nvgs | +ACE_NVG_Wide | NV Goggles (Wide) | Nvgs | + + +### Optics +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_optic_Arco_2D | ARCO (2D) | Weapon accessory | +ACE_optic_Arco_PIP | ARCO (PIP) | Weapon accessory | +ACE_optic_LRPS_2D | LRPS (2D) | Weapon accessory | +ACE_optic_LRPS_PIP | LRPS (PIP) | Weapon accessory | +ACE_optic_SOS_2D| MOS (2D) | Weapon accessory | +ACE_optic_SOS_PIP | MOS (PIP) | Weapon accessory | +ACE_optic_MRCO_2D | MRCO (2D) | Weapon accessory | +ACE_optic_MRCO_PIP | MRCO (PIP) | Weapon accessory | +ACE_optic_Hamr_2D | RCO (2D) | Weapon accessory | +ACE_optic_Hamr_PIP | RCO (PIP) | Weapon accessory | + +### Overheating +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_SpareBarrel | Spare barrel | ACE_ItemCore | + +### Parachute +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_Altimeter | Altimeter Watch | ACE_ItemCore | +ACE_NonSteerableParachute | Non-Steerable Parachute | Backpack | + +### Vector +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_Vector | Vector 21 | Binoculars | + +### Vehicle lock +`added in 3.0.0.3` + +classname | in game name | type | +--------- | --------- | --------- +ACE_key_master | Vehicle Key: Master | ACE_ItemCore | +ACE_key_lockpick | Lockpick | ACE_ItemCore | +ACE_key_west | Vehicle Key: West | ACE_ItemCore | +ACE_key_east | Vehicle Key: East | ACE_ItemCore | +ACE_key_indp | Vehicle Key: Independent | ACE_ItemCore | +ACE_key_civ | Vehicle Key: Civilian | ACE_ItemCore | diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 4552478714..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,14 +364,20 @@ 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.
Note:
-

Wind Deflection doesn't work in combination with Advanced Ballistics. If the Advanced Ballistics module is placed Wind deflection will exit and won't trigger.

+

Wind Deflection is compatible with Advanced Ballistics and allows the following combinations: +

    +
  • Only wind deflection
  • +
  • Only advanced ballistics
  • +
  • Combined wind deflection + advanced ballistics
  • +

**Settings:** @@ -357,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. @@ -365,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 @@ -503,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 @@ -537,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/getting-started.md b/documentation/user/getting-started.md index 82e65f8399..f241be8585 100644 --- a/documentation/user/getting-started.md +++ b/documentation/user/getting-started.md @@ -51,7 +51,7 @@ Press and hold the "Distance" key until the red pointing circle appears. Sight t #### 2. Azimuth Measuring Azimuth -Press and hold the "Azimuth" key until the red pointing circle appears. Sight the circle on the object and release the key. +Press and hold the "Azimuth" key until the azimuth is displayed. #### 3. Slope distance and Azimuth Measuring Slope distance and Azimuth @@ -66,7 +66,7 @@ Tap the "Distance" key once then press and hold it until the red pointing circle #### 5. Azimuth and Inclination Measuring Azimuth and Inclination -Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and release the key. +Tap the "Azimuth" key once then press and hold it until the azimuth and inclination is displayed. #### 6. Distance between two points Measuring Distance between two points @@ -81,9 +81,9 @@ Tap the "Distance" key once then press and hold it until the red pointing circle #### 8. Horizontal distance and azimuth between two points Measuring Horizontal distance and azimuth between two points -Press and hold the "Azimuth" key until the red pointing circle appears. Sight the circle on the first object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Azimuth" key. +Press and hold the "Azimuth" key until the azimuth appears. Sight the circle on the first object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Azimuth" key. #### 9. Fall of shot Measuring Fall of shot -Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the Fall of shot and release the "Azimuth" key. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If the "Distance" key is tapped the height correction values will be displayed (`UP` and `dn`). +Tap the "Azimuth" key once then press and hold it until the azimuth appears. Sight the circle on the object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the Fall of shot and release the "Azimuth" key. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If the "Distance" key is tapped the height correction values will be displayed (`UP` and `dn`). 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/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index 382ad1480e..0dde3eaf62 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -2,8 +2,7 @@ class CfgAmmo { class BulletBase; - class rhsusf_B_300winmag: BulletBase - { + class rhsusf_B_300winmag: BulletBase { ACE_caliber=7.823; ACE_bulletLength=37.821; ACE_bulletMass=14.256; @@ -16,8 +15,7 @@ class CfgAmmo ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_556x45_Ball; - class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball - { + class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball { ACE_caliber=5.69; ACE_bulletLength=23.012; ACE_bulletMass=4.0176; @@ -29,8 +27,7 @@ class CfgAmmo ACE_muzzleVelocities[]={780, 886, 950}; ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; - class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball - { + class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball { ACE_caliber=5.69; ACE_bulletLength=23.012; ACE_bulletMass=4.9896; @@ -42,8 +39,7 @@ class CfgAmmo ACE_muzzleVelocities[]={624, 816, 832, 838}; ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; - class rhs_ammo_762x51_M80_Ball: BulletBase - { + class rhs_ammo_762x51_M80_Ball: BulletBase { ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -55,8 +51,7 @@ class CfgAmmo ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; - class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball - { + class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball { ACE_caliber=7.823; ACE_bulletLength=31.496; ACE_bulletMass=11.34; @@ -68,8 +63,7 @@ class CfgAmmo ACE_muzzleVelocities[]={750, 780, 790, 794}; ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; - class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball - { + class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball { ACE_caliber=7.823; ACE_bulletLength=31.496; ACE_bulletMass=8.2296; @@ -81,8 +75,7 @@ class CfgAmmo ACE_muzzleVelocities[]={875, 910, 930}; ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; - class rhs_ammo_45ACP_MHP: BulletBase - { + class rhs_ammo_45ACP_MHP: BulletBase { ACE_caliber=11.481; ACE_bulletLength=17.272; ACE_bulletMass=14.904; @@ -94,4 +87,39 @@ class CfgAmmo ACE_muzzleVelocities[]={230, 250, 285}; ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; -}; \ No newline at end of file + + class M_Titan_AT; + class rhs_ammo_M_fgm148_AT: M_Titan_AT { + irLock = 0; + laserLock = 0; + airLock = 0; + + // Begin ACE guidance Configs + class ace_missileguidance { + enabled = 1; + + minDeflection = 0.00005; // Minium flap deflection for guidance + maxDeflection = 0.025; // Maximum flap deflection for guidance + incDeflection = 0.00005; // The incrmeent in which deflection adjusts. + + canVanillaLock = 0; + + // Guidance type for munitions + defaultSeekerType = "Optic"; + seekerTypes[] = { "Optic" }; + + defaultSeekerLockMode = "LOBL"; + seekerLockModes[] = { "LOBL" }; + + seekerAngle = 180; // Angle in front of the missile which can be searched + seekerAccuracy = 1; // seeker accuracy multiplier + + seekerMinRange = 0; + seekerMaxRange = 2500; // Range from the missile which the seeker can visually search + + // Attack profile type selection + defaultAttackProfile = "JAV_TOP"; + attackProfiles[] = { "JAV_TOP", "JAV_DIR" }; + }; + }; +}; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 1cceb9a76b..d3c9111c09 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -78,12 +78,14 @@ 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 { @@ -95,4 +97,4 @@ class CfgWeapons lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; -}; \ No newline at end of file +}; 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" diff --git a/tools/build.py b/tools/build.py index c6a425975e..716d4fb3a7 100644 --- a/tools/build.py +++ b/tools/build.py @@ -4,6 +4,10 @@ import os import sys import subprocess +######## GLOBALS ######### +MAINPREFIX = "z" +PREFIX = "ace_" +########################## def mod_time(path): if not os.path.isdir(path): @@ -15,12 +19,12 @@ def mod_time(path): def check_for_changes(addonspath, module): - if not os.path.exists(os.path.join(addonspath, "ace_{}.pbo".format(module))): + if not os.path.exists(os.path.join(addonspath, "{}{}.pbo".format(PREFIX,module))): return True - return mod_time(os.path.join(addonspath, module)) > mod_time(os.path.join(addonspath, "ace_{}.pbo".format(module))) + return mod_time(os.path.join(addonspath, module)) > mod_time(os.path.join(addonspath, "{}{}.pbo".format(PREFIX,module))) def check_for_obsolete_pbos(addonspath, file): - module = file[4:-4] + module = file[len(PREFIX):-4] if not os.path.exists(os.path.join(addonspath, module)): return True return False @@ -68,9 +72,9 @@ def main(): subprocess.check_output([ "makepbo", "-NUP", - "-@=z\\addons\\ace\\{}".format(p), + "-@={}\\{}\\addons\\{}".format(MAINPREFIX,PREFIX.rstrip("_"),p), p, - "ace_{}.pbo".format(p) + "{}{}.pbo".format(PREFIX,p) ], stderr=subprocess.STDOUT) except: failed += 1 diff --git a/tools/make.py b/tools/make.py index b461d77946..11c2bf25b5 100644 --- a/tools/make.py +++ b/tools/make.py @@ -55,6 +55,7 @@ if sys.platform == "win32": import winreg ######## GLOBALS ######### +project = "@ace" ACE_VERSION = "3.0.0" arma3tools_path = "" work_drive = "" @@ -69,6 +70,7 @@ dssignfile = "" prefix = "ace" pbo_name_prefix = "ace_" signature_blacklist = ["ace_server.pbo"] +importantFiles = ["mod.cpp", "README.md", "AUTHORS.txt", "LICENSE", "logo_ace3_ca.paa"] ############################################################################### # http://akiscode.com/articles/sha-1directoryhash.shtml @@ -310,12 +312,6 @@ def print_yellow(msg): def copy_important_files(source_dir,destination_dir): originalDir = os.getcwd() - importantFiles = ["mod.cpp", - "README.md", - "AUTHORS.txt", - "LICENSE", - "logo_ace3_ca.paa" - ] #copy importantFiles try: @@ -358,21 +354,21 @@ def copy_optionals_for_building(mod,pbos): try: #special server.pbo processing - files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) + files = glob.glob(os.path.join(release_dir, project, "optionals", "*.pbo")) for file in files: file_name = os.path.basename(file) #print ("Adding the following file: {}".format(file_name)) pbos.append(file_name) - pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) + pbo_path = os.path.join(release_dir, project, "optionals", file_name) sigFile_name = file_name +"."+ key_name + ".bisign" - sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) + sig_path = os.path.join(release_dir, project, "optionals", sigFile_name) if (os.path.isfile(pbo_path)): print("Moving {} for processing.".format(pbo_path)) - shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) + shutil.move(pbo_path, os.path.join(release_dir, project, "addons", file_name)) if (os.path.isfile(sig_path)): #print("Moving {} for processing.".format(sig_path)) - shutil.move(sig_path, os.path.join(release_dir,"@ace","addons",sigFile_name)) + shutil.move(sig_path, os.path.join(release_dir, project, "addons", sigFile_name)) except: print_error("Error in moving") raise @@ -386,9 +382,9 @@ def copy_optionals_for_building(mod,pbos): #userconfig requires special handling since it is not a PBO source folder. #CfgConvert fails to build server.pbo if userconfig is not found in P:\ if (dir_name == "userconfig"): - if (os.path.exists(os.path.join(release_dir, "@ace","optionals",dir_name))): - shutil.rmtree(os.path.join(release_dir, "@ace","optionals",dir_name), True) - shutil.copytree(os.path.join(optionals_root,dir_name), os.path.join(release_dir, "@ace","optionals",dir_name)) + if (os.path.exists(os.path.join(release_dir, project, "optionals", dir_name))): + shutil.rmtree(os.path.join(release_dir, project, "optionals", dir_name), True) + shutil.copytree(os.path.join(optionals_root,dir_name), os.path.join(release_dir, project, "optionals", dir_name)) destination = os.path.join(work_drive,dir_name) else: destination = os.path.join(module_root,dir_name) @@ -417,13 +413,13 @@ def cleanup_optionals(mod): print("Cleaning {}".format(destination)) try: - file_name = "ace_{}.pbo".format(dir_name) - src_file_path = os.path.join(release_dir, "@ace","addons",file_name) - dst_file_path = os.path.join(release_dir, "@ace","optionals",file_name) + file_name = "{}{}.pbo".format(pbo_name_prefix,dir_name) + src_file_path = os.path.join(release_dir, project, "addons", file_name) + dst_file_path = os.path.join(release_dir, project, "optionals", file_name) - sigFile_name = file_name +"."+ key_name + ".bisign" - src_sig_path = os.path.join(release_dir, "@ace","addons",sigFile_name) - dst_sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) + sigFile_name = "{}.{}.bisign".format(file_name,key_name) + src_sig_path = os.path.join(release_dir, project, "addons", sigFile_name) + dst_sig_path = os.path.join(release_dir, project, "optionals", sigFile_name) if (os.path.isfile(src_file_path)): #print("Preserving {}".format(file_name)) @@ -432,7 +428,7 @@ def cleanup_optionals(mod): #print("Preserving {}".format(sigFile_name)) os.renames(src_sig_path,dst_sig_path) except FileExistsError: - print_error(file_name + " already exists") + print_error("{} already exists".format(file_name)) continue shutil.rmtree(destination) @@ -465,7 +461,7 @@ def build_signature_file(file_name): def check_for_obsolete_pbos(addonspath, file): - module = file[4:-4] + module = file[len(pbo_name_prefix):-4] if not os.path.exists(os.path.join(addonspath, module)): return True return False @@ -576,7 +572,7 @@ def get_ace_version(): input("Press Enter to continue...") print("Resuming build...") - print_yellow("ACE VERSION set to {}".format(versionStamp)) + print_yellow("{} VERSION set to {}".format(project.lstrip("@").upper(),versionStamp)) ACE_VERSION = versionStamp return ACE_VERSION @@ -963,13 +959,13 @@ See the make.cfg file for additional build options. # Use biKeyNameAbrev to attempt to minimize problems from this BI Bug REFERENCE: http://feedback.arma3.com/view.php?id=22133 biKeyNameAbrev = key_name.split("-")[0] - shutil.copyfile(os.path.join(private_key_path, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", biKeyNameAbrev + ".bikey")) + shutil.copyfile(os.path.join(private_key_path, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", "{}.bikey".format(biKeyNameAbrev))) except: print_error("Could not copy key to release directory.") raise - key = os.path.join(private_key_path, key_name + ".biprivatekey") + key = os.path.join(private_key_path, "{}.biprivatekey".format(key_name)) # Remove any obsolete files. print_blue("\nChecking for obsolete files...") @@ -979,7 +975,7 @@ See the make.cfg file for additional build options. if check_for_obsolete_pbos(module_root, file): fileName = os.path.splitext(file)[0] print_yellow("Removing obsolete file => {}".format(file)) - purge(obsolete_check_path,fileName+"\..",fileName+".*") + purge(obsolete_check_path, "{}\..".format(fileName), "{}.*".format(fileName)) obsolete_check_path = os.path.join(module_root, release_dir, project) for file in os.listdir(obsolete_check_path): @@ -1010,12 +1006,12 @@ See the make.cfg file for additional build options. new_sha = get_directory_hash(os.path.join(module_root, module)) # Is the pbo or sig file missing? - missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) - sigFile = pbo_name_prefix+module + ".pbo." + key_name + ".bisign" - sigMissing = not os.path.isfile(os.path.join(release_dir, project, "addons", sigFile )) + missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "{}{}.pbo".format(pbo_name_prefix,module))) + sigFile = "{}{}.pbo.{}.bisign".format(pbo_name_prefix,module,key_name) + sigMissing = not os.path.isfile(os.path.join(release_dir, project, "addons", sigFile)) if missing: - print_yellow("Missing PBO file ace_{}.pbo".format(module) + ". Building...") + print_yellow("Missing PBO file {}{}.pbo. Building...".format(pbo_name_prefix,module)) # Check if it needs rebuilt # print ("Hash:", new_sha) @@ -1025,7 +1021,7 @@ See the make.cfg file for additional build options. if sigMissing: if key: print("Missing Signature key {}".format(sigFile)) - build_signature_file(os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")) + build_signature_file(os.path.join(module_root, release_dir, project, "addons", "{}{}.pbo".format(pbo_name_prefix,module))) # Skip everything else continue @@ -1050,13 +1046,13 @@ See the make.cfg file for additional build options. try: # Remove the old pbo, key, and log - old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" + old = os.path.join(module_root, release_dir, project, "addons", "{}{}".format(pbo_name_prefix,module)) + "*" files = glob.glob(old) for f in files: os.remove(f) if pbo_name_prefix: - old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" + old = os.path.join(module_root, release_dir, project, "addons", "{}{}".format(pbo_name_prefix,module)) + "*" files = glob.glob(old) for f in files: os.remove(f) @@ -1114,17 +1110,17 @@ See the make.cfg file for additional build options. # Prettyprefix rename the PBO if requested. if pbo_name_prefix: try: - os.rename(os.path.join(module_root, release_dir, project, "addons", module+".pbo"), os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) + os.rename(os.path.join(module_root, release_dir, project, "addons", "{}.pbo".format(module)), os.path.join(module_root, release_dir, project, "addons", "{}{}.pbo".format(pbo_name_prefix,module))) except: raise print_error("Could not rename built PBO with prefix.") # Sign result - if (key and not "ace_{}.pbo".format(module) in signature_blacklist): + if (key and not "{}{}.pbo".format(pbo_name_prefix,module) in signature_blacklist): print("Signing with {}.".format(key)) if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", "{}{}.pbo".format(pbo_name_prefix,module))]) else: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", "{}.pbo".format(module))]) if ret == 0: build_successful = True @@ -1183,7 +1179,7 @@ See the make.cfg file for additional build options. # Prettyprefix rename the PBO if requested. if pbo_name_prefix: try: - os.rename(os.path.join(make_root, release_dir, project, "addons", module+".pbo"), os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) + os.rename(os.path.join(make_root, release_dir, project, "addons", "{}.pbo".format(module)), os.path.join(make_root, release_dir, project, "addons", "{}{}.pbo".format(pbo_name_prefix,module))) except: raise print_error("Could not rename built PBO with prefix.") @@ -1192,12 +1188,12 @@ See the make.cfg file for additional build options. # Sign result #print_yellow("Sig_fileName: ace_{}.pbo".format(module)) - if (key and not "ace_{}.pbo".format(module) in signature_blacklist) : + if (key and not "{}{}.pbo".format(pbo_name_prefix,module) in signature_blacklist) : print("Signing with {}.".format(key)) if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons","{}{}.pbo".format(pbo_name_prefix,module))]) else: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", "{}.pbo".format(module))]) if ret == 0: build_successful = True @@ -1229,7 +1225,7 @@ See the make.cfg file for additional build options. finally: - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) + copy_important_files(module_root_parent,os.path.join(release_dir, project)) cleanup_optionals(optionals_modules) # Done building all modules! diff --git a/tools/setup.py b/tools/setup.py index 1b9ab119d9..62925a6066 100644 --- a/tools/setup.py +++ b/tools/setup.py @@ -4,7 +4,6 @@ # ACE3 Setup Script # ####################### - import os import sys import shutil @@ -12,8 +11,14 @@ import platform import subprocess import winreg +######## GLOBALS ######### +MAINDIR = "z" +PROJECTDIR = "ace" +CBA = "P:\\x\\cba" +########################## def main(): + FULLDIR = "{}\\{}".format(MAINDIR,PROJECTDIR) print(""" ###################################### # ACE3 Development Environment Setup # @@ -28,10 +33,10 @@ def main(): If you have not done those things yet, please abort this script in the next step and do so first. This script will create two hard links on your system, both pointing to your ACE3 project folder: - [Arma 3 installation directory]\\z\\ace => ACE3 project folder - P:\\z\\ace => ACE3 project folder + [Arma 3 installation directory]\\{} => ACE3 project folder + P:\\{} => ACE3 project folder - It will also copy the required CBA includes to P:\\x\\cba, if you do not have the CBA source code already.""") + It will also copy the required CBA includes to {}, if you do not have the CBA source code already.""".format(FULLDIR,FULLDIR,CBA)) print("\n") try: @@ -60,26 +65,26 @@ def main(): print("\n# Creating links ...") - if os.path.exists("P:\\z\\ace"): + if os.path.exists("P:\\{}\\{}".format(MAINDIR,PROJECTDIR)): print("Link on P: already exists. Please finish the setup manually.") return 4 - if os.path.exists(os.path.join(armapath, "z", "ace")): + if os.path.exists(os.path.join(armapath, MAINDIR, PROJECTDIR)): print("Link in Arma directory already exists. Please finish the setup manually.") return 5 try: - if not os.path.exists("P:\\z"): - os.mkdir("P:\\z") - if not os.path.exists(os.path.join(armapath, "z")): - os.mkdir(os.path.join(armapath, "z")) + if not os.path.exists("P:\\{}".format(MAINDIR)): + os.mkdir("P:\\{}".format(MAINDIR)) + if not os.path.exists(os.path.join(armapath, MAINDIR)): + os.mkdir(os.path.join(armapath, MAINDIR)) if platform.win32_ver()[0] == "7": - subprocess.call(["cmd", "/c", "mklink", "/D", "P:\\z\\ace", projectpath]) - subprocess.call(["cmd", "/c", "mklink", "/D", os.path.join(armapath, "z", "ace"), projectpath]) + subprocess.call(["cmd", "/c", "mklink", "/D", "P:\\{}\\{}".format(MAINDIR,PROJECTDIR), projectpath]) + subprocess.call(["cmd", "/c", "mklink", "/D", os.path.join(armapath, MAINDIR, PROJECTDIR), projectpath]) else: - subprocess.call(["cmd", "/c", "mklink", "/D", "/J", "P:\\z\\ace", projectpath]) - subprocess.call(["cmd", "/c", "mklink", "/D", "/J", os.path.join(armapath, "z", "ace"), projectpath]) + subprocess.call(["cmd", "/c", "mklink", "/D", "/J", "P:\\{}\\{}".format(MAINDIR,PROJECTDIR), projectpath]) + subprocess.call(["cmd", "/c", "mklink", "/D", "/J", os.path.join(armapath, MAINDIR, PROJECTDIR), projectpath]) except: raise print("Something went wrong during the link creation. Please finish the setup manually.") @@ -90,18 +95,18 @@ def main(): print("\n# Copying required CBA includes ...") - if os.path.exists("P:\\x\\cba"): - print("P:\\x\\cba already exists, skipping.") + if os.path.exists(CBA): + print("{} already exists, skipping.".format(CBA)) return -1 try: - shutil.copytree(os.path.join(projectpath, "tools", "cba"), "P:\\x\\cba") + shutil.copytree(os.path.join(projectpath, "tools", "cba"), CBA) except: raise - print("Something went wrong while copying CBA includes. Please copy tools\\cba to P:\\x\\cba manually.") + print("Something went wrong while copying CBA includes. Please copy tools\\cba to {} manually.".format(CBA)) return 7 - print("# CBA includes copied successfully to P:\\x\\cba.") + print("# CBA includes copied successfully to {}.".format(CBA)) return 0