summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontends/sdl/sdl_ui.c22
-rw-r--r--lib/cetris.h4
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;