mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
544 lines
18 KiB
Python
544 lines
18 KiB
Python
import os
|
|
import struct
|
|
import glob
|
|
|
|
# 1. Update these tables to fit your project:
|
|
# FRLG_BEHAVIORS, EMERALD_BEHAVIORS and FRLG_TO_EMERALD
|
|
|
|
# 2. Change the ATTRIBUTES_PATH
|
|
# Example:
|
|
# .
|
|
# |-- <script folder>
|
|
# |-- frlg_metatile_behavior_converter.py
|
|
# |-- frlg_tilesets
|
|
# |-- primary
|
|
# |-- building
|
|
# |-- metatile_attributes.bin
|
|
# |-- ...
|
|
# |-- secondary
|
|
# |-- cave
|
|
# |-- metatile_attributes.bin
|
|
# |-- ...
|
|
#
|
|
# in this case:
|
|
# ATTRIBUTES_PATH = "frlg_tilesets/**/**/metatile_attributes.bin"
|
|
|
|
# 3. Run the script in the script folder:
|
|
# python frlg_metatile_behavior_converter.py
|
|
|
|
# CHANGE THIS
|
|
ATTRIBUTES_PATH = "path/to/metatile_attributes.bin"
|
|
|
|
|
|
FRLG_BEHAVIORS = {
|
|
0x00: 'MB_FRLG_NORMAL',
|
|
0x01: 'MB_FRLG_UNUSED_01',
|
|
0x02: 'MB_FRLG_TALL_GRASS',
|
|
0x08: 'MB_FRLG_CAVE',
|
|
0x0A: 'MB_FRLG_RUNNING_DISALLOWED',
|
|
0x0B: 'MB_FRLG_INDOOR_ENCOUNTER',
|
|
0x0C: 'MB_FRLG_MOUNTAIN_TOP',
|
|
0x10: 'MB_FRLG_POND_WATER',
|
|
0x11: 'MB_FRLG_FAST_WATER',
|
|
0x12: 'MB_FRLG_DEEP_WATER',
|
|
0x13: 'MB_FRLG_WATERFALL',
|
|
0x15: 'MB_FRLG_OCEAN_WATER',
|
|
0x16: 'MB_FRLG_PUDDLE',
|
|
0x17: 'MB_FRLG_SHALLOW_WATER',
|
|
0x19: 'MB_FRLG_UNDERWATER_BLOCKED_ABOVE',
|
|
0x1A: 'MB_FRLG_UNUSED_WATER',
|
|
0x1B: 'MB_FRLG_CYCLING_ROAD_WATER',
|
|
0x20: 'MB_FRLG_STRENGTH_BUTTON',
|
|
0x21: 'MB_FRLG_SAND',
|
|
0x22: 'MB_FRLG_SEAWEED',
|
|
0x23: 'MB_FRLG_ICE',
|
|
0x26: 'MB_FRLG_THIN_ICE',
|
|
0x27: 'MB_FRLG_CRACKED_ICE',
|
|
0x28: 'MB_FRLG_HOT_SPRINGS',
|
|
0x2A: 'MB_FRLG_ROCK_STAIRS',
|
|
0x2B: 'MB_FRLG_SAND_CAVE',
|
|
0x30: 'MB_FRLG_IMPASSABLE_EAST',
|
|
0x31: 'MB_FRLG_IMPASSABLE_WEST',
|
|
0x32: 'MB_FRLG_IMPASSABLE_NORTH',
|
|
0x33: 'MB_FRLG_IMPASSABLE_SOUTH',
|
|
0x34: 'MB_FRLG_IMPASSABLE_NORTHEAST',
|
|
0x35: 'MB_FRLG_IMPASSABLE_NORTHWEST',
|
|
0x36: 'MB_FRLG_IMPASSABLE_SOUTHEAST',
|
|
0x37: 'MB_FRLG_IMPASSABLE_SOUTHWEST',
|
|
0x38: 'MB_FRLG_JUMP_EAST',
|
|
0x39: 'MB_FRLG_JUMP_WEST',
|
|
0x3A: 'MB_FRLG_JUMP_NORTH',
|
|
0x3B: 'MB_FRLG_JUMP_SOUTH',
|
|
0x40: 'MB_FRLG_WALK_EAST',
|
|
0x41: 'MB_FRLG_WALK_WEST',
|
|
0x42: 'MB_FRLG_WALK_NORTH',
|
|
0x43: 'MB_FRLG_WALK_SOUTH',
|
|
0x44: 'MB_FRLG_SLIDE_EAST',
|
|
0x45: 'MB_FRLG_SLIDE_WEST',
|
|
0x46: 'MB_FRLG_SLIDE_NORTH',
|
|
0x47: 'MB_FRLG_SLIDE_SOUTH',
|
|
0x48: 'MB_FRLG_TRICK_HOUSE_PUZZLE_8_FLOOR',
|
|
0x50: 'MB_FRLG_EASTWARD_CURRENT',
|
|
0x51: 'MB_FRLG_WESTWARD_CURRENT',
|
|
0x52: 'MB_FRLG_NORTHWARD_CURRENT',
|
|
0x53: 'MB_FRLG_SOUTHWARD_CURRENT',
|
|
0x54: 'MB_FRLG_SPIN_RIGHT',
|
|
0x55: 'MB_FRLG_SPIN_LEFT',
|
|
0x56: 'MB_FRLG_SPIN_UP',
|
|
0x57: 'MB_FRLG_SPIN_DOWN',
|
|
0x58: 'MB_FRLG_STOP_SPINNING',
|
|
0x60: 'MB_FRLG_CAVE_DOOR',
|
|
0x61: 'MB_FRLG_LADDER',
|
|
0x62: 'MB_FRLG_EAST_ARROW_WARP',
|
|
0x63: 'MB_FRLG_WEST_ARROW_WARP',
|
|
0x64: 'MB_FRLG_NORTH_ARROW_WARP',
|
|
0x65: 'MB_FRLG_SOUTH_ARROW_WARP',
|
|
0x66: 'MB_FRLG_FALL_WARP',
|
|
0x67: 'MB_FRLG_REGULAR_WARP',
|
|
0x68: 'MB_FRLG_LAVARIDGE_1F_WARP',
|
|
0x69: 'MB_FRLG_WARP_DOOR',
|
|
0x6A: 'MB_FRLG_UP_ESCALATOR',
|
|
0x6B: 'MB_FRLG_DOWN_ESCALATOR',
|
|
0x6C: 'MB_FRLG_UP_RIGHT_STAIR_WARP',
|
|
0x6D: 'MB_FRLG_UP_LEFT_STAIR_WARP',
|
|
0x6E: 'MB_FRLG_DOWN_RIGHT_STAIR_WARP',
|
|
0x6F: 'MB_FRLG_DOWN_LEFT_STAIR_WARP',
|
|
0x71: 'MB_FRLG_UNION_ROOM_WARP',
|
|
0x80: 'MB_FRLG_COUNTER',
|
|
0x81: 'MB_FRLG_BOOKSHELF',
|
|
0x82: 'MB_FRLG_POKEMART_SHELF',
|
|
0x83: 'MB_FRLG_PC',
|
|
0x84: 'MB_FRLG_SIGNPOST',
|
|
0x85: 'MB_FRLG_REGION_MAP',
|
|
0x86: 'MB_FRLG_TELEVISION',
|
|
0x87: 'MB_FRLG_POKEMON_CENTER_SIGN',
|
|
0x88: 'MB_FRLG_POKEMART_SIGN',
|
|
0x89: 'MB_FRLG_CABINET',
|
|
0x8A: 'MB_FRLG_KITCHEN',
|
|
0x8B: 'MB_FRLG_DRESSER',
|
|
0x8C: 'MB_FRLG_SNACKS',
|
|
0x8D: 'MB_FRLG_CABLE_CLUB_WIRELESS_MONITOR',
|
|
0x8E: 'MB_FRLG_BATTLE_RECORDS',
|
|
0x8F: 'MB_FRLG_QUESTIONNAIRE',
|
|
0x90: 'MB_FRLG_FOOD',
|
|
0x91: 'MB_FRLG_INDIGO_PLATEAU_SIGN_1',
|
|
0x92: 'MB_FRLG_INDIGO_PLATEAU_SIGN_2',
|
|
0x93: 'MB_FRLG_BLUEPRINTS',
|
|
0x94: 'MB_FRLG_PAINTING',
|
|
0x95: 'MB_FRLG_POWER_PLANT_MACHINE',
|
|
0x96: 'MB_FRLG_TELEPHONE',
|
|
0x97: 'MB_FRLG_COMPUTER',
|
|
0x98: 'MB_FRLG_ADVERTISING_POSTER',
|
|
0x99: 'MB_FRLG_FOOD_SMELLS_TASTY',
|
|
0x9A: 'MB_FRLG_TRASH_BIN',
|
|
0x9B: 'MB_FRLG_CUP',
|
|
0x9C: 'MB_FRLG_PORTHOLE',
|
|
0x9D: 'MB_FRLG_WINDOW',
|
|
0x9E: 'MB_FRLG_BLINKING_LIGHTS',
|
|
0x9F: 'MB_FRLG_NEATLY_LINED_UP_TOOLS',
|
|
0xA0: 'MB_FRLG_IMPRESSIVE_MACHINE',
|
|
0xA1: 'MB_FRLG_VIDEO_GAME',
|
|
0xA2: 'MB_FRLG_BURGLARY',
|
|
0xA3: 'MB_FRLG_TRAINER_TOWER_MONITOR',
|
|
0xD0: 'MB_FRLG_CYCLING_ROAD_PULL_DOWN',
|
|
0xD1: 'MB_FRLG_CYCLING_ROAD_PULL_DOWN_GRASS',
|
|
}
|
|
|
|
EMERALD_BEHAVIORS = {
|
|
'MB_NORMAL': 0,
|
|
'MB_SECRET_BASE_WALL': 1,
|
|
'MB_TALL_GRASS': 2,
|
|
'MB_LONG_GRASS': 3,
|
|
'MB_UNUSED_04': 4,
|
|
'MB_UNUSED_05': 5,
|
|
'MB_DEEP_SAND': 6,
|
|
'MB_SHORT_GRASS': 7,
|
|
'MB_CAVE': 8,
|
|
'MB_LONG_GRASS_SOUTH_EDGE': 9,
|
|
'MB_NO_RUNNING': 10,
|
|
'MB_INDOOR_ENCOUNTER': 11,
|
|
'MB_MOUNTAIN_TOP': 12,
|
|
'MB_BATTLE_PYRAMID_WARP': 13,
|
|
'MB_MOSSDEEP_GYM_WARP': 14,
|
|
'MB_MT_PYRE_HOLE': 15,
|
|
'MB_POND_WATER': 16,
|
|
'MB_INTERIOR_DEEP_WATER': 17,
|
|
'MB_DEEP_WATER': 18,
|
|
'MB_WATERFALL': 19,
|
|
'MB_SOOTOPOLIS_DEEP_WATER': 20,
|
|
'MB_OCEAN_WATER': 21,
|
|
'MB_PUDDLE': 22,
|
|
'MB_SHALLOW_WATER': 23,
|
|
'MB_UNUSED_SOOTOPOLIS_DEEP_WATER': 24,
|
|
'MB_NO_SURFACING': 25,
|
|
'MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2': 26,
|
|
'MB_STAIRS_OUTSIDE_ABANDONED_SHIP': 27,
|
|
'MB_SHOAL_CAVE_ENTRANCE': 28,
|
|
'MB_SIGNPOST': 29,
|
|
'MB_POKEMON_CENTER_SIGN': 30,
|
|
'MB_POKEMART_SIGN': 31,
|
|
'MB_ICE': 32,
|
|
'MB_SAND': 33,
|
|
'MB_SEAWEED': 34,
|
|
'MB_STRENGTH_BUTTON': 35,
|
|
'MB_ASHGRASS': 36,
|
|
'MB_FOOTPRINTS': 37,
|
|
'MB_THIN_ICE': 38,
|
|
'MB_CRACKED_ICE': 39,
|
|
'MB_HOT_SPRINGS': 40,
|
|
'MB_LAVARIDGE_GYM_B1F_WARP': 41,
|
|
'MB_SEAWEED_NO_SURFACING': 42,
|
|
'MB_REFLECTION_UNDER_BRIDGE': 43,
|
|
'MB_FAST_WATER': 44,
|
|
'MB_CYCLING_ROAD_WATER': 45,
|
|
'MB_UNUSED_2E': 46,
|
|
'MB_UNUSED_2F': 47,
|
|
'MB_IMPASSABLE_EAST': 48,
|
|
'MB_IMPASSABLE_WEST': 49,
|
|
'MB_IMPASSABLE_NORTH': 50,
|
|
'MB_IMPASSABLE_SOUTH': 51,
|
|
'MB_IMPASSABLE_NORTHEAST': 52,
|
|
'MB_IMPASSABLE_NORTHWEST': 53,
|
|
'MB_IMPASSABLE_SOUTHEAST': 54,
|
|
'MB_IMPASSABLE_SOUTHWEST': 55,
|
|
'MB_JUMP_EAST': 56,
|
|
'MB_JUMP_WEST': 57,
|
|
'MB_JUMP_NORTH': 58,
|
|
'MB_JUMP_SOUTH': 59,
|
|
'MB_JUMP_NORTHEAST': 60,
|
|
'MB_JUMP_NORTHWEST': 61,
|
|
'MB_JUMP_SOUTHEAST': 62,
|
|
'MB_JUMP_SOUTHWEST': 63,
|
|
'MB_WALK_EAST': 64,
|
|
'MB_WALK_WEST': 65,
|
|
'MB_WALK_NORTH': 66,
|
|
'MB_WALK_SOUTH': 67,
|
|
'MB_SLIDE_EAST': 68,
|
|
'MB_SLIDE_WEST': 69,
|
|
'MB_SLIDE_NORTH': 70,
|
|
'MB_SLIDE_SOUTH': 71,
|
|
'MB_TRICK_HOUSE_PUZZLE_8_FLOOR': 72,
|
|
'MB_SIDEWAYS_STAIRS_RIGHT_SIDE': 73,
|
|
'MB_SIDEWAYS_STAIRS_LEFT_SIDE': 74,
|
|
'MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP': 75,
|
|
'MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP': 76,
|
|
'MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM': 77,
|
|
'MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM': 78,
|
|
'MB_ROCK_STAIRS': 79,
|
|
'MB_EASTWARD_CURRENT': 80,
|
|
'MB_WESTWARD_CURRENT': 81,
|
|
'MB_NORTHWARD_CURRENT': 82,
|
|
'MB_SOUTHWARD_CURRENT': 83,
|
|
'MB_SPIN_RIGHT': 84,
|
|
'MB_SPIN_LEFT': 85,
|
|
'MB_SPIN_UP': 86,
|
|
'MB_SPIN_DOWN': 87,
|
|
'MB_STOP_SPINNING': 88,
|
|
'MB_CABINET': 89,
|
|
'MB_KITCHEN': 90,
|
|
'MB_DRESSER': 91,
|
|
'MB_SNACKS': 92,
|
|
'MB_CABLE_CLUB_WIRELESS_MONITOR': 93,
|
|
'MB_BATTLE_RECORDS': 94,
|
|
'MB_FOOD': 95,
|
|
'MB_NON_ANIMATED_DOOR': 96,
|
|
'MB_LADDER': 97,
|
|
'MB_EAST_ARROW_WARP': 98,
|
|
'MB_WEST_ARROW_WARP': 99,
|
|
'MB_NORTH_ARROW_WARP': 100,
|
|
'MB_SOUTH_ARROW_WARP': 101,
|
|
'MB_CRACKED_FLOOR_HOLE': 102,
|
|
'MB_AQUA_HIDEOUT_WARP': 103,
|
|
'MB_LAVARIDGE_GYM_1F_WARP': 104,
|
|
'MB_ANIMATED_DOOR': 105,
|
|
'MB_UP_ESCALATOR': 106,
|
|
'MB_DOWN_ESCALATOR': 107,
|
|
'MB_WATER_DOOR': 108,
|
|
'MB_WATER_SOUTH_ARROW_WARP': 109,
|
|
'MB_DEEP_SOUTH_WARP': 110,
|
|
'MB_UNUSED_6F': 111,
|
|
'MB_BRIDGE_OVER_OCEAN': 112,
|
|
'MB_BRIDGE_OVER_POND_LOW': 113,
|
|
'MB_BRIDGE_OVER_POND_MED': 114,
|
|
'MB_BRIDGE_OVER_POND_HIGH': 115,
|
|
'MB_PACIFIDLOG_VERTICAL_LOG_TOP': 116,
|
|
'MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM': 117,
|
|
'MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT': 118,
|
|
'MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT': 119,
|
|
'MB_FORTREE_BRIDGE': 120,
|
|
'MB_UNUSED_79': 121,
|
|
'MB_BRIDGE_OVER_POND_MED_EDGE_1': 122,
|
|
'MB_BRIDGE_OVER_POND_MED_EDGE_2': 123,
|
|
'MB_BRIDGE_OVER_POND_HIGH_EDGE_1': 124,
|
|
'MB_BRIDGE_OVER_POND_HIGH_EDGE_2': 125,
|
|
'MB_UNUSED_BRIDGE': 126,
|
|
'MB_BIKE_BRIDGE_OVER_BARRIER': 127,
|
|
'MB_COUNTER': 128,
|
|
'MB_UNUSED_81': 129,
|
|
'MB_UNUSED_82': 130,
|
|
'MB_PC': 131,
|
|
'MB_CABLE_BOX_RESULTS_1': 132,
|
|
'MB_REGION_MAP': 133,
|
|
'MB_TELEVISION': 134,
|
|
'MB_POKEBLOCK_FEEDER': 135,
|
|
'MB_UNUSED_88': 136,
|
|
'MB_SLOT_MACHINE': 137,
|
|
'MB_ROULETTE': 138,
|
|
'MB_CLOSED_SOOTOPOLIS_DOOR': 139,
|
|
'MB_TRICK_HOUSE_PUZZLE_DOOR': 140,
|
|
'MB_PETALBURG_GYM_DOOR': 141,
|
|
'MB_RUNNING_SHOES_INSTRUCTION': 142,
|
|
'MB_QUESTIONNAIRE': 143,
|
|
'MB_SECRET_BASE_SPOT_RED_CAVE': 144,
|
|
'MB_SECRET_BASE_SPOT_RED_CAVE_OPEN': 145,
|
|
'MB_SECRET_BASE_SPOT_BROWN_CAVE': 146,
|
|
'MB_SECRET_BASE_SPOT_BROWN_CAVE_OPEN': 147,
|
|
'MB_SECRET_BASE_SPOT_YELLOW_CAVE': 148,
|
|
'MB_SECRET_BASE_SPOT_YELLOW_CAVE_OPEN': 149,
|
|
'MB_SECRET_BASE_SPOT_TREE_LEFT': 150,
|
|
'MB_SECRET_BASE_SPOT_TREE_LEFT_OPEN': 151,
|
|
'MB_SECRET_BASE_SPOT_SHRUB': 152,
|
|
'MB_SECRET_BASE_SPOT_SHRUB_OPEN': 153,
|
|
'MB_SECRET_BASE_SPOT_BLUE_CAVE': 154,
|
|
'MB_SECRET_BASE_SPOT_BLUE_CAVE_OPEN': 155,
|
|
'MB_SECRET_BASE_SPOT_TREE_RIGHT': 156,
|
|
'MB_SECRET_BASE_SPOT_TREE_RIGHT_OPEN': 157,
|
|
'MB_UNUSED_9E': 158,
|
|
'MB_UNUSED_9F': 159,
|
|
'MB_BERRY_TREE_SOIL': 160,
|
|
'MB_INDIGO_PLATEAU_SIGN_1': 161,
|
|
'MB_INDIGO_PLATEAU_SIGN_2': 162,
|
|
'MB_BLUEPRINTS': 163,
|
|
'MB_PAINTING': 164,
|
|
'MB_POWER_PLANT_MACHINE': 165,
|
|
'MB_TELEPHONE': 166,
|
|
'MB_COMPUTER': 167,
|
|
'MB_ADVERTISING_POSTER': 168,
|
|
'MB_FOOD_SMELLS_TASTY': 169,
|
|
'MB_PORTHOLE': 170,
|
|
'MB_WINDOW': 171,
|
|
'MB_CUP': 172,
|
|
'MB_BLINKING_LIGHTS': 173,
|
|
'MB_NEATLY_LINED_UP_TOOLS': 174,
|
|
'MB_IMPRESSIVE_MACHINE': 175,
|
|
'MB_SECRET_BASE_PC': 176,
|
|
'MB_SECRET_BASE_REGISTER_PC': 177,
|
|
'MB_SECRET_BASE_SCENERY': 178,
|
|
'MB_SECRET_BASE_TRAINER_SPOT': 179,
|
|
'MB_SECRET_BASE_DECORATION': 180,
|
|
'MB_HOLDS_SMALL_DECORATION': 181,
|
|
'MB_UNUSED_B6': 182,
|
|
'MB_SECRET_BASE_NORTH_WALL': 183,
|
|
'MB_SECRET_BASE_BALLOON': 184,
|
|
'MB_SECRET_BASE_IMPASSABLE': 185,
|
|
'MB_SECRET_BASE_GLITTER_MAT': 186,
|
|
'MB_SECRET_BASE_JUMP_MAT': 187,
|
|
'MB_SECRET_BASE_SPIN_MAT': 188,
|
|
'MB_SECRET_BASE_SOUND_MAT': 189,
|
|
'MB_SECRET_BASE_BREAKABLE_DOOR': 190,
|
|
'MB_SECRET_BASE_SAND_ORNAMENT': 191,
|
|
'MB_IMPASSABLE_SOUTH_AND_NORTH': 192,
|
|
'MB_IMPASSABLE_WEST_AND_EAST': 193,
|
|
'MB_SECRET_BASE_HOLE': 194,
|
|
'MB_HOLDS_LARGE_DECORATION': 195,
|
|
'MB_SECRET_BASE_TV_SHIELD': 196,
|
|
'MB_PLAYER_ROOM_PC_ON': 197,
|
|
'MB_SECRET_BASE_DECORATION_BASE': 198,
|
|
'MB_SECRET_BASE_POSTER': 199,
|
|
'MB_CYCLING_ROAD_PULL_DOWN': 200,
|
|
'MB_CYCLING_ROAD_PULL_DOWN_GRASS': 201,
|
|
'MB_VIDEO_GAME': 202,
|
|
'MB_BURGLARY': 203,
|
|
'MB_TRAINER_TOWER_MONITOR': 204,
|
|
'MB_UNUSED_CD': 205,
|
|
'MB_UNUSED_CE': 206,
|
|
'MB_UNUSED_CF': 207,
|
|
'MB_MUDDY_SLOPE': 208,
|
|
'MB_BUMPY_SLOPE': 209,
|
|
'MB_CRACKED_FLOOR': 210,
|
|
'MB_ISOLATED_VERTICAL_RAIL': 211,
|
|
'MB_ISOLATED_HORIZONTAL_RAIL': 212,
|
|
'MB_VERTICAL_RAIL': 213,
|
|
'MB_HORIZONTAL_RAIL': 214,
|
|
'MB_UNUSED_D7': 215,
|
|
'MB_UNUSED_D8': 216,
|
|
'MB_UNUSED_D9': 217,
|
|
'MB_UNUSED_DA': 218,
|
|
'MB_UNUSED_DB': 219,
|
|
'MB_UNUSED_DC': 220,
|
|
'MB_UNUSED_DD': 221,
|
|
'MB_UNUSED_DE': 222,
|
|
'MB_UNUSED_DF': 223,
|
|
'MB_PICTURE_BOOK_SHELF': 224,
|
|
'MB_BOOKSHELF': 225,
|
|
'MB_POKEMON_CENTER_BOOKSHELF': 226,
|
|
'MB_VASE': 227,
|
|
'MB_TRASH_CAN': 228,
|
|
'MB_SHOP_SHELF': 229,
|
|
'MB_BLUEPRINT': 230,
|
|
'MB_CABLE_BOX_RESULTS_2': 231,
|
|
'MB_WIRELESS_BOX_RESULTS': 232,
|
|
'MB_TRAINER_HILL_TIMER': 233,
|
|
'MB_SKY_PILLAR_CLOSED_DOOR': 234,
|
|
'MB_UP_RIGHT_STAIR_WARP': 235,
|
|
'MB_UP_LEFT_STAIR_WARP': 236,
|
|
'MB_DOWN_RIGHT_STAIR_WARP': 237,
|
|
'MB_DOWN_LEFT_STAIR_WARP': 238,
|
|
'MB_ROCK_CLIMB': 239,
|
|
}
|
|
|
|
FRLG_TO_EMERALD = {
|
|
'MB_FRLG_NORMAL': 'MB_NORMAL',
|
|
'MB_FRLG_UNUSED_01': 'MB_SECRET_BASE_WALL',
|
|
'MB_FRLG_TALL_GRASS': 'MB_TALL_GRASS',
|
|
'MB_FRLG_CAVE': 'MB_CAVE',
|
|
'MB_FRLG_RUNNING_DISALLOWED': 'MB_NO_RUNNING',
|
|
'MB_FRLG_INDOOR_ENCOUNTER': 'MB_INDOOR_ENCOUNTER',
|
|
'MB_FRLG_MOUNTAIN_TOP': 'MB_MOUNTAIN_TOP',
|
|
'MB_FRLG_POND_WATER': 'MB_POND_WATER',
|
|
'MB_FRLG_FAST_WATER': 'MB_FAST_WATER',
|
|
'MB_FRLG_DEEP_WATER': 'MB_DEEP_WATER',
|
|
'MB_FRLG_WATERFALL': 'MB_WATERFALL',
|
|
'MB_FRLG_OCEAN_WATER': 'MB_OCEAN_WATER',
|
|
'MB_FRLG_PUDDLE': 'MB_PUDDLE',
|
|
'MB_FRLG_SHALLOW_WATER': 'MB_SHALLOW_WATER',
|
|
'MB_FRLG_UNDERWATER_BLOCKED_ABOVE': 'MB_NO_SURFACING',
|
|
'MB_FRLG_UNUSED_WATER': 'MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2',
|
|
'MB_FRLG_CYCLING_ROAD_WATER': 'MB_CYCLING_ROAD_WATER',
|
|
'MB_FRLG_STRENGTH_BUTTON': 'MB_STRENGTH_BUTTON',
|
|
'MB_FRLG_SAND': 'MB_SAND',
|
|
'MB_FRLG_SEAWEED': 'MB_SEAWEED',
|
|
'MB_FRLG_ICE': 'MB_ICE',
|
|
'MB_FRLG_THIN_ICE': 'MB_THIN_ICE',
|
|
'MB_FRLG_CRACKED_ICE': 'MB_CRACKED_ICE',
|
|
'MB_FRLG_HOT_SPRINGS': 'MB_HOT_SPRINGS',
|
|
'MB_FRLG_ROCK_STAIRS': 'MB_ROCK_STAIRS',
|
|
'MB_FRLG_SAND_CAVE': 'MB_NORMAL',
|
|
'MB_FRLG_IMPASSABLE_EAST': 'MB_IMPASSABLE_EAST',
|
|
'MB_FRLG_IMPASSABLE_WEST': 'MB_IMPASSABLE_WEST',
|
|
'MB_FRLG_IMPASSABLE_NORTH': 'MB_IMPASSABLE_NORTH',
|
|
'MB_FRLG_IMPASSABLE_SOUTH': 'MB_IMPASSABLE_SOUTH',
|
|
'MB_FRLG_IMPASSABLE_NORTHEAST': 'MB_IMPASSABLE_NORTHEAST',
|
|
'MB_FRLG_IMPASSABLE_NORTHWEST': 'MB_IMPASSABLE_NORTHWEST',
|
|
'MB_FRLG_IMPASSABLE_SOUTHEAST': 'MB_IMPASSABLE_SOUTHEAST',
|
|
'MB_FRLG_IMPASSABLE_SOUTHWEST': 'MB_IMPASSABLE_SOUTHWEST',
|
|
'MB_FRLG_JUMP_EAST': 'MB_JUMP_EAST',
|
|
'MB_FRLG_JUMP_WEST': 'MB_JUMP_WEST',
|
|
'MB_FRLG_JUMP_NORTH': 'MB_JUMP_NORTH',
|
|
'MB_FRLG_JUMP_SOUTH': 'MB_JUMP_SOUTH',
|
|
'MB_FRLG_WALK_EAST': 'MB_WALK_EAST',
|
|
'MB_FRLG_WALK_WEST': 'MB_WALK_WEST',
|
|
'MB_FRLG_WALK_NORTH': 'MB_WALK_NORTH',
|
|
'MB_FRLG_WALK_SOUTH': 'MB_WALK_SOUTH',
|
|
'MB_FRLG_SLIDE_EAST': 'MB_SLIDE_EAST',
|
|
'MB_FRLG_SLIDE_WEST': 'MB_SLIDE_WEST',
|
|
'MB_FRLG_SLIDE_NORTH': 'MB_SLIDE_NORTH',
|
|
'MB_FRLG_SLIDE_SOUTH': 'MB_SLIDE_SOUTH',
|
|
'MB_FRLG_TRICK_HOUSE_PUZZLE_8_FLOOR': 'MB_TRICK_HOUSE_PUZZLE_8_FLOOR',
|
|
'MB_FRLG_EASTWARD_CURRENT': 'MB_EASTWARD_CURRENT',
|
|
'MB_FRLG_WESTWARD_CURRENT': 'MB_WESTWARD_CURRENT',
|
|
'MB_FRLG_NORTHWARD_CURRENT': 'MB_NORTHWARD_CURRENT',
|
|
'MB_FRLG_SOUTHWARD_CURRENT': 'MB_SOUTHWARD_CURRENT',
|
|
'MB_FRLG_SPIN_RIGHT': 'MB_SPIN_RIGHT',
|
|
'MB_FRLG_SPIN_LEFT': 'MB_SPIN_LEFT',
|
|
'MB_FRLG_SPIN_UP': 'MB_SPIN_UP',
|
|
'MB_FRLG_SPIN_DOWN': 'MB_SPIN_DOWN',
|
|
'MB_FRLG_STOP_SPINNING': 'MB_STOP_SPINNING',
|
|
'MB_FRLG_CAVE_DOOR': 'MB_NON_ANIMATED_DOOR',
|
|
'MB_FRLG_LADDER': 'MB_LADDER',
|
|
'MB_FRLG_EAST_ARROW_WARP': 'MB_EAST_ARROW_WARP',
|
|
'MB_FRLG_WEST_ARROW_WARP': 'MB_WEST_ARROW_WARP',
|
|
'MB_FRLG_NORTH_ARROW_WARP': 'MB_NORTH_ARROW_WARP',
|
|
'MB_FRLG_SOUTH_ARROW_WARP': 'MB_SOUTH_ARROW_WARP',
|
|
'MB_FRLG_FALL_WARP': 'MB_MT_PYRE_HOLE',
|
|
'MB_FRLG_REGULAR_WARP': 'MB_AQUA_HIDEOUT_WARP',
|
|
'MB_FRLG_LAVARIDGE_1F_WARP': 'MB_LAVARIDGE_GYM_1F_WARP',
|
|
'MB_FRLG_WARP_DOOR': 'MB_ANIMATED_DOOR',
|
|
'MB_FRLG_UP_ESCALATOR': 'MB_UP_ESCALATOR',
|
|
'MB_FRLG_DOWN_ESCALATOR': 'MB_DOWN_ESCALATOR',
|
|
'MB_FRLG_UP_RIGHT_STAIR_WARP': 'MB_UP_RIGHT_STAIR_WARP',
|
|
'MB_FRLG_UP_LEFT_STAIR_WARP': 'MB_UP_LEFT_STAIR_WARP',
|
|
'MB_FRLG_DOWN_RIGHT_STAIR_WARP': 'MB_DOWN_RIGHT_STAIR_WARP',
|
|
'MB_FRLG_DOWN_LEFT_STAIR_WARP': 'MB_DOWN_LEFT_STAIR_WARP',
|
|
'MB_FRLG_UNION_ROOM_WARP': 'MB_BRIDGE_OVER_OCEAN',
|
|
'MB_FRLG_COUNTER': 'MB_COUNTER',
|
|
'MB_FRLG_BOOKSHELF': 'MB_BOOKSHELF',
|
|
'MB_FRLG_POKEMART_SHELF': 'MB_POKEMON_CENTER_BOOKSHELF',
|
|
'MB_FRLG_PC': 'MB_PC',
|
|
'MB_FRLG_SIGNPOST': 'MB_SIGNPOST',
|
|
'MB_FRLG_REGION_MAP': 'MB_REGION_MAP',
|
|
'MB_FRLG_TELEVISION': 'MB_TELEVISION',
|
|
'MB_FRLG_POKEMON_CENTER_SIGN': 'MB_POKEMON_CENTER_SIGN',
|
|
'MB_FRLG_POKEMART_SIGN': 'MB_POKEMART_SIGN',
|
|
'MB_FRLG_CABINET': 'MB_CABINET',
|
|
'MB_FRLG_KITCHEN': 'MB_KITCHEN',
|
|
'MB_FRLG_DRESSER': 'MB_DRESSER',
|
|
'MB_FRLG_SNACKS': 'MB_SNACKS',
|
|
'MB_FRLG_CABLE_CLUB_WIRELESS_MONITOR': 'MB_CABLE_CLUB_WIRELESS_MONITOR',
|
|
'MB_FRLG_BATTLE_RECORDS': 'MB_BATTLE_RECORDS',
|
|
'MB_FRLG_QUESTIONNAIRE': 'MB_QUESTIONNAIRE',
|
|
'MB_FRLG_FOOD': 'MB_FOOD',
|
|
'MB_FRLG_INDIGO_PLATEAU_SIGN_1': 'MB_INDIGO_PLATEAU_SIGN_1',
|
|
'MB_FRLG_INDIGO_PLATEAU_SIGN_2': 'MB_INDIGO_PLATEAU_SIGN_2',
|
|
'MB_FRLG_BLUEPRINTS': 'MB_BLUEPRINTS',
|
|
'MB_FRLG_PAINTING': 'MB_PAINTING',
|
|
'MB_FRLG_POWER_PLANT_MACHINE': 'MB_POWER_PLANT_MACHINE',
|
|
'MB_FRLG_TELEPHONE': 'MB_TELEPHONE',
|
|
'MB_FRLG_COMPUTER': 'MB_COMPUTER',
|
|
'MB_FRLG_ADVERTISING_POSTER': 'MB_ADVERTISING_POSTER',
|
|
'MB_FRLG_FOOD_SMELLS_TASTY': 'MB_FOOD_SMELLS_TASTY',
|
|
'MB_FRLG_TRASH_BIN': 'MB_TRASH_CAN',
|
|
'MB_FRLG_CUP': 'MB_CUP',
|
|
'MB_FRLG_PORTHOLE': 'MB_PORTHOLE',
|
|
'MB_FRLG_WINDOW': 'MB_WINDOW',
|
|
'MB_FRLG_BLINKING_LIGHTS': 'MB_BLINKING_LIGHTS',
|
|
'MB_FRLG_NEATLY_LINED_UP_TOOLS': 'MB_NEATLY_LINED_UP_TOOLS',
|
|
'MB_FRLG_IMPRESSIVE_MACHINE': 'MB_IMPRESSIVE_MACHINE',
|
|
'MB_FRLG_VIDEO_GAME': 'MB_VIDEO_GAME',
|
|
'MB_FRLG_BURGLARY': 'MB_BURGLARY',
|
|
'MB_FRLG_TRAINER_TOWER_MONITOR': 'MB_TRAINER_TOWER_MONITOR',
|
|
'MB_FRLG_CYCLING_ROAD_PULL_DOWN': 'MB_CYCLING_ROAD_PULL_DOWN',
|
|
'MB_FRLG_CYCLING_ROAD_PULL_DOWN_GRASS': 'MB_CYCLING_ROAD_PULL_DOWN_GRASS',
|
|
}
|
|
|
|
BEHAVIOR_MASK = 0x000001ff
|
|
|
|
|
|
def process_metatile_attribute_data(old_data):
|
|
new_data = []
|
|
ctr = 0
|
|
result = {}
|
|
|
|
for value in old_data:
|
|
frlg_behavior = value & BEHAVIOR_MASK
|
|
|
|
if frlg_behavior not in FRLG_BEHAVIORS:
|
|
print(f'Unknown behavior: {frlg_behavior}. Keeping same value.')
|
|
emerald_behavior = frlg_behavior
|
|
else:
|
|
emerald_behavior = EMERALD_BEHAVIORS[FRLG_TO_EMERALD[FRLG_BEHAVIORS[frlg_behavior]]]
|
|
|
|
new_value = emerald_behavior | (value & ~BEHAVIOR_MASK)
|
|
new_data.append(new_value)
|
|
|
|
return new_data
|
|
|
|
def read_attribute_bin(file_path):
|
|
with open(file_path, "rb") as f:
|
|
data = f.read()
|
|
return list(struct.unpack("<" + "I" * (len(data) // 4), data))
|
|
|
|
def write_attribute_bin(file_path, new_data):
|
|
with open(file_path, "wb") as f:
|
|
f.write(struct.pack("<" + "I" * len(new_data), *new_data))
|
|
|
|
def process_metatile_attribute_files():
|
|
for file in glob.glob(ATTRIBUTES_PATH):
|
|
print(f"Processing {file}...")
|
|
old_data = read_attribute_bin(file)
|
|
new_data = process_metatile_attribute_data(old_data)
|
|
write_attribute_bin(file, new_data)
|
|
|
|
if __name__ == "__main__":
|
|
process_metatile_attribute_files()
|