1#ifndef YAZE_ZELDA3_OVERWORLD_ZSCREAM_CUSTOM_LAYOUT_H_
2#define YAZE_ZELDA3_OVERWORLD_ZSCREAM_CUSTOM_LAYOUT_H_
9#include "absl/status/status.h"
10#include "absl/status/statusor.h"
41 const auto& bytes = rom.
vector();
65 return "Unmarked layout";
67 return "Vanilla layout marker";
69 return "ZSCustomOverworld V1";
71 return "ZSCustomOverworld V2";
73 return "ZSCustomOverworld V3";
75 return "ZScream V5 per-sheet collisions";
77 return "Unknown ZScream layout marker";
79 return "Unknown ZScream layout marker";
102 return absl::FailedPreconditionError(
103 "Per-sheet collisions require raw ZScream marker 0x05");
106 return absl::OutOfRangeError(
107 "Incomplete ZScream V5 per-sheet collision table");
109 return absl::OkStatus();
117 return absl::InvalidArgumentError(
"Collision sheet ID must be in [0, 128)");
142 for (
size_t slot = 0; slot < sheet_ids.size(); ++slot) {
145 return sheet.status();
147 std::copy(sheet->begin(), sheet->end(),
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
const auto & vector() const
constexpr size_t kSheetCollisionTableSize
std::array< uint8_t, kCollisionsPerSheet > SheetCollisions
constexpr size_t kVersionMarkerPc
constexpr size_t kCollisionSheetCount
constexpr size_t kSheetCollisionTablePc
constexpr size_t kResolvedSheetCount
LayoutDialect DetectLayout(const Rom &rom)
std::array< uint8_t, kTile8CollisionCount > Tile8Collisions
std::array< uint8_t, kResolvedSheetCount > ResolvedSheetIds
bool CanUseTailExpansion(const Rom &rom)
constexpr uint8_t kPerSheetCollisionMarker
absl::StatusOr< SheetCollisions > LoadSheetCollisions(const Rom &rom, int sheet_id)
absl::Status ValidateSheetCollisionTable(const Rom &rom)
absl::StatusOr< Tile8Collisions > ComposeTile8Collisions(const Rom &rom, const ResolvedSheetIds &sheet_ids)
constexpr size_t kCollisionsPerSheet
constexpr size_t kTile8CollisionCount
const char * LayoutName(LayoutDialect dialect)