Exemple #1
0
        public TreeNode BuildTree()
        {
            var treeView = new TreeNode($"{_charGen.Id:X8}");

            var starterAreas = new TreeNode("Starter Areas");

            foreach (var starterArea in _charGen.StarterAreas)
            {
                var starterAreaTree = new StarterArea(starterArea).BuildTree();
                var starterAreaNode = new TreeNode(starterAreaTree[0].Name.Replace("Name: ", ""));
                starterAreaNode.Items.AddRange(starterAreaTree[1].Items);
                starterAreas.Items.Add(starterAreaNode);
            }

            var heritageGroups = new TreeNode("Heritage Groups");

            foreach (var kvp in _charGen.HeritageGroups)
            {
                var heritageTree = new HeritageGroupCG(kvp.Value).BuildTree();
                var hg           = new TreeNode(heritageTree[0].Name.Replace("Name: ", ""));
                heritageTree.RemoveAt(0);
                hg.Items.AddRange(heritageTree);
                heritageGroups.Items.Add(hg);
            }

            treeView.Items.AddRange(new List <TreeNode>()
            {
                starterAreas, heritageGroups
            });

            return(treeView);
        }
Exemple #2
0
        public CharGen(string filename)
        {
            Console.WriteLine("Reading charGen from {0}...", filename);

            StreamReader inputFile = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.Read));

            byte[] buffer = new byte[1024];

            FileId  = Utils.ReadUInt32(buffer, inputFile);
            FileId2 = Utils.ReadUInt32(buffer, inputFile);

            if (FileId != 0x0E000002)
            {
                Console.WriteLine("Invalid header, aborting.");
                return;
            }

            uint count = Utils.ReadCompressedUInt32(buffer, inputFile);

            for (int i = 0; i < count; i++)
            {
                StarterAreas.Add(new StarterArea(buffer, inputFile));
            }

            Unknown = Utils.ReadByte(buffer, inputFile);

            count = Utils.ReadCompressedUInt32(buffer, inputFile);
            for (int i = 0; i < count; i++)
            {
                uint            key   = Utils.ReadUInt32(buffer, inputFile);
                HeritageGroupCG value = new HeritageGroupCG(buffer, inputFile);
                HeritageGroups.Add(key, value);
            }

            inputFile.Close();
            Console.WriteLine("Done");
        }
Exemple #3
0
        public void modify()
        {
            foreach (KeyValuePair <uint, HeritageGroupCG> entry in HeritageGroups)
            {
                HeritageGroupCG heritage = entry.Value;

                heritage.SkillCredits = 50;

                switch (heritage.Name)
                {
                case "Aluvian":
                    heritage.Skills = new List <SkillCG>();
                    heritage.Skills.Add(new SkillCG((uint)eSkills.Dagger, 0, 4));
                    heritage.Skills.Add(new SkillCG((uint)eSkills.PersonalAppraisal, 0, 2));
                    break;

                case "Gharu'ndim":
                    heritage.Skills = new List <SkillCG>();
                    heritage.Skills.Add(new SkillCG((uint)eSkills.Staff, 0, 4));
                    heritage.Skills.Add(new SkillCG((uint)eSkills.ItemAppraisal, 0, 2));
                    break;

                case "Sho":
                    heritage.Skills = new List <SkillCG>();
                    heritage.Skills.Add(new SkillCG((uint)eSkills.UnarmedCombat, 0, 6));
                    break;
                }
                foreach (TemplateCG template in heritage.Templates)
                {
                    switch (template.Name)
                    {
                    case "Bow Hunter":
                        template.PrimarySkillsList = new List <uint>();
                        template.PrimarySkillsList.Add((uint)eSkills.ArcaneLore);
                        template.PrimarySkillsList.Add((uint)eSkills.Bow);
                        template.PrimarySkillsList.Add((uint)eSkills.MeleeDefense);
                        template.NormalSkillsList = new List <uint>();
                        template.NormalSkillsList.Add((uint)eSkills.ItemEnchantment);
                        break;

                    case "Life Caster":
                        template.PrimarySkillsList = new List <uint>();
                        template.PrimarySkillsList.Add((uint)eSkills.LifeMagic);
                        template.NormalSkillsList = new List <uint>();
                        template.NormalSkillsList.Add((uint)eSkills.CreatureEnchantment);
                        template.NormalSkillsList.Add((uint)eSkills.ManaConversion);
                        template.NormalSkillsList.Add((uint)eSkills.WarMagic);
                        break;

                    case "War Mage":
                        template.PrimarySkillsList = new List <uint>();
                        template.PrimarySkillsList.Add((uint)eSkills.WarMagic);
                        template.PrimarySkillsList.Add((uint)eSkills.ManaConversion);
                        template.NormalSkillsList = new List <uint>();
                        template.NormalSkillsList.Add((uint)eSkills.ArcaneLore);
                        template.NormalSkillsList.Add((uint)eSkills.Healing);
                        break;

                    case "Wayfarer":
                        template.PrimarySkillsList = new List <uint>();
                        template.PrimarySkillsList.Add((uint)eSkills.ArcaneLore);
                        template.PrimarySkillsList.Add((uint)eSkills.Dagger);
                        if (heritage.Name == "Aluvian")
                        {
                            template.PrimarySkillsList.Add((uint)eSkills.Lockpick);
                        }
                        template.NormalSkillsList = new List <uint>();
                        template.NormalSkillsList.Add((uint)eSkills.Crossbow);
                        template.NormalSkillsList.Add((uint)eSkills.Healing);
                        template.NormalSkillsList.Add((uint)eSkills.ItemEnchantment);
                        if (heritage.Name != "Aluvian")
                        {
                            template.NormalSkillsList.Add((uint)eSkills.Lockpick);
                        }
                        template.NormalSkillsList.Add((uint)eSkills.MeleeDefense);
                        break;

                    case "Soldier":
                        template.PrimarySkillsList = new List <uint>();
                        template.PrimarySkillsList.Add((uint)eSkills.ArcaneLore);
                        template.PrimarySkillsList.Add((uint)eSkills.Axe);
                        template.PrimarySkillsList.Add((uint)eSkills.MeleeDefense);
                        template.NormalSkillsList = new List <uint>();
                        template.NormalSkillsList.Add((uint)eSkills.Crossbow);
                        template.NormalSkillsList.Add((uint)eSkills.Healing);
                        break;

                    case "Swashbuckler":
                        template.PrimarySkillsList = new List <uint>();
                        template.PrimarySkillsList.Add((uint)eSkills.ArcaneLore);
                        template.PrimarySkillsList.Add((uint)eSkills.MeleeDefense);
                        template.PrimarySkillsList.Add((uint)eSkills.Sword);
                        template.NormalSkillsList = new List <uint>();
                        template.NormalSkillsList.Add((uint)eSkills.ItemEnchantment);
                        break;
                    }
                }
            }
        }
Exemple #4
0
        public static CharGen ReadFromDat()
        {
            // Check the FileCache so we don't need to hit the FileSystem repeatedly
            if (DatManager.PortalDat.FileCache.ContainsKey(0x0E000002))
            {
                return((CharGen)DatManager.PortalDat.FileCache[0x0E000002]);
            }
            else
            {
                // Create the datReader for the proper file
                DatReader datReader = DatManager.PortalDat.GetReaderForFile(0x0E000002);
                CharGen   cg        = new CharGen();

                cg.Did           = datReader.ReadInt32();
                datReader.Offset = 8;

                /// STARTER AREAS. There are 5 dungeons per starting city, and one landscape span for Olthoi.
                int numStarterAreas = datReader.ReadByte();
                for (int i = 0; i < numStarterAreas; i++)
                {
                    string starterAreaName = datReader.ReadPString();

                    int        numAreas     = datReader.ReadByte();
                    List <Loc> starterAreas = new List <Loc>();
                    for (int j = 0; j < numAreas; j++)
                    {
                        Loc starterArea = new Loc(datReader.ReadInt32(), datReader.ReadSingle(), datReader.ReadSingle(), datReader.ReadSingle(), datReader.ReadSingle(), datReader.ReadSingle(), datReader.ReadSingle(), datReader.ReadSingle());
                        starterAreas.Add(starterArea);
                    }

                    cg.StarterAreas.Add(starterAreas);
                }

                /// HERITAGE GROUPS -- 11 standard player races and 2 Olthoi.
                datReader.Offset++; // Not sure what this byte 0x01 is indicating, but we'll skip it because we can.
                int heritageGroupCount = datReader.ReadByte();
                for (int i = 0; i < heritageGroupCount; i++)
                {
                    HeritageGroupCG heritage      = new HeritageGroupCG();
                    int             heritageIndex = datReader.ReadInt32();
                    heritage.Name               = datReader.ReadPString();
                    heritage.IconImage          = datReader.ReadUInt32();
                    heritage.SetupID            = datReader.ReadUInt32();
                    heritage.EnvironmentSetupID = datReader.ReadUInt32();
                    heritage.AttributeCredits   = datReader.ReadUInt32();
                    heritage.SkillCredits       = datReader.ReadUInt32();

                    // Start Areas correspond go the CG.StarterAreas List.
                    int numPrimaryStartAreas = datReader.ReadByte();
                    for (int j = 0; j < numPrimaryStartAreas; j++)
                    {
                        heritage.PrimaryStartAreaList.Add(datReader.ReadInt32());
                    }

                    int numSecondaryStartAreas = datReader.ReadByte();
                    for (int j = 0; j < numSecondaryStartAreas; j++)
                    {
                        heritage.SecondaryStartAreaList.Add(datReader.ReadInt32());
                    }

                    // Racial Skills
                    int skillCount = datReader.ReadByte();
                    for (int j = 0; j < skillCount; j++)
                    {
                        SkillCG skill = new SkillCG();
                        skill.SkillNum    = datReader.ReadUInt32();
                        skill.NormalCost  = datReader.ReadUInt32();
                        skill.PrimaryCost = datReader.ReadUInt32();
                        heritage.SkillList.Add(skill);
                    }

                    // Adventurer, Bow Hunter, etc.
                    int templateCount = datReader.ReadByte();
                    for (int j = 0; j < templateCount; j++)
                    {
                        TemplateCG template = new TemplateCG();
                        template.Name      = datReader.ReadPString();
                        template.IconImage = datReader.ReadUInt32();
                        template.Title     = datReader.ReadUInt32();
                        // Attributes
                        template.Strength     = datReader.ReadUInt32();
                        template.Endurance    = datReader.ReadUInt32();
                        template.Coordination = datReader.ReadUInt32();
                        template.Quickness    = datReader.ReadUInt32();
                        template.Focus        = datReader.ReadUInt32();
                        template.Self         = datReader.ReadUInt32();

                        skillCount = datReader.ReadByte();
                        for (int k = 0; k < skillCount; k++)
                        {
                            template.NormalSkillsList.Add(datReader.ReadUInt32());
                        }
                        skillCount = datReader.ReadByte();
                        for (int k = 0; k < skillCount; k++)
                        {
                            template.PrimarySkillsList.Add(datReader.ReadUInt32());
                        }

                        heritage.TemplateList.Add(template);
                    }

                    datReader.Offset++;                    // 0x01 byte here. Not sure what/why, so skip it!
                    int numGenders = datReader.ReadByte(); // this is always 2, but let's read it anyways...
                    for (int j = 0; j < numGenders; j++)
                    {
                        SexCG sex      = new SexCG();
                        int   genderID = datReader.ReadInt32();
                        sex.Name         = datReader.ReadPString();
                        sex.Scale        = datReader.ReadUInt32();
                        sex.SetupID      = datReader.ReadUInt32();
                        sex.SoundTable   = datReader.ReadUInt32();
                        sex.IconImage    = datReader.ReadUInt32();
                        sex.BasePalette  = datReader.ReadUInt32();
                        sex.SkinPalSet   = datReader.ReadUInt32();
                        sex.PhysicsTable = datReader.ReadUInt32();
                        sex.MotionTable  = datReader.ReadUInt32();
                        sex.CombatTable  = datReader.ReadUInt32();

                        sex.BaseObjDesc = ObjDesc.ReadFromDat(ref datReader);

                        int numHairColors = datReader.ReadByte();
                        for (int k = 0; k < numHairColors; k++)
                        {
                            sex.HairColorList.Add(datReader.ReadUInt32());
                        }

                        int numHairStyles = datReader.ReadByte();
                        for (int k = 0; k < numHairStyles; k++)
                        {
                            HairStyleCG hairstyle = new HairStyleCG();
                            hairstyle.IconImage      = datReader.ReadUInt32();
                            hairstyle.Bald           = Convert.ToBoolean(datReader.ReadByte());
                            hairstyle.AlternateSetup = datReader.ReadUInt32();
                            hairstyle.ObjDesc        = ObjDesc.ReadFromDat(ref datReader);
                            sex.HairStyleList.Add(hairstyle);
                        }

                        int numEyeColors = datReader.ReadByte();
                        for (int k = 0; k < numEyeColors; k++)
                        {
                            sex.EyeColorList.Add(datReader.ReadUInt32());
                        }

                        int numEyeStrips = datReader.ReadByte();
                        for (int k = 0; k < numEyeStrips; k++)
                        {
                            EyeStripCG eyestrip = new EyeStripCG();
                            eyestrip.IconImage     = datReader.ReadUInt32();
                            eyestrip.IconImageBald = datReader.ReadUInt32();
                            eyestrip.ObjDesc       = ObjDesc.ReadFromDat(ref datReader);
                            eyestrip.ObjDescBald   = ObjDesc.ReadFromDat(ref datReader);
                            sex.EyeStripList.Add(eyestrip);
                        }

                        int numNoseStrips = datReader.ReadByte(); // Breathe Right?
                        for (int k = 0; k < numNoseStrips; k++)
                        {
                            FaceStripCG nosestrip = new FaceStripCG();
                            nosestrip.IconImage = datReader.ReadUInt32();
                            nosestrip.ObjDesc   = ObjDesc.ReadFromDat(ref datReader);
                            sex.NoseStripList.Add(nosestrip);
                        }

                        int numMouthStrips = datReader.ReadByte(); // Breathe Right?
                        for (int k = 0; k < numMouthStrips; k++)
                        {
                            FaceStripCG mouthstrip = new FaceStripCG();
                            mouthstrip.IconImage = datReader.ReadUInt32();
                            mouthstrip.ObjDesc   = ObjDesc.ReadFromDat(ref datReader);
                            sex.MouthStripList.Add(mouthstrip);
                        }

                        int numHeadGear = datReader.ReadByte();
                        for (int k = 0; k < numHeadGear; k++)
                        {
                            GearCG headgear = new GearCG();
                            headgear.Name          = datReader.ReadPString();
                            headgear.ClothingTable = datReader.ReadUInt32();
                            headgear.WeenieDefault = datReader.ReadUInt32();
                            sex.HeadgearList.Add(headgear);
                        }

                        int numShirts = datReader.ReadByte();
                        for (int k = 0; k < numShirts; k++)
                        {
                            GearCG shirt = new GearCG();
                            shirt.Name          = datReader.ReadPString();
                            shirt.ClothingTable = datReader.ReadUInt32();
                            shirt.WeenieDefault = datReader.ReadUInt32();
                            sex.ShirtList.Add(shirt);
                        }

                        int numPants = datReader.ReadByte();
                        for (int k = 0; k < numPants; k++)
                        {
                            GearCG pants = new GearCG();
                            pants.Name          = datReader.ReadPString();
                            pants.ClothingTable = datReader.ReadUInt32();
                            pants.WeenieDefault = datReader.ReadUInt32();
                            sex.PantsList.Add(pants);
                        }

                        int numFootwear = datReader.ReadByte();
                        for (int k = 0; k < numFootwear; k++)
                        {
                            GearCG footwear = new GearCG();
                            footwear.Name          = datReader.ReadPString();
                            footwear.ClothingTable = datReader.ReadUInt32();
                            footwear.WeenieDefault = datReader.ReadUInt32();
                            sex.FootwearList.Add(footwear);
                        }

                        int numClothingColors = datReader.ReadByte();
                        for (int k = 0; k < numClothingColors; k++)
                        {
                            sex.ClothingColorsList.Add(datReader.ReadUInt32());
                        }

                        heritage.SexList.Add(genderID, sex);
                    }

                    cg.HeritageGroups.Add(heritageIndex, heritage);
                }
                // Store this object in the FileCache
                DatManager.PortalDat.FileCache[0x0E000002] = cg;
                return(cg);
            }
        }