Fix DAS and movement transition synchronization to eliminate 2-frame lag between tiles

This commit is contained in:
2026-06-22 19:34:05 +02:00
parent 7d85aec6ec
commit 6d94992e58
+20 -17
View File
@@ -225,23 +225,6 @@ void engine_init(void) {
} }
void engine_update(uint8_t keys, uint8_t prev_keys) { 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) { if (is_moving) {
move_progress++; move_progress++;
@@ -279,6 +262,26 @@ void engine_update(uint8_t keys, uint8_t prev_keys) {
// Set player to idle stand frame // Set player to idle stand frame
update_player_sprite(); 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 return; // Ignore other inputs while moving
} }