feat: add custom background rendering and speed scaling features for snake gameplay
This commit is contained in:
1 parent
93c0a44027
commit
60bf111400
13 files changed
+711
-26
No files matched your search
@@ -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));
|
||||
}
|
||||
Reference in new issue
Block a user