Skip to content

Commit

Permalink
NEVERHOOD: Add Scene1109
Browse files Browse the repository at this point in the history
- Also fix some bugs regarding a missing parameter to setMessageList in various scenes
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 8a08287 commit 47f1fe1
Show file tree
Hide file tree
Showing 11 changed files with 196 additions and 18 deletions.
3 changes: 1 addition & 2 deletions engines/neverhood/background.cpp
Expand Up @@ -62,7 +62,7 @@ void Background::load(uint32 fileHash) {
DirtyBackground::DirtyBackground(NeverhoodEngine *vm, const char *fileName, int objectPriority, int surfacePriority)
: Background(vm, objectPriority) {

// TODO _spriteResource.load(calcHash(fileName));
_spriteResource.load(calcHash(fileName));
createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height);
_surface->drawSpriteResource(_spriteResource);
}
Expand All @@ -85,5 +85,4 @@ void DirtyBackground::createSurface(int surfacePriority, int16 width, int16 heig

}


} // End of namespace Neverhood
10 changes: 9 additions & 1 deletion engines/neverhood/gamemodule.cpp
Expand Up @@ -275,7 +275,7 @@ void GameModule::startup() {
createModule(1000, -1);
#endif
#if 1
_vm->gameState().sceneNum = 4;
_vm->gameState().sceneNum = 8;
createModule(1100, -1);
#endif
}
Expand Down Expand Up @@ -353,6 +353,14 @@ void GameModule::updateModule() {
createModule(2300, 2);
}
break;
case 1100:
if (_moduleResult == 0) {
createModule(2900, 2);
} else {
setGlobalVar(0xD0A14D10, 1);
createModule(1300, 0);
}
break;
case 1300:
if (_moduleResult == 1) {
// TODO _gameState.clear();
Expand Down
96 changes: 96 additions & 0 deletions engines/neverhood/klayman.cpp
Expand Up @@ -2687,6 +2687,102 @@ void KmScene1004::sub478170() {
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
}

KmScene1109::KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000), _flag1(false) {

// Empty
}

uint32 KmScene1109::xHandleMessage(int messageNum, const MessageParam &param) {
switch (messageNum) {
case 0x2000:
_flag1 = param.asInteger() != 0;
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
if (_flag1)
setCallback2(AnimationCallback(&Klayman::sub421350));
else
setCallback2(AnimationCallback(&Klayman::sub41FC80));
break;
case 0x4804:
if (param.asInteger() != 0) {
_x4 = param.asInteger();
setCallback2(AnimationCallback(&Klayman::sub41F9E0));
} else {
setCallback2(AnimationCallback(&Klayman::sub41FC40));
}
break;
case 0x4817:
setDoDeltaX(param.asInteger());
sub41C7B0();
break;
case 0x481D:
if (_flag1)
setCallback2(AnimationCallback(&Klayman::sub4214D0));
break;
case 0x481E:
if (_flag)
setCallback2(AnimationCallback(&Klayman::sub421510));
break;
case 0x4834:
setCallback2(AnimationCallback(&Klayman::sub421160));
break;
case 0x4835:
sendMessage(_parentScene, 0x2000, 1);
_flag1 = true;
setCallback2(AnimationCallback(&Klayman::sub4212C0));
break;
case 0x4836:
sendMessage(_parentScene, 0x2000, 0);
_flag1 = false;
setCallback2(AnimationCallback(&Klayman::sub421310));
break;
case 0x483D:
sub461F30();
break;
case 0x483E:
sub461F70();
break;
}
return 0;
}

uint32 KmScene1109::handleMessage461EA0(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = Klayman::handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x4E0A2C24) {
_soundResource1.play(0x85B10BB8);
} else if (param.asInteger() == 0x4E6A0CA0) {
_soundResource1.play(0xC5B709B0);
}
break;
}
return messageResult;
}

void KmScene1109::sub461F30() {
_status2 = 0;
_flagE5 = false;
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1109::handleMessage461EA0);
setFileHash(0x2C2A4A1C, 0, -1);
}

void KmScene1109::sub461F70() {
_status2 = 0;
_flagE5 = false;
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene1109::handleMessage461EA0);
setFileHash(0x3C2E4245, 0, -1);
}

// KmScene1201

KmScene1201::KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464)
Expand Down
11 changes: 11 additions & 0 deletions engines/neverhood/klayman.h
Expand Up @@ -305,6 +305,17 @@ class KmScene1004 : public Klayman {
void sub478170();
};

class KmScene1109 : public Klayman {
public:
KmScene1109(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
bool _flag1;
uint32 xHandleMessage(int messageNum, const MessageParam &param);
uint32 handleMessage461EA0(int messageNum, const MessageParam &param, Entity *sender);
void sub461F30();
void sub461F70();
};

class KmScene1201 : public Klayman {
public:
KmScene1201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, Entity *class464);
Expand Down
60 changes: 58 additions & 2 deletions engines/neverhood/module1100.cpp
Expand Up @@ -94,7 +94,7 @@ void Module1100::createScene(int sceneNum, int which) {
createSmackerScene(kSmackerFileHashList07, true, true, false);
break;
case 8:
//TODO _childObject = new Scene1109(_vm, this, which);
_childObject = new Scene1109(_vm, this, which);
break;
case 1002:
_countdown = 40;
Expand All @@ -108,7 +108,6 @@ void Module1100::createScene(int sceneNum, int which) {

void Module1100::updateScene() {
if (!updateChild()) {
debug("_vm->gameState().sceneNum = %d", _vm->gameState().sceneNum);
switch (_vm->gameState().sceneNum) {
case 0:
_countdown = 0;
Expand Down Expand Up @@ -660,4 +659,61 @@ void Scene1105::update() {
}
}

Scene1109::Scene1109(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, which) {

_surfaceFlag = true;
SetMessageHandler(&Scene1109::handleMessage);

setBackground(0x8449E02F);
setPalette(0x8449E02F);
insertMouse433(0x9E02B84C);

_sprite1 = insertStaticSprite(0x600CEF01, 1100);

if (which < 0) {
insertKlayman<KmScene1109>(140, 436);
setMessageList(0x004B6260);
sendMessage(this, 0x2000, 0);
} else if (which == 1) {
insertKlayman<KmScene1109>(450, 436);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6268, false);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
insertKlayman<KmScene1109>(450, 436);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6318, false);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
insertKlayman<KmScene1109>(450, 436);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6278, false);
sendMessage(this, 0x2000, 1);
} else {
insertKlayman<KmScene1109>(0, 436);
setMessageList(0x004B6258);
sendMessage(this, 0x2000, 0);
}

_klayman->setClipRect(0, 0, _sprite1->getDrawRect().x2(), 480);

}

uint32 Scene1109::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x2000:
if (param.asInteger()) {
setRectList(0x004B63A8);
_klayman->setKlaymanTable3();
} else {
setRectList(0x004B6398);
_klayman->setKlaymanTable1();
}
break;
}
return 0;
}

} // End of namespace Neverhood
8 changes: 8 additions & 0 deletions engines/neverhood/module1100.h
Expand Up @@ -123,6 +123,14 @@ class Scene1105 : public Scene {
void update();
};

class Scene1109 : public Scene {
public:
Scene1109(NeverhoodEngine *vm, Module *parentModule, int which);
protected:
Sprite *_sprite1;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};

} // End of namespace Neverhood

#endif /* NEVERHOOD_MODULE1100_H */
2 changes: 1 addition & 1 deletion engines/neverhood/module1200.cpp
Expand Up @@ -971,7 +971,7 @@ uint32 Scene1201::handleMessage(int messageNum, const MessageParam &param, Entit
case 0x2002:
if (getGlobalVar(0x20A0C516)) {
sendEntityMessage(_klayman, 0x1014, _asTntMan);
setMessageList2(0x004AECF0);
setMessageList2(0x004AECF0, false);
} else if (getGlobalVar(0x0112090A) == 3) {
sendEntityMessage(_klayman, 0x1014, _asTntMan);
if (_klayman->getX() > _asTntMan->getX()) {
Expand Down
2 changes: 1 addition & 1 deletion engines/neverhood/module1300.cpp
Expand Up @@ -1719,7 +1719,7 @@ uint32 Scene1308::handleMessage(int messageNum, const MessageParam &param, Entit
} else {
setRectList(0x004B5980);
}
setMessageList(0x004B57E8);
setMessageList(0x004B57E8, false);
_sprite1->setVisible(true);
_klayman->setVisible(true);
break;
Expand Down
6 changes: 3 additions & 3 deletions engines/neverhood/module1700.cpp
Expand Up @@ -214,19 +214,19 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 1) {
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A08);
setMessageList(0x004B6A08, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 2) {
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6AA0);
setMessageList(0x004B6AA0, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else if (which == 3) {
insertKlayman<KmScene1705>(431, 434);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B6A18);
setMessageList(0x004B6A18, false);
sendMessage(this, 0x2000, 1);
_klayman->setClipRect(0, 0, _sprite->getDrawRect().x2(), 480);
} else {
Expand Down
6 changes: 3 additions & 3 deletions engines/neverhood/module2000.cpp
Expand Up @@ -114,17 +114,17 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which)
} else if (which == 1) {
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3540);
setMessageList(0x004B3540, false);
sendMessage(this, 0x2000, 1);
} else if (which == 2) {
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B35F0);
setMessageList(0x004B35F0, false);
sendMessage(this, 0x2000, 1);
} else if (which == 3) {
insertKlayman<KmScene2001>(116, 345);
sendMessage(_klayman, 0x2000, 1);
setMessageList(0x004B3550);
setMessageList(0x004B3550, false);
sendMessage(this, 0x2000, 1);
} else {
insertKlayman<KmScene2001>(390, 345);
Expand Down
10 changes: 5 additions & 5 deletions engines/neverhood/scene.cpp
Expand Up @@ -249,14 +249,14 @@ void Scene::update() {
if (_mouseClicked) {
if (_klayman) {
// TODO: Merge later
if (_klayman->hasMessageHandler() &&
if (_messageListFlag &&
_klayman->hasMessageHandler() &&
sendMessage(_klayman, 0x1008, 0) != 0 &&
_messageListFlag &&
queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
_mouseClicked = false;
} else if (_klayman->hasMessageHandler() &&
sendMessage(_klayman, 0x1008, 0) != 0 &&
_messageListFlag) {
} else if (_messageListFlag &&
_klayman->hasMessageHandler() &&
sendMessage(_klayman, 0x1008, 0) != 0) {
_mouseClicked = !queryPositionRectList(_mouseClickPos.x, _mouseClickPos.y);
}
} else if (queryPositionSprite(_mouseClickPos.x, _mouseClickPos.y)) {
Expand Down

0 comments on commit 47f1fe1

Please sign in to comment.