[Scummvm-cvs-logs] CVS: scummvm/saga events.cpp,1.43,1.44 events.h,1.16,1.17 input.cpp,1.31,1.32 interface.cpp,1.51,1.52 interface.h,1.21,1.22 render.cpp,1.46,1.47 scene.cpp,1.75,1.76 sfuncs.cpp,1.71,1.72
Eugene Sandulenko
sev at users.sourceforge.net
Thu Jan 6 16:58:14 CET 2005
Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7702
Modified Files:
events.cpp events.h input.cpp interface.cpp interface.h
render.cpp scene.cpp sfuncs.cpp
Log Message:
o Fix for popped up actors at initial scene fade out
o Stub for new Wyrmkeep demos with substituted scenes
o Converted some script func parameters to apropriate types
o More panel fixes
Index: events.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/events.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- events.cpp 6 Jan 2005 16:07:45 -0000 1.43
+++ events.cpp 7 Jan 2005 00:57:43 -0000 1.44
@@ -384,6 +384,9 @@
_vm->_interface->setStatusText("");
_vm->_interface->drawStatusBar(_vm->_gfx->getBackBuffer());
break;
+ case EVENT_RESTORE_MODE:
+ _vm->_interface->restoreMode();
+ break;
default:
break;
}
Index: events.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/events.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- events.h 6 Jan 2005 16:07:45 -0000 1.16
+++ events.h 7 Jan 2005 00:57:43 -0000 1.17
@@ -86,6 +86,7 @@
EVENT_DEACTIVATE = 2,
EVENT_SET_STATUS = 3,
EVENT_CLEAR_STATUS = 4,
+ EVENT_RESTORE_MODE = 5,
// ACTOR events
EVENT_MOVE = 1,
// SCRIPT events
Index: input.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/input.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- input.cpp 6 Jan 2005 19:15:01 -0000 1.31
+++ input.cpp 7 Jan 2005 00:57:43 -0000 1.32
@@ -87,7 +87,7 @@
switch (_interface->getMode()) {
case kPanelNull:
if (_scene->isInDemo())
- _scene->skipScene();
+ _scene->skipScene();
else
_actor->abortAllSpeeches();
break;
Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -d -r1.51 -r1.52
--- interface.cpp 6 Jan 2005 14:49:47 -0000 1.51
+++ interface.cpp 7 Jan 2005 00:57:43 -0000 1.52
@@ -237,8 +237,9 @@
_activeVerb = I_VERB_WALKTO;
- _active = 0;
- _panelMode = _savedMode = _lockedMode = kPanelNull;
+ _active = false;
+ _panelMode = _lockedMode = kPanelNull;
+ _savedMode = -1;
_inMainMode = false;
*_statusText = 0;
@@ -259,30 +260,65 @@
}
int Interface::activate() {
- _active = 1;
- draw();
+ if (!_active) {
+ _active = true;
+ _vm->_script->_skipSpeeches = false;
+ _vm->_gfx->showCursor(true);
+ unlockMode();
+ if (_panelMode == kPanelMain)
+ ;// show save reminder
+ draw();
+ }
return SUCCESS;
}
int Interface::deactivate() {
- _active = 0;
+ if (_active) {
+ _active = false;
+ _vm->_gfx->showCursor(false);
+ lockMode();
+ setMode(kPanelNull);
+ }
return SUCCESS;
}
-int Interface::setMode(int mode) {
- // TODO: Is this where we should hide/show the mouse cursor?
+void Interface::rememberMode() {
+ assert (_savedMode == -1);
- _panelMode = mode;
+ _savedMode = _panelMode;
+}
+
+void Interface::restoreMode() {
+ assert (_savedMode != -1);
+
+ _panelMode = _savedMode;
+ _savedMode = -1;
+
+ draw();
+}
+
+int Interface::setMode(int mode, bool force) {
+ // TODO: Is this where we should hide/show the mouse cursor?
+ int newmode = mode;
if (_panelMode == kPanelConverse)
_inMainMode = false;
else if (_panelMode == kPanelInventory) {
_inMainMode = true;
- _panelMode = kPanelMain;
+ newmode = kPanelMain;
}
+ // This lets us to prevents actors to pop up during initial
+ // scene fade in.
+ if (_savedMode != -1 && !force) {
+ _savedMode = newmode;
+ debug(0, "Saved mode: %d. my mode is %d", newmode, _panelMode);
+ }
+ else
+ _panelMode = newmode;
+
draw();
return SUCCESS;
Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- interface.h 6 Jan 2005 16:07:45 -0000 1.21
+++ interface.h 7 Jan 2005 00:57:43 -0000 1.22
@@ -113,7 +113,8 @@
kPanelProtect,
kPanelPlacard,
kPanelMap,
- kPanelInventory
+ kPanelInventory,
+ kPanelFade
};
enum BUTTON_FLAGS {
@@ -208,10 +209,10 @@
int registerLang();
int activate();
int deactivate();
- int setMode(int mode);
+ int setMode(int mode, bool force = false);
int getMode(void) { return _panelMode; }
- void rememberMode() { _savedMode = _panelMode; }
- void restoreMode() { _panelMode = _savedMode; }
+ void rememberMode();
+ void restoreMode();
void lockMode() { _lockedMode = _panelMode; }
void unlockMode() { _panelMode = _lockedMode; }
bool isInMainMode() { return _inMainMode; }
@@ -239,7 +240,7 @@
SagaEngine *_vm;
bool _initialized;
- int _active;
+ bool _active;
RSCFILE_CONTEXT *_interfaceContext;
INTERFACE_DESC _iDesc;
int _panelMode;
Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- render.cpp 6 Jan 2005 19:15:01 -0000 1.46
+++ render.cpp 7 Jan 2005 00:57:43 -0000 1.47
@@ -126,18 +126,20 @@
// 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));
- }
+ if (_vm->_interface->getMode() != kPanelFade) {
+ // 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();
- if (getFlags() & RF_ACTOR_PATH_TEST) {
- _vm->_actor->drawPathTest();
+ // Draw queued actors
+ _vm->_actor->drawActors();
+ if (getFlags() & RF_ACTOR_PATH_TEST) {
+ _vm->_actor->drawPathTest();
+ }
}
}
Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- scene.cpp 6 Jan 2005 16:07:45 -0000 1.75
+++ scene.cpp 7 Jan 2005 00:57:43 -0000 1.76
@@ -611,6 +611,9 @@
EVENT *q_event;
static PALENTRY current_pal[PAL_ENTRIES];
+ _vm->_interface->rememberMode();
+ _vm->_interface->setMode(kPanelFade, true);
+
// Fade to black out
_vm->_gfx->getCurrentPal(current_pal);
event.type = IMMEDIATE_EVENT;
@@ -640,6 +643,14 @@
event.duration = 0;
q_event = _vm->_events->chain(q_event, &event);
+ // Restore interface mode
+ event.type = IMMEDIATE_EVENT;
+ event.code = INTERFACE_EVENT;
+ event.op = EVENT_RESTORE_MODE;
+ event.time = 0;
+ event.duration = 0;
+ q_event = _vm->_events->chain(q_event, &event);
+
// Start the scene pre script, but stay with black palette
if (_desc.startScriptNum > 0) {
event.type = ONESHOT_EVENT;
@@ -652,7 +663,7 @@
event.param4 = 0; // With Object - TODO: should be 'entrance'
event.param5 = 0; // Actor
- _vm->_events->chain(q_event, &event);
+ q_event = _vm->_events->chain(q_event, &event);
}
// Fade in from black to the scene background palette
@@ -1046,7 +1057,10 @@
EVENT event;
EVENT *q_event;
- _inGame = true;
+ if (!_inGame) {
+ _inGame = true;
+ _vm->_interface->setMode(kPanelInventory);
+ }
switch (param) {
case SCENE_BEGIN:
Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -d -r1.71 -r1.72
--- sfuncs.cpp 6 Jan 2005 19:15:01 -0000 1.71
+++ sfuncs.cpp 7 Jan 2005 00:57:43 -0000 1.72
@@ -366,19 +366,77 @@
return SUCCESS;
}
+static struct SceneSubstitutes {
+ int sceneId;
+ const char *message;
+ const char *name;
+ const char *image;
+} sceneSubstitutes[] = {
+ {
+ 7,
+ "Tycho says he knows much about the northern lands. Can Rif convince "
+ "the Dog to share this knowledge?",
+ "The Home of Tycho Northpaw",
+ "tycho.bbm"
+ },
+
+ {
+ 27,
+ "The scene of the crime may hold many clues, but will the servants of "
+ "the Sanctuary trust Rif?",
+ "The Sanctuary of the Orb",
+ "sanctuar.bbm"
+ },
+
+ {
+ 5,
+ "The Rats hold many secrets that could guide Rif on his quest -- assuming "
+ "he can get past the doorkeeper.",
+ "The Rat Complex",
+ "ratdoor.bbm"
+ },
+
+ {
+ 2,
+ "The Ferrets enjoy making things and have the materials to do so. How can "
+ "that help Rif?",
+ "The Ferret Village",
+ "ferrets.bbm"
+ },
+
+ {
+ 67,
+ "What aid can the noble King of the Elks provide to Rif and his companions?",
+ "The Realm of the Forest King",
+ "elkenter.bbm"
+ },
+
+ {
+ 3,
+ "The King holds Rif's sweetheart hostage. Will the Boar provide any "
+ "assistance to Rif?",
+ "The Great Hall of the Boar King",
+ "boarhall.bbm"
+ }
+};
+
// Script function #16 (0x10)
int Script::SF_gotoScene(SCRIPTFUNC_PARAMS) {
- ScriptDataWord param1 = thread->pop();
- ScriptDataWord param2 = thread->pop();
+ int16 sceneNum = getSWord(thread->pop());
+ int16 entrance = getSWord(thread->pop());
- debug(1, "stub: SF_gotoScene(%d, %d)", param1, param2);
+ for (int i = 0; i < ARRAYSIZE(sceneSubstitutes); i++)
+ if (sceneSubstitutes[i].sceneId == sceneNum)
+ debug(0, "Scene %d substitute exists", sceneNum);
+
+ debug(1, "stub: SF_gotoScene(%d, %d)", sceneNum, entrance);
return SUCCESS;
}
// Script function #17 (0x11)
int Script::SF_setObjImage(SCRIPTFUNC_PARAMS) {
- ScriptDataWord obj_param = thread->pop();
- ScriptDataWord sprite_param = thread->pop();
+ int16 obj_param = getSWord(thread->pop());
+ int16 sprite_param = getSWord(thread->pop());
int index = obj_param & 0x1FFF;
@@ -394,8 +452,8 @@
// Script function #18 (0x12)
int Script::SF_setObjName(SCRIPTFUNC_PARAMS) {
- ScriptDataWord obj_param = thread->pop();
- ScriptDataWord name_param = thread->pop();
+ int obj_param = getSWord(thread->pop());
+ int name_param = getSWord(thread->pop());
int index = obj_param & 0x1FFF;
@@ -409,7 +467,7 @@
// Script function #19 (0x13)
int Script::SF_getObjImage(SCRIPTFUNC_PARAMS) {
- ScriptDataWord param = thread->pop();
+ int param = getSWord(thread->pop());
int index = param & 0x1FFF;
if (index >= ARRAYSIZE(ObjectTable)) {
More information about the Scummvm-git-logs
mailing list