/// <summary> /// Gets random first name for an NPC. /// Supports Breton, Redguard, Nord, Imperial, DarkElf, HighElf, WoodElf. /// All other types return empty string. /// </summary> public string FirstName(BankTypes type, Genders gender) { // Bank dictionary must be ready if (bankDict == null) { return(string.Empty); } // Generate name by type NameBank nameBank = bankDict[type]; string firstName = string.Empty; switch (type) { case BankTypes.Breton: // These banks all work the same case BankTypes.Nord: case BankTypes.Imperial: case BankTypes.DarkElf: case BankTypes.HighElf: case BankTypes.WoodElf: firstName = GetRandomFirstName(nameBank, gender); break; case BankTypes.Redguard: // Redguards have just a single name firstName = GetRandomRedguardName(nameBank, gender); break; } return(firstName); }
DNA GenerateRandomDNA() { DNA res = new DNA(); res.level = 1; res.weights = new float[brain[0].neurons.Length * brain[1].neurons.Length]; for (int i = 0; i < res.weights.Length; i++) { res.weights[i] = GenerateRandomWeight(); } //res.fitness = -99999; res.fitness = 0; //memberCounter++; res.memberNum = ++memberCounter; res.name = NameBank.GetRandomName(); res.nameGen = 1; res.bloodlineLevel = 1; res.avatarColor = new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)); //res.avatarColor = new Color(Random.Range(0.0f, 255.0f), Random.Range(0.0f, 255.0f), Random.Range(0.0f, 255.0f)); //Debug.Log("memberCounter = " + memberCounter.ToString()); //Add entry to bloodlines array. Bloodline newBloodline = new Bloodline(); newBloodline.name = res.name; newBloodline.count = 1; bloodlines.Add(newBloodline); return(res); }
// Gets random Redguard name which follows 0+1+2+3 (male), 0+1+2+4 (female) pattern string GetRandomRedguardName(NameBank nameBank, Genders gender) { // Get set parts string[] partsA, partsB, partsC, partsD; if (gender == Genders.Male) { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = nameBank.sets[3].parts; } else { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = nameBank.sets[4].parts; } // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; string stringC = partsC[DFRandom.random_range(partsC.Length)]; string stringD = partsD[DFRandom.random_range(partsD.Length)]; return(stringA + stringB + stringC + stringD); }
void Start() { memories = new List <Memory>(); agent = GetComponent <NavMeshAgent>(); wants = new Dictionary <WantType, int> (); for (int i = 0; i < (int)WantType.SIZE; i++) { wants.Add((WantType)i, Random.Range(30, 70)); } affectedBy = new List <Effect>(); firstName = NameBank.RandomName(); do { lastName = NameBank.RandomName(); } while(firstName == lastName); Scheduler.AddTask(Look, true); Scheduler.AddTask(Smell, true); Scheduler.AddTask(Hear, true); Scheduler.AddTask(Touch, true); Scheduler.AddTask(UpdateItemStats, true); Scheduler.AddTask(NextTask, true); Scheduler.AddTask(UpdateText, true); Scheduler.AddTask(UpdateMemories, true); }
/// <summary> /// Gets random surname for an NPC. /// Supports Breton, Nord, Imperial, DarkElf, HighElf, WoodElf. /// All other types return empty string. /// </summary> public string Surname(BankTypes type) { // Bank dictionary must be ready if (bankDict == null) { return(string.Empty); } // Generate name by type NameBank nameBank = bankDict[type]; string lastName = string.Empty; switch (type) { case BankTypes.Breton: // These banks all work the same case BankTypes.Imperial: case BankTypes.DarkElf: case BankTypes.HighElf: case BankTypes.WoodElf: lastName = GetRandomSurname(nameBank); break; case BankTypes.Nord: lastName = GetRandomSurname(bankDict[BankTypes.Breton]); // Nords appear to share Breton surnames break; } return(lastName); }
public static void AddAllCustom() { NameBank nameBank = PawnNameDatabaseShuffled.BankOf(PawnNameCategory.HumanStandard); foreach (RandomNameDef curDef in DefDatabase <RandomNameDef> .AllDefs) { nameBank.AddNamesDedup(curDef.slot, curDef.gender, curDef.shuffledNames); } }
public static void Clear(this NameBank nameBank) { foreach (List <string> namesList in nameBank.AllNames()) { if (namesList != null) { namesList.Clear(); } } }
public static void TranslateVanilla() { NameBank nameBank = PawnNameDatabaseShuffled.BankOf(PawnNameCategory.HumanStandard); nameBank.Clear(); foreach (ShuffledNameDef curDef in DefDatabase <ShuffledNameDef> .AllDefs) { nameBank.AddNames(curDef.slot, curDef.gender, curDef.shuffledNames); } nameBank.ErrorCheck(); }
public override string Generate() { NameBank nameBank = PawnNameDatabaseShuffled.BankOf(PawnNameCategory.HumanStandard); Gender gender = this.gender; if (gender == Gender.None) { gender = (Gender)((Rand.Value < 0.5) ? 1 : 2); } return(nameBank.GetName(PawnNameSlot.First, gender)); }
public override string Generate() { NameBank nameBank = PawnNameDatabaseShuffled.BankOf(PawnNameCategory.HumanStandard); Gender gender = this.gender; if (gender == Gender.None) { gender = ((Rand.Value < 0.5f) ? Gender.Male : Gender.Female); } return(nameBank.GetName(PawnNameSlot.First, gender, checkIfAlreadyUsed: false)); }
public static void Debug() { NameBank nameBank = PawnNameDatabaseShuffled.BankOf(PawnNameCategory.HumanStandard); Log.Message($"PawnNameDatabaseShuffled {PawnNameSlot.First} {Gender.Male} {nameBank.NamesFor(PawnNameSlot.First, Gender.Male).Count}"); Log.Message($"PawnNameDatabaseShuffled {PawnNameSlot.First} {Gender.Female} {nameBank.NamesFor(PawnNameSlot.First, Gender.Female).Count}"); Log.Message($"PawnNameDatabaseShuffled {PawnNameSlot.Nick} {Gender.Male} {nameBank.NamesFor(PawnNameSlot.Nick, Gender.Male).Count}"); Log.Message($"PawnNameDatabaseShuffled {PawnNameSlot.Nick} {Gender.Female} {nameBank.NamesFor(PawnNameSlot.Nick, Gender.Female).Count}"); Log.Message($"PawnNameDatabaseShuffled {PawnNameSlot.Nick} {Gender.None} {nameBank.NamesFor(PawnNameSlot.Nick, Gender.None).Count}"); Log.Message($"PawnNameDatabaseShuffled {PawnNameSlot.Last} {Gender.None} {nameBank.NamesFor(PawnNameSlot.Last, Gender.None).Count}"); Log.Message($"PawnNameDatabaseSolid {PawnNameDatabaseSolid.AllNames().Count()}"); }
public static void AddNamesDedup(this NameBank nameBank, PawnNameSlot slot, Gender gender, IEnumerable <string> namesToAdd) { List <string> names = nameBank.NamesFor(slot, gender); foreach (string curName in namesToAdd) { if (!names.Contains(curName)) { names.Add(curName); } } }
// Gets random surname for names that follow 4+5 pattern string GetRandomSurname(NameBank nameBank) { // Get set parts string[] partsA, partsB; partsA = nameBank.sets[4].parts; partsB = nameBank.sets[5].parts; // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; return(stringA + stringB); }
private static NameTriple GeneratePawnName_Shuffled(Pawn pawn, string forcedLastName = null) { PawnNameCategory pawnNameCategory = pawn.RaceProps.nameCategory; if (pawnNameCategory == PawnNameCategory.NoName) { Log.Message("ProPawnBioAndNameGenerator.GeneratePawnName_Shuddled: Can't create a name of type NoName. Defaulting to HumanStandard."); pawnNameCategory = PawnNameCategory.HumanStandard; } NameBank nameBank = PawnNameDatabaseShuffled.BankOf(pawnNameCategory); string name = nameBank.GetName(PawnNameSlot.First, pawn.gender); string text; if (forcedLastName != null) { text = forcedLastName; } else { text = nameBank.GetName(PawnNameSlot.Last, Gender.None); } int num = 0; string nick; do { num++; if (Rand.Value < 0.15f) { Gender gender = pawn.gender; if (Rand.Value < 0.5f) { gender = Gender.None; } nick = nameBank.GetName(PawnNameSlot.Nick, gender); } else if (Rand.Value < 0.5f) { nick = name; } else { nick = text; } }while (num < 50 && NameUseChecker.AllPawnsNamesEverUsed.Any(delegate(Name x) { NameTriple nameTriple = x as NameTriple; return(nameTriple != null && nameTriple.Nick == nick); })); return(new NameTriple(name, nick, text)); }
void Awake() { s_instance = this; StreamReader sr = new StreamReader(Application.dataPath + "/" + fileName); string contents = sr.ReadToEnd(); sr.Close(); string[] lines = contents.Split("\n"[0]); foreach (string line in lines) { m_names.Add(line); } }
// Gets random surname for Nord names that follow 0+1+"sen" pattern string GetRandomNordSurname(NameBank nameBank) { // Get set parts string[] partsA, partsB; partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; // Generate strings uint index = DFRandom.rand() % (uint)partsA.Length; string stringA = partsA[index]; index = DFRandom.rand() % (uint)partsB.Length; string stringB = partsB[index]; return(stringA + stringB + "sen"); }
// Get random monster name which follows 0+1 (50% +2) string GetRandomMonsterName(Genders gender) { NameBank nameBank = bankDict[BankTypes.MonsterName]; // Get set parts string[] partsA, partsB, partsC; partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; string stringC = (UnityEngine.Random.Range(0f, 1f) < 0.5f) ? partsC[DFRandom.random_range(partsC.Length)] : string.Empty; return(stringA + stringB + stringC); }
// // -= Rules For Name Generation, By Bank =- // // Breton: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // Redguard: // Male FullName : Sets 0 + 1 + 2 + 3 // Female FullName : Sets 0 + 1 + 2 + 4 // // Nord: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname (Use Breton) : Sets 4 + 5 // // Noble: // Title : Sets 0 // FullName : Sets 1 + 2 + 3 // // Imperial: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // DarkElf: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // HighElf: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // WoodElf: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // Location1: // Masculine FirstName : Sets 0 + 1 // Feminine FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // Location2: // FullName : Sets 0 + 1 + 2 // // Location3: // Masculine FullName : Sets 0 + 1 + 2 // Feminine FullName : Sets 0 + 1 + 2 + 3 // // -= END =- // // Gets random first name by gender for names that follow 0+1 (male), 2+3 (female) pattern string GetRandomFirstName(NameBank nameBank, Genders gender) { // Get set parts string[] partsA, partsB; if (gender == Genders.Male) { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; } else { partsA = nameBank.sets[2].parts; partsB = nameBank.sets[3].parts; } // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; return(stringA + stringB); }
private static void DesignPatternsTest() { NameBank nb = new NameBank(); nb.Name = "Yoon Junsu"; Console.WriteLine(nb.NameUpper); Console.WriteLine(nb.First); Console.WriteLine(nb.Last); nb.Name = "John Jacob Jingle-Heimer Schmidt"; Console.WriteLine(nb.NameUpper); Console.WriteLine(nb.First); Console.WriteLine(nb.Last); Factory factory = new Factory(); Console.WriteLine(@"What consumable would you like? Press 0 for coffee Press 1 for Grain Press 2 for Filters Press 3 for an error message "); int choice = Convert.ToInt32(Console.ReadLine()); Consumable c = factory.ConsumableCreator((Consumables)choice); Console.WriteLine(c.GetType()); Consumables typeofthing = Consumables.Grain; ourBoolean b = ourBoolean.False; if (b == ourBoolean.Unknown) { Console.WriteLine("we have no idea"); } Console.WriteLine(typeofthing.GetType()); Console.WriteLine(Singleton.Instance); Console.WriteLine(Singleton.Instance); }
// Gets random Redguard name which follows 0+1+2+3(75%) (male), 0+1+2+4 (female) pattern string GetRandomRedguardName(NameBank nameBank, Genders gender) { // Get set parts string[] partsA, partsB, partsC, partsD; if (gender == Genders.Male) { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = nameBank.sets[3].parts; } else { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = nameBank.sets[4].parts; } // Generate strings uint index = DFRandom.rand() % (uint)partsA.Length; string stringA = partsA[index]; index = DFRandom.rand() % (uint)partsB.Length; string stringB = partsB[index]; index = DFRandom.rand() % (uint)partsC.Length; string stringC = partsC[index]; string stringD = string.Empty; if (gender == Genders.Female || (DFRandom.rand() % 100 < 75)) { index = DFRandom.rand() % (uint)partsD.Length; stringD = partsD[index]; } return(stringA + stringB + stringC + stringD); }
// Get random monster name which follows 0+(random 1 or 2) + 3 (if feminine) string GetRandomMonsterName(Genders gender) { NameBank nameBank = bankDict[BankTypes.MonsterName]; // Get set parts string[] partsA, partsB; partsA = nameBank.sets[0].parts; partsB = (UnityEngine.Random.Range(0f, 1f) < 0.5f) ? nameBank.sets[1].parts : nameBank.sets[2].parts; // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; // Attach femimine suffix string stringC = string.Empty; if (gender == Genders.Female) { string[] partsC = nameBank.sets[3].parts; stringC = partsC[DFRandom.random_range(partsC.Length)]; } return(stringA + stringB + stringC); }
// Gets random first name by gender for names that follow 0+1 (male), 2+3 (female) pattern string GetRandomFirstName(NameBank nameBank, Genders gender) { // Get set parts string[] partsA, partsB; if (gender == Genders.Male) { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; } else { partsA = nameBank.sets[2].parts; partsB = nameBank.sets[3].parts; } // Generate strings uint index = DFRandom.rand() % (uint)partsA.Length; string stringA = partsA[index]; index = DFRandom.rand() % (uint)partsB.Length; string stringB = partsB[index]; return(stringA + stringB); }
// Gets random surname for names that follow 4+5 pattern string GetRandomSurname(NameBank nameBank) { // Get set parts string[] partsA, partsB; partsA = nameBank.sets[4].parts; partsB = nameBank.sets[5].parts; // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; return stringA + stringB; }
// Get random monster name. // Monster1: 0+(50% +1)+2 // Monster2: 0+(50% +1)+2+(if female, +3) // Monster3: (if male, 25% +3 + " ")+0+1+2 string GetRandomMonsterName(Genders gender) { BankTypes type = (BankTypes)UnityEngine.Random.Range(8, 9 + 1); // Get random Monster1 or Monster2 for now. NameBank nameBank = bankDict[type]; // Get set parts string[] partsA, partsB, partsC, partsD; partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = null; string stringA = string.Empty; string stringB = string.Empty; string stringC = string.Empty; string stringD = string.Empty; uint index = 0; // Additional set for Monster2 and Monster3 if (nameBank.sets.Length >= 4) { partsD = nameBank.sets[3].parts; } // Generate strings if (type != BankTypes.Monster3) // Monster1 or Monster2 { index = DFRandom.rand() % (uint)partsA.Length; stringA = partsA[index]; stringB = string.Empty; if (DFRandom.rand() % 50 < 25) { index = DFRandom.rand() % (uint)partsB.Length; stringB = partsB[index]; } index = DFRandom.rand() % (uint)partsC.Length; stringC = partsC[index]; // Additional set for Monster2 female if (partsD != null && gender == Genders.Female) { index = DFRandom.rand() % (uint)partsD.Length; stringD = partsD[index]; } } else // Monster3 { if (gender == Genders.Female || DFRandom.rand() % 100 >= 25) { index = DFRandom.rand() % (uint)partsA.Length; stringA = partsA[index]; } else { index = DFRandom.rand() % (uint)partsD.Length; stringA = partsD[index] + " "; index = DFRandom.rand() % (uint)partsA.Length; stringB = partsA[index]; } index = DFRandom.rand() % (uint)partsB.Length; stringC = partsB[index]; index = DFRandom.rand() % (uint)partsC.Length; stringD = partsC[index]; } return(stringA + stringB + stringC + stringD); }
// // -= Rules For Name Generation, By Bank =- // // Breton: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // Redguard: // Male FullName : Sets 0 + 1 + 2 + 3 // Female FullName : Sets 0 + 1 + 2 + 4 // // Nord: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname (Use Breton) : Sets 4 + 5 // // Noble: // Title : Sets 0 // FullName : Sets 1 + 2 + 3 // // Imperial: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // DarkElf: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // HighElf: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // WoodElf: // Male FirstName : Sets 0 + 1 // Female FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // Location1: // Masculine FirstName : Sets 0 + 1 // Feminine FirstName : Sets 2 + 3 // Surname : Sets 4 + 5 // // Location2: // FullName : Sets 0 + 1 + 2 // // Location3: // Masculine FullName : Sets 0 + 1 + 2 // Feminine FullName : Sets 0 + 1 + 2 + 3 // // -= END =- // // Gets random first name by gender for names that follow 0+1 (male), 2+3 (female) pattern string GetRandomFirstName(NameBank nameBank, Genders gender) { // Get set parts string[] partsA, partsB; if (gender == Genders.Male) { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; } else { partsA = nameBank.sets[2].parts; partsB = nameBank.sets[3].parts; } // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; return stringA + stringB; }
public static void RandomColonists() { Population.Clear(); ShirtList.Clear(); CoatList.Clear(); ClothingList.Clear(); allBackstories.Clear(); NameBank nameBank = NameShuffleDatabase.BankOf((NameCategory)1); GenClothingList(); GenHairList(); //Load in Backstories from BackstoryDatabase for (int a = 0; a < BackstoryDatabase.allBackstories.Count - 1; a++) { allBackstories.Add(BackstoryDatabase.allBackstories.ElementAt(a).Value); } List <Backstory> SortedBackstories = allBackstories.OrderBy(o => o.title).ToList(); allBackstories = SortedBackstories; //Generate new random colonists for (int i = 0; i < ColonistNum.Amount; i++) { Colonist colonist = new Colonist(); //Gen random colonist basic info int gender = UnityEngine.Random.Range(1, 100); if (gender > 50) { gender = 1; int body = UnityEngine.Random.Range(1, 4); if (body == 1) { colonist.BodyType = BodyType.Male; } else if (body == 2) { colonist.BodyType = BodyType.Thin; } else if (body == 3) { colonist.BodyType = BodyType.Hulk; } else if (body == 4) { colonist.BodyType = BodyType.Fat; } } else { gender = 2; int body = UnityEngine.Random.Range(1, 4); if (body == 1) { colonist.BodyType = BodyType.Female; } else if (body == 2) { colonist.BodyType = BodyType.Thin; } else if (body == 3) { colonist.BodyType = BodyType.Hulk; } else if (body == 4) { colonist.BodyType = BodyType.Fat; } } colonist.Gender = gender; colonist.FirstName = nameBank.GetName((Gender)colonist.Gender, (NameSlot)0); colonist.NickName = nameBank.GetName((Gender)colonist.Gender, (NameSlot)2); colonist.LastName = nameBank.GetName((Gender)0, (NameSlot)1); colonist.Age = UnityEngine.Random.Range(16, 70); //Gen colonist starting skills List <Colonist_Skill> skills = new List <Colonist_Skill>(); if (ColonistDifficulty.Difficulty == "Easy") { colonist.SkillPool = 40; } else if (ColonistDifficulty.Difficulty == "Normal") { colonist.SkillPool = 20; } else { colonist.SkillPool = 0; } for (int a = 0; a < 11; a++) { Colonist_Skill skill = new Colonist_Skill(); if (a == 0) { skill.SkillName = "Construction".Translate(); skill.SkillPassion = 1; } else if (a == 1) { skill.SkillName = "Growing".Translate(); skill.SkillPassion = 2; } else if (a == 2) { skill.SkillName = "Research".Translate(); skill.SkillPassion = 3; } else if (a == 3) { skill.SkillName = "Mining".Translate(); } else if (a == 4) { skill.SkillName = "Shooting".Translate(); } else if (a == 5) { skill.SkillName = "Melee".Translate(); } else if (a == 6) { skill.SkillName = "Social".Translate(); } else if (a == 7) { skill.SkillName = "Cooking".Translate(); } else if (a == 8) { skill.SkillName = "Medicine".Translate(); } else if (a == 9) { skill.SkillName = "Artistic".Translate(); } else if (a == 10) { skill.SkillName = "Crafting".Translate(); } skill.SkillValue = 0; skills.Add(skill); } colonist.Skills = skills; //Load Backstories childstories.Clear(); adultstories.Clear(); ChildStoryIndex = 0; AdultStoryIndex = 0; List <Colonist_Backstory> ColonistStory = new List <Colonist_Backstory>(); for (int a = 0; a < allBackstories.Count - 1; a++) { bool ChildStoryFound = false; bool AdultStoryFound = false; Colonist_Backstory story = new Colonist_Backstory(); if (allBackstories[a].slot == BackstorySlot.Childhood) { story.StoryName = allBackstories[a].title; story.StoryAge = 0; story.BaseDescription = allBackstories[a].baseDesc; story.BodyTypeFemale = allBackstories[a].bodyTypeFemale; story.BodyTypeMale = allBackstories[a].bodyTypeMale; story.BodyTypeGlobal = allBackstories[a].bodyTypeGlobal; story.StoryIndex = ChildStoryIndex; List <StorySkillGain> skillGains = new List <StorySkillGain>(); for (int b = 0; b < allBackstories[a].skillGainsResolved.Count - 1; b++) { StorySkillGain skillGain = new StorySkillGain(); skillGain.SkillName = allBackstories[a].skillGainsResolved.ElementAt(b).Key.skillLabel; skillGain.SkillValue = allBackstories[a].skillGainsResolved.ElementAt(b).Value; skillGains.Add(skillGain); } story.SkillGains = skillGains; List <string> workRestrictions = new List <string>(); foreach (WorkTypeDef work in allBackstories[a].DisabledWorkTypes) { workRestrictions.Add(work.defName); } story.WorkRestrictions = workRestrictions; for (int b = 0; b < childstories.Count - 1; b++) { if (childstories[b].StoryName == story.StoryName) { ChildStoryFound = true; } } if (ChildStoryFound == false) { childstories.Add(story); ChildStoryIndex = ChildStoryIndex + 1; } } if (colonist.Gender == 1) { if (allBackstories[a].slot == BackstorySlot.Adulthood) { if (allBackstories[a].bodyTypeMale == colonist.BodyType || allBackstories[a].bodyTypeGlobal == colonist.BodyType) { story.StoryName = allBackstories[a].title; story.StoryAge = 1; story.BaseDescription = allBackstories[a].baseDesc; story.BodyTypeFemale = allBackstories[a].bodyTypeFemale; story.BodyTypeMale = allBackstories[a].bodyTypeMale; story.BodyTypeGlobal = allBackstories[a].bodyTypeGlobal; story.StoryIndex = AdultStoryIndex; List <StorySkillGain> skillGains = new List <StorySkillGain>(); for (int b = 0; b < allBackstories[a].skillGainsResolved.Count - 1; b++) { StorySkillGain skillGain = new StorySkillGain(); skillGain.SkillName = allBackstories[a].skillGainsResolved.ElementAt(b).Key.skillLabel; skillGain.SkillValue = allBackstories[a].skillGainsResolved.ElementAt(b).Value; skillGains.Add(skillGain); } story.SkillGains = skillGains; List <string> workRestrictions = new List <string>(); foreach (WorkTypeDef work in allBackstories[a].DisabledWorkTypes) { workRestrictions.Add(work.defName); } story.WorkRestrictions = workRestrictions; for (int b = 0; b < ColonistManager.AdultStories.Count - 1; b++) { if (ColonistManager.AdultStories[b].StoryName == story.StoryName) { AdultStoryFound = true; } } if (AdultStoryFound == false) { ColonistManager.AdultStories.Add(story); AdultStoryIndex = AdultStoryIndex + 1; } } } } else if (colonist.Gender == 2) { if (allBackstories[a].slot == BackstorySlot.Adulthood) { if (allBackstories[a].bodyTypeFemale == colonist.BodyType || allBackstories[a].bodyTypeGlobal == colonist.BodyType) { story.StoryName = allBackstories[a].title; story.StoryAge = 1; story.BaseDescription = allBackstories[a].baseDesc; story.BodyTypeFemale = allBackstories[a].bodyTypeFemale; story.BodyTypeMale = allBackstories[a].bodyTypeMale; story.BodyTypeGlobal = allBackstories[a].bodyTypeGlobal; story.StoryIndex = AdultStoryIndex; List <StorySkillGain> skillGains = new List <StorySkillGain>(); for (int b = 0; b < allBackstories[a].skillGainsResolved.Count - 1; b++) { StorySkillGain skillGain = new StorySkillGain(); skillGain.SkillName = allBackstories[a].skillGainsResolved.ElementAt(b).Key.skillLabel; skillGain.SkillValue = allBackstories[a].skillGainsResolved.ElementAt(b).Value; skillGains.Add(skillGain); } story.SkillGains = skillGains; List <string> workRestrictions = new List <string>(); foreach (WorkTypeDef work in allBackstories[a].DisabledWorkTypes) { workRestrictions.Add(work.defName); } story.WorkRestrictions = workRestrictions; for (int b = 0; b < ColonistManager.AdultStories.Count - 1; b++) { if (ColonistManager.AdultStories[b].StoryName == story.StoryName) { AdultStoryFound = true; } } if (AdultStoryFound == false) { ColonistManager.AdultStories.Add(story); AdultStoryIndex = AdultStoryIndex + 1; } } } } } //Gen random childhood backstory ColonistStory.Add(childstories[UnityEngine.Random.Range(0, childstories.Count - 1)]); //Gen random adulthood backstory ColonistStory.Add(adultstories[UnityEngine.Random.Range(0, adultstories.Count - 1)]); colonist.Backstory = ColonistStory; //Gen random traits int rand_trait = 0; List <StoryTrait> StoryTraits = new List <StoryTrait>(); foreach (TraitDef trait in DefDatabase <TraitDef> .AllDefsListForReading) { StoryTrait storyTrait = new StoryTrait(); storyTrait.TraitName = trait.label; storyTrait.Effect = trait.effect; StoryTraits.Add(storyTrait); } StoryTrait storytrait = new StoryTrait(); storytrait = new StoryTrait(); rand_trait = UnityEngine.Random.Range(0, StoryTraits.Count - 1); storytrait.TraitName = StoryTraits[rand_trait].TraitName; storytrait.Effect = StoryTraits[rand_trait].Effect; storytrait.TraitDescription = StoryTraits[rand_trait].TraitDescription; StoryTraits.Add(storytrait); StoryTrait storytrait2 = new StoryTrait(); int rand_trait2 = 0; rand_trait2 = UnityEngine.Random.Range(0, StoryTraits.Count - 1); storytrait2.TraitName = StoryTraits[rand_trait2].TraitName; storytrait2.Effect = StoryTraits[rand_trait].Effect; storytrait2.TraitDescription = StoryTraits[rand_trait2].TraitDescription; StoryTraits.Add(storytrait2); colonist.Traits = StoryTraits; //Gen Apparel List <Clothing> Outfit = new List <Clothing>(); Clothing clothing = new Clothing(); clothing = ShirtList.RandomListElement <Clothing>(); Outfit.Add(clothing); clothing = new Clothing(); clothing = CoatList.RandomListElement <Clothing>(); Outfit.Add(clothing); colonist.Clothing = Outfit; //Gen Body colonist.SkinColor = RandomSkinColor(); colonist.CrownType = ((UnityEngine.Random.value >= 0.5f) ? CrownType.Narrow : CrownType.Average); colonist.HeadGraphicPath = GraphicDatabase_Head.GetHeadRandom((Gender)colonist.Gender, colonist.SkinColor, colonist.CrownType).graphicPath; //Gen Hair colonist.HairColor = RandomHairColor(colonist.SkinColor); ColHairDef hairDef = new ColHairDef(); if (colonist.Gender == 1) { hairDef = MaleHairList.RandomListElement <ColHairDef>(); } else if (colonist.Gender == 2) { hairDef = FemaleHairList.RandomListElement <ColHairDef>(); } colonist.HairDef = hairDef; //Set BodyType if (colonist.Backstory[1].BodyTypeGlobal.ToString() != "Undefined") { colonist.BodyType = colonist.Backstory[1].BodyTypeGlobal; } else { if (colonist.Gender == 1 && colonist.Backstory[1].BodyTypeMale.ToString() != "Undefined") { colonist.BodyType = colonist.Backstory[1].BodyTypeMale; } else if (colonist.Gender == 1 && colonist.Backstory[1].BodyTypeMale.ToString() == "Undefined") { colonist.BodyType = BodyType.Male; } if (colonist.Gender == 2 && colonist.Backstory[1].BodyTypeFemale.ToString() != "Undefined") { colonist.BodyType = colonist.Backstory[1].BodyTypeFemale; } else if (colonist.Gender == 2 && colonist.Backstory[1].BodyTypeFemale.ToString() == "Undefined") { colonist.BodyType = BodyType.Male; } } //Gen Weapon GenWeaponList(); colonist.Weapon = WeaponList.RandomListElement <string>(); //Add colonist to total population Population.Add(colonist); } }
public void UpdateDisplay() { memberTime = Time.time - memberStartTime; if (pickUpScore >= pickUpGroup.maxPickUpScore) { speedCompletionBonus = (pickUpGroup.maxPickUpScore / memberTime) * pickUpGroup.pointValue; } else { speedCompletionBonus = 0; } totalScore = pickUpScore + distScore + speedCompletionBonus; if (totalScore > memberHighScore) { prevProgressTime = Time.time; memberHighScore = totalScore; if (memberHighScore > globalHighScore) { globalHighScore = memberHighScore; } //Debug.Log("bestScore = " + bestScore.ToString()); } timeLeft = timeLimit - (Time.time - prevProgressTime); int activePopIndex = playerController.activePopIndex; string scoreColor = "#" + ColorUtility.ToHtmlStringRGBA(goodBadGradient.Evaluate(totalScore / memberHighScore))/*"#00ffffff"*/ , memberHighScoreColor = "#" + ColorUtility.ToHtmlStringRGBA(goodBadGradient.Evaluate((memberHighScore - startScore) / (globalHighScore - startScore))) , timeLeftColor = "#" + ColorUtility.ToHtmlStringRGBA(goodBadGradient.Evaluate(timeLeft / timeLimit)) , memberTimeColor = "#" + ColorUtility.ToHtmlStringRGBA(goodBadBestGradient.Evaluate(Mathf.Clamp01(1.0f - memberTime) / 2.0f + Mathf.Clamp01((pickUpGroup.maxPickUpScore - memberTime) / (pickUpGroup.maxPickUpScore - 1)) / 2.0f)) , globalHighScoreColor = "#" + ColorUtility.ToHtmlStringRGBA(goodBadBestGradient.Evaluate(Mathf.Clamp01((globalHighScore - startScore) / (pickUpGroup.maxPickUpScore - startScore)) / 2.0f + Mathf.Clamp01((globalHighScore - pickUpGroup.maxPickUpScore) / (pickUpGroup.maxPickUpScore)) / 2.0f)); //Debug.Log("globalHighScoreColor =" + globalHighScoreColor); //Debug.Log((memberHighScore - startScore) / (globalHighScore - startScore)); GetComponent <Text>().text = "<b>Member #:</b> " + (playerController.activePopIndex >= 0 ? playerController.population[playerController.activePopIndex].memberNum.ToString() : "N/A") + "\n<b>Member Name:</b> " + (playerController.activePopIndex >= 0 ? (playerController.population[activePopIndex].name + (playerController.population[activePopIndex].nameGen > 1 ? " " + NameBank.GetRomanNumeral(playerController.population[activePopIndex].nameGen) : "")) : "N/A") + "\n<b>Score:</b><color=" + scoreColor + "> " + totalScore.ToString() + "</color>" + "\n<b>Member's High Score:</b><color=" + memberHighScoreColor + "> " + memberHighScore.ToString() + "</color>" + "\n<b>Time Left:</b><color=" + timeLeftColor + "> " + (Mathf.Round(timeLeft * 10) / 10).ToString() + (Mathf.Round(timeLeft * 10) / 10 % 1 == 0 ? ".0" : "") + "</color>" + "\n<b>Member Time:</b><color=" + memberTimeColor + "> " + (Mathf.Round(memberTime * 10) / 10).ToString() + (Mathf.Round(memberTime * 10) / 10 % 1 == 0 ? ".0" : "") + "</color>" + "\n<b>Generation #:</b> " + playerController.generation.ToString() + "\n<b>Member Level:</b> " + (playerController.activePopIndex >= 0 ? playerController.population[playerController.activePopIndex].level.ToString() : "N/A") + "\n<b>Member Bloodline Level:</b> " + (playerController.activePopIndex >= 0 ? playerController.population[playerController.activePopIndex].bloodlineLevel.ToString() : "N/A") + "\n<b>Global High Score:</b><color=" + globalHighScoreColor + "> " + globalHighScore.ToString() + "</color>"; }
public static List <string>[,] AllNames(this NameBank nameBank) { return(f_names.GetValue(nameBank) as List <string> [, ]); }
// Gets random Redguard name which follows 0+1+2+3 (male), 0+1+2+4 (female) pattern string GetRandomRedguardName(NameBank nameBank, Genders gender) { // Get set parts string[] partsA, partsB, partsC, partsD; if (gender == Genders.Male) { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = nameBank.sets[3].parts; } else { partsA = nameBank.sets[0].parts; partsB = nameBank.sets[1].parts; partsC = nameBank.sets[2].parts; partsD = nameBank.sets[4].parts; } // Generate strings string stringA = partsA[DFRandom.random_range(partsA.Length)]; string stringB = partsB[DFRandom.random_range(partsB.Length)]; string stringC = partsC[DFRandom.random_range(partsC.Length)]; string stringD = partsD[DFRandom.random_range(partsD.Length)]; return stringA + stringB + stringC + stringD; }
public static void Setup() { if (ModsConfig.ActiveModsInLoadOrder.Any(mod => mod.Name.Contains("[RF] Editable Pawn Names"))) { detectedREPN = true; } if (Controller.Settings.useLiteMode.Equals(false)) { foreach (KeyValuePair <string, Backstory> story in BackstoryDatabase.allBackstories) { if (story.Key.Equals("ColonySettler43")) { break; } REB_Initializer.REB_Backstories.Add(story.Key, story.Value); if (story.Value.slot == BackstorySlot.Childhood) { if (story.Value.shuffleable.Equals(true)) { childCountHAR++; } else { childNSCountHAR++; } } else { if (story.Value.shuffleable.Equals(true)) { adultCountHAR++; } else { adultNSCountHAR++; } } } BackstoryDatabase.allBackstories.Clear(); BackstoryDatabase.allBackstories = REB_Backstories; } Log.Message("||========================================"); Log.Message("|| Setting up Editable Backstories (EB)"); Log.Message("||========================================"); if (Controller.Settings.useLiteMode.Equals(true)) { Log.Message("|| 'Lite Mode' in Use."); Log.Message("|| Vanilla Backstory Database *NOT* Cleared."); Log.Message("|| EB Backstories Added to Vanilla Backstory Database:"); Log.Message("|| Childhood Backstories (shuffleable): " + childCount); Log.Message("|| Childhood Backstories (non-shuffleable): " + childNSCount); Log.Message("|| Adulthood Backstories (shuffleable): " + adultCount); Log.Message("|| Adulthood Backstories (non-shuffleable): " + adultNSCount); Log.Message("||========================================"); } else { Log.Message("|| Vanilla Backstory Database Cleared."); Log.Message("|| Backstories in EB Backstory Database:"); Log.Message("|| Childhood Backstories (shuffleable): " + childCount); Log.Message("|| Childhood Backstories (non-shuffleable): " + childNSCount); Log.Message("|| Adulthood Backstories (shuffleable): " + adultCount); Log.Message("|| Adulthood Backstories (non-shuffleable): " + adultNSCount); Log.Message("|| Humanoid Alien Races (HAR) Backstories Added to REB Database:"); Log.Message("|| HAR Childhood Backstories (shuffleable): " + childCountHAR); Log.Message("|| HAR Childhood Backstories (non-shuffleable): " + childNSCountHAR); Log.Message("|| HAR Adulthood Backstories (shuffleable): " + adultCountHAR); Log.Message("|| HAR Adulthood Backstories (non-shuffleable): " + adultNSCountHAR); Log.Message("||========================================"); } if (detectedREPN.Equals(true)) { Log.Message("|| \"Editable Pawn Names\" (EPN) Detected."); Log.Message("|| Names Added to EPN Name Database:"); Log.Message("|| Full Names (with bios): " + fullBioCount); Log.Message("||========================================"); } else { Log.Message("|| Vanilla Name Database *NOT* Cleared."); Log.Message("|| Names Added to Vanilla Name Database:"); Log.Message("|| First Names: " + firstCount); Log.Message("|| Nicknames: " + nickCount); Log.Message("|| Last Names: " + lastCount); Log.Message("|| Full Names (without bios): " + fullCount); Log.Message("|| Full Names (with bios): " + fullBioCount); Log.Message("||========================================"); } NameBank nameBank = PawnNameDatabaseShuffled.BankOf(PawnNameCategory.HumanStandard); if (NamesFirstMale != null) { nameBank.AddNames(PawnNameSlot.First, Gender.Male, NamesFirstMale); } if (NamesFirstFemale != null) { nameBank.AddNames(PawnNameSlot.First, Gender.Female, NamesFirstFemale); } if (NamesNicksMale != null) { nameBank.AddNames(PawnNameSlot.Nick, Gender.Male, NamesNicksMale); } if (NamesNicksFemale != null) { nameBank.AddNames(PawnNameSlot.Nick, Gender.Female, NamesNicksFemale); } if (NamesNicksUnisex != null) { nameBank.AddNames(PawnNameSlot.Nick, Gender.None, NamesNicksUnisex); } if (NamesLast != null) { nameBank.AddNames(PawnNameSlot.Last, Gender.None, NamesLast); } }
public static List <string> NamesFor(this NameBank nameBank, PawnNameSlot slot, Gender gender) { return(nameBank.AllNames()[(int)gender, (int)slot]); }