X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.c;h=30c3bc5cdcbbb024e4420650001ea5a29e5688c6;hb=3d07b68a314ce189f207e42d95f786979662410d;hp=471c614f70af6c2783dad96b0a267d21b1c1cafd;hpb=49221e59bff18cdfbef8c877b588280266ae5037;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index 471c614f..30c3bc5c 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -12,7 +12,17 @@ * system.c * ***********************************************************/ -#include "libgame.h" +#include + +#include "platform.h" + +#if defined(PLATFORM_MSDOS) +#include +#endif + +#include "system.h" +#include "sound.h" +#include "misc.h" /* ========================================================================= */ @@ -25,6 +35,9 @@ struct VideoSystemInfo video; struct AudioSystemInfo audio; struct GfxInfo gfx; +struct LevelDirInfo *leveldir_first = NULL; +struct LevelDirInfo *leveldir_current = NULL; + Display *display = NULL; Visual *visual = NULL; int screen = 0; @@ -44,16 +57,45 @@ int FrameCounter = 0; /* ========================================================================= */ -/* video functions */ +/* init functions */ /* ========================================================================= */ -inline void InitProgramInfo(char *command_name, char *program_title, - char *window_title, char *icon_title, - char *x11_icon_filename, - char *x11_iconmask_filename, - char *msdos_pointer_filename) +void InitCommandName(char *argv0) +{ + program.command_basename = + (strrchr(argv0, '/') ? strrchr(argv0, '/') + 1 : argv0); +} + +void InitExitFunction(void (*exit_function)(int)) +{ + program.exit_function = exit_function; +} + +void InitPlatformDependantStuff(void) +{ +#if defined(PLATFORM_MSDOS) + _fmode = O_BINARY; +#endif +} + +void InitProgramInfo(char *unix_userdata_directory, char *program_title, + char *window_title, char *icon_title, + char *x11_icon_basename, char *x11_iconmask_basename, + char *msdos_pointer_basename) { - program.command_name = command_name; + char *gfx_dir = getPath2(options.ro_base_directory, GRAPHICS_DIRECTORY); + char *x11_icon_filename = getPath2(gfx_dir, x11_icon_basename); + char *x11_iconmask_filename = getPath2(gfx_dir, x11_iconmask_basename); + char *msdos_pointer_filename = getPath2(gfx_dir, msdos_pointer_basename); + + free(gfx_dir); + +#if defined(PLATFORM_UNIX) + program.userdata_directory = unix_userdata_directory; +#else + program.userdata_directory = "userdata"; +#endif + program.program_title = program_title; program.window_title = window_title; program.icon_title = icon_title; @@ -62,9 +104,9 @@ inline void InitProgramInfo(char *command_name, char *program_title, program.msdos_pointer_filename = msdos_pointer_filename; } -inline void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, - int real_sx, int real_sy, - int full_sxsize, int full_sysize) +void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, + int real_sx, int real_sy, + int full_sxsize, int full_sysize) { gfx.sx = sx; gfx.sy = sy; @@ -76,7 +118,7 @@ inline void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, gfx.full_sysize = full_sysize; } -inline void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize) +void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize) { gfx.dx = dx; gfx.dy = dy; @@ -84,7 +126,7 @@ inline void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize) gfx.dysize = dysize; } -inline void InitGfxDoor2Info(int vx, int vy, int vxsize, int vysize) +void InitGfxDoor2Info(int vx, int vy, int vxsize, int vysize) { gfx.vx = vx; gfx.vy = vy; @@ -92,14 +134,18 @@ inline void InitGfxDoor2Info(int vx, int vy, int vxsize, int vysize) gfx.vysize = vysize; } -inline void InitGfxScrollbufferInfo(int scrollbuffer_width, - int scrollbuffer_height) +void InitGfxScrollbufferInfo(int scrollbuffer_width, int scrollbuffer_height) { /* currently only used by MSDOS code to alloc VRAM buffer, if available */ gfx.scrollbuffer_width = scrollbuffer_width; gfx.scrollbuffer_height = scrollbuffer_height; } + +/* ========================================================================= */ +/* video functions */ +/* ========================================================================= */ + inline static int GetRealDepth(int depth) { return (depth == DEFAULT_DEPTH ? video.default_depth : depth); @@ -389,6 +435,7 @@ inline boolean OpenAudio(struct AudioSystemInfo *audio) { audio->sound_available = FALSE; audio->loops_available = FALSE; + audio->sound_enabled = FALSE; audio->soundserver_pipe[0] = audio->soundserver_pipe[1] = 0; audio->soundserver_pid = 0; audio->device_name = NULL; @@ -399,12 +446,14 @@ inline boolean OpenAudio(struct AudioSystemInfo *audio) { audio->sound_available = TRUE; audio->loops_available = TRUE; + audio->sound_enabled = TRUE; } #elif defined(PLATFORM_MSDOS) if (MSDOSOpenAudio()) { audio->sound_available = TRUE; audio->loops_available = TRUE; + audio->sound_enabled = TRUE; } #elif defined(PLATFORM_UNIX) UnixOpenAudio(audio); @@ -425,6 +474,15 @@ inline void CloseAudio(struct AudioSystemInfo *audio) audio->sound_available = FALSE; audio->loops_available = FALSE; + audio->sound_enabled = FALSE; +} + +inline void SetAudioMode(boolean enabled) +{ + if (!audio.sound_available) + return; + + audio.sound_enabled = enabled; }