diff --git a/src/app/zelda3/dungeon/room.cc b/src/app/zelda3/dungeon/room.cc index aeadfbd8..ef92e688 100644 --- a/src/app/zelda3/dungeon/room.cc +++ b/src/app/zelda3/dungeon/room.cc @@ -7,20 +7,15 @@ #include "absl/strings/str_cat.h" #include "app/core/constants.h" -#include "app/gfx/bitmap.h" -#include "app/gfx/snes_palette.h" -#include "app/gfx/snes_tile.h" -#include "app/gui/canvas.h" #include "app/rom.h" #include "app/zelda3/dungeon/room_object.h" +#include "app/zelda3/dungeon/room_tag.h" #include "app/zelda3/sprite/sprite.h" namespace yaze { namespace zelda3 { - void Room::LoadHeader() { - // Address of the room header int header_pointer = (rom()->data()[kRoomHeaderPointer + 2] << 16) + (rom()->data()[kRoomHeaderPointer + 1] << 8) + (rom()->data()[kRoomHeaderPointer]); @@ -33,7 +28,7 @@ void Room::LoadHeader() { auto header_location = core::SnesToPc(address); bg2_ = (z3_dungeon_background2)((rom()->data()[header_location] >> 5) & 0x07); - // collision = (CollisionKey)((rom()->data()[header_location] >> 2) & 0x07); + collision_ = (CollisionKey)((rom()->data()[header_location] >> 2) & 0x07); is_light_ = ((rom()->data()[header_location]) & 0x01) == 1; if (is_light_) { @@ -43,9 +38,9 @@ void Room::LoadHeader() { palette = ((rom()->data()[header_location + 1] & 0x3F)); blockset = (rom()->data()[header_location + 2]); spriteset = (rom()->data()[header_location + 3]); - // effect = (EffectKey)((rom()->data()[header_location + 4])); - // tag1 = (TagKey)((rom()->data()[header_location + 5])); - // tag2 = (TagKey)((rom()->data()[header_location + 6])); + effect_ = (EffectKey)((rom()->data()[header_location + 4])); + tag1_ = (TagKey)((rom()->data()[header_location + 5])); + tag2_ = (TagKey)((rom()->data()[header_location + 6])); staircase_plane_[0] = ((rom()->data()[header_location + 7] >> 2) & 0x03); staircase_plane_[1] = ((rom()->data()[header_location + 7] >> 4) & 0x03); @@ -139,8 +134,7 @@ void Room::LoadRoomFromROM() { uint8_t b = rom_data[hpos]; layer2_mode_ = (b >> 5); - // TODO(@scawful): Make LayerMerging object. - // LayerMerging = LayerMergeType.ListOf[(b & 0x0C) >> 2]; + layer_merging_ = kLayerMergeTypeList[(b & 0x0C) >> 2]; is_dark_ = (b & 0x01) == 0x01; hpos++; @@ -157,10 +151,10 @@ void Room::LoadRoomFromROM() { layer2_behavior_ = rom_data[hpos]; hpos++; - tag1_ = rom_data[hpos]; + tag1_ = (TagKey)rom_data[hpos]; hpos++; - tag2_ = rom_data[hpos]; + tag2_ = (TagKey)rom_data[hpos]; hpos++; b = rom_data[hpos]; @@ -485,8 +479,5 @@ void Room::LoadChests() { } } - - } // namespace zelda3 - } // namespace yaze diff --git a/src/app/zelda3/dungeon/room.h b/src/app/zelda3/dungeon/room.h index 33e884a1..851b12f3 100644 --- a/src/app/zelda3/dungeon/room.h +++ b/src/app/zelda3/dungeon/room.h @@ -11,6 +11,7 @@ #include "app/gfx/bitmap.h" #include "app/rom.h" #include "app/zelda3/dungeon/room_object.h" +#include "app/zelda3/dungeon/room_tag.h" #include "app/zelda3/sprite/sprite.h" namespace yaze { @@ -80,6 +81,36 @@ constexpr int NumberOfRooms = 296; constexpr ushort stairsObjects[] = {0x139, 0x138, 0x13B, 0x12E, 0x12D}; +struct LayerMergeType { + uint8_t ID; + std::string Name; + bool Layer2OnTop; + bool Layer2Translucent; + bool Layer2Visible; + LayerMergeType() = default; + LayerMergeType(uint8_t id, std::string name, bool see, bool top, bool trans) { + ID = id; + Name = name; + Layer2OnTop = top; + Layer2Translucent = trans; + Layer2Visible = see; + } +}; + +const static LayerMergeType LayerMerge00{0x00, "Off", true, false, false}; +const static LayerMergeType LayerMerge01{0x01, "Parallax", true, false, false}; +const static LayerMergeType LayerMerge02{0x02, "Dark", true, true, true}; +const static LayerMergeType LayerMerge03{0x03, "On top", true, true, false}; +const static LayerMergeType LayerMerge04{0x04, "Translucent", true, true, true}; +const static LayerMergeType LayerMerge05{0x05, "Addition", true, true, true}; +const static LayerMergeType LayerMerge06{0x06, "Normal", true, false, false}; +const static LayerMergeType LayerMerge07{0x07, "Transparent", true, true, true}; +const static LayerMergeType LayerMerge08{0x08, "Dark room", true, true, true}; + +const static LayerMergeType kLayerMergeTypeList[] = { + LayerMerge00, LayerMerge01, LayerMerge02, LayerMerge03, LayerMerge04, + LayerMerge05, LayerMerge06, LayerMerge07, LayerMerge08}; + class Room : public SharedRom { public: Room() = default; @@ -156,6 +187,12 @@ class Room : public SharedRom { std::vector z3_staircases_; std::vector chests_in_room_; + LayerMergeType layer_merging_; + CollisionKey collision_; + EffectKey effect_; + TagKey tag1_; + TagKey tag2_; + z3_dungeon_background2 bg2_; z3_dungeon_destination pits_; z3_dungeon_destination stair1_;