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; } }
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; } }
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(); }
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; }
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; } }
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; } }