diff options
Diffstat (limited to 'engines/neverhood/modules/module2700.cpp')
-rw-r--r-- | engines/neverhood/modules/module2700.cpp | 184 |
1 files changed, 54 insertions, 130 deletions
diff --git a/engines/neverhood/modules/module2700.cpp b/engines/neverhood/modules/module2700.cpp index 8b69bc050e..1b78615fdb 100644 --- a/engines/neverhood/modules/module2700.cpp +++ b/engines/neverhood/modules/module2700.cpp @@ -20,20 +20,21 @@ * */ -#include "neverhood/modules/module2700.h" #include "neverhood/gamemodule.h" -#include "neverhood/modules/module1000.h" +#include "neverhood/modules/module1600_sprites.h" +#include "neverhood/modules/module2700.h" +#include "neverhood/modules/module2700_sprites.h" namespace Neverhood { -static const NRect kScene2710ClipRect = NRect(0, 0, 626, 480); +static const NRect kScene2710ClipRect = { 0, 0, 626, 480 }; static const uint32 kScene2710StaticSprites[] = { 0x0D2016C0, 0 }; -static const NRect kScene2711ClipRect = NRect(0, 0, 521, 480); +static const NRect kScene2711ClipRect = { 0, 0, 521, 480 }; static const uint32 kScene2711FileHashes1[] = { 0, @@ -68,14 +69,14 @@ static const uint32 kScene2711FileHashes3[] = { 0 }; -static const NRect kScene2724ClipRect = NRect(0, 141, 640, 480); +static const NRect kScene2724ClipRect = { 0, 141, 640, 480 }; static const uint32 kScene2724StaticSprites[] = { 0xC20D00A5, 0 }; -static const NRect kScene2725ClipRect = NRect(0, 0, 640, 413); +static const NRect kScene2725ClipRect = { 0, 0, 640, 413 }; static const uint32 kScene2725StaticSprites[] = { 0xC20E00A5, @@ -83,8 +84,8 @@ static const uint32 kScene2725StaticSprites[] = { }; Module2700::Module2700(NeverhoodEngine *vm, Module *parentModule, int which) - : Module(vm, parentModule), _soundIndex(0), _raidoMusicInitialized(false) { - + : Module(vm, parentModule), _soundIndex(0), _radioMusicInitialized(false) { + _vm->_soundMan->addMusic(0x42212411, 0x04020210); _vm->_soundMan->startMusic(0x04020210, 24, 2); SetMessageHandler(&Module2700::handleMessage); @@ -111,7 +112,7 @@ Module2700::~Module2700() { } void Module2700::createScene(int sceneNum, int which) { - debug("Module2700::createScene(%d, %d)", sceneNum, which); + debug(1, "Module2700::createScene(%d, %d)", sceneNum, which); _sceneNum = sceneNum; switch (_sceneNum) { case 0: @@ -500,7 +501,7 @@ void Module2700::updateScene() { } else { switch (_sceneNum) { case 21: - if (!_raidoMusicInitialized) { + if (!_radioMusicInitialized) { _vm->_soundMan->stopMusic(0x04020210, 0, 1); _vm->gameModule()->initRadioPuzzle(); _musicFileHash = getGlobalVar(V_GOOD_RADIO_MUSIC_NAME); @@ -508,7 +509,7 @@ void Module2700::updateScene() { _vm->_soundMan->startMusic(_musicFileHash, 0, 2); _vm->_soundMan->addSound(0x42212411, 0x44014282); _vm->_soundMan->setSoundParams(0x44014282, true, 120, 360, 72, 0); - _raidoMusicInitialized = true; + _radioMusicInitialized = true; } break; } @@ -527,7 +528,7 @@ uint32 Module2700::handleMessage(int messageNum, const MessageParam ¶m, Enti } return messageResult; } - + void Module2700::createScene2703(int which, uint32 trackInfoId) { _childObject = new Scene2703(_vm, this, which, trackInfoId); } @@ -536,98 +537,21 @@ void Module2700::createScene2704(int which, uint32 trackInfoId, int16 value, con _childObject = new Scene2704(_vm, this, which, trackInfoId, value, staticSprites, clipRect); } -static const NPoint kCarShadowOffsets[] = { - {-63, 3}, {-48, 40}, {-33, 58}, - { 0, 65}, { 40, 53}, { 56, 27}, - { 63, 0}, {-30, 26}, { 0, 30}, - { 26, 25} -}; - -SsCommonTrackShadowBackground::SsCommonTrackShadowBackground(NeverhoodEngine *vm, uint32 fileHash) - : StaticSprite(vm, 0) { - - loadSprite(fileHash, kSLFDefDrawOffset | kSLFDefPosition, 0); -} - -AsCommonCarShadow::AsCommonCarShadow(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index) - : AnimatedSprite(vm, 1100), _asCar(asCar), _index(index), _animFileHash(0) { - - SetUpdateHandler(&AsCommonCarShadow::update); - createShadowSurface(shadowSurface, 211, 147, 100); - updateShadow(); -} - -void AsCommonCarShadow::update() { - updateShadow(); - AnimatedSprite::update(); -} - -void AsCommonCarShadow::updateShadow() { - if (_asCar->getFrameIndex() != _currFrameIndex || _asCar->getCurrAnimFileHash() != _animFileHash) { - uint32 fileHash = _asCar->getCurrAnimFileHash(); - if (fileHash == 0x35698F78 || fileHash == 0x192ADD30 || fileHash == 0x9C220DA4 || - fileHash == 0x9966B138 || fileHash == 0xB579A77C || fileHash == 0xA86A9538 || - fileHash == 0xD4220027 || fileHash == 0xD00A1364 || fileHash == 0xD4AA03A4 || - fileHash == 0xF46A0324) { - startAnimation(fileHash, _asCar->getFrameIndex(), -1); - _newStickFrameIndex = _asCar->getFrameIndex(); - } - _animFileHash = fileHash; - } - _x = _asCar->getX() + kCarShadowOffsets[_index].x; - _y = _asCar->getY() + kCarShadowOffsets[_index].y; - if (!_asCar->getVisible()) { - startAnimation(0x1209E09F, 0, -1); - _newStickFrameIndex = 0; - } - setDoDeltaX(_asCar->isDoDeltaX() ? 1 : 0); -} - -AsCommonCarConnectorShadow::AsCommonCarConnectorShadow(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, uint index) - : AnimatedSprite(vm, 1100), _asCar(asCar), _index(index) { - - SetUpdateHandler(&AsCommonCarConnectorShadow::update); - createShadowSurface1(shadowSurface, 0x60281C10, 150); - startAnimation(0x60281C10, -1, -1); - _newStickFrameIndex = STICK_LAST_FRAME; -} - -void AsCommonCarConnectorShadow::update() { - _x = _asCar->getX() + kCarShadowOffsets[_index].x; - _y = _asCar->getY() + kCarShadowOffsets[_index].y; - AnimatedSprite::update(); -} - -AsCommonCarTrackShadow::AsCommonCarTrackShadow(NeverhoodEngine *vm, Sprite *asCar, BaseSurface *shadowSurface, int16 frameIndex) - : AnimatedSprite(vm, 1100), _asCar(asCar) { - - SetUpdateHandler(&AsCommonCarTrackShadow::update); - createShadowSurface1(shadowSurface, 0x0759129C, 100); - startAnimation(0x0759129C, frameIndex, -1); - _newStickFrameIndex = frameIndex; -} - -void AsCommonCarTrackShadow::update() { - _x = _asCar->getX(); - _y = _asCar->getY(); - AnimatedSprite::update(); -} - Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which) : Scene(vm, parentModule) { - + Sprite *tempSprite; - + NRect clipRect; TrackInfo *tracks = _vm->_staticData->getTrackInfo(0x004B2240); setGlobalVar(V_CAR_DELTA_X, 1); - + setBackground(tracks->bgFilename); setPalette(tracks->bgFilename); _palette->addPalette(calcHash("paPodFloor"), 65, 31, 65); _palette->addPalette(calcHash("paKlayFloor"), 0, 65, 0); insertScreenMouse(0x08B08180); - + tempSprite = insertStaticSprite(0x1E086325, 1200); clipRect.set(0, 0, 640, tempSprite->getDrawRect().y2()); @@ -661,7 +585,7 @@ Scene2701::Scene2701(NeverhoodEngine *vm, Module *parentModule, int which) if (testPoint.x < 0 || testPoint.x >= 640 || testPoint.y < 0 || testPoint.y >= 480) sendMessage(_asCar, 0x2008, 150); } - + _asCar->setClipRect(clipRect); _asCarConnector->setClipRect(clipRect); @@ -715,10 +639,10 @@ uint32 Scene2701::hmCarAtHome(int messageNum, const MessageParam ¶m, Entity Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which) : Scene(vm, parentModule), _isInLight(true), _newTrackIndex(-1) { - + SetMessageHandler(&Scene2702::handleMessage); SetUpdateHandler(&Scene2702::update); - + setBackground(0x18808B00); setPalette(0x18808B00); _palette->addPalette(calcHash("paPodFloor"), 65, 31, 65); @@ -734,7 +658,7 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which) _asCarTrackShadow = insertSprite<AsCommonCarTrackShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4); _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4); _dataResource.load(0x04310014); - + if (which == 1) { _isUpperTrack = false; _currTrackIndex = 1; @@ -765,11 +689,11 @@ Scene2702::Scene2702(NeverhoodEngine *vm, Module *parentModule, int which) } if (_isUpperTrack) { - _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5F68)); + _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5F68)); _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5F8C)); _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FB0)); } else { - _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FD8)); + _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FD8)); _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B5FFC)); _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B6020)); } @@ -873,19 +797,19 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3 : Scene(vm, parentModule) { TrackInfo *tracks = _vm->_staticData->getTrackInfo(trackInfoId); - + SetMessageHandler(&Scene2703::handleMessage); SetUpdateHandler(&Scene2703::update); - + setBackground(tracks->bgFilename); setPalette(tracks->bgFilename); _palette->addPalette(calcHash("paPodShade"), 65, 31, 65); _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0); addEntity(_palette); insertScreenMouse(tracks->mouseCursorFilename); - + _palStatus = 2; - + if (tracks->bgShadowFilename) { _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(tracks->bgShadowFilename); addEntity(_ssTrackShadowBackground); @@ -905,7 +829,7 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3 _dataResource.load(tracks->dataResourceFilename); _trackPoints = _dataResource.getPointArray(tracks->trackPointsName); _asCar->setPathPoints(_trackPoints); - + if (which == _which2) { NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1]; sendMessage(_asCar, 0x2002, _trackPoints->size() - 1); @@ -921,7 +845,7 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3 else sendMessage(_asCar, 0x2008, 150); } - + if (which == 0) { _palette->addPalette(calcHash("paPodShade"), 65, 31, 65); _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0); @@ -931,9 +855,9 @@ Scene2703::Scene2703(NeverhoodEngine *vm, Module *parentModule, int which, uint3 _palette->addPalette(calcHash("paKlayBlack"), 0, 65, 0); _palStatus = 0; } - + _palette->copyBasePalette(0, 256, 0); - + } void Scene2703::update() { @@ -981,16 +905,16 @@ uint32 Scene2703::handleMessage(int messageNum, const MessageParam ¶m, Entit } return 0; } - + Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint32 trackInfoId, int16 value, const uint32 *staticSprites, const NRect *clipRect) : Scene(vm, parentModule) { TrackInfo *tracks = _vm->_staticData->getTrackInfo(trackInfoId); - + SetMessageHandler(&Scene2704::handleMessage); SetUpdateHandler(&Scene2704::update); - + setBackground(tracks->bgFilename); setPalette(tracks->bgFilename); @@ -999,12 +923,12 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3 if (tracks->exPaletteFilename2) _palette->addPalette(tracks->exPaletteFilename2, 65, 31, 65); - + while (staticSprites && *staticSprites) insertStaticSprite(*staticSprites++, 1100); insertScreenMouse(tracks->mouseCursorFilename); - + if (tracks->bgShadowFilename) { _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(tracks->bgShadowFilename); addEntity(_ssTrackShadowBackground); @@ -1024,7 +948,7 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3 _dataResource.load(tracks->dataResourceFilename); _trackPoints = _dataResource.getPointArray(tracks->trackPointsName); _asCar->setPathPoints(_trackPoints); - + if (which == _which2) { NPoint testPoint = (*_trackPoints)[_trackPoints->size() - 1]; sendMessage(_asCar, 0x2002, _trackPoints->size() - 1); @@ -1040,21 +964,21 @@ Scene2704::Scene2704(NeverhoodEngine *vm, Module *parentModule, int which, uint3 else sendMessage(_asCar, 0x2008, 0); } - + if (clipRect) { _asCar->getClipRect() = *clipRect; if (_asCarShadow) - _asCarShadow->getClipRect() = *clipRect; + _asCarShadow->getClipRect() = *clipRect; if (_asCarTrackShadow) - _asCarTrackShadow->getClipRect() = *clipRect; + _asCarTrackShadow->getClipRect() = *clipRect; if (_asCarConnectorShadow) - _asCarConnectorShadow->getClipRect() = *clipRect; + _asCarConnectorShadow->getClipRect() = *clipRect; if (_asCarConnector) _asCarConnector->getClipRect() = *clipRect; } } - + void Scene2704::update() { Scene::update(); if (_mouseClicked) { @@ -1083,24 +1007,24 @@ uint32 Scene2704::handleMessage(int messageNum, const MessageParam ¶m, Entit Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which) : Scene(vm, parentModule), _newTrackIndex(-1) { - + SetMessageHandler(&Scene2706::handleMessage); - _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22A0)); + _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22A0)); _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22C4)); _tracks.push_back(_vm->_staticData->getTrackInfo(0x004B22E8)); - + setBackground(0x18808B88); setPalette(0x18808B88); - + _palette->addPalette(calcHash("paPodShade"), 65, 31, 65); _palette->addPalette(calcHash("paKlayShade"), 0, 65, 0); - + insertScreenMouse(0x08B8C180); _ssTrackShadowBackground = createSprite<SsCommonTrackShadowBackground>(0x18808B88); addEntity(_ssTrackShadowBackground); - + _asCar = insertSprite<AsCommonCar>(this, 320, 240); _asCarShadow = insertSprite<AsCommonCarShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4); _asCarConnector = insertSprite<AsCommonCarConnector>(_asCar); @@ -1108,10 +1032,10 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which) _asCarConnectorShadow = insertSprite<AsCommonCarConnectorShadow>(_asCar, _ssTrackShadowBackground->getSurface(), 4); _dataResource.load(0x06000162); - + if (which == 5) _currTrackIndex = 2; - else if (which == 6) + else if (which == 6) _currTrackIndex = 1; else _currTrackIndex = 0; @@ -1123,16 +1047,16 @@ Scene2706::Scene2706(NeverhoodEngine *vm, Module *parentModule, int which) sendMessage(_asCar, 0x2002, _trackPoints->size() - 1); if (which == 5) sendMessage(_asCar, 0x2007, 50); - else + else sendMessage(_asCar, 0x2007, 150); } else { sendMessage(_asCar, 0x2002, 0); if (which == 5) sendMessage(_asCar, 0x2008, 50); - else + else sendMessage(_asCar, 0x2008, 150); } - + } uint32 Scene2706::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1192,7 +1116,7 @@ void Scene2706::changeTrack() { Scene2732::Scene2732(NeverhoodEngine *vm, Module *parentModule) : Scene(vm, parentModule) { - + Sprite *tempSprite; setBackground(0x0220C041); |