private static void FixParse_cmdF8(ROM rom, DisplayListRegion region, RegionFixState state) { if (state.config.disableFog) { rom.Write64(0); } }
private static void FixParse_cmdBC(ROM rom, DisplayListRegion region, RegionFixState state) { if (state.config.disableFog) { rom.Write64(0); return; } if (state.config.nerfFog) { float A = rom.Read16(4); float B = rom.Read16(6); float min = 500 * (1 - B / A); float max = 128000 / A + min; // nerf fog min += 5; A = 128000 / (max - min); B = (500 - min) * 256 / (max - min); int Aint = (int)A; int Bint = (int)B; rom.Write16(Aint, 4); rom.Write16(Bint, 6); } }
private static void FixParse_cmdB9(ROM rom, DisplayListRegion region, RegionFixState state) { if (state.config.disableFog) { rom.Write64(0); return; } if (!state.config.fixOtherMode) { return; } if (!region.isFogEnabled) { return; } if ((ulong)rom.Read64(-8) != 0xBA00140200000000 || (ulong)rom.Read64(8) != 0xB600000000010000) { return; } UInt64 B9Cmd = OtherMode.GetB9Cmd(region.layer); if (B9Cmd != 0) { rom.Write64(B9Cmd); } }
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); }
private static void FixParse_cmdFC(ROM rom, DisplayListRegion region, RegionFixState state) { if (!state.config.fixCombiners) { return; } if (state.FCCountFixed != 0) { return; } CombinerCommand cmd = CombinerCommand.GetNewCombiner(region); UInt64 FCCmd = cmd.GetFCcmd(); if (FCCmd != 0) { state.FCCountFixed++; rom.Write64(FCCmd); } }
private static void FixParse_common(ROM rom, DisplayListRegion region, RegionFixState state) { }