[Scummvm-cvs-logs] CVS: scummvm/saga gfx.cpp,1.36,1.37 gfx.h,1.17,1.18 render.cpp,1.42,1.43 render.h,1.17,1.18 sfuncs.cpp,1.56,1.57

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Wed Dec 29 08:12:01 CET 2004


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

Modified Files:
	gfx.cpp gfx.h render.cpp render.h sfuncs.cpp 
Log Message:
Implemented the "placard" functions, because they're such a nice visual
feedback that something right is happening.


Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/gfx.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- gfx.cpp	26 Nov 2004 00:57:29 -0000	1.36
+++ gfx.cpp	29 Dec 2004 16:10:53 -0000	1.37
@@ -986,6 +986,32 @@
 	return SUCCESS;
 }
 
+void Gfx::palToBlackWait(SURFACE *surface, PALENTRY *src_pal, int duration) {
+	uint32 start_time = _vm->_system->getMillis();
+	uint32 cur_time;
+
+	do {
+		cur_time = _vm->_system->getMillis();
+
+		palToBlack(surface, src_pal, (double) (cur_time - start_time) / duration);
+		_vm->_system->updateScreen();
+		_vm->_system->delayMillis(50);
+	} while (cur_time < start_time + duration);
+}
+
+void Gfx::blackToPalWait(SURFACE *surface, PALENTRY *src_pal, int duration) {
+	uint32 start_time = _vm->_system->getMillis();
+	uint32 cur_time;
+
+	do {
+		cur_time = _vm->_system->getMillis();
+
+		blackToPal(surface, src_pal, (double) (cur_time - start_time) / duration);
+		_vm->_system->updateScreen();
+		_vm->_system->delayMillis(50);
+	} while (cur_time < start_time + duration);
+}
+
 void Gfx::showCursor(bool state) {
 	updateCursor();
 	g_system->showMouse(state);

Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/gfx.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- gfx.h	25 Nov 2004 23:51:52 -0000	1.17
+++ gfx.h	29 Dec 2004 16:10:53 -0000	1.18
@@ -107,6 +107,8 @@
 	int getCurrentPal(PALENTRY *src_pal);
 	int palToBlack(SURFACE *surface, PALENTRY *src_pal, double percent);
 	int blackToPal(SURFACE *surface, PALENTRY *src_pal, double percent);
+	void palToBlackWait(SURFACE *surface, PALENTRY *src_pal, int duration);
+	void blackToPalWait(SURFACE *surface, PALENTRY *src_pal, int duration);
 	void updateCursor() { setCursor(getWhite()); }
 	void showCursor(bool state);
 

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- render.cpp	22 Dec 2004 13:09:47 -0000	1.42
+++ render.cpp	29 Dec 2004 16:10:53 -0000	1.43
@@ -122,19 +122,21 @@
 	bg_pt.x = 0;
 	bg_pt.y = 0;
 
-	// Display scene background
-	_vm->_scene->draw(backbuf_surface);
+	if (!(_flags & RF_PLACARD)) {
+		// Display scene background
+		_vm->_scene->draw(backbuf_surface);
 
-	// Display scene maps, if applicable
-	if (getFlags() & RF_OBJECTMAP_TEST) {
-		if (_vm->_scene->_objectMap)
-			_vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, _vm->_gfx->getWhite(), _vm->_gfx->getBlack());
-		if (_vm->_scene->_actionMap)
-			_vm->_scene->_actionMap->draw(backbuf_surface, _vm->_gfx->matchColor(RGB_RED));
-	}
+		// Display scene maps, if applicable
+		if (getFlags() & RF_OBJECTMAP_TEST) {
+			if (_vm->_scene->_objectMap)
+				_vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, _vm->_gfx->getWhite(), _vm->_gfx->getBlack());
+			if (_vm->_scene->_actionMap)
+				_vm->_scene->_actionMap->draw(backbuf_surface, _vm->_gfx->matchColor(RGB_RED));
+		}
 
-	// Draw queued actors
-	_vm->_actor->drawActors();
+		// Draw queued actors
+		_vm->_actor->drawActors();
+	}
 
 	// Draw queued text strings
 	_vm->_scene->getInfo(&scene_info);
@@ -211,6 +213,10 @@
 	_flags |= flag;
 }
 
+void Render::clearFlag(unsigned int flag) {
+	_flags &= ~flag;
+}
+
 void Render::toggleFlag(unsigned int flag) {
 	_flags ^= flag;
 }

Index: render.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- render.h	3 Dec 2004 19:15:44 -0000	1.17
+++ render.h	29 Dec 2004 16:10:53 -0000	1.18
@@ -37,7 +37,8 @@
 	RF_TEXT_TEST = 0x04,
 	RF_OBJECTMAP_TEST = 0x08,
 	RF_RENDERPAUSE = 0x10,
-	RF_GAMEPAUSE = 0x20
+	RF_GAMEPAUSE = 0x20,
+	RF_PLACARD = 0x40
 };
 
 struct BUFFER_INFO {
@@ -57,6 +58,7 @@
 	int drawScene(void);
 	unsigned int getFlags(void);
 	void setFlag(unsigned int);
+	void clearFlag(unsigned int);
 	void toggleFlag(unsigned int);
 	unsigned int getFrameCount(void);
 	unsigned int resetFrameCount(void);
@@ -85,7 +87,6 @@
 	unsigned int _fps;
 	unsigned int _framecount;
 	unsigned int _flags;
-	int _mode;
 };
 
 } // End of namespace Saga

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- sfuncs.cpp	28 Dec 2004 21:27:18 -0000	1.56
+++ sfuncs.cpp	29 Dec 2004 16:10:53 -0000	1.57
@@ -29,9 +29,11 @@
 #include "saga/actor.h"
 #include "saga/animation.h"
 #include "saga/console.h"
+#include "saga/font.h"
 #include "saga/interface.h"
 #include "saga/music.h"
 #include "saga/objectdata.h"
+#include "saga/render.h"
 #include "saga/sound.h"
 #include "saga/sndres.h"
 
@@ -920,13 +922,58 @@
 
 // Script function #48 (0x30)
 int Script::SF_placard(SCRIPTFUNC_PARAMS) {
-	debug(1, "stub: SF_placard()");
+	GAME_DISPLAYINFO disp_info;
+	SURFACE *back_buf = _vm->_gfx->getBackBuffer();
+	PALENTRY cur_pal[PAL_ENTRIES];
+	PALENTRY *pal;
+
+	_vm->getDisplayInfo(&disp_info);
+
+	_vm->_gfx->showCursor(false);
+	_vm->_gfx->getCurrentPal(cur_pal);
+	_vm->_gfx->palToBlackWait(back_buf, cur_pal, PALETTE_FADE_DURATION);
+
+	_vm->_interface->setStatusText("");
+
+	Rect rect(disp_info.logical_w, disp_info.scene_h);
+	drawRect(back_buf, &rect, 138);
+
+	// TODO: Draw the text at the correct spot. This is (probably) just a
+	// close approximation.
+	_vm->textDraw(MEDIUM_FONT_ID, back_buf, getString(thread->pop()),
+		disp_info.logical_w / 2, disp_info.scene_h / 2,
+		_vm->_gfx->getWhite(), _vm->_gfx->getBlack(),
+		FONT_OUTLINE | FONT_CENTERED);
+
+	_vm->_render->setFlag(RF_PLACARD);
+	_vm->_render->drawScene();
+
+	_vm->_scene->getBGPal(&pal);
+	_vm->_gfx->blackToPalWait(back_buf, pal, PALETTE_FADE_DURATION);
+
 	return SUCCESS;
 }
 
 // Script function #49 (0x31)
 int Script::SF_placardOff(SCRIPTFUNC_PARAMS) {
-	debug(1, "stub: SF_placardOff()");
+	SURFACE *back_buf = _vm->_gfx->getBackBuffer();
+	PALENTRY cur_pal[PAL_ENTRIES];
+	PALENTRY *pal;
+
+	// Fade down
+	_vm->_gfx->showCursor(false);
+	_vm->_gfx->getCurrentPal(cur_pal);
+	_vm->_gfx->palToBlackWait(back_buf, cur_pal, PALETTE_FADE_DURATION);
+
+	_vm->_render->clearFlag(RF_PLACARD);
+	_vm->_render->drawScene();
+
+	// Fade up
+	_vm->_scene->getBGPal(&pal);
+
+	_vm->_gfx->showCursor(true);
+	_vm->_gfx->blackToPalWait(back_buf, pal, PALETTE_FADE_DURATION);
+
 	return SUCCESS;
 }
 





More information about the Scummvm-git-logs mailing list