[Scummvm-cvs-logs] CVS: scummvm/sky logic.cpp,1.121,1.122 mouse.cpp,1.21,1.22 mouse.h,1.16,1.17 sky.cpp,1.87,1.88 skydefs.h,1.22,1.23 sound.cpp,1.25,1.26 sound.h,1.12,1.13

Robert G?ffringmann lavosspawn at users.sourceforge.net
Fri Jul 11 18:13:00 CEST 2003


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

Modified Files:
	logic.cpp mouse.cpp mouse.h sky.cpp skydefs.h sound.cpp 
	sound.h 
Log Message:
implemented dialog skipping and cleaned up mouse code

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/logic.cpp,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -d -r1.121 -r1.122
--- logic.cpp	11 Jul 2003 23:56:28 -0000	1.121
+++ logic.cpp	12 Jul 2003 01:12:00 -0000	1.122
@@ -416,8 +416,7 @@
 	_skyText->logicCursor(_compact, _skyMouse->giveMouseX(), _skyMouse->giveMouseY());
 }
 
-/*
-static uint16 clickTable[] = {
+static uint16 clickTable[46] = {
 	ID_FOSTER,
 	ID_JOEY,
 	ID_JOBS,
@@ -471,7 +470,6 @@
 	ID_HOLOGRAM_B,
 	12289
 };
-*/
 
 void SkyLogic::talk() {
 	// first count through the frames
@@ -484,32 +482,26 @@
 
 	// Are we allowed to click
 	
-#if 0
-	for (int i = 0; i < ARRAYSIZE(clickTable); i++) {
-		if (clickTable[i] == (uint16)_scriptVariables[CUR_ID]) {
-			if (_compact->extCompact->spTextId == 0xffff) { // is this a voc file?
-				warning("fnStopVoc not implemented");
-				//TODO: fnStopVoc
+	if (_skyMouse->wasClicked())
+		for (int i = 0; i < ARRAYSIZE(clickTable); i++)
+			if (clickTable[i] == (uint16)_scriptVariables[CUR_ID]) {
+				if ((SkyState::_systemVars.systemFlags & SF_ALLOW_SPEECH) && (!_skySound->speechFinished()))
+					_skySound->stopSpeech();
+				if ((SkyState::_systemVars.systemFlags & SF_ALLOW_TEXT) &&
+					(_compact->extCompact->spTextId > 0) &&
+					(_compact->extCompact->spTextId < 0xFFFF)) {
+					
+					SkyState::fetchCompact(_compact->extCompact->spTextId)->status = 0;
+				}
 				if (_compact->grafixProg) {
 					_compact->frame = _compact->getToFlag; // set character to stand
-					_compact->grafixProg = 0;
+					_compact->grafixProg = NULL;
 				}
-			} else {
-				if (_compact->grafixProg) // if anim flag stop it
-					_compact->frame = _compact->getToFlag;
 
-				if (_compact->extCompact->spTextId) {
-					Compact *cpt = SkyState::fetchCompact(_compact->extCompact->spTextId); // get text id to kill
-					cpt->status = 0; // kill the text
-				}
+				_compact->logic = L_SCRIPT;
+				logicScript();
+				return;
 			}
-
-			_compact->logic = L_SCRIPT;
-			logicScript();
-			return;
-		}
-	}
-#endif
 
 	// If speech is allowed then check for it to finish before finishing animations
 

Index: mouse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/mouse.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- mouse.cpp	11 Jul 2003 19:41:37 -0000	1.21
+++ mouse.cpp	12 Jul 2003 01:12:00 -0000	1.22
@@ -81,22 +81,14 @@
 
 	_skyDisk = skyDisk;
 	_system = system;
-	_mouseWidth = 6;
-	_mouseHeight = 6;
-	_maskWidth = 6;
-	_maskHeight = 6;
 	_mouseB = 0;
 	
 	_miceData = _skyDisk->loadFile(MICE_FILE, NULL);
 	fixMouseTransparency(_miceData, _skyDisk->_lastLoadedFileSize);
-	_mouseData2 = _miceData;
 
 	//load in the object mouse file
 	_objectMouseData = _skyDisk->loadFile(MICE_FILE + 1, NULL);
 	fixMouseTransparency(_objectMouseData, _skyDisk->_lastLoadedFileSize);
-	_mouseWidth = 1;
-	_mouseHeight = 1;
-	//_systemFlags |= SF_MOUSE;;
 }
 
 SkyMouse::~SkyMouse( ){
@@ -115,13 +107,11 @@
 
 	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;
-			_system->warp_mouse(GAME_SCREEN_WIDTH / 2, GAME_SCREEN_HEIGHT / 2);
-		}
+		if (_mouseY < 2) //stop mouse activating top line
+			_mouseY = 2;
+		
+		_system->warp_mouse(_mouseX, _mouseY);
 	
 		//force the pointer engine into running a get-off
 		//even if it's over nothing
@@ -141,18 +131,16 @@
 }
 
 void SkyMouse::fnSaveCoods(void) { 
-	SkyLogic::_scriptVariables[SAFEX] = _tMouseX; 
-	SkyLogic::_scriptVariables[SAFEY] = _tMouseY; 
+	SkyLogic::_scriptVariables[SAFEX] = _mouseX + TOP_LEFT_X;
+	SkyLogic::_scriptVariables[SAFEY] = _mouseY + TOP_LEFT_Y;
 }
 
 void SkyMouse::lockMouse(void) {
-	_lockMouseX = _aMouseX;
-	_lockMouseY = _aMouseY;
+	SkyState::_systemVars.systemFlags |= SF_MOUSE_LOCKED;
 }
 
 void SkyMouse::unlockMouse(void) {
-	_aMouseX = _lockMouseX;
-	_aMouseY = _lockMouseY;
+	SkyState::_systemVars.systemFlags &= ~SF_MOUSE_LOCKED;
 }
 
 void SkyMouse::restoreMouseData(uint16 frameNum) {
@@ -178,7 +166,6 @@
 				mousePressed = false;
 		}
 	}
-	_bMouseB = 0;
 }
 
 //original sky uses different colors for transparency than our backends do,
@@ -201,46 +188,38 @@
 }
 
 void SkyMouse::spriteMouse(uint16 frameNum, uint8 mouseX, uint8 mouseY) {
-	SkyState::_systemVars.mouseFlag |= MF_IN_INT;
-	_mouseType2 = frameNum;
+	
+	_currentCursor = frameNum;
 
-	byte *mouseData = _miceData;
-	uint32 pos = ((struct dataFileHeader *)mouseData)->s_sp_size * frameNum;
-	pos += sizeof(struct dataFileHeader);
-	_mouseData2 = mouseData + pos;	
+	byte *newCursor = _miceData;
+	newCursor += ((struct dataFileHeader *)_miceData)->s_sp_size * frameNum;
+	newCursor += sizeof(struct dataFileHeader);
 
-	_mouseWidth = ((struct dataFileHeader *)mouseData)->s_width;
-	_mouseHeight = ((struct dataFileHeader *)mouseData)->s_height;
+	uint16 mouseWidth = ((struct dataFileHeader *)_miceData)->s_width;
+	uint16 mouseHeight = ((struct dataFileHeader *)_miceData)->s_height;
 
-	//_system->set_mouse_cursor(_mouseData2, _mouseWidth, _mouseHeight, mouseX, mouseY);
-	// there's something wrong about the mouse's hotspot. using 4/4 seems to work fine. 
-	_system->set_mouse_cursor(_mouseData2, _mouseWidth, _mouseHeight, mouseX, mouseY);
+	_system->set_mouse_cursor(newCursor, mouseWidth, mouseHeight, mouseX, mouseY);
 	if (frameNum == MOUSE_BLANK) _system->show_mouse(false);
 	else _system->show_mouse(true);
-
-	SkyState::_systemVars.mouseFlag &= ~MF_IN_INT;
 }
 
 void SkyMouse::mouseEngine(uint16 mouseX, uint16 mouseY) {
-	_aMouseX = mouseX;
-	_aMouseY = mouseY;
-	_tMouseX = _aMouseX + TOP_LEFT_X;
-	_tMouseY = _aMouseY + TOP_LEFT_Y;
+	_mouseX = mouseX;
+	_mouseY = mouseY;
+
+	_logicClick = (_mouseB > 0); // click signal is available for SkyLogic for one gamecycle
 
-	_eMouseB = _bMouseB;
-	_bMouseB = 0;
-	
 	if (!SkyLogic::_scriptVariables[MOUSE_STOP]) {
 		if (SkyLogic::_scriptVariables[MOUSE_STATUS] & (1 << 1)) {
-			pointerEngine();
+			pointerEngine(mouseX + TOP_LEFT_X, mouseY + TOP_LEFT_Y);
 			if (SkyLogic::_scriptVariables[MOUSE_STATUS] & (1 << 2)) //buttons enabled?
 				buttonEngine1();
 		}
 	}	
-	_eMouseB = 0;	//don't save up buttons
+	_mouseB = 0;	//don't save up buttons
 }
 
-void SkyMouse::pointerEngine(void) {
+void SkyMouse::pointerEngine(uint16 xPos, uint16 yPos) {
 	uint32 currentListNum = SkyLogic::_scriptVariables[MOUSE_LIST_NO];
 	uint16 *currentList;
 	do {
@@ -250,10 +229,10 @@
 			Compact *itemData = SkyState::fetchCompact(itemNum);
 			currentList++;
 			if ((itemData->screen == SkyLogic::_scriptVariables[SCREEN]) &&	(itemData->status & 16)) {
-				if (itemData->xcood + ((int16)itemData->mouseRelX) > _tMouseX) continue;
-				if (itemData->xcood + ((int16)itemData->mouseRelX) + itemData->mouseSizeX < _tMouseX) continue;
-				if (itemData->ycood + ((int16)itemData->mouseRelY) > _tMouseY) continue;
-				if (itemData->ycood + ((int16)itemData->mouseRelY) + itemData->mouseSizeY < _tMouseY) continue;
+				if (itemData->xcood + ((int16)itemData->mouseRelX) > xPos) continue;
+				if (itemData->xcood + ((int16)itemData->mouseRelX) + itemData->mouseSizeX < xPos) continue;
+				if (itemData->ycood + ((int16)itemData->mouseRelY) > yPos) continue;
+				if (itemData->ycood + ((int16)itemData->mouseRelY) + itemData->mouseSizeY < yPos) continue;
 				// we've hit the item
 				if (SkyLogic::_scriptVariables[SPECIAL_ITEM] == itemNum)
 					return;
@@ -279,22 +258,16 @@
 }
 
 void SkyMouse::buttonPressed(uint8 button) {
-	if (_bMouseB == button)
-		_mouseB = 1;
-	else
-		_mouseB = 0;
-	
-	_bMouseB = button;
 	
+	_mouseB = button;
 }
 
 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 (_mouseB) {	//anything pressed?
+		SkyLogic::_scriptVariables[BUTTON] = _mouseB;
 		if (SkyLogic::_scriptVariables[SPECIAL_ITEM]) { //over anything?
 			Compact *item = SkyState::fetchCompact(SkyLogic::_scriptVariables[SPECIAL_ITEM]);
 			if (item->mouseClick)

Index: mouse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/mouse.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- mouse.h	10 Jul 2003 08:24:16 -0000	1.16
+++ mouse.h	12 Jul 2003 01:12:00 -0000	1.17
@@ -50,50 +50,27 @@
 	void useLogicInstance(SkyLogic *skyLogic) { _skyLogic = skyLogic; };
 	void buttonPressed(uint8 button);
 	void waitMouseNotPressed(void);
-	uint16 giveMouseX(void) { return _aMouseX; };
-	uint16 giveMouseY(void) { return _aMouseY; };
-	uint16 giveCurrentMouseType(void) { return _mouseType2; };
+	uint16 giveMouseX(void) { return _mouseX; };
+	uint16 giveMouseY(void) { return _mouseY; };
+	uint16 giveCurrentMouseType(void) { return _currentCursor; };
+	bool wasClicked(void) { return _logicClick; };
 
 protected:
 
-	void pointerEngine(void);
+	void pointerEngine(uint16 xPos, uint16 yPos);
 	void buttonEngine1(void);
 	void fixMouseTransparency(byte *mouseData, uint32 size);
-	
-	uint16 _mouseB;		//used to check for repeat presses
-	uint16 _eMouseB;
-	uint16 _bMouseB;
-	
-	uint16 _aMouseX;	//actual mouse coordinates
-	uint16 _aMouseY;	
 
-	uint16	_tMouseX;
-	uint16	_tMouseY;
-
-	uint16 _newSafeX;
-	uint16 _newSafeY;
-
-	uint16 _lockMouseX;
-	uint16 _lockMouseY;
-
-	uint16	_mouseType2;	//number of current mouse
-	byte *_mouseData2;	//pointer to mouse data
-
-	uint16 _mouseWidth;	//mouse width and height
-	uint16 _mouseHeight;
-
-	byte *_mousePosition;	//current screen address of mouse
-	uint16 _maskWidth;	//width on screen
-	uint16 _maskHeight;	//height on screen
+	bool _logicClick;
+	
+	uint16 _mouseB;	//mouse button
+	uint16 _mouseX;	//actual mouse coordinates
+	uint16 _mouseY;	
 
-	uint32 _mouseFlag;	//bit 0 set when in handler
-				//bit 1 set when screen data has been saved
-				//bit 2 set when we don't want to show mouse
+	uint16 _currentCursor;
 
 	byte *_miceData;	//address of mouse sprites
 	byte *_objectMouseData;	//address of object mouse sprites
-
-	uint16	_mouseXOff;
 
 	static uint32 _mouseMainObjects[24];
 	static uint32 _mouseLincObjects[21];

Index: sky.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.cpp,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -d -r1.87 -r1.88
--- sky.cpp	11 Jul 2003 22:19:16 -0000	1.87
+++ sky.cpp	12 Jul 2003 01:12:00 -0000	1.88
@@ -359,9 +359,11 @@
 					break;
 
 				case OSystem::EVENT_MOUSEMOVE:
-					_sdl_mouse_x = event.mouse.x;
-					_sdl_mouse_y = event.mouse.y;
-					_system->set_mouse_pos(_sdl_mouse_x, _sdl_mouse_y);
+					if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED)) {
+						_sdl_mouse_x = event.mouse.x;
+						_sdl_mouse_y = event.mouse.y;
+						_system->set_mouse_pos(_sdl_mouse_x, _sdl_mouse_y);
+					}
 					break;
 
 				case OSystem::EVENT_LBUTTONDOWN:

Index: skydefs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/skydefs.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- skydefs.h	3 Jul 2003 22:32:18 -0000	1.22
+++ skydefs.h	12 Jul 2003 01:12:00 -0000	1.23
@@ -4269,7 +4269,7 @@
 #define SF_ALLOW_TEXT	(1 << 24)	// text allowed on cd sblaster version
 #define SF_ALLOW_QUICK	(1 << 25)	// when set allow speed playing
 #define SF_TEST_DISK	(1 << 26)	// set when loading files
-#define SF_MOUSE_STOPPED	(1 << 27)	// set if mouse handler skipped to prevent stack overflow
+#define SF_MOUSE_LOCKED	(1 << 27)	// set if coordinates are locked
 
 // Mouse flags
 #define MF_NO_UPDATE	(1 << 0)	// set to disable mouse updating

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sound.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- sound.cpp	7 Jul 2003 14:58:53 -0000	1.25
+++ sound.cpp	12 Jul 2003 01:12:00 -0000	1.26
@@ -1215,6 +1215,10 @@
 	_saveSounds[0] = _saveSounds[1] = 0xFFFF;
 }
 
+void SkySound::stopSpeech(void) {
+	_mixer->stopID(SOUND_SPEECH);
+}
+
 bool SkySound::startSpeech(uint16 textNum) {
     
 	if (!(SkyState::_systemVars.systemFlags & SF_ALLOW_SPEECH))
@@ -1234,6 +1238,6 @@
 	free(speechData);
 
 	_mixer->stopID(SOUND_SPEECH);
-	_mixer->playRaw(&_ingameSpeech, playBuffer, speechSize, 11025, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
+	_mixer->playRaw(&_ingameSpeech, playBuffer, speechSize, 11025, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE, SOUND_SPEECH);
 	return true;
 }

Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sound.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- sound.h	7 Jul 2003 14:58:53 -0000	1.12
+++ sound.h	12 Jul 2003 01:12:00 -0000	1.13
@@ -63,6 +63,7 @@
 	void fnPauseFx(void) { _mixer->pause(true); };
 	void fnUnPauseFx(void) { _mixer->pause(false); };
 	void fnStopFx(void);
+	void stopSpeech(void);
 	void checkFxQueue(void);
 	void restoreSfx(void);
 	uint8 _soundsTotal;





More information about the Scummvm-git-logs mailing list