[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