From 14eb7893f7a0affe53f8fe7b04523398bd580616 Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Fri, 26 Jun 2026 13:04:28 +0200 Subject: [PATCH] Fix overflow calcolo probabilita' caduta (int 8-bit su GB) Il calcolo (60 - stamina) * 255 overflow su 8-bit (int del Game Boy). Cast a uint16_t per il calcolo corretto. Ora il rischio di caduta funziona: 30 stamina = 50% caduta, 0 stamina = 100% caduta. --- src/player_logic.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/player_logic.c b/src/player_logic.c index dcf512a..6132661 100644 --- a/src/player_logic.c +++ b/src/player_logic.c @@ -164,7 +164,9 @@ void update_player_movement(uint8_t keys, uint8_t prev_keys) { // (es: 30 stamina -> 50% caduta; 0 stamina -> 100% caduta) uint8_t fall_chance = 0; if (stamina < 60) { - fall_chance = (uint8_t)(((60 - stamina) * 255) / 60); + // Probabilita' di caduta proporzionale allo stamina mancante. + // Cast a uint16_t per evitare overflow (int e' 8-bit su GB). + fall_chance = (uint8_t)(((uint16_t)(60 - stamina) * 255) / 60); } uint8_t roll = (uint8_t)rand(); uint8_t will_fall = (roll < fall_chance);