[Scummvm-cvs-logs] SF.net SVN: scummvm:[41258] scummvm/trunk/engines/agi

sev at users.sourceforge.net sev at users.sourceforge.net
Sat Jun 6 19:47:29 CEST 2009


Revision: 41258
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41258&view=rev
Author:   sev
Date:     2009-06-06 17:47:29 +0000 (Sat, 06 Jun 2009)

Log Message:
-----------
Implement fence.mouse opcode

Modified Paths:
--------------
    scummvm/trunk/engines/agi/agi.cpp
    scummvm/trunk/engines/agi/agi.h
    scummvm/trunk/engines/agi/menu.cpp
    scummvm/trunk/engines/agi/menu.h
    scummvm/trunk/engines/agi/op_cmd.cpp

Modified: scummvm/trunk/engines/agi/agi.cpp
===================================================================
--- scummvm/trunk/engines/agi/agi.cpp	2009-06-06 17:46:55 UTC (rev 41257)
+++ scummvm/trunk/engines/agi/agi.cpp	2009-06-06 17:47:29 UTC (rev 41258)
@@ -103,6 +103,20 @@
 		case Common::EVENT_MOUSEMOVE:
 			g_mouse.x = event.mouse.x;
 			g_mouse.y = event.mouse.y;
+
+			if (!_game.mouseFence.isEmpty()) {
+				if (g_mouse.x < _game.mouseFence.left)
+					g_mouse.x = _game.mouseFence.left;
+				if (g_mouse.x > _game.mouseFence.right)
+					g_mouse.x = _game.mouseFence.right;
+				if (g_mouse.y < _game.mouseFence.top)
+					g_mouse.y = _game.mouseFence.top;
+				if (g_mouse.y > _game.mouseFence.bottom)
+					g_mouse.y = _game.mouseFence.bottom;
+
+				g_system->warpMouse(g_mouse.x, g_mouse.y);
+			}
+
 			break;
 		case Common::EVENT_LBUTTONUP:
 		case Common::EVENT_RBUTTONUP:
@@ -473,6 +487,8 @@
 
 	_egoHoldKey = false;
 
+	_game.mouseFence.setWidth(0); // Reset
+
 	return ec;
 }
 

Modified: scummvm/trunk/engines/agi/agi.h
===================================================================
--- scummvm/trunk/engines/agi/agi.h	2009-06-06 17:46:55 UTC (rev 41257)
+++ scummvm/trunk/engines/agi/agi.h	2009-06-06 17:47:29 UTC (rev 41258)
@@ -211,8 +211,8 @@
 
 struct Mouse {
 	int button;
-	unsigned int x;
-	unsigned int y;
+	int x;
+	int y;
 };
 
 // Used by AGI Mouse protocol 1.0 for v27 (i.e. button pressed -variable).
@@ -591,9 +591,11 @@
 	// view table
 	VtEntry viewTable[MAX_VIEWTABLE];
 
-	int32 ver;								/**< detected game version */
+	int32 ver;						/**< detected game version */
 
-	int simpleSave;						/**< select simple savegames */
+	int simpleSave;					/**< select simple savegames */
+
+	Common::Rect mouseFence;		/**< rectangle set by fence.mouse command */
 };
 
 class AgiLoader {

Modified: scummvm/trunk/engines/agi/menu.cpp
===================================================================
--- scummvm/trunk/engines/agi/menu.cpp	2009-06-06 17:46:55 UTC (rev 41257)
+++ scummvm/trunk/engines/agi/menu.cpp	2009-06-06 17:47:29 UTC (rev 41258)
@@ -131,11 +131,11 @@
 	drawMenuOption(i);
 }
 
-bool Menu::mouseOverText(unsigned int line, unsigned int col, char *s) {
+bool Menu::mouseOverText(int line, int col, char *s) {
 	if (g_mouse.x < col * CHAR_COLS)
 		return false;
 
-	if (g_mouse.x > (col + strlen(s)) * CHAR_COLS)
+	if (g_mouse.x > (int)(col + strlen(s)) * CHAR_COLS)
 		return false;
 
 	if (g_mouse.y < line * CHAR_LINES)

Modified: scummvm/trunk/engines/agi/menu.h
===================================================================
--- scummvm/trunk/engines/agi/menu.h	2009-06-06 17:46:55 UTC (rev 41257)
+++ scummvm/trunk/engines/agi/menu.h	2009-06-06 17:47:29 UTC (rev 41258)
@@ -80,7 +80,7 @@
 	void drawMenuOption(int hMenu);
 	void drawMenuOptionHilite(int hMenu, int vMenu);
 	void newMenuSelected(int i);
-	bool mouseOverText(unsigned int line, unsigned int col, char *s);
+	bool mouseOverText(int line, int col, char *s);
 
 };
 

Modified: scummvm/trunk/engines/agi/op_cmd.cpp
===================================================================
--- scummvm/trunk/engines/agi/op_cmd.cpp	2009-06-06 17:46:55 UTC (rev 41257)
+++ scummvm/trunk/engines/agi/op_cmd.cpp	2009-06-06 17:47:29 UTC (rev 41258)
@@ -632,7 +632,9 @@
 }
 
 cmd(pop_script) {
-	report("pop.script\n");
+	if (g_agi->getVersion() >= 0x2915) {
+		report("pop.script\n");
+	}
 }
 
 cmd(hold_key) {
@@ -642,7 +644,9 @@
 }
 
 cmd(discard_sound) {
-	report("discard.sound\n");
+	if (g_agi->getVersion() >= 0x2936) {
+		report("discard.sound\n");
+	}
 }
 
 cmd(hide_mouse) {
@@ -669,7 +673,9 @@
 }
 
 cmd(fence_mouse) {
-	report("fence.mouse\n");
+	g_agi->_game.mouseFence.moveTo(p0, p1);
+	g_agi->_game.mouseFence.setWidth(p2 - p0);
+	g_agi->_game.mouseFence.setHeight(p3 - p1);
 }
 
 cmd(release_key) {
@@ -1512,8 +1518,11 @@
 		game.vars[27] = g_mouse.button;
 		game.vars[28] = g_mouse.x / 2;
 		game.vars[29] = g_mouse.y;
-	} else
-		report("push.script\n");
+	} else {
+		if (g_agi->getVersion() >= 0x2915) {
+			report("push.script\n");
+		}
+	}
 }
 
 cmd(set_pri_base) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list