[Scummvm-cvs-logs] CVS: scummvm/sky control.cpp,1.17,1.18 control.h,1.11,1.12 sky.cpp,1.74,1.75

Robert G?ffringmann lavosspawn at users.sourceforge.net
Fri Jul 4 15:40:04 CEST 2003


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

Modified Files:
	control.cpp control.h sky.cpp 
Log Message:
support text and speech at the same time

Index: control.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/control.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- control.cpp	4 Jul 2003 20:31:41 -0000	1.17
+++ control.cpp	4 Jul 2003 22:39:10 -0000	1.18
@@ -83,6 +83,16 @@
 	free(_oldScreen);
 }
 
+void SkyTextResource::flushForRedraw(void) {
+    
+	if (_oldX < GAME_SCREEN_WIDTH) {
+		uint16 cpWidth = (PAN_LINE_WIDTH > (GAME_SCREEN_WIDTH - _oldX))?(GAME_SCREEN_WIDTH - _oldX):(PAN_LINE_WIDTH);
+		for (uint8 cnty = 0; cnty < PAN_CHAR_HEIGHT; cnty++)
+			memcpy(_screen + (cnty + _oldY) * GAME_SCREEN_WIDTH + _oldX, _oldScreen + cnty * PAN_LINE_WIDTH, cpWidth);
+	}
+	_oldX = GAME_SCREEN_WIDTH;
+}
+
 void SkyTextResource::drawToScreen(bool doMask) {
 	
 	doMask = true;
@@ -198,10 +208,7 @@
 		_fxPanButton  = createResource(      _sprites.button, 3, 2, 58,  99, 87,       TOGGLE_FX, MAINPANEL);
 
 	if (SkyState::isCDVersion()) { // CD Version: Toggle text/speech
-		if (SkyState::_systemVars.systemFlags & SF_ALLOW_TEXT)
-			_musicPanButton = createResource(      _sprites.button, 3, 2, 58, 119, 21,     TOGGLE_TEXT, MAINPANEL);
-		else
-			_musicPanButton = createResource(      _sprites.button, 3, 0, 58, 119, 35,     TOGGLE_TEXT, MAINPANEL);
+	  _musicPanButton = createResource(      _sprites.button, 3, 0, 58, 119, 52,     TOGGLE_TEXT, MAINPANEL);
 	} else {                       // disk version: toggle music on/off
 	  _musicPanButton = createResource(      _sprites.button, 3, 0, 58, 119, 91,       TOGGLE_MS, MAINPANEL);
 	}
@@ -262,15 +269,46 @@
 	_text->setXY(_mouseX + 12, _mouseY - 16);
 }
 
+void SkyControl::drawTextCross(uint32 flags) {
+	
+	_bodge->drawToScreen(NO_MASK);
+	if (!(flags & SF_ALLOW_SPEECH))
+		drawCross(151, 124);
+	if (!(flags & SF_ALLOW_TEXT))
+		drawCross(173, 124);
+}
+
+void SkyControl::drawCross(uint16 x, uint16 y) {
+
+	_text->flushForRedraw();
+	uint8 *bufPos, *crossPos;
+	bufPos = _screenBuf + y * GAME_SCREEN_WIDTH + x;
+	crossPos = _crossImg;
+	for (uint16 cnty = 0; cnty < CROSS_SZ_Y; cnty++) {
+		for (uint16 cntx = 0; cntx < CROSS_SZ_X; cntx++)
+			if (crossPos[cntx] != 0xFF)
+				bufPos[cntx] = crossPos[cntx];
+		bufPos += GAME_SCREEN_WIDTH;
+		crossPos += CROSS_SZ_X;
+	}
+	bufPos = _screenBuf + y * GAME_SCREEN_WIDTH + x;
+	_system->copy_rect(bufPos, GAME_SCREEN_WIDTH, x, y, CROSS_SZ_X, CROSS_SZ_Y);
+	_text->drawToScreen(WITH_MASK);
+}
+
 void SkyControl::animClick(SkyConResource *pButton) {
 
 	if (pButton->_curSprite != pButton->_numSprites -1) {
 		pButton->_curSprite++;
+		_text->flushForRedraw();
 		pButton->drawToScreen(NO_MASK);
+		_text->drawToScreen(WITH_MASK);
 		_system->update_screen();
 		delay(150);
 		pButton->_curSprite--;
+		_text->flushForRedraw();
 		pButton->drawToScreen(NO_MASK);
+		_text->drawToScreen(WITH_MASK);
 		_system->update_screen();
 	}
 }
@@ -291,6 +329,8 @@
 	_slide->drawToScreen(WITH_MASK);
 	_slide2->drawToScreen(WITH_MASK);
 	_bodge->drawToScreen(WITH_MASK);
+	if (SkyState::isCDVersion())
+		drawTextCross(SkyState::_systemVars.systemFlags & TEXT_FLAG_MASK);
 }
 
 void SkyControl::restartGame(void) {
@@ -372,9 +412,9 @@
 				buttonControl(_controlPanLookList[lookCnt]);
 				if (_mouseClicked && _controlPanLookList[lookCnt]->_onClick) {
 					clickRes = handleClick(_controlPanLookList[lookCnt]);
-					buttonControl(NULL);
-					_text->drawToScreen(WITH_MASK); // flush text restore buffer
+					_text->flushForRedraw();
 					drawMainPanel();
+					_text->drawToScreen(WITH_MASK);
 					if ((clickRes == QUIT_PANEL) || (clickRes == GAME_SAVED) ||
 						(clickRes == GAME_RESTORED))
 						quitPanel = true;
@@ -455,7 +495,8 @@
 			return 0;
 
 		case TOGGLE_TEXT:
-			return toggleText(pButton);
+			animClick(pButton);
+			return toggleText();
 
 		case EXIT:
 			animClick(pButton);
@@ -585,20 +626,23 @@
 	return TOGGLED;
 }
 
-uint16 SkyControl::toggleText(SkyConResource *pButton) {
+uint16 SkyControl::toggleText(void) {
+
+	uint32 flags = SkyState::_systemVars.systemFlags & TEXT_FLAG_MASK;
+	SkyState::_systemVars.systemFlags &= ~TEXT_FLAG_MASK;
+
+
+	if (flags == SF_ALLOW_TEXT)
+		flags = SF_ALLOW_SPEECH;
+	else if (flags == SF_ALLOW_SPEECH)
+		flags = SF_ALLOW_SPEECH | SF_ALLOW_TEXT;
+	else
+		flags = SF_ALLOW_TEXT;
+
+	SkyState::_systemVars.systemFlags |= flags;
+
+	drawTextCross(flags);
 
-	SkyState::_systemVars.systemFlags ^= SF_ALLOW_SPEECH;
-	if (SkyState::_systemVars.systemFlags & SF_ALLOW_SPEECH) {
-		pButton->_curSprite = 0;
-		pButton->_text = 0x7000 + 35;
-		SkyState::_systemVars.systemFlags &= ~SF_ALLOW_TEXT;
-	} else {
-		pButton->_curSprite = 2;
-		pButton->_text = 0x7000 + 21;
-		SkyState::_systemVars.systemFlags |= SF_ALLOW_TEXT;
-	}
-	pButton->drawToScreen(WITH_MASK);
-	buttonControl(pButton);
 	_system->update_screen();
 	return TOGGLED;
 }
@@ -1384,3 +1428,45 @@
 	"Fim de jogo para o jogador um",
 	"BE VIGILANT"
 };
+
+uint8 SkyControl::_crossImg[594] = {
+    0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x4D, 0x61, 
+    0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0x08, 0x4E, 0x53, 0x50, 0x4F, 0x0C, 0x4D, 0x4E, 0x51, 0x58, 0x58, 0x54, 0x4E, 0x08, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x54, 0x58, 0x50, 0x4E, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0x50, 0x4E, 0x54, 0x58, 0x58, 0x54, 0x4E, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0x61, 0x53, 0x58, 0x54, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0x50, 0x4E, 0x55, 0x58, 0x58, 0x53, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x51, 0x58, 0x58, 
+    0x51, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x51, 0x58, 
+    0x59, 0x58, 0x51, 0x61, 0xFF, 0xFF, 0x61, 0x54, 0x58, 0x58, 0x4F, 0x52, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x55, 0x58, 0x58, 0x57, 0x4E, 
+    0x4F, 0x56, 0x58, 0x57, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x51, 0x58, 0x58, 0x58, 0x58, 0x58, 0x54, 0x4E, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0x6A, 0x4F, 0x58, 0x58, 0x58, 0x58, 0x52, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x54, 0x58, 
+    0x58, 0x58, 0x58, 0x57, 0x53, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x09, 0x58, 0x58, 0x58, 0x57, 0x56, 0x58, 0x58, 0x58, 
+    0x57, 0x4F, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0x61, 0x55, 0x58, 0x58, 0x58, 0x58, 0x4E, 0x64, 0x57, 0x58, 0x58, 0x58, 0x58, 0x53, 0x61, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x57, 0x58, 0x58, 0x58, 0x58, 
+    0x50, 0xFF, 0xFF, 0x4E, 0x57, 0x58, 0x58, 0x58, 0x58, 0x56, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x58, 0x58, 0x58, 0x58, 0x58, 0x53, 0x09, 0xFF, 0xFF, 0xFF, 0x4E, 
+    0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x57, 
+    0x58, 0x58, 0x58, 0x58, 0x56, 0x4E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x58, 0x58, 0x58, 0x58, 
+    0x58, 0x57, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x55, 0x58, 0x58, 0x58, 0x58, 0x58, 0x4E, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x58, 0x58, 0x58, 0x58, 0x4E, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0x06, 0x58, 0x58, 0x58, 0x58, 0x58, 0x52, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0x0C, 0x52, 0x58, 0x58, 0x51, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x56, 0x58, 
+    0x58, 0x58, 0x58, 0x56, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x56, 
+    0x58, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x4D, 0x4D, 0x51, 0x56, 0x58, 0x58, 0x50, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x54, 0x09, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x50, 0x54, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0x61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF
+};
+

Index: control.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/control.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- control.h	4 Jul 2003 20:31:41 -0000	1.11
+++ control.h	4 Jul 2003 22:39:10 -0000	1.12
@@ -47,6 +47,10 @@
 #define SP_HEIGHT 149
 #define SP_TOP_GAP 12
 #define SP_BOT_GAP 27
+#define CROSS_SZ_X 27
+#define CROSS_SZ_Y 22
+
+#define TEXT_FLAG_MASK (SF_ALLOW_SPEECH | SF_ALLOW_TEXT)
 
 #define GAME_NAME_X (SPNL_X + 18)				// x coordinate of game names
 #define GAME_NAME_Y (SPNL_Y + SP_TOP_GAP)		// start y coord of game names
@@ -138,6 +142,7 @@
 	SkyTextResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, uint16 pX, uint16 pY, uint32 pText, uint8 pOnClick, OSystem *system, uint8 *screen);
 	virtual ~SkyTextResource(void);
 	virtual void drawToScreen(bool doMask);
+	void flushForRedraw(void);
 private:
 	uint16 _oldX, _oldY;
 	uint8 *_oldScreen;
@@ -166,9 +171,11 @@
 	uint16 doMusicSlide(void);
 	uint16 doSpeedSlide(void);
 	uint16 toggleFx(SkyConResource *pButton);
-	uint16 toggleText(SkyConResource *pButton);
+	uint16 toggleText(void);
 	uint16 shiftDown(uint8 speed);
 	uint16 shiftUp(uint8 speed);
+	void drawTextCross(uint32 flags);
+	void drawCross(uint16 x, uint16 y);
 
 	uint16 saveRestorePanel(bool allowSave);
 	void loadDescriptions(uint8 *destBuf);
@@ -249,6 +256,7 @@
 	SkyConResource *_savePanLookList[6], *_restorePanLookList[6];
 
 	static char _quitTexts[12][30];
+	static uint8 _crossImg[594];
 };
 
 #endif // CONTROL_H

Index: sky.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.cpp,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -d -r1.74 -r1.75
--- sky.cpp	4 Jul 2003 20:14:11 -0000	1.74
+++ sky.cpp	4 Jul 2003 22:39:10 -0000	1.75
@@ -183,7 +183,7 @@
 			_skyMusic = new SkyGmMusic(_detector->createMidi(), _skyDisk, _system);
 	}
 	if (isCDVersion())
-		_systemVars.systemFlags |= SF_ALLOW_SPEECH;
+		_systemVars.systemFlags |= SF_ALLOW_SPEECH | SF_ALLOW_TEXT;
 	else
 		_systemVars.systemFlags |= SF_ALLOW_TEXT;
 





More information about the Scummvm-git-logs mailing list