aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script
diff options
context:
space:
mode:
authorPeter Kohaut2016-10-28 22:34:04 +0200
committerPeter Kohaut2016-10-28 22:34:04 +0200
commit1b40c5bf55c24a090632765335d871c198004120 (patch)
treec8b40484c403a2192b6fddda343df896f8ab732d /engines/bladerunner/script
parentebf173b9ce4305a373c0e24171ed7dec51093c5e (diff)
downloadscummvm-rg350-1b40c5bf55c24a090632765335d871c198004120.tar.gz
scummvm-rg350-1b40c5bf55c24a090632765335d871c198004120.tar.bz2
scummvm-rg350-1b40c5bf55c24a090632765335d871c198004120.zip
BLADERUNNER: fixed memory leaks & overflows
fixed few memory leaks fixed overflows prepared more logic for looping but its not yet working correctly - still figuring out original code for vqadecoder
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r--engines/bladerunner/script/script.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index b0bb638440..45b23120d5 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -55,14 +55,12 @@ namespace BladeRunner {
bool Script::open(const Common::String &name) {
delete _currentScript;
-
if (name == "RC01") { _currentScript = new ScriptRC01(_vm); return true; }
if (name == "RC02") { _currentScript = new ScriptRC02(_vm); return true; }
if (name == "RC03") { _currentScript = new ScriptRC03(_vm); return true; }
if (name == "RC04") { _currentScript = new ScriptRC04(_vm); return true; }
if (name == "RC51") { _currentScript = new ScriptRC51(_vm); return true; }
-
return false;
}
@@ -916,18 +914,18 @@ void ScriptBase::Overlay_Remove(const char *overlay) {
warning("Overlay_Remove(%s)", overlay);
}
-void ScriptBase::Scene_Loop_Set_Default(int a) {
- // debug("Scene_Loop_Set_Default(%d)", a);
-
- _vm->_scene->loopSetDefault(a);
- // _vm->_scene->_defaultLoop = a;
+void ScriptBase::Scene_Loop_Set_Default(int loopId) {
+ _vm->_scene->loopSetDefault(loopId);
}
-void ScriptBase::Scene_Loop_Start_Special(int a, int b, int c) {
- // debug("Scene_Loop_Start_Special(%d, %d, %d)", a, b, c);
-
- _vm->_scene->loopStartSpecial(a, b, c);
- // _vm->_scene->_field_24_loop_start_special_param_1 = a;
+void ScriptBase::Scene_Loop_Start_Special(int sceneLoopMode, int loopId, int c) {
+ if (sceneLoopMode == 1) {
+ c = 1;
+ }
+ _vm->_scene->loopStartSpecial(sceneLoopMode, loopId, c);
+ if (sceneLoopMode == 1) {
+ _vm->_settings->clearNewSetAndScene();
+ }
}
void ScriptBase::Outtake_Play(int id, int noLocalization, int container) {
@@ -1427,12 +1425,19 @@ void ScriptBase::VK_Play_Speech_Line(int actorIndex, int a2, float a3) {
AIScripts::AIScripts(BladeRunnerEngine *vm) : _vm(vm), _inScriptCounter(0) {
for (int i = 0; i != 100; ++i)
- _AIScripts[i] = 0;
+ _AIScripts[i] = nullptr;
_AIScripts[0] = new AIScript_McCoy(_vm);
_AIScripts[23] = new AIScript_Officer_Leroy(_vm);
}
+AIScripts::~AIScripts() {
+ for (int i = 0; i != 100; ++i) {
+ delete _AIScripts[i];
+ _AIScripts[i] = nullptr;
+ }
+}
+
void AIScripts::Initialize(int actor) {
if (_AIScripts[actor])
_AIScripts[actor]->Initialize();