summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--src/engine.c19
2 files changed, 20 insertions, 1 deletions
diff --git a/README.md b/README.md
index d213330..dc4633a 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ Look at the [repo releases](https://github.com/Oxore/tetris-csfml/releases)! Now
- [x] Levels speed and scores calibration
- [x] Scoring system as in Tetris for NES which is described on [this page](https://tetris.wiki/Scoring)
- [Wall kick](https://tetris.wiki/Wall_kick)
-- Hard drop
+- [x] Hard drop
- [x] Phantom shape
- Table of records
- Settings menu with external `config.yml` file which allows
diff --git a/src/engine.c b/src/engine.c
index 72fdbfc..6abda95 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -20,6 +20,7 @@
#define DOWN (1 << 2)
#define LEFT (1 << 3)
#define RIGHTHOLD (1 << 4)
+#define HARDDROP (1 << 5)
#define LEFTHOLD (1 << 7)
int level_move_latency[] = {
@@ -223,6 +224,14 @@ static void signal_up()
project_ghost_shape(&fld, 1, 0);
}
+static void signal_harddrop()
+{
+ while (field_move_shape_down(&fld, 1));
+ transition_put_shape();
+ sfClock_restart(game.gameTick);
+ sfClock_restart(game.putTick);
+}
+
static void signal_down()
{
if (field_move_shape_down(&fld, 1)) {
@@ -263,6 +272,16 @@ static void game_keys()
arrKeys = arrKeys & ~UP;
}
+ /* HARDDROP */
+ if (sfKeyboard_isKeyPressed(sfKeySpace)) {
+ if (!(arrKeys & HARDDROP)) {
+ arrKeys = arrKeys | HARDDROP;
+ signal_harddrop();
+ }
+ } else {
+ arrKeys = arrKeys & ~HARDDROP;
+ }
+
/* DOWN */
if (sfKeyboard_isKeyPressed(sfKeyDown)) {
if (!(arrKeys & DOWN)) {