[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