// bleeding - maximum possible percentage of cardiac output bled for a given wound type (0 .. 1) // pain - maximum possible pain level for a given wound type (0 .. 1) class ACE_Medical_Injuries { // Defines all the possible injury types class wounds { // Source: Scarle // Also called scrapes, they occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees). class Abrasion { bleeding = 0.001; pain = 0.4; }; // Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions. class Avulsion { bleeding = 0.1; pain = 1.0; causeLimping = 1; }; // Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions. class Contusion { bleeding = 0; pain = 0.3; }; // Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures. class Crush { bleeding = 0.05; pain = 0.8; causeLimping = 1; causeFracture = 1; }; // Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision. class Cut { bleeding = 0.01; pain = 0.1; }; // Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch. class Laceration { bleeding = 0.05; pain = 0.2; }; // Also called velocity wounds, they are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel. class VelocityWound { bleeding = 0.2; pain = 0.9; causeLimping = 1; causeFracture = 1; }; // Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass. class PunctureWound { bleeding = 0.05; pain = 0.4; causeLimping = 1; }; // Pain wound that is caused by making or being in contact with heat class ThermalBurn { bleeding = 0; pain = 0.7; minDamage = 0; }; }; class damageTypes { // thresholds[] {{, }, {...}} // if damage is between two points, number is interpolated and then rounded by chance based on the decimal part // e.g. a value of 2.7 has 70% chance to give 3 and 30% to give 2 // put damage values in descending order; uses the first value found that is below the wound damage, and the point immediately before that thresholds[] = {{0.1, 1}}; // if 1, wounds are only applied to the hitpoint that took the most damage. othewrise, wounds are applied to all damaged hitpoints selectionSpecific = 1; // list of damage handlers, which will be called in reverse order // each entry should be a SQF expression that returns a function // this can also be overridden for each damage type class woundHandlers { ADDON = QFUNC(woundsHandlerBase); }; class bullet { // bullets only create multiple wounds when the damage is very high thresholds[] = {{20, 10}, {4.5, 2}, {3, 1}, {0, 1}}; selectionSpecific = 1; class Avulsion { // at damage, weight. between points, weight is interpolated then wound is chosen by weighted random. // as with thresholds, but result is not rounded (decimal values used as-is) weighting[] = {{1, 1}, {0.35, 0}}; /* damageMultiplier = 1; sizeMultiplier = 1; bleedingMultiplier = 1; painMultiplier = 1; fractureMultiplier = 1; */ }; class Contusion { weighting[] = {{0.35, 0}, {0.35, 1}}; // bruises caused by bullets hitting the plate are big sizeMultiplier = 3.2; // increase the pain to allow for bruises to actually knock out on repeated hits painMultiplier = 2.2; }; class VelocityWound { // velocity wounds are only in the 0.35-1.5 range weighting[] = {{1.5, 0}, {1.5, 1}, {0.35, 1}, {0.35, 0}}; // velocity wounds will tend to be medium or large sizeMultiplier = 0.9; }; }; class grenade { // at low damage numbers, chance to create no wounds - makes it a bit more random instead of consistently covering people in bruises thresholds[] = {{20, 10}, {10, 5}, {4, 3}, {1.5, 2}, {0.8, 2}, {0.3, 1}, {0, 0}}; selectionSpecific = 0; class Avulsion { weighting[] = {{1.5, 1}, {1.1, 0}}; }; class VelocityWound { weighting[] = {{1.5, 0}, {1.1, 1}, {0.7, 0}}; }; class PunctureWound { weighting[] = {{0.9, 0}, {0.7, 1}, {0.35, 0}}; }; class Cut { weighting[] = {{0.7, 0}, {0.35, 1}, {0.35, 0}}; }; class Contusion { weighting[] = {{0.5, 0}, {0.35, 1}}; sizeMultiplier = 2; painMultiplier = 0.9; }; }; class explosive { // explosives create more and smaller wounds than grenades thresholds[] = {{20, 15}, {8, 7}, {2, 3}, {1.2, 2}, {0.4, 1}, {0,0}}; selectionSpecific = 0; class Avulsion { weighting[] = {{1, 1}, {0.8, 0}}; }; class Cut { weighting[] = {{1.5, 0}, {0.35, 1}, {0, 0}}; }; class Contusion { weighting[] = {{0.5, 0}, {0.35, 1}}; sizeMultiplier = 2; painMultiplier = 0.9; }; }; class shell { // shells tend to involve big pieces of shrapnel, so create fewer and larger wounds thresholds[] = {{20, 10}, {10, 5}, {4.5, 2}, {2, 2}, {0.8, 1}, {0.2, 1}, {0, 0}}; selectionSpecific = 0; class Avulsion { weighting[] = {{1.5, 1}, {1.1, 0}}; }; class VelocityWound { weighting[] = {{1.5, 0}, {1.1, 1}, {0.7, 0}}; }; class PunctureWound { weighting[] = {{0.9, 0}, {0.7, 1}, {0.35, 0}}; }; class Cut { weighting[] = {{0.7, 0}, {0.35, 1}, {0.35, 0}}; }; class Contusion { weighting[] = {{0.5, 0}, {0.35, 1}}; sizeMultiplier = 2; painMultiplier = 0.9; }; }; class vehiclehit: explosive { // vehicle explosions are usually caused by explosive damage and should behave similarly thresholds[] = {{6, 3}, {4.5, 2}, {2, 2}, {0.8, 1}, {0.2, 1}, {0, 0}}; class woundHandlers: woundHandlers { GVAR(vehiclehit) = QFUNC(woundsHandlerVehiclehit); }; }; class vehiclecrash { thresholds[] = {{1.5, 3}, {1.5, 2}, {1, 2}, {1, 1}, {0.05, 1}}; // prevent subdividing wounds past FRACTURE_DAMAGE_THRESHOLD to ensure limp/fractue is triggered selectionSpecific = 0; class woundHandlers: woundHandlers { GVAR(vehiclecrash) = QFUNC(woundsHandlerVehiclecrash); }; class Abrasion { weighting[] = {{0.30, 0}, {0.30, 1}}; }; class Avulsion { weighting[] = {{0.01, 1}, {0.01, 0}}; }; class Contusion { weighting[] = {{0.35, 0}, {0.35, 1}}; }; class Crush { weighting[] = {{0.1, 1}, {0.1, 0}}; }; class Cut { weighting[] = {{0.1, 1}, {0.1, 0}}; }; class Laceration { }; }; class collision { thresholds[] = {{8, 4}, {1, 1}, {0.3, 1}, {0.15, 0.5}, {0, 0.3}}; // prevent subdividing wounds past FRACTURE_DAMAGE_THRESHOLD to ensure limp/fractue is triggered selectionSpecific = 0; class Avulsion { weighting[] = {{1, 2}, {0.5, 0.5}, {0.5, 0}}; }; class Abrasion { weighting[] = {{0.4, 0}, {0.2, 1}, {0, 0}}; }; class Contusion { weighting[] = {{0.4, 0}, {0.2, 1}}; }; class Crush { weighting[] = {{0.4, 1}, {0.2, 0}}; }; class Cut { weighting[] = {{0.1, 1}, {0.1, 0}}; }; class Laceration { }; }; class falling { thresholds[] = {{8, 4}, {1, 1}, {0.2, 1}, {0.1, 0.7}, {0, 0.5}}; // prevent subdividing wounds past FRACTURE_DAMAGE_THRESHOLD to ensure limp/fractue is triggered selectionSpecific = 0; class Abrasion { weighting[] = {{0.4, 0}, {0.2, 1}, {0, 0}}; sizeMultiplier = 3; }; class Contusion { weighting[] = {{0.4, 0}, {0.2, 1}}; sizeMultiplier = 3; }; class Crush { weighting[] = {{0.4, 1}, {0.2, 0}}; sizeMultiplier = 1.5; }; }; class backblast { thresholds[] = {{1, 6}, {1, 5}, {0.55, 5}, {0.55, 2}, {0, 2}}; selectionSpecific = 0; class Avulsion { weighting[] = {{0.30, 0}, {0.30, 1}}; }; class Contusion { weighting[] = {{0.35, 0}, {0.35, 1}}; }; class Cut { weighting[] = {{0.1, 1}, {0.1, 0}}; }; }; class stab { thresholds[] = {{0.1, 1}, {0.1, 0}}; selectionSpecific = 1; class Cut { weighting[] = {{0.1, 1}, {0.1, 0}}; }; class PunctureWound { weighting[] = {{0.02, 1}, {0.02, 0}}; }; }; class punch { thresholds[] = {{0.1, 1}, {0.1, 0}}; selectionSpecific = 1; class Contusion { weighting[] = {{0.35, 0}, {0.35, 1}}; }; class Crush { weighting[] = {{0.1, 1}, {0.1, 0}}; }; class Laceration { }; }; class ropeburn { thresholds[] = {{0.1, 1}, {0.1, 0}}; selectionSpecific = 1; noBlood = 1; class Abrasion { weighting[] = {{0.30, 1}}; }; }; class drowning { //No related wounds as drowning should not cause wounds/bleeding. Can be extended for internal injuries if they are added. thresholds[] = {{0, 0}}; noBlood = 1; class woundHandlers {}; }; class fire { noBlood = 1; // custom handling for environmental fire sources // passes damage to "burn" so doesn't need its own wound stats class woundHandlers { ADDON = QFUNC(woundsHandlerBurning); }; }; class burn { thresholds[] = {{0, 1}}; selectionSpecific = 0; noBlood = 1; class ThermalBurn { weighting[] = {{0, 1}}; }; }; class unknown { thresholds[] = {{0.1, 1}, {0.1, 0}}; class Abrasion { weighting[] = {{0.30, 0}, {0.30, 1}}; }; class Cut { weighting[] = {{0.1, 1}, {0.1, 0}}; }; class VelocityWound { weighting[] = {{0.35, 1}, {0.35, 0}}; }; }; }; };