61 Room room1(0x00, rom_.get());
65 ASSERT_GT(original_count, 0) <<
"Room should have objects";
72 ASSERT_TRUE(save_status.ok()) << save_status.message();
75 Room room2(0x00, rom_.get());
82 ASSERT_EQ(reloaded_objects.size(), original_objects.size());
84 for (
size_t i = 0; i < original_objects.size(); i++) {
85 SCOPED_TRACE(
"Object " + std::to_string(i));
87 const auto& orig = original_objects[i];
88 const auto& reload = reloaded_objects[i];
90 EXPECT_EQ(reload.id_, orig.id_) <<
"ID mismatch";
91 EXPECT_EQ(reload.x(), orig.x()) <<
"X position mismatch";
92 EXPECT_EQ(reload.y(), orig.y()) <<
"Y position mismatch";
93 EXPECT_EQ(reload.size(), orig.size()) <<
"Size mismatch";
94 EXPECT_EQ(reload.GetLayerValue(), orig.GetLayerValue()) <<
"Layer mismatch";
104 std::vector<int> test_rooms = {0x00, 0x01, 0x02, 0x10, 0x20};
106 for (
int room_id : test_rooms) {
107 SCOPED_TRACE(
"Room " + std::to_string(room_id));
110 Room room1(room_id, rom_.get());
113 if (original_objects.empty()) {
119 ASSERT_TRUE(save_status.ok()) << save_status.message();
122 Room room2(room_id, rom_.get());
125 EXPECT_EQ(reloaded_objects.size(), original_objects.size());
128 for (
size_t i = 0; i < std::min(original_objects.size(), reloaded_objects.size()); i++) {
129 const auto& orig = original_objects[i];
130 const auto& reload = reloaded_objects[i];
132 EXPECT_EQ(reload.id_, orig.id_);
133 EXPECT_EQ(reload.x(), orig.x());
134 EXPECT_EQ(reload.y(), orig.y());
135 EXPECT_EQ(reload.size(), orig.size());
136 EXPECT_EQ(reload.GetLayerValue(), orig.GetLayerValue());
147 Room room(0x01, rom_.get());
150 ASSERT_GT(objects.size(), 0);
153 int layer0_count = 0, layer1_count = 0, layer2_count = 0;
154 for (
const auto& obj : objects) {
155 switch (obj.GetLayerValue()) {
156 case 0: layer0_count++;
break;
157 case 1: layer1_count++;
break;
158 case 2: layer2_count++;
break;
165 Room room2(0x01, rom_.get());
169 int reload_layer0 = 0, reload_layer1 = 0, reload_layer2 = 0;
170 for (
const auto& obj : reloaded) {
171 switch (obj.GetLayerValue()) {
172 case 0: reload_layer0++;
break;
173 case 1: reload_layer1++;
break;
174 case 2: reload_layer2++;
break;
178 EXPECT_EQ(reload_layer0, layer0_count);
179 EXPECT_EQ(reload_layer1, layer1_count);
180 EXPECT_EQ(reload_layer2, layer2_count);
188 Room room(0x00, rom_.get());
191 ASSERT_GT(objects.size(), 0);
198 for (
const auto& obj : objects) {
199 if (obj.id_ >= 0xF00) {
201 }
else if (obj.id_ >= 0x100) {
211 Room room2(0x00, rom_.get());
215 int reload_type1 = 0, reload_type2 = 0, reload_type3 = 0;
216 for (
const auto& obj : reloaded) {
217 if (obj.id_ >= 0xF00) {
219 }
else if (obj.id_ >= 0x100) {
226 EXPECT_EQ(reload_type1, type1_count);
227 EXPECT_EQ(reload_type2, type2_count);
228 EXPECT_EQ(reload_type3, type3_count);
239 Room room(0x02, rom_.get());
242 auto rom_data = rom_->vector();
243 int object_pointer = (rom_data[0x874C + 2] << 16) +
244 (rom_data[0x874C + 1] << 8) +
246 object_pointer =
SnesToPc(object_pointer);
248 int room_address = object_pointer + (0x02 * 3);
250 (rom_data[room_address + 1] << 8) +
251 rom_data[room_address];
255 std::vector<uint8_t> original_bytes;
256 for (
int i = 0; i < 500 && objects_location + i < (int)rom_data.size(); i++) {
257 original_bytes.push_back(rom_data[objects_location + i]);
259 if (i > 0 && original_bytes[i] == 0xFF && original_bytes[i-1] == 0xFF) {
261 bool might_be_final =
true;
262 for (
int j = i - 10; j < i - 1; j += 2) {
263 if (j >= 0 && original_bytes[j] == 0xFF && original_bytes[j+1] == 0xFF) {
268 if (might_be_final)
break;
276 rom_data = rom_->vector();
277 std::vector<uint8_t> saved_bytes;
278 for (
size_t i = 0; i < original_bytes.size() && objects_location + i < rom_data.size(); i++) {
279 saved_bytes.push_back(rom_data[objects_location + i]);
283 ASSERT_EQ(saved_bytes.size(), original_bytes.size());
284 for (
size_t i = 0; i < original_bytes.size(); i++) {
285 EXPECT_EQ(saved_bytes[i], original_bytes[i])
286 <<
"Byte mismatch at offset " << i;
296 Room room(0x00, rom_.get());
299 ASSERT_GT(objects.size(), 0) <<
"Room 0x00 should have objects";
302 bool found_type1 =
false;
303 bool found_layer0 =
false;
304 bool found_layer1 =
false;
306 for (
const auto& obj : objects) {
307 if (obj.id_ < 0x100) found_type1 =
true;
308 if (obj.GetLayerValue() == 0) found_layer0 =
true;
309 if (obj.GetLayerValue() == 1) found_layer1 =
true;
312 EXPECT_TRUE(found_type1) <<
"Should have Type 1 objects";
313 EXPECT_TRUE(found_layer0) <<
"Should have Layer 0 objects";
316 for (
const auto& obj : objects) {
317 EXPECT_GE(obj.x(), 0);
318 EXPECT_LE(obj.x(), 63);
319 EXPECT_GE(obj.y(), 0);
320 EXPECT_LE(obj.y(), 63);