Exemplo n.º 1
0
        static LevelScript()
        {
            // Use reflections to detect declared parse methods
            Type t = typeof(LevelScript);

            for (int i = 0; i < size; i++)
            {
                regionParser[i] = RegionParse_common;

                string     name = "RegionParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                RegionParseCmd cmd = Delegate.CreateDelegate(typeof(RegionParseCmd), info) as RegionParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                regionParser[i] = cmd;
            }

            for (int i = 0; i < size; i++)
            {
                relocationParser[i] = RelocationParse_common;

                string     name = "RelocationParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                RelocationParseCmd cmd = Delegate.CreateDelegate(typeof(RelocationParseCmd), info) as RelocationParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                relocationParser[i] = cmd;
            }
        }
Exemplo n.º 2
0
        static DisplayList()
        {
            Type t = typeof(DisplayList);

            for (int i = 0x00; i < 0xFF; i++)
            {
                parser[i] = RegionParse_common;

                string     name = "RegionParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                RegionParseCmd cmd = Delegate.CreateDelegate(typeof(RegionParseCmd), info) as RegionParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                parser[i] = cmd;
            }

            for (int i = 0; i < 0xFF; i++)
            {
                relocationParser[i] = RelocationParse_common;

                string     name = "RelocationParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                RelocationParseCmd cmd = Delegate.CreateDelegate(typeof(RelocationParseCmd), info) as RelocationParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                relocationParser[i] = cmd;
            }
        }
Exemplo n.º 3
0
        public static void PerformRegionParse(ROM rom, List <Region> regions, int offset, bool isOldScrollBehaviour)
        {
            rom.PushOffset(offset);

            RegionParseState state = new RegionParseState
            {
                start = rom.offset,
                isOldBehaviourChecked = isOldScrollBehaviour
            };

            byte curCmdIndex;

            do
            {
                curCmdIndex = rom.Read8();
                byte curCmdSize = rom.Read8(1);

                if (curCmdSize == 0)
                {
                    throw new ArgumentException("cmd size is 0, loop detected");
                }

                RegionParseCmd func = regionParser[curCmdIndex];
                if (func != RegionParse_common)
                {
                    RegionParse_common(rom, regions, state);
                }

                func(rom, regions, state);

                if (curCmdIndex != 0x7)
                {
                    rom.AddOffset(curCmdSize);
                }
            }while (curCmdIndex != terminateCmd);

            rom.PopOffset();
        }
Exemplo n.º 4
0
        public static void PerformRegionParse(ROM rom, List <Region> regions, int offset, out Dictionary <int, List <ScrollObject> > scrolls)
        {
            rom.PushOffset(offset);

            RegionParseState state = new RegionParseState();

            state.start = rom.offset;

            byte curCmdIndex;

            do
            {
                curCmdIndex = rom.Read8();
                byte curCmdSize = rom.Read8(1);

                if (curCmdSize == 0)
                {
                    throw new ArgumentException("cmd size is 0, loop detected");
                }

                RegionParseCmd func = regionParser[curCmdIndex];
                if (func != RegionParse_common)
                {
                    RegionParse_common(rom, regions, state);
                }

                func(rom, regions, state);

                if (curCmdIndex != 0x7)
                {
                    rom.AddOffset(curCmdSize);
                }
            }while (curCmdIndex != terminateCmd);

            rom.PopOffset();
            scrolls = state.scrolls;
        }
Exemplo n.º 5
0
        static Collision()
        {
            Type t = typeof(Collision);

            for (int i = 0x40; i < 0x45; i++)
            {
                parser[i - 0x40] = RegionParse_common;

                string     name = "RegionParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                RegionParseCmd cmd = Delegate.CreateDelegate(typeof(RegionParseCmd), info) as RegionParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                parser[i - 0x40] = cmd;
            }
        }
Exemplo n.º 6
0
        static DisplayList()
        {
            Type t = typeof(DisplayList);

            for (int i = 0x00; i < 0xFF; i++)
            {
                parser[i] = RegionParse_common;

                string     name = "RegionParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                RegionParseCmd cmd = Delegate.CreateDelegate(typeof(RegionParseCmd), info) as RegionParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                parser[i] = cmd;
            }

            for (int i = 0; i < 0xFF; i++)
            {
                fixParser[i] = FixParse_common;

                string     name = "FixParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                FixParseCmd cmd = Delegate.CreateDelegate(typeof(FixParseCmd), info) as FixParseCmd;
                if (cmd == null)
                {
                    continue;
                }

                fixParser[i] = cmd;
            }

            for (int i = 0; i < 0xFF; i++)
            {
                optimizeParser[i] = OptimizeParse_common;

                string     name = "OptimizeParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                OptimizeParserCmd cmd = Delegate.CreateDelegate(typeof(OptimizeParserCmd), info) as OptimizeParserCmd;
                if (cmd == null)
                {
                    continue;
                }

                optimizeParser[i] = cmd;
            }

            for (int i = 0; i < 0xFF; i++)
            {
                visualMapParser[i] = VisualMapParse_common;

                string     name = "VisualMapParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                VisualMapParserCmd cmd = Delegate.CreateDelegate(typeof(VisualMapParserCmd), info) as VisualMapParserCmd;
                if (cmd == null)
                {
                    continue;
                }

                visualMapParser[i] = cmd;
            }

            for (int i = 0; i < 0xFF; i++)
            {
                triangleMapParser[i] = TriangleMapParse_common;

                string     name = "TriangleMapParse_cmd" + string.Format("{0:X2}", i);
                MethodInfo info = t.GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
                if (info == null)
                {
                    continue;
                }

                TriangleMapParserCmd cmd = Delegate.CreateDelegate(typeof(TriangleMapParserCmd), info) as TriangleMapParserCmd;
                if (cmd == null)
                {
                    continue;
                }

                triangleMapParser[i] = cmd;
            }
        }