Divergent/mods/Dismemberment/gamedata/scripts/dismemb.script

1874 lines
57 KiB
Plaintext
Raw Permalink Normal View History

2024-03-17 20:18:03 -04:00
-- arm bones without delay of "0" are crashing game when NPC uses weapon !!
-- when body part has delay it will hide only the last parent i.e. if u try to hide upperarm it will hide only hand
-- mcm configs
local enable_for_stalkers = dismemb_mcm.get_config("enable_stalker")
local enable_for_mutants = dismemb_mcm.get_config("enable_mutant")
local enable_particles = true
local hit_power_threshold = dismemb_mcm.get_config("hit_threshold") -- if last hit passed threshold we hide body part (0.6 def)
local enable_foot = dismemb_mcm.get_config("enable_foot") -- looks weird
local wm_ttl = dismemb_mcm.get_config("wm_lifetime") -- blood lifetime in seconds
local enable_meshes = dismemb_mcm.get_config("enable_meshes")
local obj_ttl = dismemb_mcm.get_config("meshes_lifetime") -- seconds for limb objects to be deleted
local debugx = dismemb_mcm.get_config("debugx")
local debug_hit = dismemb_mcm.get_config("debug_hit")
local allow_mutant_muti = dismemb_mcm.get_config("mutant_muti") -- mutilation from mutant
local max_explosion_limbs = dismemb_mcm.get_config("max_explosion_limbs")
local allowed_hit_types = {
[hit.explosion] = dismemb_mcm.get_config("allow_exp"), -- 8 (explosions)
[hit.wound] = dismemb_mcm.get_config("allow_wound"), -- 5 (melee/mutants)
[hit.strike] = dismemb_mcm.get_config("allow_strike"), -- 7 (some mutants)
[hit.fire_wound] = dismemb_mcm.get_config("allow_ball"), -- 6 (bullets)
}
local wound_t = {}
local obj_t = {} -- for limb objects
local obj_wm = {} -- for limb wms (not to run updates in obj_t constantly)
local def_wm_size = dismemb_mcm.get_config("wm_size") -- default wallmark size if [3] missing
local arm_delay = 0 -- need next frame delay for arms [4]
local creatures_cls = {
[clsid.script_stalker] = { "human", "stalker_damage" },
[clsid.dog_s] = { "dog", "m_dog_damage" },
[clsid.pseudodog_s] = { "pseudo_dog", "m_pseudodog_damage" },
[clsid.psy_dog_s] = { "pseudo_dog", "m_pseudodog_damage" },
[clsid.boar_s] = { "boar", "m_boar_damage" },
[clsid.flesh_s] = { "flesh", "m_flesh_damage" },
[clsid.cat_s] = { "cat", "cat_damage" },
[clsid.zombie_s] = { "zombie", "m_zombie_damage" },
[clsid.tushkano_s] = { "tushkano", "m_tushkano_damage" },
[clsid.snork_s] = { "snork", "m_snork_damage" },
[clsid.controller_s] = { "controller", "m_controller_damage" },
[clsid.bloodsucker_s] = { "bloodsucker", "m_bloodsucker_damage" },
[clsid.chimera_s] = { "chimera" },
[clsid.burer_s] = { "burer", "m_burer_damage" },
[clsid.fracture_s] = { "fracture", "fracture_normal_damage" },
[clsid.gigant_s] = { "giant", "m_giant_damage" },
}
local creatures_kind = {
["SM_KARLIK"] = { "karlik", "m_tushkano_damage" },
["SM_PSYSUCKER"] = { "bloodsucker", "m_bloodsucker_damage" },
["SM_LURKER"] = { "chimera" },
}
-- [hitted_bone] = { bone_to_remove, { wm_size, wm_pos, wm_dir_y }, delay }
local limb_map = {
------------------ stalkers ------------------
human = {
-- head
bip01_head = { "bip01_head", { nil, nil, -1 } },
jaw_1 = { "jaw_1", { nil, nil, -1 } },
eye_left = { "bip01_head", { nil, nil, -1 } },
eyelid_1 = { "bip01_head", { nil, nil, -1 } },
eye_right = { "bip01_head", { nil, nil, -1 }},
bip01_neck = { "bip01_head", { nil, nil, -1 } },
-- left arm
-- bip01_l_forearm = { "bip01_l_forearm", nil, arm_delay },
-- left upper arm
-- bip01_l_upperarm = { "bip01_l_upperarm", nil, arm_delay },
-- left hand
bip01_l_hand = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger2 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger21 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger22 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger1 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger11 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger12 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger0 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger01 = { "bip01_l_hand", nil, arm_delay },
bip01_l_finger02 = { "bip01_l_hand", nil, arm_delay },
-- right arm
-- bip01_r_forearm = { "bip01_r_forearm", nil, arm_delay },
-- right upper arm
-- bip01_r_upperarm = { "bip01_r_upperarm", nil, arm_delay },
-- right hand
bip01_r_hand = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger2 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger21 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger22 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger1 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger11 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger12 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger0 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger01 = { "bip01_r_hand", nil, arm_delay },
bip01_r_finger02 = { "bip01_r_hand", nil, arm_delay },
-- left foot
bip01_l_toe0 = { enable_foot and "bip01_l_foot" or "bip01_l_calf" },
bip01_l_foot = { enable_foot and "bip01_l_foot" or "bip01_l_calf" },
-- left leg
bip01_l_calf = { "bip01_l_calf" },
-- left upper leg
bip01_l_thigh = { "bip01_l_thigh" },
-- right foot
bip01_r_toe0 = { enable_foot and "bip01_r_foot" or "bip01_r_calf" },
bip01_r_foot = { enable_foot and "bip01_r_foot" or "bip01_r_calf" },
-- right leg
bip01_r_calf = { "bip01_r_calf" },
-- right upper leg
bip01_r_thigh = { "bip01_r_thigh" },
-- explosion
explosion_1 = { "bip01_l_hand", nil, arm_delay },
explosion_2 = { "bip01_r_hand", nil, arm_delay },
explosion_3 = { "bip01_l_calf" },
explosion_4 = { "bip01_r_calf" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ doggo ------------------
dog = {
-- legs back
bip01_l_toe0 = { "bip01_l_horselink" },
bip01_l_foot = { "bip01_l_horselink" },
bip01_l_horselink = { "bip01_l_horselink" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe0 = { "bip01_r_horselink" },
bip01_r_foot = { "bip01_r_horselink" },
bip01_r_horselink = { "bip01_r_horselink" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- legs front
bip01_l_finger01 = { "bip01_l_hand" },
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger01 = { "bip01_r_hand" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bip01_ponytail2 = { "bip01_ponytail2", { nil, nil, -1 } }, -- "bip01_head"
bip01_head = { "bip01_head", { nil, nil, -1 } },
bip01_neck = { "bip01_neck", { nil, nil, -1 } }, -- half of body disappear
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ pseudo dog ------------------
pseudo_dog = {
-- legs back
bip01_l_toe0 = { "bip01_l_horselink" },
bip01_l_foot = { "bip01_l_horselink" },
bip01_l_horselink = { "bip01_l_horselink" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe0 = { "bip01_r_horselink" },
bip01_r_foot = { "bip01_r_horselink" },
bip01_r_horselink = { "bip01_r_horselink" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- legs front
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bone02 = { "bone01", { nil, nil, -1 } },
bone01 = { "bone01", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ boar ------------------
boar = {
-- legs back
bip01_l_toe0 = { "bip01_l_horselink" },
bip01_l_foot = { "bip01_l_horselink" },
bip01_l_horselink = { "bip01_l_horselink" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe0 = { "bip01_r_horselink" },
bip01_r_foot = { "bip01_r_horselink" },
bip01_r_horselink = { "bip01_r_horselink" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- legs front
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
snout = { "bone01", { nil, nil, -1 } }, -- or "bip01_neck" on all
leftlowear = { "bip01_head", { nil, nil, -1 } },
rightlowear = { "bip01_head", { nil, nil, -1 } },
bone8 = { "bone01", { nil, nil, -1 } },
bone6 = { "bone01", { nil, nil, -1 } },
bone4 = { "bone01", { nil, nil, -1 } },
bone10 = { "bone01", { nil, nil, -1 } },
bone01 = { "bone01", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ flesh ------------------
flesh = {
-- legs back
bip01_l_toe0 = { "bip01_l_horselink" },
bip01_l_foot = { "bip01_l_horselink" },
bip01_l_horselink = { "bip01_l_horselink" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe0 = { "bip01_r_horselink" },
bip01_r_foot = { "bip01_r_horselink" },
bip01_r_horselink = { "bip01_r_horselink" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- legs front
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ cat ------------------
cat = {
-- legs back
bip01_l_toe0 = { "bip01_l_foot" },
bip01_l_foot = { "bip01_l_foot" },
bip01_l_calf = { "bip01_l_calf" },
bip01_r_toe0 = { "bip01_r_foot" },
bip01_r_foot = { "bip01_r_foot" },
bip01_r_calf = { "bip01_r_calf" },
-- legs front
bip01_l_hand = { "bip01_l_forearm" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_forearm" },
bip01_r_hand = { "bip01_r_forearm" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_forearm" },
-- head
bone05 = { "bip01_head", { nil, nil, -1 } },
bone03 = { "bip01_head", { nil, nil, -1 } },
bone01 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
bip01_neck = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_r_forearm" },
explosion_4 = { "bip01_r_forearm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_foot" },
explosion_8 = { "bip01_r_foot" },
},
------------------ zombie ------------------
zombie = {
-- legs
bip01_l_toe0 = { "bip01_l_foot" },
bip01_l_foot = { "bip01_l_foot" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe0 = { "bip01_r_foot" },
bip01_r_foot = { "bip01_r_foot" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- hands
bip01_l_finger31 = { "bip01_l_hand" },
bip01_l_finger3 = { "bip01_l_hand" },
bip01_l_finger21 = { "bip01_l_hand" },
bip01_l_finger2 = { "bip01_l_hand" },
bip01_l_finger11 = { "bip01_l_hand" },
bip01_l_finger1 = { "bip01_l_hand" },
bip01_l_finger01 = { "bip01_l_hand" },
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger31 = { "bip01_r_hand" },
bip01_r_finger3 = { "bip01_r_hand" },
bip01_r_finger21 = { "bip01_r_hand" },
bip01_r_finger2 = { "bip01_r_hand" },
bip01_r_finger11 = { "bip01_r_hand" },
bip01_r_finger1 = { "bip01_r_hand" },
bip01_r_finger01 = { "bip01_r_hand" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bone01 = { "bip01_head", { nil, nil, -1 } },
bone03 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
bip01_neck = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ tushkano ------------------
tushkano = {
-- legs
bip01_l_toe0 = { "bip01_l_calf" },
bip01_l_foot = { "bip01_l_calf" },
bip01_l_horselink = { "bip01_l_calf" },
bip01_l_calf = { "bip01_l_calf" },
bip01_r_toe0 = { "bip01_r_calf" },
bip01_r_foot = { "bip01_r_calf" },
bip01_r_horselink = { "bip01_r_calf" },
bip01_r_calf = { "bip01_r_calf" },
-- hands
bip01_l_finger21 = { "bip01_l_forearm" },
bip01_l_finger2 = { "bip01_l_forearm" },
bip01_l_finger11 = { "bip01_l_forearm" },
bip01_l_finger1 = { "bip01_l_forearm" },
bip01_l_finger01 = { "bip01_l_forearm" },
bip01_l_finger0 = { "bip01_l_forearm" },
bip01_l_hand = { "bip01_l_forearm" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger21 = { "bip01_r_forearm" },
bip01_r_finger2 = { "bip01_r_forearm" },
bip01_r_finger11 = { "bip01_r_forearm" },
bip01_r_finger1 = { "bip01_r_forearm" },
bip01_r_finger01 = { "bip01_r_forearm" },
bip01_r_finger0 = { "bip01_r_forearm" },
bip01_r_hand = { "bip01_r_forearm" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bone21 = { "bip01_head", { nil, nil, -1 } },
bone19 = { "bip01_head", { nil, nil, -1 } },
bone17 = { "bip01_head", { nil, nil, -1 } },
bone15 = { "bip01_head", { nil, nil, -1 } },
bone13 = { "bip01_head", { nil, nil, -1 } },
bone11 = { "bip01_head", { nil, nil, -1 } },
bone09 = { "bip01_head", { nil, nil, -1 } },
bone07 = { "bip01_head", { nil, nil, -1 } },
bone05 = { "bip01_head", { nil, nil, -1 } },
bone03 = { "bip01_head", { nil, nil, -1 } },
bone01 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_head" },
explosion_8 = { "bip01_head" },
},
------------------ snork ------------------
snork = {
-- legs
bip01_l_toe0 = { "leftfoot" },
leftfoot = { "leftfoot" },
bip01_l_calf = { "bip01_l_calf" },
leftupleg = { "leftupleg" },
bip01_r_toe0 = { "rightupleg" },
rightfoot = { "rightfoot" },
bip01_r_calf = { "bip01_r_calf" },
rightupleg = { "rightupleg" },
-- hands
lefthandthumb3 = { "lefthand" },
lefthandthumb2 = { "lefthand" },
lefthandthumb1 = { "lefthand" },
lefthandring3 = { "lefthand" },
lefthandring2 = { "lefthand" },
lefthandring1 = { "lefthand" },
lefthandpinky3 = { "lefthand" },
lefthandpinky2 = { "lefthand" },
lefthandpinky1 = { "lefthand" },
lefthandmiddle3 = { "lefthand" },
lefthandmiddle2 = { "lefthand" },
lefthandmiddle1 = { "lefthand" },
lefthandindex3 = { "lefthand" },
lefthandindex2 = { "lefthand" },
lefthandindex1 = { "lefthand" },
lefthand = { "lefthand" },
bip01_l_forearm = { "bip01_l_forearm" },
leftarm = { "leftarm" },
righthandthumb3 = { "righthand" },
righthandthumb2 = { "righthand" },
righthandthumb1 = { "righthand" },
righthandring3 = { "righthand" },
righthandring2 = { "righthand" },
righthandring1 = { "righthand" },
righthandpinky3 = { "righthand" },
righthandpinky2 = { "righthand" },
righthandpinky1 = { "righthand" },
righthandmiddle3 = { "righthand" },
righthandmiddle2 = { "righthand" },
righthandmiddle1 = { "righthand" },
righthandindex3 = { "righthand" },
righthandindex2 = { "righthand" },
righthandindex1 = { "righthand" },
righthand = { "righthand" },
bip01_r_forearm = { "bip01_r_forearm" },
rightarm = { "rightarm" },
-- head
bip01_ponytail22 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail21 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail23 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
bip01_neck = { "bip01_neck", { nil, nil, -1 } }, -- test change to bip01_head
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "leftarm" },
explosion_4 = { "rightarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "leftupleg" },
explosion_8 = { "rightupleg" },
},
------------------ controller ------------------
controller = {
-- legs
bip01_l_toe1 = { "bip01_l_foot" },
bip01_l_toe0 = { "bip01_l_foot" },
bip01_l_foot = { "bip01_l_foot" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe1 = { "bip01_r_foot" },
bip01_r_toe0 = { "bip01_r_foot" },
bip01_r_foot = { "bip01_r_foot" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- hands
bip01_l_finger32 = { "bip01_l_hand" },
bip01_l_finger31 = { "bip01_l_hand" },
bip01_l_finger3 = { "bip01_l_hand" },
bip01_l_finger22 = { "bip01_l_hand" },
bip01_l_finger21 = { "bip01_l_hand" },
bip01_l_finger2 = { "bip01_l_hand" },
bip01_l_finger12 = { "bip01_l_hand" },
bip01_l_finger11 = { "bip01_l_hand" },
bip01_l_finger1 = { "bip01_l_hand" },
bip01_l_finger02 = { "bip01_l_hand" },
bip01_l_finger01 = { "bip01_l_hand" },
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger32 = { "bip01_r_hand" },
bip01_r_finger31 = { "bip01_r_hand" },
bip01_r_finger3 = { "bip01_r_hand" },
bip01_r_finger22 = { "bip01_r_hand" },
bip01_r_finger21 = { "bip01_r_hand" },
bip01_r_finger2 = { "bip01_r_hand" },
bip01_r_finger12 = { "bip01_r_hand" },
bip01_r_finger11 = { "bip01_r_hand" },
bip01_r_finger1 = { "bip01_r_hand" },
bip01_r_finger02 = { "bip01_r_hand" },
bip01_r_finger01 = { "bip01_r_hand" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bone09 = { "bip01_head", { nil, nil, -1 } },
bone07 = { "bip01_head", { nil, nil, -1 } },
bone05 = { "bip01_head", { nil, nil, -1 } },
bone03 = { "bip01_head", { nil, nil, -1 } },
bone01 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ bloodsucker ------------------
bloodsucker = {
-- legs
bip01_l_toe1 = { "bip01_l_foot" },
bip01_l_foot = { "bip01_l_foot" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe1 = { "bip01_r_foot" },
bip01_r_foot = { "bip01_r_foot" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- hand
bip01_l_finger41 = { "bip01_l_hand" },
bip01_l_finger4 = { "bip01_l_hand" },
bip01_l_finger31 = { "bip01_l_hand" },
bip01_l_finger3 = { "bip01_l_hand" },
bip01_l_finger21 = { "bip01_l_hand" },
bip01_l_finger2 = { "bip01_l_hand" },
bip01_l_finger11 = { "bip01_l_hand" },
bip01_l_finger1 = { "bip01_l_hand" },
bip01_l_finger01 = { "bip01_l_hand" },
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger41 = { "bip01_r_hand" },
bip01_r_finger4 = { "bip01_r_hand" },
bip01_r_finger31 = { "bip01_r_hand" },
bip01_r_finger3 = { "bip01_r_hand" },
bip01_r_finger21 = { "bip01_r_hand" },
bip01_r_finger2 = { "bip01_r_hand" },
bip01_r_finger11 = { "bip01_r_hand" },
bip01_r_finger1 = { "bip01_r_hand" },
bip01_r_finger01 = { "bip01_r_hand" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bone22 = { "bip01_head", { nil, nil, -1 } },
bone21 = { "bip01_head", { nil, nil, -1 } },
bone20 = { "bip01_head", { nil, nil, -1 } },
bone24 = { "bip01_head", { nil, nil, -1 } },
bone12 = { "bip01_head", { nil, nil, -1 } },
bone11 = { "bip01_head", { nil, nil, -1 } },
bone10 = { "bip01_head", { nil, nil, -1 } },
bone19 = { "bip01_head", { nil, nil, -1 } },
bone17 = { "bip01_head", { nil, nil, -1 } },
bone16 = { "bip01_head", { nil, nil, -1 } },
bone15 = { "bip01_head", { nil, nil, -1 } },
bone14 = { "bip01_head", { nil, nil, -1 } },
bone04 = { "bip01_head", { nil, nil, -1 } },
bone03 = { "bip01_head", { nil, nil, -1 } },
bone02 = { "bip01_head", { nil, nil, -1 } },
bone01 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail1 = { "bip01_head", { nil, nil, -1 } },
bip01_ponytail2 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_forearm" },
explosion_2 = { "bip01_r_forearm" },
explosion_3 = { "bip01_l_upperarm" },
explosion_4 = { "bip01_r_upperarm" },
explosion_5 = { "bip01_l_calf" },
explosion_6 = { "bip01_r_calf" },
explosion_7 = { "bip01_l_thigh" },
explosion_8 = { "bip01_r_thigh" },
},
------------------ chimera ------------------
chimera = {
-- legs
l_toe_pinky_1 = { "l_foot" },
l_toe_pinky = { "l_foot" },
l_toe_middle_1 = { "l_foot" },
l_toe_middle = { "l_foot" },
l_toe_index_1 = { "l_foot" },
l_toe_index = { "l_foot" },
l_foot = { "l_foot" },
l_leg_1 = { "l_leg_1" },
l_leg = { "l_leg" },
l_thing = { "l_thing" },
r_toe_pinky_1 = { "r_foot" },
r_toe_pinky = { "r_foot" },
r_toe_middle_1 = { "r_foot" },
r_toe_middle = { "r_foot" },
r_toe_index_1 = { "r_foot" },
r_toe_index = { "r_foot" },
r_foot = { "r_foot" },
r_leg_1 = { "r_leg_1" },
r_leg = { "r_leg" },
r_thing = { "r_thing" },
-- hands
l_thumb_1 = { "hand_l" },
l_thumb = { "hand_l" },
l_pinky_1 = { "hand_l" },
l_pinky = { "hand_l" },
l_middle_1 = { "hand_l" },
l_middle = { "hand_l" },
l_index_1 = { "hand_l" },
l_index = { "hand_l" },
hand_l = { "hand_l" },
forearm_l = { "forearm_l" },
arm_l = { "arm_l" },
r_thumb_1 = { "hand_r" },
r_thumb = { "hand_r" },
r_pinky_1 = { "hand_r" },
r_pinky = { "hand_r" },
r_middle_1 = { "hand_r" },
r_middle = { "hand_r" },
r_index_1 = { "hand_r" },
r_index = { "hand_r" },
hand_r = { "hand_r" },
forearm_r = { "forearm_r" },
arm_r = { "arm_r" },
-- head
jaw_little = { "head_little", { nil, nil, -1 } },
ear_l = { "head_little", { nil, nil, -1 } },
head_little = { "head_little", { nil, nil, -1 } },
neck_l = { "neck_l", { nil, nil, -1 } },
eye_r = { "head_boss", { nil, nil, -1 } },
eye_l = { "head_boss", { nil, nil, -1 } },
ear_r = { "head_boss", { nil, nil, -1 } },
head_boss = { "head_boss", { nil, nil, -1 } },
boss_jaw_1 = { "boss_jaw", { nil, nil, -1 } },
boss_jaw = { "boss_jaw", { nil, nil, -1 } },
neck_r = { "neck_r", { nil, nil, -1 } },
-- explosion
explosion_1 = { "l_leg" },
explosion_2 = { "r_leg" },
explosion_3 = { "l_thing" },
explosion_4 = { "r_thing" },
explosion_5 = { "forearm_l" },
explosion_6 = { "forearm_r" },
explosion_7 = { "arm_l" },
explosion_8 = { "arm_r" },
},
------------------ burer ------------------
burer = {
-- legs
left_toe = { "left_toe" },
left_foot = { "left_foot" },
left_leg = { "left_leg" },
right_toe = { "right_toe" },
right_foot = { "right_foot" },
right_leg = { "right_leg" },
-- hands
left_thumb_1 = { "left_hand" },
left_thumb = { "left_hand" },
left_ring_1 = { "left_hand" },
left_ring = { "left_hand" },
left_pink_1 = { "left_hand" },
left_pink = { "left_hand" },
left_middle_1 = { "left_hand" },
left_middle = { "left_hand" },
left_index_1 = { "left_hand" },
left_index = { "left_hand" },
left_hand = { "left_hand" },
left_forearm = { "left_forearm" },
left_arm = { "left_arm" },
right_thumb_1 = { "right_hand" },
right_thumb = { "right_hand" },
right_ring_1 = { "right_hand" },
right_ring = { "right_hand" },
right_pink_1 = { "right_hand" },
right_pink = { "right_hand" },
right_middle_1 = { "right_hand" },
right_middle = { "right_hand" },
right_index_1 = { "right_hand" },
right_index = { "right_hand" },
right_hand = { "right_hand" },
right_forearm = { "right_forearm" },
right_arm = { "right_arm" },
-- head
right_lip = { "head", { nil, nil, -1 } },
right_eye = { "head", { nil, nil, -1 } },
right_click = { "head", { nil, nil, -1 } },
left_lip = { "head", { nil, nil, -1 } },
left_eye = { "head", { nil, nil, -1 } },
left_click = { "head", { nil, nil, -1 } },
jaw = { "head", { nil, nil, -1 } },
hood = { "head", { nil, nil, -1 } },
brow = { "head", { nil, nil, -1 } },
head = { "head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "left_foot" },
explosion_2 = { "right_foot" },
explosion_3 = { "left_leg" },
explosion_4 = { "right_leg" },
explosion_5 = { "left_forearm" },
explosion_6 = { "right_forearm" },
explosion_7 = { "left_arm" },
explosion_8 = { "right_arm" },
},
------------------ fracture ------------------
fracture = {
-- legs
bip01_l_toe0 = { "bip01_l_foot" },
bip01_l_foot = { "bip01_l_foot" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe0 = { "bip01_r_foot" },
bip01_r_foot = { "bip01_r_foot" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- hands
bip01_l_finger41 = { "bip01_l_hand" },
bip01_l_finger4 = { "bip01_l_hand" },
bip01_l_finger31 = { "bip01_l_hand" },
bip01_l_finger3 = { "bip01_l_hand" },
bip01_l_finger21 = { "bip01_l_hand" },
bip01_l_finger2 = { "bip01_l_hand" },
bip01_l_finger11 = { "bip01_l_hand" },
bip01_l_finger1 = { "bip01_l_hand" },
bip01_l_finger01 = { "bip01_l_hand" },
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger41 = { "bip01_r_hand" },
bip01_r_finger4 = { "bip01_r_hand" },
bip01_r_finger31 = { "bip01_r_hand" },
bip01_r_finger3 = { "bip01_r_hand" },
bip01_r_finger21 = { "bip01_r_hand" },
bip01_r_finger2 = { "bip01_r_hand" },
bip01_r_finger11 = { "bip01_r_hand" },
bip01_r_finger1 = { "bip01_r_hand" },
bip01_r_finger01 = { "bip01_r_hand" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
bone05 = { "bip01_head", { nil, "bip01_neck", -1 } },
bone04 = { "bip01_head", { nil, "bip01_neck", -1 } },
bone03 = { "bip01_head", { nil, "bip01_neck", -1 } },
bone02 = { "bip01_head", { nil, "bip01_neck", -1 } },
bone01 = { "bip01_head", { nil, "bip01_neck", -1 } },
bip01_ponytail2 = { "bip01_head", { nil, "bip01_neck", -1 } },
bip01_ponytail1 = { "bip01_head", { nil, "bip01_neck", -1 } },
bip01_head = { "bip01_head", { nil, "bip01_neck", -1 } },
bip01_neck = { "bip01_head", { nil, "bip01_neck", -1 } },
-- explosion
explosion_1 = { "bip01_l_calf" },
explosion_2 = { "bip01_r_calf" },
explosion_3 = { "bip01_l_thigh" },
explosion_4 = { "bip01_r_thigh" },
explosion_5 = { "bip01_l_forearm" },
explosion_6 = { "bip01_r_forearm" },
explosion_7 = { "bip01_l_upperarm" },
explosion_8 = { "bip01_r_upperarm" },
},
------------------ giant ------------------
giant = {
-- legs
leftthumb2 = { "lefthand" },
leftthumb1 = { "lefthand" },
leftthumb = { "lefthand" },
leftring2 = { "lefthand" },
leftring1 = { "lefthand" },
leftring = { "lefthand" },
leftpink2 = { "lefthand" },
leftpink1 = { "lefthand" },
leftpink = { "lefthand" },
leftmiddle2 = { "lefthand" },
leftmiddle1 = { "lefthand" },
leftmiddle = { "lefthand" },
leftindex2 = { "lefthand" },
leftindex1 = { "lefthand" },
leftindex = { "lefthand" },
lefthand = { "lefthand" },
leftforearm = { "leftforearm" },
leftarm = { "leftarm" },
rightthumb2 = { "righthand" },
rightthumb1 = { "righthand" },
rightthumb = { "righthand" },
rightring2 = { "righthand" },
rightring1 = { "righthand" },
rightring = { "righthand" },
rightpink2 = { "righthand" },
rightpink1 = { "righthand" },
rightpink = { "righthand" },
rightmiddle2 = { "righthand" },
rightmiddle1 = { "righthand" },
rightmiddle = { "righthand" },
rightindex2 = { "righthand" },
rightindex1 = { "righthand" },
rightindex = { "righthand" },
righthand = { "righthand" },
rightforearm = { "rightforearm" },
rightarm = { "rightarm" },
-- hands
lefttopthumb1 = { "lefttopforearm" },
lefttopthumb = { "lefttopforearm" },
lefttopindex1 = { "lefttopforearm" },
lefttopindex = { "lefttopforearm" },
lefttophand = { "lefttopforearm" },
lefttopforearm = { "lefttopforearm" },
lefttoparm = { "lefttoparm" },
righttopthumb1 = { "righttopforearm" },
righttopthumb = { "righttopforearm" },
righttopindex1 = { "righttopforearm" },
righttopindex = { "righttopforearm" },
righttophand = { "righttopforearm" },
righttopforearm = { "righttopforearm" },
righttoparm = { "righttoparm" },
-- head
righteye = { "head", { nil, nil, -1 } },
lefteye = { "head", { nil, nil, -1 } },
leftbrow = { "head", { nil, nil, -1 } },
head = { "head", { nil, nil, -1 } },
jaw = { "jaw", { nil, nil, -1 } },
-- explosion
explosion_1 = { "leftforearm" },
explosion_2 = { "rightforearm" },
explosion_3 = { "leftarm" },
explosion_4 = { "rightarm" },
explosion_5 = { "lefttopforearm" },
explosion_6 = { "righttopforearm" },
explosion_7 = { "lefttoparm" },
explosion_8 = { "righttoparm" },
},
------------------ karlik ------------------
karlik = {
-- legs
bip01_l_toe01 = { "bip01_l_calf" },
bip01_l_toe0 = { "bip01_l_calf" },
bip01_l_foot = { "bip01_l_calf" },
bip01_l_calf = { "bip01_l_calf" },
bip01_l_thigh = { "bip01_l_thigh" },
bip01_r_toe01 = { "bip01_r_calf" },
bip01_r_toe0 = { "bip01_r_calf" },
bip01_r_foot = { "bip01_r_calf" },
bip01_r_calf = { "bip01_r_calf" },
bip01_r_thigh = { "bip01_r_thigh" },
-- hands
bip01_l_finger42 = { "bip01_l_hand" },
bip01_l_finger41 = { "bip01_l_hand" },
bip01_l_finger4 = { "bip01_l_hand" },
bip01_l_finger32 = { "bip01_l_hand" },
bip01_l_finger31 = { "bip01_l_hand" },
bip01_l_finger3 = { "bip01_l_hand" },
bip01_l_finger22 = { "bip01_l_hand" },
bip01_l_finger21 = { "bip01_l_hand" },
bip01_l_finger2 = { "bip01_l_hand" },
bip01_l_finger12 = { "bip01_l_hand" },
bip01_l_finger11 = { "bip01_l_hand" },
bip01_l_finger1 = { "bip01_l_hand" },
bip01_l_finger02 = { "bip01_l_hand" },
bip01_l_finger01 = { "bip01_l_hand" },
bip01_l_finger0 = { "bip01_l_hand" },
bip01_l_hand = { "bip01_l_hand" },
bip01_l_forearm = { "bip01_l_forearm" },
bip01_l_upperarm = { "bip01_l_upperarm" },
bip01_r_finger42 = { "bip01_r_hand" },
bip01_r_finger41 = { "bip01_r_hand" },
bip01_r_finger4 = { "bip01_r_hand" },
bip01_r_finger32 = { "bip01_r_hand" },
bip01_r_finger31 = { "bip01_r_hand" },
bip01_r_finger3 = { "bip01_r_hand" },
bip01_r_finger22 = { "bip01_r_hand" },
bip01_r_finger21 = { "bip01_r_hand" },
bip01_r_finger2 = { "bip01_r_hand" },
bip01_r_finger12 = { "bip01_r_hand" },
bip01_r_finger11 = { "bip01_r_hand" },
bip01_r_finger1 = { "bip01_r_hand" },
bip01_r_finger02 = { "bip01_r_hand" },
bip01_r_finger01 = { "bip01_r_hand" },
bip01_r_finger0 = { "bip01_r_hand" },
bip01_r_hand = { "bip01_r_hand" },
bip01_r_forearm = { "bip01_r_forearm" },
bip01_r_upperarm = { "bip01_r_upperarm" },
-- head
leye = { "bip01_head", { nil, nil, -1 } },
reye = { "bip01_head", { nil, nil, -1 } },
bone04 = { "bip01_head", { nil, nil, -1 } },
bone03 = { "bip01_head", { nil, nil, -1 } },
bone02 = { "bip01_head", { nil, nil, -1 } },
bone01 = { "bip01_head", { nil, nil, -1 } },
bip01_head = { "bip01_head", { nil, nil, -1 } },
-- explosion
explosion_1 = { "bip01_l_calf" },
explosion_2 = { "bip01_r_calf" },
explosion_3 = { "bip01_l_thigh" },
explosion_4 = { "bip01_r_thigh" },
explosion_5 = { "bip01_l_forearm" },
explosion_6 = { "bip01_r_forearm" },
explosion_7 = { "bip01_l_upperarm" },
explosion_8 = { "bip01_r_upperarm" },
},
}
-- section indices of ltx
local mesh_map = {
human = {
jaw_1 = { 2 },
bip01_head = { 1, 2, 1, 2 },
bip01_l_hand = { 2 },
bip01_r_hand = { 2 },
bip01_l_foot = { 1, 2 },
bip01_r_foot = { 1, 2 },
bip01_l_calf = { 1, 2, 8, 2 },
bip01_r_calf = { 1, 2, 8, 2 },
bip01_l_thigh = { 1, 2, 8, 2, 3, 5 },
bip01_r_thigh = { 1, 2, 8, 2, 3, 5 },
},
dog = {
bip01_l_horselink = { 2 }, -- 1
bip01_l_calf = { 2, 4 }, -- 2
bip01_l_thigh = { 2, 4, 5 }, -- 3
bip01_r_horselink = { 2 },
bip01_r_calf = { 2, 4 },
bip01_r_thigh = { 2, 4, 5 },
bip01_l_hand = { 2 }, -- 1
bip01_l_forearm = { 2, 4 }, -- 2
bip01_l_upperarm = { 2, 4, 3 }, -- 3
bip01_r_hand = { 2 },
bip01_r_forearm = { 2, 4 },
bip01_r_upperarm = { 2, 4, 3 },
bip01_ponytail2 = { 2 }, -- 1
bip01_head = { 2, 1 }, -- 2
bip01_neck = { 3, 3, 2, 4, 4 }, -- 5
},
pseudo_dog = {
bip01_l_horselink = { 2 }, -- 1
bip01_l_calf = { 2, 4 }, -- 2
bip01_l_thigh = { 2, 4, 5 }, -- 3
bip01_r_horselink = { 2 },
bip01_r_calf = { 2, 4 },
bip01_r_thigh = { 2, 4, 5 },
bip01_l_hand = { 2 }, -- 1
bip01_l_forearm = { 2, 4 }, -- 2
bip01_l_upperarm = { 2, 4, 3 }, -- 3
bip01_r_hand = { 2 },
bip01_r_forearm = { 2, 4 },
bip01_r_upperarm = { 2, 4, 3 },
bip01_ponytail2 = { 2 }, -- 1
bip01_head = { 2, 1, 2 }, -- 2
bone01 = { 1 }, -- 1
},
boar = {
bip01_l_horselink = { 5, 2 }, -- 1
bip01_l_calf = { 5, 8 }, -- 2
bip01_l_thigh = { 5, 8, 5, 3 }, -- 4
bip01_r_horselink = { 5, 2 },
bip01_r_calf = { 5, 8 },
bip01_r_thigh = { 5, 8, 5, 3 },
bip01_l_hand = { 5, 2 }, -- 1
bip01_l_forearm = { 5, 8 }, -- 2
bip01_l_upperarm = { 5, 8, 5, 3 }, -- 4
bip01_r_hand = { 5, 2 },
bip01_r_forearm = { 5, 8 },
bip01_r_upperarm = { 5, 8, 5, 3 },
bone01 = { 1 }, -- 1
bip01_head = { 1, 5, 2, 5 }, -- 3
},
flesh = {
bip01_l_horselink = { 2 }, -- 1
bip01_l_calf = { 2, 2 }, -- 2
bip01_l_thigh = { 2, 2, 5, 5 }, -- 4
bip01_r_horselink = { 2 },
bip01_r_calf = { 2, 2 },
bip01_r_thigh = { 2, 2, 5, 5 },
bip01_l_hand = { 2 }, -- 1
bip01_l_forearm = { 2, 2 }, -- 2
bip01_l_upperarm = { 2, 2, 5, 5 }, -- 4
bip01_r_hand = { 2 },
bip01_r_forearm = { 2, 2 },
bip01_r_upperarm = { 2, 2, 5, 5 },
bip01_head = { 1, 5, 2, 5 }, -- 3
},
cat = {
bip01_l_foot = { 2 }, -- 1
bip01_l_calf = { 2, 4, 2 }, -- 2
bip01_r_foot = { 2 },
bip01_r_calf = { 2, 4, 2 },
bip01_l_forearm = { 2, 4, 2 }, -- 1
bip01_r_forearm = { 2, 4, 2 },
bip01_head = { 1, 2, 1 }, -- 2
},
zombie = {
bip01_l_foot = { 1, 4 }, -- 1
bip01_l_calf = { 11, 4, 3, 2, 4 }, -- 2
bip01_l_thigh = { 14, 4, 3, 2, 5 }, -- 3
bip01_r_foot = { 1, 4 },
bip01_r_calf = { 11, 4, 3, 2, 4 },
bip01_r_thigh = { 14, 4, 3, 2, 5 },
bip01_l_hand = { 2 }, -- 1
bip01_l_forearm = { 12, 4, 2, 4, 2 }, -- 2
bip01_l_upperarm = { 12, 8, 4, 2, 3, 3 }, -- 3
bip01_r_hand = { 2 },
bip01_r_forearm = { 12, 4, 2, 4, 2 },
bip01_r_upperarm = { 12, 8, 4, 2, 3, 3 },
bip01_head = { 1, 2, 1, 2 }, -- 2
},
tushkano = {
bip01_l_calf = { 2 },
bip01_r_calf = { 2 },
bip01_l_forearm = { 2 },
bip01_l_upperarm = { 2, 2 },
bip01_r_forearm = { 2 },
bip01_r_upperarm = { 2, 2 },
bip01_head = { 2, 2, 2 },
},
snork = {
leftfoot = { 1, 4 }, -- 1
bip01_l_calf = { 11, 4, 3, 2, 4 }, -- 2
leftupleg = { 14, 4, 3, 2, 5 }, -- 3
rightfoot = { 1, 4 },
bip01_r_calf = { 11, 4, 3, 2, 4 },
rightupleg = { 14, 4, 3, 2, 5 },
lefthand = { 2 }, -- 1
bip01_l_forearm = { 12, 4, 2, 4, 2 }, -- 2
leftarm = { 12, 8, 4, 2, 3, 3 }, -- 3
righthand = { 2 },
bip01_r_forearm = { 12, 4, 2, 4, 2 },
rightarm = { 12, 8, 4, 2, 3, 3 },
bip01_head = { 1, 2, 1, 2 }, -- 2
bip01_neck = { 1, 2, 1, 2, 2 }, -- 3
},
controller = {
bip01_l_foot = { 1, 4 }, --1
bip01_l_calf = { 11, 4, 3, 2, 4 }, -- 2
bip01_l_thigh = { 14, 4, 3, 2, 5 }, -- 3
bip01_r_foot = { 1, 4 },
bip01_r_calf = { 11, 4, 3, 2, 4 },
bip01_r_thigh = { 14, 4, 3, 2, 5 },
bip01_l_hand = { 2 }, -- 1
bip01_l_forearm = { 12, 4, 2, 4, 2 }, -- 2
bip01_l_upperarm = { 12, 8, 4, 2, 3, 3 }, -- 3
bip01_r_hand = { 2 },
bip01_r_forearm = { 12, 4, 2, 4, 2 },
bip01_r_upperarm = { 12, 8, 4, 2, 3, 3 },
bip01_head = { 1, 2, 1, 2, 2 }, -- 2
},
bloodsucker = {
bip01_l_foot = { 1, 1, 2 }, --1
bip01_l_calf = { 1, 1, 2, 4, 4 }, -- 2
bip01_l_thigh = { 1, 1, 2, 6, 3, 5 }, -- 3
bip01_r_foot = { 1, 1, 2 },
bip01_r_calf = { 1, 1, 2, 4, 4 },
bip01_r_thigh = { 1, 1, 2, 6, 3, 5 },
bip01_l_hand = { 1, 2, 2 }, -- 1
bip01_l_forearm = { 1, 2, 2, 4, 4 }, -- 2
bip01_l_upperarm = { 1, 2, 2, 8, 2, 3, 3 }, -- 3
bip01_r_hand = { 1, 2, 2 },
bip01_r_forearm = { 1, 2, 2, 4, 4 },
bip01_r_upperarm = { 1, 2, 2, 8, 2, 3, 3 },
bip01_head = { 1, 1, 1, 2, 2}, -- 2
},
chimera = {
l_foot = { 1, 2, 2 }, -- 1
l_leg_1 = { 1, 2, 2, 4, 4 }, -- 2
l_leg = { 1, 2, 2, 6, 3, 3 }, -- 3
l_thing = { 1, 2, 2, 6, 6, 5, 5 }, -- 4
r_foot = { 1, 2, 2 },
r_leg_1 = { 1, 2, 2, 4, 4 },
r_leg = { 1, 2, 2, 6, 3, 3 },
r_thing = { 1, 2, 2, 6, 6, 5, 5 },
hand_l = { 1, 1, 2 }, -- 1
forearm_l = { 1, 1, 2, 3, 4 }, -- 2
arm_l = { 1, 1, 2, 6, 3, 5, 5 }, -- 3
hand_r = { 1, 1, 2 },
forearm_r = { 1, 1, 2, 3, 4 },
arm_r = { 1, 1, 2, 6, 3, 5, 5 },
head_little = { 1, 2, 2 }, -- 1
neck_l = { 1, 2, 2, 1 }, -- 2
head_boss = { 1, 1, 1, 2, 2 }, -- 2
boss_jaw = { 1 }, -- 1
neck_r = { 1, 1, 1, 2, 5, 5 }, -- 3
},
burer = {
left_toe = { 1, 2, 5 }, -- 1
left_foot = { 1, 2, 5, 3, 5 }, -- 2
left_leg = { 1, 2, 5, 10, 5 }, -- 3
right_toe = { 1, 2, 5 },
right_foot = { 1, 2, 5, 3, 5 },
right_leg = { 1, 2, 5, 10, 5 },
left_hand = { 1, 2, 5 }, -- 1
left_forearm = { 1, 2, 5, 3, 5, 5 }, -- 2
left_arm = { 1, 2, 5, 6, 5, 5 }, -- 3
right_hand = { 1, 2, 5 },
right_forearm = { 1, 2, 5, 3, 5, 5 },
right_arm = { 1, 2, 5, 6, 5, 5 },
head = { 1, 5, 5, 2, 1 }, -- 4
},
fracture = {
bip01_l_foot = { 1, 2, 4 }, -- 1
bip01_l_calf = { 11, 2, 4, 3, 3 }, -- 2
bip01_l_thigh = { 14, 2, 3, 3, 3 }, -- 3
bip01_r_foot = { 1, 2, 4 },
bip01_r_calf = { 11, 2, 4, 3, 3 },
bip01_r_thigh = { 14, 2, 3, 3, 3 },
bip01_l_hand = { 1, 1, 2 }, -- 2
bip01_l_forearm = { 1, 1, 2, 4, 4, 4, 2 }, -- 3
bip01_l_upperarm = { 1, 1, 2, 8, 8, 2, 3, 3 }, -- 4
bip01_r_hand = { 1, 2 }, -- 1
bip01_r_forearm = { 1, 2, 4, 4, 2 }, -- 2
bip01_r_upperarm = { 1, 2, 8, 4, 3 }, -- 3
bip01_head = { 1, 2, 1, 2, 2 }, -- 2
},
giant = {
lefthand = { 5, 1, 2, 1 }, -- 2
leftforearm = { 5, 1, 2, 5, 5, 5 }, -- 3
leftarm = { 5, 1, 2, 10, 5, 5, 5, 5 }, -- 4
righthand = { 5, 1, 2, 1 },
rightforearm = { 5, 1, 2, 5, 5, 5 },
rightarm = { 5, 1, 2, 10, 5, 5, 5, 5 },
lefttopforearm = { 1, 2, 3 }, -- 1
lefttoparm = { 1, 2, 3, 2, 3}, -- 2
righttopforearm = { 1, 2, 3 },
righttoparm = { 1, 2, 3, 2, 3},
head = { 1, 5, 5, 2 }, -- 3
jaw = { 1 }, -- 1
},
karlik = {
bip01_l_calf = { 11, 2, 4, 4 }, -- 1
bip01_l_thigh = { 14, 2, 4, 3 }, -- 2
bip01_r_calf = { 11, 2, 4, 4 },
bip01_r_thigh = { 14, 2, 4, 3 },
bip01_l_hand = { 1, 2 }, -- 1
bip01_l_forearm = { 12, 4, 4, 2 }, -- 1
bip01_l_upperarm = { 12, 8, 2, 3, 4 }, -- 2
bip01_r_hand = { 1, 2 },
bip01_r_forearm = { 12, 4, 4, 2 },
bip01_r_upperarm = { 12, 8, 2, 3, 4 },
bip01_head = { 2, 2, 2 }, -- 2
},
}
local bone_groups = {
human = {
{ "jaw_1", "bip01_head" },
{ "bip01_l_hand" },
{ "bip01_l_foot", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_r_hand" },
{ "bip01_r_foot", "bip01_r_calf", "bip01_r_thigh" },
},
dog = {
{ "bip01_l_horselink", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_horselink", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_ponytail2", "bip01_head" },
},
pseudo_dog = {
{ "bip01_l_horselink", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_horselink", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_ponytail2", "bip01_head", "bone01" },
},
boar = {
{ "bip01_l_horselink", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_horselink", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head", "bone01" },
},
flesh = {
{ "bip01_l_horselink", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_horselink", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
cat = {
{ "bip01_l_foot", "bip01_l_calf" },
{ "bip01_l_forearm" },
{ "bip01_r_foot", "bip01_r_calf" },
{ "bip01_r_forearm" },
{ "bip01_head" },
},
zombie = {
{ "bip01_l_foot", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_foot", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
tushkano = {
{ "bip01_l_calf" },
{ "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_calf" },
{ "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
snork = {
{ "leftfoot", "bip01_l_calf", "leftupleg" },
{ "rightfoot", "bip01_r_calf", "rightupleg" },
{ "lefthand", "bip01_l_forearm", "leftarm" },
{ "righthand", "bip01_r_forearm", "rightarm" },
{ "bip01_head" },
},
controller = {
{ "bip01_l_foot", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_foot", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
bloodsucker = {
{ "bip01_l_foot", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_foot", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
chimera = {
{ "l_foot", "l_leg_1", "l_leg", "l_thing" },
{ "r_foot", "r_leg_1", "r_leg", "r_thing" },
{ "hand_l", "forearm_l", "arm_l" },
{ "hand_r", "forearm_r", "arm_r" },
{ "head_little" },
{ "head_boss", "boss_jaw" },
},
burer = {
{ "left_toe", "left_foot", "left_leg" },
{ "left_hand", "left_forearm", "left_arm" },
{ "right_toe", "right_foot", "right_leg" },
{ "right_hand", "right_forearm", "right_arm" },
{ "head" },
},
fracture = {
{ "bip01_l_foot", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_foot", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
giant = {
{ "lefthand", "leftforearm", "leftarm" },
{ "lefttopforearm", "lefttoparm" },
{ "righthand", "rightforearm", "rightarm" },
{ "righttopforearm", "righttoparm" },
{ "head", "jaw" },
},
karlik = {
{ "bip01_l_foot", "bip01_l_calf", "bip01_l_thigh" },
{ "bip01_l_hand", "bip01_l_forearm", "bip01_l_upperarm" },
{ "bip01_r_foot", "bip01_r_calf", "bip01_r_thigh" },
{ "bip01_r_hand", "bip01_r_forearm", "bip01_r_upperarm" },
{ "bip01_head" },
},
}
-- [section_idx] = { collision_wm_size, impulse_min, impulse_max }
local meshes_params = {
[1] = { 0.3, 30, 140 },
[2] = { 0.2, 30, 180 },
[3] = { 0.3, 30, 140 },
[4] = { 0.25, 30, 160 },
[5] = { 0.35, 30, 120 },
[6] = { 0.45, 10, 60 },
[7] = { 0.5, 10, 50 },
[8] = { 0.4, 20, 90 },
[9] = { 0.45, 10, 50 },
[10] = { 0.55, 10, 40 },
[11] = { 0.35, 20, 90 },
[12] = { 0.25, 30, 120 },
[13] = { 0.45, 10, 50 },
[14] = { 0.55, 10, 40 },
[15] = { 0.6, 10, 20 },
[16] = { 0.65, 10, 20 },
}
-- save bone id and sum up hit power for over 0.5 sec (for shotgun pellets)
function npc_on_before_hit(npc, shit, bone_id)
if not (npc:alive()) then return end
wound_t[npc:id()] = wound_t[npc:id()] or {}
wound_t[npc:id()].bone_id = bone_id
wound_t[npc:id()].hit_type = shit.type
wound_t[npc:id()].direction = shit.direction
pr("---------------------------")
pr("on_hit original hit_power: %s || type: %s", round_idp(shit.power, 3), shit.type)
--[[
local draft_pos = vector():set(shit.draftsman:position())
local draft2obj_dir = vec_sub(draft_pos, vector():set(npc:position())):normalize()
pr("draft to obj dir: %s", draft2obj_dir)
pr("shit.direction to obj: %s", shit.direction)
--]]
-- save only damage from allowed hit types
if not (allowed_hit_types[shit.type]) then return end
local npc_kind = ini_sys:r_string_ex(npc:section(), "kind")
local npc_damage_section = (creatures_cls[npc:clsid()] and creatures_cls[npc:clsid()][2]) or (npc_kind and creatures_kind[npc_kind] and creatures_kind[npc_kind][2]) or (npc:section())
pr("on_hit bone_name: %s || damage_sec: %s", npc:bone_name(bone_id), npc_damage_section)
if debug_hit then shit.power = 1000 end
-- get bone damage mult
local new_hit_power = shit.power
if npc_damage_section then
local bone_name = npc:bone_name(bone_id)
local str = bone_name and ini_sys:r_string_ex(npc_damage_section, bone_name)
local p = str and str_explode(str, ",")
if p and p[1] then
local hit_power_mult = tonumber(p[1]) or 1 -- if not found then 1
hit_power_mult = hit_power_mult < 1 and 1 or hit_power_mult -- if less than 1 then 1
pr("on_hit bone: %s || set_bone: %s || mult: %s", bone_name, str, tonumber(p[1]) or "def")
new_hit_power = shit.power * hit_power_mult
end
end
wound_t[npc:id()].hit_power = (wound_t[npc:id()].hit_power and wound_t[npc:id()].hit_power + new_hit_power) or new_hit_power
CreateTimeEvent("reset_hit_power_e", "reset_hit_power_" .. npc:id() .. "_a", 0.5, reset_hit_power, npc:id())
end
function reset_hit_power(id)
if not wound_t[id] then return end
wound_t[id].hit_power = 0
return true
end
-- use last hitted bone on npc death
function npc_on_death_callback(npc, killer)
if not wound_t[npc:id()] then return end
-- some options check
if IsStalker(npc) and (not enable_for_stalkers) then
wound_t[npc:id()] = nil
return
end
if IsMonster(npc) and (not enable_for_mutants) then
wound_t[npc:id()] = nil
return
end
-- get npc bone table
local npc_kind = ini_sys:r_string_ex(npc:section(), "kind")
local npc_key = (creatures_cls[npc:clsid()] and creatures_cls[npc:clsid()][1]) or (npc_kind and creatures_kind[npc_kind] and creatures_kind[npc_kind][1])
pr("npc_key: %s", npc_key)
local npc_bone_table = npc_key and limb_map[npc_key]
if not npc_bone_table then
wound_t[npc:id()] = nil
return
end
-- get last hitted bone name
local hitted_bone = wound_t[npc:id()].bone_id and npc.bone_name and npc:bone_name(wound_t[npc:id()].bone_id)
pr("hit: %s", hitted_bone)
-- get relative bone to remove
local bone_key = hitted_bone and npc_bone_table[hitted_bone]
-- set new bone_key for mutant hits
local mutant_hit = allow_mutant_muti and IsMonster(killer)
if (not bone_key) and (mutant_hit) then
bone_key = npc_bone_table["explosion_" .. math.random(1, 8)]
pr("~ random bone picked")
end
-- compare hit power
local hit_power = wound_t[npc:id()].hit_power
pr("power: %s", hit_power)
pr("hit_type: %s", wound_t[npc:id()].hit_type)
if (not hit_power) or (hit_power < hit_power_threshold) then
wound_t[npc:id()] = nil
return
end
local explosion_bones = {}
-- collect few bones for explosions
if wound_t[npc:id()].hit_type == hit.explosion then
local bones_amount = math.random(1, max_explosion_limbs)
local groups_array = dup_table(bone_groups[npc_key])
groups_array = shuffle_t(groups_array)
for idx, group in ipairs(groups_array) do
if #explosion_bones < bones_amount then
local random_bone = group[math.random(1, #group)]
explosion_bones[#explosion_bones + 1] = random_bone
end
end
end
-- some npc info
for i = 1, #explosion_bones > 0 and #explosion_bones or 1 do
if #explosion_bones > 0 then
bone_key = npc_bone_table[explosion_bones[i]]
pr("~ npc_id: %s || bone_name: %s", npc:id(), explosion_bones[i])
end
if (not bone_key) then
wound_t[npc:id()] = nil
return
end
local bone_to_remove = bone_key[1]
local meshes_t = (mesh_map[npc_key] and mesh_map[npc_key][bone_to_remove]) or {1}
local wm_size = (bone_key[2] and bone_key[2][1]) or def_wm_size
local wm_bone = (bone_key[2] and bone_key[2][2]) or bone_to_remove
local wm_dir_y = (bone_key[2] and bone_key[2][3]) or 1
local delay_time = bone_key[3]
local wm_pos = vector():set(npc:bone_position(wm_bone))
-- wallmarks_manager():place_skeleton(npc, picked_wm, wm_pos, vector():set(0, wm_dir_y, 0), wm_size, wm_ttl)
-- meshes
play_meshes(npc, meshes_t, wm_pos)
-- particles
play_particles(wm_pos)
-- hide bone
local function hide(id, bone)
local obj = level.object_by_id(id)
if obj then
-- remove bone and its childs
pr("removing: %s", bone)
obj:set_bone_visible(bone, false, true)
end
-- delete key if last index
if i == bones_amount then
wound_t[id] = nil
end
return true
end
if delay_time then
CreateTimeEvent("xcv_bone_test", "xcv_bone_test_" .. npc:id() .. "_" .. i, delay_time, hide, npc:id(), bone_to_remove)
else
hide(npc:id(), bone_to_remove)
end
-- wallmark on body
local picked_wm = "limb_blood_" .. math.random(1, 6)
-- pr("wm: %s", picked_wm)
wallmarks_manager():place_skeleton(npc, picked_wm, wm_pos, vector():set(0, wm_dir_y, 0), wm_size, wm_ttl)
end
end
function play_meshes(npc, meshes_t, wm_pos)
if not enable_meshes then return end
local shuf_meshes_t = shuffle_t(meshes_t)
local wm_off_x, wm_off_y, wm_off_z = -0.1, 0, -0.1
for i = 1, #shuf_meshes_t do
local mesh_pos = vector():set(wm_pos.x + wm_off_x, wm_pos.y + wm_off_y, wm_pos.z + wm_off_z)
local se_obj = alife_create("limb_obj_" .. shuf_meshes_t[i], mesh_pos, npc:level_vertex_id(), npc:game_vertex_id())
wm_off_x = wm_off_x + 0.1
wm_off_y = wm_off_y --+ 0.1
wm_off_z = wm_off_z + 0.1
if se_obj then
obj_t[se_obj.id] = obj_ttl
-- punch mesh
local time_start = time_global()
local function punch(id, dir)
local game_obj = level.object_by_id(id)
if game_obj then
obj_wm[game_obj:id()] = shuf_meshes_t[i] -- storing for raycast and wallmarks (remove after 4 sec anyway)
CreateTimeEvent("remove_obj_wm_key", "remove_obj_wm_key_" .. game_obj:id(), 4, remove_wm_obj_keys, game_obj:id())
local root_bone = game_obj:bone_name(0)
pr("punch")
local h = hit()
h.type = hit.wound
h.power = 0.0
local mesh_impulse_min = meshes_params[shuf_meshes_t[i]] and meshes_params[shuf_meshes_t[i]][2] or 30
local mesh_impulse_max = meshes_params[shuf_meshes_t[i]] and meshes_params[shuf_meshes_t[i]][3] or 80
mesh_impulse_max = mesh_impulse_max < mesh_impulse_min and mesh_impulse_min or mesh_impulse_max
local mesh_impulse = math.random(mesh_impulse_min, mesh_impulse_max)
-- pr("mesh_idx: %s || impulse: %s", shuf_meshes_t[i], mesh_impulse)
h.impulse = mesh_impulse
h:bone(root_bone)
h.direction = dir
h.draftsman = killer or db.actor
game_obj:hit(h)
return true
end
-- end loop if object hasnt been found
local func_time = time_global() - time_start
if func_time > 1000 then
pr("!mesh loop ended before")
return true
end
end
CreateTimeEvent("punch_limb_e", "punch_limb_" .. se_obj.id .. "_" .. i .. "_a", 0, punch, se_obj.id, wound_t[npc:id()].direction)
end
end
end
function play_particles(pos)
if not enable_particles then return end
local part_obj = particles_object("hit_fx\\hit_xcvb")
if not part_obj then return end
part_obj:play_at_pos(pos)
end
local tmr = 0
function limb_release_upd()
local tg = time_global()
if tg < tmr then return end
tmr = tg + 2000
for id, ttl in pairs(obj_t) do
obj_t[id] = ttl - 2
if obj_t[id] <= 0 then
if alife_object(id) then
alife_release_id(id)
end
obj_t[id] = nil
end
end
end
function remove_wm_obj_keys(id)
obj_wm[id] = nil
return true
end
local obj_dir_wm = {
[1] = { 1, 0, 0 },
[2] = { -1, 0, 0 },
[3] = { 0, 1, 0 },
[4] = { 0, -1, 0 },
[5] = { 0, 0, 1 },
[6] = { 0, 0, -1 },
}
function limb_ray_upd()
if (is_empty(obj_wm)) then return end
for id, mesh_idx in pairs(obj_wm) do
local remove_k = false
local obj = level.object_by_id(id)
local pos = obj and vector():set(obj:position())
-- pr("--------- id: %s ---------", id)
if pos then
for i = 1, #obj_dir_wm do
local dir_a = obj_dir_wm[i]
local dir = vector():set(dir_a[1], dir_a[2], dir_a[3])
local col_dist = get_col_dist(pos, dir)
-- pr("i: %s || col_dist: %s", i, col_dist)
if col_dist and col_dist > 0 and col_dist <= 0.05 then
local wm_dist = 0.1
local wm_size = meshes_params[mesh_idx] and meshes_params[mesh_idx][1] or 0.3
local wm_tex = "limb_blood_" .. math.random(1, 6)
wallmarks_manager():place(dir, pos, wm_dist, wm_size, wm_tex, obj, wm_ttl, true)
remove_k = true
end
end
end
if remove_k then
obj_wm[id] = nil
end
end
end
function get_col_dist(pos, dir, obj)
local pick = ray_pick()
pick:set_position(vector():set(pos))
pick:set_direction(vector():set(dir))
pick:set_flags(2)
pick:set_range(15)
pick:query()
local dist = pick:get_distance()
local col_pos = vector():set(pos):add(vector():set(dir):mul(dist))
local dist_to_col = vector():set(pos):distance_to(vector():set(col_pos))
return dist_to_col
end
function shuffle_t(t)
local new_t = {}
for idx, val in ipairs(t) do
local pos = math.random(1, #new_t + 1)
table.insert(new_t, pos, val)
end
return new_t
end
function save_state(m_data)
m_data.obj_t = obj_t
end
function load_state(m_data)
obj_t = m_data.obj_t or {}
end
function pr(...)
if not debugx then return end
printf(...)
end
function on_option_change()
enable_for_stalkers = dismemb_mcm.get_config("enable_stalker")
enable_for_mutants = dismemb_mcm.get_config("enable_mutant")
hit_power_threshold = dismemb_mcm.get_config("hit_threshold")
enable_foot = dismemb_mcm.get_config("enable_foot")
wm_ttl = dismemb_mcm.get_config("wm_lifetime")
allow_mutant_muti = dismemb_mcm.get_config("mutant_muti")
max_explosion_limbs = dismemb_mcm.get_config("max_explosion_limbs")
enable_meshes = dismemb_mcm.get_config("enable_meshes")
obj_ttl = dismemb_mcm.get_config("meshes_lifetime")
def_wm_size = dismemb_mcm.get_config("wm_size")
debugx = dismemb_mcm.get_config("debugx")
debug_hit = dismemb_mcm.get_config("debug_hit")
end
function on_game_start()
RegisterScriptCallback("npc_on_before_hit", npc_on_before_hit)
RegisterScriptCallback("monster_on_before_hit", npc_on_before_hit)
RegisterScriptCallback("npc_on_death_callback", npc_on_death_callback)
RegisterScriptCallback("monster_on_death_callback", npc_on_death_callback)
RegisterScriptCallback("actor_on_update", limb_release_upd)
RegisterScriptCallback("actor_on_update", limb_ray_upd)
RegisterScriptCallback("save_state", save_state)
RegisterScriptCallback("load_state", load_state)
RegisterScriptCallback("on_option_change", on_option_change)
end