feat: add finite lifetimes and despawn mechanics for rotten and cursed apples

This commit is contained in:
phillip committed 2026-10-03 21:57:13 +02:00
1 parent 9a3a0bd9fd
commit adda5db2f4
8 files changed
+159 -82

No files matched your search

+16 -6
View File
@@ -125,13 +125,18 @@ void draw_apples(const GameState &state, const RenderAssets &assets,
void draw_apples_rotten(const GameState &state, const RenderAssets &assets,
uint16_t &oamId) {
for (const std::array<int, 2> &apple : state.bad_apples) {
for (const EvilItem &apple : state.bad_apples) {
if (oamId >= 128) {
return;
}
oamSet(&oamSub, oamId, apple[0] * 8, apple[1] * 8, 0, 0, SpriteSize_8x8,
const bool blink = (apple.ticksRemaining <= EVIL_ITEM_BLINK_TICKS);
const bool is_hidden =
blink && ((apple.ticksRemaining <= EVIL_ITEM_FAST_BLINK_TICKS)
? ((state.ticks % 2) == 0)
: (((state.ticks / 2) % 2) == 0));
oamSet(&oamSub, oamId, apple.x * 8, apple.y * 8, 0, 0, SpriteSize_8x8,
SpriteColorFormat_256Color, assets.gfx_apple_rotten, -1, false,
false, false, false, false);
is_hidden, false, false, false);
oamId++;
}
}
@@ -139,13 +144,18 @@ void draw_apples_rotten(const GameState &state, const RenderAssets &assets,
void draw_apples_cursed(const GameState &state, const RenderAssets &assets,
uint16_t &oamId) {
const bool hflip = ((state.ticks % 6) < 3);
for (const std::array<int, 2> &apple : state.cursed_apples) {
for (const EvilItem &apple : state.cursed_apples) {
if (oamId >= 128) {
return;
}
oamSet(&oamSub, oamId, apple[0] * 8, apple[1] * 8, 0, 0, SpriteSize_8x8,
const bool blink = (apple.ticksRemaining <= EVIL_ITEM_BLINK_TICKS);
const bool is_hidden =
blink && ((apple.ticksRemaining <= EVIL_ITEM_FAST_BLINK_TICKS)
? ((state.ticks % 2) == 0)
: (((state.ticks / 2) % 2) == 0));
oamSet(&oamSub, oamId, apple.x * 8, apple.y * 8, 0, 0, SpriteSize_8x8,
SpriteColorFormat_256Color, assets.gfx_apple_cursed, -1, false,
false, hflip, false, false);
is_hidden, hflip, false, false);
oamId++;
}
}