21 result.
warnings.push_back(absl::StrFormat(
22 "High object count (%zu > %d). May cause lag or memory issues.",
27 size_t sprite_count = room.
GetSprites().size();
30 absl::StrFormat(
"Too many sprites (%zu > %d). Game limit is strict.",
39 size_t chest_slot_index = 0;
40 size_t shared_event_slot_index = 0;
41 bool saw_big_key_lock =
false;
42 int first_chest_after_lock = -1;
43 int first_out_of_range_object = -1;
44 size_t first_out_of_range_slot = 0;
45 for (uint8_t list_index = 0; list_index < 3; ++list_index) {
51 if (obj.id_ == kBigKeyLockObjectId) {
52 if (shared_event_slot_index >= kMaxStatefulRoomEventSlots &&
53 first_out_of_range_object < 0) {
54 first_out_of_range_object = obj.id_;
55 first_out_of_range_slot = shared_event_slot_index;
57 saw_big_key_lock =
true;
58 ++shared_event_slot_index;
60 if (chest_slot_index >= kMaxStatefulRoomEventSlots &&
61 first_out_of_range_object < 0) {
62 first_out_of_range_object = obj.id_;
63 first_out_of_range_slot = chest_slot_index;
65 if (saw_big_key_lock && first_chest_after_lock < 0) {
66 first_chest_after_lock = obj.id_;
71 shared_event_slot_index = chest_slot_index;
76 if (first_chest_after_lock >= 0) {
77 result.
warnings.push_back(absl::StrFormat(
78 "Stateful chest 0x%03X appears after big-key lock 0xF98 in "
79 "room-object stream order; move stateful chests before locks to avoid "
80 "room-state slot conflicts.",
81 first_chest_after_lock));
83 if (first_out_of_range_object >= 0) {
84 result.
warnings.push_back(absl::StrFormat(
85 "Stateful object 0x%03X accesses room-event slot %zu; RoomFlagMask "
86 "only defines slots 0-%zu.",
87 first_out_of_range_object, first_out_of_range_slot,
88 kMaxStatefulRoomEventSlots - 1));
96 result.
errors.emplace_back(std::string(status.message()));
102 const int layer =
static_cast<int>(obj.GetLayerValue());
104 result.
errors.push_back(absl::StrFormat(
105 "Special-table object 0x%02X has invalid layer selector %d; "
106 "expected upper/BG1 (0) or lower/BG2 (1)",
111 if (obj.x_ < 0 || obj.x_ >= 64 || obj.y_ < 0 || obj.y_ >= 64) {
112 result.
errors.push_back(absl::StrFormat(
113 "Object 0x%02X out of bounds at (%d, %d)", obj.id_, obj.x_, obj.y_));