1#ifndef YAZE_APP_GFX_PALETTE_H
2#define YAZE_APP_GFX_PALETTE_H
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
13#include "imgui/imgui.h"
39static constexpr absl::string_view kPaletteCategoryNames[] = {
40 "Sword",
"Shield",
"Clothes",
"World Colors",
41 "Area Colors",
"Global Sprites",
"Sprites Aux1",
"Sprites Aux2",
42 "Sprites Aux3",
"Dungeons",
"World Map",
"Dungeon Map",
43 "Triforce",
"Crystal"};
45static constexpr absl::string_view kPaletteGroupNames[] = {
46 "swords",
"shields",
"armors",
"ow_main",
47 "ow_aux",
"global_sprites",
"sprites_aux1",
"sprites_aux2",
48 "sprites_aux3",
"dungeon_main",
"ow_mini_map",
"ow_mini_map",
49 "3d_object",
"3d_object"};
52 "ow_main",
"ow_aux",
"ow_animated",
"hud",
53 "global_sprites",
"armors",
"swords",
"shields",
54 "sprites_aux1",
"sprites_aux2",
"sprites_aux3",
"dungeon_main",
55 "grass",
"3d_object",
"ow_mini_map",
110 template <
typename T>
112 for (
const auto &item : data) {
119 explicit SnesPalette(
const unsigned char *snes_pal);
121 explicit SnesPalette(
const std::vector<snes_color> &);
122 explicit SnesPalette(
const std::vector<SnesColor> &);
124 void Create(
const std::vector<SnesColor> &cols) {
125 for (
const auto &each : cols) {
126 colors.emplace_back(each);
130 void Create(std::ranges::range
auto &&cols) {
131 std::copy(cols.begin(), cols.end(), std::back_inserter(
colors));
140 return absl::InvalidArgumentError(
"SnesPalette: Index out of bounds");
155 std::cout <<
"SNESPalette: Index out of bounds" << std::endl;
163 std::cout <<
"SNESPalette: Index out of bounds" << std::endl;
170 std::cout <<
"SNESPalette: Index out of bounds" << std::endl;
174 colors[i].set_modified(
true);
179 for (
int i = start; i <
end; i++) {
220 std::cout <<
"PaletteGroup: Index out of bounds" << std::endl;
228 std::cout <<
"PaletteGroup: Index out of bounds" << std::endl;
264 if (group_name ==
"ow_main") {
266 }
else if (group_name ==
"ow_aux") {
268 }
else if (group_name ==
"ow_animated") {
270 }
else if (group_name ==
"hud") {
272 }
else if (group_name ==
"global_sprites") {
274 }
else if (group_name ==
"armors") {
276 }
else if (group_name ==
"swords") {
278 }
else if (group_name ==
"shields") {
280 }
else if (group_name ==
"sprites_aux1") {
282 }
else if (group_name ==
"sprites_aux2") {
284 }
else if (group_name ==
"sprites_aux3") {
286 }
else if (group_name ==
"dungeon_main") {
288 }
else if (group_name ==
"grass") {
290 }
else if (group_name ==
"3d_object") {
292 }
else if (group_name ==
"ow_mini_map") {
295 throw std::out_of_range(
"PaletteGroupMap: Group not found");
299 template <
typename Func>
315 return absl::OkStatus();
349 std::vector<SnesColor> &colors);
355 SnesPalette &palette,
int num_colors = 8);
367 PaletteGroupMap &groups);
Shared graphical context across editors.
static std::unordered_map< uint8_t, gfx::Paletteset > palettesets_
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
std::vector< SnesColor > colors
void AddColor(uint16_t color)
void operator()(int i, const SnesColor &color)
auto mutable_color(int i)
void operator()(int i, const ImVec4 &color)
absl::StatusOr< SnesColor > GetColor(int i) const
SnesPalette(const std::vector< T > &data)
void Create(std::ranges::range auto &&cols)
void AddColor(const SnesColor &color)
SnesPalette sub_palette(int start, int end) const
void AddColor(const snes_color &color)
SnesColor & operator[](int i)
void Create(const std::vector< SnesColor > &cols)
int main(int argc, char **argv)
#define RETURN_IF_ERROR(expression)
Contains classes for handling graphical data.
constexpr int kHardcodedGrassSpecial
constexpr int kHudPalettes
constexpr int kOverworldPaletteAux
SnesPalette ReadPaletteFromRom(int offset, int num_colors, const uint8_t *rom)
constexpr int kHardcodedGrassLW
constexpr int kArmorPalettes
constexpr int kCrystalPalette
constexpr const char * kPaletteGroupAddressesKeys[]
constexpr int kShieldPalettes
constexpr int kSpritesPalettesAux2
constexpr int kOverworldPaletteAnimated
constexpr int CustomAreaSpecificBGPalette
constexpr int kOverworldMiniMapPalettes
constexpr int kOverworldPaletteMain
constexpr int kDungeonMapPalettes
constexpr int kSwordPalettes
constexpr int kHardcodedGrassDW
constexpr int kGlobalSpritesLW
constexpr int kSpritesPalettesAux1
std::array< float, 4 > ToFloatArray(const SnesColor &color)
constexpr int kNumPalettes
constexpr int kCustomAreaSpecificBGEnabled
constexpr int kGlobalSpritePalettesDW
constexpr int kSpritesPalettesAux3
constexpr int kDungeonMainPalettes
uint32_t GetPaletteAddress(const std::string &group_name, size_t palette_index, size_t color_index)
constexpr int kDungeonMapBgPalettes
constexpr int kTriforcePalette
absl::Status LoadAllPalettes(const std::vector< uint8_t > &rom_data, PaletteGroupMap &groups)
Loads all the palettes for the game.
constexpr int CustomAreaSpecificBGASM
absl::StatusOr< PaletteGroup > CreatePaletteGroupFromLargePalette(SnesPalette &palette, int num_colors)
Take a SNESPalette, divide it into palettes of 8 colors.
absl::StatusOr< PaletteGroup > CreatePaletteGroupFromColFile(std::vector< SnesColor > &palette_rows)
Main namespace for the application.
Primitive of 16-bit RGB SNES color.
Represents a mapping of palette groups.
PaletteGroup overworld_main
PaletteGroup overworld_aux
absl::Status for_each(Func &&func)
PaletteGroup overworld_mini_map
PaletteGroup sprites_aux1
auto get_group(const std::string &group_name)
PaletteGroup sprites_aux2
PaletteGroup overworld_animated
PaletteGroup sprites_aux3
PaletteGroup dungeon_main
PaletteGroup global_sprites
Represents a group of palettes.
std::vector< SnesPalette > palettes
auto palette(int i) const
void AddColor(SnesColor color)
auto mutable_palette(int i)
const SnesPalette & operator[](int i) const
SnesPalette operator[](int i)
void AddPalette(SnesPalette pal)
PaletteGroup(const std::string &name)
gfx::SnesPalette animated
gfx::SnesPalette composite
gfx::SnesColor background
Paletteset(gfx::SnesPalette main, gfx::SnesPalette animated, gfx::SnesPalette aux1, gfx::SnesPalette aux2, gfx::SnesColor background, gfx::SnesPalette hud, gfx::SnesPalette spr, gfx::SnesPalette spr2, gfx::SnesPalette comp)
Constructor for Paletteset.
Paletteset()=default
Default constructor for Paletteset.