diff --git a/.github/workflows/arma.yml b/.github/workflows/arma.yml new file mode 100644 index 0000000000..528a9306c9 --- /dev/null +++ b/.github/workflows/arma.yml @@ -0,0 +1,45 @@ +name: Arma + +on: + push: + branches: + - master + pull_request: + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Checkout the source code + uses: actions/checkout@master + - name: Validate SQF + run: python3 tools/sqf_validator.py + - name: Validate Config + run: python3 tools/config_style_checker.py + - name: Validate String Tables + run: python3 tools/check_strings.py + - name: Check for BOM + uses: arma-actions/bom-check@master + + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout the source code + uses: actions/checkout@master + - name: Lint (sqflint) + uses: arma-actions/sqflint@master + continue-on-error: true # No failure due to many false-positives + + build: + runs-on: ubuntu-latest + container: acemod/armake:master + steps: + - name: Checkout the source code + uses: actions/checkout@master + - name: Build (armake) + run: armake --version && make -j4 + - name: Upload Artifact + uses: actions/upload-artifact@master + with: + name: ace3-${{ github.sha }}-nobin + path: '@ace' diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml new file mode 100644 index 0000000000..5022af32f4 --- /dev/null +++ b/.github/workflows/documentation.yml @@ -0,0 +1,24 @@ +name: Documentation + +on: + push: + branches: + - master + +jobs: + update: + runs-on: ubuntu-latest + steps: + - name: Checkout the source code + uses: actions/checkout@master + - name: Install Python packages + run: | + pip3 install wheel + pip3 install setuptools + pip3 install pygithub + pip3 install pygithub3 + - name: Deploy + if: github.repository == 'acemod/ACE3' && ! contains(github.event.head_commit.message, '[ci skip]') + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python3 tools/deploy.py diff --git a/.github/workflows/extensions.yml b/.github/workflows/extensions.yml new file mode 100644 index 0000000000..62b3ee6961 --- /dev/null +++ b/.github/workflows/extensions.yml @@ -0,0 +1,30 @@ +name: Extensions + +on: + pull_request: + paths: + - 'extensions/*' + - 'extensions/*/*' + - 'extensions/*/*/*' + - 'extensions/*/*/*/*' + - 'extensions/*/*/*/*/*' + +jobs: + build: + runs-on: ${{ matrix. os }} + strategy: + matrix: + os: [windows-latest] + + steps: + - name: Checkout the source code + uses: actions/checkout@master + - name: Build + run: | + cd extensions/build + cmake .. && cmake --build . + - name: Upload Artifact + uses: actions/upload-artifact@master + with: + name: ace3_extensions-${{ matrix.os }}-debug + path: extensions/build diff --git a/addons/arsenal/functions/fnc_onLoadoutsClose.sqf b/addons/arsenal/functions/fnc_onLoadoutsClose.sqf index 1b25ad4945..07af50139d 100644 --- a/addons/arsenal/functions/fnc_onLoadoutsClose.sqf +++ b/addons/arsenal/functions/fnc_onLoadoutsClose.sqf @@ -18,8 +18,6 @@ GVAR(currentLoadoutsTab) = nil; private _arsenalDisplay = findDisplay IDD_ace_arsenal; private _mouseBlockCtrl = _arsenalDisplay displayCtrl IDC_mouseBlock; -GVAR(cameraPosition) = GVAR(previousCameraPos); -GVAR(previousCameraPos) = nil; GVAR(loadoutsSearchbarFocus) = nil; GVAR(loadoutsPanelFocus) = nil; diff --git a/addons/arsenal/functions/fnc_onLoadoutsOpen.sqf b/addons/arsenal/functions/fnc_onLoadoutsOpen.sqf index d22124359d..eb72087f89 100644 --- a/addons/arsenal/functions/fnc_onLoadoutsOpen.sqf +++ b/addons/arsenal/functions/fnc_onLoadoutsOpen.sqf @@ -30,9 +30,6 @@ GVAR(currentLoadoutsTab) = -1; GVAR(loadoutsSearchbarFocus) = false; GVAR(loadoutsPanelFocus) = false; -GVAR(previousCameraPos) = GVAR(cameraPosition); -GVAR(cameraPosition) = [5,0,20,[-0.85,0,0.85]]; - private _panelContentCtrl = _display displayCtrl IDC_contentPanel; _panelContentCtrl ctrlSetFontHeight (4.5 * GRID_H); _panelContentCtrl ctrlCommit 0; diff --git a/addons/captives/functions/fnc_addLoadCaptiveActions.sqf b/addons/captives/functions/fnc_addLoadCaptiveActions.sqf index 81710f161d..d1ad8f603d 100644 --- a/addons/captives/functions/fnc_addLoadCaptiveActions.sqf +++ b/addons/captives/functions/fnc_addLoadCaptiveActions.sqf @@ -10,7 +10,7 @@ * Child actions * * Example: - * [kevin] call ace_medical_fnc_addLoadCaptiveActions + * [kevin] call ace_captives_fnc_addLoadCaptiveActions * * Public: No */ diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 1b22d33568..10a67f3386 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -269,6 +269,7 @@ Cyalume (Hi Bleu) ケミライト (高輝度 青) Świetlik (jaskrawy niebieski) + Knicklicht (Blau, Hell) Luce chimica (Hi Blu) Химсвет (Ярко-Синий) Bastão de Luz (Azul Forte) @@ -276,6 +277,7 @@ Blue Hi Light Lum. bleue haute intensité + Helles, blaues Knicklicht 高輝度の青色 Jaskrawe niebieskie światło Luce Hi Blu @@ -285,6 +287,7 @@ Type: Light - Blue Hi (30 minute)<br />Rounds: 1<br />Used in: Hand Type: Lumière - bleue Hi (30 minutes)<br />Nbre: 1<br /> À main + Typ: Licht - blau, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 種類: 照明 - 高輝度 青 (30分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe niebieskie (30 minut)<br/>Pociski: 1<br/>Używany w: ręce Tipo: Luce - Hi blu (30 minuti)<br/>Rimanenti:1 <br/>Usata in: Mano @@ -294,6 +297,7 @@ Chemlight (Hi Green) Cyalume (Hi Vert) + Knicklicht (Grün, Hell) ケミライト (高輝度 緑) Świetlik (jaskrawy zielony) Luce chimica (Hi Verde) @@ -303,6 +307,7 @@ Green Hi Light Lum. verte haute intensité + Helles, grünes Knicklicht 高輝度の青色 Jaskrawe zielone światło Luce Hi Verde @@ -312,6 +317,7 @@ Type: Light - Green Hi (30 minute)<br />Rounds: 1<br />Used in: Hand Type: Lumière - verte Hi (30 minutes)<br />Nbre: 1<br /> À main + Typ: Licht - grün, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 種類: 照明 - 高輝度 緑 (30分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe zielone (30 minut)<br/>Pociski: 1<br/>Używany w: ręce Tipo: Luce - Hi verde (30 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano @@ -321,6 +327,7 @@ Chemlight (Ultra-Hi Orange) Cyalume (Ultra-Hi orange) + Knicklicht (Orange, Hell) ケミライト (高輝度 オレンジ) Świetlik (ultra-jaskrawy pomarańczowy) Luce chimica (Ultra-Hi Arancione) @@ -330,6 +337,7 @@ Orange Ultra-Hi Light Lum. orange ultra haute intensité + Helles, orangenes Knicklicht ウルトラ高輝度のオレンジ色 Ultra-jaskrawe pomarańczowe światło Luce Ultra-Hi Arancione @@ -339,6 +347,7 @@ Type: Light - Orange Ultra-Hi (5 minute)<br />Rounds: 1<br />Used in: Hand Type: Lumière - Orange Ultra-Hi (5 minutes)<br />Nbre: 1<br /> À main + Typ: Licht - orange, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 種類: 照明 - ウルトラ高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - ultra-jaskrawe pomarańczowe (30 minut)<br/>Pociski: 1<br/>Używany w: ręce Tipo: Luce - Ultra-Hi (5 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index a331837fb2..3fbe081fae 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -138,6 +138,7 @@ PREP(positionToASL); PREP(progressBar); PREP(readSettingFromModule); PREP(receiveRequest); +PREP(registerItemReplacement); PREP(removeCanInteractWithCondition); PREP(removeSpecificMagazine); PREP(requestCallback); diff --git a/addons/common/functions/fnc_arithmeticGetResult.sqf b/addons/common/functions/fnc_arithmeticGetResult.sqf index e54f44fd27..ea5c2f3897 100644 --- a/addons/common/functions/fnc_arithmeticGetResult.sqf +++ b/addons/common/functions/fnc_arithmeticGetResult.sqf @@ -1,12 +1,12 @@ #include "script_component.hpp" /* * Author: PabstMirror - * Gets arithmetic result from a set. + * Returns the arithmetic result of performing the given operation on a set. * * Arguments: - * 0: Namespace + * 0: Namespace * 1: Number Set ID - * 2: Operation (sum, product, min, max, avg) (Case Sensitive) + * 2: Operation (max, min, sum, product, avg) (Case Sensitive) * * Return Value: * Value @@ -18,51 +18,44 @@ * Public: Yes */ -params ["_namespace", "_setID", "_op"]; -TRACE_3("arithmeticGetResult",_namespace,_setID,_op); +params ["_namespace", "_setID", "_operation"]; +TRACE_3("arithmeticGetResult",_namespace,_setID,_operation); -private _data = (_namespace getVariable _setID) param [2, []]; +private _data = (_namespace getVariable _setID) param [2, [{0}]]; -switch (_op) do { - case ("max"): { - private _result = -1e99; - { - _result = _result max (call _x); - nil - } count _data; - _result // return +switch (_operation) do { + case "max": { + selectMax (_data apply {call _x}) }; - case ("sum"): { + case "min": { + selectMin (_data apply {call _x}) + }; + case "sum": { private _result = 0; + { - _result = _result + (call _x); - nil - } count _data; - _result // return + _result = _result + call _x; + } forEach _data; + + _result }; - case ("product"): { + case "product": { private _result = 1; + { - _result = _result * (call _x); - nil - } count _data; - _result // return + _result = _result * call _x; + } forEach _data; + + _result }; - case ("min"): { - private _result = 1e99; - { - _result = _result min (call _x); - nil - } count _data; - _result // return - }; - case ("avg"): { + case "avg": { private _result = 0; + { - _result = _result + (call _x); - nil - } count _data; - _result / (count _data); // return + _result = _result + call _x; + } forEach _data; + + _result / count _data }; default {3735928559}; }; diff --git a/addons/common/functions/fnc_arithmeticSetSource.sqf b/addons/common/functions/fnc_arithmeticSetSource.sqf index 0d7503aa90..ce24c408ef 100644 --- a/addons/common/functions/fnc_arithmeticSetSource.sqf +++ b/addons/common/functions/fnc_arithmeticSetSource.sqf @@ -4,7 +4,7 @@ * Adds or removes a source to an arithmetic set. * * Arguments: - * 0: Namespace + * 0: Namespace * 1: Number Set ID * 2: Source * 3: Code that returns a number (can access var _namespace) [use {} to remove] @@ -20,13 +20,15 @@ */ params ["_namespace", "_setID", "_source", "_variable"]; -TRACE_4("params",_namespace,_setID,_source,_variable); +TRACE_4("arithmeticSetSource",_namespace,_setID,_source,_variable); private _hash = _namespace getVariable _setID; + if (isNil "_hash") then { _hash = [] call CBA_fnc_hashCreate; _namespace setVariable [_setID, _hash]; }; + if (_variable isEqualTo {}) then { TRACE_1("removing",_source); [_hash, _source] call CBA_fnc_hashRem; diff --git a/addons/common/functions/fnc_disableUserInput.sqf b/addons/common/functions/fnc_disableUserInput.sqf index ecc3a0a987..c8a6bdc5aa 100644 --- a/addons/common/functions/fnc_disableUserInput.sqf +++ b/addons/common/functions/fnc_disableUserInput.sqf @@ -82,7 +82,7 @@ if (_state) then { openMap true; }; - if (isServer || {serverCommandAvailable "#kick"} || {player getVariable ["ACE_isUnconscious", false] && {(call FUNC(player)) getVariable [QEGVAR(medical,AllowChatWhileUnconscious), missionNamespace getVariable [QEGVAR(medical,AllowChatWhileUnconscious), false]]}}) then { + if (isServer || {serverCommandAvailable "#kick"}) then { if (!(_key in (actionKeys "DefaultAction" + actionKeys "Throw")) && {_key in (actionKeys "Chat" + actionKeys "PrevChannel" + actionKeys "NextChannel")}) then { _key = 0; }; diff --git a/addons/common/functions/fnc_registerItemReplacement.sqf b/addons/common/functions/fnc_registerItemReplacement.sqf new file mode 100644 index 0000000000..d70a718193 --- /dev/null +++ b/addons/common/functions/fnc_registerItemReplacement.sqf @@ -0,0 +1,112 @@ +#include "script_component.hpp" +/* + * Author: BaerMitUmlaut + * Registers an event handler that replaces an item or item type with one or + * more other items. + * + * Arguments: + * 0: Item or item type ID to replace + * 1: Item or list of items + * 2: Replace items that inherit from original item (only if 0 is STRING) (Optional) + * + * Return Value: + * None + * + * Example: + * ["FirstAidKit", "ACE_fieldDressing"] call ace_common_fnc_registerItemReplacement + * + * Public: Yes + */ +params [["_oldItem", "", [0,""]], ["_newItems", "", ["", []]], ["_replaceInherited", false, [false]]]; +TRACE_3("registerItemReplacement",_oldItem,_newItems,_replaceInherited); + +// CBA player event handler function +private _fnc_replaceItems = { + params ["_unit"]; + + private _items = items _unit; + if (_items isEqualTo GVAR(oldItems)) exitWith {}; + + private _newItems = _items - GVAR(oldItems); + if (_newItems isEqualTo []) exitWith { + GVAR(oldItems) = _items; + }; + + _newItems sort true; // Sort so all items of current class can be replaced at once + private _cfgWeapons = configFile >> "CfgWeapons"; // Microoptimization + + for "_i" from 0 to count _newItems - 1 do { + private _item = _newItems#_i; + + // Determine replacement items: direct replacements, ... + private _replacements = GVAR(itemReplacements) getVariable [_item, []]; + + // ... item type replacements ... + private _type = getNumber (_cfgWeapons >> _item >> "ItemInfo" >> "type"); + private _typeReplacements = GVAR(itemReplacements) getVariable ["$" + str _type, []]; + _replacements append _typeReplacements; + + // ... and inherited replacements + { + if (_item isKindOf [_x, _cfgWeapons]) then { + private _inheritedReplacements = GVAR(itemReplacements) getVariable [_x, []]; + _replacements append _inheritedReplacements; + }; + } forEach GVAR(inheritedReplacements); + + // Skip lookup for all following items of this class + private _count = 1; + while {_newItems#(_i + 1) == _item} do { // (i+1) can be out of bounds, but should fail safely + _count = _count + 1; + _i = _i + 1; + }; + + // Replace all items of current class in list + if !(_replacements isEqualTo []) then { + TRACE_3("replace",_item,_count,_replacements); + _unit removeItems _item; + + for "_j" from 1 to _count do { + { [_unit, _x] call FUNC(addToInventory) } forEach _replacements; + }; + }; + }; + + GVAR(oldItems) = items _unit; +}; + +// Setup on first run +if (isNil QGVAR(itemReplacements)) then { + GVAR(itemReplacements) = [] call CBA_fnc_createNamespace; + GVAR(inheritedReplacements) = []; + GVAR(oldItems) = []; + ["loadout", _fnc_replaceItems] call CBA_fnc_addPlayerEventHandler; +}; + +// Save item replacement +// $ prefix is used for types (numbers) and replacements with inheritance +if (_replaceInherited) then { + _oldItem = "$" + _oldItem; + GVAR(inheritedReplacements) pushBack _oldItem; +}; +if (_oldItem isEqualType 0) then { + _oldItem = "$" + str _oldItem; +}; +if (_newItems isEqualType "") then { + _newItems = [_newItems]; +}; + +private _oldReplacements = GVAR(itemReplacements) getVariable [_oldItem, []]; +_oldReplacements append _newItems; +GVAR(itemReplacements) setVariable [_oldItem, _newItems]; + +// Force item scan when new replacement was registered in PostInit +if (!isNull ACE_player) then { + GVAR(oldItems) = []; + + // Exec next frame to ensure full scan only runs once per frame + // For example, if item replacements are registred in PostInit (due to CBA + // settings) by different addons, the inventory is only scanned once in the + // next frame, not once per addon. + [_fnc_replaceItems, [ACE_player]] call CBA_fnc_execNextFrame; +}; diff --git a/addons/common/functions/fnc_watchVariable.sqf b/addons/common/functions/fnc_watchVariable.sqf index 6fa86dc9bc..b3ec33bddc 100644 --- a/addons/common/functions/fnc_watchVariable.sqf +++ b/addons/common/functions/fnc_watchVariable.sqf @@ -20,7 +20,7 @@ * Example: * ["CBA_missionTime"] call ace_common_fnc_watchVariable // Uses title as code * ["diag_frameNo", {diag_frameNo}, [false]] call ace_common_fnc_watchVariable // Won't show delta - * ["blood", {player getVariable "ace_medical_bloodVolume"}, [true, 0, 100]] call ace_common_fnc_watchVariable // Shows slider + * ["blood", {player getVariable "ace_medical_bloodVolume"}, [true, 0, 6]] call ace_common_fnc_watchVariable // Shows slider * ["multiLine text", {"Line 1
Line 2"}, [2]] call ace_common_fnc_watchVariable * ["player names", {allPlayers apply {name _x}}, [5]] call ace_common_fnc_watchVariable // handles any data types * diff --git a/addons/common/scripts/checkVersionNumber.sqf b/addons/common/scripts/checkVersionNumber.sqf index 5d4b1734e4..15832ed2bd 100644 --- a/addons/common/scripts/checkVersionNumber.sqf +++ b/addons/common/scripts/checkVersionNumber.sqf @@ -99,6 +99,7 @@ if (!isServer) then { diag_log text _error; [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent; + [QGVAR(serverLog), _error] call CBA_fnc_serverEvent; }; private _missingAddonServer = false; @@ -116,6 +117,7 @@ if (!isServer) then { diag_log text _error; [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent; + [QGVAR(serverLog), _error] call CBA_fnc_serverEvent; }; private _oldVersionClient = false; @@ -133,6 +135,7 @@ if (!isServer) then { diag_log text _error; [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent; + [QGVAR(serverLog), _error] call CBA_fnc_serverEvent; }; private _oldVersionServer = false; @@ -150,6 +153,7 @@ if (!isServer) then { diag_log text _error; [QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent; + [QGVAR(serverLog), _error] call CBA_fnc_serverEvent; }; ACE_Version_ClientErrors = [_missingAddon, _missingAddonServer, _oldVersionClient, _oldVersionServer]; diff --git a/addons/dragging/CfgMovesMaleSdr.hpp b/addons/dragging/CfgMovesMaleSdr.hpp new file mode 100644 index 0000000000..715765679f --- /dev/null +++ b/addons/dragging/CfgMovesMaleSdr.hpp @@ -0,0 +1,13 @@ +class CfgMovesMaleSdr: CfgMovesBasic { + class InjuredMovedBase; + class AgonyBaseRfl; + + class States { + class AcinPknlMstpSnonWnonDnon_AcinPercMrunSnonWnonDnon: InjuredMovedBase { + speed = -10; // 1/10 + }; + class AinjPfalMstpSnonWrflDnon_carried_Up: AgonyBaseRfl { + speed = -10; // 1/10 + }; + }; +}; diff --git a/addons/dragging/config.cpp b/addons/dragging/config.cpp index c3f5d0dd84..188f3916f2 100644 --- a/addons/dragging/config.cpp +++ b/addons/dragging/config.cpp @@ -17,3 +17,4 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgMovesBasic.hpp" +#include "CfgMovesMaleSdr.hpp" diff --git a/addons/dragging/functions/fnc_startCarry.sqf b/addons/dragging/functions/fnc_startCarry.sqf index 729fec2a4e..a52afd1c27 100644 --- a/addons/dragging/functions/fnc_startCarry.sqf +++ b/addons/dragging/functions/fnc_startCarry.sqf @@ -48,7 +48,7 @@ if (_target isKindOf "CAManBase") then { [_unit, "AcinPknlMstpSnonWnonDnon_AcinPercMrunSnonWnonDnon", 2, true] call EFUNC(common,doAnimation); [_target, "AinjPfalMstpSnonWrflDnon_carried_Up", 2, true] call EFUNC(common,doAnimation); - _timer = CBA_missionTime + 15; + _timer = CBA_missionTime + 10; } else { diff --git a/addons/dragon/models/ace_m47_magazine.p3d b/addons/dragon/models/ace_m47_magazine.p3d index 39a8b6d80a..ac09112e91 100644 Binary files a/addons/dragon/models/ace_m47_magazine.p3d and b/addons/dragon/models/ace_m47_magazine.p3d differ diff --git a/addons/dragon/models/ace_m47_optic.p3d b/addons/dragon/models/ace_m47_optic.p3d index a0d8af5a78..355c6b04b5 100644 Binary files a/addons/dragon/models/ace_m47_optic.p3d and b/addons/dragon/models/ace_m47_optic.p3d differ diff --git a/addons/dragon/models/ace_m47_static.p3d b/addons/dragon/models/ace_m47_static.p3d index b14d66d5c7..3c3a6b0731 100644 Binary files a/addons/dragon/models/ace_m47_static.p3d and b/addons/dragon/models/ace_m47_static.p3d differ diff --git a/addons/explosives/Cfg3DEN.hpp b/addons/explosives/Cfg3DEN.hpp new file mode 100644 index 0000000000..d36baa9c40 --- /dev/null +++ b/addons/explosives/Cfg3DEN.hpp @@ -0,0 +1,22 @@ +#define DEFAULT_IS_EOD (_this getUnitTrait 'explosiveSpecialist') + +class Cfg3DEN { + class Object { + class AttributeCategories { + class ace_attributes { + class Attributes { + class ace_isEOD { + displayName = CSTRING(IsEOD_DisplayName); + tooltip = CSTRING(IsEOD_Description); + property = QUOTE(ace_isEOD); + control = "Checkbox"; + expression = QUOTE(_this setVariable [ARR_3('ACE_isEOD',_value,true)]); + defaultValue = QUOTE(DEFAULT_IS_EOD); + condition = "objectBrain"; + typeName = "BOOL"; + }; + }; + }; + }; + }; +}; diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index 3d2077ff1d..0ae218be25 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -16,6 +16,7 @@ class CfgPatches { #include "ACE_Settings.hpp" #include "CfgEventHandlers.hpp" +#include "Cfg3DEN.hpp" #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index eac81158f3..2240642084 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1042,5 +1042,13 @@ Таймер взрывчатки Timer de explosão + + Is EOD + Kampfmittelbeseitigung + + + Controls whether the unit is an explosive specialist. + Steuert, ob die Einheit ein Sprengstoffspezialist ist. + diff --git a/addons/inventory/XEH_preStart.sqf b/addons/inventory/XEH_preStart.sqf index ae4ce6500c..18999d638e 100644 --- a/addons/inventory/XEH_preStart.sqf +++ b/addons/inventory/XEH_preStart.sqf @@ -36,14 +36,10 @@ _grenades_ItemList = _grenades_ItemList arrayIntersect _grenades_ItemList; uiNamespace setVariable [QGVAR(Grenades_ItemList), _grenades_ItemList]; // generate list of medical items -private _medical_ItemList = []; - +private _medical_ItemList = ["FirstAidKit", "Medikit"]; { _medical_ItemList append getArray (_x >> "items"); -} forEach ( - ("true" configClasses (configFile >> QEGVAR(Medical,Actions) >> "Basic")) + - ("true" configClasses (configFile >> QEGVAR(Medical,Actions) >> "Advanced")) -); +} forEach ("true" configClasses (configFile >> QEGVAR(medical_treatment,Actions))); // remove all numbers from list _medical_ItemList = _medical_ItemList select {_x isEqualType ""}; diff --git a/addons/laserpointer/CfgJointRails.hpp b/addons/laserpointer/CfgJointRails.hpp index 7583bd03b5..da7aee71b5 100644 --- a/addons/laserpointer/CfgJointRails.hpp +++ b/addons/laserpointer/CfgJointRails.hpp @@ -6,3 +6,11 @@ class asdg_FrontSideRail: asdg_SlotInfo { ACE_acc_pointer_green_IR = 1; }; }; + +class PointerSlot_Rail: PointerSlot { + class compatibleItems { + ACE_acc_pointer_red = 1; + ACE_acc_pointer_green = 1; + ACE_acc_pointer_green_IR = 1; + }; +}; diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index c2d202f567..48d49d678c 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -3,6 +3,9 @@ [QEGVAR(medical,setUnconscious), LINKFUNC(setUnconscious)] call CBA_fnc_addEventHandler; +// For BETA/RC - debug non-default settings to rpt: +call compile preprocessFileLineNumbers QPATHTOF(dev\reportSettings.sqf); + if (!hasInterface) exitWith {}; [missionNamespace, "ACE_setCustomAimCoef", QUOTE(ADDON), { diff --git a/addons/medical/dev/reportSettings.sqf b/addons/medical/dev/reportSettings.sqf new file mode 100644 index 0000000000..97350121a3 --- /dev/null +++ b/addons/medical/dev/reportSettings.sqf @@ -0,0 +1,14 @@ +#include "\z\ace\addons\medical\script_component.hpp" +// Dumps info on all non-default medical settings + +[{ + private _medicalSettings = cba_settings_allSettings select {(_x select [0,11]) == "ace_medical"}; + INFO_1("-- Checking %1 medical Settings --",count _medicalSettings); + { + private _currentValue = missionNamespace getVariable [_x, "$"]; + private _defaultValue = (cba_settings_default getVariable [_x, []]) param [0, "#"]; + if !(_currentValue isEqualTo _defaultValue) then { + diag_log text format ["%1: [Current %2] [Default: %3]", _x, _currentValue, _defaultValue]; + }; + } forEach _medicalSettings; +}, nil, 2] call CBA_fnc_waitAndExecute; diff --git a/addons/medical/dev/watchVariable.sqf b/addons/medical/dev/watchVariable.sqf index b09a0f7144..0d02a74e19 100644 --- a/addons/medical/dev/watchVariable.sqf +++ b/addons/medical/dev/watchVariable.sqf @@ -61,7 +61,7 @@ GVAR(dev_watchVariableRunning) = true; // Damage: private _damage = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]]; private _limping = if (_unit getVariable [QEGVAR(medical,isLimping), false]) then {"[ Limping ]"} else {""}; - _return pushBack format ["Damage: [H: %1] [B: %2] %3", (_damage select 0) toFixed 2, (_damage select 1) toFixed 2]; + _return pushBack format ["BodyPartDamage: [H: %1] [B: %2]", (_damage select 0) toFixed 2, (_damage select 1) toFixed 2]; _return pushBack format ["[LA:%1] [RA: %2] [LL:%3] [RL: %4]", (_damage select 2) toFixed 2, (_damage select 3) toFixed 2, (_damage select 4) toFixed 2, (_damage select 5) toFixed 2]; _return pushBack format ["Hitpoints: [HHed:%1] [HBod: %2]", (_unit getHitPointDamage "HitHead") toFixed 2, (_unit getHitPointDamage "HitBody") toFixed 2]; diff --git a/addons/medical/functions/fnc_addDamageToUnit.sqf b/addons/medical/functions/fnc_addDamageToUnit.sqf index cde34b31d6..4e2561438e 100644 --- a/addons/medical/functions/fnc_addDamageToUnit.sqf +++ b/addons/medical/functions/fnc_addDamageToUnit.sqf @@ -25,10 +25,12 @@ params [["_unit", objNull, [objNull]], ["_damageToAdd", -1, [0]], ["_bodyPart", "", [""]], ["_typeOfDamage", "", [""]], ["_instigator", objNull, [objNull]]]; TRACE_5("addDamageToUnit",_unit,_damageToAdd,_bodyPart,_typeOfDamage,_instigator); -private _bodyPartIndex = ALL_BODY_PARTS find (toLower _bodyPart); -if (isNull _unit || {!local _unit} || {!alive _unit}) exitWith {ERROR_1("addDamageToUnit - badUnit %1", _this); false}; -if (_damageToAdd < 0) exitWith {ERROR_1("addDamageToUnit - bad damage %1", _this); false}; +_bodyPart = toLower _bodyPart; +private _bodyPartIndex = ALL_BODY_PARTS find _bodyPart; +if (_bodyPartIndex < 0) then { _bodyPartIndex = ALL_SELECTIONS find _bodyPart; }; // 2nd attempt with selection names ("hand_l", "hand_r", "leg_l", "leg_r") if (_bodyPartIndex < 0) exitWith {ERROR_1("addDamageToUnit - bad selection %1", _this); false}; +if (isNull _unit || {!local _unit} || {!alive _unit}) exitWith {ERROR_2("addDamageToUnit - badUnit %1 [local %2]", _this, local _unit); false}; +if (_damageToAdd < 0) exitWith {ERROR_1("addDamageToUnit - bad damage %1", _this); false}; // Extension is case sensitive and expects this format (different from ALL_BODY_PARTS) _bodyPart = ["Head", "Body", "LeftArm", "RightArm", "LeftLeg", "RightLeg"] select _bodyPartIndex; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 39bcf9b56a..762188b924 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -47,21 +47,17 @@ Mancando - Limp when unit has leg wounds...(todo) - Хромота, когда юнит имеет ранения ног... - 足を負傷時に引きずって歩くようにします・・・(TODO) - Une unité boite si elle est blessée à la jambe... (TODO) - Mancar quando a unidade possuir ferimentos nas pernas... (TODO) + Controls whether open or bandaged wounds cause a person to limp. - Limp on open wounds + Limp on Open Wounds Хромота при открытых ранах 創傷開放時に跛行 Boiter si plaies ouvertes Mancar se possuir feridas abertas - Limp on open or bandaged wounds + Limp on Open or Bandaged Wounds Хромота при открытых или забинтованых ранах 負傷時は引きずって歩くようにします Boiter si plaies ouvertes ou pansées @@ -75,21 +71,17 @@ Fraturas - Limp fractures... (todo) - Хромота при переломах... - 骨折時は引きずって歩くようにします・・・ (TODO) - Une unité boite en cas de fracture... (TODO) - Mancar Fraturas (TODO) + Controls the effect of using splints to treat fractures.\nWhen disabled, injuries will not cause fractures. - Splints fully heal fractures + Splints Fully Heal Fractures Шины полностью лечат перелом 添え木で骨折完治 Les attelles guérissent complètement les fractures Tala cura fraturas completamente - Splints heal (but cannot sprint) + Splints Heal, but Cannot Sprint Шины вылечивают, но не дают бегать 添え木で治療しますが、走れません Les attelles guérissent les fractures, mais empêchent de courir diff --git a/addons/medical_damage/ACE_Medical_Injuries.hpp b/addons/medical_damage/ACE_Medical_Injuries.hpp index 4dfc066993..fd03981398 100644 --- a/addons/medical_damage/ACE_Medical_Injuries.hpp +++ b/addons/medical_damage/ACE_Medical_Injuries.hpp @@ -47,7 +47,6 @@ class ACE_Medical_Injuries { }; // Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch. class Laceration { - selections[] = {"All"}; causes[] = {"vehiclecrash", "collision", "punch"}; bleeding = 0.05; pain = 0.2; @@ -94,11 +93,11 @@ class ACE_Medical_Injuries { selectionSpecific = 0; }; class vehiclecrash { - thresholds[] = {{0.5, 5}, {0.3, 2}, {0.05, 1}}; + thresholds[] = {{1.5, 3}, {1, 2}, {0.05, 1}}; // prevent subdividing wounds past FRACTURE_DAMAGE_THRESHOLD to ensure limp/fractue is triggered selectionSpecific = 0; }; class collision { - thresholds[] = {{0.5, 5}, {0.3, 2}, {0.05, 1}}; + thresholds[] = {{1.5, 3}, {1, 2}, {0.05, 1}}; // prevent subdividing wounds past FRACTURE_DAMAGE_THRESHOLD to ensure limp/fractue is triggered selectionSpecific = 0; }; class backblast { @@ -114,8 +113,8 @@ class ACE_Medical_Injuries { selectionSpecific = 1; }; class falling { - thresholds[] = {{0.6, 4}, {0.35, 2}, {0.1, 1}}; - selectionSpecific = 1; + thresholds[] = {{1.5, 3}, {1, 2}, {0.05, 1}}; // prevent subdividing wounds past FRACTURE_DAMAGE_THRESHOLD to ensure limp/fractue is triggered + selectionSpecific = 0; }; class ropeburn { thresholds[] = {{0.1, 1}}; diff --git a/addons/medical_damage/XEH_PREP.hpp b/addons/medical_damage/XEH_PREP.hpp index ad2055ccc5..7f3a5b1102 100644 --- a/addons/medical_damage/XEH_PREP.hpp +++ b/addons/medical_damage/XEH_PREP.hpp @@ -1,3 +1,4 @@ +PREP(determineIfFatal); PREP(getTypeOfDamage); PREP(handleIncapacitation); PREP(parseConfigForInjuries); diff --git a/addons/medical_damage/XEH_preInit.sqf b/addons/medical_damage/XEH_preInit.sqf index 081b0cf48b..d537236aeb 100644 --- a/addons/medical_damage/XEH_preInit.sqf +++ b/addons/medical_damage/XEH_preInit.sqf @@ -26,10 +26,10 @@ addMissionEventHandler ["Loaded",{ // }; [QEGVAR(medical,woundReceived), { - params ["_unit", "_woundedHitPoint", "_receivedDamage", "", "_ammo"]; + params ["_unit", "_woundedHitPoint", "_receivedDamage", "", "_ammo", "_damageSelectionArray"]; private _typeOfDamage = _ammo call FUNC(getTypeOfDamage); - [_unit, _woundedHitPoint, _receivedDamage, _typeOfDamage] call FUNC(woundsHandlerActive); + [_unit, _woundedHitPoint, _receivedDamage, _typeOfDamage, _damageSelectionArray] call FUNC(woundsHandlerActive); }] call CBA_fnc_addEventHandler; ADDON = true; diff --git a/addons/medical_damage/functions/fnc_determineIfFatal.sqf b/addons/medical_damage/functions/fnc_determineIfFatal.sqf new file mode 100644 index 0000000000..fc674cf75b --- /dev/null +++ b/addons/medical_damage/functions/fnc_determineIfFatal.sqf @@ -0,0 +1,62 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror, Glowbal + * Determines if damage is fatal + * + * Arguments: + * 0: The Unit + * 1: Part No + * 2: Damage Array - QGVAR(medical,bodyPartDamage) + * 3: New Damage + * + * ReturnValue: + * Was Fatal + * + * Example: + * [player, 0, 1.4, 0.7] call ace_medical_damage_fnc_determineIfFatal + * + * Public: No + */ + +#define WEIBULL_K 6.5625 +#define WEIBULL_L 0.704523 + +params ["_unit", "_part", "_bodyPartDamage", "_woundDamage"]; + +if (_part > 1) exitWith { false }; + +scopeName "main"; + +if (EGVAR(medical,fatalDamageSource) in [0, 2]) then { + // Emulate damage to vital organs - Original rewrite logic, only powerfull headshots or random torso shots + if (_part == 0 && {_woundDamage >= HEAD_DAMAGE_THRESHOLD}) exitWith { + // Fatal damage to the head is guaranteed death + TRACE_1("determineIfFatal: lethal headshot",_woundDamage); + true breakOut "main"; + }; + if (_part == 1 && {_woundDamage >= ORGAN_DAMAGE_THRESHOLD} && {random 1 < HEART_HIT_CHANCE}) exitWith { + // Fatal damage to torso has various results based on organ hit - Heart shot is lethal + TRACE_1("determineIfFatal: lethal heartshot",_woundDamage); + true breakOut "main"; + }; +}; +if (EGVAR(medical,fatalDamageSource) in [1, 2]) then { + // Sum of trauma to critical areas can be fatal (e.g. many small hits) + private _damageThreshold = if (isPlayer _unit) then { EGVAR(medical,playerDamageThreshold) } else { EGVAR(medical,AIDamageThreshold) }; + private _headThreshhold = 1.25 * _damageThreshold; + private _bodyThreshhold = 1.5 * _damageThreshold; + + _bodyPartDamage params ["_headDamage", "_bodyDamage"]; + + private _vitalDamage = ((_headDamage - _headThreshhold) max 0) + ((_bodyDamage - _bodyThreshhold) max 0); + private _chanceFatal = 1 - exp -((_vitalDamage/WEIBULL_L)^WEIBULL_K); + TRACE_3("",_bodyPartDamage,_vitalDamage,_chanceFatal); + + if (_chanceFatal > random 1) exitWith { + TRACE_1("determineIfFatal: lethal trauma",_woundDamage); + true breakOut "main"; + }; +}; + +false + diff --git a/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf b/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf index 89da4bca4e..848c78c893 100644 --- a/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf +++ b/addons/medical_damage/functions/fnc_parseConfigForInjuries.sqf @@ -76,6 +76,7 @@ private _selectionSpecificDefault = getNumber (_damageTypesConfig >> "selectionS GVAR(allDamageTypesData) setVariable [_className, [_thresholds, _selectionSpecific > 0, _woundTypes]]; + /* // extension loading private _minDamageThresholds = (_thresholds apply {str (_x select 0)}) joinString ":"; private _amountThresholds = (_thresholds apply {str (_x select 1)}) joinString ":"; @@ -93,8 +94,10 @@ private _selectionSpecificDefault = getNumber (_damageTypesConfig >> "selectionS // private _extensionRes = "ace_medical" callExtension _extensionArgs; // TRACE_1("",_extensionRes); + */ } forEach configProperties [_damageTypesConfig, "isClass _x"]; +/* // extension loading { _x params ["_classID", "_selections", "_bleedingRate", "_pain", "_damageExtrema", "_causes", "_displayName"]; @@ -128,3 +131,4 @@ private _selectionSpecificDefault = getNumber (_damageTypesConfig >> "selectionS } forEach GVAR(woundsData); // "ace_medical" callExtension "ConfigComplete"; +*/ diff --git a/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf b/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf index f7ec2dd540..ee07f8508e 100644 --- a/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf @@ -8,18 +8,19 @@ * 1: Name Of Body Part * 2: Amount Of Damage * 3: Type of the damage done + * 4: Weighted array of damaged selections * * Return Value: * None * * Example: - * [player, "Body", 0.5, "bullet"] call ace_medical_damage_fnc_woundsHandlerSQF + * [player, "Body", 0.5, "bullet", [1, 1]] call ace_medical_damage_fnc_woundsHandlerSQF * * Public: No */ -params ["_unit", "_bodyPart", "_damage", "_typeOfDamage"]; -TRACE_4("woundsHandlerSQF",_unit,_bodyPart,_damage,_typeOfDamage); +params ["_unit", "_bodyPart", "_damage", "_typeOfDamage", "_damageSelectionArray"]; +TRACE_5("woundsHandlerSQF",_unit,_bodyPart,_damage,_typeOfDamage,_damageSelectionArray); // Convert the selectionName to a number and ensure it is a valid selection. private _bodyPartN = ALL_BODY_PARTS find toLower _bodyPart; @@ -47,7 +48,7 @@ private _allPossibleInjuries = []; // Check if the damage is higher as the min damage for the specific injury if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then { // Check if the injury can be applied to the given selection name - if ("All" in _selections || {_bodyPart in _selections}) then { // @todo, this is case sensitive! + // if ("All" in _selections || {_bodyPart in _selections}) then { // @todo, this is case sensitive! [we have no injuries that use this, disabled for now] // Find the wound which has the highest minimal damage, so we can use this later on for adding the correct injuries if (_minDamage > _highestPossibleDamage) then { @@ -57,7 +58,7 @@ private _allPossibleInjuries = []; // Store the valid possible injury for the damage type, damage amount and selection _allPossibleInjuries pushBack _x; - }; + // }; }; } forEach _woundTypes; @@ -87,7 +88,7 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra _oldInjury params ["_woundClassIDToAdd", "", "_injuryBleedingRate", "_injuryPain", "", "", "", "_causeLimping", "_causeFracture"]; - private _bodyPartNToAdd = [floor random 6, _bodyPartN] select _isSelectionSpecific; // 6 == count ALL_BODY_PARTS + private _bodyPartNToAdd = if (_isSelectionSpecific) then {_bodyPartN} else {selectRandomWeighted _damageSelectionArray}; _bodyPartDamage set [_bodyPartNToAdd, (_bodyPartDamage select _bodyPartNToAdd) + _woundDamage]; _bodyPartVisParams set [[1,2,3,3,4,4] select _bodyPartNToAdd, true]; // Mark the body part index needs updating @@ -120,26 +121,16 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra if (_bodyPartNToAdd == 0 || {_bodyPartNToAdd == 1 && {_woundDamage > PENETRATION_THRESHOLD}}) then { _critialDamage = true; }; + if ([_unit, _bodyPartNToAdd, _bodyPartDamage, _woundDamage] call FUNC(determineIfFatal)) then { + TRACE_1("determineIfFatal returned true",_woundDamage); + [QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent; + }; #ifdef DEBUG_MODE_FULL systemChat format["%1, damage: %2, peneration: %3, bleeding: %4, pain: %5", _bodyPart, _woundDamage toFixed 2, _woundDamage > PENETRATION_THRESHOLD, _bleeding toFixed 3, _pain toFixed 3]; #endif - // Emulate damage to vital organs switch (true) do { - // Fatal damage to the head is guaranteed death - case (_bodyPartNToAdd == 0 && {_woundDamage >= HEAD_DAMAGE_THRESHOLD}): { - TRACE_1("lethal headshot",_woundDamage toFixed 2); - [QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent; - }; - // Fatal damage to torso has various results based on organ hit - case (_bodyPartNToAdd == 1 && {_woundDamage >= ORGAN_DAMAGE_THRESHOLD}): { - // Heart shot is lethal - if (random 1 < HEART_HIT_CHANCE) then { - TRACE_1("lethal heartshot",_woundDamage toFixed 2); - [QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent; - }; - }; case (_causeFracture && {EGVAR(medical,fractures) > 0} && {_bodyPartNToAdd > 1} && {_woundDamage > FRACTURE_DAMAGE_THRESHOLD}): { TRACE_1("limb fracture",_bodyPartNToAdd); private _fractures = GET_FRACTURES(_unit); diff --git a/addons/medical_damage/initSettings.sqf b/addons/medical_damage/initSettings.sqf index 25a153739c..e508f74621 100644 --- a/addons/medical_damage/initSettings.sqf +++ b/addons/medical_damage/initSettings.sqf @@ -1,3 +1,12 @@ +[ + QEGVAR(medical,fatalDamageSource), + "LIST", + [LSTRING(fatalDamageSource_DisplayName), LSTRING(fatalDamageSource_Description)], + [ELSTRING(medical,Category)], + [[0, 1, 2], [LSTRING(fatalDamageSource_vitalShotsOnly), LSTRING(fatalDamageSource_trauma), LSTRING(fatalDamageSource_both)], 0], + true +] call CBA_settings_fnc_init; + [ QEGVAR(medical,playerDamageThreshold), "SLIDER", diff --git a/addons/medical_damage/script_component.hpp b/addons/medical_damage/script_component.hpp index c567aeeae7..272dc7d565 100644 --- a/addons/medical_damage/script_component.hpp +++ b/addons/medical_damage/script_component.hpp @@ -4,7 +4,7 @@ // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE -//#define ENABLE_PERFORMANCE_COUNTERS +// #define ENABLE_PERFORMANCE_COUNTERS #ifdef DEBUG_ENABLED_MEDICAL_DAMAGE #define DEBUG_MODE_FULL diff --git a/addons/medical_damage/stringtable.xml b/addons/medical_damage/stringtable.xml index cc1ba5b6f6..6ac2818879 100644 --- a/addons/medical_damage/stringtable.xml +++ b/addons/medical_damage/stringtable.xml @@ -477,5 +477,20 @@ 大きな刺し傷 대형 관통상 + + Fatal Damage Source + + + Determines what damage can be fatal + + + Only large hits to vital organs + + + Sum of trauma + + + Either + diff --git a/addons/medical_engine/functions/fnc_handleDamage.sqf b/addons/medical_engine/functions/fnc_handleDamage.sqf index d810960f4d..000c90b911 100644 --- a/addons/medical_engine/functions/fnc_handleDamage.sqf +++ b/addons/medical_engine/functions/fnc_handleDamage.sqf @@ -80,6 +80,12 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { ]; TRACE_2("incoming",_allDamages,_damageStructural); + // represents all incoming damage for selecting a non-selectionSpecific wound location, (used for selectRandomWeighted [value1,weight1,value2....]) + private _damageSelectionArray = [ + HITPOINT_INDEX_HEAD, _damageHead, HITPOINT_INDEX_BODY, _damageBody, HITPOINT_INDEX_LARM, _damageLeftArm, + HITPOINT_INDEX_RARM, _damageRightArm, HITPOINT_INDEX_LLEG, _damageLeftLeg, HITPOINT_INDEX_RLEG, _damageRightLeg + ]; + _allDamages sort false; (_allDamages select 0) params ["_receivedDamage", "", "_woundedHitPoint"]; if (_damageHead >= HEAD_DAMAGE_THRESHOLD) then { @@ -92,6 +98,7 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { if (_receivedDamage == 0) then { _receivedDamage = _damageStructural; _woundedHitPoint = "Body"; + _damageSelectionArray = [1, 1]; // sum of weights would be 0 }; // Environmental damage sources all have empty ammo string @@ -100,7 +107,7 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { // Any collision with terrain/vehicle/object has a shooter // Check this first because burning can happen at any velocity if !(isNull _shooter) then { - _ammo = "#collision"; + _ammo = "#collision"; // non-selectionSpecific so only _damageSelectionArray matters /* If shooter != unit then they hit unit, otherwise it could be: @@ -110,10 +117,11 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { Assume fall damage for downward velocity because it's most common */ if (_shooter == _unit && {(velocity _unit select 2) < -2}) then { - _woundedHitPoint = selectRandom ["RightLeg", "LeftLeg"]; + _ammo = "#falling"; // non-selectionSpecific so only _damageSelectionArray matters + _damageSelectionArray = [4, 1, 5, 1]; // selectRandom ["RightLeg", "LeftLeg"]; TRACE_5("Fall",_unit,_shooter,_instigator,_damage,_receivedDamage); } else { - _woundedHitPoint = selectRandom ["RightArm", "LeftArm", "RightLeg", "LeftLeg"]; + _damageSelectionArray = [2, 1, 3, 1, 4, 1, 5, 1]; // selectRandom ["RightArm", "LeftArm", "RightLeg", "LeftLeg"]; TRACE_5("Collision",_unit,_shooter,_instigator,_damage,_receivedDamage); }; @@ -122,12 +130,16 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { // Higher momentum results in higher chance for head to be hit for more lethality if (_receivedDamage > 0.35) then { private _headHitWeight = (_receivedDamage / 2) min 1; - _woundedHitPoint = selectRandomWeighted ["Body", (1 - _headHitWeight), "Head", _headHitWeight]; + if (_recievedDamage < 0.6) then { + _damageSelectionArray append [0, (1 - _headHitWeight), 1, _headHitWeight]; + } else { + _damageSelectionArray = [0, (1 - _headHitWeight), 1, _headHitWeight]; + } }; } else { // Anything else is almost guaranteed to be fire damage - _woundedHitPoint = selectRandom ["LeftLeg", "RightLeg", "Body"]; - _ammo = "#unknown"; + _damageSelectionArray = [1, 1, 4, 1, 5, 1]; // selectRandom ["Body", "LeftLeg", "RightLeg"]; + _ammo = "#unknown"; // non-selectionSpecific so only _damageSelectionArray matters // Fire damage can occur as lots of minor damage events // Combine these until significant enough to wound @@ -145,8 +157,8 @@ if (_hitPoint isEqualTo "ace_hdbracket") exitWith { // No wounds for minor damage if (_receivedDamage > 1E-3) then { - [QEGVAR(medical,woundReceived), [_unit, _woundedHitPoint, _receivedDamage, _shooter, _ammo]] call CBA_fnc_localEvent; - TRACE_2("received",_receivedDamage,_woundedHitPoint); + TRACE_3("received",_receivedDamage,_woundedHitPoint,_damageSelectionArray); + [QEGVAR(medical,woundReceived), [_unit, _woundedHitPoint, _receivedDamage, _shooter, _ammo, _damageSelectionArray]] call CBA_fnc_localEvent; }; // Clear stored damages otherwise they will influence future damage events @@ -169,7 +181,7 @@ if ( {getOxygenRemaining _unit <= 0.5} && {_damage isEqualTo (_oldDamage + 0.005)} ) exitWith { - [QEGVAR(medical,woundReceived), [_unit, "Body", _newDamage, _unit, "#drowning"]] call CBA_fnc_localEvent; + [QEGVAR(medical,woundReceived), [_unit, "Body", _newDamage, _unit, "#drowning", [HITPOINT_INDEX_BODY, 1]]] call CBA_fnc_localEvent; TRACE_5("Drowning",_unit,_shooter,_instigator,_damage,_newDamage); 0 @@ -185,7 +197,11 @@ if ( {vectorMagnitude (velocity _vehicle) > 5} // todo: no way to detect if stationary and another vehicle hits you ) exitWith { - [QEGVAR(medical,woundReceived), [_unit, "Body", _newDamage, _unit, "#vehiclecrash"]] call CBA_fnc_localEvent; + private _damageSelectionArray = [ + HITPOINT_INDEX_HEAD, 1, HITPOINT_INDEX_BODY, 1, HITPOINT_INDEX_LARM, 1, + HITPOINT_INDEX_RARM, 1, HITPOINT_INDEX_LLEG, 1, HITPOINT_INDEX_RLEG, 1 + ]; + [QEGVAR(medical,woundReceived), [_unit, "Body", _newDamage, _unit, "#vehiclecrash", _damageSelectionArray]] call CBA_fnc_localEvent; TRACE_5("Crash",_unit,_shooter,_instigator,_damage,_newDamage); 0 diff --git a/addons/medical_engine/script_macros_medical.hpp b/addons/medical_engine/script_macros_medical.hpp index 103a28cbec..7f50866f0e 100644 --- a/addons/medical_engine/script_macros_medical.hpp +++ b/addons/medical_engine/script_macros_medical.hpp @@ -6,6 +6,13 @@ #define ALL_SELECTIONS ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"] #define ALL_HITPOINTS ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] +#define HITPOINT_INDEX_HEAD 0 +#define HITPOINT_INDEX_BODY 1 +#define HITPOINT_INDEX_LARM 2 +#define HITPOINT_INDEX_RARM 3 +#define HITPOINT_INDEX_LLEG 4 +#define HITPOINT_INDEX_RLEG 5 + // Damage threshold above which fatal organ damage can occur #define HEAD_DAMAGE_THRESHOLD 1 #define ORGAN_DAMAGE_THRESHOLD 0.6 diff --git a/addons/medical_feedback/CfgSounds.hpp b/addons/medical_feedback/CfgSounds.hpp index be641ef27f..6c390e1f7a 100644 --- a/addons/medical_feedback/CfgSounds.hpp +++ b/addons/medical_feedback/CfgSounds.hpp @@ -1,4 +1,5 @@ class CfgSounds { + // Heartbeats ------------------------------------------------------------- class ACE_heartbeat_fast_1 { name = "ACE_heartbeat_fast_1"; sound[] = {QPATHTOF(sounds\fast_1.wav), "db+1", 1}; @@ -34,6 +35,8 @@ class CfgSounds { sound[] = {QPATHTOF(sounds\slow_2.wav), "db+1", 1}; titles[] = {}; }; + + // Fractures -------------------------------------------------------------- class ACE_fracture_1 { name = "ACE_fracture_1"; sound[] = {QPATHTOF(sounds\fracture_1.wav), "db+1", 1}; @@ -54,4 +57,2204 @@ class CfgSounds { sound[] = {QPATHTOF(sounds\fracture_4.wav), "db+1", 1}; titles[] = {}; }; + + // Moans ------------------------------------------------------------------ + class ACE_moan_Male08ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_6 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_7 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_7", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_low_8 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_8", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_6 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_7 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_7", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_mid_8 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_8", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_6 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_7 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_7", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male08ENG_high_8 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_8", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_6 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_7 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_7", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_low_8 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_8", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_6 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_7 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_7", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_mid_8 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_8", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_6 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_7 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_7", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06ENG_high_8 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_8", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male09ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male07ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03GRE_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENGB_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01ENGB_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male01GRE_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male02GRE_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male03ENGB_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05GRE_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male06GRE_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male04GRE_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENGB_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_low_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_low_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_low_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_low_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_low_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_mid_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_mid_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_mid_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_mid_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_mid_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_high_1 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_high_2 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_high_3 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_high_4 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_moan_Male05ENG_high_5 { + sound[] = {"A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_5", "db+1", 1}; + titles[] = {}; + }; + + // Screams ---------------------------------------------------------------- + class ACE_hit_Male08ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Low_hit_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Low_hit_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Low_hit_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Low_hit_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Low_hit_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Mid_hit_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Mid_hit_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Mid_hit_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Mid_hit_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Max_hit_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Max_hit_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Max_hit_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Max_hit_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male08ENG_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P01\Max_hit_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Low_hit_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Low_hit_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Low_hit_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Low_hit_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Low_hit_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_low_6 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Low_hit_6", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Mid_hit_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Mid_hit_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Mid_hit_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Mid_hit_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Max_hit_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Max_hit_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Max_hit_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P02\Max_hit_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male09ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P03\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male07ENG_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P04\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03GRE_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P05\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENGB_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P06\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01ENGB_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P07\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male01GRE_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P08\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02ENG_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P09\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male02GRE_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P10\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENG_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P11\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male03ENGB_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P12\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04ENG_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P13\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05GRE_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P14\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male06GRE_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P15\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male04GRE_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P16\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENGB_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P17\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_low_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Low_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_low_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Low_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_low_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Low_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_low_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Low_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_low_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Low_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_mid_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Mid_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_mid_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Mid_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_mid_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Mid_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_mid_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Mid_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_mid_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Mid_5", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_high_1 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Max_1", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_high_2 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Max_2", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_high_3 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Max_3", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_high_4 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Max_4", "db+1", 1}; + titles[] = {}; + }; + class ACE_hit_Male05ENG_high_5 { + sound[] = {"A3\sounds_f\characters\human-sfx\P18\Hit_Max_5", "db+1", 1}; + titles[] = {}; + }; }; diff --git a/addons/medical_feedback/XEH_postInit.sqf b/addons/medical_feedback/XEH_postInit.sqf index 37b2c4c2e6..2f18bc1583 100644 --- a/addons/medical_feedback/XEH_postInit.sqf +++ b/addons/medical_feedback/XEH_postInit.sqf @@ -3,6 +3,10 @@ [QEGVAR(medical,injured), { params ["_unit", "_painLevel"]; [_unit, "hit", PAIN_TO_SCREAM(_painLevel)] call FUNC(playInjuredSound); + + if (hasInterface && {_unit == ace_player}) then { + [true] call FUNC(handleEffects); + }; }] call CBA_fnc_addEventHandler; [QEGVAR(medical,moan), { @@ -10,21 +14,23 @@ [_unit, "moan", PAIN_TO_MOAN(_painLevel)] call FUNC(playInjuredSound); }] call CBA_fnc_addEventHandler; +if (!hasInterface) exitWith {}; + [QEGVAR(medical,fracture), { params ["_unit"]; - if (_unit == ACE_player) then { playSound SND_FRACTURE; }; }] call CBA_fnc_addEventHandler; -if (!hasInterface) exitWith {}; - GVAR(nextFadeIn) = 0; GVAR(heartBeatEffectRunning) = false; +GVAR(lastHeartBeatSound) = 0; +GVAR(bloodTickCounter) = 0; [false] call FUNC(initEffects); -[LINKFUNC(handleEffects), 1, []] call CBA_fnc_addPerFrameHandler; +[true] call FUNC(handleEffects); +[FUNC(handleEffects), 1, false] call CBA_fnc_addPerFrameHandler; ["ace_unconscious", { params ["_unit", "_unconscious"]; @@ -45,10 +51,11 @@ GVAR(heartBeatEffectRunning) = false; if (["acre_main"] call EFUNC(common,isModLoaded)) then { _unit setVariable ["acre_sys_core_isDisabled", _unconscious, true]; }; + // Greatly reduce player's hearing ability while unconscious (affects radio addons) [QUOTE(ADDON), VOL_UNCONSCIOUS, _unconscious] call EFUNC(common,setHearingCapability); - [_unconscious, 1] call FUNC(effectUnconscious); + [true] call FUNC(handleEffects); ["unconscious", _unconscious] call EFUNC(common,setDisableUserInputStatus); }] call CBA_fnc_addEventHandler; @@ -80,10 +87,31 @@ GVAR(heartBeatEffectRunning) = false; _new setVariable ["acre_sys_core_isDisabled", _status, true]; }; [QUOTE(ADDON), VOL_UNCONSCIOUS, _status] call EFUNC(common,setHearingCapability); - [_status, 0] call FUNC(effectUnconscious); + [true] call FUNC(handleEffects); ["unconscious", _status] call EFUNC(common,setDisableUserInputStatus); }] call CBA_fnc_addPlayerEventHandler; +// Forced say3D +[QGVAR(forceSay3D), { + params ["_unit", "_sound", "_distance"]; + + if (ACE_player distance _unit > _distance) exitWith {}; + + if (vehicle _unit == _unit) then { + // say3D waits for the previous sound to finish, so use a dummy instead + private _dummy = "#dynamicsound" createVehicleLocal [0, 0, 0]; + _dummy attachTo [_unit, [0, 0, 0], "camera"]; + _dummy say3D [_sound, _distance, 1, false]; + + [{ + detach _this; + deleteVehicle _this; + }, _dummy, 5] call CBA_fnc_waitAndExecute; + } else { + // Fallback: attachTo doesn't work within vehicles + _unit say3D [_sound, _distance, 1, false]; + }; +}] call CBA_fnc_addEventHandler; // Kill vanilla bleeding feedback effects. #ifdef DISABLE_VANILLA_DAMAGE_EFFECTS diff --git a/addons/medical_feedback/XEH_preInit.sqf b/addons/medical_feedback/XEH_preInit.sqf index 8572cef792..9361d05015 100644 --- a/addons/medical_feedback/XEH_preInit.sqf +++ b/addons/medical_feedback/XEH_preInit.sqf @@ -8,743 +8,4 @@ PREP_RECOMPILE_END; #include "initSettings.sqf" -GVAR(lastHeartBeatSound) = 0; - -// HitScream -GVAR(HitScreamNamespace) = [] call CBA_fnc_createNamespace; -GVAR(HitScreamNamespace) setVariable ["#default", "Male08ENG"]; - -GVAR(HitScreamNamespace) setVariable ["Male08ENG", [[ - ["A3\sounds_f\characters\human-sfx\P01\Low_hit_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Low_hit_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Low_hit_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Low_hit_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Low_hit_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P01\Mid_hit_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Mid_hit_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Mid_hit_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Mid_hit_4",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P01\Max_hit_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Max_hit_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Max_hit_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Max_hit_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P01\Max_hit_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male06ENG", [[ - ["A3\sounds_f\characters\human-sfx\P02\Low_hit_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Low_hit_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Low_hit_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Low_hit_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Low_hit_5",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Low_hit_6",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P02\Mid_hit_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Mid_hit_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Mid_hit_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Mid_hit_4",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P02\Max_hit_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Max_hit_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Max_hit_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P02\Max_hit_4",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male09ENG", [[ - ["A3\sounds_f\characters\human-sfx\P03\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P03\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P03\Hit_Low_3",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P03\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P03\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P03\Hit_Mid_3",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P03\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P03\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P03\Hit_Max_3",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male07ENG", [[ - ["A3\sounds_f\characters\human-sfx\P04\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P04\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P04\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P04\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male03GRE", [[ - ["A3\sounds_f\characters\human-sfx\P05\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P05\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P05\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P05\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male02ENGB", [[ - ["A3\sounds_f\characters\human-sfx\P06\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P06\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P06\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P06\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male01ENGB", [[ - ["A3\sounds_f\characters\human-sfx\P07\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P07\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P07\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P07\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male01GRE", [[ - ["A3\sounds_f\characters\human-sfx\P08\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P08\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P08\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P08\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male02ENG", [[ - ["A3\sounds_f\characters\human-sfx\P09\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P09\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P09\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P09\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male02GRE", [[ - ["A3\sounds_f\characters\human-sfx\P10\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P10\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P10\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P10\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male03ENG", [[ - ["A3\sounds_f\characters\human-sfx\P11\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P11\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P11\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P11\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male03ENGB", [[ - ["A3\sounds_f\characters\human-sfx\P12\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P12\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P12\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P12\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male04ENG", [[ - ["A3\sounds_f\characters\human-sfx\P13\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P13\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P13\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P13\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male05GRE", [[ - ["A3\sounds_f\characters\human-sfx\P14\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P14\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P14\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P14\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male06GRE", [[ - ["A3\sounds_f\characters\human-sfx\P15\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P15\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P15\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P15\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male04GRE", [[ - ["A3\sounds_f\characters\human-sfx\P16\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P16\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P16\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P16\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male05ENGB", [[ - ["A3\sounds_f\characters\human-sfx\P17\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P17\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P17\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P17\Hit_Max_5",3.1622777,1,80] -]]]; - -GVAR(HitScreamNamespace) setVariable ["Male05ENG", [[ - ["A3\sounds_f\characters\human-sfx\P18\Hit_Low_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Low_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Low_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Low_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Low_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P18\Hit_Mid_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Mid_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Mid_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Mid_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Mid_5",3.1622777,1,80] -], [ - ["A3\sounds_f\characters\human-sfx\P18\Hit_Max_1",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Max_2",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Max_3",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Max_4",3.1622777,1,80], - ["A3\sounds_f\characters\human-sfx\P18\Hit_Max_5",3.1622777,1,80] -]]]; - -// InjuredMoan -GVAR(InjuredMoanNamespace) = [] call CBA_fnc_createNamespace; -GVAR(InjuredMoanNamespace) setVariable ["#default", "Male08ENG"]; - -GVAR(InjuredMoanNamespace) setVariable ["Male08ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_5",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_6",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_7",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Low_8",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_5",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_6",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_7",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Mid_8",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_1",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_2",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_3",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_4",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_5",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_6",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_7",1.5848932,1,20], - ["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_8",1.5848932,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male06ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_5",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_6",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_7",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Low_8",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_5",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_6",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_7",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Mid_8",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_5",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_6",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_7",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P02\Soundinjured_Max_8",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male09ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P03\Soundinjured_Max_4",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male07ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P04\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male03GRE", [[ - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P05\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male02ENGB", [[ - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P06\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male01ENGB", [[ - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P07\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male01GRE", [[ - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P08\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male02ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P09\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male02GRE", [[ - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P10\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male03ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P11\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male03ENGB", [[ - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P12\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male04ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P13\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male05GRE", [[ - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P14\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male06GRE", [[ - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P15\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male04GRE", [[ - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P16\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male05ENGB", [[ - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P17\Soundinjured_Max_5",1.7782794,1,20] -]]]; - -GVAR(InjuredMoanNamespace) setVariable ["Male05ENG", [[ - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_1",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_2",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_3",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_4",1.4125376,1,10], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Low_5",1.4125376,1,10] -], [ - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_1",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_2",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_3",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_4",1.5848932,1,15], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Mid_5",1.5848932,1,15] -], [ - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_1",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_2",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_3",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_4",1.7782794,1,20], - ["A3\Sounds_F\characters\human-sfx\P18\Soundinjured_Max_5",1.7782794,1,20] -]]]; - ADDON = true; diff --git a/addons/medical_feedback/functions/fnc_effectBleeding.sqf b/addons/medical_feedback/functions/fnc_effectBleeding.sqf index cf87d2eb35..0f04ffd333 100644 --- a/addons/medical_feedback/functions/fnc_effectBleeding.sqf +++ b/addons/medical_feedback/functions/fnc_effectBleeding.sqf @@ -6,6 +6,7 @@ * Arguments: * 0: Enable effect * 1: Current bloodloss (in l/s) + * 2: Instant change (optional, default false) * * Return Value: * None @@ -16,7 +17,7 @@ * Public: No */ -params ["_enable", "_bloodloss"]; +params ["_enable", "_bloodloss", ["_instant", false]]; if (isNull findDisplay 46) exitWith {}; private _controls = uiNamespace getVariable [QGVAR(bloodControls), [controlNull, controlNull]]; @@ -54,10 +55,7 @@ if (isNull _blood1) then { private _fade = linearConversion [0, 0.002, _bloodloss, 1, 0, true]; -private _switchBloodFadeInfo = missionNamespace getVariable [QGVAR(switchBloodFadeInfo), [0, 0]]; -_switchBloodFadeInfo params ["_tickCounter", "_lastBloodloss"]; - -if (_tickCounter == 2) then { +if (GVAR(bloodTickCounter) == 2 || _instant) then { if (ctrlFade _blood1 > ctrlFade _blood2) then { _blood1 ctrlSetFade _fade; _blood2 ctrlSetFade 1; @@ -66,16 +64,15 @@ if (_tickCounter == 2) then { _blood2 ctrlSetFade _fade; }; - _blood1 ctrlCommit 3; - _blood2 ctrlCommit 3; + if (_instant) then { + _blood1 ctrlCommit 0.3; + _blood2 ctrlCommit 0.3; + } else { + _blood1 ctrlCommit 3; + _blood2 ctrlCommit 3; + }; - GVAR(switchBloodFadeInfo) = [0, _bloodloss]; + GVAR(bloodTickCounter) = 0; } else { - GVAR(switchBloodFadeInfo) = [_tickCounter + 1, _bloodloss]; -}; - -// Speed up fade on sudden changes -if (abs (_lastBloodloss - _bloodloss) > 0.001) then { - _blood1 ctrlCommit 1; - _blood2 ctrlCommit 1; + GVAR(bloodTickCounter) = GVAR(bloodTickCounter) + 1; }; diff --git a/addons/medical_feedback/functions/fnc_effectHeartBeat.sqf b/addons/medical_feedback/functions/fnc_effectHeartBeat.sqf index 1c5c9ef968..283d3edcb6 100644 --- a/addons/medical_feedback/functions/fnc_effectHeartBeat.sqf +++ b/addons/medical_feedback/functions/fnc_effectHeartBeat.sqf @@ -34,7 +34,6 @@ switch (true) do { case (_heartRate < 60): { playSound SND_HEARBEAT_SLOW; [FUNC(effectHeartBeat), [], _waitTime] call CBA_fnc_waitAndExecute; - }; default { TRACE_1("Ending heart beat effect - normal",_heartRate); diff --git a/addons/medical_feedback/functions/fnc_effectPain.sqf b/addons/medical_feedback/functions/fnc_effectPain.sqf index 1cfa68ff1c..96f233a4b9 100644 --- a/addons/medical_feedback/functions/fnc_effectPain.sqf +++ b/addons/medical_feedback/functions/fnc_effectPain.sqf @@ -20,25 +20,41 @@ params ["_enable", "_intensity"]; if (!_enable || {_intensity == 0}) exitWith { GVAR(ppPain) ppEffectEnable false; + GVAR(ppPainBlur) ppEffectEnable false; }; GVAR(ppPain) ppEffectEnable true; +GVAR(ppPainBlur) ppEffectEnable true; // Trigger effect every 2s private _showNextTick = missionNamespace getVariable [QGVAR(showPainNextTick), true]; GVAR(showPainNextTick) = !_showNextTick; if (_showNextTick) exitWith {}; +private _blurIntensity = linearConversion [0.8, 1, _intensity, 0, 1, true]; +GVAR(ppPainBlur) ppEffectAdjust [_blurIntensity]; +GVAR(ppPainBlur) ppEffectCommit 0.1; + +if (GVAR(painEffectType) == FX_PAIN_ONLY_BASE) exitWith {}; + private _initialAdjust = []; private _delayedAdjust = []; -if (GVAR(painEffectType) == 0) then { - _intensity = linearConversion [0, 1, _intensity, 0, 0.6, true]; - _initialAdjust = [1, 1, 0, [1, 1, 1, _intensity], [1, 1, 1, 1], [0.33, 0.33, 0.33, 0], [0.59, 0.64, 0, 0, 0, 0, 4]]; - _delayedAdjust = [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 1], [0.33, 0.33, 0.33, 0], [0.59, 0.64, 0, 0, 0, 0, 4]]; -} else { - _intensity = linearConversion [0, 1, _intensity, 0, 0.008, true]; - _initialAdjust = [_intensity, _intensity, 0.3, 0.39]; - _delayedAdjust = [ 0, 0, 0.3, 0.39]; +switch (GVAR(painEffectType)) do { + case FX_PAIN_WHITE_FLASH: { + _intensity = linearConversion [0, 1, _intensity, 0, 0.6, true]; + _initialAdjust = [1, 1, 0, [1, 1, 1, _intensity ], [1, 1, 1, 1], [0.33, 0.33, 0.33, 0], [0.55, 0.5, 0, 0, 0, 0, 4]]; + _delayedAdjust = [1, 1, 0, [1, 1, 1, _intensity * 0.3], [1, 1, 1, 1], [0.33, 0.33, 0.33, 0], [0.55, 0.5, 0, 0, 0, 0, 4]]; + }; + case FX_PAIN_PULSATING_BLUR: { + _intensity = linearConversion [0, 1, _intensity, 0, 0.008, true]; + _initialAdjust = [_intensity , _intensity , 0.15, 0.15]; + _delayedAdjust = [_intensity * 0.2, _intensity * 0.2, 0.25, 0.25]; + }; + case FX_PAIN_CHROMATIC_ABERRATION: { + _intensity = linearConversion [0, 1, _intensity, 0, 0.06, true]; + _initialAdjust = [_intensity , _intensity , true]; + _delayedAdjust = [_intensity * 0.15, _intensity * 0.15, true]; + }; }; GVAR(ppPain) ppEffectAdjust _initialAdjust; diff --git a/addons/medical_feedback/functions/fnc_handleEffects.sqf b/addons/medical_feedback/functions/fnc_handleEffects.sqf index e4e536c4f4..b065d42646 100644 --- a/addons/medical_feedback/functions/fnc_handleEffects.sqf +++ b/addons/medical_feedback/functions/fnc_handleEffects.sqf @@ -5,7 +5,7 @@ * Note: Heart beat sounds run in a different PFH - see fnc_effectHeartBeat. * * Arguments: - * None + * 0: Manual, instant update (optional, default false) * * Return Value: * None @@ -15,6 +15,7 @@ * * Public: No */ +params [["_manualUpdate", false]]; if (EGVAR(common,OldIsCamera) || {!alive ACE_player}) exitWith { [false, 0] call FUNC(effectUnconscious); @@ -44,10 +45,7 @@ if ((!GVAR(heartBeatEffectRunning)) && {_heartRate != 0} && {(_heartRate > 160) true, linearConversion [BLOOD_VOLUME_CLASS_2_HEMORRHAGE, BLOOD_VOLUME_CLASS_4_HEMORRHAGE, _bloodVolume, 0, 1, true] ] call FUNC(effectBloodVolume); -if (!_unconscious) then { - [true, _pain] call FUNC(effectPain); -}; - -[true, _bleedingStrength] call FUNC(effectBleeding); +[!_unconscious, _pain] call FUNC(effectPain); +[!_unconscious, _bleedingStrength, _manualUpdate] call FUNC(effectBleeding); END_COUNTER(handleEffects); diff --git a/addons/medical_feedback/functions/fnc_initEffects.sqf b/addons/medical_feedback/functions/fnc_initEffects.sqf index 504b77f2fc..11bee29651 100644 --- a/addons/medical_feedback/functions/fnc_initEffects.sqf +++ b/addons/medical_feedback/functions/fnc_initEffects.sqf @@ -35,27 +35,45 @@ if (!isNil QGVAR(ppPain)) then { TRACE_1("delete pain",GVAR(ppPain)); ppEffectDestroy GVAR(ppPain) }; -if (GVAR(painEffectType) == 0) then { - GVAR(ppPain) = [ - "ColorCorrections", - 13502, - [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 1], [0.33, 0.33, 0.33, 0], [0.59, 0.64, 0, 0, 0, 0, 4]] - ] call _fnc_createEffect; -} else { - GVAR(ppPain) = [ - "RadialBlur", // "Will not do anything if RADIAL BLUR is disabled in Video Options." - 13502, - [0, 0, 0.3, 0.39] +switch (GVAR(painEffectType)) do { + case FX_PAIN_WHITE_FLASH: { + GVAR(ppPain) = [ + "ColorCorrections", + 13502, + [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 1], [0.33, 0.33, 0.33, 0], [0.55, 0.5, 0, 0, 0, 0, 4]] + ] call _fnc_createEffect; + }; + case FX_PAIN_PULSATING_BLUR: { + GVAR(ppPain) = [ + "RadialBlur", // "Will not do anything if RADIAL BLUR is disabled in Video Options." + 13502, + [0, 0, 0.25, 0.25] + ] call _fnc_createEffect; + }; + case FX_PAIN_CHROMATIC_ABERRATION: { + GVAR(ppPain) = [ + "ChromAberration", + 13502, + [0, 0, false] + ] call _fnc_createEffect; + }; +}; +// Base blur on high pain +if (isNil QGVAR(ppPainBlur)) then { + GVAR(ppPainBlur) = [ + "DynamicBlur", + 813, // 135xx does not work + [0] ] call _fnc_createEffect; }; -TRACE_1("created pain",GVAR(ppPain)); +TRACE_1("created pain",GVAR(ppPain)); if (_justPain) exitWith {}; // - Unconscious -------------------------------------------------------------- GVAR(ppUnconsciousBlur) = [ "DynamicBlur", - 813, // 135xx does not work + 814, // 135xx does not work [0] ] call _fnc_createEffect; @@ -82,6 +100,6 @@ GVAR(ppIncapacitationGlare) = [ GVAR(ppIncapacitationBlur) = [ "DynamicBlur", - 814, // 135xx does not work + 815, // 135xx does not work [0] ] call _fnc_createEffect; diff --git a/addons/medical_feedback/functions/fnc_playInjuredSound.sqf b/addons/medical_feedback/functions/fnc_playInjuredSound.sqf index 98739d5b30..09c267400c 100644 --- a/addons/medical_feedback/functions/fnc_playInjuredSound.sqf +++ b/addons/medical_feedback/functions/fnc_playInjuredSound.sqf @@ -26,60 +26,43 @@ params [["_unit", objNull, [objNull]], ["_type", "hit", [""]], ["_severity", 0, if (!local _unit) exitWith { ERROR("Unit not local or null"); }; - if !(_unit call EFUNC(common,isAwake)) exitWith {}; -private _timeOut = [TIME_OUT_HIT, TIME_OUT_MOAN] select (_type == "moan"); - // Handle timeout +private _timeOut = [TIME_OUT_HIT, TIME_OUT_MOAN] select (_type == "moan"); if (_unit getVariable [QGVAR(soundTimeout) + _type, -1] > CBA_missionTime) exitWith {}; _unit setVariable [QGVAR(soundTimeout) + _type, CBA_missionTime + _timeOut]; -// Get sounds -private _soundsNamespace = NAMESPACE_NULL; - -switch (toLower _type) do { - case ("hit"): { - _soundsNamespace = GVAR(HitScreamNamespace); - }; - case ("moan"): { - _soundsNamespace = GVAR(InjuredMoanNamespace); - }; -}; - // Get units speaker private _speaker = speaker _unit; - if (_speaker == "ACE_NoVoice") then { _speaker = _unit getVariable "ace_originalSpeaker"; }; -private _sounds = _soundsNamespace getVariable _speaker; - -if (isNil "_sounds") then { - _sounds = _soundsNamespace getVariable (_soundsNamespace getVariable "#default"); +// Fallback if speaker has no associated scream/moan sound +if (isNull (configFile >> "CfgSounds" >> format ["ACE_moan_%1_low_1", _speaker])) then { + _speaker = "Male08ENG"; }; -if (isNil "_sounds") exitWith { - ERROR("No sounds for speaker and no default found"); +// Select actual sound +private _variation = ["low", "mid", "high"] select _severity; +private _distance = if (_type == "hit") then { + [50, 60, 70] select _severity; +} else { + [10, 15, 20] select _severity; }; -// Get correct sound of the speaker -_sounds = _sounds param [_severity, []]; -(selectRandom _sounds) params ["_sound", ["_volume", 1], ["_frequency", 1], ["_distance", 80]]; - -if (isNil "_sound") exitWith { - ERROR("No sound for this speaker"); +private _cfgSounds = configFile >> "CfgSounds"; +private _targetClass = format ["ACE_%1_%2_%3_", _type, _speaker, _variation]; +private _index = 1; +private _sounds = []; +while {isClass (_cfgSounds >> (_targetClass + str _index))} do { + _sounds pushBack (_cfgSounds >> (_targetClass + str _index)); + _index = _index + 1; }; +private _sound = configName selectRandom _sounds; +if (isNil "_sound") exitWith { WARNING_1("no sounds for target [%1]",_targetClass); }; -// Delete leading slash. -if (_sound select [0, 1] == "\") then { - _sound = _sound select [1]; -}; - -// Default file extension. -if (_sound find "." == -1) then { - _sound = _sound + ".wss"; -}; - -playSound3D [_sound, objNull, false, position _unit, _volume, _frequency, _distance]; +// Limit network traffic by only sending the event to players who can potentially hear it +private _targets = _unit nearEntities ["CAManBase", _distance]; +[QGVAR(forceSay3D), [_unit, _sound, _distance], _targets] call CBA_fnc_targetEvent; diff --git a/addons/medical_feedback/initSettings.sqf b/addons/medical_feedback/initSettings.sqf index 36c7dafc0c..6d0965fe9f 100644 --- a/addons/medical_feedback/initSettings.sqf +++ b/addons/medical_feedback/initSettings.sqf @@ -3,7 +3,11 @@ "LIST", [LSTRING(PainEffectType_DisplayName), LSTRING(PainEffectType_Description)], [ELSTRING(medical,Category), LSTRING(SubCategory)], - [[0, 1], [LSTRING(PainEffectType_WhiteFlashing), LSTRING(PainEffectType_PulsingBlur)], 0], + [ + [FX_PAIN_WHITE_FLASH, FX_PAIN_PULSATING_BLUR, FX_PAIN_CHROMATIC_ABERRATION, FX_PAIN_ONLY_BASE], + [LSTRING(painEffectType_whiteFlashing), LSTRING(painEffectType_pulsingBlur), LSTRING(painEffectType_chromAberration), LSTRING(painEffectType_onlyBase)], + 0 + ], false, { if (isNil QGVAR(ppPain)) exitWith { diff --git a/addons/medical_feedback/script_component.hpp b/addons/medical_feedback/script_component.hpp index dc2c3baf9c..78d72ed3da 100644 --- a/addons/medical_feedback/script_component.hpp +++ b/addons/medical_feedback/script_component.hpp @@ -37,3 +37,8 @@ #define SND_FRACTURE (selectRandom ["ACE_fracture_1", "ACE_fracture_2", "ACE_fracture_3", "ACE_fracture_4"]) #define VOL_UNCONSCIOUS 0.25 + +#define FX_PAIN_WHITE_FLASH 0 +#define FX_PAIN_PULSATING_BLUR 1 +#define FX_PAIN_CHROMATIC_ABERRATION 2 +#define FX_PAIN_ONLY_BASE 3 diff --git a/addons/medical_feedback/stringtable.xml b/addons/medical_feedback/stringtable.xml index 953d926543..d8d6a3420b 100644 --- a/addons/medical_feedback/stringtable.xml +++ b/addons/medical_feedback/stringtable.xml @@ -46,6 +46,25 @@ Pulsations floues Borrão Pulsante + + Chromatic Aberration + Chromatische Aberration + Aberracja chromatyczna + Хроматическая аберрация + Aberrazione cromatica + Aberración cromática + Aberration chromatique + Kromatikus aberráció + Chromatická aberace + Aberração cromática + 色の収差 + 색수차 + 色差 + 色差 + + + Only high pain effect + Enable Screams diff --git a/addons/medical_statemachine/Statemachine.hpp b/addons/medical_statemachine/Statemachine.hpp index efeede18dd..17a4baaf07 100644 --- a/addons/medical_statemachine/Statemachine.hpp +++ b/addons/medical_statemachine/Statemachine.hpp @@ -43,7 +43,7 @@ class ACE_Medical_StateMachine { }; class Unconscious { onState = QFUNC(handleStateUnconscious); - onStateEntered = QUOTE([ARR_2(_this,true)] call EFUNC(medical_status,setUnconscious)); + onStateEntered = QUOTE([ARR_2(_this,true)] call EFUNC(medical_status,setUnconsciousState)); class DeathAI { targetState = "Dead"; condition = QUOTE(!GVAR(AIUnconsciousness) && {!isPlayer _this}); @@ -52,7 +52,7 @@ class ACE_Medical_StateMachine { targetState = "Injured"; condition = QEFUNC(medical_status,hasStableVitals); events[] = {QEGVAR(medical,WakeUp)}; - onTransition = QUOTE([ARR_2(_this,false)] call EFUNC(medical_status,setUnconscious)); + onTransition = QUOTE([ARR_2(_this,false)] call EFUNC(medical_status,setUnconsciousState)); }; class FatalTransitions { targetState = "CardiacArrest"; diff --git a/addons/medical_statemachine/functions/fnc_enteredStateCardiacArrest.sqf b/addons/medical_statemachine/functions/fnc_enteredStateCardiacArrest.sqf index 0c5e184029..b2bcde8071 100644 --- a/addons/medical_statemachine/functions/fnc_enteredStateCardiacArrest.sqf +++ b/addons/medical_statemachine/functions/fnc_enteredStateCardiacArrest.sqf @@ -28,4 +28,4 @@ _unit setVariable [QGVAR(cardiacArrestTimeLastUpdate), CBA_missionTime]; TRACE_3("enteredStateCardiacArrest",_unit,_time,CBA_missionTime); // Update the unit status to reflect cardiac arrest -[_unit, true] call EFUNC(medical_status,setCardiacArrest); +[_unit, true] call EFUNC(medical_status,setCardiacArrestState); diff --git a/addons/medical_statemachine/functions/fnc_leftStateCardiacArrest.sqf b/addons/medical_statemachine/functions/fnc_leftStateCardiacArrest.sqf index 5b077be771..2f0793f7c7 100644 --- a/addons/medical_statemachine/functions/fnc_leftStateCardiacArrest.sqf +++ b/addons/medical_statemachine/functions/fnc_leftStateCardiacArrest.sqf @@ -22,4 +22,4 @@ TRACE_1("leftStateCardiacArrest",_unit); _unit setVariable [QGVAR(cardiacArrestTimeLeft), nil]; _unit setVariable [QGVAR(cardiacArrestTimeLastUpdate), nil]; -[_unit, false] call EFUNC(medical_status,setCardiacArrest); +[_unit, false] call EFUNC(medical_status,setCardiacArrestState); diff --git a/addons/medical_statemachine/functions/fnc_localityChangedEH.sqf b/addons/medical_statemachine/functions/fnc_localityChangedEH.sqf index e76784a939..9e5fb3c9b5 100644 --- a/addons/medical_statemachine/functions/fnc_localityChangedEH.sqf +++ b/addons/medical_statemachine/functions/fnc_localityChangedEH.sqf @@ -29,14 +29,14 @@ if (_isLocal) then { switch (true) do { case (IN_CRDC_ARRST(_unit)): { if (_currentState == "CardiacArrest") exitWith {}; - _unit setVariable [VAR_CRDC_ARRST, false]; // force reset vars so setCardiacArrest can run (enteredStateCardiacArrest will also be called) + _unit setVariable [VAR_CRDC_ARRST, false]; // force reset vars so setCardiacArrestState can run (enteredStateCardiacArrest will also be called) _unit setVariable [VAR_UNCON, false]; TRACE_1("manually changing state to CardiacArrest",_currentState); [_unit, EGVAR(medical,STATE_MACHINE), _currentState, "CardiacArrest", {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition; }; case (IS_UNCONSCIOUS(_unit)): { if (_currentState == "Unconscious") exitWith {}; - _unit setVariable [VAR_UNCON, false]; // force reset var so ace_medical_status_fnc_setUnconscious can run + _unit setVariable [VAR_UNCON, false]; // force reset var so ace_medical_status_fnc_setUnconsciousState can run TRACE_1("manually changing state to Unconscious",_currentState); [_unit, EGVAR(medical,STATE_MACHINE), _currentState, "Unconscious", {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition; }; diff --git a/addons/medical_status/XEH_PREP.hpp b/addons/medical_status/XEH_PREP.hpp index 5d5f2f464c..11fae9e2e6 100644 --- a/addons/medical_status/XEH_PREP.hpp +++ b/addons/medical_status/XEH_PREP.hpp @@ -11,7 +11,7 @@ PREP(initUnit); PREP(isBeingCarried); PREP(isBeingDragged); PREP(isInStableCondition); -PREP(setCardiacArrest); +PREP(setCardiacArrestState); PREP(setDead); -PREP(setUnconscious); +PREP(setUnconsciousState); PREP(updateWoundBloodLoss); diff --git a/addons/medical_status/functions/fnc_setCardiacArrest.sqf b/addons/medical_status/functions/fnc_setCardiacArrestState.sqf similarity index 84% rename from addons/medical_status/functions/fnc_setCardiacArrest.sqf rename to addons/medical_status/functions/fnc_setCardiacArrestState.sqf index e79d09d28b..2dd54c9c4d 100644 --- a/addons/medical_status/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical_status/functions/fnc_setCardiacArrestState.sqf @@ -13,13 +13,13 @@ * None * * Example: - * [player, true] call ace_medical_status_fnc_setCardiacArrest + * [player, true] call ace_medical_status_fnc_setCardiacArrestState * * Public: No */ params ["_unit", "_active"]; -TRACE_2("setCardiacArrest",_unit,_active); +TRACE_2("setCardiacArrestState",_unit,_active); // No change to make if (_active isEqualTo IN_CRDC_ARRST(_unit)) exitWith { TRACE_2("no change",_active,IN_CRDC_ARRST(_unit)); }; @@ -29,6 +29,6 @@ _unit setVariable [VAR_CRDC_ARRST, _active, true]; _unit setVariable [VAR_HEART_RATE, [40, 0] select _active, true]; // Cardiac arrest is an extension of unconsciousness -[_unit, _active] call FUNC(setUnconscious); +[_unit, _active] call FUNC(setUnconsciousState); ["ace_cardiacArrest", [_unit, _active]] call CBA_fnc_localEvent; diff --git a/addons/medical_status/functions/fnc_setUnconscious.sqf b/addons/medical_status/functions/fnc_setUnconsciousState.sqf similarity index 94% rename from addons/medical_status/functions/fnc_setUnconscious.sqf rename to addons/medical_status/functions/fnc_setUnconsciousState.sqf index ca53f85a88..88a37927d9 100644 --- a/addons/medical_status/functions/fnc_setUnconscious.sqf +++ b/addons/medical_status/functions/fnc_setUnconsciousState.sqf @@ -12,13 +12,13 @@ * Success * * Example: - * [player, true] call ace_medical_status_fnc_setUnconscious + * [player, true] call ace_medical_status_fnc_setUnconsciousState * * Public: No */ params ["_unit", "_active"]; -TRACE_2("setUnconscious",_unit,_active); +TRACE_2("setUnconsciousState",_unit,_active); // No change to make if (_active isEqualTo IS_UNCONSCIOUS(_unit)) exitWith { TRACE_2("no change",_active,IS_UNCONSCIOUS(_unit)); }; diff --git a/addons/medical_treatment/ACE_Medical_Treatment.hpp b/addons/medical_treatment/ACE_Medical_Treatment.hpp index 307afb084c..1c357ec564 100644 --- a/addons/medical_treatment/ACE_Medical_Treatment.hpp +++ b/addons/medical_treatment/ACE_Medical_Treatment.hpp @@ -605,16 +605,6 @@ class ADDON { maxDose = 6; incompatibleMedication[] = {}; }; - class Atropine { - painReduce = 0; - hrIncreaseLow[] = {-2, -5}; - hrIncreaseNormal[] = {-10, -15}; - hrIncreaseHigh[] = {-5, -20}; - timeInSystem = 120; - timeTillMaxEffect = 15; - maxDose = 6; - incompatibleMedication[] = {}; - }; class PainKillers { painReduce = 0.1; timeInSystem = 600; diff --git a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp index 950d1a2e29..74f02397c6 100644 --- a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp +++ b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp @@ -130,13 +130,6 @@ class GVAR(actions) { items[] = {"ACE_adenosine"}; litter[] = {{"ACE_MedicalLitter_adenosine"}}; }; - class Atropine: Morphine { - displayName = CSTRING(Inject_Atropine); - displayNameProgress = CSTRING(Injecting_Atropine); - condition = QGVAR(advancedMedication); - items[] = {"ACE_atropine"}; - litter[] = {{"ACE_MedicalLitter_atropine"}}; - }; class Epinephrine: Morphine { displayName = CSTRING(Inject_Epinephrine); displayNameProgress = CSTRING(Injecting_Epinephrine); diff --git a/addons/medical_treatment/CfgReplacementItems.hpp b/addons/medical_treatment/CfgReplacementItems.hpp index 295935e055..16a45d01cc 100644 --- a/addons/medical_treatment/CfgReplacementItems.hpp +++ b/addons/medical_treatment/CfgReplacementItems.hpp @@ -1,11 +1,14 @@ +// This config accepts both item type numbers and item class names +// Item type numbers need the prefix ItemType_, so for example ItemType_401 +// Class names need no special prefix class EGVAR(medical,replacementItems) { - FirstAidKit[] = { + DOUBLES(ItemType,TYPE_FIRST_AID_KIT)[] = { {"ACE_fieldDressing", 1}, {"ACE_packingBandage", 1}, {"ACE_morphine", 1}, {"ACE_tourniquet", 1} }; - Medikit[] = { + DOUBLES(ItemType,TYPE_MEDIKIT)[] = { {"ACE_fieldDressing", 1}, {"ACE_packingBandage", 2}, {"ACE_epinephrine", 1}, @@ -14,5 +17,7 @@ class EGVAR(medical,replacementItems) { {"ACE_tourniquet", 1}, {"ACE_splint", 2} }; - // todo: add GM medical items + ACE_atropine[] = { + {"ACE_adenosine", 1} + }; }; diff --git a/addons/medical_treatment/CfgVehicles.hpp b/addons/medical_treatment/CfgVehicles.hpp index d7e0ed50d3..d43c954da4 100644 --- a/addons/medical_treatment/CfgVehicles.hpp +++ b/addons/medical_treatment/CfgVehicles.hpp @@ -151,8 +151,8 @@ class CfgVehicles { }; }; class ACE_atropineItem: Item_Base_F { - scope = 2; - scopeCurator = 2; + scope = 1; + scopeCurator = 1; displayName = CSTRING(Atropine_Display); author = ECSTRING(common,ACETeam); vehicleClass = "Items"; @@ -308,7 +308,6 @@ class CfgVehicles { MACRO_ADDITEM(ACE_splint,15); MACRO_ADDITEM(ACE_morphine,15); MACRO_ADDITEM(ACE_adenosine,15); - MACRO_ADDITEM(ACE_atropine,15); MACRO_ADDITEM(ACE_epinephrine,15); MACRO_ADDITEM(ACE_plasmaIV,7); MACRO_ADDITEM(ACE_plasmaIV_500,7); diff --git a/addons/medical_treatment/CfgWeapons.hpp b/addons/medical_treatment/CfgWeapons.hpp index afbf3faa4a..3e90457c8b 100644 --- a/addons/medical_treatment/CfgWeapons.hpp +++ b/addons/medical_treatment/CfgWeapons.hpp @@ -28,7 +28,7 @@ class CfgWeapons { descriptionShort = CSTRING(Bandage_Basic_Desc_Short); descriptionUse = CSTRING(Bandage_Basic_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_packingBandage: ACE_ItemCore { @@ -40,7 +40,7 @@ class CfgWeapons { descriptionShort = CSTRING(Packing_Bandage_Desc_Short); descriptionUse = CSTRING(Packing_Bandage_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_elasticBandage: ACE_ItemCore { @@ -52,7 +52,7 @@ class CfgWeapons { descriptionShort = CSTRING(Bandage_Elastic_Desc_Short); descriptionUse = CSTRING(Bandage_Elastic_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_tourniquet: ACE_ItemCore { @@ -64,7 +64,7 @@ class CfgWeapons { descriptionShort = CSTRING(Tourniquet_Desc_Short); descriptionUse = CSTRING(Tourniquet_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_splint: ACE_ItemCore { @@ -87,7 +87,7 @@ class CfgWeapons { descriptionShort = CSTRING(Morphine_Desc_Short); descriptionUse = CSTRING(Morphine_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_adenosine: ACE_ItemCore { @@ -99,11 +99,11 @@ class CfgWeapons { descriptionShort = CSTRING(adenosine_Desc_Short); descriptionUse = CSTRING(adenosine_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_atropine: ACE_ItemCore { - scope = 2; + scope = 1; author = ECSTRING(common,ACETeam); displayName = CSTRING(Atropine_Display); picture = QPATHTOF(ui\atropine_ca.paa); @@ -111,7 +111,7 @@ class CfgWeapons { descriptionShort = CSTRING(Atropine_Desc_Short); descriptionUse = CSTRING(Atropine_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_epinephrine: ACE_ItemCore { @@ -123,7 +123,7 @@ class CfgWeapons { descriptionShort = CSTRING(Epinephrine_Desc_Short); descriptionUse = CSTRING(Epinephrine_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; @@ -226,7 +226,7 @@ class CfgWeapons { descriptionShort = CSTRING(QuikClot_Desc_Short); descriptionUse = CSTRING(QuikClot_Desc_Use); class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 2; + mass = 1; }; }; class ACE_personalAidKit: ACE_ItemCore { diff --git a/addons/medical_treatment/XEH_PREP.hpp b/addons/medical_treatment/XEH_PREP.hpp index 7bdd1eff36..480a65f2cb 100644 --- a/addons/medical_treatment/XEH_PREP.hpp +++ b/addons/medical_treatment/XEH_PREP.hpp @@ -10,9 +10,9 @@ PREP(canSplint); PREP(canStitch); PREP(canTreat); PREP(canTreatCached); +PREP(canTreat_holsterCheck); PREP(checkBloodPressure); PREP(checkBloodPressureLocal); -PREP(checkItems); PREP(checkPulse); PREP(checkPulseLocal); PREP(checkResponse); diff --git a/addons/medical_treatment/XEH_postInit.sqf b/addons/medical_treatment/XEH_postInit.sqf index 1896d8d9f1..413f96cd43 100644 --- a/addons/medical_treatment/XEH_postInit.sqf +++ b/addons/medical_treatment/XEH_postInit.sqf @@ -9,12 +9,8 @@ } forEach (_unit getVariable [QEGVAR(medical,allLogs), []]); _unit setVariable [QEGVAR(medical,allLogs), [], true]; - - [_unit] call FUNC(checkItems); }] call CBA_fnc_addEventHandler; -["loadout", LINKFUNC(checkItems)] call CBA_fnc_addPlayerEventHandler; - // Handle body removal and litter on server if (isServer) then { [QGVAR(createLitterServer), LINKFUNC(createLitterServer)] call CBA_fnc_addEventHandler; @@ -36,3 +32,32 @@ if (isServer) then { // Logging events [QGVAR(addToLog), LINKFUNC(addToLog)] call CBA_fnc_addEventHandler; [QGVAR(addToTriageCard), LINKFUNC(addToTriageCard)] call CBA_fnc_addEventHandler; + +// replace medical items with their ACE equivalents +["ace_settingsInitialized", { + TRACE_1("ace_settingsInitialized EH",GVAR(convertItems)); // 0: Enabled 1: RemoveOnly 2:Disabled + if (GVAR(convertItems) == 2) exitWith {}; + { + // turn [["stuff", 2], ...] into ["stuff", "stuff", ...] + private _replacements = []; + if (GVAR(convertItems) == 0) then { + { + _x params ["_item", "_count"]; + for "_i" from 1 to _count do { + _replacements pushBack _item; + }; + } forEach getArray _x; + }; + + // check if replacement is for item type or class name + private _configName = configName _x; + private _toReplace = if ((_configName select [0,9]) == "ItemType_") then { + parseNumber (_configName select [9]) + } else { + _configName + }; + + // register replacement + [_toReplace, _replacements] call EFUNC(common,registerItemReplacement); + } forEach (configProperties [configFile >> QEGVAR(medical,replacementItems), "isArray _x"]); +}] call CBA_fnc_addEventHandler; diff --git a/addons/medical_treatment/XEH_preInit.sqf b/addons/medical_treatment/XEH_preInit.sqf index 79949c2479..dfb6bf6518 100644 --- a/addons/medical_treatment/XEH_preInit.sqf +++ b/addons/medical_treatment/XEH_preInit.sqf @@ -44,9 +44,4 @@ GVAR(facilityClasses) = []; } forEach getArray _x; } forEach configProperties [configFile >> QEGVAR(medical,facilities), "isArray _x"]; -// array of medical items to replace and their ACE equivalents -GVAR(replacementItems) = configProperties [configFile >> QEGVAR(medical,replacementItems), "isArray _x"] apply { - [configName _x, getArray _x] -}; - ADDON = true; diff --git a/addons/medical_treatment/functions/fnc_bandageLocal.sqf b/addons/medical_treatment/functions/fnc_bandageLocal.sqf index f001d2f0c1..3f16f3ca76 100644 --- a/addons/medical_treatment/functions/fnc_bandageLocal.sqf +++ b/addons/medical_treatment/functions/fnc_bandageLocal.sqf @@ -18,6 +18,7 @@ */ params ["_patient", "_bodyPart", "_bandage"]; +TRACE_3("bandageLocal",_patient,_bodyPart,_bandage); private _partIndex = ALL_BODY_PARTS find toLower _bodyPart; if (_partIndex < 0) exitWith {false}; @@ -54,4 +55,26 @@ if ((EGVAR(medical,limping) == 1) && {_partIndex > 3} && {_amountOf <= 0} && {_p [_patient] call EFUNC(medical_engine,updateDamageEffects); }; +if (GVAR(clearTraumaAfterBandage)) then { + TRACE_2("clearTraumaAfterBandage - checking open wounds",_partIndex,_openWounds); + if ((_openWounds findIf { + _x params ["", "_xBodyPartN", "_xAmountOf"]; + (_partIndex ==_xBodyPartN) && {_xAmountOf > 0} + }) == -1) then { + + private _bodyPartDamage = _patient getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]]; + _bodyPartDamage set [_partIndex, 0]; + _patient setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true]; + TRACE_2("fully healed",_partIndex,_bodyPartDamage); + + switch (_partIndex) do { + case 0: { [_patient, true, false, false, false] call EFUNC(medical_engine,updateBodyPartVisuals); }; + case 1: { [_patient, false, true, false, false] call EFUNC(medical_engine,updateBodyPartVisuals); }; + case 2; + case 3: { [_patient, false, false, true, false] call EFUNC(medical_engine,updateBodyPartVisuals); }; + default { [_patient, false, false, false, true] call EFUNC(medical_engine,updateBodyPartVisuals); }; + }; + }; +}; + true diff --git a/addons/medical_treatment/functions/fnc_canTreat.sqf b/addons/medical_treatment/functions/fnc_canTreat.sqf index d8905626c9..938e8a356d 100644 --- a/addons/medical_treatment/functions/fnc_canTreat.sqf +++ b/addons/medical_treatment/functions/fnc_canTreat.sqf @@ -26,6 +26,7 @@ isClass _config && {_patient isKindOf "CAManBase"} && {_medic != _patient || {GET_NUMBER_ENTRY(_config >> "allowSelfTreatment") == 1}} && {[_medic, GET_NUMBER_ENTRY(_config >> "medicRequired")] call FUNC(isMedic)} +&& {[_medic, _patient, _config] call FUNC(canTreat_holsterCheck)} && { private _selections = getArray (_config >> "allowedSelections") apply {toLower _x}; "all" in _selections || {_bodyPart in _selections} diff --git a/addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf b/addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf new file mode 100644 index 0000000000..96f498c258 --- /dev/null +++ b/addons/medical_treatment/functions/fnc_canTreat_holsterCheck.sqf @@ -0,0 +1,27 @@ +#include "script_component.hpp" +/* + * Author: ddm999 + * Handle holster settings [disabled, lowered, loweredExam, holster, holsterExam] + * + * Arguments: + * 0: Medic + * 1: Patient + * 2: Treatment Config + * + * Return Value: + * Can Treat + * + * Example: + * [player, cursorObject, cfg] call ace_medical_treatment_fnc_canTreat_holsterCheck + * + * Public: No + */ + +params ["_medic", "_patient", "_config"]; + +GVAR(holsterRequired) == 0 +|| {vehicle _medic != _medic} // medic is in a vehicle, so weapon is considered holstered +|| {vehicle _patient != _patient} // patient is in a vehicle, ^ +|| {(GVAR(holsterRequired) in [2,4]) && {getText (_config >> "category") == "examine"}} // if examine bypass is on +|| {currentWeapon _medic isEqualTo ""} // weapon is holstered +|| {(GVAR(holsterRequired) <= 2) && {weaponLowered _medic}} // if just lowered is allowed diff --git a/addons/medical_treatment/functions/fnc_checkItems.sqf b/addons/medical_treatment/functions/fnc_checkItems.sqf deleted file mode 100644 index 2f4c20175e..0000000000 --- a/addons/medical_treatment/functions/fnc_checkItems.sqf +++ /dev/null @@ -1,47 +0,0 @@ -#include "script_component.hpp" -/* - * Author: KoffeinFlummi, commy2, mharis001 - * Handles converting vanilla medical items with ACE equivalents. - * - * Arguments: - * 0: Unit - * - * Return Value: - * None - * - * Example: - * [player] call ace_medical_treatment_fnc_checkItems - * - * Public: No - */ - -if (GVAR(convertItems) == 2) exitWith {}; - -params ["_unit"]; - -private _fnc_loop = if (GVAR(convertItems) == 0) then { - { - _x params ["_itemToRemove", "_replacementItems"]; - - private _count = [_unit, _itemToRemove] call EFUNC(common,getCountOfItem); - - if (_count > 0) then { - _unit removeItems _itemToRemove; - - { - _x params ["_item", "_amount"]; - - for "_i" from 1 to (_amount * _count) do { - _unit addItem _item; - }; - } forEach _replacementItems; - }; - } -} else { - { - _x params ["_itemToRemove"]; - _unit removeItems _itemToRemove; - } -}; - -_fnc_loop forEach GVAR(replacementItems); diff --git a/addons/medical_treatment/initSettings.sqf b/addons/medical_treatment/initSettings.sqf index 3da65f8816..7e4eda5e98 100644 --- a/addons/medical_treatment/initSettings.sqf +++ b/addons/medical_treatment/initSettings.sqf @@ -29,6 +29,15 @@ true ] call CBA_settings_fnc_init; +[ + QGVAR(clearTraumaAfterBandage), + "CHECKBOX", + [LSTRING(clearTraumaAfterBandage_DisplayName), LSTRING(clearTraumaAfterBandage_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)], + false, + true +] call CBA_settings_fnc_init; + [ QGVAR(advancedMedication), "CHECKBOX", @@ -200,3 +209,14 @@ [-1, 3600, 600, 0], true ] call CBA_settings_fnc_init; + +[ + QGVAR(holsterRequired), + "LIST", + [LSTRING(HolsterRequired_DisplayName), LSTRING(HolsterRequired_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)], + [[0, 1, 2, 3, 4], [ELSTRING(common,Disabled), LSTRING(HolsterRequired_Lowered), LSTRING(HolsterRequired_LoweredExam), LSTRING(HolsterRequired_Holstered), LSTRING(HolsterRequired_HolsteredExam)], 0], + true +] call CBA_settings_fnc_init; + + diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 61bdd5a784..675e39f5ea 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -426,6 +426,24 @@ Техника и госпитали Veículos e Instalações Médicas + + Holster Required + + + Controls whether weapons must be holstered / lowered in order to perform medical actions.\nExcept Exam - Allows examination actions (checking pulse, blood pressure, response) at all times regardless of Holster Required setting. + + + Lowered or Holstered + + + Lowered or Holstered (Except Exam) + + + Holstered only + + + Holstered only (Except Exam) + [ACE] Medical Supply Crate (Basic) [ACE] Ящик с медикаментами (базовая медицина) @@ -3669,5 +3687,23 @@ 个人急救包使用条件 個人急救包使用條件 + + Clear Trauma After Bandage + + + Heal fully bandaged hitpoints + Lecz w pełni zabandażowane hitpointy + Curar miembros totalmente vendados + Исцелять полностью перебинтованные части тела + Curar pontos de vida totalmente enfaixados + Heal fully bandaged hitpoints + Cura hitpoints completamente bendati + Soigner les plaies entièrement bandées + Heilt vollständig bandagierte Trefferpunkte + 包帯は体力を完全に回復する + 붕대를 감은후 체력을 회복함 + 完全医疗包扎的部位至痊愈 + 完全醫療包紮的部位至痊癒 + diff --git a/addons/nametags/CfgFactionClasses.hpp b/addons/nametags/CfgFactionClasses.hpp new file mode 100644 index 0000000000..0e41b5823f --- /dev/null +++ b/addons/nametags/CfgFactionClasses.hpp @@ -0,0 +1,79 @@ +class CfgFactionClasses { + class OPF_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_russia\private_gs.paa), + QPATHTOF(UI\icons_russia\corporal_gs.paa), + QPATHTOF(UI\icons_russia\sergeant_gs.paa), + QPATHTOF(UI\icons_russia\lieutenant_gs.paa), + QPATHTOF(UI\icons_russia\captain_gs.paa), + QPATHTOF(UI\icons_russia\major_gs.paa), + QPATHTOF(UI\icons_russia\colonel_gs.paa) + }; + }; + class OPF_G_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_spain\private_gs.paa), + QPATHTOF(UI\icons_spain\corporal_gs.paa), + QPATHTOF(UI\icons_spain\sergeant_gs.paa), + QPATHTOF(UI\icons_spain\lieutenant_gs.paa), + QPATHTOF(UI\icons_spain\captain_gs.paa), + QPATHTOF(UI\icons_spain\major_gs.paa), + QPATHTOF(UI\icons_spain\colonel_gs.paa) + }; + }; + class OPF_T_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_russia\private_gs.paa), + QPATHTOF(UI\icons_russia\corporal_gs.paa), + QPATHTOF(UI\icons_russia\sergeant_gs.paa), + QPATHTOF(UI\icons_russia\lieutenant_gs.paa), + QPATHTOF(UI\icons_russia\captain_gs.paa), + QPATHTOF(UI\icons_russia\major_gs.paa), + QPATHTOF(UI\icons_russia\colonel_gs.paa) + }; + }; + class OPF_V_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_russia\private_gs.paa), + QPATHTOF(UI\icons_russia\corporal_gs.paa), + QPATHTOF(UI\icons_russia\sergeant_gs.paa), + QPATHTOF(UI\icons_russia\lieutenant_gs.paa), + QPATHTOF(UI\icons_russia\captain_gs.paa), + QPATHTOF(UI\icons_russia\major_gs.paa), + QPATHTOF(UI\icons_russia\colonel_gs.paa) + }; + }; + class IND_C_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_russia\private_gs.paa), + QPATHTOF(UI\icons_russia\corporal_gs.paa), + QPATHTOF(UI\icons_russia\sergeant_gs.paa), + QPATHTOF(UI\icons_russia\lieutenant_gs.paa), + QPATHTOF(UI\icons_russia\captain_gs.paa), + QPATHTOF(UI\icons_russia\major_gs.paa), + QPATHTOF(UI\icons_russia\colonel_gs.paa) + }; + }; + class IND_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_germany\private_gs.paa), + QPATHTOF(UI\icons_germany\corporal_gs.paa), + QPATHTOF(UI\icons_germany\sergeant_gs.paa), + QPATHTOF(UI\icons_germany\lieutenant_gs.paa), + QPATHTOF(UI\icons_germany\captain_gs.paa), + QPATHTOF(UI\icons_germany\major_gs.paa), + QPATHTOF(UI\icons_germany\colonel_gs.paa) + }; + }; + class IND_G_F { + GVAR(rankIcons)[] = { + QPATHTOF(UI\icons_spain\private_gs.paa), + QPATHTOF(UI\icons_spain\corporal_gs.paa), + QPATHTOF(UI\icons_spain\sergeant_gs.paa), + QPATHTOF(UI\icons_spain\lieutenant_gs.paa), + QPATHTOF(UI\icons_spain\captain_gs.paa), + QPATHTOF(UI\icons_spain\major_gs.paa), + QPATHTOF(UI\icons_spain\colonel_gs.paa) + }; + }; +}; diff --git a/addons/nametags/UI/icons_france/captain_gs.paa b/addons/nametags/UI/icons_france/captain_gs.paa new file mode 100644 index 0000000000..b9cceddc05 Binary files /dev/null and b/addons/nametags/UI/icons_france/captain_gs.paa differ diff --git a/addons/nametags/UI/icons_france/colonel_gs.paa b/addons/nametags/UI/icons_france/colonel_gs.paa new file mode 100644 index 0000000000..b0119b21d5 Binary files /dev/null and b/addons/nametags/UI/icons_france/colonel_gs.paa differ diff --git a/addons/nametags/UI/icons_france/corporal_gs.paa b/addons/nametags/UI/icons_france/corporal_gs.paa new file mode 100644 index 0000000000..b6f5b6a2ca Binary files /dev/null and b/addons/nametags/UI/icons_france/corporal_gs.paa differ diff --git a/addons/nametags/UI/icons_france/lieutenant_gs.paa b/addons/nametags/UI/icons_france/lieutenant_gs.paa new file mode 100644 index 0000000000..7792c8e87a Binary files /dev/null and b/addons/nametags/UI/icons_france/lieutenant_gs.paa differ diff --git a/addons/nametags/UI/icons_france/major_gs.paa b/addons/nametags/UI/icons_france/major_gs.paa new file mode 100644 index 0000000000..b7b31a10f4 Binary files /dev/null and b/addons/nametags/UI/icons_france/major_gs.paa differ diff --git a/addons/nametags/UI/icons_france/private_gs.paa b/addons/nametags/UI/icons_france/private_gs.paa new file mode 100644 index 0000000000..abb2251112 Binary files /dev/null and b/addons/nametags/UI/icons_france/private_gs.paa differ diff --git a/addons/nametags/UI/icons_france/sergeant_gs.paa b/addons/nametags/UI/icons_france/sergeant_gs.paa new file mode 100644 index 0000000000..afa48f04c8 Binary files /dev/null and b/addons/nametags/UI/icons_france/sergeant_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/captain_gs.paa b/addons/nametags/UI/icons_germany/captain_gs.paa new file mode 100644 index 0000000000..cf99a2cb40 Binary files /dev/null and b/addons/nametags/UI/icons_germany/captain_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/colonel_gs.paa b/addons/nametags/UI/icons_germany/colonel_gs.paa new file mode 100644 index 0000000000..d46b75527c Binary files /dev/null and b/addons/nametags/UI/icons_germany/colonel_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/corporal_gs.paa b/addons/nametags/UI/icons_germany/corporal_gs.paa new file mode 100644 index 0000000000..a02673671d Binary files /dev/null and b/addons/nametags/UI/icons_germany/corporal_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/lieutenant_gs.paa b/addons/nametags/UI/icons_germany/lieutenant_gs.paa new file mode 100644 index 0000000000..9423487ede Binary files /dev/null and b/addons/nametags/UI/icons_germany/lieutenant_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/major_gs.paa b/addons/nametags/UI/icons_germany/major_gs.paa new file mode 100644 index 0000000000..f6ef27fad2 Binary files /dev/null and b/addons/nametags/UI/icons_germany/major_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/private_gs.paa b/addons/nametags/UI/icons_germany/private_gs.paa new file mode 100644 index 0000000000..abb2251112 Binary files /dev/null and b/addons/nametags/UI/icons_germany/private_gs.paa differ diff --git a/addons/nametags/UI/icons_germany/sergeant_gs.paa b/addons/nametags/UI/icons_germany/sergeant_gs.paa new file mode 100644 index 0000000000..b3b855ef56 Binary files /dev/null and b/addons/nametags/UI/icons_germany/sergeant_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/captain_gs.paa b/addons/nametags/UI/icons_spain/captain_gs.paa new file mode 100644 index 0000000000..1d271583be Binary files /dev/null and b/addons/nametags/UI/icons_spain/captain_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/colonel_gs.paa b/addons/nametags/UI/icons_spain/colonel_gs.paa new file mode 100644 index 0000000000..8f1e308d9d Binary files /dev/null and b/addons/nametags/UI/icons_spain/colonel_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/corporal_gs.paa b/addons/nametags/UI/icons_spain/corporal_gs.paa new file mode 100644 index 0000000000..af3a9a7cbc Binary files /dev/null and b/addons/nametags/UI/icons_spain/corporal_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/lieutenant_gs.paa b/addons/nametags/UI/icons_spain/lieutenant_gs.paa new file mode 100644 index 0000000000..5ce43d7437 Binary files /dev/null and b/addons/nametags/UI/icons_spain/lieutenant_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/major_gs.paa b/addons/nametags/UI/icons_spain/major_gs.paa new file mode 100644 index 0000000000..a3844c8ce2 Binary files /dev/null and b/addons/nametags/UI/icons_spain/major_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/private_gs.paa b/addons/nametags/UI/icons_spain/private_gs.paa new file mode 100644 index 0000000000..b486dd488c Binary files /dev/null and b/addons/nametags/UI/icons_spain/private_gs.paa differ diff --git a/addons/nametags/UI/icons_spain/sergeant_gs.paa b/addons/nametags/UI/icons_spain/sergeant_gs.paa new file mode 100644 index 0000000000..aa76186ddb Binary files /dev/null and b/addons/nametags/UI/icons_spain/sergeant_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/captain_gs.paa b/addons/nametags/UI/icons_uk/captain_gs.paa new file mode 100644 index 0000000000..aeb89e3043 Binary files /dev/null and b/addons/nametags/UI/icons_uk/captain_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/colonel_gs.paa b/addons/nametags/UI/icons_uk/colonel_gs.paa new file mode 100644 index 0000000000..b0a6e4851f Binary files /dev/null and b/addons/nametags/UI/icons_uk/colonel_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/corporal_gs.paa b/addons/nametags/UI/icons_uk/corporal_gs.paa new file mode 100644 index 0000000000..2f664f8b3a Binary files /dev/null and b/addons/nametags/UI/icons_uk/corporal_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/lieutenant_gs.paa b/addons/nametags/UI/icons_uk/lieutenant_gs.paa new file mode 100644 index 0000000000..8b8f707f6e Binary files /dev/null and b/addons/nametags/UI/icons_uk/lieutenant_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/major_gs.paa b/addons/nametags/UI/icons_uk/major_gs.paa new file mode 100644 index 0000000000..562ce1599c Binary files /dev/null and b/addons/nametags/UI/icons_uk/major_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/private_gs.paa b/addons/nametags/UI/icons_uk/private_gs.paa new file mode 100644 index 0000000000..abb2251112 Binary files /dev/null and b/addons/nametags/UI/icons_uk/private_gs.paa differ diff --git a/addons/nametags/UI/icons_uk/sergeant_gs.paa b/addons/nametags/UI/icons_uk/sergeant_gs.paa new file mode 100644 index 0000000000..e1041d08a9 Binary files /dev/null and b/addons/nametags/UI/icons_uk/sergeant_gs.paa differ diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index 2df7565cd6..e73794600d 100644 --- a/addons/nametags/XEH_postInit.sqf +++ b/addons/nametags/XEH_postInit.sqf @@ -45,3 +45,15 @@ GVAR(showNamesTime) = -10; // civilians don't use military ranks ["CIV_F", ["","","","","","",""]] call FUNC(setFactionRankIcons); + +// Change ranks based on faction for all factions that have an entry in CfgFactionClasses +if (missionNamespace getVariable [QGVAR(useFactionIcons), true]) then { + { + if (isArray (_x >> QGVAR(rankIcons))) then { + private _faction = configName _x; + if (!isNil {GVAR(factionRanks) getVariable _faction}) exitWith {}; // don't overwrite if already set + private _icons = getArray (_x >> QGVAR(rankIcons)); + [_faction, _icons] call FUNC(setFactionRankIcons); + }; + } forEach ("true" configClasses (configFile >> "CfgFactionClasses")); +}; diff --git a/addons/nametags/config.cpp b/addons/nametags/config.cpp index 0f491efce1..2db10c7eeb 100644 --- a/addons/nametags/config.cpp +++ b/addons/nametags/config.cpp @@ -16,6 +16,7 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "ACE_Settings.hpp" +#include "CfgFactionClasses.hpp" #include "CfgVehicles.hpp" #include diff --git a/addons/nametags/functions/fnc_setFactionRankIcons.sqf b/addons/nametags/functions/fnc_setFactionRankIcons.sqf index fa7975d5e5..e60c295c7d 100644 --- a/addons/nametags/functions/fnc_setFactionRankIcons.sqf +++ b/addons/nametags/functions/fnc_setFactionRankIcons.sqf @@ -29,6 +29,7 @@ if (isNil QGVAR(factionRanks)) then { }; params [["_faction", "", [""]], ["_icons", [], [[]], [7]]]; +TRACE_2("setFactionRankIcons",_faction,_icons); if !(_faction != "" && {_icons isEqualTypeAll ""}) exitWith {false}; diff --git a/addons/optionsmenu/functions/fnc_debugDumpToClipboard.sqf b/addons/optionsmenu/functions/fnc_debugDumpToClipboard.sqf index 3b662eb121..6ed460d2f9 100644 --- a/addons/optionsmenu/functions/fnc_debugDumpToClipboard.sqf +++ b/addons/optionsmenu/functions/fnc_debugDumpToClipboard.sqf @@ -15,7 +15,7 @@ * Public: No */ -#define MIN_ARRAY_SIZE 50 +#define MIN_ARRAY_SIZE 100 private _outputText = { diag_log text (_this select 0); @@ -24,8 +24,7 @@ private _outputText = { }; private _text = format ["~~~~~~~~~ACE Debug~~~~~~~~~ -time = %1 - +%1 ------Performance------ diag_fps = %2 count cba_common_waitAndExecArray = %3 @@ -34,11 +33,11 @@ count cba_common_perFrameHandlerArray = %5 (max %6) count diag_activeSQFScripts = %7 count diag_activeSQSScripts = %8 count diag_activeMissionFSMs = %9", -time, +format ["[Time: %1] [CBA_missionTime: %2] [tickTime: %3]", time toFixed 1, CBA_missionTime toFixed 1, diag_tickTime toFixed 1], diag_fps, count cba_common_waitAndExecArray, count cba_common_waitUntilAndExecArray, -{!isNil "_x"} count cba_common_perFrameHandlerArray, count cba_common_perFrameHandlerArray, +count cba_common_perFrameHandlerArray, count cba_common_PFHhandles, count diag_activeSQFScripts, count diag_activeSQSScripts, count diag_activeMissionFSMs]; @@ -54,16 +53,20 @@ if (isNull ace_player) then {"null"} else {animationState ace_player}]; [_text] call _outputText; -_text = format [" -------ACE's CBA Settings------"]; -[_text] call _outputText; - private _aceSettings = cba_settings_allSettings select {((_x select [0,4]) == "ace_") || {(_x select [0,5]) == "acex_"}}; _aceSettings sort true; +_text = format [" +------ACE's CBA Settings [%1 Total] [Only Non-Defaults]------", count _aceSettings]; +[_text] call _outputText; + { - _var = missionNamespace getVariable [_x, "ERROR: Not Defined"]; - _text = format ["%1 - %2", _x, _var]; - [_text] call _outputText; + private _currentValue = missionNamespace getVariable [_x, "$"]; + private _defaultValue = (cba_settings_default getVariable [_x, []]) param [0, "#"]; + if (_currentValue isEqualTo _defaultValue) then { + // [format ["%1 - %2 - DEFAULT", _x, _currentValue]] call _outputText; + } else { + [format ["%1 - %2", _x, _currentValue]] call _outputText; + }; } forEach _aceSettings; diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index af04d90310..acea91708c 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -927,4 +927,147 @@ class CfgWeapons { class hgun_Pistol_01_F: Pistol_Base_F { displayName = CSTRING(hgun_Pistol_01); }; + + // AKM + class arifle_AKM_base_F; + class arifle_AKM_F: arifle_AKM_base_F { + displayName = CSTRING(arifle_AKM); + }; + + // AKSU + class arifle_AKS_base_F; + class arifle_AKS_F: arifle_AKS_base_F { + displayName = CSTRING(arifle_AKS); + }; + + // Contact/Livonia + + // FNX-45 (Green) + class hgun_Pistol_heavy_01_green_F: hgun_Pistol_heavy_01_F { + displayName = CSTRING(hgun_Pistol_heavy_01_green_Name); + }; + + // RPG-32 (Green) + class launch_RPG32_green_F: launch_RPG32_F { + displayName = CSTRING(launch_RPG32_green_Name); + }; + + // AK15 variants + class arifle_AK12_base_F; + class arifle_AK12_F: arifle_AK12_base_F { + displayName = CSTRING(arifle_AK12); + }; + class arifle_AK12_lush_F: arifle_AK12_base_F { + displayName = CSTRING(arifle_AK12_lush); + }; + class arifle_AK12_arid_F: arifle_AK12_base_F { + displayName = CSTRING(arifle_AK12_arid); + }; + class arifle_AK12_GL_base_F; + class arifle_AK12_GL_F: arifle_AK12_GL_base_F { + displayName = CSTRING(arifle_AK12_GL); + }; + class arifle_AK12_GL_lush_F: arifle_AK12_GL_base_F { + displayName = CSTRING(arifle_AK12_GL_lush); + }; + class arifle_AK12_GL_arid_F: arifle_AK12_GL_base_F { + displayName = CSTRING(arifle_AK12_GL_arid); + }; + class arifle_AK12U_base_F; + class arifle_AK12U_F: arifle_AK12U_base_F { + displayName = CSTRING(arifle_AK12U); + }; + class arifle_AK12U_lush_F: arifle_AK12U_base_F { + displayName = CSTRING(arifle_AK12U_lush); + }; + class arifle_AK12U_arid_F: arifle_AK12U_base_F { + displayName = CSTRING(arifle_AK12U_arid); + }; + class arifle_RPK12_base_F; + class arifle_RPK12_F: arifle_RPK12_base_F { + displayName = CSTRING(arifle_RPK12); + }; + class arifle_RPK12_lush_F: arifle_RPK12_base_F { + displayName = CSTRING(arifle_RPK12_lush); + }; + class arifle_RPK12_arid_F: arifle_RPK12_base_F { + displayName = CSTRING(arifle_RPK12_arid); + }; + + // M14 (Classic) + class DMR_06_hunter_base_F; + class srifle_DMR_06_hunter_F: DMR_06_hunter_base_F { + displayName = CSTRING(srifle_DMR_06_hunter); + }; + + // Stoner 99 LMG (Black) + class LMG_Mk200_black_F: LMG_Mk200_F { + displayName = CSTRING(LMG_Mk200_black); + }; + + // MSBS Grot variants + class arifle_MSBS65_base_F; + class arifle_MSBS65_F: arifle_MSBS65_base_F { + displayName = CSTRING(arifle_MSBS65); + }; + class arifle_MSBS65_base_black_F; + class arifle_MSBS65_black_F: arifle_MSBS65_base_black_F { + displayName = CSTRING(arifle_MSBS65_black); + }; + class arifle_MSBS65_base_camo_F; + class arifle_MSBS65_camo_F: arifle_MSBS65_base_camo_F { + displayName = CSTRING(arifle_MSBS65_camo); + }; + class arifle_MSBS65_base_sand_F; + class arifle_MSBS65_sand_F: arifle_MSBS65_base_sand_F { + displayName = CSTRING(arifle_MSBS65_sand); + }; + class arifle_MSBS65_GL_base_F; + class arifle_MSBS65_GL_F: arifle_MSBS65_GL_base_F { + displayName = CSTRING(arifle_MSBS65_GL); + }; + class arifle_MSBS65_GL_base_black_F; + class arifle_MSBS65_GL_black_F: arifle_MSBS65_GL_base_black_F { + displayName = CSTRING(arifle_MSBS65_GL_black); + }; + class arifle_MSBS65_GL_base_camo_F; + class arifle_MSBS65_GL_camo_F: arifle_MSBS65_GL_base_camo_F { + displayName = CSTRING(arifle_MSBS65_GL_camo); + }; + class arifle_MSBS65_GL_base_sand_F; + class arifle_MSBS65_GL_sand_F: arifle_MSBS65_GL_base_sand_F { + displayName = CSTRING(arifle_MSBS65_GL_sand); + }; + class arifle_MSBS65_Mark_base_F; + class arifle_MSBS65_Mark_F: arifle_MSBS65_Mark_base_F { + displayName = CSTRING(arifle_MSBS65_Mark); + }; + class arifle_MSBS65_Mark_base_black_F; + class arifle_MSBS65_Mark_black_F: arifle_MSBS65_Mark_base_black_F { + displayName = CSTRING(arifle_MSBS65_Mark_black); + }; + class arifle_MSBS65_Mark_base_camo_F; + class arifle_MSBS65_Mark_camo_F: arifle_MSBS65_Mark_base_camo_F { + displayName = CSTRING(arifle_MSBS65_Mark_camo); + }; + class arifle_MSBS65_Mark_base_sand_F; + class arifle_MSBS65_Mark_sand_F: arifle_MSBS65_Mark_base_sand_F { + displayName = CSTRING(arifle_MSBS65_Mark_sand); + }; + class arifle_MSBS65_UBS_base_F; + class arifle_MSBS65_UBS_F: arifle_MSBS65_UBS_base_F { + displayName = CSTRING(arifle_MSBS65_UBS); + }; + class arifle_MSBS65_UBS_base_black_F; + class arifle_MSBS65_UBS_black_F: arifle_MSBS65_UBS_base_black_F { + displayName = CSTRING(arifle_MSBS65_UBS_black); + }; + class arifle_MSBS65_UBS_base_camo_F; + class arifle_MSBS65_UBS_camo_F: arifle_MSBS65_UBS_base_camo_F { + displayName = CSTRING(arifle_MSBS65_UBS_camo); + }; + class arifle_MSBS65_UBS_base_sand_F; + class arifle_MSBS65_UBS_sand_F: arifle_MSBS65_UBS_base_sand_F { + displayName = CSTRING(arifle_MSBS65_UBS_sand); + }; }; diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index cfa63f00e2..88650d8bc3 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1518,11 +1518,29 @@ FNX-45 Tactical FNX-45 Tactical FNX-45 Tactical + FNX-45 Tactical FNX-45 タクティカル FNX-45 Tactical FNX-45戰術型手槍 FNX-45战术型手枪 + + FNX-45 Tactical (Green) + FNX-45 Tactical (Grün) + FNX-45 Tactical (Zelený) + FNX-45 Tactical (Zielony) + FNX-45 Tactical (Vert) + FNX-45 Tactical (Zöld) + FNX-45 Tactical (Verde) + FNX-45 Tactical (Зелёный) + FNX-45 Tactical (Verde) + FNX-45 Tactical (Verde) + FNX-45 Tactical (Yeşil) + FNX-45 タクティカル (緑) + FNX-45 Tactical (초록) + FNX-45戰術型手槍 (綠色) + FNX-45战术型手枪 (绿色) + Chiappa Rhino 60DS Chiappa Rhino 60DS @@ -1582,11 +1600,29 @@ РПГ-32 RPG-32 RPG-32 + RPG-32 RPG-32 RPG-32 RPG-32"哈希姆"火箭發射器 RPG-32"哈希姆"火箭发射器 + + RPG-32 (Green) + RPG-32 (Grün) + RPG-32 (Zelený) + RPG-32 (Zielony) + RPG-32 (Vert) + RPG-32 (Zöld) + RPG-32 (Verde) + РПГ-32 (Зелёный) + RPG-32 (Verde) + RPG-32 (Verde) + RPG-32 (Yeşil) + RPG-32 (緑) + RPG-32 (초록) + RPG-32"哈希姆"火箭發射器 (綠色) + RPG-32"哈希姆"火箭发射器 (绿色) + Mini-Spike (AA) Mini-Spike (FlaRak) @@ -4004,5 +4040,549 @@ 口径: 5.7mm<br />发数: 50<br />使用于: P90 구경: 5.7mm<br />장탄수: 50<br />사용됨: P90 + + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + AKM + + + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + AKS-74U + + + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + AK-15 + + + AK-15 (Lush) + AK-15 (草木茂盛) + AK-15 (Camo Forêt) + AK-15 (exuberante) + AK-15 (verdeggiante) + AK-15 (region z bujną roślinnością) + AK-15 (обильная растительность) + AK-15 (Grün) + AK-15 (bujný porost) + AK-15 (Exuberante) + AK-15 (초목) + AK-15 (繁茂) + AK-15 (緑地) + AK-15 (Gür) + AK-15 (esőerdő) + + + AK-15 (Arid) + AK-15 (乾燥氣候) + AK-15 (Camo Désert) + AK-15 (árido) + AK-15 (arido) + AK-15 (region suchy) + AK-15 (засушливая местность) + AK-15 (Trocken) + AK-15 (suchý porost) + AK-15 (Árido) + AK-15 (건조) + AK-15 (干旱) + AK-15 (乾燥地帯) + AK-15 (Kurak) + AK-15 (sivatag) + + + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + AK-15 GL + + + AK-15 GL (Lush) + AK-15 GL (草木茂盛) + AK-15 GL (Camo Forêt) + AK-15 GL (exuberante) + AK-15 GL (verdeggiante) + AK-15 GL (region z bujną roślinnością) + AK-15 GL (обильная растительность) + AK-15 GL (Grün) + AK-15 GL (bujný porost) + AK-15 GL (Exuberante) + AK-15 GL (초목) + AK-15 GL (繁茂) + AK-15 GL (緑地) + AK-15 GL (Gür) + AK-15 GL (esőerdő) + + + AK-15 GL (Arid) + AK-15 GL (乾燥氣候) + AK-15 GL (Camo Désert) + AK-15 GL (árido) + AK-15 GL (arido) + AK-15 GL (region suchy) + AK-15 GL (засушливая местность) + AK-15 GL (Trocken) + AK-15 GL (suchý porost) + AK-15 GL (Árido) + AK-15 GL (건조) + AK-15 GL (干旱) + AK-15 GL (乾燥地帯) + AK-15AK-15 GL (Kurak) + AK-15 GL (sivatag) + + + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + AK-15K + + + AK-15K (Lush) + AK-15K (草木茂盛) + AK-15K (Camo Forêt) + AK-15K (exuberante) + AK-15K (verdeggiante) + AK-15K (region z bujną roślinnością) + AK-15K (обильная растительность) + AK-15K (Grün) + AK-15K (bujný porost) + AK-15K (Exuberante) + AK-15K (초목) + AK-15K (繁茂) + AK-15K (緑地) + AK-15K (Gür) + AK-15K (esőerdő) + + + AK-15K (Arid) + AK-15K (乾燥氣候) + AK-15K (Camo Désert) + AK-15K (árido) + AK-15K (arido) + AK-15K (region suchy) + AK-15K (засушливая местность) + AK-15K (Trocken) + AK-15K (suchý porost) + AK-15K (Árido) + AK-15K (건조) + AK-15K (干旱) + AK-15K (乾燥地帯) + AK-15K (Kurak) + AK-15K (sivatag) + + + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + RPK + + + RPK (Lush) + RPK (草木茂盛) + RPK (Camo Forêt) + RPK (exuberante) + RPK (verdeggiante) + RPK (region z bujną roślinnością) + RPK (обильная растительность) + RPK (Grün) + RPK (bujný porost) + RPK (Exuberante) + RPK (초목) + RPK (繁茂) + RPK (緑地) + RPK (Gür) + RPK (esőerdő) + + + RPK (Arid) + RPK (乾燥氣候) + RPK (Camo Désert) + RPK (árido) + RPK (arido) + RPK (region suchy) + RPK (засушливая местность) + RPK (Trocken) + RPK (suchý porost) + RPK (Árido) + RPK (건조) + RPK (干旱) + RPK (乾燥地帯) + RPK (Kurak) + RPK (sivatag) + + + M14 (classic) + M14 (经典) + M14 (classique) + M14 (clásico) + M14 (classico) + M14 (klasyczny) + M14 (классический) + M14 (klassisch) + M14 (klasický) + M14 (clássico) + M14 (표준) + M14 (經典) + M14 (クラシック) + M14 (klasik) + M14 (klasszikus) + + + Stoner 99 LMG (Black) + 斯通納99輕機槍(黑色) + Stoner 99 LMG (Noir) + Stoner 99 LMG (Negro) + Stoner 99 LMG (Nero) + Stoner 99 LMG (Czarny) + Stoner 99 LMG (Чёрный) + Stoner 99 LMG (Schwarz) + Stoner 99 LMG (Černá) + Stoner 99 LMG (Preto) + Stoner 99 LMG (검정) + 斯通纳99轻机枪(黑色) + ストーナー 99 LMG(ブラック) + Stoner 99 LMG (Siyah) + Stoner 99 Könnyűgéppuska (Fekete) + + + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + MSBS Grot + + + MSBS Grot (Black) + MSBS Grot(黑色) + MSBS Grot (Noir) + MSBS Grot (Negro) + MSBS Grot (Nero) + MSBS Grot (Czarny) + MSBS Grot (Чёрный) + MSBS Grot (Schwarz) + MSBS Grot (Černá) + MSBS Grot (Preto) + MSBS Grot (검정) + MSBS Grot(黑色) + MSBS Grot(ブラック) + MSBS Grot (Siyah) + MSBS Grot (Fekete) + + + MSBS Grot (Camo) + MSBS Grot(迷彩) + MSBS Grot (Camo) + MSBS Grot (Camuflaje) + MSBS Grot (Camo) + MSBS Grot (Kamuflaż) + MSBS Grot (Камо) + MSBS Grot (Tarnmuster) + MSBS Grot (Kamufláž) + MSBS Grot (Camo) + MSBS Grot (위장) + MSBS Grot(迷彩) + MSBS Grot (カモフラージュ) + MSBS Grot (Kamuflaj) + MSBS Grot (Terepmintás) + + + MSBS Grot (Sand) + MSBS Grot(沙色) + MSBS Grot (Sable) + MSBS Grot (Arena) + MSBS Grot (Sabbia) + MSBS Grot (Piaskowy) + MSBS Grot (Песочный) + MSBS Grot (Sandfarben) + MSBS Grot (Písková) + MSBS Grot (Deserto) + MSBS Grot (모래) + MSBS Grot(沙色) + MSBS Grot (サンド) + MSBS Grot (Kum) + MSBS Grot (Homok) + + + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + MSBS Grot GL + + + MSBS Grot GL (Black) + MSBS Grot GL(黑色) + MSBS Grot GL (Noir) + MSBS Grot GL (Negro) + MSBS Grot GL (Nero) + MSBS Grot GL (Czarny) + MSBS Grot GL (Чёрный) + MSBS Grot GL (Schwarz) + MSBS Grot GL (Černá) + MSBS Grot GL (Preto) + MSBS Grot GL (검정) + MSBS Grot GL(黑色) + MSBS Grot GL(ブラック) + MSBS Grot GL (Siyah) + MSBS Grot GL (Fekete) + + + MSBS Grot GL (Camo) + MSBS Grot GL(迷彩) + MSBS Grot GL (Camo) + MSBS Grot GL (Camuflaje) + MSBS Grot GL (Camo) + MSBS Grot GL (Kamuflaż) + MSBS Grot GL (Камо) + MSBS Grot GL (Tarnmuster) + MSBS Grot GL (Kamufláž) + MSBS Grot GL (Camo) + MSBS Grot GL (위장) + MSBS Grot GL(迷彩) + MSBS Grot GL (カモフラージュ) + MSBS Grot GL (Kamuflaj) + MSBS Grot GL (Terepmintás) + + + MSBS Grot GL (Sand) + MSBS Grot GL(沙色) + MSBS Grot GL (Sable) + MSBS Grot GL (Arena) + MSBS Grot GL (Sabbia) + MSBS Grot GL (Piaskowy) + MSBS Grot GL (Песочный) + MSBS Grot GL (Sandfarben) + MSBS Grot GL (Písková) + MSBS Grot GL (Deserto) + MSBS Grot GL (모래) + MSBS Grot GL(沙色) + MSBS Grot GL (サンド) + MSBS Grot GL (Kum) + MSBS Grot GL (Homok) + + + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + MSBS Grot MR + + + MSBS Grot MR (Black) + MSBS Grot MR(黑色) + MSBS Grot MR (Noir) + MSBS Grot MR (Negro) + MSBS Grot MR (Nero) + MSBS Grot MR (Czarny) + MSBS Grot MR (Чёрный) + MSBS Grot MR (Schwarz) + MSBS Grot MR (Černá) + MSBS Grot MR (Preto) + MSBS Grot MR (검정) + MSBS Grot MR(黑色) + MSBS Grot MR(ブラック) + MSBS Grot MR (Siyah) + MSBS Grot MR (Fekete) + + + MSBS Grot MR (Camo) + MSBS Grot MR(迷彩) + MSBS Grot MR (Camo) + MSBS Grot MR (Camuflaje) + MSBS Grot MR (Camo) + MSBS Grot MR (Kamuflaż) + MSBS Grot MR (Камо) + MSBS Grot MR (Tarnmuster) + MSBS Grot MR (Kamufláž) + MSBS Grot MR (Camo) + MSBS Grot MR (위장) + MSBS Grot MR(迷彩) + MSBS Grot MR (カモフラージュ) + MSBS Grot MR (Kamuflaj) + MSBS Grot MR (Terepmintás) + + + MSBS Grot MR (Sand) + MSBS Grot MR(沙色) + MSBS Grot MR (Sable) + MSBS Grot MR (Arena) + MSBS Grot MR (Sabbia) + MSBS Grot MR (Piaskowy) + MSBS Grot MR (Песочный) + MSBS Grot MR (Sandfarben) + MSBS Grot MR (Písková) + MSBS Grot MR (Deserto) + MSBS Grot MR (모래) + MSBS Grot MR(沙色) + MSBS Grot MR (サンド) + MSBS Grot MR (Kum) + MSBS Grot MR (Homok) + + + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + MSBS Grot SG + + + MSBS Grot SG (Black) + MSBS Grot SG(黑色) + MSBS Grot SG (Noir) + MSBS Grot SG (Negro) + MSBS Grot SG (Nero) + MSBS Grot SG (Czarny) + MSBS Grot SG (Чёрный) + MSBS Grot SG (Schwarz) + MSBS Grot SG (Černá) + MSBS Grot SG (Preto) + MSBS Grot SG (검정) + MSBS Grot SG(黑色) + MSBS Grot SG(ブラック) + MSBS Grot SG (Siyah) + MSBS Grot SG (Fekete) + + + MSBS Grot SG (Camo) + MSBS Grot SG(迷彩) + MSBS Grot SG (Camo) + MSBS Grot SG (Camuflaje) + MSBS Grot SG (Camo) + MSBS Grot SG (Kamuflaż) + MSBS Grot SG (Камо) + MSBS Grot SG (Tarnmuster) + MSBS Grot SG (Kamufláž) + MSBS Grot SG (Camo) + MSBS Grot SG (위장) + MSBS Grot SG(迷彩) + MSBS Grot SG (カモフラージュ) + MSBS Grot SG (Kamuflaj) + MSBS Grot SG (Terepmintás) + + + MSBS Grot SG (Sand) + MSBS Grot SG(沙色) + MSBS Grot SG (Sable) + MSBS Grot SG (Arena) + MSBS Grot SG (Sabbia) + MSBS Grot SG (Piaskowy) + MSBS Grot SG (Песочный) + MSBS Grot SG (Sandfarben) + MSBS Grot SG (Písková) + MSBS Grot SG (Deserto) + MSBS Grot SG (모래) + MSBS Grot SG(沙色) + MSBS Grot SG (サンド) + MSBS Grot SG (Kum) + MSBS Grot SG (Homok) + diff --git a/addons/refuel/functions/fnc_refuel.sqf b/addons/refuel/functions/fnc_refuel.sqf index 4717f1206c..f3e042cd56 100644 --- a/addons/refuel/functions/fnc_refuel.sqf +++ b/addons/refuel/functions/fnc_refuel.sqf @@ -93,6 +93,8 @@ if (_maxFuel == 0) then { }; _unit setVariable [QGVAR(tempFuel), _fuelInSink]; + [QGVAR(tick), [_source, _sink, _rateTime]] call CBA_fnc_localEvent; + [QEGVAR(common,setFuel), [_sink, _fuelInSink], _sink] call CBA_fnc_targetEvent; [_source, _fuelInSource] call FUNC(setFuel); } else { @@ -100,6 +102,7 @@ if (_maxFuel == 0) then { }; if (_finished) exitWith { + [QGVAR(stopped), [_source, _sink]] call CBA_fnc_localEvent; _nozzle setVariable [QGVAR(lastTickMissionTime), nil]; _nozzle setVariable [QGVAR(isRefueling), false, true]; }; diff --git a/addons/refuel/functions/fnc_turnOff.sqf b/addons/refuel/functions/fnc_turnOff.sqf index 1448a0d145..6b5f17a95d 100644 --- a/addons/refuel/functions/fnc_turnOff.sqf +++ b/addons/refuel/functions/fnc_turnOff.sqf @@ -21,3 +21,4 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; _nozzle setVariable [QGVAR(lastTickMissionTime), nil]; _nozzle setVariable [QGVAR(isRefueling), false, true]; [LSTRING(Hint_Stopped), 1.5, _unit] call EFUNC(common,displayTextStructured); +[QGVAR(stopped), [_nozzle getVariable QGVAR(source), _nozzle getVariable QGVAR(sink)]] call CBA_fnc_localEvent; diff --git a/addons/refuel/functions/fnc_turnOn.sqf b/addons/refuel/functions/fnc_turnOn.sqf index 4cbbc0033d..b96cc6cda4 100644 --- a/addons/refuel/functions/fnc_turnOn.sqf +++ b/addons/refuel/functions/fnc_turnOn.sqf @@ -21,3 +21,4 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; _nozzle setVariable [QGVAR(lastTickMissionTime), CBA_missionTime]; _nozzle setVariable [QGVAR(isRefueling), true, true]; [LSTRING(Hint_Started), 1.5, _unit] call EFUNC(common,displayTextStructured); +[QGVAR(started), [_nozzle getVariable QGVAR(source), _nozzle getVariable QGVAR(sink)]] call CBA_fnc_localEvent; diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index 8239dfcde7..995e72dc3f 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -22,7 +22,7 @@ if (_player == _target) then { if ((vehicle _target) isKindOf "StaticWeapon") then { _target = vehicle _target; }; - [_unit, "Gear", 1] call EFUNC(common,doGesture); + [_player, "Gear", 1] call EFUNC(common,doGesture); }; [FUNC(displayAmmo), [_target], 1] call CBA_fnc_waitAndExecute; diff --git a/addons/safemode/XEH_PREP.hpp b/addons/safemode/XEH_PREP.hpp index ab2a755a66..2f23aa02c9 100644 --- a/addons/safemode/XEH_PREP.hpp +++ b/addons/safemode/XEH_PREP.hpp @@ -3,3 +3,4 @@ PREP(lockSafety); PREP(playChangeFiremodeSound); PREP(setSafeModeVisual); PREP(unlockSafety); +PREP(setWeaponSafety); diff --git a/addons/safemode/functions/fnc_lockSafety.sqf b/addons/safemode/functions/fnc_lockSafety.sqf index c3ce5a8b86..44c7208b43 100644 --- a/addons/safemode/functions/fnc_lockSafety.sqf +++ b/addons/safemode/functions/fnc_lockSafety.sqf @@ -17,9 +17,6 @@ * Public: No */ -// don't immediately switch back -if (inputAction "nextWeapon" > 0) exitWith {}; - params ["_unit", "_weapon", "_muzzle"]; private _safedWeapons = _unit getVariable [QGVAR(safedWeapons), []]; diff --git a/addons/safemode/functions/fnc_setWeaponSafety.sqf b/addons/safemode/functions/fnc_setWeaponSafety.sqf new file mode 100644 index 0000000000..4ad0174b20 --- /dev/null +++ b/addons/safemode/functions/fnc_setWeaponSafety.sqf @@ -0,0 +1,36 @@ +#include "script_component.hpp" +/* + * Author: Brostrom.A + * Safe or unsafe the given weapon based on weapon state; locked or unlocked. + * + * Arguments: + * 0: Unit + * 1: Weapon + * 2: State + * + * Return Value: + * None + * + * Example: + * [ACE_player, currentWeapon ACE_player, true] call ace_safemode_fnc_setWeaponSafety + * + * Public: Yes + */ + +params [ + ["_unit", objNull, [objNull]], + ["_weapon", "", [""]], + ["_state", true, [true]] +]; + +if (_weapon == "") exitWith {}; + +private _safedWeapons = _unit getVariable [QGVAR(safedWeapons), []]; + +_weapon = configName (configFile >> "CfgWeapons" >> _weapon); + +private _muzzle = currentMuzzle _unit; + +if !(_state isEqualTo (_weapon in _safedWeapons)) then { + [_unit, _weapon, _muzzle] call FUNC(lockSafety); +}; diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 496de0f73f..0000000000 --- a/circle.yml +++ /dev/null @@ -1,62 +0,0 @@ -version: 2 -jobs: - validate-scripts: - docker: - - image: acemod/sqflint:latest - steps: - - checkout - - run: - name: Validate SQF and Config style and Stringtable entries - command: python tools/sqf_validator.py && python tools/config_style_checker.py && python tools/check_strings.py - - linting: - docker: - - image: acemod/sqflint:latest - steps: - - checkout - - run: - name: Lint sqf code - command: sqflint -d addons || true - - armake: - docker: - - image: acemod/armake:master - steps: - - checkout - - run: - name: Version - command: armake --version - - run: - name: Build - command: | - make -j 4 - - update-docs: - docker: - - image: acemod/armake:latest - steps: - - checkout - - run: - name: Update documentation and translation statistics - command: | - if [ "${CIRCLE_BRANCH}" == "master" ] && [ "${CIRCLE_PROJECT_USERNAME}" == "acemod" ]; then - python3 tools/deploy.py - else - echo "Skipping, not on acemod/ACE3 master branch..." - fi - -workflows: - version: 2 - build-job: - jobs: - - linting - - validate-scripts - - armake: - requires: - - validate-scripts - - update-docs: - requires: - - armake - filters: - branches: - only: master diff --git a/docs/wiki/feature/dragon.md b/docs/wiki/feature/dragon.md index 2e4e30e837..6a3e75becb 100644 --- a/docs/wiki/feature/dragon.md +++ b/docs/wiki/feature/dragon.md @@ -1,4 +1,4 @@ ---- +--- layout: wiki title: M47 Dragon Missile description: M47 Dragon diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 7a1481a299..f4f0cf9fae 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -89,6 +89,14 @@ MenuType: 0 = Interaction, 1 = Self Interaction |----------|---------|---------|---------|---------|---------| |`ace_wireCuttingStarted` | [_unit, _fence] | Global | Listen | Fence cutting started +### 2.9 Refuel (`ace_refuel`) + +| Event Key | Parameters | Locality | Type | Description | +|----------|---------|---------|---------|---------|---------| +|`ace_refuel_started` | [_source, _target] | Local | Listen | Refueling has started +|`ace_refuel_tick` | [_source, _target, _amount] | Local | Listen | Amount of fuel transferred in a tick +|`ace_refuel_stopped` | [_source, _target] | Local | Listen | Refueling has stopped + ## 3. Usage Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} documentation. diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index c688462068..d9cbece55c 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -169,7 +169,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\podnos_2b14_ca.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\rhs_2b14_82mm_msv_ca.paa"; }; class GVAR(nsv_carry): Launcher_Base_F { @@ -189,7 +189,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\mg\bis_kord\kord_CA.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\RHS_NSV_TriPod_MSV_ca.paa"; }; class GVAR(kord_carry): Launcher_Base_F { @@ -210,7 +210,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\kord6u16sp_ca.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\rhs_KORD_MSV_ca.paa"; }; class GVAR(ags30_carry): Launcher_Base_F { @@ -230,7 +230,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\ags_static_CA.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\RHS_AGS30_TriPod_MSV_ca.paa"; }; class GVAR(spg9_carry): Launcher_Base_F { @@ -250,7 +250,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\spg9_CA.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\rhs_SPG9_INS_ca.paa"; }; class GVAR(spg9m_carry): GVAR(spg9_carry) { class ACE_CSW { @@ -276,7 +276,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\metis_at13_CA.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\rhs_Metis_9k115_2_msv_ca.paa"; }; class GVAR(kornet_carry): Launcher_Base_F { @@ -294,6 +294,6 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\metis_at13_CA.paa"; + picture = "\rhsafrf\addons\rhs_heavyweapons\data\ico\rhs_Kornet_9M133_2_msv_ca.paa"; }; }; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 5c48a166f7..f517bbb7ba 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -445,7 +445,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\mortar_m251_CA.paa"; + picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\RHS_M252_D_ca.paa"; }; class GVAR(m2_carry): Launcher_Base_F { @@ -466,7 +466,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsusf\addons\rhsusf_editorPreviews\data\rhs_M2StaticMG_D.paa"; + picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\RHS_M2StaticMG_D_ca.paa"; }; class GVAR(mk19_carry): Launcher_Base_F { @@ -486,7 +486,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\mk19_stat_CA.paa"; + picture = "\rhsusf\addons\rhsusf_heavyweapons\data\ico\RHS_MK19_TriPod_D_ca.paa"; }; class GVAR(tow_carry): Launcher_Base_F { @@ -506,7 +506,7 @@ class CfgWeapons { scope = 2; model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); modes[] = {}; - picture = "\rhsusf\addons\rhsusf_heavyweapons\data\Ico\tow_static_CA.paa"; + picture = "\rhsusf\addons\rhsusf_heavyweapons\data\Ico\RHS_TOW_TriPod_D_ca.paa"; }; }; diff --git a/tools/deploy.py b/tools/deploy.py index 42b5a825a3..32dade9c3f 100644 --- a/tools/deploy.py +++ b/tools/deploy.py @@ -27,6 +27,8 @@ REPOUSER = "acemod" REPONAME = "ACE3" REPOPATH = "{}/{}".format(REPOUSER,REPONAME) +BRANCH = "master" + def update_translations(repo): diag = sp.check_output(["python3", "tools/stringtablediag.py", "--markdown"]) @@ -41,14 +43,11 @@ def update_dependencies(repo): diff = str(diff, "utf-8") if diff != "": - sha = repo.get_contents(DEPENDENCIESPATH - #, ref="travisForDocs" # Debug - ).sha + sha = repo.get_contents(DEPENDENCIESPATH, ref=BRANCH).sha repo.update_file( - path="/{}".format(DEPENDENCIESPATH), - message="[Docs] Update component dependencies\nAutomatically committed through Travis CI.\n\n[ci skip]", - content=dependencies, sha=sha, committer=InputGitAuthor("ace3mod", "ace3mod@gmail.com") - #, branch="travisForDocs" # Debug + path="{}".format(DEPENDENCIESPATH), + message="[Docs] Update component dependencies\nAutomatically committed through CI.\n\n[ci skip]", + content=dependencies, sha=sha, committer=InputGitAuthor("ace3mod", "ace3mod@gmail.com"), branch=BRANCH ) print("Dependencies successfully updated.") else: diff --git a/tools/search_privates.py b/tools/search_privates.py index 1cd0b7c180..1fe5c14887 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3 import fnmatch import os @@ -9,105 +9,105 @@ import argparse def get_private_declare(content): priv_declared = [] - + srch = re.compile('private.*') priv_srch_declared = srch.findall(content) priv_srch_declared = sorted(set(priv_srch_declared)) - + priv_dec_str = ''.join(priv_srch_declared) - + srch = re.compile('(? 0: print (filepath) - + private_output = 'private['; first = True for bad_priv in missing: if first: first = False private_output = private_output + '"' + bad_priv - else: + else: private_output = private_output + '", "' + bad_priv - + private_output = private_output + '"];'; print (private_output) - + for bad_priv in missing: print ('\t' + bad_priv) bad_count_file = bad_count_file + 1 - - - + + + return bad_count_file - + def main(): print("#########################") @@ -116,20 +116,20 @@ def main(): sqf_list = [] bad_count = 0 - + parser = argparse.ArgumentParser() parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") args = parser.parse_args() - + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) - + for filename in sqf_list: bad_count = bad_count + check_privates(filename) - - + + print ("Bad Count {0}".format(bad_count)) - + if __name__ == "__main__": main() diff --git a/tools/search_undefinedFunctions.py b/tools/search_undefinedFunctions.py index 1c281fa717..d2ed263569 100644 --- a/tools/search_undefinedFunctions.py +++ b/tools/search_undefinedFunctions.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3 import fnmatch import os diff --git a/tools/search_unused_privates.py b/tools/search_unused_privates.py index 72a0dadcea..04a1fc977d 100644 --- a/tools/search_unused_privates.py +++ b/tools/search_unused_privates.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3 import fnmatch import os @@ -9,98 +9,98 @@ import argparse def get_private_declare(content): priv_declared = [] - + srch = re.compile('private.*') priv_srch_declared = srch.findall(content) priv_srch_declared = sorted(set(priv_srch_declared)) - + priv_dec_str = ''.join(priv_srch_declared) - + srch = re.compile('(? 0: print (filepath) - + private_output = 'private['; first = True for bad_priv in unused: if first: first = False private_output = private_output + '"' + bad_priv - else: + else: private_output = private_output + '", "' + bad_priv - + private_output = private_output + '"];'; print (private_output) - + for bad_priv in unused: print ('\t' + bad_priv) bad_count_file = bad_count_file + 1 - - - + + + return bad_count_file - + def main(): print("#########################") @@ -109,20 +109,20 @@ def main(): sqf_list = [] bad_count = 0 - + parser = argparse.ArgumentParser() parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") args = parser.parse_args() - + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) - + for filename in sqf_list: bad_count = bad_count + check_privates(filename) - - + + print ("Bad Count {0}".format(bad_count)) - + if __name__ == "__main__": main() diff --git a/tools/sqf_linter.py b/tools/sqf_linter.py index 46461eb357..79df39195c 100644 --- a/tools/sqf_linter.py +++ b/tools/sqf_linter.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3 # Requires: https://github.com/LordGolias/sqf @@ -24,7 +24,7 @@ def analyze(filename, writer=sys.stdout): return 0, 1 exceptions = sqf.analyzer.analyze(result).exceptions - if (exceptions): + if (exceptions): print("{}:".format(filename)) for e in exceptions: if (e.message.startswith("error")): @@ -32,9 +32,9 @@ def analyze(filename, writer=sys.stdout): else: warnings += 1 writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message)) - + return warnings, errors - + def main(): print("#########################") print("# Lint Check #") @@ -43,24 +43,24 @@ def main(): sqf_list = [] all_warnings = 0 all_errors = 0 - + parser = argparse.ArgumentParser() parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") args = parser.parse_args() - + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) - + for filename in sqf_list: warnings, errors = analyze(filename) all_warnings += warnings all_errors += errors - + print ("Parse Errors {0} - Warnings {1}".format(all_errors,all_warnings)) # return (all_errors + all_warnings) return all_errors - + if __name__ == "__main__": main()