diff options
| author | johndoe123 | 2011-09-13 15:07:48 +0000 | 
|---|---|---|
| committer | Willem Jan Palenstijn | 2013-05-08 20:39:37 +0200 | 
| commit | 9d6e3b95758a16c1b2a441aa5f206c50593202fd (patch) | |
| tree | 7718aa57dc1dc704c0bff0b723267ce325e2947c | |
| parent | b5fc6ed2c0db21d132873fb8d35510bc8c186899 (diff) | |
| download | scummvm-rg350-9d6e3b95758a16c1b2a441aa5f206c50593202fd.tar.gz scummvm-rg350-9d6e3b95758a16c1b2a441aa5f206c50593202fd.tar.bz2 scummvm-rg350-9d6e3b95758a16c1b2a441aa5f206c50593202fd.zip | |
NEVERHOOD: Add Scene1303
| -rw-r--r-- | engines/neverhood/gamemodule.cpp | 2 | ||||
| -rw-r--r-- | engines/neverhood/klayman.cpp | 86 | ||||
| -rw-r--r-- | engines/neverhood/klayman.h | 13 | ||||
| -rw-r--r-- | engines/neverhood/module1300.cpp | 109 | ||||
| -rw-r--r-- | engines/neverhood/module1300.h | 20 | 
5 files changed, 229 insertions, 1 deletions
| diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index f4159f3087..8b984e211f 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -247,7 +247,7 @@ void GameModule::startup() {  	createModule2200(-1);  #endif  #if 1 -	_vm->gameState().sceneNum = 1; +	_vm->gameState().sceneNum = 2;  	createModule1300(-1);  #endif  } diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp index e0359fc28f..d8b1dbee7d 100644 --- a/engines/neverhood/klayman.cpp +++ b/engines/neverhood/klayman.cpp @@ -2892,6 +2892,92 @@ void KmScene1201::sub40E040() {  	}  } +KmScene1303::KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) +	: Klayman(vm, parentScene, x, y, 1000, 1000) { +	 +	// Empty +} + +uint32 KmScene1303::xHandleMessage(int messageNum, const MessageParam ¶m) { +	switch (messageNum) { +	case 0x4804: +		setCallback2(AnimationCallback(&KmScene1303::sub4161D0)); +		break; +	case 0x483B: +		setCallback2(AnimationCallback(&KmScene1303::sub4162B0)); +		break; +	case 0x483C: +		setCallback2(AnimationCallback(&KmScene1303::sub416210)); +		break; +	} +	return 0; +} + +uint32 KmScene1303::handleMessage4160A0(int messageNum, const MessageParam ¶m, Entity *sender) { +	uint32 messageResult = handleMessage41D480(messageNum, param, sender); +	switch (messageNum) { +	case 0x100D: +		if (param.asInteger() == calcHash("PopBalloon")) { +			_parentScene->sendMessage(0x2000, 0, this); +		} else if (param.asInteger() == 0x02B20220) { +			_soundResource1.play(0xC5408620); +		} else if (param.asInteger() == 0x0A720138) { +			_soundResource1.play(0xD4C08010); +		} else if (param.asInteger() == 0xB613A180) { +			_soundResource1.play(0x44051000); +		} +		break; +	} +	return messageResult; +} + +void KmScene1303::update4161A0() { +	Klayman::update(); +	_counter3++; +	if (_counter3 >= _counter3Max) +		sub416250(); +} + +void KmScene1303::sub4161D0() { +	_status2 = 0; +	_flagE5 = true; +	setFileHash(0xAC20C012, 8, 37); +	SetUpdateHandler(&Klayman::update); +	SetSpriteCallback(NULL); +	SetMessageHandler(&Klayman::handleMessage41D480); +	SetAnimationCallback3(&KmScene1303::sub416250); +} + +void KmScene1303::sub416210() { +	_status2 = 1; +	_flagE5 = false; +	setFileHash(0xAC20C012, 43, 49); +	SetUpdateHandler(&Klayman::update); +	SetSpriteCallback(NULL); +	SetMessageHandler(&Klayman::handleMessage41D480); +} + +void KmScene1303::sub416250() { +	_counter3 = 0; +	_status2 = 0; +	_flagE5 = true; +	_counter3Max = _vm->_rnd->getRandomNumber(64) + 24; +	setFileHash(0xAC20C012, 38, 42); +	SetUpdateHandler(&KmScene1303::update4161A0); +	SetSpriteCallback(NULL); +	SetMessageHandler(&Klayman::handleMessage41D360); +	_newHashListIndex = 42; +} + +void KmScene1303::sub4162B0() { +	_status2 = 0; +	_flagE5 = false; +	setFileHash(0x2426932E, 0, -1); +	SetUpdateHandler(&Klayman::update); +	SetSpriteCallback(NULL); +	SetMessageHandler(&KmScene1303::handleMessage4160A0); +} +  // KmScene1401  KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h index 12862e39ae..31a96f7cc7 100644 --- a/engines/neverhood/klayman.h +++ b/engines/neverhood/klayman.h @@ -322,6 +322,19 @@ protected:  	void sub40E040();  }; +class KmScene1303 : public Klayman { +public: +	KmScene1303(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); +protected: +	uint32 xHandleMessage(int messageNum, const MessageParam ¶m); +	uint32 handleMessage4160A0(int messageNum, const MessageParam ¶m, Entity *sender); +	void update4161A0(); +	void sub4161D0(); +	void sub416210(); +	void sub416250(); +	void sub4162B0(); +}; +  class KmScene1401 : public Klayman {  public:  	KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index 7c7beb7cd4..d893e8f483 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -155,6 +155,11 @@ void Module1300::createScene1302(int which) {  }  void Module1300::createScene1303(int which) { +	_vm->gameState().sceneNum = 2; +	// TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0); +	// TODO Music18hList_stop(0x203197, 0, 2); +	_childObject = new Scene1303(_vm, this, which); +	SetUpdateHandler(&Module1300::updateScene1303);  }  void Module1300::createScene1304(int which) { @@ -243,6 +248,14 @@ void Module1300::updateScene1302() {  }  void Module1300::updateScene1303() { +	_childObject->handleUpdate(); +	if (_done) { +		_done = false; +		delete _childObject; +		_childObject = NULL; +		createScene1306(3); +		_childObject->handleUpdate(); +	}  }  void Module1300::updateScene1304() { @@ -661,4 +674,100 @@ uint32 Scene1302::handleMessage(int messageNum, const MessageParam ¶m, Entit  	return messageResult;  } +AsScene1303Balloon::AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene) +	: AnimatedSprite(vm, 1100), _soundResource(vm), _parentScene(parentScene) { +	 +	// TODO createSurface3(200, dword_4AF9F8); +	createSurface(200, 640, 480); //TODO: Remeove once the line above is done +	_x = 289; +	_y = 390; +	SetUpdateHandler(&AnimatedSprite::update); +	SetMessageHandler(&AsScene1303Balloon::handleMessage); +	SetSpriteCallback(&AnimatedSprite::updateDeltaXY); +	setFileHash(0x800278D2, 0, -1); +} + +uint32 AsScene1303Balloon::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { +	uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); +	switch (messageNum) { +	case 0x1011: +		_parentScene->sendMessage(0x4826, 0, this); +		messageResult = 1; +		break; +	case 0x2000: +		stPopBalloon(); +		break; +	} +	return messageResult; +} + +uint32 AsScene1303Balloon::hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender) { +	uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); +	switch (messageNum) { +	case 0x100D: +		if (param.asInteger() == 0x020B0003) { +			_soundResource.play(0x742B0055); +		}  +		break; +	case 0x3002: +		_soundResource.play(0x470007EE); +		setFileHash1(); +		SetMessageHandler(NULL); +		_surface->setVisible(false); +		break; +	} +	return messageResult; +} + +void AsScene1303Balloon::stPopBalloon() { +	setFileHash(0xAC004CD0, 0, -1); +	SetMessageHandler(&AsScene1303Balloon::hmBalloonPopped); +} + +Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which) +	: Scene(vm, parentModule, true) { + +	_surfaceFlag = true; +	SetMessageHandler(&Scene1303::handleMessage); +	setRectList(0x004AF9E8); +	 +	_background = addBackground(new DirtyBackground(_vm, 0x01581A9C, 0, 0)); +	_palette = new Palette(_vm, 0x01581A9C); +	_palette->usePalette(); +	_mouseCursor = addSprite(new Mouse433(_vm, 0x81A9801D, NULL)); + +	if (!getGlobalVar(0xAC00C0D0)) { +		_asBalloon = addSprite(new AsScene1303Balloon(_vm, this)); +		_vm->_collisionMan->addSprite(_asBalloon); +	} +	 +	_sprite1 = addSprite(new StaticSprite(_vm, 0xA014216B, 1100)); + +	_klayman = new KmScene1303(_vm, this, 207, 332); +	addSprite(_klayman); +	setMessageList(0x004AF9A0); + +	_klayman->getSurface()->getClipRect().x1 = _sprite1->getSurface()->getDrawRect().x; +	_klayman->getSurface()->getClipRect().y1 = 0; +	_klayman->getSurface()->getClipRect().x2 = 640; +	_klayman->getSurface()->getClipRect().y2 = 480; + +} + +uint32 Scene1303::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { +	Scene::handleMessage(messageNum, param, sender); +	switch (messageNum) { +	case 0x2000: +		setGlobalVar(0xAC00C0D0, 1); +		_asBalloon->sendMessage(0x2000, 0, this); +		break; +	case 0x4826: +		if (sender == _asBalloon && getGlobalVar(0x31C63C51)) { +			setMessageList(0x004AF9B8); +		} +		break; +	} +	return 0; +} +  } // End of namespace Neverhood diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h index 25dde469b9..edabe4f3a9 100644 --- a/engines/neverhood/module1300.h +++ b/engines/neverhood/module1300.h @@ -127,6 +127,26 @@ protected:  	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender);  }; +class AsScene1303Balloon : public AnimatedSprite { +public: +	AsScene1303Balloon(NeverhoodEngine *vm, Scene *parentScene); +protected: +	Scene *_parentScene; +	SoundResource _soundResource; +	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); +	uint32 hmBalloonPopped(int messageNum, const MessageParam ¶m, Entity *sender); +	void stPopBalloon(); +}; + +class Scene1303 : public Scene { +public: +	Scene1303(NeverhoodEngine *vm, Module *parentModule, int which); +protected: +	Sprite *_sprite1; +	Sprite *_asBalloon; +	uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); +}; +  } // End of namespace Neverhood  #endif /* NEVERHOOD_MODULE1300_H */ | 
