aboutsummaryrefslogtreecommitdiff
path: root/engines/toltecs
diff options
context:
space:
mode:
Diffstat (limited to 'engines/toltecs')
-rw-r--r--engines/toltecs/animation.cpp2
-rw-r--r--engines/toltecs/menu.h1
-rw-r--r--engines/toltecs/movie.cpp17
-rw-r--r--engines/toltecs/render.cpp3
-rw-r--r--engines/toltecs/resource.cpp1
-rw-r--r--engines/toltecs/saveload.cpp1
-rw-r--r--engines/toltecs/screen.cpp10
-rw-r--r--engines/toltecs/script.cpp36
-rw-r--r--engines/toltecs/script.h2
-rw-r--r--engines/toltecs/segmap.cpp2
-rw-r--r--engines/toltecs/sound.cpp2
-rw-r--r--engines/toltecs/toltecs.cpp5
-rw-r--r--engines/toltecs/toltecs.h1
13 files changed, 59 insertions, 24 deletions
diff --git a/engines/toltecs/animation.cpp b/engines/toltecs/animation.cpp
index 8c0337d1c3..eef9cef9ed 100644
--- a/engines/toltecs/animation.cpp
+++ b/engines/toltecs/animation.cpp
@@ -147,7 +147,6 @@ void AnimationPlayer::saveState(Common::WriteStream *out) {
}
void AnimationPlayer::loadState(Common::ReadStream *in) {
-
_resIndex = in->readUint16LE();
_width = in->readUint16LE();
_height = in->readUint16LE();
@@ -160,7 +159,6 @@ void AnimationPlayer::loadState(Common::ReadStream *in) {
_firstCurFrameSize = in->readUint32LE();
_firstNextFrameSize = in->readUint32LE();
_firstNextFrameOffset = in->readUint32LE();
-
}
} // End of namespace Toltecs
diff --git a/engines/toltecs/menu.h b/engines/toltecs/menu.h
index d4cbddcd81..3e2c2da8d9 100644
--- a/engines/toltecs/menu.h
+++ b/engines/toltecs/menu.h
@@ -94,7 +94,6 @@ protected:
struct Item {
Common::Rect rect;
ItemID id;
- //const byte *caption;
Common::String caption;
byte defaultColor, activeColor;
int x, y, w;
diff --git a/engines/toltecs/movie.cpp b/engines/toltecs/movie.cpp
index 36ba5c738a..c396d6d4b5 100644
--- a/engines/toltecs/movie.cpp
+++ b/engines/toltecs/movie.cpp
@@ -41,7 +41,12 @@ MoviePlayer::~MoviePlayer() {
void MoviePlayer::playMovie(uint resIndex) {
- uint32 subtitleSlot;
+ const uint32 subtitleSlot = kMaxScriptSlots - 1;
+ int16 savedSceneWidth = _vm->_sceneWidth;
+ int16 savedSceneHeight = _vm->_sceneHeight;
+ int16 savedCameraHeight = _vm->_cameraHeight;
+ int16 savedCameraX = _vm->_cameraX;
+ int16 savedCameraY = _vm->_cameraY;
byte moviePalette[768];
_vm->_isSaveAllowed = false;
@@ -53,8 +58,6 @@ void MoviePlayer::playMovie(uint resIndex) {
_vm->_arc->openResource(resIndex);
- subtitleSlot = kMaxScriptSlots - 1;
-
_frameCount = _vm->_arc->readUint32LE();
_chunkCount = _vm->_arc->readUint32LE();
@@ -170,6 +173,12 @@ void MoviePlayer::playMovie(uint resIndex) {
debug(0, "playMovie() done");
+ _vm->_sceneWidth = savedSceneWidth;
+ _vm->_sceneHeight = savedSceneHeight;
+ _vm->_cameraHeight = savedCameraHeight;
+ _vm->_cameraX = savedCameraX;
+ _vm->_cameraY = savedCameraY;
+
_vm->_isSaveAllowed = true;
}
@@ -187,7 +196,7 @@ void MoviePlayer::fetchAudioChunks() {
byte chunkType = _vm->_arc->readByte();
uint32 chunkSize = _vm->_arc->readUint32LE();
if (chunkType == 4) {
- byte *chunkBuffer = new byte[chunkSize];
+ byte *chunkBuffer = (byte*)malloc(chunkSize);
_vm->_arc->read(chunkBuffer, chunkSize);
_audioStream->queueBuffer(chunkBuffer, chunkSize, DisposeAfterUse::YES, Audio::FLAG_UNSIGNED);
chunkBuffer = NULL;
diff --git a/engines/toltecs/render.cpp b/engines/toltecs/render.cpp
index b7e859a619..c6dbe939b3 100644
--- a/engines/toltecs/render.cpp
+++ b/engines/toltecs/render.cpp
@@ -73,7 +73,6 @@ void RenderQueue::addSprite(SpriteDrawItem &sprite) {
void RenderQueue::addText(int16 x, int16 y, byte color, uint fontResIndex, byte *text, int len) {
- // TODO: Font caching?
Font font(_vm->_res->load(fontResIndex)->data);
RenderQueueItem item;
@@ -248,8 +247,6 @@ RenderQueueItem *RenderQueue::findItemInQueue(RenderQueueArray *queue, const Ren
bool RenderQueue::hasItemChanged(const RenderQueueItem &item1, const RenderQueueItem &item2) {
- // TODO: Clean up.
-
if (item1.type != item1.type)
return true;
diff --git a/engines/toltecs/resource.cpp b/engines/toltecs/resource.cpp
index cbd0bcb7f7..ddc1a6e126 100644
--- a/engines/toltecs/resource.cpp
+++ b/engines/toltecs/resource.cpp
@@ -57,7 +57,6 @@ uint32 ArchiveReader::openResource(uint resIndex) {
void ArchiveReader::closeResource() {
}
-
uint32 ArchiveReader::getResourceSize(uint resIndex) {
return _offsets[resIndex + 1] - _offsets[resIndex];
}
diff --git a/engines/toltecs/saveload.cpp b/engines/toltecs/saveload.cpp
index f2bcc1afe8..aa045378f2 100644
--- a/engines/toltecs/saveload.cpp
+++ b/engines/toltecs/saveload.cpp
@@ -34,7 +34,6 @@
namespace Toltecs {
/* TODO:
- - Saveload is working so far but only one slot is supported until the game menu is implemented
- Save with F7; Load with F9
- Saving during an animation (AnimationPlayer) is not working correctly yet
- Maybe switch to SCUMM/Tinsel serialization approach?
diff --git a/engines/toltecs/screen.cpp b/engines/toltecs/screen.cpp
index b2979b7b05..4eda8f643f 100644
--- a/engines/toltecs/screen.cpp
+++ b/engines/toltecs/screen.cpp
@@ -125,7 +125,7 @@ void Screen::drawGuiImage(int16 x, int16 y, uint resIndex) {
int16 height = imageData[3];
int16 workWidth = width, workHeight = height;
imageData += headerSize;
-
+
byte *dest = _frontScreen + x + (y + _vm->_cameraHeight) * 640;
//debug(0, "Screen::drawGuiImage() x = %d; y = %d; w = %d; h = %d; resIndex = %d", x, y, width, height, resIndex);
@@ -444,9 +444,8 @@ void Screen::updateTalkText(int16 slotIndex, int16 slotOffset) {
}
int16 textDurationMultiplier = item->duration + 8;
- // TODO: Check sound/text flags
- if (*textData == 0xFE) {
- //textDurationMultiplier += 100;
+ if (_vm->_doSpeech && *textData == 0xFE) {
+ textDurationMultiplier += 100;
}
item->duration = 4 * textDurationMultiplier * durationModifier;
@@ -478,7 +477,8 @@ void Screen::addTalkTextItemsToRenderQueue() {
if (item->fontNum == -1 || item->duration == 0)
continue;
- item->duration -= _vm->_counter01;
+ //item->duration -= _vm->_counter01;
+ item->duration--;
if (item->duration < 0)
item->duration = 0;
diff --git a/engines/toltecs/script.cpp b/engines/toltecs/script.cpp
index fa5eb4d5d9..c128d5a325 100644
--- a/engines/toltecs/script.cpp
+++ b/engines/toltecs/script.cpp
@@ -66,71 +66,85 @@ typedef Common::Functor0Mem<void, ScriptInterpreter> ScriptFunctionF;
_scriptFuncNames.push_back(#x);
void ScriptInterpreter::setupScriptFunctions() {
+ // 0
RegisterScriptFunction(sfNop);
RegisterScriptFunction(sfNop);
RegisterScriptFunction(sfGetGameVar);
RegisterScriptFunction(sfSetGameVar);
RegisterScriptFunction(sfUpdateScreen);
+ // 5
RegisterScriptFunction(sfGetRandomNumber);
RegisterScriptFunction(sfDrawGuiTextMulti);
RegisterScriptFunction(sfUpdateVerbLine);
RegisterScriptFunction(sfSetFontColor);
RegisterScriptFunction(sfGetTalkTextDuration);
+ // 10
RegisterScriptFunction(sfTalk);
RegisterScriptFunction(sfFindPaletteFragment);
RegisterScriptFunction(sfClearPaletteFragments);
RegisterScriptFunction(sfAddPaletteFragment);
RegisterScriptFunction(sfSetDeltaAnimPalette);
- RegisterScriptFunction(sfNop); // TODO
+ // 15
+ RegisterScriptFunction(sfSetUnkPaletteEffect);
RegisterScriptFunction(sfBuildColorTransTable);
RegisterScriptFunction(sfSetDeltaMainPalette);
RegisterScriptFunction(sfLoadScript);
RegisterScriptFunction(sfRegisterFont);
+ // 20
RegisterScriptFunction(sfLoadAddPalette);
RegisterScriptFunction(sfLoadScene);
RegisterScriptFunction(sfSetGuiHeight);
RegisterScriptFunction(sfFindMouseInRectIndex1);
RegisterScriptFunction(sfFindMouseInRectIndex2);
+ // 25
RegisterScriptFunction(sfDrawGuiImage);
RegisterScriptFunction(sfAddAnimatedSpriteNoLoop);
RegisterScriptFunction(sfAddAnimatedSprite);
RegisterScriptFunction(sfAddStaticSprite);
RegisterScriptFunction(sfAddAnimatedSpriteScaled);
+ // 30
RegisterScriptFunction(sfFindPath);
RegisterScriptFunction(sfWalk);
RegisterScriptFunction(sfScrollCameraUp);
RegisterScriptFunction(sfScrollCameraDown);
RegisterScriptFunction(sfScrollCameraLeft);
+ // 35
RegisterScriptFunction(sfScrollCameraRight);
RegisterScriptFunction(sfScrollCameraUpEx);
RegisterScriptFunction(sfScrollCameraDownEx);
RegisterScriptFunction(sfScrollCameraLeftEx);
RegisterScriptFunction(sfScrollCameraRightEx);
+ // 40
RegisterScriptFunction(sfSetCamera);
- RegisterScriptFunction(sfNop); // TODO
+ RegisterScriptFunction(sfGetCameraChanged);
RegisterScriptFunction(sfGetRgbModifiertAtPoint);
RegisterScriptFunction(sfStartAnim);
RegisterScriptFunction(sfAnimNextFrame);
+ // 45
RegisterScriptFunction(sfNop);
RegisterScriptFunction(sfGetAnimFrameNumber);
RegisterScriptFunction(sfGetAnimStatus);
RegisterScriptFunction(sfStartShakeScreen);
RegisterScriptFunction(sfStopShakeScreen);
+ // 50
RegisterScriptFunction(sfStartSequence);
RegisterScriptFunction(sfEndSequence);
RegisterScriptFunction(sfSetSequenceVolume);
RegisterScriptFunction(sfPlayPositionalSound);
RegisterScriptFunction(sfPlaySound2);
+ // 55
RegisterScriptFunction(sfClearScreen);
RegisterScriptFunction(sfNop);
RegisterScriptFunction(sfHandleInput);
RegisterScriptFunction(sfRunOptionsScreen);
RegisterScriptFunction(sfPrecacheSprites);
+ // 60
RegisterScriptFunction(sfPrecacheSounds1);
RegisterScriptFunction(sfDeletePrecachedFiles);
RegisterScriptFunction(sfPrecacheSounds2);
RegisterScriptFunction(sfRestoreStackPtr);
RegisterScriptFunction(sfSaveStackPtr);
+ // 65
RegisterScriptFunction(sfPlayMovie);
RegisterScriptFunction(sfNop);
@@ -849,6 +863,11 @@ void ScriptInterpreter::sfSetDeltaAnimPalette() {
_vm->_palette->setDeltaPalette(_vm->_palette->getAnimPalette(), arg8(6), (char)arg8(5), arg8(4), arg8(3));
}
+void ScriptInterpreter::sfSetUnkPaletteEffect() {
+ // TODO
+ debug("ScriptInterpreter::sfSetUnkPaletteEffect");
+}
+
void ScriptInterpreter::sfBuildColorTransTable() {
_vm->_palette->buildColorTransTable(arg8(4), (char)arg8(3), arg8(5));
}
@@ -977,6 +996,10 @@ void ScriptInterpreter::sfSetCamera() {
_vm->setCamera(arg16(5), arg16(3));
}
+void ScriptInterpreter::sfGetCameraChanged() {
+ localWrite16(arg16(3), _vm->getCameraChanged() ? 1 : 0);
+}
+
void ScriptInterpreter::sfGetRgbModifiertAtPoint() {
byte *rgb = getSlotData(arg16(11)) + arg16(9);
_vm->_segmap->getRgbModifiertAtPoint(arg16(5), arg16(3), arg16(7), rgb[0], rgb[1], rgb[2]);
@@ -1012,15 +1035,21 @@ void ScriptInterpreter::sfStopShakeScreen() {
void ScriptInterpreter::sfStartSequence() {
// TODO
- //_vm->_arc->dump(arg16(3));
+ // DEBUG: Dump music so we know what's in there
+ int16 sequenceResIndex = arg16(3);
+ debug("ScriptInterpreter::sfStartSequence(%d)", sequenceResIndex);
+ if (sequenceResIndex >= 0)
+ _vm->_arc->dump(sequenceResIndex, "music");
}
void ScriptInterpreter::sfEndSequence() {
// TODO
+ debug("ScriptInterpreter::sfEndSequence");
}
void ScriptInterpreter::sfSetSequenceVolume() {
// TODO
+ //debug("ScriptInterpreter::sfSetSequenceVolume");
}
void ScriptInterpreter::sfPlayPositionalSound() {
@@ -1033,6 +1062,7 @@ void ScriptInterpreter::sfPlaySound2() {
void ScriptInterpreter::sfClearScreen() {
// TODO
+ debug("ScriptInterpreter::sfClearScreen");
}
void ScriptInterpreter::sfHandleInput() {
diff --git a/engines/toltecs/script.h b/engines/toltecs/script.h
index 04bebdd20c..1a5a9c90ad 100644
--- a/engines/toltecs/script.h
+++ b/engines/toltecs/script.h
@@ -126,6 +126,7 @@ protected:
void sfClearPaletteFragments();
void sfAddPaletteFragment();
void sfSetDeltaAnimPalette();
+ void sfSetUnkPaletteEffect();
void sfBuildColorTransTable();
void sfSetDeltaMainPalette();
void sfLoadScript();
@@ -151,6 +152,7 @@ protected:
void sfScrollCameraLeftEx();
void sfScrollCameraRightEx();
void sfSetCamera();
+ void sfGetCameraChanged();
void sfGetRgbModifiertAtPoint();
void sfStartAnim();
void sfAnimNextFrame();
diff --git a/engines/toltecs/segmap.cpp b/engines/toltecs/segmap.cpp
index 40471fee43..6fbc04a9c5 100644
--- a/engines/toltecs/segmap.cpp
+++ b/engines/toltecs/segmap.cpp
@@ -36,8 +36,6 @@ SegmentMap::~SegmentMap() {
void SegmentMap::load(byte *source) {
- // TODO: Use MemoryReadStream
-
freeSegmapMaskRectSurfaces();
_maskRects.clear();
_pathRects.clear();
diff --git a/engines/toltecs/sound.cpp b/engines/toltecs/sound.cpp
index 00b4a452d3..3bebd81345 100644
--- a/engines/toltecs/sound.cpp
+++ b/engines/toltecs/sound.cpp
@@ -51,7 +51,7 @@ void Sound::playSound(int16 resIndex, int16 type, int16 volume) {
// TODO: Use the right volumes
- debug("playSound(%d, %d, %d)", resIndex, type, volume);
+ debug(0, "playSound(%d, %d, %d)", resIndex, type, volume);
if (volume == -1 || type == -2) {
if (type == kChannelTypeBackground) {
diff --git a/engines/toltecs/toltecs.cpp b/engines/toltecs/toltecs.cpp
index f1d6040399..3fa7f00905 100644
--- a/engines/toltecs/toltecs.cpp
+++ b/engines/toltecs/toltecs.cpp
@@ -214,7 +214,6 @@ void ToltecsEngine::requestLoadgame(int slotNum) {
}
void ToltecsEngine::loadScene(uint resIndex) {
- // TODO
Resource *sceneResource = _res->load(resIndex);
byte *scene = sceneResource->data;
@@ -431,6 +430,10 @@ void ToltecsEngine::setCamera(int16 x, int16 y) {
}
+bool ToltecsEngine::getCameraChanged() {
+ return _cameraX != _newCameraX || _cameraY != _newCameraY;
+}
+
void ToltecsEngine::scrollCameraUp(int16 delta) {
if (_newCameraY > 0) {
if (_newCameraY < delta)
diff --git a/engines/toltecs/toltecs.h b/engines/toltecs/toltecs.h
index 38a8952bcc..2aa3585b91 100644
--- a/engines/toltecs/toltecs.h
+++ b/engines/toltecs/toltecs.h
@@ -112,6 +112,7 @@ public:
void setGuiHeight(int16 guiHeight);
void setCamera(int16 x, int16 y);
+ bool getCameraChanged();
void scrollCameraUp(int16 delta);
void scrollCameraDown(int16 delta);
void scrollCameraLeft(int16 delta);