X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Fsystem.c;h=497f7e0b26741e90efd50e7b90996960a0804757;hb=4a137589031aa2c7effd6b020170098a976c566b;hp=5604ad21d818440f5860122d1ac65ced0d307b75;hpb=41e8d55b767c898f20c29a1b0b8d2ef8840be2f5;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index 5604ad21..497f7e0b 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -23,6 +23,7 @@ #include "system.h" #include "sound.h" #include "setup.h" +#include "joystick.h" #include "misc.h" @@ -35,6 +36,7 @@ struct OptionInfo options; struct VideoSystemInfo video; struct AudioSystemInfo audio; struct GfxInfo gfx; +struct ArtworkInfo artwork; struct JoystickInfo joystick; struct SetupInfo setup; @@ -111,7 +113,9 @@ void ClosePlatformDependantStuff(void) 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) + char *msdos_pointer_basename, + char *cookie_prefix, char *filename_prefix, + int program_version) { char *x11_icon_filename = getPath2(options.graphics_directory, x11_icon_basename); @@ -132,6 +136,13 @@ void InitProgramInfo(char *unix_userdata_directory, char *program_title, program.x11_icon_filename = x11_icon_filename; program.x11_iconmask_filename = x11_iconmask_filename; program.msdos_pointer_filename = msdos_pointer_filename; + + program.cookie_prefix = cookie_prefix; + program.filename_prefix = filename_prefix; + + program.version_major = VERSION_MAJOR(program_version); + program.version_minor = VERSION_MINOR(program_version); + program.version_patch = VERSION_PATCH(program_version); } void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, @@ -146,6 +157,8 @@ void InitGfxFieldInfo(int sx, int sy, int sxsize, int sysize, gfx.real_sy = real_sy; gfx.full_sxsize = full_sxsize; gfx.full_sysize = full_sysize; + + SetDrawDeactivationMask(REDRAW_NONE); /* do not deactivate drawing */ } void InitGfxDoor1Info(int dx, int dy, int dxsize, int dysize) @@ -171,6 +184,11 @@ void InitGfxScrollbufferInfo(int scrollbuffer_width, int scrollbuffer_height) gfx.scrollbuffer_height = scrollbuffer_height; } +void SetDrawDeactivationMask(int draw_deactivation_mask) +{ + gfx.draw_deactivation_mask = draw_deactivation_mask; +} + /* ========================================================================= */ /* video functions */ @@ -288,6 +306,9 @@ inline void FreeBitmap(Bitmap *bitmap) XFreeGC(display, bitmap->stored_clip_gc); #endif + if (bitmap->source_filename) + free(bitmap->source_filename); + free(bitmap); } @@ -304,11 +325,26 @@ inline void CloseWindow(DrawWindow *window) #endif } +inline boolean DrawingDeactivated(int x, int y, int width, int height) +{ + if (gfx.draw_deactivation_mask != REDRAW_NONE) + { + if ((gfx.draw_deactivation_mask & REDRAW_FIELD) && + x < gfx.sx + gfx.sxsize) + return TRUE; + } + + return FALSE; +} + inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, int src_x, int src_y, int width, int height, int dst_x, int dst_y) { + if (DrawingDeactivated(dst_x, dst_y, width, height)) + return; + #ifdef TARGET_SDL SDLCopyArea(src_bitmap, dst_bitmap, src_x, src_y, width, height, dst_x, dst_y, SDLCOPYAREA_OPAQUE); @@ -320,6 +356,9 @@ inline void BlitBitmap(Bitmap *src_bitmap, Bitmap *dst_bitmap, inline void ClearRectangle(Bitmap *bitmap, int x, int y, int width, int height) { + if (DrawingDeactivated(x, y, width, height)) + return; + #ifdef TARGET_SDL SDLFillRectangle(bitmap, x, y, width, height, 0x000000); #else @@ -366,6 +405,9 @@ inline void BlitBitmapMasked(Bitmap *src_bitmap, Bitmap *dst_bitmap, int width, int height, int dst_x, int dst_y) { + if (DrawingDeactivated(dst_x, dst_y, width, height)) + return; + #ifdef TARGET_SDL SDLCopyArea(src_bitmap, dst_bitmap, src_x, src_y, width, height, dst_x, dst_y, SDLCOPYAREA_MASKED); @@ -582,10 +624,9 @@ inline boolean ChangeVideoModeIfNeeded(boolean fullscreen) return fullscreen; } -Bitmap *LoadImage(char *basename) +Bitmap *LoadImage(char *filename) { Bitmap *new_bitmap; - char *filename = getPath2(options.graphics_directory, basename); #if defined(TARGET_SDL) new_bitmap = SDLLoadImage(filename); @@ -593,7 +634,18 @@ Bitmap *LoadImage(char *basename) new_bitmap = X11LoadImage(filename); #endif - free(filename); + return new_bitmap; +} + +Bitmap *LoadCustomImage(char *basename) +{ + char *filename = getStringCopy(getCustomImageFilename(basename)); + Bitmap *new_bitmap; + + if ((new_bitmap = LoadImage(filename)) == NULL) + Error(ERR_EXIT, "LoadImage() failed: %s", GetError()); + + new_bitmap->source_filename = filename; return new_bitmap; } @@ -623,10 +675,10 @@ inline void OpenAudio(void) #if defined(TARGET_SDL) SDLOpenAudio(); -#elif defined(PLATFORM_MSDOS) - MSDOSOpenAudio(); #elif defined(PLATFORM_UNIX) UnixOpenAudio(); +#elif defined(PLATFORM_MSDOS) + MSDOSOpenAudio(); #endif } @@ -634,10 +686,10 @@ inline void CloseAudio(void) { #if defined(TARGET_SDL) SDLCloseAudio(); -#elif defined(PLATFORM_MSDOS) - MSDOSCloseAudio(); #elif defined(PLATFORM_UNIX) UnixCloseAudio(); +#elif defined(PLATFORM_MSDOS) + MSDOSCloseAudio(); #endif audio.sound_enabled = FALSE; @@ -727,9 +779,39 @@ inline boolean CheckCloseWindowEvent(ClientMessageEvent *event) } -inline void dummy(void) +/* ========================================================================= */ +/* joystick functions */ +/* ========================================================================= */ + +inline void InitJoysticks() { -#ifdef TARGET_SDL -#else + int i; + +#ifdef NO_JOYSTICK + return; /* joysticks generally deactivated by compile-time directive */ +#endif + + /* always start with reliable default values */ + joystick.status = JOYSTICK_NOT_AVAILABLE; + for (i=0; i