Skip to content

Commit

Permalink
NEVERHOOD: Add Scene1304
Browse files Browse the repository at this point in the history
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 4c7930b commit 086879a
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 4 deletions.
2 changes: 1 addition & 1 deletion engines/neverhood/gamemodule.cpp
Expand Up @@ -247,7 +247,7 @@ void GameModule::startup() {
createModule2200(-1);
#endif
#if 1
_vm->gameState().sceneNum = 2;
_vm->gameState().sceneNum = 3;
createModule1300(-1);
#endif
}
Expand Down
53 changes: 53 additions & 0 deletions engines/neverhood/klayman.cpp
Expand Up @@ -2978,6 +2978,59 @@ void KmScene1303::sub4162B0() {
SetMessageHandler(&KmScene1303::handleMessage4160A0);
}

KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {

}

uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam &param) {
switch (messageNum) {
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
setCallback2(AnimationCallback(&Klayman::sub41FC80));
break;
case 0x4812:
if (param.asInteger() == 2) {
setCallback2(AnimationCallback(&Klayman::sub420060));
} else if (param.asInteger() == 1) {
setCallback2(AnimationCallback(&Klayman::sub41FFF0));
} else {
setCallback2(AnimationCallback(&Klayman::sub41FF80));
}
break;
case 0x4817:
setDoDeltaX(param.asInteger());
sub41C7B0();
break;
case 0x481B:
if (param.asPoint().y != 0) {
sub41CC40(param.asPoint().y, param.asPoint().x);
} else {
sub41CCE0(param.asPoint().x);
}
break;
case 0x481F:
if (param.asInteger() == 1) {
setCallback2(AnimationCallback(&Klayman::sub420930));
} else if (param.asInteger() == 0) {
setCallback2(AnimationCallback(&Klayman::sub4208F0));
} else {
setCallback2(AnimationCallback(&Klayman::sub420830));
}
break;
case 0x483F:
sub41CD00(param.asInteger());
break;
case 0x4840:
sub41CD70(param.asInteger());
break;
}
return 0;
}

// KmScene1401

KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
Expand Down
7 changes: 7 additions & 0 deletions engines/neverhood/klayman.h
Expand Up @@ -335,6 +335,13 @@ class KmScene1303 : public Klayman {
void sub4162B0();
};

class KmScene1304 : public Klayman {
public:
KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam &param);
};

class KmScene1401 : public Klayman {
public:
KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
Expand Down
113 changes: 113 additions & 0 deletions engines/neverhood/module1300.cpp
Expand Up @@ -22,6 +22,7 @@

#include "neverhood/module1300.h"
#include "neverhood/module1000.h"
#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
Expand Down Expand Up @@ -163,6 +164,11 @@ void Module1300::createScene1303(int which) {
}

void Module1300::createScene1304(int which) {
_vm->gameState().sceneNum = 3;
// TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0);
// TODO Music18hList_stop(0x203197, 0, 2);
_childObject = new Scene1304(_vm, this, which);
SetUpdateHandler(&Module1300::updateScene1304);
}

void Module1300::createScene1305(int which) {
Expand Down Expand Up @@ -259,6 +265,14 @@ void Module1300::updateScene1303() {
}

void Module1300::updateScene1304() {
_childObject->handleUpdate();
if (_done) {
_done = false;
delete _childObject;
_childObject = NULL;
createScene1316(0);
_childObject->handleUpdate();
}
}

void Module1300::updateScene1305() {
Expand Down Expand Up @@ -770,4 +784,103 @@ uint32 Scene1303::handleMessage(int messageNum, const MessageParam &param, Entit
return 0;
}

Class544::Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y)
: AnimatedSprite(vm, 0x548E9411, surfacePriority, x, y), _parentScene(parentScene) {

if (getGlobalVar(0x31C63C51)) {
_surface->setVisible(false);
SetMessageHandler(NULL);
} else {
SetMessageHandler(&Class544::handleMessage);
}
}

uint32 Class544::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x1011:
_parentScene->sendMessage(0x4826, 0, this);
messageResult = 1;
break;
case 0x4806:
setGlobalVar(0x31C63C51, 1);
_surface->setVisible(false);
SetMessageHandler(NULL);
break;
}
return messageResult;
}

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

_surfaceFlag = true;
SetMessageHandler(&Scene1304::handleMessage);
setRectList(0x004B91A8);

_background = addBackground(new DirtyBackground(_vm, 0x062C0214, 0, 0));
_palette = new Palette(_vm, 0x062C0214);
_palette->usePalette();
_mouseCursor = addSprite(new Mouse433(_vm, 0xC021006A, NULL));

if (getGlobalVar(0xAC00C0D0)) {
_class545 = addSprite(new Class545(_vm, this, 0, 1100, 278, 347));
_vm->_collisionMan->addSprite(_class545);
} else {
_class545 = addSprite(new AnimatedSprite(_vm, 0x80106018, 100, 279, 48));
// TODO _class545->setUpdateDeltaXY();
}

if (!getGlobalVar(0x31C63C51)) {
_class544 = addSprite(new Class544(_vm, this, 1100, 278, 347));
_vm->_collisionMan->addSprite(_class544);
} else {
_class544 = NULL;
}

_sprite1 = addSprite(new StaticSprite(_vm, 0x0562E621, 1100));
addSprite(new StaticSprite(_vm, 0x012AE033, 1100));
addSprite(new StaticSprite(_vm, 0x090AF033, 1100));

if (which < 0) {
_klayman = new KmScene1304(_vm, this, 217, 347);
setMessageList(0x004B90E8);
} else {
_klayman = new KmScene1304(_vm, this, 100, 347);
setMessageList(0x004B90F0);
}
addSprite(_klayman);

_klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x;
_klayman->getSurface()->getClipRect().y1 = 0;
_klayman->getSurface()->getClipRect().x2 = 640;
_klayman->getSurface()->getClipRect().y2 = 480;

}

uint32 Scene1304::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x415634A4) {
if (getGlobalVar(0xAC00C0D0)) {
messageList402220();
} else {
setMessageList(0x004B9158);
}
}
break;
case 0x4826:
if (sender == _class544) {
_klayman->sendEntityMessage(0x1014, _class544, this);
setMessageList(0x004B9130);
} else if (sender == _class545) {
_klayman->sendEntityMessage(0x1014, _class545, this);
setMessageList(0x004B9140);
}
break;
}
return 0;
}

} // End of namespace Neverhood
18 changes: 18 additions & 0 deletions engines/neverhood/module1300.h
Expand Up @@ -147,6 +147,24 @@ class Scene1303 : public Scene {
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};

class Class544 : public AnimatedSprite {
public:
Class544(NeverhoodEngine *vm, Scene *parentScene, int surfacePriority, int16 x, int16 y);
protected:
Scene *_parentScene;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};

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

} // End of namespace Neverhood

#endif /* NEVERHOOD_MODULE1300_H */
7 changes: 4 additions & 3 deletions engines/neverhood/module1400.cpp
Expand Up @@ -22,6 +22,7 @@

#include "neverhood/module1400.h"
#include "neverhood/module1000.h"
#include "neverhood/module2200.h"
#include "neverhood/diskplayerscene.h"
#include "neverhood/gamemodule.h"

Expand Down Expand Up @@ -1456,7 +1457,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which)
_class401_1->getSurface()->setVisible(false);

_class401_2 = addSprite(new StaticSprite(_vm, 0x04442520, 995));

_class401_3 = addSprite(new StaticSprite(_vm, 0x08742271, 995));

_asTape1 = new AsScene1201Tape(_vm, this, 12, 1100, 201, 468, 0x9148A011);
Expand Down Expand Up @@ -1578,8 +1579,8 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which)
_mouseCursor = addSprite(new Mouse433(_vm, 0xB006BAC8, NULL));

if (getGlobalVar(0x13382860) == 5) {
// TODO _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
// TODO _vm->_collisionMan->addSprite(_class545);
_class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411));
_vm->_collisionMan->addSprite(_class545);
}

_sprite1 = addSprite(new StaticSprite(_vm, 0x1900A1F8, 1100));
Expand Down

0 comments on commit 086879a

Please sign in to comment.