void loadGraphicsInfos(ProjectDeserializer deserializer) { deserializer.deserializeFile(new CustomDeserializer((line, _) => { if (!line.tryExtractPrefix("const struct ObjectEventGraphicsInfo ", " ", out string cppVar)) { return(false); } var info = new OldGraphicsInfo() { CppVariable = cppVar }; cppVarToGraphicsInfo.Add(cppVar, info); string[] elements = line[(line.IndexOf('{') + 1)..(line.Length - 2)].Split(", "); info.Palette = idToPalette[elements[1]]; info.ReflectionPalette = elements[2]; info.Width = int.Parse(elements[4]); info.Height = int.Parse(elements[5]); info.PaletteSlot = int.Parse(elements[6]); info.ShadowSize = elements[7].Remove(0, "SHADOW_SIZE_".Length); info.Inanimate = elements[8][0] != 'F'; info.EnableReflectionPaletteLoad = elements[9][0] == 'F'; info.Tracks = elements[10].Remove(0, "TRACKS_".Length); info.Animations = varToAnimTable[elements[13]]; info.PicTable = varToPicTable.GetValue(elements[14]); info.AffineAnimations = elements[15]; return(true); }), "src", "data", "object_events", "object_event_graphics_info.h");
public void convert(ProjectDeserializer projectDeserializer, ObservableCollection <EventObject> objects) { List <OldEventObject> oldObjects = new List <OldEventObject>(); // Deserialize the project in the old format. Deserializer deserializer = new Deserializer(varToAnimTable, nonObjectGraphicsInfos, oldObjects, pics, varToPalette); deserializer.deserialize(projectDeserializer); // Populate the project with the new format. populateWithNewFormat(); // Convert the old object event format to the proper format. foreach (OldEventObject oldObject in oldObjects) { objects.Add(new EventObject() { Identifier = oldObject.Identifier.fromSnakeToPascal(), Palette = oldObject.Info.Palette, ReflectionPalette = oldObject.Info.ReflectionPalette, Width = oldObject.Info.Width, Height = oldObject.Info.Height, PaletteSlot = oldObject.Info.PaletteSlot, ShadowSize = oldObject.Info.ShadowSize, Inanimate = oldObject.Info.Inanimate, EnableReflectionPaletteLoad = oldObject.Info.EnableReflectionPaletteLoad, Tracks = oldObject.Info.Tracks, Animations = oldObject.Info.Animations, AffineAnimations = oldObject.Info.AffineAnimations, Frames = new ObservableCollection <EventObject.Frame>(oldObject.Info.PicTable.Frames) }); } }
public void deserialize(ProjectDeserializer deserializer) { loadPicsAndPalettes(deserializer); loadPaletteIDs(deserializer); loadPicTables(deserializer); loadGraphicsInfos(deserializer); loadObjects(deserializer); }
void loadObjects(ProjectDeserializer deserializer) { var usedInfos = new HashSet <string>(); var fileDeserializer = new FileDeserializer(); fileDeserializer.add((currentLine, _) => { if (!currentLine.tryExtractPrefix("const struct ObjectEventGraphicsInfo ", ";", out string cppVar)) { return(false); } if (!cppVarToGraphicsInfo.ContainsKey(cppVar)) { cppVarToGraphicsInfo.Add(cppVar, new OldGraphicsInfo() { CppVariable = cppVar }); } return(true); }); fileDeserializer.add((currentLine, _) => { if (!currentLine.tryExtractPrefix("[OBJ_EVENT_GFX_", "]", out string objectID)) { return(false); } int skipLen = currentLine.LastIndexOf('&') + 1; string infoVar = currentLine.Substring(skipLen, currentLine.Length - skipLen - 1); objects.Add(new OldEventObject() { Identifier = objectID, Info = cppVarToGraphicsInfo[infoVar] }); usedInfos.Add(infoVar); return(true); }); deserializer.deserializeFile(fileDeserializer, "src", "data", "object_events", "object_event_graphics_info_pointers.h"); // Check for any graphics info objects that aren't used by event objects. foreach (OldGraphicsInfo info in cppVarToGraphicsInfo.Values) { if (!usedInfos.Contains(info.CppVariable)) { nonObjectGraphicsInfos.Add(info); } } }
void loadPaletteIDs(ProjectDeserializer deserializer) { var paletteDeserializer = new InlineStructDeserializer((vals) => { string cppVar = vals[0], fullId = vals[1]; if (!varToPalette.TryGetValue(cppVar, out EventObjectPalette pal)) { idToPalette.Add(fullId, EventObjectPalette.GenerateFromFileInst); } else { pal.Identifier = fullId.Remove(0, "OBJ_EVENT_PAL_TAG_".Length); idToPalette.Add(fullId, pal); } }); var palArrayDeserializer = new ArrayDeserializer(paletteDeserializer, "sObjectEventSpritePalettes"); deserializer.deserializeFile(palArrayDeserializer, "src", "event_object_movement.c"); }
void loadPicsAndPalettes(ProjectDeserializer deserializer) { var picPaths = new HashSet <string>(); var fileDeserializer = new FileDeserializer(); fileDeserializer.add(new IncBinDeserializer("gObjectEventPic_", "u32", (cppVar, fileName) => { string path = Path.ChangeExtension(fileName, ".png"); var pic = new EventObjectPic() { Identifier = cppVar, Path = Path.ChangeExtension(path.Remove(0, "graphics/object_events/pics/".Length), null), FullPath = Path.Combine(deserializer.project.ProjectDir, path) }; picPaths.Add(path); idToPic.Add(cppVar, pic); pics.Add(pic); })); fileDeserializer.add(new IncBinDeserializer("gObjectEventPalette", "u16", (cppVar, fileName) => { cppVar = "gObjectEventPalette" + cppVar; varToPalette.Add(cppVar, new EventObjectPalette() { Identifier = cppVar.fromPascalToSnake(), FilePath = fileName }); })); deserializer.deserializeFile(fileDeserializer, "src", "data", "object_events", "object_event_graphics.h"); // Remove all of the palettes whose file paths match a present picture, these // palettes will be generated from that image. var toRemove = new List <string>(); foreach (KeyValuePair <string, EventObjectPalette> kv in varToPalette) { if (picPaths.Contains(kv.Value.FilePath + ".png")) { toRemove.Add(kv.Key); } } foreach (string key in toRemove) { varToPalette.Remove(key); } }
void loadPicTables(ProjectDeserializer deserializer) { deserializer.deserializeFile((stream) => { if (!stream.ReadLine().tryExtractPrefix("const struct SpriteFrameImage gObjectEventPicTable_", "[", out string cppVar)) { return; } var table = new OldEventObjectPicTable() { CppVar = "gObjectEventPicTable_" + cppVar }; do { string line = stream.ReadLine().Trim(); if (line.StartsWith("}")) { break; } if (line.StartsWith("obj_frame_tiles")) { int skipLen = line.IndexOf('(') + "(gObjectEventPic_".Length; table.Frames.Add(new EventObject.Frame() { Pic = idToPic[line.Substring(skipLen, line.Length - skipLen - 2)], }); continue; } line = line.Remove(0, "overworld_frame(gObjectEventPic_".Length); string[] elements = line.Remove(line.Length - "),".Length).Split(", "); table.Frames.Add(new EventObject.Frame() { Pic = idToPic[elements[0]], Index = int.Parse(elements[3]) }); } while (true); varToPicTable.Add(table); }, "src", "data", "object_events", "object_event_pic_tables.h"); }