diff options
author | johndoe123 | 2012-10-22 18:09:27 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:47:34 +0200 |
commit | 1589e4fe7d01e668ee5d5d02684e073df1242ad4 (patch) | |
tree | c97beaff0d1265e9caeb9cd029d63a6551deb8ba | |
parent | bf1371c9d49845d3aadab2b235208bf601ab3987 (diff) | |
download | scummvm-rg350-1589e4fe7d01e668ee5d5d02684e073df1242ad4.tar.gz scummvm-rg350-1589e4fe7d01e668ee5d5d02684e073df1242ad4.tar.bz2 scummvm-rg350-1589e4fe7d01e668ee5d5d02684e073df1242ad4.zip |
NEVERHOOD: Add new method StaticSprite::loadSprite and use it instead of setting stuff "manually"
-rw-r--r-- | engines/neverhood/diskplayerscene.cpp | 28 | ||||
-rw-r--r-- | engines/neverhood/gamemodule.cpp | 4 | ||||
-rw-r--r-- | engines/neverhood/menumodule.cpp | 12 | ||||
-rw-r--r-- | engines/neverhood/module1000.cpp | 60 | ||||
-rw-r--r-- | engines/neverhood/module1100.cpp | 28 | ||||
-rw-r--r-- | engines/neverhood/module1200.cpp | 15 | ||||
-rw-r--r-- | engines/neverhood/module1300.cpp | 4 | ||||
-rw-r--r-- | engines/neverhood/module1400.cpp | 2 | ||||
-rw-r--r-- | engines/neverhood/module1700.cpp | 2 | ||||
-rw-r--r-- | engines/neverhood/module1900.cpp | 21 | ||||
-rw-r--r-- | engines/neverhood/module2100.cpp | 9 | ||||
-rw-r--r-- | engines/neverhood/module2200.cpp | 69 | ||||
-rw-r--r-- | engines/neverhood/module2400.cpp | 6 | ||||
-rw-r--r-- | engines/neverhood/module2500.cpp | 11 | ||||
-rw-r--r-- | engines/neverhood/module2600.cpp | 15 | ||||
-rw-r--r-- | engines/neverhood/module2700.cpp | 8 | ||||
-rw-r--r-- | engines/neverhood/module2800.cpp | 157 | ||||
-rw-r--r-- | engines/neverhood/module2900.cpp | 46 | ||||
-rw-r--r-- | engines/neverhood/module3000.cpp | 98 | ||||
-rw-r--r-- | engines/neverhood/sprite.cpp | 72 | ||||
-rw-r--r-- | engines/neverhood/sprite.h | 16 |
21 files changed, 190 insertions, 493 deletions
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp index 75755ddeee..572074bd18 100644 --- a/engines/neverhood/diskplayerscene.cpp +++ b/engines/neverhood/diskplayerscene.cpp @@ -165,7 +165,7 @@ AsDiskplayerSceneKey::AsDiskplayerSceneKey(NeverhoodEngine *vm) _newStickFrameIndex = 0; _needRefresh = true; updatePosition(); - _surface->setVisible(false); + setVisible(false); } uint32 AsDiskplayerSceneKey::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -183,29 +183,21 @@ void AsDiskplayerSceneKey::stDropKey() { SetUpdateHandler(&AnimatedSprite::update); SetMessageHandler(&AsDiskplayerSceneKey::handleMessage); NextState(&AsDiskplayerSceneKey::stDropKeyDone); - _surface->setVisible(true); + setVisible(true); } void AsDiskplayerSceneKey::stDropKeyDone() { stopAnimation(); SetUpdateHandler(&AnimatedSprite::update); SetMessageHandler(&Sprite::handleMessage); - _surface->setVisible(false); + setVisible(false); } DiskplayerPlayButton::DiskplayerPlayButton(NeverhoodEngine *vm, DiskplayerScene *diskplayerScene) : StaticSprite(vm, 1400), _diskplayerScene(diskplayerScene), _isPlaying(false) { - _spriteResource.load2(0x24A4A664); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - updateBounds(); - _needRefresh = true; - StaticSprite::update(); - _surface->setVisible(false); + loadSprite(0x24A4A664, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); + setVisible(false); loadSound(0, 0x44043000); loadSound(1, 0x44045000); SetMessageHandler(&DiskplayerPlayButton::handleMessage); @@ -225,7 +217,7 @@ uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam &p press(); } } - StaticSprite::update(); + updatePosition(); messageResult = 1; break; } @@ -234,8 +226,8 @@ uint32 DiskplayerPlayButton::handleMessage(int messageNum, const MessageParam &p void DiskplayerPlayButton::press() { if (!_isPlaying) { - _surface->setVisible(true); - StaticSprite::update(); + setVisible(true); + updatePosition(); playSound(0); _isPlaying = true; } @@ -243,8 +235,8 @@ void DiskplayerPlayButton::press() { void DiskplayerPlayButton::release() { if (_isPlaying) { - _surface->setVisible(false); - StaticSprite::update(); + setVisible(false); + updatePosition(); playSound(1); _isPlaying = false; } diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index 38d8b99c70..f9e734dd8d 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -307,8 +307,8 @@ void GameModule::startup() { #if 1 _vm->gameState().which = 0; - _vm->gameState().sceneNum = 4; - createModule(1100, -1); + _vm->gameState().sceneNum = 2; + createModule(2800, -1); #endif #if 0 _vm->gameState().sceneNum = 0; diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp index 2e7f85d98c..fdde1a23e0 100644 --- a/engines/neverhood/menumodule.cpp +++ b/engines/neverhood/menumodule.cpp @@ -163,12 +163,7 @@ static const uint32 kMainMenuButtonFileHashes[] = { MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint buttonIndex) : StaticSprite(vm, 900), _parentScene(parentScene), _buttonIndex(buttonIndex), _countdown(0) { - _spriteResource.load2(kMainMenuButtonFileHashes[_buttonIndex]); - createSurface(100, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(kMainMenuButtonFileHashes[_buttonIndex], kSLFDefDrawOffset | kSLFDefPosition, 100); // TODO Move to const array switch (_buttonIndex) { @@ -202,15 +197,12 @@ MainMenuButton::MainMenuButton(NeverhoodEngine *vm, Scene *parentScene, uint but } setVisible(false); - _needRefresh = true; - SetUpdateHandler(&MainMenuButton::update); SetMessageHandler(&MainMenuButton::handleMessage); - } void MainMenuButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown) == 0) { setVisible(false); sendMessage(_parentScene, 0x2000, _buttonIndex); diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp index ff26d17467..ac6830edc0 100644 --- a/engines/neverhood/module1000.cpp +++ b/engines/neverhood/module1000.cpp @@ -606,32 +606,16 @@ uint32 AsScene1002Ring::hmRingReleased(int messageNum, const MessageParam ¶m AsScene1002Door::AsScene1002Door(NeverhoodEngine *vm, NRect &clipRect) : StaticSprite(vm, 1200) { - _spriteResource.load2(0x1052370F); - createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(0x1052370F, kSLFDefDrawOffset | kSLFSetPosition, 800, 526, getGlobalVar(V_FLYTRAP_RING_DOOR) ? 49 : 239); setClipRect(clipRect); - - _x = 526; - - if (getGlobalVar(V_FLYTRAP_RING_DOOR)) { - _y = 49; - } else { - _y = 239; - } - - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - - _needRefresh = true; - SetUpdateHandler(&AsScene1002Door::update); SetMessageHandler(&AsScene1002Door::handleMessage); SetSpriteUpdate(NULL); - StaticSprite::update(); - } void AsScene1002Door::update() { handleSpriteUpdate(); - StaticSprite::update(); + updatePosition(); } uint32 AsScene1002Door::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -761,42 +745,22 @@ SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene : StaticSprite(vm, 1100), _parentScene(parentScene), _status(0) { _soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000; - _fileHashes[0] = fileHash1; _fileHashes[1] = fileHash2; - - _spriteResource.load2(fileHash1); createSurface(surfacePriority, 40, 40); - - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - + loadSprite(fileHash1, kSLFDefDrawOffset | kSLFDefPosition); setVisible(false); - _needRefresh = true; - SetUpdateHandler(&SsCommonPressButton::update); SetMessageHandler(&SsCommonPressButton::handleMessage); - } void SsCommonPressButton::setFileHashes(uint32 fileHash1, uint32 fileHash2) { _fileHashes[0] = fileHash1; _fileHashes[1] = fileHash2; if (_status == 2) { - _spriteResource.load2(fileHash2); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(fileHash2, kSLFDefDrawOffset | kSLFDefPosition); } else { - _spriteResource.load2(fileHash1); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(fileHash1, kSLFDefDrawOffset | kSLFDefPosition); } } @@ -804,21 +768,11 @@ void SsCommonPressButton::update() { if (_countdown != 0 && (--_countdown) == 0) { if (_status == 1) { _status = 2; - _spriteResource.load2(_fileHashes[1]); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(_fileHashes[1], kSLFDefDrawOffset | kSLFDefPosition); _countdown = 4; } else if (_status == 2) { _status = 3; - _spriteResource.load2(_fileHashes[0]); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(_fileHashes[0], kSLFDefDrawOffset | kSLFDefPosition); _countdown = 4; } else if (_status == 3) { _status = 0; diff --git a/engines/neverhood/module1100.cpp b/engines/neverhood/module1100.cpp index d21e3af2da..afcd698f86 100644 --- a/engines/neverhood/module1100.cpp +++ b/engines/neverhood/module1100.cpp @@ -302,19 +302,15 @@ uint32 SsScene1105Button::handleMessage(int messageNum, const MessageParam ¶ } SsScene1105Symbol::SsScene1105Symbol(NeverhoodEngine *vm, uint32 fileHash, int16 x, int16 y) - : StaticSprite(vm, fileHash, 200) { + : StaticSprite(vm, 0) { - _x = x; - _y = y; - _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2), - _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - StaticSprite::update(); + loadSprite(fileHash, kSLFCenteredDrawOffset | kSLFSetPosition, 200, x, y); } void SsScene1105Symbol::hide() { setVisible(false); _needRefresh = true; - StaticSprite::update(); + updatePosition(); } SsScene1105SymbolDie::SsScene1105SymbolDie(NeverhoodEngine *vm, uint index, int16 x, int16 y) @@ -338,16 +334,13 @@ uint32 SsScene1105SymbolDie::handleMessage(int messageNum, const MessageParam &p } void SsScene1105SymbolDie::loadSymbolSprite() { - load(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], true, false); - _drawOffset.x = -(_spriteResource.getDimensions().width / 2); - _drawOffset.y = -(_spriteResource.getDimensions().height / 2); - StaticSprite::update(); + loadSprite(kSsScene1105SymbolDieFileHashes[getSubVar(VA_CURR_DICE_NUMBERS, _index)], kSLFCenteredDrawOffset); } void SsScene1105SymbolDie::hide() { setVisible(false); _needRefresh = true; - StaticSprite::update(); + updatePosition(); } AsScene1105TeddyBear::AsScene1105TeddyBear(NeverhoodEngine *vm, Scene *parentScene) @@ -402,14 +395,7 @@ void AsScene1105TeddyBear::hide() { SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentScene) : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _flag1(false) { - _spriteResource.load2(0x8228A46C); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; - _needRefresh = true; - updateBounds(); + loadSprite(0x8228A46C, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); setVisible(false); loadSound(0, 0x44045140); SetUpdateHandler(&SsScene1105OpenButton::update); @@ -417,7 +403,7 @@ SsScene1105OpenButton::SsScene1105OpenButton(NeverhoodEngine *vm, Scene *parentS } void SsScene1105OpenButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown == 0)) { setVisible(false); sendMessage(_parentScene, 0x2001, 0); diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp index 52375881bc..e6442a0585 100644 --- a/engines/neverhood/module1200.cpp +++ b/engines/neverhood/module1200.cpp @@ -169,22 +169,11 @@ SsScene1201Tnt::SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 poi int16 x = kScene1201PointArray[pointIndex].x; int16 y = kScene1201PointArray[pointIndex].y; if (x < 300) { - _spriteResource.load2(kScene1201TntFileHashList1[elemIndex]); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(kScene1201TntFileHashList1[elemIndex], kSLFDefDrawOffset | kSLFDefPosition, 50); } else { - _spriteResource.load2(kScene1201TntFileHashList2[elemIndex]); - _x = x; - _y = y; - _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -_spriteResource.getDimensions().height, - _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - + loadSprite(kScene1201TntFileHashList2[elemIndex], kSLFCenteredDrawOffset | kSLFSetPosition, 50, x, y); } - createSurface(50, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); setClipRect(0, 0, 640, clipY2); - _needRefresh = true; - StaticSprite::update(); } AsScene1201Tape::AsScene1201Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 nameHash, int surfacePriority, int16 x, int16 y, uint32 fileHash) diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index b623af0791..409e554b2b 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -370,7 +370,7 @@ SsScene1302Fence::SsScene1302Fence(NeverhoodEngine *vm) void SsScene1302Fence::update() { handleSpriteUpdate(); - StaticSprite::update(); + updatePosition(); } uint32 SsScene1302Fence::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1533,7 +1533,7 @@ SsScene1308Number::SsScene1308Number(NeverhoodEngine *vm, uint32 fileHash, int i setVisible(false); _x = _spriteResource.getPosition().x + index * 20; - StaticSprite::update(); + updatePosition(); } AsScene1308Mouse::AsScene1308Mouse(NeverhoodEngine *vm) diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp index cedb283e0b..0693417f22 100644 --- a/engines/neverhood/module1400.cpp +++ b/engines/neverhood/module1400.cpp @@ -791,7 +791,7 @@ SsScene1402BridgePart::SsScene1402BridgePart(NeverhoodEngine *vm, uint32 fileHas : StaticSprite(vm, fileHash, surfacePriority) { SetFilterY(&Sprite::defFilterY); - SetUpdateHandler(&StaticSprite::update); + SetUpdateHandler(&StaticSprite::updatePosition); } diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp index f6dea96161..df64e1976a 100644 --- a/engines/neverhood/module1700.cpp +++ b/engines/neverhood/module1700.cpp @@ -145,7 +145,7 @@ SsScene1705WallSymbol::SsScene1705WallSymbol(NeverhoodEngine *vm, uint32 fileHas _x = _spriteResource.getPosition().x + symbolIndex * 30; _y = _spriteResource.getPosition().y + 160; - StaticSprite::update(); + updatePosition(); } SsScene1705Tape::SsScene1705Tape(NeverhoodEngine *vm, Scene *parentScene, uint32 tapeIndex, int surfacePriority, int16 x, int16 y, uint32 fileHash) diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp index fb98c2e29a..da02243579 100644 --- a/engines/neverhood/module1900.cpp +++ b/engines/neverhood/module1900.cpp @@ -455,15 +455,8 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 : StaticSprite(vm, 1400), _parentScene(parentScene), _asScene1907Symbol(asScene1907Symbol), _countdown1(0) { - _spriteResource.load2(0x64516424); - createSurface(1400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(0x64516424, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 1400); setVisible(false); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - updateBounds(); - _needRefresh = true; loadSound(0, 0x44061000); SetUpdateHandler(&SsScene1907UpDownButton::update); SetMessageHandler(&SsScene1907UpDownButton::handleMessage); @@ -476,7 +469,7 @@ SsScene1907UpDownButton::SsScene1907UpDownButton(NeverhoodEngine *vm, Scene1907 } void SsScene1907UpDownButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown1 != 0 && (--_countdown1 == 0)) { setVisible(false); sendMessage(_parentScene, 0x2000, 0); @@ -490,7 +483,7 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam if (_countdown1 == 0 && !_asScene1907Symbol->isMoving() && getGlobalVar(V_STAIRS_PUZZLE_SOLVED)) { setVisible(true); _countdown1 = 4; - StaticSprite::update(); + updatePosition(); playSound(0); } messageResult = 1; @@ -500,14 +493,14 @@ uint32 SsScene1907UpDownButton::handleMessage(int messageNum, const MessageParam void SsScene1907UpDownButton::setToUpPosition() { _y = _spriteResource.getPosition().y; - Sprite::updateBounds(); - StaticSprite::update(); + updateBounds(); + updatePosition(); } void SsScene1907UpDownButton::setToDownPosition() { _y = _spriteResource.getPosition().y + 174; - Sprite::updateBounds(); - StaticSprite::update(); + updateBounds(); + updatePosition(); } AsScene1907WaterHint::AsScene1907WaterHint(NeverhoodEngine *vm) diff --git a/engines/neverhood/module2100.cpp b/engines/neverhood/module2100.cpp index 879250a624..cbd11b6b4c 100644 --- a/engines/neverhood/module2100.cpp +++ b/engines/neverhood/module2100.cpp @@ -165,8 +165,7 @@ SsCommonFloorButton::SsCommonFloorButton(NeverhoodEngine *vm, Scene *parentScene _soundFileHash = 0x44141000; createSurface(1010, 61, 30); if (_fileHash1) { - load(_fileHash1, true, true); - StaticSprite::update(); + loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition); } else setVisible(false); } @@ -175,8 +174,7 @@ void SsCommonFloorButton::update() { if (_countdown != 0 && (--_countdown == 0)) { sendMessage(_parentScene, 0x1022, 1010); if (_fileHash1) { - load(_fileHash1, true, true); - StaticSprite::update(); + loadSprite(_fileHash1, kSLFDefDrawOffset | kSLFDefPosition); } else setVisible(false); } @@ -189,8 +187,7 @@ uint32 SsCommonFloorButton::handleMessage(int messageNum, const MessageParam &pa sendMessage(_parentScene, 0x480B, 0); setVisible(true); sendMessage(_parentScene, 0x1022, 990); - load(_fileHash2, true, true); - StaticSprite::update(); + loadSprite(_fileHash2, kSLFDefDrawOffset | kSLFDefPosition); _countdown = 16; playSound(0, _soundFileHash); break; diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp index 06cdc1009b..102704af2c 100644 --- a/engines/neverhood/module2200.cpp +++ b/engines/neverhood/module2200.cpp @@ -488,13 +488,9 @@ void AsScene2201Door::stCloseDoor() { SsScene2201PuzzleCube::SsScene2201PuzzleCube(NeverhoodEngine *vm, uint32 positionIndex, uint32 cubeIndex) : StaticSprite(vm, 900) { - _spriteResource.load2(kSsScene2201PuzzleCubeFileHashes[cubeIndex]); createSurface(100, 16, 16); - _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2), - _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = kSsScene2201PuzzleCubePoints[positionIndex].x; - _y = kSsScene2201PuzzleCubePoints[positionIndex].y; - _needRefresh = true; + loadSprite(kSsScene2201PuzzleCubeFileHashes[cubeIndex], kSLFCenteredDrawOffset | kSLFSetPosition, 0, + kSsScene2201PuzzleCubePoints[positionIndex].x, kSsScene2201PuzzleCubePoints[positionIndex].y); } Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which) @@ -670,32 +666,26 @@ static const uint32 kSsScene2202PuzzleTileFileHashes2[] = { SsScene2202PuzzleTile::SsScene2202PuzzleTile(NeverhoodEngine *vm, Scene *parentScene, int16 tileIndex, int16 value) : StaticSprite(vm, 900), _parentScene(parentScene), _value(value), _tileIndex(tileIndex), _isMoving(false) { - + + int surfacePriority; + SetUpdateHandler(&SsScene2202PuzzleTile::update); SetMessageHandler(&SsScene2202PuzzleTile::handleMessage); - _spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]); - if (_tileIndex >= 0 && _tileIndex <= 2) { - createSurface(100, 128, 128); - } else if (_tileIndex >= 3 && _tileIndex <= 5) { - createSurface(300, 128, 128); - } else { - createSurface(500, 128, 128); - } - _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2), - _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; - _x = kSsScene2202PuzzleTilePoints[_tileIndex].x; - _y = kSsScene2202PuzzleTilePoints[_tileIndex].y; - updateBounds(); - _needRefresh = true; - StaticSprite::update(); + if (_tileIndex >= 0 && _tileIndex <= 2) + surfacePriority = 100; + else if (_tileIndex >= 3 && _tileIndex <= 5) + surfacePriority = 300; + else + surfacePriority = 500; + loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset | kSLFSetPosition | kSLFDefCollisionBoundsOffset, 0, + kSsScene2202PuzzleTilePoints[_tileIndex].x, kSsScene2202PuzzleTilePoints[_tileIndex].y); loadSound(0, 0x40958621); loadSound(1, 0x51108241); } void SsScene2202PuzzleTile::update() { handleSpriteUpdate(); - StaticSprite::update(); + updatePosition(); } uint32 SsScene2202PuzzleTile::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -787,10 +777,7 @@ void SsScene2202PuzzleTile::suMoveTileY() { void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) { - _spriteResource.load2(kSsScene2202PuzzleTileFileHashes1[_value]); - _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2), - _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _needRefresh = true; + loadSprite(kSsScene2202PuzzleTileFileHashes1[_value], kSLFCenteredDrawOffset); setSubVar(VA_CUBE_POSITIONS, _tileIndex, (uint32)-1); setSubVar(VA_CUBE_POSITIONS, newTileIndex, (uint32)_value); @@ -866,10 +853,7 @@ void SsScene2202PuzzleTile::moveTile(int16 newTileIndex) { } void SsScene2202PuzzleTile::stopMoving() { - _spriteResource.load2(kSsScene2202PuzzleTileFileHashes2[_value]); - _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2), - _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _needRefresh = true; + loadSprite(kSsScene2202PuzzleTileFileHashes2[_value], kSLFCenteredDrawOffset); SetSpriteUpdate(NULL); _isMoving = false; sendMessage(_parentScene, 0x2002, _tileIndex); @@ -1215,25 +1199,16 @@ SsScene2205DoorFrame::SsScene2205DoorFrame(NeverhoodEngine *vm) : StaticSprite(vm, 900) { SetMessageHandler(&SsScene2205DoorFrame::handleMessage); - _spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0); createSurface(1100, 45, 206); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0, kSLFDefDrawOffset | kSLFDefPosition); } uint32 SsScene2205DoorFrame::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { uint32 messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x2000: - _spriteResource.load2(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(getGlobalVar(V_LIGHTS_ON) ? 0x24306227 : 0xD90032A0, kSLFDefDrawOffset | kSLFDefPosition); + break; } return messageResult; } @@ -1388,7 +1363,7 @@ AsScene2206DoorSpikes::AsScene2206DoorSpikes(NeverhoodEngine *vm, uint32 fileHas void AsScene2206DoorSpikes::update() { handleSpriteUpdate(); - StaticSprite::update(); + updatePosition(); } uint32 AsScene2206DoorSpikes::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1440,7 +1415,7 @@ AsScene2206Platform::AsScene2206Platform(NeverhoodEngine *vm, uint32 fileHash) void AsScene2206Platform::update() { handleSpriteUpdate(); - StaticSprite::update(); + updatePosition(); } uint32 AsScene2206Platform::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1974,7 +1949,7 @@ SsScene2207Symbol::SsScene2207Symbol(NeverhoodEngine *vm, uint32 fileHash, int i _x = 330; _y = 246 + index * 50; - StaticSprite::update(); + updatePosition(); } Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which) diff --git a/engines/neverhood/module2400.cpp b/engines/neverhood/module2400.cpp index a017c117a8..ccc47d009f 100644 --- a/engines/neverhood/module2400.cpp +++ b/engines/neverhood/module2400.cpp @@ -763,8 +763,7 @@ void Scene2402::update() { if (_countdown != 0 && (--_countdown) == 0) { if (_pipeStatus >= 10) { sendMessage(_asDoor, 0x4808, 0); - _ssDoorFrame->load(0x00B415E0, true, true); - _ssDoorFrame->update(); + _ssDoorFrame->loadSprite(0x00B415E0, kSLFDefDrawOffset | kSLFDefPosition); } else if (_pipeStatus >= 5) { _countdown = 8; playPipeSound(kScene2402FileHashes[getSubVar(VA_CURR_WATER_PIPES_LEVEL, _pipeStatus - 5)]); @@ -791,8 +790,7 @@ uint32 Scene2402::handleMessage(int messageNum, const MessageParam ¶m, Entit } break; case 0x2001: - _ssDoorFrame->load(0x406C0AE0, true, true); - _ssDoorFrame->update(); + _ssDoorFrame->loadSprite(0x406C0AE0, kSLFDefDrawOffset | kSLFDefPosition); break; case 0x480B: if (sender == _ssButton) { diff --git a/engines/neverhood/module2500.cpp b/engines/neverhood/module2500.cpp index 8345a8c3a3..de6e19e48c 100644 --- a/engines/neverhood/module2500.cpp +++ b/engines/neverhood/module2500.cpp @@ -485,14 +485,7 @@ void Scene2501::updateKlaymanCliprect() { SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm) : StaticSprite(vm, 1400), _countdown(0), _isSoundPlaying(false) { - _spriteResource.load2(0x070220D9); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _collisionBoundsOffset = _drawOffset; - updateBounds(); - _needRefresh = true; + loadSprite(0x070220D9, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); setVisible(false); loadSound(0, 0x4600204C); loadSound(1, 0x408C0034); @@ -503,7 +496,7 @@ SsScene2504Button::SsScene2504Button(NeverhoodEngine *vm) } void SsScene2504Button::update() { - StaticSprite::update(); + updatePosition(); if (_isSoundPlaying && !isSoundPlaying(0) && !isSoundPlaying(1)) { playSound(3); setVisible(false); diff --git a/engines/neverhood/module2600.cpp b/engines/neverhood/module2600.cpp index 7008a905f4..d1b95be6bb 100644 --- a/engines/neverhood/module2600.cpp +++ b/engines/neverhood/module2600.cpp @@ -208,30 +208,19 @@ void Module2600::updateScene() { SsScene2609Button::SsScene2609Button(NeverhoodEngine *vm, Scene *parentScene) : StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) { - _spriteResource.load2(0x825A6923); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(0x825A6923, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); if (!getGlobalVar(V_WATER_RUNNING)) setVisible(false); - - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - updateBounds(); - _needRefresh = true; - loadSound(0, 0x10267160); loadSound(1, 0x7027FD64); loadSound(2, 0x44043000); loadSound(3, 0x44045000); - SetUpdateHandler(&SsScene2609Button::update); SetMessageHandler(&SsScene2609Button::handleMessage); - } void SsScene2609Button::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown == 0)) { if (getGlobalVar(V_WATER_RUNNING)) { setGlobalVar(V_WATER_RUNNING, 0); diff --git a/engines/neverhood/module2700.cpp b/engines/neverhood/module2700.cpp index c5524fa75a..1e02e64411 100644 --- a/engines/neverhood/module2700.cpp +++ b/engines/neverhood/module2700.cpp @@ -510,13 +510,7 @@ static const NPoint kCarShadowOffsets[] = { SsCommonTrackShadowBackground::SsCommonTrackShadowBackground(NeverhoodEngine *vm, uint32 fileHash) : StaticSprite(vm, 0) { - _spriteResource.load2(fileHash); - createSurface(0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _needRefresh = true; - StaticSprite::update(); + loadSprite(fileHash, kSLFDefDrawOffset | kSLFDefPosition, 0); } AsCommonCarShadow::AsCommonCarShadow(NeverhoodEngine *vm, AnimatedSprite *asCar, BaseSurface *shadowSurface, uint index) diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp index 53ae40c0ea..c42e0331ac 100644 --- a/engines/neverhood/module2800.cpp +++ b/engines/neverhood/module2800.cpp @@ -407,10 +407,9 @@ Scene2801::Scene2801(NeverhoodEngine *vm, Module *parentModule, int which) SetMessageHandler(&Scene2801::handleMessage); SetUpdateHandler(&Scene::update); - if (getGlobalVar(V_RADIO_ENABLED) == 0) { - // Display the disabled radio; only possible when the left door is open + // Display the disabled radio; only possible when the left door is open + if (!getGlobalVar(V_RADIO_ENABLED)) insertStaticSprite(0x0001264C, 100); - } if (which < 0) { insertKlayman<KmScene2801>(194, 430); @@ -1013,34 +1012,24 @@ void Scene2803::changeBackground() { _background->load(0x412A423E); _palette->addPalette(0x412A423E, 0, 256, 0); _palette->addBasePalette(0x412A423E, 0, 256, 0); - _sprite3->load(0xA40EF2FB, false, false); - _sprite3->update(); - _sprite4->load(0x0C03AA23, false, false); - _sprite4->update(); - _sprite5->load(0x2A822E2E, false, false); - _sprite5->update(); - _sprite6->load(0x2603A202, false, false); - _sprite6->update(); - _sprite7->load(0x24320220, false, false); - _sprite7->update(); + _sprite3->loadSprite(0xA40EF2FB); + _sprite4->loadSprite(0x0C03AA23); + _sprite5->loadSprite(0x2A822E2E); + _sprite6->loadSprite(0x2603A202); + _sprite7->loadSprite(0x24320220); _mouseCursor->load(0xA423A41A); _mouseCursor->updateCursor(); - _sprite8->load(0x3C42022F, false, false); - _sprite8->update(); - _sprite9->load(0x341A0237, false, false); - _sprite9->update(); + _sprite8->loadSprite(0x3C42022F); + _sprite9->loadSprite(0x341A0237); if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) { - _asTestTubeOne->load(0x66121222, false, false); - _asTestTubeOne->update(); + _asTestTubeOne->loadSprite(0x66121222); } else sendMessage(_asTestTubeOne, 0x2000, 0); if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) { - _asTestTubeTwo->load(0x64330236, false, false); - _asTestTubeTwo->update(); + _asTestTubeTwo->loadSprite(0x64330236); } if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) { - _asTestTubeThree->load(0x2E4A22A2, false, false); - _asTestTubeThree->update(); + _asTestTubeThree->loadSprite(0x2E4A22A2); } _sprite10->setVisible(true); } else { @@ -1048,34 +1037,24 @@ void Scene2803::changeBackground() { _background->load(0x29800A01); _palette->addPalette(0x29800A01, 0, 256, 0); _palette->addBasePalette(0x29800A01, 0, 256, 0); - _sprite3->load(0x234340A0, false, false); - _sprite3->update(); - _sprite4->load(0x16202200, false, false); - _sprite4->update(); - _sprite5->load(0x1030169A, false, false); - _sprite5->update(); - _sprite6->load(0x1600A6A8, false, false); - _sprite6->update(); - _sprite7->load(0xD0802EA0, false, false); - _sprite7->update(); + _sprite3->loadSprite(0x234340A0); + _sprite4->loadSprite(0x16202200); + _sprite5->loadSprite(0x1030169A); + _sprite6->loadSprite(0x1600A6A8); + _sprite7->loadSprite(0xD0802EA0); _mouseCursor->load(0x00A05290); _mouseCursor->updateCursor(); - _sprite8->load(0x108012C1, false, false); - _sprite8->update(); - _sprite9->load(0x708072E0, false, false); - _sprite9->update(); + _sprite8->loadSprite(0x108012C1); + _sprite9->loadSprite(0x708072E0); if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 0) == 0) { - _asTestTubeOne->load(0x50C027A8, false, false); - _asTestTubeOne->update(); + _asTestTubeOne->loadSprite(0x50C027A8); } else sendMessage(_asTestTubeOne, 0x2000, 1); if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 1) == 3) { - _asTestTubeTwo->load(0xD48077A0, false, false); - _asTestTubeTwo->update(); + _asTestTubeTwo->loadSprite(0xD48077A0); } if (getSubVar(VA_GOOD_TEST_TUBES_LEVEL_1, 2) == 3) { - _asTestTubeThree->load(0x30022689, false, false); - _asTestTubeThree->update(); + _asTestTubeThree->loadSprite(0x30022689); } _sprite10->setVisible(false); } @@ -1368,25 +1347,15 @@ void Scene2803Small::updatePaletteArea(bool instantly) { SsScene2804RedButton::SsScene2804RedButton(NeverhoodEngine *vm, Scene2804 *parentScene) : StaticSprite(vm, 900), _countdown(0), _parentScene(parentScene) { - if (getGlobalVar(V_SHRINK_LIGHTS_ON)) - _spriteResource.load2(0x51A10202); - else - _spriteResource.load2(0x11814A21); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _collisionBoundsOffset = _drawOffset; - updateBounds(); + loadSprite(getGlobalVar(V_SHRINK_LIGHTS_ON) ? 0x51A10202 : 0x11814A21, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); setVisible(false); - _needRefresh = true; SetUpdateHandler(&SsScene2804RedButton::update); SetMessageHandler(&SsScene2804RedButton::handleMessage); loadSound(0, 0x44241240); } void SsScene2804RedButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown) == 0) { setVisible(false); } @@ -1411,14 +1380,8 @@ uint32 SsScene2804RedButton::handleMessage(int messageNum, const MessageParam &p SsScene2804LightCoil::SsScene2804LightCoil(NeverhoodEngine *vm) : StaticSprite(vm, 900) { - _spriteResource.load2(0x8889B008); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(0x8889B008, kSLFDefDrawOffset | kSLFDefPosition, 400); setVisible(false); - _needRefresh = true; - StaticSprite::update(); SetMessageHandler(&SsScene2804LightCoil::handleMessage); } @@ -1427,12 +1390,12 @@ uint32 SsScene2804LightCoil::handleMessage(int messageNum, const MessageParam &p switch (messageNum) { case 0x2002: setVisible(true); - StaticSprite::update(); + updatePosition(); messageResult = 1; break; case 0x2003: setVisible(false); - StaticSprite::update(); + updatePosition(); messageResult = 1; break; } @@ -1442,14 +1405,8 @@ uint32 SsScene2804LightCoil::handleMessage(int messageNum, const MessageParam &p SsScene2804LightTarget::SsScene2804LightTarget(NeverhoodEngine *vm) : StaticSprite(vm, 900) { - _spriteResource.load2(0x06092132); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(0x06092132, kSLFDefDrawOffset | kSLFDefPosition, 400); setVisible(false); - _needRefresh = true; - StaticSprite::update(); SetMessageHandler(&SsScene2804LightTarget::handleMessage); } @@ -1458,12 +1415,12 @@ uint32 SsScene2804LightTarget::handleMessage(int messageNum, const MessageParam switch (messageNum) { case 0x2004: setVisible(true); - StaticSprite::update(); + updatePosition(); messageResult = 1; break; case 0x2005: setVisible(false); - StaticSprite::update(); + updatePosition(); messageResult = 1; break; } @@ -1473,34 +1430,22 @@ uint32 SsScene2804LightTarget::handleMessage(int messageNum, const MessageParam SsScene2804Flash::SsScene2804Flash(NeverhoodEngine *vm) : StaticSprite(vm, 900) { - _spriteResource.load2(0x211003A0); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(0x211003A0, kSLFDefDrawOffset | kSLFDefPosition, 400); setVisible(false); - _needRefresh = true; - StaticSprite::update(); loadSound(0, 0xCB36BA54); } void SsScene2804Flash::show() { setVisible(true); - StaticSprite::update(); + updatePosition(); playSound(0); } SsScene2804BeamCoilBody::SsScene2804BeamCoilBody(NeverhoodEngine *vm) : StaticSprite(vm, 900) { - _spriteResource.load2(0x9A816000); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(0x9A816000, kSLFDefDrawOffset | kSLFDefPosition, 400); setVisible(false); - _needRefresh = true; - StaticSprite::update(); } AsScene2804CrystalWaves::AsScene2804CrystalWaves(NeverhoodEngine *vm, uint crystalIndex) @@ -1635,26 +1580,16 @@ SsScene2804CrystalButton::SsScene2804CrystalButton(NeverhoodEngine *vm, Scene280 0x5008292B }; - if (getGlobalVar(V_SHRINK_LIGHTS_ON)) - _spriteResource.load2(kSsScene2804CrystalButtonFileHashes1[crystalIndex]); - else - _spriteResource.load2(kSsScene2804CrystalButtonFileHashes2[crystalIndex]); - - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _collisionBoundsOffset = _drawOffset; - updateBounds(); + loadSprite(getGlobalVar(V_SHRINK_LIGHTS_ON) ? kSsScene2804CrystalButtonFileHashes1[crystalIndex] : kSsScene2804CrystalButtonFileHashes2[crystalIndex], + kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); setVisible(false); loadSound(0, 0x44045140); - _needRefresh = true; SetUpdateHandler(&SsScene2804CrystalButton::update); SetMessageHandler(&SsScene2804CrystalButton::handleMessage); } void SsScene2804CrystalButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown) == 0) { setVisible(false); } @@ -1721,7 +1656,7 @@ uint32 AsScene2804BeamCoil::handleMessage(int messageNum, const MessageParam &pa void AsScene2804BeamCoil::show() { _ssBeamCoilBody->setVisible(true); - // TODO _ssBeamCoilBody->update(); -> show() + // TODO _ssBeamCoilBody->updatePosition(); -> show() setVisible(true); startAnimation(0x00494891, 0, -1); playSound(0); @@ -1734,7 +1669,7 @@ void AsScene2804BeamCoil::hide() { SetMessageHandler(&AsScene2804BeamCoil::handleMessage); setVisible(false); _ssBeamCoilBody->setVisible(false); - // TODO _ssBeamCoilBody->update(); -> hide() + // TODO _ssBeamCoilBody->updatePosition(); -> hide() _vm->_soundMan->stopSound(0xEF56B094); } @@ -2242,22 +2177,14 @@ SsScene2808Dispenser::SsScene2808Dispenser(NeverhoodEngine *vm, Scene *parentSce : StaticSprite(vm, 900), _parentScene(parentScene), _countdown(0), _testTubeSetNum(testTubeSetNum), _testTubeIndex(testTubeIndex) { - _spriteResource.load2(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex]); - createSurface(1500, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _collisionBoundsOffset = _drawOffset; - updateBounds(); + loadSprite(kClass428FileHashes[testTubeSetNum * 3 + testTubeIndex], kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 1500); + setVisible(false); SetUpdateHandler(&SsScene2808Dispenser::update); SetMessageHandler(&SsScene2808Dispenser::handleMessage); - setVisible(false); - _needRefresh = true; - StaticSprite::update(); } void SsScene2808Dispenser::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown) == 0) { setVisible(false); } @@ -2276,7 +2203,7 @@ uint32 SsScene2808Dispenser::handleMessage(int messageNum, const MessageParam &p void SsScene2808Dispenser::startCountdown(int index) { setVisible(true); - StaticSprite::update(); + updatePosition(); if (_testTubeSetNum == 0) { _countdown = kClass428Countdowns1[index]; } else { diff --git a/engines/neverhood/module2900.cpp b/engines/neverhood/module2900.cpp index ae74b14814..4b8f28ea7e 100644 --- a/engines/neverhood/module2900.cpp +++ b/engines/neverhood/module2900.cpp @@ -254,24 +254,18 @@ static const uint32 kSsScene2901BigButtonFileHashes[] = { SsScene2901LocationButton::SsScene2901LocationButton(NeverhoodEngine *vm, Scene *parentScene, int which, uint index) : StaticSprite(vm, 900), _parentScene(parentScene), _index(index), _countdown1(0) { - _spriteResource.load2(kSsScene2901LocationButtonFileHashes[which * 6 + index]); - createSurface(800, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _collisionBounds.x1 = kSsScene2901LocationButtonPoints[_index].x - 25; - _collisionBounds.y1 = kSsScene2901LocationButtonPoints[_index].y - 25; - _collisionBounds.x2 = kSsScene2901LocationButtonPoints[_index].x + 25; - _collisionBounds.y2 = kSsScene2901LocationButtonPoints[_index].y + 25; + const NPoint &pt = kSsScene2901LocationButtonPoints[_index]; + + loadSprite(kSsScene2901LocationButtonFileHashes[which * 6 + index], kSLFDefDrawOffset | kSLFDefPosition, 800); + _collisionBounds.set(pt.x - 25, pt.y - 25, pt.x + 25, pt.y + 25); setVisible(false); - _needRefresh = true; loadSound(0, 0x440430C0); SetUpdateHandler(&SsScene2901LocationButton::update); SetMessageHandler(&SsScene2901LocationButton::handleMessage); } void SsScene2901LocationButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown1 != 0 && (--_countdown1) == 0) { setVisible(false); } @@ -296,57 +290,41 @@ uint32 SsScene2901LocationButton::handleMessage(int messageNum, const MessagePar SsScene2901LocationButtonLight::SsScene2901LocationButtonLight(NeverhoodEngine *vm, int which, uint index) : StaticSprite(vm, 900), _index(index) { - _spriteResource.load2(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index]); - createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(kSsScene2901LocationButtonLightFileHashes1[which * 6 + index], kSLFDefDrawOffset | kSLFDefPosition, 900); setVisible(false); - _needRefresh = true; loadSound(0, kSsScene2901LocationButtonLightFileHashes2[_index]); } void SsScene2901LocationButtonLight::show() { playSound(0); setVisible(true); - StaticSprite::update(); + updatePosition(); } void SsScene2901LocationButtonLight::hide() { setVisible(false); - StaticSprite::update(); + updatePosition(); } SsScene2901BrokenButton::SsScene2901BrokenButton(NeverhoodEngine *vm, int which) : StaticSprite(vm, 900) { - _spriteResource.load2(kSsScene2901BrokenButtonFileHashes[which]); - createSurface(900, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _needRefresh = true; - StaticSprite::update(); + loadSprite(kSsScene2901BrokenButtonFileHashes[which], kSLFDefDrawOffset | kSLFDefPosition, 900); } SsScene2901BigButton::SsScene2901BigButton(NeverhoodEngine *vm, Scene *parentScene, int which) : StaticSprite(vm, 900), _parentScene(parentScene), _which(which), _countdown1(0) { - - _spriteResource.load2(kSsScene2901BigButtonFileHashes[which]); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + + loadSprite(kSsScene2901BigButtonFileHashes[which], kSLFDefDrawOffset | kSLFDefPosition, 400); _collisionBounds.set(62, 94, 322, 350); setVisible(false); - _needRefresh = true; loadSound(0, 0xF3D420C8); SetUpdateHandler(&SsScene2901BigButton::update); SetMessageHandler(&SsScene2901BigButton::handleMessage); } void SsScene2901BigButton::update() { - StaticSprite::update(); + updatePosition(); if (_countdown1 != 0 && (--_countdown1) == 0) { setVisible(false); sendMessage(_parentScene, 0x2000, 0); diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp index cb4faafbed..713d72de3f 100644 --- a/engines/neverhood/module3000.cpp +++ b/engines/neverhood/module3000.cpp @@ -471,22 +471,15 @@ static const uint32 kSsScene3009SymbolArrowFileHashes2[] = { SsScene3009FireCannonButton::SsScene3009FireCannonButton(NeverhoodEngine *vm, Scene3009 *parentScene) : StaticSprite(vm, 1400), _parentScene(parentScene), _isClicked(false) { - _spriteResource.load2(0x120B24B0); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; + loadSprite(0x120B24B0, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); setVisible(false); - updateBounds(); - _needRefresh = true; SetUpdateHandler(&SsScene3009FireCannonButton::update); SetMessageHandler(&SsScene3009FireCannonButton::handleMessage); loadSound(0, 0x3901B44F); } void SsScene3009FireCannonButton::update() { - StaticSprite::update(); + updatePosition(); if (_isClicked && !isSoundPlaying(0)) { sendMessage(_parentScene, 0x2000, 0); setVisible(false); @@ -511,17 +504,11 @@ uint32 SsScene3009FireCannonButton::handleMessage(int messageNum, const MessageP SsScene3009SymbolEdges::SsScene3009SymbolEdges(NeverhoodEngine *vm, int index) : StaticSprite(vm, 1400), _blinkCountdown(0) { - _spriteResource.load2(kSsScene3009SymbolEdgesFileHashes[index]); - createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _needRefresh = true; - if (getGlobalVar(V_ROBOT_HIT)) { + loadSprite(kSsScene3009SymbolEdgesFileHashes[index], kSLFDefDrawOffset | kSLFDefPosition, 600); + if (getGlobalVar(V_ROBOT_HIT)) hide(); - } else { + else startBlinking(); - } SetUpdateHandler(&SsScene3009SymbolEdges::update); } @@ -532,7 +519,7 @@ void SsScene3009SymbolEdges::update() { } else { setVisible(false); } - StaticSprite::update(); + updatePosition(); _blinkCountdown = 3; _blinkToggle = !_blinkToggle; } @@ -540,19 +527,19 @@ void SsScene3009SymbolEdges::update() { void SsScene3009SymbolEdges::show() { setVisible(true); - StaticSprite::update(); + updatePosition(); _blinkCountdown = 0; } void SsScene3009SymbolEdges::hide() { setVisible(false); - StaticSprite::update(); + updatePosition(); _blinkCountdown = 0; } void SsScene3009SymbolEdges::startBlinking() { setVisible(true); - StaticSprite::update(); + updatePosition(); _blinkCountdown = 3; _blinkToggle = true; } @@ -560,18 +547,13 @@ void SsScene3009SymbolEdges::startBlinking() { SsScene3009TargetLine::SsScene3009TargetLine(NeverhoodEngine *vm, int index) : StaticSprite(vm, 1400) { - _spriteResource.load2(kSsScene3009TargetLineFileHashes[index]); - createSurface(600, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(kSsScene3009TargetLineFileHashes[index], kSLFDefDrawOffset | kSLFDefPosition, 600); setVisible(false); - _needRefresh = true; } void SsScene3009TargetLine::show() { setVisible(true); - StaticSprite::update(); + updatePosition(); } SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSymbol, int index) @@ -579,14 +561,13 @@ SsScene3009SymbolArrow::SsScene3009SymbolArrow(NeverhoodEngine *vm, Sprite *asSy _incrDecr = _index % 2; - _spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]); createSurface(1200, 33, 31); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; + loadSprite(kSsScene3009SymbolArrowFileHashes2[_index], kSLFDefPosition); _drawOffset.set(0, 0, 33, 31); _collisionBoundsOffset = _drawOffset; updateBounds(); _needRefresh = true; + SetUpdateHandler(&SsScene3009SymbolArrow::update); SetMessageHandler(&SsScene3009SymbolArrow::handleMessage); loadSound(0, 0x2C852206); @@ -598,11 +579,9 @@ void SsScene3009SymbolArrow::hide() { } void SsScene3009SymbolArrow::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown == 0)) { - _spriteResource.load2(kSsScene3009SymbolArrowFileHashes2[_index]); - _needRefresh = true; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(kSsScene3009SymbolArrowFileHashes2[_index], kSLFDefDrawOffset); } } @@ -612,9 +591,7 @@ uint32 SsScene3009SymbolArrow::handleMessage(int messageNum, const MessageParam case 0x1011: if (_enabled && _countdown == 0) { _countdown = 2; - _spriteResource.load2(kSsScene3009SymbolArrowFileHashes1[_index]); - _needRefresh = true; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + loadSprite(kSsScene3009SymbolArrowFileHashes1[_index], kSLFDefDrawOffset); playSound(0); sendMessage(_asSymbol, 0x2005, _incrDecr); } @@ -1063,22 +1040,13 @@ static const uint32 kAsScene3010DeadBoltFileHashes1[] = { SsScene3010DeadBoltButton::SsScene3010DeadBoltButton(NeverhoodEngine *vm, Scene *parentScene, int buttonIndex, int initCountdown, bool initDisabled) : StaticSprite(vm, 900), _parentScene(parentScene), _buttonLocked(false), _countdown1(0), _countdown2(0), _buttonIndex(buttonIndex) { - NDimensions dimensions1, dimensions2; - _buttonEnabled = getSubVar(VA_LOCKS_DISABLED, kScene3010ButtonNameHashes[_buttonIndex]) != 0; - _spriteResource.load2(kScene3010DeadBoltButtonFileHashes1[_buttonIndex]); - dimensions1 = _spriteResource.getDimensions(); - _spriteResource.load2(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]); - dimensions2 = _spriteResource.getDimensions(); - createSurface(400, - MAX(dimensions1.width, dimensions2.width), - MAX(dimensions1.height, dimensions2.height)); + createSurface(400, 88, 95); setSprite(kScene3010DeadBoltButtonFileHashes2[_buttonIndex]); - if (initDisabled) { + if (initDisabled) disableButton(); - } else if (_buttonEnabled) { + else if (_buttonEnabled) _countdown1 = initCountdown * 12 + 1; - } loadSound(0, 0xF4217243); loadSound(1, 0x44049000); loadSound(2, 0x6408107E); @@ -1116,7 +1084,7 @@ uint32 SsScene3010DeadBoltButton::handleMessage(int messageNum, const MessagePar sendMessage(_parentScene, 0x2002, _buttonIndex); } _needRefresh = true; - StaticSprite::update(); + updatePosition(); } messageResult = 1; break; @@ -1131,14 +1099,7 @@ void SsScene3010DeadBoltButton::disableButton() { } void SsScene3010DeadBoltButton::setSprite(uint32 fileHash) { - _spriteResource.load(fileHash); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; - updateBounds(); - _needRefresh = true; - StaticSprite::update(); + loadSprite(fileHash, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset); } void SsScene3010DeadBoltButton::setCountdown(int count) { @@ -1397,26 +1358,15 @@ static const uint32 kAsScene3011SymbolFileHashes[] = { SsScene3011Button::SsScene3011Button(NeverhoodEngine *vm, Scene *parentScene, bool flag) : StaticSprite(vm, 1400), _parentScene(parentScene), _countdown(0) { - if (flag) { - _spriteResource.load2(0x11282020); - } else { - _spriteResource.load2(0x994D0433); - } - loadSound(0, 0x44061000); - createSurface(400, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - _collisionBoundsOffset = _drawOffset; + loadSprite(flag ? 0x11282020 : 0x994D0433, kSLFDefDrawOffset | kSLFDefPosition | kSLFDefCollisionBoundsOffset, 400); setVisible(false); - updateBounds(); - _needRefresh = true; + loadSound(0, 0x44061000); SetUpdateHandler(&SsScene3011Button::update); SetMessageHandler(&SsScene3011Button::handleMessage); } void SsScene3011Button::update() { - StaticSprite::update(); + updatePosition(); if (_countdown != 0 && (--_countdown == 0)) { setVisible(false); } diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp index 40b651e53b..d034783b03 100644 --- a/engines/neverhood/sprite.cpp +++ b/engines/neverhood/sprite.cpp @@ -120,42 +120,43 @@ StaticSprite::StaticSprite(NeverhoodEngine *vm, int objectPriority) } -StaticSprite::StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x, int16 y, int16 width, int16 height) +StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y) : Sprite(vm, 0), _spriteResource(vm) { - init(calcHash(filename), surfacePriority, x, y, width, height); -} - -StaticSprite::StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) - : Sprite(vm, 0), _spriteResource(vm) { - - init(fileHash, surfacePriority, x, y, width, height); -} - -void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, int16 width, int16 height) { - _spriteResource.load2(fileHash); - - if (width == 0) - width = _spriteResource.getDimensions().width; - - if (height == 0) - height = _spriteResource.getDimensions().height; - - createSurface(surfacePriority, width, height); - + createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); _x = x == kDefPosition ? _spriteResource.getPosition().x : x; _y = y == kDefPosition ? _spriteResource.getPosition().y : y; - - _drawOffset.set(0, 0, width, height); - + _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); _needRefresh = true; + updatePosition(); +} - update(); - +void StaticSprite::loadSprite(uint32 fileHash, uint flags, int surfacePriority, int16 x, int16 y) { + _spriteResource.load2(fileHash); + if (!_surface) + createSurface(surfacePriority, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + if (flags & kSLFDefDrawOffset) + _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + else if (flags & kSLFCenteredDrawOffset) + _drawOffset.set(-(_spriteResource.getDimensions().width / 2), -(_spriteResource.getDimensions().height / 2), + _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); + if (flags & kSLFDefPosition) { + _x = _spriteResource.getPosition().x; + _y = _spriteResource.getPosition().y; + } else if (flags & kSLFSetPosition) { + _x = x; + _y = y; + } + if (flags & kSLFDefCollisionBoundsOffset) { + _collisionBoundsOffset = _drawOffset; + updateBounds(); + } + _needRefresh = true; + updatePosition(); } -void StaticSprite::update() { +void StaticSprite::updatePosition() { if (!_surface) return; @@ -179,23 +180,6 @@ void StaticSprite::update() { } -void StaticSprite::load(uint32 fileHash, bool dimensions, bool position) { - - _spriteResource.load2(fileHash); - - if (dimensions) { - _drawOffset.set(0, 0, _spriteResource.getDimensions().width, _spriteResource.getDimensions().height); - } - - if (position) { - _x = _spriteResource.getPosition().x; - _y = _spriteResource.getPosition().y; - } - - _needRefresh = true; - -} - // AnimatedSprite AnimatedSprite::AnimatedSprite(NeverhoodEngine *vm, int objectPriority) diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h index 7e07f3a412..80da1768bd 100644 --- a/engines/neverhood/sprite.h +++ b/engines/neverhood/sprite.h @@ -93,16 +93,22 @@ protected: } }; +enum { + kSLFDefDrawOffset = 1 << 0, + kSLFCenteredDrawOffset = 1 << 1, + kSLFDefPosition = 1 << 2, + kSLFSetPosition = 1 << 3, + kSLFDefCollisionBoundsOffset = 1 << 4 +}; + class StaticSprite : public Sprite { public: StaticSprite(NeverhoodEngine *vm, int objectPriority); - StaticSprite(NeverhoodEngine *vm, const char *filename, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0); - StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0); - void load(uint32 fileHash, bool dimensions, bool position); - void update(); + StaticSprite(NeverhoodEngine *vm, uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition); + void loadSprite(uint32 fileHash, uint flags = 0, int surfacePriority = 0, int16 x = kDefPosition, int16 y = kDefPosition); + void updatePosition(); protected: SpriteResource _spriteResource; - void init(uint32 fileHash, int surfacePriority, int16 x = kDefPosition, int16 y = kDefPosition, int16 width = 0, int16 height = 0); }; #define AnimationCallback(callback) static_cast <void (AnimatedSprite::*)()> (callback) |