#ifndef YAZE_APP_CORE_CONSTANTS_H #define YAZE_APP_CORE_CONSTANTS_H #include #include #define BASIC_BUTTON(w) if (ImGui::Button(w)) #define TAB_BAR(w) if (ImGui::BeginTabBar(w)) { #define END_TAB_BAR() \ ImGui::EndTabBar(); \ } #define MENU_BAR() if (ImGui::BeginMenuBar()) { #define END_MENU_BAR() \ ImGui::EndMenuBar(); \ } using ushort = unsigned short; using uint = unsigned int; using uchar = unsigned char; namespace yaze { namespace app { namespace core { namespace constants { //=========================================================================================== // 65816 LanguageDefinition //=========================================================================================== static const char *const kKeywords[] = { "ADC", "AND", "ASL", "BCC", "BCS", "BEQ", "BIT", "BMI", "BNE", "BPL", "BRA", "BRL", "BVC", "BVS", "CLC", "CLD", "CLI", "CLV", "CMP", "CPX", "CPY", "DEC", "DEX", "DEY", "EOR", "INC", "INX", "INY", "JMP", "JSR", "JSL", "LDA", "LDX", "LDY", "LSR", "MVN", "NOP", "ORA", "PEA", "PER", "PHA", "PHB", "PHD", "PHP", "PHX", "PHY", "PLA", "PLB", "PLD", "PLP", "PLX", "PLY", "REP", "ROL", "ROR", "RTI", "RTL", "RTS", "SBC", "SEC", "SEI", "SEP", "STA", "STP", "STX", "STY", "STZ", "TAX", "TAY", "TCD", "TCS", "TDC", "TRB", "TSB", "TSC", "TSX", "TXA", "TXS", "TXY", "TYA", "TYX", "WAI", "WDM", "XBA", "XCE", "ORG", "LOROM", "HIROM", "NAMESPACE", "DB"}; static const char *const kIdentifiers[] = { "abort", "abs", "acos", "asin", "atan", "atexit", "atof", "atoi", "atol", "ceil", "clock", "cosh", "ctime", "div", "exit", "fabs", "floor", "fmod", "getchar", "getenv", "isalnum", "isalpha", "isdigit", "isgraph", "ispunct", "isspace", "isupper", "kbhit", "log10", "log2", "log", "memcmp", "modf", "pow", "putchar", "putenv", "puts", "rand", "remove", "rename", "sinh", "sqrt", "srand", "strcat", "strcmp", "strerror", "time", "tolower", "toupper"}; //=========================================================================================== // Magic numbers //=========================================================================================== /// Bit set for object priority constexpr ushort TilePriorityBit = 0x2000; /// Bit set for object hflip constexpr ushort TileHFlipBit = 0x4000; /// Bit set for object vflip constexpr ushort TileVFlipBit = 0x8000; /// Bits used for tile name constexpr ushort TileNameMask = 0x03FF; constexpr int Uncompressed3BPPSize = 0x0600; constexpr int UncompressedSheetSize = 0x0800; constexpr int NumberOfSheets = 223; constexpr int LimitOfMap32 = 8864; constexpr int NumberOfRooms = 296; constexpr int NumberOfOWMaps = 160; constexpr int Map32PerScreen = 256; constexpr int NumberOfMap16 = 3752; // 4096 constexpr int NumberOfMap32 = Map32PerScreen * NumberOfOWMaps; constexpr int NumberOfOWSprites = 352; constexpr int NumberOfColors = 3143; // =========================================================================================== // gfx // =========================================================================================== constexpr int tile_address = 0x1B52; // JP = Same constexpr int tile_address_floor = 0x1B5A; // JP = Same constexpr int subtype1_tiles = 0x8000; // JP = Same constexpr int subtype2_tiles = 0x83F0; // JP = Same constexpr int subtype3_tiles = 0x84F0; // JP = Same constexpr int gfx_animated_pointer = 0x10275; // JP 0x10624 //long pointer constexpr int overworldgfxGroups2 = 0x6073; // 0x60B3 constexpr int gfx_1_pointer = 0x6790; // 2byte pointer bank 00 pc -> 0x4320 CF80 ; 004F80 constexpr int gfx_2_pointer = 0x6795; // D05F ; 00505F constexpr int gfx_3_pointer = 0x679A; // D13E ; 00513E constexpr int hud_palettes = 0xDD660; constexpr int maxGfx = 0xC3FB5; // =========================================================================================== // Overworld Related Variables // =========================================================================================== constexpr int compressedAllMap32PointersHigh = 0x1794D; constexpr int compressedAllMap32PointersLow = 0x17B2D; constexpr int overworldgfxGroups = 0x05D97; constexpr int map16Tiles = 0x78000; constexpr int map32TilesTL = 0x18000; constexpr int map32TilesTR = 0x1B400; constexpr int map32TilesBL = 0x20000; constexpr int map32TilesBR = 0x23400; constexpr int overworldPalGroup1 = 0xDE6C8; constexpr int overworldPalGroup2 = 0xDE86C; constexpr int overworldPalGroup3 = 0xDE604; constexpr int overworldMapPalette = 0x7D1C; constexpr int overworldSpritePalette = 0x7B41; constexpr int overworldMapPaletteGroup = 0x75504; constexpr int overworldSpritePaletteGroup = 0x75580; constexpr int overworldSpriteset = 0x7A41; constexpr int overworldSpecialGFXGroup = 0x16821; constexpr int overworldSpecialPALGroup = 0x16831; constexpr int overworldSpritesBegining = 0x4C881; constexpr int overworldSpritesAgahnim = 0x4CA21; constexpr int overworldSpritesZelda = 0x4C901; constexpr int overworldItemsPointers = 0xDC2F9; constexpr int overworldItemsAddress = 0xDC8B9; // 1BC2F9 constexpr int overworldItemsBank = 0xDC8BF; constexpr int overworldItemsEndData = 0xDC89C; // 0DC89E constexpr int mapGfx = 0x7C9C; constexpr int overlayPointers = 0x77664; constexpr int overlayPointersBank = 0x0E; constexpr int overworldTilesType = 0x71459; constexpr int overworldMessages = 0x3F51D; // TODO: constexpr int overworldMusicBegining = 0x14303; constexpr int overworldMusicZelda = 0x14303 + 0x40; constexpr int overworldMusicMasterSword = 0x14303 + 0x80; constexpr int overworldMusicAgahim = 0x14303 + 0xC0; constexpr int overworldMusicDW = 0x14403; constexpr int overworldEntranceAllowedTilesLeft = 0xDB8C1; constexpr int overworldEntranceAllowedTilesRight = 0xDB917; constexpr int overworldMapSize = 0x12844; // 0x00 = small maps, 0x20 = large // maps constexpr int overworldMapSizeHighByte = 0x12884; // 0x01 = small maps, 0x03 = large maps // relative to the WORLD + 0x200 per map // large map that are not == parent id = same position as their parent! // eg for X position small maps : // 0000, 0200, 0400, 0600, 0800, 0A00, 0C00, 0E00 // all Large map would be : // 0000, 0000, 0400, 0400, 0800, 0800, 0C00, 0C00 constexpr int overworldTransitionPositionY = 0x128C4; constexpr int overworldTransitionPositionX = 0x12944; constexpr int overworldScreenSize = 0x1788D; //=========================================================================================== // Overworld Exits/Entrances Variables //=========================================================================================== constexpr int OWExitRoomId = 0x15D8A; // 0x15E07 Credits sequences // 105C2 Ending maps // 105E2 Sprite Group Table for Ending constexpr int OWExitMapId = 0x15E28; constexpr int OWExitVram = 0x15E77; constexpr int OWExitYScroll = 0x15F15; constexpr int OWExitXScroll = 0x15FB3; constexpr int OWExitYPlayer = 0x16051; constexpr int OWExitXPlayer = 0x160EF; constexpr int OWExitYCamera = 0x1618D; constexpr int OWExitXCamera = 0x1622B; constexpr int OWExitDoorPosition = 0x15724; constexpr int OWExitUnk1 = 0x162C9; constexpr int OWExitUnk2 = 0x16318; constexpr int OWExitDoorType1 = 0x16367; constexpr int OWExitDoorType2 = 0x16405; constexpr int OWEntranceMap = 0xDB96F; constexpr int OWEntrancePos = 0xDBA71; constexpr int OWEntranceEntranceId = 0xDBB73; constexpr int OWHolePos = 0xDB800; //(0x13 entries, 2 bytes each) modified(less // 0x400) map16 coordinates for each hole constexpr int OWHoleArea = 0xDB826; //(0x13 entries, 2 bytes each) corresponding // area numbers for each hole constexpr int OWHoleEntrance = 0xDB84C; //(0x13 entries, 1 byte each) corresponding entrance numbers constexpr int OWExitMapIdWhirlpool = 0x16AE5; // JP = ;016849 constexpr int OWExitVramWhirlpool = 0x16B07; // JP = ;01686B constexpr int OWExitYScrollWhirlpool = 0x16B29; // JP = ;01688D constexpr int OWExitXScrollWhirlpool = 0x16B4B; // JP = ;016DE7 constexpr int OWExitYPlayerWhirlpool = 0x16B6D; // JP = ;016E09 constexpr int OWExitXPlayerWhirlpool = 0x16B8F; // JP = ;016E2B constexpr int OWExitYCameraWhirlpool = 0x16BB1; // JP = ;016E4D constexpr int OWExitXCameraWhirlpool = 0x16BD3; // JP = ;016E6F constexpr int OWExitUnk1Whirlpool = 0x16BF5; // JP = ;016E91 constexpr int OWExitUnk2Whirlpool = 0x16C17; // JP = ;016EB3 constexpr int OWWhirlpoolPosition = 0x16CF8; // JP = ;016F94 //=========================================================================================== // Dungeon Related Variables //=========================================================================================== // That could be turned into a pointer : constexpr int dungeons_palettes_groups = 0x75460; // JP 0x67DD0 constexpr int dungeons_main_bg_palette_pointers = 0xDEC4B; // JP Same constexpr int dungeons_palettes = 0xDD734; // JP Same (where all dungeons palettes are) // That could be turned into a pointer : constexpr int room_items_pointers = 0xDB69; // JP 0xDB67 constexpr int rooms_sprite_pointer = 0x4C298; // JP Same //2byte bank 09D62E constexpr int room_header_pointer = 0xB5DD; // LONG constexpr int room_header_pointers_bank = 0xB5E7; // JP Same constexpr int gfx_groups_pointer = 0x6237; constexpr int room_object_layout_pointer = 0x882D; constexpr int room_object_pointer = 0x874C; // Long pointer constexpr int chests_length_pointer = 0xEBF6; constexpr int chests_data_pointer1 = 0xEBFB; // constexpr int chests_data_pointer2 = 0xEC0A; //Disabled for now could be used // for expansion constexpr int chests_data_pointer3 = 0xEC10; //Disabled for now // could be used for expansion constexpr int blocks_length = 0x8896; // word value constexpr int blocks_pointer1 = 0x15AFA; constexpr int blocks_pointer2 = 0x15B01; constexpr int blocks_pointer3 = 0x15B08; constexpr int blocks_pointer4 = 0x15B0F; constexpr int torch_data = 0x2736A; // JP 0x2704A constexpr int torches_length_pointer = 0x88C1; constexpr int sprite_blockset_pointer = 0x5B57; constexpr int sprites_data = 0x4D8B0; // It use the unused pointers to have more space //Save purpose constexpr int sprites_data_empty_room = 0x4D8AE; constexpr int sprites_end_data = 0x4EC9E; constexpr int pit_pointer = 0x394AB; constexpr int pit_count = 0x394A6; constexpr int doorPointers = 0xF83C0; // doors constexpr int door_gfx_up = 0x4D9E; // constexpr int door_gfx_down = 0x4E06; constexpr int door_gfx_cavexit_down = 0x4E06; constexpr int door_gfx_left = 0x4E66; constexpr int door_gfx_right = 0x4EC6; constexpr int door_pos_up = 0x197E; constexpr int door_pos_down = 0x1996; constexpr int door_pos_left = 0x19AE; constexpr int door_pos_right = 0x19C6; // TEXT EDITOR RELATED CONSTANTS constexpr int gfx_font = 0x70000; // 2bpp format constexpr int text_data = 0xE0000; constexpr int text_data2 = 0x75F40; constexpr int pointers_dictionaries = 0x74703; constexpr int characters_width = 0x74ADF; //=========================================================================================== // Dungeon Entrances Related Variables //=========================================================================================== constexpr int entrance_room = 0x14813; // 0x14577 //word value for each room constexpr int entrance_scrolledge = 0x1491D; // 0x14681 //8 bytes per room, HU, FU, HD, FD, HL, FL, HR, FR constexpr int entrance_yscroll = 0x14D45; // 0x14AA9 //2bytes each room constexpr int entrance_xscroll = 0x14E4F; // 0x14BB3 //2bytes constexpr int entrance_yposition = 0x14F59; // 0x14CBD 2bytes constexpr int entrance_xposition = 0x15063; // 0x14DC7 2bytes constexpr int entrance_camerayposition = 0x1516D; // 0x14ED1 2bytes constexpr int entrance_cameraxposition = 0x15277; // 0x14FDB 2bytes constexpr int entrance_gfx_group = 0x5D97; constexpr int entrance_blockset = 0x15381; // 0x150E5 1byte constexpr int entrance_floor = 0x15406; // 0x1516A 1byte constexpr int entrance_dungeon = 0x1548B; // 0x151EF 1byte (dungeon id) constexpr int entrance_door = 0x15510; // 0x15274 1byte constexpr int entrance_ladderbg = 0x15595; // 0x152F9 //1 byte, ---b ---a b = bg2, a = need to check -_- constexpr int entrance_scrolling = 0x1561A; // 0x1537E //1byte --h- --v- constexpr int entrance_scrollquadrant = 0x1569F; // 0x15403 1byte constexpr int entrance_exit = 0x15724; // 0x15488 //2byte word constexpr int entrance_music = 0x1582E; // 0x15592 constexpr int startingentrance_room = 0x15B6E; // 0x158D2 //word value for each room constexpr int startingentrance_scrolledge = 0x15B7C; // 0x158E0 //8 bytes per room, HU, FU, HD, FD, HL, FL, HR, FR constexpr int startingentrance_yscroll = 0x15BB4; // 0x14AA9 //2bytes each room constexpr int startingentrance_xscroll = 0x15BC2; // 0x14BB3 //2bytes constexpr int startingentrance_yposition = 0x15BD0; // 0x14CBD 2bytes constexpr int startingentrance_xposition = 0x15BDE; // 0x14DC7 2bytes constexpr int startingentrance_camerayposition = 0x15BEC; // 0x14ED1 2bytes constexpr int startingentrance_cameraxposition = 0x15BFA; // 0x14FDB 2bytes constexpr int startingentrance_blockset = 0x15C08; // 0x150E5 1byte constexpr int startingentrance_floor = 0x15C0F; // 0x1516A 1byte constexpr int startingentrance_dungeon = 0x15C16; // 0x151EF 1byte (dungeon id) constexpr int startingentrance_door = 0x15C2B; // 0x15274 1byte constexpr int startingentrance_ladderbg = 0x15C1D; // 0x152F9 //1 byte, ---b ---a b = bg2, a = need to check -_- constexpr int startingentrance_scrolling = 0x15C24; // 0x1537E //1byte --h- --v- constexpr int startingentrance_scrollquadrant = 0x15C2B; // 0x15403 1byte constexpr int startingentrance_exit = 0x15C32; // 0x15488 //2byte word constexpr int startingentrance_music = 0x15C4E; // 0x15592 constexpr int startingentrance_entrance = 0x15C40; constexpr int items_data_start = 0xDDE9; // save purpose constexpr int items_data_end = 0xE6B2; // save purpose constexpr int initial_equipement = 0x271A6; constexpr int messages_id_dungeon = 0x3F61D; constexpr int chests_backupitems = 0x3B528; // item id you get instead if you already have that item constexpr int chests_yoffset = 0x4836C; constexpr int chests_xoffset = 0x4836C + (76 * 1); constexpr int chests_itemsgfx = 0x4836C + (76 * 2); constexpr int chests_itemswide = 0x4836C + (76 * 3); constexpr int chests_itemsproperties = 0x4836C + (76 * 4); constexpr int chests_sramaddress = 0x4836C + (76 * 5); constexpr int chests_sramvalue = 0x4836C + (76 * 7); constexpr int chests_msgid = 0x442DD; constexpr int dungeons_startrooms = 0x7939; constexpr int dungeons_endrooms = 0x792D; constexpr int dungeons_bossrooms = 0x10954; // short value // Bed Related Values (Starting location) constexpr int bedPositionX = 0x039A37; // short value constexpr int bedPositionY = 0x039A32; // short value constexpr int bedPositionResetXLow = 0x02DE53; // short value(on 2 different bytes) constexpr int bedPositionResetXHigh = 0x02DE58; //^^^^^^ constexpr int bedPositionResetYLow = 0x02DE5D; // short value(on 2 different bytes) constexpr int bedPositionResetYHigh = 0x02DE62; //^^^^^^ constexpr int bedSheetPositionX = 0x0480BD; // short value constexpr int bedSheetPositionY = 0x0480B8; // short value //=========================================================================================== // Gravestones related variables //=========================================================================================== constexpr int GravesYTilePos = 0x49968; // short (0x0F entries) constexpr int GravesXTilePos = 0x49986; // short (0x0F entries) constexpr int GravesTilemapPos = 0x499A4; // short (0x0F entries) constexpr int GravesGFX = 0x499C2; // short (0x0F entries) constexpr int GravesXPos = 0x4994A; // short (0x0F entries) constexpr int GravesYLine = 0x4993A; // short (0x08 entries) constexpr int GravesCountOnY = 0x499E0; // Byte 0x09 entries constexpr int GraveLinkSpecialHole = 0x46DD9; // short constexpr int GraveLinkSpecialStairs = 0x46DE0; // short //=========================================================================================== // Palettes Related Variables - This contain all the palettes of the game //=========================================================================================== constexpr int overworldPaletteMain = 0xDE6C8; constexpr int overworldPaletteAuxialiary = 0xDE86C; constexpr int overworldPaletteAnimated = 0xDE604; constexpr int globalSpritePalettesLW = 0xDD218; constexpr int globalSpritePalettesDW = 0xDD290; constexpr int armorPalettes = 0xDD308; // Green, Blue, Red, Bunny, Electrocuted (15 colors each) constexpr int spritePalettesAux1 = 0xDD39E; // 7 colors each constexpr int spritePalettesAux2 = 0xDD446; // 7 colors each constexpr int spritePalettesAux3 = 0xDD4E0; // 7 colors each constexpr int swordPalettes = 0xDD630; // 3 colors each - 4 entries constexpr int shieldPalettes = 0xDD648; // 4 colors each - 3 entries constexpr int hudPalettes = 0xDD660; constexpr int dungeonMapPalettes = 0xDD70A; // 21 colors constexpr int dungeonMainPalettes = 0xDD734; //(15*6) colors each - 20 entries constexpr int dungeonMapBgPalettes = 0xDE544; // 16*6 constexpr int hardcodedGrassLW = 0x5FEA9; // Mirrored Value at 0x75645 : 0x75625 constexpr int hardcodedGrassDW = 0x05FEB3; // 0x7564F constexpr int hardcodedGrassSpecial = 0x75640; //=========================================================================================== // Dungeon Map Related Variables //=========================================================================================== constexpr int dungeonMap_rooms_ptr = 0x57605; // 14 pointers of map data constexpr int dungeonMap_floors = 0x575D9; // 14 words values constexpr int dungeonMap_gfx_ptr = 0x57BE4; // 14 pointers of gfx data constexpr int dungeonMap_datastart = 0x57039; // data start for floors/gfx MUST skip 575D9 to 57621 (pointers) constexpr int dungeonMap_expCheck = 0x56652; // IF Byte = 0xB9 dungeon maps are not expanded constexpr int dungeonMap_tile16 = 0x57009; constexpr int dungeonMap_tile16Exp = 0x109010; constexpr int dungeonMap_bossrooms = 0x56807; // 14 words values 0x000F = no // boss constexpr int triforceVertices = 0x04FFD2; // group of 3, X, Y ,Z constexpr int TriforceFaces = 0x04FFE4; // group of 5 constexpr int crystalVertices = 0x04FF98; //=========================================================================================== // Names //=========================================================================================== static const std::string RoomEffect[] = {"Nothing", "Nothing", "Moving Floor", "Moving Water", "Trinexx Shell", "Red Flashes", "Light Torch to See Floor", "Ganon's Darkness"}; static const std::string RoomTag[] = {"Nothing", "NW Kill Enemy to Open", "NE Kill Enemy to Open", "SW Kill Enemy to Open", "SE Kill Enemy to Open", "W Kill Enemy to Open", "E Kill Enemy to Open", "N Kill Enemy to Open", "S Kill Enemy to Open", "Clear Quadrant to Open", "Clear Full Tile to Open", "NW Push Block to Open", "NE Push Block to Open", "SW Push Block to Open", "SE Push Block to Open", "W Push Block to Open", "E Push Block to Open", "N Push Block to Open", "S Push Block to Open", "Push Block to Open", "Pull Lever to Open", "Collect Prize to Open", "Hold Switch Open Door", "Toggle Switch to Open Door", "Turn off Water", "Turn on Water", "Water Gate", "Water Twin", "Moving Wall Right", "Moving Wall Left", "Crash", "Crash", "Push Switch Exploding Wall", "Holes 0", "Open Chest (Holes 0)", "Holes 1", "Holes 2", "Defeat Boss for Dungeon Prize", "SE Kill Enemy to Push Block", "Trigger Switch Chest", "Pull Lever Exploding Wall", "NW Kill Enemy for Chest", "NE Kill Enemy for Chest", "SW Kill Enemy for Chest", "SE Kill Enemy for Chest", "W Kill Enemy for Chest", "E Kill Enemy for Chest", "N Kill Enemy for Chest", "S Kill Enemy for Chest", "Clear Quadrant for Chest", "Clear Full Tile for Chest", "Light Torches to Open", "Holes 3", "Holes 4", "Holes 5", "Holes 6", "Agahnim Room", "Holes 7", "Holes 8", "Open Chest for Holes 8", "Push Block for Chest", "Clear Room for Triforce Door", "Light Torches for Chest", "Kill Boss Again"}; static const std::string SecretItemNames[] = { "Nothing", "Green Rupee", "Rock hoarder", "Bee", "Health pack", "Bomb", "Heart ", "Blue Rupee", "Key", "Arrow", "Bomb", "Heart", "Magic", "Full Magic", "Cucco", "Green Soldier", "Bush Stal", "Blue Soldier", "Landmine", "Heart", "Fairy", "Heart", "Nothing ", // 22 "Hole", "Warp", "Staircase", "Bombable", "Switch"}; static const std::string Type1RoomObjectNames[] = { "Ceiling ↔", "Wall (top, north) ↔", "Wall (top, south) ↔", "Wall (bottom, north) ↔", "Wall (bottom, south) ↔", "Wall columns (north) ↔", "Wall columns (south) ↔", "Deep wall (north) ↔", "Deep wall (south) ↔", "Diagonal wall A ◤ (top) ↔", "Diagonal wall A ◣ (top) ↔", "Diagonal wall A ◥ (top) ↔", "Diagonal wall A ◢ (top) ↔", "Diagonal wall B ◤ (top) ↔", "Diagonal wall B ◣ (top) ↔", "Diagonal wall B ◥ (top) ↔", "Diagonal wall B ◢ (top) ↔", "Diagonal wall C ◤ (top) ↔", "Diagonal wall C ◣ (top) ↔", "Diagonal wall C ◥ (top) ↔", "Diagonal wall C ◢ (top) ↔", "Diagonal wall A ◤ (bottom) ↔", "Diagonal wall A ◣ (bottom) ↔", "Diagonal wall A ◥ (bottom) ↔", "Diagonal wall A ◢ (bottom) ↔", "Diagonal wall B ◤ (bottom) ↔", "Diagonal wall B ◣ (bottom) ↔", "Diagonal wall B ◥ (bottom) ↔", "Diagonal wall B ◢ (bottom) ↔", "Diagonal wall C ◤ (bottom) ↔", "Diagonal wall C ◣ (bottom) ↔", "Diagonal wall C ◥ (bottom) ↔", "Diagonal wall C ◢ (bottom) ↔", "Platform stairs ↔", "Rail ↔", "Pit edge ┏━┓ A (north) ↔", "Pit edge ┏━┓ B (north) ↔", "Pit edge ┏━┓ C (north) ↔", "Pit edge ┏━┓ D (north) ↔", "Pit edge ┏━┓ E (north) ↔", "Pit edge ┗━┛ (south) ↔", "Pit edge ━━━ (south) ↔", "Pit edge ━━━ (north) ↔", "Pit edge ━━┛ (south) ↔", "Pit edge ┗━━ (south) ↔", "Pit edge ━━┓ (north) ↔", "Pit edge ┏━━ (north) ↔", "Rail wall (north) ↔", "Rail wall (south) ↔", "Nothing", "Nothing", "Carpet ↔", "Carpet trim ↔", "Weird door", // TODO: WEIRD DOOR OBJECT NEEDS INVESTIGATION "Drapes (north) ↔", "Drapes (west, odd) ↔", "Statues ↔", "Columns ↔", "Wall decors (north) ↔", "Wall decors (south) ↔", "Chairs in pairs ↔", "Tall torches ↔", "Supports (north) ↔", "Water edge ┏━┓ (concave) ↔", "Water edge ┗━┛ (concave) ↔", "Water edge ┏━┓ (convex) ↔", "Water edge ┗━┛ (convex) ↔", "Water edge ┏━┛ (concave) ↔", "Water edge ┗━┓ (concave) ↔", "Water edge ┗━┓ (convex) ↔", "Water edge ┏━┛ (convex) ↔", "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Supports (south) ↔", "Bar ↔", "Shelf A ↔", "Shelf B ↔", "Shelf C ↔", "Somaria path ↔", "Cannon hole A (north) ↔", "Cannon hole A (south) ↔", "Pipe path ↔", "Nothing", "Wall torches (north) ↔", "Wall torches (south) ↔", "Nothing", "Nothing", "Nothing", "Nothing", "Cannon hole B (north) ↔", "Cannon hole B (south) ↔", "Thick rail ↔", "Blocks ↔", "Long rail ↔", "Ceiling ↕", "Wall (top, west) ↕", "Wall (top, east) ↕", "Wall (bottom, west) ↕", "Wall (bottom, east) ↕", "Wall columns (west) ↕", "Wall columns (east) ↕", "Deep wall (west) ↕", "Deep wall (east) ↕", "Rail ↕", "Pit edge (west) ↕", "Pit edge (east) ↕", "Rail wall (west) ↕", "Rail wall (east) ↕", "Nothing", "Nothing", "Carpet ↕", "Carpet trim ↕", "Nothing", "Drapes (west) ↕", "Drapes (east) ↕", "Columns ↕", "Wall decors (west) ↕", "Wall decors (east) ↕", "Supports (west) ↕", "Water edge (west) ↕", "Water edge (east) ↕", "Supports (east) ↕", "Somaria path ↕", "Pipe path ↕", "Nothing", "Wall torches (west) ↕", "Wall torches (east) ↕", "Wall decors tight A (west) ↕", "Wall decors tight A (east) ↕", "Wall decors tight B (west) ↕", "Wall decors tight B (east) ↕", "Cannon hole (west) ↕", "Cannon hole (east) ↕", "Tall torches ↕", "Thick rail ↕", "Blocks ↕", "Long rail ↕", "Jump ledge (west) ↕", "Jump ledge (east) ↕", "Rug trim (west) ↕", "Rug trim (east) ↕", "Bar ↕", "Wall flair (west) ↕", "Wall flair (east) ↕", "Blue pegs ↕", "Orange pegs ↕", "Invisible floor ↕", "Fake pots ↕", "Hammer pegs ↕", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Diagonal ceiling A ◤", "Diagonal ceiling A ◣", "Diagonal ceiling A ◥", "Diagonal ceiling A ◢", "Pit ⇲", "Diagonal layer 2 mask A ◤", "Diagonal layer 2 mask A ◣", "Diagonal layer 2 mask A ◥", "Diagonal layer 2 mask A ◢", "Diagonal layer 2 mask B ◤", // TODO: VERIFY "Diagonal layer 2 mask B ◣", // TODO: VERIFY "Diagonal layer 2 mask B ◥", // TODO: VERIFY "Diagonal layer 2 mask B ◢", // TODO: VERIFY "Nothing", "Nothing", "Nothing", "Jump ledge (north) ↔", "Jump ledge (south) ↔", "Rug ↔", "Rug trim (north) ↔", "Rug trim (south) ↔", "Archery game curtains ↔", "Wall flair (north) ↔", "Wall flair (south) ↔", "Blue pegs ↔", "Orange pegs ↔", "Invisible floor ↔", "Fake pressure plates ↔", "Fake pots ↔", "Hammer pegs ↔", "Nothing", "Nothing", "Ceiling (large) ⇲", "Chest platform (tall) ⇲", "Layer 2 pit mask (large) ⇲", "Layer 2 pit mask (medium) ⇲", "Floor 1 ⇲", "Floor 3 ⇲", "Layer 2 mask (large) ⇲", "Floor 4 ⇲", "Water floor ⇲ ", "Flood water (medium) ⇲ ", "Conveyor floor ⇲ ", "Nothing", "Nothing", "Moving wall (west) ⇲", "Moving wall (east) ⇲", "Nothing", "Nothing", "Icy floor A ⇲", "Icy floor B ⇲", "Moving wall flag", // TODO: WTF IS THIS? "Moving wall flag", // TODO: WTF IS THIS? "Moving wall flag", // TODO: WTF IS THIS? "Moving wall flag", // TODO: WTF IS THIS? "Layer 2 mask (medium) ⇲", "Flood water (large) ⇲", "Layer 2 swim mask ⇲", "Flood water B (large) ⇲", "Floor 2 ⇲", "Chest platform (short) ⇲", "Table / rock ⇲", "Spike blocks ⇲", "Spiked floor ⇲", "Floor 7 ⇲", "Tiled floor ⇲", "Rupee floor ⇲", "Conveyor upwards ⇲", "Conveyor downwards ⇲", "Conveyor leftwards ⇲", "Conveyor rightwards ⇲", "Heavy current water ⇲", "Floor 10 ⇲", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", "Nothing", }; static const std::string Type2RoomObjectNames[] = { "Corner (top, concave) ▛", "Corner (top, concave) ▙", "Corner (top, concave) ▜", "Corner (top, concave) ▟", "Corner (top, convex) ▟", "Corner (top, convex) ▜", "Corner (top, convex) ▙", "Corner (top, convex) ▛", "Corner (bottom, concave) ▛", "Corner (bottom, concave) ▙", "Corner (bottom, concave) ▜", "Corner (bottom, concave) ▟", "Corner (bottom, convex) ▟", "Corner (bottom, convex) ▜", "Corner (bottom, convex) ▙", "Corner (bottom, convex) ▛", "Kinked corner north (bottom) ▜", "Kinked corner south (bottom) ▟", "Kinked corner north (bottom) ▛", "Kinked corner south (bottom) ▙", "Kinked corner west (bottom) ▙", "Kinked corner west (bottom) ▛", "Kinked corner east (bottom) ▟", "Kinked corner east (bottom) ▜", "Deep corner (concave) ▛", "Deep corner (concave) ▙", "Deep corner (concave) ▜", "Deep corner (concave) ▟", "Large brazier", "Statue", "Star tile (disabled)", "Star tile (enabled)", "Small torch (lit)", "Barrel", "Unknown", // TODO: NEEDS IN GAME CHECKING "Table", "Fairy statue", "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Chair", "Bed", "Fireplace", "Mario portrait", "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Interroom stairs (up)", "Interroom stairs (down)", "Interroom stairs B (down)", "Intraroom stairs north B", // TODO: VERIFY LAYER HANDLING "Intraroom stairs north (separate layers)", "Intraroom stairs north (merged layers)", "Intraroom stairs north (swim layer)", "Block", "Water ladder (north)", "Water ladder (south)", // TODO: NEEDS IN GAME VERIFICATION "Dam floodgate", "Interroom spiral stairs up (top)", "Interroom spiral stairs down (top)", "Interroom spiral stairs up (bottom)", "Interroom spiral stairs down (bottom)", "Sanctuary wall (north)", "Unknown", // TODO: NEEDS IN GAME CHECKING "Pew", "Magic bat altar", }; static const std::string Type3RoomObjectNames[] = { "Waterfall face (empty)", "Waterfall face (short)", "Waterfall face (long)", "Somaria path endpoint", "Somaria path intersection ╋", "Somaria path corner ┏", "Somaria path corner ┗", "Somaria path corner ┓", "Somaria path corner ┛", "Somaria path intersection ┳", "Somaria path intersection ┻", "Somaria path intersection ┣", "Somaria path intersection ┫", "Unknown", // TODO: NEEDS IN GAME CHECKING "Somaria path 2-way endpoint", "Somaria path crossover", "Babasu hole (north)", "Babasu hole (south)", "9 blue rupees", "Telepathy tile", "Warp door", // TODO: NEEDS IN GAME VERIFICATION THAT THIS IS USELESS "Kholdstare's shell", "Hammer peg", "Prison cell", "Big key lock", "Chest", "Chest (open)", "Intraroom stairs south", // TODO: VERIFY LAYER HANDLING "Intraroom stairs south (separate layers)", "Intraroom stairs south (merged layers)", "Interroom straight stairs up (north, top)", "Interroom straight stairs down (north, top)", "Interroom straight stairs up (south, top)", "Interroom straight stairs down (south, top)", "Deep corner (convex) ▟", "Deep corner (convex) ▜", "Deep corner (convex) ▙", "Deep corner (convex) ▛", "Interroom straight stairs up (north, bottom)", "Interroom straight stairs down (north, bottom)", "Interroom straight stairs up (south, bottom)", "Interroom straight stairs down (south, bottom)", "Lamp cones", "Unknown", // TODO: NEEDS IN GAME CHECKING "Liftable large block", "Agahnim's altar", "Agahnim's boss room", "Pot", "Unknown", // TODO: NEEDS IN GAME CHECKING "Big chest", "Big chest (open)", "Intraroom stairs south (swim layer)", "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Unknown", // TODO: NEEDS IN GAME CHECKING "Pipe end (south)", "Pipe end (north)", "Pipe end (east)", "Pipe end (west)", "Pipe corner ▛", "Pipe corner ▙", "Pipe corner ▜", "Pipe corner ▟", "Pipe-rock intersection ⯊", "Pipe-rock intersection ⯋", "Pipe-rock intersection ◖", "Pipe-rock intersection ◗", "Pipe crossover", "Bombable floor", "Fake bombable floor", "Unknown", // TODO: NEEDS IN GAME CHECKING "Warp tile", "Tool rack", "Furnace", "Tub (wide)", "Anvil", "Warp tile (disabled)", "Pressure plate", "Unknown", // TODO: NEEDS IN GAME CHECKING "Blue peg", "Orange peg", "Fortune teller room", "Unknown", // TODO: NEEDS IN GAME CHECKING "Bar corner ▛", "Bar corner ▙", "Bar corner ▜", "Bar corner ▟", "Decorative bowl", "Tub (tall)", "Bookcase", "Range", "Suitcase", "Bar bottles", "Arrow game hole (west)", "Arrow game hole (east)", "Vitreous goo gfx", "Fake pressure plate", "Medusa head", "4-way shooter block", "Pit", "Wall crack (north)", "Wall crack (south)", "Wall crack (west)", "Wall crack (east)", "Large decor", "Water grate (north)", "Water grate (south)", "Water grate (west)", "Water grate (east)", "Window sunlight", "Floor sunlight", "Trinexx's shell", "Layer 2 mask (full)", "Boss entrance", "Minigame chest", "Ganon door", "Triforce wall ornament", "Triforce floor tiles", "Freezor hole", "Pile of bones", "Vitreous goo damage", "Arrow tile ↑", "Arrow tile ↓", "Arrow tile →", "Nothing", }; static const std::string TileTypeNames[] = { "$00 Nothing (standard floor)", "$01 Collision", "$02 Collision", "$03 Collision", "$04 Collision", "$05 Nothing (unused?)", "$06 Nothing (unused?)", "$07 Nothing (unused?)", "$08 Deep water", "$09 Shallow water", "$0A Unknown? Possibly unused", "$0B Collision (different in Overworld and unknown)", "$0C Overlay mask", "$0D Spike floor", "$0E GT ice", "$0F Ice palace ice", "$10 Slope ◤", "$11 Slope ◥", "$12 Slope ◣", "$13 Slope ◢", "$14 Nothing (unused?)", "$15 Nothing (unused?)", "$16 Nothing (unused?)", "$17 Nothing (unused?)", "$18 Slope ◤", "$19 Slope ◥", "$1A Slope ◣", "$1B Slope ◢", "$1C Layer 2 overlay", "$1D North single-layer auto stairs", "$1E North layer-swap auto stairs", "$1F North layer-swap auto stairs", "$20 Pit", "$21 Nothing (unused?)", "$22 Manual stairs", "$23 Pot switch", "$24 Pressure switch", "$25 Nothing (unused but referenced by somaria blocks)", "$26 Collision (near stairs?)", "$27 Brazier/Fence/Statue/Block/General hookable things", "$28 North ledge", "$29 South ledge", "$2A East ledge", "$2B West ledge", "$2C ◤ ledge", "$2D ◣ ledge", "$2E ◥ ledge", "$2F ◢ ledge", "$30 Straight inter-room stairs south/up 0", "$31 Straight inter-room stairs south/up 1", "$32 Straight inter-room stairs south/up 2", "$33 Straight inter-room stairs south/up 3", "$34 Straight inter-room stairs north/down 0", "$35 Straight inter-room stairs north/down 1", "$36 Straight inter-room stairs north/down 2", "$37 Straight inter-room stairs north/down 3", "$38 Straight inter-room stairs north/down edge", "$39 Straight inter-room stairs south/up edge", "$3A Star tile (inactive on load)", "$3B Star tile (active on load)", "$3C Nothing (unused?)", "$3D South single-layer auto stairs", "$3E South layer-swap auto stairs", "$3F South layer-swap auto stairs", "$40 Thick grass", "$41 Nothing (unused?)", "$42 Gravestone / Tower of hera ledge shadows??", "$43 Skull Woods entrance/Hera columns???", "$44 Spike", "$45 Nothing (unused?)", "$46 Desert Tablet", "$47 Nothing (unused?)", "$48 Diggable ground", "$49 Nothing (unused?)", "$4A Diggable ground", "$4B Warp tile", "$4C Nothing (unused?) | Something unknown in overworld", "$4D Nothing (unused?) | Something unknown in overworld", "$4E Square corners in EP overworld", "$4F Square corners in EP overworld", "$50 Green bush", "$51 Dark bush", "$52 Gray rock", "$53 Black rock", "$54 Hint tile/Sign", "$55 Big gray rock", "$56 Big black rock", "$57 Bonk rocks", "$58 Chest 0", "$59 Chest 1", "$5A Chest 2", "$5B Chest 3", "$5C Chest 4", "$5D Chest 5", "$5E Spiral stairs", "$5F Spiral stairs", "$60 Rupee tile", "$61 Nothing (unused?)", "$62 Bombable floor", "$63 Minigame chest", "$64 Nothing (unused?)", "$65 Nothing (unused?)", "$66 Crystal peg down", "$67 Crystal peg up", "$68 Upwards conveyor", "$69 Downwards conveyor", "$6A Leftwards conveyor", "$6B Rightwards conveyor", "$6C North vines", "$6D South vines", "$6E West vines", "$6F East vines", "$70 Pot/Hammer peg/Push block 00", "$71 Pot/Hammer peg/Push block 01", "$72 Pot/Hammer peg/Push block 02", "$73 Pot/Hammer peg/Push block 03", "$74 Pot/Hammer peg/Push block 04", "$75 Pot/Hammer peg/Push block 05", "$76 Pot/Hammer peg/Push block 06", "$77 Pot/Hammer peg/Push block 07", "$78 Pot/Hammer peg/Push block 08", "$79 Pot/Hammer peg/Push block 09", "$7A Pot/Hammer peg/Push block 0A", "$7B Pot/Hammer peg/Push block 0B", "$7C Pot/Hammer peg/Push block 0C", "$7D Pot/Hammer peg/Push block 0D", "$7E Pot/Hammer peg/Push block 0E", "$7F Pot/Hammer peg/Push block 0F", "$80 North/South door", "$81 East/West door", "$82 North/South shutter door", "$83 East/West shutter door", "$84 North/South layer 2 door", "$85 East/West layer 2 door", "$86 North/South layer 2 shutter door", "$87 East/West layer 2 shutter door", "$88 Some type of door (?)", "$89 East/West transport door", "$8A Some type of door (?)", "$8B Some type of door (?)", "$8C Some type of door (?)", "$8D Some type of door (?)", "$8E Entrance door", "$8F Entrance door", "$90 Layer toggle shutter door (?)", "$91 Layer toggle shutter door (?)", "$92 Layer toggle shutter door (?)", "$93 Layer toggle shutter door (?)", "$94 Layer toggle shutter door (?)", "$95 Layer toggle shutter door (?)", "$96 Layer toggle shutter door (?)", "$97 Layer toggle shutter door (?)", "$98 Layer+Dungeon toggle shutter door (?)", "$99 Layer+Dungeon toggle shutter door (?)", "$9A Layer+Dungeon toggle shutter door (?)", "$9B Layer+Dungeon toggle shutter door (?)", "$9C Layer+Dungeon toggle shutter door (?)", "$9D Layer+Dungeon toggle shutter door (?)", "$9E Layer+Dungeon toggle shutter door (?)", "$9F Layer+Dungeon toggle shutter door (?)", "$A0 North/South Dungeon swap door", "$A1 Dungeon toggle door (?)", "$A2 Dungeon toggle door (?)", "$A3 Dungeon toggle door (?)", "$A4 Dungeon toggle door (?)", "$A5 Dungeon toggle door (?)", "$A6 Nothing (unused?)", "$A7 Nothing (unused?)", "$A8 Layer+Dungeon toggle shutter door (?)", "$A9 Layer+Dungeon toggle shutter door (?)", "$AA Layer+Dungeon toggle shutter door (?)", "$AB Layer+Dungeon toggle shutter door (?)", "$AC Layer+Dungeon toggle shutter door (?)", "$AD Layer+Dungeon toggle shutter door (?)", "$AE Layer+Dungeon toggle shutter door (?)", "$AF Layer+Dungeon toggle shutter door (?)", "$B0 Somaria ─", "$B1 Somaria │", "$B2 Somaria ┌", "$B3 Somaria └", "$B4 Somaria ┐", "$B5 Somaria ┘", "$B6 Somaria ⍰ 1 way", "$B7 Somaria ┬", "$B8 Somaria ┴", "$B9 Somaria ├", "$BA Somaria ┤", "$BB Somaria ┼", "$BC Somaria ⍰ 2 way", "$BD Somaria ┼ crossover", "$BE Pipe entrance", "$BF Nothing (unused?)", "$C0 Torch 00", "$C1 Torch 01", "$C2 Torch 02", "$C3 Torch 03", "$C4 Torch 04", "$C5 Torch 05", "$C6 Torch 06", "$C7 Torch 07", "$C8 Torch 08", "$C9 Torch 09", "$CA Torch 0A", "$CB Torch 0B", "$CC Torch 0C", "$CD Torch 0D", "$CE Torch 0E", "$CF Torch 0F", "$D0 Nothing (unused?)", "$D1 Nothing (unused?)", "$D2 Nothing (unused?)", "$D3 Nothing (unused?)", "$D4 Nothing (unused?)", "$D5 Nothing (unused?)", "$D6 Nothing (unused?)", "$D7 Nothing (unused?)", "$D8 Nothing (unused?)", "$D9 Nothing (unused?)", "$DA Nothing (unused?)", "$DB Nothing (unused?)", "$DC Nothing (unused?)", "$DD Nothing (unused?)", "$DE Nothing (unused?)", "$DF Nothing (unused?)", "$E0 Nothing (unused?)", "$E1 Nothing (unused?)", "$E2 Nothing (unused?)", "$E3 Nothing (unused?)", "$E4 Nothing (unused?)", "$E5 Nothing (unused?)", "$E6 Nothing (unused?)", "$E7 Nothing (unused?)", "$E8 Nothing (unused?)", "$E9 Nothing (unused?)", "$EA Nothing (unused?)", "$EB Nothing (unused?)", "$EC Nothing (unused?)", "$ED Nothing (unused?)", "$EE Nothing (unused?)", "$EF Nothing (unused?)", "$F0 Door 0 bottom", "$F1 Door 1 bottom", "$F2 Door 2 bottom", "$F3 Door 3 bottom", "$F4 Door X bottom? (unused?)", "$F5 Door X bottom? (unused?)", "$F6 Door X bottom? (unused?)", "$F7 Door X bottom? (unused?)", "$F8 Door 0 top", "$F9 Door 1 top", "$FA Door 2 top", "$FB Door 3 top", "$FC Door X top? (unused?)", "$FD Door X top? (unused?)", "$FE Door X top? (unused?)", "$FF Door X top? (unused?)"}; } // namespace constants } // namespace core } // namespace app } // namespace yaze #endif