yaze
0.3.2
Link to the Past ROM Editor
Loading...
Searching...
No Matches
object_dimensions.h
Go to the documentation of this file.
1
#ifndef YAZE_ZELDA3_DUNGEON_OBJECT_DIMENSIONS_H
2
#define YAZE_ZELDA3_DUNGEON_OBJECT_DIMENSIONS_H
3
4
#include <cstdint>
5
#include <tuple>
6
#include <unordered_map>
7
#include <utility>
8
9
#include "absl/status/status.h"
10
#include "
rom/rom.h
"
11
12
namespace
yaze
{
13
namespace
zelda3 {
14
15
struct
RoomObject;
16
29
class
ObjectDimensionTable
{
30
public
:
31
static
ObjectDimensionTable
&
Get
();
32
33
// Load dimension data from ROM
34
absl::Status
LoadFromRom
(
Rom
* rom);
35
36
// Get base dimensions for an object (without size extension)
37
std::pair<int, int>
GetBaseDimensions
(
int
object_id)
const
;
38
39
// Get full dimensions accounting for size parameter
40
std::pair<int, int>
GetDimensions
(
int
object_id,
int
size)
const
;
41
42
// Get dimensions for selection bounds (without size=0 inflation)
43
// This version caps the size and doesn't use 32-when-zero for display
44
std::pair<int, int>
GetSelectionDimensions
(
int
object_id,
int
size)
const
;
45
46
// Get hit-test bounds in tile coordinates (x, y, width, height)
47
std::tuple<int, int, int, int>
GetHitTestBounds
(
const
RoomObject
& obj)
const
;
48
49
// Check if loaded
50
bool
IsLoaded
()
const
{
return
loaded_
; }
51
52
// Reset state (for testing)
53
void
Reset
() {
54
dimensions_
.clear();
55
loaded_
=
false
;
56
}
57
58
private
:
59
ObjectDimensionTable
() =
default
;
60
61
// Dimension entry: base width/height and extension direction
62
struct
DimensionEntry
{
63
int
base_width
= 1;
// Base width in tiles
64
int
base_height
= 1;
// Base height in tiles
65
// SuperSquare: Uses both size nibbles independently
66
// width = (size_x + 1) * multiplier, height = (size_y + 1) * multiplier
67
enum class
ExtendDir
{
None
,
Horizontal
,
Vertical
,
Both
,
Diagonal
,
SuperSquare
}
extend_dir
=
ExtendDir::None
;
68
int
extend_multiplier
= 1;
// Tiles added per size unit
69
bool
use_32_when_zero
=
false
;
// ASM: GetSize_1to15or32 uses 32 when size=0
70
};
71
72
// Object ID -> dimension entry
73
std::unordered_map<int, DimensionEntry>
dimensions_
;
74
bool
loaded_
=
false
;
75
76
// Initialize default dimensions based on draw routine patterns
77
void
InitializeDefaults
();
78
79
// Parse ROM tables for more accurate dimensions
80
void
ParseSubtype1Tables
(
Rom
* rom);
81
void
ParseSubtype2Tables
(
Rom
* rom);
82
void
ParseSubtype3Tables
(
Rom
* rom);
83
};
84
85
}
// namespace zelda3
86
}
// namespace yaze
87
88
#endif
// YAZE_ZELDA3_DUNGEON_OBJECT_DIMENSIONS_H
yaze::Rom
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition
rom.h:24
yaze::zelda3::ObjectDimensionTable
ROM-based object dimension lookup table.
Definition
object_dimensions.h:29
yaze::zelda3::ObjectDimensionTable::loaded_
bool loaded_
Definition
object_dimensions.h:74
yaze::zelda3::ObjectDimensionTable::GetBaseDimensions
std::pair< int, int > GetBaseDimensions(int object_id) const
Definition
object_dimensions.cc:30
yaze::zelda3::ObjectDimensionTable::GetHitTestBounds
std::tuple< int, int, int, int > GetHitTestBounds(const RoomObject &obj) const
Definition
object_dimensions.cc:148
yaze::zelda3::ObjectDimensionTable::IsLoaded
bool IsLoaded() const
Definition
object_dimensions.h:50
yaze::zelda3::ObjectDimensionTable::ParseSubtype3Tables
void ParseSubtype3Tables(Rom *rom)
Definition
object_dimensions.cc:618
yaze::zelda3::ObjectDimensionTable::LoadFromRom
absl::Status LoadFromRom(Rom *rom)
Definition
object_dimensions.cc:13
yaze::zelda3::ObjectDimensionTable::GetDimensions
std::pair< int, int > GetDimensions(int object_id, int size) const
Definition
object_dimensions.cc:38
yaze::zelda3::ObjectDimensionTable::Reset
void Reset()
Definition
object_dimensions.h:53
yaze::zelda3::ObjectDimensionTable::dimensions_
std::unordered_map< int, DimensionEntry > dimensions_
Definition
object_dimensions.h:73
yaze::zelda3::ObjectDimensionTable::ObjectDimensionTable
ObjectDimensionTable()=default
yaze::zelda3::ObjectDimensionTable::InitializeDefaults
void InitializeDefaults()
Definition
object_dimensions.cc:154
yaze::zelda3::ObjectDimensionTable::ParseSubtype2Tables
void ParseSubtype2Tables(Rom *rom)
Definition
object_dimensions.cc:609
yaze::zelda3::ObjectDimensionTable::Get
static ObjectDimensionTable & Get()
Definition
object_dimensions.cc:8
yaze::zelda3::ObjectDimensionTable::GetSelectionDimensions
std::pair< int, int > GetSelectionDimensions(int object_id, int size) const
Definition
object_dimensions.cc:96
yaze::zelda3::ObjectDimensionTable::ParseSubtype1Tables
void ParseSubtype1Tables(Rom *rom)
Definition
object_dimensions.cc:589
yaze::zelda3::RoomObject
Definition
room_object.h:50
yaze
Definition
patch_export_usage.cc:8
rom.h
yaze::zelda3::ObjectDimensionTable::DimensionEntry
Definition
object_dimensions.h:62
yaze::zelda3::ObjectDimensionTable::DimensionEntry::extend_multiplier
int extend_multiplier
Definition
object_dimensions.h:68
yaze::zelda3::ObjectDimensionTable::DimensionEntry::base_width
int base_width
Definition
object_dimensions.h:63
yaze::zelda3::ObjectDimensionTable::DimensionEntry::base_height
int base_height
Definition
object_dimensions.h:64
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir
ExtendDir
Definition
object_dimensions.h:67
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Vertical
@ Vertical
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::SuperSquare
@ SuperSquare
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Both
@ Both
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::None
@ None
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Diagonal
@ Diagonal
yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir::Horizontal
@ Horizontal
yaze::zelda3::ObjectDimensionTable::DimensionEntry::use_32_when_zero
bool use_32_when_zero
Definition
object_dimensions.h:69
yaze::zelda3::ObjectDimensionTable::DimensionEntry::extend_dir
enum yaze::zelda3::ObjectDimensionTable::DimensionEntry::ExtendDir extend_dir
src
zelda3
dungeon
object_dimensions.h
Generated by
1.10.0