Skip to content

Commit

Permalink
NEVERHOOD: Implement Scene2207 (not complete yet)
Browse files Browse the repository at this point in the history
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 8459fa9 commit 41f8749
Show file tree
Hide file tree
Showing 5 changed files with 712 additions and 3 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 = 5;
_vm->gameState().sceneNum = 6;
createModule2200(-1);
#endif
}
Expand Down
120 changes: 120 additions & 0 deletions engines/neverhood/klayman.cpp
Expand Up @@ -3800,5 +3800,125 @@ void KmScene2206::sub482530() {
setCallback1(AnimationCallback(&Klayman::sub41FB30));
}

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

uint32 KmScene2207::xHandleMessage(int messageNum, const MessageParam &param) {
switch (messageNum) {
case 0x2001:
setCallback2(AnimationCallback(&KmScene2207::sub442460));
break;
case 0x2005:
spriteUpdate442430();
setCallback2(AnimationCallback(&KmScene2207::sub41FC80));
break;
case 0x4001:
case 0x4800:
sub41C930(param.asPoint().x, false);
break;
case 0x4004:
setCallback2(AnimationCallback(&Klayman::sub41FC80));
break;
case 0x480D:
setCallback2(AnimationCallback(&KmScene2207::sub4424B0));
break;
case 0x4812:
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 0x481B:
if (param.asPoint().y != 0) {
sub41CC40(param.asPoint().y, param.asPoint().x);
} else {
sub41CCE0(param.asPoint().x);
}
break;
case 0x4827:
setCallback2(AnimationCallback(&Klayman::sub420E20));
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;
}

void KmScene2207::spriteUpdate442430() {
_x = ((Sprite*)_attachedSprite)->getX() - 20;
_y = ((Sprite*)_attachedSprite)->getY() + 46;
processDelta();
}

void KmScene2207::sub442460() {
if (!sub41CF10(AnimationCallback(&KmScene2207::sub442460))) {
_status2 = 1;
_flagE5 = true;
setFileHash(0x5420E254, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate442430);
SetMessageHandler(&Klayman::handleMessage41D360);
}
}

void KmScene2207::sub4424B0() {
if (!sub41CEB0(AnimationCallback(&KmScene2207::sub4424B0))) {
_status2 = 0;
if (_flagF7) {
sub420D50();
} else {
_flagE5 = false;
setFileHash(0x0C303040, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41E210);
SetAnimationCallback3(&KmScene2207::sub442520);
}
}
}

void KmScene2207::sub442520() {
setFileHash(0x0D318140, 0, -1);
SetAnimationCallback3(&KmScene2207::sub442560);
_attachedSprite->sendMessage(0x480F, 0, this);
}

void KmScene2207::sub442560() {
_flagE5 = true;
_flagF7 = true;
setFileHash(0x1564A2C0, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
SetAnimationCallback3(&KmScene2207::sub4425A0);
}

void KmScene2207::sub4425A0() {
_flagE5 = true;
_flagF7 = true;
setFileHash(0x4464A440, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&KmScene2207::spriteUpdate41F230);
SetMessageHandler(&Klayman::handleMessage41D360);
}

} // End of namespace Neverhood
16 changes: 14 additions & 2 deletions engines/neverhood/klayman.h
Expand Up @@ -125,6 +125,7 @@ class Klayman : public AnimatedSprite {
uint32 handleMessage41D360(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41EB70(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41E210(int messageNum, const MessageParam &param, Entity *sender);

void setKlaymanTable(const KlaymanTableItem *table, int tableCount);
void setKlaymanTable1();
Expand Down Expand Up @@ -213,8 +214,6 @@ class Klayman : public AnimatedSprite {
void sub41F950();
uint32 handleMessage41EC70(int messageNum, const MessageParam &param, Entity *sender);

uint32 handleMessage41E210(int messageNum, const MessageParam &param, Entity *sender);

uint32 handleMessage41D4C0(int messageNum, const MessageParam &param, Entity *sender);

uint32 handleMessage41DAD0(int messageNum, const MessageParam &param, Entity *sender);
Expand Down Expand Up @@ -409,6 +408,19 @@ class KmScene2206 : public Klayman {
void sub482530();
};

class KmScene2207 : public Klayman {
public:
KmScene2207(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
uint32 xHandleMessage(int messageNum, const MessageParam &param);
void spriteUpdate442430();
void sub442460();
void sub4424B0();
void sub442520();
void sub442560();
void sub4425A0();
};

} // End of namespace Neverhood

#endif /* NEVERHOOD_KLAYMAN_H */

0 comments on commit 41f8749

Please sign in to comment.