[Scummvm-cvs-logs] CVS: scummvm/sky logic.cpp,1.80,1.81 logic.h,1.24,1.25 mouse.cpp,1.5,1.6 mouse.h,1.5,1.6 sky.cpp,1.52,1.53

Joost Peters joostp at users.sourceforge.net
Wed Jun 4 10:14:04 CEST 2003


Update of /cvsroot/scummvm/scummvm/sky
In directory sc8-pr-cvs1:/tmp/cvs-serv24329/sky

Modified Files:
	logic.cpp logic.h mouse.cpp mouse.h sky.cpp 
Log Message:
some more mouse stuff..

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/logic.cpp,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -d -r1.80 -r1.81
--- logic.cpp	2 Jun 2003 06:48:35 -0000	1.80
+++ logic.cpp	4 Jun 2003 17:13:24 -0000	1.81
@@ -1466,8 +1466,7 @@
 }
 
 bool SkyLogic::fnAddHuman(uint32 a, uint32 b, uint32 c) {
-	warning("Stub: fnAddHuman");
-	return true;
+	return _skyMouse->fnAddHuman();
 }
 
 bool SkyLogic::fnAddButtons(uint32 a, uint32 b, uint32 c) {

Index: logic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/logic.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- logic.h	2 Jun 2003 06:42:42 -0000	1.24
+++ logic.h	4 Jun 2003 17:13:24 -0000	1.25
@@ -34,10 +34,13 @@
 	RESULT = 0,
 	SCREEN = 1,
 	LOGIC_LIST_NO = 2,
+	MOUSE_LIST_NO = 6,
 	DRAW_LIST_NO = 8,
 	CUR_ID = 12,
 	MOUSE_STATUS = 13,
 	MOUSE_STOP = 14,
+	BUTTON = 15,
+	SPECIAL_ITEM = 17,
 	GET_OFF = 18,
 	PLAYER_X = 27,
 	PLAYER_Y = 28,
@@ -62,6 +65,7 @@
 
 class SkyAutoRoute;
 class SkyScreen;
+class SkyMouse;
 
 class SkyLogic {
 public:
@@ -85,7 +89,7 @@
 	void pause();
 	void waitSync();
 	void simpleAnim();
-
+	uint16 script(uint16 scriptNo, uint16 offset);
 
 	bool fnCacheChip(uint32 a, uint32 b, uint32 c);
 	bool fnCacheFast(uint32 a, uint32 b, uint32 c);
@@ -211,7 +215,6 @@
 	void push(uint32);
 	uint32 pop();
 	void checkModuleLoaded(uint16 moduleNo);
-	uint16 script(uint16 scriptNo, uint16 offset);
 	bool collide(Compact *cpt);
 	void initScriptVariables();
 	void mainAnim();

Index: mouse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/mouse.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mouse.cpp	1 Jun 2003 13:20:55 -0000	1.5
+++ mouse.cpp	4 Jun 2003 17:13:24 -0000	1.6
@@ -77,15 +77,15 @@
 	24829
 };
 
-SkyMouse::SkyMouse(OSystem *system, SkyDisk *skyDisk) {
+SkyMouse::SkyMouse(OSystem *system, SkyDisk *skyDisk, SkyLogic *skyLogic) {
 
 	_skyDisk = skyDisk;
+	_skyLogic = skyLogic;
 	_system = system;
 	_mouseWidth = 6;
 	_mouseHeight = 6;
 	_maskWidth = 6;
 	_maskHeight = 6;
-
 	
 	_miceData = _skyDisk->loadFile(MICE_FILE, NULL);
 	_mouseData2 = _miceData;
@@ -129,6 +129,36 @@
 	return true;
 }
 
+bool SkyMouse::fnAddHuman(void) {
+	//reintroduce the mouse so that the human can control the player
+	//could still be switched out at high-level
+
+	if (!SkyLogic::_scriptVariables[MOUSE_STOP]) {
+		SkyLogic::_scriptVariables[MOUSE_STATUS] |= 6;	//cursor & mouse
+		_tMouseX = _newSafeX;
+		_tMouseY = _newSafeY;
+
+		if (_aMouseY < 2)	//stop mouse activating top line
+			_aMouseY = 2;
+	
+		//force the pointer engine into running a get-off
+		//even if it's over nothing
+
+		//KWIK-FIX
+		//get off may contain script to remove mouse pointer text
+		//surely this script should be run just in case
+		//I am going to try it anyway
+		uint32 getOff = SkyLogic::_scriptVariables[GET_OFF];
+		if (getOff)
+			_skyLogic->script((uint16)(getOff & 0xFFFF), (uint16)(getOff >> 16));
+	
+		SkyLogic::_scriptVariables[SPECIAL_ITEM] = 0xFFFFFFFF;  //0?
+		SkyLogic::_scriptVariables[GET_OFF] = RESET_MOUSE;
+	}
+
+	return true;
+}
+
 void SkyMouse::lockMouse(void) {
 	_lockMouseX = _aMouseX;
 	_lockMouseY = _aMouseY;
@@ -151,7 +181,7 @@
 }
 
 void SkyMouse::spriteMouse(uint16 frameNum, uint16 mouseX, uint16 mouseY) {
-	//_mouseFlag |= MF_IN_INT;
+	SkyState::_systemVars.mouseFlag |= MF_IN_INT;
 	_mouseType2 = frameNum;
 	_mouseOffsetX = mouseX;
 	_mouseOffsetY = mouseY;
@@ -172,5 +202,41 @@
 		_system->show_mouse(true);
 	//drawNewMouse();
 
-	//_mouseFlag ^= (~_mouseFlag | MF_IN_INT);
+	SkyState::_systemVars.mouseFlag &= ~MF_IN_INT;
+}
+
+void SkyMouse::mouseEngine(void) {
+	_tMouseX = _aMouseX + TOP_LEFT_X;
+	_tMouseY = _aMouseY + TOP_LEFT_Y;
+
+	_eMouseB = _bMouseB;
+	_bMouseB = 0;
+	
+	if (!SkyLogic::_scriptVariables[MOUSE_STOP]) {
+		if (SkyLogic::_scriptVariables[MOUSE_STATUS] & (1 << 1)) {
+			pointerEngine();
+			if (SkyLogic::_scriptVariables[MOUSE_STATUS] & (1 << 2)) //buttons enabled?
+				buttonEngine1();
+		}
+	}	
+	_eMouseB = 0;	//don't save up buttons
+}
+
+void SkyMouse::pointerEngine(void) {
+	warning("Stub: pointerEngine()");
+}
+
+void SkyMouse::buttonEngine1(void) {
+	//checks for clicking on special item
+	//"compare the size of this routine to S1 mouse_button"
+
+	if (_eMouseB) {	//anything pressed?
+		SkyLogic::_scriptVariables[BUTTON] = _eMouseB;
+		_eMouseB = 0;
+		if (SkyLogic::_scriptVariables[SPECIAL_ITEM]) { //over anything?
+			Compact *item = SkyState::fetchCompact(SkyLogic::_scriptVariables[SPECIAL_ITEM]);
+			if (item->mouseClick)
+				_skyLogic->script(item->mouseClick, 0);
+		}
+	}
 }

Index: mouse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/mouse.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mouse.h	1 Jun 2003 13:20:55 -0000	1.5
+++ mouse.h	4 Jun 2003 17:13:24 -0000	1.6
@@ -24,19 +24,23 @@
 
 #include "stdafx.h"
 #include "sky/disk.h"
+#include "sky/logic.h"
 #include "sky/struc.h"
 
+class SkyLogic;
+
 class SkyMouse {
 
 public:
 
-	SkyMouse(OSystem *system, SkyDisk *skyDisk);
+	SkyMouse(OSystem *system, SkyDisk *skyDisk, SkyLogic *skyLogic);
 	~SkyMouse(void);
 
 	void replaceMouseCursors(uint16 fileNo);
 	bool fnBlankMouse(void);
 	bool fnDiskMouse(void);
 	bool fnNormalMouse(void);
+	bool fnAddHuman(void);
 	void lockMouse(void);
 	void unlockMouse(void);
 	void restoreMouseData(uint16 frameNum);
@@ -45,9 +49,22 @@
 
 protected:
 
+	void mouseEngine(void);
+	void pointerEngine(void);
+	void buttonEngine1(void);
+
+	uint16 _eMouseB;
+	uint16 _bMouseB;
+	
 	uint16 _aMouseX;	//actual mouse coordinates
 	uint16 _aMouseY;	
 
+	uint16	_tMouseX;
+	uint16	_tMouseY;
+
+	uint16 _newSafeX;
+	uint16 _newSafeY;
+
 	uint16 _lockMouseX;
 	uint16 _lockMouseY;
 
@@ -73,15 +90,13 @@
 	byte *_miceData;	//address of mouse sprites
 	byte *_objectMouseData;	//address of object mouse sprites
 
-	uint16	_tMouseX;
-	uint16	_tMouseY;
-
 	uint16	_mouseXOff;
 
 	static uint32 _mouseObjectList[];
 
 	OSystem *_system;
 	SkyDisk *_skyDisk;
+	SkyLogic *_skyLogic;
 };
 
 #endif //SKYMOUSE_H

Index: sky.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.cpp,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- sky.cpp	2 Jun 2003 06:42:42 -0000	1.52
+++ sky.cpp	4 Jun 2003 17:13:24 -0000	1.53
@@ -174,7 +174,7 @@
 	_systemVars.systemFlags |= SF_PLAY_VOCS;
 
 	_skyText = new SkyText(_skyDisk);
-	_skyMouse = new SkyMouse(_system, _skyDisk);
+	_skyMouse = new SkyMouse(_system, _skyDisk, _skyLogic);
 	_skyScreen = new SkyScreen(_system, _skyDisk);
 
 	initVirgin();





More information about the Scummvm-git-logs mailing list