Skip to content

Commit

Permalink
NEVERHOOD: Add Module2100 and Scene2101 (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 ced4efc commit 21ebcf2
Show file tree
Hide file tree
Showing 6 changed files with 561 additions and 1 deletion.
18 changes: 17 additions & 1 deletion engines/neverhood/gamemodule.cpp
Expand Up @@ -34,6 +34,7 @@
#include "neverhood/module1800.h"
#include "neverhood/module1900.h"
#include "neverhood/module2000.h"
#include "neverhood/module2100.h"
#include "neverhood/module2200.h"
#include "neverhood/module2300.h"
#include "neverhood/module3000.h"
Expand Down Expand Up @@ -281,10 +282,14 @@ void GameModule::startup() {
_vm->gameState().which = 1;
createModule(1600, -1);
#endif
#if 1
#if 0
_vm->gameState().sceneNum = 6;
createModule(1900, -1);
#endif
#if 1
_vm->gameState().sceneNum = 0;
createModule(2100, 3);
#endif
}

void GameModule::createModule(int moduleNum, int which) {
Expand Down Expand Up @@ -336,6 +341,10 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(0x91080831, 0x08250000);
_childObject = new Module2000(_vm, this, which);
break;
case 2100:
setGlobalVar(0x91080831, 0x10A10C14);
_childObject = new Module2100(_vm, this, which);
break;
case 2200:
setGlobalVar(0x91080831, 0x11391412);
_childObject = new Module2200(_vm, this, which);
Expand Down Expand Up @@ -428,6 +437,13 @@ void GameModule::updateModule() {
case 2000:
createModule(2900, 4);
break;
case 2100:
if (_moduleResult == 1) {
createModule(2900, 1);
} else {
createModule(1600, 0);
}
break;
case 2200:
createModule(2300, 1);
break;
Expand Down
151 changes: 151 additions & 0 deletions engines/neverhood/klayman.cpp
Expand Up @@ -4091,6 +4091,157 @@ void KmScene2001::sub440270() {
SetMessageHandler(&KmScene2001::handleMessage4401A0);
}

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

// Empty
}

uint32 KmScene2101::xHandleMessage(int messageNum, const MessageParam &param) {
uint32 messageResult = 0;
switch (messageNum) {
case 0x2000:
_flag1 = param.asInteger() != 0;
messageResult = 1;
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 0x4811:
setCallback2(AnimationCallback(&KmScene2101::sub4862C0));
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 0x481B:
if (param.asPoint().y != 0) {
sub41CC40(param.asPoint().y, param.asPoint().x);
} else {
sub41CCE0(param.asPoint().x);
}
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:
sub486320();
break;
case 0x483E:
sub486360();
break;
}
return messageResult;
}

uint32 KmScene2101::handleMessage486160(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = handleMessage41D480(messageNum, param, sender);
int16 speedUpFrameIndex;
switch (messageNum) {
case 0x1008:
speedUpFrameIndex = getFrameIndex(kKlaymanSpeedUpHash);
if (_frameIndex < speedUpFrameIndex) {
setFileHash(0x35AA8059, speedUpFrameIndex, -1);
_y = 438;
}
messageResult = 0;
break;
case 0x100D:
if (param.asInteger() == 0x1A1A0785) {
_soundResource1.play(0x40F0A342);
} else if (param.asInteger() == 0x60428026) {
_soundResource1.play(0x40608A59);
}
break;
}
return messageResult;
}

uint32 KmScene2101::handleMessage486230(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = 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 KmScene2101::sub4862C0() {
_status2 = 1;
_flagE5 = false;
setFileHash(0x35AA8059, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&AnimatedSprite::updateDeltaXY);
SetMessageHandler(&KmScene2101::handleMessage486160);
_soundResource1.play(0x402E82D4);
}

void KmScene2101::sub486320() {
_status2 = 0;
_flagE5 = false;
setFileHash(0xFF290E30, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene2101::handleMessage486230);
}

void KmScene2101::sub486360() {
_status2 = 0;
_flagE5 = false;
setFileHash(0x9A28CA1C, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(NULL);
SetMessageHandler(&KmScene2101::handleMessage486230);
}

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) {
Expand Down
13 changes: 13 additions & 0 deletions engines/neverhood/klayman.h
Expand Up @@ -452,6 +452,19 @@ class KmScene2001 : public Klayman {
void sub440270();
};

class KmScene2101 : public Klayman {
public:
KmScene2101(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
protected:
bool _flag1;
uint32 xHandleMessage(int messageNum, const MessageParam &param);
uint32 handleMessage486160(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage486230(int messageNum, const MessageParam &param, Entity *sender);
void sub4862C0();
void sub486320();
void sub486360();
};

class KmScene2201 : public Klayman {
public:
KmScene2201(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y, NRect *clipRects, int clipRectsCount);
Expand Down
1 change: 1 addition & 0 deletions engines/neverhood/module.mk
Expand Up @@ -22,6 +22,7 @@ MODULE_OBJS = \
module1800.o \
module1900.o \
module2000.o \
module2100.o \
module2200.o \
module2300.o \
module3000.o \
Expand Down

0 comments on commit 21ebcf2

Please sign in to comment.