[Scummvm-cvs-logs] CVS: scummvm/saga interface.cpp,1.108,1.109 interface.h,1.61,1.62 render.cpp,1.63,1.64 render.h,1.22,1.23 resnames.h,1.31,1.32 script.h,1.91,1.92 sfuncs.cpp,1.131,1.132

Eugene Sandulenko sev at users.sourceforge.net
Sun Jul 3 13:06:27 CEST 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27784

Modified Files:
	interface.cpp interface.h render.cpp render.h resnames.h 
	script.h sfuncs.cpp 
Log Message:
Implementation of sfShowMap. This was latest unimplemented script function :)


Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.108
retrieving revision 1.109
diff -u -d -r1.108 -r1.109
--- interface.cpp	21 Jun 2005 15:41:35 -0000	1.108
+++ interface.cpp	3 Jul 2005 20:02:56 -0000	1.109
@@ -29,8 +29,10 @@
 #include "saga/console.h"
 #include "saga/font.h"
 #include "saga/objectmap.h"
+#include "saga/isomap.h"
 #include "saga/itedata.h"
 #include "saga/puzzle.h"
+#include "saga/render.h"
 #include "saga/rscfile_mod.h"
 #include "saga/scene.h"
 #include "saga/script.h"
@@ -38,6 +40,7 @@
 
 #include "saga/interface.h"
 
+#include "common/system.h"
 #include "common/timer.h"
 
 namespace Saga {
@@ -265,8 +268,7 @@
 }
 
 void Interface::setMode(int mode) {
-	// TODO: Is this where we should hide/show the mouse cursor?
-	debug(0, "Interface::setMode %i", mode);
+	debug(5, "Interface::setMode %i", mode);
 	if (mode == kPanelMain) {
 		_inMainMode = true;
 		_saveReminderState = 1; //TODO: blinking timeout
@@ -280,35 +282,38 @@
 	_panelMode = mode;
 	
 	switch (_panelMode) {
-		case kPanelMain:
-			_mainPanel.currentButton = NULL;
-			break;
-		case kPanelConverse:
-			_conversePanel.currentButton = NULL;
-			converseDisplayText();
-			break;
-		case kPanelOption:
-			_optionPanel.currentButton = NULL;
-			_vm->fillSaveList();
-			calcOptionSaveSlider();
-			if (_optionSaveFileTitleNumber >= _vm->getDisplayInfo().optionSaveFileVisible) {
-				_optionSaveFileTitleNumber = _vm->getDisplayInfo().optionSaveFileVisible - 1;
-			}
-			break;
-		case kPanelLoad:
-			_loadPanel.currentButton = NULL;
-			break;
-		case kPanelQuit:
-			_quitPanel.currentButton = NULL;
-			break;
-		case kPanelSave:
-			_savePanel.currentButton = NULL;
-			_textInputMaxWidth = _saveEdit->width - 10;
-			_textInput = true;
-			_textInputStringLength = strlen(_textInputString);
-			_textInputPos = _textInputStringLength + 1;
-			_textInputRepeatPhase = 0;
-			break;
+	case kPanelMain:
+		_mainPanel.currentButton = NULL;
+		break;
+	case kPanelConverse:
+		_conversePanel.currentButton = NULL;
+		converseDisplayText();
+		break;
+	case kPanelOption:
+		_optionPanel.currentButton = NULL;
+		_vm->fillSaveList();
+		calcOptionSaveSlider();
+		if (_optionSaveFileTitleNumber >= _vm->getDisplayInfo().optionSaveFileVisible) {
+			_optionSaveFileTitleNumber = _vm->getDisplayInfo().optionSaveFileVisible - 1;
+		}
+		break;
+	case kPanelLoad:
+		_loadPanel.currentButton = NULL;
+		break;
+	case kPanelQuit:
+		_quitPanel.currentButton = NULL;
+		break;
+	case kPanelSave:
+		_savePanel.currentButton = NULL;
+		_textInputMaxWidth = _saveEdit->width - 10;
+		_textInput = true;
+		_textInputStringLength = strlen(_textInputString);
+		_textInputPos = _textInputStringLength + 1;
+		_textInputRepeatPhase = 0;
+		break;
+	case kPanelMap:
+		mapPanelShow();
+		break;
 	}
 
 	draw();
@@ -438,6 +443,9 @@
 			break;
 
 		}
+	case kPanelMap:
+		mapPanelClean();
+		break;
 	}
 	return false;
 }
@@ -1287,6 +1295,11 @@
 		}
 	}
 
+	if (_panelMode == kPanelMap) {
+		if (updateFlag & UPDATE_MOUSECLICK)
+			mapPanelClean();
+	}
+
 	_lastMousePoint = mousePoint;
 }
 
@@ -2006,5 +2019,106 @@
 	updateInventory(0);
 }
 
+void Interface::mapPanelShow() {
+	byte *resource;
+	size_t resourceLength, imageLength;
+	SURFACE *backBuffer;
+	Point origin;
+	byte *image;
+	int imageWidth, imageHeight;
+	int result;
+	const byte *pal;
+	PALENTRY cPal[PAL_ENTRIES];
+
+	_vm->_gfx->showCursor(false);
+
+	backBuffer = _vm->_gfx->getBackBuffer();
+
+	origin.x = 0;
+	origin.y = 0;
+
+	result = RSC_LoadResource(_interfaceContext, RID_ITE_TYCHO_MAP, &resource, &resourceLength);
+	if ((result != SUCCESS) || (resourceLength == 0)) {
+		error("Interface::mapPanelShow(): unable to load Tycho map resource");
+	}
+
+	_vm->_gfx->getCurrentPal(_mapSavedPal);
+
+	for (int i = 0; i < 6 ; i++) {
+		_vm->_gfx->palToBlack(backBuffer, _mapSavedPal, 0.2 * i);
+		_vm->_render->drawScene();
+		_vm->_system->delayMillis(5);
+	}
+
+	_vm->_render->setFlag(RF_MAP);
+
+	_vm->decodeBGImage(resource, resourceLength, &image, &imageLength, &imageWidth, &imageHeight);
+	pal = _vm->getImagePal(resource, resourceLength);
+
+	for (int i = 0; i < PAL_ENTRIES; i++) {
+		cPal[i].red = *pal++;
+		cPal[i].green = *pal++;
+		cPal[i].blue = *pal++;
+	}
+
+	bufToSurface(backBuffer, image, imageWidth, imageHeight, NULL, &origin);
+
+	// Evil Evil
+	for (int i = 0; i < 6 ; i++) {
+		_vm->_gfx->blackToPal(backBuffer, cPal, 0.2 * i);
+		_vm->_render->drawScene();
+		_vm->_system->delayMillis(5);
+	}
+
+	RSC_FreeResource(resource);
+	free(image);
+
+	setSaveReminderState(false);
+
+	_mapPanelCrossHairState = true;
+}
+
+void Interface::mapPanelClean() {
+	SURFACE *backBuffer;
+	PALENTRY pal[PAL_ENTRIES];
+
+	backBuffer = _vm->_gfx->getBackBuffer();
+
+	_vm->_gfx->getCurrentPal(pal);
+
+	for (int i = 0; i < 6 ; i++) {
+		_vm->_gfx->palToBlack(backBuffer, pal, 0.2 * i);
+		_vm->_render->drawScene();
+		_vm->_system->delayMillis(5);
+	}
+
+	_vm->_render->clearFlag(RF_MAP);
+	setMode(kPanelMain);
+
+	_vm->_gfx->showCursor(true);
+	_vm->_render->drawScene();
+
+	for (int i = 0; i < 6 ; i++) {
+		_vm->_gfx->blackToPal(backBuffer, _mapSavedPal, 0.2 * i);
+		_vm->_render->drawScene();
+		_vm->_system->delayMillis(5);
+	}
+}
+
+void Interface::mapPanelDrawCrossHair() {
+	SURFACE *backBuffer;
+
+	backBuffer = _vm->_gfx->getBackBuffer();
+	_mapPanelCrossHairState = !_mapPanelCrossHairState;
+
+	Point mapPosition = _vm->_isoMap->getMapPosition();
+	Rect screen(_vm->getDisplayWidth(),  _vm->getSceneHeight());
+
+	if (screen.contains(mapPosition)) {
+		_vm->_sprite->draw(backBuffer, _vm->_sprite->_mainSprites,
+						   _mapPanelCrossHairState? RID_ITE_SPR_XHAIR1 : RID_ITE_SPR_XHAIR2,
+						   mapPosition, 256);
+	}
+}
 
 } // End of namespace Saga

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- interface.h	21 Jun 2005 15:41:35 -0000	1.61
+++ interface.h	3 Jul 2005 20:02:56 -0000	1.62
@@ -275,6 +275,8 @@
 	void saveState(Common::OutSaveFile *out);
 	void loadState(Common::InSaveFile *in);
 
+	void mapPanelDrawCrossHair();
+
 private:
 	void handleMainUpdate(const Point& mousePoint);					// main panel update
 	void handleMainClick(const Point& mousePoint);					// main panel click
@@ -309,6 +311,9 @@
 	void handleSaveUpdate(const Point& mousePoint);					// save panel update
 	void handleSaveClick(const Point& mousePoint);					// save panel click
 
+	void mapPanelShow();
+	void mapPanelClean();
+
 	void lockMode() { _lockedMode = _panelMode; }
 	void unlockMode() { _panelMode = _lockedMode; }
 
@@ -436,6 +441,9 @@
 
 	int _textInputRepeatPhase;
 	uint16 _textInputRepeatChar;
+
+	PALENTRY _mapSavedPal[PAL_ENTRIES];
+	bool _mapPanelCrossHairState;
 };
 
 } // End of namespace Saga

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- render.cpp	16 Jun 2005 16:46:49 -0000	1.63
+++ render.cpp	3 Jul 2005 20:02:56 -0000	1.64
@@ -111,7 +111,7 @@
 	// Get mouse coordinates
 	mouse_pt = _vm->mousePos();
 
-	if (/*_vm->_interface->getMode() != kPanelPlacard*/!(_flags & RF_PLACARD)) {
+	if (/*_vm->_interface->getMode() != kPanelPlacard*/!(_flags & (RF_PLACARD | RF_MAP))) {
 		// Display scene background
 		_vm->_scene->draw();
 
@@ -136,6 +136,9 @@
 		}
 	}
 
+	if (_flags & RF_MAP)
+		_vm->_interface->mapPanelDrawCrossHair();
+
 	if ((_vm->_interface->getMode() == kPanelOption) || 
 		(_vm->_interface->getMode() == kPanelQuit) ||
 		(_vm->_interface->getMode() == kPanelLoad) ||

Index: render.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- render.h	8 Jan 2005 20:30:06 -0000	1.22
+++ render.h	3 Jul 2005 20:02:56 -0000	1.23
@@ -32,14 +32,15 @@
 
 #define PAUSEGAME_MSG "PAWS GAME"
 enum RENDER_FLAGS {
-	RF_SHOW_FPS = 0x01,
-	RF_PALETTE_TEST = 0x02,
-	RF_TEXT_TEST = 0x04,
-	RF_OBJECTMAP_TEST = 0x08,
-	RF_RENDERPAUSE = 0x10,
-	RF_GAMEPAUSE = 0x20,
-	RF_PLACARD = 0x40,
-	RF_ACTOR_PATH_TEST = 0x80
+	RF_SHOW_FPS = (1 << 0),
+	RF_PALETTE_TEST = (1 << 1),
+	RF_TEXT_TEST = (1 << 2),
+	RF_OBJECTMAP_TEST = (1 << 3),
+	RF_RENDERPAUSE = (1 << 4),
+	RF_GAMEPAUSE = (1 << 5),
+	RF_PLACARD = (1 << 6),
+	RF_ACTOR_PATH_TEST = (1 << 7),
+	RF_MAP = (1 << 8)
 };
 
 struct BUFFER_INFO {
@@ -87,7 +88,7 @@
 
 	unsigned int _fps;
 	unsigned int _framecount;
-	unsigned int _flags;
+	uint32 _flags;
 };
 
 } // End of namespace Saga

Index: resnames.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/resnames.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- resnames.h	15 Jun 2005 19:26:32 -0000	1.31
+++ resnames.h	3 Jul 2005 20:02:56 -0000	1.32
@@ -71,6 +71,10 @@
 #define RID_ITE_ACTOR_NAMES 36 //actors names
 #define RID_ITE_DEFAULT_PORTRAITS 125
 
+#define RID_ITE_TYCHO_MAP 1686
+#define RID_ITE_SPR_XHAIR1 (73 + 9)
+#define RID_ITE_SPR_XHAIR2 (74 + 9)
+
 #define RID_IHNM_MAIN_PANEL  9
 #define RID_IHNM_CONVERSE_PANEL 10
 #define RID_IHNM_OPTION_PANEL 11       // TODO: verify this

Index: script.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/script.h,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -d -r1.91 -r1.92
--- script.h	1 Jul 2005 17:29:23 -0000	1.91
+++ script.h	3 Jul 2005 20:02:56 -0000	1.92
@@ -530,7 +530,7 @@
 	void sfPickClimbOutPos(SCRIPTFUNC_PARAMS);
 	void sfTossRif(SCRIPTFUNC_PARAMS);
 	void sfShowControls(SCRIPTFUNC_PARAMS);
-	void SF_showMap(SCRIPTFUNC_PARAMS);
+	void sfShowMap(SCRIPTFUNC_PARAMS);
 	void sfPuzzleWon(SCRIPTFUNC_PARAMS);
 	void sfEnableEscape(SCRIPTFUNC_PARAMS);
 	void sfPlaySound(SCRIPTFUNC_PARAMS);

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -d -r1.131 -r1.132
--- sfuncs.cpp	1 Jul 2005 17:29:23 -0000	1.131
+++ sfuncs.cpp	3 Jul 2005 20:02:56 -0000	1.132
@@ -120,7 +120,7 @@
 		OPCODE(sfPickClimbOutPos),
 		OPCODE(sfTossRif),
 		OPCODE(sfShowControls),
-		OPCODE(SF_showMap),
+		OPCODE(sfShowMap),
 		OPCODE(sfPuzzleWon),
 		OPCODE(sfEnableEscape),
 		OPCODE(sfPlaySound),
@@ -1643,11 +1643,8 @@
 }
 
 // Script function #67 (0x43)
-void Script::SF_showMap(SCRIPTFUNC_PARAMS) {
-	for (int i = 0; i < nArgs; i++)
-		thread->pop();
-
-	debug(0, "STUB: SF_showMap(), %d args", nArgs);
+void Script::sfShowMap(SCRIPTFUNC_PARAMS) {
+	_vm->_interface->setMode(kPanelMap);
 }
 
 // Script function #68 (0x44)





More information about the Scummvm-git-logs mailing list