summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontends/gl/main.c8
-rw-r--r--frontends/gl/skin.c11
-rw-r--r--frontends/gl/skin.h1
-rw-r--r--lib/cetris.c2
-rw-r--r--lib/cetris.h3
5 files changed, 22 insertions, 3 deletions
diff --git a/frontends/gl/main.c b/frontends/gl/main.c
index 90dbfa5..ca2db71 100644
--- a/frontends/gl/main.c
+++ b/frontends/gl/main.c
@@ -138,6 +138,14 @@ void handle_game_events(cetris_ui *ui, tetris_board_t *board) {
SDL_PauseAudioDevice(ui->audio_device, 0);
board->game.lock_event--;
}
+
+ if (board->game.move_event > 0) {
+ SDL_QueueAudio(ui->audio_device, board->skin.move_sound.wav_buffer,
+ board->skin.move_sound.wav_length);
+
+ SDL_PauseAudioDevice(ui->audio_device, 0);
+ board->game.move_event--;
+ }
}
diff --git a/frontends/gl/skin.c b/frontends/gl/skin.c
index 661f815..a38ec4c 100644
--- a/frontends/gl/skin.c
+++ b/frontends/gl/skin.c
@@ -47,6 +47,8 @@ void load_skin(char* name, cetris_skin_t* skin) {
load_element(&skin->playboard, "playboard.png", dir_name);
load_element(&skin->border, "border.png", dir_name);
+ char file[125];
+
int clear_count = 5;
skin->clear_sound =
(audio_clip_t *)malloc(sizeof(audio_clip_t) * 5);
@@ -59,9 +61,14 @@ void load_skin(char* name, cetris_skin_t* skin) {
load_multiple_audio("four_clear", dir_name,
&tetris_count, skin->tetris_sound);
- format_str(name, 120, "%s/lock.wav", dir_name);
- SDL_LoadWAV(name, &skin->lock_sound.wav_spec,
+ format_str(file, 125, "%s/lock.wav", dir_name);
+ SDL_LoadWAV(file, &skin->lock_sound.wav_spec,
&skin->lock_sound.wav_buffer, &skin->lock_sound.wav_length);
+
+ format_str(file, 125, "%s/move.wav", dir_name);
+ SDL_LoadWAV(file, &skin->move_sound.wav_spec,
+ &skin->move_sound.wav_buffer, &skin->move_sound.wav_length);
+
}
diff --git a/frontends/gl/skin.h b/frontends/gl/skin.h
index b7aa994..ed0e82b 100644
--- a/frontends/gl/skin.h
+++ b/frontends/gl/skin.h
@@ -13,6 +13,7 @@ typedef struct {
audio_clip_t *clear_sound;
audio_clip_t *tetris_sound;
audio_clip_t lock_sound;
+ audio_clip_t move_sound;
} cetris_skin_t;
void load_skin(char* name, cetris_skin_t* skin);
diff --git a/lib/cetris.c b/lib/cetris.c
index 3751157..ea53576 100644
--- a/lib/cetris.c
+++ b/lib/cetris.c
@@ -167,6 +167,7 @@ static void move_current(cetris_game *g, uint8_t move) {
g->current.pos.x += basic_movements[move].x;
int check = check_matrix(g, &g->current.m);
+ if (check > 0 && move != DOWN) g->move_event++;
if (check <= 0) {
g->current.pos.y -= basic_movements[move].y;
g->current.pos.x -= basic_movements[move].x;
@@ -530,6 +531,7 @@ CETRIS_EXPORT bool update_game_tick(cetris_game *g) {
bool did_move = false;
if (g->next_drop_tick && g->tick >= g->next_drop_tick) {
+ if (g->held_moves[DOWN]) g->move_event++;
move_current(g, DOWN);
g->next_drop_tick = 0;
did_move = true;
diff --git a/lib/cetris.h b/lib/cetris.h
index 0cbc5c3..1c3d8f0 100644
--- a/lib/cetris.h
+++ b/lib/cetris.h
@@ -144,7 +144,8 @@ struct cetris_game {
uint8_t line_combo;
bool game_over;
- // events
+ // events
+ uint8_t move_event;
uint8_t line_event;
uint8_t lock_event;
uint8_t tetris_event;