2092 static const std::vector<ObjectCategory> categories = [] {
2093 std::vector<ObjectCategory> result = {
2095 {0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009,
2096 0x00A, 0x00B, 0x00C, 0x00D, 0x00E, 0x00F, 0x010, 0x011, 0x012, 0x013,
2097 0x014, 0x015, 0x016, 0x017, 0x018, 0x019, 0x01A, 0x01B, 0x01C, 0x01D,
2098 0x01E, 0x01F, 0x020, 0x02F, 0x030, 0x060, 0x061, 0x062, 0x063, 0x064,
2099 0x065, 0x066, 0x067, 0x068, 0x06C, 0x06D, 0x0A0, 0x0A1, 0x0A2, 0x0A3,
2100 0x0C0, 0x0CD, 0x0CE, 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106,
2101 0x107, 0x108, 0x109, 0x10A, 0x10B, 0x10C, 0x10D, 0x10E, 0x10F, 0x110,
2102 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, 0x118, 0x119, 0x11A,
2103 0x11B, 0x13C, 0xFA2, 0xFA3, 0xFA4, 0xFA5},
2104 "Walls, wall corners, and ceilings"},
2106 {0x023, 0x024, 0x025, 0x026, 0x027, 0x028, 0x029, 0x02A, 0x02B,
2107 0x02C, 0x02D, 0x02E, 0x033, 0x034, 0x03F, 0x040, 0x041, 0x042,
2108 0x043, 0x044, 0x045, 0x046, 0x047, 0x048, 0x049, 0x04A, 0x06A,
2109 0x06B, 0x070, 0x071, 0x079, 0x07A, 0x08B, 0x08C, 0x08D, 0x08E,
2110 0x094, 0x0A4, 0x0B0, 0x0B1, 0x0B2, 0x0B3, 0x0B4, 0x0BA, 0x0C1,
2111 0x0C4, 0x0C5, 0x0C7, 0x0C8, 0x0C9, 0x0CA, 0x0D1, 0x0D2, 0x0D8,
2112 0x0DA, 0x0DB, 0x0DC, 0x0DF, 0x0E0, 0x0E1, 0x0E2, 0x0E3, 0x0E4,
2113 0x0E5, 0x0E6, 0x0E7, 0x0E8, 0xFC7, 0xFC8, 0xFE6, 0xFF8},
2114 "Floor surfaces, carpet, pits, water, ice, and conveyors"},
2116 {0x036, 0x037, 0x038, 0x039, 0x03A, 0x03B, 0x03C, 0x03D, 0x03E, 0x04B,
2117 0x04C, 0x04D, 0x04E, 0x04F, 0x051, 0x052, 0x055, 0x056, 0x05B, 0x05C,
2118 0x073, 0x074, 0x075, 0x076, 0x077, 0x078, 0x07B, 0x07F, 0x080, 0x081,
2119 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x08F, 0x090, 0x091, 0x095,
2120 0x0B5, 0x0B6, 0x0B7, 0x0BB, 0x0BC, 0x0DD, 0x11C, 0x11D, 0x120, 0x121,
2121 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, 0x128, 0x129, 0x12A, 0x12B,
2122 0x12C, 0x13D, 0x13E, 0x13F, 0xFAA, 0xFAB, 0xFAD, 0xFB0, 0xFB7, 0xFB8,
2123 0xFB9, 0xFC9, 0xFCB, 0xFCC, 0xFCD, 0xFCE, 0xFD1, 0xFD5, 0xFD6, 0xFD7,
2124 0xFD8, 0xFD9, 0xFDA, 0xFDB, 0xFDC, 0xFDD, 0xFDE, 0xFDF, 0xFE0, 0xFE1,
2125 0xFE3, 0xFEB, 0xFEC, 0xFED, 0xFEE, 0xFEF, 0xFF0, 0xFF1, 0xFF7, 0xFF9,
2127 "Furniture, ornaments, torches, and room scenery"},
2129 {0x05E, 0x089, 0x092, 0x093, 0x096, 0x0B8, 0x0B9, 0x0BD,
2130 0x0DE, 0x11E, 0x11F, 0x134, 0x137, 0xF92, 0xF93, 0xF96,
2131 0xF98, 0xFAC, 0xFAF, 0xFCA, 0xFCF, 0xFD0, 0xFD2, 0xFD3},
2132 "Blocks, pegs, switches, locks, and other interaction tiles"},
2134 {0x021, 0x12D, 0x12E, 0x12F, 0x130, 0x131, 0x132, 0x133, 0x135, 0x136,
2135 0x138, 0x139, 0x13A, 0x13B, 0xF9B, 0xF9C, 0xF9D, 0xF9E, 0xF9F, 0xFA0,
2136 0xFA1, 0xFA6, 0xFA7, 0xFA8, 0xFA9, 0xFB3, 0xFB4, 0xFB5, 0xFB6},
2137 "Platform, interroom, intraroom, water-hop stairs, and ladders"},
2139 {0x035, 0xFF4, 0xFF6},
2140 "Doorway tile objects; ordinary room doors use the Door Editor"},
2142 {0xF99, 0xF9A, 0xFB1, 0xFB2, 0xFF5},
2143 "Small, big, open, and minigame chest objects"},
2144 {
"Special", {},
"Other, logic, unused, and unclassified tile objects"}};
2146 std::array<bool, 0x1000> categorized{};
2147 for (
const auto&
category : result) {
2148 for (
const int id :
category.object_ids) {
2149 categorized[id] =
true;
2152 for (
int id = 0; id < static_cast<int>(categorized.size()); ++id) {
2153 if (IsRepresentableRoomObjectId(
id) && !categorized[id]) {
2154 result.back().object_ids.push_back(
id);