aboutsummaryrefslogtreecommitdiff
path: root/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2005-12-10 19:02:56 +0000
committerJohannes Schickel2005-12-10 19:02:56 +0000
commit38c3df43933b18682ee0c78c9eb2a8e078f9ab64 (patch)
treefaaf2bfeb1e7ff507c832d12cc76a66432fc6a7b /kyra
parentd6e9396166d0dbf42f2698fc24cea32c084f74f2 (diff)
downloadscummvm-rg350-38c3df43933b18682ee0c78c9eb2a8e078f9ab64.tar.gz
scummvm-rg350-38c3df43933b18682ee0c78c9eb2a8e078f9ab64.tar.bz2
scummvm-rg350-38c3df43933b18682ee0c78c9eb2a8e078f9ab64.zip
Implemented drawing of Brynns note.
svn-id: r19774
Diffstat (limited to 'kyra')
-rw-r--r--kyra/kyra.cpp36
-rw-r--r--kyra/kyra.h3
-rw-r--r--kyra/script_v1.cpp35
3 files changed, 66 insertions, 8 deletions
diff --git a/kyra/kyra.cpp b/kyra/kyra.cpp
index d44cfe571e..b3f7e0deb8 100644
--- a/kyra/kyra.cpp
+++ b/kyra/kyra.cpp
@@ -363,6 +363,8 @@ int KyraEngine::init(GameDetector &detector) {
_scenePhasingFlag = 0;
_lastProcessedItem = 0;
_lastProcessedItemHeight = 16;
+
+ _hidPage = _screenPage = 0;
return 0;
}
@@ -401,7 +403,8 @@ KyraEngine::~KyraEngine() {
for (int i = 0; i < ARRAYSIZE(_sceneAnimTable); ++i) {
free(_sceneAnimTable[i]);
}
-
+ free(_unkPtr1);
+ free(_unkPtr2);
}
void KyraEngine::errorString(const char *buf1, char *buf2) {
@@ -574,6 +577,37 @@ void KyraEngine::delay(uint32 amount) {
} while (!_fastMode && _system->getMillis() < start + amount);
}
+void KyraEngine::waitForEvent() {
+ bool finished = false;
+ OSystem::Event event;
+ while (!finished) {
+ while (_system->pollEvent(event)) {
+ switch (event.type) {
+ case OSystem::EVENT_KEYDOWN:
+ finished = true;
+ break;
+ case OSystem::EVENT_MOUSEMOVE:
+ _mouseX = event.mouse.x;
+ _mouseY = event.mouse.y;
+ break;
+ case OSystem::EVENT_QUIT:
+ quitGame();
+ break;
+ case OSystem::EVENT_LBUTTONDOWN:
+ finished = true;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (_debugger->isAttached())
+ _debugger->onFrame();
+
+ _system->delayMillis(10);
+ }
+}
+
void KyraEngine::mainLoop() {
debug(9, "KyraEngine::mainLoop()");
diff --git a/kyra/kyra.h b/kyra/kyra.h
index 81416c907c..d58e0a9b77 100644
--- a/kyra/kyra.h
+++ b/kyra/kyra.h
@@ -514,7 +514,6 @@ protected:
void snd_startTrack();
void snd_haltTrack();
void snd_setSoundEffectFile(int file);
-
static OpcodeProc _opcodeTable[];
static const int _opcodeTableSize;
@@ -532,6 +531,7 @@ protected:
void res_loadRoomTable(const byte *src, Room **loadTo, int *size);
void res_loadShapeTable(const byte *src, Shape **loadTo, int *size);
+ void waitForEvent();
void delay(uint32 millis);
void loadPalette(const char *filename, uint8 *palData);
void loadMouseShapes();
@@ -568,6 +568,7 @@ protected:
bool _talkMessagePrinted;
uint8 _flagsTable[53];
uint8 *_unkPtr1, *_unkPtr2;
+ uint8 *_hidPage, *_screenPage;
uint8 *_shapes[377];
uint16 _gameSpeed;
uint16 _tickLength;
diff --git a/kyra/script_v1.cpp b/kyra/script_v1.cpp
index 39613610f6..2484208198 100644
--- a/kyra/script_v1.cpp
+++ b/kyra/script_v1.cpp
@@ -473,8 +473,8 @@ int KyraEngine::cmd_sceneAnimOff(ScriptState *script) {
}
int KyraEngine::cmd_getElapsedSeconds(ScriptState *script) {
- warning("STUB: cmd_getElapsedSeconds");
- return 0;
+ debug(3, "cmd_getElapsedSeconds(0x%X) ()");
+ return _system->getMillis() / 1000;
}
int KyraEngine::cmd_mouseIsPointer(ScriptState *script) {
@@ -850,7 +850,9 @@ int KyraEngine::cmd_copyWSARegion(ScriptState *script) {
}
int KyraEngine::cmd_printText(ScriptState *script) {
- warning("STUB: cmd_printText");
+ debug(3, "cmd_printText(0x%X) ('%s', %d, %d, 0x%X, 0x%X)", script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
+ _screen->printText(stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
+ _screen->updateScreen();
return 0;
}
@@ -1011,7 +1013,8 @@ int KyraEngine::cmd_placeCharacterInOtherScene(ScriptState *script) {
}
int KyraEngine::cmd_getKey(ScriptState *script) {
- warning("STUB: cmd_getKey");
+ debug(3, "cmd_getKey(0x%X) ()");
+ waitForEvent();
return 0;
}
@@ -1145,12 +1148,32 @@ int KyraEngine::cmd_walkCharacterToPoint(ScriptState *script) {
}
int KyraEngine::cmd_specialEventDisplayBrynnsNote(ScriptState *script) {
- warning("STUB: cmd_specialEventDisplayBrynnsNote");
+ debug(3, "cmd_specialEventDisplayBrynnsNote(0x%X) ()", script);
+ _hidPage = (uint8*)malloc(320*200);
+ _screenPage = (uint8*)malloc(320*200);
+ assert(_hidPage && _screenPage);
+ _screen->hideMouse();
+ _screen->copyRegionToBuffer(0, 0, 0, 320, 200, _screenPage);
+ _screen->copyRegionToBuffer(2, 0, 0, 320, 200, _hidPage);
+ loadBitmap("NOTE.CPS", 3, 3, 0);
+ _screen->copyRegion(63, 8, 63, 8, 194, 128, 2, 0);
+ _screen->updateScreen();
+ _screen->showMouse();
+ _screen->setFont(Screen::FID_6_FNT);
return 0;
}
int KyraEngine::cmd_specialEventRemoveBrynnsNote(ScriptState *script) {
- warning("STUB: cmd_specialEventRemoveBrynnsNote");
+ debug(3, "cmd_specialEventRemoveBrynnsNote(0x%X) ()", script);
+ _screen->hideMouse();
+ assert(_hidPage && _screenPage);
+ _screen->copyBlockToPage(0, 0, 0, 320, 200, _screenPage);
+ _screen->copyBlockToPage(2, 0, 0, 320, 200, _hidPage);
+ free(_screenPage);
+ free(_hidPage);
+ _screen->updateScreen();
+ _screen->showMouse();
+ _screen->setFont(Screen::FID_8_FNT);
return 0;
}