Optimized score lerping by changing the number of steps to a power of 2 (#211)

This commit is contained in:
MeirGavish
2025-11-06 12:15:07 +02:00
committed by GitHub
parent e7eaa82c9d
commit 64dd586df8
+12 -2
View File
@@ -1600,6 +1600,11 @@ static void game_playing_process_hand_select_input()
} }
} }
/* This needs to stay a power of 2 and small enough
* for the lerping to be done before the next hand is drawn.
*/
#define NUM_SCORE_LERP_STEPS 32
static void game_playing_process_input_and_state() static void game_playing_process_input_and_state()
{ {
if (hand_state == HAND_SELECT) if (hand_state == HAND_SELECT)
@@ -1624,8 +1629,13 @@ static void game_playing_process_input_and_state()
} }
else if (play_state == PLAY_ENDED) else if (play_state == PLAY_ENDED)
{ {
lerped_temp_score -= int2fx(temp_score * get_game_speed())/ 40; /* Using fixed point in case the score is lower than NUM_SCORE_LERP_STEPS and then
lerped_score += int2fx(temp_score * get_game_speed()) / 40; * then the division rounds it down to 0 and it's never added to the total.
* The operation is equivalent to
* fxdiv(int2fx(temp_score * get_game_speed()), int2fx(NUM_SCORE_LERP_STEPS))
*/
lerped_temp_score -= int2fx(temp_score * get_game_speed()) / NUM_SCORE_LERP_STEPS;
lerped_score += int2fx(temp_score * get_game_speed()) / NUM_SCORE_LERP_STEPS;
if (lerped_temp_score > 0) if (lerped_temp_score > 0)
{ {