[Scummvm-cvs-logs] CVS: scummvm resource.cpp,1.89,1.90 sdl.cpp,1.127,1.128
James Brown
ender at users.sourceforge.net
Tue Jun 25 05:44:02 CEST 2002
Update of /cvsroot/scummvm/scummvm
In directory usw-pr-cvs1:/tmp/cvs-serv11483
Modified Files:
resource.cpp sdl.cpp
Log Message:
Add keyboard mouse support, remove case sensitivity for resource files
Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/resource.cpp,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -d -r1.89 -r1.90
--- resource.cpp 18 Jun 2002 01:23:24 -0000 1.89
+++ resource.cpp 25 Jun 2002 12:43:14 -0000 1.90
@@ -47,9 +47,6 @@
/* Either xxx.lfl or monkey.xxx file name */
while (!_resFilePrefix) {
-#if REAL_CODE
- room_offs = _roomFileOffsets[room];
-#else
if (_features & GF_SMALL_NAMES)
roomlimit = 98;
else
@@ -58,7 +55,6 @@
room_offs = 0;
else
room_offs = room ? _roomFileOffsets[room] : 0;
-#endif
if (room_offs == (int)0xFFFFFFFF)
break;
@@ -176,18 +172,7 @@
char buf[256];
debug(9, "openResourceFile(%s)", filename);
-
- if (_resFilePath) {
-#if defined(macintosh)
- sprintf(buf, ":%s.%d:%s", _resFilePath, _resFilePathId, filename);
-#else
- sprintf(buf, "%s.%d\\%s", _resFilePath, _resFilePathId, filename);
-#endif
- } else if (_resFilePrefix) {
- sprintf(buf, "%s%s", _resFilePrefix, filename);
- } else {
- strcpy(buf, filename);
- }
+ strcpy(buf, filename);
if (_fileHandle != NULL) {
fileClose(_fileHandle);
@@ -195,6 +180,11 @@
}
_fileHandle = fileOpen(buf, 1);
+ if (!_fileHandle) {
+ char *e = buf;
+ do *e = tolower(*e); while(*e++);
+ _fileHandle = fileOpen(buf, 1);
+ }
return _fileHandle != NULL;
}
Index: sdl.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sdl.cpp,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -d -r1.127 -r1.128
--- sdl.cpp 16 Jun 2002 04:09:22 -0000 1.127
+++ sdl.cpp 25 Jun 2002 12:43:15 -0000 1.128
@@ -111,9 +111,9 @@
typedef void TwoXSaiProc(uint8 *srcPtr, uint32 srcPitch, uint8 *deltaPtr,
uint8 *dstPtr, uint32 dstPitch, int width, int height);
- SDL_Surface *sdl_screen;
- SDL_Surface *sdl_hwscreen;
- SDL_Surface *sdl_tmpscreen;
+ SDL_Surface *sdl_screen; // unseen game screen
+ SDL_Surface *sdl_hwscreen; // hardware screen
+ SDL_Surface *sdl_tmpscreen; // temporary screen (for 2xsai)
SDL_CD *cdrom;
enum {
@@ -151,6 +151,12 @@
int cd_track, cd_num_loops, cd_start_frame, cd_end_frame;
Uint32 cd_end_time, cd_stop_time, cd_next_second;
+ /* Keyboard mouse emulation */
+ struct KbdMouse {
+ int16 x, y, xv, yv, xm, ym, xd, yd;
+ uint32 last, delay, xdown, ydown;
+ } km;
+
struct MousePos {
int16 x,y,w,h;
};
@@ -188,6 +194,7 @@
void get_320x200_image(byte *buf);
void setup_icon();
+ void kbd_mouse();
};
int Init_2xSaI (uint32 BitFormat);
@@ -362,6 +369,13 @@
sdl_tmpscreen = sdl_screen;
}
+
+ // keyboard cursor control, some other better place for it?
+ km.xm = SCREEN_WIDTH * scaling;
+ km.ym = SCREEN_HEIGHT * scaling;
+ km.delay = 25;
+ km.last = 0;
+
}
void OSystem_SDL::unload_gfx_mode() {
@@ -688,6 +702,75 @@
force_full = false;
}
+void OSystem_SDL::kbd_mouse() {
+ uint32 time = get_msecs();
+ if (time >= km.last + km.delay) {
+ km.last = time;
+ if (km.xd == 1) {
+ km.xdown = time;
+ km.xd = 2;
+ }
+ if (km.yd == 1) {
+ km.ydown = time;
+ km.yd = 2;
+ }
+
+ if (km.xv || km.yv) {
+ if (km.xd) {
+ if (time > km.xdown + km.delay*12) {
+ if (km.xv > 0)
+ km.xv++;
+ else
+ km.xv--;
+ } else if (time > km.xdown + km.delay*8) {
+ if (km.xv > 0)
+ km.xv = 5;
+ else
+ km.xv = -5;
+ }
+ }
+ if (km.yd) {
+ if (time > km.ydown + km.delay*12) {
+ if (km.yv > 0)
+ km.yv++;
+ else
+ km.yv--;
+ } else if (time > km.ydown + km.delay*8) {
+ if (km.yv > 0)
+ km.yv = 5;
+ else
+ km.yv = -5;
+ }
+ }
+
+ km.x += km.xv;
+ km.y += km.yv;
+
+ if (km.x <= 0) {
+ km.x = 0;
+ km.xv = -1;
+ km.xd = 1;
+ } else if (km.x >= km.xm) {
+ km.x = km.xm - 1;
+ km.xv = 1;
+ km.xd = 1;
+ }
+
+ if (km.y <= 0) {
+ km.y = 0;
+ km.yv = -1;
+ km.yd = 1;
+ } else if (km.y >= km.ym) {
+ km.y = km.ym - 1;
+ km.yv = 1;
+ km.yd = 1;
+ }
+
+ SDL_WarpMouse(km.x, km.y);
+ }
+ }
+}
+
bool OSystem_SDL::show_mouse(bool visible) {
if (_mouse_visible == visible)
return visible;
@@ -752,6 +835,7 @@
bool OSystem_SDL::poll_event(Event *event) {
SDL_Event ev;
+ kbd_mouse();
for(;;) {
if (!SDL_PollEvent(&ev))
@@ -788,13 +872,66 @@
event->event_code = EVENT_KEYDOWN;
event->kbd.keycode = ev.key.keysym.sym;
event->kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod);
+ switch(ev.key.keysym.sym) {
+ case SDLK_LEFT:
+ km.xv = -1;
+ km.xd = 1;
+ break;
+ case SDLK_RIGHT:
+ km.xv = 1;
+ km.xd = 1;
+ break;
+ case SDLK_UP:
+ km.yv = -1;
+ km.yd = 1;
+ break;
+ case SDLK_DOWN:
+ km.yv = 1;
+ km.yd = 1;
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
+ case SDL_KEYUP: {
+ switch(ev.key.keysym.sym){
+ case SDLK_LEFT:
+ if (km.xv < 0) {
+ km.xv = 0;
+ km.xd = 0;
+ }
+ break;
+ case SDLK_RIGHT:
+ if (km.xv > 0) {
+ km.xv = 0;
+ km.xd = 0;
+ }
+ break;
+ case SDLK_UP:
+ if (km.yv < 0) {
+ km.yv = 0;
+ km.yd = 0;
+ }
+ break;
+ case SDLK_DOWN:
+ if (km.yv > 0) {
+ km.yv = 0;
+ km.yd = 0;
+ }
+ break;
+ default:
+ break;
+ }
return true;
}
case SDL_MOUSEMOTION:
event->event_code = EVENT_MOUSEMOVE;
- event->mouse.x = ev.motion.x;
- event->mouse.y = ev.motion.y;
+ km.x = event->mouse.x = ev.motion.x;
+ km.y = event->mouse.y = ev.motion.y;
event->mouse.x /= scaling;
event->mouse.y /= scaling;
@@ -808,8 +945,8 @@
event->event_code = EVENT_RBUTTONDOWN;
else
break;
- event->mouse.x = ev.button.x;
- event->mouse.y = ev.button.y;
+ km.x = event->mouse.x = ev.motion.x;
+ km.y = event->mouse.y = ev.motion.y;
event->mouse.x /= scaling;
event->mouse.y /= scaling;
More information about the Scummvm-git-logs
mailing list