From 4cb8671d52b1dafcaa3de1e58da78c2657d905a8 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Wed, 7 Jan 2026 00:09:08 -0600 Subject: [PATCH 01/31] smoke: new component --- .hemtt/launch.toml | 9 +- addons/smoke/$PBOPREFIX$ | 1 + addons/smoke/ACE_Arsenal_Stats.hpp | 20 +++ addons/smoke/CfgEventHandlers.hpp | 15 +++ addons/smoke/CfgGlasses.hpp | 53 ++++++++ addons/smoke/XEH_PREP.hpp | 2 + addons/smoke/XEH_postInit.sqf | 22 ++++ addons/smoke/XEH_preInit.sqf | 11 ++ addons/smoke/XEH_preStart.sqf | 2 + addons/smoke/config.cpp | 16 +++ addons/smoke/functions/fnc_isInSmoke.sqf | 28 +++++ addons/smoke/functions/fnc_pfh.sqf | 58 +++++++++ addons/smoke/initSettings.inc.sqf | 46 +++++++ addons/smoke/script_component.hpp | 17 +++ addons/smoke/stringtable.xml | 149 +++++++++++++++++++++++ 15 files changed, 447 insertions(+), 2 deletions(-) create mode 100644 addons/smoke/$PBOPREFIX$ create mode 100644 addons/smoke/ACE_Arsenal_Stats.hpp create mode 100644 addons/smoke/CfgEventHandlers.hpp create mode 100644 addons/smoke/CfgGlasses.hpp create mode 100644 addons/smoke/XEH_PREP.hpp create mode 100644 addons/smoke/XEH_postInit.sqf create mode 100644 addons/smoke/XEH_preInit.sqf create mode 100644 addons/smoke/XEH_preStart.sqf create mode 100644 addons/smoke/config.cpp create mode 100644 addons/smoke/functions/fnc_isInSmoke.sqf create mode 100644 addons/smoke/functions/fnc_pfh.sqf create mode 100644 addons/smoke/initSettings.inc.sqf create mode 100644 addons/smoke/script_component.hpp create mode 100644 addons/smoke/stringtable.xml diff --git a/.hemtt/launch.toml b/.hemtt/launch.toml index ff6bdadd3b9..638df8bfac9 100644 --- a/.hemtt/launch.toml +++ b/.hemtt/launch.toml @@ -3,6 +3,12 @@ workshop = [ "450814997", # CBA_A3 ] +[adt] +extends = "default" +workshop = [ + "3499977893", # ADT +] + [rhs] extends = "default" workshop = [ @@ -27,10 +33,9 @@ workshop = [ ] [wardrobe] -extends = "default" +extends = "adt" mission = "Wardrobe.VR" workshop = [ - "3499977893", # Advanced Developer Tools "1779063631", # ZEN # "751965892", # ACRE # "623475643", # eden enhanced diff --git a/addons/smoke/$PBOPREFIX$ b/addons/smoke/$PBOPREFIX$ new file mode 100644 index 00000000000..830debaa3c8 --- /dev/null +++ b/addons/smoke/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\smoke diff --git a/addons/smoke/ACE_Arsenal_Stats.hpp b/addons/smoke/ACE_Arsenal_Stats.hpp new file mode 100644 index 00000000000..e31618ec3ef --- /dev/null +++ b/addons/smoke/ACE_Arsenal_Stats.hpp @@ -0,0 +1,20 @@ +class EGVAR(arsenal,stats) { + class statBase; + class GVAR(breathing_protection): statBase { + scope = 2; + displayName = CSTRING(statBreatingProtection); + showBar = 1; + condition = QUOTE(getNumber (_this select 1 >> QQGVAR(Breathing_Protection)) > 0); + barStatement = QUOTE(getNumber (_this select 1 >> QQGVAR(Breathing_Protection))); + tabs[] = {{7}, {}}; + }; + + class GVAR(eyes_protection): statBase { + scope = 2; + displayName = CSTRING(statEyesProtection); + showBar = 1; + condition = QUOTE(getNumber (_this select 1 >> QQGVAR(Eyes_Protection)) > 0); + barStatement = QUOTE(getNumber (_this select 1 >> QQGVAR(Eyes_Protection))); + tabs[] = {{7}, {}}; + }; +}; diff --git a/addons/smoke/CfgEventHandlers.hpp b/addons/smoke/CfgEventHandlers.hpp new file mode 100644 index 00000000000..e90bed419e7 --- /dev/null +++ b/addons/smoke/CfgEventHandlers.hpp @@ -0,0 +1,15 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/smoke/CfgGlasses.hpp b/addons/smoke/CfgGlasses.hpp new file mode 100644 index 00000000000..d7ee9a1f65d --- /dev/null +++ b/addons/smoke/CfgGlasses.hpp @@ -0,0 +1,53 @@ +class CfgGlasses { + class None; + + class G_AirPurifyingRespirator_01_base_F: None { + GVAR(Eyes_Protection) = 1; + GVAR(Breathing_Protection) = 1; + }; + + class G_Balaclava_blk: None { + GVAR(Breathing_Protection) = 0.2; + }; + class G_Balaclava_combat: G_Balaclava_blk { + GVAR(Eyes_Protection) = 1; + }; + class G_Balaclava_lowprofile: G_Balaclava_blk { + GVAR(Eyes_Protection) = 1; + }; + + class G_Combat: None { + GVAR(Eyes_Protection) = 1; + }; + class G_Lowprofile: None { + GVAR(Eyes_Protection) = 1; + }; + + class G_RegulatorMask_base_F: None { + GVAR(Eyes_Protection) = 1; + GVAR(Breathing_Protection) = 1; + }; + + class G_Respirator_base_F: None { + GVAR(Breathing_Protection) = 0.8; + }; + + class G_EyeProtectors_base_F: None { + GVAR(Eyes_Protection) = 0.2; + }; + + class G_Balaclava_TI_blk_F: None { + GVAR(Breathing_Protection) = 0.4; + }; + class G_Balaclava_TI_G_blk_F: G_Balaclava_TI_blk_F { + GVAR(Eyes_Protection) = 1; + }; + class G_Balaclava_TI_tna_F; + class G_Balaclava_TI_G_tna_F: G_Balaclava_TI_tna_F { + GVAR(Eyes_Protection) = 1; + }; + + class G_Blindfold_01_base_F: None { + GVAR(Eyes_Protection) = 0.6; + }; +}; diff --git a/addons/smoke/XEH_PREP.hpp b/addons/smoke/XEH_PREP.hpp new file mode 100644 index 00000000000..120eca9de92 --- /dev/null +++ b/addons/smoke/XEH_PREP.hpp @@ -0,0 +1,2 @@ +PREP(isInSmoke); +PREP(pfh); diff --git a/addons/smoke/XEH_postInit.sqf b/addons/smoke/XEH_postInit.sqf new file mode 100644 index 00000000000..2c6d1125a17 --- /dev/null +++ b/addons/smoke/XEH_postInit.sqf @@ -0,0 +1,22 @@ +#include "script_component.hpp" + +GVAR(ppHandleDynamicBlur) = ppEffectCreate ["DynamicBlur", 400]; +GVAR(ppHandleColorCorrections) = ppEffectCreate ["ColorCorrections", 1500]; +GVAR(ppHandleDynamicBlur) ppEffectEnable GVAR(enabled); +GVAR(ppHandleColorCorrections) ppEffectEnable GVAR(enabled); + +if (GVAR(enabled)) then { + GVAR(pfh) = [{ + [ace_player] call FUNC(pfh); + }] call CBA_fnc_addPerFrameHandler; +}; + +["loadout", { + params ["_unit"]; + if !(local _unit) exitWith {}; + private _config = configFile >> "CfgGlasses" >> goggles _unit; + private _breathing = getNumber (_config >> QGVAR(Breathing_Protection)); + _unit setVariable [QGVAR(breathingProtection), _breathing, true]; + private _eyes = getNumber (_config >> QGVAR(Eyes_Protection)); + _unit setVariable [QGVAR(eyesProtection), _eyes, true]; +}, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/smoke/XEH_preInit.sqf b/addons/smoke/XEH_preInit.sqf new file mode 100644 index 00000000000..55d80be45e4 --- /dev/null +++ b/addons/smoke/XEH_preInit.sqf @@ -0,0 +1,11 @@ +#include "script_component.hpp" + +ADDON = false; + +#include "XEH_PREP.hpp" + +#include "initSettings.inc.sqf" + +GVAR(pfh) = -1; + +ADDON = true; diff --git a/addons/smoke/XEH_preStart.sqf b/addons/smoke/XEH_preStart.sqf new file mode 100644 index 00000000000..a51262a37b9 --- /dev/null +++ b/addons/smoke/XEH_preStart.sqf @@ -0,0 +1,2 @@ +#include "script_component.hpp" +#include "XEH_PREP.hpp" diff --git a/addons/smoke/config.cpp b/addons/smoke/config.cpp new file mode 100644 index 00000000000..2cfc94ad4a3 --- /dev/null +++ b/addons/smoke/config.cpp @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = QUOTE(COMPONENT); + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_main"}; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgGlasses.hpp" +#include "ACE_Arsenal_Stats.hpp" diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/smoke/functions/fnc_isInSmoke.sqf new file mode 100644 index 00000000000..83e11e97489 --- /dev/null +++ b/addons/smoke/functions/fnc_isInSmoke.sqf @@ -0,0 +1,28 @@ +#include "..\script_component.hpp" + +params ["_unit"]; + +private _coverage = 0; + +private _eyePos = eyePos _unit; +private _positions = [ + [_eyePos, _eyePos vectorAdd [5, 0, 0], _unit], + [_eyePos, _eyePos vectorAdd [-5, 0, 0], _unit], + [_eyePos, _eyePos vectorAdd [0, 5, 0], _unit], + [_eyePos, _eyePos vectorAdd [0, -5, 0], _unit] +]; + +{ + private _intersect = lineIntersectsSurfaces _x; + if (_intersect isNotEqualTo []) then { + _x set [1, _intersect select 0 select 0]; + }; + // Check visibility can return 0 for really close surfaces + if ((_x#0) distance (_x#1) < 0.05) then { + _coverage = _coverage + 1; + } else { + _coverage = _coverage + ([objNull, "VIEW"] checkVisibility [_x#0, _x#1]); + }; +} forEach _positions; + +_coverage < ((count _positions) / 2) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf new file mode 100644 index 00000000000..dba5f9fcf09 --- /dev/null +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -0,0 +1,58 @@ +#include "..\script_component.hpp" + +params ["_unit"]; + +private _isInSmoke = [_unit] call FUNC(isInSmoke); + +private _change = (if (_isInSmoke) then { + 0.175 * GVAR(effectFactor) +} else { + -0.04 * GVAR(recoveryFactor) +}) * diag_deltaTime; + +// Eyes +private _levelEyes = _unit getVariable [QGVAR(eyesLevel), 0]; +private _newLevelEyes = _levelEyes + _change; +_newLevelEyes = _newLevelEyes min 1; +_newLevelEyes = _newLevelEyes max 0; + +private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), false]; +if (_eyesProtect != 0) then { + _levelEyes = _levelEyes * (1 - _eyesProtect); +}; +_unit setVariable [QGVAR(eyesLevel), _levelEyes, true]; + +private _dynamicBlurValue = linearConversion [0.2, 1, _levelEyes, 0, 0.8, true]; +private _colorCorrectionsValue = linearConversion [0.2, 1, _levelEyes, 1, 0.6, true]; + +if (_unit == ace_player) then { + GVAR(ppHandleDynamicBlur) ppEffectAdjust [_dynamicBlurValue]; + GVAR(ppHandleColorCorrections) ppEffectAdjust [1,1,0,[0,0,0,0],[0.8, 0.8, 0.8, _colorCorrectionsValue],[1,1,1,0]]; + + GVAR(ppHandleDynamicBlur) ppEffectCommit 0; + GVAR(ppHandleColorCorrections) ppEffectCommit 0; +}; + +// Breathing +private _levelBreathing = _unit getVariable [QGVAR(breathingLevel), 0]; +private _newLevelBreathing = _levelBreathing + _change; +_newLevelBreathing = _newLevelBreathing min 1; +_newLevelBreathing = _newLevelBreathing max 0; + +private _breathProtect = _unit getVariable [QGVAR(breathingProtection), false]; +if (_breathProtect != 0) then { + _levelBreathing = _levelBreathing * (1 - _breathProtect); +}; +_unit setVariable [QGVAR(breathingLevel), _levelBreathing, true]; + +private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; +if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { + [ADDON, _breathingEffectiveness] call ace_medical_vitals_fnc_addSpO2DutyFactor; +}; + +// Event +private _smoked = _unit getVariable [QGVAR(smoked), false]; +if (_isInSmoke != _smoked) then { + [QGVAR(smoked), _isInSmoke] call CBA_fnc_localEvent; +}; +_unit setVariable [QGVAR(smoked), _isInSmoke, true]; diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf new file mode 100644 index 00000000000..9d326ac5d21 --- /dev/null +++ b/addons/smoke/initSettings.inc.sqf @@ -0,0 +1,46 @@ +private _category = format ["ACE %1", localize LSTRING(DisplayName)]; + +[ + QGVAR(enabled), "CHECKBOX", + [LSTRING(enabled_DisplayName), LSTRING(enabled_Description)], + _category, + true, + 1, + { + [QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged); + GVAR(ppHandleDynamicBlur) ppEffectEnable _this; + GVAR(ppHandleColorCorrections) ppEffectEnable _this; + if (_this) then { + if (GVAR(pfh) == -1) then { + GVAR(pfh) = [{ + [ace_player] call FUNC(pfh); + }] call CBA_fnc_addPerFrameHandler; + }; + } else { + if (GVAR(pfh) != -1) then { + [GVAR(pfh)] call CBA_fnc_removePerFrameHandler; + GVAR(pfh) = -1; + }; + }; + } +] call CBA_fnc_addSetting; + +[ + QGVAR(effectFactor), "SLIDER", + [LSTRING(effectFactor_DisplayName), LSTRING(effectFactor_Description)], + _category, + [0, 1, 0.5, 0.1], + 1, + {[QGVAR(effectFactor), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart +] call CBA_fnc_addSetting; + +[ + QGVAR(recoveryFactor), "SLIDER", + [LSTRING(recoveryFactor_DisplayName), LSTRING(recoveryFactor_Description)], + _category, + [0, 1, 0.5, 0.1], + 1, + {[QGVAR(recoveryFactor), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart +] call CBA_fnc_addSetting; diff --git a/addons/smoke/script_component.hpp b/addons/smoke/script_component.hpp new file mode 100644 index 00000000000..e9deb0896dd --- /dev/null +++ b/addons/smoke/script_component.hpp @@ -0,0 +1,17 @@ +#define COMPONENT smoke +#define COMPONENT_BEAUTIFIED Smoke +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_SMOKE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_SMOKE + #define DEBUG_SETTINGS DEBUG_SETTINGS_SMOKE +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/smoke/stringtable.xml b/addons/smoke/stringtable.xml new file mode 100644 index 00000000000..e0706fbbc53 --- /dev/null +++ b/addons/smoke/stringtable.xml @@ -0,0 +1,149 @@ + + + + + Smoke Effects + Kouřové efekty + Effets de fumée + Efectos de humo + Effetti del fumo + Efekty dymu + Efeitos de Fumaça + Эффекты дыма + Rauch Effekte + 연기 효과 + 煙エフェクト + 烟雾效果 + 烟雾效果 + Ефекти диму + + + Adjusts the rate of smoke effect. Lower values increase the duration that can be spent in smoke. + Upravuje rychlost kouřového efektu. Nižší hodnoty prodlužují dobu, kterou lze strávit v kouři. + Modifie la vitesse de l'effet de fumée. Des valeurs plus basses augmentent la durée pendant laquelle on peut rester dans la fumée. + Ajusta la velocidad del efecto de humo. Los valores más bajos aumentan la duración que se puede pasar en el humo. + Regola la velocità dell'effetto fumo. Valori più bassi aumentano la durata che si può trascorrere nel fumo. + Dostosowuje szybkość efektu dymu. Niższe wartości zwiększają czas, jaki można spędzić w dymie. + Ajusta a taxa do efeito de fumaça. Valores mais baixos aumentam a duração que pode ser passada na fumaça. + Регулирует скорость эффекта дыма. Более низкие значения увеличивают продолжительность пребывания в дыму. + Passt die Geschwindigkeit des Raucheffekts an. Niedrigere Werte erhöhen die Dauer, die man im Rauch verbringen kann. + 연기 효과의 속도를 조정합니다. 낮은 값은 연기 속에서 보낼 수 있는 시간을 늘립니다. + 煙エフェクトの速度を調整します。値が低いほど、煙の中で過ごせる時間が長くなります。 + 调整烟雾效果的速率。较低的值会增加在烟雾中停留的时间。 + 调整烟雾效果的速率。较低的值会增加在烟雾中停留的时间。 + Регулює швидкість ефекту диму. Нижчі значення збільшують тривалість перебування в диму. + + + Effect Factor + Faktor efektu + Facteur d'effet + Factor de efecto + Fattore di effetto + Czynnik efektu + Fator de Efeito + Коэффициент эффекта + Effekt Faktor + 효과 계수 + エフェクトファクター + 效果系数 + 效果系数 + Фактор ефекту + + + Enable / Disable Smoke Effects + Povolit / Zakázat kouřové efekty + Activer / Désactiver les effets de fumée + Activar / Desactivar los efectos de humo + Abilita / Disabilita gli effetti del fumo + Włącz / Wyłącz efekty dymu + Ativar / Desativar Efeitos de Fumaça + Включить / Выключить эффекты дыма + Rauch Effekte Ein- / Ausschalten + 연기 효과 활성화 / 비활성화 + 煙エフェクトの有効化 / 無効化 + 启用 / 禁用 烟雾效果 + 启用 / 禁用 烟雾效果 + Увімкнути / Вимкнути ефекти диму + + + Enabled + Povoleno + Activé + Activada + Abilitata + Włączone + Ativado + Включена + Aktiv + 활성화 + 有効化 + 啟用 + 启用 + Увімкнено + + + Adjusts the rate of recovery from smoke effects. Higher values increase the rate of recovery after leaving smoke. + Upravuje rychlost zotavení z kouřových efektů. Vyšší hodnoty zvyšují rychlost zotavení po opuštění kouře. + Modifie la vitesse de récupération des effets de fumée. Des valeurs plus élevées augmentent la vitesse de récupération après avoir quitté la fumée. + Ajusta la velocidad de recuperación de los efectos del humo. Los valores más altos aumentan la velocidad de recuperación después de salir del humo. + Regola la velocità di recupero dagli effetti del fumo. Valori più alti aumentano la velocità di recupero dopo aver lasciato il fumo. + Dostosowuje szybkość regeneracji po efektach dymu. Wyższe wartości zwiększają szybkość regeneracji po opuszczeniu dymu. + Ajusta a taxa de recuperação dos efeitos da fumaça. Valores mais altos aumentam a taxa de recuperação após sair da fumaça. + Регулирует скорость восстановления от эффектов дыма. Более высокие значения увеличивают скорость восстановления после выхода из дыма. + Passt die Erholungsgeschwindigkeit von Raucheffekten an. Höhere Werte erhöhen die Erholungsrate nach dem Verlassen des Rauchs. + 연기 효과에서 회복 속도를 조정합니다. 높은 값은 연기를 떠난 후 회복 속도를 증가시킵니다. + 煙エフェクトからの回復速度を調整します。値が高いほど、煙から離れた後の回復速度が速くなります。 + 调整从烟雾效果中恢复的速率。较高的值会增加离开烟雾后的恢复速率。 + 调整从烟雾效果中恢复的速率。较高的值会增加离开烟雾后的恢复速率。 + Регулює швидкість відновлення від ефектів диму. Вищі значення збільшують швидкість відновлення після виходу з диму. + + + Recovery Factor + Faktor zotavení + Facteur de récupération + Factor de recuperación + Fattore di recupero + Czynnik regeneracji + Fator de Recuperação + Коэффициент восстановления + Erholungsfaktor + 회복 계수 + 回復ファクター + 恢复系数 + 恢复系数 + Фактор відновлення + + + Breathing Protection + Ochrana dýchání + Protection respiratoire + Protección respiratoria + Protezione respiratoria + Ochrona oddychania + Proteção Respiratória + Защита дыхания + Atemschutz + 호흡 보호 + 呼吸保護 + 呼吸保护 + 呼吸保护 + Захист дихання + + + Eye Protection + Ochrana očí + Protection des yeux + Protección ocular + Protezione degli occhi + Ochrona oczu + Proteção Ocular + Защита глаз + Augenschutz + 눈 보호 + 目の保護 + 眼睛保护 + 眼睛保护 + Захист очей + + + From 307aa65f6d1298172e4cfa9462c52fb3379474b0 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Wed, 7 Jan 2026 00:17:29 -0600 Subject: [PATCH 02/31] headers --- addons/smoke/functions/fnc_isInSmoke.sqf | 15 +++++++++++++++ addons/smoke/functions/fnc_pfh.sqf | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/smoke/functions/fnc_isInSmoke.sqf index 83e11e97489..1a6b99843da 100644 --- a/addons/smoke/functions/fnc_isInSmoke.sqf +++ b/addons/smoke/functions/fnc_isInSmoke.sqf @@ -1,4 +1,19 @@ #include "..\script_component.hpp" +/* + * Author: BrettMayson + * Check if a unit is in smoke (or any thick particle effect that has `blockAIVisibility`) + * + * Arguments: + * 0: Unit + * + * Return Value: + * Is the unit in smoke? + * + * Example: + * [player] call ace_smoke_fnc_isInSmoke + * + * Public: Yes + */ params ["_unit"]; diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index dba5f9fcf09..623404fb935 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -1,4 +1,21 @@ #include "..\script_component.hpp" +/* + * Author: BrettMayson + * Per Frame Handler that updates smoke effects on units + * + * Arguments: + * 0: Unit + * + * Return Value: + * Nothing + * + * Example: + * [{ + * [player] call ace_smoke_fnc_pfh + * }] call CBA_fnc_addPerFrameHandler + * + * Public: No + */ params ["_unit"]; From c4ea58b9b0c2cb0d8f1afc4d7803ff386d32e8ff Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Wed, 7 Jan 2026 00:26:10 -0600 Subject: [PATCH 03/31] Apply suggestions from code review Co-authored-by: PabstMirror --- addons/smoke/functions/fnc_pfh.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 623404fb935..a1bb55361b8 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -33,7 +33,7 @@ private _newLevelEyes = _levelEyes + _change; _newLevelEyes = _newLevelEyes min 1; _newLevelEyes = _newLevelEyes max 0; -private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), false]; +private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; if (_eyesProtect != 0) then { _levelEyes = _levelEyes * (1 - _eyesProtect); }; @@ -64,7 +64,7 @@ _unit setVariable [QGVAR(breathingLevel), _levelBreathing, true]; private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { - [ADDON, _breathingEffectiveness] call ace_medical_vitals_fnc_addSpO2DutyFactor; + [QUOTE(ADDON), _breathingEffectiveness] call ace_medical_vitals_fnc_addSpO2DutyFactor; }; // Event From e9e58b4983e4bac1c0f168135bda932515debe0d Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Wed, 7 Jan 2026 00:26:33 -0600 Subject: [PATCH 04/31] Apply suggestion from @PabstMirror Co-authored-by: PabstMirror --- addons/smoke/functions/fnc_pfh.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index a1bb55361b8..fb2bf475de2 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -37,7 +37,7 @@ private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; if (_eyesProtect != 0) then { _levelEyes = _levelEyes * (1 - _eyesProtect); }; -_unit setVariable [QGVAR(eyesLevel), _levelEyes, true]; +_unit setVariable [QGVAR(eyesLevel), _levelEyes]; private _dynamicBlurValue = linearConversion [0.2, 1, _levelEyes, 0, 0.8, true]; private _colorCorrectionsValue = linearConversion [0.2, 1, _levelEyes, 1, 0.6, true]; From 7dcb19e3103d9c50e94e7a4cb1b842f1b3d40f1b Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Wed, 7 Jan 2026 00:41:31 -0600 Subject: [PATCH 05/31] compat: aegis --- .hemtt/launch.toml | 9 ++++ .../compat_aegis_smoke/CfgGlasses.hpp | 41 +++++++++++++++++++ .../compat_aegis_smoke/config.cpp | 24 +++++++++++ .../compat_aegis_smoke/script_component.hpp | 3 ++ addons/smoke/functions/fnc_pfh.sqf | 2 +- 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp create mode 100644 addons/compat_aegis/compat_aegis_smoke/config.cpp create mode 100644 addons/compat_aegis/compat_aegis_smoke/script_component.hpp diff --git a/.hemtt/launch.toml b/.hemtt/launch.toml index 638df8bfac9..c9d92022d75 100644 --- a/.hemtt/launch.toml +++ b/.hemtt/launch.toml @@ -32,6 +32,15 @@ workshop = [ "1369691841", # Community Factions Project ] +[aegis] +extends = "default" +workshop = [ + "949252631", # Aegis +] +dlc = [ + "ws", # Western Sahara +] + [wardrobe] extends = "adt" mission = "Wardrobe.VR" diff --git a/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp b/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp new file mode 100644 index 00000000000..86bb1af563b --- /dev/null +++ b/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp @@ -0,0 +1,41 @@ +class CfgGlasses { + class None; + + class G_Combat_Goggles_blk_F: None { + ace_smoke_eyes_protection = 1; + }; + + class G_Balaclava_light_blk_F: None { + ace_smoke_breathing_protection = 0.4; + }; + class G_Balaclava_light_G_blk_F: G_Balaclava_light_blk_F { + ace_smoke_eyes_protection = 1; + }; + class G_Balaclava_light_eaf_F; + class G_Balaclava_light_G_eaf_F: G_Balaclava_light_eaf_F { + ace_smoke_eyes_protection = 1; + }; + class G_Balaclava_light_mtp_F; + class G_Balaclava_light_G_mtp_F: G_Balaclava_light_mtp_F { + ace_smoke_eyes_protection = 1; + }; + class G_Balaclava_light_tropic_F; + class G_Balaclava_light_G_tropic_F: G_Balaclava_light_tropic_F { + ace_smoke_eyes_protection = 1; + }; + class G_Balaclava_light_wdl_F; + class G_Balaclava_light_G_wdl_F: G_Balaclava_light_wdl_F { + ace_smoke_eyes_protection = 1; + }; + + class G_Balaclava_TI_blk_F: None { + ace_smoke_breathing_protection = 0.4; + }; + class G_Balaclava_TI_G_blk_F: G_Balaclava_TI_blk_F { + ace_smoke_eyes_protection = 1; + }; + class G_Balaclava_TI_tna_F; + class G_Balaclava_TI_G_tna_F: G_Balaclava_TI_tna_F { + ace_smoke_eyes_protection = 1; + }; +}; diff --git a/addons/compat_aegis/compat_aegis_smoke/config.cpp b/addons/compat_aegis/compat_aegis_smoke/config.cpp new file mode 100644 index 00000000000..be9c09f88c5 --- /dev/null +++ b/addons/compat_aegis/compat_aegis_smoke/config.cpp @@ -0,0 +1,24 @@ +#include "script_component.hpp" + +class CfgPatches { + class SUBADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "A3_Aegis_Characters_F_Aegis_Facewear", + "ace_smoke", + }; + skipWhenMissingDependencies = 1; + author = ECSTRING(common,ACETeam); + authors[] = {"BrettMayson"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; + }; +}; + +#include "CfgGlasses.hpp" diff --git a/addons/compat_aegis/compat_aegis_smoke/script_component.hpp b/addons/compat_aegis/compat_aegis_smoke/script_component.hpp new file mode 100644 index 00000000000..cafc3b0288d --- /dev/null +++ b/addons/compat_aegis/compat_aegis_smoke/script_component.hpp @@ -0,0 +1,3 @@ +#define SUBCOMPONENT smoke +#define SUBCOMPONENT_BEAUTIFIED Smoke +#include "..\script_component.hpp" diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index fb2bf475de2..83b29621ae3 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -60,7 +60,7 @@ private _breathProtect = _unit getVariable [QGVAR(breathingProtection), false]; if (_breathProtect != 0) then { _levelBreathing = _levelBreathing * (1 - _breathProtect); }; -_unit setVariable [QGVAR(breathingLevel), _levelBreathing, true]; +_unit setVariable [QGVAR(breathingLevel), _levelBreathing]; private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { From 8a958b5f0a8cff16de55e1c4a115d7b272af107b Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Wed, 7 Jan 2026 01:02:01 -0600 Subject: [PATCH 06/31] compat: cup --- .../compat_cup_smoke/CfgGlasses.hpp | 80 +++++++++++++++++++ .../compat_cup_smoke/config.cpp | 23 ++++++ .../compat_cup_smoke/script_component.hpp | 3 + 3 files changed, 106 insertions(+) create mode 100644 addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp create mode 100644 addons/compat_cup_units/compat_cup_smoke/config.cpp create mode 100644 addons/compat_cup_units/compat_cup_smoke/script_component.hpp diff --git a/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp b/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp new file mode 100644 index 00000000000..3b9c71bf637 --- /dev/null +++ b/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp @@ -0,0 +1,80 @@ +#define PROTECT(var1,eyes,breathing) class var1: None { \ + ace_smoke_eyes_protection = eyes; \ + ace_smoke_breathing_protection = breathing; \ +} + +class CfgGlasses { + class None; + + class CUP_RUS_Balaclava_blk: None { + ace_smoke_breathing_protection = 0.4; + }; + + class CUP_G_Ratnik_Balaclava_base: None { + ace_smoke_breathing_protection = 0.4; + }; + + PROTECT(CUP_G_ESS_BLK_Dark,1,0); + PROTECT(CUP_G_ESS_BLK_Ember,1,0); + PROTECT(CUP_G_ESS_BLK,1,0); + PROTECT(CUP_G_ESS_CBR_Dark,1,0); + PROTECT(CUP_G_ESS_CBR_Ember,1,0); + PROTECT(CUP_G_ESS_CBR,1,0); + PROTECT(CUP_G_ESS_RGR_Dark,1,0); + PROTECT(CUP_G_ESS_RGR_Ember,1,0); + PROTECT(CUP_G_ESS_RGR,1,0); + PROTECT(CUP_G_ESS_KHK_Dark,1,0); + PROTECT(CUP_G_ESS_KHK_Ember,1,0); + PROTECT(CUP_G_ESS_KHK,1,0); + PROTECT(CUP_G_ESS_BLK_Facewrap_Black,1,0.4); + PROTECT(CUP_G_ESS_RGR_Facewrap_Ranger,1,0.4); + PROTECT(CUP_G_ESS_CBR_Facewrap_Red,1,0.4); + PROTECT(CUP_G_ESS_RGR_Facewrap_Skull,1,0.4); + PROTECT(CUP_G_ESS_KHK_Facewrap_Tan,1,0.4); + PROTECT(CUP_G_ESS_RGR_Facewrap_Tropical,1,0.4); + PROTECT(CUP_G_ESS_KHK_Facewrap_White,1,0.4); + PROTECT(CUP_G_ESS_BLK_Facewrap_Black_GPS,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Blk,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Grn,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Red,1,0); + PROTECT(CUP_G_ESS_KHK_Scarf_Tan,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_White,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Face_Blk,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Face_Grn,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Face_Red,1,0.4); + PROTECT(CUP_G_ESS_KHK_Scarf_Face_Tan,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Face_White,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Blk_Beard,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Blk_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Grn_Beard,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Grn_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Red_Beard,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Red_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_KHK_Scarf_Tan_Beard,1,0); + PROTECT(CUP_G_ESS_KHK_Scarf_Tan_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_White_Beard,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_White_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Grn_GPS,1,0); + PROTECT(CUP_G_ESS_KHK_Scarf_Tan_GPS,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_White_GPS,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Face_Grn_GPS,1,0.4); + PROTECT(CUP_G_ESS_KHK_Scarf_Face_Tan_GPS,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Face_White_GPS,1,0.4); + PROTECT(CUP_G_ESS_BLK_Scarf_Grn_GPS_Beard,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_Grn_GPS_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_KHK_Scarf_Tan_GPS_Beard,1,0); + PROTECT(CUP_G_ESS_KHK_Scarf_Tan_GPS_Beard_Blonde,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_White_GPS_Beard,1,0); + PROTECT(CUP_G_ESS_BLK_Scarf_White_GPS_Beard_Blonde,1,0); + PROTECT(CUP_G_PMC_Facewrap_Black_Glasses_Dark_Headset,0,0.4); + PROTECT(CUP_G_PMC_Facewrap_Black_Glasses_Dark,0,0.4); + PROTECT(CUP_PMC_Facewrap_Black,0,0.4); + PROTECT(CUP_G_PMC_Facewrap_Tan_Glasses_Dark_Headset,0,0.4); + PROTECT(CUP_G_PMC_Facewrap_Tropical_Glasses_Dark_Headset,0,0.4); + PROTECT(CUP_G_PMC_Facewrap_Winter_Glasses_Dark_Headset,0,0.4); + PROTECT(CUP_G_Scarf_Face_Blk,0,0.4); + PROTECT(CUP_G_Scarf_Face_Grn,0,0.4); + PROTECT(CUP_G_Scarf_Face_Red,0,0.4); + PROTECT(CUP_G_Scarf_Face_Tan,0,0.4); + PROTECT(CUP_G_Scarf_Face_White,0,0.4); +}; diff --git a/addons/compat_cup_units/compat_cup_smoke/config.cpp b/addons/compat_cup_units/compat_cup_smoke/config.cpp new file mode 100644 index 00000000000..6f833154da5 --- /dev/null +++ b/addons/compat_cup_units/compat_cup_smoke/config.cpp @@ -0,0 +1,23 @@ +#include "script_component.hpp" + +class CfgPatches { + class SUBADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "ace_smoke", + "CUP_Creatures_Military_RussiaModern_Headgear", + "CUP_Creatures_Military_USArmy", + }; + skipWhenMissingDependencies = 1; + author = ECSTRING(common,ACETeam); + authors[] = {"BrettMayson"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + addonRootClass = QUOTE(ADDON); + }; +}; + +#include "CfgGlasses.hpp" diff --git a/addons/compat_cup_units/compat_cup_smoke/script_component.hpp b/addons/compat_cup_units/compat_cup_smoke/script_component.hpp new file mode 100644 index 00000000000..cafc3b0288d --- /dev/null +++ b/addons/compat_cup_units/compat_cup_smoke/script_component.hpp @@ -0,0 +1,3 @@ +#define SUBCOMPONENT smoke +#define SUBCOMPONENT_BEAUTIFIED Smoke +#include "..\script_component.hpp" From 838ab185cb4507047f7c022f4ecbf6f1208cb7fb Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Fri, 9 Jan 2026 15:52:53 -0600 Subject: [PATCH 07/31] fix default breathing protection --- addons/smoke/functions/fnc_pfh.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 83b29621ae3..3e34156fbf4 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -56,7 +56,7 @@ private _newLevelBreathing = _levelBreathing + _change; _newLevelBreathing = _newLevelBreathing min 1; _newLevelBreathing = _newLevelBreathing max 0; -private _breathProtect = _unit getVariable [QGVAR(breathingProtection), false]; +private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; if (_breathProtect != 0) then { _levelBreathing = _levelBreathing * (1 - _breathProtect); }; From 1fbd5cd7b710d199ee649fd6237380b543a751fb Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Fri, 9 Jan 2026 17:59:59 -0600 Subject: [PATCH 08/31] fix var assignment --- addons/smoke/functions/fnc_pfh.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 3e34156fbf4..3e2dcece300 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -32,6 +32,7 @@ private _levelEyes = _unit getVariable [QGVAR(eyesLevel), 0]; private _newLevelEyes = _levelEyes + _change; _newLevelEyes = _newLevelEyes min 1; _newLevelEyes = _newLevelEyes max 0; +_levelEyes = _newLevelEyes; private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; if (_eyesProtect != 0) then { From 28bdebc599d0d29b8915d9d693b54e222753ef51 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Fri, 9 Jan 2026 18:56:39 -0600 Subject: [PATCH 09/31] use 500 --- addons/smoke/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/XEH_postInit.sqf b/addons/smoke/XEH_postInit.sqf index 2c6d1125a17..2c2dd5d5e28 100644 --- a/addons/smoke/XEH_postInit.sqf +++ b/addons/smoke/XEH_postInit.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -GVAR(ppHandleDynamicBlur) = ppEffectCreate ["DynamicBlur", 400]; +GVAR(ppHandleDynamicBlur) = ppEffectCreate ["DynamicBlur", 500]; GVAR(ppHandleColorCorrections) = ppEffectCreate ["ColorCorrections", 1500]; GVAR(ppHandleDynamicBlur) ppEffectEnable GVAR(enabled); GVAR(ppHandleColorCorrections) ppEffectEnable GVAR(enabled); From db09e41d9122661d4921b6337a7e174287e1a90c Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Sat, 10 Jan 2026 09:03:15 -0600 Subject: [PATCH 10/31] compat: ws --- .../compat_ws/compat_ws_smoke/CfgWeapons.hpp | 11 ++++++ addons/compat_ws/compat_ws_smoke/config.cpp | 24 +++++++++++++ .../compat_ws_smoke/script_component.hpp | 3 ++ addons/hearing/stringtable.xml | 34 +++++++++---------- addons/smoke/ACE_Arsenal_Stats.hpp | 4 +-- addons/smoke/CfgWeapons.hpp | 17 ++++++++++ addons/smoke/config.cpp | 3 +- 7 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp create mode 100644 addons/compat_ws/compat_ws_smoke/config.cpp create mode 100644 addons/compat_ws/compat_ws_smoke/script_component.hpp create mode 100644 addons/smoke/CfgWeapons.hpp diff --git a/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp b/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp new file mode 100644 index 00000000000..2a3303d8713 --- /dev/null +++ b/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp @@ -0,0 +1,11 @@ +class CfgWeapons { + class lxWS_H_turban_01_black; + class lxWS_H_turban_03_black: lxWS_H_turban_01_black { + ace_smoke_breathing_protection = 0.4; + }; + + class H_Shemag_khk; + class H_turban_02_mask_black_lxws: H_Shemag_khk { + ace_smoke_breathing_protection = 0.4; + }; +}; diff --git a/addons/compat_ws/compat_ws_smoke/config.cpp b/addons/compat_ws/compat_ws_smoke/config.cpp new file mode 100644 index 00000000000..61a8c70dfcc --- /dev/null +++ b/addons/compat_ws/compat_ws_smoke/config.cpp @@ -0,0 +1,24 @@ +#include "script_component.hpp" + +class CfgPatches { + class SUBADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "data_f_lxWS_Loadorder", + "ace_smoke", + }; + skipWhenMissingDependencies = 1; + author = ECSTRING(common,ACETeam); + authors[] = {"BrettMayson"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + + // this prevents any patched class from requiring this addon + addonRootClass = "A3_Characters_F"; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/addons/compat_ws/compat_ws_smoke/script_component.hpp b/addons/compat_ws/compat_ws_smoke/script_component.hpp new file mode 100644 index 00000000000..cafc3b0288d --- /dev/null +++ b/addons/compat_ws/compat_ws_smoke/script_component.hpp @@ -0,0 +1,3 @@ +#define SUBCOMPONENT smoke +#define SUBCOMPONENT_BEAUTIFIED Smoke +#include "..\script_component.hpp" diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 9eab8e109cb..3ced27a2450 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -491,36 +491,36 @@ ЕЛЕКТРОННИЙ - Volume muffling - Snížení hlasitosti - Atténuation du volume - Atenuación de volumen - Attenuazione del volume - Tłumienie głośności - Abafamento de Volume - Глушение звука + Volume Muffling + Snížení Hlasitosti + Atténuation Du Volume + Atenuación De Volumen + Attenuazione Del Volume + Tłumienie Głośności + Abafamento De Volume + Глушение Звука Lautstärkedämpfung 소리 차음도 音量の抑制 進低音量 降低音量 - Глушіння звуку + Глушіння Звуку - Hearing protection - Ochrana sluchu - Protection auditive - Protección auditiva - Protezione uditiva - Ochrona słuchu + Hearing Protection + Ochrana Sluchu + Protection Auditive + Protección Auditiva + Protezione Uditiva + Ochrona Słuchu Proteção Auditiva - Защита слуха + Защита Слуха Gehörschutz 청력 보호 聴覚保護 聽力保護 听力保护 - Захист слуху + Захист Слуху Volume when unconscious. diff --git a/addons/smoke/ACE_Arsenal_Stats.hpp b/addons/smoke/ACE_Arsenal_Stats.hpp index e31618ec3ef..313b9f6ee11 100644 --- a/addons/smoke/ACE_Arsenal_Stats.hpp +++ b/addons/smoke/ACE_Arsenal_Stats.hpp @@ -6,7 +6,7 @@ class EGVAR(arsenal,stats) { showBar = 1; condition = QUOTE(getNumber (_this select 1 >> QQGVAR(Breathing_Protection)) > 0); barStatement = QUOTE(getNumber (_this select 1 >> QQGVAR(Breathing_Protection))); - tabs[] = {{7}, {}}; + tabs[] = {{6,7}, {}}; }; class GVAR(eyes_protection): statBase { @@ -15,6 +15,6 @@ class EGVAR(arsenal,stats) { showBar = 1; condition = QUOTE(getNumber (_this select 1 >> QQGVAR(Eyes_Protection)) > 0); barStatement = QUOTE(getNumber (_this select 1 >> QQGVAR(Eyes_Protection))); - tabs[] = {{7}, {}}; + tabs[] = {{6,7}, {}}; }; }; diff --git a/addons/smoke/CfgWeapons.hpp b/addons/smoke/CfgWeapons.hpp new file mode 100644 index 00000000000..74fc3494864 --- /dev/null +++ b/addons/smoke/CfgWeapons.hpp @@ -0,0 +1,17 @@ +class CfgWeapons { + class H_HelmetB; + class H_HelmetO_ViperSP_hex_F: H_HelmetB { + GVAR(Eyes_Protection) = 1; + }; + + class H_PilotHelmetFighter_B: H_HelmetB { + GVAR(Breathing_Protection) = 1; + GVAR(Eyes_Protection) = 1; + }; + + class H_HelmetB_camo; + class H_RacingHelmet_1_F: H_HelmetB_camo { + GVAR(Breathing_Protection) = 0.3; + GVAR(Eyes_Protection) = 0.7; + }; +}; diff --git a/addons/smoke/config.cpp b/addons/smoke/config.cpp index 2cfc94ad4a3..c1c121c6fd7 100644 --- a/addons/smoke/config.cpp +++ b/addons/smoke/config.cpp @@ -11,6 +11,7 @@ class CfgPatches { }; }; +#include "ACE_Arsenal_Stats.hpp" #include "CfgEventHandlers.hpp" #include "CfgGlasses.hpp" -#include "ACE_Arsenal_Stats.hpp" +#include "CfgWeapons.hpp" From c7a5c5fe347cdc7d58acf0ddee1ac496858e5bec Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Sun, 11 Jan 2026 11:36:24 -0600 Subject: [PATCH 11/31] don't check inside vehicles --- addons/smoke/functions/fnc_isInSmoke.sqf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/smoke/functions/fnc_isInSmoke.sqf index 1a6b99843da..183d356a3dc 100644 --- a/addons/smoke/functions/fnc_isInSmoke.sqf +++ b/addons/smoke/functions/fnc_isInSmoke.sqf @@ -17,6 +17,8 @@ params ["_unit"]; +if (!isNull objectParent _unit) exitWith { false }; + private _coverage = 0; private _eyePos = eyePos _unit; From 1fd6f2c524e7ec52455e2a3dea9f8227a583e0c5 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Sat, 24 Jan 2026 22:23:43 -0600 Subject: [PATCH 12/31] Apply suggestions from code review Co-authored-by: PabstMirror --- addons/smoke/XEH_postInit.sqf | 1 + addons/smoke/functions/fnc_pfh.sqf | 1 + addons/smoke/initSettings.inc.sqf | 1 + 3 files changed, 3 insertions(+) diff --git a/addons/smoke/XEH_postInit.sqf b/addons/smoke/XEH_postInit.sqf index 2c2dd5d5e28..903e1303a27 100644 --- a/addons/smoke/XEH_postInit.sqf +++ b/addons/smoke/XEH_postInit.sqf @@ -1,5 +1,6 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; GVAR(ppHandleDynamicBlur) = ppEffectCreate ["DynamicBlur", 500]; GVAR(ppHandleColorCorrections) = ppEffectCreate ["ColorCorrections", 1500]; GVAR(ppHandleDynamicBlur) ppEffectEnable GVAR(enabled); diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 3e2dcece300..9fe96d9b43c 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -56,6 +56,7 @@ private _levelBreathing = _unit getVariable [QGVAR(breathingLevel), 0]; private _newLevelBreathing = _levelBreathing + _change; _newLevelBreathing = _newLevelBreathing min 1; _newLevelBreathing = _newLevelBreathing max 0; +_levelBreathing = _newLevelBreathing; private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; if (_breathProtect != 0) then { diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index 9d326ac5d21..4dbbf669e29 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -8,6 +8,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; 1, { [QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged); + if (!hasInterface) exitwith {}; GVAR(ppHandleDynamicBlur) ppEffectEnable _this; GVAR(ppHandleColorCorrections) ppEffectEnable _this; if (_this) then { From 2a6019880c9f0e1397449c9b931ba9971349eba5 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Sat, 24 Jan 2026 22:24:32 -0600 Subject: [PATCH 13/31] don't seVariable every run --- addons/smoke/functions/fnc_pfh.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 9fe96d9b43c..fbc6f7e8ddc 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -72,6 +72,6 @@ if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { // Event private _smoked = _unit getVariable [QGVAR(smoked), false]; if (_isInSmoke != _smoked) then { + _unit setVariable [QGVAR(smoked), _isInSmoke, true]; [QGVAR(smoked), _isInSmoke] call CBA_fnc_localEvent; }; -_unit setVariable [QGVAR(smoked), _isInSmoke, true]; From 3ad61024af8f6bff369884bd5175773cab74cefc Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Sat, 24 Jan 2026 23:04:01 -0600 Subject: [PATCH 14/31] reduce pfh frequency, fix detection in tight spaces --- .hemtt/launch.toml | 1 + addons/smoke/functions/fnc_isInSmoke.sqf | 14 ++++++-------- addons/smoke/functions/fnc_pfh.sqf | 2 +- addons/smoke/initSettings.inc.sqf | 4 ++-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.hemtt/launch.toml b/.hemtt/launch.toml index c9d92022d75..a9ab6cb5614 100644 --- a/.hemtt/launch.toml +++ b/.hemtt/launch.toml @@ -1,6 +1,7 @@ [default] workshop = [ "450814997", # CBA_A3 + "synixe:@bozcaada", ] [adt] diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/smoke/functions/fnc_isInSmoke.sqf index 183d356a3dc..e18cca21b74 100644 --- a/addons/smoke/functions/fnc_isInSmoke.sqf +++ b/addons/smoke/functions/fnc_isInSmoke.sqf @@ -17,8 +17,6 @@ params ["_unit"]; -if (!isNull objectParent _unit) exitWith { false }; - private _coverage = 0; private _eyePos = eyePos _unit; @@ -32,14 +30,14 @@ private _positions = [ { private _intersect = lineIntersectsSurfaces _x; if (_intersect isNotEqualTo []) then { - _x set [1, _intersect select 0 select 0]; + _x set [1, _intersect select 0]; + } else { + _x set [1, [_x#1,0,objNull]]; }; - // Check visibility can return 0 for really close surfaces - if ((_x#0) distance (_x#1) < 0.05) then { + if ((_x#0) distance (_x#1#0) < 0.1) then { _coverage = _coverage + 1; } else { - _coverage = _coverage + ([objNull, "VIEW"] checkVisibility [_x#0, _x#1]); + _coverage = _coverage + ([objectParent _unit, "VIEW", _x#1#2] checkVisibility [_x#0, _x#1#0]); }; } forEach _positions; - -_coverage < ((count _positions) / 2) +_coverage < ((count _positions) / 3) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index fbc6f7e8ddc..9246a9980e5 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -64,8 +64,8 @@ if (_breathProtect != 0) then { }; _unit setVariable [QGVAR(breathingLevel), _levelBreathing]; -private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { + private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; [QUOTE(ADDON), _breathingEffectiveness] call ace_medical_vitals_fnc_addSpO2DutyFactor; }; diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index 4dbbf669e29..8add4331b27 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -8,14 +8,14 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; 1, { [QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged); - if (!hasInterface) exitwith {}; + if (!hasInterface) exitWith {}; GVAR(ppHandleDynamicBlur) ppEffectEnable _this; GVAR(ppHandleColorCorrections) ppEffectEnable _this; if (_this) then { if (GVAR(pfh) == -1) then { GVAR(pfh) = [{ [ace_player] call FUNC(pfh); - }] call CBA_fnc_addPerFrameHandler; + }, 0.25] call CBA_fnc_addPerFrameHandler; }; } else { if (GVAR(pfh) != -1) then { From 7ff70cc459286139db33770a2230b694df66747a Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Sat, 24 Jan 2026 23:05:05 -0600 Subject: [PATCH 15/31] 5 times per second --- addons/smoke/initSettings.inc.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index 8add4331b27..9a6139689ef 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -15,7 +15,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; if (GVAR(pfh) == -1) then { GVAR(pfh) = [{ [ace_player] call FUNC(pfh); - }, 0.25] call CBA_fnc_addPerFrameHandler; + }, 0.2] call CBA_fnc_addPerFrameHandler; }; } else { if (GVAR(pfh) != -1) then { From 729c5a40c95f8a78dd641194038831b7dc894656 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Sat, 24 Jan 2026 23:07:29 -0600 Subject: [PATCH 16/31] don't apply in tanks --- addons/smoke/functions/fnc_pfh.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 9246a9980e5..7f18233574e 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -19,6 +19,9 @@ params ["_unit"]; +private _vehicle = objectParent _unit; +if (!isNull _vehicle && {_vehicle isKindOf "Tank"}) exitWith {}; + private _isInSmoke = [_unit] call FUNC(isInSmoke); private _change = (if (_isInSmoke) then { From 9d2633490d35c24f4558380fc27beca26b6db66b Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Mon, 2 Feb 2026 01:01:17 -0600 Subject: [PATCH 17/31] better vehicle handling --- .hemtt/launch.toml | 12 +++-- .../functions/fnc_addSpO2DutyFactor.sqf | 6 ++- addons/smoke/XEH_PREP.hpp | 2 + addons/smoke/XEH_preInit.sqf | 2 + addons/smoke/functions/fnc_isOpenSeat.sqf | 47 +++++++++++++++++++ addons/smoke/functions/fnc_isOpenVehicle.sqf | 38 +++++++++++++++ addons/smoke/functions/fnc_pfh.sqf | 11 ++++- 7 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 addons/smoke/functions/fnc_isOpenSeat.sqf create mode 100644 addons/smoke/functions/fnc_isOpenVehicle.sqf diff --git a/.hemtt/launch.toml b/.hemtt/launch.toml index a9ab6cb5614..22ca0704a1d 100644 --- a/.hemtt/launch.toml +++ b/.hemtt/launch.toml @@ -1,7 +1,6 @@ [default] workshop = [ "450814997", # CBA_A3 - "synixe:@bozcaada", ] [adt] @@ -10,6 +9,12 @@ workshop = [ "3499977893", # ADT ] +[zen] +extends = "default" +workshop = [ + "1779063631", # ZEN +] + [rhs] extends = "default" workshop = [ @@ -48,15 +53,14 @@ mission = "Wardrobe.VR" workshop = [ "1779063631", # ZEN # "751965892", # ACRE -# "623475643", # eden enhanced +# "623475643", # 3den Enhanced ] [sogns] -extends = "default" +extends = "adt" dlc = ["vn"] workshop = [ "623475643", # 3den Enhanced - "3499977893", # Advanced Developer Tools "3083451905", # S.O.G. Nickel Steel "1779063631", # Zeus Enhanced ] diff --git a/addons/medical_vitals/functions/fnc_addSpO2DutyFactor.sqf b/addons/medical_vitals/functions/fnc_addSpO2DutyFactor.sqf index 0c85ae3fa55..69573b9dff9 100644 --- a/addons/medical_vitals/functions/fnc_addSpO2DutyFactor.sqf +++ b/addons/medical_vitals/functions/fnc_addSpO2DutyFactor.sqf @@ -16,6 +16,10 @@ * Public: No */ params [["_id", "", [""]], ["_factor", 1, [0, {}]]]; -if (_id == "" || {_factor isEqualTo 1}) exitWith {}; +if (_id == "") exitWith {}; + +if (_factor isEqualTo 1) exitWith { + [_id] call FUNC(removeSpO2DutyFactor); +}; GVAR(spo2DutyList) set [_id, _factor]; diff --git a/addons/smoke/XEH_PREP.hpp b/addons/smoke/XEH_PREP.hpp index 120eca9de92..059e0c6264b 100644 --- a/addons/smoke/XEH_PREP.hpp +++ b/addons/smoke/XEH_PREP.hpp @@ -1,2 +1,4 @@ PREP(isInSmoke); +PREP(isOpenVehicle); +PREP(isOpenSeat); PREP(pfh); diff --git a/addons/smoke/XEH_preInit.sqf b/addons/smoke/XEH_preInit.sqf index 55d80be45e4..61eb91c6dc1 100644 --- a/addons/smoke/XEH_preInit.sqf +++ b/addons/smoke/XEH_preInit.sqf @@ -7,5 +7,7 @@ ADDON = false; #include "initSettings.inc.sqf" GVAR(pfh) = -1; +GVAR(openVehicleCache) = createHashMap; +GVAR(openSeatCache) = createHashMap; ADDON = true; diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf new file mode 100644 index 00000000000..7b43c2f927c --- /dev/null +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -0,0 +1,47 @@ +#include "..\script_component.hpp" +/* + * Author: BrettMayson + * Check if a seat is open and thus susceptible to smoke entering + * + * Arguments: + * 0: Vehicle + * 1: Unit + * + * Return Value: + * Is the seat open? + * + * Example: + * [_vehicle, _unit] call ace_smoke_fnc_isOpenSeat + * + * Public: Yes + */ + +params [ + ["_vehicle", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; + +if (_vehicle isEqualTo objNull || _unit isEqualTo objNull) exitWith { true }; + +private _class = typeOf _vehicle; +private _index = _vehicle getCargoIndex _unit; + +private _open = -1; +if (_class in GVAR(openSeatCache)) then { + private _cache = GVAR(openSeatCache) get _class; + if (_index in _cache) then { + _open = _cache get _index; + }; +}; +if (_open isNotEqualTo -1) exitWith { _open }; + +if ([_vehicle] call FUNC(isOpenVehicle)) exitWith { true }; + +private _eyePos = eyePos _unit; +private _intersect = lineIntersectsSurfaces [_eyePos, _eyePos vectorAdd [0, 0, 1], _unit]; +private _open = _intersect isEqualTo []; + +private _cache = GVAR(openSeatCache) getOrDefaultCall [_class, { createHashMap }, true]; +_cache set [_index, _open]; + +_open diff --git a/addons/smoke/functions/fnc_isOpenVehicle.sqf b/addons/smoke/functions/fnc_isOpenVehicle.sqf new file mode 100644 index 00000000000..9b9516c26f8 --- /dev/null +++ b/addons/smoke/functions/fnc_isOpenVehicle.sqf @@ -0,0 +1,38 @@ +#include "..\script_component.hpp" +/* + * Author: BrettMayson + * Check if a vehicle is open and thus susceptible to smoke entering + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * Is the vehicle open? + * + * Example: + * [vehicle player] call ace_smoke_fnc_isOpenVehicle + * + * Public: Yes + */ + +params [ + ["_vehicle", objNull, [objNull]] +]; + +if (_vehicle isEqualTo objNull) exitWith { true }; + +private _class = typeOf _vehicle; + +if (_class in GVAR(openVehicleCache)) exitWith { GVAR(openVehicleCache) get _class }; + +private _attentuation = getText(configFile >> "CfgVehicles" >> _class >> "attenuationEffectType"); +if (_attentuation == "") exitWith { true }; + +private _attenuation = configFile >> "AttenuationEffects" >> _attentuation; +private _open = [0,1] findIf { + private _equalizer = getArray(_attenuation >> format ["Equalizer%1", _x] >> "gain"); + _equalizer isEqualTo [1,1,1,1] +} != -1; + +GVAR(openVehicleCache) set [_class, _open]; +_open diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 7f18233574e..4f92bb932c5 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -20,9 +20,16 @@ params ["_unit"]; private _vehicle = objectParent _unit; -if (!isNull _vehicle && {_vehicle isKindOf "Tank"}) exitWith {}; -private _isInSmoke = [_unit] call FUNC(isInSmoke); +private _isInSmoke = if (!isNull _vehicle) then { + if ([_vehicle, _unit] call FUNC(isOpenSeat)) then { + [_unit] call FUNC(isInSmoke) + } else { + false + } +} else { + [_unit] call FUNC(isInSmoke) +}; private _change = (if (_isInSmoke) then { 0.175 * GVAR(effectFactor) From f6cb4584e32c0f385ae8e84f22dd25c0ebbbf4b7 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Mon, 2 Feb 2026 01:05:12 -0600 Subject: [PATCH 18/31] full protection allows recovery --- addons/smoke/functions/fnc_pfh.sqf | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 4f92bb932c5..39a62e872b1 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -39,13 +39,19 @@ private _change = (if (_isInSmoke) then { // Eyes private _levelEyes = _unit getVariable [QGVAR(eyesLevel), 0]; -private _newLevelEyes = _levelEyes + _change; +private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; + +private _eyesChange = _change; +if (_eyesProtect == 1 && _isInSmoke) then { + _eyesChange = -0.04 * GVAR(recoveryFactor) * diag_deltaTime; +}; + +private _newLevelEyes = _levelEyes + _eyesChange; _newLevelEyes = _newLevelEyes min 1; _newLevelEyes = _newLevelEyes max 0; _levelEyes = _newLevelEyes; -private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; -if (_eyesProtect != 0) then { +if (_eyesProtect != 0 && _eyesProtect != 1) then { _levelEyes = _levelEyes * (1 - _eyesProtect); }; _unit setVariable [QGVAR(eyesLevel), _levelEyes]; @@ -63,13 +69,19 @@ if (_unit == ace_player) then { // Breathing private _levelBreathing = _unit getVariable [QGVAR(breathingLevel), 0]; -private _newLevelBreathing = _levelBreathing + _change; +private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; + +private _breathChange = _change; +if (_breathProtect == 1 && _isInSmoke) then { + _breathChange = -0.04 * GVAR(recoveryFactor) * diag_deltaTime; +}; + +private _newLevelBreathing = _levelBreathing + _breathChange; _newLevelBreathing = _newLevelBreathing min 1; _newLevelBreathing = _newLevelBreathing max 0; _levelBreathing = _newLevelBreathing; -private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; -if (_breathProtect != 0) then { +if (_breathProtect != 0 && _breathProtect != 1) then { _levelBreathing = _levelBreathing * (1 - _breathProtect); }; _unit setVariable [QGVAR(breathingLevel), _levelBreathing]; From dc53019b9cba676b62b1dea8f6b5c41a6f8d2b86 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Mon, 2 Feb 2026 01:43:36 -0600 Subject: [PATCH 19/31] reuse code, various tweaks --- addons/smoke/XEH_postInit.sqf | 6 -- addons/smoke/functions/fnc_isInSmoke.sqf | 6 +- addons/smoke/functions/fnc_isOpenSeat.sqf | 2 +- addons/smoke/functions/fnc_pfh.sqf | 73 +++++++++-------------- addons/smoke/initSettings.inc.sqf | 6 +- addons/smoke/script_component.hpp | 2 + 6 files changed, 39 insertions(+), 56 deletions(-) diff --git a/addons/smoke/XEH_postInit.sqf b/addons/smoke/XEH_postInit.sqf index 903e1303a27..4fa37ee6348 100644 --- a/addons/smoke/XEH_postInit.sqf +++ b/addons/smoke/XEH_postInit.sqf @@ -6,12 +6,6 @@ GVAR(ppHandleColorCorrections) = ppEffectCreate ["ColorCorrections", 1500]; GVAR(ppHandleDynamicBlur) ppEffectEnable GVAR(enabled); GVAR(ppHandleColorCorrections) ppEffectEnable GVAR(enabled); -if (GVAR(enabled)) then { - GVAR(pfh) = [{ - [ace_player] call FUNC(pfh); - }] call CBA_fnc_addPerFrameHandler; -}; - ["loadout", { params ["_unit"]; if !(local _unit) exitWith {}; diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/smoke/functions/fnc_isInSmoke.sqf index e18cca21b74..d9d9fc09860 100644 --- a/addons/smoke/functions/fnc_isInSmoke.sqf +++ b/addons/smoke/functions/fnc_isInSmoke.sqf @@ -15,7 +15,11 @@ * Public: Yes */ -params ["_unit"]; +params [["_unit", objNull, [objNull]]]; + +private _vehicle = objectParent _unit; + +if (!isNull _vehicle && {!([_vehicle, _unit] call FUNC(isOpenSeat))}) exitWith { false }; private _coverage = 0; diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index 7b43c2f927c..4eabdd14812 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: BrettMayson - * Check if a seat is open and thus susceptible to smoke entering + * Check if a seat is open and thus susceptible to smoke entering, may not be accurate for vehicles with top coverings * * Arguments: * 0: Vehicle diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 39a62e872b1..8ceb3c72e78 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -19,71 +19,54 @@ params ["_unit"]; -private _vehicle = objectParent _unit; +if (isGamePaused) exitWith {}; -private _isInSmoke = if (!isNull _vehicle) then { - if ([_vehicle, _unit] call FUNC(isOpenSeat)) then { - [_unit] call FUNC(isInSmoke) - } else { - false - } -} else { - [_unit] call FUNC(isInSmoke) -}; +#define EFFECT_RATE 0.3 +#define RECOVERY_RATE -0.075 + +private _isInSmoke = [_unit] call FUNC(isInSmoke); private _change = (if (_isInSmoke) then { - 0.175 * GVAR(effectFactor) + EFFECT_RATE * GVAR(effectFactor) } else { - -0.04 * GVAR(recoveryFactor) -}) * diag_deltaTime; + RECOVERY_RATE * GVAR(recoveryFactor) +}) * diag_deltaTime * (1 / PFH_INTERVAL); + +private _fnc_updateLevel = { + params ["_level", "_protect"]; + private _innerChange = if (_protect == 1 && _isInSmoke) then { + RECOVERY_RATE * GVAR(recoveryFactor) * diag_deltaTime * (1 / PFH_INTERVAL) + } else { + _change + }; + private _newLevel = (_level + _innerChange) min 1 max 0; + if (_protect != 0 && _protect != 1) then { + _newLevel = _newLevel * (1 - _protect); + }; + _newLevel +}; // Eyes private _levelEyes = _unit getVariable [QGVAR(eyesLevel), 0]; private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; - -private _eyesChange = _change; -if (_eyesProtect == 1 && _isInSmoke) then { - _eyesChange = -0.04 * GVAR(recoveryFactor) * diag_deltaTime; -}; - -private _newLevelEyes = _levelEyes + _eyesChange; -_newLevelEyes = _newLevelEyes min 1; -_newLevelEyes = _newLevelEyes max 0; -_levelEyes = _newLevelEyes; - -if (_eyesProtect != 0 && _eyesProtect != 1) then { - _levelEyes = _levelEyes * (1 - _eyesProtect); -}; +_levelEyes = [_levelEyes, _eyesProtect] call _fnc_updateLevel; _unit setVariable [QGVAR(eyesLevel), _levelEyes]; -private _dynamicBlurValue = linearConversion [0.2, 1, _levelEyes, 0, 0.8, true]; -private _colorCorrectionsValue = linearConversion [0.2, 1, _levelEyes, 1, 0.6, true]; +private _dynamicBlurValue = linearConversion [0.05, 1, _levelEyes, 0, 0.8, true]; +private _colorCorrectionsValue = linearConversion [0.05, 1, _levelEyes, 1, 0.6, true]; if (_unit == ace_player) then { GVAR(ppHandleDynamicBlur) ppEffectAdjust [_dynamicBlurValue]; GVAR(ppHandleColorCorrections) ppEffectAdjust [1,1,0,[0,0,0,0],[0.8, 0.8, 0.8, _colorCorrectionsValue],[1,1,1,0]]; - GVAR(ppHandleDynamicBlur) ppEffectCommit 0; - GVAR(ppHandleColorCorrections) ppEffectCommit 0; + GVAR(ppHandleDynamicBlur) ppEffectCommit PFH_INTERVAL; + GVAR(ppHandleColorCorrections) ppEffectCommit PFH_INTERVAL; }; // Breathing private _levelBreathing = _unit getVariable [QGVAR(breathingLevel), 0]; private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; - -private _breathChange = _change; -if (_breathProtect == 1 && _isInSmoke) then { - _breathChange = -0.04 * GVAR(recoveryFactor) * diag_deltaTime; -}; - -private _newLevelBreathing = _levelBreathing + _breathChange; -_newLevelBreathing = _newLevelBreathing min 1; -_newLevelBreathing = _newLevelBreathing max 0; -_levelBreathing = _newLevelBreathing; - -if (_breathProtect != 0 && _breathProtect != 1) then { - _levelBreathing = _levelBreathing * (1 - _breathProtect); -}; +_levelBreathing = [_levelBreathing, _breathProtect] call _fnc_updateLevel; _unit setVariable [QGVAR(breathingLevel), _levelBreathing]; if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index 9a6139689ef..5ca5a3be275 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -15,7 +15,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; if (GVAR(pfh) == -1) then { GVAR(pfh) = [{ [ace_player] call FUNC(pfh); - }, 0.2] call CBA_fnc_addPerFrameHandler; + }, PFH_INTERVAL] call CBA_fnc_addPerFrameHandler; }; } else { if (GVAR(pfh) != -1) then { @@ -30,7 +30,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; QGVAR(effectFactor), "SLIDER", [LSTRING(effectFactor_DisplayName), LSTRING(effectFactor_Description)], _category, - [0, 1, 0.5, 0.1], + [0, 1, 0.5, 0, true], 1, {[QGVAR(effectFactor), _this] call EFUNC(common,cbaSettings_settingChanged)}, true // Needs mission restart @@ -40,7 +40,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; QGVAR(recoveryFactor), "SLIDER", [LSTRING(recoveryFactor_DisplayName), LSTRING(recoveryFactor_Description)], _category, - [0, 1, 0.5, 0.1], + [0, 1, 0.5, 0, true], 1, {[QGVAR(recoveryFactor), _this] call EFUNC(common,cbaSettings_settingChanged)}, true // Needs mission restart diff --git a/addons/smoke/script_component.hpp b/addons/smoke/script_component.hpp index e9deb0896dd..1e984dacf00 100644 --- a/addons/smoke/script_component.hpp +++ b/addons/smoke/script_component.hpp @@ -15,3 +15,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define PFH_INTERVAL 0.2 From 33001b15d2f8fa68858f34b73210e03f0afb0ee5 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Mon, 2 Feb 2026 02:36:26 -0600 Subject: [PATCH 20/31] improve vehicle logic --- addons/smoke/CfgVehicles.hpp | 47 ++++++++++++++++++++ addons/smoke/config.cpp | 1 + addons/smoke/functions/fnc_isOpenSeat.sqf | 29 ++++++++++-- addons/smoke/functions/fnc_isOpenVehicle.sqf | 8 ++-- 4 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 addons/smoke/CfgVehicles.hpp diff --git a/addons/smoke/CfgVehicles.hpp b/addons/smoke/CfgVehicles.hpp new file mode 100644 index 00000000000..7bbaf058fc3 --- /dev/null +++ b/addons/smoke/CfgVehicles.hpp @@ -0,0 +1,47 @@ +class CfgVehicles { + class Truck_01_base_F; + class B_Truck_01_transport_F: Truck_01_base_F { + ace_smoke_seats[] = { + {0}, // Driver is enclosed + {1, 1}, // Gunners are exposed + {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} + }; + }; + + class Heli_Transport_04_base_F; + class O_Heli_Transport_04_bench_F: Heli_Transport_04_base_F { + ace_smoke_seats[] = { + {0}, // Pilot is enclosed + {0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, // Crew is enclosed, passengers are exposed + }; + }; + + class Car_F; + class Offroad_01_base_F: Car_F { + ace_smoke_seats[] = {1}; // All seats are exposed + }; + class Hatchback_01_base_F: Car_F { + ace_smoke_seats[] = {1}; + }; + class SUV_01_base_F: Car_F { + ace_smoke_seats[] = {1}; + }; + class Van_01_base_F: Car_F { + ace_smoke_seats[] = {1}; + }; + class Van_02_base_F: Car_F { + ace_smoke_seats[] = {1}; + }; + class Tractor_01_base_F: Car_F { + ace_smoke_seats[] = {1}; + }; + + class Truck_02_base_F; + class C_Truck_02_covered_F: Truck_02_base_F { + ace_smoke_seats[] = { + {0}, // Driver is enclosed + {1, 1}, // Gunners are exposed + {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} + }; + }; +}; diff --git a/addons/smoke/config.cpp b/addons/smoke/config.cpp index c1c121c6fd7..bfe59b1f77e 100644 --- a/addons/smoke/config.cpp +++ b/addons/smoke/config.cpp @@ -14,4 +14,5 @@ class CfgPatches { #include "ACE_Arsenal_Stats.hpp" #include "CfgEventHandlers.hpp" #include "CfgGlasses.hpp" +#include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index 4eabdd14812..c082b97af2b 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -23,18 +23,39 @@ params [ if (_vehicle isEqualTo objNull || _unit isEqualTo objNull) exitWith { true }; +if (isTurnedOut _unit) exitWith { true }; + private _class = typeOf _vehicle; -private _index = _vehicle getCargoIndex _unit; + +private _key = _vehicle unitTurret _unit; +if (count _key >= 1) then { + _key = [_key select 0]; +} else { + _key = [-2, _vehicle getCargoIndex _unit]; +}; private _open = -1; if (_class in GVAR(openSeatCache)) then { private _cache = GVAR(openSeatCache) get _class; - if (_index in _cache) then { - _open = _cache get _index; + if (_key in _cache) then { + _open = _cache get _key; }; }; if (_open isNotEqualTo -1) exitWith { _open }; +private _config = getArray (configOf _vehicle >> QGVAR(seats)); +if (_config isNotEqualTo []) exitWith { + if (typeName _config == "SCALAR") exitWith { _config == 1 }; + private _path = switch (_key select 0) do { + case -2: { [2, _key select 1] }; // cargo + case -1: { [0, 0] }; // driver + default { [1, _key select 0] }; // turret + }; + private _subConfig = _config select (_path select 0); + if (typeName _subConfig == "SCALAR") exitWith { _subConfig == 1 }; + _subConfig select (_path select 1) == 1 +}; + if ([_vehicle] call FUNC(isOpenVehicle)) exitWith { true }; private _eyePos = eyePos _unit; @@ -42,6 +63,6 @@ private _intersect = lineIntersectsSurfaces [_eyePos, _eyePos vectorAdd [0, 0, 1 private _open = _intersect isEqualTo []; private _cache = GVAR(openSeatCache) getOrDefaultCall [_class, { createHashMap }, true]; -_cache set [_index, _open]; +_cache set [_key, _open]; _open diff --git a/addons/smoke/functions/fnc_isOpenVehicle.sqf b/addons/smoke/functions/fnc_isOpenVehicle.sqf index 9b9516c26f8..4f214fec75c 100644 --- a/addons/smoke/functions/fnc_isOpenVehicle.sqf +++ b/addons/smoke/functions/fnc_isOpenVehicle.sqf @@ -25,10 +25,12 @@ private _class = typeOf _vehicle; if (_class in GVAR(openVehicleCache)) exitWith { GVAR(openVehicleCache) get _class }; -private _attentuation = getText(configFile >> "CfgVehicles" >> _class >> "attenuationEffectType"); -if (_attentuation == "") exitWith { true }; +private _attenuation = getText(configFile >> "CfgVehicles" >> _class >> "attenuationEffectType"); +if (_attenuation == "") exitWith { true }; +// It's marked as being open, but most helis are at least mostly enclosed +if (_attenuation == "HeliAttenuation") exitWith { false }; -private _attenuation = configFile >> "AttenuationEffects" >> _attentuation; +private _attenuation = configFile >> "AttenuationEffects" >> _attenuation; private _open = [0,1] findIf { private _equalizer = getArray(_attenuation >> format ["Equalizer%1", _x] >> "gain"); _equalizer isEqualTo [1,1,1,1] From 7399a22638cf26a49e565489db41e605497ab885 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Tue, 3 Feb 2026 07:31:16 -0600 Subject: [PATCH 21/31] change helicopter config --- addons/smoke/CfgVehicles.hpp | 20 ++++++++++++++++++++ addons/smoke/functions/fnc_isOpenSeat.sqf | 10 +++------- addons/smoke/functions/fnc_isOpenVehicle.sqf | 2 -- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/addons/smoke/CfgVehicles.hpp b/addons/smoke/CfgVehicles.hpp index 7bbaf058fc3..a19a9caa88b 100644 --- a/addons/smoke/CfgVehicles.hpp +++ b/addons/smoke/CfgVehicles.hpp @@ -16,6 +16,26 @@ class CfgVehicles { }; }; + class Heli_light_03_base_F; + class Heli_light_03_unarmed_base_F: Heli_light_03_base_F { + ace_smoke_seats[] = {0}; // All seats are enclosed + }; + + class Heli_Light_02_base_F; + class Heli_Light_02_dynamicLoadout_base_F: Heli_Light_02_base_F { + ace_smoke_seats[] = {0}; // All seats are enclosed + }; + + class Heli_Attack_01_base_F; + class Heli_Attack_01_dynamicLoadout_base_F: Heli_Attack_01_base_F { + ace_smoke_seats[] = {0}; // All seats are enclosed + }; + + class Helicopter_Base_H; + class Heli_Transport_02_base_F: Helicopter_Base_H { + ace_smoke_seats[] = {0}; // All seats are enclosed + }; + class Car_F; class Offroad_01_base_F: Car_F { ace_smoke_seats[] = {1}; // All seats are exposed diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index c082b97af2b..4ece98fb72c 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: BrettMayson - * Check if a seat is open and thus susceptible to smoke entering, may not be accurate for vehicles with top coverings + * Check if a seat is open and thus susceptible to smoke entering * * Arguments: * 0: Vehicle @@ -58,11 +58,7 @@ if (_config isNotEqualTo []) exitWith { if ([_vehicle] call FUNC(isOpenVehicle)) exitWith { true }; -private _eyePos = eyePos _unit; -private _intersect = lineIntersectsSurfaces [_eyePos, _eyePos vectorAdd [0, 0, 1], _unit]; -private _open = _intersect isEqualTo []; - private _cache = GVAR(openSeatCache) getOrDefaultCall [_class, { createHashMap }, true]; -_cache set [_key, _open]; +_cache set [_key, true]; -_open +true diff --git a/addons/smoke/functions/fnc_isOpenVehicle.sqf b/addons/smoke/functions/fnc_isOpenVehicle.sqf index 4f214fec75c..5c8e1ca3e43 100644 --- a/addons/smoke/functions/fnc_isOpenVehicle.sqf +++ b/addons/smoke/functions/fnc_isOpenVehicle.sqf @@ -27,8 +27,6 @@ if (_class in GVAR(openVehicleCache)) exitWith { GVAR(openVehicleCache) get _cla private _attenuation = getText(configFile >> "CfgVehicles" >> _class >> "attenuationEffectType"); if (_attenuation == "") exitWith { true }; -// It's marked as being open, but most helis are at least mostly enclosed -if (_attenuation == "HeliAttenuation") exitWith { false }; private _attenuation = configFile >> "AttenuationEffects" >> _attenuation; private _open = [0,1] findIf { From 276a58407aa1eaff19c622965a9df014275edd4f Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Tue, 3 Feb 2026 07:35:56 -0600 Subject: [PATCH 22/31] add back sky check --- addons/smoke/functions/fnc_isOpenSeat.sqf | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index 4ece98fb72c..c082b97af2b 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: BrettMayson - * Check if a seat is open and thus susceptible to smoke entering + * Check if a seat is open and thus susceptible to smoke entering, may not be accurate for vehicles with top coverings * * Arguments: * 0: Vehicle @@ -58,7 +58,11 @@ if (_config isNotEqualTo []) exitWith { if ([_vehicle] call FUNC(isOpenVehicle)) exitWith { true }; +private _eyePos = eyePos _unit; +private _intersect = lineIntersectsSurfaces [_eyePos, _eyePos vectorAdd [0, 0, 1], _unit]; +private _open = _intersect isEqualTo []; + private _cache = GVAR(openSeatCache) getOrDefaultCall [_class, { createHashMap }, true]; -_cache set [_key, true]; +_cache set [_key, _open]; -true +_open From 98feb6be5809c6755f7fdfc515be363a30990628 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Tue, 3 Feb 2026 17:13:33 -0600 Subject: [PATCH 23/31] Update addons/smoke/functions/fnc_isOpenSeat.sqf Co-authored-by: PabstMirror --- addons/smoke/functions/fnc_isOpenSeat.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index c082b97af2b..23ce4941775 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -60,7 +60,7 @@ if ([_vehicle] call FUNC(isOpenVehicle)) exitWith { true }; private _eyePos = eyePos _unit; private _intersect = lineIntersectsSurfaces [_eyePos, _eyePos vectorAdd [0, 0, 1], _unit]; -private _open = _intersect isEqualTo []; +private _open = (_intersect findIf { _x#2 == _vehicle }) == -1; // No intersection with vehicle roof private _cache = GVAR(openSeatCache) getOrDefaultCall [_class, { createHashMap }, true]; _cache set [_key, _open]; From 4c3feef68ac0273f69a6bf053ef4d998230c4e1b Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Mon, 16 Feb 2026 09:20:08 -0600 Subject: [PATCH 24/31] remove false positive when going prone in some environments --- addons/smoke/functions/fnc_isInSmoke.sqf | 9 +++++---- addons/smoke/functions/fnc_pfh.sqf | 4 ++-- addons/smoke/initSettings.inc.sqf | 6 ++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/smoke/functions/fnc_isInSmoke.sqf index d9d9fc09860..cecb1974aa9 100644 --- a/addons/smoke/functions/fnc_isInSmoke.sqf +++ b/addons/smoke/functions/fnc_isInSmoke.sqf @@ -24,11 +24,12 @@ if (!isNull _vehicle && {!([_vehicle, _unit] call FUNC(isOpenSeat))}) exitWith { private _coverage = 0; private _eyePos = eyePos _unit; +private _z = [0,3] select (stance _unit == "PRONE"); private _positions = [ - [_eyePos, _eyePos vectorAdd [5, 0, 0], _unit], - [_eyePos, _eyePos vectorAdd [-5, 0, 0], _unit], - [_eyePos, _eyePos vectorAdd [0, 5, 0], _unit], - [_eyePos, _eyePos vectorAdd [0, -5, 0], _unit] + [_eyePos, _eyePos vectorAdd [5, 0, _z], _unit], + [_eyePos, _eyePos vectorAdd [-5, 0, _z], _unit], + [_eyePos, _eyePos vectorAdd [0, 5, _z], _unit], + [_eyePos, _eyePos vectorAdd [0, -5, _z], _unit] ]; { diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 8ceb3c72e78..5807d313873 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -30,12 +30,12 @@ private _change = (if (_isInSmoke) then { EFFECT_RATE * GVAR(effectFactor) } else { RECOVERY_RATE * GVAR(recoveryFactor) -}) * diag_deltaTime * (1 / PFH_INTERVAL); +}) * PFH_INTERVAL; private _fnc_updateLevel = { params ["_level", "_protect"]; private _innerChange = if (_protect == 1 && _isInSmoke) then { - RECOVERY_RATE * GVAR(recoveryFactor) * diag_deltaTime * (1 / PFH_INTERVAL) + RECOVERY_RATE * GVAR(recoveryFactor) * PFH_INTERVAL } else { _change }; diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index 5ca5a3be275..a6835b338e8 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -32,8 +32,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; _category, [0, 1, 0.5, 0, true], 1, - {[QGVAR(effectFactor), _this] call EFUNC(common,cbaSettings_settingChanged)}, - true // Needs mission restart + {[QGVAR(effectFactor), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; [ @@ -42,6 +41,5 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; _category, [0, 1, 0.5, 0, true], 1, - {[QGVAR(recoveryFactor), _this] call EFUNC(common,cbaSettings_settingChanged)}, - true // Needs mission restart + {[QGVAR(recoveryFactor), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; From 58a346a531d8bb895ef90380e476ebe647747efe Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Fri, 20 Feb 2026 11:48:35 -0600 Subject: [PATCH 25/31] Apply suggestions from code review Co-authored-by: PabstMirror --- addons/smoke/functions/fnc_isOpenSeat.sqf | 2 +- addons/smoke/functions/fnc_pfh.sqf | 4 ++-- addons/smoke/initSettings.inc.sqf | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index 23ce4941775..b9188e44b8d 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -45,7 +45,7 @@ if (_open isNotEqualTo -1) exitWith { _open }; private _config = getArray (configOf _vehicle >> QGVAR(seats)); if (_config isNotEqualTo []) exitWith { - if (typeName _config == "SCALAR") exitWith { _config == 1 }; + if (count _config == 1) exitWith { _config isEqualTo [1] }: private _path = switch (_key select 0) do { case -2: { [2, _key select 1] }; // cargo case -1: { [0, 0] }; // driver diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 5807d313873..49ce3c8fd46 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -69,9 +69,9 @@ private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; _levelBreathing = [_levelBreathing, _breathProtect] call _fnc_updateLevel; _unit setVariable [QGVAR(breathingLevel), _levelBreathing]; -if !(isNil "ace_medical_vitals_fnc_addSpO2DutyFactor") then { +if !(isNil QEFUNC(medical_vitals,fnc_addSpO2DutyFactor)) then { private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; - [QUOTE(ADDON), _breathingEffectiveness] call ace_medical_vitals_fnc_addSpO2DutyFactor; + [QUOTE(ADDON), _breathingEffectiveness] call EFUNC(medical_vitals,fnc_addSpO2DutyFactor); }; // Event diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index a6835b338e8..425489348bd 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -21,6 +21,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; if (GVAR(pfh) != -1) then { [GVAR(pfh)] call CBA_fnc_removePerFrameHandler; GVAR(pfh) = -1; + [QUOTE(ADDON)] call FUNC(removeSpO2DutyFactor); }; }; } From 3c0a940834c6fa5e258fb0482ecd029882f6cdf5 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Fri, 20 Feb 2026 17:03:23 -0600 Subject: [PATCH 26/31] Apply suggestions from code review Co-authored-by: PabstMirror --- addons/smoke/functions/fnc_pfh.sqf | 4 ++-- addons/smoke/initSettings.inc.sqf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/smoke/functions/fnc_pfh.sqf index 49ce3c8fd46..95554912e5d 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/smoke/functions/fnc_pfh.sqf @@ -69,9 +69,9 @@ private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; _levelBreathing = [_levelBreathing, _breathProtect] call _fnc_updateLevel; _unit setVariable [QGVAR(breathingLevel), _levelBreathing]; -if !(isNil QEFUNC(medical_vitals,fnc_addSpO2DutyFactor)) then { +if !(isNil QEFUNC(medical_vitals,addSpO2DutyFactor)) then { private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; - [QUOTE(ADDON), _breathingEffectiveness] call EFUNC(medical_vitals,fnc_addSpO2DutyFactor); + [QUOTE(ADDON), _breathingEffectiveness] call EFUNC(medical_vitals,addSpO2DutyFactor); }; // Event diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index 425489348bd..c36552aa1e8 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -21,7 +21,7 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; if (GVAR(pfh) != -1) then { [GVAR(pfh)] call CBA_fnc_removePerFrameHandler; GVAR(pfh) = -1; - [QUOTE(ADDON)] call FUNC(removeSpO2DutyFactor); + if (!isNil QEFUNC(medical_vitals,removeSpO2DutyFactor)) then { [QUOTE(ADDON)] call EFUNC(medical_vitals,removeSpO2DutyFactor); }; }; }; } From 2759bea86f7c3b9849a95e34a77424f19124ba0a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 20 Feb 2026 17:07:23 -0600 Subject: [PATCH 27/31] Apply suggestion from @PabstMirror --- addons/smoke/functions/fnc_isOpenSeat.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/smoke/functions/fnc_isOpenSeat.sqf index b9188e44b8d..dd445fad019 100644 --- a/addons/smoke/functions/fnc_isOpenSeat.sqf +++ b/addons/smoke/functions/fnc_isOpenSeat.sqf @@ -45,7 +45,7 @@ if (_open isNotEqualTo -1) exitWith { _open }; private _config = getArray (configOf _vehicle >> QGVAR(seats)); if (_config isNotEqualTo []) exitWith { - if (count _config == 1) exitWith { _config isEqualTo [1] }: + if (count _config == 1) exitWith { _config isEqualTo [1] }; private _path = switch (_key select 0) do { case -2: { [2, _key select 1] }; // cargo case -1: { [0, 0] }; // driver From fbc8503d71168240312d3e4546b69a05ec312f49 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 7 Mar 2026 12:57:48 -0600 Subject: [PATCH 28/31] Disable visual effects in spectator/zeus --- addons/smoke/XEH_postInit.sqf | 9 +++++++-- addons/smoke/initSettings.inc.sqf | 5 +++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/smoke/XEH_postInit.sqf b/addons/smoke/XEH_postInit.sqf index 4fa37ee6348..6894adb4685 100644 --- a/addons/smoke/XEH_postInit.sqf +++ b/addons/smoke/XEH_postInit.sqf @@ -3,8 +3,13 @@ if (!hasInterface) exitWith {}; GVAR(ppHandleDynamicBlur) = ppEffectCreate ["DynamicBlur", 500]; GVAR(ppHandleColorCorrections) = ppEffectCreate ["ColorCorrections", 1500]; -GVAR(ppHandleDynamicBlur) ppEffectEnable GVAR(enabled); -GVAR(ppHandleColorCorrections) ppEffectEnable GVAR(enabled); + +["featureCamera", { + params ["", "_newCamera"]; + private _showEffects = (_newCamera == "") && {GVAR(pfh) != -1}; + GVAR(ppHandleDynamicBlur) ppEffectEnable _showEffects; + GVAR(ppHandleColorCorrections) ppEffectEnable _showEffects; +}] call CBA_fnc_addPlayerEventHandler; ["loadout", { params ["_unit"]; diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf index c36552aa1e8..1b98c1d86cc 100644 --- a/addons/smoke/initSettings.inc.sqf +++ b/addons/smoke/initSettings.inc.sqf @@ -9,8 +9,9 @@ private _category = format ["ACE %1", localize LSTRING(DisplayName)]; { [QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged); if (!hasInterface) exitWith {}; - GVAR(ppHandleDynamicBlur) ppEffectEnable _this; - GVAR(ppHandleColorCorrections) ppEffectEnable _this; + private _showEffects = _this && !EGVAR(common,OldIsCamera); + GVAR(ppHandleDynamicBlur) ppEffectEnable _showEffects; + GVAR(ppHandleColorCorrections) ppEffectEnable _showEffects; if (_this) then { if (GVAR(pfh) == -1) then { GVAR(pfh) = [{ From 9952aeeb7986a1b007db4efdeca502b4fcb9a4d4 Mon Sep 17 00:00:00 2001 From: Brett Mayson Date: Fri, 20 Mar 2026 14:54:32 -0600 Subject: [PATCH 29/31] smoke -> irritants --- Cargo.lock | 532 +++++++++++------- addons/irritants/$PBOPREFIX$ | 1 + .../ACE_Arsenal_Stats.hpp | 0 .../{smoke => irritants}/CfgEventHandlers.hpp | 0 addons/{smoke => irritants}/CfgGlasses.hpp | 0 addons/{smoke => irritants}/CfgVehicles.hpp | 26 +- addons/{smoke => irritants}/CfgWeapons.hpp | 0 addons/{smoke => irritants}/XEH_PREP.hpp | 2 +- addons/{smoke => irritants}/XEH_postInit.sqf | 2 +- addons/{smoke => irritants}/XEH_preInit.sqf | 2 +- addons/{smoke => irritants}/XEH_preStart.sqf | 0 addons/{smoke => irritants}/config.cpp | 0 .../functions/fnc_isInSmoke.sqf | 0 .../functions/fnc_isOpenSeat.sqf | 0 .../functions/fnc_isOpenVehicle.sqf | 0 .../functions/fnc_smoke_pfh.sqf} | 14 +- addons/irritants/initSettings.inc.sqf | 47 ++ .../{smoke => irritants}/script_component.hpp | 10 +- addons/{smoke => irritants}/stringtable.xml | 36 +- addons/smoke/$PBOPREFIX$ | 1 - addons/smoke/initSettings.inc.sqf | 47 -- 21 files changed, 435 insertions(+), 285 deletions(-) create mode 100644 addons/irritants/$PBOPREFIX$ rename addons/{smoke => irritants}/ACE_Arsenal_Stats.hpp (100%) rename addons/{smoke => irritants}/CfgEventHandlers.hpp (100%) rename addons/{smoke => irritants}/CfgGlasses.hpp (100%) rename addons/{smoke => irritants}/CfgVehicles.hpp (72%) rename addons/{smoke => irritants}/CfgWeapons.hpp (100%) rename addons/{smoke => irritants}/XEH_PREP.hpp (76%) rename addons/{smoke => irritants}/XEH_postInit.sqf (92%) rename addons/{smoke => irritants}/XEH_preInit.sqf (90%) rename addons/{smoke => irritants}/XEH_preStart.sqf (100%) rename addons/{smoke => irritants}/config.cpp (100%) rename addons/{smoke => irritants}/functions/fnc_isInSmoke.sqf (100%) rename addons/{smoke => irritants}/functions/fnc_isOpenSeat.sqf (100%) rename addons/{smoke => irritants}/functions/fnc_isOpenVehicle.sqf (100%) rename addons/{smoke/functions/fnc_pfh.sqf => irritants/functions/fnc_smoke_pfh.sqf} (83%) create mode 100644 addons/irritants/initSettings.inc.sqf rename addons/{smoke => irritants}/script_component.hpp (59%) rename addons/{smoke => irritants}/stringtable.xml (88%) delete mode 100644 addons/smoke/$PBOPREFIX$ delete mode 100644 addons/smoke/initSettings.inc.sqf diff --git a/Cargo.lock b/Cargo.lock index c2bf60b05b5..c6fad5407d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,6 +31,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + [[package]] name = "arboard" version = "3.6.1" @@ -53,9 +59,9 @@ dependencies = [ [[package]] name = "arma-rs" -version = "1.11.15" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a187c0f0594c3cef75b79cba42022e841da290092777486318d6d5d164f74d2" +checksum = "4ae6e1d467f4fa3b57a5eca567551abd8638c57af7db4ac4b53c6a5aa1fff761" dependencies = [ "arma-rs-proc", "crossbeam-channel", @@ -66,14 +72,14 @@ dependencies = [ "state", "uuid", "winapi", - "windows 0.61.3", + "windows 0.62.2", ] [[package]] name = "arma-rs-proc" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf67c0d0c7a59275e5ac4f3fce0cbdbcf3ba12e47bc30be6a3327d6a1bc151f8" +checksum = "8a6f278bb879949843757ff56f4495fa2c86fe27092c57a0c8428702501cb5fe" dependencies = [ "proc-macro2", "quote", @@ -88,21 +94,21 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder-lite" @@ -112,9 +118,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "cc" -version = "1.2.49" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", @@ -188,9 +194,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "dispatch2" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ "bitflags", "objc2", @@ -213,6 +219,12 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "errno" version = "0.3.14" @@ -260,20 +272,26 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", ] +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -303,14 +321,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix", - "windows-link 0.2.1", + "windows-link", ] [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", @@ -329,11 +347,24 @@ dependencies = [ "wasip2", ] +[[package]] +name = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + [[package]] name = "git2" -version = "0.20.3" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2b37e2f62729cdada11f0e6b3b6fe383c69c29fc619e391223e12856af308c" +checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" dependencies = [ "bitflags", "libc", @@ -355,6 +386,27 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "icu_collections" version = "2.1.1" @@ -436,6 +488,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "idna" version = "1.1.0" @@ -471,11 +529,23 @@ dependencies = [ "tiff", ] +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", + "serde", + "serde_core", +] + [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jobserver" @@ -489,9 +559,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -503,11 +573,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" -version = "0.2.178" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libgit2-sys" @@ -539,9 +615,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.23" +version = "1.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" +checksum = "4735e9cbde5aac84a5ce588f6b23a90b9b0b528f6c5a8db8a4aff300463a0839" dependencies = [ "cc", "libc", @@ -557,9 +633,9 @@ checksum = "2c7721e472624c9aaad27a5eb6b7c9c6045c7a396f2efb6dabaec1b640d5e89b" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -608,9 +684,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "miniz_oxide" @@ -652,9 +728,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ "objc2-encode", ] @@ -767,7 +843,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -778,9 +854,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" @@ -790,9 +866,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "png" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ "bitflags", "crc32fast", @@ -819,11 +895,21 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -845,9 +931,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.42" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -885,7 +971,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] @@ -919,9 +1005,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -930,15 +1016,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags", "errno", @@ -953,12 +1039,6 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "scoped-tls" version = "1.0.1" @@ -971,6 +1051,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + [[package]] name = "seq-macro" version = "0.3.6" @@ -1009,15 +1095,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -1064,9 +1150,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -1119,9 +1205,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -1141,9 +1227,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -1180,15 +1266,21 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -1204,11 +1296,11 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.19.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.1", "js-sys", "wasm-bindgen", ] @@ -1233,18 +1325,27 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -1255,9 +1356,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1265,9 +1366,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", @@ -1278,13 +1379,47 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "weezl" version = "0.1.12" @@ -1322,38 +1457,16 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections 0.2.0", - "windows-core 0.61.2", - "windows-future 0.2.1", - "windows-link 0.1.3", - "windows-numerics 0.2.0", -] - [[package]] name = "windows" version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-collections 0.3.2", - "windows-core 0.62.2", - "windows-future 0.3.2", - "windows-numerics 0.3.1", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", ] [[package]] @@ -1362,20 +1475,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core 0.62.2", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-core", ] [[package]] @@ -1386,20 +1486,9 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", - "windows-threading 0.1.0", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -1408,9 +1497,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "windows-core 0.62.2", - "windows-link 0.2.1", - "windows-threading 0.2.1", + "windows-core", + "windows-link", + "windows-threading", ] [[package]] @@ -1435,45 +1524,20 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-numerics" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", -] - [[package]] name = "windows-numerics" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core 0.62.2", - "windows-link 0.2.1", -] - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", + "windows-core", + "windows-link", ] [[package]] @@ -1482,16 +1546,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -1500,7 +1555,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -1518,7 +1573,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -1542,7 +1597,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.1", + "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -1553,22 +1608,13 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-threading" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -1663,9 +1709,91 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" @@ -1715,18 +1843,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" dependencies = [ "proc-macro2", "quote", @@ -1787,6 +1915,12 @@ dependencies = [ "syn", ] +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + [[package]] name = "zune-core" version = "0.4.12" diff --git a/addons/irritants/$PBOPREFIX$ b/addons/irritants/$PBOPREFIX$ new file mode 100644 index 00000000000..03cecd91b77 --- /dev/null +++ b/addons/irritants/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\irritants diff --git a/addons/smoke/ACE_Arsenal_Stats.hpp b/addons/irritants/ACE_Arsenal_Stats.hpp similarity index 100% rename from addons/smoke/ACE_Arsenal_Stats.hpp rename to addons/irritants/ACE_Arsenal_Stats.hpp diff --git a/addons/smoke/CfgEventHandlers.hpp b/addons/irritants/CfgEventHandlers.hpp similarity index 100% rename from addons/smoke/CfgEventHandlers.hpp rename to addons/irritants/CfgEventHandlers.hpp diff --git a/addons/smoke/CfgGlasses.hpp b/addons/irritants/CfgGlasses.hpp similarity index 100% rename from addons/smoke/CfgGlasses.hpp rename to addons/irritants/CfgGlasses.hpp diff --git a/addons/smoke/CfgVehicles.hpp b/addons/irritants/CfgVehicles.hpp similarity index 72% rename from addons/smoke/CfgVehicles.hpp rename to addons/irritants/CfgVehicles.hpp index a19a9caa88b..1156ab97e97 100644 --- a/addons/smoke/CfgVehicles.hpp +++ b/addons/irritants/CfgVehicles.hpp @@ -1,7 +1,7 @@ class CfgVehicles { class Truck_01_base_F; class B_Truck_01_transport_F: Truck_01_base_F { - ace_smoke_seats[] = { + GVAR(seats)[] = { {0}, // Driver is enclosed {1, 1}, // Gunners are exposed {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} @@ -10,7 +10,7 @@ class CfgVehicles { class Heli_Transport_04_base_F; class O_Heli_Transport_04_bench_F: Heli_Transport_04_base_F { - ace_smoke_seats[] = { + GVAR(seats)[] = { {0}, // Pilot is enclosed {0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, // Crew is enclosed, passengers are exposed }; @@ -18,47 +18,47 @@ class CfgVehicles { class Heli_light_03_base_F; class Heli_light_03_unarmed_base_F: Heli_light_03_base_F { - ace_smoke_seats[] = {0}; // All seats are enclosed + GVAR(seats)[] = {0}; // All seats are enclosed }; class Heli_Light_02_base_F; class Heli_Light_02_dynamicLoadout_base_F: Heli_Light_02_base_F { - ace_smoke_seats[] = {0}; // All seats are enclosed + GVAR(seats)[] = {0}; // All seats are enclosed }; class Heli_Attack_01_base_F; class Heli_Attack_01_dynamicLoadout_base_F: Heli_Attack_01_base_F { - ace_smoke_seats[] = {0}; // All seats are enclosed + GVAR(seats)[] = {0}; // All seats are enclosed }; class Helicopter_Base_H; class Heli_Transport_02_base_F: Helicopter_Base_H { - ace_smoke_seats[] = {0}; // All seats are enclosed + GVAR(seats)[] = {0}; // All seats are enclosed }; class Car_F; class Offroad_01_base_F: Car_F { - ace_smoke_seats[] = {1}; // All seats are exposed + GVAR(seats)[] = {1}; // All seats are exposed }; class Hatchback_01_base_F: Car_F { - ace_smoke_seats[] = {1}; + GVAR(seats)[] = {1}; }; class SUV_01_base_F: Car_F { - ace_smoke_seats[] = {1}; + GVAR(seats)[] = {1}; }; class Van_01_base_F: Car_F { - ace_smoke_seats[] = {1}; + GVAR(seats)[] = {1}; }; class Van_02_base_F: Car_F { - ace_smoke_seats[] = {1}; + GVAR(seats)[] = {1}; }; class Tractor_01_base_F: Car_F { - ace_smoke_seats[] = {1}; + GVAR(seats)[] = {1}; }; class Truck_02_base_F; class C_Truck_02_covered_F: Truck_02_base_F { - ace_smoke_seats[] = { + GVAR(seats)[] = { {0}, // Driver is enclosed {1, 1}, // Gunners are exposed {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} diff --git a/addons/smoke/CfgWeapons.hpp b/addons/irritants/CfgWeapons.hpp similarity index 100% rename from addons/smoke/CfgWeapons.hpp rename to addons/irritants/CfgWeapons.hpp diff --git a/addons/smoke/XEH_PREP.hpp b/addons/irritants/XEH_PREP.hpp similarity index 76% rename from addons/smoke/XEH_PREP.hpp rename to addons/irritants/XEH_PREP.hpp index 059e0c6264b..cf418699af1 100644 --- a/addons/smoke/XEH_PREP.hpp +++ b/addons/irritants/XEH_PREP.hpp @@ -1,4 +1,4 @@ PREP(isInSmoke); PREP(isOpenVehicle); PREP(isOpenSeat); -PREP(pfh); +PREP(smoke_pfh); diff --git a/addons/smoke/XEH_postInit.sqf b/addons/irritants/XEH_postInit.sqf similarity index 92% rename from addons/smoke/XEH_postInit.sqf rename to addons/irritants/XEH_postInit.sqf index 6894adb4685..682ae45ae87 100644 --- a/addons/smoke/XEH_postInit.sqf +++ b/addons/irritants/XEH_postInit.sqf @@ -6,7 +6,7 @@ GVAR(ppHandleColorCorrections) = ppEffectCreate ["ColorCorrections", 1500]; ["featureCamera", { params ["", "_newCamera"]; - private _showEffects = (_newCamera == "") && {GVAR(pfh) != -1}; + private _showEffects = (_newCamera == "") && {GVAR(smoke_pfh) != -1}; GVAR(ppHandleDynamicBlur) ppEffectEnable _showEffects; GVAR(ppHandleColorCorrections) ppEffectEnable _showEffects; }] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/smoke/XEH_preInit.sqf b/addons/irritants/XEH_preInit.sqf similarity index 90% rename from addons/smoke/XEH_preInit.sqf rename to addons/irritants/XEH_preInit.sqf index 61eb91c6dc1..2903d5c00bf 100644 --- a/addons/smoke/XEH_preInit.sqf +++ b/addons/irritants/XEH_preInit.sqf @@ -6,7 +6,7 @@ ADDON = false; #include "initSettings.inc.sqf" -GVAR(pfh) = -1; +GVAR(smoke_pfh) = -1; GVAR(openVehicleCache) = createHashMap; GVAR(openSeatCache) = createHashMap; diff --git a/addons/smoke/XEH_preStart.sqf b/addons/irritants/XEH_preStart.sqf similarity index 100% rename from addons/smoke/XEH_preStart.sqf rename to addons/irritants/XEH_preStart.sqf diff --git a/addons/smoke/config.cpp b/addons/irritants/config.cpp similarity index 100% rename from addons/smoke/config.cpp rename to addons/irritants/config.cpp diff --git a/addons/smoke/functions/fnc_isInSmoke.sqf b/addons/irritants/functions/fnc_isInSmoke.sqf similarity index 100% rename from addons/smoke/functions/fnc_isInSmoke.sqf rename to addons/irritants/functions/fnc_isInSmoke.sqf diff --git a/addons/smoke/functions/fnc_isOpenSeat.sqf b/addons/irritants/functions/fnc_isOpenSeat.sqf similarity index 100% rename from addons/smoke/functions/fnc_isOpenSeat.sqf rename to addons/irritants/functions/fnc_isOpenSeat.sqf diff --git a/addons/smoke/functions/fnc_isOpenVehicle.sqf b/addons/irritants/functions/fnc_isOpenVehicle.sqf similarity index 100% rename from addons/smoke/functions/fnc_isOpenVehicle.sqf rename to addons/irritants/functions/fnc_isOpenVehicle.sqf diff --git a/addons/smoke/functions/fnc_pfh.sqf b/addons/irritants/functions/fnc_smoke_pfh.sqf similarity index 83% rename from addons/smoke/functions/fnc_pfh.sqf rename to addons/irritants/functions/fnc_smoke_pfh.sqf index 95554912e5d..30709eee48e 100644 --- a/addons/smoke/functions/fnc_pfh.sqf +++ b/addons/irritants/functions/fnc_smoke_pfh.sqf @@ -27,15 +27,15 @@ if (isGamePaused) exitWith {}; private _isInSmoke = [_unit] call FUNC(isInSmoke); private _change = (if (_isInSmoke) then { - EFFECT_RATE * GVAR(effectFactor) + EFFECT_RATE * GVAR(smoke_effectFactor) } else { - RECOVERY_RATE * GVAR(recoveryFactor) + RECOVERY_RATE * GVAR(smoke_recoveryFactor) }) * PFH_INTERVAL; private _fnc_updateLevel = { params ["_level", "_protect"]; private _innerChange = if (_protect == 1 && _isInSmoke) then { - RECOVERY_RATE * GVAR(recoveryFactor) * PFH_INTERVAL + RECOVERY_RATE * GVAR(smoke_recoveryFactor) * PFH_INTERVAL } else { _change }; @@ -47,10 +47,10 @@ private _fnc_updateLevel = { }; // Eyes -private _levelEyes = _unit getVariable [QGVAR(eyesLevel), 0]; +private _levelEyes = _unit getVariable [QGVAR(smoke_eyesLevel), 0]; private _eyesProtect = _unit getVariable [QGVAR(eyesProtection), 0]; _levelEyes = [_levelEyes, _eyesProtect] call _fnc_updateLevel; -_unit setVariable [QGVAR(eyesLevel), _levelEyes]; +_unit setVariable [QGVAR(smoke_eyesLevel), _levelEyes]; private _dynamicBlurValue = linearConversion [0.05, 1, _levelEyes, 0, 0.8, true]; private _colorCorrectionsValue = linearConversion [0.05, 1, _levelEyes, 1, 0.6, true]; @@ -64,10 +64,10 @@ if (_unit == ace_player) then { }; // Breathing -private _levelBreathing = _unit getVariable [QGVAR(breathingLevel), 0]; +private _levelBreathing = _unit getVariable [QGVAR(smoke_breathingLevel), 0]; private _breathProtect = _unit getVariable [QGVAR(breathingProtection), 0]; _levelBreathing = [_levelBreathing, _breathProtect] call _fnc_updateLevel; -_unit setVariable [QGVAR(breathingLevel), _levelBreathing]; +_unit setVariable [QGVAR(smoke_breathingLevel), _levelBreathing]; if !(isNil QEFUNC(medical_vitals,addSpO2DutyFactor)) then { private _breathingEffectiveness = linearConversion [0.2, 1, _levelBreathing, 1, 0.6, true]; diff --git a/addons/irritants/initSettings.inc.sqf b/addons/irritants/initSettings.inc.sqf new file mode 100644 index 00000000000..c7796dfe44f --- /dev/null +++ b/addons/irritants/initSettings.inc.sqf @@ -0,0 +1,47 @@ +private _category = format ["ACE %1", localize LSTRING(DisplayName)]; + +[ + QGVAR(smoke_enabled), "CHECKBOX", + [LSTRING(smoke_enabled_DisplayName), LSTRING(smoke_enabled_Description)], + [_category, localize LSTRING(smoke_DisplayName)], + true, + 1, + { + [QGVAR(smoke_enabled), _this] call EFUNC(common,cbaSettings_settingChanged); + if (!hasInterface) exitWith {}; + private _showEffects = _this && !EGVAR(common,OldIsCamera); + GVAR(ppHandleDynamicBlur) ppEffectEnable _showEffects; + GVAR(ppHandleColorCorrections) ppEffectEnable _showEffects; + if (_this) then { + if (GVAR(smoke_pfh) == -1) then { + GVAR(smoke_pfh) = [{ + [ace_player] call FUNC(smoke_pfh); + }, PFH_INTERVAL] call CBA_fnc_addPerFrameHandler; + }; + } else { + if (GVAR(smoke_pfh) != -1) then { + [GVAR(smoke_pfh)] call CBA_fnc_removePerFrameHandler; + GVAR(smoke_pfh) = -1; + if (!isNil QEFUNC(medical_vitals,removeSpO2DutyFactor)) then { [QUOTE(ADDON)] call EFUNC(medical_vitals,removeSpO2DutyFactor); }; + }; + }; + } +] call CBA_fnc_addSetting; + +[ + QGVAR(smoke_effectFactor), "SLIDER", + [LSTRING(smoke_effectFactor_DisplayName), LSTRING(smoke_effectFactor_Description)], + [_category, localize LSTRING(smoke_DisplayName)], + [0, 1, 0.5, 0, true], + 1, + {[QGVAR(smoke_effectFactor), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_fnc_addSetting; + +[ + QGVAR(smoke_recoveryFactor), "SLIDER", + [LSTRING(smoke_recoveryFactor_DisplayName), LSTRING(smoke_recoveryFactor_Description)], + [_category, localize LSTRING(smoke_DisplayName)], + [0, 1, 0.5, 0, true], + 1, + {[QGVAR(smoke_recoveryFactor), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_fnc_addSetting; diff --git a/addons/smoke/script_component.hpp b/addons/irritants/script_component.hpp similarity index 59% rename from addons/smoke/script_component.hpp rename to addons/irritants/script_component.hpp index 1e984dacf00..662dc841b2d 100644 --- a/addons/smoke/script_component.hpp +++ b/addons/irritants/script_component.hpp @@ -1,17 +1,17 @@ -#define COMPONENT smoke -#define COMPONENT_BEAUTIFIED Smoke +#define COMPONENT irritants +#define COMPONENT_BEAUTIFIED Irritants #include "\z\ace\addons\main\script_mod.hpp" // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS -#ifdef DEBUG_ENABLED_SMOKE +#ifdef DEBUG_ENABLED_IRRITANTS #define DEBUG_MODE_FULL #endif -#ifdef DEBUG_SETTINGS_SMOKE - #define DEBUG_SETTINGS DEBUG_SETTINGS_SMOKE +#ifdef DEBUG_SETTINGS_IRRITANTS + #define DEBUG_SETTINGS DEBUG_SETTINGS_IRRITANTS #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/smoke/stringtable.xml b/addons/irritants/stringtable.xml similarity index 88% rename from addons/smoke/stringtable.xml rename to addons/irritants/stringtable.xml index e0706fbbc53..223f70aad21 100644 --- a/addons/smoke/stringtable.xml +++ b/addons/irritants/stringtable.xml @@ -1,7 +1,23 @@ - - + + + Irritants + Dráždivé látky + Irritants + Irritantes + Agenti irritanti + Drażniące substancje + Irritantes + Раздражители + Reizstoffe + 자극제 + 刺激物 + 刺激物 + 刺激物 + Роздратування + + Smoke Effects Kouřové efekty Effets de fumée @@ -17,7 +33,7 @@ 烟雾效果 Ефекти диму - + Adjusts the rate of smoke effect. Lower values increase the duration that can be spent in smoke. Upravuje rychlost kouřového efektu. Nižší hodnoty prodlužují dobu, kterou lze strávit v kouři. Modifie la vitesse de l'effet de fumée. Des valeurs plus basses augmentent la durée pendant laquelle on peut rester dans la fumée. @@ -33,7 +49,7 @@ 调整烟雾效果的速率。较低的值会增加在烟雾中停留的时间。 Регулює швидкість ефекту диму. Нижчі значення збільшують тривалість перебування в диму. - + Effect Factor Faktor efektu Facteur d'effet @@ -49,7 +65,7 @@ 效果系数 Фактор ефекту - + Enable / Disable Smoke Effects Povolit / Zakázat kouřové efekty Activer / Désactiver les effets de fumée @@ -65,7 +81,7 @@ 启用 / 禁用 烟雾效果 Увімкнути / Вимкнути ефекти диму - + Enabled Povoleno Activé @@ -81,7 +97,7 @@ 启用 Увімкнено - + Adjusts the rate of recovery from smoke effects. Higher values increase the rate of recovery after leaving smoke. Upravuje rychlost zotavení z kouřových efektů. Vyšší hodnoty zvyšují rychlost zotavení po opuštění kouře. Modifie la vitesse de récupération des effets de fumée. Des valeurs plus élevées augmentent la vitesse de récupération après avoir quitté la fumée. @@ -97,7 +113,7 @@ 调整从烟雾效果中恢复的速率。较高的值会增加离开烟雾后的恢复速率。 Регулює швидкість відновлення від ефектів диму. Вищі значення збільшують швидкість відновлення після виходу з диму. - + Recovery Factor Faktor zotavení Facteur de récupération @@ -113,7 +129,7 @@ 恢复系数 Фактор відновлення - + Breathing Protection Ochrana dýchání Protection respiratoire @@ -129,7 +145,7 @@ 呼吸保护 Захист дихання - + Eye Protection Ochrana očí Protection des yeux diff --git a/addons/smoke/$PBOPREFIX$ b/addons/smoke/$PBOPREFIX$ deleted file mode 100644 index 830debaa3c8..00000000000 --- a/addons/smoke/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\smoke diff --git a/addons/smoke/initSettings.inc.sqf b/addons/smoke/initSettings.inc.sqf deleted file mode 100644 index 1b98c1d86cc..00000000000 --- a/addons/smoke/initSettings.inc.sqf +++ /dev/null @@ -1,47 +0,0 @@ -private _category = format ["ACE %1", localize LSTRING(DisplayName)]; - -[ - QGVAR(enabled), "CHECKBOX", - [LSTRING(enabled_DisplayName), LSTRING(enabled_Description)], - _category, - true, - 1, - { - [QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged); - if (!hasInterface) exitWith {}; - private _showEffects = _this && !EGVAR(common,OldIsCamera); - GVAR(ppHandleDynamicBlur) ppEffectEnable _showEffects; - GVAR(ppHandleColorCorrections) ppEffectEnable _showEffects; - if (_this) then { - if (GVAR(pfh) == -1) then { - GVAR(pfh) = [{ - [ace_player] call FUNC(pfh); - }, PFH_INTERVAL] call CBA_fnc_addPerFrameHandler; - }; - } else { - if (GVAR(pfh) != -1) then { - [GVAR(pfh)] call CBA_fnc_removePerFrameHandler; - GVAR(pfh) = -1; - if (!isNil QEFUNC(medical_vitals,removeSpO2DutyFactor)) then { [QUOTE(ADDON)] call EFUNC(medical_vitals,removeSpO2DutyFactor); }; - }; - }; - } -] call CBA_fnc_addSetting; - -[ - QGVAR(effectFactor), "SLIDER", - [LSTRING(effectFactor_DisplayName), LSTRING(effectFactor_Description)], - _category, - [0, 1, 0.5, 0, true], - 1, - {[QGVAR(effectFactor), _this] call EFUNC(common,cbaSettings_settingChanged)} -] call CBA_fnc_addSetting; - -[ - QGVAR(recoveryFactor), "SLIDER", - [LSTRING(recoveryFactor_DisplayName), LSTRING(recoveryFactor_Description)], - _category, - [0, 1, 0.5, 0, true], - 1, - {[QGVAR(recoveryFactor), _this] call EFUNC(common,cbaSettings_settingChanged)} -] call CBA_fnc_addSetting; From a8a538c98c8661622cc01bcd6e8f9322e13700ea Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Sat, 21 Mar 2026 10:08:01 -0600 Subject: [PATCH 30/31] Update addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp Co-authored-by: PabstMirror --- addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp b/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp index 3b9c71bf637..b258d457750 100644 --- a/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp +++ b/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp @@ -1,5 +1,5 @@ #define PROTECT(var1,eyes,breathing) class var1: None { \ - ace_smoke_eyes_protection = eyes; \ + ace_irritants_eyes_protection = eyes; \ ace_smoke_breathing_protection = breathing; \ } From 370da581027009d2e65e9e9be2b064741d4ea9aa Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 23 Mar 2026 22:35:58 -0500 Subject: [PATCH 31/31] replace all ace_smoke -> ace_irritants --- .../compat_aegis_smoke/CfgGlasses.hpp | 20 +++++++++---------- .../compat_cup_smoke/CfgGlasses.hpp | 6 +++--- .../compat_ws/compat_ws_smoke/CfgWeapons.hpp | 4 ++-- addons/irritants/functions/fnc_isInSmoke.sqf | 2 +- addons/irritants/functions/fnc_isOpenSeat.sqf | 2 +- .../irritants/functions/fnc_isOpenVehicle.sqf | 2 +- addons/irritants/functions/fnc_smoke_pfh.sqf | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp b/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp index 86bb1af563b..63015b076e7 100644 --- a/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp +++ b/addons/compat_aegis/compat_aegis_smoke/CfgGlasses.hpp @@ -2,40 +2,40 @@ class CfgGlasses { class None; class G_Combat_Goggles_blk_F: None { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_light_blk_F: None { - ace_smoke_breathing_protection = 0.4; + ace_irritants_breathing_protection = 0.4; }; class G_Balaclava_light_G_blk_F: G_Balaclava_light_blk_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_light_eaf_F; class G_Balaclava_light_G_eaf_F: G_Balaclava_light_eaf_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_light_mtp_F; class G_Balaclava_light_G_mtp_F: G_Balaclava_light_mtp_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_light_tropic_F; class G_Balaclava_light_G_tropic_F: G_Balaclava_light_tropic_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_light_wdl_F; class G_Balaclava_light_G_wdl_F: G_Balaclava_light_wdl_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_TI_blk_F: None { - ace_smoke_breathing_protection = 0.4; + ace_irritants_breathing_protection = 0.4; }; class G_Balaclava_TI_G_blk_F: G_Balaclava_TI_blk_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; class G_Balaclava_TI_tna_F; class G_Balaclava_TI_G_tna_F: G_Balaclava_TI_tna_F { - ace_smoke_eyes_protection = 1; + ace_irritants_eyes_protection = 1; }; }; diff --git a/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp b/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp index b258d457750..2e91862b6df 100644 --- a/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp +++ b/addons/compat_cup_units/compat_cup_smoke/CfgGlasses.hpp @@ -1,17 +1,17 @@ #define PROTECT(var1,eyes,breathing) class var1: None { \ ace_irritants_eyes_protection = eyes; \ - ace_smoke_breathing_protection = breathing; \ + ace_irritants_breathing_protection = breathing; \ } class CfgGlasses { class None; class CUP_RUS_Balaclava_blk: None { - ace_smoke_breathing_protection = 0.4; + ace_irritants_breathing_protection = 0.4; }; class CUP_G_Ratnik_Balaclava_base: None { - ace_smoke_breathing_protection = 0.4; + ace_irritants_breathing_protection = 0.4; }; PROTECT(CUP_G_ESS_BLK_Dark,1,0); diff --git a/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp b/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp index 2a3303d8713..e03d3247fbc 100644 --- a/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp +++ b/addons/compat_ws/compat_ws_smoke/CfgWeapons.hpp @@ -1,11 +1,11 @@ class CfgWeapons { class lxWS_H_turban_01_black; class lxWS_H_turban_03_black: lxWS_H_turban_01_black { - ace_smoke_breathing_protection = 0.4; + ace_irritants_breathing_protection = 0.4; }; class H_Shemag_khk; class H_turban_02_mask_black_lxws: H_Shemag_khk { - ace_smoke_breathing_protection = 0.4; + ace_irritants_breathing_protection = 0.4; }; }; diff --git a/addons/irritants/functions/fnc_isInSmoke.sqf b/addons/irritants/functions/fnc_isInSmoke.sqf index cecb1974aa9..cc97f72b32d 100644 --- a/addons/irritants/functions/fnc_isInSmoke.sqf +++ b/addons/irritants/functions/fnc_isInSmoke.sqf @@ -10,7 +10,7 @@ * Is the unit in smoke? * * Example: - * [player] call ace_smoke_fnc_isInSmoke + * [player] call ace_irritants_fnc_isInSmoke * * Public: Yes */ diff --git a/addons/irritants/functions/fnc_isOpenSeat.sqf b/addons/irritants/functions/fnc_isOpenSeat.sqf index dd445fad019..67e6461c27d 100644 --- a/addons/irritants/functions/fnc_isOpenSeat.sqf +++ b/addons/irritants/functions/fnc_isOpenSeat.sqf @@ -11,7 +11,7 @@ * Is the seat open? * * Example: - * [_vehicle, _unit] call ace_smoke_fnc_isOpenSeat + * [_vehicle, _unit] call ace_irritants_fnc_isOpenSeat * * Public: Yes */ diff --git a/addons/irritants/functions/fnc_isOpenVehicle.sqf b/addons/irritants/functions/fnc_isOpenVehicle.sqf index 5c8e1ca3e43..c2367c5415a 100644 --- a/addons/irritants/functions/fnc_isOpenVehicle.sqf +++ b/addons/irritants/functions/fnc_isOpenVehicle.sqf @@ -10,7 +10,7 @@ * Is the vehicle open? * * Example: - * [vehicle player] call ace_smoke_fnc_isOpenVehicle + * [vehicle player] call ace_irritants_fnc_isOpenVehicle * * Public: Yes */ diff --git a/addons/irritants/functions/fnc_smoke_pfh.sqf b/addons/irritants/functions/fnc_smoke_pfh.sqf index 30709eee48e..4e77d2ffca1 100644 --- a/addons/irritants/functions/fnc_smoke_pfh.sqf +++ b/addons/irritants/functions/fnc_smoke_pfh.sqf @@ -11,7 +11,7 @@ * * Example: * [{ - * [player] call ace_smoke_fnc_pfh + * [player] call ace_irritants_fnc_pfh * }] call CBA_fnc_addPerFrameHandler * * Public: No