aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--readme.txt7
-rw-r--r--scummvm.projbin0 -> 8240 bytes
-rw-r--r--sdl.cpp42
3 files changed, 46 insertions, 3 deletions
diff --git a/readme.txt b/readme.txt
index b516a93096..031ddbbc03 100644
--- a/readme.txt
+++ b/readme.txt
@@ -75,8 +75,8 @@ ScummVM and wish to commit it into the main CVS, feel free to contact us!
Macintosh - SDL/CUSTOM (Including Classic and Mac OS X)
AmigaOS - SDL/AGA
MorphOS - SDL
+ BeOS - SDL
Acorn (RiscOS) - ???
- BeOS - ???
Dreamcast - ???
Known Bugs:
@@ -96,6 +96,8 @@ listed here, nor in the compatibility table on the website, please see below.
an alarm, at Bumpusville
- Some overlap may occur in graphics, expecially the intro
- Music does not work in adlib mode, use midi
+ - The dark-light torch does not work in the Tunnel of Love.
+ You'll have to guess where to throw :)
Loom (256 Talkie):
- CD music and voices are not always syncronised
@@ -147,7 +149,10 @@ found in the 'tools' CVS module, or in the 'scummvm-tools' package.
* Enter the path to the SDL include files in Tools|Options|Directories
* Now it should compile successfully.
+ BeOS:
+ * Open the 'scummvm.proj' file in BeIDE. Compile as normal.
+
Running:
--------
diff --git a/scummvm.proj b/scummvm.proj
new file mode 100644
index 0000000000..a08b350484
--- /dev/null
+++ b/scummvm.proj
Binary files differ
diff --git a/sdl.cpp b/sdl.cpp
index fff9dacf87..e221bb74b2 100644
--- a/sdl.cpp
+++ b/sdl.cpp
@@ -7,7 +7,8 @@
#include "mp3_cd.h"
#include <SDL.h>
-
+#define MAX(a,b) (((a)<(b)) ? (b) : (a))
+#define MIN(a,b) (((a)>(b)) ? (b) : (a))
class OSystem_SDL : public OSystem {
public:
@@ -567,7 +568,7 @@ void OSystem_SDL::update_screen() {
/* Calculate area */
area += r->w * r->h;
- /* scale the rect to fit in SDL_UpdateRects */
+ /* scaling the rect to fit in SDL_UpdateRects */
r->x <<= 1;
r->y <<= 1;
r->w <<= 1;
@@ -624,6 +625,43 @@ void OSystem_SDL::set_mouse_cursor(const byte *buf, uint w, uint h, int hotspot_
}
void OSystem_SDL::set_shake_pos(int shake_pos) {
+ int old_shake_pos = _current_shake_pos;
+ int dirty_height, dirty_blackheight;
+ int dirty_top, dirty_blacktop;
+
+ if (shake_pos != old_shake_pos) {
+ _current_shake_pos = shake_pos;
+ force_full = true;
+
+ /* Old shake pos was current_shake_pos, new is shake_pos.
+ * Move the screen up or down to account for the change.
+ */
+ SDL_Rect dstr = { 0, shake_pos*scaling, 320*scaling, 200*scaling };
+ SDL_Rect srcr = { 0, old_shake_pos*scaling, 320*scaling, 200*scaling };
+ SDL_BlitSurface(sdl_screen, &srcr, sdl_screen, &dstr);
+
+ /* Refresh either the upper part of the screen,
+ * or the lower part */
+ if (shake_pos > old_shake_pos) {
+ dirty_height = MIN(shake_pos, 0) - MIN(old_shake_pos, 0);
+ dirty_top = -MIN(shake_pos, 0);
+ dirty_blackheight = MAX(shake_pos, 0) - MAX(old_shake_pos, 0);
+ dirty_blacktop = MAX(old_shake_pos, 0);
+ } else {
+ dirty_height = MAX(old_shake_pos, 0) - MAX(shake_pos, 0);
+ dirty_top = 200 - MAX(old_shake_pos, 0);
+ dirty_blackheight = MIN(old_shake_pos, 0) - MIN(shake_pos, 0);
+ dirty_blacktop = 200 + MIN(shake_pos, 0);
+ }
+
+ /* Fill the dirty area with blackness or the scumm image */
+ SDL_Rect blackrect = {0, dirty_blacktop*scaling, 320*scaling, dirty_blackheight*scaling};
+ SDL_FillRect(sdl_screen, &blackrect, 0);
+
+ /* FIXME: Um, screen seems to glitch since this
+ 'not needed' function was removed */
+ //g_scumm->redrawLines(dirty_top, dirty_top + dirty_height);
+ }
}
uint32 OSystem_SDL::get_msecs() {