Fix DMG sprite palette selection for enemy and add Game Over transition delay

This commit is contained in:
2026-06-22 19:57:02 +02:00
parent b47455c5d2
commit c98363126b
+11 -6
View File
@@ -44,10 +44,11 @@ int16_t enemy_start_px, enemy_start_py;
int16_t enemy_target_px, enemy_target_py; int16_t enemy_target_px, enemy_target_py;
uint8_t enemy_cooldown = 0; uint8_t enemy_cooldown = 0;
uint8_t game_over = 0; uint8_t game_over = 0;
uint8_t game_over_timer = 0;
const metasprite_t enemy_metasprite[] = { const metasprite_t enemy_metasprite[] = {
METASPR_ITEM(-8, -8, 0, S_PAL(1)), METASPR_ITEM(-8, -8, 0, S_PALETTE),
METASPR_ITEM(0, 8, 2, S_PAL(1)), METASPR_ITEM(0, 8, 2, S_PALETTE),
METASPR_TERM METASPR_TERM
}; };
@@ -266,7 +267,12 @@ void engine_init(void) {
void engine_update(uint8_t keys, uint8_t prev_keys) { void engine_update(uint8_t keys, uint8_t prev_keys) {
if (game_over) { if (game_over) {
if (game_over_timer > 0) {
game_over_timer--;
if (game_over_timer == 0) {
BGP_REG = 0xFF; // Set screen to all black to signify Game Over BGP_REG = 0xFF; // Set screen to all black to signify Game Over
}
}
return; return;
} }
@@ -407,8 +413,8 @@ void engine_update(uint8_t keys, uint8_t prev_keys) {
if (edy < 0) edy = -edy; if (edy < 0) edy = -edy;
uint8_t ep_dist = (edx > edy) ? edx : edy; uint8_t ep_dist = (edx > edy) ? edx : edy;
// Render only if within fog of war radius (<= 2) // Render only if within range (<= 3) to let player see the ghost coming from the edge of fog of war
if (ep_dist <= 2 && enemy_screen_x >= -8 && enemy_screen_x <= 168 && enemy_screen_y >= -8 && enemy_screen_y <= 152) { if (ep_dist <= 3 && enemy_screen_x >= -8 && enemy_screen_x <= 168 && enemy_screen_y >= -8 && enemy_screen_y <= 152) {
move_metasprite(enemy_metasprite, 0, 4, enemy_screen_x, enemy_screen_y); // Sprite index offset 4 move_metasprite(enemy_metasprite, 0, 4, enemy_screen_x, enemy_screen_y); // Sprite index offset 4
} else { } else {
move_metasprite(enemy_metasprite, 0, 4, 0, 0); // Hide offscreen move_metasprite(enemy_metasprite, 0, 4, 0, 0); // Hide offscreen
@@ -426,8 +432,7 @@ void engine_update(uint8_t keys, uint8_t prev_keys) {
if (dx_collision < 12 && dy_collision < 6) { if (dx_collision < 12 && dy_collision < 6) {
game_over = 1; game_over = 1;
BGP_REG = 0xFF; // Screen all black game_over_timer = 30; // 30 frames delay (0.5 seconds) to allow player to see the overlap
return;
} }
uint8_t keys_pressed = keys & ~prev_keys; uint8_t keys_pressed = keys & ~prev_keys;