aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorjohndoe1232011-09-16 20:02:07 +0000
committerWillem Jan Palenstijn2013-05-08 20:39:39 +0200
commitc30e16628e01b5be671330b24ed73d1294205f6b (patch)
treefa959f5c2ed76fbb7d74f7e79880af98b9156656 /engines
parent5d63bef6a25a990603444026a8cb033108410019 (diff)
downloadscummvm-rg350-c30e16628e01b5be671330b24ed73d1294205f6b.tar.gz
scummvm-rg350-c30e16628e01b5be671330b24ed73d1294205f6b.tar.bz2
scummvm-rg350-c30e16628e01b5be671330b24ed73d1294205f6b.zip
NEVERHOOD: Add Module::updateChild and use it (in most places)
Diffstat (limited to 'engines')
-rw-r--r--engines/neverhood/gamemodule.cpp110
-rw-r--r--engines/neverhood/module.cpp13
-rw-r--r--engines/neverhood/module.h1
-rw-r--r--engines/neverhood/module1000.cpp30
-rw-r--r--engines/neverhood/module1200.cpp59
-rw-r--r--engines/neverhood/module1200.h3
-rw-r--r--engines/neverhood/module1300.cpp91
-rw-r--r--engines/neverhood/module1400.cpp46
-rw-r--r--engines/neverhood/module1500.cpp7
-rw-r--r--engines/neverhood/module1700.cpp24
-rw-r--r--engines/neverhood/module1800.cpp63
-rw-r--r--engines/neverhood/module2000.cpp18
-rw-r--r--engines/neverhood/module2200.cpp288
-rw-r--r--engines/neverhood/module2300.cpp88
-rw-r--r--engines/neverhood/module3000.cpp200
-rw-r--r--engines/neverhood/module3000.h2
-rw-r--r--engines/neverhood/sprite.cpp4
-rw-r--r--engines/neverhood/sprite.h10
18 files changed, 254 insertions, 803 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 650287b473..6ef58e4fae 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -268,8 +268,8 @@ void GameModule::startup() {
//createModule1700(1);
//createModule1400(-1);
#if 1
- _vm->gameState().sceneNum = 1;
- createModule1000(-1);
+ _vm->gameState().sceneNum = 0;
+ createModule1200(-1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
@@ -296,14 +296,7 @@ void GameModule::createModule1000(int which) {
}
void GameModule::updateModule1000() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- // TODO _resourceTable3.load();
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createModule2300(0);
_childObject->handleUpdate();
}
@@ -316,13 +309,7 @@ void GameModule::createModule1200(int which) {
}
void GameModule::updateModule1200() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
error("// TODO createModule2600(0);");
// TODO createModule2600(0);
@@ -341,13 +328,7 @@ void GameModule::createModule1300(int which) {
}
void GameModule::updateModule1300() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
// TODO _gameState.clear();
// TODO GameModule_handleKeyEscape
@@ -365,13 +346,7 @@ void GameModule::createModule1400(int which) {
}
void GameModule::updateModule1400() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
error("WEIRD!");
} else {
@@ -389,13 +364,7 @@ void GameModule::createModule1500(int which) {
}
void GameModule::updateModule1500() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createModule1000(0);
_childObject->handleUpdate();
}
@@ -408,13 +377,7 @@ void GameModule::createModule1700(int which) {
}
void GameModule::updateModule1700() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
debug("Module1700 done; _field20 = %d", _field20);
if (_field20 == 1) {
// TODO createModule2900(3);
@@ -433,13 +396,7 @@ void GameModule::createModule1800(int which) {
}
void GameModule::updateModule1800() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
// TODO GameState_clear();
// TODO GameModule_handleKeyEscape();
@@ -463,13 +420,7 @@ void GameModule::createModule2000(int which) {
}
void GameModule::updateModule2000() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// TODO createModule2900(4);
_childObject->handleUpdate();
}
@@ -482,13 +433,7 @@ void GameModule::createModule2200(int which) {
}
void GameModule::updateModule2200() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createModule2300(1);
_childObject->handleUpdate();
}
@@ -501,40 +446,19 @@ void GameModule::createModule2300(int which) {
}
void GameModule::updateModule2300() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createModule2200(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createModule1200(0);
- _childObject->handleUpdate();
} else if (_field20 == 3) {
// TODO createModule2400(0);
- // TODO _childObject->handleUpdate();
} else if (_field20 == 4) {
// TODO createModule3000(0);
- // TODO _childObject->handleUpdate();
} else {
createModule1000(1);
- _childObject->handleUpdate();
- }
- }
- if (_field24 >= 0) {
- if (_field24 == 2) {
- // TODO _resourceTable4.load();
- } else if (_field24 == 0) {
- // TODO _resourceTable3.load();
}
- _field24 = -1;
- }
- if (_field26 >= 0) {
- _field26 = -1;
+ _childObject->handleUpdate();
}
}
@@ -549,13 +473,7 @@ void GameModule::createModule3000(int which) {
}
void GameModule::updateModule3000() {
- if (!_childObject)
- return;
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
// TODO createModule1900(0);
// TODO _childObject->handleUpdate();
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index c38b96e199..6d49838c49 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -89,4 +89,17 @@ void Module::createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1,
_childObject = smackerScene;
}
+bool Module::updateChild() {
+ if (_childObject) {
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ return false;
+ }
+ }
+ return true;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.h b/engines/neverhood/module.h
index 470fe36c98..a37fd522aa 100644
--- a/engines/neverhood/module.h
+++ b/engines/neverhood/module.h
@@ -53,6 +53,7 @@ protected:
NavigationScene *navigationScene();
void createNavigationScene(uint32 navigationListId, int navigationIndex, const byte *itemsTypes = NULL);
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
+ bool updateChild();
};
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index 1e5b0765ea..51e1d1959d 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -101,11 +101,7 @@ void Module1000::createScene1005(int which) {
}
void Module1000::updateScene1001() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 2) {
createScene1003(0);
_childObject->handleUpdate();
@@ -117,11 +113,7 @@ void Module1000::updateScene1001() {
}
void Module1000::updateScene1002() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
} else if (_field20 == 2) {
@@ -135,22 +127,14 @@ void Module1000::updateScene1002() {
}
void Module1000::updateScene1003() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1001(2);
_childObject->handleUpdate();
}
}
void Module1000::updateScene1004() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1005(0);
_childObject->handleUpdate();
@@ -162,12 +146,8 @@ void Module1000::updateScene1004() {
}
void Module1000::updateScene1005() {
- _childObject->handleUpdate();
- if (_done) {
+ if (!updateChild()) {
// TODO Music18hList_stop(_musicFileHash, 0, 1);
- _done = false;
- delete _childObject;
- _childObject = NULL;
createScene1004(1);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index a12f1cca09..fa0bea0e94 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -25,10 +25,12 @@
namespace Neverhood {
Module1200::Module1200(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _moduleDone(false) {
+ : Module(vm, parentModule) {
// TODO _resourceTable.setResourceList(0x004B3E68);
SetMessageHandler(&Module1200::handleMessage);
+
+ debug("Module1200: which = %d", which);
if (which < 0) {
switch (_vm->gameState().sceneNum) {
@@ -56,17 +58,6 @@ Module1200::~Module1200() {
// TODO Music18hList_deleteGroup(0x00478311);
}
-uint32 Module1200::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Module::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1009:
- _moduleDone = true;
- _moduleDoneStatus = param.asInteger();
- break;
- }
- return messageResult;
-}
-
void Module1200::createScene1201(int which) {
_vm->gameState().sceneNum = 0;
_childObject = new Scene1201(_vm, this, which);
@@ -88,41 +79,31 @@ void Module1200::createScene1203(int which) {
}
void Module1200::updateScene1201() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 1) {
+ if (!updateChild()) {
+ if (_field20 == 1) {
createScene1202(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 2) {
- sendMessage(_parentModule, 0x1009, 0);
- } else if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
- createScene1203(-1);
+ } else if (_field20 == 2) {
+ if (getGlobalVar(0x0A18CA33) && !getGlobalVar(0x2A02C07B)) {
+ createScene1203(-1);
+ } else {
+ sendMessage(_parentModule, 0x1009, 1);
+ }
} else {
- sendMessage(_parentModule, 0x1009, 1);
+ sendMessage(_parentModule, 0x1009, 0);
}
}
}
void Module1200::updateScene1202() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1201(1);
_childObject->handleUpdate();
}
}
void Module1200::updateScene1203() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1201(3);
_childObject->handleUpdate();
// TODO Music18hList_play(0x62222CAE, 0, 0, 1);
@@ -788,15 +769,6 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
int16 x1, x2;
Sprite *tempSprite, *class464;
- // TODO _resourceTable2.setResourceList(ex_sub_41C730(), true);
- if (getGlobalVar(0x0A18CA33)) {
- // TODO _resourceTable1.setResourceList(0x004AEA10, true);
- } else if (getGlobalVar(0x0A310817)) {
- // TODO _resourceTable1.setResourceList(0x004AEA70, true);
- } else {
- // TODO _resourceTable1.setResourceList(0x004AEB18, true);
- }
-
SetUpdateHandler(&Scene1201::update);
SetMessageHandler(&Scene1201::handleMessage);
@@ -844,6 +816,8 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
class464 = addSprite(new Class464(_vm));
+ debug("Scene1201: which = %d", which);
+
if (which < 0) {
InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
setMessageList(0x004AEC08);
@@ -1006,7 +980,6 @@ void Scene1201::update() {
}
uint32 Scene1201::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
- debug("Scene1201::handleMessage(%04X)", messageNum);
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index 3ffed442d9..df1ed41b2c 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -37,9 +37,6 @@ public:
virtual ~Module1200();
protected:
// TODO ResourceTable _resourceTable;
- bool _moduleDone;
- uint32 _moduleDoneStatus;
- uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void createScene1201(int which);
void createScene1202(int which);
void createScene1203(int which);
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 46597e0b78..149af4a071 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -283,11 +283,7 @@ void Module1300::createScene1318(int which) {
}
void Module1300::updateScene1302() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1305(0);
} else {
@@ -298,45 +294,28 @@ void Module1300::updateScene1302() {
}
void Module1300::updateScene1303() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1306(3);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1304() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1316(0);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1305() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1317(-1);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1306() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
- debug("_field20 = %d", _field20);
+ if (!updateChild()) {
if (_field20 == 2) {
createScene1309(0);
_childObject->handleUpdate();
@@ -353,22 +332,14 @@ void Module1300::updateScene1306() {
}
void Module1300::updateScene1307() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1308(2);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1308() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1314(0);
} else if (_field20 == 1) {
@@ -381,22 +352,14 @@ void Module1300::updateScene1308() {
}
void Module1300::updateScene1309() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1306(2);
_childObject->handleUpdate();
}
}
void Module1300::updateScene1310() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_vm->gameState().sceneNum == 9)
createScene1306(0);
else
@@ -409,11 +372,7 @@ void Module1300::updateScene1311() {
}
void Module1300::updateScene1312() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(0);
} else if (_field20 == 1) {
@@ -424,11 +383,7 @@ void Module1300::updateScene1312() {
}
void Module1300::updateScene1313() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
switch (_field20) {
case 0:
createScene1315(1);
@@ -448,11 +403,7 @@ void Module1300::updateScene1313() {
}
void Module1300::updateScene1314() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(2);
} else if (_field20 == 1) {
@@ -463,11 +414,7 @@ void Module1300::updateScene1314() {
}
void Module1300::updateScene1315() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(3);
} else if (_field20 == 1) {
@@ -478,11 +425,7 @@ void Module1300::updateScene1315() {
}
void Module1300::updateScene1316() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1313(4);
} else if (_field20 == 1) {
@@ -493,11 +436,7 @@ void Module1300::updateScene1316() {
}
void Module1300::updateScene1317() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1318(-1);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 4dac2a76be..edc47f5a56 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -121,11 +121,7 @@ void Module1400::createScene1407(int which) {
}
void Module1400::updateScene1401() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1402(0);
_childObject->handleUpdate();
@@ -139,14 +135,7 @@ void Module1400::updateScene1401() {
}
void Module1400::updateScene1402() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
-
- debug("Scene1402: _field20 = %d", _field20);
-
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1403(0);
_childObject->handleUpdate();
@@ -161,23 +150,14 @@ void Module1400::updateScene1402() {
}
void Module1400::updateScene1403() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1402(1);
_childObject->handleUpdate();
}
}
void Module1400::updateScene1404() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
- debug("Scene1404; _field20 = %d", _field20);
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1405(0);
_childObject->handleUpdate();
@@ -192,33 +172,21 @@ void Module1400::updateScene1404() {
}
void Module1400::updateScene1405() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1404(1);
_childObject->handleUpdate();
}
}
void Module1400::updateScene1406() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1404(2);
_childObject->handleUpdate();
}
}
void Module1400::updateScene1407() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene1402(2);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index a014844e87..b942d8b836 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -50,11 +50,7 @@ Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, boo
}
void Module1500::update() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 0:
createScene1502();
@@ -77,7 +73,6 @@ void Module1500::update() {
}
void Module1500::createScene1501() {
- debug("createScene1501");
_vm->gameState().sceneNum = 0;
_childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
SetUpdateHandler(&Module1500::update);
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index a36d35816e..528161ea2b 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -100,11 +100,7 @@ void Module1700::createScene1705(int which) {
}
void Module1700::updateScene1701() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_vm->gameState().sceneNum == 3) {
createScene1705(0);
_childObject->handleUpdate();
@@ -117,11 +113,7 @@ void Module1700::updateScene1701() {
}
void Module1700::updateScene1702() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1703(0);
_childObject->handleUpdate();
@@ -133,11 +125,7 @@ void Module1700::updateScene1702() {
}
void Module1700::updateScene1703() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1704(-1);
_childObject->handleUpdate();
@@ -156,11 +144,7 @@ void Module1700::updateScene1703() {
}
void Module1700::updateScene1705() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
sendMessage(_parentModule, 0x1009, 1);
}
}
diff --git a/engines/neverhood/module1800.cpp b/engines/neverhood/module1800.cpp
index f503848661..d3dc4b6e9e 100644
--- a/engines/neverhood/module1800.cpp
+++ b/engines/neverhood/module1800.cpp
@@ -146,17 +146,7 @@ void Module1800::createScene1809(int which) {
}
void Module1800::updateScene1801() {
- _childObject->handleUpdate();
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (navigationScene->soundFlag1 && navigationScene->index == 2) {
- // TODO Sound1ChList_sub_4080B0(false);
- }
-#endif
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene1805(0);
_childObject->handleUpdate();
@@ -167,6 +157,13 @@ void Module1800::updateScene1801() {
createScene1804(0);
_childObject->handleUpdate();
}
+ } else {
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (navigationScene->soundFlag1 && navigationScene->index == 2) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
+#endif
}
}
@@ -187,11 +184,7 @@ void Module1800::updateScene1802() {
}
void Module1800::updateScene1803() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 2) {
createScene1801(2);
_childObject->handleUpdate();
@@ -207,49 +200,33 @@ void Module1800::updateScene1803() {
}
void Module1800::updateScene1804() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1804b(-1);
- _childObject->handleUpdate();
} else if (_field20 == 1) {
createScene1801(1);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
void Module1800::updateScene1805() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
createScene1807(-1);
- _childObject->handleUpdate();
} else if (_field20 == 1) {
createScene1806(0);
- _childObject->handleUpdate();
} else if (_field20 == 2) {
createScene1801(3);
- _childObject->handleUpdate();
} else if (_field20 == 3) {
createScene1805(3);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
}
}
void Module1800::updateScene1806() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
sendMessage(_parentModule, 0x1009, 2);
} else if (_field20 == 1) {
@@ -257,20 +234,10 @@ void Module1800::updateScene1806() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 1) {
- // TODO _resourceTable.setResourceList(ex_sub_42EDA0(0), true);
- }
- _field24 = -1;
- }
}
void Module1800::updateScene1809() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
sendMessage(_parentModule, 0x1009, 1);
// TODO GameState stuff
}
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 2b6a647885..130235512c 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -83,11 +83,7 @@ void Module2000::createScene2003(int which) {
}
void Module2000::updateScene2001() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
} else {
@@ -97,11 +93,7 @@ void Module2000::updateScene2001() {
}
void Module2000::updateScene2002() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 0) {
if (getGlobalVar(0x98109F12)) {
createScene2002(0);
@@ -117,11 +109,7 @@ void Module2000::updateScene2002() {
}
void Module2000::updateScene2003() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2002(0);
}
}
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 62aec282c7..321fab1484 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -498,11 +498,7 @@ void Module2200::createScene2248(int which) {
}
void Module2200::updateScene2201() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2203(0);
} else if (_field20 == 2) {
@@ -514,21 +510,13 @@ void Module2200::updateScene2201() {
}
void Module2200::updateScene2202() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2201(2);
}
}
void Module2200::updateScene2203() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2205(0);
} else if (_field20 == 2) {
@@ -541,21 +529,13 @@ void Module2200::updateScene2203() {
}
void Module2200::updateScene2204() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2203(2);
}
}
void Module2200::updateScene2205() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2206(0);
} else if (_field20 == 2) {
@@ -568,11 +548,7 @@ void Module2200::updateScene2205() {
}
void Module2200::updateScene2206() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2247(0);
} else if (_field20 == 2) {
@@ -587,22 +563,14 @@ void Module2200::updateScene2206() {
}
void Module2200::updateScene2207() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2206(2);
_childObject->handleUpdate();
}
}
void Module2200::updateScene2208() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// This is madness!
switch (_vm->gameState().which) {
case 4:
@@ -725,22 +693,14 @@ void Module2200::updateScene2208() {
}
void Module2200::updateScene2209() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2206(3);
_childObject->handleUpdate();
}
}
void Module2200::updateScene2210() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2211(0);
} else if (_field20 == 2) {
@@ -753,11 +713,7 @@ void Module2200::updateScene2210() {
}
void Module2200::updateScene2211() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2212(0);
} else if (_field20 == 2) {
@@ -770,11 +726,7 @@ void Module2200::updateScene2211() {
}
void Module2200::updateScene2212() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2213(0);
} else if (_field20 == 2) {
@@ -787,11 +739,7 @@ void Module2200::updateScene2212() {
}
void Module2200::updateScene2213() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2214(0);
} else if (_field20 == 2) {
@@ -804,11 +752,7 @@ void Module2200::updateScene2213() {
}
void Module2200::updateScene2214() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2215(0);
} else if (_field20 == 2) {
@@ -821,11 +765,7 @@ void Module2200::updateScene2214() {
}
void Module2200::updateScene2215() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2216(0);
} else if (_field20 == 2) {
@@ -838,11 +778,7 @@ void Module2200::updateScene2215() {
}
void Module2200::updateScene2216() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2217(0);
} else if (_field20 == 2) {
@@ -855,11 +791,7 @@ void Module2200::updateScene2216() {
}
void Module2200::updateScene2217() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2218(0);
} else if (_field20 == 2) {
@@ -872,11 +804,7 @@ void Module2200::updateScene2217() {
}
void Module2200::updateScene2218() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2219(0);
} else if (_field20 == 2) {
@@ -889,11 +817,7 @@ void Module2200::updateScene2218() {
}
void Module2200::updateScene2219() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2220(0);
} else if (_field20 == 2) {
@@ -906,11 +830,7 @@ void Module2200::updateScene2219() {
}
void Module2200::updateScene2220() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2221(0);
} else if (_field20 == 2) {
@@ -923,11 +843,7 @@ void Module2200::updateScene2220() {
}
void Module2200::updateScene2221() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2222(0);
} else if (_field20 == 2) {
@@ -940,11 +856,7 @@ void Module2200::updateScene2221() {
}
void Module2200::updateScene2222() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2223(0);
} else if (_field20 == 2) {
@@ -957,11 +869,7 @@ void Module2200::updateScene2222() {
}
void Module2200::updateScene2223() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2224(0);
} else if (_field20 == 2) {
@@ -974,11 +882,7 @@ void Module2200::updateScene2223() {
}
void Module2200::updateScene2224() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2225(0);
} else if (_field20 == 2) {
@@ -991,11 +895,7 @@ void Module2200::updateScene2224() {
}
void Module2200::updateScene2225() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2226(0);
} else if (_field20 == 2) {
@@ -1008,11 +908,7 @@ void Module2200::updateScene2225() {
}
void Module2200::updateScene2226() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2227(0);
} else if (_field20 == 2) {
@@ -1025,11 +921,7 @@ void Module2200::updateScene2226() {
}
void Module2200::updateScene2227() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2228(0);
} else if (_field20 == 2) {
@@ -1042,11 +934,7 @@ void Module2200::updateScene2227() {
}
void Module2200::updateScene2228() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2229(0);
} else if (_field20 == 2) {
@@ -1059,11 +947,7 @@ void Module2200::updateScene2228() {
}
void Module2200::updateScene2229() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2230(0);
} else if (_field20 == 2) {
@@ -1076,11 +960,7 @@ void Module2200::updateScene2229() {
}
void Module2200::updateScene2230() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2231(0);
} else if (_field20 == 2) {
@@ -1093,11 +973,7 @@ void Module2200::updateScene2230() {
}
void Module2200::updateScene2231() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2232(0);
} else if (_field20 == 2) {
@@ -1110,11 +986,7 @@ void Module2200::updateScene2231() {
}
void Module2200::updateScene2232() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2233(0);
} else if (_field20 == 2) {
@@ -1127,11 +999,7 @@ void Module2200::updateScene2232() {
}
void Module2200::updateScene2233() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2234(0);
} else if (_field20 == 2) {
@@ -1144,11 +1012,7 @@ void Module2200::updateScene2233() {
}
void Module2200::updateScene2234() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2235(0);
} else if (_field20 == 2) {
@@ -1161,11 +1025,7 @@ void Module2200::updateScene2234() {
}
void Module2200::updateScene2235() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2243(0);
} else if (_field20 == 2) {
@@ -1178,11 +1038,7 @@ void Module2200::updateScene2235() {
}
void Module2200::updateScene2236() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2237(0);
} else if (_field20 == 2) {
@@ -1195,11 +1051,7 @@ void Module2200::updateScene2236() {
}
void Module2200::updateScene2237() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2238(0);
} else if (_field20 == 2) {
@@ -1212,11 +1064,7 @@ void Module2200::updateScene2237() {
}
void Module2200::updateScene2238() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2239(0);
} else if (_field20 == 2) {
@@ -1229,11 +1077,7 @@ void Module2200::updateScene2238() {
}
void Module2200::updateScene2239() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2240(0);
} else if (_field20 == 2) {
@@ -1246,11 +1090,7 @@ void Module2200::updateScene2239() {
}
void Module2200::updateScene2240() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2241(0);
} else if (_field20 == 2) {
@@ -1263,11 +1103,7 @@ void Module2200::updateScene2240() {
}
void Module2200::updateScene2241() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2242(0);
} else if (_field20 == 2) {
@@ -1280,11 +1116,7 @@ void Module2200::updateScene2241() {
}
void Module2200::updateScene2242() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2248(0);
_childObject->handleUpdate();
@@ -1299,11 +1131,7 @@ void Module2200::updateScene2242() {
}
void Module2200::updateScene2243() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2244(0);
} else if (_field20 == 2) {
@@ -1316,11 +1144,7 @@ void Module2200::updateScene2243() {
}
void Module2200::updateScene2244() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2245(0);
} else if (_field20 == 2) {
@@ -1333,11 +1157,7 @@ void Module2200::updateScene2244() {
}
void Module2200::updateScene2245() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2246(0);
} else if (_field20 == 2) {
@@ -1350,11 +1170,7 @@ void Module2200::updateScene2245() {
}
void Module2200::updateScene2246() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2236(0);
} else if (_field20 == 2) {
@@ -1367,11 +1183,7 @@ void Module2200::updateScene2246() {
}
void Module2200::updateScene2247() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2210(0);
} else if (_field20 == 2) {
@@ -1384,11 +1196,7 @@ void Module2200::updateScene2247() {
}
void Module2200::updateScene2248() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene2242(1);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module2300.cpp b/engines/neverhood/module2300.cpp
index 19861ac7ca..60f8134929 100644
--- a/engines/neverhood/module2300.cpp
+++ b/engines/neverhood/module2300.cpp
@@ -125,11 +125,7 @@ void Module2300::createScene2305(int which) {
}
void Module2300::updateScene2301() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2302(4);
_childObject->handleUpdate();
@@ -140,28 +136,7 @@ void Module2300::updateScene2301() {
}
void Module2300::updateScene2302() {
- _childObject->handleUpdate();
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume++;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
- }
-#endif
-#if 0 // TODO
- if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
- navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
- Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
- Sound1ChList_setVolume(0x48498E46, 70);
- Sound1ChList_setVolume(0x50399F64, 70);
- }
-#endif
- if (_done) {
- debug("SCENE 2302 DONE; _field20 = %d", _field20);
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
createScene2301(0);
_childObject->handleUpdate();
@@ -179,15 +154,28 @@ void Module2300::updateScene2302() {
} else {
sendMessage(_parentModule, 0x1009, 4);
}
+ } else {
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 4 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume++;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
+#endif
+#if 0 // TODO
+ if (navigationScene->getSoundFlag1() && navigationScene->getNavigationIndex() == 0 &&
+ navigationScene->getSmackerPlayer() && navigationScene->getSmackerPlayer()->getFrameNumber() == 50) {
+ Sound1ChList_sub_407C70(0x1A214010, 0x48498E46, 0x50399F64);
+ Sound1ChList_setVolume(0x48498E46, 70);
+ Sound1ChList_setVolume(0x50399F64, 70);
+ }
+#endif
}
}
void Module2300::updateScene2303() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 3);
} else {
@@ -195,44 +183,30 @@ void Module2300::updateScene2303() {
_childObject->handleUpdate();
}
}
- if (_field24 >= 0) {
- if (_field24 == 1) {
- // TODO _resourceTable1.setResourceList(ex_sub_479D00(0), true);
- // TODO _resourceTable2.loadResources();
- }
- _field24 = -1;
- }
}
void Module2300::updateScene2304() {
- _childObject->handleUpdate();
-#if 0 // TODO
- NavigationScene *navigationScene = (NavigationScene*)_childObject;
- if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
- navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
- _volume--;
- Sound1ChList_setVolume(0x90F0D1C3, _volume);
- }
-#endif
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 2);
} else {
createScene2302(1);
_childObject->handleUpdate();
}
+ } else {
+#if 0 // TODO
+ NavigationScene *navigationScene = (NavigationScene*)_childObject;
+ if (_flag && navigationScene->getSoundFlag1() && navigationScene->getSmackerPlayer() &&
+ navigationScene->getSmackerPlayer()->getFrameNumber() % 2) {
+ _volume--;
+ Sound1ChList_setVolume(0x90F0D1C3, _volume);
+ }
+#endif
}
}
void Module2300::updateScene2305() {
- _childObject->handleUpdate();
- if (_done) {
- _done = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// TODO Sound1ChList_sub_4080B0(false);
createScene2302(2);
_childObject->handleUpdate();
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index cc617a3fbc..bccc72352b 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -27,7 +27,7 @@
namespace Neverhood {
Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
- : Module(vm, parentModule), _moduleDone(false), _soundVolume(0) {
+ : Module(vm, parentModule), _soundVolume(0) {
debug("Create Module3000(%d)", which);
@@ -95,25 +95,12 @@ Module3000::Module3000(NeverhoodEngine *vm, Module *parentModule, int which)
createScene3006(1);
}
- SetMessageHandler(&Module3000::handleMessage);
-
}
Module3000::~Module3000() {
// TODO Sound1ChList_sub_407A50(0x81293110);
}
-uint32 Module3000::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
- uint32 messageResult = Module::handleMessage(messageNum, param, sender);
- switch (messageNum) {
- case 0x1009:
- _moduleDone = true;
- _moduleDoneStatus = param.asInteger();
- break;
- }
- return messageResult;
-}
-
void Module3000::createScene3002(int which) {
_vm->gameState().sceneNum = 1;
if (!getGlobalVar(0x01BA1A52)) {
@@ -276,20 +263,20 @@ void Module3000::updateScene3002() {
}
}
#endif
- if (_moduleDone) {
+ if (_done) {
int areaType = navigationScene()->getNavigationAreaType();
- _moduleDone = false;
+ _done = false;
delete _childObject;
_childObject = NULL;
if (!getGlobalVar(0x01BA1A52)) {
- if (_moduleDoneStatus == 0) {
+ if (_field20 == 0) {
createScene3010(-1);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
}
} else {
- if (_moduleDoneStatus == 0) {
+ if (_field20 == 0) {
if (areaType == 2) {
createScene3003(0);
_childObject->handleUpdate();
@@ -297,7 +284,7 @@ void Module3000::updateScene3002() {
//createScene3002b(-1);
_childObject->handleUpdate();
}
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
sendMessage(_parentModule, 0x1009, 0);
}
}
@@ -305,11 +292,7 @@ void Module3000::updateScene3002() {
}
void Module3000::updateScene3002b() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
switch (_vm->gameState().sceneNum) {
case 1:
if (getGlobalVar(0x01BA1A52)) {
@@ -339,79 +322,51 @@ void Module3000::updateScene3002b() {
}
void Module3000::updateScene3003() {
- _childObject->handleUpdate();
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (_flag && _soundVolume > 1 && frameNumber % 2) {
- _soundVolume--;
- // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
- }
- if (navigationIndex == 0) {
- if (frameNumber == 35) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
- }
- } else if (navigationIndex == 1) {
- if (frameNumber == 55) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
- // TODO Sound1ChList_setVolume(0x48498E46, 70);
- // TODO Sound1ChList_setVolume(0x50399F64, 70);
- }
- }
- }
-#endif
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
// TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
if (_flag) {
_soundVolume = 0;
// TODO Sound1ChList_setVolume(0x90F0D1C3, 0);
}
- if (_moduleDoneStatus == 0) {
+ if (_field20 == 0) {
createScene3004(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
setGlobalVar(0x01BA1A52, 0);
createScene3002(1);
_childObject->handleUpdate();
}
- }
-}
-
-void Module3000::updateScene3004() {
- _childObject->handleUpdate();
+ } else {
#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1()) {
- uint32 frameNumber = navigationScene()->getFrameNumber();
- int navigationIndex = navigationScene()->getIndex();
- if (navigationIndex == 2) {
- if (frameNumber == 40) {
- // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
- }
- if (_flag && _soundVolume < 90 && frameNumber % 2) {
- if (frameNumber == 0)
- _soundVolume = 40;
- else
- _soundVolume++;
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (_flag && _soundVolume > 1 && frameNumber % 2) {
+ _soundVolume--;
// TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
}
+ if (navigationIndex == 0) {
+ if (frameNumber == 35) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x41861371, 0x43A2507F, 0);
+ }
+ } else if (navigationIndex == 1) {
+ if (frameNumber == 55) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x48498E46, 0x50399F64, 0);
+ // TODO Sound1ChList_setVolume(0x48498E46, 70);
+ // TODO Sound1ChList_setVolume(0x50399F64, 70);
+ }
+ }
}
- }
#endif
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
-
- debug("_moduleDoneStatus = %d", _moduleDoneStatus);
-
- if (_moduleDoneStatus == 1) {
+ }
+}
+
+void Module3000::updateScene3004() {
+ if (!updateChild()) {
+ if (_field20 == 1) {
createScene3005(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 3) {
+ } else if (_field20 == 3) {
createScene3011(-1);
_childObject->handleUpdate();
} else if (getGlobalVar(0x09221A62)) {
@@ -421,54 +376,64 @@ void Module3000::updateScene3004() {
createScene3003(1);
_childObject->handleUpdate();
}
+ } else {
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1()) {
+ uint32 frameNumber = navigationScene()->getFrameNumber();
+ int navigationIndex = navigationScene()->getIndex();
+ if (navigationIndex == 2) {
+ if (frameNumber == 40) {
+ // TODO Sound1ChList_sub_407C70(0x81293110, 0x40030A51, 0xC862CA15, 0);
+ }
+ if (_flag && _soundVolume < 90 && frameNumber % 2) {
+ if (frameNumber == 0)
+ _soundVolume = 40;
+ else
+ _soundVolume++;
+ // TODO Sound1ChList_setVolume(0x90F0D1C3, _soundVolume);
+ }
+ }
+ }
+#endif
}
}
void Module3000::updateScene3005() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 0) {
+ if (!updateChild()) {
+ if (_field20 == 0) {
sendMessage(_parentModule, 0x1009, 1);
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
createScene3008(-1);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 2) {
+ } else if (_field20 == 2) {
createScene3004(3);
_childObject->handleUpdate();
}
}
- // NOTE: Skipped resource preloading stuff
}
void Module3000::updateScene3006() {
- _childObject->handleUpdate();
-#if 0 // ALL TODO
- if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
- // TODO Sound1ChList_sub_4080B0(false);
- }
-#endif
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 0) {
+ if (!updateChild()) {
+ if (_field20 == 0) {
createScene3007(0);
- _childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
createScene3004(0);
- _childObject->handleUpdate();
}
+ _childObject->handleUpdate();
+ } else {
+#if 0 // ALL TODO
+ if (navigationScene()->getSoundFlag1() && navigationScene()->getIndex() == 0) {
+ // TODO Sound1ChList_sub_4080B0(false);
+ }
+#endif
}
}
void Module3000::updateScene3007() {
_childObject->handleUpdate();
- if (_moduleDone) {
+ if (_done) {
int areaType = navigationScene()->getNavigationAreaType();
- _moduleDone = false;
+ _done = false;
delete _childObject;
_childObject = NULL;
if (areaType == 4) {
@@ -482,14 +447,9 @@ void Module3000::updateScene3007() {
}
void Module3000::updateScene3009() {
- _childObject->handleUpdate();
- // TODO...
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
_flag = getGlobalVar(0x10938830); // CHECKME
- if (_moduleDoneStatus != 1) {
+ if (_field20 != 1) {
// TODO: Sound1ChList_setSoundValuesMulti(dword_4B7FC8, true, 0, 0, 0, 0):
createScene3005(1);
_childObject->handleUpdate();
@@ -505,15 +465,11 @@ void Module3000::updateScene3009() {
}
void Module3000::updateScene3010() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
- if (_moduleDoneStatus == 0 || _moduleDoneStatus == 2) {
+ if (!updateChild()) {
+ if (_field20 == 0 || _field20 == 2) {
createScene3002(0);
_childObject->handleUpdate();
- } else if (_moduleDoneStatus == 1) {
+ } else if (_field20 == 1) {
createScene3002b(-1);
_childObject->handleUpdate();
}
@@ -521,11 +477,7 @@ void Module3000::updateScene3010() {
}
void Module3000::updateScene3011() {
- _childObject->handleUpdate();
- if (_moduleDone) {
- _moduleDone = false;
- delete _childObject;
- _childObject = NULL;
+ if (!updateChild()) {
createScene3004(3);
_childObject->handleUpdate();
}
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 64a4b76817..63e5261207 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -35,8 +35,6 @@ public:
Module3000(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~Module3000();
protected:
- bool _moduleDone;
- int _moduleDoneStatus;
int _soundVolume;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp
index 828c0dd08e..9dc1d8bc7e 100644
--- a/engines/neverhood/sprite.cpp
+++ b/engines/neverhood/sprite.cpp
@@ -117,12 +117,8 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfac
StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height)
: Sprite(vm, 0), _spriteResource(vm) {
-
- debug("StaticSprite::StaticSprite(%08X)", fileHash);
-
_name = "StaticSprite";
init(fileHash, surfacePriority, x, y, width, height);
-
}
void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) {
diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h
index 16d79319fd..ff1830469d 100644
--- a/engines/neverhood/sprite.h
+++ b/engines/neverhood/sprite.h
@@ -31,8 +31,8 @@
namespace Neverhood {
#define SetSpriteCallback(callback) _spriteUpdateCb = static_cast <void (Sprite::*)(void)> (callback); debug(2, "SetSpriteCallback(" #callback ")"); _spriteUpdateCbName = #callback
-#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterX(" #callback ")")
-#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug("SetFilterY(" #callback ")")
+#define SetFilterX(callback) _filterXCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug(2, "SetFilterX(" #callback ")")
+#define SetFilterY(callback) _filterYCb = static_cast <int16 (Sprite::*)(int16)> (callback); debug(2, "SetFilterY(" #callback ")")
const int16 kDefPosition = -32768;
@@ -99,9 +99,9 @@ protected:
void init(uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0);
};
-#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
-#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback2(" #callback ")"); _callback2CbName = #callback
-#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug("SetAnimationCallback3(" #callback ")"); _callback3CbName = #callback
+#define SetAnimationCallback1(callback) _callback1Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback1(" #callback ")"); _callback1CbName = #callback
+#define SetAnimationCallback2(callback) _callback2Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback2(" #callback ")"); _callback2CbName = #callback
+#define SetAnimationCallback3(callback) _callback3Cb = static_cast <void (AnimatedSprite::*)(void)> (callback); debug(2, "SetAnimationCallback3(" #callback ")"); _callback3CbName = #callback
#define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback)
class AnimatedSprite : public Sprite {