mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #4192 from acemod/medical-rewrite-engine-component
merge medical engine component into medical rewrite branch
This commit is contained in:
commit
89a5f28772
@ -12,129 +12,6 @@ class CfgVehicles {
|
||||
class ACE_Module;
|
||||
// TODO Add settings modules
|
||||
|
||||
#define ARM_LEG_ARMOR_DEFAULT 1
|
||||
#define ARM_LEG_ARMOR_BETTER 1
|
||||
#define ARM_LEG_ARMOR_CSAT 1
|
||||
|
||||
#define ADD_ACE_HITPOINTS(ARM_ARMOR,LEG_ARMOR) \
|
||||
class HitLeftArm { \
|
||||
armor = ARM_ARMOR; \
|
||||
material = -1; \
|
||||
name = "hand_l"; \
|
||||
passThrough = 1; \
|
||||
radius = 0.08; \
|
||||
explosionShielding = 1; \
|
||||
visual = "injury_hands"; \
|
||||
minimalHit = 0.01; \
|
||||
}; \
|
||||
class HitRightArm: HitLeftArm { \
|
||||
name = "hand_r"; \
|
||||
}; \
|
||||
class HitLeftLeg { \
|
||||
armor = LEG_ARMOR; \
|
||||
material = -1; \
|
||||
name = "leg_l"; \
|
||||
passThrough = 1; \
|
||||
radius = 0.1; \
|
||||
explosionShielding = 1; \
|
||||
visual = "injury_legs"; \
|
||||
minimalHit = 0.01; \
|
||||
}; \
|
||||
class HitRightLeg: HitLeftLeg { \
|
||||
name = "leg_r"; \
|
||||
};
|
||||
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_DEFAULT,ARM_LEG_ARMOR_DEFAULT)
|
||||
};
|
||||
};
|
||||
|
||||
class SoldierWB: CAManBase {};
|
||||
class SoldierEB: CAManBase {};
|
||||
class SoldierGB: CAManBase {};
|
||||
|
||||
class B_Soldier_base_F: SoldierWB {};
|
||||
|
||||
class B_Soldier_04_f: B_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_BETTER,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class B_Soldier_05_f: B_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_BETTER,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class I_Soldier_base_F: SoldierGB {};
|
||||
|
||||
class I_Soldier_03_F: I_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_BETTER,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class I_Soldier_04_F: I_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_BETTER,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class O_Soldier_base_F: SoldierEB {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_CSAT,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class O_Soldier_diver_base_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_CSAT,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class O_Soldier_02_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_CSAT,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
class O_officer_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(ARM_LEG_ARMOR_CSAT,ARM_LEG_ARMOR_BETTER)
|
||||
};
|
||||
};
|
||||
|
||||
//These VR guys already have limb hitpoints that we should be able to use
|
||||
//Note: the selections are a little weird, eg: class leg_l {name = "leg_l";};
|
||||
// class B_Soldier_VR_F: B_Soldier_base_F { {
|
||||
// class HitPoints {
|
||||
//Has class hand_l, hand_r, leg_l, leg_r Hitpoints already
|
||||
// };
|
||||
// };
|
||||
// class O_Soldier_VR_F: O_Soldier_base_F { {
|
||||
// class HitPoints {
|
||||
//Has class hand_l, hand_r, leg_l, leg_r Hitpoints already
|
||||
// };
|
||||
// };
|
||||
// class I_Soldier_VR_F: I_Soldier_base_F { {
|
||||
// class HitPoints {
|
||||
//Has class hand_l, hand_r, leg_l, leg_r Hitpoints already
|
||||
// };
|
||||
// };
|
||||
// class C_Soldier_VR_F: C_man_1 {
|
||||
// class HitPoints {
|
||||
//Has class hand_l, hand_r, leg_l, leg_r Hitpoints already
|
||||
// };
|
||||
// };
|
||||
// class O_Protagonist_VR_F: O_Soldier_base_F {
|
||||
// class HitPoints {
|
||||
//Has class hand_l, hand_r, leg_l, leg_r Hitpoints already
|
||||
// };
|
||||
// };
|
||||
|
||||
class MapBoard_altis_F;
|
||||
class ACE_bodyBagObject: MapBoard_altis_F {
|
||||
class EventHandlers {
|
||||
|
@ -10,34 +10,4 @@ GVAR(SELECTIONS) = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
call FUNC(parseConfigForInjuries);
|
||||
GVAR(STATE_MACHINE) = (configFile >> "ACE_Medical_StateMachine") call FUNC(createStateMachine);
|
||||
|
||||
//Hack for #3168 (units in static weapons do not take any damage):
|
||||
//doing a manual pre-load with a small distance seems to fix the LOD problems with handle damage not returning full results
|
||||
GVAR(fixedStatics) = [];
|
||||
private _fixStatic = {
|
||||
params ["_vehicle"];
|
||||
private _vehType = typeOf _vehicle;
|
||||
TRACE_2("",_vehicle,_vehType);
|
||||
if (!(_vehType in GVAR(fixedStatics))) then {
|
||||
GVAR(fixedStatics) pushBack _vehType;
|
||||
TRACE_1("starting preload",_vehType);
|
||||
[{
|
||||
1 preloadObject (_this select 0);
|
||||
}, {
|
||||
TRACE_1("preload done",_this);
|
||||
}, [_vehType]] call CBA_fnc_waitUntilAndExecute;
|
||||
};
|
||||
};
|
||||
["StaticWeapon", "init", _fixStatic] call CBA_fnc_addClassEventHandler;
|
||||
["Car", "init", _fixStatic] call CBA_fnc_addClassEventHandler;
|
||||
addMissionEventHandler ["Loaded",{
|
||||
{
|
||||
TRACE_1("starting preload (save load)",_x);
|
||||
[{
|
||||
1 preloadObject (_this select 0);
|
||||
}, {
|
||||
TRACE_1("preload done",_this);
|
||||
}, [_x]] call CBA_fnc_waitUntilAndExecute;
|
||||
} forEach GVAR(fixedStatics);
|
||||
}];
|
||||
|
||||
ADDON = true;
|
||||
|
@ -9,11 +9,3 @@ class Extended_PreInit_EventHandlers {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_Init_EventHandlers {
|
||||
class CAManBase {
|
||||
class ADDON {
|
||||
init = QUOTE(call FUNC(install));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,13 +1,6 @@
|
||||
PREP(airwayHandler);
|
||||
PREP(damageCache);
|
||||
PREP(damageOrchestration);
|
||||
PREP(fracturesHandler);
|
||||
PREP(getTypeOfDamage);
|
||||
PREP(handleDamage);
|
||||
PREP(getTypeOfDamage);
|
||||
PREP(internalInjuriesHandler);
|
||||
PREP(setDamage);
|
||||
PREP(translateSelections);
|
||||
PREP(woundsHandler);
|
||||
PREP(woundsHandlerSqf);
|
||||
PREP(install);
|
||||
|
@ -4,8 +4,12 @@ ADDON = false;
|
||||
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
// EGVAR(medical,SELECTIONS) = []; // TODO get all selections from medical
|
||||
// EGVAR(medical,HITPOINTS) = []; // TODO get all selections from medical
|
||||
// TODO EGVAR(medical,allAvailableDamageTypes) = []; // get from medical core component
|
||||
[QGVAR(woundReceived), {
|
||||
params ["_unit", "_woundedHitPoint", "_receivedDamage", "", "_ammo"];
|
||||
|
||||
private _selectionName = EGVAR(medical,SELECTIONS) param [EGVAR(medical,HITPOINTS) find _woundedHitPoint]; // @todo
|
||||
private _typeOfDamage = _ammo call FUNC(getTypeOfDamage);
|
||||
[_unit, _selectionName, _receivedDamage, _ammo, _typeOfDamage] call FUNC(woundsHandler); // TODO also support the sqf variant
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
ADDON = true;
|
||||
|
@ -1,152 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, Glowbal
|
||||
* Cache a handleDamage call to execute it 3 frames later
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit That Was Hit <OBJECT>
|
||||
* 1: Name Of Hit Selection <STRING>
|
||||
* 2: Amount Of Damage <NUMBER>
|
||||
* 3: Shooter <OBJECT>
|
||||
* 4: Projectile <STRING>
|
||||
* 5: HitPointIndex (-1 for structural) <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* <nil>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", "_selectionName", "_damage", "_source", "_projectile", "_hitPointIndex"];
|
||||
|
||||
private _hitSelections = EGVAR(medical,SELECTIONS);
|
||||
|
||||
// Calculate change in damage - use getHitIndex because selection is translated (hitdiaphragm->body)
|
||||
private _newDamage = _damage - (damage _unit);
|
||||
if (_hitPointIndex >= 0) then {_newDamage = _damage - (_unit getHitIndex _hitPointIndex)};
|
||||
|
||||
TRACE_7("ACE_DEBUG: HandleDamage_Caching Called",_unit, _selectionName, _damage, _source, _projectile,_hitPointIndex,_newDamage);
|
||||
|
||||
// Check for vehicle crash
|
||||
private _vehicle = vehicle _unit;
|
||||
if ((_vehicle != _unit) && {!(_vehicle isKindOf "StaticWeapon")} && {_source in [objNull, driver _vehicle, _vehicle]} && {_projectile == ""} && {_selectionName == ""}) then {
|
||||
//if (GVAR(enableVehicleCrashes)) then {
|
||||
_selectionName = selectRandom _hitSelections;
|
||||
_projectile = "vehiclecrash";
|
||||
_this set [1, _selectionName];
|
||||
_this set [4, _projectile];
|
||||
//};
|
||||
};
|
||||
|
||||
// Handle falling damage
|
||||
private _impactVelocity = (velocity _unit) select 2;
|
||||
if (_impactVelocity < -5 && {_vehicle == _unit}) then {
|
||||
TRACE_1("Starting isFalling", time);
|
||||
_unit setVariable [QGVAR(isFalling), true];
|
||||
_unit setVariable [QGVAR(impactVelocity), _impactVelocity];
|
||||
} else {
|
||||
if ((_unit getVariable [QGVAR(isFalling), false]) && {diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2}) then {
|
||||
TRACE_1("Ending isFalling", time);
|
||||
_unit setVariable [QGVAR(isFalling), false];
|
||||
};
|
||||
};
|
||||
|
||||
if (_unit getVariable [QGVAR(isFalling), false]) then {
|
||||
if !(_selectionName in ["", "leg_l", "leg_r"]) then {
|
||||
if (_selectionName == "body") then {
|
||||
_newDamage = _newDamage * abs(_unit getVariable [QGVAR(impactVelocity), _impactVelocity]) / 50;
|
||||
} else {
|
||||
_newDamage = _newDamage * 0.5;
|
||||
};
|
||||
if (_newDamage < 0.075) then {_newDamage = 0;}; //Filter minor falling damage to non-leg hitpoints
|
||||
} else {
|
||||
if (_selectionName == "") then {
|
||||
_selectionName = selectRandom ["leg_l", "leg_r"];
|
||||
_this set [1, _selectionName];
|
||||
};
|
||||
_newDamage = _newDamage * 0.7;
|
||||
};
|
||||
_projectile = "falling";
|
||||
_this set [4, "falling"];
|
||||
};
|
||||
|
||||
// Finished with the current frame, reset variables
|
||||
// Note: sometimes handleDamage spans over 2 or even 3 frames.
|
||||
if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) then {
|
||||
_unit setVariable [QGVAR(frameNo_damageCaching), diag_frameno];
|
||||
|
||||
// handle the cached damages 3 frames later
|
||||
[{
|
||||
private ["_args", "_params"];
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_unit", "_frameno"];
|
||||
if (diag_frameno >= _frameno + 2) then {
|
||||
_unit setDamage 0;
|
||||
private _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
private _cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
{
|
||||
(_x + [_cache_damages select _forEachIndex]) call FUNC(damageOrchestration);
|
||||
} forEach _cache_params;
|
||||
[_unit] call FUNC(setDamage);
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
}, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
_unit setVariable [QGVAR(cachedProjectiles), []];
|
||||
_unit setVariable [QGVAR(cachedHitPoints), []];
|
||||
_unit setVariable [QGVAR(cachedDamages), []];
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
};
|
||||
|
||||
// Caching of the damage events
|
||||
if (_selectionName != "") then {
|
||||
private _cache_projectiles = _unit getVariable QGVAR(cachedProjectiles);
|
||||
private _index = _cache_projectiles find _projectile;
|
||||
|
||||
// Check if the current projectile has already been handled once
|
||||
if (_index >= 0 && {_projectile != "falling"}) exitWith {
|
||||
|
||||
private _cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
private _otherDamage = (_cache_damages select _index); // Find the previous damage this projectile has done
|
||||
|
||||
// Take the highest damage of the two
|
||||
if (_newDamage > _otherDamage) then {
|
||||
private _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams);
|
||||
private _cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints);
|
||||
|
||||
// Restore the damage before the previous damage was processed
|
||||
private _hitPoint = _cache_hitpoints select _index;
|
||||
private _restore = ((_unit getHitIndex _hitPoint) - _otherDamage) max 0;
|
||||
_unit setHitIndex [_hitPoint, _restore];
|
||||
|
||||
_cache_hitpoints set [_index, _hitPointIndex];
|
||||
_cache_damages set [_index, _newDamage];
|
||||
_cache_params set[_index, _this];
|
||||
|
||||
_unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles];
|
||||
_unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints];
|
||||
_unit setVariable [QGVAR(cachedDamages), _cache_damages];
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params];
|
||||
};
|
||||
};
|
||||
|
||||
private _cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints);
|
||||
private _cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
private _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams);
|
||||
|
||||
// This is an unhandled projectile
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack _hitPointIndex;
|
||||
_cache_damages pushBack _newDamage;
|
||||
_cache_params pushBack _this;
|
||||
|
||||
// Store the new cached values
|
||||
_unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles];
|
||||
_unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints];
|
||||
_unit setVariable [QGVAR(cachedDamages), _cache_damages];
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params];
|
||||
};
|
||||
|
||||
TRACE_8("ACE_DEBUG: HandleDamage_Caching",_unit, _newDamage, _cache_params, _cache_damages, _unit getVariable QGVAR(cachedProjectiles), _unit getVariable QGVAR(cachedHitPoints), _unit getVariable QGVAR(cachedDamages), _unit getVariable QGVAR(cachedHandleDamageParams));
|
||||
|
||||
_newDamage
|
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Damage orchestration
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit That Was Hit <OBJECT>
|
||||
* 1: Name Of Hit Selection <STRING>
|
||||
* 2: Amount Of Damage <NUMBER>
|
||||
* 3: Shooter <OBJECT>
|
||||
* 4: Projectile <STRING>
|
||||
* 5: Hit part index of the hit point <NUMBER>
|
||||
* 6: Current damage to be returned <NUMBER>
|
||||
*
|
||||
* //On 1.63 dev:
|
||||
* 6: Shooter? <OBJECT>
|
||||
* 7: Current damage to be returned <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfProjectile", "_hitPointNumber", "_newDamage"];
|
||||
|
||||
//Temp fix for 1.63 handleDamage changes
|
||||
if (_newDamage isEqualType objNull) then {
|
||||
_newDamage = _this select 7;
|
||||
};
|
||||
TRACE_5("ACE_DEBUG: damageOrchestration Called",_unit, _selectionName, _amountOfDamage, _sourceOfDamage, _typeOfProjectile);
|
||||
|
||||
private _part = [_selectionName] call EFUNC(medical,selectionNameToNumber);
|
||||
if (_part < 0) exitWith {};
|
||||
|
||||
private _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
// Sorting out the damage
|
||||
private _damageBodyParts = _unit getVariable [QEGVAR(medical,bodyPartStatus), [0,0,0,0,0,0]];
|
||||
|
||||
_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
|
||||
_unit setVariable [QEGVAR(medical,bodyPartStatus), _damageBodyParts, true];
|
||||
|
||||
private _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
|
||||
|
||||
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(woundsHandler); // TODO also support the sqf variant
|
||||
|
||||
// TODO Disabled until implemented fully
|
||||
//if (GVAR(enableAirway)) then {
|
||||
// [_unit,_selectionName,_newDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleDamage_airway);
|
||||
//};
|
||||
//if (GVAR(enableFractures)) then {
|
||||
// [_unit,_selectionName,_newDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleDamage_fractures);
|
||||
//};
|
||||
//if (GVAR(enableInternalBleeding)) then {
|
||||
// [_unit,_selectionName,_newDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleDamage_internalInjuries);
|
||||
//};
|
||||
|
||||
// TODO raise state events for unit
|
@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, Glowbal, commy2
|
||||
* Main HandleDamage EH function.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit That Was Hit <OBJECT>
|
||||
* 1: Name Of Hit Selection <STRING>
|
||||
* 2: Amount Of Damage <NUMBER>
|
||||
* 3: Shooter <OBJECT>
|
||||
* 4: Projectile <OBJECT/STRING>
|
||||
* 5: HitPointIndex (-1 for structural) <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Damage To Be Inflicted <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_hitPointIndex"];
|
||||
TRACE_5("ACE_DEBUG: HandleDamage Called",_unit, _selection, _damage, _shooter, _projectile);
|
||||
|
||||
// bug, apparently can fire for remote units in special cases
|
||||
if !(local _unit) exitWith {
|
||||
TRACE_2("ACE_DEBUG: HandleDamage on remote unit!",_unit, isServer);
|
||||
nil
|
||||
};
|
||||
|
||||
// bug, assumed fixed, @todo excessive testing, if nothing happens remove
|
||||
if (_projectile isEqualType objNull) then {
|
||||
_projectile = typeOf _projectile;
|
||||
_this set [4, _projectile];
|
||||
};
|
||||
|
||||
TRACE_3("ACE_DEBUG: HandleDamage",_selection,_damage,_unit);
|
||||
|
||||
// If damage is in dummy hitpoints, "hands" and "legs", don't change anything
|
||||
if (_selection == "hands") exitWith {_unit getHit "hands"};
|
||||
if (_selection == "legs") exitWith {_unit getHit "legs"};
|
||||
if (_selection == "arms") exitWith {_unit getHit "arms"};
|
||||
|
||||
// Deal with the new hitpoint and selection names introduced with Arma v1.50 and later.
|
||||
// This will convert new selection names into selection names that the medical system understands
|
||||
// TODO This should be cleaned up when we revisit the medical system at a later stage
|
||||
// and instead we should deal with the new hitpoints directly
|
||||
_selection = [_unit, _selection, _hitPointIndex] call FUNC(translateSelections);
|
||||
_this set [1, _selection]; // ensure that the parameters are set correctly
|
||||
|
||||
// If the damage is being weird, we just tell it to fuck off. Ignore: "hands", "legs", "arms"
|
||||
if (_selection != "" && {!(_selection in EGVAR(medical,SELECTIONS))}) exitWith {0};
|
||||
|
||||
// Exit if we disable damage temporarily
|
||||
if !(_unit getVariable [QEGVAR(medical,allowDamage), true]) exitWith {
|
||||
TRACE_3("ACE_DEBUG: HandleDamage damage disabled.",_selection,damage _unit,_unit);
|
||||
if (_selection == "") then {
|
||||
damage _unit
|
||||
} else {
|
||||
_unit getHit _selection
|
||||
};
|
||||
};
|
||||
|
||||
// Get return damage
|
||||
private _damageReturn = _damage;
|
||||
|
||||
private _newDamage = _this call FUNC(damageCache);
|
||||
// handleDamage_caching may have modified the projectile string
|
||||
private _typeOfDamage = [_projectile] call FUNC(getTypeOfDamage);
|
||||
|
||||
TRACE_3("ACE_DEBUG: HandleDamage caching new damage",_selection,_newDamage,_unit);
|
||||
|
||||
private _typeIndex = (EGVAR(medical,allAvailableDamageTypes) find _typeOfDamage);
|
||||
private _minLethalDamage = if (_typeIndex >= 0) then {
|
||||
EGVAR(medical,minLethalDamages) select _typeIndex
|
||||
} else {
|
||||
0.01
|
||||
};
|
||||
|
||||
if (!isNull _shooter) then {
|
||||
_unit setvariable [QGVAR(lastDamageSource), _shooter, false];
|
||||
};
|
||||
|
||||
private _vehicle = vehicle _unit;
|
||||
private _effectiveSelectionName = _selection;
|
||||
if ((_vehicle != _unit) && {!(_vehicle isKindOf "StaticWeapon")} && {_shooter in [objNull, driver _vehicle, _vehicle]} && {_projectile == ""} && {_selection == ""}) then {
|
||||
//if (GVAR(enableVehicleCrashes)) then {
|
||||
// TODO implement properly
|
||||
_effectiveSelectionName = _this select 1; //pull random selection from HDC
|
||||
//};
|
||||
};
|
||||
|
||||
// ensure we are not killing the unit in the handleDamage event
|
||||
// TODO based on unit state, see if we are going ot kill the unit here. This will allow us to trigger ragdoll
|
||||
_damageReturn = _damageReturn min 0.89;
|
||||
|
||||
/*if ((_minLethalDamage <= _newDamage) && {[_unit, [_effectiveSelectionName] call EFUNC(medical,selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then {
|
||||
if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith {
|
||||
_damageReturn = 0.9;
|
||||
};
|
||||
if ([_unit, false, true] call FUNC(setDead)) then {
|
||||
_damageReturn = 1;
|
||||
} else {
|
||||
_damageReturn = _damageReturn min 0.89;
|
||||
};
|
||||
} else {
|
||||
};*/
|
||||
|
||||
// Start the loop that tracks the unit vitals
|
||||
[_unit] call EFUNC(medical,addStateHandler);
|
||||
/*
|
||||
if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_damageReturn >= 0.9} && {_selection in ["", "head", "body"]}) exitWith {
|
||||
|
||||
// TODO execute this on revive entry
|
||||
if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then {
|
||||
[_unit] call EFUNC(common,unloadPerson);
|
||||
};
|
||||
0.89;
|
||||
};*/
|
||||
TRACE_3("ACE_DEBUG: HandleDamage damage return",_selection,_damageReturn,_unit);
|
||||
|
||||
_damageReturn
|
@ -1,5 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Sets the hitpoint damage for au nit to the correct values
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit for which the hitpoint damage will be sorted out <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
if (!local _unit) exitWith {};
|
||||
|
||||
// ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]
|
||||
private _bodyStatus = _unit getVariable [QEGVAR(medical,bodyPartStatus), [0,0,0,0,0,0]];
|
||||
|
||||
_bodyStatus params ["_headDamage", "_torsoDamage", "_handsDamageR", "_handsDamageL", "_legsDamageR", "_legsDamageL"];
|
||||
|
||||
_unit setHitPointDamage ["hitHead", _headDamage min 0.95];
|
||||
_unit setHitPointDamage ["hitBody", _torsoDamage min 0.95];
|
||||
_unit setHitPointDamage ["hitHands", (_handsDamageR + _handsDamageL) min 0.95];
|
||||
_unit setHitPointDamage ["hitLegs", (_legsDamageR + _legsDamageL) min 0.95];
|
||||
|
||||
if (_bodyStatus isEqualTo [0,0,0,0,0,0]) then {
|
||||
_unit setDamage 0;
|
||||
};
|
@ -1,96 +0,0 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Translate selection names into medical usable hit selection names.
|
||||
* Aims to deal with the new hitpoint system introduced in Arma3 v1.50 and later.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: selection name <STRING>
|
||||
* 2: HitPoint Index/True to get hitpoint <NUMBER><BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* translated selection/hitpoint name <STRING>
|
||||
*
|
||||
* Example:
|
||||
* [bob, "pelvis", 4] call ace_medical_fnc_translateSelections
|
||||
* Returns "body"
|
||||
*
|
||||
* [bob, "body", true] call ace_medical_fnc_translateSelections
|
||||
* Returns "HitBody"
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define HEAD_SELECTIONS ["face_hub", "neck", "head"]
|
||||
#define HEAD_HITPOINTS ["hitface", "hitneck", "hithead"]
|
||||
#define TORSO_SELECTIONS ["pelvis", "spine1", "spine2", "spine3", "body"]
|
||||
#define TORSO_HITPOINTS ["hitpelvis", "hitabdomen", "hitdiaphragm", "hitchest", "hitbody"]
|
||||
#define L_ARM_SELECTIONS ["hand_l"]
|
||||
#define L_ARM_HITPOINTS ["hitleftarm", "hand_l"]
|
||||
#define R_ARM_SELECTIONS ["hand_r"]
|
||||
#define R_ARM_HITPOINTS ["hitrightarm", "hand_r"]
|
||||
#define L_LEG_SELECTIONS ["leg_l"]
|
||||
#define L_LEG_HITPOINTS ["hitleftleg", "leg_l"]
|
||||
#define R_LEG_SELECTIONS ["leg_r"]
|
||||
#define R_LEG_HITPOINTS ["hitrightleg", "leg_r"]
|
||||
|
||||
params ["_unit", "_selection", "_hitPointIndex"];
|
||||
|
||||
if (_selection == "") exitWith {""};
|
||||
|
||||
//Get Selection from standard selection ["head","body","hand_l","hand_r","leg_l","leg_r"]
|
||||
if (_hitPointIndex isEqualTo true) exitWith {
|
||||
private _returnHitPoint = EGVAR(medical,HITPOINTS) select (EGVAR(medical,SELECTIONS) find _selection);
|
||||
//If the selection is a valid hitpoint just return it:
|
||||
if (!isNil {_unit getHitPointDamage _returnHitPoint}) exitWith {
|
||||
_returnHitPoint;
|
||||
};
|
||||
|
||||
//Those VR fuckers have weird limb hitpoints
|
||||
private _hitPoints = switch (_selection) do {
|
||||
case ("hand_l"): {L_ARM_HITPOINTS};
|
||||
case ("hand_r"): {R_ARM_HITPOINTS};
|
||||
case ("leg_l"): {L_LEG_HITPOINTS};
|
||||
case ("leg_r"): {R_LEG_HITPOINTS};
|
||||
case ("head"): {HEAD_HITPOINTS};
|
||||
case ("body"): {TORSO_HITPOINTS};
|
||||
default {[]};
|
||||
};
|
||||
{
|
||||
if (!isNil {_unit getHitPointDamage _x}) exitWith {
|
||||
_returnHitPoint = _x;
|
||||
};
|
||||
} forEach _hitPoints;
|
||||
_returnHitPoint
|
||||
};
|
||||
|
||||
|
||||
//Get Selection from Selection/HitIndex:
|
||||
|
||||
if (_selection in HEAD_SELECTIONS) exitWith {"head"};
|
||||
if (_selection in TORSO_SELECTIONS) exitWith {"body"};
|
||||
|
||||
// Not necessary unless we get more hitpoints variants in an next arma update
|
||||
/*if (_selection in L_ARM_SELECTIONS) exitWith {"hand_l"};
|
||||
if (_selection in R_ARM_SELECTIONS) exitWith {"hand_r"};
|
||||
if (_selection in L_LEG_SELECTIONS) exitWith {"leg_l"};
|
||||
if (_selection in R_LEG_SELECTIONS) exitWith {"leg_r"};*/
|
||||
|
||||
//Backup method to detect weird selections/hitpoints
|
||||
if ((_selection == "?") || {!(_selection in EGVAR(medical,SELECTIONS))}) exitWith {
|
||||
if (_hitPointIndex < 0) exitWith {_selection};
|
||||
private _hitPoint = toLower configName ((configProperties [(configFile >> "CfgVehicles" >> (typeOf _unit) >> "HitPoints")]) select _hitPointIndex);
|
||||
TRACE_4("Weird sel/hit", _unit, _selection, _hitPointIndex, _hitPoint);
|
||||
|
||||
if (_hitPoint in HEAD_HITPOINTS) exitWith {"head"};
|
||||
if (_hitPoint in TORSO_HITPOINTS) exitWith {"body"};
|
||||
if (_hitPoint in L_ARM_HITPOINTS) exitWith {"hand_l"};
|
||||
if (_hitPoint in R_ARM_HITPOINTS) exitWith {"hand_r"};
|
||||
if (_hitPoint in L_LEG_HITPOINTS) exitWith {"leg_l"};
|
||||
if (_hitPoint in R_LEG_HITPOINTS) exitWith {"leg_r"};
|
||||
|
||||
_selection
|
||||
};
|
||||
|
||||
_selection;
|
1
addons/medical_engine/$PBOPREFIX$
Normal file
1
addons/medical_engine/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\medical_engine
|
16
addons/medical_engine/CfgActions.hpp
Normal file
16
addons/medical_engine/CfgActions.hpp
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
class CfgActions {
|
||||
class None;
|
||||
class Heal: None {
|
||||
show = 0;
|
||||
};
|
||||
class HealSoldier: None {
|
||||
show = 0;
|
||||
};
|
||||
class HealSoldierSelf: None {
|
||||
show = 0;
|
||||
};
|
||||
class FirstAid: None {
|
||||
show = 0;
|
||||
};
|
||||
};
|
18
addons/medical_engine/CfgEventHandlers.hpp
Normal file
18
addons/medical_engine/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
8
addons/medical_engine/CfgInGameUI.hpp
Normal file
8
addons/medical_engine/CfgInGameUI.hpp
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
#ifdef DISABLE_VANILLA_BLOOD_TEXTURES
|
||||
class CfgInGameUI {
|
||||
class PeripheralVision {
|
||||
bloodTexture = ""; //"A3\ui_f\data\igui\cfg\PeripheralVision\bloodTexture_ca.paa";
|
||||
};
|
||||
};
|
||||
#endif
|
158
addons/medical_engine/CfgVehicles.hpp
Normal file
158
addons/medical_engine/CfgVehicles.hpp
Normal file
@ -0,0 +1,158 @@
|
||||
|
||||
class CfgVehicles {
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
// Delete base game sounds.
|
||||
// These are never played for ai and remote players.
|
||||
#ifdef DISABLE_VANILLA_SCREAMS
|
||||
class SoundHitScream {
|
||||
person1[] = {{"Male08ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person2[] = {{"Male06ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person3[] = {{"Male09ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person4[] = {{"Male07ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person5[] = {{"Male03GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person6[] = {{"Male02ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person7[] = {{"Male01ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person8[] = {{"Male01GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person9[] = {{"Male02ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person10[] = {{"Male02GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person11[] = {{"Male03ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person12[] = {{"Male03ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person13[] = {{"Male04ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person14[] = {{"Male05GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person15[] = {{"Male06GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person16[] = {{"Male04GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person17[] = {{"Male05ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person18[] = {{"Male05ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
};
|
||||
#endif
|
||||
#ifdef DISABLE_VANILLA_MOANS
|
||||
class SoundInjured {
|
||||
person_moan1[] = {{"Male08ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan2[] = {{"Male06ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan3[] = {{"Male09ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan4[] = {{"Male07ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan5[] = {{"Male03GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan6[] = {{"Male02ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan7[] = {{"Male01ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan8[] = {{"Male01GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan9[] = {{"Male02ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan10[] = {{"Male02GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan11[] = {{"Male03ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan12[] = {{"Male03ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan13[] = {{"Male04ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan14[] = {{"Male05GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan15[] = {{"Male06GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan16[] = {{"Male04GRE"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan17[] = {{"Male05ENGB"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
person_moan18[] = {{"Male05ENG"},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}},{{EMPTY_SOUND,1}}};
|
||||
};
|
||||
#endif
|
||||
// Can't overwrite these with empty sounds -> CTD
|
||||
// Assume lock up if sound duration is 0 seconds.
|
||||
// We mute the sounds instead
|
||||
#ifdef DISABLE_VANILLA_HEARTBEAT
|
||||
class PulsationSound {
|
||||
sample0[] = {{{{"A3\sounds_f\characters\human-sfx\other\heart_4_1",0,0.7},1}}};
|
||||
sample1[] = {{{{"A3\sounds_f\characters\human-sfx\other\heart_4_3",0,0.7},1}}};
|
||||
sample2[] = {{{{"A3\sounds_f\characters\human-sfx\other\heart_4_4",0,0.7},1}}};
|
||||
sample3[] = {{{{"A3\sounds_f\characters\human-sfx\other\heart_4_5",0,0.7},1}}};
|
||||
};
|
||||
#endif
|
||||
// General
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
|
||||
// BluFor
|
||||
class B_Soldier_base_F;
|
||||
class B_Soldier_04_f: B_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
class B_Soldier_05_f: B_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
|
||||
// Indep
|
||||
class I_Soldier_base_F;
|
||||
class I_Soldier_03_F: I_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
class I_Soldier_04_F: I_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
|
||||
// OpFor
|
||||
class SoldierEB;
|
||||
class O_Soldier_base_F: SoldierEB {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
class O_Soldier_02_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
class O_officer_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,2);
|
||||
};
|
||||
};
|
||||
class O_Soldier_diver_base_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
|
||||
// Virtual Reality
|
||||
class B_Soldier_VR_F: B_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
class O_Soldier_VR_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
class I_Soldier_VR_F: I_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
|
||||
// Civilians
|
||||
class C_man_1;
|
||||
class C_Soldier_VR_F: C_man_1 {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
class O_Protagonist_VR_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(1,1);
|
||||
};
|
||||
};
|
||||
|
||||
// APEX
|
||||
class O_V_Soldier_Viper_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(3,3);
|
||||
};
|
||||
};
|
||||
class O_V_Soldier_base_F: O_Soldier_base_F {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(3,3);
|
||||
};
|
||||
};
|
||||
};
|
11
addons/medical_engine/CfgWeapons.hpp
Normal file
11
addons/medical_engine/CfgWeapons.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
class CfgWeapons {
|
||||
// Remove items from Virtual Arsenal.
|
||||
class ItemCore;
|
||||
class FirstAidKit: ItemCore {
|
||||
type = 0;
|
||||
};
|
||||
class Medikit: ItemCore {
|
||||
type = 0;
|
||||
};
|
||||
};
|
11
addons/medical_engine/README.md
Normal file
11
addons/medical_engine/README.md
Normal file
@ -0,0 +1,11 @@
|
||||
ace_medical_engine
|
||||
===============
|
||||
|
||||
Links Arma 3 soldier health simulation to ACE medical system.
|
||||
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [commy2](https://github.com/commy2)
|
20
addons/medical_engine/RscTitles.hpp
Normal file
20
addons/medical_engine/RscTitles.hpp
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
#ifdef DISABLE_VANILLA_BLOOD_TEXTURES
|
||||
class RscTitles {
|
||||
// Disables blood texture overlay
|
||||
class RscHealthTextures {
|
||||
class controls {
|
||||
class Flame_1;
|
||||
class Blood_1: Flame_1 {
|
||||
text = ""; //"A3\Ui_f\data\igui\rsctitles\HealthTextures\blood_lower_ca.paa";
|
||||
};
|
||||
class Blood_2: Flame_1 {
|
||||
text = ""; //"A3\Ui_f\data\igui\rsctitles\HealthTextures\blood_middle_ca.paa";
|
||||
};
|
||||
class Blood_3: Flame_1 {
|
||||
text = ""; //"A3\Ui_f\data\igui\rsctitles\HealthTextures\blood_upper_ca.paa";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
#endif
|
5
addons/medical_engine/XEH_PREP.hpp
Normal file
5
addons/medical_engine/XEH_PREP.hpp
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
PREP(handleDamage);
|
||||
PREP(playInjuredSound);
|
||||
PREP(damageBodyPart);
|
||||
PREP(setStructuralDamage);
|
43
addons/medical_engine/XEH_postInit.sqf
Normal file
43
addons/medical_engine/XEH_postInit.sqf
Normal file
@ -0,0 +1,43 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
["CAManBase", "init", {
|
||||
params ["_unit"];
|
||||
|
||||
// Check if last hit point is our dummy.
|
||||
private _allHitPoints = getAllHitPointsDamage _unit param [0, []];
|
||||
reverse _allHitPoints;
|
||||
|
||||
if (_allHitPoints param [0, ""] != "ACE_HDBracket") then {
|
||||
ACE_LOGERROR_1("Bad hitpoints for unit type ""%1""",typeOf _unit);
|
||||
} else {
|
||||
// Calling this function inside curly brackets allows the usage of
|
||||
// "exitWith", which would be broken with "HandleDamage" otherwise.
|
||||
_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
||||
};
|
||||
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
[QGVAR(woundReceived), {
|
||||
diag_log _this;
|
||||
systemChat str _this;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
#endif
|
||||
|
||||
// Kill vanilla bleeding feedback effects.
|
||||
#ifdef DISABLE_VANILLA_DAMAGE_EFFECTS
|
||||
[{
|
||||
{isNil _x} count [
|
||||
"BIS_fnc_feedback_damageCC",
|
||||
"BIS_fnc_feedback_damageRadialBlur",
|
||||
"BIS_fnc_feedback_damageBlur"
|
||||
] == 0
|
||||
}, {
|
||||
{
|
||||
ppEffectDestroy _x;
|
||||
} forEach [
|
||||
BIS_fnc_feedback_damageCC,
|
||||
BIS_fnc_feedback_damageRadialBlur,
|
||||
BIS_fnc_feedback_damageBlur
|
||||
];
|
||||
}] call CBA_fnc_waitUntilAndExecute;
|
||||
#endif
|
768
addons/medical_engine/XEH_preInit.sqf
Normal file
768
addons/medical_engine/XEH_preInit.sqf
Normal file
@ -0,0 +1,768 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
// Hack for #3168 (units in static weapons do not take any damage):
|
||||
// Doing a manual pre-load with a small distance seems to fix the LOD problems
|
||||
// with handle damage not returning full results.
|
||||
GVAR(fixedStatics) = [];
|
||||
|
||||
private _fnc_fixStatic = {
|
||||
params ["_vehicle"];
|
||||
private _type = typeOf _vehicle;
|
||||
|
||||
if !(_type in GVAR(fixedStatics)) then {
|
||||
GVAR(fixedStatics) pushBack _type;
|
||||
PRELOAD_CLASS(_type);
|
||||
};
|
||||
};
|
||||
|
||||
["StaticWeapon", "init", _fnc_fixStatic] call CBA_fnc_addClassEventHandler;
|
||||
["Car", "init", _fnc_fixStatic] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
addMissionEventHandler ["Loaded", {
|
||||
{
|
||||
PRELOAD_CLASS(_x);
|
||||
} forEach GVAR(fixedStatics);
|
||||
}];
|
||||
|
||||
// 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",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_2",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_3",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_4",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_5",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_6",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_7",0.15848932,1,20],
|
||||
["A3\Sounds_F\characters\human-sfx\P01\Soundinjured_Max_8",0.15848932,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;
|
3
addons/medical_engine/XEH_preStart.sqf
Normal file
3
addons/medical_engine/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
23
addons/medical_engine/config.cpp
Normal file
23
addons/medical_engine/config.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
name = COMPONENT_NAME;
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author = ECSTRING(common,ACETeam);
|
||||
authors[] = {"Glowbal","KoffeinFlummi","commy2"};
|
||||
url = ECSTRING(main,URL);
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
|
||||
#include "CfgActions.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgInGameUI.hpp"
|
||||
#include "RscTitles.hpp"
|
47
addons/medical_engine/functions/fnc_damageBodyPart.sqf
Normal file
47
addons/medical_engine/functions/fnc_damageBodyPart.sqf
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Damages a body part of a local unit. Does not kill the unit.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Selection, can be "Head", "Body", "Arms" or "Legs" <STRING>
|
||||
* 2: Damage (optional, default: 1) <BOOLEAN>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player, "HEAD"] call ace_medical_engine_fnc_damageBodyPart
|
||||
*
|
||||
* Notes:
|
||||
* Head: Blood visuals @ 0.45
|
||||
* Body: Blood visuals @ 0.45
|
||||
* Arms: Blood visuals @ 0.35, increases weapon sway linerarly
|
||||
* Legs: Blood visuals @ 0.35, limping @ 0.5
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [["_unit", objNull, [objNull]], ["_selection", "", [""]], ["_damage", 1, [0]]];
|
||||
|
||||
if (!local _unit) exitWith {
|
||||
ACE_LOGERROR("Unit not local or null");
|
||||
};
|
||||
|
||||
_damage = _damage min 0.99;
|
||||
|
||||
switch (toLower _selection) do {
|
||||
case ("head"): {
|
||||
_unit setHitPointDamage ["HitHead", _damage];
|
||||
};
|
||||
case ("body"): {
|
||||
_unit setHitPointDamage ["HitBody", _damage];
|
||||
};
|
||||
case ("arms"): {
|
||||
_unit setHitPointDamage ["HitHands", _damage];
|
||||
};
|
||||
case ("legs"): {
|
||||
_unit setHitPointDamage ["HitLegs", _damage];
|
||||
};
|
||||
};
|
105
addons/medical_engine/functions/fnc_handleDamage.sqf
Normal file
105
addons/medical_engine/functions/fnc_handleDamage.sqf
Normal file
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Main HandleDamage EH function for soldiers.
|
||||
*
|
||||
* Arguments:
|
||||
* Handle damage EH
|
||||
*
|
||||
* Return Value:
|
||||
* Damage to be inflicted <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", "_selection", "_damage", "_shooter", "_ammo", "_hitPointIndex"];
|
||||
//diag_log _this;
|
||||
|
||||
// HD sometimes triggers for remote units - ignore.
|
||||
if (!local _unit) exitWith {nil};
|
||||
|
||||
// Get missing meta info
|
||||
private ["_hitPoint", "_oldDamage"];
|
||||
|
||||
if (_hitPointIndex < 0) then {
|
||||
_hitPoint = "#structural";
|
||||
_oldDamage = damage _unit;
|
||||
} else {
|
||||
_hitPoint = toLower (getAllHitPointsDamage _unit select 0 select _hitPointIndex);
|
||||
_oldDamage = _unit getHitIndex _hitPointIndex;
|
||||
};
|
||||
|
||||
private _newDamage = _damage - _oldDamage;
|
||||
_unit setVariable [format [QGVAR(newDamage$%1), _hitPoint], _newDamage];
|
||||
|
||||
// Never kill the unit by the critical hit points of the engine.
|
||||
if (_hitPoint in ["#structural", "hitbody", "hithead"]) then {
|
||||
_damage = _damage min 0.99;
|
||||
};
|
||||
|
||||
// These control blood material visuals.
|
||||
// If damage is in dummy hitpoints, "hands" and "legs", don't change anything
|
||||
if (_hitPoint in ["hithead", "hitbody", "hithands", "hitlegs"]) exitWith {_oldDamage};
|
||||
|
||||
// Add injury
|
||||
if (_hitPoint isEqualTo "ace_hdbracket") exitWith {
|
||||
// --- Head
|
||||
private _damageFace = _unit getVariable [QGVAR(newDamage$HitFace), 0];
|
||||
private _damageNeck = _unit getVariable [QGVAR(newDamage$HitNeck), 0];
|
||||
private _damageHead = (_unit getVariable [QGVAR(newDamage$HitHead), 0]) max _damageFace max _damageNeck;
|
||||
|
||||
// --- Body
|
||||
private _damageStructural = _unit getVariable [QGVAR(newDamage$#structural), 0];
|
||||
private _damagePelvis = _unit getVariable [QGVAR(newDamage$HitPelvis), 0];
|
||||
private _damageAbdomen = _unit getVariable [QGVAR(newDamage$HitAbdomen), 0];
|
||||
private _damageDiaphragm = _unit getVariable [QGVAR(newDamage$HitDiaphragm), 0];
|
||||
private _damageChest = _unit getVariable [QGVAR(newDamage$HitChest), 0];
|
||||
private _damageBody = (_unit getVariable [QGVAR(newDamage$HitBody), 0]) max _damagePelvis max _damageAbdomen max _damageDiaphragm max _damageChest max _damageStructural;
|
||||
|
||||
// --- Arms and Legs
|
||||
private _damageLeftArm = _unit getVariable [QGVAR(newDamage$HitLeftArm), 0];
|
||||
private _damageRightArm = _unit getVariable [QGVAR(newDamage$HitRightArm), 0];
|
||||
private _damageLeftLeg = _unit getVariable [QGVAR(newDamage$HitLeftLeg), 0];
|
||||
private _damageRightLeg = _unit getVariable [QGVAR(newDamage$HitRightLeg), 0];
|
||||
|
||||
// Find hit point that received the maxium damage.
|
||||
private _allDamages = [
|
||||
[_damageHead, "Head"],
|
||||
[_damageBody, "Body"],
|
||||
[_damageLeftArm, "LeftArm"],
|
||||
[_damageRightArm, "RightArm"],
|
||||
[_damageLeftLeg, "LeftLeg"],
|
||||
[_damageRightLeg, "RightLeg"]
|
||||
];
|
||||
|
||||
_allDamages sort false;
|
||||
(_allDamages select 0) params ["_receivedDamage", "_woundedHitPoint"];
|
||||
|
||||
// Check for falling damage.
|
||||
if (_ammo isEqualTo "") then {
|
||||
if (velocity _unit select 2 < -2) then {
|
||||
_woundedHitPoint = selectRandom ["LeftLeg", "RightLeg"];
|
||||
_ammo = "#falling";
|
||||
} else {
|
||||
// Assume collision damage.
|
||||
// @todo, find a method for detecting burning damage.
|
||||
_woundedHitPoint = "Body";
|
||||
_ammo = "#collision";
|
||||
};
|
||||
};
|
||||
|
||||
// Don't trigger for minor damage.
|
||||
if (_receivedDamage > 1E-3) then {
|
||||
[QGVAR(woundReceived), [_unit, _woundedHitPoint, _receivedDamage, _shooter, _ammo]] call CBA_fnc_localEvent;
|
||||
};
|
||||
|
||||
0
|
||||
};
|
||||
|
||||
// Check for drowning damage.
|
||||
// Don't change the third expression. Safe method for FLOATs.
|
||||
if (_hitPoint isEqualTo "#structural" && {getOxygenRemaining _unit <= 0.5} && {_damage isEqualTo (_oldDamage + 0.005)}) then {
|
||||
[QGVAR(woundReceived), [_unit, "Body", _newDamage, _unit, "#drowning"]] call CBA_fnc_localEvent;
|
||||
};
|
||||
|
||||
_damage
|
80
addons/medical_engine/functions/fnc_playInjuredSound.sqf
Normal file
80
addons/medical_engine/functions/fnc_playInjuredSound.sqf
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Play random injured sound for a unit. The sound is broadcasted across MP.
|
||||
* Will not play if the unit has already played a sound within to close a time frame.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Type (optional) ["hit" (default) or "moan"] <STRING>
|
||||
* 2: Severity (optional) [0 (default), 1, 2] <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player, "hit", 1] call ace_medical_engine_fnc_playInjuredSound
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define TIME_OUT 1
|
||||
|
||||
params [["_unit", objNull, [objNull]], ["_type", "hit", [""]], ["_severity", 0, [0]]];
|
||||
|
||||
if (!local _unit) exitWith {
|
||||
ACE_LOGERROR("Unit not local or null");
|
||||
};
|
||||
|
||||
// Handle timeout
|
||||
if (_unit getVariable [QGVAR(soundTimeout), -1] > CBA_missionTime) exitWith {};
|
||||
_unit setVariable [QGVAR(soundTimeout), CBA_missionTime + TIME_OUT];
|
||||
|
||||
// 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");
|
||||
};
|
||||
|
||||
if (isNil "_sounds") exitWith {
|
||||
ACE_LOGERROR("No sounds for speaker and no default found");
|
||||
};
|
||||
|
||||
// Get correct sound of the speaker
|
||||
_sounds = _sounds param [_severity, []];
|
||||
(selectRandom _sounds) params ["_sound", ["_volume", 1], ["_frequency", 1], ["_distance", 80]];
|
||||
|
||||
if (isNil "_sound") exitWith {
|
||||
ACE_LOGERROR("No sound for this speaker");
|
||||
};
|
||||
|
||||
// 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];
|
31
addons/medical_engine/functions/fnc_setStructuralDamage.sqf
Normal file
31
addons/medical_engine/functions/fnc_setStructuralDamage.sqf
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Set structural damage of an object without modifying the individual hit points.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: New damage value <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player, 0.5] call ace_medical_engine_fnc_setStructuralDamage
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [["_unit", objNull, [objNull]], ["_damage", 0, [0]]];
|
||||
|
||||
if (!local _unit) exitWith {
|
||||
ACE_LOGERROR("Unit not local or null");
|
||||
};
|
||||
|
||||
private _hitPointDamages = getAllHitPointsDamage _unit param [2, []];
|
||||
|
||||
_unit setDamage _damage;
|
||||
|
||||
{
|
||||
_unit setHitIndex [_forEachIndex, _x];
|
||||
} forEach _hitPointDamages;
|
1
addons/medical_engine/functions/script_component.hpp
Normal file
1
addons/medical_engine/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\medical_engine\script_component.hpp"
|
37
addons/medical_engine/script_component.hpp
Normal file
37
addons/medical_engine/script_component.hpp
Normal file
@ -0,0 +1,37 @@
|
||||
#define COMPONENT medical_engine
|
||||
#define COMPONENT_BEAUTIFIED Medical (Engine)
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#define DEBUG_MODE_FULL
|
||||
// #define DISABLE_COMPILE_CACHE
|
||||
// #define CBA_DEBUG_SYNCHRONOUS
|
||||
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||
|
||||
#ifdef DEBUG_ENABLED_MEDICAL_ENGINE
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_MEDICAL_ENGINE
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_MEDICAL_ENGINE
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
#define DISABLE_VANILLA_SCREAMS
|
||||
#define DISABLE_VANILLA_MOANS
|
||||
#define DISABLE_VANILLA_HEARTBEAT
|
||||
#define DISABLE_VANILLA_BLOOD_TEXTURES
|
||||
#define DISABLE_VANILLA_DAMAGE_EFFECTS
|
||||
|
||||
#include "script_macros_medical.hpp"
|
||||
|
||||
#define EMPTY_SOUND {"A3\Sounds_F\dummysound.wss",1,1}
|
||||
#define NAMESPACE_NULL locationNull
|
||||
|
||||
#define PRELOAD_CLASS(class) \
|
||||
LOG_1("Starting preload for ""%1""",class);\
|
||||
[{\
|
||||
1 preloadObject _this;\
|
||||
}, {\
|
||||
LOG_1("Preload done for ""%1""",_this);\
|
||||
}, class] call CBA_fnc_waitUntilAndExecute
|
64
addons/medical_engine/script_macros_medical.hpp
Normal file
64
addons/medical_engine/script_macros_medical.hpp
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
Usage:
|
||||
|
||||
#include "\z\ace\addons\medical_engine\script_macros_medical.hpp"
|
||||
|
||||
class CfgVehicles {
|
||||
class My_AwesomeUnit_base;
|
||||
class My_AwesomeUnit: My_AwesomeUnit_base {
|
||||
class HitPoints {
|
||||
ADD_ACE_HITPOINTS(2,2);
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
// Our method for adding left and right arm and leg armor. Uses those selections
|
||||
// that are used for animations and therefore exist in all third party units
|
||||
// usage: arm_armor and leg_armor are the armor values of of HitHands and
|
||||
// HitLegs respectively.
|
||||
// "ACE_HDBracket" is a special hit point. It is designed in a way where the
|
||||
// "HandleDamage" event handler will compute it at the end of every damage
|
||||
// calculation step. This way we can figure out which hit point took the most
|
||||
// damage from one projectile and should be receiving the ACE medical wound.
|
||||
// the hit point itself should not take any damage
|
||||
// It is important that the "ACE_HDBracket" hit point is the last in the config,
|
||||
// but has the same selection as the first one (always "HitHead" for soldiers).
|
||||
#define ADD_ACE_HITPOINTS(arm_armor,leg_armor)\
|
||||
class HitLeftArm {\
|
||||
armor = arm_armor;\
|
||||
material = -1;\
|
||||
name = "hand_l";\
|
||||
passThrough = 1;\
|
||||
radius = 0.08;\
|
||||
explosionShielding = 1;\
|
||||
visual = "injury_hands";\
|
||||
minimalHit = 0.01;\
|
||||
};\
|
||||
class HitRightArm: HitLeftArm {\
|
||||
name = "hand_r";\
|
||||
};\
|
||||
class HitLeftLeg {\
|
||||
armor = leg_armor;\
|
||||
material = -1;\
|
||||
name = "leg_l";\
|
||||
passThrough = 1;\
|
||||
radius = 0.1;\
|
||||
explosionShielding = 1;\
|
||||
visual = "injury_legs";\
|
||||
minimalHit = 0.01;\
|
||||
};\
|
||||
class HitRightLeg: HitLeftLeg {\
|
||||
name = "leg_r";\
|
||||
};\
|
||||
class ACE_HDBracket {\
|
||||
armor = 1;\
|
||||
material = -1;\
|
||||
name = "head";\
|
||||
passThrough = 1;\
|
||||
radius = 1;\
|
||||
explosionShielding = 1;\
|
||||
visual = "";\
|
||||
minimalHit = 0;\
|
||||
depends = "HitHead";\
|
||||
}
|
Loading…
Reference in New Issue
Block a user