192 bool include_tail = parser.
HasFlag(
"include-tail");
193 bool check_tile16 = parser.
HasFlag(
"check-tile16");
194 bool verbose = parser.
HasFlag(
"verbose");
195 bool is_json = formatter.
IsJson();
202 std::vector<MapValidationResult> results;
203 results.reserve(max_map);
205 ValidationSummary summary;
206 summary.total_maps = max_map;
208 for (
int i = 0; i < max_map; ++i) {
210 ValidateMapPointers(overworld, i, include_tail));
211 results.push_back(result);
213 if (result.skipped) {
214 summary.skipped_maps++;
215 }
else if (result.IsValid()) {
216 summary.valid_maps++;
218 summary.invalid_maps++;
219 if (!result.pointers_valid) {
220 summary.pointer_failures++;
222 if (!result.decompress_low_ok || !result.decompress_high_ok) {
223 summary.decompress_failures++;
230 for (
const auto& result : results) {
233 }
else if (verbose || !result.IsValid()) {
241 formatter.
AddField(
"total_maps", summary.total_maps);
242 formatter.
AddField(
"valid_maps", summary.valid_maps);
243 formatter.
AddField(
"invalid_maps", summary.invalid_maps);
244 formatter.
AddField(
"skipped_maps", summary.skipped_maps);
245 formatter.
AddField(
"pointer_failures", summary.pointer_failures);
246 formatter.
AddField(
"decompress_failures", summary.decompress_failures);
250 auto tile16_result = ValidateTile16Region(rom);
251 formatter.
AddField(
"tile16_uses_expanded", tile16_result.uses_expanded);
253 if (tile16_result.uses_expanded) {
254 formatter.
AddField(
"tile16_suspicious_count",
255 tile16_result.suspicious_count);
261 std::cout <<
"\n=== Validation Summary ===\n";
262 std::cout << absl::StrFormat(
" Total maps: %d\n", summary.total_maps);
263 std::cout << absl::StrFormat(
" Valid: %d\n", summary.valid_maps);
264 std::cout << absl::StrFormat(
" Invalid: %d\n", summary.invalid_maps);
265 std::cout << absl::StrFormat(
" Skipped: %d\n", summary.skipped_maps);
266 if (summary.invalid_maps > 0) {
267 std::cout << absl::StrFormat(
" Pointer failures: %d\n",
268 summary.pointer_failures);
269 std::cout << absl::StrFormat(
" Decompress failures: %d\n",
270 summary.decompress_failures);
274 return absl::OkStatus();