diff --git a/assets/sounds/genesis_bass/genesis_bass_024.wav b/assets/sounds/genesis_bass/genesis_bass_024.wav new file mode 100644 index 0000000..23920f3 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_024.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_025.wav b/assets/sounds/genesis_bass/genesis_bass_025.wav new file mode 100644 index 0000000..3c1d7ce Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_025.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_026.wav b/assets/sounds/genesis_bass/genesis_bass_026.wav new file mode 100644 index 0000000..d9e2227 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_026.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_027.wav b/assets/sounds/genesis_bass/genesis_bass_027.wav new file mode 100644 index 0000000..7d22a9c Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_027.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_028.wav b/assets/sounds/genesis_bass/genesis_bass_028.wav new file mode 100644 index 0000000..cc32559 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_028.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_029.wav b/assets/sounds/genesis_bass/genesis_bass_029.wav new file mode 100644 index 0000000..9f3a2a4 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_029.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_030.wav b/assets/sounds/genesis_bass/genesis_bass_030.wav new file mode 100644 index 0000000..6bdb8f2 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_030.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_031.wav b/assets/sounds/genesis_bass/genesis_bass_031.wav new file mode 100644 index 0000000..eafad30 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_031.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_032.wav b/assets/sounds/genesis_bass/genesis_bass_032.wav new file mode 100644 index 0000000..cf114a5 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_032.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_033.wav b/assets/sounds/genesis_bass/genesis_bass_033.wav new file mode 100644 index 0000000..463532a Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_033.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_034.wav b/assets/sounds/genesis_bass/genesis_bass_034.wav new file mode 100644 index 0000000..737cfd0 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_034.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_035.wav b/assets/sounds/genesis_bass/genesis_bass_035.wav new file mode 100644 index 0000000..75e6bff Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_035.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_036.wav b/assets/sounds/genesis_bass/genesis_bass_036.wav new file mode 100644 index 0000000..74b8c89 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_036.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_037.wav b/assets/sounds/genesis_bass/genesis_bass_037.wav new file mode 100644 index 0000000..650d4b0 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_037.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_038.wav b/assets/sounds/genesis_bass/genesis_bass_038.wav new file mode 100644 index 0000000..67b2539 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_038.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_039.wav b/assets/sounds/genesis_bass/genesis_bass_039.wav new file mode 100644 index 0000000..df7a33a Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_039.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_040.wav b/assets/sounds/genesis_bass/genesis_bass_040.wav new file mode 100644 index 0000000..6c4b91b Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_040.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_041.wav b/assets/sounds/genesis_bass/genesis_bass_041.wav new file mode 100644 index 0000000..086746e Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_041.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_042.wav b/assets/sounds/genesis_bass/genesis_bass_042.wav new file mode 100644 index 0000000..43692dd Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_042.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_043.wav b/assets/sounds/genesis_bass/genesis_bass_043.wav new file mode 100644 index 0000000..6370009 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_043.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_044.wav b/assets/sounds/genesis_bass/genesis_bass_044.wav new file mode 100644 index 0000000..99cf68e Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_044.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_045.wav b/assets/sounds/genesis_bass/genesis_bass_045.wav new file mode 100644 index 0000000..c756616 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_045.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_046.wav b/assets/sounds/genesis_bass/genesis_bass_046.wav new file mode 100644 index 0000000..93ce6d7 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_046.wav differ diff --git a/assets/sounds/genesis_bass/genesis_bass_047.wav b/assets/sounds/genesis_bass/genesis_bass_047.wav new file mode 100644 index 0000000..9b062c2 Binary files /dev/null and b/assets/sounds/genesis_bass/genesis_bass_047.wav differ diff --git a/src/samples/ghhb_game.h b/src/samples/ghhb_game.h index 16fc9be..8151d90 100644 --- a/src/samples/ghhb_game.h +++ b/src/samples/ghhb_game.h @@ -13,6 +13,7 @@ namespace { constexpr int LANE_COUNT = 12; +constexpr int OCTAVE_COUNT = 2; constexpr int MAX_GAMEPADS = 4; constexpr int MAX_INSTRUMENT_TYPES = MAX_GAMEPADS; constexpr float RECEPTOR_HEIGHT = 150.0f; @@ -63,36 +64,63 @@ const Color INSTRUMENT_COLORS[MAX_INSTRUMENT_TYPES] = { {255, 200, 80, 255}, // yellow }; -/* Per-instrument WAV paths (lane = midi % 12). C4–B4 map to lanes 0–11. Reuse same set until more assets exist. */ -const char* const INSTRUMENT_LANE_WAV[MAX_INSTRUMENT_TYPES][LANE_COUNT] = { +const char* const INSTRUMENT_LANE_WAV[MAX_INSTRUMENT_TYPES][LANE_COUNT * OCTAVE_COUNT] { { // Instrument 0 - "assets/sounds/nes_harp/nes_harp_C4.wav", "assets/sounds/nes_harp/nes_harp_Cs4.wav", - "assets/sounds/nes_harp/nes_harp_D4.wav", "assets/sounds/nes_harp/nes_harp_Ds4.wav", - "assets/sounds/nes_harp/nes_harp_E4.wav", "assets/sounds/nes_harp/nes_harp_F4.wav", - "assets/sounds/nes_harp/nes_harp_Fs4.wav", "assets/sounds/nes_harp/nes_harp_G4.wav", - "assets/sounds/nes_harp/nes_harp_Gs4.wav", "assets/sounds/nes_harp/nes_harp_A4.wav", - "assets/sounds/nes_harp/nes_harp_As4.wav", "assets/sounds/nes_harp/nes_harp_B4.wav"}, + "assets/sounds/genesis_bass/genesis_bass_024.wav", "assets/sounds/genesis_bass/genesis_bass_025.wav", + "assets/sounds/genesis_bass/genesis_bass_026.wav", "assets/sounds/genesis_bass/genesis_bass_027.wav", + "assets/sounds/genesis_bass/genesis_bass_028.wav", "assets/sounds/genesis_bass/genesis_bass_029.wav", + "assets/sounds/genesis_bass/genesis_bass_030.wav", "assets/sounds/genesis_bass/genesis_bass_031.wav", + "assets/sounds/genesis_bass/genesis_bass_032.wav", "assets/sounds/genesis_bass/genesis_bass_033.wav", + "assets/sounds/genesis_bass/genesis_bass_034.wav", "assets/sounds/genesis_bass/genesis_bass_035.wav", + "assets/sounds/genesis_bass/genesis_bass_036.wav", "assets/sounds/genesis_bass/genesis_bass_037.wav", + "assets/sounds/genesis_bass/genesis_bass_038.wav", "assets/sounds/genesis_bass/genesis_bass_039.wav", + "assets/sounds/genesis_bass/genesis_bass_040.wav", "assets/sounds/genesis_bass/genesis_bass_041.wav", + "assets/sounds/genesis_bass/genesis_bass_042.wav", "assets/sounds/genesis_bass/genesis_bass_043.wav", + "assets/sounds/genesis_bass/genesis_bass_044.wav", "assets/sounds/genesis_bass/genesis_bass_045.wav", + "assets/sounds/genesis_bass/genesis_bass_046.wav", "assets/sounds/genesis_bass/genesis_bass_047.wav" + }, { // Instrument 1 - "assets/sounds/nes_harp/nes_harp_C4.wav", "assets/sounds/nes_harp/nes_harp_Cs4.wav", - "assets/sounds/nes_harp/nes_harp_D4.wav", "assets/sounds/nes_harp/nes_harp_Ds4.wav", - "assets/sounds/nes_harp/nes_harp_E4.wav", "assets/sounds/nes_harp/nes_harp_F4.wav", - "assets/sounds/nes_harp/nes_harp_Fs4.wav", "assets/sounds/nes_harp/nes_harp_G4.wav", - "assets/sounds/nes_harp/nes_harp_Gs4.wav", "assets/sounds/nes_harp/nes_harp_A4.wav", - "assets/sounds/nes_harp/nes_harp_As4.wav", "assets/sounds/nes_harp/nes_harp_B4.wav"}, + "assets/sounds/genesis_bass/genesis_bass_024.wav", "assets/sounds/genesis_bass/genesis_bass_025.wav", + "assets/sounds/genesis_bass/genesis_bass_026.wav", "assets/sounds/genesis_bass/genesis_bass_027.wav", + "assets/sounds/genesis_bass/genesis_bass_028.wav", "assets/sounds/genesis_bass/genesis_bass_029.wav", + "assets/sounds/genesis_bass/genesis_bass_030.wav", "assets/sounds/genesis_bass/genesis_bass_031.wav", + "assets/sounds/genesis_bass/genesis_bass_032.wav", "assets/sounds/genesis_bass/genesis_bass_033.wav", + "assets/sounds/genesis_bass/genesis_bass_034.wav", "assets/sounds/genesis_bass/genesis_bass_035.wav", + "assets/sounds/genesis_bass/genesis_bass_036.wav", "assets/sounds/genesis_bass/genesis_bass_037.wav", + "assets/sounds/genesis_bass/genesis_bass_038.wav", "assets/sounds/genesis_bass/genesis_bass_039.wav", + "assets/sounds/genesis_bass/genesis_bass_040.wav", "assets/sounds/genesis_bass/genesis_bass_041.wav", + "assets/sounds/genesis_bass/genesis_bass_042.wav", "assets/sounds/genesis_bass/genesis_bass_043.wav", + "assets/sounds/genesis_bass/genesis_bass_044.wav", "assets/sounds/genesis_bass/genesis_bass_045.wav", + "assets/sounds/genesis_bass/genesis_bass_046.wav", "assets/sounds/genesis_bass/genesis_bass_047.wav" + }, { // Instrument 2 - "assets/sounds/nes_harp/nes_harp_C4.wav", "assets/sounds/nes_harp/nes_harp_Cs4.wav", - "assets/sounds/nes_harp/nes_harp_D4.wav", "assets/sounds/nes_harp/nes_harp_Ds4.wav", - "assets/sounds/nes_harp/nes_harp_E4.wav", "assets/sounds/nes_harp/nes_harp_F4.wav", - "assets/sounds/nes_harp/nes_harp_Fs4.wav", "assets/sounds/nes_harp/nes_harp_G4.wav", - "assets/sounds/nes_harp/nes_harp_Gs4.wav", "assets/sounds/nes_harp/nes_harp_A4.wav", - "assets/sounds/nes_harp/nes_harp_As4.wav", "assets/sounds/nes_harp/nes_harp_B4.wav"}, + "assets/sounds/genesis_bass/genesis_bass_024.wav", "assets/sounds/genesis_bass/genesis_bass_025.wav", + "assets/sounds/genesis_bass/genesis_bass_026.wav", "assets/sounds/genesis_bass/genesis_bass_027.wav", + "assets/sounds/genesis_bass/genesis_bass_028.wav", "assets/sounds/genesis_bass/genesis_bass_029.wav", + "assets/sounds/genesis_bass/genesis_bass_030.wav", "assets/sounds/genesis_bass/genesis_bass_031.wav", + "assets/sounds/genesis_bass/genesis_bass_032.wav", "assets/sounds/genesis_bass/genesis_bass_033.wav", + "assets/sounds/genesis_bass/genesis_bass_034.wav", "assets/sounds/genesis_bass/genesis_bass_035.wav", + "assets/sounds/genesis_bass/genesis_bass_036.wav", "assets/sounds/genesis_bass/genesis_bass_037.wav", + "assets/sounds/genesis_bass/genesis_bass_038.wav", "assets/sounds/genesis_bass/genesis_bass_039.wav", + "assets/sounds/genesis_bass/genesis_bass_040.wav", "assets/sounds/genesis_bass/genesis_bass_041.wav", + "assets/sounds/genesis_bass/genesis_bass_042.wav", "assets/sounds/genesis_bass/genesis_bass_043.wav", + "assets/sounds/genesis_bass/genesis_bass_044.wav", "assets/sounds/genesis_bass/genesis_bass_045.wav", + "assets/sounds/genesis_bass/genesis_bass_046.wav", "assets/sounds/genesis_bass/genesis_bass_047.wav" + }, { // Instrument 3 - "assets/sounds/nes_harp/nes_harp_C4.wav", "assets/sounds/nes_harp/nes_harp_Cs4.wav", - "assets/sounds/nes_harp/nes_harp_D4.wav", "assets/sounds/nes_harp/nes_harp_Ds4.wav", - "assets/sounds/nes_harp/nes_harp_E4.wav", "assets/sounds/nes_harp/nes_harp_F4.wav", - "assets/sounds/nes_harp/nes_harp_Fs4.wav", "assets/sounds/nes_harp/nes_harp_G4.wav", - "assets/sounds/nes_harp/nes_harp_Gs4.wav", "assets/sounds/nes_harp/nes_harp_A4.wav", - "assets/sounds/nes_harp/nes_harp_As4.wav", "assets/sounds/nes_harp/nes_harp_B4.wav"}, + "assets/sounds/genesis_bass/genesis_bass_024.wav", "assets/sounds/genesis_bass/genesis_bass_025.wav", + "assets/sounds/genesis_bass/genesis_bass_026.wav", "assets/sounds/genesis_bass/genesis_bass_027.wav", + "assets/sounds/genesis_bass/genesis_bass_028.wav", "assets/sounds/genesis_bass/genesis_bass_029.wav", + "assets/sounds/genesis_bass/genesis_bass_030.wav", "assets/sounds/genesis_bass/genesis_bass_031.wav", + "assets/sounds/genesis_bass/genesis_bass_032.wav", "assets/sounds/genesis_bass/genesis_bass_033.wav", + "assets/sounds/genesis_bass/genesis_bass_034.wav", "assets/sounds/genesis_bass/genesis_bass_035.wav", + "assets/sounds/genesis_bass/genesis_bass_036.wav", "assets/sounds/genesis_bass/genesis_bass_037.wav", + "assets/sounds/genesis_bass/genesis_bass_038.wav", "assets/sounds/genesis_bass/genesis_bass_039.wav", + "assets/sounds/genesis_bass/genesis_bass_040.wav", "assets/sounds/genesis_bass/genesis_bass_041.wav", + "assets/sounds/genesis_bass/genesis_bass_042.wav", "assets/sounds/genesis_bass/genesis_bass_043.wav", + "assets/sounds/genesis_bass/genesis_bass_044.wav", "assets/sounds/genesis_bass/genesis_bass_045.wav", + "assets/sounds/genesis_bass/genesis_bass_046.wav", "assets/sounds/genesis_bass/genesis_bass_047.wav" + } }; struct Glyph @@ -100,6 +128,7 @@ struct Glyph float time = 0.0f; int lane = 0; int instrument_slot = 0; + int octave = 0; float y_position(float song_time, float hit_line_y) const { @@ -125,7 +154,8 @@ std::vector chart_from_song(const Song& song) continue; float time_sec = note.ticks / ticks_per_sec; int lane = note.midi % LANE_COUNT; - glyphs.push_back(Glyph{time_sec, lane, instrument_slot}); + int octave = note.midi % (LANE_COUNT * OCTAVE_COUNT); + glyphs.push_back(Glyph{time_sec, lane, instrument_slot, octave}); } } std::sort(glyphs.begin(), glyphs.end(), @@ -180,8 +210,8 @@ public: float lane_width = 0.0f; float screen_width = 0.0f; float screen_height = 0.0f; - Sound note_sounds[MAX_INSTRUMENT_TYPES][LANE_COUNT] = {{0}}; - bool note_sounds_loaded[MAX_INSTRUMENT_TYPES][LANE_COUNT] = {{false}}; + Sound note_sounds[MAX_INSTRUMENT_TYPES][LANE_COUNT * OCTAVE_COUNT] = {{0}}; + bool note_sounds_loaded[MAX_INSTRUMENT_TYPES][LANE_COUNT * OCTAVE_COUNT] = {{false}}; static constexpr float PRESS_FLASH_DURATION = 0.12f; static constexpr float MISS_FLASH_DURATION = 0.15f; float press_flash_timer[LANE_COUNT] = {0}; @@ -241,7 +271,7 @@ public: } for (int slot = 0; slot < MAX_INSTRUMENT_TYPES; slot++) { - for (int lane = 0; lane < LANE_COUNT; lane++) + for (int lane = 0; lane < LANE_COUNT * OCTAVE_COUNT; lane++) { if (note_sounds_loaded[slot][lane]) { @@ -262,7 +292,7 @@ public: update_layout(); for (int slot = 0; slot < MAX_INSTRUMENT_TYPES; slot++) { - for (int lane = 0; lane < LANE_COUNT; lane++) + for (int lane = 0; lane < LANE_COUNT * OCTAVE_COUNT; lane++) { const char* path = INSTRUMENT_LANE_WAV[slot][lane]; if (FileExists(path)) @@ -348,8 +378,9 @@ public: hit_flash_timer[n->lane] = PRESS_FLASH_DURATION; spawned.erase(it); completed_notes.insert(n); - if (note_sounds_loaded[n->instrument_slot][n->lane]) - PlaySound(note_sounds[n->instrument_slot][n->lane]); + printf("note lane: %d, note octave: %d\n", n->lane, n->octave); + if (note_sounds_loaded[n->instrument_slot][n->octave]) + PlaySound(note_sounds[n->instrument_slot][n->octave]); } combo++; score += 100 + std::min(combo * 10, 50);