feat: add custom background rendering and speed scaling features for snake gameplay

This commit is contained in:
phillip committed 2026-10-03 20:58:33 +02:00
1 parent 93c0a44027
commit 60bf111400
13 files changed
+711 -26

No files matched your search

+32
View File
@@ -3,6 +3,7 @@
#include <algorithm>
#include <cstdlib>
#include <nds.h>
#include <consts.h>
void update_snake(GameState &state) {
@@ -68,6 +69,7 @@ bool check_collision_apples(GameState &state) {
state.score += APPLE_SCORE;
state.snakelength++;
state.applesEaten++;
state.apples.erase(it);
return true;
}
@@ -140,3 +142,33 @@ void tick_status_effects(GameState &state) {
state.curseTicksRemaining--;
}
}
uint8_t calculate_intensity_31(const GameState &state) {
const uint16_t current_apples = state.applesEaten;
const uint16_t apples =
std::min<uint16_t>(current_apples, static_cast<uint16_t>(SPEED_APPLES_CAP));
return static_cast<uint8_t>((static_cast<uint32_t>(apples) * 31U) /
static_cast<uint32_t>(SPEED_APPLES_CAP));
}
uint16_t calculate_timer_freq_mhz(const GameState &state) {
const uint16_t base_mhz =
state.hardMode ? SPEED_BASE_HARD_MHZ : SPEED_BASE_NORMAL_MHZ;
const uint16_t max_mhz =
state.hardMode ? SPEED_MAX_HARD_MHZ : SPEED_MAX_NORMAL_MHZ;
const uint16_t current_apples = state.applesEaten;
const uint16_t apples =
std::min<uint16_t>(current_apples, static_cast<uint16_t>(SPEED_APPLES_CAP));
const uint32_t diff = static_cast<uint32_t>(max_mhz - base_mhz);
return static_cast<uint16_t>(
base_mhz + ((static_cast<uint32_t>(apples) * diff) /
static_cast<uint32_t>(SPEED_APPLES_CAP)));
}
uint16_t calculate_timer_reload(const GameState &state) {
const uint32_t freq_mhz = calculate_timer_freq_mhz(state);
// Timer clock with ClockDivider_1024 is BUS_CLOCK >> 10 (32728 Hz)
const uint32_t timer_clock_mhz = (BUS_CLOCK >> 10U) * 1000U;
const uint32_t period_ticks = timer_clock_mhz / freq_mhz;
return static_cast<uint16_t>(-static_cast<int32_t>(period_ticks));
}