From ada53c1b0d303e420d884e77845a31c9de6dfa12 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sun, 27 Oct 2019 00:23:38 -0400 Subject: misc fixes --- frontends/sdl/sdl_ui.c | 22 ++++++++++++++-------- lib/cetris.h | 4 +++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/frontends/sdl/sdl_ui.c b/frontends/sdl/sdl_ui.c index 069db4e..c36e440 100644 --- a/frontends/sdl/sdl_ui.c +++ b/frontends/sdl/sdl_ui.c @@ -261,22 +261,26 @@ void draw() { int main(void) { setup(); - init_game(&g); + ini_parser p; load_ini_file(&p, "config.ini"); + + cetris_config config; int das = atoi(get_ini_value(&p, "das", "das")); - g.config.das_das = das * .06f; + config.das_das = das * .06f; int arr = atoi(get_ini_value(&p, "das", "arr")); - g.config.das_arr = arr * .06f; + config.das_arr = arr * .06f; + + config.drop_period = atoi(get_ini_value(&p, "game", "drop_delay")) * .06f; + config.next_piece_delay = atoi(get_ini_value(&p, "game", "next_piece_delay")); + config.lock_delay = atoi(get_ini_value(&p, "game", "lock_delay")); + config.wait_on_clear = atoi(get_ini_value(&p, "game", "wait_on_clear")); + config.line_delay_clear = atoi(get_ini_value(&p, "game", "line_clear_delay")); - g.config.drop_period = atoi(get_ini_value(&p, "game", "drop_delay")) * .06f; - g.config.next_piece_delay = atoi(get_ini_value(&p, "game", "next_piece_delay")); - g.config.lock_delay = atoi(get_ini_value(&p, "game", "lock_delay")); - g.config.wait_on_clear = atoi(get_ini_value(&p, "game", "wait_on_clear")); - g.config.line_delay_clear = atoi(get_ini_value(&p, "game", "line_clear_delay")); + init_game(&g, &config); #ifdef _WIN32 HANDLE thread = CreateThread(NULL, 0, game_loop, NULL, 0, NULL); @@ -309,6 +313,8 @@ int main(void) { move_piece(&g, ROTATE_CW); break; case 'z': move_piece(&g, ROTATE_CCW); break; + case 'r': + init_game(&g, &config); break; } break; case SDL_KEYUP: diff --git a/lib/cetris.h b/lib/cetris.h index e5a7a7e..57f2a17 100644 --- a/lib/cetris.h +++ b/lib/cetris.h @@ -534,6 +534,7 @@ void update_board(cetris_game *g) { add_score(g, lines_cleared); if (lines_cleared > 0) { g->lines += lines_cleared; + if (g->lines >= 20) g->game_over = true; if (g->lines >= (g->level * 10)) g->level++; } @@ -606,7 +607,7 @@ CETRIS_EXPORT void move_piece(cetris_game *g, uint8_t move) { } -CETRIS_EXPORT void init_game(cetris_game *g) { +CETRIS_EXPORT void init_game(cetris_game *g, cetris_config* c) { /* check for config errors */ assert(CETRIS_NEXT_PIECE_DELAY >= CETRIS_LINE_CLEAR_DELAY); @@ -618,6 +619,7 @@ CETRIS_EXPORT void init_game(cetris_game *g) { #endif memset(g, 0, sizeof(cetris_game)); + memcpy(&g->config, c, sizeof(cetris_config)); g->level = CETRIS_STARTING_LEVEL; g->highest_line = CETRIS_BOARD_Y; -- cgit v1.2.3-101-g0448