示例#1
0
        void AddOutput(string output)
        {
            if (output == null)
            {
                return;
            }

            ConsoleOutput.AppendText(output);
            ConsoleOutput.AppendText("\n");

            // see if the line contains a progress report
            if (output.Length > 0 && (output[0] == '[' || output[0] == '('))
            {
                var words = output.Split(' ');
                var progress = words[0].Substring(1, words[0].Length - 2);
                var progressParts = progress.Split('/');
                int progressNom, progressDenom;
                if (int.TryParse(progressParts[0], out progressNom) && int.TryParse(progressParts[1], out progressDenom))
                {
                    if (output[0] == '[')
                    {
                        TotalProgress.Maximum = progressDenom;
                        TotalProgress.Value   = progressNom;
                        // also get the name of the currently processed archive
                        var name = string.Join(" ", words.Skip(3).Take(words.Length - 4));
                        CurrentFileLabel.Text = "Converting " + name;
                    }
                    else
                    {
                        FileProgress.Maximum = progressDenom;
                        FileProgress.Value   = progressNom;
                    }
                }
            }
        }
示例#2
0
 void consoleWriter_WriteEvent(object sender, ConsoleWriterEventArgs e)
 {
     this.Dispatcher.Invoke(() =>
     {
         ConsoleOutput.AppendText(e.Value);
     });
 }
示例#3
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //Test code, please ignore
            OpenFileDialog fileDialog = new OpenFileDialog();

            if (fileDialog.ShowDialog() == true)
            {
                //open file dialog to open the map
                Stream str = File.Open(fileDialog.FileName, FileMode.Open);

                //Get the header
                MapHeader mh = HeaderReader.ReadHeader(str);

                ///Break out the sections of the file in order to avoid seeks and shit
                ///

                //First get the debug section. What the f**k is this for anyways?
                int    debug_offset  = (int)mh.section_offsets[0] + (int)mh.section_bounds[0].offset;
                int    debug_size    = (int)mh.section_bounds[0].size;
                byte[] debug_section = new byte[debug_size];

                if (str.Position != debug_offset)
                {
                    str.Seek(debug_offset, SeekOrigin.Begin);
                }

                str.Read(debug_section, 0, debug_size);


                //Then get the resources section. Images and models maybe? and strings probably!
                int    resource_offset  = (int)mh.section_offsets[1] + (int)mh.section_bounds[1].offset;
                int    resource_size    = (int)mh.section_bounds[1].size;
                byte[] resource_section = new byte[resource_size];

                if (str.Position != resource_offset)
                {
                    str.Seek(resource_offset, SeekOrigin.Begin);
                }

                str.Read(resource_section, 0, resource_size);

                //Get the actual tags
                int    tag_offset  = (int)mh.section_offsets[2] + (int)mh.section_bounds[2].offset;
                int    tag_size    = (int)mh.section_bounds[2].size;
                byte[] tag_section = new byte[tag_size];

                long pos = str.Position;

                if (str.Position != tag_offset)
                {
                    str.Seek(tag_offset, SeekOrigin.Begin);
                }
                str.Read(tag_section, 0, tag_size);

                //Lastly get the localization data
                //But I dont need it now so f**k it

                ConsoleOutput.AppendText("Read in the map file!\n");
            }
        }
示例#4
0
 private void AppendConsoleErr(string msg)
 {
     ConsoleOutput.SelectionStart  = ConsoleOutput.TextLength;
     ConsoleOutput.SelectionLength = 0;
     ConsoleOutput.SelectionColor  = Color.Red;
     ConsoleOutput.AppendText(msg);
     ConsoleOutput.SelectionColor = ConsoleOutput.ForeColor;
 }
示例#5
0
        private bool RunConsoleCmd(string app, string args)
        {
            if (proc_ != null)
            {
                ErrMsg("Please wait for the current operation to complete.");
                return(false);
            }

            if (!File.Exists(app))
            {
                ErrMsg("Could not find " + app + ", please make sure it is in the same folder as this program");
                return(false);
            }

            ConsoleOutput.Clear();
            ConsoleOutput.ForeColor = Color.Black;
            ConsoleOutput.AppendText(app + " " + args + "\r\n");

            proc_ = new Process();
            proc_.StartInfo.FileName               = app;
            proc_.StartInfo.Arguments              = args;
            proc_.StartInfo.UseShellExecute        = false;
            proc_.StartInfo.RedirectStandardOutput = true;
            proc_.StartInfo.RedirectStandardError  = true;
            proc_.StartInfo.CreateNoWindow         = true;
            proc_.StartInfo.StandardErrorEncoding  = Encoding.UTF8;
            proc_.StartInfo.StandardOutputEncoding = Encoding.UTF8;
            proc_.EnableRaisingEvents              = true;
            proc_.OutputDataReceived              += new DataReceivedEventHandler(ConsoleOutputHandler);
            proc_.ErrorDataReceived  += new DataReceivedEventHandler(ConsoleErrHandler);
            proc_.Exited             += new EventHandler(OnConsoleAppExit);
            proc_.SynchronizingObject = this;

            try
            {
                if (!proc_.Start())
                {
                    throw new Exception("Failed to run progam: " + app);
                }
                proc_.BeginOutputReadLine();
                proc_.BeginErrorReadLine();
            }
            catch (Exception ex)
            {
                ErrMsg(ex.Message);
                proc_.Close();
                proc_ = null;
                return(false);
            }

            return(true);
        }
示例#6
0
 private void ConsoleOutputHandler(object proc, DataReceivedEventArgs data)
 {
     if (!String.IsNullOrEmpty(data.Data))
     {
         if (ConsoleOutput.InvokeRequired)
         {
             ConsoleOutput.Invoke((ConOutDelegate)(msg => ConsoleOutput.AppendText(msg)), new object[] { data.Data + "\r\n" });
         }
         else
         {
             ConsoleOutput.AppendText(data.Data + "\r\n");
         }
     }
 }
示例#7
0
 private void AppendLine(String line)
 {
     ConsoleOutput.AppendText(line + Environment.NewLine);
     ConsoleOutput.ScrollToEnd();
     latestOutput = line;
 }
示例#8
0
        private void LoadButton_Click(object sender, EventArgs e)
        {
            ConsoleOutput.Clear();
            ConsoleOutput.AppendText("Loading...\r\n");
            ConsoleOutput.Refresh();
            Reset();

            WorkingDirTextBox.Text = WorkingDirTextBox.Text.TrimEnd("/\\".ToCharArray()); // Remove trailing slashes

            // Find DollData.json and determine if this is YnK or base TPDP data
            string wkdir    = WorkingDirTextBox.Text;
            string dolldata = wkdir + "/gn_dat6.arc/doll/DollData.json";

            is_ynk_ = true;
            if (!File.Exists(dolldata))
            {
                dolldata = wkdir + "/gn_dat3.arc/doll/DollData.json";
                is_ynk_  = false;
                if (!File.Exists(dolldata))
                {
                    ErrMsg("Could not locate DollData.json");
                    ConsoleOutput.Clear();
                    return;
                }
            }

            string versiondata = wkdir + "/version.json";

            if (!File.Exists(versiondata))
            {
                ErrMsg("Seems like you're using an old JSON dump from an alpha build.\r\nPlease run convert to update the JSON.");
                ConsoleOutput.Clear();
                return;
            }

            try
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(VersionJson));
                var          buf = File.ReadAllBytes(versiondata);
                MemoryStream s   = new MemoryStream(buf);
                var          ver = (VersionJson)ser.ReadObject(s);
                if (!ver.VersionMatches())
                {
                    var  major = VersionJson.VersionMajor;
                    var  minor = VersionJson.VersionMinor;
                    bool newer = (ver.major > major) || (ver.major == major && (ver.minor > minor));
                    ErrMsg("Current JSON dump is for " + (newer ? "a newer" : "an older") + " version of TPDP-Dev-Tools.\r\nPlease run convert to update the JSON.");
                    ConsoleOutput.Clear();
                    return;
                }
            }
            catch (Exception ex)
            {
                ErrMsg("Error reading file: " + versiondata + "\r\n" + ex.Message);
                return;
            }

            working_dir_ = wkdir;

            string pflags = wkdir + (is_ynk_ ? "/gn_dat6.arc/dollImage/img/DollMainGLoadFlag.bin" : "/gn_dat3.arc/doll/img/DollMainGLoadFlag.bin");
            string oflags = wkdir + (is_ynk_ ? "/gn_dat5.arc/map/obj/ObjGLoadFlag.bin" : "/gn_dat3.arc/map/obj/ObjGLoadFlag.bin");
            string eflags = wkdir + (is_ynk_ ? "/gn_dat5.arc/map/obj/ObjFirstActivity.bin" : "/gn_dat3.arc/map/obj/ObjFirstActivity.bin");
            string bgm    = wkdir + (is_ynk_ ? "/gn_dat4.arc/bgm/BgmData.csv" : "/gn_dat2.arc/sound/bgm/BgmData.csv");

            string[] bgmdata;
            try
            {
                puppet_flags_ = File.ReadAllBytes(pflags);
                obj_flags_    = File.ReadAllBytes(oflags);
                event_flags_  = File.ReadAllBytes(eflags);
                bgmdata       = File.ReadAllLines(bgm, Encoding.GetEncoding(932));
            }
            catch (Exception ex)
            {
                ErrMsg("Error: " + ex.Message);
                Reset();
                return;
            }

            foreach (var line in bgmdata)
            {
                var  fields = line.Split(',');
                uint id;
                try
                {
                    id = uint.Parse(fields[0]);
                }
                catch
                {
                    continue;
                }
                var name = fields[1] + ".ogg";

                if (!File.Exists(wkdir + (is_ynk_ ? "/gn_dat4.arc/bgm/" : "/gn_dat2.arc/sound/bgm/") + name))
                {
                    continue;
                }

                bgm_data_[id] = id.ToString() + ": " + name;
            }
            bgm_data_[0] = "None";

            // Parse puppets
            puppets_.Clear();
            try
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DollDataJson));
                var          buf = File.ReadAllBytes(dolldata);
                MemoryStream s   = new MemoryStream(buf);
                var          tmp = (DollDataJson)ser.ReadObject(s);
                foreach (var puppet in tmp.puppets)
                {
                    puppets_[puppet.id] = puppet;
                }
            }
            catch (Exception ex)
            {
                ErrMsg("Error parsing file: " + dolldata + "\r\n" + ex.Message);
                return;
            }

            // Parse puppet names
            string puppetnames = wkdir + (is_ynk_ ? "/gn_dat5.arc/name/DollName.csv" : "/gn_dat3.arc/name/DollName.csv");

            try
            {
                puppet_names_ = File.ReadAllLines(puppetnames, Encoding.GetEncoding(932));
            }
            catch (Exception ex)
            {
                ErrMsg("Error reading file: " + puppetnames + "\r\n" + ex.Message);
                return;
            }

            // Parse map names
            string mapnames = wkdir + (is_ynk_ ? "/gn_dat5.arc/name/MapName.csv" : "/gn_dat3.arc/name/MapName.csv");

            try
            {
                map_names_ = File.ReadAllLines(mapnames, Encoding.GetEncoding(932));
            }
            catch (Exception ex)
            {
                ErrMsg("Error reading file: " + mapnames + "\r\n" + ex.Message);
                return;
            }

            // Parse .mad files
            string mapdir = wkdir + (is_ynk_ ? "/gn_dat5.arc/map/data" : "/gn_dat3.arc/map/data");

            try
            {
                LoadMaps(mapdir);
            }
            catch (Exception ex)
            {
                ErrMsg("Failed to load maps: " + ex.Message);
                Reset();
                return;
            }

            // Parse ability names
            ability_names_.Clear();
            string abl = wkdir + (is_ynk_ ? "/gn_dat6.arc/doll/AbilityData.csv" : "/gn_dat3.arc/doll/ability/AbilityData.csv");

            try
            {
                var abilities = File.ReadAllLines(abl, Encoding.GetEncoding(932));
                foreach (var ability in abilities)
                {
                    var fields = ability.Split(',');
                    if (fields.Length < 2)
                    {
                        continue;
                    }
                    var id   = uint.Parse(fields[0]);
                    var name = fields[1];

                    if (id == 0 || string.IsNullOrEmpty(name))
                    {
                        continue;
                    }

                    if (name.Contains("NULL") || name.Contains("ABL"))
                    {
                        continue;
                    }

                    ability_names_[id] = name;
                }
            }
            catch (Exception ex)
            {
                ErrMsg("Error reading file: " + abl + "\r\n" + ex.Message);
                return;
            }

            // Parse skill names
            skill_names_.Clear();
            skill_descs_.Clear();
            string skl = wkdir + (is_ynk_ ? "/gn_dat6.arc/doll/SkillData.csv" : "/gn_dat3.arc/doll/skill/SkillData.csv");

            try
            {
                var  skills = File.ReadAllLines(skl, Encoding.GetEncoding(932));
                uint count  = 0;
                foreach (var skill in skills)
                {
                    var fields = skill.Split(new char[] { ',' }, is_ynk_ ? 4 : 2);
                    if (fields.Length < (is_ynk_ ? 4 : 2))
                    {
                        continue;
                    }

                    uint id;
                    try
                    {
                        id = is_ynk_ ? uint.Parse(fields[0]) : count++;
                    }
                    catch
                    {
                        continue;
                    }

                    var name = is_ynk_ ? fields[1] : fields[0];
                    var desc = is_ynk_ ? fields[3] : fields[1];

                    if (id == 0 || string.IsNullOrEmpty(name))
                    {
                        continue;
                    }

                    if (name.Contains("SKILL0") || name.Contains("SKILL1"))
                    {
                        continue;
                    }

                    skill_names_[id] = name;
                    skill_descs_[id] = desc;
                }
            }
            catch (Exception ex)
            {
                ErrMsg("Error reading file: " + skl + "\r\n" + ex.Message);
                return;
            }

            // Parse item names
            item_names_.Clear();
            skillcard_names_.Clear();
            string itm = wkdir + (is_ynk_ ? "/gn_dat6.arc/item/ItemData.csv" : "/gn_dat3.arc/item/ItemData.csv");

            try
            {
                var items = File.ReadAllLines(itm, Encoding.GetEncoding(932));
                foreach (var item in items)
                {
                    var fields = item.Split(',');
                    if (fields.Length < 2)
                    {
                        continue;
                    }
                    uint id;
                    try
                    {
                        id = uint.Parse(fields[0]);
                    }
                    catch
                    {
                        continue;
                    }
                    var name = fields[1];

                    if (id == 0 || string.IsNullOrEmpty(name))
                    {
                        continue;
                    }

                    if (name.StartsWith("Item"))
                    {
                        continue;
                    }

                    // Skillcards
                    if (id >= 385 && id <= 512)
                    {
                        /*var index = (is_ynk_ ? 11 : 10);
                         * if(fields.Length <= index)
                         *  throw new Exception("ItemData.csv has too few fields!");
                         * var scname = fields[index];*/
                        var skillid = uint.Parse(fields[9]);

                        if ((skillid > 0) && (skillid < 1023))
                        {
                            skillcard_names_[id] = skill_names_[skillid];

                            /*if(!skill_names_[skillid].Equals(scname, StringComparison.OrdinalIgnoreCase))
                             * {
                             *  string msg = "Note: Skillcard name mismatch! Item \"" + scname + "\" actually teaches \"" + skill_names_[skillid] + "\"\r\n";
                             *  msg += skill_names_[skillid] + " will be displayed in the editor.\r\n";
                             *  ConsoleOutput.AppendText(msg);
                             * }*/
                        }
                        else
                        {
                            //skillcard_names_[id] = scname;
                            skillcard_names_[id] = name;
                        }
                    }

                    item_names_[id] = name;
                }
            }
            catch (Exception ex)
            {
                ErrMsg("Error reading file: " + itm + "\r\n" + ex.Message);
                return;
            }

            // Populate Puppets tab
            try
            {
                LoadPuppets();
            }
            catch (Exception ex)
            {
                ErrMsg("Failed to load puppet data: " + ex.Message);
                Reset();
                return;
            }

            // Populate Trainers tab
            try
            {
                string dods = wkdir + (is_ynk_ ? "/gn_dat5.arc/script/dollOperator" : "/gn_dat3.arc/script/dollOperator");
                LoadTrainers(dods);
            }
            catch (Exception ex)
            {
                ErrMsg("Failed to load trainer data: " + ex.Message);
                Reset();
                return;
            }

            // Populate Skills tab
            try
            {
                string skills = wkdir + (is_ynk_ ? "/gn_dat6.arc/doll/SkillData.json" : "/gn_dat3.arc/doll/skill/SkillData.json");
                LoadSkills(skills);
            }
            catch (Exception ex)
            {
                ErrMsg("Failed to load skill data: " + ex.Message);
                Reset();
                return;
            }

            // Populate Design tab
            try
            {
                LoadDesign();
            }
            catch (Exception ex)
            {
                ErrMsg("Error initializing level designer: " + ex.Message);
                Reset();
                return;
            }

            // Populate Event tab
            try
            {
                LoadEvents();
            }
            catch (Exception ex)
            {
                ErrMsg("Error initializing event editor: " + ex.Message);
                Reset();
                return;
            }

            ConsoleOutput.AppendText("Done.\r\n");

            cfg_.game_dir    = GameDirTextBox.Text;
            cfg_.working_dir = WorkingDirTextBox.Text;
            WriteCfg();
        }