init 69 python: patched_relationship_terms = { "McName": McName, "MatronTeacher": "mother", "FemaleClassmate": "sister", "PoliticsTeacher": "father", "Students": "children", "Teachers": "parents", "NobleHouse": "family", "MaleClassmate": "brother", "Senpai": big brother", "Kohai": "little sister", "BestStudent": "son", "StrugglingStudent": "daughter", "MsSeraphine": "mom", "MrLeo": "dad", "Lia": "Alia", "Seraphine": "Jessica", "Leo": "Leto", "Shani": "Chani", "Lirien": "Irulan", "Mohira": "Mohiam", "HouseValore": "Atreides", } if 'mom' not in relationship_terms: relationship_terms.update(patched_relationship_terms) sync_relationship_variables() init python: import re def dune_term_replace(text): if not isinstance(text, str): return text if "Lusts of" in text or "welcome to Dune:" in text or "welcome to Doon:" in text: return text if "the choice is yours" in text or "wise prophet of" in text or "wise prophet of:" in text: return text replacements = { "Battle of Romans Ecco": "Battle of Corrins Echo", "Larian Jihad": "Butlerian Jihad", "Aquilan Palace": "Castle Caladan", "Aqui City": "Cala City", "Dravenore Slave Pit": "Harkonnen slave pit", "Gene-Weaving Project": "Selective Breeding Program", "Myth Seeding Directive": "Missionaria Protectiva", "Hyper Observation": "Minutiae of Observation", "Body Mastery": "Prana Bindu", "Truth Dance": "Truth Trance", "Folding Seers": "navigators", "Face Shifters": "Face Dancers", "High Matrons": "Reverend Mothers", "Drakonskiys": "Harkonnens", "Veyn-Karthuh": "Feyd-Rautha", "Spaceliner": "Heighliner", "Ancient Earth": "Old Terra", "Atomic Flare": "Stone Burner", "Dune Wyrms": "Sandworms", "Galactic Empire": "Imperium", "High Matron": "Reverend Mother", "Face Shifter": "Face Dancer", "Drakonskiy": "Harkonnen", "Viktor Von": "Vladimir", "Truth Readers": "Truthsayers", "Noble Houses": "Great Houses", "Noble House": "Great House", "Compendi": "Kwisatz", "Itinerach": "Haderach", "Mahd'Ib": "Muad'Dib", "Kralishah": "Padishah", "Sisterhood of Veilmatrons": "Bene Gesserit", "Vielmatrons": "Bene Gesserit", "Veilmatrons": "Bene Gesserit", "Vielmatron": "Bene Gesserit", "Veilmatron": "Bene Gesserit", "Sandborn": "Fremen", "Draveni Prime": "Giedi Prime", "Rysese": "Richese", "Gaitold": "Kaitain", "Wollosh IX": "Wallach IX", "Arrideen": "Arrakeen", "Tunis": "Carthag", "Gum Judgar": "Gom Jabbar", "Desertskins": "Stillsuits", "Wyrmblade": "Crysknife", "Shiahdam": "Shaddam", "Aquilan": "Caladan", "Doon": "Arrakis", "Gizan": "Ginaz", "paliset": "baliset", "The Sound": "The Voice", "Blood Feud": "Kanly", "Dust": "Spice", "Aether": "Melange", "Artifical Intelligence": "Thinking machines", "Indiana": "Duncan", "Kane": "Idaho", "Bernie": "Gurney", "Garrick": "Halleck", "Thorne": "Thufir", "Harwin": "Hawat", "Li": "Yueh", "Wan": "Wellington", "Valeria": "Aniural", "Wendra": "Wanna", "Ferrin": "Fenring", "Van der Kade": "de Vries", "Piers": "Piter", "Veyn": "Feyd", "Asul": "Usul", "Mentarchs": "Mentants", "Mentarch": "Mentat", "Seers": "navigators", "Romano": "Corrino", "Romanos": "Corrinos", "Imperial Conclave": "Landsraad", "smugglers": "runners", "ancestral water": "water of life", "barriers": "shields", "barrier": "shield", "starfarers guild": "spacing guild", "starfarer guild": "spacing guild", } for old, new in replacements.items(): if not old or not new or old == new: continue pattern = r'\b' + re.escape(old) + r'\b([.,!?\'"s]?)' def replacer(match): punct = match.group(1) or "" return new + punct text = re.sub(pattern, replacer, text, flags=re.IGNORECASE) return text config.say_menu_text_filter = dune_term_replace translate None strings: old "Travelers of the stars, welcome to Doon: the Lusts of Mahd'Ib - a XXX Sci-Fi Parody!" new "Travelers of the stars, welcome to Dune: the Lusts of Muad'Dib - a XXX Sci-Fi Parody!" old "Either way, the choice is yours, oh wise prophet of Doon. What path will you walk?" new "Either way, the choice is yours, oh wise prophet of Dune. What path will you walk?" old "If you wish any chance of survival you must forgo the usual training and focus on the Sound, but he is far from mastering it and time is running short. Perhaps I can help you, but only if he is truly the one." new "If you wish any chance of survival you must forgo the usual training and focus on the Voice, but he is far from mastering it and time is running short. Perhaps I can help you, but only if he is truly the one." old "The sound and Body Mastery especially... they feel impossible some days." new "The voice and Body Mastery especially... they feel impossible some days." old "Years of discipline, training in skills like Body Mastery, the sound, and hyper observation. They taught me to command my body on a molecular level, and to read others as easily as words on a page." new "Years of discipline, training in skills like Body Mastery, the voice, and hyper observation. They taught me to command my body on a molecular level, and to read others as easily as words on a page." old "Exactly. The sound, Body Mastery, Hyper Observation, even simple persuasion are all tools that stem from silence." new "Exactly. The voice, Body Mastery, Hyper Observation, even simple persuasion are all tools that stem from silence." old "Come on [Lia], it’s not that bad. If you actually try reading them for once instead of staring daggers at them, you might even surprise yourself and learn something. You’ve got the potential to master Body Mastery and the sound, you just have to apply yourself." new "Come on [Lia], it’s not that bad. If you actually try reading them for once instead of staring daggers at them, you might even surprise yourself and learn something. You’ve got the potential to master Body Mastery and the voice, you just have to apply yourself." old "{i}Did she use the sound on me? But how?{/i}" new "{i}Did she use the voice on me? But how?{/i}" old "{i}I feel compelled to do it... I can't stop myself. She’s using the sound again!{/i}" new "{i}I feel compelled to do it... I can't stop myself. She’s using the voice again!{/i}" old "{i}I can't disobey, she uses the sound again!{/i}" new "{i}I can't disobey, she uses the voice again!{/i}" translate None strings: old "{cps=35}{i}The seed of desire is planted long before the fruit is ever tasted.\nThis every sister of the Veilmatrons knows.{/i}{/cps}" new "{cps=35}{i}The seed of desire is planted long before the fruit is ever tasted.\nThis every sister of the Bene Gesserit knows.{/i}{/cps}" old "{cps=32}To begin your study on the lusts of Mahd'Ib, then, take care that you first place him in his time:\naroused in the 69th year of the Kralishah Emperor, Shiahdam IV.{/cps}" new "{cps=32}To begin your study on the lusts of Muad'Dib, then, take care that you first place him in his time:\naroused in the 69th year of the Padishah Emperor, Shaddam IV.{/cps}" old "{cps=32}And take the most special care that you recognize Mahd'Ib's true desire:\nthe forbidden fruit of the Lady [relationship_terms['Seraphine']] and [persistent.relationship_terms['Lia']].{/cps}" new "{cps=32}And take the most special care that you recognize Muad'Dib's true desire:\nthe forbidden fruit of the Lady [relationship_terms['Seraphine']] and [persistent.relationship_terms['Lia']].{/cps}" old "{cps=30}Do not be deceived by the fact that he spent his first 19 years sharing innocent glances with his [relationship_terms['MatronTeacher']] and [relationship_terms['FemaleClassmate']].{/cps}" new "{cps=30}Do not be deceived by the fact that he spent his first 19 years sharing innocent glances with his [relationship_terms['MatronTeacher']] and [relationship_terms['FemaleClassmate']].{/cps}" old "{cps=35}{i}[relationship_terms['Seraphine']] and [relationship_terms['Lia']], the ultimate taboo, are forever his passion.{/i}{/cps}" new "{cps=35}{i}[relationship_terms['Seraphine']] and [relationship_terms['Lia']], the ultimate taboo, are forever his passion.{/i}{/cps}" old "{cps=28}- From \"Manual of Mahd'Ib\" by the Princess [persistent.relationship_terms['Lirien']]{/cps}" new "{cps=28}- From \"Manual of Muad'Dib\" by the Princess [persistent.relationship_terms['Lirien']]{/cps}" old "{cps=32}The Veilmatron Sister must combine the irresistible seductiveness of a concubine with the magnificent radiance of a virgin goddess, holding these contrary traits in an exquisite balance as long as the fire of her presence endures.{/cps}" new "{cps=32}The Bene Gesserit Sister must combine the irresistible seductiveness of a concubine with the magnificent radiance of a virgin goddess, holding these contrary traits in an exquisite balance as long as the fire of her presence endures.{/cps}" old "{cps=30}Every Sister of the Veilmatrons alike learn this truth. It only grows hotter with time.{/cps}" new "{cps=30}Every Sister of the Bene Gesserit alike learn this truth. It only grows hotter with time.{/cps}" old "{cps=28}- From Mahd'Ib, [NobleHouse] Commentaries”{/cps}" new "{cps=28}- From Muad'Dib, [NobleHouse] Commentaries”{/cps}" init 4000 python: def patch_all_codex_entries(): global codex_people, codex_groups_positions, codex_abilities global codex_events, codex_locations, codex_objects codex_dicts = [ codex_people, codex_groups_positions, codex_abilities, codex_events, codex_locations, codex_objects, ] for codex in codex_dicts: if not isinstance(codex, dict): continue for key, data in list(codex.items()): if not isinstance(data, dict): continue for field in ["description", "subtitle", "role", "fact"]: if field in data and isinstance(data[field], str): data[field] = dune_term_replace(data[field]) # Also try to patch the key itself for display (safe copy) if "display_title" not in data: data["display_title"] = dune_term_replace(key) patch_all_codex_entries() config.start_callbacks.append(patch_all_codex_entries) config.after_load_callbacks.append(patch_all_codex_entries) def dune_title(text): if isinstance(text, str): return dune_term_replace(text) return text store.dune_title = dune_title