From 668e2f5d2e2de68712c5939e28f24de75c6b2d0b Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 4 Mar 2019 21:25:33 -0500 Subject: add proper drop timing based on level --- cetris.c | 12 +++++++++++- cetris.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cetris.c b/cetris.c index 4356e86..969ff5e 100644 --- a/cetris.c +++ b/cetris.c @@ -77,6 +77,11 @@ static const piece_matrix default_matrices[7] = { } }; +/* LEVEL DROP SPEED VALUES */ +static const int level_drop_delay[20] = { + 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3 +}; + /* SRS WALL KICK VALUES */ // https://tetris.wiki/SRS @@ -303,6 +308,8 @@ void init_game(struct cetris_game* g) { #endif g->tick = 0; + g->next_drop_tick = level_drop_delay[0]; + g->current_index = 0; clear_move_queue(g); @@ -376,7 +383,10 @@ void shuffle_queue(struct cetris_game* g) { } void update_game_tick(struct cetris_game* g) { - if ((g->tick % CETRIS_HZ) == 0) move_down(g); + if (g->tick == g->next_drop_tick) { + move_down(g); + g->next_drop_tick = g->tick + level_drop_delay[g->level - 1]; + } if (g->current.lock_tick && g->current.lock_tick <= g->tick) { g->current.pos.y++; diff --git a/cetris.h b/cetris.h index cc353de..f18452e 100644 --- a/cetris.h +++ b/cetris.h @@ -79,6 +79,7 @@ struct cetris_game { /* internal game tick */ int tick; + int next_drop_tick; /* progress trackers */ int lines; -- cgit v1.2.3-101-g0448