yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_room_edit.cc
Go to the documentation of this file.
2
3#include "absl/strings/str_format.h"
5
6namespace yaze::editor {
7
8namespace {
9
13 return staircase ? edit.index >= 0 && edit.index < 4 : edit.index == 0;
14}
15
17 switch (field) {
20 return 0x07;
22 return 0x51;
25 return 0x0F;
27 return 0x47;
31 return 0x0FFF;
33 return 0x08;
35 return 0x04;
38 return 0x3F;
41 return 0xFF;
44 // USDASM LayerOfDestination ($01C31F/$01C322) has three entries.
45 // Raw 03 remains loadable/restorable, but is not a vanilla authoring value.
46 return 0x02;
47 }
48 return -1;
49}
50
51} // namespace
52
53absl::Status ValidateRoomMetadataEdit(const RoomMetadataEdit& edit) {
54 if (!HasValidMetadataSlot(edit)) {
55 return absl::InvalidArgumentError("Invalid room metadata field slot");
56 }
57 const int maximum = MetadataMaximum(edit.field);
58 if (maximum < 0) {
59 return absl::InvalidArgumentError("Unknown room metadata field");
60 }
61 if (edit.value < 0 || edit.value > maximum) {
62 return absl::InvalidArgumentError(absl::StrFormat(
63 "Room metadata value %d is outside the supported range 0..%d",
64 edit.value, maximum));
65 }
66 return absl::OkStatus();
67}
68
70 const RoomMetadataEdit& edit) {
71 // Keep the value predicate visible at the mutation boundary. The status
72 // helper supplies error details; it is not the proof for narrowing casts.
73 if (!HasValidMetadataSlot(edit) || edit.value < 0 ||
74 edit.value > MetadataMaximum(edit.field)) {
75 return ValidateRoomMetadataEdit(edit);
76 }
77
78 const uint8_t value = static_cast<uint8_t>(edit.value);
79 switch (edit.field) {
81 room.SetLayoutId(value);
82 break;
84 room.SetBlockset(value);
85 break;
87 room.set_floor1(value);
88 break;
90 room.set_floor2(value);
91 break;
93 room.SetPalette(value);
94 break;
96 room.SetSpriteset(value);
97 break;
99 room.SetMessageId(static_cast<uint16_t>(edit.value));
100 break;
102 room.SetBg2(static_cast<background2>(value));
103 break;
105 room.SetEffect(static_cast<zelda3::EffectKey>(value));
106 break;
108 room.SetCollision(static_cast<zelda3::CollisionKey>(value));
109 break;
111 room.SetTag1(static_cast<zelda3::TagKey>(value));
112 break;
114 room.SetTag2(static_cast<zelda3::TagKey>(value));
115 break;
117 room.SetHolewarp(value);
118 break;
120 room.SetStaircaseRoom(edit.index, value);
121 break;
123 room.SetStaircasePlane(edit.index, value);
124 break;
126 room.SetPitsTargetLayer(value);
127 break;
128 }
129 return absl::OkStatus();
130}
131
132} // namespace yaze::editor
void set_floor2(uint8_t value)
Definition room.h:1050
void SetStaircaseRoom(int index, uint8_t room)
Definition room.h:828
void set_floor1(uint8_t value)
Definition room.h:1043
void SetTag2(TagKey tag2)
Definition room.h:809
void SetLayoutId(uint8_t id)
Definition room.h:1032
void SetHolewarp(uint8_t hw)
Definition room.h:822
void SetCollision(CollisionKey collision)
Definition room.h:754
void SetStaircasePlane(int index, uint8_t plane)
Definition room.h:816
void SetEffect(EffectKey effect)
Definition room.h:795
void SetTag1(TagKey tag1)
Definition room.h:802
void SetPitsTargetLayer(uint8_t layer)
Definition room.h:908
void SetBg2(background2 bg2)
Definition room.h:730
void SetSpriteset(uint8_t ss)
Definition room.h:781
void SetBlockset(uint8_t bs)
Definition room.h:773
void SetPalette(uint8_t pal)
Definition room.h:766
void SetMessageId(uint16_t mid)
Definition room.h:836
zelda3_bg2_effect
Background layer 2 effects.
Definition zelda.h:369
Editors are the view controllers for the application.
absl::Status ValidateRoomMetadataEdit(const RoomMetadataEdit &edit)
absl::Status ApplyRoomMetadataEdit(zelda3::Room &room, const RoomMetadataEdit &edit)
constexpr int kMaxDungeonSpriteset
Staircase connection.
Definition zelda.h:414