Skip to content

Commit fd9bf58

Browse files
committed
Fixing music
1 parent 4463c2c commit fd9bf58

File tree

15 files changed

+135
-102
lines changed

15 files changed

+135
-102
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,4 @@ add_executable(spelunkyds
5151
source/collisions/collisions.cpp
5252
source/collisions/collisions.h
5353
source/hud/hud.cpp source/hud/hud.h
54-
source/sprites/sprite_info.cpp source/sprites/sprite_info.h source/camera/camera.cpp source/camera/camera.h source/memory/oam_manager.cpp source/memory/oam_manager.h source/input/input_handler.cpp source/input/input_handler.h source/sprites/spritesheet_type.h source/memory/oam_type.h source/sprites/items/rock.h source/sprites/items/jar.cpp source/sprites/items/jar.h source/sprites/enemies/snake.cpp source/sprites/enemies/snake.h source/sprites/collectibles/moniez.cpp source/sprites/collectibles/moniez.h source/tiles/map_tile_type.h source/sprites/animations/blood.cpp source/sprites/animations/blood.h source/sprites/animations/blood_element.cpp source/sprites/animations/blood_element.h source/sprites/non_interactive/spelunky_title.cpp source/sprites/non_interactive/spelunky_title.h source/tiles/tile_orientation.h source/sprites/non_interactive/title_menu_sign.cpp source/sprites/non_interactive/title_menu_sign.h source/sprites/menu_sign_type.h source/tiles/splash_screen_type.h source/rooms/left_right_rooms.h source/rooms/left_right_down_rooms.h source/rooms/left_right_up_rooms.h source/rooms/closed_rooms.h source/rooms/splash_screens.h source/rooms/entrance_rooms.h source/rooms/exit_rooms.h source/rooms/room_type.h source/sprites/enemies/bat.cpp source/sprites/enemies/bat.h source/sprites/enemies/spider.cpp source/sprites/enemies/spider.h source/sprites/sprite_type.h source/globals_definitions.h source/sound/sound_utils.h source/console/console_utils.h source/time/time_utils.h source/time/time_utils.cpp source/memory/oam_utils.cpp source/memory/oam_utils.h source/sprites/main_dude/whip.cpp source/sprites/main_dude/whip.h source/sprites/traps/spikes.cpp source/sprites/traps/spikes.h source/sprites/collectibles/chest.cpp source/sprites/collectibles/chest.h source/sprites/collectibles/crate.h source/sprites/collectibles/crate.cpp source/sprites/collectibles/shotgun.h source/sprites/collectibles/shotgun.cpp source/sprites/collectibles/bullet.h source/sprites/collectibles/bullet.cpp source/sprites/collectibles/pistol.h source/sprites/collectibles/pistol.cpp source/sprites/collectibles/spring_shoes.h source/sprites/collectibles/spring_shoes.cpp source/sprites/collectibles/mitt.h source/sprites/collectibles/mitt.cpp source/sprites/collectibles/glove.h source/sprites/collectibles/glove.cpp source/sprites/collectibles/compass.h source/sprites/collectibles/compass.cpp source/sprites/animations/got_collectible.h source/sprites/animations/got_collectible.cpp source/camera/layer_level.h source/sprites/enemies/shopkeeper.h source/sprites/enemies/shopkeeper.cpp source/sprites/main_dude/dude_utils.cpp source/sprites/main_dude/game_state.h source/sprites/main_dude/game_state.cpp source/sprites/enemies/caveman.h source/sprites/enemies/caveman.cpp source/sprites/animations/fall_poof.h source/sprites/animations/fall_poof.cpp source/sprites/items/cape.h source/sprites/items/cape.cpp source/sprites/items/spike_shoes.h source/sprites/items/spike_shoes.cpp source/sprites/items/pick.h source/sprites/items/pick.cpp source/sprites/items/jetpack.h source/sprites/items/jetpack.cpp source/sprites/items/parachute.h source/sprites/items/parachute.cpp source/sprites/items/rope_pile.h source/sprites/items/rope_pile.cpp source/sprites/items/bomb_bag.h source/sprites/items/bomb_bag.cpp source/sprites/items/bomb_box.h source/sprites/items/bomb_box.cpp source/sprites/animations/flame.h source/sprites/animations/flame_element.cpp source/sprites/animations/flame.cpp source/sprites/animations/flame_element.h source/sprites/enemies/damsel.h source/sprites/enemies/damsel.cpp source/sprites/animations/smooch.h source/sprites/animations/smooch.cpp source/rooms/shops.h source/sprites/non_interactive/lamp.h source/sprites/non_interactive/lamp.cpp source/tiles/direction.h source/sprites/collectibles/collectibles_utils.h source/sprites/collectibles/collectibles_utils.cpp source/sprites/shopping_object.h source/sprites/non_interactive/shopping_icon.h source/sprites/non_interactive/shopping_icon.cpp source/sprites/shopping_object.cpp source/sprites/traps/arrow_trap.h source/sprites/traps/arrow_trap.cpp source/sprites/animations/blast.h source/sprites/animations/blast.cpp source/rooms/snake_well.h source/sprites/enemies/skeleton.cpp source/sprites/enemies/skeleton.h)
54+
source/sprites/sprite_info.cpp source/sprites/sprite_info.h source/camera/camera.cpp source/camera/camera.h source/memory/oam_manager.cpp source/memory/oam_manager.h source/input/input_handler.cpp source/input/input_handler.h source/sprites/spritesheet_type.h source/memory/oam_type.h source/sprites/items/rock.h source/sprites/items/jar.cpp source/sprites/items/jar.h source/sprites/enemies/snake.cpp source/sprites/enemies/snake.h source/sprites/collectibles/moniez.cpp source/sprites/collectibles/moniez.h source/tiles/map_tile_type.h source/sprites/animations/blood.cpp source/sprites/animations/blood.h source/sprites/animations/blood_element.cpp source/sprites/animations/blood_element.h source/sprites/non_interactive/spelunky_title.cpp source/sprites/non_interactive/spelunky_title.h source/tiles/tile_orientation.h source/sprites/non_interactive/title_menu_sign.cpp source/sprites/non_interactive/title_menu_sign.h source/sprites/menu_sign_type.h source/tiles/splash_screen_type.h source/rooms/left_right_rooms.h source/rooms/left_right_down_rooms.h source/rooms/left_right_up_rooms.h source/rooms/closed_rooms.h source/rooms/splash_screens.h source/rooms/entrance_rooms.h source/rooms/exit_rooms.h source/rooms/room_type.h source/sprites/enemies/bat.cpp source/sprites/enemies/bat.h source/sprites/enemies/spider.cpp source/sprites/enemies/spider.h source/sprites/sprite_type.h source/globals_definitions.h source/sound/sound_utils.h source/console/console_utils.h source/time/time_utils.h source/time/time_utils.cpp source/memory/oam_utils.cpp source/memory/oam_utils.h source/sprites/main_dude/whip.cpp source/sprites/main_dude/whip.h source/sprites/traps/spikes.cpp source/sprites/traps/spikes.h source/sprites/collectibles/chest.cpp source/sprites/collectibles/chest.h source/sprites/collectibles/crate.h source/sprites/collectibles/crate.cpp source/sprites/collectibles/shotgun.h source/sprites/collectibles/shotgun.cpp source/sprites/collectibles/bullet.h source/sprites/collectibles/bullet.cpp source/sprites/collectibles/pistol.h source/sprites/collectibles/pistol.cpp source/sprites/collectibles/spring_shoes.h source/sprites/collectibles/spring_shoes.cpp source/sprites/collectibles/mitt.h source/sprites/collectibles/mitt.cpp source/sprites/collectibles/glove.h source/sprites/collectibles/glove.cpp source/sprites/collectibles/compass.h source/sprites/collectibles/compass.cpp source/sprites/animations/got_collectible.h source/sprites/animations/got_collectible.cpp source/camera/layer_level.h source/sprites/enemies/shopkeeper.h source/sprites/enemies/shopkeeper.cpp source/sprites/main_dude/dude_utils.cpp source/sprites/main_dude/game_state.h source/sprites/main_dude/game_state.cpp source/sprites/enemies/caveman.h source/sprites/enemies/caveman.cpp source/sprites/animations/fall_poof.h source/sprites/animations/fall_poof.cpp source/sprites/items/cape.h source/sprites/items/cape.cpp source/sprites/items/spike_shoes.h source/sprites/items/spike_shoes.cpp source/sprites/items/pick.h source/sprites/items/pick.cpp source/sprites/items/jetpack.h source/sprites/items/jetpack.cpp source/sprites/items/parachute.h source/sprites/items/parachute.cpp source/sprites/items/rope_pile.h source/sprites/items/rope_pile.cpp source/sprites/items/bomb_bag.h source/sprites/items/bomb_bag.cpp source/sprites/items/bomb_box.h source/sprites/items/bomb_box.cpp source/sprites/animations/flame.h source/sprites/animations/flame_element.cpp source/sprites/animations/flame.cpp source/sprites/animations/flame_element.h source/sprites/enemies/damsel.h source/sprites/enemies/damsel.cpp source/sprites/animations/smooch.h source/sprites/animations/smooch.cpp source/rooms/shops.h source/sprites/non_interactive/lamp.h source/sprites/non_interactive/lamp.cpp source/tiles/direction.h source/sprites/collectibles/collectibles_utils.h source/sprites/collectibles/collectibles_utils.cpp source/sprites/shopping_object.h source/sprites/non_interactive/shopping_icon.h source/sprites/non_interactive/shopping_icon.cpp source/sprites/shopping_object.cpp source/sprites/traps/arrow_trap.h source/sprites/traps/arrow_trap.cpp source/sprites/animations/blast.h source/sprites/animations/blast.cpp source/rooms/snake_well.h source/sprites/enemies/skeleton.cpp source/sprites/enemies/skeleton.h source/sound/sound_utils.cpp)

source/game_loop.cpp

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,32 @@ void gameloop::scroll() {
5555

5656
global::input_handler->updateInput();
5757

58+
59+
if (global::game_state->bombed) {
60+
global::level_generator->render_tiles_on_base_map();
61+
global::game_state->bombed = false;
62+
for (int a = 0; a < global::sprites.size(); a++)
63+
(*global::sprites.at(a)).bottomCollision = false;
64+
}
65+
66+
global::camera->update_position();
67+
68+
for (int a = 0; a < global::sprites.size(); a++) {
69+
if (global::sprites.at(
70+
a) /*&& !global::sprites.at(a)->ready_to_dispose *//*&& !global::sprites.at(a)->killed*/) {
71+
(*global::sprites.at(a)).update();
72+
(*global::sprites.at(a)).draw();
73+
}
74+
}
75+
76+
global::game_state->handle_transition_screen_smooch();
77+
78+
global::main_dude->handle_key_input();
79+
global::hud->update();
80+
81+
swiWaitForVBlank();
82+
83+
//-> this should be done after Vblank (or crash!)
5884
if (global::game_state->just_started_game) {
5985
global::game_state->change_brightness_timer += *global::timer;
6086

@@ -68,7 +94,6 @@ void gameloop::scroll() {
6894
setBrightness(3, global::game_state->brightness_level);
6995

7096
}
71-
7297
}
7398

7499
if (global::game_state->in_main_menu && global::game_state->exiting_game) {
@@ -86,30 +111,9 @@ void gameloop::scroll() {
86111

87112
}
88113
}
114+
//
89115

90-
if (global::game_state->bombed) {
91-
global::level_generator->render_tiles_on_base_map();
92-
global::game_state->bombed = false;
93-
for (int a = 0; a < global::sprites.size(); a++)
94-
(*global::sprites.at(a)).bottomCollision = false;
95-
}
96-
97-
global::camera->update_position();
98-
99-
for (int a = 0; a < global::sprites.size(); a++) {
100-
if (global::sprites.at(
101-
a) /*&& !global::sprites.at(a)->ready_to_dispose *//*&& !global::sprites.at(a)->killed*/) {
102-
(*global::sprites.at(a)).update();
103-
(*global::sprites.at(a)).draw();
104-
}
105-
}
106-
107-
global::game_state->handle_transition_screen_smooch();
108-
109-
global::main_dude->handle_key_input();
110-
global::hud->update();
111116

112-
swiWaitForVBlank();
113117
global::camera->set_scroll();
114118

115119
global::main_oam_manager->updateOAM();

source/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,13 @@ mm_word stream(mm_word length, mm_addr dest, mm_stream_formats format) {
8888

8989
int main() {
9090

91+
swiWaitForVBlank();
9192
setBrightness(3, global::game_state->brightness_level);
9293

9394
global::game_state->in_main_menu = true;
9495

9596
sound::load_sounds();
97+
9698
sound::start_menu_music();
9799

98100
time_utils::start();

source/sound/sound_utils.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//
2+
// Created by xdbeef on 22.07.18.
3+
//
4+
5+
6+
#include <maxmod9.h>
7+
#include "../../build/soundbank.h"
8+
#include "../globals_declarations.h"
9+
#include "sound_utils.h"
10+
11+
void sound::start_menu_music() {
12+
mmLoadEffect(SFX_MTITLE);
13+
global::menu_music_handler = mmEffect(SFX_MTITLE);
14+
}
15+
16+
void sound::stop_menu_music() {
17+
mmEffectCancel(global::menu_music_handler);
18+
mmUnloadEffect(SFX_MTITLE);
19+
}
20+
21+
void sound::start_cave_music() {
22+
mmLoadEffect(SFX_MCAVE);
23+
global::cave_music_handler = mmEffect(SFX_MCAVE);
24+
}
25+
26+
void sound::stop_cave_music() {
27+
mmEffectCancel(global::cave_music_handler);
28+
mmUnloadEffect(SFX_MCAVE);
29+
}
30+
31+
void sound::load_sounds() {
32+
33+
//TODO Unload effects when not needed, aspecially MCAVE because mostly it's not needed (memory issues)
34+
mmInitDefaultMem((mm_addr) soundbank_bin);
35+
mmLoadEffect(SFX_XJUMP);
36+
mmLoadEffect(SFX_XALERT);
37+
mmLoadEffect(SFX_XARROWTRAP);
38+
mmLoadEffect(SFX_XKISS);
39+
mmLoadEffect(SFX_XJETPACK);
40+
mmLoadEffect(SFX_XWHIP);
41+
mmLoadEffect(SFX_XCOIN);
42+
mmLoadEffect(SFX_XTHROW);
43+
mmLoadEffect(SFX_XGEM);
44+
mmLoadEffect(SFX_XEXPLOSION);
45+
mmLoadEffect(SFX_XSTEPS);
46+
mmLoadEffect(SFX_XLAND);
47+
mmLoadEffect(SFX_XBAT);
48+
mmLoadEffect(SFX_XPICKUP);
49+
mmLoadEffect(SFX_XCLIMB1);
50+
mmLoadEffect(SFX_XCLIMB2);
51+
mmLoadEffect(SFX_XHIT);
52+
mmLoadEffect(SFX_XHURT);
53+
mmLoadEffect(SFX_XDIE);
54+
mmLoadEffect(SFX_XCHESTOPEN);
55+
mmLoadEffect(SFX_XSHOTGUN);
56+
}
57+
58+

source/sound/sound_utils.h

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,17 @@
99
#include "../../build/soundbank_bin.h"
1010
#include "../../build/soundbank.h"
1111

12-
namespace sound{
13-
14-
void load_sounds(){
15-
mmInitDefaultMem((mm_addr) soundbank_bin);
16-
17-
mmLoadEffect(SFX_MCAVE);
18-
mmLoadEffect(SFX_MTITLE);
19-
20-
mmLoadEffect(SFX_XJUMP);
21-
mmLoadEffect(SFX_XALERT);
22-
mmLoadEffect(SFX_XARROWTRAP);
23-
mmLoadEffect(SFX_XKISS);
24-
mmLoadEffect(SFX_XJETPACK);
25-
mmLoadEffect(SFX_XWHIP);
26-
mmLoadEffect(SFX_XCOIN);
27-
mmLoadEffect(SFX_XTHROW);
28-
mmLoadEffect(SFX_XGEM);
29-
mmLoadEffect(SFX_XEXPLOSION);
30-
mmLoadEffect(SFX_XSTEPS);
31-
mmLoadEffect(SFX_XLAND);
32-
mmLoadEffect(SFX_XBAT);
33-
mmLoadEffect(SFX_XPICKUP);
34-
mmLoadEffect(SFX_XCLIMB1);
35-
mmLoadEffect(SFX_XCLIMB2);
36-
mmLoadEffect(SFX_XHIT);
37-
mmLoadEffect(SFX_XHURT);
38-
mmLoadEffect(SFX_XDIE);
39-
mmLoadEffect(SFX_XCHESTOPEN);
40-
mmLoadEffect(SFX_XSHOTGUN);
41-
}
42-
43-
void start_menu_music(){
44-
global::menu_music_handler = mmEffect(SFX_MTITLE);
45-
}
12+
namespace sound {
13+
14+
void load_sounds();
15+
16+
void start_menu_music();
17+
18+
void stop_menu_music();
19+
20+
void start_cave_music();
21+
22+
void stop_cave_music();
4623

4724
}
4825

source/sprites/enemies/skeleton.cpp

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ void Skeleton::draw() {
5454
}
5555

5656

57+
/*
5758
if (bottomCollision) {
5859
if (waitTimer > 0) {
5960
waitTimer -= *global::timer;
@@ -76,6 +77,7 @@ void Skeleton::draw() {
7677
}
7778
}
7879
}
80+
*/
7981

8082

8183
kill_if_whip(1);
@@ -98,36 +100,6 @@ void Skeleton::init() {
98100
randomizeMovement();
99101
}
100102

101-
void Skeleton::randomizeMovement() {
102-
103-
int r = rand() % 2;
104-
105-
if (r == 0) {
106-
if (spriteState == SpriteState::W_LEFT)
107-
sameDirectionInRow++;
108-
else
109-
sameDirectionInRow = 0;
110-
111-
if (sameDirectionInRow == 2)
112-
spriteState = SpriteState::W_RIGHT;
113-
else
114-
spriteState = SpriteState::W_LEFT;
115-
116-
} else if (r == 1) {
117-
if (spriteState == SpriteState::W_RIGHT)
118-
sameDirectionInRow++;
119-
else
120-
sameDirectionInRow = 0;
121-
122-
if (sameDirectionInRow == 2)
123-
spriteState = SpriteState::W_LEFT;
124-
else
125-
spriteState = SpriteState::W_RIGHT;
126-
}
127-
128-
goTimer = (rand() % 2000) + 1000;
129-
waitTimer = rand() % 500;
130-
}
131103

132104
void Skeleton::updateSpeed() {
133105

source/sprites/enemies/skeleton.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,9 @@ class Skeleton : public MovingObject {
4747
SpriteInfo *mainSpriteInfo {};
4848
SpriteInfo *subSpriteInfo{};
4949
u8 *frameGfx{};
50-
int sameDirectionInRow{};
51-
5250

5351
//Skeleton goes for random amount of time_utils on random direction, then waits random time_utils and the cycle goes again
5452
SpriteState spriteState{};
55-
int waitTimer{};
56-
int goTimer{};
5753

5854
int animFrame{};
5955
int animFrameTimer{};

source/sprites/items/arrow.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "../../tiles/map_utils.h"
1414
#include "arrow.h"
1515
#include "../../../build/soundbank.h"
16+
#include "../../sound/sound_utils.h"
1617

1718
#define ARROW_POS_INC_DELTA 15
1819

@@ -107,6 +108,8 @@ void Arrow::draw() {
107108
global::main_dude->ySpeed = -MAIN_DUDE_JUMP_SPEED * 0.25;
108109
global::main_dude->dead = true;
109110
mmEffect(SFX_XDIE);
111+
sound::stop_cave_music();
112+
110113
} else
111114
mmEffect(SFX_XHIT);
112115

source/sprites/main_dude/game_state.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "../../../build/soundbank.h"
1010
#include "../enemies/damsel.h"
1111
#include "../animations/smooch.h"
12+
#include "../../sound/sound_utils.h"
1213

1314
//
1415
// Created by xdbeef on 27.05.18.
@@ -33,7 +34,6 @@ void GameState::reset_main_dude() {
3334
void GameState::start_new_game() {
3435

3536
reset_main_dude();
36-
3737
global::hud->hearts = 4;
3838
global::hud->ropes = 4;
3939
global::hud->bombs = 4;
@@ -45,6 +45,7 @@ void GameState::start_new_game() {
4545

4646
void GameState::start_main_menu() {
4747

48+
global::main_dude->climbing = false;
4849
global::camera->follow_main_dude = false;
4950
global::game_state->in_main_menu = true;
5051
global::game_state->levels_transition_screen = false;
@@ -134,9 +135,12 @@ void GameState::handle_changing_screens() {
134135

135136
//next level or starting game
136137

137-
mmEffectCancel(global::menu_music_handler);
138-
mmEffectCancel(global::cave_music_handler);
139-
global::cave_music_handler = mmEffect(SFX_MCAVE);
138+
if (global::game_state->in_main_menu) {
139+
sound::stop_menu_music();
140+
sound::start_cave_music();
141+
} else
142+
sound::stop_cave_music();
143+
140144

141145
global::level_generator->generate_frame();
142146
global::level_generator->generate_rooms();
@@ -150,8 +154,9 @@ void GameState::handle_changing_screens() {
150154

151155
global::game_state->robbed_killed_shopkeeper = false;
152156

153-
mmEffectCancel(global::cave_music_handler);
154-
global::menu_music_handler = mmEffect(SFX_MTITLE);
157+
sound::stop_cave_music();
158+
sound::start_menu_music();
159+
155160
global::level_generator->generate_splash_screen(SplashScreenType::MAIN_MENU_UPPER);
156161
global::level_generator->generate_splash_screen(SplashScreenType::MAIN_MENU_LOWER);
157162
// set_position_to(MapTileType::ENTRANCE);
@@ -196,6 +201,8 @@ void GameState::handle_changing_screens() {
196201

197202
if (global::game_state->in_main_menu) {
198203
global::game_state->start_new_game();
204+
} else {
205+
sound::start_cave_music();
199206
}
200207

201208
global::game_state->start_next_level();
@@ -204,14 +211,14 @@ void GameState::handle_changing_screens() {
204211

205212
if (global::game_state->scores_screen)
206213
global::game_state->start_main_menu();
207-
else if (global::main_dude->dead)
214+
else if (global::main_dude->dead) {
208215
global::game_state->start_scores();
209-
else
216+
} else
210217
global::game_state->start_level_transition_screen();
211218
}
212219

213220
global::main_dude->exiting_level = false;
214-
mmEffectCancel(SFX_MCAVE);
221+
215222

216223
} else if (global::main_dude->animFrame >= 16 && global::game_state->splash_screen) {
217224

0 commit comments

Comments
 (0)