From 847f602c9e081a42eefa72dd05e8182afe4e1de9 Mon Sep 17 00:00:00 2001 From: cellos51 Date: Sat, 12 Jul 2025 23:39:13 -0400 Subject: [PATCH] Changed the way the selecting/played background works and added logic for changing the background depending on blind type --- graphics/background_gfx.png | Bin 2151 -> 2657 bytes graphics/background_play_gfx.grit | 1 - graphics/background_play_gfx.png | Bin 2164 -> 0 bytes include/blind.h | 6 +++++ source/blind.c | 24 ++++++++++++++--- source/game.c | 43 ++++++++++++++++++++++++++---- 6 files changed, 64 insertions(+), 10 deletions(-) delete mode 100644 graphics/background_play_gfx.grit delete mode 100644 graphics/background_play_gfx.png diff --git a/graphics/background_gfx.png b/graphics/background_gfx.png index 759079d6c89201b2e695ce132e22d1a62705d0d1..d1f8d6da48f2724540889cb8e0f5c083a8434464 100644 GIT binary patch literal 2657 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 diff --git a/include/blind.h b/include/blind.h index b71d5db3..b559e29e 100644 --- a/include/blind.h +++ b/include/blind.h @@ -22,6 +22,11 @@ static const int ante_lut[MAX_ANTE + 1] = {100, 300, 800, 2000, 5000, 11000, 200 #define BIG_BLIND_TID (SMALL_BLIND_TID + 16) #define BOSS_BLIND_TID (BIG_BLIND_TID + 16) +#define BLIND_TEXT_COLOR_INDEX 1 +#define BLIND_SHADOW_COLOR_INDEX 2 +#define BLIND_HIGHLIGHT_COLOR_INDEX 3 +#define BLIND_MAIN_COLOR_INDEX 4 + enum BlindState { BLIND_CURRENT, @@ -34,6 +39,7 @@ void blinds_init(); int blind_get_requirement(int type, int ante); int blind_get_reward(int type); +u16 blind_get_color(int type, int index); Sprite *blind_token_new(int type, int x, int y, int sprite_index); diff --git a/source/blind.c b/source/blind.c index 89eb9f21..79971d30 100644 --- a/source/blind.c +++ b/source/blind.c @@ -4,6 +4,10 @@ #include "blinds_gfx.h" +static const u16 small_blind_token_palette[5] = {0x0000, 0x7FFF, 0x34A1, 0x5DCB, 0x5104}; +static const u16 big_blind_token_palette[5] = {0x0000, 0x2527, 0x15F5, 0x36FC, 0x1E9C}; +static const u16 boss_blind_token_palette[5] = {0x0000, 0x2CC9, 0x3D0D, 0x5E14, 0x5171}; // This variable is temporary, each boss blind will have its own unique palette + void blinds_init() { // Blind graphics (fighting grit every step of the way as usual) @@ -11,15 +15,12 @@ void blinds_init() // Palettes for the blinds (Transparency, Text Color, Shadow, Highlight, Main Color) Use this: http://www.budmelvin.com/dev/15bitconverter.html // Small Blind - const u16 small_blind_token_palette[5] = {0x0000, 0x7FFF, 0x34A1, 0x5DCB, 0x5104}; + memcpy16(&pal_obj_mem[16 * SMALL_BLIND_PB], &small_blind_token_palette, sizeof(small_blind_token_palette) / 2); - // Big Blind - const u16 big_blind_token_palette[5] = {0x0000, 0x2527, 0x15F5, 0x36FC, 0x1E9C}; memcpy16(&pal_obj_mem[16 * BIG_BLIND_PB], &big_blind_token_palette, sizeof(big_blind_token_palette) / 2); // Boss Blind (This is temporary. Each boss blind is unique and will have to have its own graphics and palette which will probably be stored in some huge array) - const u16 boss_blind_token_palette[5] = {0x0000, 0x2CC9, 0x3D0D, 0x5E14, 0x5171}; memcpy16(&pal_obj_mem[16 * BOSS_BLIND_PB], &boss_blind_token_palette, sizeof(boss_blind_token_palette) / 2); } @@ -58,6 +59,21 @@ int blind_get_reward(int type) } } +u16 blind_get_color(int type, int index) +{ + switch (type) + { + case SMALL_BLIND: + return small_blind_token_palette[index]; + case BIG_BLIND: + return big_blind_token_palette[index]; + case BOSS_BLIND: + return boss_blind_token_palette[index]; + default: + return 0; // Invalid type + } +} + Sprite *blind_token_new(int type, int x, int y, int sprite_index) { Sprite *sprite = NULL; diff --git a/source/game.c b/source/game.c index 8bf3790d..8face10e 100644 --- a/source/game.c +++ b/source/game.c @@ -12,7 +12,6 @@ #include "graphic_utils.h" #include "background_gfx.h" -#include "background_play_gfx.h" #include "background_round_end_gfx.h" #include "background_shop_gfx.h" #include "background_blind_select_gfx.h" @@ -370,13 +369,47 @@ void change_background(int id) GRIT_CPY(&se_mem[MAIN_BG_SBB], background_gfxMap); tte_erase_rect_wrapper(HAND_SIZE_RECT_PLAYING); + + for (int y = 0; y < 6; y++) // Copies the blind panel from the bottom of the screen to the top. This code is identical to the one used in game_shop() + { + int y_from = 20 + y; + int y_to = 0 + y; + memcpy16(&se_mem[MAIN_BG_SBB][32 * y_to], &se_mem[MAIN_BG_SBB][32 * y_from], 9); + } + + if (current_blind == BIG_BLIND) // Change text and palette depending on blind type + { + int y_from = 26; + int y_to = 1; + memcpy16(&se_mem[MAIN_BG_SBB][32 * y_to], &se_mem[MAIN_BG_SBB][32 * y_from], 9); + } + else if (current_blind == BOSS_BLIND) + { + + } + + // This would change the palette of the background to match the blind, but the backgroun doesn't use the blind token's exact colors so a different approach is required + // memset16(&pal_bg_mem[17], blind_get_color(current_blind, BLIND_HIGHLIGHT_COLOR_INDEX), 1); + // memset16(&pal_bg_mem[5], blind_get_color(current_blind, BLIND_MAIN_COLOR_INDEX), 1); + // memset16(&pal_bg_mem[13], blind_get_color(current_blind, BLIND_SHADOW_COLOR_INDEX), 1); } else if (id == BG_ID_CARD_PLAYING) { - REG_DISPCNT |= DCNT_WIN0; - memcpy(pal_bg_mem, background_gfxPal, 64); - GRIT_CPY(&tile8_mem[MAIN_BG_CBB], background_gfxTiles); - memcpy(&se_mem[MAIN_BG_SBB], background_play_gfxMap, background_play_gfxMapLen); + // REG_DISPCNT |= DCNT_WIN0; + // memcpy(pal_bg_mem, background_gfxPal, 64); + // GRIT_CPY(&tile8_mem[MAIN_BG_CBB], background_gfxTiles); + // GRIT_CPY(&se_mem[MAIN_BG_SBB], background_gfxMap); + + if (background != BG_ID_CARD_SELECTING) + { + change_background(BG_ID_CARD_SELECTING); + background = BG_ID_CARD_PLAYING; + } + + for (int i = 0; i <= 2; i++) + { + main_bg_se_copy_rect_1_tile_vert(POP_MENU_ANIM_RECT_UP, SE_DOWN); + } tte_erase_rect_wrapper(HAND_SIZE_RECT_SELECT); }