Skip to content

Commit

Permalink
final 1.3.0 files
Browse files Browse the repository at this point in the history
  • Loading branch information
TheLX5 committed Aug 7, 2024
1 parent 481055a commit 9dd3ee0
Show file tree
Hide file tree
Showing 13 changed files with 1,381 additions and 820 deletions.
1,401 changes: 773 additions & 628 deletions worlds/mmx3/Client.py

Large diffs are not rendered by default.

223 changes: 223 additions & 0 deletions worlds/mmx3/Graphics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
graphics_slots = {
0x00: [0x1A8000, 0x0D0000, 0x030C, 0x03C0],
0x01: [0x1A830C, 0x0D030C, 0x0532, 0x2600],
0x02: [0x1A883E, 0x0D083E, 0x05B8, 0x07A0],
0x03: [0x1A8DF6, 0x0D0DF6, 0x058C, 0x07E0],
0x04: [0x1A9382, 0x0D1382, 0x0312, 0x0400],
0x05: [0x1A9694, 0x0D1694, 0x0633, 0x09A0],
0x06: [0x1A9CC7, 0x0D1CC7, 0x0662, 0x0800],
0x07: [0x1AA329, 0x0D2329, 0x02FB, 0x0400],
0x08: [0x1AA624, 0x0D2624, 0x02D3, 0x0400],
0x09: [0x1AA8F7, 0x0D28F7, 0x0292, 0x0340],
0x0A: [0x1AAB89, 0x0D2B89, 0x0BF4, 0x1000],
0x0B: [0x1AB77D, 0x0D377D, 0x0010, 0x0020],
0x0C: [0x1AB78D, 0x0D378D, 0x5EF5, 0x7760],
0x0D: [0x1B9682, 0x0D9682, 0x541A, 0x7DC0],
0x0E: [0x1BEA9C, 0x0DEA9C, 0x3208, 0x4C00],
0x0F: [0x1C9CA4, 0x0E1CA4, 0x0663, 0x0A00],
0x10: [0x1CA307, 0x0E2307, 0x5614, 0x7C00],
0x11: [0x1CF91A, 0x0E791A, 0x04DA, 0x0900],
0x12: [0x1CFDF4, 0x0E7DF4, 0x06C0, 0x07C0],
0x13: [0x1D84B3, 0x0E84B3, 0x1B11, 0x2600],
0x14: [0x1D9FC3, 0x0E9FC3, 0x01D9, 0x0800],
0x15: [0x1DA19C, 0x0EA19C, 0x0813, 0x0940],
0x16: [0x1DA9AF, 0x0EA9AF, 0x04A5, 0x0600],
0x17: [0x1DAE54, 0x0EAE54, 0x0166, 0x02C0],
0x18: [0x1DAFB9, 0x0EAFB9, 0x02D5, 0x0400],
0x19: [0x1DB28E, 0x0EB28E, 0x00EA, 0x0160],
0x1A: [0x1DB378, 0x0EB378, 0x06E6, 0x0960],
0x1B: [0x1DBA5E, 0x0EBA5E, 0x494D, 0x7DA0],
0x1C: [0x1E83AB, 0x0F03AB, 0x3ED9, 0x75E0],
0x1D: [0x1EC284, 0x0F4284, 0x146F, 0x1800],
0x1E: [0x1ED6F3, 0x0F56F3, 0x0993, 0x0C40],
0x1F: [0x1EE085, 0x0F6085, 0x17B1, 0x1D00],
0x20: [0x1EF836, 0x0F7836, 0x0DAF, 0x1000],
0x21: [0x1F85E5, 0x0F85E5, 0x05F3, 0x0760],
0x22: [0x1F8BD8, 0x0F8BD8, 0x0003, 0x0002],
0x23: [0x1F8BDB, 0x0F8BDB, 0x148D, 0x1B80],
0x24: [0x1FA068, 0x0FA068, 0x03D7, 0x0480],
0x25: [0x1FA43E, 0x0FA43E, 0x0610, 0x0800],
0x26: [0x1FAA4E, 0x0FAA4E, 0x1075, 0x1600],
0x27: [0x1FBAC3, 0x0FBAC3, 0x50FF, 0x7E00],
0x28: [0x208BC2, 0x100BC2, 0x06C7, 0x0A00],
0x29: [0x209289, 0x101289, 0x0277, 0x0400],
0x2A: [0x209500, 0x101500, 0x0052, 0x0800],
0x2B: [0x209552, 0x101552, 0x029C, 0x04C0],
0x2C: [0x2097ED, 0x1017ED, 0x0187, 0x03E0],
0x2D: [0x209974, 0x101974, 0x01C5, 0x02C0],
0x2E: [0x209B39, 0x101B39, 0x00DC, 0x00E0],
0x2F: [0x209C15, 0x101C15, 0x019B, 0x01C0],
0x30: [0x209DAF, 0x101DAF, 0x05F0, 0x07E0],
0x31: [0x20A39F, 0x10239F, 0x03FB, 0x0600],
0x32: [0x20A79A, 0x10279A, 0x0350, 0x03C0],
0x33: [0x20AAEA, 0x102AEA, 0x0628, 0x0800],
0x34: [0x20B112, 0x103112, 0x0410, 0x0560],
0x35: [0x20B522, 0x103522, 0x0098, 0x0200],
0x36: [0x20B5BA, 0x1035BA, 0x0153, 0x0180],
0x37: [0x20B70D, 0x10370D, 0x55CC, 0x5CE0],
0x38: [0x218CD9, 0x108CD9, 0x0133, 0x0160],
0x39: [0x218E0C, 0x108E0C, 0x012E, 0x0420],
0x3A: [0x218F3A, 0x108F3A, 0x03F0, 0x04A0],
0x3B: [0x21932A, 0x10932A, 0x012C, 0x0200],
0x3C: [0x219456, 0x109456, 0x0210, 0x0240],
0x3D: [0x219666, 0x109666, 0x023E, 0x0400],
0x3E: [0x2198A4, 0x1098A4, 0x06D2, 0x0800],
0x3F: [0x219F76, 0x109F76, 0x0287, 0x03A0],
0x40: [0x21A1FD, 0x10A1FD, 0x01C2, 0x0800],
0x41: [0x21A3BF, 0x10A3BF, 0x0168, 0x0280],
0x42: [0x21A526, 0x10A526, 0x16CF, 0x1E60],
0x43: [0x21BBF5, 0x10BBF5, 0x01CE, 0x0200],
0x44: [0x21BDC3, 0x10BDC3, 0x00DD, 0x1000],
0x45: [0x21BEA0, 0x10BEA0, 0x0182, 0x0200],
0x46: [0x21C022, 0x10C022, 0x069F, 0x0700],
0x47: [0x21C6C1, 0x10C6C1, 0x01BA, 0x02E0],
0x48: [0x21C87B, 0x10C87B, 0x12C3, 0x1920],
0x49: [0x21DB3E, 0x10DB3E, 0x0230, 0x02A0],
0x4A: [0x21DD6E, 0x10DD6E, 0x04CF, 0x0600],
0x4B: [0x21E23C, 0x10E23C, 0x05A8, 0x0740],
0x4C: [0x21E7E4, 0x10E7E4, 0x1069, 0x1DA0],
0x4D: [0x21F84D, 0x10F84D, 0x00BF, 0x0800],
0x4E: [0x21F90C, 0x10F90C, 0x0FAF, 0x1460],
0x4F: [0x2288BA, 0x1108BA, 0x0415, 0x0560],
0x50: [0x228CCF, 0x110CCF, 0x0455, 0x0600],
0x51: [0x229123, 0x111123, 0x005C, 0x0800],
0x52: [0x22917F, 0x11117F, 0x0255, 0x0800],
0x53: [0x2293D4, 0x1113D4, 0x0049, 0x0800],
0x54: [0x22941D, 0x11141D, 0x09FA, 0x0B60],
0x55: [0x229E17, 0x111E17, 0x03DC, 0x1000],
0x56: [0x22A1F3, 0x1121F3, 0x011F, 0x0160],
0x57: [0x22A312, 0x112312, 0x06B1, 0x0800],
0x58: [0x22A9C3, 0x1129C3, 0x02F6, 0x0300],
0x59: [0x22ACB9, 0x112CB9, 0x1699, 0x1DE0],
0x5A: [0x22C352, 0x114352, 0x1403, 0x1A00],
0x5B: [0x22D755, 0x115755, 0x01C2, 0x0600],
0x5C: [0x22D917, 0x115917, 0x0007, 0x0020],
0x5D: [0x22D91E, 0x11591E, 0x069B, 0x09C0],
0x5E: [0x22DFB9, 0x115FB9, 0x0155, 0x0240],
0x5F: [0x22E10E, 0x11610E, 0x10A1, 0x14E0],
0x60: [0x22F1AF, 0x1171AF, 0x08F8, 0x0D80],
0x61: [0x22FAA7, 0x117AA7, 0x0199, 0x1000],
0x62: [0x22FC40, 0x117C40, 0x0201, 0x0400],
0x63: [0x22FE41, 0x117E41, 0x0003, 0x0002],
0x64: [0x22FE44, 0x117E44, 0x0266, 0x0800],
0x65: [0x2380AA, 0x1180AA, 0x10E1, 0x1AE0],
0x66: [0x23918B, 0x11918B, 0x0246, 0x0800],
0x67: [0x2393D1, 0x1193D1, 0x0139, 0x0300],
0x68: [0x23950A, 0x11950A, 0x0048, 0x0800],
0x69: [0x239552, 0x119552, 0x0052, 0x0800],
0x6A: [0x2395A4, 0x1195A4, 0x031E, 0x03C0],
0x6B: [0x2398C2, 0x1198C2, 0x0036, 0x0060],
0x6C: [0x2398F8, 0x1198F8, 0x5E32, 0x79A0],
0x6D: [0x23F72A, 0x11F72A, 0x01E4, 0x0800],
0x6E: [0x23F90E, 0x11F90E, 0x0F94, 0x14E0],
0x6F: [0x2488A2, 0x1208A2, 0x0090, 0x0800],
0x70: [0x248932, 0x120932, 0x0135, 0x0220],
0x71: [0x248A67, 0x120A67, 0x0181, 0x03C0],
0x72: [0x248BE8, 0x120BE8, 0x0CF3, 0x0FE0],
0x73: [0x2498DB, 0x1218DB, 0x0BC7, 0x0E00],
0x74: [0x24A4A2, 0x1224A2, 0x1137, 0x1520],
0x75: [0x24B5D8, 0x1235D8, 0x00A7, 0x1000],
0x76: [0x24B67F, 0x12367F, 0x0003, 0x0002],
0x77: [0x24B682, 0x123682, 0x05C6, 0x1000],
0x78: [0x24BC48, 0x123C48, 0x001D, 0x0300],
0x79: [0x24BC65, 0x123C65, 0x48E3, 0x6060],
0x7A: [0x258548, 0x128548, 0x3FFF, 0x5C20],
0x7B: [0x25C547, 0x12C547, 0x3A3A, 0x48C0],
0x7C: [0x25FF81, 0x12FF81, 0x33F9, 0x4D40],
0x7D: [0x26B37A, 0x13337A, 0x0052, 0x0800],
0x7E: [0x26B3CC, 0x1333CC, 0x0036, 0x0060],
0x7F: [0x26B402, 0x133402, 0x02DF, 0x0800],
0x80: [0x26B6E1, 0x1336E1, 0x50B8, 0x6EC0],
0x81: [0x278799, 0x138799, 0x125B, 0x1960],
0x82: [0x2799F4, 0x1399F4, 0x15D2, 0x2000],
0x83: [0x27AFC6, 0x13AFC6, 0x0128, 0x02E0],
0x84: [0x27B0EE, 0x13B0EE, 0x354A, 0x4880],
0x85: [0x27E638, 0x13E638, 0x0166, 0x01C0],
0x86: [0x27E79E, 0x13E79E, 0x0104, 0x1000],
0x87: [0x27E8A2, 0x13E8A2, 0x068E, 0x1000],
0x88: [0x27EF30, 0x13EF30, 0x0316, 0x0400],
0x89: [0x27F246, 0x13F246, 0x040B, 0x0400],
0x8A: [0x27F651, 0x13F651, 0x0770, 0x0A00],
0x8B: [0x27FDC1, 0x13FDC1, 0x00A7, 0x0280],
0x8C: [0x27FE68, 0x13FE68, 0x00FD, 0x0160],
0x8D: [0x27FF64, 0x13FF64, 0x04E4, 0x05A0],
0x8E: [0x288448, 0x140448, 0x044C, 0x0480],
0x8F: [0x288894, 0x140894, 0x012D, 0x0240],
0x90: [0x2889C0, 0x1409C0, 0x0079, 0x0800],
0x91: [0x288A39, 0x140A39, 0x006D, 0x0800],
0x92: [0x288AA6, 0x140AA6, 0x0072, 0x0800],
0x93: [0x288B18, 0x140B18, 0x007F, 0x0800],
0x94: [0x288B97, 0x140B97, 0x017A, 0x03E0],
0x95: [0x288D11, 0x140D11, 0x0187, 0x0300],
0x96: [0x288E97, 0x140E97, 0x013E, 0x0320],
0x97: [0x288FD5, 0x140FD5, 0x01C3, 0x0400],
0x98: [0x289198, 0x141198, 0x01DA, 0x01E0],
0x99: [0x289372, 0x141372, 0x167D, 0x1A00],
0x9A: [0x28A9EE, 0x1429EE, 0x0BC7, 0x11E0],
0x9B: [0x28B5B5, 0x1435B5, 0x007B, 0x0800],
0x9C: [0x28B630, 0x143630, 0x0072, 0x0800],
0x9D: [0x28B6A2, 0x1436A2, 0x0076, 0x0800],
0x9E: [0x28B718, 0x143718, 0x0064, 0x0800],
0x9F: [0x28B77C, 0x14377C, 0x0072, 0x0800],
0xA0: [0x28B7ED, 0x1437ED, 0x006F, 0x0800],
0xA1: [0x28B85C, 0x14385C, 0x0066, 0x0800],
0xA2: [0x28B8C2, 0x1438C2, 0x0732, 0x18A0],
0xA3: [0x28BFF4, 0x143FF4, 0x0525, 0x1000],
0xA4: [0x28C519, 0x144519, 0x0192, 0x01C0],
0xA5: [0x28C6AB, 0x1446AB, 0x0059, 0x0800],
0xA6: [0x28C704, 0x144704, 0x0011, 0x0040],
0xA7: [0x28C715, 0x144715, 0x03AF, 0x0400],
0xA8: [0x28CAC4, 0x144AC4, 0x0160, 0x0200],
0xA9: [0x28CC24, 0x144C24, 0x1265, 0x1800],
0xAA: [0x28DE88, 0x145E88, 0x09A4, 0x0DA0],
0xAB: [0x28E82C, 0x14682C, 0x0658, 0x09A0],
0xAC: [0x28EE84, 0x146E84, 0x0CD5, 0x0FC0],
0xAD: [0x28FB59, 0x147B59, 0x0F3F, 0x12A0],
0xAE: [0x298A98, 0x148A98, 0x0233, 0x0800],
0xAF: [0x298CCB, 0x148CCB, 0x008A, 0x0800],
0xB0: [0x298D55, 0x148D55, 0x15C8, 0x1CE0],
0xB1: [0x29A31D, 0x14A31D, 0x084B, 0x1000],
0xB2: [0x29AB68, 0x14AB68, 0x0072, 0x0800],
0xB3: [0x29ABDA, 0x14ABDA, 0x17BF, 0x2840],
0xB4: [0x29C399, 0x14C399, 0x0051, 0x0800],
0xB5: [0x29C3EA, 0x14C3EA, 0x0003, 0x0002],
0xB6: [0x29C3ED, 0x14C3ED, 0x0003, 0x0002],
0xB7: [0x29C3F0, 0x14C3F0, 0x0003, 0x0002],
0xB8: [0x29C3F3, 0x14C3F3, 0x0003, 0x0002],
0xB9: [0x29C3F6, 0x14C3F6, 0x0003, 0x0002],
0xBA: [0x29C3F9, 0x14C3F9, 0x0003, 0x0002],
0xBB: [0x29C3FC, 0x14C3FC, 0x0003, 0x0002],
0xBC: [0x29C3FF, 0x14C3FF, 0x0003, 0x0002],
0xBD: [0x29C402, 0x14C402, 0x008D, 0x0080],
0xBE: [0x29C48F, 0x14C48F, 0x00F6, 0x0200],
0xBF: [0x29C585, 0x14C585, 0x00D4, 0x0140],
0xC0: [0x29C659, 0x14C659, 0x0112, 0x0200],
0xC1: [0x29C76A, 0x14C76A, 0x021F, 0x0800],
0xC2: [0x29C989, 0x14C989, 0x0166, 0x0800],
0xC3: [0x29CAEF, 0x14CAEF, 0x0048, 0x0800],
0xC4: [0x29CB37, 0x14CB37, 0x06C1, 0x0800],
0xC5: [0x29D1F8, 0x14D1F8, 0x0159, 0x0800],
0xC6: [0x29D350, 0x14D350, 0x026D, 0x0580],
0xC7: [0x29D5BD, 0x14D5BD, 0x10F2, 0x15E0],
0xC8: [0x29E6AF, 0x14E6AF, 0x1409, 0x19E0],
0xC9: [0x29FAB8, 0x14FAB8, 0x0007, 0x0020],
0xCA: [0x29FABF, 0x14FABF, 0x0007, 0x0020],
0xCB: [0x29FAC6, 0x14FAC6, 0x00EE, 0x01C0],
0xCC: [0x29FBB4, 0x14FBB4, 0x12D4, 0x1580],
0xCD: [0x2A8E88, 0x150E88, 0x0DCB, 0x1600],
0xCE: [0x2A9C53, 0x151C53, 0x1811, 0x1C20],
0xCF: [0x2AB464, 0x153464, 0x1858, 0x1E00],
0xD0: [0x2ACCBC, 0x154CBC, 0x0D8D, 0x1520],
0xD1: [0x2ADA49, 0x155A49, 0x0007, 0x0020],
0xD2: [0x2ADA50, 0x155A50, 0x0706, 0x0C20],
0xD3: [0x2AE156, 0x156156, 0x0007, 0x0020],
0xD4: [0x2AE15D, 0x15615D, 0x0007, 0x0020],
0xD5: [0x2AE164, 0x156164, 0x1129, 0x13A0],
0xD6: [0x2AF28C, 0x15728C, 0x0261, 0x02C0],
0xD7: [0x2AF4ED, 0x1574ED, 0x0117, 0x0520],
0xD8: [0x2AF604, 0x157604, 0x06BB, 0x0800],
0xD9: [0x2AFCBF, 0x157CBF, 0x07B1, 0x0980],
0xDA: [0x2AF4ED, 0x1574ED, 0x0117, 0x0520],
0xDB: [0x2AF604, 0x157604, 0x06BB, 0x0800],
0xDC: [0x2AFCBF, 0x157CBF, 0x07B1, 0x0980],
}
6 changes: 3 additions & 3 deletions worlds/mmx3/Options.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ class EnergyLink(DefaultOnToggle):
"""
Enable EnergyLink support.
EnergyLink in MMX3 works as a big HP and Weapon Energy pool that the players can use to request HP
EnergyLink in MMX2 works as a big HP and Weapon Energy pool that the players can use to request HP
or Weapon Energy whenever they need to.
You make use of this feature by typing /pool, /heal <amount>, /refill <amount> or /autoheal in the client.
You make use of this feature by typing /heal <amount> or /refill <amount> in the client.
"""
display_name = "Energy Link"

Expand All @@ -26,7 +26,7 @@ class StartingLifeCount(Range):
"""
display_name = "Starting Life Count"
range_start = 0
range_end = 9
range_end = 99
default = 2

class StartingHP(Range):
Expand Down
19 changes: 11 additions & 8 deletions worlds/mmx3/Regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -433,16 +433,19 @@ def connect_regions(world: World):
connect(world, RegionName.intro_stage, RegionName.dr_doppler_lab)

# Connect Dr. Doppler Lab levels
connect(world, RegionName.dr_doppler_lab, RegionName.dr_doppler_lab_1)

connect(world, RegionName.dr_doppler_lab_1, RegionName.dr_doppler_lab_2)

connect(world, RegionName.dr_doppler_lab_2, RegionName.dr_doppler_lab_3)
if world.options.doppler_all_labs.value:
connect(world, RegionName.dr_doppler_lab, RegionName.dr_doppler_lab_1)
connect(world, RegionName.dr_doppler_lab, RegionName.dr_doppler_lab_2)
connect(world, RegionName.dr_doppler_lab, RegionName.dr_doppler_lab_3)
connect(world, RegionName.dr_doppler_lab, RegionName.dr_doppler_lab_4)
else:
connect(world, RegionName.dr_doppler_lab, RegionName.dr_doppler_lab_1)
connect(world, RegionName.dr_doppler_lab_1, RegionName.dr_doppler_lab_2)
connect(world, RegionName.dr_doppler_lab_2, RegionName.dr_doppler_lab_3)
connect(world, RegionName.dr_doppler_lab_3_boss, RegionName.dr_doppler_lab_4)

connect(world, RegionName.dr_doppler_lab_3, RegionName.dr_doppler_lab_3_rematches)
connect(world, RegionName.dr_doppler_lab_3_rematches, RegionName.dr_doppler_lab_3_boss)

connect(world, RegionName.dr_doppler_lab_3_boss, RegionName.dr_doppler_lab_4)


def create_region(multiworld: MultiWorld, player: int, active_locations, name: str, locations=None):
ret = Region(name, player, multiworld)
Expand Down
37 changes: 33 additions & 4 deletions worlds/mmx3/Rom.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import typing
import bsdiff4
import Utils
import hashlib
import os
from typing import Optional
import io
from pathlib import Path
from pkgutil import get_data

from worlds.AutoWorld import World
from worlds.Files import APProcedurePatch, APTokenMixin, APTokenTypes
from worlds.Files import APProcedurePatch, APTokenMixin, APTokenTypes, APPatchExtension

from .Graphics import graphics_slots

action_names = ("SHOT", "JUMP", "DASH", "SELECT_L", "SELECT_R", "MENU")
action_buttons = ("Y", "B", "A", "L", "R", "X", "START", "SELECT")
Expand Down Expand Up @@ -109,15 +111,43 @@
}


class MMX3PatchExtension(APPatchExtension):
game = "Mega Man X3"

@staticmethod
def relocate_graphics(caller: APProcedurePatch, rom: bytes):
stream = io.BytesIO(rom)
rom = bytearray(rom)
rom += bytearray([0xFF for _ in range(0x100000)])

for _, data in graphics_slots.items():
pc_ptr = data[1]
compressed_size = data[2]
new_pc_ptr = pc_ptr + 0x130000
stream.seek(pc_ptr)
rom[new_pc_ptr:new_pc_ptr + compressed_size] = stream.read(compressed_size)
rom[pc_ptr:pc_ptr + compressed_size] = bytearray([0x00 for _ in range(compressed_size)])

return bytes(rom)

@staticmethod
def output_xml(caller: APProcedurePatch, rom: bytes):
manifest = caller.get_file("mmx3_manifest_for_bsnes.xml")
with open(f"{Path(caller.path).stem}.xml", "wb") as f:
f.write(manifest)
return rom

class MMX3ProcedurePatch(APProcedurePatch, APTokenMixin):
hash = [HASH_US, HASH_LEGACY]
game = "Mega Man X3"
patch_file_ending = ".apmmx3"
result_file_ending = ".sfc"
name: bytearray
procedure = [
("relocate_graphics", []),
("apply_tokens", ["token_patch.bin"]),
("apply_bsdiff4", ["mmx3_basepatch.bsdiff4"]),
("output_xml", []),
]

@classmethod
Expand Down Expand Up @@ -332,7 +362,6 @@ def patch_rom(world: World, patch: MMX3ProcedurePatch):
patch.write_byte(0x17FFF1, value)

patch.write_file("token_patch.bin", patch.get_token_binary())


def get_base_rom_bytes(file_name: str = "") -> bytes:
base_rom_bytes = getattr(get_base_rom_bytes, "base_rom_bytes", None)
Expand Down
Loading

0 comments on commit 9dd3ee0

Please sign in to comment.