public static void PerformRegionFix(ROM rom, Region region, FixConfig config) { RegionFixState state = new RegionFixState(config); DisplayListRegion dlRegion = (DisplayListRegion)region; rom.PushOffset(region.romStart); byte curCmdIndex; do { curCmdIndex = rom.Read8(); FixParseCmd func = fixParser[curCmdIndex]; func(rom, dlRegion, state); rom.AddOffset(8); }while (rom.offset < region.romStart + region.length); rom.PopOffset(); rom.ReadData(region.romStart, region.length, region.data); }
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; } }