aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorjohndoe1232011-09-20 09:39:24 +0000
committerWillem Jan Palenstijn2013-05-08 20:39:40 +0200
commitabf78e07eee50df3bd588c924d3c2ddf35a0e956 (patch)
tree12ceb602c9e016eaf0d2eff0edd390923268cb81 /engines
parent9aff6337bcfa95ba6ef6c17c9e018470f81407b4 (diff)
downloadscummvm-rg350-abf78e07eee50df3bd588c924d3c2ddf35a0e956.tar.gz
scummvm-rg350-abf78e07eee50df3bd588c924d3c2ddf35a0e956.tar.bz2
scummvm-rg350-abf78e07eee50df3bd588c924d3c2ddf35a0e956.zip
NEVERHOOD: Replace InsertKlayman macros with template functions (still weird but nicer)
Diffstat (limited to 'engines')
-rw-r--r--engines/neverhood/gamemodule.cpp4
-rw-r--r--engines/neverhood/klayman.cpp23
-rw-r--r--engines/neverhood/klayman.h10
-rw-r--r--engines/neverhood/module1000.cpp30
-rw-r--r--engines/neverhood/module1200.cpp16
-rw-r--r--engines/neverhood/module1300.cpp40
-rw-r--r--engines/neverhood/module1400.cpp30
-rw-r--r--engines/neverhood/module1700.cpp12
-rw-r--r--engines/neverhood/module2000.cpp10
-rw-r--r--engines/neverhood/module2200.cpp66
-rw-r--r--engines/neverhood/scene.cpp4
-rw-r--r--engines/neverhood/scene.h37
12 files changed, 147 insertions, 135 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 8cdd98ed32..3beb32580f 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -270,8 +270,8 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 12;
- createModule(3000, -1);
+ _vm->gameState().sceneNum = 1;
+ createModule(1000, -1);
#endif
}
diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp
index b5d266e30f..4d4d9c4aa4 100644
--- a/engines/neverhood/klayman.cpp
+++ b/engines/neverhood/klayman.cpp
@@ -2115,19 +2115,14 @@ uint32 KmScene1001::handleMessage44FA00(int messageNum, const MessageParam &para
// KmScene1002
-KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL),
+KmScene1002::KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _otherSprite(NULL), _class599(class599), _ssLadderArch(ssLadderArch),
_status(0) {
setKlaymanTable1();
}
-void KmScene1002::init(Sprite *class599, Sprite *ssLadderArch) {
- _class599 = class599;
- _ssLadderArch = ssLadderArch;
-}
-
void KmScene1002::xUpdate() {
if (_x >= 250 && _x <= 435 && _y >= 420) {
if (_status == 0) {
@@ -2694,18 +2689,14 @@ void KmScene1004::sub478170() {
// KmScene1201
-KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
- : Klayman(vm, parentScene, x, y, 1000, 1000), _countdown(0) {
+KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
+ : Klayman(vm, parentScene, x, y, 1000, 1000), _class464(class464), _countdown(0) {
// TODO setKlaymanTable(dword_4AEF10, 3);
_flagF6 = true;
}
-void KmScene1201::init(Entity *class464) {
- _class464 = class464;
-}
-
uint32 KmScene1201::xHandleMessage(int messageNum, const MessageParam &param) {
switch (messageNum) {
case 0x4001:
@@ -3878,7 +3869,7 @@ void KmScene2001::sub440270() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}
-KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
+KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount)
// TODO: NRect *rect1, int16 unk in Klayman ctor
: Klayman(vm, parentScene, x, y, 1000, 1000) {
@@ -3886,10 +3877,6 @@ KmScene2201::KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int1
_flagF6 = false;
}
-void KmScene2201::init(NRect *clipRects, int clipRectsCount) {
- // TODO
-}
-
uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam &param) {
switch (messageNum) {
case 0x4001:
diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h
index 3f15b8fb28..a4d355726b 100644
--- a/engines/neverhood/klayman.h
+++ b/engines/neverhood/klayman.h
@@ -44,7 +44,6 @@ struct KlaymanTableItem {
class Klayman : public AnimatedSprite {
public:
Klayman(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, int surfacePriority = 1000, int objectPriority = 1000, NRectArray *clipRects = NULL);
- void init() { }
void update();
@@ -262,8 +261,7 @@ protected:
class KmScene1002 : public Klayman {
public:
- KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(Sprite *class599, Sprite *ssLadderArch);
+ KmScene1002(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Sprite *class599, Sprite *ssLadderArch);
protected:
Sprite *_class599;
Sprite *_ssLadderArch;
@@ -309,8 +307,7 @@ protected:
class KmScene1201 : public Klayman {
public:
- KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(Entity *class464);
+ KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464);
protected:
Entity *_class464;
int _countdown;
@@ -431,8 +428,7 @@ protected:
class KmScene2201 : public Klayman {
public:
- KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
- void init(NRect *clipRects, int clipRectsCount);
+ KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam &param);
};
diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp
index e160a7184d..14bc4a41ea 100644
--- a/engines/neverhood/module1000.cpp
+++ b/engines/neverhood/module1000.cpp
@@ -338,7 +338,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1001::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B4860);
+ setHitRects(0x004B4860);
_surfaceFlag = false;
setBackground(0x4086520E);
setPalette(0x4086520E);
@@ -346,24 +346,24 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
setRectList(0x004B49F0);
- InsertKlayman(KmScene1001, 200, 433);
+ insertKlayman<KmScene1001>(200, 433);
setMessageList(0x004B4888);
} else if (which == 1) {
setRectList(0x004B49F0);
- InsertKlayman(KmScene1001, 640, 433);
+ insertKlayman<KmScene1001>(640, 433);
setMessageList(0x004B4898);
} else if (which == 2) {
setRectList(0x004B49F0);
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene1001, 390, 433);
+ insertKlayman<KmScene1001>(390, 433);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene1001, 300, 433);
+ insertKlayman<KmScene1001>(300, 433);
}
setMessageList(0x004B4970);
} else {
setRectList(0x004B4A00);
- InsertKlayman(KmScene1001, 200, 433);
+ insertKlayman<KmScene1001>(200, 433);
setMessageList(0x004B4890);
}
@@ -1317,7 +1317,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1002::update);
SetMessageHandler(&Scene1002::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B4138);
+ setHitRects(0x004B4138);
_surfaceFlag = true;
@@ -1338,28 +1338,28 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
if (_vm->_gameState.field2 == 0) {
- InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
_class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect();
_klayman->setRepl(64, 0);
} else {
- InsertKlaymanInitArgs(KmScene1002, 379, 435, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(379, 435, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4270);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
}
} else if (which == 1) {
- InsertKlaymanInitArgs(KmScene1002, 650, 435, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(650, 435, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4478);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
_class478->setClipRect(_klayman->getClipRect());
_vm->_gameState.field2 = 1;
} else if (which == 2) {
- InsertKlaymanInitArgs(KmScene1002, 68, 645, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(68, 645, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4298);
_klayman->setClipRect(_ssLadderArch->getDrawRect().x, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart1->getDrawRect().y2());
@@ -1367,7 +1367,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_gameState.field2 = 1;
sendMessage(_klayman, 0x4820, 0);
} else {
- InsertKlaymanInitArgs(KmScene1002, 90, 226, (_class599, _ssLadderArch));
+ insertKlayman<KmScene1002>(90, 226, _class599, _ssLadderArch);
_class478 = insertSprite<Class478>(_klayman);
setMessageList(0x004B4470);
_klayman->setClipRect(31, 0, _ssLadderArchPart2->getDrawRect().x2(), _ssLadderArchPart3->getDrawRect().y2());
@@ -1642,15 +1642,15 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which)
if (which < 0) {
setRectList(0x004B7C70);
- InsertKlayman(KmScene1004, 330, 327);
+ insertKlayman<KmScene1004>(330, 327);
setMessageList(0x004B7C18);
} else if (which == 1) {
setRectList(0x004B7C70);
- InsertKlayman(KmScene1004, 330, 327);
+ insertKlayman<KmScene1004>(330, 327);
setMessageList(0x004B7C08);
} else {
loadDataResource(0x01900A04);
- InsertKlayman(KmScene1004, _dataResource.getPoint(0x80052A29).x, 27);
+ insertKlayman<KmScene1004>(_dataResource.getPoint(0x80052A29).x, 27);
setMessageList(0x004B7BF0);
}
diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp
index 62462fc649..9c84950a2b 100644
--- a/engines/neverhood/module1200.cpp
+++ b/engines/neverhood/module1200.cpp
@@ -753,7 +753,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene1201::update);
SetMessageHandler(&Scene1201::handleMessage);
- _vm->_collisionMan->setHitRects(0x004AEBD0);
+ setHitRects(0x004AEBD0);
_surfaceFlag = true;
@@ -797,29 +797,29 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
debug("Scene1201: which = %d", which);
if (which < 0) {
- InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
+ insertKlayman<KmScene1201>(364, 333, class464);
setMessageList(0x004AEC08);
} else if (which == 3) {
- InsertKlaymanInitArgs(KmScene1201, 400, 329, (class464));
+ insertKlayman<KmScene1201>(400, 329, class464);
setMessageList(0x004AEC08);
} else if (which == 2) {
if (getGlobalVar(0x0A310817) && !getGlobalVar(0x0A18CA33)) {
- InsertKlaymanInitArgs(KmScene1201, 374, 333, (class464));
+ insertKlayman<KmScene1201>(374, 333, class464);
setMessageList(0x004AEC08);
} else {
- InsertKlaymanInitArgs(KmScene1201, 640, 329, (class464));
+ insertKlayman<KmScene1201>(640, 329, class464);
setMessageList(0x004AEC20);
}
} else if (which == 1) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlaymanInitArgs(KmScene1201, 364, 333, (class464));
+ insertKlayman<KmScene1201>(364, 333, class464);
_klayman->setDoDeltaX(1);
} else {
- InsertKlaymanInitArgs(KmScene1201, 246, 333, (class464));
+ insertKlayman<KmScene1201>(246, 333, class464);
}
setMessageList(0x004AEC30);
} else {
- InsertKlaymanInitArgs(KmScene1201, 0, 336, (class464));
+ insertKlayman<KmScene1201>(0, 336, class464);
setMessageList(0x004AEC10);
}
diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp
index 48a8b54e66..4876135cef 100644
--- a/engines/neverhood/module1300.cpp
+++ b/engines/neverhood/module1300.cpp
@@ -417,7 +417,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _soundResource(vm) {
SetMessageHandler(&Scene1302::handleMessage);
- _vm->_collisionMan->setHitRects(0x004B0858);
+ setHitRects(0x004B0858);
setRectList(0x004B0A38);
setBackground(0x420643C4);
@@ -441,10 +441,10 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which)
_ssFence->setClipRect(0, 0, 640, _sprite1->getDrawRect().y2());
if (which < 0) {
- InsertKlaymanInitArgs(KmScene1002, 380, 364, (_class595, NULL));
+ insertKlayman<KmScene1002>(380, 364, _class595, (Sprite*)NULL);
setMessageList(0x004B0868);
} else {
- InsertKlaymanInitArgs(KmScene1002, 293, 330, (_class595, NULL));
+ insertKlayman<KmScene1002>(293, 330, _class595, (Sprite*)NULL);
setMessageList(0x004B0870);
}
@@ -649,7 +649,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite1 = insertStaticSprite(0xA014216B, 1100);
- InsertKlayman(KmScene1303, 207, 332);
+ insertKlayman<KmScene1303>(207, 332);
setMessageList(0x004AF9A0);
_klayman->setClipRect(_sprite1->getDrawRect().x, 0, 640, 480);
@@ -730,10 +730,10 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x090AF033, 1100);
if (which < 0) {
- InsertKlayman(KmScene1304, 217, 347);
+ insertKlayman<KmScene1304>(217, 347);
setMessageList(0x004B90E8);
} else {
- InsertKlayman(KmScene1304, 100, 347);
+ insertKlayman<KmScene1304>(100, 347);
setMessageList(0x004B90F0);
}
@@ -778,10 +778,10 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which)
insertMouse433(0x01B60280);
if (which < 0) {
- InsertKlayman(KmScene1305, 212, 441);
+ insertKlayman<KmScene1305>(212, 441);
setMessageList(0x004B6E40);
} else {
- InsertKlayman(KmScene1305, 212, 441);
+ insertKlayman<KmScene1305>(212, 441);
setMessageList(0x004B6E48);
}
@@ -913,45 +913,45 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which)
insertStaticSprite(0x00042313, 1100);
if (which < 0) {
- InsertKlayman(KmScene1306, 380, 440);
+ insertKlayman<KmScene1306>(380, 440);
setMessageList(0x004AFAD0);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 1) {
- InsertKlayman(KmScene1306, 136, 440);
+ insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFAF0);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene1306, 515, 440);
+ insertKlayman<KmScene1306>(515, 440);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene1306, 355, 440);
+ insertKlayman<KmScene1306>(355, 440);
}
setMessageList(0x004AFBC8);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 3) {
- InsertKlayman(KmScene1306, 534, 440);
+ insertKlayman<KmScene1306>(534, 440);
setMessageList(0x004AFC30);
sendMessage(this, 0x2000, 0);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 4) {
- InsertKlayman(KmScene1306, 136, 440);
+ insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFC38);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else if (which == 5) {
- InsertKlayman(KmScene1306, 136, 440);
+ insertKlayman<KmScene1306>(136, 440);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004AFB00);
sendMessage(this, 0x2000, 1);
_vm->_collisionMan->addSprite(_asTape);
} else {
- InsertKlayman(KmScene1306, 286, 408);
+ insertKlayman<KmScene1306>(286, 408);
setSurfacePriority(_asElevator->getSurface(), 1100);
setSurfacePriority(_asElevatorDoor->getSurface(), 1090);
setSurfacePriority(_sprite1->getSurface(), 1080);
@@ -1621,7 +1621,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite4 = NULL;
if (which < 0) {
- InsertKlayman(KmScene1308, 380, 440);
+ insertKlayman<KmScene1308>(380, 440);
setMessageList(0x004B57C0);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1631,7 +1631,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 1) {
- InsertKlayman(KmScene1308, 640, 440);
+ insertKlayman<KmScene1308>(640, 440);
setMessageList(0x004B57C8);
if (getGlobalVar(0x80455A41)) {
_sprite4 = insertStaticSprite(0x0101A624, 1100);
@@ -1641,7 +1641,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else if (which == 2) {
- InsertKlayman(KmScene1308, 475, 440);
+ insertKlayman<KmScene1308>(475, 440);
setMessageList(0x004B58B0);
if (getGlobalVar(0x80455A41)) {
_sprite5 = addSprite(new Class592(_vm, this));
@@ -1652,7 +1652,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B5980);
}
} else {
- InsertKlayman(KmScene1308, 41, 440);
+ insertKlayman<KmScene1308>(41, 440);
setMessageList(0x004B57D0);
sendMessage(_class549, 0x4808, 0);
_sprite1->setVisible(false);
diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp
index 7bff2940c8..b1354584b0 100644
--- a/engines/neverhood/module1400.cpp
+++ b/engines/neverhood/module1400.cpp
@@ -683,19 +683,19 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which)
_sprite2->setVisible(false);
if (which < 0) {
- InsertKlayman(KmScene1401, 380, 447);
+ insertKlayman<KmScene1401>(380, 447);
setMessageList(0x004B65C8);
_sprite1->setVisible(false);
} else if (which == 1) {
- InsertKlayman(KmScene1401, 0, 447);
+ insertKlayman<KmScene1401>(0, 447);
setMessageList(0x004B65D0);
_sprite1->setVisible(false);
} else if (which == 2) {
- InsertKlayman(KmScene1401, 660, 447);
+ insertKlayman<KmScene1401>(660, 447);
setMessageList(0x004B65D8);
_sprite1->setVisible(false);
} else {
- InsertKlayman(KmScene1401, 290, 413);
+ insertKlayman<KmScene1401>(290, 413);
setMessageList(0x004B65E8);
_sprite1->setVisible(false);
}
@@ -892,16 +892,16 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
setRectList(0x004B0C98);
if (which < 0) {
- InsertKlayman(KmScene1402, 377, 391);
+ insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B48);
if (!getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 0));
}
} else if (which == 1) {
- InsertKlayman(KmScene1402, 42, 391);
+ insertKlayman<KmScene1402>(42, 391);
setMessageList(0x004B0B50);
} else if (which == 2) {
- InsertKlayman(KmScene1402, 377, 391);
+ insertKlayman<KmScene1402>(377, 391);
setMessageList(0x004B0B60);
_klayman->setDoDeltaX(1);
if (getGlobalVar(0x70A1189C)) {
@@ -913,7 +913,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which)
_class482 = addSprite(new Class482(_vm, this, 0));
}
} else {
- InsertKlayman(KmScene1402, 513, 391);
+ insertKlayman<KmScene1402>(513, 391);
setMessageList(0x004B0B58);
if (!getGlobalVar(0x70A1189C)) {
_class482 = addSprite(new Class482(_vm, this, 2));
@@ -1351,10 +1351,10 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_asTape2->setRepl(64, 0);
if (which < 0) {
- InsertKlayman(KmScene1403, 380, 463);
+ insertKlayman<KmScene1402>(380, 463);
setMessageList(0x004B1F18);
} else {
- InsertKlayman(KmScene1403, 640, 463);
+ insertKlayman<KmScene1402>(640, 463);
setMessageList(0x004B1F20);
}
_klayman->setRepl(64, 0);
@@ -1464,21 +1464,21 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
- InsertKlayman(KmScene1404, 376, 406);
+ insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C28);
} else if (which == 1) {
- InsertKlayman(KmScene1404, 376, 406);
+ insertKlayman<KmScene1404>(376, 406);
setMessageList(0x004B8C30);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene1404, 347, 406);
+ insertKlayman<KmScene1404>(347, 406);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene1404, 187, 406);
+ insertKlayman<KmScene1404>(187, 406);
}
setMessageList(0x004B8D28);
} else {
- InsertKlayman(KmScene1404, 30, 406);
+ insertKlayman<KmScene1404>(30, 406);
setMessageList(0x004B8C38);
}
diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp
index 30e4631f23..9547d3447c 100644
--- a/engines/neverhood/module1700.cpp
+++ b/engines/neverhood/module1700.cpp
@@ -182,7 +182,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene1705::handleMessage);
SetUpdateHandler(&Scene1705::update);
- _vm->_collisionMan->setHitRects(0x004B69D8);
+ setHitRects(0x004B69D8);
_surfaceFlag = true;
@@ -207,30 +207,30 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
which = 4;
if (which < 0) {
- InsertKlayman(KmScene1705, 231, 434);
+ insertKlayman<KmScene1705>(231, 434);
setMessageList(0x004B69E8);
sendMessage(this, 0x2000, 0);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 1) {
- InsertKlayman(KmScene1705, 431, 434);
+ insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 2) {
- InsertKlayman(KmScene1705, 431, 434);
+ insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 3) {
- InsertKlayman(KmScene1705, 431, 434);
+ insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else {
- InsertKlayman(KmScene1705, 231, 74);
+ insertKlayman<KmScene1705>(231, 74);
sendMessage(_klayman, 0x2000, 0);
setMessageList(0x004B69F0);
sendMessage(this, 0x2000, 0);
diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp
index 3977598726..b870d823ec 100644
--- a/engines/neverhood/module2000.cpp
+++ b/engines/neverhood/module2000.cpp
@@ -108,26 +108,26 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
_class401 = insertStaticSprite(0x0D641724, 1100);
if (which < 0) {
- InsertKlayman(KmScene2001, 300, 345);
+ insertKlayman<KmScene2001>(300, 345);
setMessageList(0x004B3538);
sendMessage(this, 0x2000, 0);
} else if (which == 1) {
- InsertKlayman(KmScene2001, 116, 345);
+ insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3540);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
- InsertKlayman(KmScene2001, 116, 345);
+ insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B35F0);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
- InsertKlayman(KmScene2001, 116, 345);
+ insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3550);
sendMessage(this, 0x2000, 1);
} else {
- InsertKlayman(KmScene2001, 390, 345);
+ insertKlayman<KmScene2001>(390, 345);
setMessageList(0x004B3530);
sendMessage(this, 0x2000, 0);
_klayman->setDoDeltaX(1);
diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp
index 124ace634c..59dcbfc127 100644
--- a/engines/neverhood/module2200.cpp
+++ b/engines/neverhood/module2200.cpp
@@ -774,25 +774,25 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which)
_doorLightSprite = insertStaticSprite(0xA4062212, 900);
if (which < 0) {
- InsertKlaymanInitArgs(KmScene2201, 300, 427, (&_rect1, 2));
+ insertKlayman<KmScene2201>(300, 427, &_rect1, 2);
setMessageList(0x004B8118);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else if (which == 1) {
- InsertKlaymanInitArgs(KmScene2201, 412, 393, (&_rect1, 2));
+ insertKlayman<KmScene2201>(412, 393, &_rect1, 2);
setMessageList(0x004B8130);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlaymanInitArgs(KmScene2201, 379, 427, (&_rect1, 2));
+ insertKlayman<KmScene2201>(379, 427, &_rect1, 2);
_klayman->setDoDeltaX(1);
} else {
- InsertKlaymanInitArgs(KmScene2201, 261, 427, (&_rect1, 2));
+ insertKlayman<KmScene2201>(261, 427, &_rect1, 2);
}
setMessageList(0x004B8178);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, false));
} else {
NPoint pt = _dataResource.getPoint(0x0304D8DC);
- InsertKlaymanInitArgs(KmScene2201, pt.x, pt.y, (&_rect1, 2));
+ insertKlayman<KmScene2201>(pt.x, pt.y, &_rect1, 2);
setMessageList(0x004B8120);
_asDoor = addSprite(new AsScene2201Door(_vm, _klayman, _doorLightSprite, true));
}
@@ -1350,7 +1350,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
setPalette(0x82C80334);
insertMouse433(0x80330824);
- _vm->_collisionMan->setHitRects(0x004B8320);
+ setHitRects(0x004B8320);
if (getGlobalVar(0x13382860) == 1) {
_class545 = addSprite(new Class545(_vm, this, 2, 1100, 282, 432));
@@ -1376,21 +1376,21 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asRightDoor);
if (which < 0) {
- InsertKlayman(KmScene2203, 200, 427);
+ insertKlayman<KmScene2203>(200, 427);
setMessageList(0x004B8340);
} else if (which == 1) {
- InsertKlayman(KmScene2203, 640, 427);
+ insertKlayman<KmScene2203>(640, 427);
setMessageList(0x004B8350);
} else if (which == 2) {
if (getGlobalVar(0xC0418A02)) {
- InsertKlayman(KmScene2203, 362, 427);
+ insertKlayman<KmScene2203>(362, 427);
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene2203, 202, 427);
+ insertKlayman<KmScene2203>(202, 427);
}
setMessageList(0x004B8358);
} else {
- InsertKlayman(KmScene2203, 0, 427);
+ insertKlayman<KmScene2203>(0, 427);
setMessageList(0x004B8348);
}
@@ -1496,7 +1496,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
SetMessageHandler(&Scene2205::handleMessage);
SetUpdateHandler(&Scene2205::update);
- _vm->_collisionMan->setHitRects(0x004B0620);
+ setHitRects(0x004B0620);
_surfaceFlag = true;
if (getGlobalVar(0x4D080E54)) {
@@ -1522,21 +1522,21 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which)
_ssDoorFrame = addSprite(new SsScene2205DoorFrame(_vm));
if (which < 0) {
- InsertKlayman(KmScene2205, 320, 417);
+ insertKlayman<KmScene2205>(320, 417);
setMessageList(0x004B0658);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else if (which == 1) {
- InsertKlayman(KmScene2205, 640, 417);
+ insertKlayman<KmScene2205>(640, 417);
setMessageList(0x004B0648);
if (!getGlobalVar(0x4D080E54)) {
_palette->addPalette(0x68033B1C, 0, 65, 0);
}
_isKlaymanInLight = false;
} else {
- InsertKlayman(KmScene2205, 0, 417);
+ insertKlayman<KmScene2205>(0, 417);
setMessageList(0x004B0640);
_isKlaymanInLight = true;
}
@@ -1795,24 +1795,24 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_class607);
if (which < 0) {
- InsertKlayman(KmScene2206, 200, 430);
+ insertKlayman<KmScene2206>(200, 430);
setMessageList(0x004B88A8);
} else if (which == 1) {
- InsertKlayman(KmScene2206, 640, 430);
+ insertKlayman<KmScene2206>(640, 430);
setMessageList(0x004B88B8);
} else if (which == 2) {
- InsertKlayman(KmScene2206, 205, 396);
+ insertKlayman<KmScene2206>(205, 396);
setMessageList(0x004B88C8);
_palette->addPalette(getGlobalVar(0x4D080E54) ? 0xB103B604 : 0x0263D144, 0, 65, 0);
sub4819D0();
_soundResource.play(0x53B8284A);
} else if (which == 3) {
- InsertKlayman(KmScene2206, kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
+ insertKlayman<KmScene2206>(kScene2206XPositions[getGlobalVar(0x48A68852)], 430);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
setMessageList(0x004B8A70);
} else {
- InsertKlayman(KmScene2206, 0, 430);
+ insertKlayman<KmScene2206>(0, 430);
setMessageList(0x004B88B0);
}
@@ -2251,7 +2251,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which)
SetUpdateHandler(&Scene2207::update);
_surfaceFlag = true;
- InsertKlayman(KmScene2207, 0, 0);
+ insertKlayman<KmScene2207>(0, 0);
_klayman->setRepl(64, 0);
setMessageList(0x004B38E8);
@@ -2673,18 +2673,18 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which)
_vm->_collisionMan->addSprite(_asTape);
if (which < 0) {
- InsertKlayman(KmScene2242, 200, 430);
+ insertKlayman<KmScene2242>(200, 430);
setMessageList(0x004B3C18);
} else if (which == 1) {
- InsertKlayman(KmScene2242, 530, 430);
+ insertKlayman<KmScene2242>(530, 430);
setMessageList(0x004B3D60);
} else if (which == 2) {
- InsertKlayman(KmScene2242, kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
+ insertKlayman<KmScene2242>(kScene2242XPositions[!getGlobalVar(0x48A68852) ? 0 : 1], 430);
setMessageList(0x004B3D48);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmScene2242, 0, 430);
+ insertKlayman<KmScene2242>(0, 430);
setMessageList(0x004B3C20);
}
@@ -2802,18 +2802,18 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule
}
if (which < 0) {
- InsertKlayman(KmHallOfRecords, 200, 430);
+ insertKlayman<KmHallOfRecords>(200, 430);
setMessageList(0x004B2900);
} else if (which == 1) {
- InsertKlayman(KmHallOfRecords, 640, 430);
+ insertKlayman<KmHallOfRecords>(640, 430);
setMessageList(0x004B2910);
} else if (which == 2) {
- InsertKlayman(KmHallOfRecords, kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
+ insertKlayman<KmHallOfRecords>(kHallOfRecordsKlaymanXPos[getGlobalVar(0x48A68852) - _sceneInfo140->xPosIndex], 430);
setMessageList(0x004B2B70);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
} else {
- InsertKlayman(KmHallOfRecords, 0, 430);
+ insertKlayman<KmHallOfRecords>(0, 430);
setMessageList(0x004B2908);
}
@@ -2897,18 +2897,18 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which)
}
if (which < 0) {
- InsertKlayman(KmScene2247, 200, 430);
+ insertKlayman<KmScene2247>(200, 430);
setMessageList(0x004B5428);
} else if (which == 1) {
- InsertKlayman(KmScene2247, 640, 430);
+ insertKlayman<KmScene2247>(640, 430);
setMessageList(0x004B5438);
} else if (which == 2) {
- InsertKlayman(KmScene2247, kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
+ insertKlayman<KmScene2247>(kScene2247XPositions[getGlobalVar(0xC8C28808) == 0x0008E486 ? 0 : 1], 430);
if (getGlobalVar(0xC0418A02))
_klayman->setDoDeltaX(1);
setMessageList(0x004B5530);
} else {
- InsertKlayman(KmScene2247, 0, 430);
+ insertKlayman<KmScene2247>(0, 430);
setMessageList(0x004B5430);
}
diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp
index f1ee55420a..8d7fc787ec 100644
--- a/engines/neverhood/scene.cpp
+++ b/engines/neverhood/scene.cpp
@@ -191,6 +191,10 @@ void Scene::setPalette(uint32 fileHash) {
_palette->usePalette();
}
+void Scene::setHitRects(uint32 id) {
+ _vm->_collisionMan->setHitRects(id);
+}
+
Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) {
return addSprite(new StaticSprite(_vm, fileHash, surfacePriority));
}
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index d0decd2c49..09d34b5734 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -37,12 +37,6 @@
namespace Neverhood {
-#define InsertKlayman(KlaymanClass, X, Y) _klayman = new KlaymanClass(_vm, this, X, Y); addSprite(_klayman)
-#define InsertKlaymanInitArgs(KlaymanClass, X, Y, InitArgs) _klayman = new KlaymanClass(_vm, this, X, Y); ((KlaymanClass*)_klayman)->init InitArgs; addSprite(_klayman)
-
-#define InsertSprite(SpriteObj, SpriteClass) SpriteObj = (SpriteClass*)addSprite(new SpriteClass(_vm));
-#define InsertSpriteInitArgs(SpriteObj, SpriteClass, InitArgs) SpriteObj = new SpriteClass(_vm); ((SpriteClass*)(SpriteObj))-> init InitArgs; addSprite(SpriteObj)
-
class Scene : public Entity {
public:
Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects);
@@ -61,6 +55,7 @@ public:
void setBackgroundY(int16 y) { _background->getSurface()->getDrawRect().y = y; }
int16 getBackgroundY() { return _background->getSurface()->getDrawRect().y; }
void setPalette(uint32 fileHash = 0);
+ void setHitRects(uint32 id);
Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority);
void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL);
void insertMouse435(uint32 fileHash, int16 x1, int16 x2);
@@ -70,6 +65,36 @@ public:
SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer);
void update();
// Some crazy templated functions to make the logic code smaller/simpler (imo!)
+ // insertKlayman
+ template<class T>
+ void insertKlayman() {
+ _klayman = (T*)addSprite(new T(_vm, this));
+ }
+ template<class T, class Arg1>
+ void insertKlayman(Arg1 arg1) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1));
+ }
+ template<class T, class Arg1, class Arg2>
+ void insertKlayman(Arg1 arg1, Arg2 arg2) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5));
+ }
+ template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
+ void insertKlayman(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) {
+ _klayman = (T*)addSprite(new T(_vm, this, arg1, arg2, arg3, arg4, arg5, arg6));
+ }
+ // insertSprite
template<class T>
T* insertSprite() {
return (T*)addSprite(new T(_vm));