diff options
| -rw-r--r-- | sky/logic.cpp | 14 | ||||
| -rw-r--r-- | sky/mouse.cpp | 19 | ||||
| -rw-r--r-- | sky/mouse.h | 6 | ||||
| -rw-r--r-- | sky/sky.cpp | 7 | 
4 files changed, 28 insertions, 18 deletions
diff --git a/sky/logic.cpp b/sky/logic.cpp index 57cd263064..495caca726 100644 --- a/sky/logic.cpp +++ b/sky/logic.cpp @@ -1187,8 +1187,7 @@ bool SkyLogic::fnAssignBase(uint32 id, uint32 scr, uint32 c) {  }  bool SkyLogic::fnDiskMouse(uint32 a, uint32 b, uint32 c) { -	warning("Stub: fnDiskMouse"); -	return true; +	return _skyMouse->fnDiskMouse();  }  bool SkyLogic::fnNormalMouse(uint32 a, uint32 b, uint32 c) { @@ -1196,7 +1195,7 @@ bool SkyLogic::fnNormalMouse(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnBlankMouse(uint32 a, uint32 b, uint32 c) { -	return (_skyMouse->fnBlankMouse() != 0); +	return _skyMouse->fnBlankMouse();  }  bool SkyLogic::fnCrossMouse(uint32 a, uint32 b, uint32 c) { @@ -2060,12 +2059,11 @@ void SkyLogic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32  	if (SkyTalkAnims::animTalkTableIsPointer[offset]) //is it a pointer?  		animPtr = (uint16 *)SkyTalkAnims::animTalkTablePtr[offset]; -	else { 	//then it must be a value +	else  	//then it must be a value  		animPtr = (uint16 *)SkyState::fetchCompact(SkyTalkAnims::animTalkTableVal[offset]); -		target->offset = *animPtr++; -		target->getToFlag = *animPtr++; -	} - +	 +	target->offset = *animPtr++; +	target->getToFlag = *animPtr++;  	target->grafixProg = animPtr;  	if (SkyState::isCDVersion(_gameVersion)) diff --git a/sky/mouse.cpp b/sky/mouse.cpp index 99ebc98eb3..1cea2251d1 100644 --- a/sky/mouse.cpp +++ b/sky/mouse.cpp @@ -77,9 +77,10 @@ uint32 _mouseObjectList[] = {  	24829  }; -SkyMouse::SkyMouse(SkyDisk *skyDisk) { +SkyMouse::SkyMouse(OSystem *system, SkyDisk *skyDisk) {  	_skyDisk = skyDisk; +	_system = system;  	_mouseWidth = 6;  	_mouseHeight = 6;  	_maskWidth = 6; @@ -113,12 +114,19 @@ void SkyMouse::replaceMouseCursors(uint16 fileNo) {  	_skyDisk->loadFile(fileNo, _objectMouseData);  } -uint32 SkyMouse::fnBlankMouse(void) { +bool SkyMouse::fnBlankMouse(void) {  	_mouseXOff = 0;	//re-align mouse  	spriteMouse(MOUSE_BLANK, 0, 0); +	return true; +} + +bool SkyMouse::fnDiskMouse(void) { -	return 1; +	//turn the mouse into a disk mouse +	spriteMouse(MOUSE_DISK, 11, 11); +	return true;	//don't quit from the interpreter +	  }  void SkyMouse::lockMouse(void) { @@ -153,7 +161,7 @@ void SkyMouse::spriteMouse(uint16 frameNum, uint16 mouseX, uint16 mouseY) {  	_mouseOffsetX = mouseX;  	_mouseOffsetY = mouseY; -	restoreMouseData(frameNum); +	//restoreMouseData(frameNum);  	byte *mouseData = _miceData;  	uint32 pos = ((struct dataFileHeader *)mouseData)->s_sp_size * ((struct dataFileHeader *)mouseData)->s_sp_size;  	pos += sizeof(struct dataFileHeader); @@ -162,7 +170,8 @@ void SkyMouse::spriteMouse(uint16 frameNum, uint16 mouseX, uint16 mouseY) {  	_mouseWidth = ((struct dataFileHeader *)mouseData)->s_width;  	_mouseHeight = ((struct dataFileHeader *)mouseData)->s_height; -	drawNewMouse(); +	_system->set_mouse_cursor(_mouseData2, _mouseWidth, _mouseHeight, mouseX, mouseY); +	//drawNewMouse();  	//_mouseFlag ^= (~_mouseFlag | MF_IN_INT);  } diff --git a/sky/mouse.h b/sky/mouse.h index 7b2b91cb1b..98750a94fc 100644 --- a/sky/mouse.h +++ b/sky/mouse.h @@ -30,11 +30,12 @@ class SkyMouse {  public: -	SkyMouse(SkyDisk *skyDisk); +	SkyMouse(OSystem *system, SkyDisk *skyDisk);  	~SkyMouse(void);  	void replaceMouseCursors(uint16 fileNo); -	uint32 fnBlankMouse(void); +	bool fnBlankMouse(void); +	bool fnDiskMouse(void);  	void lockMouse(void);  	void unlockMouse(void);  	void restoreMouseData(uint16 frameNum); @@ -78,6 +79,7 @@ protected:  	static uint32 _mouseObjectList[]; +	OSystem *_system;  	SkyDisk *_skyDisk;  }; diff --git a/sky/sky.cpp b/sky/sky.cpp index 746dfbd0df..bf6c5e5b93 100644 --- a/sky/sky.cpp +++ b/sky/sky.cpp @@ -113,7 +113,7 @@ SkyState::~SkyState() {  	delete _skyGrid;  	delete _skySound;  	delete _skyMusic; -    showQuitMsg();	 +	showQuitMsg();	  	delete _skyText;  	delete _skyMouse;  	delete _skyScreen; @@ -170,7 +170,7 @@ void SkyState::initialise(void) {  	}  	_skyText = new SkyText(_skyDisk, _gameVersion, _language); -	_skyMouse = new SkyMouse(_skyDisk); +	_skyMouse = new SkyMouse(_system, _skyDisk);  	_skyScreen = new SkyScreen(_system, _skyDisk);  	initVirgin(); @@ -269,7 +269,7 @@ void SkyState::delay(uint amount) { //copied and mutilated from Simon.cpp  	uint32 start = _system->get_msecs();  	uint32 cur = start;  	_key_pressed = 0;	//reset -	 +	_mouse_pos_changed = false;  	_rnd.getRandomNumber(2);  	do { @@ -287,6 +287,7 @@ void SkyState::delay(uint amount) { //copied and mutilated from Simon.cpp  					_sdl_mouse_x = event.mouse.x;  					_sdl_mouse_y = event.mouse.y;  					_mouse_pos_changed = true; +					_system->set_mouse_pos(_sdl_mouse_x, _sdl_mouse_y);  					break;  					case OSystem::EVENT_LBUTTONDOWN:  | 
