diff --git a/src/Application/Core/constants.h b/src/Application/Core/constants.h deleted file mode 100644 index 4365b8bf..00000000 --- a/src/Application/Core/constants.h +++ /dev/null @@ -1,1232 +0,0 @@ -#ifndef YAZE_application_CORE_CONSTANTS_H -#define YAZE_application_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 application { -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; - -// =========================================================================================== -// Graphics -// =========================================================================================== - -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 graphics", - "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 application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Core/controller.cc b/src/Application/Core/controller.cc deleted file mode 100644 index 24488a7d..00000000 --- a/src/Application/Core/controller.cc +++ /dev/null @@ -1,185 +0,0 @@ -#include "controller.h" - -#include -#include -#include -#include -#include - -#include - -#include "Editor/editor.h" - -namespace yaze { -namespace application { -namespace Core { - -bool Controller::isActive() const { return active_; } - -void Controller::onEntry() { - CreateWindow(); - CreateRenderer(); - CreateGuiContext(); - editor_.SetupScreen(sdl_renderer_); - ImGuiIO &io = ImGui::GetIO(); - io.KeyMap[ImGuiKey_Backspace] = SDL_GetScancodeFromKey(SDLK_BACKSPACE); - io.KeyMap[ImGuiKey_Enter] = SDL_GetScancodeFromKey(SDLK_RETURN); - io.KeyMap[ImGuiKey_UpArrow] = SDL_GetScancodeFromKey(SDLK_UP); - io.KeyMap[ImGuiKey_DownArrow] = SDL_GetScancodeFromKey(SDLK_DOWN); - io.KeyMap[ImGuiKey_Tab] = SDL_GetScancodeFromKey(SDLK_TAB); - io.KeyMap[ImGuiKey_LeftCtrl] = SDL_GetScancodeFromKey(SDLK_LCTRL); - active_ = true; -} - -void Controller::onInput() { - int wheel = 0; - int mouseX; - int mouseY; - SDL_Event event; - ImGuiIO &io = ImGui::GetIO(); - const int buttons = SDL_GetMouseState(&mouseX, &mouseY); - - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_KEYDOWN: - switch (event.key.keysym.sym) { - case SDLK_UP: - case SDLK_DOWN: - case SDLK_RETURN: - case SDLK_BACKSPACE: - case SDLK_TAB: - io.KeysDown[event.key.keysym.scancode] = - (event.type == SDL_KEYDOWN); - break; - default: - break; - } - break; - - case SDL_KEYUP: { - int key = event.key.keysym.scancode; - IM_ASSERT(key >= 0 && key < IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[key] = (event.type == SDL_KEYDOWN); - io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); - io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); - io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); - io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0); - break; - } - case SDL_WINDOWEVENT: - switch (event.window.event) { - case SDL_WINDOWEVENT_CLOSE: - quit(); - break; - case SDL_WINDOWEVENT_SIZE_CHANGED: - io.DisplaySize.x = static_cast(event.window.data1); - io.DisplaySize.y = static_cast(event.window.data2); - break; - default: - break; - } - break; - case SDL_TEXTINPUT: - io.AddInputCharactersUTF8(event.text.text); - break; - case SDL_MOUSEWHEEL: - wheel = event.wheel.y; - break; - default: - break; - } - } - io.DeltaTime = 1.0f / 60.0f; - io.MousePos = ImVec2(static_cast(mouseX), static_cast(mouseY)); - io.MouseDown[0] = buttons & SDL_BUTTON(SDL_BUTTON_LEFT); - io.MouseDown[1] = buttons & SDL_BUTTON(SDL_BUTTON_RIGHT); - io.MouseWheel = static_cast(wheel); -} - -void Controller::onLoad() { editor_.UpdateScreen(); } - -void Controller::doRender() { - SDL_RenderClear(sdl_renderer_.get()); - ImGui::Render(); - ImGui_ImplSDLRenderer_RenderDrawData(ImGui::GetDrawData()); - SDL_RenderPresent(sdl_renderer_.get()); -} - -void Controller::onExit() { - ImGui_ImplSDLRenderer_Shutdown(); - ImGui_ImplSDL2_Shutdown(); - ImGui::DestroyContext(); - SDL_Quit(); -} - -void Controller::CreateWindow() { - if (SDL_Init(SDL_INIT_EVERYTHING)) { - SDL_Log("SDL_Init: %s\n", SDL_GetError()); - } else { - sdl_window_ = std::unique_ptr( - SDL_CreateWindow("Yet Another Zelda3 Editor", // window title - SDL_WINDOWPOS_UNDEFINED, // initial x position - SDL_WINDOWPOS_UNDEFINED, // initial y position - 1200, // width, in pixels - 800, // height, in pixels - SDL_WINDOW_RESIZABLE), - sdl_deleter()); - } -} - -void Controller::CreateRenderer() { - if (sdl_window_ == nullptr) { - SDL_Log("SDL_CreateWindow: %s\n", SDL_GetError()); - SDL_Quit(); - } else { - sdl_renderer_ = std::unique_ptr( - SDL_CreateRenderer( - sdl_window_.get(), -1, - SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC), - sdl_deleter()); - if (sdl_renderer_ == nullptr) { - SDL_Log("SDL_CreateRenderer: %s\n", SDL_GetError()); - SDL_Quit(); - } else { - SDL_SetRenderDrawBlendMode(sdl_renderer_.get(), SDL_BLENDMODE_BLEND); - SDL_SetRenderDrawColor(sdl_renderer_.get(), 0x00, 0x00, 0x00, 0x00); - } - } -} - -void Controller::CreateGuiContext() { - // Create the ImGui and ImPlot contexts - ImGui::CreateContext(); - - // Initialize ImGui for SDL - ImGui_ImplSDL2_InitForSDLRenderer(sdl_window_.get(), sdl_renderer_.get()); - ImGui_ImplSDLRenderer_Init(sdl_renderer_.get()); - - // Load available fonts - const ImGuiIO &io = ImGui::GetIO(); - io.Fonts->AddFontFromFileTTF("assets/Fonts/Karla-Regular.ttf", 14.0f); - - // merge in icons from Google Material Design - static const ImWchar icons_ranges[] = {ICON_MIN_MD, 0xf900, 0}; - ImFontConfig icons_config; - icons_config.MergeMode = true; - icons_config.GlyphOffset.y = 5.0f; - icons_config.GlyphMinAdvanceX = 13.0f; - icons_config.PixelSnapH = true; - io.Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_MD, 18.0f, &icons_config, - icons_ranges); - io.Fonts->AddFontFromFileTTF("assets/Fonts/Roboto-Medium.ttf", 14.0f); - io.Fonts->AddFontFromFileTTF("assets/Fonts/Cousine-Regular.ttf", 14.0f); - io.Fonts->AddFontFromFileTTF("assets/Fonts/DroidSans.ttf", 16.0f); - - // Set the default style - Style::ColorsYaze(); - - // Build a new ImGui frame - ImGui_ImplSDLRenderer_NewFrame(); - ImGui_ImplSDL2_NewFrame(sdl_window_.get()); -} - -} // namespace Core -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Core/controller.h b/src/Application/Core/controller.h deleted file mode 100644 index 7ed4e2f2..00000000 --- a/src/Application/Core/controller.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef YAZE_APPLICATION_CORE_CONTROLLER_H -#define YAZE_APPLICATION_CORE_CONTROLLER_H -#define SDL_MAIN_HANDLED - -#include -#include -#include -#include -#include - -#include "Editor/editor.h" -#include "Graphics/icons.h" -#include "Graphics/style.h" - -int main(int argc, char **argv); - -namespace yaze { -namespace application { -namespace Core { - -class Controller { - public: - Controller() = default; - - bool isActive() const; - void onEntry(); - void onInput(); - void onLoad(); - void doRender(); - void onExit(); - - private: - void CreateWindow(); - void CreateRenderer(); - void CreateGuiContext(); - inline void quit() { active_ = false; } - friend int ::main(int argc, char **argv); - - struct sdl_deleter { - void operator()(SDL_Window *p) const { SDL_DestroyWindow(p); } - void operator()(SDL_Renderer *p) const { SDL_DestroyRenderer(p); } - void operator()(SDL_Texture *p) const { SDL_DestroyTexture(p); } - }; - - bool active_; - Editor::Editor editor_; - std::shared_ptr sdl_window_; - std::shared_ptr sdl_renderer_; -}; - -} // namespace Core -} // namespace application -} // namespace yaze - -#endif // YAZE_APPLICATION_CORE_CONTROLLER_H \ No newline at end of file diff --git a/src/Application/Core/entry_point.h b/src/Application/Core/entry_point.h deleted file mode 100644 index c764548a..00000000 --- a/src/Application/Core/entry_point.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef YAZE_APPLICATION_CONTROLLER_ENTRYPOINT_H -#define YAZE_APPLICATION_CONTROLLER_ENTRYPOINT_H - -#include "controller.h" - -int main(int argc, char** argv) { - yaze::application::Core::Controller controller; - controller.onEntry(); - while (controller.isActive()) { - controller.onInput(); - controller.onLoad(); - controller.doRender(); - } - controller.onExit(); - return EXIT_SUCCESS; -} - -#endif // YAZE_APPLICATION_CONTROLLER_ENTRYPOINT_H \ No newline at end of file diff --git a/src/Application/Core/input.cc b/src/Application/Core/input.cc deleted file mode 100644 index e4dba475..00000000 --- a/src/Application/Core/input.cc +++ /dev/null @@ -1,25 +0,0 @@ -#include "input.h" - -#include -#include - -namespace yaze { -namespace Gui { - -const int kStepOneHex = 0x01; -const int kStepFastHex = 0x0F; - -bool InputHex(const char* label, int* data) { - return ImGui::InputScalar(label, ImGuiDataType_U64, data, &kStepOneHex, - &kStepFastHex, "%06X", - ImGuiInputTextFlags_CharsHexadecimal); -} - -bool InputHexShort(const char* label, int* data) { - return ImGui::InputScalar(label, ImGuiDataType_U32, data, &kStepOneHex, - &kStepFastHex, "%06X", - ImGuiInputTextFlags_CharsHexadecimal); -} - -} // namespace Gui -} // namespace yaze diff --git a/src/Application/Core/input.h b/src/Application/Core/input.h deleted file mode 100644 index 0c5313cc..00000000 --- a/src/Application/Core/input.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef YAZE_APPLICATION_CORE_INPUT_H -#define YAZE_APPLICATION_CORE_INPUT_H - -#include -#include - -#include -#include - -namespace yaze { -namespace Gui { - -IMGUI_API bool InputHex(const char* label, int* data); -IMGUI_API bool InputHexShort(const char* label, int* data); - -} // namespace Gui -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Data/OW/overworld.cc b/src/Application/Data/OW/overworld.cc deleted file mode 100644 index 4e270c8d..00000000 --- a/src/Application/Data/OW/overworld.cc +++ /dev/null @@ -1,349 +0,0 @@ -#include "overworld.h" - -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Data { - -using namespace Core; -using namespace Graphics; - -Overworld::~Overworld() { - if (isLoaded) { - for (int i = 0; i < (int) tiles32.size(); i++) { - free(allmapsTilesLW[i]); - free(allmapsTilesDW[i]); - free(allmapsTilesSP[i]); - } - free(allmapsTilesLW); - free(allmapsTilesDW); - free(allmapsTilesSP); - - delete[] overworldMapPointer; - delete[] owactualMapPointer; - } - -} - -static TileInfo GetTilesInfo(ushort tile) { - // vhopppcc cccccccc - ushort o = 0; - ushort v = 0; - ushort h = 0; - ushort tid = (ushort)(tile & 0x3FF); - uchar p = (uchar)((tile >> 10) & 0x07); - - o = (ushort)((tile & 0x2000) >> 13); - h = (ushort)((tile & 0x4000) >> 14); - v = (ushort)((tile & 0x8000) >> 15); - - return TileInfo(tid, p, v, h, o); -} - -void Overworld::Load(Data::ROM rom) { - rom_ = rom; - for (int i = 0; i < 0x2B; i++) { - // tileLeftEntrance.push_back( - // rom_.ReadShort(Constants::overworldEntranceAllowedTilesLeft + (i * - // 2))); - // tileRightEntrance.push_back(rom_.ReadShort( - // Constants::overworldEntranceAllowedTilesRight + (i * 2))); - } - - AssembleMap32Tiles(); - AssembleMap16Tiles(); - DecompressAllMapTiles(); - - // Map Initialization : - for (int i = 0; i < 160; i++) { - allmaps.push_back(OverworldMap(rom_, tiles16, (uchar)i)); - } - FetchLargeMaps(); - LoadOverworldMap(); - - auto size = tiles16.size(); - for (int i = 0; i < 160; i++) { - allmaps[i].BuildMap(mapParent, size, gameState, allmapsTilesLW, - allmapsTilesDW, allmapsTilesSP); - } - - isLoaded = true; -} - -ushort Overworld::GenerateTile32(int i, int k, int dimension) { - return (ushort)(rom_.GetRawData()[map32address[dimension] + k + (i)] + - (((rom_.GetRawData()[map32address[dimension] + (i) + - (k <= 1 ? 4 : 5)] >> - (k % 2 == 0 ? 4 : 0)) & - 0x0F) * - 256)); -} - -void Overworld::AssembleMap32Tiles() { - for (int i = 0; i < 0x33F0; i += 6) { - ushort tl, tr, bl, br; - for (int k = 0; k < 4; k++) { - tl = GenerateTile32(i, k, (int)Dimension::map32TilesTL); - tr = GenerateTile32(i, k, (int)Dimension::map32TilesTR); - bl = GenerateTile32(i, k, (int)Dimension::map32TilesBL); - br = GenerateTile32(i, k, (int)Dimension::map32TilesBR); - tiles32.push_back(Tile32(tl, tr, bl, br)); - } - } - - allmapsTilesLW = (ushort**)malloc(tiles32.size() * sizeof(ushort*)); - for (int i = 0; i < tiles32.size(); i++) - allmapsTilesLW[i] = (ushort*)malloc(tiles32.size() * sizeof(ushort)); - - allmapsTilesDW = (ushort**)malloc(tiles32.size() * sizeof(ushort*)); - for (int i = 0; i < tiles32.size(); i++) - allmapsTilesDW[i] = (ushort*)malloc(tiles32.size() * sizeof(ushort)); - - allmapsTilesSP = (ushort**)malloc(tiles32.size() * sizeof(ushort*)); - for (int i = 0; i < tiles32.size(); i++) - allmapsTilesSP[i] = (ushort*)malloc(tiles32.size() * sizeof(ushort)); -} - -void Overworld::AssembleMap16Tiles() { - int tpos = Core::Constants::map16Tiles; - for (int i = 0; i < 4096; i += 1) // 3760 - { - TileInfo t0 = GetTilesInfo((uintptr_t)rom_.GetRawData() + tpos); - tpos += 2; - TileInfo t1 = GetTilesInfo((uintptr_t)rom_.GetRawData() + tpos); - tpos += 2; - TileInfo t2 = GetTilesInfo((uintptr_t)rom_.GetRawData() + tpos); - tpos += 2; - TileInfo t3 = GetTilesInfo((uintptr_t)rom_.GetRawData() + tpos); - tpos += 2; - tiles16.push_back(Tile16(t0, t1, t2, t3)); - } -} - -void Overworld::DecompressAllMapTiles() { - int lowest = 0x0FFFFF; - int highest = 0x0F8000; - int sx = 0; - int sy = 0; - int c = 0; - for (int i = 0; i < 160; i++) { - int p1 = (rom_.GetRawData()[(Constants::compressedAllMap32PointersHigh) + - 2 + (int)(3 * i)] - << 16) + - (rom_.GetRawData()[(Constants::compressedAllMap32PointersHigh) + - 1 + (int)(3 * i)] - << 8) + - (rom_.GetRawData()[(Constants::compressedAllMap32PointersHigh + - (int)(3 * i))]); - - char* tmp = new char[256]; - p1 = lorom_snes_to_pc(p1, &tmp); - std::cout << tmp << std::endl; - int p2 = (rom_.GetRawData()[(Constants::compressedAllMap32PointersLow) + 2 + - (int)(3 * i)] - << 16) + - (rom_.GetRawData()[(Constants::compressedAllMap32PointersLow) + 1 + - (int)(3 * i)] - << 8) + - (rom_.GetRawData()[(Constants::compressedAllMap32PointersLow + - (int)(3 * i))]); - p2 = lorom_snes_to_pc(p2, &tmp); - std::cout << tmp << std::endl; - delete[] tmp; - - int ttpos = 0; - unsigned int compressedSize1 = 0; - unsigned int compressedSize2 = 0; - unsigned int compressedLength1 = 0; - unsigned int compressedLength2 = 0; - - if (p1 >= highest) { - highest = p1; - } - if (p2 >= highest) { - highest = p2; - } - - if (p1 <= lowest) { - if (p1 > 0x0F8000) { - lowest = p1; - } - } - if (p2 <= lowest) { - if (p2 > 0x0F8000) { - lowest = p2; - } - } - - auto bytes = - alttp_decompress_overworld((char*)rom_.GetRawData(), p2, 1000, - &compressedSize1, &compressedLength1); - auto bytes2 = - alttp_decompress_overworld((char*)rom_.GetRawData(), p1, 1000, - &compressedSize2, &compressedLength2); - - for (int y = 0; y < 16; y++) { - for (int x = 0; x < 16; x++) { - ushort tidD = (ushort)((bytes2[ttpos] << 8) + bytes[ttpos]); - - int tpos = tidD; - if (tpos < tiles32.size()) { - if (i < 64) { - allmapsTilesLW[(x * 2) + (sx * 32)][(y * 2) + (sy * 32)] = - tiles32[tpos].tile0_; - allmapsTilesLW[(x * 2) + 1 + (sx * 32)][(y * 2) + (sy * 32)] = - tiles32[tpos].tile1_; - allmapsTilesLW[(x * 2) + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile2_; - allmapsTilesLW[(x * 2) + 1 + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile3_; - } else if (i < 128 && i >= 64) { - allmapsTilesDW[(x * 2) + (sx * 32)][(y * 2) + (sy * 32)] = - tiles32[tpos].tile0_; - allmapsTilesDW[(x * 2) + 1 + (sx * 32)][(y * 2) + (sy * 32)] = - tiles32[tpos].tile1_; - allmapsTilesDW[(x * 2) + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile2_; - allmapsTilesDW[(x * 2) + 1 + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile3_; - } else { - allmapsTilesSP[(x * 2) + (sx * 32)][(y * 2) + (sy * 32)] = - tiles32[tpos].tile0_; - allmapsTilesSP[(x * 2) + 1 + (sx * 32)][(y * 2) + (sy * 32)] = - tiles32[tpos].tile1_; - allmapsTilesSP[(x * 2) + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile2_; - allmapsTilesSP[(x * 2) + 1 + (sx * 32)][(y * 2) + 1 + (sy * 32)] = - tiles32[tpos].tile3_; - } - } - - ttpos += 1; - } - } - - sx++; - if (sx >= 8) { - sy++; - sx = 0; - } - - c++; - if (c >= 64) { - sx = 0; - sy = 0; - c = 0; - } - } - - std::cout << "MapPointers(lowest) : " << lowest << std::endl; - std::cout << "MapPointers(highest) : " << highest << std::endl; -} - -void Overworld::FetchLargeMaps() { - for (int i = 128; i < 145; i++) { - mapParent[i] = 0; - } - - mapParent[128] = 128; - mapParent[129] = 129; - mapParent[130] = 129; - mapParent[137] = 129; - mapParent[138] = 129; - mapParent[136] = 136; - allmaps[136].largeMap = false; - - bool mapChecked[64]; - for (int i = 0; i < 64; i++) { - mapChecked[i] = false; - } - int xx = 0; - int yy = 0; - while (true) { - int i = xx + (yy * 8); - if (mapChecked[i] == false) { - if (allmaps[i].largeMap == true) { - mapChecked[i] = true; - mapParent[i] = (uchar)i; - mapParent[i + 64] = (uchar)(i + 64); - - mapChecked[i + 1] = true; - mapParent[i + 1] = (uchar)i; - mapParent[i + 65] = (uchar)(i + 64); - - mapChecked[i + 8] = true; - mapParent[i + 8] = (uchar)i; - mapParent[i + 72] = (uchar)(i + 64); - - mapChecked[i + 9] = true; - mapParent[i + 9] = (uchar)i; - mapParent[i + 73] = (uchar)(i + 64); - xx++; - } else { - mapParent[i] = (uchar)i; - mapParent[i + 64] = (uchar)(i + 64); - mapChecked[i] = true; - } - } - - xx++; - if (xx >= 8) { - xx = 0; - yy += 1; - if (yy >= 8) { - break; - } - } - } -} - -void Overworld::LoadOverworldMap() { - overworldMapBitmap = new Bitmap(128, 128, overworldMapPointer); - owactualMapBitmap = new Bitmap(512, 512, owactualMapPointer); - - // Mode 7 - char* ptr = overworldMapPointer; - - int pos = 0; - for (int sy = 0; sy < 16; sy++) { - for (int sx = 0; sx < 16; sx++) { - for (int y = 0; y < 8; y++) { - for (int x = 0; x < 8; x++) { - ptr[x + (sx * 8) + (y * 128) + (sy * 1024)] = - rom_.GetRawData()[0x0C4000 + pos]; - pos++; - } - } - } - } - - // ColorPalette cp = overworldMapBitmap.Palette; - // for (int i = 0; i < 256; i += 2) - // { - // //55B27 = US LW - // //55C27 = US DW - // cp.Entries[i / 2] = getColor((short)((ROM.DATA[0x55B27 + i + 1] << 8) + - // ROM.DATA[0x55B27 + i])); - - // int k = 0; - // int j = 0; - // for (int y = 10; y < 14; y++) - // { - // for (int x = 0; x < 15; x++) - // { - // cp.Entries[145 + k] = Palettes.globalSprite_Palettes[0][j]; - // k++; - // j++; - // } - // k++; - // } - // } - - // overworldMapBitmap.Palette = cp; - // owactualMapBitmap.Palette = cp; -} - -} // namespace Data -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Data/OW/overworld.h b/src/Application/Data/OW/overworld.h deleted file mode 100644 index 18db9e59..00000000 --- a/src/Application/Data/OW/overworld.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef YAZE_APPLICATION_DATA_OVERWORLD_H -#define YAZE_APPLICATION_DATA_OVERWORLD_H - -#include - -#include -#include - -#include "Core/constants.h" -#include "Data/rom.h" -#include "Graphics/bitmap.h" -#include "Graphics/tile.h" -#include "overworld_map.h" - -namespace yaze { -namespace application { -namespace Data { - -class Overworld { - public: - Overworld() = default; - ~Overworld(); - - void Load(Data::ROM rom); - - char* overworldMapPointer = new char[0x40000]; - Graphics::Bitmap* overworldMapBitmap; - - char* owactualMapPointer = new char[0x40000]; - Graphics::Bitmap* owactualMapBitmap; - - private: - Data::ROM rom_; - int gameState = 1; - bool isLoaded = false; - uchar mapParent[160]; - - ushort** allmapsTilesLW; // 64 maps * (32*32 tiles) - ushort** allmapsTilesDW; // 64 maps * (32*32 tiles) - ushort** allmapsTilesSP; // 32 maps * (32*32 tiles) - - std::vector tiles16; - std::vector tiles32; - std::vector map16tiles; - - std::vector allmaps; - - std::vector tileLeftEntrance; - std::vector tileRightEntrance; - - int map32address[4] = { - Core::Constants::map32TilesTL, Core::Constants::map32TilesTR, - Core::Constants::map32TilesBL, Core::Constants::map32TilesBR}; - - enum Dimension { - map32TilesTL = 0, - map32TilesTR = 1, - map32TilesBL = 2, - map32TilesBR = 3 - }; - - ushort GenerateTile32(int i, int k, int dimension); - void AssembleMap32Tiles(); - void AssembleMap16Tiles(); - void DecompressAllMapTiles(); - void FetchLargeMaps(); - void LoadOverworldMap(); -}; - -} // namespace Data -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Data/OW/overworld_map.cc b/src/Application/Data/OW/overworld_map.cc deleted file mode 100644 index adafaa7c..00000000 --- a/src/Application/Data/OW/overworld_map.cc +++ /dev/null @@ -1,359 +0,0 @@ -#include "overworld_map.h" - -#include "Data/rom.h" -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Data { - -using namespace Core; -using namespace Graphics; - -OverworldMap::OverworldMap(Data::ROM rom, - const std::vector tiles16, - uchar index) - : rom_(rom), index(index), tiles16_(tiles16), parent(index) { - if (index != 0x80) { - if (index <= 150) { - if (rom_.GetRawData()[Constants::overworldMapSize + (index & 0x3F)] != - 0) { - largeMap = true; - } - } - } - - if (index < 64) { - sprgfx[0] = rom_.GetRawData()[Constants::overworldSpriteset + parent]; - sprgfx[1] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 64]; - sprgfx[2] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - gfx = rom_.GetRawData()[Constants::mapGfx + parent]; - palette = rom_.GetRawData()[Constants::overworldMapPalette + parent]; - sprpalette[0] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent]; - sprpalette[1] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 64]; - sprpalette[2] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - musics[0] = rom_.GetRawData()[Constants::overworldMusicBegining + parent]; - musics[1] = rom_.GetRawData()[Constants::overworldMusicZelda + parent]; - musics[2] = - rom_.GetRawData()[Constants::overworldMusicMasterSword + parent]; - musics[3] = rom_.GetRawData()[Constants::overworldMusicAgahim + parent]; - } else if (index < 128) { - sprgfx[0] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - sprgfx[1] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - sprgfx[2] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - gfx = rom_.GetRawData()[Constants::mapGfx + parent]; - palette = rom_.GetRawData()[Constants::overworldMapPalette + parent]; - sprpalette[0] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - sprpalette[1] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - sprpalette[2] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - - musics[0] = rom_.GetRawData()[Constants::overworldMusicDW + (parent - 64)]; - } else { - if (index == 0x94) { - parent = 128; - } else if (index == 0x95) { - parent = 03; - } else if (index == 0x96) // pyramid bg use 0x5B map - { - parent = 0x5B; - } else if (index == 0x97) // pyramid bg use 0x5B map - { - parent = 0x00; - } else if (index == 156) { - parent = 67; - } else if (index == 157) { - parent = 0; - } else if (index == 158) { - parent = 0; - } else if (index == 159) { - parent = 44; - } else if (index == 136) { - parent = 136; - } - - messageID = rom_.GetRawData()[Constants::overworldMessages + parent]; - - sprgfx[0] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - sprgfx[1] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - sprgfx[2] = rom_.GetRawData()[Constants::overworldSpriteset + parent + 128]; - sprpalette[0] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - sprpalette[1] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - sprpalette[2] = - rom_.GetRawData()[Constants::overworldSpritePalette + parent + 128]; - - palette = - rom_.GetRawData()[Constants::overworldSpecialPALGroup + parent - 128]; - if (index >= 0x80 && index <= 0x8A && index != 0x88) { - gfx = rom_.GetRawData()[Constants::overworldSpecialGFXGroup + - (parent - 128)]; - palette = rom_.GetRawData()[Constants::overworldSpecialPALGroup + 1]; - } else if (index == 0x88) { - gfx = 81; - palette = 0; - } else // pyramid bg use 0x5B map - { - gfx = rom_.GetRawData()[Constants::mapGfx + parent]; - palette = rom_.GetRawData()[Constants::overworldMapPalette + parent]; - } - } -} - -void OverworldMap::BuildMap(uchar* mapParent, int count, int gameState, - ushort** allmapsTilesLW, ushort** allmapsTilesDW, - ushort** allmapsTilesSP) { - tilesUsed = new ushort*[32]; - for (int i = 0; i < 32; i++) tilesUsed[i] = new ushort; - - if (largeMap) { - this->parent = mapParent[index]; - - if (parent != index) { - if (!firstLoad) { - gfx = rom_.GetRawData()[Constants::mapGfx + parent]; - palette = rom_.GetRawData()[Constants::overworldMapPalette + parent]; - firstLoad = true; - } - } - } - - BuildTileset(gameState); - BuildTiles16Gfx(count); // build on GFX.mapgfx16Ptr - - int world = 0; - - if (index < 64) { - tilesUsed = allmapsTilesLW; - } else if (index < 128 && index >= 64) { - tilesUsed = allmapsTilesDW; - world = 1; - } else { - tilesUsed = allmapsTilesSP; - world = 2; - } - - int superY = ((index - (world * 64)) / 8); - int superX = index - (world * 64) - (superY * 8); - - for (int y = 0; y < 32; y++) { - for (int x = 0; x < 32; x++) { - CopyTile8bpp16((x * 16), (y * 16), - tilesUsed[x + (superX * 32)][y + (superY * 32)], gfxPtr, - mapblockset16); - } - } -} - -void OverworldMap::CopyTile8bpp16(int x, int y, int tile, int* destbmpPtr, - int* sourcebmpPtr) { - int sourceY = (tile / 8); - int sourceX = (tile) - ((sourceY)*8); - int sourcePtrPos = ((tile - ((tile / 8) * 8)) * 16) + - ((tile / 8) * 2048); //(sourceX * 16) + (sourceY * 128); - uchar* sourcePtr = (uchar*)sourcebmpPtr; - - int destPtrPos = (x + (y * 512)); - uchar* destPtr = (uchar*)destbmpPtr; - - for (int ystrip = 0; ystrip < 16; ystrip++) { - for (int xstrip = 0; xstrip < 16; xstrip++) { - destPtr[destPtrPos + xstrip + (ystrip * 512)] = - sourcePtr[sourcePtrPos + xstrip + (ystrip * 128)]; - } - } -} - -void OverworldMap::CopyTile8bpp16From8(int xP, int yP, int tileID, - int* destbmpPtr, int* sourcebmpPtr) { - auto gfx16Data = (uchar*)destbmpPtr; - - auto gfx8Data = currentOWgfx16Ptr; - - int offsets[] = {0, 8, 4096, 4104}; - - auto tiles = tiles16_[tileID]; - - for (auto tile = 0; tile < 4; tile++) { - TileInfo info = tiles.tiles_info[tile]; - int offset = offsets[tile]; - - for (auto y = 0; y < 8; y++) { - for (auto x = 0; x < 4; x++) { - CopyTileToMap(x, y, xP, yP, offset, info, gfx16Data, gfx8Data); - } - } - } -} - -void OverworldMap::BuildTiles16Gfx(int count) { - uchar* gfx16Data = (uchar*)mapblockset16; - uchar* gfx8Data = currentOWgfx16Ptr; - - int offsets[] = {0, 8, 1024, 1032}; - auto yy = 0; - auto xx = 0; - - for (auto i = 0; i < count; i++) // number of tiles16 3748? - { - // 8x8 tile draw - // gfx8 = 4bpp so everyting is /2F - auto tiles = tiles16_[i]; - - for (auto tile = 0; tile < 4; tile++) { - TileInfo info = tiles16_[i].tiles_info[tile]; - int offset = offsets[tile]; - - for (auto y = 0; y < 8; y++) { - for (auto x = 0; x < 4; x++) { - CopyTile(x, y, xx, yy, offset, info, gfx16Data, gfx8Data); - } - } - } - - xx += 16; - if (xx >= 128) { - yy += 2048; - xx = 0; - } - } -} - -void OverworldMap::CopyTile(int x, int y, int xx, int yy, int offset, - TileInfo tile, uchar* gfx16Pointer, - uchar* gfx8Pointer) // map,current -{ - int mx = x; - int my = y; - uchar r = 0; - - if (tile.horizontal_mirror_ != 0) { - mx = 3 - x; - r = 1; - } - - if (tile.vertical_mirror_ != 0) { - my = 7 - y; - } - - int tx = ((tile.id_ / 16) * 512) + ((tile.id_ - ((tile.id_ / 16) * 16)) * 4); - auto index = xx + yy + offset + (mx * 2) + (my * 128); - auto pixel = gfx8Pointer[tx + (y * 64) + x]; - - gfx16Pointer[index + r ^ 1] = (uchar)((pixel & 0x0F) + tile.palette_ * 16); - gfx16Pointer[index + r] = (uchar)(((pixel >> 4) & 0x0F) + tile.palette_ * 16); -} - -void OverworldMap::CopyTileToMap(int x, int y, int xx, int yy, int offset, - TileInfo tile, uchar* gfx16Pointer, - uchar* gfx8Pointer) // map,current -{ - int mx = x; - int my = y; - uchar r = 0; - - if (tile.horizontal_mirror_ != 0) { - mx = 3 - x; - r = 1; - } - - if (tile.vertical_mirror_ != 0) { - my = 7 - y; - } - - int tx = ((tile.id_ / 16) * 512) + ((tile.id_ - ((tile.id_ / 16) * 16)) * 4); - auto index = xx + (yy * 512) + offset + (mx * 2) + (my * 512); - auto pixel = gfx8Pointer[tx + (y * 64) + x]; - - gfx16Pointer[index + r ^ 1] = (uchar)((pixel & 0x0F) + tile.palette_ * 16); - gfx16Pointer[index + r] = (uchar)(((pixel >> 4) & 0x0F) + tile.palette_ * 16); -} - -void OverworldMap::BuildTileset(int gameState) { - int indexWorld = 0x20; - if (parent < 0x40) { - indexWorld = 0x20; - } else if (parent >= 0x40 && parent < 0x80) { - indexWorld = 0x21; - } else if (parent == 0x88) { - indexWorld = 36; - } - - // Sprites Blocksets - staticgfx[8] = 115 + 0; - staticgfx[9] = 115 + 1; - staticgfx[10] = 115 + 6; - staticgfx[11] = 115 + 7; - for (int i = 0; i < 4; i++) { - staticgfx[12 + i] = - (uchar)(rom_.GetRawData()[Constants::sprite_blockset_pointer + - (sprgfx[gameState] * 4) + i] + - 115); - } - - // Main Blocksets - for (int i = 0; i < 8; i++) { - staticgfx[i] = rom_.GetRawData()[Constants::overworldgfxGroups2 + - (indexWorld * 8) + i]; - } - - if (rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4)] != 0) { - staticgfx[3] = rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4)]; - } - if (rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4) + 1] != 0) { - staticgfx[4] = - rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4) + 1]; - } - if (rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4) + 2] != 0) { - staticgfx[5] = - rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4) + 2]; - } - if (rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4) + 3] != 0) { - staticgfx[6] = - rom_.GetRawData()[Constants::overworldgfxGroups + (gfx * 4) + 3]; - } - - // Hardcoded overworld GFX Values, for death mountain - if ((parent >= 0x03 && parent <= 0x07) || - (parent >= 0x0B && parent <= 0x0E)) { - staticgfx[7] = 89; - } else if ((parent >= 0x43 && parent <= 0x47) || - (parent >= 0x4B && parent <= 0x4E)) { - staticgfx[7] = 89; - } else { - staticgfx[7] = 91; - } - - uchar* currentmapgfx8Data = new uchar[(128 * 512) / 2]; - // (uchar*)GFX.currentOWgfx16Ptr.ToPointer(); // loaded gfx for the current - // // map (empty at this point) - uchar* allgfxData = new uchar[(128 * 7136) / 2]; - // (uchar*)GFX.allgfx16Ptr - // .ToPointer(); // all gfx of the game pack of 2048 uchars (4bpp) - - for (int i = 0; i < 16; i++) { - for (int j = 0; j < 2048; j++) { - uchar mapByte = allgfxData[j + (staticgfx[i] * 2048)]; - switch (i) { - case 0: - case 3: - case 4: - case 5: - mapByte += 0x88; - break; - } - - currentmapgfx8Data[(i * 2048) + j] = mapByte; // Upload used gfx data - } - } -} - -} // namespace Data -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Data/OW/overworld_map.h b/src/Application/Data/OW/overworld_map.h deleted file mode 100644 index e95ebac6..00000000 --- a/src/Application/Data/OW/overworld_map.h +++ /dev/null @@ -1,77 +0,0 @@ -#include - -#include -#include - -#include "Data/rom.h" -#include "Graphics/bitmap.h" -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Data { - -using ushort = unsigned short; - -class OverworldMap { - public: - uchar parent = 0; - uchar index = 0; - uchar gfx = 0; - uchar palette = 0; - bool firstLoad = false; - short messageID = 0; - bool largeMap = false; - - uchar sprgfx[3]; - uchar sprpalette[3]; - uchar musics[4]; - - int* gfxPtr = new int[512 * 512]; - int* mapblockset16 = new int[1048576]; - Graphics::Bitmap mapblockset16Bitmap; - Graphics::Bitmap gfxBitmap; - - uchar* staticgfx = - new uchar[16]; // Need to be used to display map and not pre render it! - ushort** tilesUsed; - - bool needRefresh = false; - Data::ROM rom_; - - uchar* currentOWgfx16Ptr = new uchar[(128 * 512) / 2]; - std::vector tiles16_; - - OverworldMap(Data::ROM rom, const std::vector tiles16, - uchar index); - void BuildMap(uchar* mapParent, int count, int gameState, - ushort** allmapsTilesLW, ushort** allmapsTilesDW, - ushort** allmapsTilesSP); - void CopyTile8bpp16(int x, int y, int tile, int* destbmpPtr, - int* sourcebmpPtr); - void CopyTile8bpp16From8(int xP, int yP, int tileID, int* destbmpPtr, - int* sourcebmpPtr); - - private: - void BuildTiles16Gfx(int count); - // void ReloadPalettes() { LoadPalette(); } - - void CopyTile(int x, int y, int xx, int yy, int offset, - Graphics::TileInfo tile, uchar* gfx16Pointer, - uchar* gfx8Pointer); - void CopyTileToMap(int x, int y, int xx, int yy, int offset, - Graphics::TileInfo tile, uchar* gfx16Pointer, - uchar* gfx8Pointer); - - void LoadPalette(); - - void SetColorsPalette(int index, ImVec4 main, ImVec4 animated, ImVec4 aux1, - ImVec4 aux2, ImVec4 hud, ImVec4 bgrcolor, ImVec4 spr, - ImVec4 spr2); - - void BuildTileset(int gameState); -}; - -} // namespace Data -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Data/rom.cc b/src/Application/Data/rom.cc deleted file mode 100644 index 57d9d821..00000000 --- a/src/Application/Data/rom.cc +++ /dev/null @@ -1,242 +0,0 @@ -#include "rom.h" - -#include - -#include "Core/constants.h" - -namespace yaze { -namespace application { -namespace Data { - -ROM::~ROM() { - if (loaded) { - delete[] current_rom_; - } -} - -// TODO: check if the rom has a header on load -void ROM::LoadFromFile(const std::string &path) { - size_ = std::filesystem::file_size(path.c_str()); - std::ifstream file(path.c_str(), std::ios::binary); - if (!file.is_open()) { - std::cout << "Error: Could not open ROM file " << path << std::endl; - return; - } - current_rom_ = new unsigned char[size_]; - for (unsigned int i = 0; i < size_; i++) { - char byte_read_ = ' '; - file.read(&byte_read_, sizeof(char)); - current_rom_[i] = byte_read_; - } - file.close(); - memcpy(title, current_rom_ + 32704, 21); - version_ = current_rom_[27]; - loaded = true; -} - -std::vector ROM::ExtractTiles(Graphics::TilePreset &preset) { - std::cout << "Extracting tiles..." << std::endl; - uint filePos = 0; - uint size_out = 0; - uint size = preset.length_; - int tilePos = preset.pc_tiles_location_; - std::vector rawTiles; - filePos = GetRomPosition(preset, tilePos, preset.SNESTilesLocation); - std::cout << "ROM Position: " << filePos << " from " - << preset.SNESTilesLocation << std::endl; - - // decompress the graphics - auto data = (char *)malloc(sizeof(char) * size); - memcpy(data, (current_rom_ + filePos), size); - data = alttp_decompress_gfx(data, 0, size, &size_out, &compressed_size_); - std::cout << "size: " << size << std::endl; - std::cout << "lastCompressedSize: " << compressed_size_ << std::endl; - if (data == nullptr) { - std::cout << alttp_decompression_error << std::endl; - return rawTiles; - } - - // unpack the tiles based on their depth - unsigned tileCpt = 0; - std::cout << "Unpacking tiles..." << std::endl; - for (unsigned int tilePos = 0; tilePos < size; - tilePos += preset.bits_per_pixel_ * 8) { - tile8 newTile = unpack_bpp_tile(data, tilePos, preset.bits_per_pixel_); - newTile.id = tileCpt; - rawTiles.push_back(newTile); - tileCpt++; - } - std::cout << "Done unpacking tiles" << std::endl; - free(data); - std::cout << "Done extracting tiles." << std::endl; - return rawTiles; -} - -Graphics::SNESPalette ROM::ExtractPalette(Graphics::TilePreset &preset) { - unsigned int filePos = GetRomPosition(preset, preset.pc_palette_location_, - preset.SNESPaletteLocation); - std::cout << "Palette pos : " << filePos << std::endl; // TODO: make this hex - unsigned int palette_size = pow(2, preset.bits_per_pixel_); // - 1; - - auto palette_data = std::make_unique(palette_size * 2); - memcpy(palette_data.get(), current_rom_ + filePos, palette_size * 2); - - // char *ab = (char *)malloc(sizeof(char) * (palette_size * 2)); - // memcpy(ab, current_rom_ + filePos, palette_size * 2); - - for (int i = 0; i < palette_size; i++) { - std::cout << palette_data[i]; - } - std::cout << std::endl; - - const unsigned char *data = palette_data.get(); - Graphics::SNESPalette pal(data); - if (preset.no_zero_color_) { - Graphics::SNESColor col; - - col.setRgb(ImVec4(153, 153, 153, 255)); - pal.colors.push_back(col); - pal.colors.erase(pal.colors.begin(), - pal.colors.begin() + pal.colors.size() - 1); - } - return pal; -} - -uint32_t ROM::GetRomPosition(const Graphics::TilePreset &preset, int directAddr, - unsigned int snesAddr) const { - unsigned int filePos = -1; - std::cout << "directAddr:" << directAddr << std::endl; - if (directAddr == -1) { - filePos = rommapping_snes_to_pc(snesAddr, type_, has_header_); - } else { - filePos = directAddr; - if (has_header_) filePos += 0x200; - } - std::cout << "filePos:" << filePos << std::endl; - return filePos; -} - -unsigned char *sheetBuffer = (unsigned char *)malloc(0x1000); -unsigned char bitmask[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; -void SNES3bppTo8bppSheet() // 128x32 -{ - int xx = 0; // positions where we are at on the sheet - int yy = 0; - int pos = 0; - int ypos = 0; - for (int i = 0; i < 64; i++) // for each tiles //16 per lines - { - for (int y = 0; y < 8; y++) // for each lines - { - //[0] + [1] + [16] - for (int x = 0; x < 8; x++) { - unsigned char b1 = - (unsigned char)((buffer[(y * 2) + (24 * pos)] & (bitmask[x]))); - unsigned char b2 = - (unsigned char)(buffer[((y * 2) + (24 * pos)) + 1] & (bitmask[x])); - unsigned char b3 = - (unsigned char)(buffer[(16 + y) + (24 * pos)] & (bitmask[x])); - unsigned char b = 0; - if (b1 != 0) { - b |= 1; - }; - if (b2 != 0) { - b |= 2; - }; - if (b3 != 0) { - b |= 4; - }; - sheetBuffer[x + (xx) + (y * 128) + (yy * 1024)] = b; - } - } - pos++; - ypos++; - xx += 8; - if (ypos >= 16) { - yy++; - xx = 0; - ypos = 0; - } - } -} - -char *Decompress(int pos, bool reversed = false) { - // char* buffer = new char[0x800]; - for (int i = 0; i < 0x800; i++) { - buffer[i] = 0; - } - unsigned int bufferPos = 0; - unsigned char cmd = 0; - unsigned int length = 0; - unsigned char databyte = (unsigned char)romData[pos]; - while (true) { - databyte = (unsigned char)romData[pos]; - if (databyte == 0xFF) // End of decompression - { - break; - } - - if ((databyte & 0xE0) == 0xE0) // Expanded Command - { - cmd = (unsigned char)((databyte >> 2) & 0x07); - length = - (unsigned short)(((romData[pos] << 8) | romData[pos + 1]) & 0x3FF); - pos += 2; // Advance 2 bytes in ROM - } else // Normal Command - { - cmd = (unsigned char)((databyte >> 5) & 0x07); - length = (unsigned char)(databyte & 0x1F); - pos += 1; // Advance 1 byte in ROM - } - length += 1; // Every commands are at least 1 size even if 00 - switch (cmd) { - case 00: // Direct Copy (Could be replaced with a MEMCPY) - for (int i = 0; i < length; i++) { - buffer[bufferPos++] = (unsigned char)romData[pos++]; - } - // Do not advance in the ROM - break; - case 01: // Byte Fill - for (int i = 0; i < length; i++) { - buffer[bufferPos++] = (unsigned char)romData[pos]; - } - pos += 1; // Advance 1 byte in the ROM - break; - case 02: // Word Fill - for (int i = 0; i < length; i += 2) { - buffer[bufferPos++] = (unsigned char)romData[pos]; - buffer[bufferPos++] = (unsigned char)romData[pos + 1]; - } - pos += 2; // Advance 2 byte in the ROM - break; - case 03: // Increasing Fill - { - unsigned char incByte = (unsigned char)romData[pos]; - for (int i = 0; i < (unsigned int)length; i++) { - buffer[bufferPos++] = (unsigned char)incByte++; - } - pos += 1; // Advance 1 byte in the ROM - } break; - case 04: // Repeat (Reversed byte order for maps) - { - unsigned short s1 = ((romData[pos + 1] & 0xFF) << 8); - unsigned short s2 = ((romData[pos] & 0xFF)); - unsigned short Addr = (unsigned short)(s1 | s2); - for (int i = 0; i < length; i++) { - buffer[bufferPos] = (unsigned char)buffer[Addr + i]; - bufferPos++; - } - pos += 2; // Advance 2 bytes in the ROM - } break; - } - } - return buffer; -} - -int AddressFromBytes(uchar addr1, uchar addr2, uchar addr3) { - return (addr1 << 16) | (addr2 << 8) | addr3; -} - -} // namespace Data -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Data/rom.h b/src/Application/Data/rom.h deleted file mode 100644 index c99ea6ac..00000000 --- a/src/Application/Data/rom.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef YAZE_application_UTILS_ROM_H -#define YAZE_application_UTILS_ROM_H - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "Core/constants.h" -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Data { - -int AddressFromBytes(uchar addr1, uchar addr2, uchar addr3); - -class ROM { - public: - ~ROM(); - - void LoadFromFile(const std::string& path); - std::vector ExtractTiles(Graphics::TilePreset& preset); - Graphics::SNESPalette ExtractPalette(Graphics::TilePreset& preset); - uint32_t GetRomPosition(const Graphics::TilePreset& preset, int directAddr, - unsigned int snesAddr) const; - inline uchar* GetRawData() { return current_rom_; } - const uchar* getTitle() const { return title; } - long int getSize() const { return size_; } - char getVersion() const { return version_; } - bool isLoaded() const { return loaded; } - - private: - bool loaded = false; - bool has_header_ = false; - uchar* current_rom_; - uchar version_; - uchar title[21] = "ROM Not Loaded"; - uint uncompressed_size_; - uint compressed_size_; - uint compress_size_; - long int size_; - enum rom_type type_ = LoROM; - - std::shared_ptr rom_ptr_; -}; - -} // namespace Data -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Editor/editor.cc b/src/Application/Editor/editor.cc deleted file mode 100644 index 35032928..00000000 --- a/src/Application/Editor/editor.cc +++ /dev/null @@ -1,510 +0,0 @@ -#include "editor.h" - -#include "Graphics/palette.h" -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Editor { - -using namespace Core; - -Editor::Editor() { - for (auto &k : Core::Constants::kKeywords) - language_65816_.mKeywords.emplace(k); - - for (auto &k : Core::Constants::kIdentifiers) { - TextEditor::Identifier id; - id.mDeclaration = "Built-in function"; - language_65816_.mIdentifiers.insert(std::make_pair(std::string(k), id)); - } - - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "[ \\t]*#[ \\t]*[a-zA-Z_]+", TextEditor::PaletteIndex::Preprocessor)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "L?\\\"(\\\\.|[^\\\"])*\\\"", TextEditor::PaletteIndex::String)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "\\'\\\\?[^\\']\\'", TextEditor::PaletteIndex::CharLiteral)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)([eE][+-]?[0-9]+)?[fF]?", - TextEditor::PaletteIndex::Number)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "[+-]?[0-9]+[Uu]?[lL]?[lL]?", TextEditor::PaletteIndex::Number)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "0[0-7]+[Uu]?[lL]?[lL]?", TextEditor::PaletteIndex::Number)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "0[xX][0-9a-fA-F]+[uU]?[lL]?[lL]?", - TextEditor::PaletteIndex::Number)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "[a-zA-Z_][a-zA-Z0-9_]*", TextEditor::PaletteIndex::Identifier)); - language_65816_.mTokenRegexStrings.push_back( - std::make_pair( - "[\\[\\]\\{\\}\\!\\%\\^\\&\\*\\(\\)\\-\\+\\=\\~\\|\\<\\>\\?\\/" - "\\;\\,\\.]", - TextEditor::PaletteIndex::Punctuation)); - - language_65816_.mCommentStart = "/*"; - language_65816_.mCommentEnd = "*/"; - language_65816_.mSingleLineComment = ";"; - - language_65816_.mCaseSensitive = false; - language_65816_.mAutoIndentation = true; - - language_65816_.mName = "65816"; - asm_editor_.SetLanguageDefinition(language_65816_); - asm_editor_.SetPalette(TextEditor::GetDarkPalette()); - - current_set_.bits_per_pixel_ = 4; - current_set_.pc_tiles_location_ = 0x80000; - current_set_.SNESTilesLocation = 0x0000; - current_set_.length_ = 28672; - current_set_.pc_palette_location_ = 906022; - current_set_.SNESPaletteLocation = 0; -} - -void Editor::SetupScreen(std::shared_ptr renderer) { - sdl_renderer_ = renderer; -} - -void Editor::UpdateScreen() { - const ImGuiIO &io = ImGui::GetIO(); - ImGui::NewFrame(); - ImGui::SetNextWindowPos(ImVec2(0, 0)); - ImVec2 dimensions(io.DisplaySize.x, io.DisplaySize.y); - ImGui::SetNextWindowSize(dimensions, ImGuiCond_Always); - - if (!ImGui::Begin("##YazeMain", nullptr, main_editor_flags_)) { - ImGui::End(); - return; - } - - DrawYazeMenu(); - - TAB_BAR("##TabBar") - DrawProjectEditor(); - DrawOverworldEditor(); - DrawDungeonEditor(); - DrawGraphicsEditor(); - DrawSpriteEditor(); - DrawScreenEditor(); - END_TAB_BAR() - - ImGui::End(); -} - -void Editor::DrawYazeMenu() { - MENU_BAR() - DrawFileMenu(); - DrawEditMenu(); - DrawViewMenu(); - DrawHelpMenu(); - END_MENU_BAR() - - if (ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey")) { - if (ImGuiFileDialog::Instance()->IsOk()) { - std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName(); - std::string filePath = ImGuiFileDialog::Instance()->GetCurrentPath(); - rom_.LoadFromFile(filePathName); - overworld_editor_.SetRom(rom_); - rom_data_ = (void *)rom_.GetRawData(); - } - ImGuiFileDialog::Instance()->Close(); - } -} - -void Editor::DrawFileMenu() const { - if (ImGui::BeginMenu("File")) { - if (ImGui::MenuItem("Open", "Ctrl+O")) { - ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Open ROM", - ".sfc,.smc", "."); - } - if (ImGui::BeginMenu("Open Recent")) { - ImGui::MenuItem("alttp.sfc"); - ImGui::EndMenu(); - } - if (ImGui::MenuItem("Save", "Ctrl+S")) { - // TODO: Implement this - } - if (ImGui::MenuItem("Save As..")) { - // TODO: Implement this - } - - ImGui::Separator(); - - // TODO: Make these options matter - if (ImGui::BeginMenu("Options")) { - static bool enabled = true; - ImGui::MenuItem("Enabled", "", &enabled); - ImGui::BeginChild("child", ImVec2(0, 60), true); - for (int i = 0; i < 10; i++) ImGui::Text("Scrolling Text %d", i); - ImGui::EndChild(); - static float f = 0.5f; - static int n = 0; - ImGui::SliderFloat("Value", &f, 0.0f, 1.0f); - ImGui::InputFloat("Input", &f, 0.1f); - ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0"); - ImGui::EndMenu(); - } - ImGui::EndMenu(); - } -} - -void Editor::DrawEditMenu() const { - if (ImGui::BeginMenu("Edit")) { - if (ImGui::MenuItem("Undo", "Ctrl+Z")) { - // TODO: Implement this - } - if (ImGui::MenuItem("Undo", "Ctrl+Y")) { - // TODO: Implement this - } - ImGui::Separator(); - if (ImGui::MenuItem("Cut", "Ctrl+X")) { - // TODO: Implement this - } - if (ImGui::MenuItem("Copy", "Ctrl+C")) { - // TODO: Implement this - } - if (ImGui::MenuItem("Paste", "Ctrl+V")) { - // TODO: Implement this - } - ImGui::Separator(); - if (ImGui::MenuItem("Find", "Ctrl+F")) { - // TODO: Implement this - } - ImGui::EndMenu(); - } -} - -void Editor::DrawViewMenu() { - static bool show_imgui_metrics = false; - static bool show_imgui_style_editor = false; - static bool show_memory_editor = false; - static bool show_asm_editor = false; - static bool show_imgui_demo = false; - - if (show_imgui_metrics) { - ImGui::ShowMetricsWindow(&show_imgui_metrics); - } - - if (show_memory_editor) { - static MemoryEditor mem_edit; - mem_edit.DrawWindow("Memory Editor", rom_data_, rom_.getSize()); - } - - if (show_imgui_demo) { - ImGui::ShowDemoWindow(); - } - - if (show_asm_editor) { - static bool asm_is_loaded = false; - auto cpos = asm_editor_.GetCursorPosition(); - static const char *fileToEdit = "assets/bunnyhood.asm"; - if (!asm_is_loaded) { - std::ifstream t(fileToEdit); - if (t.good()) { - std::string str((std::istreambuf_iterator(t)), - std::istreambuf_iterator()); - asm_editor_.SetText(str); - } - asm_is_loaded = true; - } - - ImGui::Begin("ASM Editor", &show_asm_editor); - ImGui::Text("%6d/%-6d %6d lines | %s | %s | %s | %s", cpos.mLine + 1, - cpos.mColumn + 1, asm_editor_.GetTotalLines(), - asm_editor_.IsOverwrite() ? "Ovr" : "Ins", - asm_editor_.CanUndo() ? "*" : " ", - asm_editor_.GetLanguageDefinition().mName.c_str(), fileToEdit); - - asm_editor_.Render(fileToEdit); - ImGui::End(); - } - - if (show_imgui_style_editor) { - ImGui::Begin("Style Editor (ImGui)", &show_imgui_style_editor); - ImGui::ShowStyleEditor(); - ImGui::End(); - } - - if (ImGui::BeginMenu("View")) { - ImGui::MenuItem("HEX Editor", nullptr, &show_memory_editor); - ImGui::MenuItem("ASM Editor", nullptr, &show_asm_editor); - ImGui::MenuItem("ImGui Demo", nullptr, &show_imgui_demo); - - ImGui::Separator(); - if (ImGui::BeginMenu("GUI Tools")) { - ImGui::MenuItem("Metrics (ImGui)", nullptr, &show_imgui_metrics); - ImGui::MenuItem("Style Editor (ImGui)", nullptr, - &show_imgui_style_editor); - ImGui::EndMenu(); - } - ImGui::EndMenu(); - } -} - -void Editor::DrawHelpMenu() const { - if (ImGui::BeginMenu("Help")) { - if (ImGui::MenuItem("About")) { - } - ImGui::EndMenu(); - } -} - -void Editor::DrawSurface() { - arranged_tiles_ = - Graphics::TilesPattern::transform(current_set_.tilesPattern, tiles_); - for (unsigned int j = 0; j < arranged_tiles_.size(); j++) { - for (unsigned int i = 0; i < arranged_tiles_[0].size(); i++) { - tile8 tile = arranged_tiles_[j][i]; - // SDL_PIXELFORMAT_RGB888 ? - SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat( - 0, 8, 8, SDL_BITSPERPIXEL(4), SDL_PIXELFORMAT_RGB444); - if (surface == nullptr) { - SDL_Log("SDL_CreateRGBSurfaceWithFormat() failed: %s", SDL_GetError()); - exit(1); - } - SDL_PixelFormat *format = surface->format; - format->palette = current_palette_.GetSDL_Palette(); - uchar *ptr = (uchar *)surface->pixels; - - for (int k = 0; k < 8; k++) { - for (int l = 0; l < 8; l++) { - ptr[k * 8 + l] = tile.data[k * 8 + l]; - } - } - - SDL_Texture *texture = - SDL_CreateTextureFromSurface(sdl_renderer_.get(), surface); - if (texture == nullptr) { - std::cout << "Error: " << SDL_GetError() << std::endl; - } - imagesCache[tile.id] = texture; - } - } -} - -void Editor::DrawProjectEditor() { - if (ImGui::BeginTabItem("Project")) { - if (ImGui::BeginTable("##projectTable", 2, - ImGuiTableFlags_SizingStretchSame)) { - ImGui::TableSetupColumn("##inputs"); - ImGui::TableSetupColumn("##outputs"); - - ImGui::TableNextColumn(); - ImGui::Text("Title: %s", rom_.getTitle()); - ImGui::Text("Version: %d", rom_.getVersion()); - ImGui::Text("ROM Size: %ld", rom_.getSize()); - - ImGui::InputInt("Bits per Pixel", ¤t_set_.bits_per_pixel_); - - yaze::Gui::InputHex("PC Tile Location", ¤t_set_.pc_tiles_location_); - - yaze::Gui::InputHex("SNES Tile Location", - ¤t_set_.SNESTilesLocation); - - ImGui::InputInt("Tile Preset Length", ¤t_set_.length_); - - ImGui::InputInt("PC Palette Location", - ¤t_set_.pc_palette_location_); - - yaze::Gui::InputHex("SNES Palette Location", - ¤t_set_.SNESPaletteLocation); - - BASIC_BUTTON("ExtractTiles") { - if (rom_.isLoaded()) { - tiles_ = rom_.ExtractTiles(current_set_); - } - } - - BASIC_BUTTON("ExtractPalette") { - if (rom_.isLoaded()) { - current_palette_ = rom_.ExtractPalette(current_set_); - } - } - - BASIC_BUTTON("BuildSurface") { - if (rom_.isLoaded()) { - DrawSurface(); - } - } - - static int i = 0; - for (auto &[key, texture] : imagesCache) { - ImGui::Image((void *)(SDL_Texture *)texture, ImVec2(32, 32)); - if (i != 16) { - ImGui::SameLine(); - } else if (i == 16) { - i = 0; - } - i++; - } - - ImGui::TableNextColumn(); - - static ImVector points; - static ImVec2 scrolling(0.0f, 0.0f); - static bool opt_enable_context_menu = true; - static bool opt_enable_grid = true; - ImVec2 canvas_p0 = ImGui::GetCursorScreenPos(); - ImVec2 canvas_sz = ImGui::GetContentRegionAvail(); - ImVec2 canvas_p1 = - ImVec2(canvas_p0.x + canvas_sz.x, canvas_p0.y + canvas_sz.y); - - // Draw border and background color - const ImGuiIO &io = ImGui::GetIO(); - ImDrawList *draw_list = ImGui::GetWindowDrawList(); - draw_list->AddRectFilled(canvas_p0, canvas_p1, IM_COL32(32, 32, 32, 255)); - draw_list->AddRect(canvas_p0, canvas_p1, IM_COL32(255, 255, 255, 255)); - - // This will catch our interactions - ImGui::InvisibleButton( - "canvas", canvas_sz, - ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight); - const bool is_hovered = ImGui::IsItemHovered(); // Hovered - const bool is_active = ImGui::IsItemActive(); // Held - const ImVec2 origin(canvas_p0.x + scrolling.x, - canvas_p0.y + scrolling.y); // Lock scrolled origin - const ImVec2 mouse_pos_in_canvas(io.MousePos.x - origin.x, - io.MousePos.y - origin.y); - - // Pan (we use a zero mouse threshold when there's no context menu) - const float mouse_threshold_for_pan = - opt_enable_context_menu ? -1.0f : 0.0f; - if (is_active && ImGui::IsMouseDragging(ImGuiMouseButton_Right, - mouse_threshold_for_pan)) { - scrolling.x += io.MouseDelta.x; - scrolling.y += io.MouseDelta.y; - } - - // Context menu (under default mouse threshold) - ImVec2 drag_delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right); - if (opt_enable_context_menu && drag_delta.x == 0.0f && - drag_delta.y == 0.0f) - ImGui::OpenPopupOnItemClick("context", - ImGuiPopupFlags_MouseButtonRight); - if (ImGui::BeginPopup("context")) { - ImGui::MenuItem("Placeholder"); - ImGui::EndPopup(); - } - - // Draw grid + all lines in the canvas - draw_list->PushClipRect(canvas_p0, canvas_p1, true); - if (opt_enable_grid) { - const float GRID_STEP = 64.0f; - for (float x = fmodf(scrolling.x, GRID_STEP); x < canvas_sz.x; - x += GRID_STEP) - draw_list->AddLine(ImVec2(canvas_p0.x + x, canvas_p0.y), - ImVec2(canvas_p0.x + x, canvas_p1.y), - IM_COL32(200, 200, 200, 40)); - for (float y = fmodf(scrolling.y, GRID_STEP); y < canvas_sz.y; - y += GRID_STEP) - draw_list->AddLine(ImVec2(canvas_p0.x, canvas_p0.y + y), - ImVec2(canvas_p1.x, canvas_p0.y + y), - IM_COL32(200, 200, 200, 40)); - } - - if (current_scene_.imagesCache.size() != 0) { - for (const auto &[key, value] : current_scene_.imagesCache) { - const float GRID_STEP = 8.0f; - float x = fmodf(scrolling.x, GRID_STEP); - float y = fmodf(scrolling.y, GRID_STEP); - draw_list->AddImage((void *)(SDL_Surface *)value, - ImVec2(canvas_p0.x + x, canvas_p0.y), - ImVec2(canvas_p0.x + x, canvas_p1.y)); - x += GRID_STEP; - if (x == 128) { - x = 0; - y += GRID_STEP; - } - } - } - - draw_list->PopClipRect(); - - ImGui::EndTable(); - } - ImGui::EndTabItem(); - } -} - -void Editor::DrawOverworldEditor() { - if (ImGui::BeginTabItem("Overworld")) { - overworld_editor_.Update(); - ImGui::EndTabItem(); - } -} - -void Editor::DrawDungeonEditor() { - if (ImGui::BeginTabItem("Dungeon")) { - if (ImGui::BeginTable("DWToolset", 9, toolset_table_flags_, ImVec2(0, 0))) { - ImGui::TableSetupColumn("#undoTool"); - ImGui::TableSetupColumn("#redoTool"); - ImGui::TableSetupColumn("#history"); - ImGui::TableSetupColumn("#separator"); - ImGui::TableSetupColumn("#bg1Tool"); - ImGui::TableSetupColumn("#bg2Tool"); - ImGui::TableSetupColumn("#bg3Tool"); - ImGui::TableSetupColumn("#itemTool"); - ImGui::TableSetupColumn("#spriteTool"); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_UNDO); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_REDO); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_MANAGE_HISTORY); - - ImGui::TableNextColumn(); - ImGui::Text(ICON_MD_MORE_VERT); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_FILTER_1); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_FILTER_2); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_FILTER_3); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_GRASS); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_PEST_CONTROL_RODENT); - ImGui::EndTable(); - } - ImGui::EndTabItem(); - } -} - -void Editor::DrawGraphicsEditor() { - if (ImGui::BeginTabItem("Graphics")) { - ImGui::EndTabItem(); - } -} - -void Editor::DrawSpriteEditor() { - if (ImGui::BeginTabItem("Sprites")) { - ImGui::EndTabItem(); - } -} - -void Editor::DrawScreenEditor() { - if (ImGui::BeginTabItem("Screens")) { - ImGui::EndTabItem(); - } -} - -} // namespace Editor -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Editor/editor.h b/src/Application/Editor/editor.h deleted file mode 100644 index d39026dd..00000000 --- a/src/Application/Editor/editor.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef YAZE_APPLICATION_VIEW_EDITOR_H -#define YAZE_APPLICATION_VIEW_EDITOR_H - -#include -#include -#include -#include -#include - -#include "Core/constants.h" -#include "Core/input.h" -#include "Data/rom.h" -#include "Editor/overworld_editor.h" -#include "Graphics/icons.h" -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Editor { - -class Editor { - public: - Editor(); - void SetupScreen(std::shared_ptr renderer); - void UpdateScreen(); - - private: - void DrawYazeMenu(); - void DrawFileMenu() const; - void DrawEditMenu() const; - void DrawViewMenu(); - void DrawHelpMenu() const; - - void DrawSurface(); - void DrawProjectEditor(); - void DrawOverworldEditor(); - void DrawDungeonEditor(); - void DrawGraphicsEditor(); - void DrawSpriteEditor(); - void DrawScreenEditor(); - - void *rom_data_; - bool is_loaded_ = true; - - std::vector tiles_; - std::vector> arranged_tiles_; - std::unordered_map> texture_cache_; - std::unordered_map imagesCache; - std::shared_ptr sdl_renderer_; - - Data::ROM rom_; - TextEditor asm_editor_; - TextEditor::LanguageDefinition language_65816_; - OverworldEditor overworld_editor_; - - Graphics::Scene current_scene_; - Graphics::SNESPalette current_palette_; - Graphics::TilePreset current_set_; - - ImGuiWindowFlags main_editor_flags_ = - ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoScrollbar | - ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoTitleBar; - ImGuiTableFlags toolset_table_flags_ = ImGuiTableFlags_SizingFixedFit; -}; - -} // namespace Editor -} // namespace application -} // namespace yaze - -#endif // YAZE_APPLICATION_VIEW_EDITOR_H \ No newline at end of file diff --git a/src/Application/Editor/overworld_editor.cc b/src/Application/Editor/overworld_editor.cc deleted file mode 100644 index 5c325614..00000000 --- a/src/Application/Editor/overworld_editor.cc +++ /dev/null @@ -1,290 +0,0 @@ -#include "overworld_editor.h" - -#include - -#include - -#include "Graphics/bitmap.h" -#include "Graphics/icons.h" -#include "Graphics/tile.h" - -// first step would be to decompress all graphics data from the game -// (in alttp that's easy they're all located in the same location all the -// same sheet size 128x32) have a code that convert PC address to SNES and -// vice-versa - -// 1) find the gfx pointers (you could use ZS constant file) -// 2) decompress all the gfx with your lz2 decompressor -// 3) convert the 3bpp snes data into PC 4bpp (probably the hardest part) -// 4) get the tiles32 data -// 5) get the tiles16 data -// 6) get the map32 data (they must be decompressed as well with a lz2 -// variant not the same as gfx compression but pretty similar) 7) get the -// gfx data of the map yeah i forgot that one and load 4bpp in a pseudo vram -// and use that to render tiles on screen 8) try to render the tiles on the -// bitmap in black & white to start 9) get the palettes data and try to find -// how they're loaded in the game that's a big puzzle to solve then 9 you'll -// have an overworld map viewer, in less than few hours if are able to -// understand the data quickly -namespace yaze { -namespace application { -namespace Editor { -void OverworldEditor::Update() { - if (rom_.isLoaded()) { - if (!doneLoaded) { - // overworld.Load(rom_); - doneLoaded = true; - } - } - - if (show_changelist_) { - DrawChangelist(); - } - - DrawToolset(); - ImGui::Separator(); - if (ImGui::BeginTable("#owEditTable", 2, ow_edit_flags, ImVec2(0, 0))) { - ImGui::TableSetupColumn("#overworldCanvas"); - ImGui::TableSetupColumn("#tileSelector"); - ImGui::TableNextColumn(); - DrawOverworldCanvas(); - ImGui::TableNextColumn(); - DrawTileSelector(); - ImGui::EndTable(); - } -} - -void OverworldEditor::DrawToolset() { - if (ImGui::BeginTable("Toolset", 14, toolset_table_flags, ImVec2(0, 0))) { - ImGui::TableSetupColumn("#undoTool"); - ImGui::TableSetupColumn("#redoTool"); - ImGui::TableSetupColumn("#drawTool"); - ImGui::TableSetupColumn("#separator2"); - ImGui::TableSetupColumn("#zoomOutTool"); - ImGui::TableSetupColumn("#zoomInTool"); - ImGui::TableSetupColumn("#separator"); - ImGui::TableSetupColumn("#history"); - ImGui::TableSetupColumn("#entranceTool"); - ImGui::TableSetupColumn("#exitTool"); - ImGui::TableSetupColumn("#itemTool"); - ImGui::TableSetupColumn("#spriteTool"); - ImGui::TableSetupColumn("#transportTool"); - ImGui::TableSetupColumn("#musicTool"); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_UNDO); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_REDO); - - ImGui::TableNextColumn(); - if (ImGui::Button(ICON_MD_MANAGE_HISTORY)) { - if (!show_changelist_) - show_changelist_ = true; - else - show_changelist_ = false; - } - - ImGui::TableNextColumn(); - ImGui::Text(ICON_MD_MORE_VERT); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_ZOOM_OUT); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_ZOOM_IN); - - ImGui::TableNextColumn(); - ImGui::Text(ICON_MD_MORE_VERT); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_DRAW); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_DOOR_FRONT); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_DOOR_BACK); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_GRASS); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_PEST_CONTROL_RODENT); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_ADD_LOCATION); - - ImGui::TableNextColumn(); - ImGui::Button(ICON_MD_MUSIC_NOTE); - - ImGui::EndTable(); - } -} - -void OverworldEditor::DrawOverworldMapSettings() { - if (ImGui::BeginTable("#mapSettings", 7, ow_map_settings_flags, ImVec2(0, 0), - -1)) { - ImGui::TableSetupColumn("##1stCol"); - ImGui::TableSetupColumn("##gfxCol"); - ImGui::TableSetupColumn("##palCol"); - ImGui::TableSetupColumn("##sprgfxCol"); - ImGui::TableSetupColumn("##sprpalCol"); - ImGui::TableSetupColumn("##msgidCol"); - ImGui::TableSetupColumn("##2ndCol"); - - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(100.f); - ImGui::Combo("##world", ¤t_world_, - "Light World\0Dark World\0Extra World\0"); - - ImGui::TableNextColumn(); - ImGui::Text("GFX"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(kInputFieldSize); - ImGui::InputText("##mapGFX", map_gfx_, kByteSize); - - ImGui::TableNextColumn(); - ImGui::Text("Palette"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(kInputFieldSize); - ImGui::InputText("##mapPal", map_palette_, kByteSize); - - ImGui::TableNextColumn(); - ImGui::Text("Spr GFX"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(kInputFieldSize); - ImGui::InputText("##sprGFX", spr_gfx_, kByteSize); - - ImGui::TableNextColumn(); - ImGui::Text("Spr Palette"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(kInputFieldSize); - ImGui::InputText("##sprPal", spr_palette_, kByteSize); - - ImGui::TableNextColumn(); - ImGui::Text("Msg ID"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(50.f); - ImGui::InputText("##msgid", spr_palette_, kMessageIdSize); - - ImGui::TableNextColumn(); - ImGui::Checkbox("Show grid", &opt_enable_grid); - ImGui::EndTable(); - } -} - -void OverworldEditor::DrawOverworldCanvas() { - DrawOverworldMapSettings(); - ImGui::Separator(); - static ImVector points; - static ImVec2 scrolling(0.0f, 0.0f); - static bool opt_enable_context_menu = true; - static bool adding_line = false; - ImVec2 canvas_p0 = ImGui::GetCursorScreenPos(); - ImVec2 canvas_sz = ImGui::GetContentRegionAvail(); - ImVec2 canvas_p1 = - ImVec2(canvas_p0.x + canvas_sz.x, canvas_p0.y + canvas_sz.y); - - // Draw border and background color - const ImGuiIO &io = ImGui::GetIO(); - ImDrawList *draw_list = ImGui::GetWindowDrawList(); - draw_list->AddRectFilled(canvas_p0, canvas_p1, IM_COL32(32, 32, 32, 255)); - draw_list->AddRect(canvas_p0, canvas_p1, IM_COL32(255, 255, 255, 255)); - - // This will catch our interactions - ImGui::InvisibleButton( - "canvas", canvas_sz, - ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight); - const bool is_hovered = ImGui::IsItemHovered(); // Hovered - const bool is_active = ImGui::IsItemActive(); // Held - const ImVec2 origin(canvas_p0.x + scrolling.x, - canvas_p0.y + scrolling.y); // Lock scrolled origin - const ImVec2 mouse_pos_in_canvas(io.MousePos.x - origin.x, - io.MousePos.y - origin.y); - - // Add first and second point - if (is_hovered && !adding_line && - ImGui::IsMouseClicked(ImGuiMouseButton_Left)) { - points.push_back(mouse_pos_in_canvas); - points.push_back(mouse_pos_in_canvas); - adding_line = true; - } - if (adding_line) { - points.back() = mouse_pos_in_canvas; - if (!ImGui::IsMouseDown(ImGuiMouseButton_Left)) adding_line = false; - } - - // Pan (we use a zero mouse threshold when there's no context menu) - const float mouse_threshold_for_pan = opt_enable_context_menu ? -1.0f : 0.0f; - if (is_active && - ImGui::IsMouseDragging(ImGuiMouseButton_Right, mouse_threshold_for_pan)) { - scrolling.x += io.MouseDelta.x; - scrolling.y += io.MouseDelta.y; - } - - // Context menu (under default mouse threshold) - ImVec2 drag_delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right); - if (opt_enable_context_menu && drag_delta.x == 0.0f && drag_delta.y == 0.0f) - ImGui::OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight); - if (ImGui::BeginPopup("context")) { - if (adding_line) points.resize(points.size() - 2); - adding_line = false; - if (ImGui::MenuItem("Remove one", NULL, false, points.Size > 0)) { - points.resize(points.size() - 2); - } - if (ImGui::MenuItem("Remove all", NULL, false, points.Size > 0)) { - points.clear(); - } - ImGui::EndPopup(); - } - - // Draw grid + all lines in the canvas - draw_list->PushClipRect(canvas_p0, canvas_p1, true); - if (opt_enable_grid) { - const float GRID_STEP = 64.0f; - for (float x = fmodf(scrolling.x, GRID_STEP); x < canvas_sz.x; - x += GRID_STEP) - draw_list->AddLine(ImVec2(canvas_p0.x + x, canvas_p0.y), - ImVec2(canvas_p0.x + x, canvas_p1.y), - IM_COL32(200, 200, 200, 40)); - for (float y = fmodf(scrolling.y, GRID_STEP); y < canvas_sz.y; - y += GRID_STEP) - draw_list->AddLine(ImVec2(canvas_p0.x, canvas_p0.y + y), - ImVec2(canvas_p1.x, canvas_p0.y + y), - IM_COL32(200, 200, 200, 40)); - } - - for (int n = 0; n < points.Size; n += 2) - draw_list->AddLine( - ImVec2(origin.x + points[n].x, origin.y + points[n].y), - ImVec2(origin.x + points[n + 1].x, origin.y + points[n + 1].y), - IM_COL32(255, 255, 0, 255), 2.0f); - - draw_list->PopClipRect(); -} -void OverworldEditor::DrawTileSelector() { - if (ImGui::BeginTabBar("##TabBar", ImGuiTabBarFlags_FittingPolicyScroll)) { - if (ImGui::BeginTabItem("Tile8")) { - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Tile16")) { - ImGui::EndTabItem(); - } - - ImGui::EndTabBar(); - } -} - -void OverworldEditor::DrawChangelist() { - if (!ImGui::Begin("Changelist")) { - ImGui::End(); - } - - ImGui::Text("Test"); - ImGui::End(); -} - -} // namespace Editor -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Editor/overworld_editor.h b/src/Application/Editor/overworld_editor.h deleted file mode 100644 index 2f81283d..00000000 --- a/src/Application/Editor/overworld_editor.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef YAZE_APPLICATION_EDITOR_OVERWORLDEDITOR_H -#define YAZE_APPLICATION_EDITOR_OVERWORLDEDITOR_H - -#include - -#include "Data/OW/overworld.h" -#include "Graphics/icons.h" -#include "Graphics/palette.h" -#include "Graphics/scene.h" -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Editor { - -static constexpr unsigned int k4BPP = 4; - -class OverworldEditor { - public: - void Update(); - - void SetRom(Data::ROM &rom) { rom_ = rom; } - - private: - void DrawToolset(); - void DrawOverworldMapSettings(); - void DrawOverworldCanvas(); - void DrawTileSelector(); - - void DrawChangelist(); - - bool show_changelist_ = false; - - Data::ROM rom_; - Data::Overworld overworld; - Graphics::Scene current_scene_; - Graphics::Bitmap allgfxBitmap; - Graphics::SNESPalette palette_; - Graphics::TilePreset current_set_; - - SDL_Texture *gfx_texture = nullptr; - - int allgfx_width = 0; - int allgfx_height = 0; - - uchar *allGfx16Ptr = new uchar[(128 * 7136) / 2]; - - ImGuiTableFlags toolset_table_flags = ImGuiTableFlags_SizingFixedFit; - ImGuiTableFlags ow_map_settings_flags = ImGuiTableFlags_Borders; - ImGuiTableFlags ow_edit_flags = ImGuiTableFlags_Reorderable | - ImGuiTableFlags_Resizable | - ImGuiTableFlags_SizingStretchSame; - - float canvas_table_ratio = 30.f; - - char map_gfx_[3] = ""; - char map_palette_[3] = ""; - char spr_gfx_[3] = ""; - char spr_palette_[3] = ""; - char message_id_[5] = ""; - - int current_world_ = 0; - - bool isLoaded = false; - bool doneLoaded = false; - - constexpr static int kByteSize = 3; - constexpr static int kMessageIdSize = 5; - constexpr static float kInputFieldSize = 30.f; - bool opt_enable_grid = true; -}; -} // namespace Editor -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Editor/tile_editor.cc b/src/Application/Editor/tile_editor.cc deleted file mode 100644 index c698ea4f..00000000 --- a/src/Application/Editor/tile_editor.cc +++ /dev/null @@ -1,10 +0,0 @@ -#include "tile_editor.h" - -namespace yaze { -namespace application { -namespace Editor { - -void TileEditor::UpdateScreen() {} -} // namespace Editor -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Editor/tile_editor.h b/src/Application/Editor/tile_editor.h deleted file mode 100644 index be4ada46..00000000 --- a/src/Application/Editor/tile_editor.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef YAZE_APPLICATION_EDITOR_TILEEDITOR_H -#define YAZE_APPLICATION_EDITOR_TILEEDITOR_H - -namespace yaze { -namespace application { -namespace Editor { -class TileEditor { - public: - void UpdateScreen(); -}; -} // namespace Editor -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Graphics/bitmap.cc b/src/Application/Graphics/bitmap.cc deleted file mode 100644 index f9787e9e..00000000 --- a/src/Application/Graphics/bitmap.cc +++ /dev/null @@ -1,178 +0,0 @@ -#include "bitmap.h" - -#include - -#include "Data/rom.h" - -namespace yaze { -namespace application { -namespace Graphics { - -int GetPCGfxAddress(char *romData, char id) { - char **info1 = new char *[255]; - int gfxPointer1 = - lorom_snes_to_pc((romData[Core::Constants::gfx_1_pointer + 1] << 8) + - (romData[Core::Constants::gfx_1_pointer]), - info1); - int gfxPointer2 = - lorom_snes_to_pc((romData[Core::Constants::gfx_2_pointer + 1] << 8) + - (romData[Core::Constants::gfx_2_pointer]), - info1); - int gfxPointer3 = - lorom_snes_to_pc((romData[Core::Constants::gfx_3_pointer + 1] << 8) + - (romData[Core::Constants::gfx_3_pointer]), - info1); - - char gfxGamePointer1 = romData[gfxPointer1 + id]; - char gfxGamePointer2 = romData[gfxPointer2 + id]; - char gfxGamePointer3 = romData[gfxPointer3 + id]; - - return lorom_snes_to_pc( - Data::AddressFromBytes(gfxGamePointer1, gfxGamePointer2, gfxGamePointer3), - info1); -} - -char *CreateAllGfxDataRaw(char *romData) { - // 0-112 -> compressed 3bpp bgr -> (decompressed each) 0x600 chars - // 113-114 -> compressed 2bpp -> (decompressed each) 0x800 chars - // 115-126 -> uncompressed 3bpp sprites -> (each) 0x600 chars - // 127-217 -> compressed 3bpp sprites -> (decompressed each) 0x600 chars - // 218-222 -> compressed 2bpp -> (decompressed each) 0x800 chars - - char *buffer = new char[346624]; - int bufferPos = 0; - char *data = new char[2048]; - unsigned int uncompressedSize = 0; - unsigned int compressedSize = 0; - - for (int i = 0; i < Core::Constants::NumberOfSheets; i++) { - isbpp3[i] = ((i >= 0 && i <= 112) || // Compressed 3bpp bg - (i >= 115 && i <= 126) || // Uncompressed 3bpp sprites - (i >= 127 && i <= 217) // Compressed 3bpp sprites - ); - - // uncompressed sheets - if (i >= 115 && i <= 126) { - data = new char[Core::Constants::Uncompressed3BPPSize]; - int startAddress = GetPCGfxAddress(romData, (char)i); - for (int j = 0; j < Core::Constants::Uncompressed3BPPSize; j++) { - data[j] = romData[j + startAddress]; - } - } else { - data = alttp_decompress_gfx((char *)romData, - GetPCGfxAddress(romData, (char)i), - Core::Constants::UncompressedSheetSize, - &uncompressedSize, &compressedSize); - } - - for (int j = 0; j < sizeof(data); j++) { - buffer[j + bufferPos] = data[j]; - } - - bufferPos += sizeof(data); - } - - return buffer; -} - -void CreateAllGfxData(char *romData, char *allgfx16Ptr) { - char *data = CreateAllGfxDataRaw(romData); - char *newData = new char[0x6F800]; - uchar *mask = new uchar[]{0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; - int sheetPosition = 0; - - // 8x8 tile - for (int s = 0; s < Core::Constants::NumberOfSheets; s++) // Per Sheet - { - for (int j = 0; j < 4; j++) // Per Tile Line Y - { - for (int i = 0; i < 16; i++) // Per Tile Line X - { - for (int y = 0; y < 8; y++) // Per Pixel Line - { - if (isbpp3[s]) { - char lineBits0 = - data[(y * 2) + (i * 24) + (j * 384) + sheetPosition]; - char lineBits1 = - data[(y * 2) + (i * 24) + (j * 384) + 1 + sheetPosition]; - char lineBits2 = - data[(y) + (i * 24) + (j * 384) + 16 + sheetPosition]; - - for (int x = 0; x < 4; x++) // Per Pixel X - { - char pixdata = 0; - char pixdata2 = 0; - - if ((lineBits0 & mask[(x * 2)]) == mask[(x * 2)]) { - pixdata += 1; - } - if ((lineBits1 & mask[(x * 2)]) == mask[(x * 2)]) { - pixdata += 2; - } - if ((lineBits2 & mask[(x * 2)]) == mask[(x * 2)]) { - pixdata += 4; - } - - if ((lineBits0 & mask[(x * 2) + 1]) == mask[(x * 2) + 1]) { - pixdata2 += 1; - } - if ((lineBits1 & mask[(x * 2) + 1]) == mask[(x * 2) + 1]) { - pixdata2 += 2; - } - if ((lineBits2 & mask[(x * 2) + 1]) == mask[(x * 2) + 1]) { - pixdata2 += 4; - } - - newData[(y * 64) + (x) + (i * 4) + (j * 512) + (s * 2048)] = - (char)((pixdata << 4) | pixdata2); - } - } else { - char lineBits0 = - data[(y * 2) + (i * 16) + (j * 256) + sheetPosition]; - char lineBits1 = - data[(y * 2) + (i * 16) + (j * 256) + 1 + sheetPosition]; - - for (int x = 0; x < 4; x++) // Per Pixel X - { - char pixdata = 0; - char pixdata2 = 0; - - if ((lineBits0 & mask[(x * 2)]) == mask[(x * 2)]) { - pixdata += 1; - } - if ((lineBits1 & mask[(x * 2)]) == mask[(x * 2)]) { - pixdata += 2; - } - - if ((lineBits0 & mask[(x * 2) + 1]) == mask[(x * 2) + 1]) { - pixdata2 += 1; - } - if ((lineBits1 & mask[(x * 2) + 1]) == mask[(x * 2) + 1]) { - pixdata2 += 2; - } - - newData[(y * 64) + (x) + (i * 4) + (j * 512) + (s * 2048)] = - (char)((pixdata << 4) | pixdata2); - } - } - } - } - } - - if (isbpp3[s]) { - sheetPosition += Core::Constants::Uncompressed3BPPSize; - } else { - sheetPosition += Core::Constants::UncompressedSheetSize; - } - } - - char *allgfx16Data = (char *)allgfx16Ptr; - - for (int i = 0; i < 0x6F800; i++) { - allgfx16Data[i] = newData[i]; - } -} - -} // namespace Graphics -} // namespace application -} // namespace yaze diff --git a/src/Application/Graphics/bitmap.h b/src/Application/Graphics/bitmap.h deleted file mode 100644 index 79cad488..00000000 --- a/src/Application/Graphics/bitmap.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef YAZE_APPLICATION_UTILS_BITMAP_H -#define YAZE_APPLICATION_UTILS_BITMAP_H - -#include - -#include "Core/constants.h" - -namespace yaze { -namespace application { -namespace Graphics { - -class Bitmap { - public: - Bitmap() = default; - Bitmap(int width, int height, char *data) - : width_(width), height_(height), pixel_data_(data) {} - - int GetWidth() const { return width_; } - int GetHeight() const { return height_; } - - private: - int width_; - int height_; - char *pixel_data_; -}; - -static bool isbpp3[Core::Constants::NumberOfSheets]; - -int GetPCGfxAddress(char *romData, char id); -char *CreateAllGfxDataRaw(char *romData); -void CreateAllGfxData(char *romData, char *allgfx16Ptr); - -} // namespace Graphics -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Graphics/icons.h b/src/Application/Graphics/icons.h deleted file mode 100644 index 6aac5f1c..00000000 --- a/src/Application/Graphics/icons.h +++ /dev/null @@ -1,2192 +0,0 @@ -// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ -// from https://github.com/google/material-design-icons/raw/master/font/MaterialIcons-Regular.codepoints -// for use with https://github.com/google/material-design-icons/blob/master/font/MaterialIcons-Regular.ttf -#pragma once - -#define FONT_ICON_FILE_NAME_MD "assets/Fonts/MaterialIcons-Regular.ttf" - -#define ICON_MIN_MD 0xe000 -#define ICON_MAX_MD 0x10fffd -#define ICON_MD_10K "\xee\xa5\x91" // U+e951 -#define ICON_MD_10MP "\xee\xa5\x92" // U+e952 -#define ICON_MD_11MP "\xee\xa5\x93" // U+e953 -#define ICON_MD_123 "\xee\xae\x8d" // U+eb8d -#define ICON_MD_12MP "\xee\xa5\x94" // U+e954 -#define ICON_MD_13MP "\xee\xa5\x95" // U+e955 -#define ICON_MD_14MP "\xee\xa5\x96" // U+e956 -#define ICON_MD_15MP "\xee\xa5\x97" // U+e957 -#define ICON_MD_16MP "\xee\xa5\x98" // U+e958 -#define ICON_MD_17MP "\xee\xa5\x99" // U+e959 -#define ICON_MD_18_UP_RATING "\xef\xa3\xbd" // U+f8fd -#define ICON_MD_18MP "\xee\xa5\x9a" // U+e95a -#define ICON_MD_19MP "\xee\xa5\x9b" // U+e95b -#define ICON_MD_1K "\xee\xa5\x9c" // U+e95c -#define ICON_MD_1K_PLUS "\xee\xa5\x9d" // U+e95d -#define ICON_MD_1X_MOBILEDATA "\xee\xbf\x8d" // U+efcd -#define ICON_MD_20MP "\xee\xa5\x9e" // U+e95e -#define ICON_MD_21MP "\xee\xa5\x9f" // U+e95f -#define ICON_MD_22MP "\xee\xa5\xa0" // U+e960 -#define ICON_MD_23MP "\xee\xa5\xa1" // U+e961 -#define ICON_MD_24MP "\xee\xa5\xa2" // U+e962 -#define ICON_MD_2K "\xee\xa5\xa3" // U+e963 -#define ICON_MD_2K_PLUS "\xee\xa5\xa4" // U+e964 -#define ICON_MD_2MP "\xee\xa5\xa5" // U+e965 -#define ICON_MD_30FPS "\xee\xbf\x8e" // U+efce -#define ICON_MD_30FPS_SELECT "\xee\xbf\x8f" // U+efcf -#define ICON_MD_360 "\xee\x95\xb7" // U+e577 -#define ICON_MD_3D_ROTATION "\xee\xa1\x8d" // U+e84d -#define ICON_MD_3G_MOBILEDATA "\xee\xbf\x90" // U+efd0 -#define ICON_MD_3K "\xee\xa5\xa6" // U+e966 -#define ICON_MD_3K_PLUS "\xee\xa5\xa7" // U+e967 -#define ICON_MD_3MP "\xee\xa5\xa8" // U+e968 -#define ICON_MD_3P "\xee\xbf\x91" // U+efd1 -#define ICON_MD_4G_MOBILEDATA "\xee\xbf\x92" // U+efd2 -#define ICON_MD_4G_PLUS_MOBILEDATA "\xee\xbf\x93" // U+efd3 -#define ICON_MD_4K "\xee\x81\xb2" // U+e072 -#define ICON_MD_4K_PLUS "\xee\xa5\xa9" // U+e969 -#define ICON_MD_4MP "\xee\xa5\xaa" // U+e96a -#define ICON_MD_5G "\xee\xbc\xb8" // U+ef38 -#define ICON_MD_5K "\xee\xa5\xab" // U+e96b -#define ICON_MD_5K_PLUS "\xee\xa5\xac" // U+e96c -#define ICON_MD_5MP "\xee\xa5\xad" // U+e96d -#define ICON_MD_60FPS "\xee\xbf\x94" // U+efd4 -#define ICON_MD_60FPS_SELECT "\xee\xbf\x95" // U+efd5 -#define ICON_MD_6_FT_APART "\xef\x88\x9e" // U+f21e -#define ICON_MD_6K "\xee\xa5\xae" // U+e96e -#define ICON_MD_6K_PLUS "\xee\xa5\xaf" // U+e96f -#define ICON_MD_6MP "\xee\xa5\xb0" // U+e970 -#define ICON_MD_7K "\xee\xa5\xb1" // U+e971 -#define ICON_MD_7K_PLUS "\xee\xa5\xb2" // U+e972 -#define ICON_MD_7MP "\xee\xa5\xb3" // U+e973 -#define ICON_MD_8K "\xee\xa5\xb4" // U+e974 -#define ICON_MD_8K_PLUS "\xee\xa5\xb5" // U+e975 -#define ICON_MD_8MP "\xee\xa5\xb6" // U+e976 -#define ICON_MD_9K "\xee\xa5\xb7" // U+e977 -#define ICON_MD_9K_PLUS "\xee\xa5\xb8" // U+e978 -#define ICON_MD_9MP "\xee\xa5\xb9" // U+e979 -#define ICON_MD_ABC "\xee\xae\x94" // U+eb94 -#define ICON_MD_AC_UNIT "\xee\xac\xbb" // U+eb3b -#define ICON_MD_ACCESS_ALARM "\xee\x86\x90" // U+e190 -#define ICON_MD_ACCESS_ALARMS "\xee\x86\x91" // U+e191 -#define ICON_MD_ACCESS_TIME "\xee\x86\x92" // U+e192 -#define ICON_MD_ACCESS_TIME_FILLED "\xee\xbf\x96" // U+efd6 -#define ICON_MD_ACCESSIBILITY "\xee\xa1\x8e" // U+e84e -#define ICON_MD_ACCESSIBILITY_NEW "\xee\xa4\xac" // U+e92c -#define ICON_MD_ACCESSIBLE "\xee\xa4\x94" // U+e914 -#define ICON_MD_ACCESSIBLE_FORWARD "\xee\xa4\xb4" // U+e934 -#define ICON_MD_ACCOUNT_BALANCE "\xee\xa1\x8f" // U+e84f -#define ICON_MD_ACCOUNT_BALANCE_WALLET "\xee\xa1\x90" // U+e850 -#define ICON_MD_ACCOUNT_BOX "\xee\xa1\x91" // U+e851 -#define ICON_MD_ACCOUNT_CIRCLE "\xee\xa1\x93" // U+e853 -#define ICON_MD_ACCOUNT_TREE "\xee\xa5\xba" // U+e97a -#define ICON_MD_AD_UNITS "\xee\xbc\xb9" // U+ef39 -#define ICON_MD_ADB "\xee\x98\x8e" // U+e60e -#define ICON_MD_ADD "\xee\x85\x85" // U+e145 -#define ICON_MD_ADD_A_PHOTO "\xee\x90\xb9" // U+e439 -#define ICON_MD_ADD_ALARM "\xee\x86\x93" // U+e193 -#define ICON_MD_ADD_ALERT "\xee\x80\x83" // U+e003 -#define ICON_MD_ADD_BOX "\xee\x85\x86" // U+e146 -#define ICON_MD_ADD_BUSINESS "\xee\x9c\xa9" // U+e729 -#define ICON_MD_ADD_CALL "\xee\x83\xa8" // U+e0e8 -#define ICON_MD_ADD_CARD "\xee\xae\x86" // U+eb86 -#define ICON_MD_ADD_CHART "\xee\xa5\xbb" // U+e97b -#define ICON_MD_ADD_CIRCLE "\xee\x85\x87" // U+e147 -#define ICON_MD_ADD_CIRCLE_OUTLINE "\xee\x85\x88" // U+e148 -#define ICON_MD_ADD_COMMENT "\xee\x89\xa6" // U+e266 -#define ICON_MD_ADD_IC_CALL "\xee\xa5\xbc" // U+e97c -#define ICON_MD_ADD_LINK "\xee\x85\xb8" // U+e178 -#define ICON_MD_ADD_LOCATION "\xee\x95\xa7" // U+e567 -#define ICON_MD_ADD_LOCATION_ALT "\xee\xbc\xba" // U+ef3a -#define ICON_MD_ADD_MODERATOR "\xee\xa5\xbd" // U+e97d -#define ICON_MD_ADD_PHOTO_ALTERNATE "\xee\x90\xbe" // U+e43e -#define ICON_MD_ADD_REACTION "\xee\x87\x93" // U+e1d3 -#define ICON_MD_ADD_ROAD "\xee\xbc\xbb" // U+ef3b -#define ICON_MD_ADD_SHOPPING_CART "\xee\xa1\x94" // U+e854 -#define ICON_MD_ADD_TASK "\xef\x88\xba" // U+f23a -#define ICON_MD_ADD_TO_DRIVE "\xee\x99\x9c" // U+e65c -#define ICON_MD_ADD_TO_HOME_SCREEN "\xee\x87\xbe" // U+e1fe -#define ICON_MD_ADD_TO_PHOTOS "\xee\x8e\x9d" // U+e39d -#define ICON_MD_ADD_TO_QUEUE "\xee\x81\x9c" // U+e05c -#define ICON_MD_ADDCHART "\xee\xbc\xbc" // U+ef3c -#define ICON_MD_ADF_SCANNER "\xee\xab\x9a" // U+eada -#define ICON_MD_ADJUST "\xee\x8e\x9e" // U+e39e -#define ICON_MD_ADMIN_PANEL_SETTINGS "\xee\xbc\xbd" // U+ef3d -#define ICON_MD_ADOBE "\xee\xaa\x96" // U+ea96 -#define ICON_MD_ADS_CLICK "\xee\x9d\xa2" // U+e762 -#define ICON_MD_AGRICULTURE "\xee\xa9\xb9" // U+ea79 -#define ICON_MD_AIR "\xee\xbf\x98" // U+efd8 -#define ICON_MD_AIRLINE_SEAT_FLAT "\xee\x98\xb0" // U+e630 -#define ICON_MD_AIRLINE_SEAT_FLAT_ANGLED "\xee\x98\xb1" // U+e631 -#define ICON_MD_AIRLINE_SEAT_INDIVIDUAL_SUITE "\xee\x98\xb2" // U+e632 -#define ICON_MD_AIRLINE_SEAT_LEGROOM_EXTRA "\xee\x98\xb3" // U+e633 -#define ICON_MD_AIRLINE_SEAT_LEGROOM_NORMAL "\xee\x98\xb4" // U+e634 -#define ICON_MD_AIRLINE_SEAT_LEGROOM_REDUCED "\xee\x98\xb5" // U+e635 -#define ICON_MD_AIRLINE_SEAT_RECLINE_EXTRA "\xee\x98\xb6" // U+e636 -#define ICON_MD_AIRLINE_SEAT_RECLINE_NORMAL "\xee\x98\xb7" // U+e637 -#define ICON_MD_AIRLINE_STOPS "\xee\x9f\x90" // U+e7d0 -#define ICON_MD_AIRLINES "\xee\x9f\x8a" // U+e7ca -#define ICON_MD_AIRPLANE_TICKET "\xee\xbf\x99" // U+efd9 -#define ICON_MD_AIRPLANEMODE_ACTIVE "\xee\x86\x95" // U+e195 -#define ICON_MD_AIRPLANEMODE_INACTIVE "\xee\x86\x94" // U+e194 -#define ICON_MD_AIRPLANEMODE_OFF "\xee\x86\x94" // U+e194 -#define ICON_MD_AIRPLANEMODE_ON "\xee\x86\x95" // U+e195 -#define ICON_MD_AIRPLAY "\xee\x81\x95" // U+e055 -#define ICON_MD_AIRPORT_SHUTTLE "\xee\xac\xbc" // U+eb3c -#define ICON_MD_ALARM "\xee\xa1\x95" // U+e855 -#define ICON_MD_ALARM_ADD "\xee\xa1\x96" // U+e856 -#define ICON_MD_ALARM_OFF "\xee\xa1\x97" // U+e857 -#define ICON_MD_ALARM_ON "\xee\xa1\x98" // U+e858 -#define ICON_MD_ALBUM "\xee\x80\x99" // U+e019 -#define ICON_MD_ALIGN_HORIZONTAL_CENTER "\xee\x80\x8f" // U+e00f -#define ICON_MD_ALIGN_HORIZONTAL_LEFT "\xee\x80\x8d" // U+e00d -#define ICON_MD_ALIGN_HORIZONTAL_RIGHT "\xee\x80\x90" // U+e010 -#define ICON_MD_ALIGN_VERTICAL_BOTTOM "\xee\x80\x95" // U+e015 -#define ICON_MD_ALIGN_VERTICAL_CENTER "\xee\x80\x91" // U+e011 -#define ICON_MD_ALIGN_VERTICAL_TOP "\xee\x80\x8c" // U+e00c -#define ICON_MD_ALL_INBOX "\xee\xa5\xbf" // U+e97f -#define ICON_MD_ALL_INCLUSIVE "\xee\xac\xbd" // U+eb3d -#define ICON_MD_ALL_OUT "\xee\xa4\x8b" // U+e90b -#define ICON_MD_ALT_ROUTE "\xef\x86\x84" // U+f184 -#define ICON_MD_ALTERNATE_EMAIL "\xee\x83\xa6" // U+e0e6 -#define ICON_MD_AMP_STORIES "\xee\xa8\x93" // U+ea13 -#define ICON_MD_ANALYTICS "\xee\xbc\xbe" // U+ef3e -#define ICON_MD_ANCHOR "\xef\x87\x8d" // U+f1cd -#define ICON_MD_ANDROID "\xee\xa1\x99" // U+e859 -#define ICON_MD_ANIMATION "\xee\x9c\x9c" // U+e71c -#define ICON_MD_ANNOUNCEMENT "\xee\xa1\x9a" // U+e85a -#define ICON_MD_AOD "\xee\xbf\x9a" // U+efda -#define ICON_MD_APARTMENT "\xee\xa9\x80" // U+ea40 -#define ICON_MD_API "\xef\x86\xb7" // U+f1b7 -#define ICON_MD_APP_BLOCKING "\xee\xbc\xbf" // U+ef3f -#define ICON_MD_APP_REGISTRATION "\xee\xbd\x80" // U+ef40 -#define ICON_MD_APP_SETTINGS_ALT "\xee\xbd\x81" // U+ef41 -#define ICON_MD_APP_SHORTCUT "\xee\xab\xa4" // U+eae4 -#define ICON_MD_APPLE "\xee\xaa\x80" // U+ea80 -#define ICON_MD_APPROVAL "\xee\xa6\x82" // U+e982 -#define ICON_MD_APPS "\xee\x97\x83" // U+e5c3 -#define ICON_MD_APPS_OUTAGE "\xee\x9f\x8c" // U+e7cc -#define ICON_MD_ARCHITECTURE "\xee\xa8\xbb" // U+ea3b -#define ICON_MD_ARCHIVE "\xee\x85\x89" // U+e149 -#define ICON_MD_AREA_CHART "\xee\x9d\xb0" // U+e770 -#define ICON_MD_ARROW_BACK "\xee\x97\x84" // U+e5c4 -#define ICON_MD_ARROW_BACK_IOS "\xee\x97\xa0" // U+e5e0 -#define ICON_MD_ARROW_BACK_IOS_NEW "\xee\x8b\xaa" // U+e2ea -#define ICON_MD_ARROW_CIRCLE_DOWN "\xef\x86\x81" // U+f181 -#define ICON_MD_ARROW_CIRCLE_LEFT "\xee\xaa\xa7" // U+eaa7 -#define ICON_MD_ARROW_CIRCLE_RIGHT "\xee\xaa\xaa" // U+eaaa -#define ICON_MD_ARROW_CIRCLE_UP "\xef\x86\x82" // U+f182 -#define ICON_MD_ARROW_DOWNWARD "\xee\x97\x9b" // U+e5db -#define ICON_MD_ARROW_DROP_DOWN "\xee\x97\x85" // U+e5c5 -#define ICON_MD_ARROW_DROP_DOWN_CIRCLE "\xee\x97\x86" // U+e5c6 -#define ICON_MD_ARROW_DROP_UP "\xee\x97\x87" // U+e5c7 -#define ICON_MD_ARROW_FORWARD "\xee\x97\x88" // U+e5c8 -#define ICON_MD_ARROW_FORWARD_IOS "\xee\x97\xa1" // U+e5e1 -#define ICON_MD_ARROW_LEFT "\xee\x97\x9e" // U+e5de -#define ICON_MD_ARROW_RIGHT "\xee\x97\x9f" // U+e5df -#define ICON_MD_ARROW_RIGHT_ALT "\xee\xa5\x81" // U+e941 -#define ICON_MD_ARROW_UPWARD "\xee\x97\x98" // U+e5d8 -#define ICON_MD_ART_TRACK "\xee\x81\xa0" // U+e060 -#define ICON_MD_ARTICLE "\xee\xbd\x82" // U+ef42 -#define ICON_MD_ASPECT_RATIO "\xee\xa1\x9b" // U+e85b -#define ICON_MD_ASSESSMENT "\xee\xa1\x9c" // U+e85c -#define ICON_MD_ASSIGNMENT "\xee\xa1\x9d" // U+e85d -#define ICON_MD_ASSIGNMENT_IND "\xee\xa1\x9e" // U+e85e -#define ICON_MD_ASSIGNMENT_LATE "\xee\xa1\x9f" // U+e85f -#define ICON_MD_ASSIGNMENT_RETURN "\xee\xa1\xa0" // U+e860 -#define ICON_MD_ASSIGNMENT_RETURNED "\xee\xa1\xa1" // U+e861 -#define ICON_MD_ASSIGNMENT_TURNED_IN "\xee\xa1\xa2" // U+e862 -#define ICON_MD_ASSISTANT "\xee\x8e\x9f" // U+e39f -#define ICON_MD_ASSISTANT_DIRECTION "\xee\xa6\x88" // U+e988 -#define ICON_MD_ASSISTANT_NAVIGATION "\xee\xa6\x89" // U+e989 -#define ICON_MD_ASSISTANT_PHOTO "\xee\x8e\xa0" // U+e3a0 -#define ICON_MD_ASSURED_WORKLOAD "\xee\xad\xaf" // U+eb6f -#define ICON_MD_ATM "\xee\x95\xb3" // U+e573 -#define ICON_MD_ATTACH_EMAIL "\xee\xa9\x9e" // U+ea5e -#define ICON_MD_ATTACH_FILE "\xee\x88\xa6" // U+e226 -#define ICON_MD_ATTACH_MONEY "\xee\x88\xa7" // U+e227 -#define ICON_MD_ATTACHMENT "\xee\x8a\xbc" // U+e2bc -#define ICON_MD_ATTRACTIONS "\xee\xa9\x92" // U+ea52 -#define ICON_MD_ATTRIBUTION "\xee\xbf\x9b" // U+efdb -#define ICON_MD_AUDIO_FILE "\xee\xae\x82" // U+eb82 -#define ICON_MD_AUDIOTRACK "\xee\x8e\xa1" // U+e3a1 -#define ICON_MD_AUTO_AWESOME "\xee\x99\x9f" // U+e65f -#define ICON_MD_AUTO_AWESOME_MOSAIC "\xee\x99\xa0" // U+e660 -#define ICON_MD_AUTO_AWESOME_MOTION "\xee\x99\xa1" // U+e661 -#define ICON_MD_AUTO_DELETE "\xee\xa9\x8c" // U+ea4c -#define ICON_MD_AUTO_FIX_HIGH "\xee\x99\xa3" // U+e663 -#define ICON_MD_AUTO_FIX_NORMAL "\xee\x99\xa4" // U+e664 -#define ICON_MD_AUTO_FIX_OFF "\xee\x99\xa5" // U+e665 -#define ICON_MD_AUTO_GRAPH "\xee\x93\xbb" // U+e4fb -#define ICON_MD_AUTO_MODE "\xee\xb0\xa0" // U+ec20 -#define ICON_MD_AUTO_STORIES "\xee\x99\xa6" // U+e666 -#define ICON_MD_AUTOFPS_SELECT "\xee\xbf\x9c" // U+efdc -#define ICON_MD_AUTORENEW "\xee\xa1\xa3" // U+e863 -#define ICON_MD_AV_TIMER "\xee\x80\x9b" // U+e01b -#define ICON_MD_BABY_CHANGING_STATION "\xef\x86\x9b" // U+f19b -#define ICON_MD_BACK_HAND "\xee\x9d\xa4" // U+e764 -#define ICON_MD_BACKPACK "\xef\x86\x9c" // U+f19c -#define ICON_MD_BACKSPACE "\xee\x85\x8a" // U+e14a -#define ICON_MD_BACKUP "\xee\xa1\xa4" // U+e864 -#define ICON_MD_BACKUP_TABLE "\xee\xbd\x83" // U+ef43 -#define ICON_MD_BADGE "\xee\xa9\xa7" // U+ea67 -#define ICON_MD_BAKERY_DINING "\xee\xa9\x93" // U+ea53 -#define ICON_MD_BALANCE "\xee\xab\xb6" // U+eaf6 -#define ICON_MD_BALCONY "\xee\x96\x8f" // U+e58f -#define ICON_MD_BALLOT "\xee\x85\xb2" // U+e172 -#define ICON_MD_BAR_CHART "\xee\x89\xab" // U+e26b -#define ICON_MD_BATCH_PREDICTION "\xef\x83\xb5" // U+f0f5 -#define ICON_MD_BATHROOM "\xee\xbf\x9d" // U+efdd -#define ICON_MD_BATHTUB "\xee\xa9\x81" // U+ea41 -#define ICON_MD_BATTERY_0_BAR "\xee\xaf\x9c" // U+ebdc -#define ICON_MD_BATTERY_1_BAR "\xee\xaf\x99" // U+ebd9 -#define ICON_MD_BATTERY_2_BAR "\xee\xaf\xa0" // U+ebe0 -#define ICON_MD_BATTERY_3_BAR "\xee\xaf\x9d" // U+ebdd -#define ICON_MD_BATTERY_4_BAR "\xee\xaf\xa2" // U+ebe2 -#define ICON_MD_BATTERY_5_BAR "\xee\xaf\x94" // U+ebd4 -#define ICON_MD_BATTERY_6_BAR "\xee\xaf\x92" // U+ebd2 -#define ICON_MD_BATTERY_ALERT "\xee\x86\x9c" // U+e19c -#define ICON_MD_BATTERY_CHARGING_FULL "\xee\x86\xa3" // U+e1a3 -#define ICON_MD_BATTERY_FULL "\xee\x86\xa4" // U+e1a4 -#define ICON_MD_BATTERY_SAVER "\xee\xbf\x9e" // U+efde -#define ICON_MD_BATTERY_STD "\xee\x86\xa5" // U+e1a5 -#define ICON_MD_BATTERY_UNKNOWN "\xee\x86\xa6" // U+e1a6 -#define ICON_MD_BEACH_ACCESS "\xee\xac\xbe" // U+eb3e -#define ICON_MD_BED "\xee\xbf\x9f" // U+efdf -#define ICON_MD_BEDROOM_BABY "\xee\xbf\xa0" // U+efe0 -#define ICON_MD_BEDROOM_CHILD "\xee\xbf\xa1" // U+efe1 -#define ICON_MD_BEDROOM_PARENT "\xee\xbf\xa2" // U+efe2 -#define ICON_MD_BEDTIME "\xee\xbd\x84" // U+ef44 -#define ICON_MD_BEDTIME_OFF "\xee\xad\xb6" // U+eb76 -#define ICON_MD_BEENHERE "\xee\x94\xad" // U+e52d -#define ICON_MD_BENTO "\xef\x87\xb4" // U+f1f4 -#define ICON_MD_BIKE_SCOOTER "\xee\xbd\x85" // U+ef45 -#define ICON_MD_BIOTECH "\xee\xa8\xba" // U+ea3a -#define ICON_MD_BLENDER "\xee\xbf\xa3" // U+efe3 -#define ICON_MD_BLINDS "\xee\x8a\x86" // U+e286 -#define ICON_MD_BLINDS_CLOSED "\xee\xb0\x9f" // U+ec1f -#define ICON_MD_BLOCK "\xee\x85\x8b" // U+e14b -#define ICON_MD_BLOCK_FLIPPED "\xee\xbd\x86" // U+ef46 -#define ICON_MD_BLOODTYPE "\xee\xbf\xa4" // U+efe4 -#define ICON_MD_BLUETOOTH "\xee\x86\xa7" // U+e1a7 -#define ICON_MD_BLUETOOTH_AUDIO "\xee\x98\x8f" // U+e60f -#define ICON_MD_BLUETOOTH_CONNECTED "\xee\x86\xa8" // U+e1a8 -#define ICON_MD_BLUETOOTH_DISABLED "\xee\x86\xa9" // U+e1a9 -#define ICON_MD_BLUETOOTH_DRIVE "\xee\xbf\xa5" // U+efe5 -#define ICON_MD_BLUETOOTH_SEARCHING "\xee\x86\xaa" // U+e1aa -#define ICON_MD_BLUR_CIRCULAR "\xee\x8e\xa2" // U+e3a2 -#define ICON_MD_BLUR_LINEAR "\xee\x8e\xa3" // U+e3a3 -#define ICON_MD_BLUR_OFF "\xee\x8e\xa4" // U+e3a4 -#define ICON_MD_BLUR_ON "\xee\x8e\xa5" // U+e3a5 -#define ICON_MD_BOLT "\xee\xa8\x8b" // U+ea0b -#define ICON_MD_BOOK "\xee\xa1\xa5" // U+e865 -#define ICON_MD_BOOK_ONLINE "\xef\x88\x97" // U+f217 -#define ICON_MD_BOOKMARK "\xee\xa1\xa6" // U+e866 -#define ICON_MD_BOOKMARK_ADD "\xee\x96\x98" // U+e598 -#define ICON_MD_BOOKMARK_ADDED "\xee\x96\x99" // U+e599 -#define ICON_MD_BOOKMARK_BORDER "\xee\xa1\xa7" // U+e867 -#define ICON_MD_BOOKMARK_OUTLINE "\xee\xa1\xa7" // U+e867 -#define ICON_MD_BOOKMARK_REMOVE "\xee\x96\x9a" // U+e59a -#define ICON_MD_BOOKMARKS "\xee\xa6\x8b" // U+e98b -#define ICON_MD_BORDER_ALL "\xee\x88\xa8" // U+e228 -#define ICON_MD_BORDER_BOTTOM "\xee\x88\xa9" // U+e229 -#define ICON_MD_BORDER_CLEAR "\xee\x88\xaa" // U+e22a -#define ICON_MD_BORDER_COLOR "\xee\x88\xab" // U+e22b -#define ICON_MD_BORDER_HORIZONTAL "\xee\x88\xac" // U+e22c -#define ICON_MD_BORDER_INNER "\xee\x88\xad" // U+e22d -#define ICON_MD_BORDER_LEFT "\xee\x88\xae" // U+e22e -#define ICON_MD_BORDER_OUTER "\xee\x88\xaf" // U+e22f -#define ICON_MD_BORDER_RIGHT "\xee\x88\xb0" // U+e230 -#define ICON_MD_BORDER_STYLE "\xee\x88\xb1" // U+e231 -#define ICON_MD_BORDER_TOP "\xee\x88\xb2" // U+e232 -#define ICON_MD_BORDER_VERTICAL "\xee\x88\xb3" // U+e233 -#define ICON_MD_BOY "\xee\xad\xa7" // U+eb67 -#define ICON_MD_BRANDING_WATERMARK "\xee\x81\xab" // U+e06b -#define ICON_MD_BREAKFAST_DINING "\xee\xa9\x94" // U+ea54 -#define ICON_MD_BRIGHTNESS_1 "\xee\x8e\xa6" // U+e3a6 -#define ICON_MD_BRIGHTNESS_2 "\xee\x8e\xa7" // U+e3a7 -#define ICON_MD_BRIGHTNESS_3 "\xee\x8e\xa8" // U+e3a8 -#define ICON_MD_BRIGHTNESS_4 "\xee\x8e\xa9" // U+e3a9 -#define ICON_MD_BRIGHTNESS_5 "\xee\x8e\xaa" // U+e3aa -#define ICON_MD_BRIGHTNESS_6 "\xee\x8e\xab" // U+e3ab -#define ICON_MD_BRIGHTNESS_7 "\xee\x8e\xac" // U+e3ac -#define ICON_MD_BRIGHTNESS_AUTO "\xee\x86\xab" // U+e1ab -#define ICON_MD_BRIGHTNESS_HIGH "\xee\x86\xac" // U+e1ac -#define ICON_MD_BRIGHTNESS_LOW "\xee\x86\xad" // U+e1ad -#define ICON_MD_BRIGHTNESS_MEDIUM "\xee\x86\xae" // U+e1ae -#define ICON_MD_BROADCAST_ON_HOME "\xef\xa3\xb8" // U+f8f8 -#define ICON_MD_BROADCAST_ON_PERSONAL "\xef\xa3\xb9" // U+f8f9 -#define ICON_MD_BROKEN_IMAGE "\xee\x8e\xad" // U+e3ad -#define ICON_MD_BROWSE_GALLERY "\xee\xaf\x91" // U+ebd1 -#define ICON_MD_BROWSER_NOT_SUPPORTED "\xee\xbd\x87" // U+ef47 -#define ICON_MD_BROWSER_UPDATED "\xee\x9f\x8f" // U+e7cf -#define ICON_MD_BRUNCH_DINING "\xee\xa9\xb3" // U+ea73 -#define ICON_MD_BRUSH "\xee\x8e\xae" // U+e3ae -#define ICON_MD_BUBBLE_CHART "\xee\x9b\x9d" // U+e6dd -#define ICON_MD_BUG_REPORT "\xee\xa1\xa8" // U+e868 -#define ICON_MD_BUILD "\xee\xa1\xa9" // U+e869 -#define ICON_MD_BUILD_CIRCLE "\xee\xbd\x88" // U+ef48 -#define ICON_MD_BUNGALOW "\xee\x96\x91" // U+e591 -#define ICON_MD_BURST_MODE "\xee\x90\xbc" // U+e43c -#define ICON_MD_BUS_ALERT "\xee\xa6\x8f" // U+e98f -#define ICON_MD_BUSINESS "\xee\x82\xaf" // U+e0af -#define ICON_MD_BUSINESS_CENTER "\xee\xac\xbf" // U+eb3f -#define ICON_MD_CABIN "\xee\x96\x89" // U+e589 -#define ICON_MD_CABLE "\xee\xbf\xa6" // U+efe6 -#define ICON_MD_CACHED "\xee\xa1\xaa" // U+e86a -#define ICON_MD_CAKE "\xee\x9f\xa9" // U+e7e9 -#define ICON_MD_CALCULATE "\xee\xa9\x9f" // U+ea5f -#define ICON_MD_CALENDAR_MONTH "\xee\xaf\x8c" // U+ebcc -#define ICON_MD_CALENDAR_TODAY "\xee\xa4\xb5" // U+e935 -#define ICON_MD_CALENDAR_VIEW_DAY "\xee\xa4\xb6" // U+e936 -#define ICON_MD_CALENDAR_VIEW_MONTH "\xee\xbf\xa7" // U+efe7 -#define ICON_MD_CALENDAR_VIEW_WEEK "\xee\xbf\xa8" // U+efe8 -#define ICON_MD_CALL "\xee\x82\xb0" // U+e0b0 -#define ICON_MD_CALL_END "\xee\x82\xb1" // U+e0b1 -#define ICON_MD_CALL_MADE "\xee\x82\xb2" // U+e0b2 -#define ICON_MD_CALL_MERGE "\xee\x82\xb3" // U+e0b3 -#define ICON_MD_CALL_MISSED "\xee\x82\xb4" // U+e0b4 -#define ICON_MD_CALL_MISSED_OUTGOING "\xee\x83\xa4" // U+e0e4 -#define ICON_MD_CALL_RECEIVED "\xee\x82\xb5" // U+e0b5 -#define ICON_MD_CALL_SPLIT "\xee\x82\xb6" // U+e0b6 -#define ICON_MD_CALL_TO_ACTION "\xee\x81\xac" // U+e06c -#define ICON_MD_CAMERA "\xee\x8e\xaf" // U+e3af -#define ICON_MD_CAMERA_ALT "\xee\x8e\xb0" // U+e3b0 -#define ICON_MD_CAMERA_ENHANCE "\xee\xa3\xbc" // U+e8fc -#define ICON_MD_CAMERA_FRONT "\xee\x8e\xb1" // U+e3b1 -#define ICON_MD_CAMERA_INDOOR "\xee\xbf\xa9" // U+efe9 -#define ICON_MD_CAMERA_OUTDOOR "\xee\xbf\xaa" // U+efea -#define ICON_MD_CAMERA_REAR "\xee\x8e\xb2" // U+e3b2 -#define ICON_MD_CAMERA_ROLL "\xee\x8e\xb3" // U+e3b3 -#define ICON_MD_CAMERASWITCH "\xee\xbf\xab" // U+efeb -#define ICON_MD_CAMPAIGN "\xee\xbd\x89" // U+ef49 -#define ICON_MD_CANCEL "\xee\x97\x89" // U+e5c9 -#define ICON_MD_CANCEL_PRESENTATION "\xee\x83\xa9" // U+e0e9 -#define ICON_MD_CANCEL_SCHEDULE_SEND "\xee\xa8\xb9" // U+ea39 -#define ICON_MD_CANDLESTICK_CHART "\xee\xab\x94" // U+ead4 -#define ICON_MD_CAR_CRASH "\xee\xaf\xb2" // U+ebf2 -#define ICON_MD_CAR_RENTAL "\xee\xa9\x95" // U+ea55 -#define ICON_MD_CAR_REPAIR "\xee\xa9\x96" // U+ea56 -#define ICON_MD_CARD_GIFTCARD "\xee\xa3\xb6" // U+e8f6 -#define ICON_MD_CARD_MEMBERSHIP "\xee\xa3\xb7" // U+e8f7 -#define ICON_MD_CARD_TRAVEL "\xee\xa3\xb8" // U+e8f8 -#define ICON_MD_CARPENTER "\xef\x87\xb8" // U+f1f8 -#define ICON_MD_CASES "\xee\xa6\x92" // U+e992 -#define ICON_MD_CASINO "\xee\xad\x80" // U+eb40 -#define ICON_MD_CAST "\xee\x8c\x87" // U+e307 -#define ICON_MD_CAST_CONNECTED "\xee\x8c\x88" // U+e308 -#define ICON_MD_CAST_FOR_EDUCATION "\xee\xbf\xac" // U+efec -#define ICON_MD_CASTLE "\xee\xaa\xb1" // U+eab1 -#define ICON_MD_CATCHING_POKEMON "\xee\x94\x88" // U+e508 -#define ICON_MD_CATEGORY "\xee\x95\xb4" // U+e574 -#define ICON_MD_CELEBRATION "\xee\xa9\xa5" // U+ea65 -#define ICON_MD_CELL_TOWER "\xee\xae\xba" // U+ebba -#define ICON_MD_CELL_WIFI "\xee\x83\xac" // U+e0ec -#define ICON_MD_CENTER_FOCUS_STRONG "\xee\x8e\xb4" // U+e3b4 -#define ICON_MD_CENTER_FOCUS_WEAK "\xee\x8e\xb5" // U+e3b5 -#define ICON_MD_CHAIR "\xee\xbf\xad" // U+efed -#define ICON_MD_CHAIR_ALT "\xee\xbf\xae" // U+efee -#define ICON_MD_CHALET "\xee\x96\x85" // U+e585 -#define ICON_MD_CHANGE_CIRCLE "\xee\x8b\xa7" // U+e2e7 -#define ICON_MD_CHANGE_HISTORY "\xee\xa1\xab" // U+e86b -#define ICON_MD_CHARGING_STATION "\xef\x86\x9d" // U+f19d -#define ICON_MD_CHAT "\xee\x82\xb7" // U+e0b7 -#define ICON_MD_CHAT_BUBBLE "\xee\x83\x8a" // U+e0ca -#define ICON_MD_CHAT_BUBBLE_OUTLINE "\xee\x83\x8b" // U+e0cb -#define ICON_MD_CHECK "\xee\x97\x8a" // U+e5ca -#define ICON_MD_CHECK_BOX "\xee\xa0\xb4" // U+e834 -#define ICON_MD_CHECK_BOX_OUTLINE_BLANK "\xee\xa0\xb5" // U+e835 -#define ICON_MD_CHECK_CIRCLE "\xee\xa1\xac" // U+e86c -#define ICON_MD_CHECK_CIRCLE_OUTLINE "\xee\xa4\xad" // U+e92d -#define ICON_MD_CHECKLIST "\xee\x9a\xb1" // U+e6b1 -#define ICON_MD_CHECKLIST_RTL "\xee\x9a\xb3" // U+e6b3 -#define ICON_MD_CHECKROOM "\xef\x86\x9e" // U+f19e -#define ICON_MD_CHEVRON_LEFT "\xee\x97\x8b" // U+e5cb -#define ICON_MD_CHEVRON_RIGHT "\xee\x97\x8c" // U+e5cc -#define ICON_MD_CHILD_CARE "\xee\xad\x81" // U+eb41 -#define ICON_MD_CHILD_FRIENDLY "\xee\xad\x82" // U+eb42 -#define ICON_MD_CHROME_READER_MODE "\xee\xa1\xad" // U+e86d -#define ICON_MD_CHURCH "\xee\xaa\xae" // U+eaae -#define ICON_MD_CIRCLE "\xee\xbd\x8a" // U+ef4a -#define ICON_MD_CIRCLE_NOTIFICATIONS "\xee\xa6\x94" // U+e994 -#define ICON_MD_CLASS "\xee\xa1\xae" // U+e86e -#define ICON_MD_CLEAN_HANDS "\xef\x88\x9f" // U+f21f -#define ICON_MD_CLEANING_SERVICES "\xef\x83\xbf" // U+f0ff -#define ICON_MD_CLEAR "\xee\x85\x8c" // U+e14c -#define ICON_MD_CLEAR_ALL "\xee\x82\xb8" // U+e0b8 -#define ICON_MD_CLOSE "\xee\x97\x8d" // U+e5cd -#define ICON_MD_CLOSE_FULLSCREEN "\xef\x87\x8f" // U+f1cf -#define ICON_MD_CLOSED_CAPTION "\xee\x80\x9c" // U+e01c -#define ICON_MD_CLOSED_CAPTION_DISABLED "\xef\x87\x9c" // U+f1dc -#define ICON_MD_CLOSED_CAPTION_OFF "\xee\xa6\x96" // U+e996 -#define ICON_MD_CLOUD "\xee\x8a\xbd" // U+e2bd -#define ICON_MD_CLOUD_CIRCLE "\xee\x8a\xbe" // U+e2be -#define ICON_MD_CLOUD_DONE "\xee\x8a\xbf" // U+e2bf -#define ICON_MD_CLOUD_DOWNLOAD "\xee\x8b\x80" // U+e2c0 -#define ICON_MD_CLOUD_OFF "\xee\x8b\x81" // U+e2c1 -#define ICON_MD_CLOUD_QUEUE "\xee\x8b\x82" // U+e2c2 -#define ICON_MD_CLOUD_SYNC "\xee\xad\x9a" // U+eb5a -#define ICON_MD_CLOUD_UPLOAD "\xee\x8b\x83" // U+e2c3 -#define ICON_MD_CLOUDY_SNOWING "\xee\xa0\x90" // U+e810 -#define ICON_MD_CO2 "\xee\x9e\xb0" // U+e7b0 -#define ICON_MD_CO_PRESENT "\xee\xab\xb0" // U+eaf0 -#define ICON_MD_CODE "\xee\xa1\xaf" // U+e86f -#define ICON_MD_CODE_OFF "\xee\x93\xb3" // U+e4f3 -#define ICON_MD_COFFEE "\xee\xbf\xaf" // U+efef -#define ICON_MD_COFFEE_MAKER "\xee\xbf\xb0" // U+eff0 -#define ICON_MD_COLLECTIONS "\xee\x8e\xb6" // U+e3b6 -#define ICON_MD_COLLECTIONS_BOOKMARK "\xee\x90\xb1" // U+e431 -#define ICON_MD_COLOR_LENS "\xee\x8e\xb7" // U+e3b7 -#define ICON_MD_COLORIZE "\xee\x8e\xb8" // U+e3b8 -#define ICON_MD_COMMENT "\xee\x82\xb9" // U+e0b9 -#define ICON_MD_COMMENT_BANK "\xee\xa9\x8e" // U+ea4e -#define ICON_MD_COMMENTS_DISABLED "\xee\x9e\xa2" // U+e7a2 -#define ICON_MD_COMMIT "\xee\xab\xb5" // U+eaf5 -#define ICON_MD_COMMUTE "\xee\xa5\x80" // U+e940 -#define ICON_MD_COMPARE "\xee\x8e\xb9" // U+e3b9 -#define ICON_MD_COMPARE_ARROWS "\xee\xa4\x95" // U+e915 -#define ICON_MD_COMPASS_CALIBRATION "\xee\x95\xbc" // U+e57c -#define ICON_MD_COMPOST "\xee\x9d\xa1" // U+e761 -#define ICON_MD_COMPRESS "\xee\xa5\x8d" // U+e94d -#define ICON_MD_COMPUTER "\xee\x8c\x8a" // U+e30a -#define ICON_MD_CONFIRMATION_NUM "\xee\x98\xb8" // U+e638 -#define ICON_MD_CONFIRMATION_NUMBER "\xee\x98\xb8" // U+e638 -#define ICON_MD_CONNECT_WITHOUT_CONTACT "\xef\x88\xa3" // U+f223 -#define ICON_MD_CONNECTED_TV "\xee\xa6\x98" // U+e998 -#define ICON_MD_CONNECTING_AIRPORTS "\xee\x9f\x89" // U+e7c9 -#define ICON_MD_CONSTRUCTION "\xee\xa8\xbc" // U+ea3c -#define ICON_MD_CONTACT_MAIL "\xee\x83\x90" // U+e0d0 -#define ICON_MD_CONTACT_PAGE "\xef\x88\xae" // U+f22e -#define ICON_MD_CONTACT_PHONE "\xee\x83\x8f" // U+e0cf -#define ICON_MD_CONTACT_SUPPORT "\xee\xa5\x8c" // U+e94c -#define ICON_MD_CONTACTLESS "\xee\xa9\xb1" // U+ea71 -#define ICON_MD_CONTACTS "\xee\x82\xba" // U+e0ba -#define ICON_MD_CONTENT_COPY "\xee\x85\x8d" // U+e14d -#define ICON_MD_CONTENT_CUT "\xee\x85\x8e" // U+e14e -#define ICON_MD_CONTENT_PASTE "\xee\x85\x8f" // U+e14f -#define ICON_MD_CONTENT_PASTE_GO "\xee\xaa\x8e" // U+ea8e -#define ICON_MD_CONTENT_PASTE_OFF "\xee\x93\xb8" // U+e4f8 -#define ICON_MD_CONTENT_PASTE_SEARCH "\xee\xaa\x9b" // U+ea9b -#define ICON_MD_CONTRAST "\xee\xac\xb7" // U+eb37 -#define ICON_MD_CONTROL_CAMERA "\xee\x81\xb4" // U+e074 -#define ICON_MD_CONTROL_POINT "\xee\x8e\xba" // U+e3ba -#define ICON_MD_CONTROL_POINT_DUPLICATE "\xee\x8e\xbb" // U+e3bb -#define ICON_MD_COOKIE "\xee\xaa\xac" // U+eaac -#define ICON_MD_COPY_ALL "\xee\x8b\xac" // U+e2ec -#define ICON_MD_COPYRIGHT "\xee\xa4\x8c" // U+e90c -#define ICON_MD_CORONAVIRUS "\xef\x88\xa1" // U+f221 -#define ICON_MD_CORPORATE_FARE "\xef\x87\x90" // U+f1d0 -#define ICON_MD_COTTAGE "\xee\x96\x87" // U+e587 -#define ICON_MD_COUNTERTOPS "\xef\x87\xb7" // U+f1f7 -#define ICON_MD_CREATE "\xee\x85\x90" // U+e150 -#define ICON_MD_CREATE_NEW_FOLDER "\xee\x8b\x8c" // U+e2cc -#define ICON_MD_CREDIT_CARD "\xee\xa1\xb0" // U+e870 -#define ICON_MD_CREDIT_CARD_OFF "\xee\x93\xb4" // U+e4f4 -#define ICON_MD_CREDIT_SCORE "\xee\xbf\xb1" // U+eff1 -#define ICON_MD_CRIB "\xee\x96\x88" // U+e588 -#define ICON_MD_CRISIS_ALERT "\xee\xaf\xa9" // U+ebe9 -#define ICON_MD_CROP "\xee\x8e\xbe" // U+e3be -#define ICON_MD_CROP_16_9 "\xee\x8e\xbc" // U+e3bc -#define ICON_MD_CROP_3_2 "\xee\x8e\xbd" // U+e3bd -#define ICON_MD_CROP_5_4 "\xee\x8e\xbf" // U+e3bf -#define ICON_MD_CROP_7_5 "\xee\x8f\x80" // U+e3c0 -#define ICON_MD_CROP_DIN "\xee\x8f\x81" // U+e3c1 -#define ICON_MD_CROP_FREE "\xee\x8f\x82" // U+e3c2 -#define ICON_MD_CROP_LANDSCAPE "\xee\x8f\x83" // U+e3c3 -#define ICON_MD_CROP_ORIGINAL "\xee\x8f\x84" // U+e3c4 -#define ICON_MD_CROP_PORTRAIT "\xee\x8f\x85" // U+e3c5 -#define ICON_MD_CROP_ROTATE "\xee\x90\xb7" // U+e437 -#define ICON_MD_CROP_SQUARE "\xee\x8f\x86" // U+e3c6 -#define ICON_MD_CRUELTY_FREE "\xee\x9e\x99" // U+e799 -#define ICON_MD_CSS "\xee\xae\x93" // U+eb93 -#define ICON_MD_CURRENCY_BITCOIN "\xee\xaf\x85" // U+ebc5 -#define ICON_MD_CURRENCY_EXCHANGE "\xee\xad\xb0" // U+eb70 -#define ICON_MD_CURRENCY_FRANC "\xee\xab\xba" // U+eafa -#define ICON_MD_CURRENCY_LIRA "\xee\xab\xaf" // U+eaef -#define ICON_MD_CURRENCY_POUND "\xee\xab\xb1" // U+eaf1 -#define ICON_MD_CURRENCY_RUBLE "\xee\xab\xac" // U+eaec -#define ICON_MD_CURRENCY_RUPEE "\xee\xab\xb7" // U+eaf7 -#define ICON_MD_CURRENCY_YEN "\xee\xab\xbb" // U+eafb -#define ICON_MD_CURRENCY_YUAN "\xee\xab\xb9" // U+eaf9 -#define ICON_MD_CURTAINS "\xee\xb0\x9e" // U+ec1e -#define ICON_MD_CURTAINS_CLOSED "\xee\xb0\x9d" // U+ec1d -#define ICON_MD_CYCLONE "\xee\xaf\x95" // U+ebd5 -#define ICON_MD_DANGEROUS "\xee\xa6\x9a" // U+e99a -#define ICON_MD_DARK_MODE "\xee\x94\x9c" // U+e51c -#define ICON_MD_DASHBOARD "\xee\xa1\xb1" // U+e871 -#define ICON_MD_DASHBOARD_CUSTOMIZE "\xee\xa6\x9b" // U+e99b -#define ICON_MD_DATA_ARRAY "\xee\xab\x91" // U+ead1 -#define ICON_MD_DATA_EXPLORATION "\xee\x9d\xaf" // U+e76f -#define ICON_MD_DATA_OBJECT "\xee\xab\x93" // U+ead3 -#define ICON_MD_DATA_SAVER_OFF "\xee\xbf\xb2" // U+eff2 -#define ICON_MD_DATA_SAVER_ON "\xee\xbf\xb3" // U+eff3 -#define ICON_MD_DATA_THRESHOLDING "\xee\xae\x9f" // U+eb9f -#define ICON_MD_DATA_USAGE "\xee\x86\xaf" // U+e1af -#define ICON_MD_DATE_RANGE "\xee\xa4\x96" // U+e916 -#define ICON_MD_DEBLUR "\xee\xad\xb7" // U+eb77 -#define ICON_MD_DECK "\xee\xa9\x82" // U+ea42 -#define ICON_MD_DEHAZE "\xee\x8f\x87" // U+e3c7 -#define ICON_MD_DELETE "\xee\xa1\xb2" // U+e872 -#define ICON_MD_DELETE_FOREVER "\xee\xa4\xab" // U+e92b -#define ICON_MD_DELETE_OUTLINE "\xee\xa4\xae" // U+e92e -#define ICON_MD_DELETE_SWEEP "\xee\x85\xac" // U+e16c -#define ICON_MD_DELIVERY_DINING "\xee\xa9\xb2" // U+ea72 -#define ICON_MD_DENSITY_LARGE "\xee\xae\xa9" // U+eba9 -#define ICON_MD_DENSITY_MEDIUM "\xee\xae\x9e" // U+eb9e -#define ICON_MD_DENSITY_SMALL "\xee\xae\xa8" // U+eba8 -#define ICON_MD_DEPARTURE_BOARD "\xee\x95\xb6" // U+e576 -#define ICON_MD_DESCRIPTION "\xee\xa1\xb3" // U+e873 -#define ICON_MD_DESELECT "\xee\xae\xb6" // U+ebb6 -#define ICON_MD_DESIGN_SERVICES "\xef\x84\x8a" // U+f10a -#define ICON_MD_DESK "\xef\xa3\xb4" // U+f8f4 -#define ICON_MD_DESKTOP_ACCESS_DISABLED "\xee\xa6\x9d" // U+e99d -#define ICON_MD_DESKTOP_MAC "\xee\x8c\x8b" // U+e30b -#define ICON_MD_DESKTOP_WINDOWS "\xee\x8c\x8c" // U+e30c -#define ICON_MD_DETAILS "\xee\x8f\x88" // U+e3c8 -#define ICON_MD_DEVELOPER_BOARD "\xee\x8c\x8d" // U+e30d -#define ICON_MD_DEVELOPER_BOARD_OFF "\xee\x93\xbf" // U+e4ff -#define ICON_MD_DEVELOPER_MODE "\xee\x86\xb0" // U+e1b0 -#define ICON_MD_DEVICE_HUB "\xee\x8c\xb5" // U+e335 -#define ICON_MD_DEVICE_THERMOSTAT "\xee\x87\xbf" // U+e1ff -#define ICON_MD_DEVICE_UNKNOWN "\xee\x8c\xb9" // U+e339 -#define ICON_MD_DEVICES "\xee\x86\xb1" // U+e1b1 -#define ICON_MD_DEVICES_FOLD "\xee\xaf\x9e" // U+ebde -#define ICON_MD_DEVICES_OTHER "\xee\x8c\xb7" // U+e337 -#define ICON_MD_DIALER_SIP "\xee\x82\xbb" // U+e0bb -#define ICON_MD_DIALPAD "\xee\x82\xbc" // U+e0bc -#define ICON_MD_DIAMOND "\xee\xab\x95" // U+ead5 -#define ICON_MD_DIFFERENCE "\xee\xad\xbd" // U+eb7d -#define ICON_MD_DINING "\xee\xbf\xb4" // U+eff4 -#define ICON_MD_DINNER_DINING "\xee\xa9\x97" // U+ea57 -#define ICON_MD_DIRECTIONS "\xee\x94\xae" // U+e52e -#define ICON_MD_DIRECTIONS_BIKE "\xee\x94\xaf" // U+e52f -#define ICON_MD_DIRECTIONS_BOAT "\xee\x94\xb2" // U+e532 -#define ICON_MD_DIRECTIONS_BOAT_FILLED "\xee\xbf\xb5" // U+eff5 -#define ICON_MD_DIRECTIONS_BUS "\xee\x94\xb0" // U+e530 -#define ICON_MD_DIRECTIONS_BUS_FILLED "\xee\xbf\xb6" // U+eff6 -#define ICON_MD_DIRECTIONS_CAR "\xee\x94\xb1" // U+e531 -#define ICON_MD_DIRECTIONS_CAR_FILLED "\xee\xbf\xb7" // U+eff7 -#define ICON_MD_DIRECTIONS_FERRY "\xee\x94\xb2" // U+e532 -#define ICON_MD_DIRECTIONS_OFF "\xef\x84\x8f" // U+f10f -#define ICON_MD_DIRECTIONS_RAILWAY "\xee\x94\xb4" // U+e534 -#define ICON_MD_DIRECTIONS_RAILWAY_FILLED "\xee\xbf\xb8" // U+eff8 -#define ICON_MD_DIRECTIONS_RUN "\xee\x95\xa6" // U+e566 -#define ICON_MD_DIRECTIONS_SUBWAY "\xee\x94\xb3" // U+e533 -#define ICON_MD_DIRECTIONS_SUBWAY_FILLED "\xee\xbf\xb9" // U+eff9 -#define ICON_MD_DIRECTIONS_TRAIN "\xee\x94\xb4" // U+e534 -#define ICON_MD_DIRECTIONS_TRANSIT "\xee\x94\xb5" // U+e535 -#define ICON_MD_DIRECTIONS_TRANSIT_FILLED "\xee\xbf\xba" // U+effa -#define ICON_MD_DIRECTIONS_WALK "\xee\x94\xb6" // U+e536 -#define ICON_MD_DIRTY_LENS "\xee\xbd\x8b" // U+ef4b -#define ICON_MD_DISABLED_BY_DEFAULT "\xef\x88\xb0" // U+f230 -#define ICON_MD_DISABLED_VISIBLE "\xee\x9d\xae" // U+e76e -#define ICON_MD_DISC_FULL "\xee\x98\x90" // U+e610 -#define ICON_MD_DISCORD "\xee\xa9\xac" // U+ea6c -#define ICON_MD_DISCOUNT "\xee\xaf\x89" // U+ebc9 -#define ICON_MD_DISPLAY_SETTINGS "\xee\xae\x97" // U+eb97 -#define ICON_MD_DND_FORWARDSLASH "\xee\x98\x91" // U+e611 -#define ICON_MD_DNS "\xee\xa1\xb5" // U+e875 -#define ICON_MD_DO_DISTURB "\xef\x82\x8c" // U+f08c -#define ICON_MD_DO_DISTURB_ALT "\xef\x82\x8d" // U+f08d -#define ICON_MD_DO_DISTURB_OFF "\xef\x82\x8e" // U+f08e -#define ICON_MD_DO_DISTURB_ON "\xef\x82\x8f" // U+f08f -#define ICON_MD_DO_NOT_DISTURB "\xee\x98\x92" // U+e612 -#define ICON_MD_DO_NOT_DISTURB_ALT "\xee\x98\x91" // U+e611 -#define ICON_MD_DO_NOT_DISTURB_OFF "\xee\x99\x83" // U+e643 -#define ICON_MD_DO_NOT_DISTURB_ON "\xee\x99\x84" // U+e644 -#define ICON_MD_DO_NOT_DISTURB_ON_TOTAL_SILENCE "\xee\xbf\xbb" // U+effb -#define ICON_MD_DO_NOT_STEP "\xef\x86\x9f" // U+f19f -#define ICON_MD_DO_NOT_TOUCH "\xef\x86\xb0" // U+f1b0 -#define ICON_MD_DOCK "\xee\x8c\x8e" // U+e30e -#define ICON_MD_DOCUMENT_SCANNER "\xee\x97\xba" // U+e5fa -#define ICON_MD_DOMAIN "\xee\x9f\xae" // U+e7ee -#define ICON_MD_DOMAIN_ADD "\xee\xad\xa2" // U+eb62 -#define ICON_MD_DOMAIN_DISABLED "\xee\x83\xaf" // U+e0ef -#define ICON_MD_DOMAIN_VERIFICATION "\xee\xbd\x8c" // U+ef4c -#define ICON_MD_DONE "\xee\xa1\xb6" // U+e876 -#define ICON_MD_DONE_ALL "\xee\xa1\xb7" // U+e877 -#define ICON_MD_DONE_OUTLINE "\xee\xa4\xaf" // U+e92f -#define ICON_MD_DONUT_LARGE "\xee\xa4\x97" // U+e917 -#define ICON_MD_DONUT_SMALL "\xee\xa4\x98" // U+e918 -#define ICON_MD_DOOR_BACK "\xee\xbf\xbc" // U+effc -#define ICON_MD_DOOR_FRONT "\xee\xbf\xbd" // U+effd -#define ICON_MD_DOOR_SLIDING "\xee\xbf\xbe" // U+effe -#define ICON_MD_DOORBELL "\xee\xbf\xbf" // U+efff -#define ICON_MD_DOUBLE_ARROW "\xee\xa9\x90" // U+ea50 -#define ICON_MD_DOWNHILL_SKIING "\xee\x94\x89" // U+e509 -#define ICON_MD_DOWNLOAD "\xef\x82\x90" // U+f090 -#define ICON_MD_DOWNLOAD_DONE "\xef\x82\x91" // U+f091 -#define ICON_MD_DOWNLOAD_FOR_OFFLINE "\xef\x80\x80" // U+f000 -#define ICON_MD_DOWNLOADING "\xef\x80\x81" // U+f001 -#define ICON_MD_DRAFTS "\xee\x85\x91" // U+e151 -#define ICON_MD_DRAG_HANDLE "\xee\x89\x9d" // U+e25d -#define ICON_MD_DRAG_INDICATOR "\xee\xa5\x85" // U+e945 -#define ICON_MD_DRAW "\xee\x9d\x86" // U+e746 -#define ICON_MD_DRIVE_ETA "\xee\x98\x93" // U+e613 -#define ICON_MD_DRIVE_FILE_MOVE "\xee\x99\xb5" // U+e675 -#define ICON_MD_DRIVE_FILE_MOVE_OUTLINE "\xee\xa6\xa1" // U+e9a1 -#define ICON_MD_DRIVE_FILE_MOVE_RTL "\xee\x9d\xad" // U+e76d -#define ICON_MD_DRIVE_FILE_RENAME_OUTLINE "\xee\xa6\xa2" // U+e9a2 -#define ICON_MD_DRIVE_FOLDER_UPLOAD "\xee\xa6\xa3" // U+e9a3 -#define ICON_MD_DRY "\xef\x86\xb3" // U+f1b3 -#define ICON_MD_DRY_CLEANING "\xee\xa9\x98" // U+ea58 -#define ICON_MD_DUO "\xee\xa6\xa5" // U+e9a5 -#define ICON_MD_DVR "\xee\x86\xb2" // U+e1b2 -#define ICON_MD_DYNAMIC_FEED "\xee\xa8\x94" // U+ea14 -#define ICON_MD_DYNAMIC_FORM "\xef\x86\xbf" // U+f1bf -#define ICON_MD_E_MOBILEDATA "\xef\x80\x82" // U+f002 -#define ICON_MD_EARBUDS "\xef\x80\x83" // U+f003 -#define ICON_MD_EARBUDS_BATTERY "\xef\x80\x84" // U+f004 -#define ICON_MD_EAST "\xef\x87\x9f" // U+f1df -#define ICON_MD_ECO "\xee\xa8\xb5" // U+ea35 -#define ICON_MD_EDGESENSOR_HIGH "\xef\x80\x85" // U+f005 -#define ICON_MD_EDGESENSOR_LOW "\xef\x80\x86" // U+f006 -#define ICON_MD_EDIT "\xee\x8f\x89" // U+e3c9 -#define ICON_MD_EDIT_ATTRIBUTES "\xee\x95\xb8" // U+e578 -#define ICON_MD_EDIT_CALENDAR "\xee\x9d\x82" // U+e742 -#define ICON_MD_EDIT_LOCATION "\xee\x95\xa8" // U+e568 -#define ICON_MD_EDIT_LOCATION_ALT "\xee\x87\x85" // U+e1c5 -#define ICON_MD_EDIT_NOTE "\xee\x9d\x85" // U+e745 -#define ICON_MD_EDIT_NOTIFICATIONS "\xee\x94\xa5" // U+e525 -#define ICON_MD_EDIT_OFF "\xee\xa5\x90" // U+e950 -#define ICON_MD_EDIT_ROAD "\xee\xbd\x8d" // U+ef4d -#define ICON_MD_EGG "\xee\xab\x8c" // U+eacc -#define ICON_MD_EGG_ALT "\xee\xab\x88" // U+eac8 -#define ICON_MD_EJECT "\xee\xa3\xbb" // U+e8fb -#define ICON_MD_ELDERLY "\xef\x88\x9a" // U+f21a -#define ICON_MD_ELDERLY_WOMAN "\xee\xad\xa9" // U+eb69 -#define ICON_MD_ELECTRIC_BIKE "\xee\xac\x9b" // U+eb1b -#define ICON_MD_ELECTRIC_BOLT "\xee\xb0\x9c" // U+ec1c -#define ICON_MD_ELECTRIC_CAR "\xee\xac\x9c" // U+eb1c -#define ICON_MD_ELECTRIC_METER "\xee\xb0\x9b" // U+ec1b -#define ICON_MD_ELECTRIC_MOPED "\xee\xac\x9d" // U+eb1d -#define ICON_MD_ELECTRIC_RICKSHAW "\xee\xac\x9e" // U+eb1e -#define ICON_MD_ELECTRIC_SCOOTER "\xee\xac\x9f" // U+eb1f -#define ICON_MD_ELECTRICAL_SERVICES "\xef\x84\x82" // U+f102 -#define ICON_MD_ELEVATOR "\xef\x86\xa0" // U+f1a0 -#define ICON_MD_EMAIL "\xee\x82\xbe" // U+e0be -#define ICON_MD_EMERGENCY "\xee\x87\xab" // U+e1eb -#define ICON_MD_EMERGENCY_RECORDING "\xee\xaf\xb4" // U+ebf4 -#define ICON_MD_EMERGENCY_SHARE "\xee\xaf\xb6" // U+ebf6 -#define ICON_MD_EMOJI_EMOTIONS "\xee\xa8\xa2" // U+ea22 -#define ICON_MD_EMOJI_EVENTS "\xee\xa8\xa3" // U+ea23 -#define ICON_MD_EMOJI_FLAGS "\xee\xa8\x9a" // U+ea1a -#define ICON_MD_EMOJI_FOOD_BEVERAGE "\xee\xa8\x9b" // U+ea1b -#define ICON_MD_EMOJI_NATURE "\xee\xa8\x9c" // U+ea1c -#define ICON_MD_EMOJI_OBJECTS "\xee\xa8\xa4" // U+ea24 -#define ICON_MD_EMOJI_PEOPLE "\xee\xa8\x9d" // U+ea1d -#define ICON_MD_EMOJI_SYMBOLS "\xee\xa8\x9e" // U+ea1e -#define ICON_MD_EMOJI_TRANSPORTATION "\xee\xa8\x9f" // U+ea1f -#define ICON_MD_ENERGY_SAVINGS_LEAF "\xee\xb0\x9a" // U+ec1a -#define ICON_MD_ENGINEERING "\xee\xa8\xbd" // U+ea3d -#define ICON_MD_ENHANCE_PHOTO_TRANSLATE "\xee\xa3\xbc" // U+e8fc -#define ICON_MD_ENHANCED_ENCRYPTION "\xee\x98\xbf" // U+e63f -#define ICON_MD_EQUALIZER "\xee\x80\x9d" // U+e01d -#define ICON_MD_ERROR "\xee\x80\x80" // U+e000 -#define ICON_MD_ERROR_OUTLINE "\xee\x80\x81" // U+e001 -#define ICON_MD_ESCALATOR "\xef\x86\xa1" // U+f1a1 -#define ICON_MD_ESCALATOR_WARNING "\xef\x86\xac" // U+f1ac -#define ICON_MD_EURO "\xee\xa8\x95" // U+ea15 -#define ICON_MD_EURO_SYMBOL "\xee\xa4\xa6" // U+e926 -#define ICON_MD_EV_STATION "\xee\x95\xad" // U+e56d -#define ICON_MD_EVENT "\xee\xa1\xb8" // U+e878 -#define ICON_MD_EVENT_AVAILABLE "\xee\x98\x94" // U+e614 -#define ICON_MD_EVENT_BUSY "\xee\x98\x95" // U+e615 -#define ICON_MD_EVENT_NOTE "\xee\x98\x96" // U+e616 -#define ICON_MD_EVENT_REPEAT "\xee\xad\xbb" // U+eb7b -#define ICON_MD_EVENT_SEAT "\xee\xa4\x83" // U+e903 -#define ICON_MD_EXIT_TO_APP "\xee\xa1\xb9" // U+e879 -#define ICON_MD_EXPAND "\xee\xa5\x8f" // U+e94f -#define ICON_MD_EXPAND_CIRCLE_DOWN "\xee\x9f\x8d" // U+e7cd -#define ICON_MD_EXPAND_LESS "\xee\x97\x8e" // U+e5ce -#define ICON_MD_EXPAND_MORE "\xee\x97\x8f" // U+e5cf -#define ICON_MD_EXPLICIT "\xee\x80\x9e" // U+e01e -#define ICON_MD_EXPLORE "\xee\xa1\xba" // U+e87a -#define ICON_MD_EXPLORE_OFF "\xee\xa6\xa8" // U+e9a8 -#define ICON_MD_EXPOSURE "\xee\x8f\x8a" // U+e3ca -#define ICON_MD_EXPOSURE_MINUS_1 "\xee\x8f\x8b" // U+e3cb -#define ICON_MD_EXPOSURE_MINUS_2 "\xee\x8f\x8c" // U+e3cc -#define ICON_MD_EXPOSURE_NEG_1 "\xee\x8f\x8b" // U+e3cb -#define ICON_MD_EXPOSURE_NEG_2 "\xee\x8f\x8c" // U+e3cc -#define ICON_MD_EXPOSURE_PLUS_1 "\xee\x8f\x8d" // U+e3cd -#define ICON_MD_EXPOSURE_PLUS_2 "\xee\x8f\x8e" // U+e3ce -#define ICON_MD_EXPOSURE_ZERO "\xee\x8f\x8f" // U+e3cf -#define ICON_MD_EXTENSION "\xee\xa1\xbb" // U+e87b -#define ICON_MD_EXTENSION_OFF "\xee\x93\xb5" // U+e4f5 -#define ICON_MD_FACE "\xee\xa1\xbc" // U+e87c -#define ICON_MD_FACE_RETOUCHING_NATURAL "\xee\xbd\x8e" // U+ef4e -#define ICON_MD_FACE_RETOUCHING_OFF "\xef\x80\x87" // U+f007 -#define ICON_MD_FACEBOOK "\xef\x88\xb4" // U+f234 -#define ICON_MD_FACT_CHECK "\xef\x83\x85" // U+f0c5 -#define ICON_MD_FACTORY "\xee\xae\xbc" // U+ebbc -#define ICON_MD_FAMILY_RESTROOM "\xef\x86\xa2" // U+f1a2 -#define ICON_MD_FAST_FORWARD "\xee\x80\x9f" // U+e01f -#define ICON_MD_FAST_REWIND "\xee\x80\xa0" // U+e020 -#define ICON_MD_FASTFOOD "\xee\x95\xba" // U+e57a -#define ICON_MD_FAVORITE "\xee\xa1\xbd" // U+e87d -#define ICON_MD_FAVORITE_BORDER "\xee\xa1\xbe" // U+e87e -#define ICON_MD_FAVORITE_OUTLINE "\xee\xa1\xbe" // U+e87e -#define ICON_MD_FAX "\xee\xab\x98" // U+ead8 -#define ICON_MD_FEATURED_PLAY_LIST "\xee\x81\xad" // U+e06d -#define ICON_MD_FEATURED_VIDEO "\xee\x81\xae" // U+e06e -#define ICON_MD_FEED "\xef\x80\x89" // U+f009 -#define ICON_MD_FEEDBACK "\xee\xa1\xbf" // U+e87f -#define ICON_MD_FEMALE "\xee\x96\x90" // U+e590 -#define ICON_MD_FENCE "\xef\x87\xb6" // U+f1f6 -#define ICON_MD_FESTIVAL "\xee\xa9\xa8" // U+ea68 -#define ICON_MD_FIBER_DVR "\xee\x81\x9d" // U+e05d -#define ICON_MD_FIBER_MANUAL_RECORD "\xee\x81\xa1" // U+e061 -#define ICON_MD_FIBER_NEW "\xee\x81\x9e" // U+e05e -#define ICON_MD_FIBER_PIN "\xee\x81\xaa" // U+e06a -#define ICON_MD_FIBER_SMART_RECORD "\xee\x81\xa2" // U+e062 -#define ICON_MD_FILE_COPY "\xee\x85\xb3" // U+e173 -#define ICON_MD_FILE_DOWNLOAD "\xee\x8b\x84" // U+e2c4 -#define ICON_MD_FILE_DOWNLOAD_DONE "\xee\xa6\xaa" // U+e9aa -#define ICON_MD_FILE_DOWNLOAD_OFF "\xee\x93\xbe" // U+e4fe -#define ICON_MD_FILE_OPEN "\xee\xab\xb3" // U+eaf3 -#define ICON_MD_FILE_PRESENT "\xee\xa8\x8e" // U+ea0e -#define ICON_MD_FILE_UPLOAD "\xee\x8b\x86" // U+e2c6 -#define ICON_MD_FILTER "\xee\x8f\x93" // U+e3d3 -#define ICON_MD_FILTER_1 "\xee\x8f\x90" // U+e3d0 -#define ICON_MD_FILTER_2 "\xee\x8f\x91" // U+e3d1 -#define ICON_MD_FILTER_3 "\xee\x8f\x92" // U+e3d2 -#define ICON_MD_FILTER_4 "\xee\x8f\x94" // U+e3d4 -#define ICON_MD_FILTER_5 "\xee\x8f\x95" // U+e3d5 -#define ICON_MD_FILTER_6 "\xee\x8f\x96" // U+e3d6 -#define ICON_MD_FILTER_7 "\xee\x8f\x97" // U+e3d7 -#define ICON_MD_FILTER_8 "\xee\x8f\x98" // U+e3d8 -#define ICON_MD_FILTER_9 "\xee\x8f\x99" // U+e3d9 -#define ICON_MD_FILTER_9_PLUS "\xee\x8f\x9a" // U+e3da -#define ICON_MD_FILTER_ALT "\xee\xbd\x8f" // U+ef4f -#define ICON_MD_FILTER_ALT_OFF "\xee\xac\xb2" // U+eb32 -#define ICON_MD_FILTER_B_AND_W "\xee\x8f\x9b" // U+e3db -#define ICON_MD_FILTER_CENTER_FOCUS "\xee\x8f\x9c" // U+e3dc -#define ICON_MD_FILTER_DRAMA "\xee\x8f\x9d" // U+e3dd -#define ICON_MD_FILTER_FRAMES "\xee\x8f\x9e" // U+e3de -#define ICON_MD_FILTER_HDR "\xee\x8f\x9f" // U+e3df -#define ICON_MD_FILTER_LIST "\xee\x85\x92" // U+e152 -#define ICON_MD_FILTER_LIST_ALT "\xee\xa5\x8e" // U+e94e -#define ICON_MD_FILTER_LIST_OFF "\xee\xad\x97" // U+eb57 -#define ICON_MD_FILTER_NONE "\xee\x8f\xa0" // U+e3e0 -#define ICON_MD_FILTER_TILT_SHIFT "\xee\x8f\xa2" // U+e3e2 -#define ICON_MD_FILTER_VINTAGE "\xee\x8f\xa3" // U+e3e3 -#define ICON_MD_FIND_IN_PAGE "\xee\xa2\x80" // U+e880 -#define ICON_MD_FIND_REPLACE "\xee\xa2\x81" // U+e881 -#define ICON_MD_FINGERPRINT "\xee\xa4\x8d" // U+e90d -#define ICON_MD_FIRE_EXTINGUISHER "\xef\x87\x98" // U+f1d8 -#define ICON_MD_FIRE_HYDRANT "\xef\x86\xa3" // U+f1a3 -#define ICON_MD_FIREPLACE "\xee\xa9\x83" // U+ea43 -#define ICON_MD_FIRST_PAGE "\xee\x97\x9c" // U+e5dc -#define ICON_MD_FIT_SCREEN "\xee\xa8\x90" // U+ea10 -#define ICON_MD_FITBIT "\xee\xa0\xab" // U+e82b -#define ICON_MD_FITNESS_CENTER "\xee\xad\x83" // U+eb43 -#define ICON_MD_FLAG "\xee\x85\x93" // U+e153 -#define ICON_MD_FLAG_CIRCLE "\xee\xab\xb8" // U+eaf8 -#define ICON_MD_FLAKY "\xee\xbd\x90" // U+ef50 -#define ICON_MD_FLARE "\xee\x8f\xa4" // U+e3e4 -#define ICON_MD_FLASH_AUTO "\xee\x8f\xa5" // U+e3e5 -#define ICON_MD_FLASH_OFF "\xee\x8f\xa6" // U+e3e6 -#define ICON_MD_FLASH_ON "\xee\x8f\xa7" // U+e3e7 -#define ICON_MD_FLASHLIGHT_OFF "\xef\x80\x8a" // U+f00a -#define ICON_MD_FLASHLIGHT_ON "\xef\x80\x8b" // U+f00b -#define ICON_MD_FLATWARE "\xef\x80\x8c" // U+f00c -#define ICON_MD_FLIGHT "\xee\x94\xb9" // U+e539 -#define ICON_MD_FLIGHT_CLASS "\xee\x9f\x8b" // U+e7cb -#define ICON_MD_FLIGHT_LAND "\xee\xa4\x84" // U+e904 -#define ICON_MD_FLIGHT_TAKEOFF "\xee\xa4\x85" // U+e905 -#define ICON_MD_FLIP "\xee\x8f\xa8" // U+e3e8 -#define ICON_MD_FLIP_CAMERA_ANDROID "\xee\xa8\xb7" // U+ea37 -#define ICON_MD_FLIP_CAMERA_IOS "\xee\xa8\xb8" // U+ea38 -#define ICON_MD_FLIP_TO_BACK "\xee\xa2\x82" // U+e882 -#define ICON_MD_FLIP_TO_FRONT "\xee\xa2\x83" // U+e883 -#define ICON_MD_FLOOD "\xee\xaf\xa6" // U+ebe6 -#define ICON_MD_FLOURESCENT "\xef\x80\x8d" // U+f00d -#define ICON_MD_FLUTTER_DASH "\xee\x80\x8b" // U+e00b -#define ICON_MD_FMD_BAD "\xef\x80\x8e" // U+f00e -#define ICON_MD_FMD_GOOD "\xef\x80\x8f" // U+f00f -#define ICON_MD_FOGGY "\xee\xa0\x98" // U+e818 -#define ICON_MD_FOLDER "\xee\x8b\x87" // U+e2c7 -#define ICON_MD_FOLDER_COPY "\xee\xae\xbd" // U+ebbd -#define ICON_MD_FOLDER_DELETE "\xee\xac\xb4" // U+eb34 -#define ICON_MD_FOLDER_OFF "\xee\xae\x83" // U+eb83 -#define ICON_MD_FOLDER_OPEN "\xee\x8b\x88" // U+e2c8 -#define ICON_MD_FOLDER_SHARED "\xee\x8b\x89" // U+e2c9 -#define ICON_MD_FOLDER_SPECIAL "\xee\x98\x97" // U+e617 -#define ICON_MD_FOLDER_ZIP "\xee\xac\xac" // U+eb2c -#define ICON_MD_FOLLOW_THE_SIGNS "\xef\x88\xa2" // U+f222 -#define ICON_MD_FONT_DOWNLOAD "\xee\x85\xa7" // U+e167 -#define ICON_MD_FONT_DOWNLOAD_OFF "\xee\x93\xb9" // U+e4f9 -#define ICON_MD_FOOD_BANK "\xef\x87\xb2" // U+f1f2 -#define ICON_MD_FOREST "\xee\xaa\x99" // U+ea99 -#define ICON_MD_FORK_LEFT "\xee\xae\xa0" // U+eba0 -#define ICON_MD_FORK_RIGHT "\xee\xae\xac" // U+ebac -#define ICON_MD_FORMAT_ALIGN_CENTER "\xee\x88\xb4" // U+e234 -#define ICON_MD_FORMAT_ALIGN_JUSTIFY "\xee\x88\xb5" // U+e235 -#define ICON_MD_FORMAT_ALIGN_LEFT "\xee\x88\xb6" // U+e236 -#define ICON_MD_FORMAT_ALIGN_RIGHT "\xee\x88\xb7" // U+e237 -#define ICON_MD_FORMAT_BOLD "\xee\x88\xb8" // U+e238 -#define ICON_MD_FORMAT_CLEAR "\xee\x88\xb9" // U+e239 -#define ICON_MD_FORMAT_COLOR_FILL "\xee\x88\xba" // U+e23a -#define ICON_MD_FORMAT_COLOR_RESET "\xee\x88\xbb" // U+e23b -#define ICON_MD_FORMAT_COLOR_TEXT "\xee\x88\xbc" // U+e23c -#define ICON_MD_FORMAT_INDENT_DECREASE "\xee\x88\xbd" // U+e23d -#define ICON_MD_FORMAT_INDENT_INCREASE "\xee\x88\xbe" // U+e23e -#define ICON_MD_FORMAT_ITALIC "\xee\x88\xbf" // U+e23f -#define ICON_MD_FORMAT_LINE_SPACING "\xee\x89\x80" // U+e240 -#define ICON_MD_FORMAT_LIST_BULLETED "\xee\x89\x81" // U+e241 -#define ICON_MD_FORMAT_LIST_NUMBERED "\xee\x89\x82" // U+e242 -#define ICON_MD_FORMAT_LIST_NUMBERED_RTL "\xee\x89\xa7" // U+e267 -#define ICON_MD_FORMAT_OVERLINE "\xee\xad\xa5" // U+eb65 -#define ICON_MD_FORMAT_PAINT "\xee\x89\x83" // U+e243 -#define ICON_MD_FORMAT_QUOTE "\xee\x89\x84" // U+e244 -#define ICON_MD_FORMAT_SHAPES "\xee\x89\x9e" // U+e25e -#define ICON_MD_FORMAT_SIZE "\xee\x89\x85" // U+e245 -#define ICON_MD_FORMAT_STRIKETHROUGH "\xee\x89\x86" // U+e246 -#define ICON_MD_FORMAT_TEXTDIRECTION_L_TO_R "\xee\x89\x87" // U+e247 -#define ICON_MD_FORMAT_TEXTDIRECTION_R_TO_L "\xee\x89\x88" // U+e248 -#define ICON_MD_FORMAT_UNDERLINE "\xee\x89\x89" // U+e249 -#define ICON_MD_FORMAT_UNDERLINED "\xee\x89\x89" // U+e249 -#define ICON_MD_FORT "\xee\xaa\xad" // U+eaad -#define ICON_MD_FORUM "\xee\x82\xbf" // U+e0bf -#define ICON_MD_FORWARD "\xee\x85\x94" // U+e154 -#define ICON_MD_FORWARD_10 "\xee\x81\x96" // U+e056 -#define ICON_MD_FORWARD_30 "\xee\x81\x97" // U+e057 -#define ICON_MD_FORWARD_5 "\xee\x81\x98" // U+e058 -#define ICON_MD_FORWARD_TO_INBOX "\xef\x86\x87" // U+f187 -#define ICON_MD_FOUNDATION "\xef\x88\x80" // U+f200 -#define ICON_MD_FREE_BREAKFAST "\xee\xad\x84" // U+eb44 -#define ICON_MD_FREE_CANCELLATION "\xee\x9d\x88" // U+e748 -#define ICON_MD_FRONT_HAND "\xee\x9d\xa9" // U+e769 -#define ICON_MD_FULLSCREEN "\xee\x97\x90" // U+e5d0 -#define ICON_MD_FULLSCREEN_EXIT "\xee\x97\x91" // U+e5d1 -#define ICON_MD_FUNCTIONS "\xee\x89\x8a" // U+e24a -#define ICON_MD_G_MOBILEDATA "\xef\x80\x90" // U+f010 -#define ICON_MD_G_TRANSLATE "\xee\xa4\xa7" // U+e927 -#define ICON_MD_GAMEPAD "\xee\x8c\x8f" // U+e30f -#define ICON_MD_GAMES "\xee\x80\xa1" // U+e021 -#define ICON_MD_GARAGE "\xef\x80\x91" // U+f011 -#define ICON_MD_GAS_METER "\xee\xb0\x99" // U+ec19 -#define ICON_MD_GAVEL "\xee\xa4\x8e" // U+e90e -#define ICON_MD_GENERATING_TOKENS "\xee\x9d\x89" // U+e749 -#define ICON_MD_GESTURE "\xee\x85\x95" // U+e155 -#define ICON_MD_GET_APP "\xee\xa2\x84" // U+e884 -#define ICON_MD_GIF "\xee\xa4\x88" // U+e908 -#define ICON_MD_GIF_BOX "\xee\x9e\xa3" // U+e7a3 -#define ICON_MD_GIRL "\xee\xad\xa8" // U+eb68 -#define ICON_MD_GITE "\xee\x96\x8b" // U+e58b -// #define ICON_MD_GOAT "\xf4\x8f\xbf\xbd" // U+10fffd -#define ICON_MD_GOLF_COURSE "\xee\xad\x85" // U+eb45 -#define ICON_MD_GPP_BAD "\xef\x80\x92" // U+f012 -#define ICON_MD_GPP_GOOD "\xef\x80\x93" // U+f013 -#define ICON_MD_GPP_MAYBE "\xef\x80\x94" // U+f014 -#define ICON_MD_GPS_FIXED "\xee\x86\xb3" // U+e1b3 -#define ICON_MD_GPS_NOT_FIXED "\xee\x86\xb4" // U+e1b4 -#define ICON_MD_GPS_OFF "\xee\x86\xb5" // U+e1b5 -#define ICON_MD_GRADE "\xee\xa2\x85" // U+e885 -#define ICON_MD_GRADIENT "\xee\x8f\xa9" // U+e3e9 -#define ICON_MD_GRADING "\xee\xa9\x8f" // U+ea4f -#define ICON_MD_GRAIN "\xee\x8f\xaa" // U+e3ea -#define ICON_MD_GRAPHIC_EQ "\xee\x86\xb8" // U+e1b8 -#define ICON_MD_GRASS "\xef\x88\x85" // U+f205 -#define ICON_MD_GRID_3X3 "\xef\x80\x95" // U+f015 -#define ICON_MD_GRID_4X4 "\xef\x80\x96" // U+f016 -#define ICON_MD_GRID_GOLDENRATIO "\xef\x80\x97" // U+f017 -#define ICON_MD_GRID_OFF "\xee\x8f\xab" // U+e3eb -#define ICON_MD_GRID_ON "\xee\x8f\xac" // U+e3ec -#define ICON_MD_GRID_VIEW "\xee\xa6\xb0" // U+e9b0 -#define ICON_MD_GROUP "\xee\x9f\xaf" // U+e7ef -#define ICON_MD_GROUP_ADD "\xee\x9f\xb0" // U+e7f0 -#define ICON_MD_GROUP_OFF "\xee\x9d\x87" // U+e747 -#define ICON_MD_GROUP_REMOVE "\xee\x9e\xad" // U+e7ad -#define ICON_MD_GROUP_WORK "\xee\xa2\x86" // U+e886 -#define ICON_MD_GROUPS "\xef\x88\xb3" // U+f233 -#define ICON_MD_H_MOBILEDATA "\xef\x80\x98" // U+f018 -#define ICON_MD_H_PLUS_MOBILEDATA "\xef\x80\x99" // U+f019 -#define ICON_MD_HAIL "\xee\xa6\xb1" // U+e9b1 -#define ICON_MD_HANDSHAKE "\xee\xaf\x8b" // U+ebcb -#define ICON_MD_HANDYMAN "\xef\x84\x8b" // U+f10b -#define ICON_MD_HARDWARE "\xee\xa9\x99" // U+ea59 -#define ICON_MD_HD "\xee\x81\x92" // U+e052 -#define ICON_MD_HDR_AUTO "\xef\x80\x9a" // U+f01a -#define ICON_MD_HDR_AUTO_SELECT "\xef\x80\x9b" // U+f01b -#define ICON_MD_HDR_ENHANCED_SELECT "\xee\xbd\x91" // U+ef51 -#define ICON_MD_HDR_OFF "\xee\x8f\xad" // U+e3ed -#define ICON_MD_HDR_OFF_SELECT "\xef\x80\x9c" // U+f01c -#define ICON_MD_HDR_ON "\xee\x8f\xae" // U+e3ee -#define ICON_MD_HDR_ON_SELECT "\xef\x80\x9d" // U+f01d -#define ICON_MD_HDR_PLUS "\xef\x80\x9e" // U+f01e -#define ICON_MD_HDR_STRONG "\xee\x8f\xb1" // U+e3f1 -#define ICON_MD_HDR_WEAK "\xee\x8f\xb2" // U+e3f2 -#define ICON_MD_HEADPHONES "\xef\x80\x9f" // U+f01f -#define ICON_MD_HEADPHONES_BATTERY "\xef\x80\xa0" // U+f020 -#define ICON_MD_HEADSET "\xee\x8c\x90" // U+e310 -#define ICON_MD_HEADSET_MIC "\xee\x8c\x91" // U+e311 -#define ICON_MD_HEADSET_OFF "\xee\x8c\xba" // U+e33a -#define ICON_MD_HEALING "\xee\x8f\xb3" // U+e3f3 -#define ICON_MD_HEALTH_AND_SAFETY "\xee\x87\x95" // U+e1d5 -#define ICON_MD_HEARING "\xee\x80\xa3" // U+e023 -#define ICON_MD_HEARING_DISABLED "\xef\x84\x84" // U+f104 -#define ICON_MD_HEART_BROKEN "\xee\xab\x82" // U+eac2 -#define ICON_MD_HEAT_PUMP "\xee\xb0\x98" // U+ec18 -#define ICON_MD_HEIGHT "\xee\xa8\x96" // U+ea16 -#define ICON_MD_HELP "\xee\xa2\x87" // U+e887 -#define ICON_MD_HELP_CENTER "\xef\x87\x80" // U+f1c0 -#define ICON_MD_HELP_OUTLINE "\xee\xa3\xbd" // U+e8fd -#define ICON_MD_HEVC "\xef\x80\xa1" // U+f021 -#define ICON_MD_HEXAGON "\xee\xac\xb9" // U+eb39 -#define ICON_MD_HIDE_IMAGE "\xef\x80\xa2" // U+f022 -#define ICON_MD_HIDE_SOURCE "\xef\x80\xa3" // U+f023 -#define ICON_MD_HIGH_QUALITY "\xee\x80\xa4" // U+e024 -#define ICON_MD_HIGHLIGHT "\xee\x89\x9f" // U+e25f -#define ICON_MD_HIGHLIGHT_ALT "\xee\xbd\x92" // U+ef52 -#define ICON_MD_HIGHLIGHT_OFF "\xee\xa2\x88" // U+e888 -#define ICON_MD_HIGHLIGHT_REMOVE "\xee\xa2\x88" // U+e888 -#define ICON_MD_HIKING "\xee\x94\x8a" // U+e50a -#define ICON_MD_HISTORY "\xee\xa2\x89" // U+e889 -#define ICON_MD_HISTORY_EDU "\xee\xa8\xbe" // U+ea3e -#define ICON_MD_HISTORY_TOGGLE_OFF "\xef\x85\xbd" // U+f17d -#define ICON_MD_HIVE "\xee\xaa\xa6" // U+eaa6 -#define ICON_MD_HLS "\xee\xae\x8a" // U+eb8a -#define ICON_MD_HLS_OFF "\xee\xae\x8c" // U+eb8c -#define ICON_MD_HOLIDAY_VILLAGE "\xee\x96\x8a" // U+e58a -#define ICON_MD_HOME "\xee\xa2\x8a" // U+e88a -#define ICON_MD_HOME_FILLED "\xee\xa6\xb2" // U+e9b2 -#define ICON_MD_HOME_MAX "\xef\x80\xa4" // U+f024 -#define ICON_MD_HOME_MINI "\xef\x80\xa5" // U+f025 -#define ICON_MD_HOME_REPAIR_SERVICE "\xef\x84\x80" // U+f100 -#define ICON_MD_HOME_WORK "\xee\xa8\x89" // U+ea09 -#define ICON_MD_HORIZONTAL_DISTRIBUTE "\xee\x80\x94" // U+e014 -#define ICON_MD_HORIZONTAL_RULE "\xef\x84\x88" // U+f108 -#define ICON_MD_HORIZONTAL_SPLIT "\xee\xa5\x87" // U+e947 -#define ICON_MD_HOT_TUB "\xee\xad\x86" // U+eb46 -#define ICON_MD_HOTEL "\xee\x94\xba" // U+e53a -#define ICON_MD_HOTEL_CLASS "\xee\x9d\x83" // U+e743 -#define ICON_MD_HOURGLASS_BOTTOM "\xee\xa9\x9c" // U+ea5c -#define ICON_MD_HOURGLASS_DISABLED "\xee\xbd\x93" // U+ef53 -#define ICON_MD_HOURGLASS_EMPTY "\xee\xa2\x8b" // U+e88b -#define ICON_MD_HOURGLASS_FULL "\xee\xa2\x8c" // U+e88c -#define ICON_MD_HOURGLASS_TOP "\xee\xa9\x9b" // U+ea5b -#define ICON_MD_HOUSE "\xee\xa9\x84" // U+ea44 -#define ICON_MD_HOUSE_SIDING "\xef\x88\x82" // U+f202 -#define ICON_MD_HOUSEBOAT "\xee\x96\x84" // U+e584 -#define ICON_MD_HOW_TO_REG "\xee\x85\xb4" // U+e174 -#define ICON_MD_HOW_TO_VOTE "\xee\x85\xb5" // U+e175 -#define ICON_MD_HTML "\xee\xad\xbe" // U+eb7e -#define ICON_MD_HTTP "\xee\xa4\x82" // U+e902 -#define ICON_MD_HTTPS "\xee\xa2\x8d" // U+e88d -#define ICON_MD_HUB "\xee\xa7\xb4" // U+e9f4 -#define ICON_MD_HVAC "\xef\x84\x8e" // U+f10e -#define ICON_MD_ICE_SKATING "\xee\x94\x8b" // U+e50b -#define ICON_MD_ICECREAM "\xee\xa9\xa9" // U+ea69 -#define ICON_MD_IMAGE "\xee\x8f\xb4" // U+e3f4 -#define ICON_MD_IMAGE_ASPECT_RATIO "\xee\x8f\xb5" // U+e3f5 -#define ICON_MD_IMAGE_NOT_SUPPORTED "\xef\x84\x96" // U+f116 -#define ICON_MD_IMAGE_SEARCH "\xee\x90\xbf" // U+e43f -#define ICON_MD_IMAGESEARCH_ROLLER "\xee\xa6\xb4" // U+e9b4 -#define ICON_MD_IMPORT_CONTACTS "\xee\x83\xa0" // U+e0e0 -#define ICON_MD_IMPORT_EXPORT "\xee\x83\x83" // U+e0c3 -#define ICON_MD_IMPORTANT_DEVICES "\xee\xa4\x92" // U+e912 -#define ICON_MD_INBOX "\xee\x85\x96" // U+e156 -#define ICON_MD_INCOMPLETE_CIRCLE "\xee\x9e\x9b" // U+e79b -#define ICON_MD_INDETERMINATE_CHECK_BOX "\xee\xa4\x89" // U+e909 -#define ICON_MD_INFO "\xee\xa2\x8e" // U+e88e -#define ICON_MD_INFO_OUTLINE "\xee\xa2\x8f" // U+e88f -#define ICON_MD_INPUT "\xee\xa2\x90" // U+e890 -#define ICON_MD_INSERT_CHART "\xee\x89\x8b" // U+e24b -#define ICON_MD_INSERT_CHART_OUTLINED "\xee\x89\xaa" // U+e26a -#define ICON_MD_INSERT_COMMENT "\xee\x89\x8c" // U+e24c -#define ICON_MD_INSERT_DRIVE_FILE "\xee\x89\x8d" // U+e24d -#define ICON_MD_INSERT_EMOTICON "\xee\x89\x8e" // U+e24e -#define ICON_MD_INSERT_INVITATION "\xee\x89\x8f" // U+e24f -#define ICON_MD_INSERT_LINK "\xee\x89\x90" // U+e250 -#define ICON_MD_INSERT_PAGE_BREAK "\xee\xab\x8a" // U+eaca -#define ICON_MD_INSERT_PHOTO "\xee\x89\x91" // U+e251 -#define ICON_MD_INSIGHTS "\xef\x82\x92" // U+f092 -#define ICON_MD_INSTALL_DESKTOP "\xee\xad\xb1" // U+eb71 -#define ICON_MD_INSTALL_MOBILE "\xee\xad\xb2" // U+eb72 -#define ICON_MD_INTEGRATION_INSTRUCTIONS "\xee\xbd\x94" // U+ef54 -#define ICON_MD_INTERESTS "\xee\x9f\x88" // U+e7c8 -#define ICON_MD_INTERPRETER_MODE "\xee\xa0\xbb" // U+e83b -#define ICON_MD_INVENTORY "\xee\x85\xb9" // U+e179 -#define ICON_MD_INVENTORY_2 "\xee\x86\xa1" // U+e1a1 -#define ICON_MD_INVERT_COLORS "\xee\xa2\x91" // U+e891 -#define ICON_MD_INVERT_COLORS_OFF "\xee\x83\x84" // U+e0c4 -#define ICON_MD_INVERT_COLORS_ON "\xee\xa2\x91" // U+e891 -#define ICON_MD_IOS_SHARE "\xee\x9a\xb8" // U+e6b8 -#define ICON_MD_IRON "\xee\x96\x83" // U+e583 -#define ICON_MD_ISO "\xee\x8f\xb6" // U+e3f6 -#define ICON_MD_JAVASCRIPT "\xee\xad\xbc" // U+eb7c -#define ICON_MD_JOIN_FULL "\xee\xab\xab" // U+eaeb -#define ICON_MD_JOIN_INNER "\xee\xab\xb4" // U+eaf4 -#define ICON_MD_JOIN_LEFT "\xee\xab\xb2" // U+eaf2 -#define ICON_MD_JOIN_RIGHT "\xee\xab\xaa" // U+eaea -#define ICON_MD_KAYAKING "\xee\x94\x8c" // U+e50c -#define ICON_MD_KEBAB_DINING "\xee\xa1\x82" // U+e842 -#define ICON_MD_KEY "\xee\x9c\xbc" // U+e73c -#define ICON_MD_KEY_OFF "\xee\xae\x84" // U+eb84 -#define ICON_MD_KEYBOARD "\xee\x8c\x92" // U+e312 -#define ICON_MD_KEYBOARD_ALT "\xef\x80\xa8" // U+f028 -#define ICON_MD_KEYBOARD_ARROW_DOWN "\xee\x8c\x93" // U+e313 -#define ICON_MD_KEYBOARD_ARROW_LEFT "\xee\x8c\x94" // U+e314 -#define ICON_MD_KEYBOARD_ARROW_RIGHT "\xee\x8c\x95" // U+e315 -#define ICON_MD_KEYBOARD_ARROW_UP "\xee\x8c\x96" // U+e316 -#define ICON_MD_KEYBOARD_BACKSPACE "\xee\x8c\x97" // U+e317 -#define ICON_MD_KEYBOARD_CAPSLOCK "\xee\x8c\x98" // U+e318 -#define ICON_MD_KEYBOARD_COMMAND "\xee\xab\xa0" // U+eae0 -#define ICON_MD_KEYBOARD_COMMAND_KEY "\xee\xab\xa7" // U+eae7 -#define ICON_MD_KEYBOARD_CONTROL "\xee\x97\x93" // U+e5d3 -#define ICON_MD_KEYBOARD_CONTROL_KEY "\xee\xab\xa6" // U+eae6 -#define ICON_MD_KEYBOARD_DOUBLE_ARROW_DOWN "\xee\xab\x90" // U+ead0 -#define ICON_MD_KEYBOARD_DOUBLE_ARROW_LEFT "\xee\xab\x83" // U+eac3 -#define ICON_MD_KEYBOARD_DOUBLE_ARROW_RIGHT "\xee\xab\x89" // U+eac9 -#define ICON_MD_KEYBOARD_DOUBLE_ARROW_UP "\xee\xab\x8f" // U+eacf -#define ICON_MD_KEYBOARD_HIDE "\xee\x8c\x9a" // U+e31a -#define ICON_MD_KEYBOARD_OPTION "\xee\xab\x9f" // U+eadf -#define ICON_MD_KEYBOARD_OPTION_KEY "\xee\xab\xa8" // U+eae8 -#define ICON_MD_KEYBOARD_RETURN "\xee\x8c\x9b" // U+e31b -#define ICON_MD_KEYBOARD_TAB "\xee\x8c\x9c" // U+e31c -#define ICON_MD_KEYBOARD_VOICE "\xee\x8c\x9d" // U+e31d -#define ICON_MD_KING_BED "\xee\xa9\x85" // U+ea45 -#define ICON_MD_KITCHEN "\xee\xad\x87" // U+eb47 -#define ICON_MD_KITESURFING "\xee\x94\x8d" // U+e50d -#define ICON_MD_LABEL "\xee\xa2\x92" // U+e892 -#define ICON_MD_LABEL_IMPORTANT "\xee\xa4\xb7" // U+e937 -#define ICON_MD_LABEL_IMPORTANT_OUTLINE "\xee\xa5\x88" // U+e948 -#define ICON_MD_LABEL_OFF "\xee\xa6\xb6" // U+e9b6 -#define ICON_MD_LABEL_OUTLINE "\xee\xa2\x93" // U+e893 -#define ICON_MD_LAN "\xee\xac\xaf" // U+eb2f -#define ICON_MD_LANDSCAPE "\xee\x8f\xb7" // U+e3f7 -#define ICON_MD_LANDSLIDE "\xee\xaf\x97" // U+ebd7 -#define ICON_MD_LANGUAGE "\xee\xa2\x94" // U+e894 -#define ICON_MD_LAPTOP "\xee\x8c\x9e" // U+e31e -#define ICON_MD_LAPTOP_CHROMEBOOK "\xee\x8c\x9f" // U+e31f -#define ICON_MD_LAPTOP_MAC "\xee\x8c\xa0" // U+e320 -#define ICON_MD_LAPTOP_WINDOWS "\xee\x8c\xa1" // U+e321 -#define ICON_MD_LAST_PAGE "\xee\x97\x9d" // U+e5dd -#define ICON_MD_LAUNCH "\xee\xa2\x95" // U+e895 -#define ICON_MD_LAYERS "\xee\x94\xbb" // U+e53b -#define ICON_MD_LAYERS_CLEAR "\xee\x94\xbc" // U+e53c -#define ICON_MD_LEADERBOARD "\xef\x88\x8c" // U+f20c -#define ICON_MD_LEAK_ADD "\xee\x8f\xb8" // U+e3f8 -#define ICON_MD_LEAK_REMOVE "\xee\x8f\xb9" // U+e3f9 -#define ICON_MD_LEAVE_BAGS_AT_HOME "\xef\x88\x9b" // U+f21b -#define ICON_MD_LEGEND_TOGGLE "\xef\x84\x9b" // U+f11b -#define ICON_MD_LENS "\xee\x8f\xba" // U+e3fa -#define ICON_MD_LENS_BLUR "\xef\x80\xa9" // U+f029 -#define ICON_MD_LIBRARY_ADD "\xee\x80\xae" // U+e02e -#define ICON_MD_LIBRARY_ADD_CHECK "\xee\xa6\xb7" // U+e9b7 -#define ICON_MD_LIBRARY_BOOKS "\xee\x80\xaf" // U+e02f -#define ICON_MD_LIBRARY_MUSIC "\xee\x80\xb0" // U+e030 -#define ICON_MD_LIGHT "\xef\x80\xaa" // U+f02a -#define ICON_MD_LIGHT_MODE "\xee\x94\x98" // U+e518 -#define ICON_MD_LIGHTBULB "\xee\x83\xb0" // U+e0f0 -#define ICON_MD_LIGHTBULB_CIRCLE "\xee\xaf\xbe" // U+ebfe -#define ICON_MD_LIGHTBULB_OUTLINE "\xee\xa4\x8f" // U+e90f -#define ICON_MD_LINE_AXIS "\xee\xaa\x9a" // U+ea9a -#define ICON_MD_LINE_STYLE "\xee\xa4\x99" // U+e919 -#define ICON_MD_LINE_WEIGHT "\xee\xa4\x9a" // U+e91a -#define ICON_MD_LINEAR_SCALE "\xee\x89\xa0" // U+e260 -#define ICON_MD_LINK "\xee\x85\x97" // U+e157 -#define ICON_MD_LINK_OFF "\xee\x85\xaf" // U+e16f -#define ICON_MD_LINKED_CAMERA "\xee\x90\xb8" // U+e438 -#define ICON_MD_LIQUOR "\xee\xa9\xa0" // U+ea60 -#define ICON_MD_LIST "\xee\xa2\x96" // U+e896 -#define ICON_MD_LIST_ALT "\xee\x83\xae" // U+e0ee -#define ICON_MD_LIVE_HELP "\xee\x83\x86" // U+e0c6 -#define ICON_MD_LIVE_TV "\xee\x98\xb9" // U+e639 -#define ICON_MD_LIVING "\xef\x80\xab" // U+f02b -#define ICON_MD_LOCAL_ACTIVITY "\xee\x94\xbf" // U+e53f -#define ICON_MD_LOCAL_AIRPORT "\xee\x94\xbd" // U+e53d -#define ICON_MD_LOCAL_ATM "\xee\x94\xbe" // U+e53e -#define ICON_MD_LOCAL_ATTRACTION "\xee\x94\xbf" // U+e53f -#define ICON_MD_LOCAL_BAR "\xee\x95\x80" // U+e540 -#define ICON_MD_LOCAL_CAFE "\xee\x95\x81" // U+e541 -#define ICON_MD_LOCAL_CAR_WASH "\xee\x95\x82" // U+e542 -#define ICON_MD_LOCAL_CONVENIENCE_STORE "\xee\x95\x83" // U+e543 -#define ICON_MD_LOCAL_DINING "\xee\x95\x96" // U+e556 -#define ICON_MD_LOCAL_DRINK "\xee\x95\x84" // U+e544 -#define ICON_MD_LOCAL_FIRE_DEPARTMENT "\xee\xbd\x95" // U+ef55 -#define ICON_MD_LOCAL_FLORIST "\xee\x95\x85" // U+e545 -#define ICON_MD_LOCAL_GAS_STATION "\xee\x95\x86" // U+e546 -#define ICON_MD_LOCAL_GROCERY_STORE "\xee\x95\x87" // U+e547 -#define ICON_MD_LOCAL_HOSPITAL "\xee\x95\x88" // U+e548 -#define ICON_MD_LOCAL_HOTEL "\xee\x95\x89" // U+e549 -#define ICON_MD_LOCAL_LAUNDRY_SERVICE "\xee\x95\x8a" // U+e54a -#define ICON_MD_LOCAL_LIBRARY "\xee\x95\x8b" // U+e54b -#define ICON_MD_LOCAL_MALL "\xee\x95\x8c" // U+e54c -#define ICON_MD_LOCAL_MOVIES "\xee\x95\x8d" // U+e54d -#define ICON_MD_LOCAL_OFFER "\xee\x95\x8e" // U+e54e -#define ICON_MD_LOCAL_PARKING "\xee\x95\x8f" // U+e54f -#define ICON_MD_LOCAL_PHARMACY "\xee\x95\x90" // U+e550 -#define ICON_MD_LOCAL_PHONE "\xee\x95\x91" // U+e551 -#define ICON_MD_LOCAL_PIZZA "\xee\x95\x92" // U+e552 -#define ICON_MD_LOCAL_PLAY "\xee\x95\x93" // U+e553 -#define ICON_MD_LOCAL_POLICE "\xee\xbd\x96" // U+ef56 -#define ICON_MD_LOCAL_POST_OFFICE "\xee\x95\x94" // U+e554 -#define ICON_MD_LOCAL_PRINT_SHOP "\xee\x95\x95" // U+e555 -#define ICON_MD_LOCAL_PRINTSHOP "\xee\x95\x95" // U+e555 -#define ICON_MD_LOCAL_RESTAURANT "\xee\x95\x96" // U+e556 -#define ICON_MD_LOCAL_SEE "\xee\x95\x97" // U+e557 -#define ICON_MD_LOCAL_SHIPPING "\xee\x95\x98" // U+e558 -#define ICON_MD_LOCAL_TAXI "\xee\x95\x99" // U+e559 -#define ICON_MD_LOCATION_CITY "\xee\x9f\xb1" // U+e7f1 -#define ICON_MD_LOCATION_DISABLED "\xee\x86\xb6" // U+e1b6 -#define ICON_MD_LOCATION_HISTORY "\xee\x95\x9a" // U+e55a -#define ICON_MD_LOCATION_OFF "\xee\x83\x87" // U+e0c7 -#define ICON_MD_LOCATION_ON "\xee\x83\x88" // U+e0c8 -#define ICON_MD_LOCATION_PIN "\xef\x87\x9b" // U+f1db -#define ICON_MD_LOCATION_SEARCHING "\xee\x86\xb7" // U+e1b7 -#define ICON_MD_LOCK "\xee\xa2\x97" // U+e897 -#define ICON_MD_LOCK_CLOCK "\xee\xbd\x97" // U+ef57 -#define ICON_MD_LOCK_OPEN "\xee\xa2\x98" // U+e898 -#define ICON_MD_LOCK_OUTLINE "\xee\xa2\x99" // U+e899 -#define ICON_MD_LOCK_PERSON "\xef\xa3\xb3" // U+f8f3 -#define ICON_MD_LOCK_RESET "\xee\xab\x9e" // U+eade -#define ICON_MD_LOGIN "\xee\xa9\xb7" // U+ea77 -#define ICON_MD_LOGO_DEV "\xee\xab\x96" // U+ead6 -#define ICON_MD_LOGOUT "\xee\xa6\xba" // U+e9ba -#define ICON_MD_LOOKS "\xee\x8f\xbc" // U+e3fc -#define ICON_MD_LOOKS_3 "\xee\x8f\xbb" // U+e3fb -#define ICON_MD_LOOKS_4 "\xee\x8f\xbd" // U+e3fd -#define ICON_MD_LOOKS_5 "\xee\x8f\xbe" // U+e3fe -#define ICON_MD_LOOKS_6 "\xee\x8f\xbf" // U+e3ff -#define ICON_MD_LOOKS_ONE "\xee\x90\x80" // U+e400 -#define ICON_MD_LOOKS_TWO "\xee\x90\x81" // U+e401 -#define ICON_MD_LOOP "\xee\x80\xa8" // U+e028 -#define ICON_MD_LOUPE "\xee\x90\x82" // U+e402 -#define ICON_MD_LOW_PRIORITY "\xee\x85\xad" // U+e16d -#define ICON_MD_LOYALTY "\xee\xa2\x9a" // U+e89a -#define ICON_MD_LTE_MOBILEDATA "\xef\x80\xac" // U+f02c -#define ICON_MD_LTE_PLUS_MOBILEDATA "\xef\x80\xad" // U+f02d -#define ICON_MD_LUGGAGE "\xef\x88\xb5" // U+f235 -#define ICON_MD_LUNCH_DINING "\xee\xa9\xa1" // U+ea61 -#define ICON_MD_LYRICS "\xee\xb0\x8b" // U+ec0b -#define ICON_MD_MAIL "\xee\x85\x98" // U+e158 -#define ICON_MD_MAIL_LOCK "\xee\xb0\x8a" // U+ec0a -#define ICON_MD_MAIL_OUTLINE "\xee\x83\xa1" // U+e0e1 -#define ICON_MD_MALE "\xee\x96\x8e" // U+e58e -#define ICON_MD_MAN "\xee\x93\xab" // U+e4eb -#define ICON_MD_MANAGE_ACCOUNTS "\xef\x80\xae" // U+f02e -#define ICON_MD_MANAGE_HISTORY "\xee\xaf\xa7" // U+ebe7 -#define ICON_MD_MANAGE_SEARCH "\xef\x80\xaf" // U+f02f -#define ICON_MD_MAP "\xee\x95\x9b" // U+e55b -#define ICON_MD_MAPS_HOME_WORK "\xef\x80\xb0" // U+f030 -#define ICON_MD_MAPS_UGC "\xee\xbd\x98" // U+ef58 -#define ICON_MD_MARGIN "\xee\xa6\xbb" // U+e9bb -#define ICON_MD_MARK_AS_UNREAD "\xee\xa6\xbc" // U+e9bc -#define ICON_MD_MARK_CHAT_READ "\xef\x86\x8b" // U+f18b -#define ICON_MD_MARK_CHAT_UNREAD "\xef\x86\x89" // U+f189 -#define ICON_MD_MARK_EMAIL_READ "\xef\x86\x8c" // U+f18c -#define ICON_MD_MARK_EMAIL_UNREAD "\xef\x86\x8a" // U+f18a -#define ICON_MD_MARK_UNREAD_CHAT_ALT "\xee\xae\x9d" // U+eb9d -#define ICON_MD_MARKUNREAD "\xee\x85\x99" // U+e159 -#define ICON_MD_MARKUNREAD_MAILBOX "\xee\xa2\x9b" // U+e89b -#define ICON_MD_MASKS "\xef\x88\x98" // U+f218 -#define ICON_MD_MAXIMIZE "\xee\xa4\xb0" // U+e930 -#define ICON_MD_MEDIA_BLUETOOTH_OFF "\xef\x80\xb1" // U+f031 -#define ICON_MD_MEDIA_BLUETOOTH_ON "\xef\x80\xb2" // U+f032 -#define ICON_MD_MEDIATION "\xee\xbe\xa7" // U+efa7 -#define ICON_MD_MEDICAL_INFORMATION "\xee\xaf\xad" // U+ebed -#define ICON_MD_MEDICAL_SERVICES "\xef\x84\x89" // U+f109 -#define ICON_MD_MEDICATION "\xef\x80\xb3" // U+f033 -#define ICON_MD_MEDICATION_LIQUID "\xee\xaa\x87" // U+ea87 -#define ICON_MD_MEETING_ROOM "\xee\xad\x8f" // U+eb4f -#define ICON_MD_MEMORY "\xee\x8c\xa2" // U+e322 -#define ICON_MD_MENU "\xee\x97\x92" // U+e5d2 -#define ICON_MD_MENU_BOOK "\xee\xa8\x99" // U+ea19 -#define ICON_MD_MENU_OPEN "\xee\xa6\xbd" // U+e9bd -#define ICON_MD_MERGE "\xee\xae\x98" // U+eb98 -#define ICON_MD_MERGE_TYPE "\xee\x89\x92" // U+e252 -#define ICON_MD_MESSAGE "\xee\x83\x89" // U+e0c9 -#define ICON_MD_MESSENGER "\xee\x83\x8a" // U+e0ca -#define ICON_MD_MESSENGER_OUTLINE "\xee\x83\x8b" // U+e0cb -#define ICON_MD_MIC "\xee\x80\xa9" // U+e029 -#define ICON_MD_MIC_EXTERNAL_OFF "\xee\xbd\x99" // U+ef59 -#define ICON_MD_MIC_EXTERNAL_ON "\xee\xbd\x9a" // U+ef5a -#define ICON_MD_MIC_NONE "\xee\x80\xaa" // U+e02a -#define ICON_MD_MIC_OFF "\xee\x80\xab" // U+e02b -#define ICON_MD_MICROWAVE "\xef\x88\x84" // U+f204 -#define ICON_MD_MILITARY_TECH "\xee\xa8\xbf" // U+ea3f -#define ICON_MD_MINIMIZE "\xee\xa4\xb1" // U+e931 -#define ICON_MD_MINOR_CRASH "\xee\xaf\xb1" // U+ebf1 -#define ICON_MD_MISCELLANEOUS_SERVICES "\xef\x84\x8c" // U+f10c -#define ICON_MD_MISSED_VIDEO_CALL "\xee\x81\xb3" // U+e073 -#define ICON_MD_MMS "\xee\x98\x98" // U+e618 -#define ICON_MD_MOBILE_FRIENDLY "\xee\x88\x80" // U+e200 -#define ICON_MD_MOBILE_OFF "\xee\x88\x81" // U+e201 -#define ICON_MD_MOBILE_SCREEN_SHARE "\xee\x83\xa7" // U+e0e7 -#define ICON_MD_MOBILEDATA_OFF "\xef\x80\xb4" // U+f034 -#define ICON_MD_MODE "\xef\x82\x97" // U+f097 -#define ICON_MD_MODE_COMMENT "\xee\x89\x93" // U+e253 -#define ICON_MD_MODE_EDIT "\xee\x89\x94" // U+e254 -#define ICON_MD_MODE_EDIT_OUTLINE "\xef\x80\xb5" // U+f035 -#define ICON_MD_MODE_FAN_OFF "\xee\xb0\x97" // U+ec17 -#define ICON_MD_MODE_NIGHT "\xef\x80\xb6" // U+f036 -#define ICON_MD_MODE_OF_TRAVEL "\xee\x9f\x8e" // U+e7ce -#define ICON_MD_MODE_STANDBY "\xef\x80\xb7" // U+f037 -#define ICON_MD_MODEL_TRAINING "\xef\x83\x8f" // U+f0cf -#define ICON_MD_MONETIZATION_ON "\xee\x89\xa3" // U+e263 -#define ICON_MD_MONEY "\xee\x95\xbd" // U+e57d -#define ICON_MD_MONEY_OFF "\xee\x89\x9c" // U+e25c -#define ICON_MD_MONEY_OFF_CSRED "\xef\x80\xb8" // U+f038 -#define ICON_MD_MONITOR "\xee\xbd\x9b" // U+ef5b -#define ICON_MD_MONITOR_HEART "\xee\xaa\xa2" // U+eaa2 -#define ICON_MD_MONITOR_WEIGHT "\xef\x80\xb9" // U+f039 -#define ICON_MD_MONOCHROME_PHOTOS "\xee\x90\x83" // U+e403 -#define ICON_MD_MOOD "\xee\x9f\xb2" // U+e7f2 -#define ICON_MD_MOOD_BAD "\xee\x9f\xb3" // U+e7f3 -#define ICON_MD_MOPED "\xee\xac\xa8" // U+eb28 -#define ICON_MD_MORE "\xee\x98\x99" // U+e619 -#define ICON_MD_MORE_HORIZ "\xee\x97\x93" // U+e5d3 -#define ICON_MD_MORE_TIME "\xee\xa9\x9d" // U+ea5d -#define ICON_MD_MORE_VERT "\xee\x97\x94" // U+e5d4 -#define ICON_MD_MOSQUE "\xee\xaa\xb2" // U+eab2 -#define ICON_MD_MOTION_PHOTOS_AUTO "\xef\x80\xba" // U+f03a -#define ICON_MD_MOTION_PHOTOS_OFF "\xee\xa7\x80" // U+e9c0 -#define ICON_MD_MOTION_PHOTOS_ON "\xee\xa7\x81" // U+e9c1 -#define ICON_MD_MOTION_PHOTOS_PAUSE "\xef\x88\xa7" // U+f227 -#define ICON_MD_MOTION_PHOTOS_PAUSED "\xee\xa7\x82" // U+e9c2 -#define ICON_MD_MOTORCYCLE "\xee\xa4\x9b" // U+e91b -#define ICON_MD_MOUSE "\xee\x8c\xa3" // U+e323 -#define ICON_MD_MOVE_DOWN "\xee\xad\xa1" // U+eb61 -#define ICON_MD_MOVE_TO_INBOX "\xee\x85\xa8" // U+e168 -#define ICON_MD_MOVE_UP "\xee\xad\xa4" // U+eb64 -#define ICON_MD_MOVIE "\xee\x80\xac" // U+e02c -#define ICON_MD_MOVIE_CREATION "\xee\x90\x84" // U+e404 -#define ICON_MD_MOVIE_FILTER "\xee\x90\xba" // U+e43a -#define ICON_MD_MOVING "\xee\x94\x81" // U+e501 -#define ICON_MD_MP "\xee\xa7\x83" // U+e9c3 -#define ICON_MD_MULTILINE_CHART "\xee\x9b\x9f" // U+e6df -#define ICON_MD_MULTIPLE_STOP "\xef\x86\xb9" // U+f1b9 -#define ICON_MD_MULTITRACK_AUDIO "\xee\x86\xb8" // U+e1b8 -#define ICON_MD_MUSEUM "\xee\xa8\xb6" // U+ea36 -#define ICON_MD_MUSIC_NOTE "\xee\x90\x85" // U+e405 -#define ICON_MD_MUSIC_OFF "\xee\x91\x80" // U+e440 -#define ICON_MD_MUSIC_VIDEO "\xee\x81\xa3" // U+e063 -#define ICON_MD_MY_LIBRARY_ADD "\xee\x80\xae" // U+e02e -#define ICON_MD_MY_LIBRARY_BOOKS "\xee\x80\xaf" // U+e02f -#define ICON_MD_MY_LIBRARY_MUSIC "\xee\x80\xb0" // U+e030 -#define ICON_MD_MY_LOCATION "\xee\x95\x9c" // U+e55c -#define ICON_MD_NAT "\xee\xbd\x9c" // U+ef5c -#define ICON_MD_NATURE "\xee\x90\x86" // U+e406 -#define ICON_MD_NATURE_PEOPLE "\xee\x90\x87" // U+e407 -#define ICON_MD_NAVIGATE_BEFORE "\xee\x90\x88" // U+e408 -#define ICON_MD_NAVIGATE_NEXT "\xee\x90\x89" // U+e409 -#define ICON_MD_NAVIGATION "\xee\x95\x9d" // U+e55d -#define ICON_MD_NEAR_ME "\xee\x95\xa9" // U+e569 -#define ICON_MD_NEAR_ME_DISABLED "\xef\x87\xaf" // U+f1ef -#define ICON_MD_NEARBY_ERROR "\xef\x80\xbb" // U+f03b -#define ICON_MD_NEARBY_OFF "\xef\x80\xbc" // U+f03c -#define ICON_MD_NEST_CAM_WIRED_STAND "\xee\xb0\x96" // U+ec16 -#define ICON_MD_NETWORK_CELL "\xee\x86\xb9" // U+e1b9 -#define ICON_MD_NETWORK_CHECK "\xee\x99\x80" // U+e640 -#define ICON_MD_NETWORK_LOCKED "\xee\x98\x9a" // U+e61a -#define ICON_MD_NETWORK_PING "\xee\xaf\x8a" // U+ebca -#define ICON_MD_NETWORK_WIFI "\xee\x86\xba" // U+e1ba -#define ICON_MD_NETWORK_WIFI_1_BAR "\xee\xaf\xa4" // U+ebe4 -#define ICON_MD_NETWORK_WIFI_2_BAR "\xee\xaf\x96" // U+ebd6 -#define ICON_MD_NETWORK_WIFI_3_BAR "\xee\xaf\xa1" // U+ebe1 -#define ICON_MD_NEW_LABEL "\xee\x98\x89" // U+e609 -#define ICON_MD_NEW_RELEASES "\xee\x80\xb1" // U+e031 -#define ICON_MD_NEWSPAPER "\xee\xae\x81" // U+eb81 -#define ICON_MD_NEXT_PLAN "\xee\xbd\x9d" // U+ef5d -#define ICON_MD_NEXT_WEEK "\xee\x85\xaa" // U+e16a -#define ICON_MD_NFC "\xee\x86\xbb" // U+e1bb -#define ICON_MD_NIGHT_SHELTER "\xef\x87\xb1" // U+f1f1 -#define ICON_MD_NIGHTLIFE "\xee\xa9\xa2" // U+ea62 -#define ICON_MD_NIGHTLIGHT "\xef\x80\xbd" // U+f03d -#define ICON_MD_NIGHTLIGHT_ROUND "\xee\xbd\x9e" // U+ef5e -#define ICON_MD_NIGHTS_STAY "\xee\xa9\x86" // U+ea46 -#define ICON_MD_NO_ACCOUNTS "\xef\x80\xbe" // U+f03e -#define ICON_MD_NO_ADULT_CONTENT "\xef\xa3\xbe" // U+f8fe -#define ICON_MD_NO_BACKPACK "\xef\x88\xb7" // U+f237 -#define ICON_MD_NO_CELL "\xef\x86\xa4" // U+f1a4 -#define ICON_MD_NO_CRASH "\xee\xaf\xb0" // U+ebf0 -#define ICON_MD_NO_DRINKS "\xef\x86\xa5" // U+f1a5 -#define ICON_MD_NO_ENCRYPTION "\xee\x99\x81" // U+e641 -#define ICON_MD_NO_ENCRYPTION_GMAILERRORRED "\xef\x80\xbf" // U+f03f -#define ICON_MD_NO_FLASH "\xef\x86\xa6" // U+f1a6 -#define ICON_MD_NO_FOOD "\xef\x86\xa7" // U+f1a7 -#define ICON_MD_NO_LUGGAGE "\xef\x88\xbb" // U+f23b -#define ICON_MD_NO_MEALS "\xef\x87\x96" // U+f1d6 -#define ICON_MD_NO_MEALS_OULINE "\xef\x88\xa9" // U+f229 -#define ICON_MD_NO_MEETING_ROOM "\xee\xad\x8e" // U+eb4e -#define ICON_MD_NO_PHOTOGRAPHY "\xef\x86\xa8" // U+f1a8 -#define ICON_MD_NO_SIM "\xee\x83\x8c" // U+e0cc -#define ICON_MD_NO_STROLLER "\xef\x86\xaf" // U+f1af -#define ICON_MD_NO_TRANSFER "\xef\x87\x95" // U+f1d5 -#define ICON_MD_NOISE_AWARE "\xee\xaf\xac" // U+ebec -#define ICON_MD_NOISE_CONTROL_OFF "\xee\xaf\xb3" // U+ebf3 -#define ICON_MD_NORDIC_WALKING "\xee\x94\x8e" // U+e50e -#define ICON_MD_NORTH "\xef\x87\xa0" // U+f1e0 -#define ICON_MD_NORTH_EAST "\xef\x87\xa1" // U+f1e1 -#define ICON_MD_NORTH_WEST "\xef\x87\xa2" // U+f1e2 -#define ICON_MD_NOT_ACCESSIBLE "\xef\x83\xbe" // U+f0fe -#define ICON_MD_NOT_INTERESTED "\xee\x80\xb3" // U+e033 -#define ICON_MD_NOT_LISTED_LOCATION "\xee\x95\xb5" // U+e575 -#define ICON_MD_NOT_STARTED "\xef\x83\x91" // U+f0d1 -#define ICON_MD_NOTE "\xee\x81\xaf" // U+e06f -#define ICON_MD_NOTE_ADD "\xee\xa2\x9c" // U+e89c -#define ICON_MD_NOTE_ALT "\xef\x81\x80" // U+f040 -#define ICON_MD_NOTES "\xee\x89\xac" // U+e26c -#define ICON_MD_NOTIFICATION_ADD "\xee\x8e\x99" // U+e399 -#define ICON_MD_NOTIFICATION_IMPORTANT "\xee\x80\x84" // U+e004 -#define ICON_MD_NOTIFICATIONS "\xee\x9f\xb4" // U+e7f4 -#define ICON_MD_NOTIFICATIONS_ACTIVE "\xee\x9f\xb7" // U+e7f7 -#define ICON_MD_NOTIFICATIONS_NONE "\xee\x9f\xb5" // U+e7f5 -#define ICON_MD_NOTIFICATIONS_OFF "\xee\x9f\xb6" // U+e7f6 -#define ICON_MD_NOTIFICATIONS_ON "\xee\x9f\xb7" // U+e7f7 -#define ICON_MD_NOTIFICATIONS_PAUSED "\xee\x9f\xb8" // U+e7f8 -#define ICON_MD_NOW_WALLPAPER "\xee\x86\xbc" // U+e1bc -#define ICON_MD_NOW_WIDGETS "\xee\x86\xbd" // U+e1bd -#define ICON_MD_NUMBERS "\xee\xab\x87" // U+eac7 -#define ICON_MD_OFFLINE_BOLT "\xee\xa4\xb2" // U+e932 -#define ICON_MD_OFFLINE_PIN "\xee\xa4\x8a" // U+e90a -#define ICON_MD_OFFLINE_SHARE "\xee\xa7\x85" // U+e9c5 -#define ICON_MD_OIL_BARREL "\xee\xb0\x95" // U+ec15 -#define ICON_MD_ON_DEVICE_TRAINING "\xee\xaf\xbd" // U+ebfd -#define ICON_MD_ONDEMAND_VIDEO "\xee\x98\xba" // U+e63a -#define ICON_MD_ONLINE_PREDICTION "\xef\x83\xab" // U+f0eb -#define ICON_MD_OPACITY "\xee\xa4\x9c" // U+e91c -#define ICON_MD_OPEN_IN_BROWSER "\xee\xa2\x9d" // U+e89d -#define ICON_MD_OPEN_IN_FULL "\xef\x87\x8e" // U+f1ce -#define ICON_MD_OPEN_IN_NEW "\xee\xa2\x9e" // U+e89e -#define ICON_MD_OPEN_IN_NEW_OFF "\xee\x93\xb6" // U+e4f6 -#define ICON_MD_OPEN_WITH "\xee\xa2\x9f" // U+e89f -#define ICON_MD_OTHER_HOUSES "\xee\x96\x8c" // U+e58c -#define ICON_MD_OUTBOND "\xef\x88\xa8" // U+f228 -#define ICON_MD_OUTBOUND "\xee\x87\x8a" // U+e1ca -#define ICON_MD_OUTBOX "\xee\xbd\x9f" // U+ef5f -#define ICON_MD_OUTDOOR_GRILL "\xee\xa9\x87" // U+ea47 -#define ICON_MD_OUTGOING_MAIL "\xef\x83\x92" // U+f0d2 -#define ICON_MD_OUTLET "\xef\x87\x94" // U+f1d4 -#define ICON_MD_OUTLINED_FLAG "\xee\x85\xae" // U+e16e -#define ICON_MD_OUTPUT "\xee\xae\xbe" // U+ebbe -#define ICON_MD_PADDING "\xee\xa7\x88" // U+e9c8 -#define ICON_MD_PAGES "\xee\x9f\xb9" // U+e7f9 -#define ICON_MD_PAGEVIEW "\xee\xa2\xa0" // U+e8a0 -#define ICON_MD_PAID "\xef\x81\x81" // U+f041 -#define ICON_MD_PALETTE "\xee\x90\x8a" // U+e40a -#define ICON_MD_PAN_TOOL "\xee\xa4\xa5" // U+e925 -#define ICON_MD_PAN_TOOL_ALT "\xee\xae\xb9" // U+ebb9 -#define ICON_MD_PANORAMA "\xee\x90\x8b" // U+e40b -#define ICON_MD_PANORAMA_FISH_EYE "\xee\x90\x8c" // U+e40c -#define ICON_MD_PANORAMA_FISHEYE "\xee\x90\x8c" // U+e40c -#define ICON_MD_PANORAMA_HORIZONTAL "\xee\x90\x8d" // U+e40d -#define ICON_MD_PANORAMA_HORIZONTAL_SELECT "\xee\xbd\xa0" // U+ef60 -#define ICON_MD_PANORAMA_PHOTOSPHERE "\xee\xa7\x89" // U+e9c9 -#define ICON_MD_PANORAMA_PHOTOSPHERE_SELECT "\xee\xa7\x8a" // U+e9ca -#define ICON_MD_PANORAMA_VERTICAL "\xee\x90\x8e" // U+e40e -#define ICON_MD_PANORAMA_VERTICAL_SELECT "\xee\xbd\xa1" // U+ef61 -#define ICON_MD_PANORAMA_WIDE_ANGLE "\xee\x90\x8f" // U+e40f -#define ICON_MD_PANORAMA_WIDE_ANGLE_SELECT "\xee\xbd\xa2" // U+ef62 -#define ICON_MD_PARAGLIDING "\xee\x94\x8f" // U+e50f -#define ICON_MD_PARK "\xee\xa9\xa3" // U+ea63 -#define ICON_MD_PARTY_MODE "\xee\x9f\xba" // U+e7fa -#define ICON_MD_PASSWORD "\xef\x81\x82" // U+f042 -#define ICON_MD_PATTERN "\xef\x81\x83" // U+f043 -#define ICON_MD_PAUSE "\xee\x80\xb4" // U+e034 -#define ICON_MD_PAUSE_CIRCLE "\xee\x86\xa2" // U+e1a2 -#define ICON_MD_PAUSE_CIRCLE_FILLED "\xee\x80\xb5" // U+e035 -#define ICON_MD_PAUSE_CIRCLE_OUTLINE "\xee\x80\xb6" // U+e036 -#define ICON_MD_PAUSE_PRESENTATION "\xee\x83\xaa" // U+e0ea -#define ICON_MD_PAYMENT "\xee\xa2\xa1" // U+e8a1 -#define ICON_MD_PAYMENTS "\xee\xbd\xa3" // U+ef63 -#define ICON_MD_PAYPAL "\xee\xaa\x8d" // U+ea8d -#define ICON_MD_PEDAL_BIKE "\xee\xac\xa9" // U+eb29 -#define ICON_MD_PENDING "\xee\xbd\xa4" // U+ef64 -#define ICON_MD_PENDING_ACTIONS "\xef\x86\xbb" // U+f1bb -#define ICON_MD_PENTAGON "\xee\xad\x90" // U+eb50 -#define ICON_MD_PEOPLE "\xee\x9f\xbb" // U+e7fb -#define ICON_MD_PEOPLE_ALT "\xee\xa8\xa1" // U+ea21 -#define ICON_MD_PEOPLE_OUTLINE "\xee\x9f\xbc" // U+e7fc -#define ICON_MD_PERCENT "\xee\xad\x98" // U+eb58 -#define ICON_MD_PERM_CAMERA_MIC "\xee\xa2\xa2" // U+e8a2 -#define ICON_MD_PERM_CONTACT_CAL "\xee\xa2\xa3" // U+e8a3 -#define ICON_MD_PERM_CONTACT_CALENDAR "\xee\xa2\xa3" // U+e8a3 -#define ICON_MD_PERM_DATA_SETTING "\xee\xa2\xa4" // U+e8a4 -#define ICON_MD_PERM_DEVICE_INFO "\xee\xa2\xa5" // U+e8a5 -#define ICON_MD_PERM_DEVICE_INFORMATION "\xee\xa2\xa5" // U+e8a5 -#define ICON_MD_PERM_IDENTITY "\xee\xa2\xa6" // U+e8a6 -#define ICON_MD_PERM_MEDIA "\xee\xa2\xa7" // U+e8a7 -#define ICON_MD_PERM_PHONE_MSG "\xee\xa2\xa8" // U+e8a8 -#define ICON_MD_PERM_SCAN_WIFI "\xee\xa2\xa9" // U+e8a9 -#define ICON_MD_PERSON "\xee\x9f\xbd" // U+e7fd -#define ICON_MD_PERSON_ADD "\xee\x9f\xbe" // U+e7fe -#define ICON_MD_PERSON_ADD_ALT "\xee\xa9\x8d" // U+ea4d -#define ICON_MD_PERSON_ADD_ALT_1 "\xee\xbd\xa5" // U+ef65 -#define ICON_MD_PERSON_ADD_DISABLED "\xee\xa7\x8b" // U+e9cb -#define ICON_MD_PERSON_OFF "\xee\x94\x90" // U+e510 -#define ICON_MD_PERSON_OUTLINE "\xee\x9f\xbf" // U+e7ff -#define ICON_MD_PERSON_PIN "\xee\x95\x9a" // U+e55a -#define ICON_MD_PERSON_PIN_CIRCLE "\xee\x95\xaa" // U+e56a -#define ICON_MD_PERSON_REMOVE "\xee\xbd\xa6" // U+ef66 -#define ICON_MD_PERSON_REMOVE_ALT_1 "\xee\xbd\xa7" // U+ef67 -#define ICON_MD_PERSON_SEARCH "\xef\x84\x86" // U+f106 -#define ICON_MD_PERSONAL_INJURY "\xee\x9b\x9a" // U+e6da -#define ICON_MD_PERSONAL_VIDEO "\xee\x98\xbb" // U+e63b -#define ICON_MD_PEST_CONTROL "\xef\x83\xba" // U+f0fa -#define ICON_MD_PEST_CONTROL_RODENT "\xef\x83\xbd" // U+f0fd -#define ICON_MD_PETS "\xee\xa4\x9d" // U+e91d -#define ICON_MD_PHISHING "\xee\xab\x97" // U+ead7 -#define ICON_MD_PHONE "\xee\x83\x8d" // U+e0cd -#define ICON_MD_PHONE_ANDROID "\xee\x8c\xa4" // U+e324 -#define ICON_MD_PHONE_BLUETOOTH_SPEAKER "\xee\x98\x9b" // U+e61b -#define ICON_MD_PHONE_CALLBACK "\xee\x99\x89" // U+e649 -#define ICON_MD_PHONE_DISABLED "\xee\xa7\x8c" // U+e9cc -#define ICON_MD_PHONE_ENABLED "\xee\xa7\x8d" // U+e9cd -#define ICON_MD_PHONE_FORWARDED "\xee\x98\x9c" // U+e61c -#define ICON_MD_PHONE_IN_TALK "\xee\x98\x9d" // U+e61d -#define ICON_MD_PHONE_IPHONE "\xee\x8c\xa5" // U+e325 -#define ICON_MD_PHONE_LOCKED "\xee\x98\x9e" // U+e61e -#define ICON_MD_PHONE_MISSED "\xee\x98\x9f" // U+e61f -#define ICON_MD_PHONE_PAUSED "\xee\x98\xa0" // U+e620 -#define ICON_MD_PHONELINK "\xee\x8c\xa6" // U+e326 -#define ICON_MD_PHONELINK_ERASE "\xee\x83\x9b" // U+e0db -#define ICON_MD_PHONELINK_LOCK "\xee\x83\x9c" // U+e0dc -#define ICON_MD_PHONELINK_OFF "\xee\x8c\xa7" // U+e327 -#define ICON_MD_PHONELINK_RING "\xee\x83\x9d" // U+e0dd -#define ICON_MD_PHONELINK_SETUP "\xee\x83\x9e" // U+e0de -#define ICON_MD_PHOTO "\xee\x90\x90" // U+e410 -#define ICON_MD_PHOTO_ALBUM "\xee\x90\x91" // U+e411 -#define ICON_MD_PHOTO_CAMERA "\xee\x90\x92" // U+e412 -#define ICON_MD_PHOTO_CAMERA_BACK "\xee\xbd\xa8" // U+ef68 -#define ICON_MD_PHOTO_CAMERA_FRONT "\xee\xbd\xa9" // U+ef69 -#define ICON_MD_PHOTO_FILTER "\xee\x90\xbb" // U+e43b -#define ICON_MD_PHOTO_LIBRARY "\xee\x90\x93" // U+e413 -#define ICON_MD_PHOTO_SIZE_SELECT_ACTUAL "\xee\x90\xb2" // U+e432 -#define ICON_MD_PHOTO_SIZE_SELECT_LARGE "\xee\x90\xb3" // U+e433 -#define ICON_MD_PHOTO_SIZE_SELECT_SMALL "\xee\x90\xb4" // U+e434 -#define ICON_MD_PHP "\xee\xae\x8f" // U+eb8f -#define ICON_MD_PIANO "\xee\x94\xa1" // U+e521 -#define ICON_MD_PIANO_OFF "\xee\x94\xa0" // U+e520 -#define ICON_MD_PICTURE_AS_PDF "\xee\x90\x95" // U+e415 -#define ICON_MD_PICTURE_IN_PICTURE "\xee\xa2\xaa" // U+e8aa -#define ICON_MD_PICTURE_IN_PICTURE_ALT "\xee\xa4\x91" // U+e911 -#define ICON_MD_PIE_CHART "\xee\x9b\x84" // U+e6c4 -#define ICON_MD_PIE_CHART_OUTLINE "\xef\x81\x84" // U+f044 -#define ICON_MD_PIE_CHART_OUTLINED "\xee\x9b\x85" // U+e6c5 -#define ICON_MD_PIN "\xef\x81\x85" // U+f045 -#define ICON_MD_PIN_DROP "\xee\x95\x9e" // U+e55e -#define ICON_MD_PIN_END "\xee\x9d\xa7" // U+e767 -#define ICON_MD_PIN_INVOKE "\xee\x9d\xa3" // U+e763 -#define ICON_MD_PINCH "\xee\xac\xb8" // U+eb38 -#define ICON_MD_PIVOT_TABLE_CHART "\xee\xa7\x8e" // U+e9ce -#define ICON_MD_PIX "\xee\xaa\xa3" // U+eaa3 -#define ICON_MD_PLACE "\xee\x95\x9f" // U+e55f -#define ICON_MD_PLAGIARISM "\xee\xa9\x9a" // U+ea5a -#define ICON_MD_PLAY_ARROW "\xee\x80\xb7" // U+e037 -#define ICON_MD_PLAY_CIRCLE "\xee\x87\x84" // U+e1c4 -#define ICON_MD_PLAY_CIRCLE_FILL "\xee\x80\xb8" // U+e038 -#define ICON_MD_PLAY_CIRCLE_FILLED "\xee\x80\xb8" // U+e038 -#define ICON_MD_PLAY_CIRCLE_OUTLINE "\xee\x80\xb9" // U+e039 -#define ICON_MD_PLAY_DISABLED "\xee\xbd\xaa" // U+ef6a -#define ICON_MD_PLAY_FOR_WORK "\xee\xa4\x86" // U+e906 -#define ICON_MD_PLAY_LESSON "\xef\x81\x87" // U+f047 -#define ICON_MD_PLAYLIST_ADD "\xee\x80\xbb" // U+e03b -#define ICON_MD_PLAYLIST_ADD_CHECK "\xee\x81\xa5" // U+e065 -#define ICON_MD_PLAYLIST_ADD_CHECK_CIRCLE "\xee\x9f\xa6" // U+e7e6 -#define ICON_MD_PLAYLIST_ADD_CIRCLE "\xee\x9f\xa5" // U+e7e5 -#define ICON_MD_PLAYLIST_PLAY "\xee\x81\x9f" // U+e05f -#define ICON_MD_PLAYLIST_REMOVE "\xee\xae\x80" // U+eb80 -#define ICON_MD_PLUMBING "\xef\x84\x87" // U+f107 -#define ICON_MD_PLUS_ONE "\xee\xa0\x80" // U+e800 -#define ICON_MD_PODCASTS "\xef\x81\x88" // U+f048 -#define ICON_MD_POINT_OF_SALE "\xef\x85\xbe" // U+f17e -#define ICON_MD_POLICY "\xee\xa8\x97" // U+ea17 -#define ICON_MD_POLL "\xee\xa0\x81" // U+e801 -#define ICON_MD_POLYLINE "\xee\xae\xbb" // U+ebbb -#define ICON_MD_POLYMER "\xee\xa2\xab" // U+e8ab -#define ICON_MD_POOL "\xee\xad\x88" // U+eb48 -#define ICON_MD_PORTABLE_WIFI_OFF "\xee\x83\x8e" // U+e0ce -#define ICON_MD_PORTRAIT "\xee\x90\x96" // U+e416 -#define ICON_MD_POST_ADD "\xee\xa8\xa0" // U+ea20 -#define ICON_MD_POWER "\xee\x98\xbc" // U+e63c -#define ICON_MD_POWER_INPUT "\xee\x8c\xb6" // U+e336 -#define ICON_MD_POWER_OFF "\xee\x99\x86" // U+e646 -#define ICON_MD_POWER_SETTINGS_NEW "\xee\xa2\xac" // U+e8ac -#define ICON_MD_PRECISION_MANUFACTURING "\xef\x81\x89" // U+f049 -#define ICON_MD_PREGNANT_WOMAN "\xee\xa4\x9e" // U+e91e -#define ICON_MD_PRESENT_TO_ALL "\xee\x83\x9f" // U+e0df -#define ICON_MD_PREVIEW "\xef\x87\x85" // U+f1c5 -#define ICON_MD_PRICE_CHANGE "\xef\x81\x8a" // U+f04a -#define ICON_MD_PRICE_CHECK "\xef\x81\x8b" // U+f04b -#define ICON_MD_PRINT "\xee\xa2\xad" // U+e8ad -#define ICON_MD_PRINT_DISABLED "\xee\xa7\x8f" // U+e9cf -#define ICON_MD_PRIORITY_HIGH "\xee\x99\x85" // U+e645 -#define ICON_MD_PRIVACY_TIP "\xef\x83\x9c" // U+f0dc -#define ICON_MD_PRIVATE_CONNECTIVITY "\xee\x9d\x84" // U+e744 -#define ICON_MD_PRODUCTION_QUANTITY_LIMITS "\xee\x87\x91" // U+e1d1 -#define ICON_MD_PROPANE "\xee\xb0\x94" // U+ec14 -#define ICON_MD_PROPANE_TANK "\xee\xb0\x93" // U+ec13 -#define ICON_MD_PSYCHOLOGY "\xee\xa9\x8a" // U+ea4a -#define ICON_MD_PUBLIC "\xee\xa0\x8b" // U+e80b -#define ICON_MD_PUBLIC_OFF "\xef\x87\x8a" // U+f1ca -#define ICON_MD_PUBLISH "\xee\x89\x95" // U+e255 -#define ICON_MD_PUBLISHED_WITH_CHANGES "\xef\x88\xb2" // U+f232 -#define ICON_MD_PUNCH_CLOCK "\xee\xaa\xa8" // U+eaa8 -#define ICON_MD_PUSH_PIN "\xef\x84\x8d" // U+f10d -#define ICON_MD_QR_CODE "\xee\xbd\xab" // U+ef6b -#define ICON_MD_QR_CODE_2 "\xee\x80\x8a" // U+e00a -#define ICON_MD_QR_CODE_SCANNER "\xef\x88\x86" // U+f206 -#define ICON_MD_QUERY_BUILDER "\xee\xa2\xae" // U+e8ae -#define ICON_MD_QUERY_STATS "\xee\x93\xbc" // U+e4fc -#define ICON_MD_QUESTION_ANSWER "\xee\xa2\xaf" // U+e8af -#define ICON_MD_QUESTION_MARK "\xee\xae\x8b" // U+eb8b -#define ICON_MD_QUEUE "\xee\x80\xbc" // U+e03c -#define ICON_MD_QUEUE_MUSIC "\xee\x80\xbd" // U+e03d -#define ICON_MD_QUEUE_PLAY_NEXT "\xee\x81\xa6" // U+e066 -#define ICON_MD_QUICK_CONTACTS_DIALER "\xee\x83\x8f" // U+e0cf -#define ICON_MD_QUICK_CONTACTS_MAIL "\xee\x83\x90" // U+e0d0 -#define ICON_MD_QUICKREPLY "\xee\xbd\xac" // U+ef6c -#define ICON_MD_QUIZ "\xef\x81\x8c" // U+f04c -#define ICON_MD_QUORA "\xee\xaa\x98" // U+ea98 -#define ICON_MD_R_MOBILEDATA "\xef\x81\x8d" // U+f04d -#define ICON_MD_RADAR "\xef\x81\x8e" // U+f04e -#define ICON_MD_RADIO "\xee\x80\xbe" // U+e03e -#define ICON_MD_RADIO_BUTTON_CHECKED "\xee\xa0\xb7" // U+e837 -#define ICON_MD_RADIO_BUTTON_OFF "\xee\xa0\xb6" // U+e836 -#define ICON_MD_RADIO_BUTTON_ON "\xee\xa0\xb7" // U+e837 -#define ICON_MD_RADIO_BUTTON_UNCHECKED "\xee\xa0\xb6" // U+e836 -#define ICON_MD_RAILWAY_ALERT "\xee\xa7\x91" // U+e9d1 -#define ICON_MD_RAMEN_DINING "\xee\xa9\xa4" // U+ea64 -#define ICON_MD_RAMP_LEFT "\xee\xae\x9c" // U+eb9c -#define ICON_MD_RAMP_RIGHT "\xee\xae\x96" // U+eb96 -#define ICON_MD_RATE_REVIEW "\xee\x95\xa0" // U+e560 -#define ICON_MD_RAW_OFF "\xef\x81\x8f" // U+f04f -#define ICON_MD_RAW_ON "\xef\x81\x90" // U+f050 -#define ICON_MD_READ_MORE "\xee\xbd\xad" // U+ef6d -#define ICON_MD_REAL_ESTATE_AGENT "\xee\x9c\xba" // U+e73a -#define ICON_MD_RECEIPT "\xee\xa2\xb0" // U+e8b0 -#define ICON_MD_RECEIPT_LONG "\xee\xbd\xae" // U+ef6e -#define ICON_MD_RECENT_ACTORS "\xee\x80\xbf" // U+e03f -#define ICON_MD_RECOMMEND "\xee\xa7\x92" // U+e9d2 -#define ICON_MD_RECORD_VOICE_OVER "\xee\xa4\x9f" // U+e91f -#define ICON_MD_RECTANGLE "\xee\xad\x94" // U+eb54 -#define ICON_MD_RECYCLING "\xee\x9d\xa0" // U+e760 -#define ICON_MD_REDDIT "\xee\xaa\xa0" // U+eaa0 -#define ICON_MD_REDEEM "\xee\xa2\xb1" // U+e8b1 -#define ICON_MD_REDO "\xee\x85\x9a" // U+e15a -#define ICON_MD_REDUCE_CAPACITY "\xef\x88\x9c" // U+f21c -#define ICON_MD_REFRESH "\xee\x97\x95" // U+e5d5 -#define ICON_MD_REMEMBER_ME "\xef\x81\x91" // U+f051 -#define ICON_MD_REMOVE "\xee\x85\x9b" // U+e15b -#define ICON_MD_REMOVE_CIRCLE "\xee\x85\x9c" // U+e15c -#define ICON_MD_REMOVE_CIRCLE_OUTLINE "\xee\x85\x9d" // U+e15d -#define ICON_MD_REMOVE_DONE "\xee\xa7\x93" // U+e9d3 -#define ICON_MD_REMOVE_FROM_QUEUE "\xee\x81\xa7" // U+e067 -#define ICON_MD_REMOVE_MODERATOR "\xee\xa7\x94" // U+e9d4 -#define ICON_MD_REMOVE_RED_EYE "\xee\x90\x97" // U+e417 -#define ICON_MD_REMOVE_ROAD "\xee\xaf\xbc" // U+ebfc -#define ICON_MD_REMOVE_SHOPPING_CART "\xee\xa4\xa8" // U+e928 -#define ICON_MD_REORDER "\xee\xa3\xbe" // U+e8fe -#define ICON_MD_REPEAT "\xee\x81\x80" // U+e040 -#define ICON_MD_REPEAT_ON "\xee\xa7\x96" // U+e9d6 -#define ICON_MD_REPEAT_ONE "\xee\x81\x81" // U+e041 -#define ICON_MD_REPEAT_ONE_ON "\xee\xa7\x97" // U+e9d7 -#define ICON_MD_REPLAY "\xee\x81\x82" // U+e042 -#define ICON_MD_REPLAY_10 "\xee\x81\x99" // U+e059 -#define ICON_MD_REPLAY_30 "\xee\x81\x9a" // U+e05a -#define ICON_MD_REPLAY_5 "\xee\x81\x9b" // U+e05b -#define ICON_MD_REPLAY_CIRCLE_FILLED "\xee\xa7\x98" // U+e9d8 -#define ICON_MD_REPLY "\xee\x85\x9e" // U+e15e -#define ICON_MD_REPLY_ALL "\xee\x85\x9f" // U+e15f -#define ICON_MD_REPORT "\xee\x85\xa0" // U+e160 -#define ICON_MD_REPORT_GMAILERRORRED "\xef\x81\x92" // U+f052 -#define ICON_MD_REPORT_OFF "\xee\x85\xb0" // U+e170 -#define ICON_MD_REPORT_PROBLEM "\xee\xa2\xb2" // U+e8b2 -#define ICON_MD_REQUEST_PAGE "\xef\x88\xac" // U+f22c -#define ICON_MD_REQUEST_QUOTE "\xef\x86\xb6" // U+f1b6 -#define ICON_MD_RESET_TV "\xee\xa7\x99" // U+e9d9 -#define ICON_MD_RESTART_ALT "\xef\x81\x93" // U+f053 -#define ICON_MD_RESTAURANT "\xee\x95\xac" // U+e56c -#define ICON_MD_RESTAURANT_MENU "\xee\x95\xa1" // U+e561 -#define ICON_MD_RESTORE "\xee\xa2\xb3" // U+e8b3 -#define ICON_MD_RESTORE_FROM_TRASH "\xee\xa4\xb8" // U+e938 -#define ICON_MD_RESTORE_PAGE "\xee\xa4\xa9" // U+e929 -#define ICON_MD_REVIEWS "\xef\x81\x94" // U+f054 -#define ICON_MD_RICE_BOWL "\xef\x87\xb5" // U+f1f5 -#define ICON_MD_RING_VOLUME "\xee\x83\x91" // U+e0d1 -#define ICON_MD_ROCKET "\xee\xae\xa5" // U+eba5 -#define ICON_MD_ROCKET_LAUNCH "\xee\xae\x9b" // U+eb9b -#define ICON_MD_ROLLER_SHADES "\xee\xb0\x92" // U+ec12 -#define ICON_MD_ROLLER_SHADES_CLOSED "\xee\xb0\x91" // U+ec11 -#define ICON_MD_ROLLER_SKATING "\xee\xaf\x8d" // U+ebcd -#define ICON_MD_ROOFING "\xef\x88\x81" // U+f201 -#define ICON_MD_ROOM "\xee\xa2\xb4" // U+e8b4 -#define ICON_MD_ROOM_PREFERENCES "\xef\x86\xb8" // U+f1b8 -#define ICON_MD_ROOM_SERVICE "\xee\xad\x89" // U+eb49 -#define ICON_MD_ROTATE_90_DEGREES_CCW "\xee\x90\x98" // U+e418 -#define ICON_MD_ROTATE_90_DEGREES_CW "\xee\xaa\xab" // U+eaab -#define ICON_MD_ROTATE_LEFT "\xee\x90\x99" // U+e419 -#define ICON_MD_ROTATE_RIGHT "\xee\x90\x9a" // U+e41a -#define ICON_MD_ROUNDABOUT_LEFT "\xee\xae\x99" // U+eb99 -#define ICON_MD_ROUNDABOUT_RIGHT "\xee\xae\xa3" // U+eba3 -#define ICON_MD_ROUNDED_CORNER "\xee\xa4\xa0" // U+e920 -#define ICON_MD_ROUTE "\xee\xab\x8d" // U+eacd -#define ICON_MD_ROUTER "\xee\x8c\xa8" // U+e328 -#define ICON_MD_ROWING "\xee\xa4\xa1" // U+e921 -#define ICON_MD_RSS_FEED "\xee\x83\xa5" // U+e0e5 -#define ICON_MD_RSVP "\xef\x81\x95" // U+f055 -#define ICON_MD_RTT "\xee\xa6\xad" // U+e9ad -#define ICON_MD_RULE "\xef\x87\x82" // U+f1c2 -#define ICON_MD_RULE_FOLDER "\xef\x87\x89" // U+f1c9 -#define ICON_MD_RUN_CIRCLE "\xee\xbd\xaf" // U+ef6f -#define ICON_MD_RUNNING_WITH_ERRORS "\xee\x94\x9d" // U+e51d -#define ICON_MD_RV_HOOKUP "\xee\x99\x82" // U+e642 -#define ICON_MD_SAFETY_CHECK "\xee\xaf\xaf" // U+ebef -#define ICON_MD_SAFETY_DIVIDER "\xee\x87\x8c" // U+e1cc -#define ICON_MD_SAILING "\xee\x94\x82" // U+e502 -#define ICON_MD_SANITIZER "\xef\x88\x9d" // U+f21d -#define ICON_MD_SATELLITE "\xee\x95\xa2" // U+e562 -#define ICON_MD_SATELLITE_ALT "\xee\xac\xba" // U+eb3a -#define ICON_MD_SAVE "\xee\x85\xa1" // U+e161 -#define ICON_MD_SAVE_ALT "\xee\x85\xb1" // U+e171 -#define ICON_MD_SAVE_AS "\xee\xad\xa0" // U+eb60 -#define ICON_MD_SAVED_SEARCH "\xee\xa8\x91" // U+ea11 -#define ICON_MD_SAVINGS "\xee\x8b\xab" // U+e2eb -#define ICON_MD_SCALE "\xee\xad\x9f" // U+eb5f -#define ICON_MD_SCANNER "\xee\x8c\xa9" // U+e329 -#define ICON_MD_SCATTER_PLOT "\xee\x89\xa8" // U+e268 -#define ICON_MD_SCHEDULE "\xee\xa2\xb5" // U+e8b5 -#define ICON_MD_SCHEDULE_SEND "\xee\xa8\x8a" // U+ea0a -#define ICON_MD_SCHEMA "\xee\x93\xbd" // U+e4fd -#define ICON_MD_SCHOOL "\xee\xa0\x8c" // U+e80c -#define ICON_MD_SCIENCE "\xee\xa9\x8b" // U+ea4b -#define ICON_MD_SCORE "\xee\x89\xa9" // U+e269 -#define ICON_MD_SCOREBOARD "\xee\xaf\x90" // U+ebd0 -#define ICON_MD_SCREEN_LOCK_LANDSCAPE "\xee\x86\xbe" // U+e1be -#define ICON_MD_SCREEN_LOCK_PORTRAIT "\xee\x86\xbf" // U+e1bf -#define ICON_MD_SCREEN_LOCK_ROTATION "\xee\x87\x80" // U+e1c0 -#define ICON_MD_SCREEN_ROTATION "\xee\x87\x81" // U+e1c1 -#define ICON_MD_SCREEN_ROTATION_ALT "\xee\xaf\xae" // U+ebee -#define ICON_MD_SCREEN_SEARCH_DESKTOP "\xee\xbd\xb0" // U+ef70 -#define ICON_MD_SCREEN_SHARE "\xee\x83\xa2" // U+e0e2 -#define ICON_MD_SCREENSHOT "\xef\x81\x96" // U+f056 -#define ICON_MD_SCREENSHOT_MONITOR "\xee\xb0\x88" // U+ec08 -#define ICON_MD_SCUBA_DIVING "\xee\xaf\x8e" // U+ebce -#define ICON_MD_SD "\xee\xa7\x9d" // U+e9dd -#define ICON_MD_SD_CARD "\xee\x98\xa3" // U+e623 -#define ICON_MD_SD_CARD_ALERT "\xef\x81\x97" // U+f057 -#define ICON_MD_SD_STORAGE "\xee\x87\x82" // U+e1c2 -#define ICON_MD_SEARCH "\xee\xa2\xb6" // U+e8b6 -#define ICON_MD_SEARCH_OFF "\xee\xa9\xb6" // U+ea76 -#define ICON_MD_SECURITY "\xee\x8c\xaa" // U+e32a -#define ICON_MD_SECURITY_UPDATE "\xef\x81\x98" // U+f058 -#define ICON_MD_SECURITY_UPDATE_GOOD "\xef\x81\x99" // U+f059 -#define ICON_MD_SECURITY_UPDATE_WARNING "\xef\x81\x9a" // U+f05a -#define ICON_MD_SEGMENT "\xee\xa5\x8b" // U+e94b -#define ICON_MD_SELECT_ALL "\xee\x85\xa2" // U+e162 -#define ICON_MD_SELF_IMPROVEMENT "\xee\xa9\xb8" // U+ea78 -#define ICON_MD_SELL "\xef\x81\x9b" // U+f05b -#define ICON_MD_SEND "\xee\x85\xa3" // U+e163 -#define ICON_MD_SEND_AND_ARCHIVE "\xee\xa8\x8c" // U+ea0c -#define ICON_MD_SEND_TIME_EXTENSION "\xee\xab\x9b" // U+eadb -#define ICON_MD_SEND_TO_MOBILE "\xef\x81\x9c" // U+f05c -#define ICON_MD_SENSOR_DOOR "\xef\x86\xb5" // U+f1b5 -#define ICON_MD_SENSOR_OCCUPIED "\xee\xb0\x90" // U+ec10 -#define ICON_MD_SENSOR_WINDOW "\xef\x86\xb4" // U+f1b4 -#define ICON_MD_SENSORS "\xee\x94\x9e" // U+e51e -#define ICON_MD_SENSORS_OFF "\xee\x94\x9f" // U+e51f -#define ICON_MD_SENTIMENT_DISSATISFIED "\xee\xa0\x91" // U+e811 -#define ICON_MD_SENTIMENT_NEUTRAL "\xee\xa0\x92" // U+e812 -#define ICON_MD_SENTIMENT_SATISFIED "\xee\xa0\x93" // U+e813 -#define ICON_MD_SENTIMENT_SATISFIED_ALT "\xee\x83\xad" // U+e0ed -#define ICON_MD_SENTIMENT_VERY_DISSATISFIED "\xee\xa0\x94" // U+e814 -#define ICON_MD_SENTIMENT_VERY_SATISFIED "\xee\xa0\x95" // U+e815 -#define ICON_MD_SET_MEAL "\xef\x87\xaa" // U+f1ea -#define ICON_MD_SETTINGS "\xee\xa2\xb8" // U+e8b8 -#define ICON_MD_SETTINGS_ACCESSIBILITY "\xef\x81\x9d" // U+f05d -#define ICON_MD_SETTINGS_applicationS "\xee\xa2\xb9" // U+e8b9 -#define ICON_MD_SETTINGS_BACKUP_RESTORE "\xee\xa2\xba" // U+e8ba -#define ICON_MD_SETTINGS_BLUETOOTH "\xee\xa2\xbb" // U+e8bb -#define ICON_MD_SETTINGS_BRIGHTNESS "\xee\xa2\xbd" // U+e8bd -#define ICON_MD_SETTINGS_CELL "\xee\xa2\xbc" // U+e8bc -#define ICON_MD_SETTINGS_DISPLAY "\xee\xa2\xbd" // U+e8bd -#define ICON_MD_SETTINGS_ETHERNET "\xee\xa2\xbe" // U+e8be -#define ICON_MD_SETTINGS_INPUT_ANTENNA "\xee\xa2\xbf" // U+e8bf -#define ICON_MD_SETTINGS_INPUT_COMPONENT "\xee\xa3\x80" // U+e8c0 -#define ICON_MD_SETTINGS_INPUT_COMPOSITE "\xee\xa3\x81" // U+e8c1 -#define ICON_MD_SETTINGS_INPUT_HDMI "\xee\xa3\x82" // U+e8c2 -#define ICON_MD_SETTINGS_INPUT_SVIDEO "\xee\xa3\x83" // U+e8c3 -#define ICON_MD_SETTINGS_OVERSCAN "\xee\xa3\x84" // U+e8c4 -#define ICON_MD_SETTINGS_PHONE "\xee\xa3\x85" // U+e8c5 -#define ICON_MD_SETTINGS_POWER "\xee\xa3\x86" // U+e8c6 -#define ICON_MD_SETTINGS_REMOTE "\xee\xa3\x87" // U+e8c7 -#define ICON_MD_SETTINGS_SUGGEST "\xef\x81\x9e" // U+f05e -#define ICON_MD_SETTINGS_SYSTEM_DAYDREAM "\xee\x87\x83" // U+e1c3 -#define ICON_MD_SETTINGS_VOICE "\xee\xa3\x88" // U+e8c8 -#define ICON_MD_SEVERE_COLD "\xee\xaf\x93" // U+ebd3 -#define ICON_MD_SHARE "\xee\xa0\x8d" // U+e80d -#define ICON_MD_SHARE_ARRIVAL_TIME "\xee\x94\xa4" // U+e524 -#define ICON_MD_SHARE_LOCATION "\xef\x81\x9f" // U+f05f -#define ICON_MD_SHIELD "\xee\xa7\xa0" // U+e9e0 -#define ICON_MD_SHIELD_MOON "\xee\xaa\xa9" // U+eaa9 -#define ICON_MD_SHOP "\xee\xa3\x89" // U+e8c9 -#define ICON_MD_SHOP_2 "\xee\x86\x9e" // U+e19e -#define ICON_MD_SHOP_TWO "\xee\xa3\x8a" // U+e8ca -#define ICON_MD_SHOPIFY "\xee\xaa\x9d" // U+ea9d -#define ICON_MD_SHOPPING_BAG "\xef\x87\x8c" // U+f1cc -#define ICON_MD_SHOPPING_BASKET "\xee\xa3\x8b" // U+e8cb -#define ICON_MD_SHOPPING_CART "\xee\xa3\x8c" // U+e8cc -#define ICON_MD_SHOPPING_CART_CHECKOUT "\xee\xae\x88" // U+eb88 -#define ICON_MD_SHORT_TEXT "\xee\x89\xa1" // U+e261 -#define ICON_MD_SHORTCUT "\xef\x81\xa0" // U+f060 -#define ICON_MD_SHOW_CHART "\xee\x9b\xa1" // U+e6e1 -#define ICON_MD_SHOWER "\xef\x81\xa1" // U+f061 -#define ICON_MD_SHUFFLE "\xee\x81\x83" // U+e043 -#define ICON_MD_SHUFFLE_ON "\xee\xa7\xa1" // U+e9e1 -#define ICON_MD_SHUTTER_SPEED "\xee\x90\xbd" // U+e43d -#define ICON_MD_SICK "\xef\x88\xa0" // U+f220 -#define ICON_MD_SIGN_LANGUAGE "\xee\xaf\xa5" // U+ebe5 -#define ICON_MD_SIGNAL_CELLULAR_0_BAR "\xef\x82\xa8" // U+f0a8 -#define ICON_MD_SIGNAL_CELLULAR_4_BAR "\xee\x87\x88" // U+e1c8 -#define ICON_MD_SIGNAL_CELLULAR_ALT "\xee\x88\x82" // U+e202 -#define ICON_MD_SIGNAL_CELLULAR_ALT_1_BAR "\xee\xaf\x9f" // U+ebdf -#define ICON_MD_SIGNAL_CELLULAR_ALT_2_BAR "\xee\xaf\xa3" // U+ebe3 -#define ICON_MD_SIGNAL_CELLULAR_CONNECTED_NO_INTERNET_0_BAR "\xef\x82\xac" // U+f0ac -#define ICON_MD_SIGNAL_CELLULAR_CONNECTED_NO_INTERNET_4_BAR "\xee\x87\x8d" // U+e1cd -#define ICON_MD_SIGNAL_CELLULAR_NO_SIM "\xee\x87\x8e" // U+e1ce -#define ICON_MD_SIGNAL_CELLULAR_NODATA "\xef\x81\xa2" // U+f062 -#define ICON_MD_SIGNAL_CELLULAR_NULL "\xee\x87\x8f" // U+e1cf -#define ICON_MD_SIGNAL_CELLULAR_OFF "\xee\x87\x90" // U+e1d0 -#define ICON_MD_SIGNAL_WIFI_0_BAR "\xef\x82\xb0" // U+f0b0 -#define ICON_MD_SIGNAL_WIFI_4_BAR "\xee\x87\x98" // U+e1d8 -#define ICON_MD_SIGNAL_WIFI_4_BAR_LOCK "\xee\x87\x99" // U+e1d9 -#define ICON_MD_SIGNAL_WIFI_BAD "\xef\x81\xa3" // U+f063 -#define ICON_MD_SIGNAL_WIFI_CONNECTED_NO_INTERNET_4 "\xef\x81\xa4" // U+f064 -#define ICON_MD_SIGNAL_WIFI_OFF "\xee\x87\x9a" // U+e1da -#define ICON_MD_SIGNAL_WIFI_STATUSBAR_4_BAR "\xef\x81\xa5" // U+f065 -#define ICON_MD_SIGNAL_WIFI_STATUSBAR_CONNECTED_NO_INTERNET_4 "\xef\x81\xa6" // U+f066 -#define ICON_MD_SIGNAL_WIFI_STATUSBAR_NULL "\xef\x81\xa7" // U+f067 -#define ICON_MD_SIGNPOST "\xee\xae\x91" // U+eb91 -#define ICON_MD_SIM_CARD "\xee\x8c\xab" // U+e32b -#define ICON_MD_SIM_CARD_ALERT "\xee\x98\xa4" // U+e624 -#define ICON_MD_SIM_CARD_DOWNLOAD "\xef\x81\xa8" // U+f068 -#define ICON_MD_SINGLE_BED "\xee\xa9\x88" // U+ea48 -#define ICON_MD_SIP "\xef\x81\xa9" // U+f069 -#define ICON_MD_SKATEBOARDING "\xee\x94\x91" // U+e511 -#define ICON_MD_SKIP_NEXT "\xee\x81\x84" // U+e044 -#define ICON_MD_SKIP_PREVIOUS "\xee\x81\x85" // U+e045 -#define ICON_MD_SLEDDING "\xee\x94\x92" // U+e512 -#define ICON_MD_SLIDESHOW "\xee\x90\x9b" // U+e41b -#define ICON_MD_SLOW_MOTION_VIDEO "\xee\x81\xa8" // U+e068 -#define ICON_MD_SMART_BUTTON "\xef\x87\x81" // U+f1c1 -#define ICON_MD_SMART_DISPLAY "\xef\x81\xaa" // U+f06a -#define ICON_MD_SMART_SCREEN "\xef\x81\xab" // U+f06b -#define ICON_MD_SMART_TOY "\xef\x81\xac" // U+f06c -#define ICON_MD_SMARTPHONE "\xee\x8c\xac" // U+e32c -#define ICON_MD_SMOKE_FREE "\xee\xad\x8a" // U+eb4a -#define ICON_MD_SMOKING_ROOMS "\xee\xad\x8b" // U+eb4b -#define ICON_MD_SMS "\xee\x98\xa5" // U+e625 -#define ICON_MD_SMS_FAILED "\xee\x98\xa6" // U+e626 -#define ICON_MD_SNAPCHAT "\xee\xa9\xae" // U+ea6e -#define ICON_MD_SNIPPET_FOLDER "\xef\x87\x87" // U+f1c7 -#define ICON_MD_SNOOZE "\xee\x81\x86" // U+e046 -#define ICON_MD_SNOWBOARDING "\xee\x94\x93" // U+e513 -#define ICON_MD_SNOWING "\xee\xa0\x8f" // U+e80f -#define ICON_MD_SNOWMOBILE "\xee\x94\x83" // U+e503 -#define ICON_MD_SNOWSHOEING "\xee\x94\x94" // U+e514 -#define ICON_MD_SOAP "\xef\x86\xb2" // U+f1b2 -#define ICON_MD_SOCIAL_DISTANCE "\xee\x87\x8b" // U+e1cb -#define ICON_MD_SOLAR_POWER "\xee\xb0\x8f" // U+ec0f -#define ICON_MD_SORT "\xee\x85\xa4" // U+e164 -#define ICON_MD_SORT_BY_ALPHA "\xee\x81\x93" // U+e053 -#define ICON_MD_SOS "\xee\xaf\xb7" // U+ebf7 -#define ICON_MD_SOUP_KITCHEN "\xee\x9f\x93" // U+e7d3 -#define ICON_MD_SOURCE "\xef\x87\x84" // U+f1c4 -#define ICON_MD_SOUTH "\xef\x87\xa3" // U+f1e3 -#define ICON_MD_SOUTH_AMERICA "\xee\x9f\xa4" // U+e7e4 -#define ICON_MD_SOUTH_EAST "\xef\x87\xa4" // U+f1e4 -#define ICON_MD_SOUTH_WEST "\xef\x87\xa5" // U+f1e5 -#define ICON_MD_SPA "\xee\xad\x8c" // U+eb4c -#define ICON_MD_SPACE_BAR "\xee\x89\x96" // U+e256 -#define ICON_MD_SPACE_DASHBOARD "\xee\x99\xab" // U+e66b -#define ICON_MD_SPATIAL_AUDIO "\xee\xaf\xab" // U+ebeb -#define ICON_MD_SPATIAL_AUDIO_OFF "\xee\xaf\xa8" // U+ebe8 -#define ICON_MD_SPATIAL_TRACKING "\xee\xaf\xaa" // U+ebea -#define ICON_MD_SPEAKER "\xee\x8c\xad" // U+e32d -#define ICON_MD_SPEAKER_GROUP "\xee\x8c\xae" // U+e32e -#define ICON_MD_SPEAKER_NOTES "\xee\xa3\x8d" // U+e8cd -#define ICON_MD_SPEAKER_NOTES_OFF "\xee\xa4\xaa" // U+e92a -#define ICON_MD_SPEAKER_PHONE "\xee\x83\x92" // U+e0d2 -#define ICON_MD_SPEED "\xee\xa7\xa4" // U+e9e4 -#define ICON_MD_SPELLCHECK "\xee\xa3\x8e" // U+e8ce -#define ICON_MD_SPLITSCREEN "\xef\x81\xad" // U+f06d -#define ICON_MD_SPOKE "\xee\xa6\xa7" // U+e9a7 -#define ICON_MD_SPORTS "\xee\xa8\xb0" // U+ea30 -#define ICON_MD_SPORTS_BAR "\xef\x87\xb3" // U+f1f3 -#define ICON_MD_SPORTS_BASEBALL "\xee\xa9\x91" // U+ea51 -#define ICON_MD_SPORTS_BASKETBALL "\xee\xa8\xa6" // U+ea26 -#define ICON_MD_SPORTS_CRICKET "\xee\xa8\xa7" // U+ea27 -#define ICON_MD_SPORTS_ESPORTS "\xee\xa8\xa8" // U+ea28 -#define ICON_MD_SPORTS_FOOTBALL "\xee\xa8\xa9" // U+ea29 -#define ICON_MD_SPORTS_GOLF "\xee\xa8\xaa" // U+ea2a -#define ICON_MD_SPORTS_GYMNASTICS "\xee\xaf\x84" // U+ebc4 -#define ICON_MD_SPORTS_HANDBALL "\xee\xa8\xb3" // U+ea33 -#define ICON_MD_SPORTS_HOCKEY "\xee\xa8\xab" // U+ea2b -#define ICON_MD_SPORTS_KABADDI "\xee\xa8\xb4" // U+ea34 -#define ICON_MD_SPORTS_MARTIAL_ARTS "\xee\xab\xa9" // U+eae9 -#define ICON_MD_SPORTS_MMA "\xee\xa8\xac" // U+ea2c -#define ICON_MD_SPORTS_MOTORSPORTS "\xee\xa8\xad" // U+ea2d -#define ICON_MD_SPORTS_RUGBY "\xee\xa8\xae" // U+ea2e -#define ICON_MD_SPORTS_SCORE "\xef\x81\xae" // U+f06e -#define ICON_MD_SPORTS_SOCCER "\xee\xa8\xaf" // U+ea2f -#define ICON_MD_SPORTS_TENNIS "\xee\xa8\xb2" // U+ea32 -#define ICON_MD_SPORTS_VOLLEYBALL "\xee\xa8\xb1" // U+ea31 -#define ICON_MD_SQUARE "\xee\xac\xb6" // U+eb36 -#define ICON_MD_SQUARE_FOOT "\xee\xa9\x89" // U+ea49 -#define ICON_MD_SSID_CHART "\xee\xad\xa6" // U+eb66 -#define ICON_MD_STACKED_BAR_CHART "\xee\xa7\xa6" // U+e9e6 -#define ICON_MD_STACKED_LINE_CHART "\xef\x88\xab" // U+f22b -#define ICON_MD_STADIUM "\xee\xae\x90" // U+eb90 -#define ICON_MD_STAIRS "\xef\x86\xa9" // U+f1a9 -#define ICON_MD_STAR "\xee\xa0\xb8" // U+e838 -#define ICON_MD_STAR_BORDER "\xee\xa0\xba" // U+e83a -#define ICON_MD_STAR_BORDER_PURPLE500 "\xef\x82\x99" // U+f099 -#define ICON_MD_STAR_HALF "\xee\xa0\xb9" // U+e839 -#define ICON_MD_STAR_OUTLINE "\xef\x81\xaf" // U+f06f -#define ICON_MD_STAR_PURPLE500 "\xef\x82\x9a" // U+f09a -#define ICON_MD_STAR_RATE "\xef\x83\xac" // U+f0ec -#define ICON_MD_STARS "\xee\xa3\x90" // U+e8d0 -#define ICON_MD_START "\xee\x82\x89" // U+e089 -#define ICON_MD_STAY_CURRENT_LANDSCAPE "\xee\x83\x93" // U+e0d3 -#define ICON_MD_STAY_CURRENT_PORTRAIT "\xee\x83\x94" // U+e0d4 -#define ICON_MD_STAY_PRIMARY_LANDSCAPE "\xee\x83\x95" // U+e0d5 -#define ICON_MD_STAY_PRIMARY_PORTRAIT "\xee\x83\x96" // U+e0d6 -#define ICON_MD_STICKY_NOTE_2 "\xef\x87\xbc" // U+f1fc -#define ICON_MD_STOP "\xee\x81\x87" // U+e047 -#define ICON_MD_STOP_CIRCLE "\xee\xbd\xb1" // U+ef71 -#define ICON_MD_STOP_SCREEN_SHARE "\xee\x83\xa3" // U+e0e3 -#define ICON_MD_STORAGE "\xee\x87\x9b" // U+e1db -#define ICON_MD_STORE "\xee\xa3\x91" // U+e8d1 -#define ICON_MD_STORE_MALL_DIRECTORY "\xee\x95\xa3" // U+e563 -#define ICON_MD_STOREFRONT "\xee\xa8\x92" // U+ea12 -#define ICON_MD_STORM "\xef\x81\xb0" // U+f070 -#define ICON_MD_STRAIGHT "\xee\xae\x95" // U+eb95 -#define ICON_MD_STRAIGHTEN "\xee\x90\x9c" // U+e41c -#define ICON_MD_STREAM "\xee\xa7\xa9" // U+e9e9 -#define ICON_MD_STREETVIEW "\xee\x95\xae" // U+e56e -#define ICON_MD_STRIKETHROUGH_S "\xee\x89\x97" // U+e257 -#define ICON_MD_STROLLER "\xef\x86\xae" // U+f1ae -#define ICON_MD_STYLE "\xee\x90\x9d" // U+e41d -#define ICON_MD_SUBDIRECTORY_ARROW_LEFT "\xee\x97\x99" // U+e5d9 -#define ICON_MD_SUBDIRECTORY_ARROW_RIGHT "\xee\x97\x9a" // U+e5da -#define ICON_MD_SUBJECT "\xee\xa3\x92" // U+e8d2 -#define ICON_MD_SUBSCRIPT "\xef\x84\x91" // U+f111 -#define ICON_MD_SUBSCRIPTIONS "\xee\x81\xa4" // U+e064 -#define ICON_MD_SUBTITLES "\xee\x81\x88" // U+e048 -#define ICON_MD_SUBTITLES_OFF "\xee\xbd\xb2" // U+ef72 -#define ICON_MD_SUBWAY "\xee\x95\xaf" // U+e56f -#define ICON_MD_SUMMARIZE "\xef\x81\xb1" // U+f071 -#define ICON_MD_SUNNY "\xee\xa0\x9a" // U+e81a -#define ICON_MD_SUNNY_SNOWING "\xee\xa0\x99" // U+e819 -#define ICON_MD_SUPERSCRIPT "\xef\x84\x92" // U+f112 -#define ICON_MD_SUPERVISED_USER_CIRCLE "\xee\xa4\xb9" // U+e939 -#define ICON_MD_SUPERVISOR_ACCOUNT "\xee\xa3\x93" // U+e8d3 -#define ICON_MD_SUPPORT "\xee\xbd\xb3" // U+ef73 -#define ICON_MD_SUPPORT_AGENT "\xef\x83\xa2" // U+f0e2 -#define ICON_MD_SURFING "\xee\x94\x95" // U+e515 -#define ICON_MD_SURROUND_SOUND "\xee\x81\x89" // U+e049 -#define ICON_MD_SWAP_CALLS "\xee\x83\x97" // U+e0d7 -#define ICON_MD_SWAP_HORIZ "\xee\xa3\x94" // U+e8d4 -#define ICON_MD_SWAP_HORIZONTAL_CIRCLE "\xee\xa4\xb3" // U+e933 -#define ICON_MD_SWAP_VERT "\xee\xa3\x95" // U+e8d5 -#define ICON_MD_SWAP_VERT_CIRCLE "\xee\xa3\x96" // U+e8d6 -#define ICON_MD_SWAP_VERTICAL_CIRCLE "\xee\xa3\x96" // U+e8d6 -#define ICON_MD_SWIPE "\xee\xa7\xac" // U+e9ec -#define ICON_MD_SWIPE_DOWN "\xee\xad\x93" // U+eb53 -#define ICON_MD_SWIPE_DOWN_ALT "\xee\xac\xb0" // U+eb30 -#define ICON_MD_SWIPE_LEFT "\xee\xad\x99" // U+eb59 -#define ICON_MD_SWIPE_LEFT_ALT "\xee\xac\xb3" // U+eb33 -#define ICON_MD_SWIPE_RIGHT "\xee\xad\x92" // U+eb52 -#define ICON_MD_SWIPE_RIGHT_ALT "\xee\xad\x96" // U+eb56 -#define ICON_MD_SWIPE_UP "\xee\xac\xae" // U+eb2e -#define ICON_MD_SWIPE_UP_ALT "\xee\xac\xb5" // U+eb35 -#define ICON_MD_SWIPE_VERTICAL "\xee\xad\x91" // U+eb51 -#define ICON_MD_SWITCH_ACCESS_SHORTCUT "\xee\x9f\xa1" // U+e7e1 -#define ICON_MD_SWITCH_ACCESS_SHORTCUT_ADD "\xee\x9f\xa2" // U+e7e2 -#define ICON_MD_SWITCH_ACCOUNT "\xee\xa7\xad" // U+e9ed -#define ICON_MD_SWITCH_CAMERA "\xee\x90\x9e" // U+e41e -#define ICON_MD_SWITCH_LEFT "\xef\x87\x91" // U+f1d1 -#define ICON_MD_SWITCH_RIGHT "\xef\x87\x92" // U+f1d2 -#define ICON_MD_SWITCH_VIDEO "\xee\x90\x9f" // U+e41f -#define ICON_MD_SYNAGOGUE "\xee\xaa\xb0" // U+eab0 -#define ICON_MD_SYNC "\xee\x98\xa7" // U+e627 -#define ICON_MD_SYNC_ALT "\xee\xa8\x98" // U+ea18 -#define ICON_MD_SYNC_DISABLED "\xee\x98\xa8" // U+e628 -#define ICON_MD_SYNC_LOCK "\xee\xab\xae" // U+eaee -#define ICON_MD_SYNC_PROBLEM "\xee\x98\xa9" // U+e629 -#define ICON_MD_SYSTEM_SECURITY_UPDATE "\xef\x81\xb2" // U+f072 -#define ICON_MD_SYSTEM_SECURITY_UPDATE_GOOD "\xef\x81\xb3" // U+f073 -#define ICON_MD_SYSTEM_SECURITY_UPDATE_WARNING "\xef\x81\xb4" // U+f074 -#define ICON_MD_SYSTEM_UPDATE "\xee\x98\xaa" // U+e62a -#define ICON_MD_SYSTEM_UPDATE_ALT "\xee\xa3\x97" // U+e8d7 -#define ICON_MD_SYSTEM_UPDATE_TV "\xee\xa3\x97" // U+e8d7 -#define ICON_MD_TAB "\xee\xa3\x98" // U+e8d8 -#define ICON_MD_TAB_UNSELECTED "\xee\xa3\x99" // U+e8d9 -#define ICON_MD_TABLE_BAR "\xee\xab\x92" // U+ead2 -#define ICON_MD_TABLE_CHART "\xee\x89\xa5" // U+e265 -#define ICON_MD_TABLE_RESTAURANT "\xee\xab\x86" // U+eac6 -#define ICON_MD_TABLE_ROWS "\xef\x84\x81" // U+f101 -#define ICON_MD_TABLE_VIEW "\xef\x86\xbe" // U+f1be -#define ICON_MD_TABLET "\xee\x8c\xaf" // U+e32f -#define ICON_MD_TABLET_ANDROID "\xee\x8c\xb0" // U+e330 -#define ICON_MD_TABLET_MAC "\xee\x8c\xb1" // U+e331 -#define ICON_MD_TAG "\xee\xa7\xaf" // U+e9ef -#define ICON_MD_TAG_FACES "\xee\x90\xa0" // U+e420 -#define ICON_MD_TAKEOUT_DINING "\xee\xa9\xb4" // U+ea74 -#define ICON_MD_TAP_AND_PLAY "\xee\x98\xab" // U+e62b -#define ICON_MD_TAPAS "\xef\x87\xa9" // U+f1e9 -#define ICON_MD_TASK "\xef\x81\xb5" // U+f075 -#define ICON_MD_TASK_ALT "\xee\x8b\xa6" // U+e2e6 -#define ICON_MD_TAXI_ALERT "\xee\xbd\xb4" // U+ef74 -#define ICON_MD_TELEGRAM "\xee\xa9\xab" // U+ea6b -#define ICON_MD_TEMPLE_BUDDHIST "\xee\xaa\xb3" // U+eab3 -#define ICON_MD_TEMPLE_HINDU "\xee\xaa\xaf" // U+eaaf -#define ICON_MD_TERMINAL "\xee\xae\x8e" // U+eb8e -#define ICON_MD_TERRAIN "\xee\x95\xa4" // U+e564 -#define ICON_MD_TEXT_DECREASE "\xee\xab\x9d" // U+eadd -#define ICON_MD_TEXT_FIELDS "\xee\x89\xa2" // U+e262 -#define ICON_MD_TEXT_FORMAT "\xee\x85\xa5" // U+e165 -#define ICON_MD_TEXT_INCREASE "\xee\xab\xa2" // U+eae2 -#define ICON_MD_TEXT_ROTATE_UP "\xee\xa4\xba" // U+e93a -#define ICON_MD_TEXT_ROTATE_VERTICAL "\xee\xa4\xbb" // U+e93b -#define ICON_MD_TEXT_ROTATION_ANGLEDOWN "\xee\xa4\xbc" // U+e93c -#define ICON_MD_TEXT_ROTATION_ANGLEUP "\xee\xa4\xbd" // U+e93d -#define ICON_MD_TEXT_ROTATION_DOWN "\xee\xa4\xbe" // U+e93e -#define ICON_MD_TEXT_ROTATION_NONE "\xee\xa4\xbf" // U+e93f -#define ICON_MD_TEXT_SNIPPET "\xef\x87\x86" // U+f1c6 -#define ICON_MD_TEXTSMS "\xee\x83\x98" // U+e0d8 -#define ICON_MD_TEXTURE "\xee\x90\xa1" // U+e421 -#define ICON_MD_THEATER_COMEDY "\xee\xa9\xa6" // U+ea66 -#define ICON_MD_THEATERS "\xee\xa3\x9a" // U+e8da -#define ICON_MD_THERMOSTAT "\xef\x81\xb6" // U+f076 -#define ICON_MD_THERMOSTAT_AUTO "\xef\x81\xb7" // U+f077 -#define ICON_MD_THUMB_DOWN "\xee\xa3\x9b" // U+e8db -#define ICON_MD_THUMB_DOWN_ALT "\xee\xa0\x96" // U+e816 -#define ICON_MD_THUMB_DOWN_OFF_ALT "\xee\xa7\xb2" // U+e9f2 -#define ICON_MD_THUMB_UP "\xee\xa3\x9c" // U+e8dc -#define ICON_MD_THUMB_UP_ALT "\xee\xa0\x97" // U+e817 -#define ICON_MD_THUMB_UP_OFF_ALT "\xee\xa7\xb3" // U+e9f3 -#define ICON_MD_THUMBS_UP_DOWN "\xee\xa3\x9d" // U+e8dd -#define ICON_MD_THUNDERSTORM "\xee\xaf\x9b" // U+ebdb -#define ICON_MD_TIKTOK "\xee\xa9\xbe" // U+ea7e -#define ICON_MD_TIME_TO_LEAVE "\xee\x98\xac" // U+e62c -#define ICON_MD_TIMELAPSE "\xee\x90\xa2" // U+e422 -#define ICON_MD_TIMELINE "\xee\xa4\xa2" // U+e922 -#define ICON_MD_TIMER "\xee\x90\xa5" // U+e425 -#define ICON_MD_TIMER_10 "\xee\x90\xa3" // U+e423 -#define ICON_MD_TIMER_10_SELECT "\xef\x81\xba" // U+f07a -#define ICON_MD_TIMER_3 "\xee\x90\xa4" // U+e424 -#define ICON_MD_TIMER_3_SELECT "\xef\x81\xbb" // U+f07b -#define ICON_MD_TIMER_OFF "\xee\x90\xa6" // U+e426 -#define ICON_MD_TIPS_AND_UPDATES "\xee\x9e\x9a" // U+e79a -#define ICON_MD_TIRE_REPAIR "\xee\xaf\x88" // U+ebc8 -#define ICON_MD_TITLE "\xee\x89\xa4" // U+e264 -#define ICON_MD_TOC "\xee\xa3\x9e" // U+e8de -#define ICON_MD_TODAY "\xee\xa3\x9f" // U+e8df -#define ICON_MD_TOGGLE_OFF "\xee\xa7\xb5" // U+e9f5 -#define ICON_MD_TOGGLE_ON "\xee\xa7\xb6" // U+e9f6 -#define ICON_MD_TOKEN "\xee\xa8\xa5" // U+ea25 -#define ICON_MD_TOLL "\xee\xa3\xa0" // U+e8e0 -#define ICON_MD_TONALITY "\xee\x90\xa7" // U+e427 -#define ICON_MD_TOPIC "\xef\x87\x88" // U+f1c8 -#define ICON_MD_TORNADO "\xee\x86\x99" // U+e199 -#define ICON_MD_TOUCH_APP "\xee\xa4\x93" // U+e913 -#define ICON_MD_TOUR "\xee\xbd\xb5" // U+ef75 -#define ICON_MD_TOYS "\xee\x8c\xb2" // U+e332 -#define ICON_MD_TRACK_CHANGES "\xee\xa3\xa1" // U+e8e1 -#define ICON_MD_TRAFFIC "\xee\x95\xa5" // U+e565 -#define ICON_MD_TRAIN "\xee\x95\xb0" // U+e570 -#define ICON_MD_TRAM "\xee\x95\xb1" // U+e571 -#define ICON_MD_TRANSFER_WITHIN_A_STATION "\xee\x95\xb2" // U+e572 -#define ICON_MD_TRANSFORM "\xee\x90\xa8" // U+e428 -#define ICON_MD_TRANSGENDER "\xee\x96\x8d" // U+e58d -#define ICON_MD_TRANSIT_ENTEREXIT "\xee\x95\xb9" // U+e579 -#define ICON_MD_TRANSLATE "\xee\xa3\xa2" // U+e8e2 -#define ICON_MD_TRAVEL_EXPLORE "\xee\x8b\x9b" // U+e2db -#define ICON_MD_TRENDING_DOWN "\xee\xa3\xa3" // U+e8e3 -#define ICON_MD_TRENDING_FLAT "\xee\xa3\xa4" // U+e8e4 -#define ICON_MD_TRENDING_NEUTRAL "\xee\xa3\xa4" // U+e8e4 -#define ICON_MD_TRENDING_UP "\xee\xa3\xa5" // U+e8e5 -#define ICON_MD_TRIP_ORIGIN "\xee\x95\xbb" // U+e57b -#define ICON_MD_TROUBLESHOOT "\xee\x87\x92" // U+e1d2 -#define ICON_MD_TRY "\xef\x81\xbc" // U+f07c -#define ICON_MD_TSUNAMI "\xee\xaf\x98" // U+ebd8 -#define ICON_MD_TTY "\xef\x86\xaa" // U+f1aa -#define ICON_MD_TUNE "\xee\x90\xa9" // U+e429 -#define ICON_MD_TUNGSTEN "\xef\x81\xbd" // U+f07d -#define ICON_MD_TURN_LEFT "\xee\xae\xa6" // U+eba6 -#define ICON_MD_TURN_RIGHT "\xee\xae\xab" // U+ebab -#define ICON_MD_TURN_SHARP_LEFT "\xee\xae\xa7" // U+eba7 -#define ICON_MD_TURN_SHARP_RIGHT "\xee\xae\xaa" // U+ebaa -#define ICON_MD_TURN_SLIGHT_LEFT "\xee\xae\xa4" // U+eba4 -#define ICON_MD_TURN_SLIGHT_RIGHT "\xee\xae\x9a" // U+eb9a -#define ICON_MD_TURNED_IN "\xee\xa3\xa6" // U+e8e6 -#define ICON_MD_TURNED_IN_NOT "\xee\xa3\xa7" // U+e8e7 -#define ICON_MD_TV "\xee\x8c\xb3" // U+e333 -#define ICON_MD_TV_OFF "\xee\x99\x87" // U+e647 -#define ICON_MD_TWO_WHEELER "\xee\xa7\xb9" // U+e9f9 -#define ICON_MD_U_TURN_LEFT "\xee\xae\xa1" // U+eba1 -#define ICON_MD_U_TURN_RIGHT "\xee\xae\xa2" // U+eba2 -#define ICON_MD_UMBRELLA "\xef\x86\xad" // U+f1ad -#define ICON_MD_UNARCHIVE "\xee\x85\xa9" // U+e169 -#define ICON_MD_UNDO "\xee\x85\xa6" // U+e166 -#define ICON_MD_UNFOLD_LESS "\xee\x97\x96" // U+e5d6 -#define ICON_MD_UNFOLD_MORE "\xee\x97\x97" // U+e5d7 -#define ICON_MD_UNPUBLISHED "\xef\x88\xb6" // U+f236 -#define ICON_MD_UNSUBSCRIBE "\xee\x83\xab" // U+e0eb -#define ICON_MD_UPCOMING "\xef\x81\xbe" // U+f07e -#define ICON_MD_UPDATE "\xee\xa4\xa3" // U+e923 -#define ICON_MD_UPDATE_DISABLED "\xee\x81\xb5" // U+e075 -#define ICON_MD_UPGRADE "\xef\x83\xbb" // U+f0fb -#define ICON_MD_UPLOAD "\xef\x82\x9b" // U+f09b -#define ICON_MD_UPLOAD_FILE "\xee\xa7\xbc" // U+e9fc -#define ICON_MD_USB "\xee\x87\xa0" // U+e1e0 -#define ICON_MD_USB_OFF "\xee\x93\xba" // U+e4fa -#define ICON_MD_VACCINES "\xee\x84\xb8" // U+e138 -#define ICON_MD_VAPE_FREE "\xee\xaf\x86" // U+ebc6 -#define ICON_MD_VAPING_ROOMS "\xee\xaf\x8f" // U+ebcf -#define ICON_MD_VERIFIED "\xee\xbd\xb6" // U+ef76 -#define ICON_MD_VERIFIED_USER "\xee\xa3\xa8" // U+e8e8 -#define ICON_MD_VERTICAL_ALIGN_BOTTOM "\xee\x89\x98" // U+e258 -#define ICON_MD_VERTICAL_ALIGN_CENTER "\xee\x89\x99" // U+e259 -#define ICON_MD_VERTICAL_ALIGN_TOP "\xee\x89\x9a" // U+e25a -#define ICON_MD_VERTICAL_DISTRIBUTE "\xee\x81\xb6" // U+e076 -#define ICON_MD_VERTICAL_SHADES "\xee\xb0\x8e" // U+ec0e -#define ICON_MD_VERTICAL_SHADES_CLOSED "\xee\xb0\x8d" // U+ec0d -#define ICON_MD_VERTICAL_SPLIT "\xee\xa5\x89" // U+e949 -#define ICON_MD_VIBRATION "\xee\x98\xad" // U+e62d -#define ICON_MD_VIDEO_CALL "\xee\x81\xb0" // U+e070 -#define ICON_MD_VIDEO_CAMERA_BACK "\xef\x81\xbf" // U+f07f -#define ICON_MD_VIDEO_CAMERA_FRONT "\xef\x82\x80" // U+f080 -#define ICON_MD_VIDEO_COLLECTION "\xee\x81\x8a" // U+e04a -#define ICON_MD_VIDEO_FILE "\xee\xae\x87" // U+eb87 -#define ICON_MD_VIDEO_LABEL "\xee\x81\xb1" // U+e071 -#define ICON_MD_VIDEO_LIBRARY "\xee\x81\x8a" // U+e04a -#define ICON_MD_VIDEO_SETTINGS "\xee\xa9\xb5" // U+ea75 -#define ICON_MD_VIDEO_STABLE "\xef\x82\x81" // U+f081 -#define ICON_MD_VIDEOCAM "\xee\x81\x8b" // U+e04b -#define ICON_MD_VIDEOCAM_OFF "\xee\x81\x8c" // U+e04c -#define ICON_MD_VIDEOGAME_ASSET "\xee\x8c\xb8" // U+e338 -#define ICON_MD_VIDEOGAME_ASSET_OFF "\xee\x94\x80" // U+e500 -#define ICON_MD_VIEW_AGENDA "\xee\xa3\xa9" // U+e8e9 -#define ICON_MD_VIEW_ARRAY "\xee\xa3\xaa" // U+e8ea -#define ICON_MD_VIEW_CAROUSEL "\xee\xa3\xab" // U+e8eb -#define ICON_MD_VIEW_COLUMN "\xee\xa3\xac" // U+e8ec -#define ICON_MD_VIEW_COMFORTABLE "\xee\x90\xaa" // U+e42a -#define ICON_MD_VIEW_COMFY "\xee\x90\xaa" // U+e42a -#define ICON_MD_VIEW_COMFY_ALT "\xee\xad\xb3" // U+eb73 -#define ICON_MD_VIEW_COMPACT "\xee\x90\xab" // U+e42b -#define ICON_MD_VIEW_COMPACT_ALT "\xee\xad\xb4" // U+eb74 -#define ICON_MD_VIEW_COZY "\xee\xad\xb5" // U+eb75 -#define ICON_MD_VIEW_DAY "\xee\xa3\xad" // U+e8ed -#define ICON_MD_VIEW_HEADLINE "\xee\xa3\xae" // U+e8ee -#define ICON_MD_VIEW_IN_AR "\xee\xa7\xbe" // U+e9fe -#define ICON_MD_VIEW_KANBAN "\xee\xad\xbf" // U+eb7f -#define ICON_MD_VIEW_LIST "\xee\xa3\xaf" // U+e8ef -#define ICON_MD_VIEW_MODULE "\xee\xa3\xb0" // U+e8f0 -#define ICON_MD_VIEW_QUILT "\xee\xa3\xb1" // U+e8f1 -#define ICON_MD_VIEW_SIDEBAR "\xef\x84\x94" // U+f114 -#define ICON_MD_VIEW_STREAM "\xee\xa3\xb2" // U+e8f2 -#define ICON_MD_VIEW_TIMELINE "\xee\xae\x85" // U+eb85 -#define ICON_MD_VIEW_WEEK "\xee\xa3\xb3" // U+e8f3 -#define ICON_MD_VIGNETTE "\xee\x90\xb5" // U+e435 -#define ICON_MD_VILLA "\xee\x96\x86" // U+e586 -#define ICON_MD_VISIBILITY "\xee\xa3\xb4" // U+e8f4 -#define ICON_MD_VISIBILITY_OFF "\xee\xa3\xb5" // U+e8f5 -#define ICON_MD_VOICE_CHAT "\xee\x98\xae" // U+e62e -#define ICON_MD_VOICE_OVER_OFF "\xee\xa5\x8a" // U+e94a -#define ICON_MD_VOICEMAIL "\xee\x83\x99" // U+e0d9 -#define ICON_MD_VOLCANO "\xee\xaf\x9a" // U+ebda -#define ICON_MD_VOLUME_DOWN "\xee\x81\x8d" // U+e04d -#define ICON_MD_VOLUME_DOWN_ALT "\xee\x9e\x9c" // U+e79c -#define ICON_MD_VOLUME_MUTE "\xee\x81\x8e" // U+e04e -#define ICON_MD_VOLUME_OFF "\xee\x81\x8f" // U+e04f -#define ICON_MD_VOLUME_UP "\xee\x81\x90" // U+e050 -#define ICON_MD_VOLUNTEER_ACTIVISM "\xee\xa9\xb0" // U+ea70 -#define ICON_MD_VPN_KEY "\xee\x83\x9a" // U+e0da -#define ICON_MD_VPN_KEY_OFF "\xee\xad\xba" // U+eb7a -#define ICON_MD_VPN_LOCK "\xee\x98\xaf" // U+e62f -#define ICON_MD_VRPANO "\xef\x82\x82" // U+f082 -#define ICON_MD_WALLET "\xef\xa3\xbf" // U+f8ff -#define ICON_MD_WALLET_GIFTCARD "\xee\xa3\xb6" // U+e8f6 -#define ICON_MD_WALLET_MEMBERSHIP "\xee\xa3\xb7" // U+e8f7 -#define ICON_MD_WALLET_TRAVEL "\xee\xa3\xb8" // U+e8f8 -#define ICON_MD_WALLPAPER "\xee\x86\xbc" // U+e1bc -#define ICON_MD_WAREHOUSE "\xee\xae\xb8" // U+ebb8 -#define ICON_MD_WARNING "\xee\x80\x82" // U+e002 -#define ICON_MD_WARNING_AMBER "\xef\x82\x83" // U+f083 -#define ICON_MD_WASH "\xef\x86\xb1" // U+f1b1 -#define ICON_MD_WATCH "\xee\x8c\xb4" // U+e334 -#define ICON_MD_WATCH_LATER "\xee\xa4\xa4" // U+e924 -#define ICON_MD_WATCH_OFF "\xee\xab\xa3" // U+eae3 -#define ICON_MD_WATER "\xef\x82\x84" // U+f084 -#define ICON_MD_WATER_DAMAGE "\xef\x88\x83" // U+f203 -#define ICON_MD_WATER_DROP "\xee\x9e\x98" // U+e798 -#define ICON_MD_WATERFALL_CHART "\xee\xa8\x80" // U+ea00 -#define ICON_MD_WAVES "\xee\x85\xb6" // U+e176 -#define ICON_MD_WAVING_HAND "\xee\x9d\xa6" // U+e766 -#define ICON_MD_WB_AUTO "\xee\x90\xac" // U+e42c -#define ICON_MD_WB_CLOUDY "\xee\x90\xad" // U+e42d -#define ICON_MD_WB_INCANDESCENT "\xee\x90\xae" // U+e42e -#define ICON_MD_WB_IRIDESCENT "\xee\x90\xb6" // U+e436 -#define ICON_MD_WB_SHADE "\xee\xa8\x81" // U+ea01 -#define ICON_MD_WB_SUNNY "\xee\x90\xb0" // U+e430 -#define ICON_MD_WB_TWIGHLIGHT "\xee\xa8\x82" // U+ea02 -#define ICON_MD_WB_TWILIGHT "\xee\x87\x86" // U+e1c6 -#define ICON_MD_WC "\xee\x98\xbd" // U+e63d -#define ICON_MD_WEB "\xee\x81\x91" // U+e051 -#define ICON_MD_WEB_ASSET "\xee\x81\xa9" // U+e069 -#define ICON_MD_WEB_ASSET_OFF "\xee\x93\xb7" // U+e4f7 -#define ICON_MD_WEB_STORIES "\xee\x96\x95" // U+e595 -#define ICON_MD_WEBHOOK "\xee\xae\x92" // U+eb92 -#define ICON_MD_WECHAT "\xee\xaa\x81" // U+ea81 -#define ICON_MD_WEEKEND "\xee\x85\xab" // U+e16b -#define ICON_MD_WEST "\xef\x87\xa6" // U+f1e6 -#define ICON_MD_WHATSAPP "\xee\xaa\x9c" // U+ea9c -#define ICON_MD_WHATSHOT "\xee\xa0\x8e" // U+e80e -#define ICON_MD_WHEELCHAIR_PICKUP "\xef\x86\xab" // U+f1ab -#define ICON_MD_WHERE_TO_VOTE "\xee\x85\xb7" // U+e177 -#define ICON_MD_WIDGETS "\xee\x86\xbd" // U+e1bd -#define ICON_MD_WIDTH_FULL "\xef\xa3\xb5" // U+f8f5 -#define ICON_MD_WIDTH_NORMAL "\xef\xa3\xb6" // U+f8f6 -#define ICON_MD_WIDTH_WIDE "\xef\xa3\xb7" // U+f8f7 -#define ICON_MD_WIFI "\xee\x98\xbe" // U+e63e -#define ICON_MD_WIFI_1_BAR "\xee\x93\x8a" // U+e4ca -#define ICON_MD_WIFI_2_BAR "\xee\x93\x99" // U+e4d9 -#define ICON_MD_WIFI_CALLING "\xee\xbd\xb7" // U+ef77 -#define ICON_MD_WIFI_CALLING_3 "\xef\x82\x85" // U+f085 -#define ICON_MD_WIFI_CHANNEL "\xee\xad\xaa" // U+eb6a -#define ICON_MD_WIFI_FIND "\xee\xac\xb1" // U+eb31 -#define ICON_MD_WIFI_LOCK "\xee\x87\xa1" // U+e1e1 -#define ICON_MD_WIFI_OFF "\xee\x99\x88" // U+e648 -#define ICON_MD_WIFI_PASSWORD "\xee\xad\xab" // U+eb6b -#define ICON_MD_WIFI_PROTECTED_SETUP "\xef\x83\xbc" // U+f0fc -#define ICON_MD_WIFI_TETHERING "\xee\x87\xa2" // U+e1e2 -#define ICON_MD_WIFI_TETHERING_ERROR "\xee\xab\x99" // U+ead9 -#define ICON_MD_WIFI_TETHERING_ERROR_ROUNDED "\xef\x82\x86" // U+f086 -#define ICON_MD_WIFI_TETHERING_OFF "\xef\x82\x87" // U+f087 -#define ICON_MD_WIND_POWER "\xee\xb0\x8c" // U+ec0c -#define ICON_MD_WINDOW "\xef\x82\x88" // U+f088 -#define ICON_MD_WINE_BAR "\xef\x87\xa8" // U+f1e8 -#define ICON_MD_WOMAN "\xee\x84\xbe" // U+e13e -#define ICON_MD_WOO_COMMERCE "\xee\xa9\xad" // U+ea6d -#define ICON_MD_WORDPRESS "\xee\xaa\x9f" // U+ea9f -#define ICON_MD_WORK "\xee\xa3\xb9" // U+e8f9 -#define ICON_MD_WORK_HISTORY "\xee\xb0\x89" // U+ec09 -#define ICON_MD_WORK_OFF "\xee\xa5\x82" // U+e942 -#define ICON_MD_WORK_OUTLINE "\xee\xa5\x83" // U+e943 -#define ICON_MD_WORKSPACE_PREMIUM "\xee\x9e\xaf" // U+e7af -#define ICON_MD_WORKSPACES "\xee\x86\xa0" // U+e1a0 -#define ICON_MD_WORKSPACES_FILLED "\xee\xa8\x8d" // U+ea0d -#define ICON_MD_WORKSPACES_OUTLINE "\xee\xa8\x8f" // U+ea0f -#define ICON_MD_WRAP_TEXT "\xee\x89\x9b" // U+e25b -#define ICON_MD_WRONG_LOCATION "\xee\xbd\xb8" // U+ef78 -#define ICON_MD_WYSIWYG "\xef\x87\x83" // U+f1c3 -#define ICON_MD_YARD "\xef\x82\x89" // U+f089 -#define ICON_MD_YOUTUBE_SEARCHED_FOR "\xee\xa3\xba" // U+e8fa -#define ICON_MD_ZOOM_IN "\xee\xa3\xbf" // U+e8ff -#define ICON_MD_ZOOM_IN_MAP "\xee\xac\xad" // U+eb2d -#define ICON_MD_ZOOM_OUT "\xee\xa4\x80" // U+e900 -#define ICON_MD_ZOOM_OUT_MAP "\xee\x95\xab" // U+e56b diff --git a/src/Application/Graphics/palette.cc b/src/Application/Graphics/palette.cc deleted file mode 100644 index 299f78ef..00000000 --- a/src/Application/Graphics/palette.cc +++ /dev/null @@ -1,113 +0,0 @@ -#include "palette.h" - -#include -#include - -namespace yaze { -namespace application { -namespace Graphics { - -SNESColor::SNESColor() : rgb(ImVec4(0.f, 0.f, 0.f, 0.f)) {} - -SNESColor::SNESColor(ImVec4 val) : rgb(val) { - m_color col; - col.red = (uchar)val.x; - col.blue = (uchar)val.y; - col.green = (uchar)val.z; - snes = convertcolor_rgb_to_snes(col); -} - -void SNESColor::setRgb(ImVec4 val) { - rgb = val; - m_color col; - col.red = val.x; - col.blue = val.y; - col.green = val.z; - snes = convertcolor_rgb_to_snes(col); -} - -void SNESColor::setSNES(uint16_t val) { - snes = val; - m_color col = convertcolor_snes_to_rgb(val); - rgb = ImVec4(col.red, col.green, col.blue, 1.f); -} - -SNESPalette::SNESPalette(uint8_t mSize) : size_(mSize) { - for (unsigned int i = 0; i < mSize; i++) { - SNESColor col; - colors.push_back(col); - } -} - -SNESPalette::SNESPalette(char* data) { - assert((sizeof(data) % 4 == 0) && (sizeof(data) <= 32)); - size_ = sizeof(data) / 2; - for (unsigned i = 0; i < sizeof(data); i += 2) { - SNESColor col; - col.snes = static_cast(data[i + 1]) << 8; - col.snes = col.snes | static_cast(data[i]); - m_color mColor = convertcolor_snes_to_rgb(col.snes); - col.rgb = ImVec4(mColor.red, mColor.green, mColor.blue, 1.f); - colors.push_back(col); - } -} - -SNESPalette::SNESPalette(const unsigned char* snes_pal) { - assert((sizeof(snes_pal) % 4 == 0) && (sizeof(snes_pal) <= 32)); - size_ = sizeof(snes_pal) / 2; - for (unsigned i = 0; i < sizeof(snes_pal); i += 2) { - SNESColor col; - col.snes = snes_pal[i + 1] << (uint16_t) 8; - col.snes = col.snes | snes_pal[i]; - m_color mColor = convertcolor_snes_to_rgb(col.snes); - col.rgb = ImVec4(mColor.red, mColor.green, mColor.blue, 1.f); - colors.push_back(col); - } -} - -SNESPalette::SNESPalette(std::vector cols) { - for (const auto& each : cols) { - SNESColor scol; - scol.setRgb(each); - colors.push_back(scol); - } - size_ = cols.size(); -} - -char* SNESPalette::encode() { - // char* data(size * 2, 0); - char* data = new char[size_ * 2]; - for (unsigned int i = 0; i < size_; i++) { - // std::cout << QString::number(colors[i].snes, 16); - data[i * 2] = (char)(colors[i].snes & 0xFF); - data[i * 2 + 1] = (char)(colors[i].snes >> 8); - } - return data; -} - -SDL_Palette* SNESPalette::GetSDL_Palette() { - std::cout << "Converting SNESPalette to SDL_Palette" << std::endl; - auto sdl_palette = std::make_shared(); - sdl_palette->ncolors = size_; - - auto* sdl_colors = new SDL_Color[size_]; - for (int i = 0; i < size_; i++) { - sdl_colors[i].r = (uint8_t)colors[i].rgb.x * 100; - sdl_colors[i].g = (uint8_t)colors[i].rgb.y * 100; - sdl_colors[i].b = (uint8_t)colors[i].rgb.z * 100; - std::cout << "Color " << i << " added (R:" << sdl_colors[i].r - << " G:" << sdl_colors[i].g << " B:" << sdl_colors[i].b << ")" - << std::endl; - } - sdl_palette->colors = sdl_colors; - - // store the pointers to free them later - sdl_palettes_.push_back(sdl_palette); - colors_arrays_.push_back(sdl_colors); - - return sdl_palette.get(); -} - -} // namespace Graphics -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Graphics/palette.h b/src/Application/Graphics/palette.h deleted file mode 100644 index 789a34cb..00000000 --- a/src/Application/Graphics/palette.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef YAZE_APPLICATION_GRAPHICS_PALETTE_H -#define YAZE_APPLICATION_GRAPHICS_PALETTE_H - -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace yaze { -namespace application { -namespace Graphics { - -struct SNESColor { - SNESColor(); - explicit SNESColor(ImVec4); - uint16_t snes = 0; - ImVec4 rgb; - void setRgb(ImVec4); - void setSNES(uint16_t); - uint8_t approxSNES(); - ImVec4 approxRGB(); -}; - -class SNESPalette { - public: - SNESPalette() = default; - explicit SNESPalette(uint8_t mSize); - explicit SNESPalette(char* snesPal); - explicit SNESPalette(const unsigned char* snes_pal); - explicit SNESPalette(std::vector); - - char* encode(); - SDL_Palette* GetSDL_Palette(); - - int size_ = 0; - std::vector colors; - std::vector> sdl_palettes_; - std::vector colors_arrays_; -}; - -} // namespace Graphics -} // namespace application -} // namespace yaze - -#endif // YAZE_APPLICATION_GRAPHICS_PALETTE_H \ No newline at end of file diff --git a/src/Application/Graphics/scene.cc b/src/Application/Graphics/scene.cc deleted file mode 100644 index 68d21710..00000000 --- a/src/Application/Graphics/scene.cc +++ /dev/null @@ -1,78 +0,0 @@ -#include "scene.h" - -#include -#include - -#include -#include - -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Graphics { - -void Scene::buildSurface(const std::vector& tiles, SNESPalette& mPalette, - const TilesPattern& tp) { - arrangedTiles = TilesPattern::transform(tp, tiles); - tilesPattern = tp; - allTiles = tiles; - - for (unsigned int j = 0; j < arrangedTiles.size(); j++) { - for (unsigned int i = 0; i < arrangedTiles[0].size(); i++) { - tile8 tile = arrangedTiles[j][i]; - // SDL_PIXELFORMAT_RGB888 ? - SDL_Surface* surface = SDL_CreateRGBSurfaceWithFormat( - 0, 8, 8, SDL_BITSPERPIXEL(3), SDL_PIXELFORMAT_RGB444); - if (surface == nullptr) { - SDL_Log("SDL_CreateRGBSurfaceWithFormat() failed: %s", SDL_GetError()); - exit(1); - } - SDL_PixelFormat* format = surface->format; - format->palette = mPalette.GetSDL_Palette(); - char* ptr = (char*)surface->pixels; - - for (int k = 0; k < 8; k++) { - for (int l = 0; l < 8; l++) { - ptr[k * 8 + l] = tile.data[k * 8 + l]; - } - } - - // SDL_Texture* texture = - // SDL_CreateTextureFromSurface(Core::renderer, surface); - // if (texture == nullptr) { - // std::cout << "Error: " << SDL_GetError() << std::endl; - // } - // imagesCache[tile.id] = texture; - } - } -} - -void Scene::updateScene() { - std::cout << "Update scene"; - unsigned int itemCpt = 0; - for (unsigned int j = 0; j < arrangedTiles.size(); j++) { - for (unsigned int i = 0; i < arrangedTiles[0].size(); i++) { - tile8 tile = arrangedTiles[j][i]; - // QPixmap m = imagesCache[tile.id]; - // GraphicsTileItem *tileItem = (GraphicsTileItem *)items()[itemCpt]; - // tileItem->image = m; - // tileItem->rawTile = tile; - // tileItem->setTileZoom(tilesZoom); - // tileItem->setPos(i * tileItem->boundingRect().width() + i, - // j * tileItem->boundingRect().width() + j); - itemCpt++; - } - } -} - -void Scene::setTilesZoom(unsigned int tileZoom) { - tilesZoom = tileZoom; - // if (!items().isEmpty()) updateScene(); -} - -void Scene::setTilesPattern(TilesPattern tp) { tilesPattern = tp; } - -} // namespace Graphics -} // namespace application -} // namespace yaze diff --git a/src/Application/Graphics/scene.h b/src/Application/Graphics/scene.h deleted file mode 100644 index 759303ab..00000000 --- a/src/Application/Graphics/scene.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef YAZE_APPLICATION_GRAPHICS_SCENE_H -#define YAZE_APPLICATION_GRAPHICS_SCENE_H - -#include -#include - -#include -#include - -#include "Graphics/tile.h" - -namespace yaze { -namespace application { -namespace Graphics { - -class Scene { - public: - Scene() = default; - void buildSurface(const std::vector& tiles, SNESPalette& mPalette, - const TilesPattern& tp); - - void updateScene(); - void setTilesZoom(unsigned int tileZoom); - void setTilesPattern(TilesPattern tp); - - std::unordered_map imagesCache; - - private: - unsigned int tilesZoom; - TilesPattern tilesPattern; - std::vector allTiles; - std::vector> arrangedTiles; -}; - -} // namespace Graphics -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Graphics/style.cc b/src/Application/Graphics/style.cc deleted file mode 100644 index 0ac2b50a..00000000 --- a/src/Application/Graphics/style.cc +++ /dev/null @@ -1,113 +0,0 @@ -#include "style.h" - -#include "imgui/imgui.h" -#include "imgui/imgui_internal.h" - -namespace yaze { -namespace application { -namespace Core { -namespace Style { - -void ColorsYaze() { - ImGuiStyle *style = &ImGui::GetStyle(); - ImVec4 *colors = style->Colors; - - style->WindowPadding = ImVec2(10.f, 10.f); - style->FramePadding = ImVec2(10.f, 3.f); - style->CellPadding = ImVec2(4.f, 5.f); - style->ItemSpacing = ImVec2(10.f, 5.f); - style->ItemInnerSpacing = ImVec2(5.f, 5.f); - style->TouchExtraPadding = ImVec2(0.f, 0.f); - style->IndentSpacing = 20.f; - style->ScrollbarSize = 14.f; - style->GrabMinSize = 15.f; - - style->WindowBorderSize = 0.f; - style->ChildBorderSize = 1.f; - style->PopupBorderSize = 1.f; - style->FrameBorderSize = 0.f; - style->TabBorderSize = 0.f; - - style->WindowRounding = 0.f; - style->ChildRounding = 0.f; - style->FrameRounding = 5.f; - style->PopupRounding = 0.f; - style->ScrollbarRounding = 5.f; - - auto alttpDarkGreen = ImVec4(0.18f, 0.26f, 0.18f, 1.0f); - auto alttpMidGreen = ImVec4(0.28f, 0.36f, 0.28f, 1.0f); - auto allttpLightGreen = ImVec4(0.36f, 0.45f, 0.36f, 1.0f); - auto allttpLightestGreen = ImVec4(0.49f, 0.57f, 0.49f, 1.0f); - - colors[ImGuiCol_MenuBarBg] = alttpDarkGreen; - colors[ImGuiCol_TitleBg] = alttpMidGreen; - - colors[ImGuiCol_Header] = alttpDarkGreen; - colors[ImGuiCol_HeaderHovered] = allttpLightGreen; - colors[ImGuiCol_HeaderActive] = alttpMidGreen; - - colors[ImGuiCol_TitleBgActive] = alttpDarkGreen; - colors[ImGuiCol_TitleBgCollapsed] = alttpMidGreen; - - colors[ImGuiCol_Tab] = alttpDarkGreen; - colors[ImGuiCol_TabHovered] = alttpMidGreen; - colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], - colors[ImGuiCol_TitleBgActive], 0.60f); - - colors[ImGuiCol_Button] = alttpMidGreen; - colors[ImGuiCol_ButtonHovered] = allttpLightestGreen; - colors[ImGuiCol_ButtonActive] = allttpLightGreen; - - colors[ImGuiCol_ScrollbarBg] = ImVec4(0.36f, 0.45f, 0.36f, 0.60f); - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.36f, 0.45f, 0.36f, 0.30f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.36f, 0.45f, 0.36f, 0.40f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.36f, 0.45f, 0.36f, 0.60f); - - colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.85f); - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_PopupBg] = ImVec4(0.11f, 0.11f, 0.14f, 0.92f); - colors[ImGuiCol_Border] = allttpLightGreen; - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - - colors[ImGuiCol_FrameBg] = ImVec4(0.43f, 0.43f, 0.43f, 0.39f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.28f, 0.36f, 0.28f, 0.40f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.28f, 0.36f, 0.28f, 0.69f); - - colors[ImGuiCol_CheckMark] = ImVec4(0.90f, 0.90f, 0.90f, 0.50f); - colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.36f, 0.45f, 0.36f, 0.60f); - - colors[ImGuiCol_Separator] = ImVec4(0.50f, 0.50f, 0.50f, 0.60f); - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.60f, 0.60f, 0.70f, 1.00f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.70f, 0.70f, 0.90f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.10f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.78f, 0.82f, 1.00f, 0.60f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.82f, 1.00f, 0.90f); - - colors[ImGuiCol_TabUnfocused] = - ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f); - colors[ImGuiCol_TabUnfocusedActive] = - ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f); - colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); - colors[ImGuiCol_TableHeaderBg] = alttpDarkGreen; - colors[ImGuiCol_TableBorderStrong] = alttpMidGreen; - colors[ImGuiCol_TableBorderLight] = - ImVec4(0.26f, 0.26f, 0.28f, 1.00f); // Prefer using Alpha=1.0 here - colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.07f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f); - colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); - colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered]; - colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f); -} -} // namespace Style -} // namespace Core -} // namespace application -} // namespace yaze \ No newline at end of file diff --git a/src/Application/Graphics/style.h b/src/Application/Graphics/style.h deleted file mode 100644 index 6a3fca1f..00000000 --- a/src/Application/Graphics/style.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef YAZE_APPLICATION_CORE_STYLE_H -#define YAZE_APPLICATION_CORE_STYLE_H - -#include -#include - -namespace yaze { -namespace application { -namespace Core { -namespace Style { - -void ColorsYaze(); - -} // namespace Style -} // namespace Core -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file diff --git a/src/Application/Graphics/tile.cc b/src/Application/Graphics/tile.cc deleted file mode 100644 index d8a640e9..00000000 --- a/src/Application/Graphics/tile.cc +++ /dev/null @@ -1,152 +0,0 @@ -#include "tile.h" - -#include -#include -#include -#include -#include -#include -#include - -namespace yaze { -namespace application { -namespace Graphics { - -TilesPattern::TilesPattern() { - tiles_per_row_ = 16; - number_of_tiles_ = 16; - // std::vector{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 9, 11, 12, 13, 14, 15, - // 16}); - - transform_vector_.push_back(std::vector{0, 1, 2, 3}); - transform_vector_.push_back(std::vector{4, 5, 6, 7}); - transform_vector_.push_back(std::vector{8, 9, 11, 12}); - transform_vector_.push_back(std::vector{13, 14, 15, 16}); - - // "[0, 1, 4, 5], [2, 3, 6, 7], [8, 9, C, D], [A, B, E, F]" -} - -// [pattern] -// name = "32x32 B (4x4)" -// number_of_tile = 16 -// pattern = -void TilesPattern::default_settings() { - number_of_tiles_ = 16; - std::string patternString = - "[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, A, B], [C, D, E, F]"; - - transform_vector_.clear(); - - std::smatch cm; - std::regex arrayRegExp("(\\[[\\s|0-F|a-f|,]+\\])"); - - int pos = 0; - while (std::regex_search(patternString, cm, arrayRegExp)) { - std::string arrayString = cm[1]; - std::vector tmpVect; - uint stringPos = 1; - - while (arrayString[stringPos] != ']') { - while (arrayString[stringPos] == ' ') stringPos++; - std::smatch cm_; - std::regex hex("([0-F|a-f]+)"); - bool ok; - - std::regex_search(arrayString, cm, hex); - if (cm[1] == stringPos) { - std::cout << "here" << std::endl; - // tmpVect.push_back(stoi(cm[1])); - } - while (arrayString[stringPos] == ' ') stringPos++; - stringPos++; // should be the comma - } - - pos += cm.size(); - transform_vector_.push_back(tmpVect); - } - std::cout << transform_vector_.size() << std::endl; -} - -std::vector > TilesPattern::transform( - const std::vector &tiles) const { - uint repeatOffsetY = 0; - uint repeatOffsetX = 0; - uint tVectHeight = transform_vector_.size(); - uint tVectWidth = transform_vector_[0].size(); - uint repeat = 0; - std::vector > toret; - uint transPerRow = tiles_per_row_ / tVectWidth; - uint nbTransform = tiles.size() / number_of_tiles_; - printf("Tiles size : %d\nnbtransform : %d\npattern number of tiles : %d\n", - tiles.size(), nbTransform, number_of_tiles_); - - if (transPerRow > nbTransform) - toret.resize(tVectHeight); - else - toret.resize(((uint)(((double)nbTransform / (double)transPerRow) + 0.5)) * - tVectHeight); - - for (auto &each : toret) { - each.resize(tiles_per_row_); - } - - std::cout << toret[0].size() << " x " << toret.size(); - while (repeat != nbTransform) { - std::cout << "repeat" << repeat; - for (uint j = 0; j < tVectHeight; j++) { - for (uint i = 0; i < tVectWidth; i++) { - uint posTile = transform_vector_[j][i] + number_of_tiles_ * repeat; - uint posX = i + repeatOffsetX; - uint posY = j + repeatOffsetY; - printf("X: %d - Y: %d - posTile : %d \n", posX, posY, posTile); - toret.at(posY).at(posX) = tiles[posTile]; - } - } - if (repeatOffsetX + tVectWidth == tiles_per_row_) { - repeatOffsetX = 0; - repeatOffsetY += tVectHeight; - } else - repeatOffsetX += tVectWidth; - repeat++; - } - std::cout << "End of transform" << std::endl; - return toret; -} - -std::vector TilesPattern::reverse( - const std::vector &tiles) const { - uint repeatOffsetY = 0; - uint repeatOffsetX = 0; - uint tVectHeight = transform_vector_.size(); - uint tVectWidth = transform_vector_[0].size(); - uint repeat = 0; - uint nbTransPerRow = tiles_per_row_ / tVectWidth; - uint nbTiles = tiles.size(); - std::vector toretVec(tiles.size()); - - for (uint i = 0; i < nbTiles; i++) { - uint lineNb = i / tiles_per_row_; - uint lineInTab = lineNb % tVectHeight; - uint colInTab = i % tVectWidth; - uint tileNb = transform_vector_[lineInTab][colInTab]; - - uint lineBlock = i / (nbTransPerRow * number_of_tiles_); - uint blockNB = - (i % (nbTransPerRow * number_of_tiles_) % tiles_per_row_) / tVectWidth; - - std::cout << colInTab << lineInTab << " = " << tileNb; - uint pos = tileNb + (lineBlock + blockNB) * number_of_tiles_; - std::cout << i << "Goes to : " << pos; - toretVec[pos] = tiles[i]; - } - return toretVec; -} - -std::vector > TilesPattern::transform( - const TilesPattern &pattern, const std::vector &tiles) { - return pattern.transform(tiles); -} - -} // namespace Graphics -} // namespace application -} // namespace yaze diff --git a/src/Application/Graphics/tile.h b/src/Application/Graphics/tile.h deleted file mode 100644 index 56d0122e..00000000 --- a/src/Application/Graphics/tile.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef YAZE_APPLICATION_DATA_TILE_H -#define YAZE_APPLICATION_DATA_TILE_H - -#include - -#include -#include -#include -#include - -#include "Core/constants.h" -#include "Graphics/palette.h" - -namespace yaze { -namespace application { -namespace Graphics { - -// vhopppcc cccccccc -// [0, 1] -// [2, 3] -class TileInfo { - public: - ushort id_; - ushort over_; - ushort vertical_mirror_; - ushort horizontal_mirror_; - uchar palette_; - TileInfo() = default; - TileInfo(ushort id, uchar palette, ushort v, ushort h, ushort o) - : id_(id), - over_(o), - vertical_mirror_(v), - horizontal_mirror_(h), - palette_(palette) {} -}; - -class Tile32 { - public: - ushort tile0_; - ushort tile1_; - ushort tile2_; - ushort tile3_; - - Tile32(ushort t0, ushort t1, ushort t2, ushort t3) - : tile0_(t0), tile1_(t1), tile2_(t2), tile3_(t3) {} -}; - -class Tile16 { - public: - TileInfo tile0_; - TileInfo tile1_; - TileInfo tile2_; - TileInfo tile3_; - std::vector tiles_info; - - Tile16(TileInfo t0, TileInfo t1, TileInfo t2, TileInfo t3) - : tile0_(t0), tile1_(t1), tile2_(t2), tile3_(t3) { - tiles_info.push_back(tile0_); - tiles_info.push_back(tile1_); - tiles_info.push_back(tile2_); - tiles_info.push_back(tile3_); - } -}; - -class TilesPattern { - public: - TilesPattern(); - std::string name; - std::string description; - bool custom; - unsigned int tiles_per_row_; - unsigned int number_of_tiles_; - - void default_settings(); - - static TilesPattern pattern(std::string name); - static std::vector> transform( - const TilesPattern& pattern, const std::vector& tiles); - - protected: - std::vector> transform( - const std::vector& tiles) const; - std::vector reverse(const std::vector& tiles) const; - - private: - std::vector> transform_vector_; -}; - -class TilePreset { - public: - TilePreset() = default; - TilesPattern tilesPattern; - bool no_zero_color_ = false; - int pc_tiles_location_ = 0; - int pc_palette_location_ = 0; - int bits_per_pixel_ = 0; - int length_ = 0; - int SNESTilesLocation = 0; - int SNESPaletteLocation = 0; -}; - -} // namespace Graphics -} // namespace application -} // namespace yaze - -#endif \ No newline at end of file