[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