1#ifndef YAZE_APP_GFX_PALETTE_H
2#define YAZE_APP_GFX_PALETTE_H
12#include "absl/status/status.h"
13#include "absl/status/statusor.h"
15#include "imgui/imgui.h"
41static constexpr absl::string_view kPaletteCategoryNames[] = {
42 "Sword",
"Shield",
"Clothes",
"World Colors",
43 "Area Colors",
"Global Sprites",
"Sprites Aux1",
"Sprites Aux2",
44 "Sprites Aux3",
"Dungeons",
"World Map",
"Dungeon Map",
45 "Triforce",
"Crystal"};
47static constexpr absl::string_view kPaletteGroupNames[] = {
48 "swords",
"shields",
"armors",
"ow_main",
49 "ow_aux",
"global_sprites",
"sprites_aux1",
"sprites_aux2",
50 "sprites_aux3",
"dungeon_main",
"ow_mini_map",
"ow_mini_map",
51 "3d_object",
"3d_object"};
54 "ow_main",
"ow_aux",
"ow_animated",
"hud",
55 "global_sprites",
"armors",
"swords",
"shields",
56 "sprites_aux1",
"sprites_aux2",
"sprites_aux3",
"dungeon_main",
57 "grass",
"3d_object",
"ow_mini_map",
168 if (start >=
size_) {
171 length = std::min(length,
size_ - start);
172 for (
size_t i = 0; i < length; ++i) {
182 for (
size_t i = 0; i <
size_; ++i) {
228 std::cout <<
"PaletteGroup: Index out of bounds" << std::endl;
236 std::cout <<
"PaletteGroup: Index out of bounds" << std::endl;
272 if (group_name ==
"ow_main") {
274 }
else if (group_name ==
"ow_aux") {
276 }
else if (group_name ==
"ow_animated") {
278 }
else if (group_name ==
"hud") {
280 }
else if (group_name ==
"global_sprites") {
282 }
else if (group_name ==
"armors") {
284 }
else if (group_name ==
"swords") {
286 }
else if (group_name ==
"shields") {
288 }
else if (group_name ==
"sprites_aux1") {
290 }
else if (group_name ==
"sprites_aux2") {
292 }
else if (group_name ==
"sprites_aux3") {
294 }
else if (group_name ==
"dungeon_main") {
296 }
else if (group_name ==
"grass") {
298 }
else if (group_name ==
"3d_object") {
300 }
else if (group_name ==
"ow_mini_map") {
303 throw std::out_of_range(
"PaletteGroupMap: Group not found");
307 template <
typename Func>
323 return absl::OkStatus();
357 std::vector<SnesColor>& colors);
363 SnesPalette& palette,
int num_colors = 8);
375 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).
void AddColor(const SnesColor &color)
static constexpr size_t kMaxColors
std::array< SnesColor, kMaxColors > ColorArray
SnesPalette sub_palette(size_t start, size_t length) const
void set_size(size_t size)
SnesColor & operator[](size_t index)
bool operator!=(const SnesPalette &other) const
void UpdateColor(size_t index, const SnesColor &color)
const SnesColor & operator[](size_t index) const
bool operator==(const SnesPalette &other) const
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
constexpr int Object3DPalettesMax
SnesPalette ReadPaletteFromRom(int offset, int num_colors, const uint8_t *rom)
constexpr int kHardcodedGrassLW
constexpr int kArmorPalettes
constexpr int kCrystalPalette
constexpr int HudPalettesMax
constexpr int OverworldAnimatedPalettesMax
constexpr int SpritesAux3PalettesMax
constexpr int SpritesAux1PalettesMax
constexpr int DungeonsMainPalettesMax
constexpr int OverworldGrassPalettesMax
constexpr int OverworldMiniMapPalettesMax
constexpr int SpritesAux2PalettesMax
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 ShieldsPalettesMax
constexpr int ArmorPalettesMax
constexpr int kGlobalSpritesLW
constexpr int kSpritesPalettesAux1
constexpr int OverworldAuxPalettesMax
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 SwordsPalettesMax
constexpr int OverworldBackgroundPaletteMax
constexpr int CustomAreaSpecificBGASM
constexpr int OverworldMainPalettesMax
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)
constexpr int GlobalSpritePalettesMax
Main namespace for the application.
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.