static void Main(string[] args) { var pointers = LoadTranslationFileLines(args[0]); var strippedPointers = new Dictionary <Int32, PointerText>(); foreach (var pointer in pointers) { if (strippedPointers.ContainsKey(pointer.Address)) { Console.WriteLine("Double pointer found at address {0:X6}", pointer.Address); if (String.IsNullOrEmpty(strippedPointers[pointer.Address].TranslatedSingleLine) && !String.IsNullOrEmpty(pointer.TranslatedSingleLine)) { strippedPointers[pointer.Address].TranslatedSingleLine = pointer.TranslatedSingleLine; } } else { strippedPointers.Add(pointer.Address, pointer); } } var outputFile = new FileInfo(args[1]); PointerText.WritePointersToFile(outputFile, strippedPointers.Values.OrderBy(p => p.Address)); Console.WriteLine("Done..."); Console.ReadLine(); }
public TranslationItemViewModel(PointerText pointerText, ILineLengthService lineLengthService, IDialogService dialogService) { PointerText = pointerText; LineLengthService = lineLengthService; DialogService = dialogService; CalculateInitialLineLengths(); }
static Int32 Main(string[] args) { if (args.Length < 3) { Console.WriteLine("Pass a rom file, output file, start address (HEX) and length to search for (Base 10 Integer)"); return(1); } var rom = new RomDataWrapper(new FileInfo(args[0])); var outputFile = new FileInfo(args[1]); var from = Int32.Parse(args[2], NumberStyles.HexNumber); var distance = Int32.Parse(args[3]); var foundPointers = new List <PointerText>(); for (int i = 0; i < distance; i++) { var foundPointer = rom.GetOriginalPointerInfo(from + i); if (foundPointer.ReferenceCount > 0) { foundPointers.Add(foundPointer); } } PointerText.WritePointersToFile(outputFile, foundPointers); return(0); }
private void AutoSavetranslationFile() { if (TranslationFile == null) { return; } DirectoryInfo autosaveFolder = new DirectoryInfo("autosave"); if (!autosaveFolder.Exists) { autosaveFolder.Create(); autosaveFolder.Refresh(); } var existingFiles = autosaveFolder.GetFiles("*_autosave.txt"); foreach (var file in existingFiles.OrderByDescending(f => f.LastWriteTime).Skip(10)) //TODO: parameter? { file.Delete(); } var baseName = TranslationFile.Name.Substring(0, TranslationFile.Name.Length - TranslationFile.Extension.Length); var backupFileName = String.Format("{0}_{1:yyMMddHHmmss}_autosave.txt", baseName, DateTime.Now); var backupFileInfo = new FileInfo(Path.Combine(autosaveFolder.FullName, backupFileName)); PointerText.WritePointersToFile(backupFileInfo, TranslationLines.Select(l => l.PointerText).OrderBy(l => l.Address)); }
private void WriteTranslationFile(FileInfo outputFile) { PointerText.WritePointersToFile(outputFile, TranslationLines.Select(l => l.PointerText).OrderBy(l => l.Address)); foreach (var line in TranslationLines) { line.HasChangesInMemory = false; } StatusMessage = String.Format("Saved translation to {0}", outputFile.Name); }
private static List <PointerText> LoadTranslationFileLines(String translationFileName) { var translationSourceFile = new FileInfo(translationFileName); if (!translationSourceFile.Exists) { Console.WriteLine("Translation source file {0} does not exist", translationFileName); return(null); } return(PointerText.ReadPointersFromFile(translationSourceFile)); }
static void Main(string[] args) { var rom = new RomDataWrapper(new FileInfo(args[0])); var lines = LoadTranslationFileLines(args[1]); var linesWithReferences = LoadLinereferencesFromRom(rom, lines); var outputFile = new FileInfo(args[2]); PointerText.WritePointersToFile(outputFile, linesWithReferences.OrderBy(l => l.Address)); }
public MainWindowViewModelDesign() : base(new IOServiceMock(), new LineLengthServiceMock()) { TranslationLines.Add(new TranslationItemViewModel(PointerText.FromString("1C5D4B| 1|113|0|D|Introduction |For some people, POKéMON are pets.[br]Others use them for battling.[nb2]As for myself[...][nb2]I study POKéMON as a profession.[nb2]|Voor sommigen zijn POKéMON huisdieren.[br]Anderen gebruiken ze om te vechten[nb2]Ikzelf[...][nb2]Ik bestudeer POKéMON als beroep.[nb2]|1,12FB9C"), new LineLengthServiceMock(), new DialogServiceMock())); TranslationLines.Add(new TranslationItemViewModel(PointerText.FromString("18D8FE| 1|124|0|D|Rival's House |[small][var1] looks dreamily content[...][nb2][fnt]ÈDAISY: There you go! All done.[br]See? Doesn't it look nice?[nb2]Giggle[...][br]It's such a cute POKéMON.|[small][var1] ziet er gelukkig uit[...][nb2][fnt]ÈDAISY: Daar! Helemaal klaar.[br]Is het niet mooi?[nb2]Hihi[...][br]Het is zo een schattige POKéMON.|1,168E2A"), new LineLengthServiceMock(), new DialogServiceMock())); TranslationLines.Add(new TranslationItemViewModel(PointerText.FromString("18EAF4| 1|241|0|D|Oak's Lab |There's an e-mail message here.[nb2][...][nb2]Finally![br]The ultimate TRAINERS of the[nb]POKéMON LEAGUE are ready to[nb]take on all comers![nb2]Bring your best POKéMON and see[br]how you rate as a TRAINER![nb2]POKéMON LEAGUE HQ[br]INDIGO PLATEAU[nb2]PROF. OAK, please visit us![br][...]|Er is een e-mail.[nb2][...][nb2]Eindelijk![br]De ultieme TRAINERS van de[nb]POKéMON LEAGUE zijn klaar om[nb]elke uitdaging te aanvaarden![nb2]Breng je beste POKéMON en zie[br]hoe goed je bent als TRAINER.[nb2]POKéMON LEAGUE HQ[br]INDIGO PLATEAU[nb2]PROF. OAK, kom ons bezoeken![br][...]|1,169E6A"), new LineLengthServiceMock(), new DialogServiceMock())); TranslationLines.Add(new TranslationItemViewModel(PointerText.FromString("18F085| 1| 98|0|D|Oak's Lab |[...] [...] [...] [...] [...] [...][nb2][...] [...] [...] [...] [...] [...][nb2][...]And that's done![nb2]Now these units can record data on[br]a lot more POKéMON.|[...] [...] [...] [...] [...] [...][nb2][...] [...] [...] [...] [...] [...][nb2][...] En klaar![nb2]Nu kunnen er nog meer POKéMON[br]geregistreerd worden.|1,1690D8"), new LineLengthServiceMock(), new DialogServiceMock())); TranslationLines.Add(new TranslationItemViewModel(PointerText.FromString("18F352| 1|236|0|D|Viridian Gym |Fwahahaha![br]Welcome to my hideout![nb2]It shall be so until I can restore[br]TEAM ROCKET to its former glory.[nb2]But, you have found me again.[br]So be it.[nb]This time, I'm not holding back![nb2]Once more, you shall face[br]GIOVANNI, the greatest TRAINER![FC]ÎéÀ|Hahahaha![br]Welkom in mijn schuilplaats![nb2]Hier schuil ik tot als ik[br]TEAM ROCKET in ere kan herstellen.[nb2]Maar je hebt me opnieuw gevonden.[br]deze keer ga ik voluit![nb2]Je mag nog eens vechten tegen[br]GIOVANNI, de beste TRAINER ooit![FC]ÎéÀ|1,169EDD"), new LineLengthServiceMock(), new DialogServiceMock())); TranslationLines.Add(new TranslationItemViewModel(PointerText.FromString("18F4A2| 1|227|0|D|Viridian Gym |Having lost in this fashion, [br]I can't face my followers.[nb]I have betrayed their trust.[nb2]As of today, TEAM ROCKET is[br]finished forever![nb2]As for myself, I shall dedicate[br]my life to training again.[nb2]Let us meet again someday![br]Farewell!|Nu ik zo verloren heb kan ik[br]mijn volgers niet onder ogen komen.[nb]Ik heb hun vertrouwen verraden.[nb2]Vanaf vandaag is TEAM ROCKET[br]voorgoed gedaan.[nb2]Ik ga mijn leven opnieuw[br]aan training wijden.[nb2]Tot nog eens![br]Vaarwel!|1,169EF4"), new LineLengthServiceMock(), new DialogServiceMock())); Filter.Groups.Add("Group 1"); Filter.Groups.Add("Group 2"); Filter.Groups.Add("Group 3"); CurrentTranslationItem = TranslationLines[1]; }
private void LoadtranslationFile(FileInfo translationSourceFile) { TranslationLines.Clear(); Filter.Groups.Clear(); Filter.SelectedGroups.Clear(); foreach (var line in PointerText.ReadPointersFromFile(translationSourceFile)) { if (!Filter.Groups.Contains(line.Group)) { Filter.Groups.Add(line.Group); } TranslationLines.Add(new TranslationItemViewModel(line, _lineLengthService, this)); } autoSaveTimer.Start(); StatusMessage = String.Format("Loaded {0}", translationSourceFile.Name); CurrentLineMessage = String.Format("{0} Lines", TranslationLinesView.Cast <TranslationItemViewModel>().Count()); OnNewFileLoaded(); }
private static void SplitFile(IEnumerable <PointerText> lines, Int32 level, Decimal from, Decimal to, DirectoryInfo outDir) { var newName = String.Format("{0:0.00}-{1:0.00}.txt", from, to); var newFile = new FileInfo(Path.Combine(outDir.FullName, newName)); PointerText.WritePointersToFile(newFile, lines); level -= 1; if (level == 0) { return; } var halfwayLines = lines.Count() / 2; var halfway = (from + to) / 2; SplitFile(lines.Take(halfwayLines), level, from, halfway, outDir); SplitFile(lines.Skip(halfwayLines), level, halfway, to, outDir); }
static void Main(string[] args) { if (args.Length < 3) { Console.WriteLine("Pass at elast one rom file, output file, and existing translation file"); } var rom = new RomDataWrapper(new FileInfo(args[0])); var tmpRomData = new Byte[rom.RomContents.Length - (skipBlockEnd - skipBlockStart)]; Array.Copy(rom.RomContents, tmpRomData, skipBlockStart); Array.Copy(rom.RomContents, skipBlockEnd, tmpRomData, skipBlockStart, rom.RomContents.Length - skipBlockEnd); var romWithHole = new RomDataWrapper(tmpRomData); FileInfo outputFile = new FileInfo(args[1]); var pointers = new List <PointerText>(); for (int i = 2; i < args.Length; i++) { pointers.AddRange(PointerText.ReadPointersFromFile(new FileInfo(args[i]))); } pointers = pointers.OrderBy(p => p.Address).ToList(); foreach (var pointer in pointers) { if (pointer.Address > skipBlockEnd) { pointer.Address -= (skipBlockEnd - skipBlockStart); } } var blocks = new List <ValueTuple <Int32, Int32> >(); var block = (pointers[0].Address, pointers[0].Address + pointers[0].AvailableLength); foreach (var pointer in pointers.Skip(1)) { if (block.Item2 + 1 == pointer.Address) { block = (block.Item1, pointer.Address + pointer.AvailableLength); } else { blocks.Add(block); block = (pointer.Address, pointer.Address + pointer.AvailableLength); } } ProcessBlocks(blocks, romWithHole); for (int i = 0; i < newTranslationLines.Count; i++) { if (newTranslationLines[i] > skipBlockStart) { newTranslationLines[i] += (skipBlockEnd - skipBlockStart); } } var linesToTranslate = LoadNewTranslationLines(rom); Console.Write("\rReading progress: 100% "); Console.WriteLine(); Console.WriteLine("Writing missed text entries to file."); PointerText.WritePointersToFile(outputFile, linesToTranslate.OrderBy(l => l.Address)); Console.WriteLine("Done, press any key to continue..."); Console.ReadLine(); }