Skip to content

Commit

Permalink
NEVERHOOD: Implement Scene2203
Browse files Browse the repository at this point in the history
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 9273c2e commit 31457e1
Show file tree
Hide file tree
Showing 5 changed files with 393 additions and 7 deletions.
2 changes: 1 addition & 1 deletion engines/neverhood/gamemodule.cpp
Expand Up @@ -242,7 +242,7 @@ void GameModule::startup() {
createModule2000(-1);
#endif
#if 1
_vm->gameState().sceneNum = 1;
_vm->gameState().sceneNum = 2;
createModule2200(-1);
#endif
}
Expand Down
97 changes: 97 additions & 0 deletions engines/neverhood/klayman.cpp
Expand Up @@ -1765,6 +1765,17 @@ uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam &param, E
return messageResult;
}

void Klayman::sub420750() {
if (!sub41CEB0(AnimationCallback(&Klayman::sub420750))) {
_status2 = 2;
_flagE5 = false;
setFileHash(0x5CCCB330, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41DD20);
}
}

void Klayman::sub4207A0() {
if (!sub41CEB0(AnimationCallback(&Klayman::sub4207A0))) {
_status2 = 2;
Expand Down Expand Up @@ -1997,6 +2008,20 @@ uint32 Klayman::handleMessage41DB90(int messageNum, const MessageParam &param, E
return handleMessage41D480(messageNum, param, sender);
}

uint32 Klayman::handleMessage41DD20(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
switch (messageNum) {
case 0x100D:
if (param.asInteger() == 0x040D4186) {
if (_attachedSprite) {
_attachedSprite->sendMessage(0x4808, 0, this);
}
}
break;
}
return messageResult;
}

//##############################################################################

// KmScene1001
Expand Down Expand Up @@ -3498,4 +3523,76 @@ uint32 KmScene2201::xHandleMessage(int messageNum, const MessageParam &param) {
return 0;
}

KmScene2203::KmScene2203(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y)
: Klayman(vm, parentScene, x, y, 1000, 1000) {
// Empty
}

uint32 KmScene2203::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 0x4816:
if (param.asInteger() == 1) {
setCallback2(AnimationCallback(&Klayman::sub420120));
} else if (param.asInteger() == 2) {
setCallback2(AnimationCallback(&Klayman::sub420170));
}else {
setCallback2(AnimationCallback(&Klayman::sub4200D0));
}
break;
case 0x4817:
setDoDeltaX(param.asInteger());
sub41C7B0();
break;
case 0x4818:
sub41C930(_dataResource.getPoint(param.asInteger()).x, false);
break;
case 0x4819:
setCallback2(AnimationCallback(&Klayman::sub420750));
break;
case 0x481A:
setCallback2(AnimationCallback(&Klayman::sub420680));
break;
case 0x481B:
if (param.asPoint().y != 0) {
sub41CC40(param.asPoint().y, param.asPoint().x);
} else {
sub41CCE0(param.asPoint().x);
}
break;
case 0x481D:
setCallback2(AnimationCallback(&Klayman::sub4207A0));
break;
case 0x481E:
setCallback2(AnimationCallback(&Klayman::sub4207F0));
break;
case 0x482D:
setDoDeltaX(_x > (int16)param.asInteger() ? 1 : 0);
sub41C7B0();
break;
case 0x483F:
sub41CD00(param.asInteger());
break;
case 0x4840:
sub41CD70(param.asInteger());
break;
}
return 0;
}

} // End of namespace Neverhood
9 changes: 9 additions & 0 deletions engines/neverhood/klayman.h
Expand Up @@ -82,6 +82,7 @@ class Klayman : public AnimatedSprite {
void sub421070();
void sub420420();
void sub420ED0();
void sub420750();
void sub4207A0();
void sub4207F0();
void sub420F20();
Expand Down Expand Up @@ -237,6 +238,7 @@ class Klayman : public AnimatedSprite {
uint32 handleMessage41D640(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41EAB0(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41D970(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41DD20(int messageNum, const MessageParam &param, Entity *sender);

void update41D1C0();

Expand Down Expand Up @@ -377,6 +379,13 @@ class KmScene2201 : public Klayman {
uint32 xHandleMessage(int messageNum, const MessageParam &param);
};

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

} // End of namespace Neverhood

#endif /* NEVERHOOD_KLAYMAN_H */

0 comments on commit 31457e1

Please sign in to comment.