diff --git a/data/json/enchantments.json b/data/json/enchantments.json index d084fcbf096d2..145dbb57f8c26 100644 --- a/data/json/enchantments.json +++ b/data/json/enchantments.json @@ -106,19 +106,6 @@ "condition": "ACTIVE", "values": [ { "value": "FOOTSTEP_NOISE", "multiply": -0.67 } ] }, - { - "type": "enchantment", - "id": "ench_wings_bird", - "condition": "ALWAYS", - "modified_bodyparts": [ - { "lose": "arm_l" }, - { "lose": "arm_r" }, - { "lose": "hand_r" }, - { "lose": "hand_l" }, - { "gain": "wing_bird_l" }, - { "gain": "wing_bird_r" } - ] - }, { "id": "ench_wings_insect_active", "type": "enchantment", diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 6cc6c84e0eced..d230650fed07e 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -5117,12 +5117,11 @@ "ugliness": 2, "description": "Your arms have mostly transformed into a huge pair of feathered wings. Though you retain a few fingers, your fine manipulation is greatly hampered. On the other hand, you can glide from ledges and will take less damage if you fall, provided you're healthy and unburdened.", "types": [ "ARMS", "HANDS" ], - "enchantments": [ "ench_wings_bird" ], "prereqs": [ "ARM_FEATHERS" ], "prereqs2": [ "HOLLOW_BONES" ], "threshreq": [ "THRESH_BIRD" ], "category": [ "BIRD" ], - "restricts_gear": [ "arm_l", "arm_r", "hand_l", "hand_r", "arm_stub_r", "arm_stub_l" ], + "restricts_gear": [ "arm_l", "arm_r", "hand_l", "hand_r" ], "flags": [ "WINGS_2", "WING_GLIDE" ] }, { @@ -7561,7 +7560,6 @@ "mixed_effect": true, "description": "Your arms have sprouted feathers, and you find you can no longer fully extend your elbows. This gets in the way a bit, but the feathers offer minor protection from damage and the elements.", "category": [ "RAPTOR", "BIRD" ], - "flags": [ "WINGS_1", "ARM_WINGS" ], "changes_to": [ "WINGS_BIRD" ], "wet_protection": [ { "part": "arm_l", "neutral": 50 }, diff --git a/data/mods/Limb_WIP/enchantments.json b/data/mods/Limb_WIP/enchantments.json index d579196558ae1..37e388b58d083 100644 --- a/data/mods/Limb_WIP/enchantments.json +++ b/data/mods/Limb_WIP/enchantments.json @@ -5,19 +5,6 @@ "condition": "ALWAYS", "modified_bodyparts": [ { "lose": "leg_l" }, { "lose": "leg_r" }, { "lose": "foot_r" }, { "lose": "foot_l" }, { "gain": "gastropod_foot" } ] }, - { - "type": "enchantment", - "id": "ench_wings_bird", - "condition": "ALWAYS", - "modified_bodyparts": [ - { "lose": "arm_l" }, - { "lose": "arm_r" }, - { "lose": "hand_r" }, - { "lose": "hand_l" }, - { "gain": "wing_bird_l" }, - { "gain": "wing_bird_r" } - ] - }, { "type": "enchantment", "id": "ENCH_NO_RIGHT_LEG", diff --git a/data/mods/Limb_WIP/mutations/mutation_limbs.json b/data/mods/Limb_WIP/mutations/mutation_limbs.json index 183f072d58db0..7beceb51e8516 100644 --- a/data/mods/Limb_WIP/mutations/mutation_limbs.json +++ b/data/mods/Limb_WIP/mutations/mutation_limbs.json @@ -1,4 +1,406 @@ [ + { + "id": "head", + "type": "body_part", + "name": "head", + "copy-from": "head", + "limb_type": "head", + "limb_scores": [ [ "reaction", 0.3 ] ], + "is_vital": true, + "similar_bodyparts": [ "head_dragonfly" ] + }, + { + "id": "eyes", + "type": "body_part", + "copy-from": "eyes", + "name": "eyes", + "limb_type": "sensor", + "limb_scores": [ [ "vision", 1.0 ], [ "night_vis", 1.0 ], [ "reaction", 0.7 ] ], + "similar_bodyparts": [ "eyes_bulging", "eyes_insect_1" ] + }, + { + "type": "body_part", + "id": "arm_l", + "name": "left arm", + "copy-from": "arm_l", + "limb_type": "arm", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "lift", 0.5 ], [ "balance", 0.15 ], [ "block", 1.0 ], [ "swim", 0.1 ], [ "crawl", 0.3 ] ], + "similar_bodyparts": [ "arm_bionic_basic_l" ] + }, + { + "type": "body_part", + "id": "arm_r", + "copy-from": "arm_r", + "limb_type": "arm", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "lift", 0.5 ], [ "balance", 0.15 ], [ "block", 1.0 ], [ "swim", 0.1 ], [ "crawl", 0.3 ] ], + "similar_bodyparts": [ "arm_bionic_basic_r" ] + }, + { + "type": "body_part", + "id": "hand_l", + "copy-from": "hand_l", + "name": "left hand", + "limb_type": "hand", + "limb_scores": [ [ "grip", 0.5 ], [ "manip", 0.5, 1.0 ], [ "swim", 0.15 ] ], + "similar_bodyparts": [ "hand_bionic_basic_l" ] + }, + { + "type": "body_part", + "id": "hand_r", + "copy-from": "hand_r", + "name": "right hand", + "limb_type": "hand", + "limb_scores": [ [ "grip", 0.5 ], [ "manip", 0.5, 1.0 ], [ "swim", 0.15 ] ], + "similar_bodyparts": [ "hand_bionic_basic_r" ] + }, + { + "type": "body_part", + "id": "leg_l", + "copy-from": "leg_l", + "name": "left leg", + "limb_type": "leg", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "move_speed", 0.5 ], [ "swim", 0.15 ], [ "block", 1 ], [ "crawl", 0.2 ] ], + "similar_bodyparts": [ "leg_bionic_basic_l" ] + }, + { + "type": "body_part", + "id": "leg_r", + "copy-from": "leg_r", + "name": "right leg", + "limb_type": "leg", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "move_speed", 0.5 ], [ "swim", 0.15 ], [ "block", 1 ], [ "crawl", 0.2 ] ], + "similar_bodyparts": [ "leg_bionic_basic_r" ] + }, + { + "type": "body_part", + "id": "foot_l", + "copy-from": "foot_l", + "name": "left foot", + "limb_type": "foot", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "footing", 0.5 ], [ "swim", 0.1 ] ], + "sub_parts": [ "foot_sole_l", "foot_arch_l", "foot_toes_l", "foot_ankle_l", "foot_heel_l" ], + "similar_bodyparts": [ "foot_bionic_basic_l" ] + }, + { + "type": "body_part", + "id": "foot_r", + "copy-from": "foot_r", + "name": "right foot", + "limb_type": "foot", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "footing", 0.5 ], [ "swim", 0.1 ] ], + "similar_bodyparts": [ "foot_bionic_basic_r" ] + }, + { + "type": "body_part", + "id": "debug_torso", + "limb_type": "torso", + "name": "debug torso", + "accusative": { "ctxt": "bodypart_accusative", "str": "debug torso" }, + "heading": "debug torso", + "heading_multiple": "debug torso", + "hp_bar_ui_text": "DBG TORSO", + "encumbrance_text": "Weee macarena.", + "main_part": "debug_torso", + "connected_to": "head", + "opposite_part": "debug_torso", + "limb_scores": [ [ "balance", 0.7 ] ], + "encumbrance_threshold": 6, + "is_vital": true, + "hit_size": 36, + "hit_difficulty": 1, + "side": "both", + "base_hp": 60, + "stat_hp_mods": { "str_mod": 0 }, + "drench_capacity": 4000, + "smash_message": "You smash the %s with a powerful shoulder-check.", + "sub_parts": [ "torso_upper", "torso_neck", "torso_lower", "torso_hanging_front", "torso_hanging_back", "torso_waist" ] + }, + { + "type": "body_part", + "id": "eyes_bulging", + "//": "Slightly larger, but still boring eyes", + "name": "bulging eyes", + "accusative": { "ctxt": "bodypart_accusative", "str": "bulging eyes" }, + "heading": "Blg Eyes", + "heading_multiple": "Blg Eyes", + "copy-from": "eyes", + "opposite_part": "eyes_bulging", + "sub_parts": [ "eyes_bulging_l", "eyes_bulging_r" ], + "limb_type": "sensor", + "limb_scores": [ [ "vision", 1.0 ], [ "night_vis", 1.0 ], [ "reaction", 0.7 ] ], + "similar_bodyparts": [ ], + "hit_size": 0.9, + "hit_difficulty": 1.25 + }, + { + "type": "body_part", + "id": "eyes_insect_1", + "//": "Even larger. Vision score lower, removed hardcoded per bonus. Slightly less likely to blind on hit + cut armor.", + "name": "compound eyes", + "accusative": { "ctxt": "bodypart_accusative", "str": "compound eyes" }, + "hp_bar_ui_text": "CMP EYES", + "heading": "Compound Eyes", + "heading_multiple": "Compound Eyes", + "copy-from": "eyes_bulging", + "limb_type": "sensor", + "encumbrance_text": "Your vision is impaired!", + "main_part": "head", + "opposite_part": "eyes_insect_1", + "hit_size": 1.2, + "limb_scores": [ [ "vision", 0.65 ], [ "night_vis", 0.8 ], [ "reaction", 0.8 ] ], + "armor": { "cut": 3 }, + "sub_parts": [ "eyes_compound_l", "eyes_compound_r" ], + "effects_on_hit": [ + { + "id": "blind", + "dmg_threshold": 3, + "dmg_scale_increment": 3, + "chance": 25, + "chance_dmg_scaling": 5, + "duration": 1, + "duration_dmg_scaling": 0.5, + "max_duration": 12 + } + ], + "flags": [ "IGNORE_TEMP", "SEESLEEP", "LIMB_UPPER" ] + }, + { + "type": "body_part", + "id": "eyes_dragonfly", + "name": "dragonfly eyes (front)", + "accusative": { "ctxt": "bodypart_accusative", "str": "dragonfly eyes (front)" }, + "heading": "dragonfly eyes (front)", + "heading_multiple": "dragonfly eyes (front)", + "//": "Differentiated to allow eyewear on them without too high coverage, and to suppress multiple portion errors", + "//score": "Most of the fine/night vision, lower proportion of the reaction score (peripheral vision)", + "copy-from": "eyes_insect_1", + "opposite_part": "eyes_dragonfly", + "main_part": "head_dragonfly", + "limb_type": "sensor", + "limb_scores": [ [ "vision", 0.4 ], [ "night_vis", 0.5 ], [ "reaction", 0.7 ] ], + "sub_parts": [ "eyes_dragonfly_mono_l", "eyes_dragonfly_mono_r" ] + }, + { + "type": "body_part", + "id": "head_dragonfly", + "//": "Head replacement. TOgether with the eye replacement superhuman reaction score, raised but still suboptimal vision score (getting used to it), a large target.", + "name": "dragonfly head", + "accusative": { "ctxt": "bodypart_accusative", "str": "dragonfly eyes" }, + "hp_bar_ui_text": "DRGFL HEAD", + "heading": "dragonfly head", + "heading_multiple": "dragonfly head", + "copy-from": "head", + "limb_types": [ "sensor", "head" ], + "encumbrance_text": "Your vision is impaired!", + "hit_size": 7, + "is_vital": true, + "hit_difficulty": 1.2, + "main_part": "head_dragonfly", + "connected_to": "head_dragonfly", + "opposite_part": "head_dragonfly", + "limb_scores": [ [ "vision", 0.5 ], [ "night_vis", 0.5 ], [ "reaction", 1.1 ] ], + "encumbrance_threshold": 0, + "encumbrance_limit": 75, + "armor": { "cut": 3 }, + "sub_parts": [ + "head_dragonfly_forehead", + "head_dragonfly_crown", + "head_dragonfly_nape", + "head_dragonfly_throat", + "head_dragonfly_ear_r", + "head_dragonfly_ear_l" + ], + "effects_on_hit": [ + { + "id": "bleed", + "dmg_type": "cut", + "dmg_threshold": 5, + "dmg_scale_increment": 2, + "duration": 60, + "duration_dmg_scaling": 30, + "max_duration": 960 + }, + { + "id": "bleed", + "dmg_type": "stab", + "dmg_threshold": 1, + "dmg_scale_increment": 1.5, + "duration": 60, + "duration_dmg_scaling": 60, + "max_duration": 1200 + }, + { + "id": "bleed", + "dmg_type": "bullet", + "dmg_threshold": 1, + "dmg_scale_increment": 1, + "duration": 60, + "duration_dmg_scaling": 60 + }, + { + "id": "stunned", + "dmg_type": "bash", + "dmg_threshold": 10, + "dmg_scale_increment": 5, + "chance": 10, + "chance_dmg_scaling": 10, + "duration": 1, + "duration_dmg_scaling": 0.5, + "max_duration": 4 + }, + { + "id": "stunned", + "dmg_threshold": 30, + "dmg_scale_increment": 10, + "chance": 10, + "chance_dmg_scaling": 10, + "duration": 1, + "duration_dmg_scaling": 0.5, + "max_duration": 4 + }, + { + "id": "blind", + "dmg_threshold": 3, + "dmg_scale_increment": 3, + "chance": 25, + "chance_dmg_scaling": 5, + "duration": 1, + "duration_dmg_scaling": 0.5, + "max_duration": 12 + } + ], + "flags": [ "SEESLEEP", "LIMB_UPPER" ] + }, + { + "type": "body_part", + "id": "arm_feathers_l", + "//": "Slightly more fragile, clumsier, better swimmer but annoying when wet.", + "name": "feathered arm", + "copy-from": "arm_l", + "name_multiple": "feathered arms", + "accusative": { "ctxt": "bodypart_accusative", "str": "feathered left arm" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "feathered arms" }, + "heading": "feathered left arm", + "heading_multiple": "feathered arms", + "main_part": "arm_feathers_l", + "opposite_part": "arm_feathers_r", + "hit_size": 15, + "env_protection": 2, + "drench_capacity": 1800, + "drench_increment": 1, + "drying_rate": 0.5, + "wet_morale": -20, + "limb_type": "arm", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "lift", 0.5 ], [ "balance", 0.12 ], [ "block", 0.8 ], [ "swim", 0.2 ] ], + "hot_morale_mod": 0.5, + "cold_morale_mod": 0.5, + "windage_effect": "winded_arm_l", + "squeamish_penalty": 10, + "base_hp": 60, + "stat_hp_mods": { "str_mod": 2 }, + "smash_efficiency": 0.4, + "ugliness": -2, + "ugliness_mandatory": 1, + "sub_parts": [ "arm_feathers_shoulder_l", "arm_feathers_upper_l", "arm_feathers_elbow_l", "arm_feathers_lower_l" ], + "similar_bodyparts": [ ] + }, + { + "type": "body_part", + "id": "arm_feathers_r", + "name": "feathered arm", + "copy-from": "arm_feathers_l", + "side": "right", + "heading": "feathered right Arm", + "main_part": "arm_feathers_r", + "opposite_part": "arm_feathers_l", + "windage_effect": "winded_arm_r", + "limb_type": "arm", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "lift", 0.5 ], [ "balance", 0.18 ], [ "block", 0.8 ], [ "swim", 0.2 ] ], + "sub_parts": [ "arm_feathers_shoulder_r", "arm_feathers_upper_r", "arm_feathers_elbow_r", "arm_feathers_lower_r" ] + }, + { + "id": "arm_wing_bird_l", + "type": "body_part", + "name": "left wing", + "name_multiple": "left wings", + "accusative": { "ctxt": "bodypart_accusative", "str": "left wing" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "left wings" }, + "//": "Shoulder is similar enough to substitute, the rest is too divergent for armor substitution. Slightly better balance, terrible manipulation, better swim. Temperature gets taken care of via feathers, unless you're a naked chicken. No fat deposits. Copy-from for onhit effects.", + "copy-from": "arm_feathers_l", + "heading": "l. wing", + "heading_multiple": "wings", + "encumbrance_text": "Melee combat is hampered, and you won't be able to use your wings to glide.", + "hp_bar_ui_text": "L WING", + "main_part": "arm_wing_bird_l", + "connected_to": "torso", + "opposite_part": "arm_wing_bird_r", + "conditional_flags": [ "WING_ARM" ], + "encumbrance_limit": 10, + "hit_size": 20, + "hit_difficulty": 1.2, + "is_limb": true, + "limb_types": [ [ "arm", 0.8 ], [ "hand", 0.3 ] ], + "windage_effect": "winded_arm_l", + "health_limit": 15, + "stat_hp_mods": { "str_mod": 2 }, + "mend_rate": 1.2, + "hot_morale_mod": 1.0, + "cold_morale_mod": 0.2, + "squeamish_penalty": 20, + "drench_capacity": 0, + "limb_scores": [ + [ "grip", 0.3 ], + [ "manip", 0.2, 0.3 ], + [ "lift", 0.3 ], + [ "balance", 0.2 ], + [ "block", 0.5 ], + [ "swim", 0.3 ], + [ "crawl", 0.2 ] + ], + "smash_message": "You buffet the %s with your wing.", + "side": "left", + "base_hp": 45, + "sub_parts": [ + "arm_wing_bird_shoulder_l", + "arm_wing_bird_upper_l", + "arm_wing_bird_elbow_l", + "arm_wing_bird_lower_l", + "arm_wing_bird_fingers_l" + ], + "unarmed_damage": [ { "damage_type": "bash", "amount": -2 } ] + }, + { + "id": "arm_wing_bird_r", + "type": "body_part", + "copy-from": "arm_wing_bird_l", + "name": "right wing", + "name_multiple": "right wings", + "accusative": { "ctxt": "bodypart_accusative", "str": "right wing" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "right wings" }, + "heading": "r. wing", + "hp_bar_ui_text": "R WING", + "main_part": "arm_wing_bird_r", + "opposite_part": "arm_wing_bird_l", + "limb_types": [ [ "arm", 0.8 ], [ "hand", 0.3 ] ], + "limb_scores": [ + [ "grip", 0.3 ], + [ "manip", 0.38 ], + [ "lift", 0.42 ], + [ "balance", 0.2 ], + [ "block", 0.8 ], + [ "swim", 0.25 ], + [ "crawl", 0.3 ] + ], + "side": "right", + "windage_effect": "winded_arm_r", + "sub_parts": [ + "arm_wing_bird_shoulder_r", + "arm_wing_bird_upper_r", + "arm_wing_bird_elbow_r", + "arm_wing_bird_lower_r", + "arm_wing_bird_fingers_r" + ] + }, { "id": "gastropod_foot", "type": "body_part", @@ -1019,79 +1421,465 @@ "bmi_encumbrance_scalar": 0 }, { - "id": "wing_bird_l", + "id": "arm_bionic_basic_l", "type": "body_part", - "name": "left wing", - "name_multiple": "left wings", - "accusative": { "ctxt": "bodypart_accusative", "str": "left wing" }, - "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "left wings" }, - "heading": "l. wing", - "heading_multiple": "wings", + "//": "See comments in `body_part_struct::load` of bodypart.cpp about why xxx and xxx_multiple are not inside a single translation object.", + "name": "left bionic arm", + "name_multiple": "bionic arms", + "accusative": { "ctxt": "bodypart_accusative", "str": "left bionic arm" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic arms" }, + "heading": "bionic l. arm", + "heading_multiple": "bionic arms", "encumbrance_text": "Melee combat is hampered.", - "hp_bar_ui_text": "L WING", - "main_part": "wing_bird_l", + "encumbrance_threshold": 5, + "hp_bar_ui_text": "LB ARM", + "main_part": "arm_bionic_basic_l", "connected_to": "torso", - "opposite_part": "wing_bird_r", - "flags": [ "LIMB_UPPER" ], - "conditional_flags": [ "WING_ARM_RIGHT" ], - "drench_capacity": 250, - "encumbrance_threshold": 0, - "hit_size": 0.9, - "hit_difficulty": 1.2, + "opposite_part": "arm_bionic_basic_r", + "hit_size": 13, + "hit_difficulty": 0.95, + "limb_type": "arm", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "lift", 0.75 ], [ "balance", 0.15 ], [ "block", 1.0 ], [ "swim", 0.1 ], [ "crawl", 0.5 ] ], + "side": "left", + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, "is_limb": true, - "limb_types": [ [ "arm", 0.8 ], [ "hand", 0.3 ] ], - "limb_scores": [ - [ "grip", 0.3 ], - [ "manip", 0.38 ], - [ "lift", 0.42 ], - [ "balance", 0.2 ], - [ "block", 0.8 ], - [ "swim", 0.25 ], - [ "crawl", 0.3 ] + "base_hp": 150, + "drench_capacity": 1000, + "smash_message": "You elbow-smash the %s.", + "no_power_effect": "no_power_arm_l", + "effects_on_hit": [ + { + "id": "staggered_character", + "dmg_type": "bash", + "dmg_threshold": 5, + "dmg_scale_increment": 5, + "chance": 20, + "chance_dmg_scaling": 10, + "duration": 5, + "duration_dmg_scaling": 2, + "max_duration": 15 + }, + { + "id": "staggered_character", + "dmg_threshold": 10, + "dmg_scale_increment": 5, + "chance": 20, + "chance_dmg_scaling": 10, + "duration": 5, + "duration_dmg_scaling": 2, + "max_duration": 15 + } ], - "smash_message": "You buffet the %s with your wing.", - "side": "left", - "base_hp": 45, - "sub_parts": [ "arm_shoulder_l", "arm_upper_l", "arm_elbow_l", "arm_lower_l", "hand_fingers_l", "hand_wrist_l" ], - "armor": { "cut": 3, "bash": 4 }, - "unarmed_damage": [ { "damage_type": "bash", "amount": -2 } ] + "sub_parts": [ "arm_bionic_basic_shoulder_l", "arm_bionic_basic_upper_l", "arm_bionic_basic_elbow_l", "arm_bionic_basic_lower_l" ], + "flags": [ "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 2, + "stat_hp_mods": { "str_mod": 0 } }, { - "id": "wing_bird_r", + "id": "arm_bionic_basic_r", "type": "body_part", - "name": "right wing", - "name_multiple": "right wings", - "accusative": { "ctxt": "bodypart_accusative", "str": "right wing" }, - "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "right wings" }, - "heading": "r. wing", - "heading_multiple": "wings", + "name": "right bionic arm", + "name_multiple": "bionic arms", + "accusative": { "ctxt": "bodypart_accusative", "str": "right bionic arm" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic arms" }, + "heading": "bionic r. arm", + "heading_multiple": "bionic arms", + "hp_bar_ui_text": "RB ARM", "encumbrance_text": "Melee combat is hampered.", - "hp_bar_ui_text": "R WING", - "main_part": "wing_bird_r", + "encumbrance_threshold": 5, + "main_part": "arm_bionic_basic_r", "connected_to": "torso", - "opposite_part": "wing_bird_l", - "flags": [ "LIMB_UPPER" ], - "conditional_flags": [ "WING_ARM_LEFT" ], - "drench_capacity": 250, - "encumbrance_threshold": 0, - "hit_size": 0.9, - "hit_difficulty": 1.2, + "opposite_part": "arm_bionic_basic_l", + "hit_size": 13, + "hit_difficulty": 0.95, + "limb_type": "arm", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "lift", 0.75 ], [ "balance", 0.15 ], [ "block", 1.0 ], [ "swim", 0.1 ], [ "crawl", 0.5 ] ], + "side": "right", + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, "is_limb": true, - "limb_types": [ [ "arm", 0.8 ], [ "hand", 0.3 ] ], - "limb_scores": [ - [ "grip", 0.3 ], - [ "manip", 0.38 ], - [ "lift", 0.42 ], - [ "balance", 0.2 ], - [ "block", 0.8 ], - [ "swim", 0.25 ], - [ "crawl", 0.3 ] + "base_hp": 150, + "drench_capacity": 1000, + "smash_message": "You elbow-smash the %s.", + "no_power_effect": "no_power_arm_r", + "effects_on_hit": [ + { + "id": "staggered_character", + "dmg_type": "bash", + "dmg_threshold": 5, + "dmg_scale_increment": 5, + "chance": 20, + "chance_dmg_scaling": 10, + "duration": 5, + "duration_dmg_scaling": 2, + "max_duration": 15 + }, + { + "id": "staggered_character", + "dmg_threshold": 10, + "dmg_scale_increment": 5, + "chance": 20, + "chance_dmg_scaling": 10, + "duration": 5, + "duration_dmg_scaling": 2, + "max_duration": 15 + } ], - "smash_message": "You buffet the %s with your wing.", + "sub_parts": [ "arm_bionic_basic_shoulder_r", "arm_bionic_basic_upper_r", "arm_bionic_basic_elbow_r", "arm_bionic_basic_lower_r" ], + "flags": [ "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 2, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "hand_bionic_basic_l", + "type": "body_part", + "name": "left bionic hand", + "name_multiple": "bionic hands", + "accusative": { "ctxt": "bodypart_accusative", "str": "left hand" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "hands" }, + "heading": "bionic l. hand", + "heading_multiple": "bionic hands", + "encumbrance_text": "Manual tasks are slowed.", + "main_part": "arm_bionic_basic_l", + "opposite_part": "hand_bionic_basic_r", + "hit_size": 1.5, + "hit_difficulty": 1.1, + "limb_type": "hand", + "limb_scores": [ [ "grip", 1.0 ], [ "manip", 0.5, 1.0 ], [ "swim", 0.15 ] ], + "side": "left", + "stylish_bonus": 0.5, + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, + "base_hp": 150, + "drench_capacity": 300, + "smash_message": "You smash the %s with your fist.", + "sub_parts": [ "hand_bionic_basic_wrist_l", "hand_bionic_basic_palm_l", "hand_bionic_basic_back_l", "hand_bionic_basic_fingers_l" ], + "flags": [ "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 0, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "hand_bionic_basic_r", + "type": "body_part", + "name": "right bionic hand", + "name_multiple": "bionic hands", + "accusative": { "ctxt": "bodypart_accusative", "str": "right bionic hand" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic hands" }, + "heading": "bionic r. hand", + "heading_multiple": "bionic hands", + "encumbrance_text": "Manual tasks are slowed.", + "main_part": "arm_bionic_basic_r", + "opposite_part": "hand_bionic_basic_l", + "hit_size": 1.5, + "hit_difficulty": 1.1, + "limb_type": "hand", + "limb_scores": [ [ "grip", 1.0 ], [ "manip", 0.5, 1.0 ], [ "swim", 0.15 ] ], "side": "right", - "base_hp": 45, - "sub_parts": [ "arm_shoulder_r", "arm_upper_r", "arm_elbow_r", "arm_lower_r", "hand_fingers_r", "hand_wrist_r" ], - "armor": { "cut": 3, "bash": 4 }, - "unarmed_damage": [ { "damage_type": "bash", "amount": -2 } ] + "stylish_bonus": 0.5, + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 1500, + "squeamish_penalty": 0, + "base_hp": 150, + "drench_capacity": 300, + "smash_message": "You smash the %s with your fist.", + "sub_parts": [ "hand_bionic_basic_wrist_r", "hand_bionic_basic_palm_r", "hand_bionic_basic_back_r", "hand_bionic_basic_fingers_r" ], + "flags": [ "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 0, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "leg_bionic_basic_l", + "type": "body_part", + "name": "left bionic leg", + "name_multiple": "bionic legs", + "accusative": { "ctxt": "bodypart_accusative", "str": "left bionic leg" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic legs" }, + "heading": "bionic l. leg", + "heading_multiple": "bionic legs", + "hp_bar_ui_text": "LB LEG", + "encumbrance_text": "Running and swimming are slowed.", + "encumbrance_threshold": 6, + "main_part": "leg_bionic_basic_l", + "connected_to": "torso", + "opposite_part": "leg_bionic_basic_r", + "hit_size": 13, + "hit_difficulty": 0.9, + "limb_type": "leg", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "move_speed", 0.6 ], [ "swim", 0.15 ], [ "block", 1 ], [ "crawl", 0.5 ] ], + "side": "left", + "stylish_bonus": 1, + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, + "is_limb": true, + "base_hp": 150, + "drench_capacity": 1100, + "smash_message": "You bring your knee down on the %s, smashing it.", + "no_power_effect": "no_power_leg_l", + "effects_on_hit": [ + { + "id": "bouldering", + "dmg_threshold": 5, + "dmg_scale_increment": 3, + "chance": 20, + "chance_dmg_scaling": 2, + "duration": 3, + "max_duration": 15 + }, + { + "id": "downed", + "dmg_type": "bash", + "dmg_threshold": 10, + "dmg_scale_increment": 10, + "chance": 5, + "chance_dmg_scaling": 15, + "duration": 1, + "duration_dmg_scaling": 0.5 + }, + { + "id": "downed", + "dmg_threshold": 25, + "dmg_scale_increment": 10, + "chance": 15, + "chance_dmg_scaling": 15, + "duration": 1, + "duration_dmg_scaling": 0.5 + } + ], + "sub_parts": [ + "leg_bionic_basic_hip_l", + "leg_bionic_basic_upper_l", + "leg_bionic_basic_knee_l", + "leg_bionic_basic_lower_l", + "leg_bionic_basic_draped_l" + ], + "flags": [ "LIMB_LOWER", "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 3, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "leg_bionic_basic_r", + "type": "body_part", + "name": "right bionic leg", + "name_multiple": "bionic legs", + "accusative": { "ctxt": "bodypart_accusative", "str": "right bionic leg" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic legs" }, + "heading": "bionic r. leg", + "heading_multiple": "bionic legs", + "hp_bar_ui_text": "RB LEG", + "encumbrance_text": "Running and swimming are slowed.", + "encumbrance_threshold": 6, + "main_part": "leg_bionic_basic_r", + "connected_to": "torso", + "opposite_part": "leg_bionic_basic_l", + "hit_size": 13, + "hit_difficulty": 0.9, + "limb_type": "leg", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "move_speed", 0.6 ], [ "swim", 0.15 ], [ "block", 1 ], [ "crawl", 0.5 ] ], + "side": "right", + "stylish_bonus": 1, + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, + "is_limb": true, + "base_hp": 150, + "drench_capacity": 1100, + "smash_message": "You bring your knee down on the %s, smashing it.", + "no_power_effect": "no_power_leg_r", + "sub_parts": [ + "leg_bionic_basic_hip_r", + "leg_bionic_basic_upper_r", + "leg_bionic_basic_knee_r", + "leg_bionic_basic_lower_r", + "leg_bionic_basic_draped_r" + ], + "effects_on_hit": [ + { + "id": "bouldering", + "dmg_threshold": 5, + "dmg_scale_increment": 3, + "chance": 20, + "chance_dmg_scaling": 2, + "duration": 3, + "max_duration": 15 + }, + { + "id": "downed", + "dmg_type": "bash", + "dmg_threshold": 10, + "dmg_scale_increment": 10, + "chance": 5, + "chance_dmg_scaling": 15, + "duration": 1, + "duration_dmg_scaling": 0.5 + }, + { + "id": "downed", + "dmg_threshold": 25, + "dmg_scale_increment": 10, + "chance": 15, + "chance_dmg_scaling": 15, + "duration": 1, + "duration_dmg_scaling": 0.5 + } + ], + "flags": [ "LIMB_LOWER", "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 3, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "foot_bionic_basic_l", + "type": "body_part", + "name": "left bionic foot", + "name_multiple": "bionic feet", + "accusative": { "ctxt": "bodypart_accusative", "str": "left bionic foot" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic feet" }, + "heading": "bionic l. foot", + "heading_multiple": "bionic feet", + "encumbrance_text": "Running is slowed.", + "encumbrance_threshold": 5, + "main_part": "leg_bionic_basic_l", + "opposite_part": "foot_bionic_basic_r", + "hit_size": 2, + "hit_difficulty": 0.8, + "limb_type": "foot", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "footing", 0.6 ], [ "swim", 0.2 ] ], + "side": "left", + "stylish_bonus": 0.5, + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, + "base_hp": 150, + "drench_capacity": 300, + "smash_message": "You kick down the %s, smashing it.", + "sub_parts": [ + "foot_bionic_basic_sole_l", + "foot_bionic_basic_arch_l", + "foot_bionic_basic_toes_l", + "foot_bionic_basic_ankle_l", + "foot_bionic_basic_heel_l" + ], + "flags": [ "LIMB_LOWER", "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 0, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "foot_bionic_basic_r", + "type": "body_part", + "name": "right bionic foot", + "name_multiple": "bionic feet", + "accusative": { "ctxt": "bodypart_accusative", "str": "right bionic foot" }, + "accusative_multiple": { "ctxt": "bodypart_accusative", "str": "bionic feet" }, + "heading": "bionic r. foot", + "heading_multiple": "bionic feet", + "encumbrance_text": "Running is slowed.", + "encumbrance_threshold": 5, + "main_part": "leg_bionic_basic_r", + "opposite_part": "foot_bionic_basic_l", + "hit_size": 2, + "hit_difficulty": 0.8, + "limb_type": "foot", + "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "footing", 0.6 ], [ "swim", 0.2 ] ], + "side": "right", + "stylish_bonus": 0.5, + "hot_morale_mod": 0.0, + "cold_morale_mod": 0.0, + "fire_warmth_bonus": 0, + "squeamish_penalty": 0, + "base_hp": 150, + "drench_capacity": 300, + "smash_message": "You kick down the %s, smashing it.", + "sub_parts": [ + "foot_bionic_basic_sole_r", + "foot_bionic_basic_arch_r", + "foot_bionic_basic_toes_r", + "foot_bionic_basic_ankle_r", + "foot_bionic_basic_heel_r" + ], + "flags": [ "LIMB_LOWER", "IGNORE_TEMP", "BIONIC_LIMB" ], + "power_efficiency": 1000, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 0, + "stat_hp_mods": { "str_mod": 0 } + }, + { + "id": "leg_bionic_treads", + "type": "body_part", + "name": "tank treads", + "accusative": { "ctxt": "bodypart_accusative", "str": "bionic treads" }, + "heading": "tank treads", + "heading_multiple": "tank treads", + "hp_bar_ui_text": "TREADS", + "encumbrance_text": "Servomotors are operating at abnormal load.", + "encumbrance_threshold": 20, + "main_part": "leg_bionic_treads", + "connected_to": "torso", + "opposite_part": "leg_bionic_treads", + "limb_types": [ [ "leg", 0.8 ], [ "foot", 0.5 ] ], + "limb_scores": [ [ "move_speed", 1.5 ], [ "crawl", 1.0 ], [ "footing", 2.0 ] ], + "hit_size": 36, + "hit_difficulty": 1.2, + "side": "both", + "stylish_bonus": 3, + "hot_morale_mod": 2, + "cold_morale_mod": 2, + "fire_warmth_bonus": 150, + "squeamish_penalty": 0, + "base_hp": 250, + "drench_capacity": 700, + "bionic_slots": 58, + "flags": [ "LIMB_LOWER", "BIONIC_LIMB", "IGNORE_TEMP" ], + "sub_parts": [ "bionic_treads_body", "bionic_treads_treads" ], + "no_power_effect": "no_power_tank_treads", + "smash_message": "You ram the %s with the shell of your tank treads.", + "effects_on_hit": [ + { + "id": "bouldering", + "dmg_threshold": 10, + "dmg_scale_increment": 5, + "chance": 1, + "chance_dmg_scaling": 1, + "duration": 3, + "max_duration": 15 + } + ], + "power_efficiency": 500, + "feels_discomfort": false, + "mend_rate": 0, + "ugliness_mandatory": 10, + "stat_hp_mods": { "str_mod": 0 } } ] diff --git a/data/mods/Limb_WIP/mutations/mutations.json b/data/mods/Limb_WIP/mutations/mutations.json index d1a0946ab7f97..4448ea7cda0d0 100644 --- a/data/mods/Limb_WIP/mutations/mutations.json +++ b/data/mods/Limb_WIP/mutations/mutations.json @@ -21,6 +21,45 @@ "noise_modifier": 0.25, "destroys_gear": true }, + { + "type": "mutation", + "id": "PRE_ARM_FEATHERS", + "name": { "str": "Changing Arms" }, + "types": [ "ARMS" ], + "points": 0, + "visibility": 0, + "ugliness": 0, + "description": "Your arms feel…different. Occasionally something shifts under the skin - sometimes it does so without pain. Whatever is happening in there, it's far from done. This change will be reversible. The next one might not be, should you continue.", + "time": "2 h", + "changes_to": [ "ARM_FEATHERS" ], + "prereqs": [ "FEATHERS", "SPARSE_SCALES" ], + "processed_eocs": [ "EOC_CHANGING_LIMB_SETUP", "EOC_PRE_ARM_FEATHERS" ], + "category": [ "BIRD", "RAPTOR" ] + }, + { + "type": "mutation", + "id": "ARM_FEATHERS", + "name": { "str": "Feathered Arms" }, + "types": [ "ARMS" ], + "points": 2, + "visibility": 8, + "mixed_effect": true, + "description": "Your forearms are covered by long, stiff feathers. While they are impressive to look at and resistant to water and other contaminants, they always get in the way and you hate it when they get filthy. You can still go back to how you used to be. If you continue changing in this direction you will be permanently changed. Progress from this state will need the matching threshold.", + "category": [ "RAPTOR", "BIRD" ], + "prereqs": [ "FEATHERS", "SPARSE_SCALES" ], + "prereqs2": [ "PRE_ARM_FEATHERS" ], + "valid": false, + "changes_to": [ "WINGS_BIRD" ], + "time": "2 h", + "processed_eocs": [ "EOC_ARM_FEATHERS" ], + "vitamin_cost": 150, + "enchantments": [ + { + "condition": "ALWAYS", + "modified_bodyparts": [ { "lose": "arm_l" }, { "lose": "arm_r" }, { "gain": "arm_feathers_l" }, { "gain": "arm_feathers_r" } ] + } + ] + }, { "type": "mutation", "id": "WINGS_BIRD", @@ -30,13 +69,58 @@ "ugliness": 2, "description": "Your arms have mostly transformed into a huge pair of feathered wings. Though you retain a few fingers, your fine manipulation is greatly hampered. On the other hand, you can glide from ledges and will take less damage if you fall, provided you're healthy and unburdened.", "types": [ "ARMS", "HANDS" ], - "enchantments": [ "ench_wings_bird" ], + "enchantments": [ + { + "condition": "ALWAYS", + "modified_bodyparts": [ + { "lose": "arm_l" }, + { "lose": "arm_r" }, + { "lose": "hand_r" }, + { "lose": "hand_l" }, + { "gain": "arm_wing_bird_l" }, + { "gain": "arm_wing_bird_r" } + ] + } + ], "prereqs": [ "ARM_FEATHERS" ], "prereqs2": [ "HOLLOW_BONES" ], "threshreq": [ "THRESH_BIRD" ], "category": [ "BIRD" ], "restricts_gear": [ "arm_l", "arm_r", "hand_l", "hand_r", "arm_stub_r", "arm_stub_l" ], - "flags": [ "WINGS_2", "WING_GLIDE" ] + "vitamin_cost": 300, + "valid": false, + "flags": [ "WINGS_2" ] + }, + { + "type": "mutation", + "id": "BIRD_LEGS", + "name": { "str": "Avian Legs" }, + "points": 0, + "visibility": 4, + "ugliness": 2, + "mixed_effect": true, + "description": "Your legs and feet have become bird-like, with long talons arranged three ahead and one behind. They probably won't fit in human shoes, but they're perfect for gripping onto precarious perches.", + "active": true, + "activated_is_setup": false, + "activated_eocs": [ "EOC_AVIAN_LEAP" ], + "types": [ "LEGS", "FEET" ], + "threshreq": [ "THRESH_BIRD" ], + "category": [ "BIRD" ], + "restricts_gear": [ "foot_l", "foot_r" ], + "destroys_gear": true, + "allowed_items": [ "ALLOWS_TALONS" ] + }, + { + "type": "mutation", + "id": "WINGS_STUB", + "name": { "str": "Wing Stubs" }, + "points": 0, + "visibility": 2, + "ugliness": 2, + "description": "You have a pair of stubby little wings projecting from your shoulderblades. They can be wiggled at will, but are useless.", + "types": [ "WINGS" ], + "changes_to": [ "WINGS_INSECT", "WINGS_BUTTERFLY" ], + "category": [ "INSECT" ] }, { "type": "mutation", diff --git a/data/mods/Limb_WIP/mutations/sub_limbs.json b/data/mods/Limb_WIP/mutations/sub_limbs.json new file mode 100644 index 0000000000000..c32c4ecdac528 --- /dev/null +++ b/data/mods/Limb_WIP/mutations/sub_limbs.json @@ -0,0 +1,1030 @@ +[ + { + "type": "sub_body_part", + "id": "arm_shoulder_l", + "copy-from": "arm_shoulder_l", + "name": "left shoulder", + "similar_bodyparts": [ "arm_bionic_basic_shoulder_l", "arm_feathers_shoulder_l", "arm_wing_bird_shoulder_l" ] + }, + { + "type": "sub_body_part", + "id": "arm_shoulder_r", + "copy-from": "arm_shoulder_r", + "name": "right shoulder", + "similar_bodyparts": [ "arm_bionic_basic_shoulder_r", "arm_feathers_shoulder_r", "arm_wing_bird_shoulder_r" ] + }, + { + "type": "sub_body_part", + "id": "arm_upper_l", + "copy-from": "arm_upper_l", + "name": "left upper arm", + "similar_bodyparts": [ "arm_bionic_basic_upper_l", "arm_feathers_upper_l" ] + }, + { + "type": "sub_body_part", + "id": "arm_upper_r", + "copy-from": "arm_upper_r", + "name": "right upper arm", + "similar_bodyparts": [ "arm_bionic_basic_upper_r", "arm_feathers_upper_r" ] + }, + { + "type": "sub_body_part", + "id": "arm_elbow_l", + "copy-from": "arm_elbow_l", + "name": "left elbow", + "similar_bodyparts": [ "arm_bionic_basic_elbow_l", "arm_feathers_elbow_l" ] + }, + { + "type": "sub_body_part", + "id": "arm_elbow_r", + "copy-from": "arm_elbow_r", + "name": "right elbow", + "similar_bodyparts": [ "arm_bionic_basic_elbow_r", "arm_feathers_elbow_r" ] + }, + { + "type": "sub_body_part", + "id": "arm_lower_l", + "copy-from": "arm_lower_l", + "name": "left forearm", + "similar_bodyparts": [ "arm_bionic_basic_lower_l" ] + }, + { + "type": "sub_body_part", + "id": "arm_lower_r", + "copy-from": "arm_lower_r", + "name": "right forearm", + "similar_bodyparts": [ "arm_bionic_basic_lower_r" ] + }, + { + "id": "eyes_left", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "eyes", + "side": 1, + "opposite": "eyes_right", + "name_multiple": "eyes", + "name": "left eye", + "similar_bodyparts": [ "eyes_bulging_l", "eyes_compound_l", "eyes_dragonfly_mono_l" ] + }, + { + "id": "eyes_right", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "eyes", + "side": 2, + "opposite": "eyes_left", + "name_multiple": "eyes", + "name": "right eye", + "similar_bodyparts": [ "eyes_bulging_r", "eyes_compound_l", "eyes_dragonfly_mono_r" ] + }, + { + "id": "head_forehead", + "type": "sub_body_part", + "max_coverage": 15, + "parent": "head", + "opposite": "sub_limb_debug", + "side": 0, + "name": "forehead", + "similar_bodyparts": [ "head_dragonfly_forehead" ] + }, + { + "id": "head_crown", + "type": "sub_body_part", + "max_coverage": 25, + "parent": "head", + "opposite": "sub_limb_debug", + "side": 0, + "name": "crown", + "similar_bodyparts": [ "head_dragonfly_crown" ] + }, + { + "id": "head_nape", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "head", + "opposite": "sub_limb_debug", + "side": 0, + "name": "nape", + "similar_bodyparts": [ "head_dragonfly_nape" ] + }, + { + "id": "head_throat", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "head", + "opposite": "sub_limb_debug", + "side": 0, + "name": "throat", + "similar_bodyparts": [ "head_dragonfly_throat" ] + }, + { + "id": "head_ear_r", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "head", + "opposite": "head_ear_l", + "side": 2, + "name": "right ear", + "name_multiple": "ears", + "similar_bodyparts": [ "head_dragonfly_ear_r" ] + }, + { + "id": "head_ear_l", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "head", + "opposite": "head_ear_r", + "side": 1, + "name": "left ear", + "name_multiple": "ears", + "similar_bodyparts": [ "head_dragonfly_ear_l" ] + }, + { + "type": "sub_body_part", + "id": "hand_wrist_l", + "copy-from": "hand_wrist_l", + "name": "left wrist", + "similar_bodyparts": [ "hand_bionic_basic_wrist_l" ] + }, + { + "type": "sub_body_part", + "id": "hand_wrist_r", + "copy-from": "hand_wrist_r", + "name": "right wrist", + "similar_bodyparts": [ "hand_bionic_basic_wrist_r" ] + }, + { + "type": "sub_body_part", + "id": "hand_palm_l", + "copy-from": "hand_palm_l", + "name": "left palm", + "similar_bodyparts": [ "hand_bionic_basic_palm_l" ] + }, + { + "type": "sub_body_part", + "id": "hand_palm_r", + "copy-from": "hand_palm_r", + "name": "right palm", + "similar_bodyparts": [ "hand_bionic_basic_palm_r" ] + }, + { + "type": "sub_body_part", + "id": "hand_back_l", + "copy-from": "hand_back_l", + "name": "left back of hand", + "similar_bodyparts": [ "hand_bionic_basic_back_l" ] + }, + { + "type": "sub_body_part", + "id": "hand_back_r", + "copy-from": "hand_back_r", + "name": "right back of hand", + "similar_bodyparts": [ "hand_bionic_basic_back_r" ] + }, + { + "type": "sub_body_part", + "id": "hand_fingers_l", + "copy-from": "hand_fingers_l", + "name": "left fingers", + "similar_bodyparts": [ "hand_bionic_basic_fingers_l", "arm_wing_bird_fingers_l" ] + }, + { + "type": "sub_body_part", + "id": "hand_fingers_r", + "copy-from": "hand_fingers_r", + "name": "right fingers", + "similar_bodyparts": [ "hand_bionic_basic_fingers_r", "arm_wing_bird_fingers_r" ] + }, + { + "type": "sub_body_part", + "id": "leg_hip_l", + "copy-from": "leg_hip_l", + "name": "left hip", + "similar_bodyparts": [ "leg_bionic_basic_hip_l" ] + }, + { + "type": "sub_body_part", + "id": "leg_hip_r", + "copy-from": "leg_hip_r", + "name": "right hip", + "similar_bodyparts": [ "leg_bionic_basic_hip_r" ] + }, + { + "type": "sub_body_part", + "id": "leg_upper_l", + "copy-from": "leg_upper_l", + "name": "left thigh", + "similar_bodyparts": [ "leg_bionic_basic_upper_l" ] + }, + { + "type": "sub_body_part", + "id": "leg_upper_r", + "copy-from": "leg_upper_r", + "name": "right thigh", + "similar_bodyparts": [ "leg_bionic_basic_upper_r" ] + }, + { + "type": "sub_body_part", + "id": "leg_knee_l", + "copy-from": "leg_knee_l", + "name": "left knee", + "similar_bodyparts": [ "leg_bionic_basic_knee_l" ] + }, + { + "type": "sub_body_part", + "id": "leg_knee_r", + "copy-from": "leg_knee_r", + "name": "right knee", + "similar_bodyparts": [ "leg_bionic_basic_knee_r" ] + }, + { + "type": "sub_body_part", + "id": "leg_lower_l", + "copy-from": "leg_lower_l", + "name": "left lower leg", + "similar_bodyparts": [ "leg_bionic_basic_lower_l" ] + }, + { + "type": "sub_body_part", + "id": "leg_lower_r", + "copy-from": "leg_lower_r", + "name": "right lower leg", + "similar_bodyparts": [ "leg_bionic_basic_lower_r" ] + }, + { + "type": "sub_body_part", + "id": "leg_draped_l", + "copy-from": "leg_draped_l", + "name": "left leg (draped)", + "similar_bodyparts": [ "leg_bionic_basic_draped_l" ] + }, + { + "type": "sub_body_part", + "id": "leg_draped_r", + "copy-from": "leg_draped_r", + "name": "right leg (draped)", + "similar_bodyparts": [ "leg_bionic_basic_draped_r" ] + }, + { + "type": "sub_body_part", + "id": "foot_sole_l", + "copy-from": "foot_sole_l", + "name": "left foot bottom", + "similar_bodyparts": [ "foot_bionic_basic_sole_l" ] + }, + { + "type": "sub_body_part", + "id": "foot_sole_r", + "copy-from": "foot_sole_r", + "name": "right foot bottom", + "similar_bodyparts": [ "foot_bionic_basic_sole_r" ] + }, + { + "type": "sub_body_part", + "id": "foot_arch_l", + "copy-from": "foot_arch_l", + "name": "left foot arch", + "similar_bodyparts": [ "foot_bionic_basic_arch_l" ] + }, + { + "type": "sub_body_part", + "id": "foot_arch_r", + "copy-from": "foot_arch_r", + "name": "right foot arch", + "similar_bodyparts": [ "foot_bionic_basic_arch_r" ] + }, + { + "type": "sub_body_part", + "id": "foot_ankle_l", + "copy-from": "foot_ankle_l", + "name": "left ankle", + "similar_bodyparts": [ "foot_bionic_basic_ankle_l" ] + }, + { + "type": "sub_body_part", + "id": "foot_ankle_r", + "copy-from": "foot_ankle_r", + "name": "right ankle", + "similar_bodyparts": [ "foot_bionic_basic_ankle_r" ] + }, + { + "type": "sub_body_part", + "id": "foot_toes_l", + "copy-from": "foot_toes_l", + "name": "left toes", + "similar_bodyparts": [ "foot_bionic_basic_toes_l" ] + }, + { + "type": "sub_body_part", + "id": "foot_toes_r", + "copy-from": "foot_toes_r", + "name": "right toes", + "similar_bodyparts": [ "foot_bionic_basic_toes_r" ] + }, + { + "type": "sub_body_part", + "id": "foot_heel_l", + "copy-from": "foot_heel_l", + "name": "left heel", + "similar_bodyparts": [ "foot_bionic_basic_heel_l" ] + }, + { + "type": "sub_body_part", + "id": "foot_heel_r", + "copy-from": "foot_heel_r", + "name": "right heel", + "similar_bodyparts": [ "foot_bionic_basic_heel_r" ] + }, + { + "id": "sub_limb_debug_tail_1", + "type": "sub_body_part", + "parent": "debug_tail", + "side": 0, + "max_coverage": 100, + "name": "first debug sublimb for debug tail" + }, + { + "type": "sub_body_part", + "id": "sub_limb_debug_tail_2", + "parent": "debug_tail", + "max_coverage": 50, + "side": 0, + "name": "second debug sublimb for debug tail" + }, + { + "id": "eyes_bulging_l", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "eyes_bulging", + "side": 1, + "opposite": "eyes_bulging_r", + "name_multiple": "bulging eyes", + "name": "left bulging eye" + }, + { + "id": "eyes_bulging_r", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "eyes_bulging", + "side": 2, + "opposite": "eyes_bulging_l", + "name_multiple": "bulging eyes", + "name": "right bulging eye" + }, + { + "id": "eyes_compound_l", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "eyes_insect_1", + "side": 1, + "opposite": "eyes_compound_r", + "name_multiple": "compound eyes", + "name": "left compound eye" + }, + { + "id": "eyes_compound_r", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "eyes_insect_1", + "side": 2, + "opposite": "eyes_compound_l", + "name_multiple": "compound eyes", + "name": "right compound eye" + }, + { + "id": "eyes_dragonfly_mono_l", + "type": "sub_body_part", + "name": "gigantic compound eye (front left)", + "name_multiple": "gigantic compound eye (front)", + "parent": "eyes_dragonfly", + "max_coverage": 50, + "side": 1, + "opposite": "eyes_dragonfly_mono_r" + }, + { + "id": "eyes_dragonfly_mono_r", + "type": "sub_body_part", + "name": "gigantic compound eye (front right)", + "name_multiple": "gigantic compound eye (front)", + "parent": "eyes_dragonfly", + "max_coverage": 50, + "side": 2, + "opposite": "eyes_dragonfly_mono_l" + }, + { + "id": "head_dragonfly_forehead", + "type": "sub_body_part", + "name": "gigantic compound eye (forehead)", + "parent": "head_dragonfly", + "max_coverage": 20, + "side": 0 + }, + { + "id": "head_dragonfly_crown", + "type": "sub_body_part", + "name": "gigantic compound eye (crown)", + "parent": "head_dragonfly", + "max_coverage": 20, + "side": 0 + }, + { + "id": "head_dragonfly_nape", + "type": "sub_body_part", + "name": "nape", + "parent": "head_dragonfly", + "max_coverage": 20, + "side": 0 + }, + { + "id": "head_dragonfly_throat", + "type": "sub_body_part", + "name": "throat", + "parent": "head_dragonfly", + "max_coverage": 20, + "side": 0 + }, + { + "id": "head_dragonfly_ear_l", + "type": "sub_body_part", + "name": "left ear", + "name_multiple": "ears", + "parent": "head_dragonfly", + "max_coverage": 10, + "side": 1, + "opposite": "head_dragonfly_ear_r" + }, + { + "id": "head_dragonfly_ear_r", + "type": "sub_body_part", + "name": "right ear", + "name_multiple": "ears", + "parent": "head_dragonfly", + "max_coverage": 10, + "side": 2, + "opposite": "head_dragonfly_ear_l" + }, + { + "type": "sub_body_part", + "id": "arm_feathers_shoulder_l", + "name": "left feathered shoulder", + "name_multiple": "feathered shoulders", + "parent": "arm_feathers_l", + "side": 1, + "opposite": "arm_feathers_shoulder_r", + "max_coverage": 15 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_shoulder_r", + "name": "right feathered shoulder", + "name_multiple": "feathered shoulders", + "parent": "arm_feathers_r", + "side": 2, + "opposite": "arm_feathers_shoulder_l", + "max_coverage": 15 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_upper_l", + "name": "left feathered upper arm", + "name_multiple": "feathered upper arms", + "parent": "arm_feathers_l", + "side": 1, + "opposite": "arm_feathers_upper_r", + "max_coverage": 30 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_upper_r", + "name": "right feathered upper arm", + "name_multiple": "feathered upper arms", + "parent": "arm_feathers_r", + "side": 2, + "opposite": "arm_feathers_upper_l", + "max_coverage": 30 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_elbow_l", + "name": "left feathered elbow", + "name_multiple": "feathered elbows", + "parent": "arm_feathers_l", + "side": 1, + "opposite": "arm_feathers_elbow_r", + "max_coverage": 5 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_elbow_r", + "name": "right feathered elbow", + "name_multiple": "feathered elbows", + "parent": "arm_feathers_r", + "side": 2, + "opposite": "arm_feathers_elbow_l", + "max_coverage": 5 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_lower_l", + "name": "lower left feathered arms", + "name_multiple": "lower feathered arms", + "parent": "arm_feathers_l", + "side": 1, + "opposite": "arm_feathers_lower_r", + "max_coverage": 45 + }, + { + "type": "sub_body_part", + "id": "arm_feathers_lower_r", + "name": "lower right feathered arms", + "name_multiple": "lower feathered arms", + "parent": "arm_feathers_r", + "side": 2, + "opposite": "arm_feathers_lower_l", + "max_coverage": 45 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_shoulder_l", + "parent": "arm_wing_bird_l", + "name": "left wing shoulder", + "name_multiple": "wing shoulders", + "side": 1, + "opposite": "arm_wing_bird_shoulder_r", + "max_coverage": 15 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_shoulder_r", + "parent": "arm_wing_bird_r", + "name": "right wing shoulder", + "name_multiple": "wing shoulders", + "side": 2, + "opposite": "arm_wing_bird_shoulder_l", + "max_coverage": 15 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_upper_l", + "parent": "arm_wing_bird_l", + "name": "left upper wing", + "name_multiple": "upper wings", + "side": 1, + "opposite": "arm_wing_bird_upper_r", + "max_coverage": 30 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_upper_r", + "parent": "arm_wing_bird_r", + "name": "right upper wing", + "name_multiple": "upper wings", + "side": 2, + "opposite": "arm_wing_bird_upper_l", + "max_coverage": 30 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_elbow_l", + "parent": "arm_wing_bird_l", + "name": "left wing joint", + "name_multiple": "wing joints", + "side": 1, + "opposite": "arm_wing_bird_elbow_r", + "max_coverage": 5 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_elbow_r", + "parent": "arm_wing_bird_r", + "name": "right wing joint", + "name_multiple": "wing joints", + "side": 2, + "opposite": "arm_wing_bird_elbow_l", + "max_coverage": 5 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_lower_l", + "parent": "arm_wing_bird_l", + "name": "lower left wings", + "name_multiple": "lower wing", + "side": 1, + "opposite": "arm_wing_bird_lower_r", + "max_coverage": 45 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_lower_r", + "parent": "arm_wing_bird_r", + "name": "lower right wing", + "name_multiple": "lower wings", + "side": 2, + "opposite": "arm_wing_bird_lower_l", + "max_coverage": 45 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_fingers_l", + "parent": "arm_wing_bird_l", + "name": "left wing talons", + "name_multiple": "wing talons", + "side": 1, + "opposite": "arm_wing_bird_fingers_r", + "max_coverage": 5 + }, + { + "type": "sub_body_part", + "id": "arm_wing_bird_fingers_r", + "parent": "arm_wing_bird_r", + "name": "right wing talons", + "name_multiple": "wing talons", + "side": 2, + "opposite": "arm_wing_bird_fingers_l", + "max_coverage": 5 + }, + { + "id": "leg_bionic_basic_draped_l", + "type": "sub_body_part", + "max_coverage": 100, + "parent": "leg_bionic_basic_l", + "side": 1, + "secondary": true, + "opposite": "leg_bionic_basic_draped_r", + "name_multiple": "bionic legs (draped)", + "name": "left bionic leg (draped)", + "locations_under": [ "leg_bionic_basic_hip_l", "leg_bionic_basic_upper_l" ] + }, + { + "id": "leg_bionic_basic_draped_r", + "type": "sub_body_part", + "max_coverage": 100, + "parent": "leg_bionic_basic_r", + "side": 2, + "secondary": true, + "opposite": "leg_bionic_basic_draped_l", + "name_multiple": "bionic legs (draped)", + "name": "right bionic leg (draped)", + "locations_under": [ "leg_hip_r", "leg_upper_r" ] + }, + { + "id": "arm_bionic_basic_shoulder_r", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "arm_bionic_basic_r", + "side": 2, + "opposite": "arm_bionic_basic_shoulder_l", + "name_multiple": "bionic shoulders", + "name": "right bionic shoulder" + }, + { + "id": "arm_bionic_basic_upper_r", + "type": "sub_body_part", + "max_coverage": 40, + "parent": "arm_bionic_basic_r", + "side": 2, + "opposite": "arm_bionic_basic_upper_l", + "name_multiple": "upper bionic arms", + "name": "right upper bionic arm" + }, + { + "id": "arm_bionic_basic_elbow_r", + "type": "sub_body_part", + "max_coverage": 5, + "parent": "arm_bionic_basic_r", + "side": 2, + "opposite": "arm_bionic_basic_elbow_l", + "name_multiple": "bionic elbows", + "name": "right bionic elbow" + }, + { + "id": "arm_bionic_basic_lower_r", + "type": "sub_body_part", + "max_coverage": 35, + "parent": "arm_bionic_basic_r", + "side": 2, + "opposite": "arm_bionic_basic_lower_l", + "name_multiple": "lower bionic arms", + "name": "right bionic forearm" + }, + { + "id": "arm_bionic_basic_shoulder_l", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "arm_bionic_basic_l", + "side": 1, + "opposite": "arm_bionic_basic_shoulder_r", + "name_multiple": "bionic shoulders", + "name": "left bionic shoulder" + }, + { + "id": "arm_bionic_basic_upper_l", + "type": "sub_body_part", + "max_coverage": 40, + "parent": "arm_bionic_basic_l", + "side": 1, + "opposite": "arm_bionic_basic_upper_r", + "name_multiple": "upper bionic arms", + "name": "left upper bionic arm" + }, + { + "id": "arm_bionic_basic_elbow_l", + "type": "sub_body_part", + "max_coverage": 5, + "parent": "arm_bionic_basic_l", + "side": 1, + "opposite": "arm_bionic_basic_elbow_r", + "name_multiple": "bionic elbows", + "name": "left bionic elbow" + }, + { + "id": "arm_bionic_basic_lower_l", + "type": "sub_body_part", + "max_coverage": 35, + "parent": "arm_bionic_basic_l", + "side": 1, + "opposite": "arm_bionic_basic_lower_r", + "name_multiple": "lower bionic arms", + "name": "left bionic forearm" + }, + { + "id": "leg_bionic_basic_hip_r", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "leg_bionic_basic_r", + "side": 2, + "opposite": "leg_bionic_basic_hip_l", + "name_multiple": "bionic hips", + "name": "right bionic hip" + }, + { + "id": "leg_bionic_basic_upper_r", + "type": "sub_body_part", + "max_coverage": 40, + "parent": "leg_bionic_basic_r", + "side": 2, + "opposite": "leg_bionic_basic_upper_l", + "name_multiple": "bionic thighs", + "name": "right bionic thigh" + }, + { + "id": "leg_bionic_basic_knee_r", + "type": "sub_body_part", + "max_coverage": 5, + "parent": "leg_bionic_basic_r", + "side": 2, + "opposite": "leg_bionic_basic_knee_l", + "name_multiple": "bionic knees", + "name": "right bionic knee" + }, + { + "id": "leg_bionic_basic_lower_r", + "type": "sub_body_part", + "max_coverage": 35, + "parent": "leg_bionic_basic_r", + "side": 2, + "opposite": "leg_bionic_basic_lower_l", + "name_multiple": "bionic lower legs", + "name": "right bionic lower leg" + }, + { + "id": "leg_bionic_basic_hip_l", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "leg_bionic_basic_l", + "side": 1, + "opposite": "leg_bionic_basic_hip_r", + "name_multiple": "bionic hips", + "name": "left bionic hip" + }, + { + "id": "leg_bionic_basic_upper_l", + "type": "sub_body_part", + "max_coverage": 40, + "parent": "leg_bionic_basic_l", + "side": 1, + "opposite": "leg_bionic_basic_upper_r", + "name_multiple": "bionic thighs", + "name": "left bionic thigh" + }, + { + "id": "leg_bionic_basic_knee_l", + "type": "sub_body_part", + "max_coverage": 5, + "parent": "leg_bionic_basic_l", + "side": 1, + "opposite": "leg_bionic_basic_knee_r", + "name_multiple": "bionic knees", + "name": "left bionic knee" + }, + { + "id": "leg_bionic_basic_lower_l", + "type": "sub_body_part", + "max_coverage": 35, + "parent": "leg_bionic_basic_l", + "side": 1, + "opposite": "leg_bionic_basic_lower_r", + "name_multiple": "bionic lower legs", + "name": "left bionic lower leg" + }, + { + "id": "hand_bionic_basic_wrist_r", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "hand_bionic_basic_r", + "side": 2, + "opposite": "hand_bionic_basic_wrist_l", + "name_multiple": "bionic wrists", + "name": "right bionic wrist" + }, + { + "id": "hand_bionic_basic_palm_r", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "hand_bionic_basic_r", + "side": 2, + "opposite": "hand_bionic_basic_palm_l", + "name_multiple": "bionic palms", + "name": "right bionic palm" + }, + { + "id": "hand_bionic_basic_back_r", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "hand_bionic_basic_r", + "side": 2, + "opposite": "hand_bionic_basic_back_l", + "name_multiple": "back of bionic hands", + "name": "right back of bionic hand" + }, + { + "id": "hand_bionic_basic_fingers_r", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "hand_bionic_basic_r", + "side": 2, + "opposite": "hand_bionic_basic_fingers_l", + "name_multiple": "bionic fingers", + "name": "right bionic fingers" + }, + { + "id": "hand_bionic_basic_wrist_l", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "hand_bionic_basic_l", + "side": 1, + "opposite": "hand_bionic_basic_wrist_r", + "name_multiple": "bionic wrists", + "name": "left bionic wrist" + }, + { + "id": "hand_bionic_basic_palm_l", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "hand_bionic_basic_l", + "side": 1, + "opposite": "hand_bionic_basic_palm_r", + "name_multiple": "bionic palms", + "name": "left bionic palm" + }, + { + "id": "hand_bionic_basic_back_l", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "hand_bionic_basic_l", + "side": 1, + "opposite": "hand_bionic_basic_back_r", + "name_multiple": "back of bionic hands", + "name": "left back of bionic hand" + }, + { + "id": "hand_bionic_basic_fingers_l", + "type": "sub_body_part", + "max_coverage": 50, + "parent": "hand_bionic_basic_l", + "side": 1, + "opposite": "hand_bionic_basic_fingers_r", + "name_multiple": "bionic fingers", + "name": "left bionic fingers" + }, + { + "id": "foot_bionic_basic_sole_l", + "type": "sub_body_part", + "max_coverage": 25, + "parent": "foot_bionic_basic_l", + "side": 1, + "opposite": "foot_bionic_basic_sole_r", + "name_multiple": "bionic foot bottoms", + "name": "left bionic foot bottom" + }, + { + "id": "foot_bionic_basic_arch_l", + "type": "sub_body_part", + "max_coverage": 25, + "parent": "foot_bionic_basic_l", + "side": 1, + "opposite": "foot_bionic_basic_arch_r", + "name_multiple": "bionic foot arches", + "name": "left bionic foot arch" + }, + { + "id": "foot_bionic_basic_toes_l", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "foot_bionic_basic_l", + "side": 1, + "opposite": "foot_bionic_basic_toes_r", + "name_multiple": "bionic toes", + "name": "left bionic toes" + }, + { + "id": "foot_bionic_basic_ankle_l", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "foot_bionic_basic_l", + "side": 1, + "opposite": "foot_bionic_basic_ankle_r", + "name_multiple": "bionic ankles", + "name": "left bionic ankle" + }, + { + "id": "foot_bionic_basic_heel_l", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "foot_bionic_basic_l", + "side": 1, + "opposite": "foot_bionic_basic_heel_r", + "name_multiple": "bionic heels", + "name": "left bionic heel" + }, + { + "id": "foot_bionic_basic_sole_r", + "type": "sub_body_part", + "max_coverage": 25, + "parent": "foot_bionic_basic_r", + "side": 2, + "opposite": "foot_bionic_basic_sole_l", + "name_multiple": "bionic foot bottoms", + "name": "right bionic foot bottom" + }, + { + "id": "foot_bionic_basic_arch_r", + "type": "sub_body_part", + "max_coverage": 25, + "parent": "foot_bionic_basic_r", + "side": 2, + "opposite": "foot_arch_l", + "name_multiple": "bionic foot arches", + "name": "bionic right foot arch" + }, + { + "id": "foot_bionic_basic_toes_r", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "foot_bionic_basic_r", + "side": 2, + "opposite": "foot_bionic_basic_toes_l", + "name_multiple": "bionic toes", + "name": "bionic right toes" + }, + { + "id": "foot_bionic_basic_ankle_r", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "foot_bionic_basic_r", + "side": 2, + "opposite": "foot_bionic_basic_ankle_l", + "name_multiple": "bionic ankles", + "name": "bionic right ankle" + }, + { + "id": "foot_bionic_basic_heel_r", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "foot_bionic_basic_r", + "side": 2, + "opposite": "foot_bionic_basic_heel_l", + "name_multiple": "bionic heels", + "name": "bionic right heel" + }, + { + "id": "bionic_treads_body", + "type": "sub_body_part", + "max_coverage": 80, + "parent": "leg_bionic_treads", + "side": 0, + "opposite": "bionic_treads_treads", + "name_multiple": "bionic", + "name": "tank treads shell" + }, + { + "id": "bionic_treads_treads", + "type": "sub_body_part", + "max_coverage": 20, + "parent": "leg_bionic_treads", + "side": 0, + "opposite": "bionic_treads_body", + "name_multiple": "bionic treads", + "name": "tank treads tracks" + } +] diff --git a/data/mods/Magiclysm/mutations/mutations.json b/data/mods/Magiclysm/mutations/mutations.json index e2a79f30ceaac..53cc951de4e22 100644 --- a/data/mods/Magiclysm/mutations/mutations.json +++ b/data/mods/Magiclysm/mutations/mutations.json @@ -449,7 +449,9 @@ "type": "mutation", "id": "ARM_FEATHERS", "copy-from": "ARM_FEATHERS", - "extend": { "category": [ "SPECIES_RAVENFOLK" ] } + "valid": true, + "extend": { "category": [ "SPECIES_RAVENFOLK" ] }, + "delete": { "prereqs2": [ "PRE_ARM_FEATHERS" ] } }, { "type": "mutation", diff --git a/doc/EFFECT_ON_CONDITION.md b/doc/EFFECT_ON_CONDITION.md index 9622559f0a7f2..c9c3906081586 100644 --- a/doc/EFFECT_ON_CONDITION.md +++ b/doc/EFFECT_ON_CONDITION.md @@ -2142,7 +2142,7 @@ Your character or the NPC will attempt to mutate; used in mutation system, for o | Syntax | Optionality | Value | Info | | --- | --- | --- | --- | -| "u_mutate" / "npc_mutate" | **mandatory** | int, float or [variable object](##variable-object) | one in `int` chance of using the highest category, with 0 never using the highest category | +| "u_mutate" / "npc_mutate" | **mandatory** | int, float or [variable object](##variable-object) | one in `int` chance of causing a random mutation, with 0 only using the highest category | | "use_vitamins" | optional | boolean | default true; if true, mutation require vitamins to work | ##### Valid talkers: diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index 4755a9b2d9acd..c333672547d0b 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -452,8 +452,9 @@ Some armor flags, such as `WATCH` and `ALARMCLOCK` are compatible with other ite - ```WEBBED_FEET``` You have webbings on your feet, supporting your swimming speed if not wearing footwear. - ```WEBBED_HANDS``` You have webbings on your hands, supporting your swimming speed. - ```WEB_RAPPEL``` You can rappel down staircases and sheer drops of any height. -- ```WINGS_1``` If you're not immobilized and have <50% burden, you reduce fall damage by 1 Z-level. -- ```WINGS_2``` If you're not immobilized and have <50% burden, you reduce fall damage by 2 Z-levels. +- ```WINGS_1``` You can slow your fall, effectively reducing the height of it by 1 level. +- ```WINGS_2``` You can slow your fall, effectively reducing the height of falls by 2 levels, and ignore pit-like traps. +- ```WING_ARMS``` Two instances of this flag enable you to glide and ignore pit traps if not above 50% carryweight or 4 lift strength. - ```WINGGLIDE``` You can glide using some part of your body and strenuous physical effort. - ```mycus``` TBD diff --git a/doc/MUTATIONS.md b/doc/MUTATIONS.md index 42c3a91cfb9d0..6d2a4cb451e25 100644 --- a/doc/MUTATIONS.md +++ b/doc/MUTATIONS.md @@ -106,7 +106,7 @@ Note that **all new traits that can be obtained through mutation must be purifia "mixed_effect": false, // Whether the trait has both positive and negative effects. This is purely declarative and is only used for the user interface (default: false). "description": "Nothing gets you down!", // In-game description. "starting_trait": true, // Can be selected at character creation (default: false). - "valid": false, // Can be mutated ingame (default: true). + "valid": false, // Can be mutated ingame (default: true). Note that prerequisites can even mutate invalid mutations. "purifiable": false, // Sets if the mutation be purified (default: true). "profession": true, // Trait is a starting profession special trait (default: false). "debug": false, // Trait is for debug purposes (default: false). @@ -314,7 +314,7 @@ These fields are optional, but are very frequently used in mutations and their c | Identifier | Default | Description | | ----------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `category` | Nothing | An array of string IDs representing mutation categories. This defines which categories the trait is considered part of (such as `ALPHA`, `BEAST`, `CEPHALOPOD`, and so on) and so it determines which primers must be used for the player to mutate them. | -| `types` | Nothing | A list of types that this mutation can be classified under. Each mutation with a certain type is mutually exclusive with other mutations that also have that type; if a trait has the `EXAMPLE` type defined, then no other trait with that type can exist on a character, and mutating towards such a trait would remove the existing one if it could. | +| `types` | Nothing | A list of types that this mutation can be classified under. Each mutation with a certain type is mutually exclusive with other mutations that also have that type; if a trait has the `EXAMPLE` type defined, then no other trait with that type can exist on a character, and mutating towards such a trait would remove the existing one if it could. An exception is made for same-typed prerequisite traits, these will not get removed.| | `prereqs` | Nothing | An array of mutation IDs that are possible requirements for this trait to be obtained. Only a single option from this list needs to be present. | | `prereqs2` | Nothing | Identical to `prereqs`, and will throw errors if `prereqs` isn't defined. This is used to have multiple traits required to obtain another trait; one option must be present on the character from both `prereqs` and `prereqs2` for a trait to be obtainable. | | `threshreq` | Nothing | This is a dedicated prerequisite slot for threshold mutations, and functions identically to `prereq` and `prereq2`. | diff --git a/src/character.cpp b/src/character.cpp index eda262d205550..71ceb89d78f29 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -236,7 +236,6 @@ static const efftype_id effect_foodpoison( "foodpoison" ); static const efftype_id effect_fungus( "fungus" ); static const efftype_id effect_glowing( "glowing" ); static const efftype_id effect_glowy_led( "glowy_led" ); -static const efftype_id effect_grabbed( "grabbed" ); static const efftype_id effect_harnessed( "harnessed" ); static const efftype_id effect_heavysnare( "heavysnare" ); static const efftype_id effect_in_pit( "in_pit" ); @@ -343,7 +342,6 @@ static const json_character_flag json_flag_WALK_UNDERWATER( "WALK_UNDERWATER" ); static const json_character_flag json_flag_WATCH( "WATCH" ); static const json_character_flag json_flag_WEBBED_FEET( "WEBBED_FEET" ); static const json_character_flag json_flag_WEBBED_HANDS( "WEBBED_HANDS" ); -static const json_character_flag json_flag_WINGS_1( "WINGS_1" ); static const json_character_flag json_flag_WINGS_2( "WINGS_2" ); static const json_character_flag json_flag_WING_ARMS( "WING_ARMS" ); static const json_character_flag json_flag_WING_GLIDE( "WING_GLIDE" ); @@ -12481,25 +12479,23 @@ int Character::impact( const int force, const tripoint &p ) bool Character::can_fly() { - if( has_effect( effect_stunned ) || has_effect( effect_narcosis ) || - ( has_effect( effect_grabbed ) && !try_remove_grab() ) || movement_mode_is( move_mode_prone ) || - has_effect( effect_downed ) ) { + if( !move_effects( false ) || has_effect( effect_stunned ) ) { return false; } // GLIDE is for artifacts or things like jetpacks that don't care if you're tired or hurt. - if( has_trait_flag( json_flag_GLIDE ) ) { + if( has_flag( json_flag_GLIDE ) ) { return true; } - if( ( has_trait_flag( json_flag_WINGS_1 ) || has_trait_flag( json_flag_WINGS_2 ) || - has_trait_flag( json_flag_WING_GLIDE ) ) && - ( 100 * weight_carried() / weight_capacity() > 50 || get_str() < 4 || - has_effect( effect_winded ) ) ) { - return false; - } - if( has_trait_flag( json_flag_WING_ARMS ) && get_working_arm_count() < 2 ) { - return false; + // TODO: Remove grandfathering traits in after Limb Stuff + if( has_flag( json_flag_WINGS_2 ) || + has_flag( json_flag_WING_GLIDE ) || count_flag( json_flag_WING_ARMS ) >= 2 ) { + + if( 100 * weight_carried() / weight_capacity() > 50 || !has_two_arms_lifting() ) { + return false; + } + return true; } - return true; + return false; } // FIXME: Relies on hardcoded bash damage type diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 2cfab53ef0a28..443f130c713e0 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -187,6 +187,7 @@ static const json_character_flag json_flag_GLIDE( "GLIDE" ); static const json_character_flag json_flag_LEVITATION( "LEVITATION" ); static const json_character_flag json_flag_PAIN_IMMUNE( "PAIN_IMMUNE" ); static const json_character_flag json_flag_SUPER_HEARING( "SUPER_HEARING" ); +static const json_character_flag json_flag_WING_ARM( "WING_ARM" ); static const json_character_flag json_flag_WING_GLIDE( "WING_GLIDE" ); static const material_id material_bone( "bone" ); @@ -5083,8 +5084,10 @@ void iexamine::ledge( Character &you, const tripoint &examp ) cmenu.addentry( ledge_jump_across, jump_target_valid, 'j', ( jump_target_valid ? _( "Jump across." ) : _( "Can't jump across (need a small gap)." ) ) ); cmenu.addentry( ledge_fall_down, true, 'f', _( "Fall down." ) ); - if( you.has_trait_flag( json_flag_GLIDE ) || you.has_trait_flag( json_flag_WING_GLIDE ) ) { - cmenu.addentry( ledge_glide, true, 'g', _( "Glide away." ) ); + if( you.has_flag( json_flag_GLIDE ) || you.has_flag( json_flag_WING_GLIDE ) || + you.has_bodypart_with_flag( json_flag_WING_ARM ) ) { + cmenu.addentry( ledge_glide, you.can_fly(), 'g', + ( you.can_fly() ? _( "Glide away." ) : _( "You can't glide in your current state" ) ) ); } cmenu.query(); @@ -5172,43 +5175,30 @@ void iexamine::ledge( Character &you, const tripoint &examp ) break; }*/ case ledge_glide: { - // If player is grabbed, trapped, or somehow otherwise movement-impeded, first try to break free - if( !you.move_effects( false ) ) { - you.moves -= 100; - return; - } - // The carried weight check here is redundant, but we do it anyway for better player feedback - if( 100 * you.weight_carried() / you.weight_capacity() > 50 && - you.has_trait_flag( json_flag_WING_GLIDE ) ) { - add_msg( m_warning, _( "You are carrying too much to glide." ) ); - } else if( !you.can_fly() ) { - add_msg( m_warning, _( "You can't manage to get airborne in your current state." ) ); - } else { - int glide_distance = 5; - const weather_manager &weather = get_weather(); - add_msg( m_info, _( "You soar away from the ledge." ) ); - int angledifference = std::abs( weather.winddirection - jump_direction * 45 ); - // Handle cases where the difference wraps around due to compass directions - angledifference = std::min( angledifference, 360 - angledifference ); - if( angledifference <= 45 && weather.windspeed >= 12 ) { - add_msg( m_warning, _( "Your glide is aided by a tailwind." ) ); - glide_distance += 1; - } - // Check if the directions are greater than 135 degrees apart - else if( angledifference >= 135 && weather.windspeed >= 12 ) { - add_msg( m_warning, _( "Your glide is hindered by a headwind." ) ); - glide_distance -= 1; - } - if( jump_direction == 1 || jump_direction == 3 || jump_direction == 5 || jump_direction == 7 ) { - glide_distance = std::round( 0.7 * glide_distance ); - } - you.as_avatar()->grab( object_type::NONE ); - glide_activity_actor glide( &you, jump_direction, glide_distance ); - you.remove_effect( effect_bouldering ); - you.assign_activity( glide ); - you.add_effect( effect_gliding, 1_turns, true ); - you.setpos( examp ); - } + int glide_distance = 5; + const weather_manager &weather = get_weather(); + add_msg( m_info, _( "You soar away from the ledge." ) ); + int angledifference = std::abs( weather.winddirection - jump_direction * 45 ); + // Handle cases where the difference wraps around due to compass directions + angledifference = std::min( angledifference, 360 - angledifference ); + if( angledifference <= 45 && weather.windspeed >= 12 ) { + add_msg( m_warning, _( "Your glide is aided by a tailwind." ) ); + glide_distance += 1; + } + // Check if the directions are greater than 135 degrees apart + else if( angledifference >= 135 && weather.windspeed >= 12 ) { + add_msg( m_warning, _( "Your glide is hindered by a headwind." ) ); + glide_distance -= 1; + } + if( jump_direction == 1 || jump_direction == 3 || jump_direction == 5 || jump_direction == 7 ) { + glide_distance = std::round( 0.7 * glide_distance ); + } + you.as_avatar()->grab( object_type::NONE ); + glide_activity_actor glide( &you, jump_direction, glide_distance ); + you.remove_effect( effect_bouldering ); + you.assign_activity( glide ); + you.add_effect( effect_gliding, 1_turns, true ); + you.setpos( examp ); break; } case ledge_fall_down: { diff --git a/src/trapfunc.cpp b/src/trapfunc.cpp index 56e3e92099381..beb0a60bfc47a 100644 --- a/src/trapfunc.cpp +++ b/src/trapfunc.cpp @@ -72,8 +72,6 @@ static const itype_id itype_rope_30( "rope_30" ); static const json_character_flag json_flag_INFECTION_IMMUNE( "INFECTION_IMMUNE" ); static const json_character_flag json_flag_WALL_CLING( "WALL_CLING" ); -static const json_character_flag json_flag_WINGS_1( "WINGS_1" ); -static const json_character_flag json_flag_WINGS_2( "WINGS_2" ); static const material_id material_kevlar( "kevlar" ); static const material_id material_steel( "steel" ); @@ -836,8 +834,7 @@ bool trapfunc::pit( const tripoint &p, Creature *c, item * ) monster *z = dynamic_cast( c ); Character *you = dynamic_cast( c ); if( you != nullptr ) { - if( you->can_fly() && ( you->has_flag( json_flag_WINGS_1 ) || - you->has_flag( json_flag_WINGS_2 ) ) ) { + if( you->can_fly() ) { you->add_msg_player_or_npc( _( "You spread your wings to slow your fall." ), _( " spreads their wings to slow their fall." ) ); } else if( you->has_active_bionic( bio_shock_absorber ) ) { @@ -889,8 +886,7 @@ bool trapfunc::pit_spikes( const tripoint &p, Creature *c, item * ) if( you != nullptr ) { int dodge = you->get_dodge(); int damage = pit_effectiveness( p ) * rng( 20, 50 ); - if( you->can_fly() && ( you->has_flag( json_flag_WINGS_1 ) || - you->has_flag( json_flag_WINGS_2 ) ) ) { + if( you->can_fly() ) { you->add_msg_player_or_npc( _( "You spread your wings to slow your fall." ), _( " spreads their wings to slow their fall." ) ); } else if( you->has_active_bionic( bio_shock_absorber ) ) { @@ -975,8 +971,7 @@ bool trapfunc::pit_glass( const tripoint &p, Creature *c, item * ) if( you != nullptr ) { int dodge = you->get_dodge(); int damage = pit_effectiveness( p ) * rng( 15, 35 ); - if( you->can_fly() && ( you->has_flag( json_flag_WINGS_1 ) || - you->has_flag( json_flag_WINGS_2 ) ) ) { + if( you->can_fly() ) { you->add_msg_player_or_npc( _( "You spread your wings to slow your fall." ), _( " spreads their wings to slow their fall." ) ); } else if( you->has_active_bionic( bio_shock_absorber ) ) { @@ -1295,12 +1290,7 @@ bool trapfunc::ledge( const tripoint &p, Creature *c, item * ) if( you->has_effect( effect_strengthened_gravity ) ) { height += 1; } - if( you->can_fly() && you->has_flag( json_flag_WINGS_1 ) ) { - you->add_msg_player_or_npc( _( "You spread your wings to slow your fall." ), - _( " spreads their wings to slow their fall." ) ); - height = std::max( 0, height - 1 ); - } - if( you->can_fly() && you->has_flag( json_flag_WINGS_2 ) ) { + if( you->can_fly() ) { you->add_msg_player_or_npc( _( "You spread your wings to slow your fall." ), _( " spreads their wings to slow their fall." ) ); height = std::max( 0, height - 2 ); @@ -1704,4 +1694,4 @@ const trap_function &trap_function_from_string( const std::string &function_name debugmsg( "Could not find a trapfunc function matching '%s'!", function_name ); static const trap_function null_fun = trapfunc::none; return null_fun; -} \ No newline at end of file +}