mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into artilleryTables
This commit is contained in:
commit
2d6414a761
45
.github/workflows/arma.yml
vendored
Normal file
45
.github/workflows/arma.yml
vendored
Normal file
@ -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'
|
24
.github/workflows/documentation.yml
vendored
Normal file
24
.github/workflows/documentation.yml
vendored
Normal file
@ -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
|
30
.github/workflows/extensions.yml
vendored
Normal file
30
.github/workflows/extensions.yml
vendored
Normal file
@ -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
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -10,7 +10,7 @@
|
||||
* Child actions <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* [kevin] call ace_medical_fnc_addLoadCaptiveActions
|
||||
* [kevin] call ace_captives_fnc_addLoadCaptiveActions
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
@ -269,6 +269,7 @@
|
||||
<French>Cyalume (Hi Bleu)</French>
|
||||
<Japanese>ケミライト (高輝度 青)</Japanese>
|
||||
<Polish>Świetlik (jaskrawy niebieski)</Polish>
|
||||
<German>Knicklicht (Blau, Hell)</German>
|
||||
<Italian>Luce chimica (Hi Blu)</Italian>
|
||||
<Russian>Химсвет (Ярко-Синий)</Russian>
|
||||
<Portuguese>Bastão de Luz (Azul Forte)</Portuguese>
|
||||
@ -276,6 +277,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_HiBlue_DisplayNameShort">
|
||||
<English>Blue Hi Light</English>
|
||||
<French>Lum. bleue haute intensité</French>
|
||||
<German>Helles, blaues Knicklicht</German>
|
||||
<Japanese>高輝度の青色</Japanese>
|
||||
<Polish>Jaskrawe niebieskie światło</Polish>
|
||||
<Italian>Luce Hi Blu</Italian>
|
||||
@ -285,6 +287,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_HiBlue_DescriptionShort">
|
||||
<English>Type: Light - Blue Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
<French>Type: Lumière - bleue Hi (30 minutes)<br />Nbre: 1<br /> À main</French>
|
||||
<German>Typ: Licht - blau, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand</German>
|
||||
<Japanese>種類: 照明 - 高輝度 青 (30分間)<br />装填数: 1<br />次で使用: 携帯</Japanese>
|
||||
<Polish>Typ: Światło - jaskrawe niebieskie (30 minut)<br/>Pociski: 1<br/>Używany w: ręce</Polish>
|
||||
<Italian>Tipo: Luce - Hi blu (30 minuti)<br/>Rimanenti:1 <br/>Usata in: Mano</Italian>
|
||||
@ -294,6 +297,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_HiGreen_DisplayName">
|
||||
<English>Chemlight (Hi Green)</English>
|
||||
<French>Cyalume (Hi Vert)</French>
|
||||
<German>Knicklicht (Grün, Hell)</German>
|
||||
<Japanese>ケミライト (高輝度 緑)</Japanese>
|
||||
<Polish>Świetlik (jaskrawy zielony)</Polish>
|
||||
<Italian>Luce chimica (Hi Verde)</Italian>
|
||||
@ -303,6 +307,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_HiGreen_DisplayNameShort">
|
||||
<English>Green Hi Light</English>
|
||||
<French>Lum. verte haute intensité</French>
|
||||
<German>Helles, grünes Knicklicht</German>
|
||||
<Japanese>高輝度の青色</Japanese>
|
||||
<Polish>Jaskrawe zielone światło</Polish>
|
||||
<Italian>Luce Hi Verde</Italian>
|
||||
@ -312,6 +317,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_HiGreen_DescriptionShort">
|
||||
<English>Type: Light - Green Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
<French>Type: Lumière - verte Hi (30 minutes)<br />Nbre: 1<br /> À main</French>
|
||||
<German>Typ: Licht - grün, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand</German>
|
||||
<Japanese>種類: 照明 - 高輝度 緑 (30分間)<br />装填数: 1<br />次で使用: 携帯</Japanese>
|
||||
<Polish>Typ: Światło - jaskrawe zielone (30 minut)<br/>Pociski: 1<br/>Używany w: ręce</Polish>
|
||||
<Italian>Tipo: Luce - Hi verde (30 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
@ -321,6 +327,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_UltraHiOrange_DisplayName">
|
||||
<English>Chemlight (Ultra-Hi Orange)</English>
|
||||
<French>Cyalume (Ultra-Hi orange)</French>
|
||||
<German>Knicklicht (Orange, Hell)</German>
|
||||
<Japanese>ケミライト (高輝度 オレンジ)</Japanese>
|
||||
<Polish>Świetlik (ultra-jaskrawy pomarańczowy)</Polish>
|
||||
<Italian>Luce chimica (Ultra-Hi Arancione)</Italian>
|
||||
@ -330,6 +337,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_UltraHiOrange_DisplayNameShort">
|
||||
<English>Orange Ultra-Hi Light</English>
|
||||
<French>Lum. orange ultra haute intensité</French>
|
||||
<German>Helles, orangenes Knicklicht</German>
|
||||
<Japanese>ウルトラ高輝度のオレンジ色</Japanese>
|
||||
<Polish>Ultra-jaskrawe pomarańczowe światło</Polish>
|
||||
<Italian>Luce Ultra-Hi Arancione</Italian>
|
||||
@ -339,6 +347,7 @@
|
||||
<Key ID="STR_ACE_Chemlights_UltraHiOrange_DescriptionShort">
|
||||
<English>Type: Light - Orange Ultra-Hi (5 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
<French>Type: Lumière - Orange Ultra-Hi (5 minutes)<br />Nbre: 1<br /> À main</French>
|
||||
<German>Typ: Licht - orange, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand</German>
|
||||
<Japanese>種類: 照明 - ウルトラ高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯</Japanese>
|
||||
<Polish>Typ: Światło - ultra-jaskrawe pomarańczowe (30 minut)<br/>Pociski: 1<br/>Używany w: ręce</Polish>
|
||||
<Italian>Tipo: Luce - Ultra-Hi (5 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
|
@ -138,6 +138,7 @@ PREP(positionToASL);
|
||||
PREP(progressBar);
|
||||
PREP(readSettingFromModule);
|
||||
PREP(receiveRequest);
|
||||
PREP(registerItemReplacement);
|
||||
PREP(removeCanInteractWithCondition);
|
||||
PREP(removeSpecificMagazine);
|
||||
PREP(requestCallback);
|
||||
|
@ -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 <OBJECT><LOCATION><MISSIONNAMESPACE>
|
||||
* 0: Namespace <OBJECT|LOCATION|NAMESPACE>
|
||||
* 1: Number Set ID <STRING>
|
||||
* 2: Operation (sum, product, min, max, avg) (Case Sensitive) <STRING>
|
||||
* 2: Operation (max, min, sum, product, avg) (Case Sensitive) <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* Value <NUMBER>
|
||||
@ -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};
|
||||
};
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Adds or removes a source to an arithmetic set.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Namespace <OBJECT><LOCATION><MISSIONNAMESPACE>
|
||||
* 0: Namespace <OBJECT|LOCATION|NAMESPACE>
|
||||
* 1: Number Set ID <STRING>
|
||||
* 2: Source <STRING>
|
||||
* 3: Code that returns a number (can access var _namespace) [use {} to remove] <CODE>
|
||||
@ -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;
|
||||
|
@ -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;
|
||||
};
|
||||
|
112
addons/common/functions/fnc_registerItemReplacement.sqf
Normal file
112
addons/common/functions/fnc_registerItemReplacement.sqf
Normal file
@ -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 <STRING or NUMBER>
|
||||
* 1: Item or list of items <STRING or ARRAY>
|
||||
* 2: Replace items that inherit from original item (only if 0 is STRING) (Optional)<BOOL>
|
||||
*
|
||||
* 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;
|
||||
};
|
@ -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 <br/>Line 2"}, [2]] call ace_common_fnc_watchVariable
|
||||
* ["player names", {allPlayers apply {name _x}}, [5]] call ace_common_fnc_watchVariable // handles any data types
|
||||
*
|
||||
|
@ -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];
|
||||
|
13
addons/dragging/CfgMovesMaleSdr.hpp
Normal file
13
addons/dragging/CfgMovesMaleSdr.hpp
Normal file
@ -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
|
||||
};
|
||||
};
|
||||
};
|
@ -17,3 +17,4 @@ class CfgPatches {
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgMovesBasic.hpp"
|
||||
#include "CfgMovesMaleSdr.hpp"
|
||||
|
@ -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 {
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
22
addons/explosives/Cfg3DEN.hpp
Normal file
22
addons/explosives/Cfg3DEN.hpp
Normal file
@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -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"
|
||||
|
@ -1042,5 +1042,13 @@
|
||||
<Russian>Таймер взрывчатки</Russian>
|
||||
<Portuguese>Timer de explosão</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_IsEOD_DisplayName">
|
||||
<English>Is EOD</English>
|
||||
<German>Kampfmittelbeseitigung</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_IsEOD_Description">
|
||||
<English>Controls whether the unit is an explosive specialist.</English>
|
||||
<German>Steuert, ob die Einheit ein Sprengstoffspezialist ist.</German>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -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 ""};
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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), {
|
||||
|
14
addons/medical/dev/reportSettings.sqf
Normal file
14
addons/medical/dev/reportSettings.sqf
Normal file
@ -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;
|
@ -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 {"[<t color ='#FFCC22'> Limping </t>]"} 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];
|
||||
|
@ -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;
|
||||
|
@ -47,21 +47,17 @@
|
||||
<Portuguese>Mancando</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Limping_Description">
|
||||
<English>Limp when unit has leg wounds...(todo)</English>
|
||||
<Russian>Хромота, когда юнит имеет ранения ног...</Russian>
|
||||
<Japanese>足を負傷時に引きずって歩くようにします・・・(TODO)</Japanese>
|
||||
<French>Une unité boite si elle est blessée à la jambe... (TODO)</French>
|
||||
<Portuguese>Mancar quando a unidade possuir ferimentos nas pernas... (TODO)</Portuguese>
|
||||
<English>Controls whether open or bandaged wounds cause a person to limp.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Limping_LimpOnOpenWounds">
|
||||
<English>Limp on open wounds</English>
|
||||
<English>Limp on Open Wounds</English>
|
||||
<Russian>Хромота при открытых ранах</Russian>
|
||||
<Japanese>創傷開放時に跛行</Japanese>
|
||||
<French>Boiter si plaies ouvertes</French>
|
||||
<Portuguese>Mancar se possuir feridas abertas</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Limping_LimpRequiresStitching">
|
||||
<English>Limp on open or bandaged wounds</English>
|
||||
<English>Limp on Open or Bandaged Wounds</English>
|
||||
<Russian>Хромота при открытых или забинтованых ранах</Russian>
|
||||
<Japanese>負傷時は引きずって歩くようにします</Japanese>
|
||||
<French>Boiter si plaies ouvertes ou pansées</French>
|
||||
@ -75,21 +71,17 @@
|
||||
<Portuguese>Fraturas</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Fractures_Description">
|
||||
<English>Limp fractures... (todo)</English>
|
||||
<Russian>Хромота при переломах...</Russian>
|
||||
<Japanese>骨折時は引きずって歩くようにします・・・ (TODO)</Japanese>
|
||||
<French>Une unité boite en cas de fracture... (TODO)</French>
|
||||
<Portuguese>Mancar Fraturas (TODO)</Portuguese>
|
||||
<English>Controls the effect of using splints to treat fractures.\nWhen disabled, injuries will not cause fractures.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Fractures_SplintHealsFully">
|
||||
<English>Splints fully heal fractures</English>
|
||||
<English>Splints Fully Heal Fractures</English>
|
||||
<Russian>Шины полностью лечат перелом</Russian>
|
||||
<Japanese>添え木で骨折完治</Japanese>
|
||||
<French>Les attelles guérissent complètement les fractures</French>
|
||||
<Portuguese>Tala cura fraturas completamente</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Fractures_SplintHasEffects">
|
||||
<English>Splints heal (but cannot sprint)</English>
|
||||
<English>Splints Heal, but Cannot Sprint</English>
|
||||
<Russian>Шины вылечивают, но не дают бегать</Russian>
|
||||
<Japanese>添え木で治療しますが、走れません</Japanese>
|
||||
<French>Les attelles guérissent les fractures, mais empêchent de courir</French>
|
||||
|
@ -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}};
|
||||
|
@ -1,3 +1,4 @@
|
||||
PREP(determineIfFatal);
|
||||
PREP(getTypeOfDamage);
|
||||
PREP(handleIncapacitation);
|
||||
PREP(parseConfigForInjuries);
|
||||
|
@ -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;
|
||||
|
62
addons/medical_damage/functions/fnc_determineIfFatal.sqf
Normal file
62
addons/medical_damage/functions/fnc_determineIfFatal.sqf
Normal file
@ -0,0 +1,62 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror, Glowbal
|
||||
* Determines if damage is fatal
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit <OBJECT>
|
||||
* 1: Part No <NUMBER>
|
||||
* 2: Damage Array - QGVAR(medical,bodyPartDamage) <ARRAY>
|
||||
* 3: New Damage <NUMBER>
|
||||
*
|
||||
* ReturnValue:
|
||||
* Was Fatal <BOOL>
|
||||
*
|
||||
* 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
|
||||
|
@ -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";
|
||||
*/
|
||||
|
@ -8,18 +8,19 @@
|
||||
* 1: Name Of Body Part <STRING>
|
||||
* 2: Amount Of Damage <NUMBER>
|
||||
* 3: Type of the damage done <STRING>
|
||||
* 4: Weighted array of damaged selections <ARRAY>
|
||||
*
|
||||
* 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);
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -477,5 +477,20 @@
|
||||
<Japanese>大きな刺し傷</Japanese>
|
||||
<Korean>대형 관통상</Korean>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Damage_fatalDamageSource_DisplayName">
|
||||
<English>Fatal Damage Source</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Damage_fatalDamageSource_Description">
|
||||
<English>Determines what damage can be fatal</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Damage_fatalDamageSource_vitalShotsOnly">
|
||||
<English>Only large hits to vital organs</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Damage_fatalDamageSource_trauma">
|
||||
<English>Sum of trauma</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Damage_fatalDamageSource_both">
|
||||
<English>Either</English>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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;
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Arguments:
|
||||
* 0: Enable effect <BOOL>
|
||||
* 1: Current bloodloss (in l/s) <NUMBER>
|
||||
* 2: Instant change (optional, default false) <BOOL>
|
||||
*
|
||||
* 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;
|
||||
};
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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) <BOOL>
|
||||
*
|
||||
* 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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -46,6 +46,25 @@
|
||||
<French>Pulsations floues</French>
|
||||
<Portuguese>Borrão Pulsante</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Feedback_PainEffectType_ChromAberration">
|
||||
<English>Chromatic Aberration</English>
|
||||
<German>Chromatische Aberration</German>
|
||||
<Polish>Aberracja chromatyczna</Polish>
|
||||
<Russian>Хроматическая аберрация</Russian>
|
||||
<Italian>Aberrazione cromatica</Italian>
|
||||
<Spanish>Aberración cromática</Spanish>
|
||||
<French>Aberration chromatique</French>
|
||||
<Hungarian>Kromatikus aberráció</Hungarian>
|
||||
<Czech>Chromatická aberace</Czech>
|
||||
<Portuguese>Aberração cromática</Portuguese>
|
||||
<Japanese>色の収差</Japanese>
|
||||
<Korean>색수차</Korean>
|
||||
<Chinesesimp>色差</Chinesesimp>
|
||||
<Chinese>色差</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Feedback_PainEffectType_OnlyBase">
|
||||
<English>Only high pain effect</English>
|
||||
</Key>
|
||||
<Container name="Settings">
|
||||
<Key ID="STR_ACE_Medical_feedback_enableScreams_DisplayName">
|
||||
<English>Enable Screams</English>
|
||||
|
@ -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";
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -11,7 +11,7 @@ PREP(initUnit);
|
||||
PREP(isBeingCarried);
|
||||
PREP(isBeingDragged);
|
||||
PREP(isInStableCondition);
|
||||
PREP(setCardiacArrest);
|
||||
PREP(setCardiacArrestState);
|
||||
PREP(setDead);
|
||||
PREP(setUnconscious);
|
||||
PREP(setUnconsciousState);
|
||||
PREP(updateWoundBloodLoss);
|
||||
|
@ -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;
|
@ -12,13 +12,13 @@
|
||||
* Success <BOOL>
|
||||
*
|
||||
* 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)); };
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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}
|
||||
};
|
||||
};
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -0,0 +1,27 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: ddm999
|
||||
* Handle holster settings [disabled, lowered, loweredExam, holster, holsterExam]
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Medic <OBJECT>
|
||||
* 1: Patient <OBJECT>
|
||||
* 2: Treatment Config <CONFIG>
|
||||
*
|
||||
* Return Value:
|
||||
* Can Treat <BOOL>
|
||||
*
|
||||
* 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
|
@ -1,47 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: KoffeinFlummi, commy2, mharis001
|
||||
* Handles converting vanilla medical items with ACE equivalents.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* 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);
|
@ -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;
|
||||
|
||||
|
||||
|
@ -426,6 +426,24 @@
|
||||
<Russian>Техника и госпитали</Russian>
|
||||
<Portuguese>Veículos e Instalações Médicas</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_HolsterRequired_DisplayName">
|
||||
<English>Holster Required</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_HolsterRequired_Description">
|
||||
<English>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.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_HolsterRequired_Lowered">
|
||||
<English>Lowered or Holstered</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_HolsterRequired_LoweredExam">
|
||||
<English>Lowered or Holstered (Except Exam)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_HolsterRequired_Holstered">
|
||||
<English>Holstered only</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_HolsterRequired_HolsteredExam">
|
||||
<English>Holstered only (Except Exam)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_medicalSupplyCrate">
|
||||
<English>[ACE] Medical Supply Crate (Basic)</English>
|
||||
<Russian>[ACE] Ящик с медикаментами (базовая медицина)</Russian>
|
||||
@ -3669,5 +3687,23 @@
|
||||
<Chinesesimp>个人急救包使用条件</Chinesesimp>
|
||||
<Chinese>個人急救包使用條件</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_clearTraumaAfterBandage_DisplayName">
|
||||
<English>Clear Trauma After Bandage</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Treatment_clearTraumaAfterBandage_Description">
|
||||
<English>Heal fully bandaged hitpoints</English>
|
||||
<Polish>Lecz w pełni zabandażowane hitpointy</Polish>
|
||||
<Spanish>Curar miembros totalmente vendados</Spanish>
|
||||
<Russian>Исцелять полностью перебинтованные части тела</Russian>
|
||||
<Portuguese>Curar pontos de vida totalmente enfaixados</Portuguese>
|
||||
<Czech>Heal fully bandaged hitpoints</Czech>
|
||||
<Italian>Cura hitpoints completamente bendati</Italian>
|
||||
<French>Soigner les plaies entièrement bandées</French>
|
||||
<German>Heilt vollständig bandagierte Trefferpunkte</German>
|
||||
<Japanese>包帯は体力を完全に回復する</Japanese>
|
||||
<Korean>붕대를 감은후 체력을 회복함</Korean>
|
||||
<Chinesesimp>完全医疗包扎的部位至痊愈</Chinesesimp>
|
||||
<Chinese>完全醫療包紮的部位至痊癒</Chinese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
79
addons/nametags/CfgFactionClasses.hpp
Normal file
79
addons/nametags/CfgFactionClasses.hpp
Normal file
@ -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)
|
||||
};
|
||||
};
|
||||
};
|
BIN
addons/nametags/UI/icons_france/captain_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/captain_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_france/colonel_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/colonel_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_france/corporal_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/corporal_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_france/lieutenant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/lieutenant_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_france/major_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/major_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_france/private_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/private_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_france/sergeant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_france/sergeant_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/captain_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/captain_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/colonel_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/colonel_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/corporal_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/corporal_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/lieutenant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/lieutenant_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/major_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/major_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/private_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/private_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_germany/sergeant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_germany/sergeant_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/captain_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/captain_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/colonel_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/colonel_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/corporal_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/corporal_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/lieutenant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/lieutenant_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/major_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/major_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/private_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/private_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_spain/sergeant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_spain/sergeant_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_uk/captain_gs.paa
Normal file
BIN
addons/nametags/UI/icons_uk/captain_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_uk/colonel_gs.paa
Normal file
BIN
addons/nametags/UI/icons_uk/colonel_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_uk/corporal_gs.paa
Normal file
BIN
addons/nametags/UI/icons_uk/corporal_gs.paa
Normal file
Binary file not shown.
BIN
addons/nametags/UI/icons_uk/lieutenant_gs.paa
Normal file
BIN
addons/nametags/UI/icons_uk/lieutenant_gs.paa
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user