// // Private Static Methods // /// <summary> /// This method patches the company name in the intro screen. /// </summary> /// <remarks> /// Intro Screen Line 1: 0x036EA8 - 0x036EBA (19 chars) /// ©2017 <company name> (13 chars for company, 19 total) /// </remarks> public static void PatchCompanyName(Patch in_Patch, CompanyName in_CompanyName) { const Int32 MAX_LINE_LENGTH = 19; const Int32 INTRO_LINE1_ADDRESS = 0x036EA8; String line = $"©{DateTime.Now.Year} {in_CompanyName.GetCompanyName()}".PadCenter(MAX_LINE_LENGTH); in_Patch.Add( INTRO_LINE1_ADDRESS, line.AsIntroString(), $"Splash Text: {line}"); }
public static void PatchCredits(Patch in_Patch, CompanyName in_CompanyName) { // Credits: Text content and line lengths (Starting with "Special Thanks") CreditTextSet creditTextSet = Properties.Resources.CreditTextConfig.Deserialize <CreditTextSet>(); StringBuilder creditsSb = new StringBuilder(); Int32 k = 0; foreach (CreditText creditText in creditTextSet) { if (true == creditText.Enabled) { in_Patch.Add(0x024C78 + k, (Byte)creditText.Text.Length, $"Credits Line {k} Length"); Byte value = Convert.ToByte(creditText.Value, 16); in_Patch.Add(0x024C3C + k, value, $"Credits Line {k} X-Pos"); k++; // Content of line of text creditsSb.Append(creditText.Text); } } Int32 startChar = 0x024D36; // First Byte of credits text for (Int32 i = 0; i < creditsSb.Length; i++) { in_Patch.Add(startChar, creditsSb[i].AsCreditsCharacter(), $"Credits Char #{i}"); startChar++; } // Last line "Capcom Co.Ltd." String companyName = in_CompanyName.GetCompanyName(); for (Int32 i = 0; i < companyName.Length; i++) { in_Patch.Add(startChar, companyName[i].AsCreditsCharacter(), $"Credits company Char #{i}"); startChar++; } in_Patch.Add(0x024CA4, (Byte)companyName.Length, "Credits Company Line Length"); Int32[] txtRobos = new Int32[8] { 0x024D6B, // Heat 0x024D83, // Air 0x024D9C, // Wood 0x024DB7, // Bubble 0x024DD1, // Quick 0x024DEB, // Flash 0x024E05, // Metal 0x024E1F, // Clash }; Int32[] txtWilys = new Int32[6] { 0x024E54, // Dragon 0x024E6C, // Picopico 0x024E80, // Guts 0x024E97, // Boobeam 0x024EAE, // Machine 0x024EC3, // Alien }; // Write Robot Master damage table StringBuilder sb; for (Int32 i = 0; i < txtRobos.Length; i++) { sb = new StringBuilder(); // Since weaknesses are for the "Room", and the room bosses were shuffled, // obtain the weakness for the boss at this room // TODO: Optimize this mess; when the bossroom is shuffled it should save // a mapping that could be reused here. Int32 newIndex = 0; for (Int32 m = 0; m < RandomMM2.randomBossInBossRoom.Components.Count; m++) { RBossRoom.BossRoomRandomComponent room = RandomMM2.randomBossInBossRoom.Components[m]; if (room.OriginalBossIndex == i) { newIndex = m; break; } } for (Int32 j = 0; j < 9; j++) { Int32 dmg = RWeaknesses.BotWeaknesses[newIndex, j]; sb.Append($"{RText.GetBossWeaknessDamageChar(dmg)} "); } String rowString = sb.ToString().Trim(); for (Int32 j = 0; j < rowString.Length; j++) { in_Patch.Add(txtRobos[i] + j, rowString[j].AsCreditsCharacter(), $"Credits robo weakness table Char #{j + i * rowString.Length}"); } } // Write Wily Boss damage table for (Int32 i = 0; i < txtWilys.Length; i++) { sb = new StringBuilder(); for (Int32 j = 0; j < 8; j++) { Int32 dmg = RWeaknesses.WilyWeaknesses[i, j]; sb.Append($"{RText.GetBossWeaknessDamageChar(dmg)} "); } sb.Remove(sb.Length - 1, 1); String rowString = sb.ToString(); for (Int32 j = 0; j < rowString.Length; j++) { in_Patch.Add(txtWilys[i] + j, rowString[j].AsCreditsCharacter(), $"Credits wily weakness table Char #{j + i * rowString.Length}"); } } }