yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
room_object.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ZELDA3_DUNGEON_ROOM_OBJECT_H
2#define YAZE_APP_ZELDA3_DUNGEON_ROOM_OBJECT_H
3
4#include <cstdint>
5#include <string>
6#include <vector>
7
8#include "app/gfx/snes_tile.h"
9#include "app/rom.h"
11
12namespace yaze {
13namespace zelda3 {
14
16
17enum Sorting {
18 All = 0,
19 Wall = 1,
24 Floors = 32,
25 SortStairs = 64
26};
27
28enum class ObjectOption {
29 Nothing = 0,
30 Door = 1,
31 Chest = 2,
32 Block = 4,
33 Torch = 8,
34 Bgr = 16,
35 Stairs = 32
36};
37
42
43constexpr int kRoomObjectSubtype1 = 0x8000; // JP = Same
44constexpr int kRoomObjectSubtype2 = 0x83F0; // JP = Same
45constexpr int kRoomObjectSubtype3 = 0x84F0; // JP = Same
46constexpr int kRoomObjectTileAddress = 0x1B52; // JP = Same
47constexpr int kRoomObjectTileAddressFloor = 0x1B5A; // JP = Same
48
50 public:
51 enum LayerType { BG1 = 0, BG2 = 1, BG3 = 2 };
52
53 RoomObject(int16_t id, uint8_t x, uint8_t y, uint8_t size, uint8_t layer = 0)
54 : id_(id),
55 x_(x),
56 y_(y),
57 size_(size),
58 layer_(static_cast<LayerType>(layer)),
59 nx_(x),
60 ny_(y),
61 ox_(x),
62 oy_(y),
63 width_(16),
64 height_(16),
65 rom_(nullptr) {}
66
67 void set_rom(Rom* rom) { rom_ = rom; }
68 auto rom() { return rom_; }
69 auto mutable_rom() { return rom_; }
70
71 // Position setters and getters
72 void set_x(uint8_t x) { x_ = x; }
73 void set_y(uint8_t y) { y_ = y; }
74 void set_size(uint8_t size) { size_ = size; }
75 uint8_t x() const { return x_; }
76 uint8_t y() const { return y_; }
77 uint8_t size() const { return size_; }
78
79 // Ensures tiles_ is populated with a basic set based on ROM tables so we can
80 // preview/draw objects without needing full emulator execution.
81 void EnsureTilesLoaded();
82
83 // Load tiles using the new ObjectParser
84 absl::Status LoadTilesWithParser();
85
86 // Getter for tiles
87 const std::vector<gfx::TileInfo>& tiles() const { return tiles_; }
88 std::vector<gfx::TileInfo>& mutable_tiles() { return tiles_; }
89
90 // Get tile data through Arena system - returns references, not copies
91 absl::StatusOr<std::span<const gfx::TileInfo>> GetTiles() const;
92
93 // Get individual tile by index - uses Arena lookup
94 absl::StatusOr<const gfx::TileInfo*> GetTile(int index) const;
95
96 // Get tile count without loading all tiles
97 int GetTileCount() const;
98
99 // ============================================================================
100 // Object Encoding/Decoding (Phase 1, Task 1.1)
101 // ============================================================================
102
103 // 3-byte object encoding structure
104 struct ObjectBytes {
105 uint8_t b1;
106 uint8_t b2;
107 uint8_t b3;
108 };
109
110 // Decode object from 3-byte ROM format
111 // Type1: xxxxxxss yyyyyyss iiiiiiii (ID 0x00-0xFF)
112 // Type2: 111111xx xxxxyyyy yyiiiiii (ID 0x100-0x1FF)
113 // Type3: xxxxxxii yyyyyyii 11111iii (ID 0xF00-0xFFF)
114 static RoomObject DecodeObjectFromBytes(uint8_t b1, uint8_t b2, uint8_t b3,
115 uint8_t layer);
116
117 // Encode object to 3-byte ROM format
119
120 // Determine object type from bytes (1, 2, or 3)
121 static int DetermineObjectType(uint8_t b1, uint8_t b3);
122
123 // Get layer from LayerType enum
124 uint8_t GetLayerValue() const { return static_cast<uint8_t>(layer_); }
125
126 // ============================================================================
127
128 // NOTE: Legacy ZScream methods removed. Modern rendering uses:
129 // - ObjectParser for loading tiles from ROM
130 // - ObjectDrawer for rendering tiles to BackgroundBuffer
131
132 auto options() const { return options_; }
134
135 bool all_bgs_ = false;
136 bool lit_ = false;
137
138 int16_t id_;
139 uint8_t x_;
140 uint8_t y_;
141 uint8_t size_;
142 uint8_t nx_;
143 uint8_t ny_;
144 uint8_t ox_;
145 uint8_t oy_;
146 uint8_t z_ = 0;
147 uint8_t previous_size_ = 0;
148 // Size nibble bits captured from object encoding (0..3 each) for heuristic
149 // orientation and sizing decisions.
150 uint8_t size_x_bits_ = 0;
151 uint8_t size_y_bits_ = 0;
152
155 int offset_x_ = 0;
156 int offset_y_ = 0;
157
158 std::string name_;
159
160 std::vector<uint8_t> preview_object_data_;
161
162 // Tile data storage - using Arena system for efficient memory management
163 // Instead of copying Tile16 vectors, we store references to Arena-managed data
164 mutable std::vector<gfx::TileInfo> tiles_; // Individual tiles like ZScream
165 mutable bool tiles_loaded_ = false;
166 mutable int tile_count_ = 0;
167 mutable int tile_data_ptr_ = -1; // Pointer to tile data in ROM
168
171
173};
174
175// NOTE: Legacy Subtype1, Subtype2, Subtype3 classes removed.
176// These were ported from ZScream but are no longer used.
177// Modern code uses: ObjectParser + ObjectDrawer + ObjectRenderer
178
179constexpr static inline const char* Type1RoomObjectNames[] = {
180 "Ceiling ↔",
181 "Wall (top, north) ↔",
182 "Wall (top, south) ↔",
183 "Wall (bottom, north) ↔",
184 "Wall (bottom, south) ↔",
185 "Wall columns (north) ↔",
186 "Wall columns (south) ↔",
187 "Deep wall (north) ↔",
188 "Deep wall (south) ↔",
189 "Diagonal wall A ◤ (top) ↔",
190 "Diagonal wall A ◣ (top) ↔",
191 "Diagonal wall A ◥ (top) ↔",
192 "Diagonal wall A ◢ (top) ↔",
193 "Diagonal wall B ◤ (top) ↔",
194 "Diagonal wall B ◣ (top) ↔",
195 "Diagonal wall B ◥ (top) ↔",
196 "Diagonal wall B ◢ (top) ↔",
197 "Diagonal wall C ◤ (top) ↔",
198 "Diagonal wall C ◣ (top) ↔",
199 "Diagonal wall C ◥ (top) ↔",
200 "Diagonal wall C ◢ (top) ↔",
201 "Diagonal wall A ◤ (bottom) ↔",
202 "Diagonal wall A ◣ (bottom) ↔",
203 "Diagonal wall A ◥ (bottom) ↔",
204 "Diagonal wall A ◢ (bottom) ↔",
205 "Diagonal wall B ◤ (bottom) ↔",
206 "Diagonal wall B ◣ (bottom) ↔",
207 "Diagonal wall B ◥ (bottom) ↔",
208 "Diagonal wall B ◢ (bottom) ↔",
209 "Diagonal wall C ◤ (bottom) ↔",
210 "Diagonal wall C ◣ (bottom) ↔",
211 "Diagonal wall C ◥ (bottom) ↔",
212 "Diagonal wall C ◢ (bottom) ↔",
213 "Platform stairs ↔",
214 "Rail ↔",
215 "Pit edge ┏━┓ A (north) ↔",
216 "Pit edge ┏━┓ B (north) ↔",
217 "Pit edge ┏━┓ C (north) ↔",
218 "Pit edge ┏━┓ D (north) ↔",
219 "Pit edge ┏━┓ E (north) ↔",
220 "Pit edge ┗━┛ (south) ↔",
221 "Pit edge ━━━ (south) ↔",
222 "Pit edge ━━━ (north) ↔",
223 "Pit edge ━━┛ (south) ↔",
224 "Pit edge ┗━━ (south) ↔",
225 "Pit edge ━━┓ (north) ↔",
226 "Pit edge ┏━━ (north) ↔",
227 "Rail wall (north) ↔",
228 "Rail wall (south) ↔",
229 "Nothing",
230 "Nothing",
231 "Carpet ↔",
232 "Carpet trim ↔",
233 "Weird door", // TODO: WEIRD DOOR OBJECT NEEDS INVESTIGATION
234 "Drapes (north) ↔",
235 "Drapes (west, odd) ↔",
236 "Statues ↔",
237 "Columns ↔",
238 "Wall decors (north) ↔",
239 "Wall decors (south) ↔",
240 "Chairs in pairs ↔",
241 "Tall torches ↔",
242 "Supports (north) ↔",
243 "Water edge ┏━┓ (concave) ↔",
244 "Water edge ┗━┛ (concave) ↔",
245 "Water edge ┏━┓ (convex) ↔",
246 "Water edge ┗━┛ (convex) ↔",
247 "Water edge ┏━┛ (concave) ↔",
248 "Water edge ┗━┓ (concave) ↔",
249 "Water edge ┗━┓ (convex) ↔",
250 "Water edge ┏━┛ (convex) ↔",
251 "Unknown", // TODO: NEEDS IN GAME CHECKING
252 "Unknown", // TODO: NEEDS IN GAME CHECKING
253 "Unknown", // TODO: NEEDS IN GAME CHECKING
254 "Unknown", // TODO: NEEDS IN GAME CHECKING
255 "Supports (south) ↔",
256 "Bar ↔",
257 "Shelf A ↔",
258 "Shelf B ↔",
259 "Shelf C ↔",
260 "Somaria path ↔",
261 "Cannon hole A (north) ↔",
262 "Cannon hole A (south) ↔",
263 "Pipe path ↔",
264 "Nothing",
265 "Wall torches (north) ↔",
266 "Wall torches (south) ↔",
267 "Nothing",
268 "Nothing",
269 "Nothing",
270 "Nothing",
271 "Cannon hole B (north) ↔",
272 "Cannon hole B (south) ↔",
273 "Thick rail ↔",
274 "Blocks ↔",
275 "Long rail ↔",
276 "Ceiling ↕",
277 "Wall (top, west) ↕",
278 "Wall (top, east) ↕",
279 "Wall (bottom, west) ↕",
280 "Wall (bottom, east) ↕",
281 "Wall columns (west) ↕",
282 "Wall columns (east) ↕",
283 "Deep wall (west) ↕",
284 "Deep wall (east) ↕",
285 "Rail ↕",
286 "Pit edge (west) ↕",
287 "Pit edge (east) ↕",
288 "Rail wall (west) ↕",
289 "Rail wall (east) ↕",
290 "Nothing",
291 "Nothing",
292 "Carpet ↕",
293 "Carpet trim ↕",
294 "Nothing",
295 "Drapes (west) ↕",
296 "Drapes (east) ↕",
297 "Columns ↕",
298 "Wall decors (west) ↕",
299 "Wall decors (east) ↕",
300 "Supports (west) ↕",
301 "Water edge (west) ↕",
302 "Water edge (east) ↕",
303 "Supports (east) ↕",
304 "Somaria path ↕",
305 "Pipe path ↕",
306 "Nothing",
307 "Wall torches (west) ↕",
308 "Wall torches (east) ↕",
309 "Wall decors tight A (west) ↕",
310 "Wall decors tight A (east) ↕",
311 "Wall decors tight B (west) ↕",
312 "Wall decors tight B (east) ↕",
313 "Cannon hole (west) ↕",
314 "Cannon hole (east) ↕",
315 "Tall torches ↕",
316 "Thick rail ↕",
317 "Blocks ↕",
318 "Long rail ↕",
319 "Jump ledge (west) ↕",
320 "Jump ledge (east) ↕",
321 "Rug trim (west) ↕",
322 "Rug trim (east) ↕",
323 "Bar ↕",
324 "Wall flair (west) ↕",
325 "Wall flair (east) ↕",
326 "Blue pegs ↕",
327 "Orange pegs ↕",
328 "Invisible floor ↕",
329 "Fake pots ↕",
330 "Hammer pegs ↕",
331 "Nothing",
332 "Nothing",
333 "Nothing",
334 "Nothing",
335 "Nothing",
336 "Nothing",
337 "Nothing",
338 "Nothing",
339 "Nothing",
340 "Diagonal ceiling A ◤",
341 "Diagonal ceiling A ◣",
342 "Diagonal ceiling A ◥",
343 "Diagonal ceiling A ◢",
344 "Pit ⇲",
345 "Diagonal layer 2 mask A ◤",
346 "Diagonal layer 2 mask A ◣",
347 "Diagonal layer 2 mask A ◥",
348 "Diagonal layer 2 mask A ◢",
349 "Diagonal layer 2 mask B ◤", // TODO: VERIFY
350 "Diagonal layer 2 mask B ◣", // TODO: VERIFY
351 "Diagonal layer 2 mask B ◥", // TODO: VERIFY
352 "Diagonal layer 2 mask B ◢", // TODO: VERIFY
353 "Nothing",
354 "Nothing",
355 "Nothing",
356 "Jump ledge (north) ↔",
357 "Jump ledge (south) ↔",
358 "Rug ↔",
359 "Rug trim (north) ↔",
360 "Rug trim (south) ↔",
361 "Archery game curtains ↔",
362 "Wall flair (north) ↔",
363 "Wall flair (south) ↔",
364 "Blue pegs ↔",
365 "Orange pegs ↔",
366 "Invisible floor ↔",
367 "Fake pressure plates ↔",
368 "Fake pots ↔",
369 "Hammer pegs ↔",
370 "Nothing",
371 "Nothing",
372 "Ceiling (large) ⇲",
373 "Chest platform (tall) ⇲",
374 "Layer 2 pit mask (large) ⇲",
375 "Layer 2 pit mask (medium) ⇲",
376 "Floor 1 ⇲",
377 "Floor 3 ⇲",
378 "Layer 2 mask (large) ⇲",
379 "Floor 4 ⇲",
380 "Water floor ⇲ ",
381 "Flood water (medium) ⇲ ",
382 "Conveyor floor ⇲ ",
383 "Nothing",
384 "Nothing",
385 "Moving wall (west) ⇲",
386 "Moving wall (east) ⇲",
387 "Nothing",
388 "Nothing",
389 "Icy floor A ⇲",
390 "Icy floor B ⇲",
391 "Moving wall flag", // TODO: WTF IS THIS?
392 "Moving wall flag", // TODO: WTF IS THIS?
393 "Moving wall flag", // TODO: WTF IS THIS?
394 "Moving wall flag", // TODO: WTF IS THIS?
395 "Layer 2 mask (medium) ⇲",
396 "Flood water (large) ⇲",
397 "Layer 2 swim mask ⇲",
398 "Flood water B (large) ⇲",
399 "Floor 2 ⇲",
400 "Chest platform (short) ⇲",
401 "Table / rock ⇲",
402 "Spike blocks ⇲",
403 "Spiked floor ⇲",
404 "Floor 7 ⇲",
405 "Tiled floor ⇲",
406 "Rupee floor ⇲",
407 "Conveyor upwards ⇲",
408 "Conveyor downwards ⇲",
409 "Conveyor leftwards ⇲",
410 "Conveyor rightwards ⇲",
411 "Heavy current water ⇲",
412 "Floor 10 ⇲",
413 "Nothing",
414 "Nothing",
415 "Nothing",
416 "Nothing",
417 "Nothing",
418 "Nothing",
419 "Nothing",
420 "Nothing",
421 "Nothing",
422 "Nothing",
423 "Nothing",
424 "Nothing",
425 "Nothing",
426 "Nothing",
427 "Nothing",
428};
429
430constexpr static inline const char* Type2RoomObjectNames[] = {
431 "Corner (top, concave) ▛",
432 "Corner (top, concave) ▙",
433 "Corner (top, concave) ▜",
434 "Corner (top, concave) ▟",
435 "Corner (top, convex) ▟",
436 "Corner (top, convex) ▜",
437 "Corner (top, convex) ▙",
438 "Corner (top, convex) ▛",
439 "Corner (bottom, concave) ▛",
440 "Corner (bottom, concave) ▙",
441 "Corner (bottom, concave) ▜",
442 "Corner (bottom, concave) ▟",
443 "Corner (bottom, convex) ▟",
444 "Corner (bottom, convex) ▜",
445 "Corner (bottom, convex) ▙",
446 "Corner (bottom, convex) ▛",
447 "Kinked corner north (bottom) ▜",
448 "Kinked corner south (bottom) ▟",
449 "Kinked corner north (bottom) ▛",
450 "Kinked corner south (bottom) ▙",
451 "Kinked corner west (bottom) ▙",
452 "Kinked corner west (bottom) ▛",
453 "Kinked corner east (bottom) ▟",
454 "Kinked corner east (bottom) ▜",
455 "Deep corner (concave) ▛",
456 "Deep corner (concave) ▙",
457 "Deep corner (concave) ▜",
458 "Deep corner (concave) ▟",
459 "Large brazier",
460 "Statue",
461 "Star tile (disabled)",
462 "Star tile (enabled)",
463 "Small torch (lit)",
464 "Barrel",
465 "Unknown", // TODO: NEEDS IN GAME CHECKING
466 "Table",
467 "Fairy statue",
468 "Unknown", // TODO: NEEDS IN GAME CHECKING
469 "Unknown", // TODO: NEEDS IN GAME CHECKING
470 "Chair",
471 "Bed",
472 "Fireplace",
473 "Mario portrait",
474 "Unknown", // TODO: NEEDS IN GAME CHECKING
475 "Unknown", // TODO: NEEDS IN GAME CHECKING
476 "Interroom stairs (up)",
477 "Interroom stairs (down)",
478 "Interroom stairs B (down)",
479 "Intraroom stairs north B", // TODO: VERIFY LAYER HANDLING
480 "Intraroom stairs north (separate layers)",
481 "Intraroom stairs north (merged layers)",
482 "Intraroom stairs north (swim layer)",
483 "Block",
484 "Water ladder (north)",
485 "Water ladder (south)", // TODO: NEEDS IN GAME VERIFICATION
486 "Dam floodgate",
487 "Interroom spiral stairs up (top)",
488 "Interroom spiral stairs down (top)",
489 "Interroom spiral stairs up (bottom)",
490 "Interroom spiral stairs down (bottom)",
491 "Sanctuary wall (north)",
492 "Unknown", // TODO: NEEDS IN GAME CHECKING
493 "Pew",
494 "Magic bat altar",
495};
496
497constexpr static inline const char* Type3RoomObjectNames[] = {
498 "Waterfall face (empty)",
499 "Waterfall face (short)",
500 "Waterfall face (long)",
501 "Somaria path endpoint",
502 "Somaria path intersection ╋",
503 "Somaria path corner ┏",
504 "Somaria path corner ┗",
505 "Somaria path corner ┓",
506 "Somaria path corner ┛",
507 "Somaria path intersection ┳",
508 "Somaria path intersection ┻",
509 "Somaria path intersection ┣",
510 "Somaria path intersection ┫",
511 "Unknown", // TODO: NEEDS IN GAME CHECKING
512 "Somaria path 2-way endpoint",
513 "Somaria path crossover",
514 "Babasu hole (north)",
515 "Babasu hole (south)",
516 "9 blue rupees",
517 "Telepathy tile",
518 "Warp door", // TODO: NEEDS IN GAME VERIFICATION THAT THIS IS USELESS
519 "Kholdstare's shell",
520 "Hammer peg",
521 "Prison cell",
522 "Big key lock",
523 "Chest",
524 "Chest (open)",
525 "Intraroom stairs south", // TODO: VERIFY LAYER HANDLING
526 "Intraroom stairs south (separate layers)",
527 "Intraroom stairs south (merged layers)",
528 "Interroom straight stairs up (north, top)",
529 "Interroom straight stairs down (north, top)",
530 "Interroom straight stairs up (south, top)",
531 "Interroom straight stairs down (south, top)",
532 "Deep corner (convex) ▟",
533 "Deep corner (convex) ▜",
534 "Deep corner (convex) ▙",
535 "Deep corner (convex) ▛",
536 "Interroom straight stairs up (north, bottom)",
537 "Interroom straight stairs down (north, bottom)",
538 "Interroom straight stairs up (south, bottom)",
539 "Interroom straight stairs down (south, bottom)",
540 "Lamp cones",
541 "Unknown", // TODO: NEEDS IN GAME CHECKING
542 "Liftable large block",
543 "Agahnim's altar",
544 "Agahnim's boss room",
545 "Pot",
546 "Unknown", // TODO: NEEDS IN GAME CHECKING
547 "Big chest",
548 "Big chest (open)",
549 "Intraroom stairs south (swim layer)",
550 "Unknown", // TODO: NEEDS IN GAME CHECKING
551 "Unknown", // TODO: NEEDS IN GAME CHECKING
552 "Unknown", // TODO: NEEDS IN GAME CHECKING
553 "Unknown", // TODO: NEEDS IN GAME CHECKING
554 "Unknown", // TODO: NEEDS IN GAME CHECKING
555 "Unknown", // TODO: NEEDS IN GAME CHECKING
556 "Pipe end (south)",
557 "Pipe end (north)",
558 "Pipe end (east)",
559 "Pipe end (west)",
560 "Pipe corner ▛",
561 "Pipe corner ▙",
562 "Pipe corner ▜",
563 "Pipe corner ▟",
564 "Pipe-rock intersection ⯊",
565 "Pipe-rock intersection ⯋",
566 "Pipe-rock intersection ◖",
567 "Pipe-rock intersection ◗",
568 "Pipe crossover",
569 "Bombable floor",
570 "Fake bombable floor",
571 "Unknown", // TODO: NEEDS IN GAME CHECKING
572 "Warp tile",
573 "Tool rack",
574 "Furnace",
575 "Tub (wide)",
576 "Anvil",
577 "Warp tile (disabled)",
578 "Pressure plate",
579 "Unknown", // TODO: NEEDS IN GAME CHECKING
580 "Blue peg",
581 "Orange peg",
582 "Fortune teller room",
583 "Unknown", // TODO: NEEDS IN GAME CHECKING
584 "Bar corner ▛",
585 "Bar corner ▙",
586 "Bar corner ▜",
587 "Bar corner ▟",
588 "Decorative bowl",
589 "Tub (tall)",
590 "Bookcase",
591 "Range",
592 "Suitcase",
593 "Bar bottles",
594 "Arrow game hole (west)",
595 "Arrow game hole (east)",
596 "Vitreous goo gfx",
597 "Fake pressure plate",
598 "Medusa head",
599 "4-way shooter block",
600 "Pit",
601 "Wall crack (north)",
602 "Wall crack (south)",
603 "Wall crack (west)",
604 "Wall crack (east)",
605 "Large decor",
606 "Water grate (north)",
607 "Water grate (south)",
608 "Water grate (west)",
609 "Water grate (east)",
610 "Window sunlight",
611 "Floor sunlight",
612 "Trinexx's shell",
613 "Layer 2 mask (full)",
614 "Boss entrance",
615 "Minigame chest",
616 "Ganon door",
617 "Triforce wall ornament",
618 "Triforce floor tiles",
619 "Freezor hole",
620 "Pile of bones",
621 "Vitreous goo damage",
622 "Arrow tile ↑",
623 "Arrow tile ↓",
624 "Arrow tile →",
625 "Nothing",
626};
627
628} // namespace zelda3
629} // namespace yaze
630
631#endif // YAZE_APP_ZELDA3_DUNGEON_ROOM_OBJECT_H
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
absl::StatusOr< const gfx::TileInfo * > GetTile(int index) const
static RoomObject DecodeObjectFromBytes(uint8_t b1, uint8_t b2, uint8_t b3, uint8_t layer)
std::vector< uint8_t > preview_object_data_
std::vector< gfx::TileInfo > tiles_
void set_size(uint8_t size)
Definition room_object.h:74
std::vector< gfx::TileInfo > & mutable_tiles()
Definition room_object.h:88
ObjectBytes EncodeObjectToBytes() const
const std::vector< gfx::TileInfo > & tiles() const
Definition room_object.h:87
void set_x(uint8_t x)
Definition room_object.h:72
static int DetermineObjectType(uint8_t b1, uint8_t b3)
void set_rom(Rom *rom)
Definition room_object.h:67
absl::Status LoadTilesWithParser()
uint8_t size() const
Definition room_object.h:77
absl::StatusOr< std::span< const gfx::TileInfo > > GetTiles() const
RoomObject(int16_t id, uint8_t x, uint8_t y, uint8_t size, uint8_t layer=0)
Definition room_object.h:53
uint8_t GetLayerValue() const
void set_y(uint8_t y)
Definition room_object.h:73
void set_options(ObjectOption options)
constexpr int kRoomObjectSubtype3
Definition room_object.h:45
ObjectOption operator|(ObjectOption lhs, ObjectOption rhs)
ObjectOption operator^(ObjectOption lhs, ObjectOption rhs)
constexpr int kRoomObjectSubtype1
Definition room_object.h:43
constexpr int kRoomObjectSubtype2
Definition room_object.h:44
constexpr int kRoomObjectTileAddress
Definition room_object.h:46
ObjectOption operator~(ObjectOption option)
ObjectOption operator&(ObjectOption lhs, ObjectOption rhs)
constexpr int kRoomObjectTileAddressFloor
Definition room_object.h:47
Main namespace for the application.