def createDungeonOnlyOverworld(rom): # Skip the whole egg maze. rom.patch(0x14, 0x0453, "75", "73") # Some sprite patches (should generalize this) rom.room_sprite_data_overworld[0x72] = b'\xff\xff\xff\xff' rom.room_sprite_data_overworld[0x73] = rom.room_sprite_data_overworld[0x8C] rom.room_sprite_data_overworld[0xB1] = rom.room_sprite_data_overworld[0x92] instrument_rooms = [ 0x102, 0x12A, 0x159, 0x162, 0x182, 0x1B5, 0x22C, 0x230, 0x301 ] # Start with clearing all the maps, because this just generates a bunch of room in the rom. for n in range(0x100): re = RoomEditor(rom, n) re.entities = [] re.objects = [] if os.path.exists("patches/overworld/%02X.json" % (n)): re.loadFromJson("patches/overworld/%02X.json" % (n)) re.updateOverlay() entrances = list( filter( lambda obj: obj.type_id in (0xE1, 0xE2, 0xE3, 0xBA, 0xA8, 0xBE, 0xCB), re.objects)) for obj in re.objects: if isinstance(obj, ObjectWarp) and entrances: e = entrances.pop(0) other = RoomEditor(rom, obj.room) for o in other.objects: if isinstance(o, ObjectWarp) and o.warp_type == 0: o.room = n o.target_x = e.x * 16 + 8 o.target_y = e.y * 16 + 16 other.store(rom) if obj.room == 0x1F5: # Patch the boomang guy exit rom.patch( 0x0a, 0x3891, "E000F41820", "E000%02x%02x%02x" % (n, e.x * 16 + 8, e.y * 16 + 16)) if obj.warp_type == 1 and obj.map_nr < 8 or obj.map_nr == 0xFF: other = RoomEditor(rom, instrument_rooms[min(8, obj.map_nr)]) for o in other.objects: if isinstance(o, ObjectWarp) and o.warp_type == 0: o.room = n o.target_x = e.x * 16 + 8 o.target_y = e.y * 16 + 16 other.store(rom) if n == 0x06: re.objects.insert(0, Object(5, 3, 0xE1)) re.store(rom)
def createDungeonOnlyOverworld(rom): # Skip the whole egg maze. rom.patch(0x14, 0x0453, "75", "73") instrument_rooms = [ 0x102, 0x12A, 0x159, 0x162, 0x182, 0x1B5, 0x22C, 0x230, 0x301 ] path = os.path.dirname(__file__) # Start with clearing all the maps, because this just generates a bunch of room in the rom. for n in range(0x100): re = RoomEditor(rom, n) re.entities = [] re.objects = [] if os.path.exists("%s/overworld/dive/%02X.json" % (path, n)): re.loadFromJson("%s/overworld/dive/%02X.json" % (path, n)) entrances = list( filter(lambda obj: obj.type_id in WARP_TYPE_IDS, re.objects)) for obj in re.objects: if isinstance(obj, ObjectWarp) and entrances: e = entrances.pop(0) other = RoomEditor(rom, obj.room) for o in other.objects: if isinstance(o, ObjectWarp) and o.warp_type == 0: o.room = n o.target_x = e.x * 16 + 8 o.target_y = e.y * 16 + 16 other.store(rom) if obj.room == 0x1F5: # Patch the boomang guy exit other = RoomEditor(rom, "Alt1F5") other.getWarps()[0].room = n other.getWarps()[0].target_x = e.x * 16 + 8 other.getWarps()[0].target_y = e.y * 16 + 16 other.store(rom) if obj.warp_type == 1 and (obj.map_nr < 8 or obj.map_nr == 0xFF ) and obj.room not in (0x1B0, 0x23A, 0x23D): other = RoomEditor(rom, instrument_rooms[min(8, obj.map_nr)]) for o in other.objects: if isinstance(o, ObjectWarp) and o.warp_type == 0: o.room = n o.target_x = e.x * 16 + 8 o.target_y = e.y * 16 + 16 other.store(rom) re.store(rom)