From 9ebd717a524331aa53f5db59c87ef180dc3d2385 Mon Sep 17 00:00:00 2001 From: Venera3 <72006894+Venera3@users.noreply.github.com> Date: Sun, 21 Apr 2024 21:36:49 +0200 Subject: [PATCH] [Limb Mod] Limbify Feathered Arms, rework Bird Wings and gliding checks (#72867) * Relimb No WIP timers, dummy Ooooh piece of dead code * Thank you, typobot Remove space, TODO remove time No U * Def didn't fix that on the web interface and overwrote with forcepush, nosir --- data/json/mutations/mutations.json | 5 +- data/mods/Limb_WIP/armor/limb_armor.json | 29 + data/mods/Limb_WIP/enchantments.json | 13 - .../mutation_eocs/limb_changing_eocs.json | 161 ++- data/mods/Limb_WIP/mutation_snippets.json | 93 ++ .../Limb_WIP/mutations/mutation_limbs.json | 1139 ++--------------- data/mods/Limb_WIP/mutations/mutations.json | 88 +- data/mods/Limb_WIP/mutations/sub_limbs.json | 1030 +++++++++++++++ data/mods/Magiclysm/mutations/mutations.json | 4 +- doc/EFFECT_ON_CONDITION.md | 2 +- doc/JSON_FLAGS.md | 1 + doc/MUTATIONS.md | 4 +- src/character.cpp | 26 +- src/iexamine.cpp | 68 +- src/trapfunc.cpp | 20 +- tools/spell_checker/dictionary.txt | 6 + 16 files changed, 1577 insertions(+), 1112 deletions(-) create mode 100644 data/mods/Limb_WIP/mutations/sub_limbs.json diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index aa42d79b71c74..7d0877331bb54 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -5216,7 +5216,7 @@ "strict_threshreq": true, "category": [ "BIRD" ], "restricts_gear": [ "arm_l", "arm_r", "hand_l", "hand_r" ], - "flags": [ "WINGS_2", "WING_GLIDE", "ARM_WINGS" ] + "flags": [ "WINGS_2", "WING_GLIDE" ] }, { "type": "mutation", @@ -6384,7 +6384,7 @@ "mixed_effect": true, "description": "Most of your fingers have grown to tremendous length, becoming a broad pair of leathery wings. This allows you to arrest a fall or glide from a ledge if you aren't too weighed down, but naturally impedes your fine motor skills. They even keep you warm when you sleep.", "types": [ "ARMS", "HANDS" ], - "flags": [ "WING_GLIDE", "WINGS_2", "ARM_WINGS" ], + "flags": [ "WING_GLIDE", "WINGS_2" ], "encumbrance_always": [ [ "arm_r", 20 ], [ "arm_l", 20 ], [ "hand_r", 40 ], [ "hand_l", 40 ] ], "prereqs": [ "WEBBED" ], "strict_threshreq": true, @@ -7816,7 +7816,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/armor/limb_armor.json b/data/mods/Limb_WIP/armor/limb_armor.json index 96aea9a9b9fc7..1c826e23a8ebb 100644 --- a/data/mods/Limb_WIP/armor/limb_armor.json +++ b/data/mods/Limb_WIP/armor/limb_armor.json @@ -48,6 +48,35 @@ } ] }, + { + "type": "ARMOR", + "id": "integrated_feathers", + "copy-from": "integrated_feathers", + "name": { "str_sp": "feathers" }, + "armor": [ + { + "material": [ { "type": "mut_feather", "covered_by_mat": 100, "thickness": 4 } ], + "covers": [ + "hand_l", + "hand_r", + "foot_l", + "foot_r", + "leg_l", + "leg_r", + "arm_l", + "arm_r", + "torso", + "head", + "arm_feathers_l", + "arm_feathers_r", + "arm_wing_bird_l", + "arm_wing_bird_r" + ], + "coverage": 100, + "encumbrance": 0 + } + ] + }, { "id": "armor_bio_arms_basic", "type": "ARMOR", diff --git a/data/mods/Limb_WIP/enchantments.json b/data/mods/Limb_WIP/enchantments.json index a83554c487adc..d8b3b01e045ca 100644 --- a/data/mods/Limb_WIP/enchantments.json +++ b/data/mods/Limb_WIP/enchantments.json @@ -12,19 +12,6 @@ "values": [ { "value": "MOVECOST_FLATGROUND_MOD", "multiply": 0.25 } ], "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/mutation_eocs/limb_changing_eocs.json b/data/mods/Limb_WIP/mutation_eocs/limb_changing_eocs.json index fac239715cf82..19a279e34f11e 100644 --- a/data/mods/Limb_WIP/mutation_eocs/limb_changing_eocs.json +++ b/data/mods/Limb_WIP/mutation_eocs/limb_changing_eocs.json @@ -33,6 +33,26 @@ { "u_add_effect": "stunned", "duration": [ "5 s", "30 s" ] } ] }, + { + "type": "effect_on_condition", + "id": "EOC_ARM_PAIN", + "effect": [ { "u_message": "", "snippet": true }, { "math": [ "u_pain()", "+=", "5" ] } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_ARM_DROP", + "condition": "u_has_weapon", + "effect": [ { "u_message": "", "snippet": true }, "player_weapon_drop" ] + }, + { + "type": "effect_on_condition", + "id": "EOC_ARM_ITCH", + "effect": [ + { "u_message": "", "snippet": true }, + { "u_add_effect": "formication", "duration": 3600, "target_part": "arm_l" }, + { "u_add_effect": "formication", "duration": 3600, "target_part": "arm_r" } + ] + }, { "type": "effect_on_condition", "id": "EOC_PRE_EYES_INSECT", @@ -43,7 +63,8 @@ { "math": [ "u_vitamin('mutagen_insect')", ">=", "300" ] }, { "math": [ "u_vitamin('mutagen')", ">=", "300" ] }, { "math": [ "u_progress_pre_eyes_insect", ">=", "3" ] }, - { "u_has_effect": "sleep" } + { "u_has_effect": "sleep" }, + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } ] }, "effect": [ @@ -66,7 +87,7 @@ { "x_in_y_chance": { "x": { "math": [ "u_vitamin('mutagen_insect') + u_vitamin('mutagen')" ] }, "y": 1000 } }, - { "math": [ "time_since('limb_progress_timer', 'unit':'days') >= 1" ] } + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } ] }, "then": [ @@ -94,7 +115,8 @@ { "math": [ "u_vitamin('mutagen_insect')", ">=", "500" ] }, { "math": [ "u_vitamin('mutagen')", ">=", "500" ] }, { "math": [ "u_progress_eyes_insect", ">=", "5" ] }, - { "u_has_effect": "sleep" } + { "u_has_effect": "sleep" }, + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } ] }, "effect": [ @@ -118,7 +140,7 @@ { "x_in_y_chance": { "x": { "math": [ "u_vitamin('mutagen_insect') + u_vitamin('mutagen')" ] }, "y": 1200 } }, - { "math": [ "time_since('limb_progress_timer', 'unit':'days') >= 1" ] } + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } ] }, "then": [ @@ -136,5 +158,136 @@ ] } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_PRE_ARM_FEATHERS", + "//": "First-stage limb, single progress dream. Dynamically decide on failure snips/mutation category", + "condition": { + "and": [ + { + "or": [ { "math": [ "u_vitamin('mutagen_bird')", ">=", "200" ] }, { "math": [ "u_vitamin('mutagen_raptor')", ">=", "200" ] } ] + }, + { "math": [ "u_vitamin('mutagen')", ">=", "300" ] }, + { "math": [ "u_progress_pre_arm_feathers", ">=", "1" ] }, + { "u_has_effect": "sleep" }, + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } + ] + }, + "effect": [ + { + "if": { "math": [ "u_vitamin('mutagen_bird')", ">=", "u_vitamin('mutagen_raptor')" ] }, + "then": { "u_mutate_towards": "ARM_FEATHERS", "category": "BIRD", "use_vitamins": true }, + "else": { "u_mutate_towards": "ARM_FEATHERS", "category": "RAPTOR", "use_vitamins": true } + }, + { + "if": { "u_has_trait": "ARM_FEATHERS" }, + "then": [ + { "u_message": "", "popup": true }, + { "math": [ "u_progress_pre_arm_feathers", "=", "0" ] }, + { "u_lose_effect": "sleep" } + ], + "else": { + "if": { "math": [ "u_vitamin('mutagen_bird')", ">=", "u_vitamin('mutagen_raptor')" ] }, + "then": { "u_message": "", "type": "bad", "snippet": true }, + "else": { "u_message": "", "type": "bad", "snippet": true } + } + } + ], + "false_effect": [ + { + "if": { + "and": [ + { "u_has_effect": "sleep" }, + { + "x_in_y_chance": { "x": { "math": [ "u_vitamin('mutagen_bird') + u_vitamin('mutagen_raptor') + u_vitamin('mutagen')" ] }, "y": 1500 } + }, + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } + ] + }, + "then": [ + { "u_message": "", "snippet": true, "popup": true }, + { "u_lose_effect": "sleep" }, + { "math": [ "u_progress_pre_arm_feathers", "++" ] }, + { "math": [ "u_limb_progress_timer", "=", "time('now')" ] } + ], + "else": [ + { + "if": { "one_in_chance": 5 }, + "then": { + "if": { "math": [ "u_vitamin('mutagen_bird')", ">=", "u_vitamin('mutagen_raptor')" ] }, + "then": { "u_message": "", "type": "bad", "snippet": true }, + "else": { "u_message": "", "type": "bad", "snippet": true } + } + }, + { + "if": { "one_in_chance": 10 }, + "then": { "weighted_list_eocs": [ [ "EOC_ARM_PAIN", 2 ], [ "EOC_ARM_ITCH", 5 ] ] } + } + ] + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_ARM_FEATHERS", + "//": "If you're on the way towards birdyness try growing wings. No failure message unless you're birdier than raptorier; check if you either have the bird thresh or are still pre-thresh", + "condition": { + "and": [ + { "math": [ "u_vitamin('mutagen_bird')", ">=", "300" ] }, + { "math": [ "u_vitamin('mutagen')", ">=", "300" ] }, + { "math": [ "u_progress_wings_bird", ">=", "3" ] }, + { "u_has_effect": "sleep" }, + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } + ] + }, + "effect": [ + { "u_mutate_towards": "WINGS_BIRD", "category": "BIRD", "use_vitamins": true }, + { + "if": { "u_has_trait": "WINGS_BIRD" }, + "then": [ + { "u_message": "", "popup": true }, + { "math": [ "u_progress_wings_bird", "=", "0" ] }, + { "u_lose_effect": "sleep" } + ], + "else": { "u_message": "", "type": "bad", "snippet": true } + } + ], + "false_effect": [ + { + "if": { + "and": [ + { "u_has_effect": "sleep" }, + { "x_in_y_chance": { "x": { "math": [ "u_vitamin('mutagen_bird')" ] }, "y": 400 } }, + { "math": [ "u_vitamin('mutagen')", ">=", "300" ] }, + { "u_has_trait": "THRESH_BIRD" }, + { "math": [ "time_since(u_limb_progress_timer)", ">=", "time('12 h')" ] } + ] + }, + "then": [ + { "u_message": "", "snippet": true }, + { "u_lose_effect": "sleep" }, + { "math": [ "u_progress_wings_bird", "++" ] }, + { "math": [ "u_limb_progress_timer", "=", "time('now')" ] } + ], + "else": [ + { + "if": { + "and": [ + { "math": [ "u_vitamin('mutagen_bird')", ">", "200" ] }, + { "or": [ { "u_has_trait": "THRESH_BIRD" }, { "not": { "u_has_flag": "MUTATION_THRESHOLD" } } ] } + ] + }, + "then": [ + { "if": { "one_in_chance": 5 }, "then": { "u_message": "", "type": "bad", "snippet": true } }, + { + "if": { "one_in_chance": 10 }, + "then": { "weighted_list_eocs": [ [ "EOC_ARM_DROP", 1 ], [ "EOC_ARM_PAIN", 2 ], [ "EOC_ARM_ITCH", 5 ] ] } + } + ] + } + ] + } + ] } ] diff --git a/data/mods/Limb_WIP/mutation_snippets.json b/data/mods/Limb_WIP/mutation_snippets.json index 1c367348c6a76..6f1f060edfa1c 100644 --- a/data/mods/Limb_WIP/mutation_snippets.json +++ b/data/mods/Limb_WIP/mutation_snippets.json @@ -18,6 +18,99 @@ "category": "", "text": [ "The world starts turning wildly, and you stumble." ] }, + { + "type": "snippet", + "category": "", + "text": [ + "Your arms start itching.", + "Something is crawling under your skin.", + "You pause for a moment. The movement under your skin doesn't." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ "Your arms hurt!", "Your arms cramp!", "Something shifts in your arm, painfully." ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "Your hands seize up for a moment, and you drop your weapon!", + "Your arms fall down paralyzed, and your weapon tumbles to the ground!" + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "You are but a child again, fighting over the dinner's remains with your brothers and sisters. There were times for mirth and playfulness, but this is not one of those - the time nears when the smallest will be cast aside, and you're all terrified of being chosen.", + "You soar above the plains, but the pickings are slim today. The shadows lengthen already, and you turn homewards with a flick of your wings, steeling yourself to the disappointed cries of your chicks and another hungry night. You must do better tomorrow, lest this year's brood will be lost too." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "You long for the skies, to watch the tiny problems of the ground disappear below you.", + "You remember feeling less attached to the ground. What are you missing?", + "You need more if you are to fly South before the cold comes. Much more.", + "Is your beak strong enough? Your feathers long? No, you need more.", + "You need enough bird primer and catalyst in your system while you are sleeping to complete your change.", + "You won't be able to change without enough catalyst, the right primer and being asleep." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "You prowl the forest with your nestmates in search of prey - you're a strong brood with bright feathers and sharp talons, but fortune seems to elude you lately. You take them towards the edge of the forest, where the air always smells of smoke, and sneak up on a pack of monkeys with too-colorful fur sitting on a fallen tree and chattering amongst themselves. The smallest notices you and waves excitedly, just before you pounce.", + "You dream of blood on your talons, and the air catching your feathers as you try to balance on your struggling prey. It feels almost like a game, something you'd have played in a previous life. Lost in thought you almost miss the moment when the threshing grows still, until your brothers' screech brings you back to the present - time to eat." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "Slow. Too slow. Slower than prey.", + "You'll never wet your talons at this rate. You need to become better.", + "Scenes of a chase, claws, blood on the leaves flash before your eyes. You need more to truly understand it.", + "Not a care in the world, only the hunt. How you wish you were that far gone already.", + "You need enough raptor primer and catalyst in your system while you are sleeping to complete your change.", + "You won't be able to change without enough catalyst, the right primer and being asleep." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "", + "", + "You are desperate to stop your disgusting ape hands from pulling out handfuls of your beautiful feathers, but they move on their own accord. You manage to hold one of the useless things between your talons, and bring your beak down on it…Just a dream. Still, food for thought." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "You wake to a sudden itch in your arms, and you shake them vigorously. To your painful surprise a new cover of long, strong feathers broke the surface, bloody dead skin and plumage falling on the ground." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "", + "Clouds surround you as you soar through the sky. You look down and see the wilderness stretching out as far as the eye can see, but you can't stay here. You need to go somewhere else, to the land of warmth and plenty. Your eyes wander over your beautiful wings propelling you along, and you're mesmerized by their rhythmic beating. Much better than your…hands. You have hands, not wings. Not yet." + ] + }, + { + "type": "snippet", + "category": "", + "text": [ + "You dream of jumping from a cliff for your first flight, but the feathers on your clumsy arms can't hold you. You hit the ground, and your hands are mangled beyond recognition. After waking, the pain persists, and you're startled to see your useless fingers snap and disappear in your rich plumage. Good riddance, you think, before falling unconscious." + ] + }, { "type": "snippet", "category": "", diff --git a/data/mods/Limb_WIP/mutations/mutation_limbs.json b/data/mods/Limb_WIP/mutations/mutation_limbs.json index 45b49596efd2d..7beceb51e8516 100644 --- a/data/mods/Limb_WIP/mutations/mutation_limbs.json +++ b/data/mods/Limb_WIP/mutations/mutation_limbs.json @@ -90,342 +90,6 @@ "limb_scores": [ [ "manip", 0.1, 0.2 ], [ "footing", 0.5 ], [ "swim", 0.1 ] ], "similar_bodyparts": [ "foot_bionic_basic_r" ] }, - { - "type": "sub_body_part", - "id": "arm_shoulder_l", - "copy-from": "arm_shoulder_l", - "name": "left shoulder", - "similar_bodyparts": [ "arm_bionic_basic_shoulder_l", "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", "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" ] - }, - { - "type": "sub_body_part", - "id": "arm_upper_r", - "copy-from": "arm_upper_r", - "name": "right upper arm", - "similar_bodyparts": [ "arm_bionic_basic_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" ] - }, - { - "type": "sub_body_part", - "id": "arm_elbow_r", - "copy-from": "arm_elbow_r", - "name": "right elbow", - "similar_bodyparts": [ "arm_bionic_basic_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" ] - }, - { - "type": "sub_body_part", - "id": "hand_fingers_r", - "copy-from": "hand_fingers_r", - "name": "right fingers", - "similar_bodyparts": [ "hand_bionic_basic_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" ] - }, { "type": "body_part", "id": "debug_torso", @@ -451,22 +115,6 @@ "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" ] }, - { - "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" - }, { "type": "body_part", "id": "eyes_bulging", @@ -484,26 +132,6 @@ "hit_size": 0.9, "hit_difficulty": 1.25 }, - { - "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" - }, { "type": "body_part", "id": "eyes_insect_1", @@ -644,96 +272,134 @@ "flags": [ "SEESLEEP", "LIMB_UPPER" ] }, { - "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 + "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": [ ] }, { - "id": "head_dragonfly_throat", - "type": "sub_body_part", - "name": "throat", - "parent": "head_dragonfly", - "max_coverage": 20, - "side": 0 + "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": "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": "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": "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" + "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", @@ -1754,183 +1420,6 @@ "bmi_encumbrance_threshold": 0, "bmi_encumbrance_scalar": 0 }, - { - "id": "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", - "heading": "l. wing", - "heading_multiple": "wings", - "encumbrance_text": "Melee combat is hampered.", - "hp_bar_ui_text": "L WING", - "main_part": "wing_bird_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, - "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 ] - ], - "smash_message": "You buffet the %s with your wing.", - "side": "left", - "base_hp": 45, - "sub_parts": [ "wing_bird_shoulder_l", "wing_bird_upper_l", "wing_bird_elbow_l", "wing_bird_lower_l", "wing_bird_fingers_l" ], - "armor": { "cut": 3, "bash": 4 }, - "unarmed_damage": [ { "damage_type": "bash", "amount": -2 } ] - }, - { - "id": "wing_bird_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", - "encumbrance_text": "Melee combat is hampered.", - "hp_bar_ui_text": "R WING", - "main_part": "wing_bird_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, - "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 ] - ], - "smash_message": "You buffet the %s with your wing.", - "side": "right", - "base_hp": 45, - "sub_parts": [ "wing_bird_shoulder_r", "wing_bird_upper_r", "wing_bird_elbow_r", "wing_bird_lower_r", "wing_bird_fingers_r" ], - "armor": { "cut": 3, "bash": 4 }, - "unarmed_damage": [ { "damage_type": "bash", "amount": -2 } ] - }, - { - "type": "sub_body_part", - "id": "wing_bird_shoulder_l", - "parent": "wing_bird_l", - "name": "left wing shoulder", - "name_multiple": "wing shoulders", - "side": 1, - "opposite": "wing_bird_shoulder_r", - "max_coverage": 15 - }, - { - "type": "sub_body_part", - "id": "wing_bird_upper_l", - "parent": "wing_bird_l", - "name": "left upper wing", - "name_multiple": "upper wings", - "side": 1, - "opposite": "wing_bird_upper_r", - "max_coverage": 30 - }, - { - "type": "sub_body_part", - "id": "wing_bird_elbow_l", - "parent": "wing_bird_l", - "name": "left wing joint", - "name_multiple": "wing joints", - "side": 1, - "opposite": "wing_bird_elbow_r", - "max_coverage": 5 - }, - { - "type": "sub_body_part", - "id": "wing_bird_lower_l", - "parent": "wing_bird_l", - "name": "lower left wings", - "name_multiple": "lower wing", - "side": 1, - "opposite": "wing_bird_lower_r", - "max_coverage": 45 - }, - { - "type": "sub_body_part", - "id": "wing_bird_fingers_l", - "parent": "wing_bird_l", - "name": "left wing talons", - "name_multiple": "wing talons", - "side": 1, - "opposite": "wing_bird_fingers_r", - "max_coverage": 5 - }, - { - "type": "sub_body_part", - "id": "wing_bird_shoulder_r", - "parent": "wing_bird_r", - "name": "right wing shoulder", - "name_multiple": "wing shoulders", - "side": 2, - "opposite": "wing_bird_shoulder_l", - "max_coverage": 15 - }, - { - "type": "sub_body_part", - "id": "wing_bird_upper_r", - "parent": "wing_bird_r", - "name": "right upper wing", - "name_multiple": "upper wings", - "side": 2, - "opposite": "wing_bird_upper_l", - "max_coverage": 30 - }, - { - "type": "sub_body_part", - "id": "wing_bird_elbow_r", - "parent": "wing_bird_r", - "name": "right wing joint", - "name_multiple": "wing joints", - "side": 2, - "opposite": "wing_bird_elbow_l", - "max_coverage": 5 - }, - { - "type": "sub_body_part", - "id": "wing_bird_lower_r", - "parent": "wing_bird_r", - "name": "lower right wing", - "name_multiple": "lower wings", - "side": 2, - "opposite": "wing_bird_lower_l", - "max_coverage": 45 - }, - { - "type": "sub_body_part", - "id": "wing_bird_fingers_r", - "parent": "wing_bird_r", - "name": "right wing talons", - "name_multiple": "wing talons", - "side": 2, - "opposite": "wing_bird_fingers_l", - "max_coverage": 5 - }, { "id": "arm_bionic_basic_l", "type": "body_part", @@ -2346,370 +1835,6 @@ "ugliness_mandatory": 0, "stat_hp_mods": { "str_mod": 0 } }, - { - "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": "leg_bionic_treads", "type": "body_part", @@ -2756,25 +1881,5 @@ "mend_rate": 0, "ugliness_mandatory": 10, "stat_hp_mods": { "str_mod": 0 } - }, - { - "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/Limb_WIP/mutations/mutations.json b/data/mods/Limb_WIP/mutations/mutations.json index fe5547bae0b5a..387eed249b3a6 100644 --- a/data/mods/Limb_WIP/mutations/mutations.json +++ b/data/mods/Limb_WIP/mutations/mutations.json @@ -120,6 +120,45 @@ "restricts_gear": [ "leg_l", "leg_r", "foot_l", "foot_r", "leg_stub_r", "leg_stub_l" ], "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", @@ -129,13 +168,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 f1c1d4eedea71..a51d612aa9d39 100644 --- a/data/mods/Magiclysm/mutations/mutations.json +++ b/data/mods/Magiclysm/mutations/mutations.json @@ -477,7 +477,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 c500fdedd7c4a..958eec0f552b9 100644 --- a/doc/EFFECT_ON_CONDITION.md +++ b/doc/EFFECT_ON_CONDITION.md @@ -2298,7 +2298,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 1f7f7ce731ebd..a125e6647e735 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -431,6 +431,7 @@ Character flags can be `trait_id`, `json_flag_id` or `flag_id`. Some of these a - ```WEB_WALKER``` Removes the movement speed demerit while walking through webs. - ```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``` acts as `THRESH_MYCUS`, makes all monsters with FUNGUS species friendly, fungicidal gas & antifungal pills cause worse effects. Mutate when eating mycus fruit, or when sleeping. diff --git a/doc/MUTATIONS.md b/doc/MUTATIONS.md index 7ac4e1385de99..fb56438437975 100644 --- a/doc/MUTATIONS.md +++ b/doc/MUTATIONS.md @@ -96,7 +96,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). @@ -260,7 +260,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 15196e7aebffd..a221930c3dd03 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -239,7 +239,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" ); @@ -341,7 +340,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" ); @@ -12710,25 +12708,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 79cc396f06dd2..8a6b4ae4b67fc 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -196,6 +196,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_SAFECRACK_NO_TOOL( "SAFECRACK_NO_TOOL" ); +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" ); @@ -5420,8 +5421,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(); @@ -5509,43 +5512,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.mod_moves( -to_moves( 1_seconds ) ); - 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 35dbaee5da17f..791010d0a2937 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" ); @@ -844,8 +842,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 ) ) { @@ -897,8 +894,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 ) ) { @@ -983,8 +979,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 ) ) { @@ -1303,12 +1298,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 ); @@ -1712,4 +1702,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 +} diff --git a/tools/spell_checker/dictionary.txt b/tools/spell_checker/dictionary.txt index ffd289a213218..bd555cbec884c 100644 --- a/tools/spell_checker/dictionary.txt +++ b/tools/spell_checker/dictionary.txt @@ -4122,10 +4122,14 @@ Nazirite Nazirites Nazis NBC +ncrease +nd NDA +ndo Neal Nebraska NECC +nearsightedness necco neccos neckbeard @@ -4157,6 +4161,8 @@ Neptune nerf nerfs Nero +nestmate +nestmates netherium nethermancer nethermancers