diff options
author | Kamil Zbróg | 2013-11-04 11:40:22 +0000 |
---|---|---|
committer | Kamil Zbróg | 2013-11-04 11:40:22 +0000 |
commit | 85694ec1f5793eb4025f4153ef4bf71d3769d699 (patch) | |
tree | c93fab58eb2f52eca244895a9867d28134dbd7f5 /engines/neverhood | |
parent | 026390145b0e947be7cccf3d9ba329eb2270a2ed (diff) | |
parent | 9dc35033f523c9c694f24e15ed45ba6194786a25 (diff) | |
download | scummvm-rg350-85694ec1f5793eb4025f4153ef4bf71d3769d699.tar.gz scummvm-rg350-85694ec1f5793eb4025f4153ef4bf71d3769d699.tar.bz2 scummvm-rg350-85694ec1f5793eb4025f4153ef4bf71d3769d699.zip |
Merge remote-tracking branch 'own/prince' into prince-malik
Conflicts:
engines/prince/debugger.cpp
engines/prince/debugger.h
engines/prince/detection.cpp
engines/prince/font.cpp
engines/prince/graphics.cpp
engines/prince/prince.cpp
engines/prince/prince.h
engines/prince/script.cpp
engines/prince/script.h
Diffstat (limited to 'engines/neverhood')
-rw-r--r-- | engines/neverhood/detection.cpp | 12 | ||||
-rw-r--r-- | engines/neverhood/klaymen.cpp | 67 | ||||
-rw-r--r-- | engines/neverhood/klaymen.h | 7 | ||||
-rw-r--r-- | engines/neverhood/menumodule.cpp | 2 | ||||
-rw-r--r-- | engines/neverhood/modules/module1000_sprites.cpp | 229 | ||||
-rw-r--r-- | engines/neverhood/modules/module1000_sprites.h | 5 | ||||
-rw-r--r-- | engines/neverhood/modules/module2200.cpp | 14 | ||||
-rw-r--r-- | engines/neverhood/modules/module2800.cpp | 3 | ||||
-rw-r--r-- | engines/neverhood/neverhood.cpp | 1 | ||||
-rw-r--r-- | engines/neverhood/screen.h | 1 |
10 files changed, 182 insertions, 159 deletions
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp index 96c87ab3ae..efd0699d58 100644 --- a/engines/neverhood/detection.cpp +++ b/engines/neverhood/detection.cpp @@ -152,13 +152,20 @@ static const NeverhoodGameDescription gameDescriptions[] = { } // End of namespace Neverhood -static const ExtraGuiOption neverhoodExtraGuiOption = { +static const ExtraGuiOption neverhoodExtraGuiOption1 = { _s("Use original save/load screens"), _s("Use the original save/load screens, instead of the ScummVM ones"), "originalsaveload", false }; +static const ExtraGuiOption neverhoodExtraGuiOption2 = { + _s("Skip the Hall of Records storyboard scenes"), + _s("Allows the player to skip past the Hall of Records storyboard scenes"), + "skiphallofrecordsscenes", + false +}; + class NeverhoodMetaEngine : public AdvancedMetaEngine { public: NeverhoodMetaEngine() : AdvancedMetaEngine(Neverhood::gameDescriptions, sizeof(Neverhood::NeverhoodGameDescription), neverhoodGames) { @@ -212,7 +219,8 @@ bool NeverhoodMetaEngine::createInstance(OSystem *syst, Engine **engine, const A const ExtraGuiOptions NeverhoodMetaEngine::getExtraGuiOptions(const Common::String &target) const { ExtraGuiOptions options; - options.push_back(neverhoodExtraGuiOption); + options.push_back(neverhoodExtraGuiOption1); + options.push_back(neverhoodExtraGuiOption2); return options; } diff --git a/engines/neverhood/klaymen.cpp b/engines/neverhood/klaymen.cpp index 666b20a08a..e1a0d72d50 100644 --- a/engines/neverhood/klaymen.cpp +++ b/engines/neverhood/klaymen.cpp @@ -300,7 +300,7 @@ void Klaymen::stSitIdleTeleporterBlink() { void Klaymen::stSitIdleTeleporterBlinkSecond() { _busyStatus = 0; _acceptInput = true; - startAnimation(0x5C24C018, 0, -1); + startAnimation(0x582EC138, 0, -1); SetUpdateHandler(&Klaymen::upSitIdleTeleporter); SetMessageHandler(&Klaymen::hmLowLevel); SetSpriteUpdate(NULL); @@ -2438,47 +2438,6 @@ uint32 Klaymen::hmStandIdleSpecial(int messageNum, const MessageParam ¶m, En return 0; } -uint32 Klaymen::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x100D: - if (param.asInteger() == 0x942D2081) { - _acceptInput = false; - sendMessage(_attachedSprite, 0x2003, 0); - } else if (param.asInteger() == 0xDA600012) { - stHitByBoxingGlove(); - } else if (param.asInteger() == 0x0D01B294) { - _acceptInput = false; - sendMessage(_attachedSprite, 0x480B, 0); - } - break; - } - return messageResult; -} - -uint32 Klaymen::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) { - int16 speedUpFrameIndex; - uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); - switch (messageNum) { - case 0x1008: - speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash); - if (_currFrameIndex < speedUpFrameIndex) { - startAnimation(0x35AA8059, speedUpFrameIndex, -1); - _y = 435; - } - messageResult = 0; - break; - case 0x100D: - if (param.asInteger() == 0x1A1A0785) { - playSound(0, 0x40F0A342); - } else if (param.asInteger() == 0x60428026) { - playSound(0, 0x40608A59); - } - break; - } - return messageResult; -} - void Klaymen::suFallDown() { AnimatedSprite::updateDeltaXY(); HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10); @@ -2546,30 +2505,6 @@ void Klaymen::stFallTouchdown() { stTryStandIdle(); } -void Klaymen::stPressDoorButton() { - _busyStatus = 2; - _acceptInput = true; - setDoDeltaX(0); - startAnimation(0x1CD89029, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmPressDoorButton); - SetSpriteUpdate(&Klaymen::suAction); -} - -void Klaymen::stHitByBoxingGlove() { - _busyStatus = 1; - _acceptInput = false; - startAnimation(0x35AA8059, 0, -1); - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&Klaymen::hmHitByBoxingGlove); - SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); - FinalizeState(&Klaymen::evHitByBoxingGloveDone); -} - -void Klaymen::evHitByBoxingGloveDone() { - sendMessage(_parentScene, 0x1024, 1); -} - void Klaymen::suFallSkipJump() { updateDeltaXY(); HitRect *hitRect = _parentScene->findHitRectAtPos(_x, _y + 10); diff --git a/engines/neverhood/klaymen.h b/engines/neverhood/klaymen.h index 524bb9a9f2..a614560fc0 100644 --- a/engines/neverhood/klaymen.h +++ b/engines/neverhood/klaymen.h @@ -248,10 +248,6 @@ public: uint32 hmMoveObject(int messageNum, const MessageParam ¶m, Entity *sender); void upMoveObject(); - void stHitByBoxingGlove(); - uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender); - void evHitByBoxingGloveDone(); - void stStandIdleSmall(); void stWonderAboutSmall(); void stWonderAboutHalfSmall(); @@ -271,9 +267,6 @@ public: void stStandIdleSpecial(); uint32 hmStandIdleSpecial(int messageNum, const MessageParam ¶m, Entity *sender); - void stPressDoorButton(); - uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender); - void stSpitOutFall0(); void stSpitOutFall2(); void suFallDown(); diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp index 5ad2dd69d7..6b0635598f 100644 --- a/engines/neverhood/menumodule.cpp +++ b/engines/neverhood/menumodule.cpp @@ -405,6 +405,7 @@ CreditsScene::CreditsScene(NeverhoodEngine *vm, Module *parentModule, bool canAb _ticksTime = _vm->_system->getMillis() + 202100; + _vm->toggleSoundUpdate(true); _musicResource = new MusicResource(_vm); _musicResource->load(0x30812225); _musicResource->play(0); @@ -414,6 +415,7 @@ CreditsScene::CreditsScene(NeverhoodEngine *vm, Module *parentModule, bool canAb CreditsScene::~CreditsScene() { _musicResource->unload(); delete _musicResource; + _vm->toggleSoundUpdate(false); } void CreditsScene::update() { diff --git a/engines/neverhood/modules/module1000_sprites.cpp b/engines/neverhood/modules/module1000_sprites.cpp index 55618f0124..573474de02 100644 --- a/engines/neverhood/modules/module1000_sprites.cpp +++ b/engines/neverhood/modules/module1000_sprites.cpp @@ -1112,23 +1112,6 @@ KmScene1002::KmScene1002(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 setKlaymenIdleTable1(); } -void KmScene1002::setupJumpToRing() { - _acceptInput = false; - SetUpdateHandler(&Klaymen::update); - SetMessageHandler(&KmScene1002::hmJumpToRing); - SetSpriteUpdate(&Klaymen::suUpdateDestX); - NextState(&KmScene1002::stHangOnRing); - sendMessage(_attachedSprite, 0x482B, 0); -} - -void KmScene1002::stJumpToRing1() { - if (!stStartAction(AnimationCallback(&KmScene1002::stJumpToRing1))) { - _busyStatus = 0; - startAnimation(0xD82890BA, 0, -1); - setupJumpToRing(); - } -} - void KmScene1002::xUpdate() { if (_x >= 250 && _x <= 435 && _y >= 420) { if (_idleTableNum == 0) { @@ -1189,7 +1172,7 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) { break; case 0x4816: if (param.asInteger() == 0) - GotoState(&Klaymen::stPressDoorButton); + GotoState(&KmScene1002::stPressDoorButton); break; case 0x4817: setDoDeltaX(param.asInteger()); @@ -1238,70 +1221,13 @@ uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam ¶m) { return 0; } -KmScene1004::KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) - : Klaymen(vm, parentScene, x, y) { - - _dataResource.load(0x01900A04); -} - -uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) { - switch (messageNum) { - case 0x4001: - case 0x4800: - startWalkToX(param.asPoint().x, false); - break; - case 0x4004: - GotoState(&Klaymen::stTryStandIdle); - break; - case 0x4817: - setDoDeltaX(param.asInteger()); - gotoNextStateExt(); - break; - case 0x4818: - startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); - break; - case 0x481E: - GotoState(&KmScene1004::stReadNote); - break; - case 0x4820: - sendMessage(_parentScene, 0x2000, 0); - GotoState(&Klaymen::stContinueClimbLadderUp); - break; - case 0x4821: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4822: - sendMessage(_parentScene, 0x2000, 0); - _destY = param.asInteger(); - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4823: - sendMessage(_parentScene, 0x2001, 0); - GotoState(&Klaymen::stClimbLadderHalf); - break; - case 0x4824: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klaymen::stStartClimbLadderDown); - break; - case 0x4825: - sendMessage(_parentScene, 0x2000, 0); - _destY = _dataResource.getPoint(param.asInteger()).y; - GotoState(&Klaymen::stStartClimbLadderUp); - break; - case 0x4828: - GotoState(&Klaymen::stTurnToBackToUse); - break; - case 0x483F: - startSpecialWalkRight(param.asInteger()); - break; - case 0x4840: - startSpecialWalkLeft(param.asInteger()); - break; - } - return 0; +void KmScene1002::setupJumpToRing() { + _acceptInput = false; + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&KmScene1002::hmJumpToRing); + SetSpriteUpdate(&Klaymen::suUpdateDestX); + NextState(&KmScene1002::stHangOnRing); + sendMessage(_attachedSprite, 0x482B, 0); } uint32 KmScene1002::hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1332,6 +1258,14 @@ void KmScene1002::stHangOnRing() { SetSpriteUpdate(NULL); } +void KmScene1002::stJumpToRing1() { + if (!stStartAction(AnimationCallback(&KmScene1002::stJumpToRing1))) { + _busyStatus = 0; + startAnimation(0xD82890BA, 0, -1); + setupJumpToRing(); + } +} + void KmScene1002::stJumpToRing2() { if (!stStartAction(AnimationCallback(&KmScene1002::stJumpToRing2))) { _busyStatus = 0; @@ -1542,6 +1476,137 @@ uint32 KmScene1002::hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam & return messageResult; } +void KmScene1002::stPressDoorButton() { + _busyStatus = 2; + _acceptInput = true; + setDoDeltaX(0); + startAnimation(0x1CD89029, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&KmScene1002::hmPressDoorButton); + SetSpriteUpdate(&Klaymen::suAction); +} + +void KmScene1002::stHitByBoxingGlove() { + _busyStatus = 1; + _acceptInput = false; + startAnimation(0x35AA8059, 0, -1); + SetUpdateHandler(&Klaymen::update); + SetMessageHandler(&KmScene1002::hmHitByBoxingGlove); + SetSpriteUpdate(&AnimatedSprite::updateDeltaXY); + FinalizeState(&KmScene1002::evHitByBoxingGloveDone); +} + +void KmScene1002::evHitByBoxingGloveDone() { + sendMessage(_parentScene, 0x1024, 1); +} + +uint32 KmScene1002::hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x942D2081) { + _acceptInput = false; + sendMessage(_attachedSprite, 0x2003, 0); + } else if (param.asInteger() == 0xDA600012) { + stHitByBoxingGlove(); + } else if (param.asInteger() == 0x0D01B294) { + _acceptInput = false; + sendMessage(_attachedSprite, 0x480B, 0); + } + break; + } + return messageResult; +} + +uint32 KmScene1002::hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender) { + int16 speedUpFrameIndex; + uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); + switch (messageNum) { + case 0x1008: + speedUpFrameIndex = getFrameIndex(kKlaymenSpeedUpHash); + if (_currFrameIndex < speedUpFrameIndex) { + startAnimation(0x35AA8059, speedUpFrameIndex, -1); + _y = 435; + } + messageResult = 0; + break; + case 0x100D: + if (param.asInteger() == 0x1A1A0785) { + playSound(0, 0x40F0A342); + } else if (param.asInteger() == 0x60428026) { + playSound(0, 0x40608A59); + } + break; + } + return messageResult; +} + +KmScene1004::KmScene1004(NeverhoodEngine *vm, Scene *parentScene, int16 x, int16 y) + : Klaymen(vm, parentScene, x, y) { + + _dataResource.load(0x01900A04); +} + +uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) { + switch (messageNum) { + case 0x4001: + case 0x4800: + startWalkToX(param.asPoint().x, false); + break; + case 0x4004: + GotoState(&Klaymen::stTryStandIdle); + break; + case 0x4817: + setDoDeltaX(param.asInteger()); + gotoNextStateExt(); + break; + case 0x4818: + startWalkToX(_dataResource.getPoint(param.asInteger()).x, false); + break; + case 0x481E: + GotoState(&KmScene1004::stReadNote); + break; + case 0x4820: + sendMessage(_parentScene, 0x2000, 0); + GotoState(&Klaymen::stContinueClimbLadderUp); + break; + case 0x4821: + sendMessage(_parentScene, 0x2000, 0); + _destY = param.asInteger(); + GotoState(&Klaymen::stStartClimbLadderDown); + break; + case 0x4822: + sendMessage(_parentScene, 0x2000, 0); + _destY = param.asInteger(); + GotoState(&Klaymen::stStartClimbLadderUp); + break; + case 0x4823: + sendMessage(_parentScene, 0x2001, 0); + GotoState(&Klaymen::stClimbLadderHalf); + break; + case 0x4824: + sendMessage(_parentScene, 0x2000, 0); + _destY = _dataResource.getPoint(param.asInteger()).y; + GotoState(&Klaymen::stStartClimbLadderDown); + break; + case 0x4825: + sendMessage(_parentScene, 0x2000, 0); + _destY = _dataResource.getPoint(param.asInteger()).y; + GotoState(&Klaymen::stStartClimbLadderUp); + break; + case 0x4828: + GotoState(&Klaymen::stTurnToBackToUse); + break; + case 0x483F: + startSpecialWalkRight(param.asInteger()); + break; + case 0x4840: + startSpecialWalkLeft(param.asInteger()); + break; + } + return 0; +} + uint32 KmScene1004::hmReadNote(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = hmLowLevelAnimation(messageNum, param, sender); switch (messageNum) { diff --git a/engines/neverhood/modules/module1000_sprites.h b/engines/neverhood/modules/module1000_sprites.h index 540a258ddc..564b3cc335 100644 --- a/engines/neverhood/modules/module1000_sprites.h +++ b/engines/neverhood/modules/module1000_sprites.h @@ -230,6 +230,9 @@ protected: void stMoveVenusFlyTrap(); void stContinueMovingVenusFlyTrap(); void evMoveVenusFlyTrapDone(); + void stPressDoorButton(); + void stHitByBoxingGlove(); + void evHitByBoxingGloveDone(); uint32 hmJumpToRing(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmJumpToRing3(int messageNum, const MessageParam ¶m, Entity *sender); @@ -238,6 +241,8 @@ protected: uint32 hmJumpAndFall(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); uint32 hmFirstMoveVenusFlyTrap(int messageNum, const MessageParam ¶m, Entity *sender); + uint32 hmPressDoorButton(int messageNum, const MessageParam ¶m, Entity *sender); + uint32 hmHitByBoxingGlove(int messageNum, const MessageParam ¶m, Entity *sender); void xUpdate(); uint32 xHandleMessage(int messageNum, const MessageParam ¶m); diff --git a/engines/neverhood/modules/module2200.cpp b/engines/neverhood/modules/module2200.cpp index 745af42f72..eecddf904c 100644 --- a/engines/neverhood/modules/module2200.cpp +++ b/engines/neverhood/modules/module2200.cpp @@ -20,6 +20,8 @@ * */ +#include "common/config-manager.h" + #include "neverhood/diskplayerscene.h" #include "neverhood/gamemodule.h" #include "neverhood/modules/module1000_sprites.h" @@ -46,6 +48,18 @@ Module2200::~Module2200() { } void Module2200::createScene(int sceneNum, int which) { + if (sceneNum == 46 && ConfMan.getBool("skiphallofrecordsscenes")) { + // Skip the whole Hall of Records storyboard scenes, + // and teleport to the last scene + sceneNum = 41; + } + + if (sceneNum == 40 && ConfMan.getBool("skiphallofrecordsscenes")) { + // Skip the whole Hall of Records storyboard scenes, + // and teleport back to the first scene + sceneNum = 5; + } + debug(1, "Module2200::createScene(%d, %d)", sceneNum, which); _sceneNum = sceneNum; switch (_sceneNum) { diff --git a/engines/neverhood/modules/module2800.cpp b/engines/neverhood/modules/module2800.cpp index 0578a5df2e..d51515ce81 100644 --- a/engines/neverhood/modules/module2800.cpp +++ b/engines/neverhood/modules/module2800.cpp @@ -208,6 +208,8 @@ void Module2800::createScene(int sceneNum, int which) { break; case 1001: _vm->_soundMan->stopMusic(0xD2FA4D14, 0, 0); + _musicResource->stop(0); + _currentMusicFileHash = 0; createSmackerScene(0x00800801, true, true, false); break; } @@ -354,7 +356,6 @@ void Module2800::updateScene() { } void Module2800::updateMusic(bool halfVolume) { - uint32 newMusicFileHash = _vm->_gameModule->getCurrRadioMusicFileHash(); if (!_musicResource) diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp index 1fb32a1834..b961bccea7 100644 --- a/engines/neverhood/neverhood.cpp +++ b/engines/neverhood/neverhood.cpp @@ -79,6 +79,7 @@ Common::Error NeverhoodEngine::run() { // Assign default values to the config manager, in case settings are missing ConfMan.registerDefault("originalsaveload", "false"); + ConfMan.registerDefault("skiphallofrecordsscenes", "false"); _staticData = new StaticData(); _staticData->load("neverhood.dat"); diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h index c778066152..a9b5af02f6 100644 --- a/engines/neverhood/screen.h +++ b/engines/neverhood/screen.h @@ -79,7 +79,6 @@ public: void drawSurface2(const Graphics::Surface *surface, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version, const Graphics::Surface *shadowSurface = NULL); void drawSurface3(const Graphics::Surface *surface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect, bool transparent, byte version); - void drawShadowSurface(const Graphics::Surface *surface, const Graphics::Surface *shadowSurface, int16 x, int16 y, NDrawRect &drawRect, NRect &clipRect); void drawDoubleSurface2(const Graphics::Surface *surface, NDrawRect &drawRect); void drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDrawRect &sysRect, NRect &clipRect, bool transparent, byte version); void drawSurfaceClipRects(const Graphics::Surface *surface, NDrawRect &drawRect, NRect *clipRects, uint clipRectsCount, bool transparent, byte version); |