Added blind score requirement and reward in blind select screen (#282)
* Added blind select requirement and rewards printing * Broke game_blind_select_print_blinds_reqs_and_rewards() into separate functions
This commit is contained in:
+115
-11
@@ -220,6 +220,8 @@ static void game_blind_select_start_anim_seq(void);
|
|||||||
static void game_blind_select_handle_input(void);
|
static void game_blind_select_handle_input(void);
|
||||||
static void game_blind_select_selected_anim_seq(void);
|
static void game_blind_select_selected_anim_seq(void);
|
||||||
static void game_blind_select_display_blind_panel(void);
|
static void game_blind_select_display_blind_panel(void);
|
||||||
|
static Rect game_blind_select_get_req_score_rect(enum BlindType blind);
|
||||||
|
static void game_blind_select_print_blinds_reqs_and_rewards(void);
|
||||||
static void game_round_end_start(void);
|
static void game_round_end_start(void);
|
||||||
static void game_round_end_start_expand_popup(void);
|
static void game_round_end_start_expand_popup(void);
|
||||||
static void game_round_end_display_finished_blind(void);
|
static void game_round_end_display_finished_blind(void);
|
||||||
@@ -357,6 +359,8 @@ static const Rect BLIND_REWARD_RECT = {40, 32, 64, 40 };
|
|||||||
static const Rect BLIND_REQ_TEXT_RECT = {32, 24, 64, 32 };
|
static const Rect BLIND_REQ_TEXT_RECT = {32, 24, 64, 32 };
|
||||||
static const Rect SHOP_PRICES_TEXT_RECT = {72, 56, 192, 160 };
|
static const Rect SHOP_PRICES_TEXT_RECT = {72, 56, 192, 160 };
|
||||||
|
|
||||||
|
static const Rect SINGLE_BLIND_SEL_REQ_SCORE_RECT = {80, 120, 104, 128 };
|
||||||
|
|
||||||
// Rects with UNDEFINED are only used in tte_printf, they need to be fully defined
|
// Rects with UNDEFINED are only used in tte_printf, they need to be fully defined
|
||||||
// to be used with tte_erase_rect_wrapper()
|
// to be used with tte_erase_rect_wrapper()
|
||||||
static const Rect HANDS_TEXT_RECT = {16, 104, UNDEFINED, UNDEFINED };
|
static const Rect HANDS_TEXT_RECT = {16, 104, UNDEFINED, UNDEFINED };
|
||||||
@@ -483,7 +487,7 @@ static int current_blind = BLIND_TYPE_SMALL;
|
|||||||
|
|
||||||
// The current state of the blinds, this is used to determine what the game is doing at any given
|
// The current state of the blinds, this is used to determine what the game is doing at any given
|
||||||
// time
|
// time
|
||||||
static enum BlindState blinds[BLIND_TYPE_MAX] = {
|
static enum BlindState blinds_states[BLIND_TYPE_MAX] = {
|
||||||
BLIND_STATE_CURRENT,
|
BLIND_STATE_CURRENT,
|
||||||
BLIND_STATE_UPCOMING,
|
BLIND_STATE_UPCOMING,
|
||||||
BLIND_STATE_UPCOMING
|
BLIND_STATE_UPCOMING
|
||||||
@@ -656,9 +660,9 @@ void game_init()
|
|||||||
discards = max_discards;
|
discards = max_discards;
|
||||||
timer = TM_ZERO;
|
timer = TM_ZERO;
|
||||||
current_blind = BLIND_TYPE_SMALL;
|
current_blind = BLIND_TYPE_SMALL;
|
||||||
blinds[0] = BLIND_STATE_CURRENT;
|
blinds_states[0] = BLIND_STATE_CURRENT;
|
||||||
blinds[1] = BLIND_STATE_UPCOMING;
|
blinds_states[1] = BLIND_STATE_UPCOMING;
|
||||||
blinds[2] = BLIND_STATE_UPCOMING;
|
blinds_states[2] = BLIND_STATE_UPCOMING;
|
||||||
ante = STARTING_ANTE;
|
ante = STARTING_ANTE;
|
||||||
money = STARTING_MONEY;
|
money = STARTING_MONEY;
|
||||||
score = STARTING_SCORE;
|
score = STARTING_SCORE;
|
||||||
@@ -1381,7 +1385,7 @@ static void change_background(enum BackgroundId id)
|
|||||||
curr_blind_rect.left += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
|
curr_blind_rect.left += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
|
||||||
curr_blind_rect.right += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
|
curr_blind_rect.right += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
|
||||||
|
|
||||||
if (blinds[i] != BLIND_STATE_CURRENT &&
|
if (blinds_states[i] != BLIND_STATE_CURRENT &&
|
||||||
(i == BLIND_TYPE_SMALL || i == BLIND_TYPE_BIG)) // Make the skip button gray
|
(i == BLIND_TYPE_SMALL || i == BLIND_TYPE_BIG)) // Make the skip button gray
|
||||||
{
|
{
|
||||||
BG_POINT skip_blind_btn_pos_dest = {
|
BG_POINT skip_blind_btn_pos_dest = {
|
||||||
@@ -1397,7 +1401,7 @@ static void change_background(enum BackgroundId id)
|
|||||||
main_bg_se_copy_rect(skip_blind_btn_rect_src, skip_blind_btn_pos_dest);
|
main_bg_se_copy_rect(skip_blind_btn_rect_src, skip_blind_btn_pos_dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (blinds[i])
|
switch (blinds_states[i])
|
||||||
{
|
{
|
||||||
case BLIND_STATE_CURRENT: // Raise the blind panel up a bit
|
case BLIND_STATE_CURRENT: // Raise the blind panel up a bit
|
||||||
{
|
{
|
||||||
@@ -1778,14 +1782,14 @@ static void increment_blind(enum BlindState increment_reason)
|
|||||||
if (current_blind >= BLIND_TYPE_MAX)
|
if (current_blind >= BLIND_TYPE_MAX)
|
||||||
{
|
{
|
||||||
current_blind = 0;
|
current_blind = 0;
|
||||||
blinds[0] = BLIND_STATE_CURRENT; // Reset the blinds to the first one
|
blinds_states[0] = BLIND_STATE_CURRENT; // Reset the blinds to the first one
|
||||||
blinds[1] = BLIND_STATE_UPCOMING; // Set the next blind to upcoming
|
blinds_states[1] = BLIND_STATE_UPCOMING; // Set the next blind to upcoming
|
||||||
blinds[2] = BLIND_STATE_UPCOMING; // Set the next blind to upcoming
|
blinds_states[2] = BLIND_STATE_UPCOMING; // Set the next blind to upcoming
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
blinds[current_blind] = BLIND_STATE_CURRENT;
|
blinds_states[current_blind] = BLIND_STATE_CURRENT;
|
||||||
blinds[current_blind - 1] = increment_reason;
|
blinds_states[current_blind - 1] = increment_reason;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4362,6 +4366,101 @@ static void game_blind_select_on_update()
|
|||||||
blind_select_state_actions[substate]();
|
blind_select_state_actions[substate]();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void game_blind_select_erase_blind_reqs_and_rewards()
|
||||||
|
{
|
||||||
|
for (enum BlindType curr_blind = 0; curr_blind < BLIND_TYPE_MAX; curr_blind++)
|
||||||
|
{
|
||||||
|
Rect blind_req_and_reward_rect = SINGLE_BLIND_SEL_REQ_SCORE_RECT;
|
||||||
|
|
||||||
|
// To account for both raised blind and reward
|
||||||
|
blind_req_and_reward_rect.top -= TILE_SIZE;
|
||||||
|
blind_req_and_reward_rect.bottom += TILE_SIZE;
|
||||||
|
|
||||||
|
// To account for overflow
|
||||||
|
blind_req_and_reward_rect.right += TILE_SIZE;
|
||||||
|
|
||||||
|
blind_req_and_reward_rect.left +=
|
||||||
|
curr_blind * rect_width(&SINGLE_BLIND_SELECT_RECT) * TILE_SIZE;
|
||||||
|
blind_req_and_reward_rect.right +=
|
||||||
|
curr_blind * rect_width(&SINGLE_BLIND_SELECT_RECT) * TILE_SIZE;
|
||||||
|
|
||||||
|
tte_erase_rect_wrapper(blind_req_and_reward_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Rect game_blind_select_get_req_score_rect(enum BlindType blind)
|
||||||
|
{
|
||||||
|
Rect blind_req_score_rect = SINGLE_BLIND_SEL_REQ_SCORE_RECT;
|
||||||
|
|
||||||
|
blind_req_score_rect.left += blind * rect_width(&SINGLE_BLIND_SELECT_RECT) * TILE_SIZE;
|
||||||
|
blind_req_score_rect.right += blind * rect_width(&SINGLE_BLIND_SELECT_RECT) * TILE_SIZE;
|
||||||
|
|
||||||
|
if (blinds_states[blind] == BLIND_STATE_CURRENT)
|
||||||
|
{
|
||||||
|
// Current blind is raised
|
||||||
|
blind_req_score_rect.top -= TILE_SIZE;
|
||||||
|
blind_req_score_rect.bottom -= TILE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return blind_req_score_rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void game_blind_select_print_blind_req(enum BlindType blind)
|
||||||
|
{
|
||||||
|
Rect blind_req_score_rect = game_blind_select_get_req_score_rect(blind);
|
||||||
|
|
||||||
|
u32 blind_req = blind_get_requirement(blind, ante);
|
||||||
|
|
||||||
|
char blind_req_str_buff[UINT_MAX_DIGITS + 1];
|
||||||
|
truncate_uint_to_suffixed_str(
|
||||||
|
blind_req,
|
||||||
|
rect_width(&blind_req_score_rect) / TTE_CHAR_SIZE,
|
||||||
|
blind_req_str_buff
|
||||||
|
);
|
||||||
|
|
||||||
|
update_text_rect_to_right_align_str(&blind_req_score_rect, blind_req_str_buff, OVERFLOW_RIGHT);
|
||||||
|
|
||||||
|
tte_printf(
|
||||||
|
"#{P:%d,%d; cx:0x%X000}%s",
|
||||||
|
blind_req_score_rect.left,
|
||||||
|
blind_req_score_rect.top,
|
||||||
|
TTE_RED_PB,
|
||||||
|
blind_req_str_buff
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void game_blind_select_print_blind_reward(enum BlindType blind)
|
||||||
|
{
|
||||||
|
int blind_reward = blind_get_reward(blind);
|
||||||
|
Rect blind_reward_rect = game_blind_select_get_req_score_rect(blind);
|
||||||
|
|
||||||
|
// The reward is right below the score.
|
||||||
|
blind_reward_rect.top += TILE_SIZE;
|
||||||
|
blind_reward_rect.bottom += TILE_SIZE;
|
||||||
|
|
||||||
|
char blind_reward_str_buff[UINT_MAX_DIGITS + 2]; // +2 for null terminator and "$"
|
||||||
|
snprintf(blind_reward_str_buff, sizeof(blind_reward_str_buff), "$%d", blind_reward);
|
||||||
|
|
||||||
|
update_text_rect_to_right_align_str(&blind_reward_rect, blind_reward_str_buff, OVERFLOW_RIGHT);
|
||||||
|
|
||||||
|
tte_printf(
|
||||||
|
"#{P:%d,%d; cx:0x%X000}%s",
|
||||||
|
blind_reward_rect.left,
|
||||||
|
blind_reward_rect.top,
|
||||||
|
TTE_YELLOW_PB,
|
||||||
|
blind_reward_str_buff
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void game_blind_select_print_blinds_reqs_and_rewards(void)
|
||||||
|
{
|
||||||
|
for (enum BlindType curr_blind = 0; curr_blind < BLIND_TYPE_MAX; curr_blind++)
|
||||||
|
{
|
||||||
|
game_blind_select_print_blind_req(curr_blind);
|
||||||
|
game_blind_select_print_blind_reward(curr_blind);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void game_blind_select_start_anim_seq()
|
static void game_blind_select_start_anim_seq()
|
||||||
{
|
{
|
||||||
main_bg_se_copy_rect_1_tile_vert(POP_MENU_ANIM_RECT, SCREEN_UP);
|
main_bg_se_copy_rect_1_tile_vert(POP_MENU_ANIM_RECT, SCREEN_UP);
|
||||||
@@ -4377,6 +4476,7 @@ static void game_blind_select_start_anim_seq()
|
|||||||
|
|
||||||
if (timer == TM_END_ANIM_SEQ)
|
if (timer == TM_END_ANIM_SEQ)
|
||||||
{
|
{
|
||||||
|
game_blind_select_print_blinds_reqs_and_rewards();
|
||||||
state_info[game_state].substate = BLIND_SELECT;
|
state_info[game_state].substate = BLIND_SELECT;
|
||||||
timer = TM_ZERO; // Reset the timer
|
timer = TM_ZERO; // Reset the timer
|
||||||
}
|
}
|
||||||
@@ -4400,6 +4500,8 @@ static void game_blind_select_handle_input()
|
|||||||
}
|
}
|
||||||
else if (key_hit(SELECT_CARD))
|
else if (key_hit(SELECT_CARD))
|
||||||
{
|
{
|
||||||
|
game_blind_select_erase_blind_reqs_and_rewards();
|
||||||
|
|
||||||
if (selection_y == 0) // Blind selected
|
if (selection_y == 0) // Blind selected
|
||||||
{
|
{
|
||||||
play_sfx(SFX_BUTTON, MM_BASE_PITCH_RATE, BUTTON_SFX_VOLUME);
|
play_sfx(SFX_BUTTON, MM_BASE_PITCH_RATE, BUTTON_SFX_VOLUME);
|
||||||
@@ -4430,6 +4532,8 @@ static void game_blind_select_handle_input()
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
game_blind_select_print_blinds_reqs_and_rewards();
|
||||||
|
|
||||||
timer = TM_ZERO;
|
timer = TM_ZERO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user