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 private:
118 uint8_t map_id_;
119 uint8_t game_state_;
120 uint8_t id_;
121 uint8_t nx_;
122 uint8_t ny_;
123 uint8_t overlord_ = 0;
124 uint8_t lower_x_ = 32;
125 uint8_t lower_y_ = 32;
126 uint8_t higher_x_ = 0;
127 uint8_t higher_y_ = 0;
128
129 int width_ = 16;
130 int height_ = 16;
131 int map_x_ = 0;
132 int map_y_ = 0;
133 int layer_ = 0;
134 int subtype_ = 0;
135 int key_drop_ = 0;
136
137 bool deleted_ = false;
139
140 std::string name_;
141 std::vector<uint8_t> preview_gfx_;
142 std::vector<uint8_t> current_gfx_;
143
145};
146
147} // namespace zelda3
148} // namespace yaze
149
150#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:141
auto id() const
Definition sprite.h:95
uint8_t game_state_
Definition sprite.h:119
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:140
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:142
SDL_Rect bounding_box_
Definition sprite.h:144
void UpdateCoordinates(int map_x, int map_y)
Definition sprite.cc:331
auto key_drop() const
Definition sprite.h:115
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
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.