From 6d94992e58f5ed7ab2a29f733a6d4cc6e9a147f8 Mon Sep 17 00:00:00 2001 From: enne2 Date: Mon, 22 Jun 2026 19:34:05 +0200 Subject: [PATCH] Fix DAS and movement transition synchronization to eliminate 2-frame lag between tiles --- engine.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/engine.c b/engine.c index 94027a5..914cdd6 100644 --- a/engine.c +++ b/engine.c @@ -225,23 +225,6 @@ void engine_init(void) { } void engine_update(uint8_t keys, uint8_t prev_keys) { - uint8_t keys_pressed = keys & ~prev_keys; - - if (keys_pressed) { - das_timer = DAS_DELAY; - das_active = 1; - } else if (keys && das_active) { - if (das_timer > 0) { - das_timer--; - } - if (das_timer == 0 && !is_moving) { - das_timer = DAS_REPEAT; - keys_pressed = keys; // trigger move - } - } else { - das_active = 0; - } - if (is_moving) { move_progress++; @@ -279,6 +262,26 @@ void engine_update(uint8_t keys, uint8_t prev_keys) { // Set player to idle stand frame update_player_sprite(); } + } + + uint8_t keys_pressed = keys & ~prev_keys; + + if (keys_pressed) { + das_timer = DAS_DELAY; + das_active = 1; + } else if (keys && das_active) { + if (das_timer > 0) { + das_timer--; + } + if (das_timer == 0 && !is_moving) { + das_timer = DAS_REPEAT; + keys_pressed = keys; // trigger move + } + } else { + das_active = 0; + } + + if (is_moving) { return; // Ignore other inputs while moving }