public static List <uint> GenerateRecordsStringDicList(GameVersion version)
        {
            if (!(version.Is360() || version == GameVersion.PS3 || version == GameVersion.PC))
            {
                throw new Exception("Unknown game version for records menu: " + version);
            }

            List <uint> records = new List <uint>();

            for (uint i = 33912371; i < 33912385; ++i)
            {
                if (i == 33912376)
                {
                    continue;
                }
                records.Add(i);
            }
            records.Add(33912570u);
            for (uint i = 33912385; i < 33912392; ++i)
            {
                records.Add(i);
            }
            records.Add(33912571u);
            records.Add(33912572u);
            records.Add(33912585u);
            records.Add(33912586u);
            records.Add(33912587u);
            records.Add(33912588u);

            if (version.HasPS3Content())
            {
                // repede snowboarding 1 - 8, team melee, 30 man per character
                for (uint i = 33912733; i < 33912751; ++i)
                {
                    records.Add(i);
                }
            }
            else if (version.Is360())
            {
                records.Add(33912621u);                   // 30 man melee generic
            }

            for (uint i = 33912392; i < 33912399; ++i)
            {
                records.Add(i);
            }
            if (version.HasPS3Content())
            {
                // usage flynn, patty
                records.Add(33912399u);
                records.Add(33912400u);
            }

            return(records);
        }
 public static void AppendCharacterBitfieldAsImageString(StringBuilder sb, Dictionary <uint, TSS.TSSEntry> inGameIdDict, GameVersion version, uint equip, bool useJapaneseNames)
 {
     if ((equip & 1) == 1)
     {
         sb.Append("<img src=\"chara-icons/YUR.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902112].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 2) == 2)
     {
         sb.Append("<img src=\"chara-icons/EST.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902117].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 4) == 4)
     {
         sb.Append("<img src=\"chara-icons/KAR.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902118].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 8) == 8)
     {
         sb.Append("<img src=\"chara-icons/RIT.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902121].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 16) == 16)
     {
         sb.Append("<img src=\"chara-icons/RAV.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902124].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 32) == 32)
     {
         sb.Append("<img src=\"chara-icons/JUD.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902127].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 64) == 64)
     {
         sb.Append("<img src=\"chara-icons/RAP.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902130].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if ((equip & 128) == 128)
     {
         sb.Append("<img src=\"chara-icons/FRE.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902133].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
     if (version.HasPS3Content() && (equip & 256) == 256)
     {
         sb.Append("<img src=\"chara-icons/PAT.png\" height=\"32\" width=\"24\" title=\"" + inGameIdDict[33902136].GetString(useJapaneseNames ? 0 : 1) + "\">");
     }
 }
Exemplo n.º 3
0
        public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, T8BTTA strategy, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict)
        {
            StringBuilder sb = new StringBuilder();

            //sb.Append( RefString );
            sb.Append("<tr>");

            int colspan = websiteLanguage.WantsBoth() ? 5 : 10;

            if (websiteLanguage.WantsJp())
            {
                sb.Append("<td colspan=\"" + colspan + "\">");
                sb.Append("<span class=\"itemname\">");
                sb.Append(inGameIdDict[NameStringDicID].StringJpnHtml(version, inGameIdDict));
                sb.Append("</span>");
                sb.Append("<br>");
                sb.Append(inGameIdDict[DescStringDicID].StringJpnHtml(version, inGameIdDict));
                sb.Append("</td>");
            }
            if (websiteLanguage.WantsEn())
            {
                sb.Append("<td colspan=\"" + colspan + "\">");
                sb.Append("<span class=\"itemname\">");
                sb.Append(inGameIdDict[NameStringDicID].StringEngHtml(version, inGameIdDict));
                sb.Append("</span>");
                sb.Append("<br>");
                sb.Append(inGameIdDict[DescStringDicID].StringEngHtml(version, inGameIdDict));
                sb.Append("</td>");
            }
            sb.Append("</tr>");

            sb.Append("<tr>");
            sb.Append("<td>");
            sb.Append("</td>");
            for (int i = 0; i < StrategyDefaults.GetLength(1); ++i)
            {
                sb.Append("<td class=\"strategychar\">");
                Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, 1u << i, websiteLanguage.MainJp());
                sb.Append("</td>");
            }
            sb.Append("</tr>");
            for (uint xRaw = 0; xRaw < StrategyDefaults.GetLength(0); ++xRaw)
            {
                uint x = xRaw;
                // swap around OVL and FS because they're stored the wrong way around compared to how they show up ingame
                if (x == 6)
                {
                    x = 7;
                }
                else if (x == 7)
                {
                    x = 6;
                }
                sb.Append("<tr>");
                sb.Append("<td>");
                sb.Append("<span class=\"strategycat\">");
                sb.Append(GetCategoryName(x, version, websiteLanguage, inGameIdDict));
                sb.Append("</span>");
                sb.Append("</td>");
                for (uint y = 0; y < StrategyDefaults.GetLength(1); ++y)
                {
                    if (y == 8 && !version.HasPS3Content())
                    {
                        continue;
                    }                                                                           // skip patty strategy if we don't have her
                    sb.Append("<td>");
                    var option = strategy.StrategyOptionDict[StrategyDefaults[x, y]];
                    sb.Append(inGameIdDict[option.NameStringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage));
                    sb.Append("</td>");
                }
                sb.Append("</tr>");
            }

            //sb.Append( "<td>" );
            //for ( int i = 0; i < UnknownFloats1.Length; ++i ) {
            //    sb.Append( UnknownFloats1[i] + " / " );
            //}
            //sb.Append( "<br>" );
            //for ( int i = 0; i < UnknownFloats2.Length; ++i ) {
            //    sb.Append( UnknownFloats2[i] + " / " );
            //}
            //sb.Append( "</td>" );

            return(sb.ToString());
        }
        public static List <ConfigMenuSetting> GenerateSettingsStringDicList(GameVersion version)
        {
            if (!(version.Is360() || version == GameVersion.PS3 || version == GameVersion.PC))
            {
                throw new Exception("Unknown game version for settings menu: " + version);
            }

            List <ConfigMenuSetting> settings = new List <ConfigMenuSetting>();

            settings.Add(new ConfigMenuSetting(33912401u, 33912401u + 46u, 33912427u, 33912426u, 33912425u, 33912424u));                 // msg speed
            settings.Add(new ConfigMenuSetting(33912402u, 33912402u + 46u, 33912428u, 33912429u, 33912430u, 33912431u));                 // difficulty
            if (version != GameVersion.PS3)
            {
                settings.Add(new ConfigMenuSetting(33912403u, 33912403u + 46u, 33912438u, 33912437u));                     // in 360/PS3 this is the 360 vibration string, in PC this is just the general one
            }
            else
            {
                settings.Add(new ConfigMenuSetting(33912679u, 33912681u, 33912438u, 33912437u));                   // console-neutral vibration string used in ps3 version only
            }
            settings.Add(new ConfigMenuSetting(33912404u, 33912404u + 46u, 33912432u, 33912433u));                 // camera controls
            if (version.HasPS3Content() && version != GameVersion.PC)
            {
                settings.Add(new ConfigMenuSetting(33912751u, 33912752u, 33912443u, 33912444u));        // stick/dpad controls
            }
            settings.Add(new ConfigMenuSetting(33912405u, 33912405u + 46u, 33912439u));                 // button config
            if (version != GameVersion.PC)
            {
                settings.Add(new ConfigMenuSetting(33912406u, 33912406u + 46u, 33912436u, 33912435u, 33912434u));                     // sound
            }
            if (version == GameVersion.PC)
            {
                settings.Add(new ConfigMenuSetting(33912779u, 33912780u, 33912439u));        // graphics settings
            }
            settings.Add(new ConfigMenuSetting(33912407u, 33912407u + 46u));                 // bgm
            settings.Add(new ConfigMenuSetting(33912408u, 33912408u + 46u));                 // se
            settings.Add(new ConfigMenuSetting(33912409u, 33912409u + 46u));                 // battle se
            settings.Add(new ConfigMenuSetting(33912413u, 33912413u + 46u));                 // battle voice
            settings.Add(new ConfigMenuSetting(33912414u, 33912414u + 46u));                 // event voice
            settings.Add(new ConfigMenuSetting(33912422u, 33912422u + 46u));                 // skit
            settings.Add(new ConfigMenuSetting(33912423u, 33912423u + 46u));                 // movie
            if (version.HasPS3Content())
            {
                settings.Add(new ConfigMenuSetting(33912656u, 33912657u, 33912658u, 33912659u));                   // item request type
            }
            settings.Add(new ConfigMenuSetting(33912410u, 33912410u + 46u, 33912438u, 33912437u));                 // engage cam
            settings.Add(new ConfigMenuSetting(33912411u, 33912411u + 46u, 33912438u, 33912437u));                 // dynamic cam
            settings.Add(new ConfigMenuSetting(33912412u, 33912412u + 46u, 33912438u, 33912437u));                 // field boundary
            settings.Add(new ConfigMenuSetting(33912415u, 33912415u + 46u, 33912438u, 33912437u));                 // location names
            settings.Add(new ConfigMenuSetting(33912416u, 33912416u + 46u, 33912438u, 33912437u));                 // skit titles
            settings.Add(new ConfigMenuSetting(33912417u, 33912417u + 46u, 33912438u, 33912437u));                 // skit subs
            settings.Add(new ConfigMenuSetting(33912418u, 33912418u + 46u, 33912438u, 33912437u));                 // movie subs
            if (version == GameVersion.PC)
            {
                settings.Add(new ConfigMenuSetting(33912881u, 33912880u, 33912438u, 33912437u));                     // post-battle subs
            }
            settings.Add(new ConfigMenuSetting(33912420u, 33912420u + 46u, 33912440u, 33912441u, 33912442u));        // font
            if (version.Is360() || version == GameVersion.PC)
            {
                settings.Add(new ConfigMenuSetting(33912419u, 33912419u + 46u, 33912439u));                     // brightness
                settings.Add(new ConfigMenuSetting(33912421u, 33912421u + 46u, 33912439u));                     // marketplace / steam
            }
            else
            {
                settings.Add(new ConfigMenuSetting(33912713u, 33912714u, 33912439u));             // brightness & screen pos
            }
            settings.Add(new ConfigMenuSetting(33912595u, 33912596u, 33912597u));                 // reset to default

            return(settings);
        }
        public static void AddMenuBar(StringBuilder sb, GameVersion Version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, IEnumerable <uint> IconsWithItems, Dictionary <uint, TSS.TSSEntry> InGameIdDict)
        {
            sb.AppendLine("<div id=\"header-name\">");
            sb.AppendLine("<a href=\"index.html\">Tales of Vesperia - Data &amp; Translation Guide</a>");
            sb.AppendLine("</div>");

            sb.AppendLine("<div id=\"topmenu\">");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Arte, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/main-01.png\" title=\"Artes\"></a>");
            //sb.AppendLine( "<a href=\"" + WebsiteGenerator.GetUrl( WebsiteSection.Equipment, Version, versionPostfix, locale, websiteLanguage, false ) + "\"><img src=\"menu-icons/main-02.png\" title=\"Equipment\"></a>" );
            //sb.AppendLine( "<a href=\"" + WebsiteGenerator.GetUrl( WebsiteSection.Item, Version, versionPostfix, locale, websiteLanguage, false ) + "\"><img src=\"menu-icons/main-03.png\" title=\"Items\"></a>" );
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Skill, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/main-04.png\" title=\"Skills\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Strategy, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/main-05.png\" title=\"Strategy\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Recipe, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/main-06.png\" title=\"Recipes\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Shop, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/main-02.png\" title=\"Shops\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Title, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/main-07.png\" title=\"Titles\"></a>");
            //sb.AppendLine( "<img src=\"menu-icons/main-08.png\" title=\"Library\">" );
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Synopsis, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/sub-09.png\" title=\"Synopsis\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.BattleBook, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/sub-14.png\" title=\"Battle Book\"></a>");
            //sb.AppendLine( "<a href=\"" + WebsiteGenerator.GetUrl( WebsiteSection.Enemy, Version, versionPostfix, locale, websiteLanguage, false ) + "\"><img src=\"menu-icons/sub-13.png\" title=\"Monster Book\"></a>" );
            //sb.AppendLine( "<a href=\"" + WebsiteGenerator.GetUrl( WebsiteSection.Item, Version, versionPostfix, locale, websiteLanguage, false ) + "\"><img src=\"menu-icons/sub-11.png\" title=\"Collector's Book\"></a>" );
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Location, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/sub-10.png\" title=\"World Map\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.SearchPoint, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"etc/U_ITEM_IRIKIAGRASS-64px.png\" title=\"Search Points\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Record, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/sub-08.png\" title=\"Records\"></a>");
            //sb.AppendLine( "<img src=\"menu-icons/main-09.png\" title=\"Save & Load\">" );
            //sb.AppendLine( "<img src=\"menu-icons/sub-06.png\" title=\"Save\">" );
            //sb.AppendLine( "<img src=\"menu-icons/sub-05.png\" title=\"Load\">" );
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Settings, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/sub-07.png\" title=\"Settings\"></a>");
            sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.GradeShop, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"item-categories/cat-01.png\" title=\"Grade Shop\"></a>");
            if (Version.HasPS3Content())
            {
                sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.NecropolisMap, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"menu-icons/weather-4-64px.png\" title=\"Necropolis of Nostalgia Maps\"></a>");
            }
            if (Version == GameVersion.PS3)
            {
                sb.AppendLine("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Trophy, Version, versionPostfix, locale, websiteLanguage, false) + "\"><img src=\"trophies/gold.png\" title=\"Trophies\"></a>");
            }
            sb.AppendLine("<br>");
            for (uint i = 2; i < 12; ++i)
            {
                sb.Append("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Item, Version, versionPostfix, locale, websiteLanguage, false, category: (int)i) + "\">");
                sb.Append("<img src=\"item-categories/cat-" + i.ToString("D2") + ".png\" title=\"" + InGameIdDict[33912572u + i].StringEngOrJpnHtml(Version, InGameIdDict, websiteLanguage) + "\" height=\"32\">");
                sb.Append("</a>");
            }
            sb.AppendLine();
            for (uint i = 0; i < 9; ++i)
            {
                sb.Append("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Enemy, Version, versionPostfix, locale, websiteLanguage, false, category: (int)i) + "\">");
                sb.Append("<img src=\"monster-categories/cat-" + i + ".png\" title=\"" + InGameIdDict[33912323u + i].StringEngOrJpnHtml(Version, InGameIdDict, websiteLanguage) + "\" height=\"32\">");
                sb.Append("</a>");
            }
            sb.AppendLine("<br>");
            foreach (uint i in IconsWithItems)
            {
                sb.Append("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.Item, Version, versionPostfix, locale, websiteLanguage, false, icon: (int)i) + "\">");
                sb.Append("<img src=\"item-icons/ICON" + i + ".png\" height=\"16\" width=\"16\">");
                sb.Append("</a>");
            }
            sb.AppendLine("<br>");
            sb.Append("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.ScenarioStoryIndex, Version, versionPostfix, locale, websiteLanguage, false) + "\">Story</a> / ");
            sb.Append("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.ScenarioSidequestIndex, Version, versionPostfix, locale, websiteLanguage, false) + "\">Sidequests</a> / ");
            sb.Append("<a href=\"" + WebsiteGenerator.GetUrl(WebsiteSection.SkitIndex, Version, versionPostfix, locale, websiteLanguage, false) + "\">Skits</a>");
            sb.AppendLine();
            sb.AppendLine("</div>");
            sb.AppendLine("<hr>");
            sb.AppendLine("<div id=\"content\">");
        }
Exemplo n.º 6
0
        public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict)
        {
            StringBuilder sb = new StringBuilder();

            var    synopsisEntry = inGameIdDict[TextStringDicId];
            string jp            = synopsisEntry.StringJpn != null ? synopsisEntry.StringJpn : "";

            jp = Website.WebsiteGenerator.ReplaceIconsWithHtml(new StringBuilder(jp), inGameIdDict, version, true).ToString();
            string en = synopsisEntry.StringEng != null ? synopsisEntry.StringEng : "";

            en = Website.WebsiteGenerator.ReplaceIconsWithHtml(new StringBuilder(en), inGameIdDict, version, false).ToString();

            string[] textJpn = jp.Split('\f');
            string[] textEng = en.Split('\f');
            for (int i = 0; i < textJpn.Length; ++i)
            {
                textJpn[i] = VesperiaUtil.RemoveTags(textJpn[i], inGameIdDict, true, true).Replace("\n", "<br />");
            }
            for (int i = 0; i < textEng.Length; ++i)
            {
                textEng[i] = VesperiaUtil.RemoveTags(textEng[i], inGameIdDict, false, true).Replace("\n", "<br />");
            }

            //sb.Append( "Unlocks between " + StoryIdMin + " and " + StoryIdMax + "<br>" );

            sb.Append("<table class=\"synopsis\">");
            sb.Append("<tr id=\"synopsis" + ID + "\"><td class=\"synopsistitle\" colspan=\"" + textJpn.Length + "\">");
            if (version.HasPS3Content())
            {
                sb.Append("<img src=\"synopsis/U_" + RefString1 + ".png\"><br><br>");
            }
            if (websiteLanguage.WantsJp())
            {
                sb.Append(inGameIdDict[NameStringDicId].StringJpnHtml(version, inGameIdDict) + "</td></tr><tr>");
                foreach (string s in textJpn)
                {
                    sb.Append("<td>" + s + "</td>");
                }
            }
            sb.Append("</tr>");
            sb.Append("</table>");

            if (websiteLanguage.WantsBoth())
            {
                sb.Append("<br>");
            }
            if (websiteLanguage.WantsEn())
            {
                sb.Append("<table class=\"synopsis\">");
                sb.Append("<tr id=\"synopsis" + ID + "\"><td class=\"synopsistitle\" colspan=\"" + textEng.Length + "\">");
                sb.Append(inGameIdDict[NameStringDicId].StringEngHtml(version, inGameIdDict) + "</td></tr><tr>");
                foreach (string s in textEng)
                {
                    sb.Append("<td>" + s + "</td>");
                }
                sb.Append("</tr>");
                sb.Append("</table>");
            }

            return(sb.ToString());
        }
Exemplo n.º 7
0
        public static string GetItemDataAsText(GameVersion version, ItemDat items, ItemDatSingle item, T8BTSK.T8BTSK skills, T8BTEMST.T8BTEMST enemies, COOKDAT.COOKDAT Recipes, WRLDDAT.WRLDDAT Locations, TSS.TSSFile tss, Dictionary <uint, TSS.TSSEntry> dict = null)
        {
            if (dict == null)
            {
                dict = tss.GenerateInGameIdDictionary();
            }
            var sb = new StringBuilder();

            sb.AppendLine("[" + item.ItemString.TrimNull() + "]");
            sb.Append("[Icon" + item.Data[(int)ItemData.Icon] + "] ");
            var nameEntry = dict[item.NamePointer];

            sb.AppendLine(nameEntry.StringEngOrJpn);
            var descEntry = dict[item.DescriptionPointer];

            sb.AppendLine(descEntry.StringEngOrJpn);

            switch (item.Data[(int)ItemData.Category])
            {
            case 2: sb.AppendLine("<Tools>"); break;

            case 3: sb.AppendLine("<Main>"); break;

            case 4: sb.AppendLine("<Sub>"); break;

            case 5: sb.AppendLine("<Head>"); break;

            case 6: sb.AppendLine("<Body>"); break;

            case 7: sb.AppendLine("<Accessories>"); break;

            case 8: sb.AppendLine("<Ingredients>"); break;

            case 9: sb.AppendLine("<Synthesis Materials>"); break;

            case 10: sb.AppendLine("<Valuables>"); break;

            case 11: sb.AppendLine("<DLC>"); break;

            default: sb.AppendLine("<UNKNOWN>"); break;
            }

            sb.AppendLine("Price in shops: " + item.Data[(int)ItemData.ShopPrice] + " Gald");

            if (item.Data[(int)ItemData.BuyableIn1] > 0 || item.Data[(int)ItemData.BuyableIn2] > 0 || item.Data[(int)ItemData.BuyableIn3] > 0)
            {
                sb.Append("Available at shops in: ");
                if (item.Data[(int)ItemData.BuyableIn1] > 0)
                {
                    sb.Append(Locations.LocationIdDict[item.Data[(int)ItemData.BuyableIn1]].GetLastValidName(dict).StringEngOrJpn);
                }
                if (item.Data[(int)ItemData.BuyableIn2] > 0)
                {
                    sb.Append("; " + Locations.LocationIdDict[item.Data[(int)ItemData.BuyableIn2]].GetLastValidName(dict).StringEngOrJpn);
                }
                if (item.Data[(int)ItemData.BuyableIn3] > 0)
                {
                    sb.Append("; " + Locations.LocationIdDict[item.Data[(int)ItemData.BuyableIn3]].GetLastValidName(dict).StringEngOrJpn);
                }
                sb.AppendLine();
            }

            uint equip = item.Data[(int)ItemData.EquippableByBitfield];

            if (equip > 0)
            {
                sb.Append("Equippable by: ");
                if ((equip & 1) == 1)
                {
                    sb.Append("[YUR]");
                }
                if ((equip & 2) == 2)
                {
                    sb.Append("[EST]");
                }
                if ((equip & 4) == 4)
                {
                    sb.Append("[KAR]");
                }
                if ((equip & 8) == 8)
                {
                    sb.Append("[RIT]");
                }
                if ((equip & 16) == 16)
                {
                    sb.Append("[RAV]");
                }
                if ((equip & 32) == 32)
                {
                    sb.Append("[JUD]");
                }
                if ((equip & 64) == 64)
                {
                    sb.Append("[RAP]");
                }
                if ((equip & 128) == 128)
                {
                    sb.Append("[FRE]");
                }
                if (version.HasPS3Content() && (equip & 256) == 256)
                {
                    sb.Append("[PAT]");
                }
                sb.AppendLine();
            }

            uint synthCount = item.Data[(int)ItemData.SynthRecipeCount];

            switch (synthCount)
            {
            case 0: sb.AppendLine("Can't be synthesized."); break;

            case 1: sb.AppendLine("Can be synthesized in 1 way."); break;

            default: sb.AppendLine("Can be synthesized in " + synthCount + " ways."); break;
            }
            for (int j = 0; j < synthCount; ++j)
            {
                uint synthItemCount = item.Data[(int)ItemData.Synth1ItemSlotCount + j * 16];
                sb.AppendLine("Synthesis method #" + (j + 1));
                sb.AppendLine(" Required Synthesis Level: " + item.Data[(int)ItemData._Synth1Level + j * 16]);
                sb.AppendLine(" Price: " + item.Data[(int)ItemData.Synth1Price + j * 16] + " Gald");
                sb.AppendLine(" Requires " + synthItemCount + " items:");
                for (int i = 0; i < synthItemCount; ++i)
                {
                    var    otherItem          = items.itemIdDict[item.Data[(int)ItemData.Synth1Item1Type + i * 2 + j * 16]];
                    var    otherItemNameEntry = dict[otherItem.NamePointer];
                    string otherItemName      = otherItemNameEntry.StringEngOrJpn;
                    sb.AppendLine("  Item " + (i + 1) + ": " + otherItemName + " x" + item.Data[(int)ItemData.Synth1Item1Count + i * 2 + j * 16]);
                }
            }


            switch (item.Data[(int)ItemData.Category])
            {
            case 2:
            default:
                // seems to be some kind of singletarget/multitarget flag maybe?
                //sb.AppendLine( "~19: " + item.Data[(int)ItemData.PATK] );

                // seems to be a bitfield regarding what stuff it heals, 1 == death, 2 = magical ailment, 4 == physical ailment
                // this is already covered below so don't print it
                //sb.AppendLine( "~20: " + item.Data[(int)ItemData.MATK] );

                if (item.Data[(int)ItemData.MDEF_or_HPHealPercent] > 0)
                {
                    sb.AppendLine("HP Heal %: " + item.Data[(int)ItemData.MDEF_or_HPHealPercent]);
                }
                if (item.Data[(int)ItemData.AGL_TPHealPercent] > 0)
                {
                    sb.AppendLine("TP Heal %: " + item.Data[(int)ItemData.AGL_TPHealPercent]);
                }

                // why is this here twice?
                uint physAilAlt = item.Data[(int)ItemData.PDEF];
                uint physAil    = item.Data[(int)ItemData._LUCK];
                if (physAil != physAilAlt)
                {
                    throw new Exception();
                }

                if (physAil > 0)
                {
                    sb.Append("Cures physical ailments: ");
                    if ((physAil & 1) == 1)
                    {
                        sb.Append("Death ");
                    }
                    if ((physAil & 2) == 2)
                    {
                        sb.Append("Poison ");
                    }
                    if ((physAil & 4) == 4)
                    {
                        sb.Append("Paralysis ");
                    }
                    if ((physAil & 8) == 8)
                    {
                        sb.Append("Petrification ");
                    }
                    if ((physAil & 16) == 16)
                    {
                        sb.Append("Weak ");
                    }
                    if ((physAil & 32) == 32)
                    {
                        sb.Append("SealedArtes ");
                    }
                    if ((physAil & 64) == 64)
                    {
                        sb.Append("SealedSkills ");
                    }
                    if ((physAil & 128) == 128)
                    {
                        sb.Append("Contamination ");
                    }
                    sb.AppendLine();
                }

                if (item.Data[(int)ItemData._AGL_Again] > 0)
                {
                    sb.AppendLine("Cures magical ailments");
                }

                if (item.Data[26] > 0)
                {
                    sb.AppendLine("Permanent PATK increase: " + item.Data[26]);
                }
                if (item.Data[27] > 0)
                {
                    sb.AppendLine("Permanent PDEF increase: " + item.Data[27]);
                }
                if (item.Data[(int)ItemData.AttrFire] > 0)
                {
                    sb.AppendLine("Permanent MATK increase: " + item.Data[(int)ItemData.AttrFire]);
                }
                if (item.Data[(int)ItemData.AttrWater] > 0)
                {
                    sb.AppendLine("Permanent MDEF increase: " + item.Data[(int)ItemData.AttrWater]);
                }
                if (item.Data[(int)ItemData.AttrWind] > 0)
                {
                    sb.AppendLine("Permanent AGL increase: " + item.Data[(int)ItemData.AttrWind]);
                }
                if (item.Data[(int)ItemData.Skill1] > 0)
                {
                    sb.AppendLine("Max HP increase: " + item.Data[(int)ItemData.Skill1]);
                }
                if (item.Data[(int)ItemData.Skill1Metadata] > 0)
                {
                    sb.AppendLine("Max TP increase: " + item.Data[(int)ItemData.Skill1Metadata]);
                }
                break;

            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
                if ((int)item.Data[(int)ItemData.PATK] > 0)
                {
                    sb.AppendLine("PATK: " + (int)item.Data[(int)ItemData.PATK]);
                }
                if ((int)item.Data[(int)ItemData.MATK] > 0)
                {
                    sb.AppendLine("MATK: " + (int)item.Data[(int)ItemData.MATK]);
                }
                if ((int)item.Data[(int)ItemData.PDEF] > 0)
                {
                    sb.AppendLine("PDEF: " + (int)item.Data[(int)ItemData.PDEF]);
                }
                if ((int)item.Data[(int)ItemData.MDEF_or_HPHealPercent] > 0)
                {
                    sb.AppendLine("MDEF: " + (int)item.Data[(int)ItemData.MDEF_or_HPHealPercent]);
                }

                int agl1 = (int)item.Data[(int)ItemData.AGL_TPHealPercent];
                int agl2 = (int)item.Data[(int)ItemData._AGL_Again];

                if (agl1 != agl2)
                {
                    sb.AppendLine("!!! AGL1: " + agl1 + " / AGL2: " + agl2);
                }
                else
                {
                    if (agl1 > 0)
                    {
                        sb.AppendLine("AGL: " + agl1);
                    }
                }

                if ((int)item.Data[(int)ItemData._LUCK] > 0)
                {
                    sb.AppendLine("LUCK: " + (int)item.Data[(int)ItemData._LUCK]);
                }

                if ((int)item.Data[(int)ItemData.AttrFire] != 0)
                {
                    sb.AppendLine("Attribute Fire: " + (int)item.Data[(int)ItemData.AttrFire]);
                }
                if ((int)item.Data[(int)ItemData.AttrWater] != 0)
                {
                    sb.AppendLine("Attribute Water: " + (int)item.Data[(int)ItemData.AttrWater]);
                }
                if ((int)item.Data[(int)ItemData.AttrWind] != 0)
                {
                    sb.AppendLine("Attribute Wind: " + (int)item.Data[(int)ItemData.AttrWind]);
                }
                if ((int)item.Data[(int)ItemData.AttrEarth] != 0)
                {
                    sb.AppendLine("Attribute Earth: " + (int)item.Data[(int)ItemData.AttrEarth]);
                }
                if ((int)item.Data[(int)ItemData.AttrLight] != 0)
                {
                    sb.AppendLine("Attribute Light: " + (int)item.Data[(int)ItemData.AttrLight]);
                }
                if ((int)item.Data[(int)ItemData.AttrDark] != 0)
                {
                    sb.AppendLine("Attribute Darkness: " + (int)item.Data[(int)ItemData.AttrDark]);
                }

                for (int i = 0; i < 3; ++i)
                {
                    uint skillId = item.Data[(int)ItemData.Skill1 + i * 2];
                    if (skillId != 0)
                    {
                        var    skill          = skills.SkillIdDict[skillId];
                        var    skillNameEntry = dict[skill.NameStringDicID];
                        string skillName      = skillNameEntry.StringEngOrJpn;
                        sb.AppendLine("Skill #" + (i + 1) + " Name: " + skillName);
                        sb.AppendLine("Skill #" + (i + 1) + " Metadata: " + item.Data[(int)ItemData.Skill1Metadata + i * 2]);
                    }
                }
                break;
            }



            for (int j = 0; j < 2; ++j)
            {
                for (int i = 0; i < 16; ++i)
                {
                    uint enemyId = item.Data[(int)ItemData.Drop1Enemy + i + j * 32];
                    if (enemyId != 0)
                    {
                        var    enemy          = enemies.EnemyIdDict[enemyId];
                        var    enemyNameEntry = dict[enemy.NameStringDicID];
                        string enemyName      = enemyNameEntry.StringEngOrJpn;
                        sb.AppendLine("Enemy " + (j == 0 ? "Drop" : "Steal") + " #" + (i + 1) + ": " + enemyName + ", " + item.Data[(int)ItemData.Drop1Chance + i + j * 32] + "%");
                    }
                }
            }

            for (int i = 0; i < 8; ++i)
            {
                if (item.Data[(int)ItemData.UsedInRecipe1 + i] != 0)
                {
                    sb.AppendLine("Used in Recipe #" + (i + 1) + ": " + item.Data[(int)ItemData.UsedInRecipe1 + i]);
                }
            }

            //sb.AppendLine( "~3: " + item.Data[3] );
            //sb.AppendLine( "~5: " + item.Data[5] );
            //sb.AppendLine( "~18: " + item.Data[18] );

            /* all of these values make no sense to me, probably useless for the reader
             * sb.AppendLine( "~169: " + item.Data[169] );
             * sb.AppendLine( "~170: " + item.Data[170] );
             * sb.AppendLine( "~171: " + item.Data[171] );
             * sb.AppendLine( "~172: " + item.Data[172] );
             * sb.AppendLine( "~173: " + item.Data[173] );
             * sb.AppendLine( "~174: " + item.Data[174] );
             */

            // no idea, maybe related to what shows up on the character model?
            //sb.AppendLine( "~175: " + (int)item.Data[175] );

            // seems to be some sort of ID, useless for the reader
            //sb.AppendLine( "~176: " + item.Data[176] );

            if (item.Data[(int)ItemData.UsableInBattle] > 0)
            {
                sb.AppendLine("Usable in battle");
            }
            ;
            if (item.Data[(int)ItemData.InCollectorsBook] == 0)
            {
                sb.AppendLine("Not in Collector's Book");
            }

            return(sb.ToString());
        }
Exemplo n.º 8
0
        public static WebsiteGenerator LoadWebsiteGenerator(string gameDataPath, GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, Util.Endianness endian, Util.GameTextEncoding encoding, Util.Bitness bits)
        {
            WebsiteGenerator site = new WebsiteGenerator();

            site.Locale         = locale;
            site.Version        = version;
            site.VersionPostfix = versionPostfix;
            site.Language       = websiteLanguage;

            site.Items           = new ItemDat.ItemDat(TryGetItemDat(gameDataPath, site.Locale, site.Version), Util.Endianness.BigEndian);
            site.StringDic       = new TSS.TSSFile(TryGetStringDic(gameDataPath, site.Locale, site.Version), encoding, endian);
            site.Artes           = new T8BTMA.T8BTMA(TryGetArtes(gameDataPath, site.Locale, site.Version), endian, bits);
            site.Skills          = new T8BTSK.T8BTSK(TryGetSkills(gameDataPath, site.Locale, site.Version), endian, bits);
            site.Enemies         = new T8BTEMST.T8BTEMST(TryGetEnemies(gameDataPath, site.Locale, site.Version), endian, bits);
            site.EnemyGroups     = new T8BTEMGP.T8BTEMGP(TryGetEnemyGroups(gameDataPath, site.Locale, site.Version), endian, bits);
            site.EncounterGroups = new T8BTEMEG.T8BTEMEG(TryGetEncounterGroups(gameDataPath, site.Locale, site.Version), endian, bits);
            site.Recipes         = new COOKDAT.COOKDAT(TryGetRecipes(gameDataPath, site.Locale, site.Version), endian);
            site.Locations       = new WRLDDAT.WRLDDAT(TryGetLocations(gameDataPath, site.Locale, site.Version), endian);
            site.Synopsis        = new SYNPDAT.SYNPDAT(TryGetSynopsis(gameDataPath, site.Locale, site.Version), endian);
            site.Titles          = new FAMEDAT.FAMEDAT(TryGetTitles(gameDataPath, site.Locale, site.Version), endian);
            site.GradeShop       = new T8BTGR.T8BTGR(TryGetGradeShop(gameDataPath, site.Locale, site.Version), endian, bits);
            site.BattleBook      = new BTLBDAT.BTLBDAT(TryGetBattleBook(gameDataPath, site.Locale, site.Version), endian);
            site.Strategy        = new T8BTTA.T8BTTA(TryGetStrategy(gameDataPath, site.Locale, site.Version), endian, bits);
            if (site.Version != GameVersion.PC)                 // TODO
            {
                site.BattleVoicesEnd = new T8BTVA.T8BTVA(TryGetBattleVoicesEnd(gameDataPath, site.Locale, site.Version), endian);
            }
            if (!site.Version.Is360())                 // 360 version stores search points differently, haven't decoded that
            //var txm = new Texture.TXM( gameDataPath + "UI.svo.ext/WORLDNAVI.TXM" );
            //var txv = new Texture.TXV( txm, gameDataPath + "UI.svo.ext/WORLDNAVI.TXV" );
            //var tex = txv.textures.Where( x => x.TXM.Name == "U_WORLDNAVI00" ).First();
            //site.WorldMapImage = tex.GetBitmaps().First();
            {
                site.WorldMapImage = IntegerScaled(new Bitmap(gameDataPath + "UI.svo.ext/WORLDNAVI.TXM.ext/U_WORLDNAVI00.png"), 5, 4);
                site.SearchPoints  = new TOVSEAF.TOVSEAF(TryGetSearchPoints(gameDataPath, site.Locale, site.Version), endian);
            }
            site.Skits    = new TO8CHLI.TO8CHLI(TryGetSkitMetadata(gameDataPath, site.Locale, site.Version), endian, bits);
            site.SkitText = new Dictionary <string, TO8CHTX.ChatFile>();
            ISet <string> forceShiftJisSkits = version == GameVersion.X360_EU && (locale == GameLocale.UK || locale == GameLocale.US) ?
                                               new HashSet <string> {
                "VC051", "VC052", "VC053", "VC054", "VC055", "VC056", "VC057", "VC084", "VC719", "VC954"
            } : new HashSet <string>();

            for (int i = 0; i < site.Skits.SkitInfoList.Count; ++i)
            {
                string name   = site.Skits.SkitInfoList[i].RefString;
                Stream stream = TryGetSkitText(gameDataPath, name, site.Locale, site.Version);
                if (stream != null)
                {
                    bool             forceShiftJis = forceShiftJisSkits.Contains(name);
                    TO8CHTX.ChatFile chatFile      = new TO8CHTX.ChatFile(stream, endian, forceShiftJis ? Util.GameTextEncoding.ShiftJIS : encoding, bits, version == GameVersion.PC ? 11 : 2);
                    site.SkitText.Add(name, chatFile);
                }
                else
                {
                    Console.WriteLine("Couldn't find chat file " + name + "! (" + version + ", " + locale + ")");
                }
            }

            site.Records  = WebsiteGenerator.GenerateRecordsStringDicList(site.Version);
            site.Settings = WebsiteGenerator.GenerateSettingsStringDicList(site.Version);

            site.ScenarioFiles = new Dictionary <string, ScenarioFile.ScenarioFile>();

            switch (version)
            {
            case GameVersion.X360_US:
                site.Shops = new ShopData.ShopData(TryGetScenarioFile(gameDataPath, 0, site.Locale, site.Version), 0x1A718, 0x420 / 32, 0x8F8, 0x13780 / 56, endian, bits);
                break;

            case GameVersion.X360_EU:
                site.Shops = new ShopData.ShopData(TryGetScenarioFile(gameDataPath, 0, site.Locale, site.Version), 0x1A780, 0x420 / 32, 0x8F8, 0x13780 / 56, endian, bits);
                break;

            case GameVersion.PS3:
            case GameVersion.PC:
                site.Shops = new ShopData.ShopData(TryGetScenarioFile(gameDataPath, 0, site.Locale, site.Version), 0x1C9BC, 0x460 / 32, 0x980, 0x14CB8 / 56, endian, bits);
                break;

            default:
                throw new Exception("Don't know shop data location for version " + version);
            }

            if (version.HasPS3Content())
            {
                site.IconsWithItems = new uint[] { 35, 36, 37, 60, 38, 1, 4, 12, 6, 5, 13, 14, 15, 7, 52, 51, 53, 9, 16, 18, 2, 17, 19, 10, 54, 20, 21, 22, 23, 24, 25, 26, 27, 56, 30, 28, 32, 31, 33, 29, 34, 41, 42, 43, 44, 45, 57, 61, 63, 39, 3, 40 };
            }
            else
            {
                site.IconsWithItems = new uint[] { 35, 36, 37, 60, 38, 1, 4, 12, 6, 5, 13, 14, 15, 7, 52, 51, 9, 16, 18, 2, 17, 19, 10, 20, 21, 22, 23, 24, 25, 26, 27, 56, 30, 28, 32, 31, 33, 29, 34, 41, 42, 43, 44, 45, 57, 61, 63, 39, 3, 40 };
            }

            site.BattleTextFiles = WebsiteGenerator.LoadBattleText(gameDataPath, site.Locale, site.Version, endian, encoding, bits);

            if (version.HasPS3Content())
            {
                site.NecropolisFloors    = new T8BTXTM.T8BTXTMA(TryGetNecropolisFloors(gameDataPath, site.Locale, site.Version), endian, bits);
                site.NecropolisTreasures = new T8BTXTM.T8BTXTMT(TryGetNecropolisTreasures(gameDataPath, site.Locale, site.Version), endian, bits);
                site.NecropolisMaps      = new SortedDictionary <string, T8BTXTM.T8BTXTMM>();
                foreach (T8BTXTM.FloorInfo floor in site.NecropolisFloors.FloorList)
                {
                    if (!site.NecropolisMaps.ContainsKey(floor.RefString2))
                    {
                        site.NecropolisMaps.Add(floor.RefString2, new T8BTXTM.T8BTXTMM(TryGetNecropolisMap(gameDataPath, floor.RefString2, site.Locale, site.Version), endian));
                    }
                }
            }

            if (version == GameVersion.PS3)
            {
                site.TrophyJp = HyoutaTools.Trophy.TrophyConfNode.ReadTropSfmWithTropConf(gameDataPath + @"TROPHY.TRP.ext\TROP.SFM", gameDataPath + @"TROPHY.TRP.ext\TROPCONF.SFM");
            }

            if (version.HasPS3Content())
            {
                site.NpcList = new TOVNPC.TOVNPCL(gameDataPath + @"npc.svo.ext\NPC.DAT.dec.ext\0000.dec", endian, bits);
                site.NpcDefs = new Dictionary <string, TOVNPC.TOVNPCT>();
                foreach (var f in site.NpcList.NpcFileList)
                {
                    string filename = gameDataPath + @"npc.svo.ext\" + f.Filename + @".dec.ext\0001.dec";
                    if (File.Exists(filename))
                    {
                        var d = new TOVNPC.TOVNPCT(filename, endian, bits);
                        site.NpcDefs.Add(f.Map, d);
                    }
                }
            }

            var maplist = new MapList.MapList(TryGetMaplist(gameDataPath, site.Locale, site.Version), endian, bits);

            site.ScenarioGroupsStory      = site.CreateScenarioIndexGroups(ScenarioType.Story, maplist, gameDataPath, encoding, endian, bits);
            site.ScenarioGroupsSidequests = site.CreateScenarioIndexGroups(ScenarioType.Sidequests, maplist, gameDataPath, encoding, endian, bits);
            site.ScenarioGroupsMaps       = site.CreateScenarioIndexGroups(ScenarioType.Maps, maplist, gameDataPath, encoding, endian, bits);
            site.ScenarioAddSkits(site.ScenarioGroupsStory);

            return(site);
        }