Ejemplo n.º 1
0
            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");
Ejemplo n.º 2
0
            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)
                    });
                }
            }
Ejemplo n.º 3
0
 public void deserialize(ProjectDeserializer deserializer)
 {
     loadPicsAndPalettes(deserializer);
     loadPaletteIDs(deserializer);
     loadPicTables(deserializer);
     loadGraphicsInfos(deserializer);
     loadObjects(deserializer);
 }
Ejemplo n.º 4
0
            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);
                    }
                }
            }
Ejemplo n.º 5
0
            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");
            }
Ejemplo n.º 6
0
            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);
                }
            }
Ejemplo n.º 7
0
            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");
            }