]> git.earman.xyz Git - sensor-watch.git/commitdiff
Added baby mode which used to be easy mode; easy mode is now same speed as normal...
authorDavid Volovskiy <devolov@gmail.com>
Wed, 17 Jul 2024 21:05:48 +0000 (17:05 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Tue, 3 Sep 2024 20:20:11 +0000 (16:20 -0400)
movement/watch_faces/complication/endless_runner_face.c

index 67a7b54f54f1c0955028a8c5ff7fe0491ab55b6e..1e6abaeb5fba36faceef24e5000bf30bab025727 100644 (file)
@@ -43,15 +43,16 @@ typedef enum {
 } RunnerCurrScreen;
 
 typedef enum {
-    DIFF_NORM = 0,   // 8x speed; 4 0's min; jump is 3 frames
-    DIFF_HARD,       // 8x speed; 3 0's min; jump is 2 frames
-    DIFF_EASY,       // 4x speed; 4 0's min; jump is 3 frames
+    DIFF_BABY = 0,  // 0.5x speed; 4 0's min; jump is 3 frames
+    DIFF_EASY,      //   1x speed; 4 0's min; jump is 3 frames
+    DIFF_NORM,      //   1x speed; 4 0's min; jump is 2 frames
+    DIFF_HARD,      //   1x speed; 3 0's min; jump is 2 frames
     DIFF_COUNT
 } RunnerDifficulty;
 
 #define NUM_GRID 12
 #define FREQ 8
-#define FREQ_EASY 4
+#define FREQ_SLOW 4
 #define MAX_DISP_SCORE 39  // The top-right digits can't properly display above 39
 
 typedef struct {
@@ -80,7 +81,7 @@ static uint32_t get_random_legal(uint32_t prev_val, uint16_t difficulty) {
   * @param difficulty To dictate how spread apart the obsticles must be
   * @return the new random value, where it's first NUM_GRID MSBs are the same as prev_val
   */
-    uint8_t min_zeros = difficulty == DIFF_HARD ? 3 : 4;
+    uint8_t min_zeros = (difficulty == DIFF_HARD) ? 3 : 4;
     uint32_t max = (1 << (_num_bits_obst_pattern - NUM_GRID)) - 1;
     uint32_t rand = get_random(max);
     uint32_t rand_legal = 0;
@@ -141,6 +142,9 @@ static void display_score(uint8_t score) {
 static void display_difficulty(uint16_t difficulty) {
     switch (difficulty)
     {
+    case DIFF_BABY:
+        watch_display_string("b", 9);
+        break;
     case DIFF_EASY:
         watch_display_string("E", 9);
         break;
@@ -277,6 +281,8 @@ void endless_runner_face_setup(movement_settings_t *settings, uint8_t watch_face
     if (*context_ptr == NULL) {
         *context_ptr = malloc(sizeof(endless_runner_state_t));
         memset(*context_ptr, 0, sizeof(endless_runner_state_t));
+        endless_runner_state_t *state = (endless_runner_state_t *)*context_ptr;
+        state->difficulty = DIFF_NORM;
     }
 }
 
@@ -312,7 +318,7 @@ bool endless_runner_face_loop(movement_event_t event, movement_settings_t *setti
                     game_state.jump_state = JUMPING_1;
                     break;
                 case JUMPING_1:
-                    game_state.jump_state = (state -> difficulty == DIFF_HARD) ? JUMPING_3 : JUMPING_2;
+                    game_state.jump_state = (state -> difficulty >= DIFF_NORM) ? JUMPING_3 : JUMPING_2;
                     break;
                 case JUMPING_2:
                     game_state.jump_state = JUMPING_3;
@@ -341,7 +347,7 @@ bool endless_runner_face_loop(movement_event_t event, movement_settings_t *setti
         case EVENT_ALARM_BUTTON_UP:
             if (state -> curr_screen == SCREEN_TITLE) {
                 state -> curr_screen = SCREEN_PLAYING;
-                movement_request_tick_frequency((state -> difficulty == DIFF_EASY) ? FREQ_EASY : FREQ);
+                movement_request_tick_frequency((state -> difficulty == DIFF_BABY) ? FREQ_SLOW : FREQ);
                 watch_display_string("      ", 4);
                 display_ball(false);
                 do  // Avoid the first array of obstacles being a boring line of 0s 
@@ -364,7 +370,7 @@ bool endless_runner_face_loop(movement_event_t event, movement_settings_t *setti
                 state -> difficulty = (state -> difficulty + 1) % DIFF_COUNT;
                 display_difficulty(state -> difficulty);
                 if (state -> soundOn) {
-                    if (state -> difficulty == DIFF_EASY) watch_buzzer_play_note(BUZZER_NOTE_B4, 30);
+                    if (state -> difficulty == 0) watch_buzzer_play_note(BUZZER_NOTE_B4, 30);
                     else  watch_buzzer_play_note(BUZZER_NOTE_C5, 30);
                 }
             }