[Scummvm-cvs-logs] CVS: scummvm/kyra debugger.cpp,NONE,1.1 debugger.h,NONE,1.1 kyra.cpp,1.76,1.77 kyra.h,1.38,1.39 module.mk,1.9,1.10 script_v1.cpp,1.30,1.31 sprites.cpp,1.11,1.12 staticres.cpp,1.21,1.22
Johannes Schickel
lordhoto at users.sourceforge.net
Fri Dec 9 06:53:02 CET 2005
Update of /cvsroot/scummvm/scummvm/kyra
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17736
Modified Files:
kyra.cpp kyra.h module.mk script_v1.cpp sprites.cpp
staticres.cpp
Added Files:
debugger.cpp debugger.h
Log Message:
Commited patch # 1376551 (debug console, text fade, misc). Thanks to vinterstum.
--- NEW FILE: debugger.cpp ---
/* ScummVM - Scumm Interpreter
* Copyright (C) 2003-2005 The ScummVM project
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $Header: /cvsroot/scummvm/scummvm/kyra/debugger.cpp,v 1.1 2005/12/09 14:52:31 lordhoto Exp $
*
*/
#include "common/stdafx.h"
#include "common/config-manager.h"
#include "common/debugger.cpp"
#include "kyra/debugger.h"
#include "kyra/kyra.h"
#include "kyra/screen.h"
namespace Kyra {
Debugger::Debugger(KyraEngine *vm)
: Common::Debugger<Debugger>() {
_vm = vm;
DCmd_Register("continue", &Debugger::cmd_exit);
DCmd_Register("exit", &Debugger::cmd_exit);
DCmd_Register("help", &Debugger::cmd_help);
DCmd_Register("quit", &Debugger::cmd_exit);
DCmd_Register("enter", &Debugger::cmd_enterRoom);
DCmd_Register("rooms", &Debugger::cmd_listRooms);
DCmd_Register("flags", &Debugger::cmd_listFlags);
DCmd_Register("toggleflag", &Debugger::cmd_toggleFlag);
DCmd_Register("queryflag", &Debugger::cmd_queryFlag);
DCmd_Register("timers", &Debugger::cmd_listTimers);
DCmd_Register("settimercountdown", &Debugger::cmd_setTimerCountdown);
}
void Debugger::preEnter() {
//_vm->midi.pause(1);
}
void Debugger::postEnter() {
//_vm->midi.pause(0);
}
bool Debugger::cmd_enterRoom(int argc, const char **argv) {
uint direction = 0;
if (argc > 1) {
uint room = atoi(argv[1]);
if (argc > 2)
direction = atoi(argv[2]);
else {
if (_vm->_roomTable[room].northExit != 0xff)
direction = 3;
else if (_vm->_roomTable[room].eastExit != 0xff)
direction = 4;
else if (_vm->_roomTable[room].southExit != 0xff)
direction = 1;
else if (_vm->_roomTable[room].westExit != 0xff)
direction = 2;
}
// Dirty way of hiding the debug console while the room entry scripts are running,
// otherwise the graphics didn't update.
_vm->_system->hideOverlay();
_vm->_currentCharacter->facing = direction;
_vm->enterNewScene(room, _vm->_currentCharacter->facing, 0, 0, 1);
_vm->_system->showOverlay();
_detach_now = true;
return false;
}
DebugPrintf("Syntax: room <roomnum> <direction>\n");
return true;
}
bool Debugger::cmd_exit(int argc, const char **argv) {
_detach_now = true;
return false;
}
bool Debugger::cmd_help(int argc, const char **argv) {
// console normally has 39 line width
// wrap around nicely
int width = 0, size, i;
DebugPrintf("Commands are:\n");
for (i = 0 ; i < _dcmd_count ; i++) {
size = strlen(_dcmds[i].name) + 1;
if ((width + size) >= 39) {
DebugPrintf("\n");
width = size;
} else
width += size;
DebugPrintf("%s ", _dcmds[i].name);
}
DebugPrintf("\n");
return true;
}
bool Debugger::cmd_listRooms(int argc, const char **argv) {
for (int i = 0; i < _vm->_roomTableSize; i++) {
DebugPrintf("%-3i: %-10s", i, _vm->_roomFilenameTable[_vm->_roomTable[i].nameIndex]);
if (!(i % 8))
DebugPrintf("\n");
}
DebugPrintf("\n");
DebugPrintf("Current room: %i\n", _vm->_currentRoom);
return true;
}
bool Debugger::cmd_listFlags(int argc, const char **argv) {
for (int i = 0; i < (int)sizeof(_vm->_flagsTable)*8; i++) {
DebugPrintf("(%-3i): %-5i", i, _vm->queryGameFlag(i));
if (!(i % 10))
DebugPrintf("\n");
}
DebugPrintf("\n");
return true;
}
bool Debugger::cmd_toggleFlag(int argc, const char **argv) {
if (argc > 1) {
uint flag = atoi(argv[1]);
if (_vm->queryGameFlag(flag))
_vm->resetGameFlag(flag);
else
_vm->setGameFlag(flag);
DebugPrintf("Flag %i is now %i\n", flag, _vm->queryGameFlag(flag));
} else
DebugPrintf("Syntax: toggleflag <flag>\n");
return true;
}
bool Debugger::cmd_queryFlag(int argc, const char **argv) {
if (argc > 1) {
uint flag = atoi(argv[1]);
DebugPrintf("Flag %i is %i\n", flag, _vm->queryGameFlag(flag));
} else
DebugPrintf("Syntax: queryflag <flag>\n");
return true;
}
bool Debugger::cmd_listTimers(int argc, const char **argv) {
for (int i = 0; i < ARRAYSIZE(_vm->_timers); i++)
DebugPrintf("Timer %-2i: Active: %-3s Countdown: %-6i\n", i, _vm->_timers[i].active ? "Yes" : "No", _vm->_timers[i].countdown);
return true;
}
bool Debugger::cmd_setTimerCountdown(int argc, const char **argv) {
if (argc > 2) {
uint timer = atoi(argv[1]);
uint countdown = atoi(argv[2]);
_vm->setTimerCountdown(timer, countdown);
DebugPrintf("Timer %i now has countdown %i\n", timer, _vm->_timers[timer].countdown);
} else
DebugPrintf("Syntax: settimercountdown <timer> <countdown>\n");
return true;
}
} // End of namespace Kyra
--- NEW FILE: debugger.h ---
/* ScummVM - Scumm Interpreter
* Copyright (C) 2003-2005 The ScummVM project
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $Header: /cvsroot/scummvm/scummvm/kyra/debugger.h,v 1.1 2005/12/09 14:52:31 lordhoto Exp $
*
*/
#ifndef KYRA_DEBUGGER_H
#define KYRA_DEBUGGER_H
#include "common/debugger.h"
namespace Kyra {
class KyraEngine;
class Debugger : public Common::Debugger<Debugger> {
public:
Debugger(KyraEngine *vm);
virtual ~Debugger() {} // we need this for __SYMBIAN32__ archaic gcc/UIQ
protected:
KyraEngine *_vm;
virtual void preEnter();
virtual void postEnter();
bool cmd_exit(int argc, const char **argv);
bool cmd_help(int argc, const char **argv);
bool cmd_enterRoom(int argc, const char **argv);
bool cmd_listRooms(int argc, const char **argv);
bool cmd_listFlags(int argc, const char **argv);
bool cmd_toggleFlag(int argc, const char **argv);
bool cmd_queryFlag(int argc, const char **argv);
bool cmd_listTimers(int argc, const char **argv);
bool cmd_setTimerCountdown(int argc, const char **argv);
};
} // End of namespace Kyra
#endif
Index: kyra.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.cpp,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- kyra.cpp 8 Dec 2005 17:19:17 -0000 1.76
+++ kyra.cpp 9 Dec 2005 14:52:31 -0000 1.77
@@ -44,6 +44,7 @@
#include "kyra/sound.h"
#include "kyra/sprites.h"
#include "kyra/wsamovie.h"
+#include "kyra/debugger.h"
using namespace Kyra;
@@ -308,6 +309,8 @@
assert(_scriptClick);
memset(_scriptClick, 0, sizeof(ScriptState));
+ _debugger = new Debugger(this);
+ assert(_debugger);
memset(_shapes, 0, sizeof(_shapes));
memset(_wsaObjects, 0, sizeof(_wsaObjects));
@@ -320,10 +323,13 @@
_talkMessageY = 0xC;
_talkMessageH = 0;
_talkMessagePrinted = false;
- _charSayUnk1 = -1;
+ _talkingCharNum = -1;
_charSayUnk3 = -1;
_mouseX = _mouseY = -1;
-
+ memset(_currSentenceColor, 0, 3);
+ _startSentencePalIndex = -1;
+ _fadeText = false;
+
_brandonPosX = _brandonPosY = -1;
_brandonDrawFrame = 113;
@@ -353,6 +359,7 @@
}
KyraEngine::~KyraEngine() {
+ delete _debugger;
delete _sprites;
delete _screen;
delete _res;
@@ -501,6 +508,8 @@
case OSystem::EVENT_KEYDOWN:
if (event.kbd.keycode == 'q' || event.kbd.keycode == 27) {
_quitFlag = true;
+ } else if (event.kbd.keycode == 'd' && !_debugger->isAttached()) {
+ _debugger->attach();
}
break;
case OSystem::EVENT_MOUSEMOVE:
@@ -523,6 +532,10 @@
break;
}
}
+
+ if (_debugger->isAttached())
+ _debugger->onFrame();
+
_sprites->updateSceneAnims();
updateAllObjectShapes();
@@ -541,12 +554,11 @@
while (!_quitFlag) {
int32 frameTime = (int32)_system->getMillis();
-
updateMousePointer();
updateGameTimers();
_sprites->updateSceneAnims();
updateAllObjectShapes();
- // XXX call processPalette
+ updateTextFade();
_handleInput = true;
delay((frameTime + _gameSpeed) - _system->getMillis());
@@ -1186,9 +1198,10 @@
memset(_entranceMouseCursorTracks, 0xFFFF, sizeof(uint16)*4);
_currentCharacter->sceneId = sceneId;
- assert(sceneId < _roomFilenameTableSize);
assert(sceneId < _roomTableSize);
+ assert(_roomTable[sceneId].nameIndex < _roomFilenameTableSize);
+
Room *currentRoom = &_roomTable[sceneId];
if (_currentRoom != 0xFFFF && (_features & GF_TALKIE)) {
@@ -1203,9 +1216,7 @@
_currentRoom = sceneId;
- assert(_currentCharacter->sceneId < _roomTableSize);
int tableId = _roomTable[_currentCharacter->sceneId].nameIndex;
- assert(tableId < _roomFilenameTableSize);
char fileNameBuffer[32];
strcpy(fileNameBuffer, _roomFilenameTable[tableId]);
strcat(fileNameBuffer, ".DAT");
@@ -1241,9 +1252,10 @@
if (!brandonAlive) {
// XXX
}
-
+
startSceneScript(brandonAlive);
setupSceneItems();
+
initSceneData(facing, unk2, brandonAlive);
_loopFlag2 = 0;
@@ -1312,7 +1324,8 @@
_sprites->updateSceneAnims();
updateGameTimers();
updateAllObjectShapes();
- // XXX processPalette
+ updateTextFade();
+
if (_currentCharacter->sceneId == 210) {
// XXX game_updateKyragemFading
}
@@ -1953,6 +1966,7 @@
while (_scriptInterpreter->validScript(_scriptClick))
_scriptInterpreter->runScript(_scriptClick);
+ setTextFadeTimerCountdown(-1);
if (_currentCharacter->sceneId == 0xD2) {
// XXX
}
@@ -2185,9 +2199,9 @@
if (_system->getMillis() > timeToEnd && !hasUpdatedNPCs) {
hasUpdatedNPCs = true;
disableTimer(15);
- _charSayUnk4 = 4;
+ _currHeadShape = 4;
animRefreshNPC(0);
- animRefreshNPC(_charSayUnk1);
+ animRefreshNPC(_talkingCharNum);
if (_charSayUnk2 != -1) {
_sprites->_animObjects[_charSayUnk2].active = 0;
@@ -2208,7 +2222,7 @@
_screen->_curPage = currPage;
copyChangedObjectsForward(0);
- //processPalette();
+ updateTextFade();
if ((chatDuration < (int16)(_system->getMillis() - timeAtStart)) && chatDuration != -1)
break;
@@ -2249,7 +2263,7 @@
}
if (convoInitialized != 0) {
- _charSayUnk1 = -1;
+ _talkingCharNum = -1;
_currentCharacter->currentAnimFrame = 7;
animRefreshNPC(0);
updateAllObjectShapes();
@@ -2257,7 +2271,7 @@
}
void KyraEngine::restoreChatPartnerAnimFrame(int8 charNum) {
- _charSayUnk1 = -1;
+ _talkingCharNum = -1;
if (charNum > 0 && charNum < 5) {
_characterList[charNum].currentAnimFrame = _currentChatPartnerBackupFrame;
@@ -2270,7 +2284,7 @@
}
void KyraEngine::backupChatPartnerAnimFrame(int8 charNum) {
- _charSayUnk1 = 0;
+ _talkingCharNum = 0;
if (charNum < 5 && charNum > 0)
_currentChatPartnerBackupFrame = _characterList[charNum].currentAnimFrame;
@@ -2307,8 +2321,8 @@
}
int KyraEngine::initCharacterChat(int8 charNum) {
- if (_charSayUnk1 == -1) {
- _charSayUnk1 = 0;
+ if (_talkingCharNum == -1) {
+ _talkingCharNum = 0;
if (_scaleMode != 0)
_currentCharacter->currentAnimFrame = 7;
@@ -2375,7 +2389,7 @@
if (charNum < 5) {
_characterList[charNum].currentAnimFrame = startAnimFrames[charNum];
_charSayUnk3 = charNum;
- _charSayUnk1 = charNum;
+ _talkingCharNum = charNum;
animRefreshNPC(charNum);
}
@@ -2428,17 +2442,64 @@
endCharacterChat(charNum, convoInitialized);
}
-void KyraEngine::drawSentenceCommand(char *sentence, int unk1) {
+void KyraEngine::drawSentenceCommand(char *sentence, int color) {
+ debug(9, "drawSentenceCommand('%s', %i)", sentence, color);
_screen->hideMouse();
_screen->fillRect(8, 143, 311, 152, 12);
- // XXX: palette stuff
+
+ if (_startSentencePalIndex != color || _fadeText != false) {
+ _currSentenceColor[0] = _screen->_currentPalette[765] = _screen->_currentPalette[color*3];
+ _currSentenceColor[1] = _screen->_currentPalette[766] = _screen->_currentPalette[color*3+1];
+ _currSentenceColor[2] = _screen->_currentPalette[767] = _screen->_currentPalette[color*3+2];
+
+ _screen->setScreenPalette(_screen->_currentPalette);
+ _startSentencePalIndex = 0;
+ }
printText(sentence, 8, 143, 0xFF, 12, 0);
_screen->showMouse();
- //setTextFadeTimerCountdown(_textFadeTimerCountdown);
- //_palScrollEnabled = 0;
+ setTextFadeTimerCountdown(15);
+ _fadeText = false;
+}
+
+void KyraEngine::updateSentenceCommand(char *str1, char *str2, int color) {
+ debug(9, "updateSentenceCommand('%s', '%s', %i)", str1, str2, color);
+ char sentenceCommand[500];
+ strncpy(sentenceCommand, str1, 500);
+ if (str2)
+ strncat(sentenceCommand, str2, 500 - strlen(sentenceCommand));
+
+ drawSentenceCommand(sentenceCommand, color);
}
+void KyraEngine::updateTextFade() {
+ debug(9, "updateTextFade()");
+ if (!_fadeText)
+ return;
+
+ bool finished = false;
+ for (int i = 0; i < 3; i++)
+ if (_currSentenceColor[i] > 4)
+ _currSentenceColor[i] -= 4;
+ else
+ if (_currSentenceColor[i]) {
+ _currSentenceColor[i] = 0;
+ finished = true;
+ }
+
+ _screen->_currentPalette[765] = _currSentenceColor[0];
+ _screen->_currentPalette[766] = _currSentenceColor[1];
+ _screen->_currentPalette[767] = _currSentenceColor[2];
+ _screen->setScreenPalette(_screen->_currentPalette);
+
+ if (finished) {
+ _fadeText = false;
+ _startSentencePalIndex = -1;
+ }
+
+}
+
+
#pragma mark -
#pragma mark - Item handling
#pragma mark -
@@ -3131,7 +3192,7 @@
}
// talking head functionallity
- if (_charSayUnk1 != -1) {
+ if (_talkingCharNum != -1) {
const int16 baseAnimFrameTable1[] = { 0x11, 0x35, 0x59, 0x00, 0x00, 0x00 };
const int16 baseAnimFrameTable2[] = { 0x15, 0x39, 0x5D, 0x00, 0x00, 0x00 };
const int8 xOffsetTable1[] = { 2, 4, 0, 5, 2, 0, 0, 0 };
@@ -3141,7 +3202,7 @@
if (curObject->index == 0 || curObject->index <= 4) {
int shapesIndex = 0;
if (curObject->index == _charSayUnk3) {
- shapesIndex = _charSayUnk4 + baseAnimFrameTable1[curObject->index];
+ shapesIndex = _currHeadShape + baseAnimFrameTable1[curObject->index];
} else {
shapesIndex = baseAnimFrameTable2[curObject->index];
int temp2 = 0;
@@ -4076,7 +4137,7 @@
updateMousePointer();
updateGameTimers();
updateAllObjectShapes();
- // XXX processPalette
+ updateTextFade();
if (_currentCharacter->sceneId == 210) {
// XXX updateKyragemFading
// XXX playEnd
@@ -4217,7 +4278,7 @@
#pragma mark -
void KyraEngine::setupTimers() {
- debug(9, "KyraEngine::setupTimers()");
+ debug(9, "setupTimers()");
memset(_timers, 0, sizeof(_timers));
for (int i = 0; i < 34; i++)
@@ -4226,7 +4287,7 @@
_timers[0].func = _timers[1].func = _timers[2].func = _timers[3].func = _timers[4].func = 0; //Unused.
_timers[5].func = _timers[6].func = _timers[7].func = _timers[8].func = _timers[9].func = 0; //_nullsub51;
_timers[10].func = _timers[11].func = _timers[12].func = _timers[13].func = 0; //_nullsub50;
- _timers[14].func = &KyraEngine::timerCheckAnimFlag2;; //_nullsub52;
+ _timers[14].func = &KyraEngine::timerCheckAnimFlag2; //_nullsub52;
_timers[15].func = &KyraEngine::timerUpdateHeadAnims; //_nullsub48;
_timers[16].func = &KyraEngine::timerSetFlags1; //_nullsub47;
_timers[17].func = 0; //sub_15120;
@@ -4243,7 +4304,7 @@
_timers[28].func = 0; //offset _timerDummy6
_timers[29].func = 0; //offset _timerDummy7,
_timers[30].func = 0; //offset _timerDummy8,
- _timers[31].func = 0; //sub_151F8;
+ _timers[31].func = &KyraEngine::timerFadeText; //sub_151F8;
_timers[32].func = 0; //_nullsub61;
_timers[33].func = 0; //_nullsub62;
@@ -4270,20 +4331,8 @@
_timers[33].countdown = 3;
}
-void KyraEngine::setTimer19() {
- debug(9, "KyraEngine::setTimer19()");
- if (_brandonStatusBit & 2) {
- // XXX call sub_3F9C
- setTimerCountdown(19, 300);
- } else if (_brandonStatusBit & 0x20) {
- // XXX call sub_4110
- setTimerCountdown(19, 300);
- }
-}
-
void KyraEngine::updateGameTimers() {
- debug(9, "KyraEngine::updateGameTimers()");
- void (Kyra::KyraEngine::*callback)(int timerNum);
+ debug(9, "updateGameTimers()");
if (_system->getMillis() < _timerNextRun)
return;
@@ -4293,13 +4342,8 @@
for (int i = 0; i < 34; i++) {
if (_timers[i].active && _timers[i].countdown > -1) {
if (_timers[i].nextRun <=_system->getMillis()) {
- if (i < 5)
- callback = 0;
- else
- callback = _timers[i].func;
-
- if (callback)
- (*this.*callback)(i);
+ if (i > 4 && _timers[i].func)
+ (*this.*_timers[i].func)(i);
_timers[i].nextRun = _system->getMillis() + _timers[i].countdown * _tickLength;
@@ -4311,16 +4355,17 @@
}
void KyraEngine::clearNextEventTickCount() {
- debug(9, "KyraEngine::clearNextEventTickCount()");
+ debug(9, "clearNextEventTickCount()");
_timerNextRun = 0;
}
int16 KyraEngine::getTimerDelay(uint8 timer) {
+ debug(9, "getTimerDelay(%i)", timer);
return _timers[timer].countdown;
}
-void KyraEngine::setTimerCountdown(uint8 timer, int16 countdown) {
- debug(9, "KyraEngine::setTimerCountdown(%i, %i)", timer, countdown);
+void KyraEngine::setTimerCountdown(uint8 timer, int32 countdown) {
+ debug(9, "setTimerCountdown(%i, %i)", timer, countdown);
_timers[timer].countdown = countdown;
uint32 nextRun = _system->getMillis() + countdown;
@@ -4329,36 +4374,36 @@
}
void KyraEngine::enableTimer(uint8 timer) {
- debug(9, "KyraEngine::enableTimer(%i)", timer);
+ debug(9, "enableTimer(%i)", timer);
_timers[timer].active = 1;
}
void KyraEngine::disableTimer(uint8 timer) {
- debug(9, "KyraEngine::disableTimer(%i)", timer);
+ debug(9, "disableTimer(%i)", timer);
_timers[timer].active = 0;
}
void KyraEngine::timerUpdateHeadAnims(int timerNum) {
- debug(9, "KyraEngine::timerUpdateHeadAnims(%i)", timerNum);
+ debug(9, "timerUpdateHeadAnims(%i)", timerNum);
static int8 currentFrame = 0;
static const int8 frameTable[] = {4, 5, 4, 5, 4, 5, 0, 1, 4, 5,
4, 4, 6, 4, 8, 1, 9, 4, -1};
- if (_charSayUnk1 < 0)
+ if (_talkingCharNum < 0)
return;
- _charSayUnk4 = frameTable[currentFrame];
+ _currHeadShape = frameTable[currentFrame];
currentFrame++;
if (frameTable[currentFrame] == -1)
currentFrame = 0;
animRefreshNPC(0);
- animRefreshNPC(_charSayUnk1);
+ animRefreshNPC(_talkingCharNum);
}
void KyraEngine::timerSetFlags1(int timerNum) {
- debug(9, "KyraEngine::timerSetFlags(%i)", timerNum);
+ debug(9, "timerSetFlags(%i)", timerNum);
if (_currentCharacter->sceneId == 0x1C)
return;
@@ -4376,29 +4421,43 @@
}
}
+void KyraEngine::timerFadeText(int timerNum) {
+ debug(9, "timerFadeText(%i)", timerNum);
+ _fadeText = true;
+}
+
+void KyraEngine::setTextFadeTimerCountdown(int16 countdown) {
+ debug(9, "setTextFadeTimerCountdown(%i)", countdown);
+ //if (countdown == -1)
+ //countdown = 32000;
+
+ setTimerCountdown(31, countdown*60);
+}
+
void KyraEngine::timerSetFlags2(int timerNum) {
+ debug(9, "timerSetFlags2(%i)", timerNum);
if (!((uint32*)(_flagsTable+0x2D))[timerNum])
((uint32*)(_flagsTable+0x2D))[timerNum] = 1;
}
void KyraEngine::timerCheckAnimFlag1(int timerNum) {
- debug(9, "KyraEngine::timerCheckAnimFlag1(%i)", timerNum);
+ debug(9, "timerCheckAnimFlag1(%i)", timerNum);
if (_brandonStatusBit & 0x20) {
- checkSpecialAnimFlags();
+ checkAmuletAnimFlags();
setTimerCountdown(18, -1);
}
}
void KyraEngine::timerCheckAnimFlag2(int timerNum) {
- debug(9, "KyraEngine::timerCheckAnimFlag1(%i)", timerNum);
+ debug(9, "timerCheckAnimFlag1(%i)", timerNum);
if (_brandonStatusBit & 0x2) {
- checkSpecialAnimFlags();
+ checkAmuletAnimFlags();
setTimerCountdown(14, -1);
}
}
-void KyraEngine::checkSpecialAnimFlags() {
- debug(9, "KyraEngine::checkSpecialAnimFlags()");
+void KyraEngine::checkAmuletAnimFlags() {
+ debug(9, "checkSpecialAnimFlags()");
if (_brandonStatusBit & 2) {
warning("STUB: playSpecialAnim1");
// XXX
@@ -4413,13 +4472,15 @@
}
void KyraEngine::timerRedrawAmulet(int timerNum) {
+ debug(9, "timerRedrawAmulet(%i)", timerNum);
if (queryGameFlag(241)) {
drawAmulet();
- setTimerCountdown(0x13, -1);
+ setTimerCountdown(19, -1);
}
}
void KyraEngine::drawAmulet() {
+ debug(9, "drawAmulet()");
static const int16 amuletTable1[] = {0x167, 0x162, 0x15D, 0x158, 0x153, 0x150, 0x155, 0x15A, 0x15F, 0x164, 0x145, -1};
static const int16 amuletTable3[] = {0x167, 0x162, 0x15D, 0x158, 0x153, 0x14F, 0x154, 0x159, 0x15E, 0x163, 0x144, -1};
static const int16 amuletTable2[] = {0x167, 0x162, 0x15D, 0x158, 0x153, 0x152, 0x157, 0x15C, 0x161, 0x166, 0x147, -1};
Index: kyra.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.h,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- kyra.h 8 Dec 2005 17:19:18 -0000 1.38
+++ kyra.h 9 Dec 2005 14:52:31 -0000 1.39
@@ -142,17 +142,19 @@
struct ScriptState;
struct ScriptData;
class ScriptHelper;
+class Debugger;
class KyraEngine;
struct Timer {
bool active;
- int16 countdown;
+ int32 countdown;
uint32 nextRun;
void (KyraEngine::*func)(int timerNum);
};
class KyraEngine : public Engine {
friend class MusicPlayer;
+ friend class Debugger;
public:
enum {
@@ -202,10 +204,12 @@
void printTalkTextMessage(const char *text, int x, int y, uint8 color, int srcPage, int dstPage);
void restoreTalkTextMessageBkgd(int srcPage, int dstPage);
void drawSentenceCommand(char *sentence, int unk1);
+ void updateSentenceCommand(char *str1, char *str2, int unk1);
+ void updateTextFade();
void updateGameTimers();
void clearNextEventTickCount();
- void setTimerCountdown(uint8 timer, int16 countdown);
+ void setTimerCountdown(uint8 timer, int32 countdown);
int16 getTimerDelay(uint8 timer);
void enableTimer(uint8 timer);
void disableTimer(uint8 timer);
@@ -336,7 +340,7 @@
int cmd_shakeScreen(ScriptState *script);
int cmd_createAmuletJewel(ScriptState *script);
int cmd_setSceneAnimCurrXY(ScriptState *script);
- int cmd_Poison_Brandon_And_Remaps(ScriptState *script);
+ int cmd_poisonBrandonAndRemaps(ScriptState *script);
int cmd_fillFlaskWithWater(ScriptState *script);
int cmd_getCharactersMovementDelay(ScriptState *script);
int cmd_getBirthstoneGem(ScriptState *script);
@@ -532,10 +536,11 @@
void timerSetFlags2(int timerNum);
void timerCheckAnimFlag1(int timerNum);
void timerCheckAnimFlag2(int timerNum);
- void checkSpecialAnimFlags();
+ void checkAmuletAnimFlags();
void timerRedrawAmulet(int timerNum);
+ void timerFadeText(int timerNum);
void drawAmulet();
-
+ void setTextFadeTimerCountdown(int16 countdown);
uint8 _game;
bool _fastMode;
bool _quitFlag;
@@ -605,10 +610,13 @@
int _lastFindWayRet;
int *_movFacingTable;
- int8 _charSayUnk1;
+ int8 _talkingCharNum;
int8 _charSayUnk2;
int8 _charSayUnk3;
- int8 _charSayUnk4;
+ int8 _currHeadShape;
+ uint8 _currSentenceColor[3];
+ int8 _startSentencePalIndex;
+ bool _fadeText;
uint8 _configTalkspeed;
AnimObject *_objectQueue;
@@ -626,6 +634,7 @@
SeqPlayer *_seq;
Sprites *_sprites;
ScriptHelper *_scriptInterpreter;
+ Debugger *_debugger;
ScriptState *_scriptMain;
ScriptData *_npcScriptData;
Index: module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/module.mk,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- module.mk 6 Oct 2005 11:57:02 -0000 1.9
+++ module.mk 9 Dec 2005 14:52:31 -0000 1.10
@@ -10,7 +10,8 @@
kyra/sound.o \
kyra/staticres.o \
kyra/sprites.o \
- kyra/wsamovie.o
+ kyra/wsamovie.o \
+ kyra/debugger.o
MODULE_DIRS += \
kyra
Index: script_v1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/script_v1.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- script_v1.cpp 8 Dec 2005 17:19:18 -0000 1.30
+++ script_v1.cpp 9 Dec 2005 14:52:31 -0000 1.31
@@ -573,7 +573,8 @@
int KyraEngine::cmd_pauseSeconds(ScriptState *script) {
debug(3, "cmd_pauseSeconds(0x%X) (%d)", script, stackPos(0));
- delay(stackPos(0)*1000);
+ if (stackPos(0) > 0)
+ delay(stackPos(0)*1000);
return 0;
}
@@ -600,7 +601,7 @@
int KyraEngine::cmd_forceBrandonToNormal(ScriptState *script) {
debug(3, "cmd_forceBrandonToNormal(0x%X) ()", script);
- setTimer19();
+ checkAmuletAnimFlags();
return 0;
}
@@ -657,8 +658,7 @@
if (wsaFrame >= wsa_getNumFrames(_wsaObjects[wsaIndex]))
running = false;
- // XXX
- waitTicks(waitTime);
+ delay(waitTime * _tickLength);
if (worldUpdate) {
_sprites->updateSceneAnims();
updateAllObjectShapes();
@@ -680,10 +680,7 @@
int wsaIndex = stackPos(4);
_screen->hideMouse();
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 0);
- // XXX
- waitTicks(waitTime);
- _sprites->updateSceneAnims();
- updateAllObjectShapes();
+ delay(waitTime * _tickLength);
_screen->updateScreen();
_screen->showMouse();
return 0;
@@ -878,8 +875,7 @@
_screen->hideMouse();
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 2);
- // XXX
- waitTicks(waitTime);
+ delay(waitTime*_tickLength);
_sprites->updateSceneAnims();
updateAllObjectShapes();
_screen->showMouse();
@@ -906,20 +902,16 @@
int frame = startFrame;
while (endFrame >= frame) {
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 0);
- // XXX
- waitTicks(waitTime);
- _sprites->updateSceneAnims();
- updateAllObjectShapes();
+ delay(waitTime * _tickLength);
+ _screen->updateScreen();
++frame;
}
} else {
int frame = endFrame;
while (startFrame <= frame) {
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 0);
- // XXX
- waitTicks(waitTime);
- _sprites->updateSceneAnims();
- updateAllObjectShapes();
+ delay(waitTime * _tickLength);
+ _screen->updateScreen();
--frame;
}
}
@@ -1128,7 +1120,7 @@
updateMousePointer();
updateGameTimers();
updateAllObjectShapes();
- // XXX processPalette();
+ updateTextFade();
if ((nextFrame - _system->getMillis()) >= 10)
delay(10);
}
@@ -1157,7 +1149,8 @@
}
int KyraEngine::cmd_preserveAllObjectBackgrounds(ScriptState *script) {
- warning("STUB: cmd_preserveAllObjectBackgrounds");
+ debug(3, "cmd_preserveAllObjectBackgrounds(0x%X) ()", script);
+ preserveAllBackgrounds();
return 0;
}
@@ -1283,8 +1276,8 @@
return 0;
}
-int KyraEngine::cmd_Poison_Brandon_And_Remaps(ScriptState *script) {
- warning("STUB: cmd_Poison_Brandon_And_Remaps");
+int KyraEngine::cmd_poisonBrandonAndRemaps(ScriptState *script) {
+ warning("STUB: cmdPoisonBrandonAndRemaps");
return 0;
}
@@ -1497,8 +1490,8 @@
}
int KyraEngine::cmd_protectCommandLine(ScriptState *script) {
- warning("STUB: cmd_protectCommandLine");
- return 0;
+ debug(3, "cmd_protectCommandLine(0x%X) (%d)", script, stackPos(0));
+ return stackPos(0);
}
int KyraEngine::cmd_pauseMusicSeconds(ScriptState *script) {
Index: sprites.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/sprites.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- sprites.cpp 18 Nov 2005 23:55:31 -0000 1.11
+++ sprites.cpp 9 Dec 2005 14:52:31 -0000 1.12
@@ -344,7 +344,7 @@
data += 2;
debug(5, "func: Play sound");
debug(5, "Sound index %i", READ_LE_UINT16(data));
- _engine->snd_playSoundEffect(READ_LE_UINT16(data));
+ //_engine->snd_playSoundEffect(READ_LE_UINT16(data));
data += 2;
break;
case 0xFFB1:
@@ -363,8 +363,8 @@
data += 2;
debug(5, "Percentage %i", READ_LE_UINT16(data));
rndNr = _rnd.getRandomNumber(100);
- if (rndNr <= READ_LE_UINT16(data))
- _engine->snd_playSoundEffect(sound);
+ //if (rndNr <= READ_LE_UINT16(data))
+ //_engine->snd_playSoundEffect(sound);
data += 2;
break;
case 0xFFA7:
Index: staticres.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/staticres.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- staticres.cpp 27 Nov 2005 10:02:23 -0000 1.21
+++ staticres.cpp 9 Dec 2005 14:52:31 -0000 1.22
@@ -497,7 +497,7 @@
// 0x6c
Opcode(cmd_createAmuletJewel),
Opcode(cmd_setSceneAnimCurrXY),
- Opcode(cmd_Poison_Brandon_And_Remaps),
+ Opcode(cmd_poisonBrandonAndRemaps),
Opcode(cmd_fillFlaskWithWater),
// 0x70
Opcode(cmd_getCharactersMovementDelay),
More information about the Scummvm-git-logs
mailing list