From b88777159388cde9c70ef1ccd2a249a86e4413ec Mon Sep 17 00:00:00 2001 From: scawful Date: Mon, 22 Jul 2024 19:25:18 -0400 Subject: [PATCH] move palette constants to snes_palette --- src/app/core/constants.h | 32 ---------------- src/app/gfx/snes_palette.cc | 76 ++++++++++++++++++------------------- src/app/gfx/snes_palette.h | 29 ++++++++++++++ 3 files changed, 66 insertions(+), 71 deletions(-) diff --git a/src/app/core/constants.h b/src/app/core/constants.h index 00288e43..a5e37676 100644 --- a/src/app/core/constants.h +++ b/src/app/core/constants.h @@ -204,38 +204,6 @@ constexpr int GravesCountOnY = 0x499E0; // Byte 0x09 entries constexpr int GraveLinkSpecialHole = 0x46DD9; // short constexpr int GraveLinkSpecialStairs = 0x46DE0; // short -// ============================================================================ -// Palettes Related Variables - This contain all the palettes of the game -// ============================================================================ -constexpr int overworldPaletteMain = 0xDE6C8; -constexpr int overworldPaletteAuxialiary = 0xDE86C; -constexpr int overworldPaletteAnimated = 0xDE604; -constexpr int globalSpritePalettesLW = 0xDD218; -constexpr int globalSpritePalettesDW = 0xDD290; -// Green, Blue, Red, Bunny, Electrocuted (15 colors each) -constexpr int armorPalettes = 0xDD308; -constexpr int spritePalettesAux1 = 0xDD39E; // 7 colors each -constexpr int spritePalettesAux2 = 0xDD446; // 7 colors each -constexpr int spritePalettesAux3 = 0xDD4E0; // 7 colors each -constexpr int swordPalettes = 0xDD630; // 3 colors each - 4 entries -constexpr int shieldPalettes = 0xDD648; // 4 colors each - 3 entries -constexpr int hudPalettes = 0xDD660; -constexpr int dungeonMapPalettes = 0xDD70A; // 21 colors -constexpr int dungeonMainPalettes = 0xDD734; //(15*6) colors each - 20 entries -constexpr int dungeonMapBgPalettes = 0xDE544; // 16*6 -// Mirrored Value at 0x75645 : 0x75625 -constexpr int hardcodedGrassLW = 0x5FEA9; -constexpr int hardcodedGrassDW = 0x05FEB3; // 0x7564F -constexpr int hardcodedGrassSpecial = 0x75640; -constexpr int overworldMiniMapPalettes = 0x55B27; -constexpr int triforcePalette = 0x64425; -constexpr int crystalPalette = 0xF4CD3; -constexpr int customAreaSpecificBGPalette = - 0x140000; // 2 bytes for each overworld area (320) -constexpr int customAreaSpecificBGASM = 0x140150; -constexpr int customAreaSpecificBGEnabled = - 0x140140; // 1 byte, not 0 if enabled - // ============================================================================ // Names // ============================================================================ diff --git a/src/app/gfx/snes_palette.cc b/src/app/gfx/snes_palette.cc index 8ce92f6d..eb5f75de 100644 --- a/src/app/gfx/snes_palette.cc +++ b/src/app/gfx/snes_palette.cc @@ -30,7 +30,7 @@ absl::Status LoadOverworldMainPalettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 6; i++) { RETURN_IF_ERROR(palette_groups.overworld_main.AddPalette( - gfx::ReadPaletteFromRom(core::overworldPaletteMain + (i * (35 * 2)), + gfx::ReadPaletteFromRom(kOverworldPaletteMain + (i * (35 * 2)), /*num_colors*/ 35, data))) } return absl::OkStatus(); @@ -40,10 +40,9 @@ absl::Status LoadOverworldAuxiliaryPalettes( const Bytes& rom_data, gfx::PaletteGroupMap& palette_groups) { auto data = rom_data.data(); for (int i = 0; i < 20; i++) { - RETURN_IF_ERROR( - palette_groups.overworld_aux.AddPalette(gfx::ReadPaletteFromRom( - core::overworldPaletteAuxialiary + (i * (21 * 2)), - /*num_colors*/ 21, data))) + RETURN_IF_ERROR(palette_groups.overworld_aux.AddPalette( + gfx::ReadPaletteFromRom(kOverworldPaletteAux + (i * (21 * 2)), + /*num_colors*/ 21, data))) } return absl::OkStatus(); } @@ -54,7 +53,7 @@ absl::Status LoadOverworldAnimatedPalettes( for (int i = 0; i < 14; i++) { RETURN_IF_ERROR( palette_groups.overworld_animated.AddPalette(gfx::ReadPaletteFromRom( - core::overworldPaletteAnimated + (i * (7 * 2)), 7, data))) + kOverworldPaletteAnimated + (i * (7 * 2)), 7, data))) } return absl::OkStatus(); } @@ -64,7 +63,7 @@ absl::Status LoadHUDPalettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 2; i++) { RETURN_IF_ERROR(palette_groups.hud.AddPalette( - gfx::ReadPaletteFromRom(core::hudPalettes + (i * 64), 32, data))) + gfx::ReadPaletteFromRom(kHudPalettes + (i * 64), 32, data))) } return absl::OkStatus(); } @@ -73,9 +72,9 @@ absl::Status LoadGlobalSpritePalettes(const Bytes& rom_data, gfx::PaletteGroupMap& palette_groups) { auto data = rom_data.data(); RETURN_IF_ERROR(palette_groups.global_sprites.AddPalette( - gfx::ReadPaletteFromRom(core::globalSpritePalettesLW, 60, data))) + gfx::ReadPaletteFromRom(kGlobalSpritesLW, 60, data))) RETURN_IF_ERROR(palette_groups.global_sprites.AddPalette( - gfx::ReadPaletteFromRom(core::globalSpritePalettesDW, 60, data))) + gfx::ReadPaletteFromRom(globalSpritePalettesDW, 60, data))) return absl::OkStatus(); } @@ -84,7 +83,7 @@ absl::Status LoadArmorPalettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 5; i++) { RETURN_IF_ERROR(palette_groups.armors.AddPalette( - gfx::ReadPaletteFromRom(core::armorPalettes + (i * 30), 15, data))) + gfx::ReadPaletteFromRom(kArmorPalettes + (i * 30), 15, data))) } return absl::OkStatus(); } @@ -94,7 +93,7 @@ absl::Status LoadSwordPalettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 4; i++) { RETURN_IF_ERROR(palette_groups.swords.AddPalette( - gfx::ReadPaletteFromRom(core::swordPalettes + (i * 6), 3, data))) + gfx::ReadPaletteFromRom(kSwordPalettes + (i * 6), 3, data))) } return absl::OkStatus(); } @@ -104,7 +103,7 @@ absl::Status LoadShieldPalettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 3; i++) { RETURN_IF_ERROR(palette_groups.shields.AddPalette( - gfx::ReadPaletteFromRom(core::shieldPalettes + (i * 8), 4, data))) + gfx::ReadPaletteFromRom(kShieldPalettes + (i * 8), 4, data))) } return absl::OkStatus(); } @@ -114,7 +113,7 @@ absl::Status LoadSpriteAux1Palettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 12; i++) { RETURN_IF_ERROR(palette_groups.sprites_aux1.AddPalette( - gfx::ReadPaletteFromRom(core::spritePalettesAux1 + (i * 14), 7, data))) + gfx::ReadPaletteFromRom(kSpritesPalettesAux1 + (i * 14), 7, data))) } return absl::OkStatus(); } @@ -124,7 +123,7 @@ absl::Status LoadSpriteAux2Palettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 11; i++) { RETURN_IF_ERROR(palette_groups.sprites_aux2.AddPalette( - gfx::ReadPaletteFromRom(core::spritePalettesAux2 + (i * 14), 7, data))) + gfx::ReadPaletteFromRom(kSpritesPalettesAux2 + (i * 14), 7, data))) } return absl::OkStatus(); } @@ -134,7 +133,7 @@ absl::Status LoadSpriteAux3Palettes(const Bytes& rom_data, auto data = rom_data.data(); for (int i = 0; i < 24; i++) { RETURN_IF_ERROR(palette_groups.sprites_aux3.AddPalette( - gfx::ReadPaletteFromRom(core::spritePalettesAux3 + (i * 14), 7, data))) + gfx::ReadPaletteFromRom(kSpritesPalettesAux3 + (i * 14), 7, data))) } return absl::OkStatus(); } @@ -143,9 +142,8 @@ absl::Status LoadDungeonMainPalettes(const Bytes& rom_data, gfx::PaletteGroupMap& palette_groups) { auto data = rom_data.data(); for (int i = 0; i < 20; i++) { - RETURN_IF_ERROR( - palette_groups.dungeon_main.AddPalette(gfx::ReadPaletteFromRom( - core::dungeonMainPalettes + (i * 180), 90, data))) + RETURN_IF_ERROR(palette_groups.dungeon_main.AddPalette( + gfx::ReadPaletteFromRom(kDungeonMainPalettes + (i * 180), 90, data))) } return absl::OkStatus(); } @@ -153,11 +151,11 @@ absl::Status LoadDungeonMainPalettes(const Bytes& rom_data, absl::Status LoadGrassColors(const Bytes& rom_data, gfx::PaletteGroupMap& palette_groups) { RETURN_IF_ERROR(palette_groups.grass.AddColor( - gfx::ReadColorFromRom(core::hardcodedGrassLW, rom_data.data()))) + gfx::ReadColorFromRom(kHardcodedGrassLW, rom_data.data()))) RETURN_IF_ERROR(palette_groups.grass.AddColor( - gfx::ReadColorFromRom(core::hardcodedGrassDW, rom_data.data()))) + gfx::ReadColorFromRom(hardcodedGrassDW, rom_data.data()))) RETURN_IF_ERROR(palette_groups.grass.AddColor( - gfx::ReadColorFromRom(core::hardcodedGrassSpecial, rom_data.data()))) + gfx::ReadColorFromRom(hardcodedGrassSpecial, rom_data.data()))) return absl::OkStatus(); } @@ -165,9 +163,9 @@ absl::Status Load3DObjectPalettes(const Bytes& rom_data, gfx::PaletteGroupMap& palette_groups) { auto data = rom_data.data(); RETURN_IF_ERROR(palette_groups.object_3d.AddPalette( - gfx::ReadPaletteFromRom(core::triforcePalette, 8, data))) + gfx::ReadPaletteFromRom(kTriforcePalette, 8, data))) RETURN_IF_ERROR(palette_groups.object_3d.AddPalette( - gfx::ReadPaletteFromRom(core::crystalPalette, 8, data))) + gfx::ReadPaletteFromRom(crystalPalette, 8, data))) return absl::OkStatus(); } @@ -177,28 +175,28 @@ absl::Status LoadOverworldMiniMapPalettes( for (int i = 0; i < 2; i++) { RETURN_IF_ERROR( palette_groups.overworld_mini_map.AddPalette(gfx::ReadPaletteFromRom( - core::overworldMiniMapPalettes + (i * 256), 128, data))) + kOverworldMiniMapPalettes + (i * 256), 128, data))) } return absl::OkStatus(); } } // namespace palette_group_internal const absl::flat_hash_map kPaletteGroupAddressMap = { - {"ow_main", core::overworldPaletteMain}, - {"ow_aux", core::overworldPaletteAuxialiary}, - {"ow_animated", core::overworldPaletteAnimated}, - {"hud", core::hudPalettes}, - {"global_sprites", core::globalSpritePalettesLW}, - {"armors", core::armorPalettes}, - {"swords", core::swordPalettes}, - {"shields", core::shieldPalettes}, - {"sprites_aux1", core::spritePalettesAux1}, - {"sprites_aux2", core::spritePalettesAux2}, - {"sprites_aux3", core::spritePalettesAux3}, - {"dungeon_main", core::dungeonMainPalettes}, - {"grass", core::hardcodedGrassLW}, - {"3d_object", core::triforcePalette}, - {"ow_mini_map", core::overworldMiniMapPalettes}, + {"ow_main", kOverworldPaletteMain}, + {"ow_aux", kOverworldPaletteAux}, + {"ow_animated", kOverworldPaletteAnimated}, + {"hud", kHudPalettes}, + {"global_sprites", kGlobalSpritesLW}, + {"armors", kArmorPalettes}, + {"swords", kSwordPalettes}, + {"shields", kShieldPalettes}, + {"sprites_aux1", kSpritesPalettesAux1}, + {"sprites_aux2", kSpritesPalettesAux2}, + {"sprites_aux3", kSpritesPalettesAux3}, + {"dungeon_main", kDungeonMainPalettes}, + {"grass", kHardcodedGrassLW}, + {"3d_object", kTriforcePalette}, + {"ow_mini_map", kOverworldMiniMapPalettes}, }; const absl::flat_hash_map kPaletteGroupColorCounts = { diff --git a/src/app/gfx/snes_palette.h b/src/app/gfx/snes_palette.h index bca6d6c1..0403f999 100644 --- a/src/app/gfx/snes_palette.h +++ b/src/app/gfx/snes_palette.h @@ -59,6 +59,35 @@ constexpr const char* kPaletteGroupAddressesKeys[] = { "grass", "3d_object", "ow_mini_map", }; +constexpr int kOverworldPaletteMain = 0xDE6C8; +constexpr int kOverworldPaletteAux = 0xDE86C; +constexpr int kOverworldPaletteAnimated = 0xDE604; +constexpr int kGlobalSpritesLW = 0xDD218; +constexpr int globalSpritePalettesDW = 0xDD290; +// Green, Blue, Red, Bunny, Electrocuted (15 colors each) +constexpr int kArmorPalettes = 0xDD308; +constexpr int kSpritesPalettesAux1 = 0xDD39E; // 7 colors each +constexpr int kSpritesPalettesAux2 = 0xDD446; // 7 colors each +constexpr int kSpritesPalettesAux3 = 0xDD4E0; // 7 colors each +constexpr int kSwordPalettes = 0xDD630; // 3 colors each - 4 entries +constexpr int kShieldPalettes = 0xDD648; // 4 colors each - 3 entries +constexpr int kHudPalettes = 0xDD660; +constexpr int dungeonMapPalettes = 0xDD70A; // 21 colors +constexpr int kDungeonMainPalettes = 0xDD734; //(15*6) colors each - 20 entries +constexpr int dungeonMapBgPalettes = 0xDE544; // 16*6 +// Mirrored Value at 0x75645 : 0x75625 +constexpr int kHardcodedGrassLW = 0x5FEA9; +constexpr int hardcodedGrassDW = 0x05FEB3; // 0x7564F +constexpr int hardcodedGrassSpecial = 0x75640; +constexpr int kOverworldMiniMapPalettes = 0x55B27; +constexpr int kTriforcePalette = 0x64425; +constexpr int crystalPalette = 0xF4CD3; +// 2 bytes for each overworld area (320) +constexpr int customAreaSpecificBGPalette = 0x140000; +constexpr int customAreaSpecificBGASM = 0x140150; +// 1 byte, not 0 if enabled +constexpr int customAreaSpecificBGEnabled = 0x140140; + /** * @brief Primitive of a SNES color palette. */