From 4a21bf64ddc001fa01b8720e148d5d4e755ba5c6 Mon Sep 17 00:00:00 2001 From: Venera3 <72006894+Venera3@users.noreply.github.com> Date: Tue, 16 Jul 2024 07:33:08 +0200 Subject: [PATCH] Mute much-mutated mutant mouths (#74165) * Mainline mute traits * Restructured, rebased, remuted * Typos * Social maluseses --- .../mutation_eocs/mutation_effect_eocs.json | 207 ++++++++++++++++++ data/json/mutations/mutations.json | 168 ++++++++++++++ data/json/recipes/practice/social.json | 65 ++++++ doc/MUTATIONS.md | 2 +- tools/spell_checker/dictionary.txt | 2 + 5 files changed, 443 insertions(+), 1 deletion(-) diff --git a/data/json/effects_on_condition/mutation_eocs/mutation_effect_eocs.json b/data/json/effects_on_condition/mutation_eocs/mutation_effect_eocs.json index 9c76a81fefe99..991a28a65a0ee 100644 --- a/data/json/effects_on_condition/mutation_eocs/mutation_effect_eocs.json +++ b/data/json/effects_on_condition/mutation_eocs/mutation_effect_eocs.json @@ -4,6 +4,213 @@ "id": "eoc_debug_mutate", "effect": [ { "u_mutate": 0 } ] }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_BIRD_GAIN", + "eoc_type": "EVENT", + "required_event": "gains_mutation", + "//": "Slightly dirty category check, since in vanilla both use the same trait.", + "condition": { + "and": [ + { "compare_string": [ "BEAK", { "context_val": "trait" } ] }, + { "math": [ "u_vitamin('mutagen_bird')", ">", "u_vitamin('mutagen_cephalopod')" ] } + ] + }, + "effect": [ { "u_learn_recipe": "prac_unmute_bird" }, { "u_add_trait": "MUTE_BIRD" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_CEPHALOPOD_GAIN", + "eoc_type": "EVENT", + "required_event": "gains_mutation", + "condition": { + "and": [ + { "compare_string": [ "BEAK", { "context_val": "trait" } ] }, + { "math": [ "u_vitamin('mutagen_bird')", "<", "u_vitamin('mutagen_cephalopod')" ] } + ] + }, + "effect": [ { "u_learn_recipe": "prac_unmute_ceph" }, { "u_add_trait": "MUTE_CEPH" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_GASTROPOD_GAIN", + "eoc_type": "EVENT", + "required_event": "gains_mutation", + "//": "Automatically gain the mute trait when first mutating rasping tongue, check that we didn't already learn speech from earlier (slightly more complicated logic since harpoon tongues are purifiable)", + "condition": { + "and": [ + { "compare_string": [ "GASTROPOD_EXTREMITY2", { "context_val": "trait" } ] }, + { "not": { "u_has_trait": "MUTE_GASTROPOD_OK" } }, + { "not": { "u_has_trait": "MUTE_GASTROPOD" } } + ] + }, + "effect": [ { "u_learn_recipe": "prac_unmute_gastropod" }, { "u_add_trait": "MUTE_GASTROPOD" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_INSECT_GAIN", + "eoc_type": "EVENT", + "required_event": "gains_mutation", + "condition": { "compare_string": [ "PROBOSCIS", { "context_val": "trait" } ] }, + "effect": [ { "u_learn_recipe": "prac_unmute_insect" }, { "u_add_trait": "MUTE_INSECT" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_SLIME_GAIN", + "eoc_type": "EVENT", + "required_event": "gains_mutation", + "condition": { "compare_string": [ "AMORPHOUS", { "context_val": "trait" } ] }, + "effect": [ { "u_learn_recipe": "prac_unmute_slime" }, { "u_add_trait": "MUTE_SLIME" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_UNMUTE_BIRD", + "condition": { "math": [ "u_progress_unmute_bird", ">=", "7" ] }, + "effect": [ + { "u_lose_trait": "MUTE_BIRD" }, + { "u_add_trait": "MUTE_BIRD_OK" }, + { "u_message": "What's that made of? Glass. That will have to do." }, + { "u_forget_recipe": "prac_unmute_bird" } + ], + "false_effect": [ + { "math": [ "u_progress_unmute_bird", "++" ] }, + { + "u_message": "Restricting your range to the apes' feels demeaning, and you decide to take a break before you start plucking out your feathers in frustration." + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_UNMUTE_CEPH", + "condition": { "math": [ "u_progress_unmute_ceph", ">=", "7" ] }, + "effect": [ + { "u_lose_trait": "MUTE_CEPH" }, + { "u_add_trait": "MUTE_CEPH_OK" }, + { + "u_message": "Your sentences are short, and you can't quite control your beak's clicking as you tire. Still, they will understand, if they want to." + }, + { "u_forget_recipe": "prac_unmute_ceph" } + ], + "false_effect": [ + { "math": [ "u_progress_unmute_ceph", "++" ] }, + { + "u_message": "Draw air into your mantle, close your throat, rehearse your sentence, exhale and contort your beak just so." + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_UNMUTE_GASTROPOD", + "condition": { "math": [ "u_progress_unmute_gastropod", ">=", "10" ] }, + "effect": [ + { "u_lose_trait": "MUTE_GASTROPOD" }, + { "u_add_trait": "MUTE_GASTROPOD_OK" }, + { + "u_message": "As your tongues files down from use the pitch of the different sounds changes, but you have managed to get a few short, raspy sentences out." + }, + { "u_forget_recipe": "prac_unmute_gastropod" } + ], + "false_effect": [ + { "math": [ "u_progress_unmute_gastropod", "++" ] }, + { + "u_message": "If you rub your tongue against your palate like this is makes a `th` - or at least, a `thrksrkkk`, but it's a start. Ignore the taste of blood, there's work to be done." + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_UNMUTE_INSECT", + "condition": { "math": [ "u_progress_unmute_insect", ">=", "7" ] }, + "effect": [ + { "u_lose_trait": "MUTE_INSECT" }, + { "u_add_trait": "MUTE_INSECT_OK" }, + { + "u_message": "You decide on the next few words, cramp your maxillae, and inhale deeply. With some imagination you can understand the words in the whistling, before your mouthparts fall limp and you need a pause. Larva steps." + }, + { "u_forget_recipe": "prac_unmute_insect" } + ], + "false_effect": [ + { "math": [ "u_progress_unmute_insect", "++" ] }, + { + "u_message": "You have all these new moving parts in your not-mouth, but they are struggling under the strain you put them under." + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_UNMUTE_SLIME", + "condition": { "math": [ "u_progress_unmute_slime", ">=", "15" ] }, + "effect": [ + { "u_lose_trait": "MUTE_SLIME" }, + { "u_add_trait": "MUTE_SLIME_OK" }, + { + "u_message": "You realize you don't need to grow anything nearly as complicated as your old insides - one vesicle per word will suffice, but you needed a long time to learn the right rhythm." + }, + { "u_forget_recipe": "prac_unmute_slime" } + ], + "false_effect": [ + { "math": [ "u_progress_unmute_slime", "++" ] }, + { + "u_message": "Do you need teeth, lungs? You fall back into your resting shape in exasperation. This will take long." + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_BEAK_LOSE_1", + "eoc_type": "EVENT", + "required_event": "loses_mutation", + "condition": { "and": [ { "compare_string": [ "BEAK", { "context_val": "trait" } ] } ] }, + "effect": { "queue_eocs": "EOC_MUTE_BEAK_LOSE_2", "time_in_future": 1 } + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_BEAK_LOSE_2", + "condition": { "not": { "u_has_any_trait": [ "BEAK_HUM", "BEAK_PECK" ] } }, + "//": "Beaks are purifiable and we need to clean up both possible mutisms (unless we gained a non-purifiable beak in the process)", + "effect": [ + { "u_forget_recipe": "prac_unmute_bird" }, + { "u_forget_recipe": "prac_unmute_ceph" }, + { "u_lose_trait": "MUTE_BIRD" }, + { "u_lose_trait": "MUTE_BIRD_OK" }, + { "u_lose_trait": "MUTE_CEPH" }, + { "u_lose_trait": "MUTE_CEPH_OK" }, + { "math": [ "u_progress_unmute_bird", "=", "0" ] }, + { "math": [ "u_progress_unmute_ceph", "=", "0" ] }, + { + "u_message": "You grasp at the base of your beak and feel the familiar contours of your old mouth. You give it a try and your voice sounds almost like before." + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_GASTROPOD_LOSE_1", + "eoc_type": "EVENT", + "required_event": "loses_mutation", + "//": "If we lose either trait check if we end up in a mute state via the queued EoC", + "condition": { + "or": [ + { "compare_string": [ "GASTROPOD_EXTREMITY2", { "context_val": "trait" } ] }, + { "compare_string": [ "GASTROPOD_EXTREMITY3", { "context_val": "trait" } ] } + ] + }, + "effect": [ { "queue_eocs": "EOC_MUTE_GASTROPOD_LOSE_2", "time_in_future": 1 } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_MUTE_GASTROPOD_LOSE_2", + "//": "If we lost our lower trait and didn't gain the higher one / lost the higher trait without gaining the lower one in the process remove mutism or the compensatory traits (and progress thereof)", + "condition": { + "and": [ { "not": { "u_has_trait": "GASTROPOD_EXTREMITY3" } }, { "not": { "u_has_trait": "GASTROPOD_EXTREMITY_2" } } ] + }, + "effect": [ + { "u_forget_recipe": "prac_unmute_gastropod" }, + { "u_lose_trait": "MUTE_GASTROPOD" }, + { "u_lose_trait": "MUTE_GASTROPOD_OK" }, + { "u_message": "You cough up a lot of off-color blood, but you swear in your own old voice again afterwards." }, + { "math": [ "u_progress_unmute_gastropod", "=", "0" ] } + ] + }, { "type": "effect_on_condition", "id": "mut_eyestalk", diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index ed015fb8977dc..64484d7190a61 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -7080,6 +7080,7 @@ "description": "You've gotten rid of that terribly imprecise mouth and now imbibe your food like a proper person. Chewing was tiresome anyway.", "purifiable": false, "prereqs": [ "MANDIBLES" ], + "prereqs2": [ "CHITIN", "CHITIN2", "CHITIN2_MOLTED" ], "category": [ "INSECT" ], "active": true, "restricts_gear": [ "mouth" ] @@ -9651,6 +9652,173 @@ "description": "Trait that makes it impossible to say anything.", "flags": [ "MUTE" ] }, + { + "type": "mutation", + "id": "MUTE_BIRD", + "name": { "str": "Mute (Bird)" }, + "points": -2, + "description": "Your mouth and larynx have changed dramatically, rendering you incapable of human speech. With enough practice you could relearn imitating their weird ape chirps, but it will take time. Look for a new practice recipe to lose this setback.", + "category": [ "BIRD" ], + "prereqs": [ "BEAK", "BEAK_PECK", "BEAK_HUM" ], + "flags": [ "MUTE" ], + "valid": false, + "purifiable": false + }, + { + "type": "mutation", + "id": "MUTE_BIRD_OK", + "name": { "str": "Speech Mimicry (Bird)" }, + "points": 0, + "description": "Your throat cramps, your beak twitches, but you can speak human again if you want.", + "category": [ "BIRD" ], + "prereqs": [ "MUTE_BIRD" ], + "valid": false, + "purifiable": false, + "//": "Least punishing social malus, but still not nothing", + "enchantments": [ + { + "skills": [ { "value": "speech", "add": -4 } ], + "values": [ + { "value": "SOCIAL_LIE", "multiply": -0.4 }, + { "value": "SOCIAL_PERSUADE", "multiply": -0.4 }, + { "value": "SOCIAL_INTIMIDATE", "multiply": -0.4 } + ] + } + ] + }, + { + "type": "mutation", + "id": "MUTE_CEPH", + "name": { "str": "Mute (Cephalopod)" }, + "points": -2, + "description": "Your beak and new lungs have diverged too much from your human form to be capable of human speech. Look for a new practice recipe to lose this setback.", + "category": [ "CEPHALOPOD" ], + "prereqs": [ "BEAK" ], + "valid": false, + "purifiable": false, + "flags": [ "MUTE" ] + }, + { + "type": "mutation", + "id": "MUTE_CEPH_OK", + "name": { "str": "Speech Mimicry (Cephalopod)" }, + "points": 0, + "description": "Contorting your voice to match your surroundings is just as necessary as changing your color, even if learning it was a pain.", + "category": [ "CEPHALOPOD" ], + "prereqs": [ "MUTE_CEPH" ], + "valid": false, + "purifiable": false, + "enchantments": [ + { + "skills": [ { "value": "speech", "add": -6 } ], + "values": [ + { "value": "SOCIAL_LIE", "multiply": -0.6 }, + { "value": "SOCIAL_PERSUADE", "multiply": -0.6 }, + { "value": "SOCIAL_INTIMIDATE", "multiply": -0.6 } + ] + } + ] + }, + { + "type": "mutation", + "id": "MUTE_GASTROPOD", + "name": { "str": "Mute (Snail)" }, + "points": -2, + "description": "Just losing your teeth would have been an adjustment, but with your new tongue human speech is straight-up impossible. Look for a new practice recipe to lose this setback.", + "category": [ "GASTROPOD" ], + "prereqs": [ "GASTROPOD_EXTREMITY2", "GASTROPOD_EXTREMITY3" ], + "changes_to": [ "MUTE_GASTROPOD_OK" ], + "valid": false, + "purifiable": false, + "flags": [ "MUTE" ] + }, + { + "type": "mutation", + "id": "MUTE_GASTROPOD_OK", + "name": { "str": "Speech Mimicry (Snail)" }, + "points": 0, + "description": "Fine control of your radula was hard to learn, but now that you mapped out which calcified not-tooth on there makes what pitch you can open your mouth and…speak. Yes, let's call it speaking.", + "category": [ "GASTROPOD" ], + "prereqs": [ "MUTE_GASTROPOD" ], + "valid": false, + "purifiable": false, + "enchantments": [ + { + "skills": [ { "value": "speech", "add": -7 } ], + "values": [ + { "value": "SOCIAL_LIE", "multiply": -0.7 }, + { "value": "SOCIAL_PERSUADE", "multiply": -0.7 }, + { "value": "SOCIAL_INTIMIDATE", "multiply": -0.7 } + ] + } + ] + }, + { + "type": "mutation", + "id": "MUTE_INSECT", + "name": { "str": "Mute (Insect)" }, + "points": -2, + "description": "Your mandibles already made speech hard, but now that you don't even have a tongue…Look for a new practice recipe to lose this setback.", + "category": [ "INSECT" ], + "prereqs": [ "PROBOSCIS" ], + "flags": [ "MUTE" ], + "valid": false, + "purifiable": false + }, + { + "type": "mutation", + "id": "MUTE_INSECT_OK", + "name": { "str": "Speech Mimicry (Insect)" }, + "points": 0, + "description": "Using all this new anatomy cramps you up, and there's spittle flying everywhere, but you can manage short sentences of whistling almost-words.", + "category": [ "INSECT" ], + "prereqs": [ "MUTE_INSECT" ], + "valid": false, + "purifiable": false, + "enchantments": [ + { + "skills": [ { "value": "speech", "add": -7 } ], + "values": [ + { "value": "SOCIAL_LIE", "multiply": -0.7 }, + { "value": "SOCIAL_PERSUADE", "multiply": -0.7 }, + { "value": "SOCIAL_INTIMIDATE", "multiply": -0.7 } + ] + } + ] + }, + { + "type": "mutation", + "id": "MUTE_SLIME", + "name": { "str": "Mute (Slime)" }, + "points": -2, + "description": "Your mouth is gone. Oh, wait, there's one, isn't there? If only it stopped moving around you might start to relearn something like human speech. Look for a new practice recipe to lose this setback.", + "category": [ "SLIME" ], + "prereqs": [ "AMORPHOUS" ], + "valid": false, + "purifiable": false, + "flags": [ "MUTE" ] + }, + { + "type": "mutation", + "id": "MUTE_SLIME_OK", + "name": { "str": "Speech Mimicry (Slime)" }, + "points": 0, + "description": "Each word its own custom bubble under your membrane, waiting for its turn to pop. It sounds like something small and furry drowning in sourdough, but if you manage to convince somebody to listen to you they will probably understand.", + "category": [ "SLIME" ], + "prereqs": [ "MUTE_SLIME" ], + "valid": false, + "purifiable": false, + "enchantments": [ + { + "skills": [ { "value": "speech", "add": -9 } ], + "values": [ + { "value": "SOCIAL_LIE", "multiply": -0.9 }, + { "value": "SOCIAL_PERSUADE", "multiply": -0.9 }, + { "value": "SOCIAL_INTIMIDATE", "multiply": -0.9 } + ] + } + ] + }, { "type": "mutation", "id": "NOMAD", diff --git a/data/json/recipes/practice/social.json b/data/json/recipes/practice/social.json index 3294006714027..a06e48f3592c5 100644 --- a/data/json/recipes/practice/social.json +++ b/data/json/recipes/practice/social.json @@ -28,5 +28,70 @@ "autolearn": [ [ "speech", 5 ] ], "book_learn": [ [ "textbook_speech", 4 ] ], "tools": [ [ "mirror" ] ] + }, + { + "type": "practice", + "id": "prac_unmute_bird", + "activity_level": "NO_EXERCISE", + "category": "CC_PRACTICE", + "subcategory": "CSC_PRACTICE_SOCIAL", + "name": "relearn ape chirps", + "description": "Debase your beautiful new voice with trying to imitate human speech. Still more enjoyable than trying to make them sing, in any case.", + "skill_used": "speech", + "time": "1 h", + "practice_data": { "min_difficulty": 0, "max_difficulty": 0, "skill_limit": 1 }, + "result_eocs": [ "EOC_UNMUTE_BIRD" ] + }, + { + "type": "practice", + "id": "prac_unmute_ceph", + "activity_level": "NO_EXERCISE", + "category": "CC_PRACTICE", + "subcategory": "CSC_PRACTICE_SOCIAL", + "name": "relearn human speech", + "description": "Your mantle struggles, and you need to contort your throat in ways that strain even your new, flexible form. Still, having a shoal is preferable to going it alone.", + "skill_used": "speech", + "time": "1 h", + "practice_data": { "min_difficulty": 0, "max_difficulty": 0, "skill_limit": 1 }, + "result_eocs": [ "EOC_UNMUTE_CEPH" ] + }, + { + "type": "practice", + "id": "prac_unmute_gastropod", + "activity_level": "NO_EXERCISE", + "category": "CC_PRACTICE", + "subcategory": "CSC_PRACTICE_SOCIAL", + "name": "relearn human speech", + "description": "You don't have any teeth to stop airflow, and with your new tongue even closing your mouth feels unnaturally cramped. However, rubbing different areas of your radula makes for an interesting cacophony - that might be a solution, if only you get the pitch just right.", + "skill_used": "speech", + "time": "1 h", + "practice_data": { "min_difficulty": 0, "max_difficulty": 0, "skill_limit": 1 }, + "result_eocs": [ "EOC_UNMUTE_GASTROPOD" ] + }, + { + "type": "practice", + "id": "prac_unmute_insect", + "activity_level": "NO_EXERCISE", + "category": "CC_PRACTICE", + "subcategory": "CSC_PRACTICE_SOCIAL", + "name": "relearn human speech", + "description": "Maybe you could rub your chitin together? No, the apes need their vowels.", + "skill_used": "speech", + "time": "1 h", + "practice_data": { "min_difficulty": 0, "max_difficulty": 0, "skill_limit": 1 }, + "result_eocs": [ "EOC_UNMUTE_INSECT" ] + }, + { + "type": "practice", + "id": "prac_unmute_slime", + "activity_level": "NO_EXERCISE", + "category": "CC_PRACTICE", + "subcategory": "CSC_PRACTICE_SOCIAL", + "name": "relearn human speech", + "description": "Couldn't you use some pheromones? A packet of injected slime rewiring their brain? Anything less demeaning than trying to ape the apes.", + "skill_used": "speech", + "time": "1 h", + "practice_data": { "min_difficulty": 0, "max_difficulty": 0, "skill_limit": 1 }, + "result_eocs": [ "EOC_UNMUTE_SLIME" ] } ] diff --git a/doc/MUTATIONS.md b/doc/MUTATIONS.md index 0665518fbf2ea..47ba81a088e0d 100644 --- a/doc/MUTATIONS.md +++ b/doc/MUTATIONS.md @@ -135,7 +135,7 @@ Note that **all new traits that can be obtained through mutation must be purifia "prereqs2": [ "CEPH_EYES", "LIZ_EYE" ], "threshreq": [ "THRESH_SPIDER" ], // Required threshold for this mutation to be possible. "cancels": [ "ROT1", "ROT2", "ROT3" ], // Cancels these mutations when mutating. - "changes_to": [ "FASTHEALER2" ], // Can change into these mutations when mutating further. + "changes_to": [ "FASTHEALER2" ], // Can change into these mutations when mutating further, provided the new trait has this as its prerequisite. "leads_to": [ ], // Mutations that add to this one. "wet_protection": [ { "part": "head", "good": 1 } ], // Wet Protection on specific bodyparts. Possible values: "neutral/good/ignored". Good increases pos and cancels neg, neut cancels neg, ignored cancels both. "vitamin_rates": [ [ "vitC", -1200 ] ], // How much extra vitamins do you consume, one point per this many seconds. Negative values mean production. diff --git a/tools/spell_checker/dictionary.txt b/tools/spell_checker/dictionary.txt index db325e0ed2575..2f71801522be9 100644 --- a/tools/spell_checker/dictionary.txt +++ b/tools/spell_checker/dictionary.txt @@ -3290,6 +3290,7 @@ LARP LARPing Larry Larson +larynx Las lategame Latin @@ -4920,6 +4921,7 @@ radiants radiobeacon radiogenic radiophile +radula rafflesias raggiana Ragnarok