aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/module2800.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/neverhood/module2800.cpp')
-rw-r--r--engines/neverhood/module2800.cpp157
1 files changed, 42 insertions, 115 deletions
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 {