[Scummvm-git-logs] scummvm master -> 03493e5042c9283389f56eb669c1e84298dfd17b
sev-
sev at scummvm.org
Tue Aug 24 23:31:15 UTC 2021
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
cb60da0f6e TOLTECS: Added sanity check to avoid potential out-of-bounds read. CID 1403261
c5500cdb5d TOLTECS: Added script tracing
5373b9f301 TOLTECS: Initialize engine class on creation
03493e5042 TOLTECS: Fixed Cancel button behaviour. Bugreport #7107
Commit: cb60da0f6e2a8648f9c45924aa5034a54f929d6e
https://github.com/scummvm/scummvm/commit/cb60da0f6e2a8648f9c45924aa5034a54f929d6e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2021-08-25T01:30:44+02:00
Commit Message:
TOLTECS: Added sanity check to avoid potential out-of-bounds read. CID 1403261
Changed paths:
engines/toltecs/segmap.cpp
diff --git a/engines/toltecs/segmap.cpp b/engines/toltecs/segmap.cpp
index d50e110485..da202a03eb 100644
--- a/engines/toltecs/segmap.cpp
+++ b/engines/toltecs/segmap.cpp
@@ -307,6 +307,7 @@ void SegmentMap::findPath(int16 *pointsArray, int16 destX, int16 destY, int16 so
if (currentRectIndex != -1 && currentRectIndex == destRectIndex)
break;
_deadEndPathRects[_deadEndPathRectsCount++] = _closedPathRects[--_closedPathRectsCount];
+ assert(_pathNodesCount >= 2);
_pathNodesCount -= 2;
currentRectIndex = _closedPathRects[--_closedPathRectsCount];
}
Commit: c5500cdb5db805e74c547853fc8ef58199e407a5
https://github.com/scummvm/scummvm/commit/c5500cdb5db805e74c547853fc8ef58199e407a5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2021-08-25T01:30:44+02:00
Commit Message:
TOLTECS: Added script tracing
Changed paths:
engines/toltecs/script.cpp
engines/toltecs/script.h
diff --git a/engines/toltecs/script.cpp b/engines/toltecs/script.cpp
index 95a8594a44..7ab1c07cf6 100644
--- a/engines/toltecs/script.cpp
+++ b/engines/toltecs/script.cpp
@@ -205,6 +205,8 @@ void ScriptInterpreter::setMainScript(uint slotIndex) {
_regs.sp = 4096;
_regs.reg8 = 0;
_code = getSlotData(_regs.reg4);
+ debug(2, "CODE: slot[%d]", _regs.reg4);
+ _codeStart = _code;
}
void ScriptInterpreter::runScript() {
@@ -255,7 +257,7 @@ int16 ScriptInterpreter::readInt16() {
void ScriptInterpreter::execOpcode(byte opcode) {
int16 ofs;
- debug(2, "opcode = %d", opcode);
+ debug(2, "[%ld] %d", _code - _codeStart - 1, opcode);
switch (opcode) {
case 0:
@@ -405,9 +407,13 @@ void ScriptInterpreter::execOpcode(byte opcode) {
break;
case 43:
_code = getSlotData(_regs.reg4) + _regs.reg0;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg4, _regs.reg0);
+ _codeStart = _code;
break;
case 44:
_code = getSlotData(_regs.reg5) + _regs.reg0;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg5, _regs.reg0);
+ _codeStart = _code;
_regs.reg4 = _regs.reg5;
_switchLocalDataNear = true;
break;
@@ -415,11 +421,15 @@ void ScriptInterpreter::execOpcode(byte opcode) {
pushInt16(_code - getSlotData(_regs.reg4));
pushInt16(_regs.reg4);
_code = getSlotData(_regs.reg4) + _regs.reg0;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg4, _regs.reg0);
+ _codeStart = _code;
break;
case 46:
pushInt16(_code - getSlotData(_regs.reg4));
pushInt16(_regs.reg4);
_code = getSlotData(_regs.reg5) + _regs.reg0;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg5, _regs.reg0);
+ _codeStart = _code;
_regs.reg4 = _regs.reg5;
_switchLocalDataNear = true;
break;
@@ -427,12 +437,16 @@ void ScriptInterpreter::execOpcode(byte opcode) {
_regs.reg4 = popInt16();
ofs = popInt16();
_code = getSlotData(_regs.reg4) + ofs;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg4, ofs);
+ _codeStart = _code;
_switchLocalDataNear = true;
break;
case 48:
_regs.reg4 = popInt16();
ofs = popInt16();
_code = getSlotData(_regs.reg4) + ofs;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg4, ofs);
+ _codeStart = _code;
_regs.sp += _regs.reg0;
_switchLocalDataNear = true;
break;
@@ -709,7 +723,10 @@ void ScriptInterpreter::loadState(Common::ReadStream *in) {
_savedSp = in->readUint16LE();
// Load IP
- _code = getSlotData(_regs.reg4) + in->readUint16LE();
+ uint16 offset = in->readUint16LE();
+ _code = getSlotData(_regs.reg4) + offset;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg4, offset);
+ _codeStart = _code;
}
void ScriptInterpreter::sfNop() {
@@ -795,6 +812,8 @@ void ScriptInterpreter::sfLoadScript() {
int16 codeOfs = _code - getSlotData(_regs.reg4);
loadScript(arg16(4), arg8(3));
_code = getSlotData(_regs.reg4) + codeOfs;
+ debug(2, "CODE: slot[%d] + %d", _regs.reg4, codeOfs);
+ _codeStart = _code;
_switchLocalDataNear = true;
}
diff --git a/engines/toltecs/script.h b/engines/toltecs/script.h
index e77dcf4352..b537d527c1 100644
--- a/engines/toltecs/script.h
+++ b/engines/toltecs/script.h
@@ -82,7 +82,7 @@ protected:
byte *_stack;
- byte *_code, *_subCode;
+ byte *_code, *_subCode, *_codeStart;
byte *_localData;
bool _switchLocalDataNear, _switchLocalDataFar, _switchLocalDataToStack;
bool _cmpBitTest;
Commit: 5373b9f3012663c5f2a7602b7c18173fef216e91
https://github.com/scummvm/scummvm/commit/5373b9f3012663c5f2a7602b7c18173fef216e91
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2021-08-25T01:30:45+02:00
Commit Message:
TOLTECS: Initialize engine class on creation
Changed paths:
engines/toltecs/toltecs.cpp
diff --git a/engines/toltecs/toltecs.cpp b/engines/toltecs/toltecs.cpp
index a224dd0dd9..e3f9b47f3f 100644
--- a/engines/toltecs/toltecs.cpp
+++ b/engines/toltecs/toltecs.cpp
@@ -63,6 +63,51 @@ struct GameSettings {
ToltecsEngine::ToltecsEngine(OSystem *syst, const ToltecsGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
_rnd = new Common::RandomSource("toltecs");
+
+ _sceneResIndex = 0;
+ _sceneWidth = _sceneHeight = 0;
+
+ _counter01 = _counter02 = 0;
+ _movieSceneFlag = false;
+ _flag01 = 0;
+
+ _cameraX = _cameraY = _newCameraX = _newCameraY = 0;
+ _cameraHeight = 0;
+ _guiHeight = 26;
+
+ _doSpeech = true;
+ _doText = true;
+
+ _walkSpeedY = 5;
+ _walkSpeedX = 1;
+
+ _mouseX = 0;
+ _mouseY = 0;
+ _mouseDblClickTicks = 60;
+ _mouseWaitForRelease = false;
+ _mouseButton = 0;
+ _mouseDisabled = 0;
+ _leftButtonDown = false;
+ _rightButtonDown = false;
+
+ _arc = nullptr;
+ _res = nullptr;
+ _screen = nullptr;
+ _script = nullptr;
+ _anim = nullptr;
+ _palette = nullptr;
+ _segmap = nullptr;
+ _moviePlayer = nullptr;
+ _music = nullptr;
+ _menuSystem = nullptr;
+
+ _sound = nullptr;
+
+ _cfgText = ConfMan.getBool("subtitles");
+ _cfgVoices = !ConfMan.getBool("speech_mute");
+
+ _saveLoadRequested = 0;
+ _isSaveAllowed = true;
}
ToltecsEngine::~ToltecsEngine() {
Commit: 03493e5042c9283389f56eb669c1e84298dfd17b
https://github.com/scummvm/scummvm/commit/03493e5042c9283389f56eb669c1e84298dfd17b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2021-08-25T01:30:45+02:00
Commit Message:
TOLTECS: Fixed Cancel button behaviour. Bugreport #7107
Changed paths:
engines/toltecs/menu.cpp
engines/toltecs/menu.h
diff --git a/engines/toltecs/menu.cpp b/engines/toltecs/menu.cpp
index ef61222af1..22ea68e6fe 100644
--- a/engines/toltecs/menu.cpp
+++ b/engines/toltecs/menu.cpp
@@ -47,6 +47,7 @@ MenuSystem::MenuSystem(ToltecsEngine *vm) : _vm(vm) {
_editingDescriptionID = kItemIdNone;
_editingDescriptionItem = nullptr;
_needRedraw = false;
+ _returnToGame = false;
}
MenuSystem::~MenuSystem() {
@@ -80,6 +81,11 @@ int MenuSystem::run(MenuID menuId) {
memcpy(_background->getPixels(), _vm->_screen->_frontScreen, 640 * 400);
+ if (menuId == kMenuIdMain)
+ _returnToGame = false;
+ else
+ _returnToGame = true;
+
while (_running) {
update();
_vm->_system->updateScreen();
@@ -268,10 +274,15 @@ void MenuSystem::initMenu(MenuID menuID) {
int slot = dialog->runModalWithCurrentTarget();
delete dialog;
- if (slot >= 0)
+ if (slot >= 0) {
_vm->requestLoadgame(slot);
-
- _running = false;
+ _running = false;
+ } else {
+ if (_returnToGame)
+ _running = false;
+ else
+ _newMenuID = kMenuIdMain;
+ }
}
break;
case kMenuIdSave:
@@ -297,10 +308,15 @@ void MenuSystem::initMenu(MenuID menuID) {
desc = dialog->createDefaultSaveDescription(slot);
}
- if (slot >= 0)
+ if (slot >= 0) {
_vm->requestSavegame(slot, desc);
-
- _running = false;
+ _running = false;
+ } else {
+ if (_returnToGame)
+ _running = false;
+ else
+ _newMenuID = kMenuIdMain;
+ }
}
break;
case kMenuIdVolumes:
diff --git a/engines/toltecs/menu.h b/engines/toltecs/menu.h
index 476eefe142..42b08e51bc 100644
--- a/engines/toltecs/menu.h
+++ b/engines/toltecs/menu.h
@@ -113,6 +113,7 @@ protected:
ItemID _editingDescriptionID;
Item *_editingDescriptionItem;
bool _needRedraw;
+ bool _returnToGame;
Common::Array<Item> _items;
Common::Array<SavegameItem> _savegames;
More information about the Scummvm-git-logs
mailing list