-- 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