yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
sprite.h
Go to the documentation of this file.
1#ifndef YAZE_APP_ZELDA3_SPRITE_H
2#define YAZE_APP_ZELDA3_SPRITE_H
3
5
6#include <cstdint>
7#include <string>
8#include <vector>
9
10#include "zelda3/common.h"
12
13namespace yaze {
14namespace zelda3 {
15
16// Sprite names defined in sprite.cc to avoid static initialization order issues
17extern const std::string kSpriteDefaultNames[256];
18// Expanded names (from hmagic sprname.dat, 0x11c entries). Might differ in
19// wording/coverage; consumers can choose which to use.
20extern const char* const kSpriteNames[];
21extern const size_t kSpriteNameCount;
22
23// Global preference for using hmagic names when available.
24void SetPreferHmagicSpriteNames(bool prefer);
26
27// Utility to resolve a sprite name; uses hmagic list when enabled and in range,
28// otherwise falls back to the 256-entry defaults.
29const char* ResolveSpriteName(uint16_t id);
30
35class Sprite : public GameEntity {
36 public:
37 Sprite() = default;
38 Sprite(const std::vector<uint8_t>& src, uint8_t overworld_map_id, uint8_t id,
39 uint8_t x, uint8_t y, int map_x, int map_y)
40 : map_id_(static_cast<int>(overworld_map_id)),
41 id_(id),
42 nx_(x),
43 ny_(y),
46 current_gfx_(src) {
48 entity_id_ = id;
49 x_ = map_x_;
50 y_ = map_y_;
51 overworld_ = true;
53 // Defer preview_gfx_ allocation until DrawSpriteTile() is called
54 }
55
56 Sprite(uint8_t id, uint8_t x, uint8_t y, uint8_t subtype, uint8_t layer)
57 : id_(id), nx_(x), ny_(y), subtype_(subtype), layer_(layer) {
58 x_ = x;
59 y_ = y;
61 if (((subtype & 0x07) == 0x07) && id > 0 && id <= 0x1A) {
62 name_ = kOverlordNames[id - 1];
63 overlord_ = 1;
64 }
65 }
66
67 void InitSprite(const std::vector<uint8_t>& src, uint8_t overworld_map_id,
68 uint8_t id, uint8_t x, uint8_t y, int map_x, int map_y) {
69 current_gfx_ = src;
70 overworld_ = true;
71 map_id_ = static_cast<int>(overworld_map_id);
72 id_ = id;
74 entity_id_ = id;
75 x_ = map_x_;
76 y_ = map_y_;
77 nx_ = x;
78 ny_ = y;
80 map_x_ = map_x;
81 map_y_ = map_y;
82 // Defer preview_gfx_ allocation until DrawSpriteTile() is called
83 }
84
85 void Draw();
86 void DrawSpriteTile(int x, int y, int srcx, int srcy, int pal,
87 bool mirror_x = false, bool mirror_y = false,
88 int sizex = 2, int sizey = 2);
89
90 void UpdateMapProperties(uint16_t map_id,
91 const void* context = nullptr) override;
92 void UpdateCoordinates(int map_x, int map_y);
93
94 auto preview_graphics() const { return &preview_gfx_; }
95 auto id() const { return id_; }
96 auto set_id(uint8_t id) { id_ = id; }
97 auto x() const { return x_; }
98 auto y() const { return y_; }
99 auto nx() const { return nx_; }
100 auto ny() const { return ny_; }
101 auto map_id() const { return map_id_; }
102 auto map_x() const { return map_x_; }
103 auto map_y() const { return map_y_; }
104 auto game_state() const { return game_state_; }
105
106 auto layer() const { return layer_; }
107 auto subtype() const { return subtype_; }
108
109 auto width() const { return width_; }
110 auto height() const { return height_; }
111 auto name() { return name_; }
112 auto deleted() const { return deleted_; }
114 auto set_key_drop(int key) { key_drop_ = key; }
115 auto key_drop() const { return key_drop_; }
116
117 // Check if this sprite is an overlord (special sprite type with different limits)
118 bool IsOverlord() const { return overlord_ != 0; }
119
120 // Setters for editable properties
122 void set_layer(int layer) { layer_ = layer; }
123
124 private:
125 uint8_t map_id_;
126 uint8_t game_state_;
127 uint8_t id_;
128 uint8_t nx_;
129 uint8_t ny_;
130 uint8_t overlord_ = 0;
131 uint8_t lower_x_ = 32;
132 uint8_t lower_y_ = 32;
133 uint8_t higher_x_ = 0;
134 uint8_t higher_y_ = 0;
135
136 int width_ = 16;
137 int height_ = 16;
138 int map_x_ = 0;
139 int map_y_ = 0;
140 int layer_ = 0;
141 int subtype_ = 0;
142 int key_drop_ = 0;
143
144 bool deleted_ = false;
146
147 std::string name_;
148 std::vector<uint8_t> preview_gfx_;
149 std::vector<uint8_t> current_gfx_;
150
152};
153
154} // namespace zelda3
155} // namespace yaze
156
157#endif
Base class for all overworld and dungeon entities.
Definition common.h:31
enum yaze::zelda3::GameEntity::EntityType entity_type_
A class for managing sprites in the overworld and underworld.
Definition sprite.h:35
std::vector< uint8_t > preview_gfx_
Definition sprite.h:148
auto id() const
Definition sprite.h:95
void set_subtype(int subtype)
Definition sprite.h:121
uint8_t game_state_
Definition sprite.h:126
Sprite(const std::vector< uint8_t > &src, uint8_t overworld_map_id, uint8_t id, uint8_t x, uint8_t y, int map_x, int map_y)
Definition sprite.h:38
void UpdateMapProperties(uint16_t map_id, const void *context=nullptr) override
Update entity properties based on map position.
Definition sprite.cc:324
auto map_x() const
Definition sprite.h:102
std::string name_
Definition sprite.h:147
void DrawSpriteTile(int x, int y, int srcx, int srcy, int pal, bool mirror_x=false, bool mirror_y=false, int sizex=2, int sizey=2)
Definition sprite.cc:1184
void InitSprite(const std::vector< uint8_t > &src, uint8_t overworld_map_id, uint8_t id, uint8_t x, uint8_t y, int map_x, int map_y)
Definition sprite.h:67
std::vector< uint8_t > current_gfx_
Definition sprite.h:149
SDL_Rect bounding_box_
Definition sprite.h:151
void UpdateCoordinates(int map_x, int map_y)
Definition sprite.cc:331
auto key_drop() const
Definition sprite.h:115
void set_layer(int layer)
Definition sprite.h:122
auto layer() const
Definition sprite.h:106
auto set_key_drop(int key)
Definition sprite.h:114
auto game_state() const
Definition sprite.h:104
bool IsOverlord() const
Definition sprite.h:118
auto map_id() const
Definition sprite.h:101
auto set_id(uint8_t id)
Definition sprite.h:96
auto subtype() const
Definition sprite.h:107
Sprite(uint8_t id, uint8_t x, uint8_t y, uint8_t subtype, uint8_t layer)
Definition sprite.h:56
auto nx() const
Definition sprite.h:99
auto preview_graphics() const
Definition sprite.h:94
auto y() const
Definition sprite.h:98
auto deleted() const
Definition sprite.h:112
auto width() const
Definition sprite.h:109
auto set_deleted(bool deleted)
Definition sprite.h:113
auto x() const
Definition sprite.h:97
auto height() const
Definition sprite.h:110
auto map_y() const
Definition sprite.h:103
auto ny() const
Definition sprite.h:100
const std::string kOverlordNames[26]
Definition sprite.cc:295
const size_t kSpriteNameCount
Definition sprite.cc:292
const std::string kSpriteDefaultNames[256]
Definition sprite.cc:13
const char *const kSpriteNames[]
Definition sprite.cc:291
bool PreferHmagicSpriteNames()
Definition sprite.cc:277
void SetPreferHmagicSpriteNames(bool prefer)
Definition sprite.cc:273
const char * ResolveSpriteName(uint16_t id)
Definition sprite.cc:284
SDL2/SDL3 compatibility layer.