Beispiel #1
0
        /// <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);
    }
Beispiel #3
0
        // 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);
        }
Beispiel #4
0
    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);
    }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        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();
         }
     }
 }
Beispiel #8
0
        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));
        }
Beispiel #11
0
        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);
                }
            }
        }
Beispiel #13
0
        // 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);
        }
Beispiel #14
0
        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));
        }
Beispiel #15
0
    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);
        }
Beispiel #18
0
        //
        // -= 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);
        }
Beispiel #19
0
        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);
        }
Beispiel #21
0
        // 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;
        }
Beispiel #26
0
        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);
            }
        }
Beispiel #27
0
    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;
        }
Beispiel #30
0
        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]);
 }