aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/neverhood/gamemodule.cpp2
-rw-r--r--engines/neverhood/module1200.cpp34
-rw-r--r--engines/neverhood/module1200.h2
-rw-r--r--engines/neverhood/module1300.cpp60
-rw-r--r--engines/neverhood/module1400.cpp58
-rw-r--r--engines/neverhood/module1400.h8
-rw-r--r--engines/neverhood/module1600.cpp107
-rw-r--r--engines/neverhood/module1600.h19
-rw-r--r--engines/neverhood/module1700.cpp8
-rw-r--r--engines/neverhood/module2200.cpp72
-rw-r--r--engines/neverhood/module3000.cpp50
-rw-r--r--engines/neverhood/module3000.h2
12 files changed, 260 insertions, 162 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 854a5cc1fe..960e732ded 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -276,7 +276,7 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 8;
_vm->gameState().which = 1;
createModule(1600, -1);
#endif
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 83a9b5ccd9..ffb4f206ca 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -766,7 +766,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x9A2C0409);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 3, 1100, 243, 340, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 3, 1100, 243, 340, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
tempSprite = insertStaticSprite(0x03C82530, 100);
@@ -781,7 +781,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x04063110, 500);
topY4 = tempSprite->getY() + 1;
- _class466 = addSprite(new Class466(_vm, getGlobalVar(0x000CF819) && which != 1));
+ _class466 = insertSprite<Class466>(getGlobalVar(0x000CF819) && which != 1);
_class466->setClipRect(0, topY4, 640, 480);
insertStaticSprite(0x400B04B0, 1200);
@@ -792,7 +792,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0xA29223FA, 1200);
x2 = tempSprite->getX() + tempSprite->getDrawRect().width;
- class464 = addSprite(new Class464(_vm));
+ class464 = insertSprite<Class464>();
debug("Scene1201: which = %d", which);
@@ -833,20 +833,18 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
} else {
setBackground(0x40206EC5);
setPalette(0x40206EC5);
- _asRightDoor = addSprite(new AsScene1201RightDoor(_vm, _klayman, which == 2));
+ _asRightDoor = insertSprite<AsScene1201RightDoor>(_klayman, which == 2);
}
if (getGlobalVar(0x000CF819)) {
insertStaticSprite(0x10002ED8, 500);
if (!getGlobalVar(0x0A18CA33)) {
- AsScene1201TntMan *asTntMan;
- asTntMan = new AsScene1201TntMan(_vm, this, _class466, which == 1);
- asTntMan->setClipRect(x1, 0, x2, 480);
- _vm->_collisionMan->addSprite(asTntMan);
- _asTntMan = addSprite(asTntMan);
- tempSprite = addSprite(new Class465(_vm, _asTntMan));
+ _asTntMan = insertSprite<AsScene1201TntMan>(this, _class466, which == 1);
+ _asTntMan->setClipRect(x1, 0, x2, 480);
+ _asTntMan->setRepl(64, 0);
+ _vm->_collisionMan->addSprite(_asTntMan);
+ tempSprite = insertSprite<Class465>(_asTntMan);
tempSprite->setClipRect(x1, 0, x2, 480);
- asTntMan->setRepl(64, 0);
}
uint32 tntIndex = 1;
@@ -859,7 +857,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
clipY2 = topY2;
else
clipY2 = topY3;
- addSprite(new SsScene1201Tnt(_vm, tntIndex, getSubVar(0x10055D14, tntIndex), clipY2));
+ insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(0x10055D14, tntIndex), clipY2);
elemIndex = getSubVar(0x10055D14, tntIndex + 1);
if (kScene1201PointArray[elemIndex].y < 175)
clipY2 = topY1;
@@ -867,7 +865,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
clipY2 = topY2;
else
clipY2 = topY3;
- addSprite(new SsScene1201Tnt(_vm, tntIndex + 1, getSubVar(0x10055D14, tntIndex + 1), clipY2));
+ insertSprite<SsScene1201Tnt>(tntIndex + 1, getSubVar(0x10055D14, tntIndex + 1), clipY2);
tntIndex += 3;
}
@@ -895,7 +893,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
else
clipY2 = topY3;
}
- addSprite(new SsScene1201Tnt(_vm, tntIndex, getSubVar(0x10055D14, tntIndex), clipY2));
+ insertSprite<SsScene1201Tnt>(tntIndex, getSubVar(0x10055D14, tntIndex), clipY2);
tntIndex++;
}
@@ -909,7 +907,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = insertStaticSprite(0x63D400BC, 900);
- _asLeftDoor = addSprite(new AsScene1201LeftDoor(_vm, _klayman));
+ _asLeftDoor = insertSprite<AsScene1201LeftDoor>(_klayman);
_asLeftDoor->setClipRect(x1, tempSprite->getDrawRect().y, tempSprite->getDrawRect().x2(), 480);
if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
@@ -919,12 +917,12 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
_asMatch = NULL;
if (getGlobalVar(0x0112090A) < 3) {
- _asMatch = addSprite(new AsScene1201Match(_vm, this));
+ _asMatch = insertSprite<AsScene1201Match>(this);
_vm->_collisionMan->addSprite(_asMatch);
}
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- _asCreature = addSprite(new AsScene1201Creature(_vm, this, _klayman));
+ _asCreature = insertSprite<AsScene1201Creature>(this, _klayman);
_asCreature->setClipRect(x1, 0, x2, 480);
}
@@ -1131,7 +1129,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse435(0x10ED160A, 20, 620);
for (int i = 0; i < 18; i++) {
- _asTntItems[i] = addSprite(new AsScene1202TntItem(_vm, this, i));
+ _asTntItems[i] = insertSprite<AsScene1202TntItem>(this, i);
_vm->_collisionMan->addSprite(_asTntItems[i]);
}
diff --git a/engines/neverhood/module1200.h b/engines/neverhood/module1200.h
index a34bd958e6..dc8e903472 100644
--- a/engines/neverhood/module1200.h
+++ b/engines/neverhood/module1200.h
@@ -179,7 +179,7 @@ protected:
// TODO ResourceTable _resourceTable1;
// TODO ResourceTable _resourceTable2;
Sprite *_asMatch;
- Sprite *_asTntMan;
+ AsScene1201TntMan *_asTntMan;
Sprite *_asCreature;
Sprite *_class466;
Sprite *_asLeftDoor;
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 75a185b96c..26b61f0e52 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -424,20 +424,20 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x420643C4);
insertMouse433(0x643C0428);
- _class595 = addSprite(new Class595(_vm, this));
+ _class595 = insertSprite<Class595>(this);
_sprite1 = insertStaticSprite(0x942FC224, 300);
_sprite2 = insertStaticSprite(0x70430830, 1200);
_sprite2->setVisible(false);
_sprite3 = insertStaticSprite(0x16E01E20, 1100);
- _asRing1 = addSprite(new AsScene1002Ring(_vm, this, false, 218, 122, _class595->getDrawRect().y, false));
- _asRing2 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x13206309)));
- _asRing3 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false));
- _asRing4 = addSprite(new AsScene1002Ring(_vm, this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x80101B1E)));
- _asRing5 = addSprite(new AsScene1002Ring(_vm, this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false));
+ _asRing1 = insertSprite<AsScene1002Ring>(this, false, 218, 122, _class595->getDrawRect().y, false);
+ _asRing2 = insertSprite<AsScene1002Ring>(this, true, 218 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x13206309));
+ _asRing3 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32, 122, _class595->getDrawRect().y, false);
+ _asRing4 = insertSprite<AsScene1002Ring>(this, true, 218 + 32 + 32 + 32, 132, _class595->getDrawRect().y, getGlobalVar(0x80101B1E));
+ _asRing5 = insertSprite<AsScene1002Ring>(this, false, 218 + 32 + 32 + 32 + 32, 115, _class595->getDrawRect().y, false);
- _asBridge = addSprite(new AsScene1302Bridge(_vm, this));
- _ssFence = addSprite(new SsScene1302Fence(_vm));
+ _asBridge = insertSprite<AsScene1302Bridge>(this);
+ _ssFence = insertSprite<SsScene1302Fence>();
_ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
@@ -450,7 +450,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(0, 0, _sprite3->getDrawRect().x2(), 480);
- _asVenusFlyTrap = addSprite(new AsScene1002VenusFlyTrap(_vm, this, _klayman, true));
+ _asVenusFlyTrap = insertSprite<AsScene1002VenusFlyTrap>(this, _klayman, true);
_vm->_collisionMan->addSprite(_asVenusFlyTrap);
sendEntityMessage(_klayman, 0x2007, _asVenusFlyTrap);
@@ -643,7 +643,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x81A9801D);
if (!getGlobalVar(0xAC00C0D0)) {
- _asBalloon = addSprite(new AsScene1303Balloon(_vm, this));
+ _asBalloon = insertSprite<AsScene1303Balloon>(this);
_vm->_collisionMan->addSprite(_asBalloon);
}
@@ -711,15 +711,15 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xC021006A);
if (getGlobalVar(0xAC00C0D0)) {
- _class545 = addSprite(new Class545(_vm, this, 0, 1100, 278, 347));
+ _class545 = insertSprite<Class545>(this, 0, 1100, 278, 347);
_vm->_collisionMan->addSprite(_class545);
} else {
- _class545 = addSprite(new AnimatedSprite(_vm, 0x80106018, 100, 279, 48));
+ _class545 = insertSprite<AnimatedSprite>(0x80106018, 100, 279, 48);
// TODO _class545->setUpdateDeltaXY();
}
if (!getGlobalVar(0x31C63C51)) {
- _class544 = addSprite(new Class544(_vm, this, 1100, 278, 347));
+ _class544 = insertSprite<Class544>(this, 1100, 278, 347);
_vm->_collisionMan->addSprite(_class544);
} else {
_class544 = NULL;
@@ -893,20 +893,19 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x0311005B);
if (!getGlobalVar(0x13382860)) {
- _class545 = addSprite(new Class545(_vm, this, 2, 1100, 435, 445));
+ _class545 = insertSprite<Class545>(this, 2, 1100, 435, 445);
_vm->_collisionMan->addSprite(_class545);
}
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x404A36A0, 100, 0x440C1000));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x404A36A0, 100, 0x440C1000);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 19, 1100, 359, 445, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 19, 1100, 359, 445, 0x9148A011);
- _asElevatorDoor = new AnimatedSprite(_vm, 0x043B0270, 90, 320, 240);
+ _asElevatorDoor = insertSprite<AnimatedSprite>(0x043B0270, 90, 320, 240);
_asElevatorDoor->setFileHash(0x043B0270, 6, -1);
_asElevatorDoor->setNewHashListIndex(6);
- addSprite(_asElevatorDoor);
- _asElevator = addSprite(new AsScene1306Elevator(_vm, this, _asElevatorDoor));
+ _asElevator = insertSprite<AsScene1306Elevator>(this, _asElevatorDoor);
_sprite1 = insertStaticSprite(0x036A1EE0, 80);
@@ -1309,7 +1308,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint keyIndex = 0; keyIndex < 3; keyIndex++) {
if (getSubVar(0x08D0AB11, keyIndex)) {
- _asKeys[keyIndex] = addSprite(new AsScene1307Key(_vm, this, keyIndex, _clipRects));
+ _asKeys[keyIndex] = insertSprite<AsScene1307Key>(this, keyIndex, _clipRects);
_vm->_collisionMan->addSprite(_asKeys[keyIndex]);
} else {
_asKeys[keyIndex] = NULL;
@@ -1600,21 +1599,21 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x41024202);
insertMouse433(0x24206418);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 17, 1100, 502, 445, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 17, 1100, 502, 445, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (getGlobalVar(0x01023818)) {
- addSprite(new Class513(_vm));
- addSprite(new AnimatedSprite(_vm, 0x461A1490, 200, 235, 429));
+ insertSprite<Class513>();
+ insertSprite<AnimatedSprite>(0x461A1490, 200, 235, 429);
}
_sprite1 = insertStaticSprite(0x0A042060, 1100);
- _class549 = addSprite(new Class549(_vm, this));
- _class593 = addSprite(new Class593(_vm, this));
+ _class549 = insertSprite<Class549>(this);
+ _class593 = insertSprite<Class593>(this);
- _class601_1 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 1)], 0));
- _class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1));
- _class601_2 = addSprite(new Class601(_vm, kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2));
+ _class601_1 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 1)], 0);
+ _class601_2 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 0)], 1);
+ _class601_2 = insertSprite<Class601>(kScene1308FileHashes[getSubVar(0x0C10A000, 2)], 2);
_sprite2 = insertStaticSprite(0x40043120, 995);
_sprite3 = insertStaticSprite(0x43003100, 995);
@@ -1644,7 +1643,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
- _sprite5 = addSprite(new Class592(_vm, this));
+ _sprite5 = insertSprite<Class592>(this);
_sprite4 = insertStaticSprite(0x0101A624, 1100);
_sprite4->setVisible(false);
} else {
@@ -1672,8 +1671,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 4) {
- _class489 = new Class489(_vm, this, _klayman, 0);
- addSprite(_class489);
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
_class489->setClipRect(0, 0, 640, _sprite2->getDrawRect().y2());
_class489->setRepl(64, 0);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 0045064314..37fb354b54 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -667,17 +667,17 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x08221FA5);
insertMouse433(0x21FA108A);
- // TODO _class427 = addSprite(new Class427(_vm, this, 0x980F3124, 0x12192892, 100, 0));
- _class525 = addSprite(new Class525(_vm));
+ // TODO _class427 = insertSprite<Class427>(this, 0x980F3124, 0x12192892, 100, 0);
+ _class525 = insertSprite<Class525>();
if (!getGlobalVar(0x01023818)) {
- _class526 = addSprite(new Class526(_vm, _class525));
- _class527 = addSprite(new Class527(_vm, _class525));
+ _class526 = insertSprite<Class526>(_class525);
+ _class527 = insertSprite<Class527>(_class525);
}
_sprite3 = insertStaticSprite(0xA82BA811, 1100);
insertStaticSprite(0x0A116C60, 1100);
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0xB84B1100, 100, 0));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0xB84B1100, 100, 0);
_sprite1 = insertStaticSprite(0x38EA100C, 1005);
_sprite2 = insertStaticSprite(0x98D0223C, 1200);
_sprite2->setVisible(false);
@@ -701,7 +701,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 2) {
- _class489 = addSprite(new Class489(_vm, this, _klayman, _class525));
+ _class489 = insertSprite<Class489>(this, _klayman, _class525);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 6) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -719,11 +719,11 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setClipRect(_sprite3->getDrawRect().x, 0, 640, 480);
- if (which == 0 && _class489 && _class489->hasMessageHandler()) {
+ if (which == 0 && _class489) {
sendMessage(_class489, 0x482B, 0);
}
- _class528 = addSprite(new Class528(_vm, _klayman, which == 1));
+ _class528 = insertSprite<Class528>(_klayman, which == 1);
}
@@ -746,7 +746,7 @@ uint32 Scene1401::handleMessage(int messageNum, const MessageParam &param, Entit
} else if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssButton);
} else if (param.asInteger() == 0x01C66840) {
- if (_class528->hasMessageHandler() && sendMessage(_class528, 0x2001, 0) != 0) {
+ if (sendMessage(_class528, 0x2001, 0) != 0) {
setMessageList(0x004B6690);
} else {
setMessageList(0x004B66B0);
@@ -882,9 +882,9 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_palette->addPalette(0x91D3A391, 0, 64, 0);
insertMouse433(0x482F4239);
- _class454_1 = addSprite(new Class454(_vm, 0x15402D64, 1100));
- _class454_2 = addSprite(new Class454(_vm, 0x10A02120, 1100));
- _class454_3 = addSprite(new Class454(_vm, 0x60882BE0, 1100));
+ _class454_1 = insertSprite<Class454>(0x15402D64, 1100);
+ _class454_2 = insertSprite<Class454>(0x10A02120, 1100);
+ _class454_3 = insertSprite<Class454>(0x60882BE0, 1100);
if (getGlobalVar(0x70A1189C))
setRectList(0x004B0C48);
@@ -895,7 +895,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
if (!getGlobalVar(0x70A1189C)) {
- _class482 = addSprite(new Class482(_vm, this, 0));
+ _class482 = insertSprite<Class482>(this, 0);
}
} else if (which == 1) {
insertKlayman<KmScene1402>(42, 391);
@@ -905,18 +905,18 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
if (getGlobalVar(0x70A1189C)) {
- _class482 = addSprite(new Class482(_vm, this, 1));
+ _class482 = insertSprite<Class482>(this, 1);
clearRectList();
showMouse(false);
sub428220();
} else {
- _class482 = addSprite(new Class482(_vm, this, 0));
+ _class482 = insertSprite<Class482>(this, 0);
}
} else {
insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(0x70A1189C)) {
- _class482 = addSprite(new Class482(_vm, this, 2));
+ _class482 = insertSprite<Class482>(this, 2);
sub428220();
}
}
@@ -926,7 +926,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x4A105B3) == 1) {
- _class489 = addSprite(new Class489(_vm, this, _klayman, 0));
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x4A10F33) == 4) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -1268,7 +1268,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x00442225);
insertMouse435(0x4222100C, 20, 620);
- _asMouse = addSprite(new AsScene1407Mouse(_vm, this));
+ _asMouse = insertSprite<AsScene1407Mouse>(this);
_ssResetButton = insertStaticSprite(0x12006600, 100);
_ssResetButton->setVisible(false);
@@ -1340,13 +1340,11 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_class401_3 = insertStaticSprite(0x08742271, 995);
- _asTape1 = new AsScene1201Tape(_vm, this, 12, 1100, 201, 468, 0x9148A011);
- addSprite(_asTape1);
+ _asTape1 = insertSprite<AsScene1201Tape>(this, 12, 1100, 201, 468, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape1);
_asTape1->setRepl(64, 0);
- _asTape2 = new AsScene1201Tape(_vm, this, 16, 1100, 498, 468, 0x9048A093);
- addSprite(_asTape2);
+ _asTape2 = insertSprite<AsScene1201Tape>(this, 16, 1100, 498, 468, 0x9048A093);
_vm->_collisionMan->addSprite(_asTape2);
_asTape2->setRepl(64, 0);
@@ -1360,10 +1358,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_klayman->setRepl(64, 0);
if (getGlobalVar(0x04A105B3) == 4) {
- Class489 *class489;
- class489 = new Class489(_vm, this, _klayman, 0);
- _class489 = class489;
- addSprite(_class489);
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 4) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -1372,7 +1367,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B1F70);
}
_class489->setClipRect(0, 0, 640, _class401_2->getDrawRect().y2());
- class489->setRepl(64, 0);
+ _class489->setRepl(64, 0);
}
}
@@ -1454,13 +1449,13 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0xB006BAC8);
if (getGlobalVar(0x13382860) == 5) {
- _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
+ _class545 = insertSprite<Class545>(this, 2, 1100, 267, 411);
_vm->_collisionMan->addSprite(_class545);
}
_sprite1 = insertStaticSprite(0x1900A1F8, 1100);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 14, 1100, 281, 411, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 14, 1100, 281, 411, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
@@ -1483,7 +1478,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (getGlobalVar(0x04A105B3) == 3) {
- _class489 = addSprite(new Class489(_vm, this, _klayman, 0));
+ _class489 = insertSprite<Class489>(this, _klayman, (Sprite*)NULL);
_vm->_collisionMan->addSprite(_class489);
if (getGlobalVar(0x04A10F33) == 0) {
sendEntityMessage(_klayman, 0x1014, _class489);
@@ -1673,8 +1668,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which)
}
for (uint32 index = 0; index < 48; index++) {
- _tiles[index] = new AsScene1405Tile(_vm, this, index);
- addSprite(_tiles[index]);
+ _tiles[index] = insertSprite<AsScene1405Tile>(this, index);
_vm->_collisionMan->addSprite(_tiles[index]);
if (getSubVar(0xCCE0280F, index))
_tilesLeft--;
diff --git a/engines/neverhood/module1400.h b/engines/neverhood/module1400.h
index 7b4d95761b..d256b82134 100644
--- a/engines/neverhood/module1400.h
+++ b/engines/neverhood/module1400.h
@@ -143,7 +143,7 @@ public:
protected:
bool _flag;
Sprite *_class427;
- Sprite *_class489;
+ Class489 *_class489;
Sprite *_class525;
Sprite *_class526;
Sprite *_class527;
@@ -184,7 +184,7 @@ protected:
Sprite *_class454_2;
Sprite *_class454_3;
Sprite *_class482;
- Sprite *_class489;
+ Class489 *_class489;
bool _flag;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
@@ -237,7 +237,7 @@ protected:
Sprite *_class401_3;
AsScene1201Tape *_asTape1;
AsScene1201Tape *_asTape2;
- Sprite *_class489;
+ Class489 *_class489;
bool _flag;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};
@@ -251,7 +251,7 @@ public:
protected:
Sprite *_sprite1;
Sprite *_asTape;
- Sprite *_class489;
+ Class489 *_class489;
Sprite *_class545;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index a23e7101b4..94b836a26f 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -83,7 +83,7 @@ void Module1600::createScene(int sceneNum, int which) {
_childObject = new Scene1608(_vm, this, which);
break;
case 8:
-//TODO _childObject = new Scene1609(_vm, this, which);
+ _childObject = new Scene1609(_vm, this, which);
break;
case 1001:
if (getGlobalVar(0xA0808898) == 1) {
@@ -1384,4 +1384,109 @@ uint32 Scene1608::handleMessage44D510(int messageNum, const MessageParam &param,
return 0;
}
+Scene1609::Scene1609(NeverhoodEngine *vm, Module *parentModule, int which)
+ : Scene(vm, parentModule, true), _soundResource(vm), _countdown1(1),
+ _index1(0), _index3(0), _flag5(true), _flag6(false) {
+
+ // TODO _vm->gameModule()->initScene3011Vars();
+ _index2 = getGlobalVar(0x2414C2F2);
+
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene1609::handleMessage);
+ SetUpdateHandler(&Scene1609::update);
+
+ setBackground(0x92124A14);
+ setPalette(0x92124A14);
+
+ for (int i = 0; i < 12; i++)
+ _asSymbols[i] = insertSprite<AsScene3011Symbol>(i, false);
+
+ _ssButton = insertSprite<SsScene3011Button>(this, true);
+ _vm->_collisionMan->addSprite(_ssButton);
+
+ insertMouse435(0x24A10929, 20, 620);
+
+ _soundResource.load(0x68E25540);
+
+}
+
+void Scene1609::update() {
+ if (!_flag6 && _countdown1 != 0 && (--_countdown1 == 0)) {
+ if (_flag5) {
+ _index1++;
+ if (_index1 >= 12)
+ _index1 = 0;
+ _asSymbols[_index3]->change(_index1 + 12, _index1 == (int)getSubVar(0x04909A50, _index2));
+ _flag5 = false;
+ _countdown1 = 36;
+ } else {
+ _asSymbols[_index3]->hide();
+ _flag5 = true;
+ _countdown1 = 12;
+ }
+ }
+ if (_flag6 && !_soundResource.isPlaying()) {
+ leaveScene(1);
+ }
+ Scene::update();
+}
+
+uint32 Scene1609::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
+ Scene::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x0001:
+ // TODO: Debug stuff
+ if (param.asPoint().x <= 20 || param.asPoint().x >= 620)
+ leaveScene(0);
+ break;
+ // TODO: Debug stuff
+ case 0x2000:
+ if (!_flag6) {
+ if (_flag5)
+ _asSymbols[_index3]->change(_index1 + 12, false);
+ _asSymbols[_index3]->stopSound();
+ _index3++;
+ if (_index3 >= 12) {
+ if (testVars()) {
+ _soundResource.play();
+ setGlobalVar(0x2C531AF8, 1);
+ _flag6 = true;
+ } else {
+ _index3 = 0;
+ for (int i = 0; i < 12; i++)
+ _asSymbols[i]->hide();
+ }
+ }
+ _flag5 = true;
+ _countdown1 = 1;
+ }
+ break;
+ }
+ return 0;
+}
+
+bool Scene1609::testVars() {
+ int index1 = 0;
+ do {
+ int cmpIndex = _asSymbols[0]->getIndex();
+ if (!_asSymbols[0]->getFlag1())
+ cmpIndex -= 12;
+ if ((int)getSubVar(0x04909A50, index1) == cmpIndex)
+ break;
+ index1++;
+ } while(1);
+ for (int index2 = 0; index2 < 12; index2++) {
+ int cmpIndex = _asSymbols[index2]->getIndex();
+ if (!_asSymbols[index2]->getFlag1())
+ cmpIndex -= 12;
+ if ((int)getSubVar(0x04909A50, index1) != cmpIndex)
+ return false;
+ _index1++;
+ if (_index1 >= 12)
+ _index1 = 0;
+ _index2++;
+ }
+ return true;
+}
+
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1600.h b/engines/neverhood/module1600.h
index 9af1a19b39..1096377938 100644
--- a/engines/neverhood/module1600.h
+++ b/engines/neverhood/module1600.h
@@ -26,6 +26,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
#include "neverhood/scene.h"
+#include "neverhood/module3000.h"
namespace Neverhood {
@@ -171,6 +172,24 @@ protected:
uint32 handleMessage44D510(int messageNum, const MessageParam &param, Entity *sender);
};
+class Scene1609 : public Scene {
+public:
+ Scene1609(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ SoundResource _soundResource;
+ Sprite *_ssButton;
+ AsScene3011Symbol *_asSymbols[12];
+ int _index1;
+ int _index2;
+ int _index3;
+ int _countdown1;
+ bool _flag5;
+ bool _flag6;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
+ bool testVars();
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1600_H */
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 4426a7eb76..ae7a7fdc7a 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -195,13 +195,13 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x18222039);
- addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0));
- addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1));
- addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2));
+ insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0);
+ insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1);
+ insertSprite<Class602>(kScene1705FileHashes[getSubVar(0x0A4C0A9A, 2)], 2);
_sprite = insertStaticSprite(0x31313A22, 1100);
- _class606 = addSprite(new Class606(_vm, this, 15, 1100, 238, 439, 0x02363852));
+ _class606 = insertSprite<Class606>(this, 15, 1100, 238, 439, 0x02363852);
_vm->_collisionMan->addSprite(_class606);
which = 4;
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 3751a6fe8a..97729cbb00 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -514,14 +514,14 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x40008208);
insertMouse433(0x0820C408);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 7, 1100, 459, 432, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 7, 1100, 459, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _ssDoorButton = addSprite(new Class426(_vm, this, 0xE4A43E29, 0xE4A43E29, 100, 0));
+ _ssDoorButton = insertSprite<Class426>(this, 0xE4A43E29, 0xE4A43E29, 100, 0);
for (uint32 i = 0; i < 9; i++) {
if ((int16)getSubVar(0x484498D0, i) >= 0) {
- addSprite(new Class444(_vm, i, (int16)getSubVar(0x484498D0, i)));
+ insertSprite<Class444>(i, (int16)getSubVar(0x484498D0, i));
}
}
@@ -551,11 +551,11 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
insertKlayman<KmScene2201>(300, 427, &_rect1, 2);
setMessageList(0x004B8118);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else if (which == 1) {
insertKlayman<KmScene2201>(412, 393, &_rect1, 2);
setMessageList(0x004B8130);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
insertKlayman<KmScene2201>(379, 427, &_rect1, 2);
@@ -564,15 +564,15 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
insertKlayman<KmScene2201>(261, 427, &_rect1, 2);
}
setMessageList(0x004B8178);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, false);
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
insertKlayman<KmScene2201>(pt.x, pt.y, &_rect1, 2);
setMessageList(0x004B8120);
- _asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, true));
+ _asDoor = insertSprite<AsScene2201Door>(_klayman, _doorLightSprite, true);
}
- addSprite(new AsScene2201CeilingFan(_vm));
+ insertSprite<AsScene2201CeilingFan>();
// TODO Sound1ChList_addSoundResource(0x04106220, 0x81212040, true);
@@ -598,7 +598,7 @@ uint32 Scene2201::handleMessage(int messageNum, const MessageParam &param, Entit
if (param.asInteger() == 0x402064D8) {
sendEntityMessage(_klayman, 0x1014, _ssDoorButton);
} else if (param.asInteger() == 0x35803198) {
- if (_asDoor->hasMessageHandler() && sendMessage(_asDoor, 0x2000, 0)) {
+ if (sendMessage(_asDoor, 0x2000, 0)) {
setMessageList(0x004B81A0);
} else {
setMessageList(0x004B81B8);
@@ -904,7 +904,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which)
for (uint32 index = 0; index < 9; index++) {
int16 value = (int16)getSubVar(0x484498D0, index);
if (value >= 0) {
- Sprite *puzzleTileSprite = addSprite(new SsScene2202PuzzleTile(_vm, this, index, value));
+ Sprite *puzzleTileSprite = insertSprite<SsScene2202PuzzleTile>(this, index, value);
_vm->_collisionMan->addSprite(puzzleTileSprite);
}
}
@@ -1128,15 +1128,15 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setHitRects(0x004B8320);
if (getGlobalVar(0x13382860) == 1) {
- _class545 = addSprite(new Class545(_vm, this, 2, 1100, 282, 432));
+ _class545 = insertSprite<Class545>(this, 2, 1100, 282, 432);
_vm->_collisionMan->addSprite(_class545);
}
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 1, 1100, 435, 432, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 1, 1100, 435, 432, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _asLeftDoor = addSprite(new AsScene2203Door(_vm, this, 0));
- _asRightDoor = addSprite(new AsScene2203Door(_vm, this, 1));
+ _asLeftDoor = insertSprite<AsScene2203Door>(this, 0);
+ _asRightDoor = insertSprite<AsScene2203Door>(this, 1);
_ssSmallLeftDoor = insertStaticSprite(0x542CC072, 1100);
_ssSmallRightDoor = insertStaticSprite(0x0A2C0432, 1100);
@@ -1280,21 +1280,19 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x0008028D);
addEntity(_palette);
insertMouse433(0x80289008);
- _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0);
- addSprite(_ssLightSwitch);
+ _ssLightSwitch = insertSprite<Class426>(this, 0x2D339030, 0x2D309030, 100, 0);
} else {
_isLightOn = false;
setBackground(0xD00A028D);
setPalette(0xD00A028D);
addEntity(_palette);
insertMouse433(0xA0289D08);
- _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0);
- addSprite(_ssLightSwitch);
+ _ssLightSwitch = insertSprite<Class426>(this, 0x2D339030, 0xDAC86E84, 100, 0);
}
_palette->addBasePalette(0xD00A028D, 0, 256, 0);
- _ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
+ _ssDoorFrame = insertSprite<SsScene2205DoorFrame>();
if (which < 0) {
insertKlayman<KmScene2205>(320, 417);
@@ -1533,25 +1531,25 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0x2201266A, 100);
_sprite2 = insertStaticSprite(0x3406A333, 300);
_sprite3 = insertStaticSprite(0x24A223A2, 100);
- _sprite4 = addSprite(new Class603(_vm, 0x26133023));
+ _sprite4 = insertSprite<Class603>(0x26133023);
_sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8AF8);
- _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x0E038022, 100, 0));
+ _sprite5 = insertSprite<SsCommonButtonSprite>(this, 0x0E038022, 100, 0);
insertMouse433(0x83212411);
- _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x5E00E262));
- _class604 = addSprite(new Class604(_vm, 0x085E25E0));
+ _class607 = insertSprite<Class607>(this, 1100, /*464, 433, */0x5E00E262);
+ _class604 = insertSprite<Class604>(0x085E25E0);
} else {
fileHash = 0xE0102A45;
_sprite1 = insertStaticSprite(0x1C1106B8, 100);
_sprite2 = insertStaticSprite(0x020462E0, 300);
_sprite3 = insertStaticSprite(0x900626A2, 100);
- _sprite4 = addSprite(new Class603(_vm, 0x544822A8));
+ _sprite4 = insertSprite<Class603>(0x544822A8);
_sprite4->setClipRect(_sprite2->getDrawRect().x, 0, 640, 480);
setRectList(0x004B8B58);
- _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x16882608, 100, 0));
+ _sprite5 = insertSprite<SsCommonButtonSprite>(this, 0x16882608, 100, 0);
insertMouse433(0x02A41E09);
- _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x52032563));
- _class604 = addSprite(new Class604(_vm, 0x317831A0));
+ _class607 = insertSprite<Class607>(this, 1100, /*464, 433, */0x52032563);
+ _class604 = insertSprite<Class604>(0x317831A0);
}
_class604->setClipRect(_sprite2->getDrawRect().x, 0, _sprite3->getDrawRect().x2(), _sprite1->getDrawRect().y2());
@@ -2031,7 +2029,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
setMessageList(0x004B38E8);
- _asElevator = addSprite(new AsScene2207Elevator(_vm, this));
+ _asElevator = insertSprite<AsScene2207Elevator>(this);
if (getGlobalVar(0x4D080E54)) {
@@ -2043,19 +2041,19 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100);
_ssMaskPart3 = insertStaticSprite(0x0043B038, 1100);
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 4, 1100, 277, 428, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 4, 1100, 277, 428, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
- _asLever = addSprite(new AsScene2207Lever(_vm, this, 527, 333, 0));
+ _asLever = insertSprite<AsScene2207Lever>(this, 527, 333, 0);
_vm->_collisionMan->addSprite(_asLever);
- _asWallRobotAnimation = addSprite(new AsScene2207WallRobotAnimation(_vm, this));
- _asWallCannonAnimation = addSprite(new AsScene2207WallCannonAnimation(_vm));
+ _asWallRobotAnimation = insertSprite<AsScene2207WallRobotAnimation>(this);
+ _asWallCannonAnimation = insertSprite<AsScene2207WallCannonAnimation>();
_asWallRobotAnimation->setVisible(false);
_asWallCannonAnimation->setVisible(false);
- _ssButton = addSprite(new SsCommonButtonSprite(_vm, this, 0x2C4061C4, 100, 0));
+ _ssButton = insertSprite<SsCommonButtonSprite>(this, 0x2C4061C4, 100, 0);
_asLever->setClipRect(0, 0, _ssMaskPart3->getDrawRect().x2(), 480);
_klayman->setClipRect(0, _ssMaskPart1->getDrawRect().y, 640, _ssMaskPart2->getDrawRect().y2());
@@ -2071,9 +2069,9 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
_ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200);
- addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0));
- addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1));
- addSprite(new SsScene2207Symbol(_vm, kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2));
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 0)], 0);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 1)], 1);
+ insertSprite<SsScene2207Symbol>(kScene2207FileHashes[getSubVar(0x00504B86, 2)], 2);
_asTape = NULL;
_asLever = NULL;
@@ -2444,7 +2442,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B3E18);
}
- _asTape = addSprite(new AsScene1201Tape(_vm, this, 10, 1100, 464, 435, 0x9148A011));
+ _asTape = insertSprite<AsScene1201Tape>(this, 10, 1100, 464, 435, 0x9148A011);
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp
index f645fb475b..d979bbb7a8 100644
--- a/engines/neverhood/module3000.cpp
+++ b/engines/neverhood/module3000.cpp
@@ -735,15 +735,10 @@ AsScene3009Symbol::AsScene3009Symbol(NeverhoodEngine *vm, Scene3009 *parentScene
updatePosition();
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene3009Symbol::handleMessage);
-
- _ssArrowPrev = new SsScene3009SymbolArrow(_vm, this, _index * 2 + 0);
- _parentScene->addSprite(_ssArrowPrev);
+ _ssArrowPrev = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _index * 2 + 0);
_vm->_collisionMan->addSprite(_ssArrowPrev);
-
- _ssArrowNext = new SsScene3009SymbolArrow(_vm, this, _index * 2 + 1);
- _parentScene->addSprite(_ssArrowNext);
+ _ssArrowNext = _parentScene->insertSprite<SsScene3009SymbolArrow>(this, _index * 2 + 1);
_vm->_collisionMan->addSprite(_ssArrowNext);
-
}
uint32 AsScene3009Symbol::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
@@ -798,15 +793,13 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0xD000420C);
insertMouse435(0x04208D08, 20, 620);
- _ssFireCannonButton = addSprite(new SsScene3009FireCannonButton(_vm, this));
+ _ssFireCannonButton = insertSprite<SsScene3009FireCannonButton>(this);
_vm->_collisionMan->addSprite(_ssFireCannonButton);
- _asVerticalIndicator = new AsScene3009VerticalIndicator(_vm, this, _cannonLocation);
- addSprite(_asVerticalIndicator);
+ _asVerticalIndicator = insertSprite<AsScene3009VerticalIndicator>(this, _cannonLocation);
_vm->_collisionMan->addSprite(_asVerticalIndicator);
- _asHorizontalIndicator = new AsScene3009HorizontalIndicator(_vm, this, _cannonLocation);
- addSprite(_asHorizontalIndicator);
+ _asHorizontalIndicator = insertSprite<AsScene3009HorizontalIndicator>(this, _cannonLocation);
_vm->_collisionMan->addSprite(_asHorizontalIndicator);
if (_cannonLocation != 0 && _cannonLocation != 8 && _cannonLocation != 9 && _cannonLocation != 10) {
@@ -826,16 +819,12 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x8540252C, 400);
for (int i = 0; i < 2; i++) {
- _ssSymbolEdges[i] = new SsScene3009SymbolEdges(_vm, i);
- addSprite(_ssSymbolEdges[i]);
- _ssTargetLines[i] = new SsScene3009TargetLine(_vm, i);
- addSprite(_ssTargetLines[i]);
+ _ssSymbolEdges[i] = insertSprite<SsScene3009SymbolEdges>(i);
+ _ssTargetLines[i] = insertSprite<SsScene3009TargetLine>(i);
}
-
for (int i = 0; i < 6; i++) {
- _asSymbols[i] = new AsScene3009Symbol(_vm, this, i);
- addSprite(_asSymbols[i]);
+ _asSymbols[i] = insertSprite<AsScene3009Symbol>(this, i);
if (i < 3)
_correctSymbols[i] = getSubVar(0x00504B86, i);
else
@@ -1294,10 +1283,8 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x80802626);
for (int i = 0; i < 3; i++) {
- _asDeadBolts[i] = new AsScene3010DeadBolt(_vm, this, i, which == 1);//CHECKME
- addSprite(_asDeadBolts[i]);
- _ssDeadBoltButtons[i] = new SsScene3010DeadBoltButton(_vm, this, i, initCountdown, which == 1);//CHECKME
- addSprite(_ssDeadBoltButtons[i]);
+ _asDeadBolts[i] = insertSprite<AsScene3010DeadBolt>(this, i, which == 1);//CHECKME
+ _ssDeadBoltButtons[i] = insertSprite<SsScene3010DeadBoltButton>(this, i, initCountdown, which == 1);//CHECKME
_vm->_collisionMan->addSprite(_ssDeadBoltButtons[i]);
if (getSubVar(0x14800353, kScene3010ButtonNameHashes[i]))
initCountdown++;
@@ -1533,28 +1520,25 @@ void AsScene3011Symbol::change(int index, bool flag) {
Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _updateStatus(0), _buttonClicked(false), _index2(0) {
- _surfaceFlag = true;
-
// TODO _vm->gameModule()->initScene3011Vars();
_index1 = getGlobalVar(0x2414C2F2);
+ _surfaceFlag = true;
+ SetMessageHandler(&Scene3011::handleMessage);
+ SetUpdateHandler(&Scene3011::update);
+
setBackground(0x92124A04);
setPalette(0xA4070114);
addEntity(_palette);
insertMouse435(0x24A00929, 20, 620);
- for (int i = 0; i < 12; i++) {
- _asSymbols[i] = new AsScene3011Symbol(_vm, i, true);
- addSprite(_asSymbols[i]);
- }
+ for (int i = 0; i < 12; i++)
+ _asSymbols[i] = insertSprite<AsScene3011Symbol>(i, true);
- _ssButton = addSprite(new SsScene3011Button(_vm, this, true));
+ _ssButton = insertSprite<SsScene3011Button>(this, true);
_vm->_collisionMan->addSprite(_ssButton);
- SetUpdateHandler(&Scene3011::update);
- SetMessageHandler(&Scene3011::handleMessage);
-
}
void Scene3011::update() {
diff --git a/engines/neverhood/module3000.h b/engines/neverhood/module3000.h
index 2764c83490..2e25a0dec1 100644
--- a/engines/neverhood/module3000.h
+++ b/engines/neverhood/module3000.h
@@ -236,6 +236,8 @@ public:
void hide();
void stopSound();
void change(int index, bool flag);
+ bool getFlag1() { return _flag1; }
+ int getIndex() { return _index; }
protected:
SoundResource _soundResource1;
SoundResource _soundResource2;