static void SexualizeSingleGenderPawn(Pawn pawn) { // Single gender is futa without the female gender change. SexPartAdder.add_genitals(pawn, null, Gender.Male); SexPartAdder.add_genitals(pawn, null, Gender.Female); SexPartAdder.add_breasts(pawn, null, Gender.Female); SexPartAdder.add_anus(pawn, null); }
static void SexulaizeGenderlessPawn(Pawn pawn) { if (RJWSettings.GenderlessAsFuta && !xxx.is_mechanoid(pawn) && (pawn.RaceProps.Animal || pawn.RaceProps.Humanlike)) { Log.Message("[RJW] SexulaizeGenderlessPawn() - genderless pawn, treating Genderless pawn As Futa" + xxx.get_pawnname(pawn)); //set gender to female for futas pawn.gender = Gender.Female; SexPartAdder.add_genitals(pawn, null, Gender.Male); SexPartAdder.add_genitals(pawn, null, Gender.Female); SexPartAdder.add_breasts(pawn, null, Gender.Female); SexPartAdder.add_anus(pawn, null); } else { Log.Message("[RJW] SexulaizeGenderlessPawn() - unable to sexualize genderless pawn " + xxx.get_pawnname(pawn) + " gender: " + pawn.gender); } }
static void SexualizeGenderedPawn(Pawn pawn) { //apply normal gender SexPartAdder.add_genitals(pawn, null, pawn.gender); //apply futa gender //if (pawn.gender == Gender.Female) // changing male to futa will break pawn generation due to relations if (pawn.Faction != null && !xxx.is_animal(pawn)) //null faction throws error { //Log.Message("[RJW] SexualizeGenderedPawn( " + xxx.get_pawnname(pawn) + " ) techLevel: " + (int)pawn.Faction.def.techLevel); //Log.Message("[RJW] SexualizeGenderedPawn( " + xxx.get_pawnname(pawn) + " ) techLevel: " + pawn.Faction.Name); //natives/spacer futa float chance = (int)pawn.Faction.def.techLevel < 5 ? RJWSettings.futa_natives_chance : RJWSettings.futa_spacers_chance; //nymph futa gender chance = xxx.is_nympho(pawn) ? RJWSettings.futa_nymph_chance : chance; // Log.Message($"[RJW] SexualizeGenderedPawn {chance} from {RJWSettings.futa_nymph_chance} {RJWSettings.futa_natives_chance} {RJWSettings.futa_spacers_chance}"); if (Rand.Chance(chance)) { //make futa if (pawn.gender == Gender.Female && RJWSettings.FemaleFuta) { SexPartAdder.add_genitals(pawn, null, Gender.Male); } //make trap else if (pawn.gender == Gender.Male && RJWSettings.MaleTrap) { SexPartAdder.add_breasts(pawn, null, Gender.Female); } } } SexPartAdder.add_breasts(pawn, null, pawn.gender); SexPartAdder.add_anus(pawn, null); }
public static void AddAnus(Pawn pawn, BodyPartRecord bpr, Pawn parent) { var temppawn = parent ?? pawn; HediffDef part; double value = GenderTechLevelCheck(pawn); string racename = temppawn.kindDef.race.defName.ToLower(); part = Genital_Helper.generic_anus; if (xxx.is_mechanoid(pawn)) { return; } else if (xxx.is_insect(temppawn)) { part = Genital_Helper.insect_anus; } //alien races - ChjDroid, ChjAndroid else if (racename.Contains("droid")) { if (pawn.story.GetBackstory(BackstorySlot.Childhood) != null) { if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("bishojo")) { part = Genital_Helper.bionic_anus; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("pleasure")) { part = Genital_Helper.bionic_anus; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("idol")) { part = Genital_Helper.bionic_anus; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("social")) { part = Genital_Helper.hydraulic_anus; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("substitute")) { part = Genital_Helper.average_anus; } else if (pawn.story.GetBackstory(BackstorySlot.Adulthood) != null) { if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("courtesan")) { part = Genital_Helper.bionic_anus; } else if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("social")) { part = Genital_Helper.hydraulic_anus; } } } else if (pawn.story.GetBackstory(BackstorySlot.Adulthood) != null) { if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("courtesan")) { part = Genital_Helper.bionic_anus; } else if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("social")) { part = Genital_Helper.hydraulic_anus; } } if (part == Genital_Helper.generic_anus) { return; } } else if (racename.Contains("slime")) { part = Genital_Helper.slime_anus; } //animal demons - MoreMonstergirls else if (racename.Contains("impmother") || racename.Contains("baphomet") || racename.Contains("demon")) { part = Genital_Helper.demon_anus; } else if (pawn.RaceProps.Humanlike) { if (value < 0.90 || (pawn.ageTracker.AgeBiologicalYears < 2)) { part = Genital_Helper.average_anus; } else if (value < 0.95) { part = Genital_Helper.hydraulic_anus; } else { part = Genital_Helper.bionic_anus; } } pawn.health.AddHediff(SexPartAdder.MakePart(part, pawn, bpr), bpr); }
public static void AddBreasts(Pawn pawn, BodyPartRecord bpr, Pawn parent) { var temppawn = parent ?? pawn; HediffDef part; double value = GenderTechLevelCheck(pawn); string racename = temppawn.kindDef.race.defName.ToLower(); part = Genital_Helper.generic_breasts; if (xxx.is_mechanoid(pawn)) { return; } if (xxx.is_insect(temppawn)) { // this will probably need override in case there are humanoid insect race //--Log.Message("[RJW] add_breasts( " + xxx.get_pawnname(pawn) + " ) - is insect,doesnt need breasts"); return; } //alien races - MoreMonstergirls else if (racename.Contains("slime")) { //slimes are always females, and idc what anyone else say! part = Genital_Helper.slime_breasts; } else { if (pawn.RaceProps.Humanlike) { //alien races - ChjDroid, ChjAndroid if (racename.ContainsAny("mantis", "rockman", "slug", "zoltan", "engie", "sergal", "cutebold", "dodo", "owl", "parrot", "penguin", "cassowary", "chicken", "vulture")) { pawn.health.AddHediff(Genital_Helper.featureless_chest, bpr); return; } else if (racename.ContainsAny("avali", "khess")) { return; } else if (racename.Contains("droid")) { if (pawn.story.GetBackstory(BackstorySlot.Childhood) != null) { if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("bishojo")) { part = Genital_Helper.bionic_breasts; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("pleasure")) { part = Genital_Helper.bionic_breasts; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("idol")) { part = Genital_Helper.bionic_breasts; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("social")) { part = Genital_Helper.hydraulic_breasts; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("substitute")) { part = Genital_Helper.average_breasts; } else if (pawn.story.GetBackstory(BackstorySlot.Adulthood) != null) { if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("courtesan")) { part = Genital_Helper.bionic_breasts; } else if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("social")) { part = Genital_Helper.hydraulic_breasts; } } else { return; } } else if (pawn.story.GetBackstory(BackstorySlot.Adulthood) != null) { if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("courtesan")) { part = Genital_Helper.bionic_breasts; } else if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("social")) { part = Genital_Helper.hydraulic_breasts; } } if (part == Genital_Helper.generic_breasts) { return; } } //alien races - MoreMonstergirls //alien races - Kijin else if (racename.Contains("cowgirl") || racename.Contains("kijin")) { part = Genital_Helper.average_breasts; if (value < 0.75 && racename.Contains("cowgirl")) { part = Genital_Helper.udder_breasts; } } else { if (value < 0.90 || (pawn.ageTracker.AgeBiologicalYears < 2)) { part = Genital_Helper.average_breasts; } else if (value < 0.95) { part = Genital_Helper.hydraulic_breasts; } else { part = Genital_Helper.bionic_breasts; } } } else if (racename.ContainsAny("mammoth", "elasmotherium", "chalicotherium", "megaloceros", "sivatherium", "deinotherium", "aurochs", "zygolophodon", "uintatherium", "gazelle", "ffalo", "boomalope", "cow", "miltank", "elk", "reek", "nerf", "bantha", "tauntaun", "caribou", "deer", "ibex", "dromedary", "alpaca", "llama", "goat", "moose")) { part = Genital_Helper.udder_breasts; } else if (racename.ContainsAny("cassowary", "emu", "dinornis", "ostrich", "turkey", "chicken", "duck", "murkroW", "bustard", "palaeeudyptes", "goose", "tukiri", "porg", "yi", "kiwi", "penguin", "quail", "ptarmigan", "doduo", "flamingo", "plup", "empoleon", "meadow ave") && !racename.ContainsAny("duck-billed")) { return; // Separate list for birds, to make it easier to add cloaca at some later date. } // Other breastless creatures. else if (racename.ContainsAny("titanis", "titanoboa", "guan", "tortoise", "turt", "aerofleet", "quinkana", "megalochelys", "purussaurus", "cobra", "dewback", "rancor", "frog", "onyx", "flommel", "lapras", "aron", "chinchou", "squirtle", "wartortle", "blastoise", "totodile", "croconaw", "feraligatr", "litwick", "pumpkaboo", "shuppet", "haunter", "gastly", "oddish", "hoppip", "tropius", "budew", "roselia", "bellsprout", "drifloon", "chikorita", "bayleef", "meganium", "char", "drago", "dratini", "saur", "tyrannus", "carnotaurus", "baryonyx", "minmi", "diplodocus", "phodon", "indominus", "raptor", "caihong", "coelophysis", "cephale", "compsognathus", "mimus", "troodon", "dactyl", "tanystropheus", "geosternbergia", "deino", "suchus", "dracorex", "cephalus", "trodon", "quetzalcoatlus", "pteranodon", "antarctopelta", "stygimoloch", "rhabdodon", "rhamphorhynchus", "ceratops", "ceratus", "zalmoxes", "mochlodon", "gigantophis", "crab", "pulmonoscorpius", "manipulator", "meganeura", "euphoberia", "holcorobeus", "protosolpuga", "barbslinger", "blizzarisk", "frostmite", "devourer", "hyperweaver", "macrelcana", "acklay", "elemental", "megalania", "gecko", "gator", "komodo", "scolipede", "shuckle", "combee", "shedinja", "caterpie", "wurmple", "lockjaw", "needlepost", "needleroll", "squid", "slug", "gila", "pleura")) { return; } pawn.health.AddHediff(SexPartAdder.MakePart(part, pawn, bpr), bpr); } }
public static void AddGenitals(Pawn pawn, Pawn parent, Gender gender, BodyPartRecord bpr, HediffDef part) { var temppawn = parent ?? pawn; double value = GenderTechLevelCheck(pawn); string racename = temppawn.kindDef.race.defName.ToLower(); //Log.Message("Genital_Helper::add_genitals( " + xxx.get_pawnname(pawn)); //Log.Message("Genital_Helper::add_genitals( " + pawn.kindDef.race.defName); //Log.Message("Genital_Helper::is male( " + privates_gender(pawn, gender)); //Log.Message("Genital_Helper::is male1( " + pawn.gender); //Log.Message("Genital_Helper::is male2( " + gender); if (xxx.is_mechanoid(pawn)) { return; } //insects else if (xxx.is_insect(temppawn) || racename.Contains("apini") || racename.Contains("mantodean") || racename.Contains("insect") || racename.Contains("bug")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.ovipositorM : Genital_Helper.ovipositorF; //override for Better infestations, since queen is male at creation if (racename.Contains("Queen")) { part = Genital_Helper.ovipositorF; } } //space cats pawns else if ((racename.Contains("orassan") || racename.Contains("neko")) && !racename.ContainsAny("akaneko")) { if ((value < 0.70) || (pawn.ageTracker.AgeBiologicalYears < 2) || !pawn.RaceProps.Humanlike) { part = (privates_gender(pawn, gender)) ? Genital_Helper.feline_penis : Genital_Helper.feline_vagina; } else if (value < 0.90) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } else { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } } //space dog pawns else if (racename.Contains("fennex") || racename.Contains("xenn") || racename.Contains("leeani") || racename.Contains("ferian") || racename.Contains("callistan")) { if ((value < 0.70) || (pawn.ageTracker.AgeBiologicalYears < 2) || !pawn.RaceProps.Humanlike) { part = (privates_gender(pawn, gender)) ? Genital_Helper.canine_penis : Genital_Helper.canine_vagina; } else if (value < 0.90) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } else { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } } //space horse pawns else if (racename.Contains("equium")) { if ((value < 0.70) || (pawn.ageTracker.AgeBiologicalYears < 2) || !pawn.RaceProps.Humanlike) { part = (privates_gender(pawn, gender)) ? Genital_Helper.equine_penis : Genital_Helper.equine_vagina; } else if (value < 0.90) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } else { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } } //space raccoon pawns else if (racename.Contains("racc") && !racename.Contains("raccoon")) { if ((value < 0.70) || (pawn.ageTracker.AgeBiologicalYears < 2) || !pawn.RaceProps.Humanlike) { part = (privates_gender(pawn, gender)) ? Genital_Helper.raccoon_penis : Genital_Helper.generic_vagina; } else if (value < 0.90) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } else { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } } //alien races - ChjDroid, ChjAndroid else if (racename.Contains("droid")) { if (pawn.story.GetBackstory(BackstorySlot.Childhood) != null) { if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("bishojo")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("pleasure")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("idol")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("social")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } else if (pawn.story.childhood.untranslatedTitleShort.ToLower().Contains("substitute")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.average_penis : Genital_Helper.average_vagina; } else if (pawn.story.GetBackstory(BackstorySlot.Adulthood) != null) { if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("courtesan")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } else if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("social")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } } else { return; } } else if (pawn.story.GetBackstory(BackstorySlot.Adulthood) != null) { if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("courtesan")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } else if (pawn.story.adulthood.untranslatedTitleShort.ToLower().Contains("social")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } } if (part == Genital_Helper.generic_penis || part == Genital_Helper.generic_vagina) { return; } } //animal cats else if (racename.ContainsAny("cat", "cougar", "lion", "leopard", "cheetah", "panther", "tiger", "lynx", "smilodon", "akaneko")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.feline_penis : Genital_Helper.feline_vagina; } //animal canine/dogs else if (racename.ContainsAny("husky", "warg", "terrier", "collie", "hound", "retriever", "mastiff", "wolf", "fox", "vulptex", "dachshund", "schnauzer", "corgi", "pug", "doberman", "chowchow", "borzoi", "saintbernard", "newfoundland", "poodle", "dog", "coyote")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.canine_penis : Genital_Helper.canine_vagina; } //animal horse - MoreMonstergirls else if (racename.ContainsAny("horse", "centaur", "zebra", "donkey", "dryad")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.equine_penis : Genital_Helper.equine_vagina; } //animal raccoon else if (racename.Contains("racc")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.raccoon_penis : Genital_Helper.generic_vagina; } //animal crocodilian (alligator, crocodile, etc) else if (racename.ContainsAny("alligator", "crocodile", "caiman", "totodile", "croconaw", "feraligatr", "quinkana", "purussaurus", "kaprosuchus", "sarcosuchus")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.crocodilian_penis : Genital_Helper.generic_vagina; } //hemipenes - mostly reptiles and snakes else if (racename.ContainsAny("guana", "cobra", "gecko", "snake", "boa", "quinkana", "megalania", "gila", "gigantophis", "komodo", "basilisk", "thorny", "onix", "lizard", "slither") && !racename.ContainsAny("boar")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hemipenis : Genital_Helper.generic_vagina; } //animal dragon - MoreMonstergirls else if (racename.ContainsAny("dragon", "thrumbo", "drake", "charizard", "saurus")) { part = (privates_gender(pawn, gender)) ? Genital_Helper.dragon_penis : Genital_Helper.dragon_vagina; } //animal slime - MoreMonstergirls else if (racename.Contains("slime")) { // slime always futa pawn.health.AddHediff(SexPartAdder.MakePart(privates_gender(pawn, gender) ? Genital_Helper.slime_penis : Genital_Helper.slime_vagina, pawn, bpr), bpr); pawn.health.AddHediff(SexPartAdder.MakePart(privates_gender(pawn, gender) ? Genital_Helper.slime_vagina : Genital_Helper.slime_penis, pawn, bpr), bpr); return; } //animal demons - MoreMonstergirls else if (racename.Contains("impmother") || racename.Contains("demon")) { // 25% futa pawn.health.AddHediff(SexPartAdder.MakePart(privates_gender(pawn, gender) ? Genital_Helper.demon_penis : Genital_Helper.demon_vagina, pawn, bpr), bpr); if (Rand.Value < 0.25f) { pawn.health.AddHediff(SexPartAdder.MakePart(privates_gender(pawn, gender) ? Genital_Helper.demon_penis : Genital_Helper.demonT_penis, pawn, bpr), bpr); } return; } //animal demons - MoreMonstergirls else if (racename.Contains("baphomet")) { if (Rand.Value < 0.50f) { pawn.health.AddHediff(SexPartAdder.MakePart(privates_gender(pawn, gender) ? Genital_Helper.demon_penis : Genital_Helper.demon_vagina, pawn, bpr), bpr); } else { pawn.health.AddHediff(SexPartAdder.MakePart(privates_gender(pawn, gender) ? Genital_Helper.equine_penis : Genital_Helper.demon_vagina, pawn, bpr), bpr); } return; } else if (pawn.RaceProps.Humanlike) { //--Log.Message("Genital_Helper::add_genitals( " + xxx.get_pawnname(pawn) + " ) - race is humanlike"); if (value < 0.90 || (pawn.ageTracker.AgeBiologicalYears < 2)) { part = (privates_gender(pawn, gender)) ? Genital_Helper.average_penis : Genital_Helper.average_vagina; } else if (value < 0.95) { part = (privates_gender(pawn, gender)) ? Genital_Helper.hydraulic_penis : Genital_Helper.hydraulic_vagina; } else { part = (privates_gender(pawn, gender)) ? Genital_Helper.bionic_penis : Genital_Helper.bionic_vagina; } } //--Log.Message("Genital_Helper::add_genitals final ( " + xxx.get_pawnname(pawn) + " ) " + part.defName); var hd = SexPartAdder.MakePart(part, pawn, bpr); //Log.Message("Genital_Helper::add_genitals final ( " + xxx.get_pawnname(pawn) + " ) " + hd.def.defName + " sev " + hd.Severity + " bpr " + BPR.def.defName); pawn.health.AddHediff(hd, bpr); //Log.Message("Genital_Helper::add_genitals final ( " + xxx.get_pawnname(pawn) + " ) " + pawn.health.hediffSet.HasHediff(hd.def)); }
static bool privates_gender(Pawn pawn, Gender gender) { return(SexPartAdder.IsAddingPenis(pawn, gender)); }