PR Feedback

This commit is contained in:
Drew
2025-10-08 01:27:15 -05:00
parent 1f40279a36
commit 4e0d72ca8a
2 changed files with 143 additions and 187 deletions
-3
View File
@@ -67,9 +67,6 @@
// By default TTE characters occupy a single tile // By default TTE characters occupy a single tile
#define TTE_CHAR_SIZE TILE_SIZE #define TTE_CHAR_SIZE TILE_SIZE
// Some defines for common register bits
#define SE_HORIZONTAL_FLIP 0x0400
// When making this, missed that it already exists in tonc_math.h // When making this, missed that it already exists in tonc_math.h
typedef RECT Rect; typedef RECT Rect;
+143 -184
View File
@@ -5,6 +5,7 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include "tonc_memdef.h"
#include "tonc_memmap.h" #include "tonc_memmap.h"
#include "util.h" #include "util.h"
#include "sprite.h" #include "sprite.h"
@@ -30,39 +31,6 @@
#include "list.h" #include "list.h"
// This could go in game.h or some other header somewhere
// but it's essentially private to this file, so might as well
// leave it.
typedef enum
{
PLAY_HAND_BTN_SELECTED_BORDER = 1,
BOSS_BLIND_PRIMARY = 1,
BLIND_BG_SHADOW = 2,
MAIN_MENU_PLAY_BUTTON_OUTLINE = 2,
REROLL_BTN = 3,
BLIND_BG_SECONDARY = 5,
BLIND_SKIP_BTN = 5, // 5, in the blind select, is the score multiplier and deck PID index also. In shop it's the next round selected border.
MAIN_MENU_PLAY_BUTTON_MAIN_COLOR = 5,
NEXT_ROUND_BTN_SELECTED_BORDER = 5,
SHOP_PANEL_SHADOW = 6,
BOSS_BLIND_SHADOW = 7,
PLAY_HAND_BTN = 7,
REROLL_BTN_SELECTED_BORDER = 7,
SHOP_LIGHTS_1 = 8,
DISCARD_BTN_SELECTED_BORDER = 9,
BLIND_SKIP_BTN_SELECTED_BORDER = 10,
DISCARD_BTN = 12, // 12 appears to also be the score multiplier, discard button, and deck PID index
SHOP_LIGHTS_2 = 14,
BLIND_SELECT_BTN = 15,
NEXT_ROUND_BTN = 16, // 16, in shop, is the next round button, multiplier, and deck PID.
SHOP_LIGHTS_3 = 17,
BLIND_SELECT_BTN_SELECTED_BORDER = 18,
BLIND_BG_PRIMARY = 19,
REWARD_PANEL_BORDER = 19,
SHOP_LIGHTS_4 = 22,
SHOP_BOTTOM_PANEL_BORDER = 26
} _UIElementPID;
typedef enum typedef enum
{ {
GAME_SHOP_INTRO, GAME_SHOP_INTRO,
@@ -319,6 +287,11 @@ static const Rect GAME_WIN_MSG_TEXT_RECT = {112, 72, UNDEFINED, UNDE
static const BG_POINT HELD_JOKERS_POS = {108, 10}; static const BG_POINT HELD_JOKERS_POS = {108, 10};
static const BG_POINT JOKER_DISCARD_TARGET = {240, 30}; static const BG_POINT JOKER_DISCARD_TARGET = {240, 30};
static const BG_POINT CARD_DRAW_POS = {208, 110};
static const BG_POINT CUR_BLIND_TOKEN_POS = {8, 18};
static const BG_POINT CARD_DISCARD_PNT = {240, 70};
static const BG_POINT HAND_START_POS = {120, 90};
static const BG_POINT MAIN_MENU_ACE_T = {88, 26};
#define ITEM_SHOP_Y 71 // TODO: Needs to be a rect? #define ITEM_SHOP_Y 71 // TODO: Needs to be a rect?
@@ -341,52 +314,10 @@ static const BG_POINT JOKER_DISCARD_TARGET = {240, 30};
#define TEN_K 10000 #define TEN_K 10000
#define ONE_K 1000 #define ONE_K 1000
#define CARD_DRAW_POS_X 208
#define CARD_DRAW_POS_Y 110
#define CUR_BLIND_TOKEN_POS_X 8
#define CUR_BLIND_TOKEN_POS_Y 18
#define MAIN_MENU_ACE_TX 88
#define MAIN_MENU_ACE_TY 26
#define CARD_DISCARD_PNT_X 240
#define CARD_DISCARD_PNT_Y 70
#define HAND_START_POS_X 120
#define HAND_START_POS_Y 90
#define CARD_FOCUSED_UNSEL_Y 10 #define CARD_FOCUSED_UNSEL_Y 10
#define CARD_UNFOCUSED_SEL_Y 15 #define CARD_UNFOCUSED_SEL_Y 15
#define CARD_FOCUSED_SEL_Y 20 #define CARD_FOCUSED_SEL_Y 20
// Hand chip value def
#define HIGH_CARD_CHIPS 5
#define PAIR_CHIPS 10
#define TWO_PAIR_CHIPS 20
#define THREE_OAK_CHIPS 30
#define STRAIGHT_CHIPS 30
#define FLUSH_CHIPS 35
#define FULL_HOUSE_CHIPS 40
#define FOUR_OAK_CHIPS 60
#define STRAIGHT_FLUSH_CHIPS 100
#define ROYAL_FLUSH_CHIPS 100
#define FIVE_OAK_CHIPS 120
#define FLUSH_HOUSE_CHIPS 140
#define FLUSH_FIVE_CHIPS 160
#define NONE_CHIPS 0
// Hand mult value defs
#define HIGH_CARD_MULT 1
#define PAIR_MULT 2
#define TWO_PAIR_MULT 2
#define THREE_OAK_MULT 3
#define STRAIGHT_MULT 4
#define FLUSH_MULT 4
#define FULL_HOUSE_MULT 4
#define FOUR_OAK_MULT 7
#define STRAIGHT_FLUSH_MULT 8
#define ROYAL_FLUSH_MULT 8
#define FIVE_OAK_MULT 12
#define FLUSH_HOUSE_MULT 14
#define FLUSH_FIVE_MULT 16
#define NONE_MULT 0
// Timer defs // Timer defs
#define TM_ZERO 0 #define TM_ZERO 0
#define TM_RESET_STATIC_VARS 30 #define TM_RESET_STATIC_VARS 30
@@ -407,6 +338,35 @@ static const BG_POINT JOKER_DISCARD_TARGET = {240, 30};
#define TM_BLIND_SELECT_START 1 #define TM_BLIND_SELECT_START 1
#define TM_END_ANIM_SEQ 12 #define TM_END_ANIM_SEQ 12
// Palette IDs
#define PLAY_HAND_BTN_SELECTED_BORDER_PID 1
#define BOSS_BLIND_PRIMARY_PID 1
#define BLIND_BG_SHADOW_PID 2
#define MAIN_MENU_PLAY_BUTTON_OUTLINE_PID 2
#define REROLL_BTN_PID 3
#define BLIND_BG_SECONDARY_PID 5
#define BLIND_SKIP_BTN_PID 5
#define MAIN_MENU_PLAY_BUTTON_MAIN_COLOR_PID 5
#define NEXT_ROUND_BTN_SELECTED_BORDER_PID 5
#define SHOP_PANEL_SHADOW_PID 6
#define BOSS_BLIND_SHADOW_PID 7
#define PLAY_HAND_BTN_PID 7
#define REROLL_BTN_SELECTED_BORDER_PID 7
#define SHOP_LIGHTS_1_PID 8
#define DISCARD_BTN_SELECTED_BORDER_PID 9
#define BLIND_SKIP_BTN_SELECTED_BORDER_PID 10
#define DISCARD_BTN_PID 12
#define SHOP_LIGHTS_2_PID 14
#define BLIND_SELECT_BTN_PID 15
#define NEXT_ROUND_BTN_PID 16
#define SHOP_LIGHTS_3_PID 17
#define BLIND_SELECT_BTN_SELECTED_BORDER_PID 18
#define BLIND_BG_PRIMARY_PID 19
#define REWARD_PANEL_BORDER_PID 19
#define SHOP_LIGHTS_4_PID 22
#define SHOP_BOTTOM_PANEL_BORDER_PID 26
// Naming the stage where cards return from the discard pile to the deck "undiscard" // Naming the stage where cards return from the discard pile to the deck "undiscard"
// General functions // General functions
@@ -602,13 +562,13 @@ void change_background(int id)
bg_copy_current_item_to_top_left_panel(); bg_copy_current_item_to_top_left_panel();
// 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 // 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[BLIND_BG_PRIMARY], blind_get_color(current_blind, BLIND_BACKGROUND_MAIN_COLOR_INDEX), 1); memset16(&pal_bg_mem[BLIND_BG_PRIMARY_PID], blind_get_color(current_blind, BLIND_BACKGROUND_MAIN_COLOR_INDEX), 1);
memset16(&pal_bg_mem[BLIND_BG_SECONDARY], blind_get_color(current_blind, BLIND_BACKGROUND_SECONDARY_COLOR_INDEX), 1); memset16(&pal_bg_mem[BLIND_BG_SECONDARY_PID], blind_get_color(current_blind, BLIND_BACKGROUND_SECONDARY_COLOR_INDEX), 1);
memset16(&pal_bg_mem[BLIND_BG_SHADOW], blind_get_color(current_blind, BLIND_BACKGROUND_SHADOW_COLOR_INDEX), 1); memset16(&pal_bg_mem[BLIND_BG_SHADOW_PID], blind_get_color(current_blind, BLIND_BACKGROUND_SHADOW_COLOR_INDEX), 1);
// Copy the Play Hand and Discard button colors to their selection highlights // Copy the Play Hand and Discard button colors to their selection highlights
memcpy16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER], &pal_bg_mem[PLAY_HAND_BTN], 1); memcpy16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER_PID], &pal_bg_mem[PLAY_HAND_BTN_PID], 1);
memcpy16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER], &pal_bg_mem[DISCARD_BTN], 1); memcpy16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER_PID], &pal_bg_mem[DISCARD_BTN_PID], 1);
} }
} }
else if (id == BG_ID_CARD_PLAYING) else if (id == BG_ID_CARD_PLAYING)
@@ -651,16 +611,16 @@ void change_background(int id)
GRIT_CPY(&se_mem[MAIN_BG_SBB], background_shop_gfxMap); GRIT_CPY(&se_mem[MAIN_BG_SBB], background_shop_gfxMap);
// Set the outline colors for the shop background. This is used for the alternate shop palettes when opening packs // Set the outline colors for the shop background. This is used for the alternate shop palettes when opening packs
memset16(&pal_bg_mem[SHOP_BOTTOM_PANEL_BORDER], 0x213D, 1); memset16(&pal_bg_mem[SHOP_BOTTOM_PANEL_BORDER_PID], 0x213D, 1);
memset16(&pal_bg_mem[SHOP_PANEL_SHADOW], 0x10B4, 1); memset16(&pal_bg_mem[SHOP_PANEL_SHADOW_PID], 0x10B4, 1);
memset16(&pal_bg_mem[SHOP_LIGHTS_2], 0x32BE, 1); // Reset the shop lights to correct colors memset16(&pal_bg_mem[SHOP_LIGHTS_2_PID], 0x32BE, 1); // Reset the shop lights to correct colors
memset16(&pal_bg_mem[SHOP_LIGHTS_3], 0x4B5F, 1); memset16(&pal_bg_mem[SHOP_LIGHTS_3_PID], 0x4B5F, 1);
memset16(&pal_bg_mem[SHOP_LIGHTS_4], 0x5F9F, 1); memset16(&pal_bg_mem[SHOP_LIGHTS_4_PID], 0x5F9F, 1);
memset16(&pal_bg_mem[SHOP_LIGHTS_1], 0xFFFF, 1); memset16(&pal_bg_mem[SHOP_LIGHTS_1_PID], HIGHLIGHT_COLOR, 1);
memcpy16(&pal_bg_mem[REROLL_BTN_SELECTED_BORDER], &pal_bg_mem[REROLL_BTN], 1); // Disable the button highlight colors memcpy16(&pal_bg_mem[REROLL_BTN_SELECTED_BORDER_PID], &pal_bg_mem[REROLL_BTN_PID], 1); // Disable the button highlight colors
memcpy16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER], &pal_bg_mem[NEXT_ROUND_BTN], 1); memcpy16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER_PID], &pal_bg_mem[NEXT_ROUND_BTN_PID], 1);
} }
else if (id == BG_ID_BLIND_SELECT) else if (id == BG_ID_BLIND_SELECT)
{ {
@@ -680,17 +640,17 @@ void change_background(int id)
GRIT_CPY(&se_mem[MAIN_BG_SBB], background_blind_select_gfxMap); GRIT_CPY(&se_mem[MAIN_BG_SBB], background_blind_select_gfxMap);
// Copy boss blind colors to blind select palette // Copy boss blind colors to blind select palette
memset16(&pal_bg_mem[BOSS_BLIND_PRIMARY], blind_get_color(BOSS_BLIND, BLIND_BACKGROUND_MAIN_COLOR_INDEX), 1); memset16(&pal_bg_mem[BOSS_BLIND_PRIMARY_PID], blind_get_color(BOSS_BLIND, BLIND_BACKGROUND_MAIN_COLOR_INDEX), 1);
memset16(&pal_bg_mem[BOSS_BLIND_SHADOW], blind_get_color(BOSS_BLIND, BLIND_BACKGROUND_SHADOW_COLOR_INDEX), 1); memset16(&pal_bg_mem[BOSS_BLIND_SHADOW_PID], blind_get_color(BOSS_BLIND, BLIND_BACKGROUND_SHADOW_COLOR_INDEX), 1);
// Disable the button highlight colors // Disable the button highlight colors
// Select button PID is 15 and the outline is 18 // Select button PID is 15 and the outline is 18
memcpy16(&pal_bg_mem[BLIND_SELECT_BTN_SELECTED_BORDER], &pal_bg_mem[BLIND_SELECT_BTN], 1); memcpy16(&pal_bg_mem[BLIND_SELECT_BTN_SELECTED_BORDER_PID], &pal_bg_mem[BLIND_SELECT_BTN_PID], 1);
// It seems the skip button (and score multiplier and deck) PB idx is // It seems the skip button (and score multiplier and deck) PB idx is
// actually 5, not 10. 10 is the selected border color // actually 5, not 10. 10 is the selected border color
// Setting this palette value though doesn't seem to have an // Setting this palette value though doesn't seem to have an
// effect. // effect.
memcpy16(&pal_bg_mem[BLIND_SKIP_BTN_SELECTED_BORDER], &pal_bg_mem[BLIND_SKIP_BTN], 1); memcpy16(&pal_bg_mem[BLIND_SKIP_BTN_SELECTED_BORDER_PID], &pal_bg_mem[BLIND_SKIP_BTN_PID], 1);
for (int i = 0; i < MAX_BLINDS; i++) for (int i = 0; i < MAX_BLINDS; i++)
{ {
@@ -785,7 +745,7 @@ void change_background(int id)
GRIT_CPY(&se_mem[MAIN_BG_SBB], background_main_menu_gfxMap); GRIT_CPY(&se_mem[MAIN_BG_SBB], background_main_menu_gfxMap);
// Disable the button highlight colors // Disable the button highlight colors
memcpy16(&pal_bg_mem[MAIN_MENU_PLAY_BUTTON_OUTLINE], &pal_bg_mem[MAIN_MENU_PLAY_BUTTON_MAIN_COLOR], 1); memcpy16(&pal_bg_mem[MAIN_MENU_PLAY_BUTTON_OUTLINE_PID], &pal_bg_mem[MAIN_MENU_PLAY_BUTTON_MAIN_COLOR_PID], 1);
} }
else else
{ {
@@ -890,72 +850,72 @@ void set_hand()
{ {
case HIGH_CARD: case HIGH_CARD:
print_hand_type("HIGH C"); print_hand_type("HIGH C");
chips = HIGH_CARD_CHIPS; chips = 5;
mult = HIGH_CARD_MULT; mult = 1;
break; break;
case PAIR: case PAIR:
print_hand_type("PAIR"); print_hand_type("PAIR");
chips = PAIR_CHIPS; chips = 10;
mult = PAIR_MULT; mult = 2;
break; break;
case TWO_PAIR: case TWO_PAIR:
print_hand_type("2 PAIR"); print_hand_type("2 PAIR");
chips = TWO_PAIR_CHIPS; chips = 20;
mult = TWO_PAIR_MULT; mult = 2;
break; break;
case THREE_OF_A_KIND: case THREE_OF_A_KIND:
print_hand_type("3 OAK"); print_hand_type("3 OAK");
chips = THREE_OAK_CHIPS; chips = 30;
mult = THREE_OAK_MULT; mult = 3;
break; break;
case STRAIGHT: case STRAIGHT:
print_hand_type("STRT"); print_hand_type("STRT");
chips = STRAIGHT_FLUSH_CHIPS; chips = 30;
mult = STRAIGHT_MULT; mult = 4;
break; break;
case FLUSH: case FLUSH:
print_hand_type("FLUSH"); print_hand_type("FLUSH");
chips = FLUSH_CHIPS; chips = 35;
mult = FLUSH_MULT; mult = 4;
break; break;
case FULL_HOUSE: case FULL_HOUSE:
print_hand_type("FULL H"); print_hand_type("FULL H");
chips = FULL_HOUSE_CHIPS; chips = 40;
mult = FULL_HOUSE_MULT; mult = 4;
break; break;
case FOUR_OF_A_KIND: case FOUR_OF_A_KIND:
print_hand_type("4 OAK"); print_hand_type("4 OAK");
chips = FOUR_OAK_CHIPS; chips = 60;
mult = FOUR_OAK_MULT; mult = 7;
break; break;
case STRAIGHT_FLUSH: case STRAIGHT_FLUSH:
print_hand_type("STRT F"); print_hand_type("STRT F");
chips = STRAIGHT_FLUSH_CHIPS; chips = 100;
mult = STRAIGHT_FLUSH_MULT; mult = 8;
break; break;
case ROYAL_FLUSH: case ROYAL_FLUSH:
print_hand_type("ROYAL F"); print_hand_type("ROYAL F");
chips = ROYAL_FLUSH_CHIPS; chips = 100;
mult = ROYAL_FLUSH_MULT; mult = 8;
break; break;
case FIVE_OF_A_KIND: case FIVE_OF_A_KIND:
print_hand_type("5 OAK"); print_hand_type("5 OAK");
chips = FIVE_OAK_CHIPS; chips = 120;
mult = FIVE_OAK_MULT; mult = 12;
break; break;
case FLUSH_HOUSE: case FLUSH_HOUSE:
print_hand_type("FLUSH H"); print_hand_type("FLUSH H");
chips = FLUSH_HOUSE_CHIPS; chips = 140;
mult = FLUSH_HOUSE_MULT; mult = 14;
break; break;
case FLUSH_FIVE: case FLUSH_FIVE:
print_hand_type("FLUSH 5"); print_hand_type("FLUSH 5");
chips = FLUSH_FIVE_CHIPS; chips = 160;
mult = FLUSH_FIVE_MULT; mult = 16;
break; break;
case NONE: case NONE:
chips = NONE_CHIPS; chips = 0;
mult = NONE_MULT; mult = 0;
break; break;
} }
@@ -969,8 +929,8 @@ void card_draw()
CardObject *card_object = card_object_new(deck_pop()); CardObject *card_object = card_object_new(deck_pop());
const FIXED deck_x = int2fx(CARD_DRAW_POS_X); const FIXED deck_x = int2fx(CARD_DRAW_POS.x);
const FIXED deck_y = int2fx(CARD_DRAW_POS_Y); const FIXED deck_y = int2fx(CARD_DRAW_POS.y);
card_object->sprite_object->x = deck_x; card_object->sprite_object->x = deck_x;
card_object->sprite_object->y = deck_y; card_object->sprite_object->y = deck_y;
@@ -1095,7 +1055,7 @@ static void game_round_init()
cards_drawn = 0; cards_drawn = 0;
hand_selections = 0; hand_selections = 0;
playing_blind_token = blind_token_new(current_blind, 8, 18, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 1); // Create the blind token sprite at the top left corner playing_blind_token = blind_token_new(current_blind, CUR_BLIND_TOKEN_POS.x, CUR_BLIND_TOKEN_POS.y, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 1); // Create the blind token sprite at the top left corner
// TODO: Hide blind token and display it after sliding blind rect animation // TODO: Hide blind token and display it after sliding blind rect animation
//if (playing_blind_token != NULL) //if (playing_blind_token != NULL)
//{ //{
@@ -1145,9 +1105,9 @@ static void game_main_menu_init()
main_menu_ace = card_object_new(card_new(SPADES, ACE)); main_menu_ace = card_object_new(card_new(SPADES, ACE));
card_object_set_sprite(main_menu_ace, 0); // Set the sprite for the ace of spades card_object_set_sprite(main_menu_ace, 0); // Set the sprite for the ace of spades
main_menu_ace->sprite_object->sprite->obj->attr0 |= ATTR0_AFF_DBL; // Make the sprite double sized main_menu_ace->sprite_object->sprite->obj->attr0 |= ATTR0_AFF_DBL; // Make the sprite double sized
main_menu_ace->sprite_object->tx = int2fx(MAIN_MENU_ACE_TX); main_menu_ace->sprite_object->tx = int2fx(MAIN_MENU_ACE_T.x);
main_menu_ace->sprite_object->x = main_menu_ace->sprite_object->tx; main_menu_ace->sprite_object->x = main_menu_ace->sprite_object->tx;
main_menu_ace->sprite_object->ty = int2fx(MAIN_MENU_ACE_TY); main_menu_ace->sprite_object->ty = int2fx(MAIN_MENU_ACE_T.y);
main_menu_ace->sprite_object->y = main_menu_ace->sprite_object->ty; main_menu_ace->sprite_object->y = main_menu_ace->sprite_object->ty;
main_menu_ace->sprite_object->tscale = float2fx(0.8f); main_menu_ace->sprite_object->tscale = float2fx(0.8f);
} }
@@ -1238,9 +1198,9 @@ void game_init()
hands = max_hands; hands = max_hands;
discards = max_discards; discards = max_discards;
blind_select_tokens[SMALL_BLIND] = blind_token_new(SMALL_BLIND, 8, 18, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 3); blind_select_tokens[SMALL_BLIND] = blind_token_new(SMALL_BLIND, CUR_BLIND_TOKEN_POS.x, CUR_BLIND_TOKEN_POS.y, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 3);
blind_select_tokens[BIG_BLIND] = blind_token_new(BIG_BLIND, 8, 18, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 4); blind_select_tokens[BIG_BLIND] = blind_token_new(BIG_BLIND, CUR_BLIND_TOKEN_POS.x, CUR_BLIND_TOKEN_POS.y, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 4);
blind_select_tokens[BOSS_BLIND] = blind_token_new(BOSS_BLIND, 8, 18, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 5); blind_select_tokens[BOSS_BLIND] = blind_token_new(BOSS_BLIND, CUR_BLIND_TOKEN_POS.x, CUR_BLIND_TOKEN_POS.y, MAX_SELECTION_SIZE + MAX_HAND_SIZE + 5);
obj_hide(blind_select_tokens[SMALL_BLIND]->obj); obj_hide(blind_select_tokens[SMALL_BLIND]->obj);
obj_hide(blind_select_tokens[BIG_BLIND]->obj); obj_hide(blind_select_tokens[BIG_BLIND]->obj);
@@ -1340,8 +1300,8 @@ static void game_playing_process_hand_select_input()
{ {
if (discard_button_highlighted == false) // Play button logic if (discard_button_highlighted == false) // Play button logic
{ {
memset16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER], 0xFFFF, 1); memset16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER_PID], HIGHLIGHT_COLOR, 1);
memcpy16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER], &pal_bg_mem[DISCARD_BTN], 1); memcpy16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER_PID], &pal_bg_mem[DISCARD_BTN_PID], 1);
if (key_hit(SELECT_CARD) && hands > 0 && hand_play()) if (key_hit(SELECT_CARD) && hands > 0 && hand_play())
{ {
@@ -1354,8 +1314,8 @@ static void game_playing_process_hand_select_input()
else // Discard button logic else // Discard button logic
{ {
// 7 is score and play hand button color // 7 is score and play hand button color
memcpy16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER], &pal_bg_mem[PLAY_HAND_BTN], 1); memcpy16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER_PID], &pal_bg_mem[PLAY_HAND_BTN_PID], 1);
memset16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER], 0xFFFF, 1); memset16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER_PID], HIGHLIGHT_COLOR, 1);
if (key_hit(SELECT_CARD) && discards > 0 && hand_discard()) if (key_hit(SELECT_CARD) && discards > 0 && hand_discard())
{ {
@@ -1371,8 +1331,8 @@ static void game_playing_process_hand_select_input()
if (selection_y == 0) // On row of cards if (selection_y == 0) // On row of cards
{ {
memcpy16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER], &pal_bg_mem[PLAY_HAND_BTN], 1); // Play button highlight color memcpy16(&pal_bg_mem[PLAY_HAND_BTN_SELECTED_BORDER_PID], &pal_bg_mem[PLAY_HAND_BTN_PID], 1); // Play button highlight color
memcpy16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER], &pal_bg_mem[DISCARD_BTN], 1); // Discard button highlight color memcpy16(&pal_bg_mem[DISCARD_BTN_SELECTED_BORDER_PID], &pal_bg_mem[DISCARD_BTN_PID], 1); // Discard button highlight color
if (key_hit(SELECT_CARD)) if (key_hit(SELECT_CARD))
{ {
@@ -1554,8 +1514,8 @@ void card_in_hand_loop_handle_discard_and_shuffling(int card_idx, bool* discarde
{ {
if (!*discarded_card) if (!*discarded_card)
{ {
*hand_x = int2fx(CARD_DISCARD_PNT_X); *hand_x = int2fx(CARD_DISCARD_PNT.x);
*hand_y = int2fx(CARD_DISCARD_PNT_Y); *hand_y = int2fx(CARD_DISCARD_PNT.y);
if (!*sound_played) if (!*sound_played)
{ {
@@ -1617,8 +1577,8 @@ static void cards_in_hand_update_loop(bool* discarded_card, int* played_selectio
{ {
if (hand[i] != NULL) if (hand[i] != NULL)
{ {
FIXED hand_x = int2fx(HAND_START_POS_X); FIXED hand_x = int2fx(HAND_START_POS.x);
FIXED hand_y = int2fx(HAND_START_POS_Y); FIXED hand_y = int2fx(HAND_START_POS.y);
switch (hand_state) switch (hand_state)
{ {
@@ -2242,24 +2202,24 @@ void game_round_end()
if (timer == 1) // Copied from shop. Feels slightly too niche of a function for me personally to make one. if (timer == 1) // Copied from shop. Feels slightly too niche of a function for me personally to make one.
{ {
int y = 6; int y = 6;
memset16(&se_mem[MAIN_BG_SBB][32 * (y - 1)], 0x0006, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][0], 0x0006, 1);
memset16(&se_mem[MAIN_BG_SBB][1 + 32 * (y - 1)], 0x0007, 2); memset16(&se_mat[MAIN_BG_SBB][y - 1][1], 0x0007, 2);
memset16(&se_mem[MAIN_BG_SBB][3 + 32 * (y - 1)], 0x0008, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][3], 0x0008, 1);
memset16(&se_mem[MAIN_BG_SBB][4 + 32 * (y - 1)], 0x0009, 4); memset16(&se_mat[MAIN_BG_SBB][y - 1][4], 0x0009, 4);
memset16(&se_mem[MAIN_BG_SBB][7 + 32 * (y - 1)], 0x000A, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][7], 0x000A, 1);
memset16(&se_mem[MAIN_BG_SBB][8 + 32 * (y - 1)], SE_HORIZONTAL_FLIP | 0x0006, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][8], SE_HFLIP | 0x0006, 1);
} }
else if (timer == 2) else if (timer == 2)
{ {
int y = 5; int y = 5;
memset16(&se_mem[MAIN_BG_SBB][32 * (y - 1)], 0x0001, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][0], 0x0001, 1);
memset16(&se_mem[MAIN_BG_SBB][1 + 32 * (y - 1)], 0x0002, 7); memset16(&se_mat[MAIN_BG_SBB][y - 1][1], 0x0002, 7);
memset16(&se_mem[MAIN_BG_SBB][8 + 32 * (y - 1)], SE_HORIZONTAL_FLIP | 0x0001, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][8], SE_HFLIP | 0x0001, 1);
} }
} }
else if (timer > FRAMES(20)) else if (timer > FRAMES(20))
{ {
memset16(&pal_bg_mem[REWARD_PANEL_BORDER], 0x1483, 1); memset16(&pal_bg_mem[REWARD_PANEL_BORDER_PID], 0x1483, 1);
state = DISPLAY_REWARDS; state = DISPLAY_REWARDS;
timer = TM_ZERO; timer = TM_ZERO;
} }
@@ -2609,7 +2569,7 @@ static void shop_top_row_on_key_hit(SelectionGrid* selection_grid, Selection* se
timer = TM_ZERO; // Reset the timer timer = TM_ZERO; // Reset the timer
reroll_cost = REROLL_BASE_COST; reroll_cost = REROLL_BASE_COST;
memcpy16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER], &pal_bg_mem[SHOP_PANEL_SHADOW], 1); memcpy16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER_PID], &pal_bg_mem[SHOP_PANEL_SHADOW_PID], 1);
// memcpy16(&pal_bg_mem[16], &pal_bg_mem[6], 1); // memcpy16(&pal_bg_mem[16], &pal_bg_mem[6], 1);
// This changes the color of the button to a dark red. // This changes the color of the button to a dark red.
@@ -2644,7 +2604,7 @@ static void shop_top_row_on_selection_changed(SelectionGrid* selection_grid, int
if (prev_selection->x == NEXT_ROUND_BTN_SEL_X) if (prev_selection->x == NEXT_ROUND_BTN_SEL_X)
{ {
// Remove next round button highlight // Remove next round button highlight
memcpy16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER], &pal_bg_mem[NEXT_ROUND_BTN], 1); memcpy16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER_PID], &pal_bg_mem[NEXT_ROUND_BTN_PID], 1);
} }
else else
{ {
@@ -2659,7 +2619,7 @@ static void shop_top_row_on_selection_changed(SelectionGrid* selection_grid, int
if (new_selection->x == NEXT_ROUND_BTN_SEL_X) if (new_selection->x == NEXT_ROUND_BTN_SEL_X)
{ {
// Highlight next round button // Highlight next round button
memset16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER], HIGHLIGHT_COLOR, 1); memset16(&pal_bg_mem[NEXT_ROUND_BTN_SELECTED_BORDER_PID], HIGHLIGHT_COLOR, 1);
} }
else else
{ {
@@ -2680,11 +2640,11 @@ static void shop_reroll_row_on_selection_changed(SelectionGrid* selection_grid,
if (row_idx == prev_selection->y) if (row_idx == prev_selection->y)
{ {
// Remove highlight // Remove highlight
memcpy16(&pal_bg_mem[REROLL_BTN_SELECTED_BORDER], &pal_bg_mem[REROLL_BTN], 1); memcpy16(&pal_bg_mem[REROLL_BTN_SELECTED_BORDER_PID], &pal_bg_mem[REROLL_BTN_PID], 1);
} }
else if (row_idx == new_selection->y) else if (row_idx == new_selection->y)
{ {
memset16(&pal_bg_mem[REROLL_BTN_SELECTED_BORDER], HIGHLIGHT_COLOR, 1); memset16(&pal_bg_mem[REROLL_BTN_SELECTED_BORDER_PID], HIGHLIGHT_COLOR, 1);
} }
} }
@@ -2727,10 +2687,10 @@ static void game_shop_lights_anim_frame()
{ {
// Shift palette around the border of the shop icon // Shift palette around the border of the shop icon
COLOR shifted_palette[4]; COLOR shifted_palette[4];
memcpy16(&shifted_palette[0], &pal_bg_mem[SHOP_LIGHTS_2], 1); memcpy16(&shifted_palette[0], &pal_bg_mem[SHOP_LIGHTS_2_PID], 1);
memcpy16(&shifted_palette[1], &pal_bg_mem[SHOP_LIGHTS_3], 1); memcpy16(&shifted_palette[1], &pal_bg_mem[SHOP_LIGHTS_3_PID], 1);
memcpy16(&shifted_palette[2], &pal_bg_mem[SHOP_LIGHTS_4], 1); memcpy16(&shifted_palette[2], &pal_bg_mem[SHOP_LIGHTS_4_PID], 1);
memcpy16(&shifted_palette[3], &pal_bg_mem[SHOP_LIGHTS_1], 1); memcpy16(&shifted_palette[3], &pal_bg_mem[SHOP_LIGHTS_1_PID], 1);
// Circularly shift the palette // Circularly shift the palette
int last = shifted_palette[3]; int last = shifted_palette[3];
@@ -2742,10 +2702,10 @@ static void game_shop_lights_anim_frame()
shifted_palette[0] = last; shifted_palette[0] = last;
memcpy16(&pal_bg_mem[SHOP_LIGHTS_2], &shifted_palette[0], 1); // Copy the shifted palette to the next 4 slots memcpy16(&pal_bg_mem[SHOP_LIGHTS_2_PID], &shifted_palette[0], 1); // Copy the shifted palette to the next 4 slots
memcpy16(&pal_bg_mem[SHOP_LIGHTS_3], &shifted_palette[1], 1); memcpy16(&pal_bg_mem[SHOP_LIGHTS_3_PID], &shifted_palette[1], 1);
memcpy16(&pal_bg_mem[SHOP_LIGHTS_4], &shifted_palette[2], 1); memcpy16(&pal_bg_mem[SHOP_LIGHTS_4_PID], &shifted_palette[2], 1);
memcpy16(&pal_bg_mem[SHOP_LIGHTS_1], &shifted_palette[3], 1); memcpy16(&pal_bg_mem[SHOP_LIGHTS_1_PID], &shifted_palette[3], 1);
} }
// Outro sequence (menu and shop icon going out of frame) // Outro sequence (menu and shop icon going out of frame)
@@ -2772,19 +2732,19 @@ static void game_shop_outro()
} }
int y = 6; int y = 6;
memset16(&se_mem[MAIN_BG_SBB][32 * (y - 1)], 0x0006, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][0], 0x0006, 1);
memset16(&se_mem[MAIN_BG_SBB][1 + 32 * (y - 1)], 0x0007, 2); memset16(&se_mat[MAIN_BG_SBB][y - 1][1], 0x0007, 2);
memset16(&se_mem[MAIN_BG_SBB][3 + 32 * (y - 1)], 0x0008, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][3], 0x0008, 1);
memset16(&se_mem[MAIN_BG_SBB][4 + 32 * (y - 1)], 0x0009, 4); memset16(&se_mat[MAIN_BG_SBB][y - 1][4], 0x0009, 4);
memset16(&se_mem[MAIN_BG_SBB][7 + 32 * (y - 1)], 0x000A, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][7], 0x000A, 1);
memset16(&se_mem[MAIN_BG_SBB][8 + 32 * (y - 1)], SE_HORIZONTAL_FLIP | 0x0006, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][8], SE_HFLIP | 0x0006, 1);
} }
else if (timer == 2) else if (timer == 2)
{ {
int y = 5; int y = 5;
memset16(&se_mem[MAIN_BG_SBB][32 * (y - 1)], 0x0001, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][0], 0x0001, 1);
memset16(&se_mem[MAIN_BG_SBB][1 + 32 * (y - 1)], 0x0002, 7); memset16(&se_mat[MAIN_BG_SBB][y - 1][1], 0x0002, 7);
memset16(&se_mem[MAIN_BG_SBB][8 + 32 * (y - 1)], SE_HORIZONTAL_FLIP | 0x0001, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][8], SE_HFLIP | 0x0001, 1);
} }
if (timer >= MENU_POP_OUT_ANIM_FRAMES) if (timer >= MENU_POP_OUT_ANIM_FRAMES)
@@ -2926,14 +2886,13 @@ void game_blind_select()
if (selection_y == 0) if (selection_y == 0)
{ {
// 5 is the multiplier palette color and the skip button color // 5 is the multiplier palette color and the skip button color
memset16(&pal_bg_mem[BLIND_SELECT_BTN_SELECTED_BORDER], 0xFFFF, 1); memset16(&pal_bg_mem[BLIND_SELECT_BTN_SELECTED_BORDER_PID], HIGHLIGHT_COLOR, 1);
memcpy16(&pal_bg_mem[BLIND_SKIP_BTN_SELECTED_BORDER], &pal_bg_mem[BLIND_SKIP_BTN], 1); memcpy16(&pal_bg_mem[BLIND_SKIP_BTN_SELECTED_BORDER_PID], &pal_bg_mem[BLIND_SKIP_BTN_PID], 1);
} }
else else
{ {
// 15 is the select button color memcpy16(&pal_bg_mem[BLIND_SELECT_BTN_SELECTED_BORDER_PID], &pal_bg_mem[BLIND_SELECT_BTN_PID], 1);
memcpy16(&pal_bg_mem[BLIND_SELECT_BTN_SELECTED_BORDER], &pal_bg_mem[BLIND_SELECT_BTN], 1); memset16(&pal_bg_mem[BLIND_SKIP_BTN_SELECTED_BORDER_PID], HIGHLIGHT_COLOR, 1);
memset16(&pal_bg_mem[BLIND_SKIP_BTN_SELECTED_BORDER], 0xFFFF, 1);
} }
break; break;
@@ -2989,12 +2948,12 @@ void game_blind_select()
} }
int y = 6; int y = 6;
memset16(&se_mem[MAIN_BG_SBB][32 * (y - 1)], 0x0006, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][0], 0x0006, 1);
memset16(&se_mem[MAIN_BG_SBB][1 + 32 * (y - 1)], 0x0007, 2); memset16(&se_mat[MAIN_BG_SBB][y - 1][1], 0x0007, 2);
memset16(&se_mem[MAIN_BG_SBB][3 + 32 * (y - 1)], 0x0008, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][3], 0x0008, 1);
memset16(&se_mem[MAIN_BG_SBB][4 + 32 * (y - 1)], 0x0009, 4); memset16(&se_mat[MAIN_BG_SBB][y - 1][4], 0x0009, 4);
memset16(&se_mem[MAIN_BG_SBB][7 + 32 * (y - 1)], 0x000A, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][7], 0x000A, 1);
memset16(&se_mem[MAIN_BG_SBB][8 + 32 * (y - 1)], SE_HORIZONTAL_FLIP | 0x0006, 1); memset16(&se_mat[MAIN_BG_SBB][y - 1][8], SE_HFLIP | 0x0006, 1);
} }
for (int y = 0; y < timer; y++) // Shift the blind panel down onto screen for (int y = 0; y < timer; y++) // Shift the blind panel down onto screen
@@ -3053,7 +3012,7 @@ void game_main_menu()
if (selection_x == 0) // Play button if (selection_x == 0) // Play button
{ {
// Select button PID is 5 and the outline is 3 // Select button PID is 5 and the outline is 3
memset16(&pal_bg_mem[MAIN_MENU_PLAY_BUTTON_OUTLINE], HIGHLIGHT_COLOR, 1); memset16(&pal_bg_mem[MAIN_MENU_PLAY_BUTTON_OUTLINE_PID], HIGHLIGHT_COLOR, 1);
if (key_hit(KEY_A)) if (key_hit(KEY_A))
{ {
@@ -3064,7 +3023,7 @@ void game_main_menu()
else else
{ {
// Select button PID is 5 and the outline is 3 // Select button PID is 5 and the outline is 3
memcpy16(&pal_bg_mem[MAIN_MENU_PLAY_BUTTON_OUTLINE], &pal_bg_mem[MAIN_MENU_PLAY_BUTTON_MAIN_COLOR], 1); memcpy16(&pal_bg_mem[MAIN_MENU_PLAY_BUTTON_OUTLINE_PID], &pal_bg_mem[MAIN_MENU_PLAY_BUTTON_MAIN_COLOR_PID], 1);
} }
} }