aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audio.c9
-rw-r--r--src/audio.h2
-rw-r--r--src/game.c6
-rw-r--r--src/game.h2
-rw-r--r--src/main.c30
-rw-r--r--src/types.h10
6 files changed, 42 insertions, 17 deletions
diff --git a/src/audio.c b/src/audio.c
index 36c051a..f42a13a 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -349,7 +349,7 @@ done: /* Success */
}
/* SDL audio initial setup */
-AudioContext *audio_setup(int debug) {
+AudioContext *audio_setup(int debug, int no_music) {
AudioContext *a;
SDL_AudioSpec fmt;
@@ -387,7 +387,12 @@ AudioContext *audio_setup(int debug) {
return NULL;
}
- audio_play(a, "kraftwerk", 0.5, 1);
+ if ( !no_music ) {
+ audio_play(a, "kraftwerk", 0.5, 1);
+ } else {
+ if ( a->debug ) printf("AU: Music disabled.\n");
+ }
+
audio_play(a, "moan", 0.2, 1);
return a;
diff --git a/src/audio.h b/src/audio.h
index e7a5d73..0e159a5 100644
--- a/src/audio.h
+++ b/src/audio.h
@@ -18,7 +18,7 @@
#include "types.h"
-extern AudioContext *audio_setup(int debug);
+extern AudioContext *audio_setup(int debug, int no_music);
extern void audio_shutdown(AudioContext *ctx);
extern void audio_play(AudioContext *a, char *name, float volume, int repeat);
diff --git a/src/game.c b/src/game.c
index 233acc9..640cda0 100644
--- a/src/game.c
+++ b/src/game.c
@@ -224,7 +224,7 @@ static void game_load_all_connected(Game *game) {
}
/* Create a new "game" structure */
-Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int disable_shaders, int audio_debug) {
+Game *game_new(int width, int height, GameOptions gameopts) {
Game *g;
@@ -252,7 +252,7 @@ Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int di
g->radiation = 0.1;
/* Renderer setup */
- g->render = render_setup(width, height, disable_vbos, disable_fbos, disable_shaders);
+ g->render = render_setup(width, height, gameopts.disable_vbos, gameopts.disable_fbos, gameopts.disable_shaders);
if ( g->render == NULL ) {
fprintf(stderr, "Couldn't initialise renderer\n");
free(g);
@@ -261,7 +261,7 @@ Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int di
/* Note: render_setup() initialises GLEW, which must be done before loading models. */
/* Audio setup */
- g->audio = audio_setup(audio_debug);
+ g->audio = audio_setup(gameopts.audio_debug, gameopts.no_music);
if ( g->audio == NULL ) {
fprintf(stderr, "Couldn't initialise audio\n");
free(g);
diff --git a/src/game.h b/src/game.h
index 011f64f..6f0f5c1 100644
--- a/src/game.h
+++ b/src/game.h
@@ -21,7 +21,7 @@
#include "types.h"
extern void game_check_handoff(Game *game);
-extern Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int disable_shaders, int audio_debug);
+extern Game *game_new(int width, int height, GameOptions gameopts);
extern void game_shutdown(Game *game);
extern Room *game_find_room(Game *game, int rx, int ry, int rz);
extern void game_pause(Game *game);
diff --git a/src/main.c b/src/main.c
index 37aa4bc..27589f4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -51,19 +51,23 @@ int main(int argc, char *argv[]) {
Uint32 video_flags;
ScreenResolution res;
Uint32 t = 0;
+ GameOptions gameopts;
+
+ gameopts.disable_vbos = 0;
+ gameopts.disable_fbos = 0;
+ gameopts.disable_shaders = 0;
+ gameopts.audio_debug = 0;
+ gameopts.no_music = 0;
- int disable_vbos = 0;
- int disable_fbos = 0;
- int disable_shaders = 0;
- int audio_debug = 0;
const struct option longopts[] = { {"fullscreen", 0, NULL, 'f'},
{"resolution", 1, NULL, 'r'},
{"help", 0, NULL, 'h'},
{"version", 0, NULL, 'v'},
- {"disable-vbos", 0, &disable_vbos, 1},
- {"disable-fbos", 0, &disable_fbos, 1},
- {"disable-shaders", 0, &disable_shaders, 1},
- {"audio-debug", 0, &audio_debug, 1},
+ {"disable-vbos", 0, &gameopts.disable_vbos, 1},
+ {"disable-fbos", 0, &gameopts.disable_fbos, 1},
+ {"disable-shaders", 0, &gameopts.disable_shaders, 1},
+ {"audio-debug", 0, &gameopts.audio_debug, 1},
+ {"no-music", 0, NULL, 'n'},
{0, 0, NULL, 0} };
@@ -71,7 +75,7 @@ int main(int argc, char *argv[]) {
width = 800; height = 600;
video_flags = SDL_OPENGL;
- while ((c = getopt_long(argc, argv, "hvr:f", longopts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "hvr:fn", longopts, NULL)) != -1) {
switch ( c ) {
@@ -99,6 +103,11 @@ int main(int argc, char *argv[]) {
main_version();
return 0;
}
+
+ case 'n' : {
+ gameopts.no_music = 1;
+ break;
+ }
case 'h' : {
printf("Syntax: %s [options]\n\n", argv[0]);
@@ -107,6 +116,7 @@ int main(int argc, char *argv[]) {
printf(" -v, --version Display version number and exit.\n");
printf(" -r, --resolution <res> Set display resolution. See below for possible values for <res>.\n");
printf(" -f, --fullscreen Use the full screen.\n");
+ printf(" -n, --no-music Don't play any background music.\n");
printf("\nAdvanced options:\n\n");
printf(" --disable-vbos Disable the use of vertex buffer objects.\n");
printf(" --disable-fbos Disable the use of framebuffer objects.\n");
@@ -168,7 +178,7 @@ int main(int argc, char *argv[]) {
/* World setup */
Game *game;
- game = game_new(width, height, disable_vbos, disable_fbos, disable_shaders, audio_debug);
+ game = game_new(width, height, gameopts);
/* Main loop */
finished = 0;
diff --git a/src/types.h b/src/types.h
index 93fc623..d489be7 100644
--- a/src/types.h
+++ b/src/types.h
@@ -29,6 +29,16 @@
/* Maximum number of lights per room */
#define MAX_LIGHTS 4
+typedef struct {
+
+ int disable_vbos;
+ int disable_fbos;
+ int disable_shaders;
+ int audio_debug;
+ int no_music;
+
+} GameOptions;
+
typedef enum {
ATTRIB_NONE = 0,
ATTRIB_COLOUR = 1<<0, /* Colour specified? */