From 0ec039c5b05d03d470ae120e008c1577279ff6ed Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Mon, 19 Sep 2011 09:12:43 +0000 Subject: NEVERHOOD: Merge the three mouse classes into Mouse, introduce insertMouse433 etc. methods and use them --- engines/neverhood/diskplayerscene.cpp | 8 +- engines/neverhood/module1000.cpp | 12 +- engines/neverhood/module1200.cpp | 4 +- engines/neverhood/module1300.cpp | 28 +-- engines/neverhood/module1400.cpp | 20 +-- engines/neverhood/module1700.cpp | 2 +- engines/neverhood/module2000.cpp | 2 +- engines/neverhood/module2200.cpp | 38 ++-- engines/neverhood/module3000.cpp | 8 +- engines/neverhood/mouse.cpp | 326 ++++++++++------------------------ engines/neverhood/mouse.h | 37 ++-- engines/neverhood/navigationscene.cpp | 8 +- engines/neverhood/scene.cpp | 27 +++ engines/neverhood/scene.h | 7 +- 14 files changed, 205 insertions(+), 322 deletions(-) diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp index 3eeef9204d..d0d7ec2426 100644 --- a/engines/neverhood/diskplayerscene.cpp +++ b/engines/neverhood/diskplayerscene.cpp @@ -391,8 +391,8 @@ DiskplayerScene::DiskplayerScene(NeverhoodEngine *vm, Module *parentModule, int _class650 = new DiskplayerSlot(_vm, this, 20, 0); addEntity(_class650); - _mouseCursor = addSprite(new Mouse435(_vm, 0x000408A8, 20, 620)); - _mouseCursor->getSurface()->setVisible(false); + insertMouse435(0x000408A8, 20, 620); + showMouse(false); _smackerPlayer = new SmackerPlayer(_vm, this, 0x08288103, false, true); addEntity(_smackerPlayer); @@ -457,7 +457,7 @@ void DiskplayerScene::update() { } _diskIndex = 0; stop(); - _mouseCursor->getSurface()->setVisible(true); + showMouse(true); _flag3 = false; } } @@ -480,7 +480,7 @@ void DiskplayerScene::update() { _playButton->press(); _tuneInCountdown = 2; } else { - _mouseCursor->getSurface()->setVisible(true); + showMouse(true); _diskSlots[_diskIndex]->activate(); } } diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp index cf215361c9..4539b37050 100644 --- a/engines/neverhood/module1000.cpp +++ b/engines/neverhood/module1000.cpp @@ -348,7 +348,7 @@ Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x4086520E); _palette = new Palette(_vm, 0x4086520E); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x6520A400, NULL)); + insertMouse433(0x6520A400); if (which < 0) { setRectList(0x004B49F0); @@ -1421,7 +1421,7 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) _vm->_gameState.field2 = 0; } - _mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL)); + insertMouse433(0x23303124); tempSprite = insertStaticSprite(0xB3242310, 825); tempClipRect.x1 = tempSprite->getSurface()->getDrawRect().x; @@ -1631,7 +1631,7 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF setBackground(backgroundFileHash); _palette = new Palette(_vm, backgroundFileHash); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse435(_vm, cursorFileHash, 20, 620)); + insertMouse435(cursorFileHash, 20, 620); } uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { @@ -1701,7 +1701,7 @@ Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which) _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse433(_vm, 0x03001504, NULL)); + insertMouse433(0x03001504); if (which < 0) { setRectList(0x004B7C70); @@ -1794,14 +1794,14 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0x2800E011); _palette->usePalette(); insertStaticSprite(0x492D5AD7, 100); - _mouseCursor = addSprite(new Mouse435(_vm, 0x0E015288, 20, 620)); + insertMouse435(0x0E015288, 20, 620); } else { setBackground(0x8870A546); _palette = new Palette(_vm, 0x8870A546); _palette->usePalette(); insertStaticSprite(0x40D1E0A9, 100); insertStaticSprite(0x149C00A6, 100); - _mouseCursor = addSprite(new Mouse435(_vm, 0x0A54288F, 20, 620)); + insertMouse435(0x0A54288F, 20, 620); } drawTextToBackground(); diff --git a/engines/neverhood/module1200.cpp b/engines/neverhood/module1200.cpp index 3901f83eb9..c050abcf68 100644 --- a/engines/neverhood/module1200.cpp +++ b/engines/neverhood/module1200.cpp @@ -783,7 +783,7 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which) } } - _mouseCursor = addSprite(new Mouse433(_vm, 0x9A2C0409, NULL)); + insertMouse433(0x9A2C0409); _asTape = addSprite(new AsScene1201Tape(_vm, this, 3, 1100, 243, 340, 0x9148A011)); _vm->_collisionMan->addSprite(_asTape); @@ -1168,7 +1168,7 @@ Scene1202::Scene1202(NeverhoodEngine *vm, Module *parentModule, int which) _paletteResource.load(0x60250EB5); _paletteResource.copyPalette(_paletteData); - _mouseCursor = addSprite(new Mouse435(_vm, 0x10ED160A, 20, 620)); + insertMouse435(0x10ED160A, 20, 620); for (int i = 0; i < 18; i++) { _asTntItems[i] = addSprite(new AsScene1202TntItem(_vm, this, i)); diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index 189ee2c2ff..af2390cb86 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -581,7 +581,7 @@ Scene1302::Scene1302(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x420643C4); _palette = new Palette(_vm, 0x420643C4); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x643C0428, NULL)); + insertMouse433(0x643C0428); _class595 = addSprite(new Class595(_vm, this)); _sprite1 = insertStaticSprite(0x942FC224, 300); @@ -806,7 +806,7 @@ Scene1303::Scene1303(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x01581A9C); _palette = new Palette(_vm, 0x01581A9C); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x81A9801D, NULL)); + insertMouse433(0x81A9801D); if (!getGlobalVar(0xAC00C0D0)) { _asBalloon = addSprite(new AsScene1303Balloon(_vm, this)); @@ -878,7 +878,7 @@ Scene1304::Scene1304(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x062C0214); _palette = new Palette(_vm, 0x062C0214); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0xC021006A, NULL)); + insertMouse433(0xC021006A); if (getGlobalVar(0xAC00C0D0)) { _class545 = addSprite(new Class545(_vm, this, 0, 1100, 278, 347)); @@ -949,7 +949,7 @@ Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x28801B64); _palette = new Palette(_vm, 0x28801B64); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x01B60280, NULL)); + insertMouse433(0x01B60280); if (which < 0) { InsertKlayman(KmScene1305, 212, 441); @@ -1065,7 +1065,7 @@ Scene1306::Scene1306(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x05303114); _palette = new Palette(_vm, 0x05303114); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x0311005B, NULL)); + insertMouse433(0x0311005B); if (!getGlobalVar(0x13382860)) { _class545 = addSprite(new Class545(_vm, this, 2, 1100, 435, 445)); @@ -1472,7 +1472,7 @@ Scene1307::Scene1307(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0xA8006200); _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse435(_vm, 0x06204A88, 20, 620)); + insertMouse435(0x06204A88, 20, 620); tempSprite = insertStaticSprite(0x00A3621C, 800); _clipRects[0].x1 = tempSprite->getSurface()->getDrawRect().x; @@ -1790,7 +1790,7 @@ Scene1308::Scene1308(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x41024202); _palette = new Palette(_vm, 0x41024202); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x24206418, NULL)); + insertMouse433(0x24206418); _asTape = addSprite(new AsScene1201Tape(_vm, this, 17, 1100, 502, 445, 0x9148A011)); _vm->_collisionMan->addSprite(_asTape); @@ -1978,8 +1978,8 @@ Scene1317::Scene1317(NeverhoodEngine *vm, Module *parentModule, int which) SetMessageHandler(&Scene1317::handleMessage); _smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, 0x08982841, true, false)); - _mouseCursor = addSprite(new Mouse433(_vm, 0x08284011, NULL)); - _mouseCursor->getSurface()->setVisible(false); + insertMouse433(0x08284011); + showMouse(false); _smackerFileHash = 0; _smackerFlag1 = false; } @@ -2086,7 +2086,7 @@ uint32 Scene1317::hmEndMovie(int messageNum, const MessageParam ¶m, Entity * } void Scene1317::stChooseKing() { - _mouseCursor->getSurface()->setVisible(true); + showMouse(true); SetMessageHandler(&Scene1317::hmChooseKing); SetUpdateHandler(&Scene1317::upChooseKing); _smackerFileHash = 0x10982841; @@ -2097,7 +2097,7 @@ void Scene1317::stChooseKing() { } void Scene1317::stNoDecisionYet() { - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); SetMessageHandler(&Scene1317::hmNoDecisionYet); SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x20982841; @@ -2105,7 +2105,7 @@ void Scene1317::stNoDecisionYet() { } void Scene1317::stHoborgAsKing() { - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); SetMessageHandler(&Scene1317::hmHoborgAsKing); SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x40982841; @@ -2113,7 +2113,7 @@ void Scene1317::stHoborgAsKing() { } void Scene1317::stKlaymanAsKing() { - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); SetMessageHandler(&Scene1317::hmKlaymanAsKing); SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x80982841; @@ -2121,7 +2121,7 @@ void Scene1317::stKlaymanAsKing() { } void Scene1317::stEndMovie() { - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); SetMessageHandler(&Scene1317::hmEndMovie); SetUpdateHandler(&Scene1317::update); _smackerFileHash = 0x40800711; diff --git a/engines/neverhood/module1400.cpp b/engines/neverhood/module1400.cpp index 7f55272228..d59cbd8812 100644 --- a/engines/neverhood/module1400.cpp +++ b/engines/neverhood/module1400.cpp @@ -727,7 +727,7 @@ Scene1401::Scene1401(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x08221FA5); _palette = new Palette(_vm, 0x08221FA5); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x21FA108A, NULL)); + insertMouse433(0x21FA108A); // TODO _class427 = addSprite(new Class427(_vm, this, 0x980F3124, 0x12192892, 100, 0)); _class525 = addSprite(new Class525(_vm)); @@ -949,7 +949,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0x231482F0); _palette->addPalette(0x91D3A391, 0, 64, 0); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x482F4239, NULL)); + insertMouse433(0x482F4239); _class454_1 = addSprite(new Class454(_vm, 0x15402D64, 1100)); _class454_2 = addSprite(new Class454(_vm, 0x10A02120, 1100)); @@ -976,7 +976,7 @@ Scene1402::Scene1402(NeverhoodEngine *vm, Module *parentModule, int which) if (getGlobalVar(0x70A1189C)) { _class482 = addSprite(new Class482(_vm, this, 1)); clearRectList(); - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); sub428220(); } else { _class482 = addSprite(new Class482(_vm, this, 0)); @@ -1056,7 +1056,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit } else { clearRectList(); _klayman->getSurface()->setVisible(false); - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); sendMessage(_class482, 0x2002, 0); sub428220(); } @@ -1071,7 +1071,7 @@ uint32 Scene1402::handleMessage(int messageNum, const MessageParam ¶m, Entit break; case 0x2000: sub428230(); - _mouseCursor->getSurface()->setVisible(true); + showMouse(true); setRectList(0x004B0C48); break; case 0x2001: @@ -1351,7 +1351,7 @@ Scene1407::Scene1407(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x00442225); _palette = new Palette(_vm, 0x00442225); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse435(_vm, 0x4222100C, 20, 620)); + insertMouse435(0x4222100C, 20, 620); _asMouse = addSprite(new AsScene1407Mouse(_vm, this)); _ssResetButton = insertStaticSprite(0x12006600, 100); @@ -1397,7 +1397,7 @@ uint32 Scene1407::handleMessage(int messageNum, const MessageParam ¶m, Entit // The mouse got the cheese (nomnom) setGlobalVar(0x70A1189C, 1); _soundResource.play(0x68E25540); - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); _puzzleSolvedCountdown = 72; break; } @@ -1417,7 +1417,7 @@ Scene1403::Scene1403(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x2110A234); _palette = new Palette(_vm, 0x2110A234); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x0A230219, NULL)); + insertMouse433(0x0A230219); _class401_1 = insertStaticSprite(0x01102A33, 100); _class401_1->getSurface()->setVisible(false); @@ -1541,7 +1541,7 @@ Scene1404::Scene1404(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0xAC0B006F); _palette->addPalette(0x00801510, 0, 65, 0); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0xB006BAC8, NULL)); + insertMouse433(0xB006BAC8); if (getGlobalVar(0x13382860) == 5) { _class545 = addSprite(new Class545(_vm, this, 2, 1100, 267, 411)); @@ -1755,7 +1755,7 @@ Scene1405::Scene1405(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x0C0C007D); _palette = new Palette(_vm, 0x0C0C007D); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse435(_vm, 0xC00790C8, 20, 620)); + insertMouse435(0xC00790C8, 20, 620); // TODO: Some debug code: Leave two matching tiles open for (int i = 0; i < 48; i++) diff --git a/engines/neverhood/module1700.cpp b/engines/neverhood/module1700.cpp index 33e690813d..2b0f25d163 100644 --- a/engines/neverhood/module1700.cpp +++ b/engines/neverhood/module1700.cpp @@ -230,7 +230,7 @@ Scene1705::Scene1705(NeverhoodEngine *vm, Module *parentModule, int which) _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse433(_vm, 0x18222039, NULL)); + insertMouse433(0x18222039); addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 0)], 0)); addSprite(new Class602(_vm, kScene1705FileHashes[getSubVar(0x0A4C0A9A, 1)], 1)); diff --git a/engines/neverhood/module2000.cpp b/engines/neverhood/module2000.cpp index bedc9d4b08..cf7256bce8 100644 --- a/engines/neverhood/module2000.cpp +++ b/engines/neverhood/module2000.cpp @@ -125,7 +125,7 @@ Scene2001::Scene2001(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0xA6417244); _palette = new Palette(_vm, 0xA6417244); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x17240A6C, NULL)); + insertMouse433(0x17240A6C); _class401 = insertStaticSprite(0x0D641724, 1100); diff --git a/engines/neverhood/module2200.cpp b/engines/neverhood/module2200.cpp index 2219679d06..3bc3797152 100644 --- a/engines/neverhood/module2200.cpp +++ b/engines/neverhood/module2200.cpp @@ -738,7 +738,7 @@ Scene2201::Scene2201(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x40008208); _palette = new Palette(_vm, 0x40008208); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x0820C408, NULL)); + insertMouse433(0x0820C408); _asTape = addSprite(new AsScene1201Tape(_vm, this, 7, 1100, 459, 432, 0x9148A011)); _vm->_collisionMan->addSprite(_asTape); @@ -1122,7 +1122,7 @@ Scene2202::Scene2202(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0x08100A0C); _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse435(_vm, 0x00A08089, 20, 620)); + insertMouse435(0x00A08089, 20, 620); //DEBUG! for (uint32 index = 0; index < 9; index++) @@ -1351,7 +1351,7 @@ Scene2203::Scene2203(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x82C80334); _palette = new Palette(_vm, 0x82C80334); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x80330824, NULL)); + insertMouse433(0x80330824); _vm->_collisionMan->setHitRects(0x004B8320); @@ -1515,7 +1515,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0x0008028D); _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse433(_vm, 0x80289008, NULL)); + insertMouse433(0x80289008); _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0x2D309030, 100, 0); addSprite(_ssLightSwitch); } else { @@ -1524,7 +1524,7 @@ Scene2205::Scene2205(NeverhoodEngine *vm, Module *parentModule, int which) _palette = new Palette(_vm, 0xD00A028D); _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse433(_vm, 0xA0289D08, NULL)); + insertMouse433(0xA0289D08); _ssLightSwitch = new Class426(_vm, this, 0x2D339030, 0xDAC86E84, 100, 0); addSprite(_ssLightSwitch); } @@ -1571,16 +1571,14 @@ void Scene2205::update() { _background->load(0x0008028D); _ssLightSwitch->setFileHashes(0x2D339030, 0x2D309030); sendMessage(_ssDoorFrame, 0x2000, 0); - ((Mouse433*)_mouseCursor)->load(0x80289008); - ((Mouse433*)_mouseCursor)->updateCursor(); + changeMouseCursor(0x80289008); _isLightOn = true; } else if (_isLightOn && !getGlobalVar(0x4D080E54)) { _palette->addPalette(0xD00A028D, 0, 256, 0); _background->load(0xD00A028D); _ssLightSwitch->setFileHashes(0x2D339030, 0xDAC86E84); sendMessage(_ssDoorFrame, 0x2000, 0); - ((Mouse433*)_mouseCursor)->load(0xA0289D08); - ((Mouse433*)_mouseCursor)->updateCursor(); + changeMouseCursor(0xA0289D08); _isKlaymanInLight = true; if (_klayman->getX() > 85) { _palette->addPalette(0x68033B1C, 0, 65, 0); @@ -1782,7 +1780,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which) _sprite4->getSurface()->getClipRect().y2 = 480; setRectList(0x004B8AF8); _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x0E038022, 100, 0)); - _mouseCursor = addSprite(new Mouse433(_vm, 0x83212411, NULL)); + insertMouse433(0x83212411); _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x5E00E262)); _class604 = addSprite(new Class604(_vm, 0x085E25E0)); } else { @@ -1797,7 +1795,7 @@ Scene2206::Scene2206(NeverhoodEngine *vm, Module *parentModule, int which) _sprite4->getSurface()->getClipRect().y2 = 480; setRectList(0x004B8B58); _sprite5 = addSprite(new SsCommonButtonSprite(_vm, this, 0x16882608, 100, 0)); - _mouseCursor = addSprite(new Mouse433(_vm, 0x02A41E09, NULL)); + insertMouse433(0x02A41E09); _class607 = addSprite(new Class607(_vm, this, 1100, /*464, 433, */0x52032563)); _class604 = addSprite(new Class604(_vm, 0x317831A0)); } @@ -2296,7 +2294,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x88C00241); _palette = new Palette(_vm, 0x88C00241); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x00245884, NULL)); + insertMouse433(0x00245884); _ssMaskPart1 = insertStaticSprite(0xE20A28A0, 1200); _ssMaskPart2 = insertStaticSprite(0x688F62A5, 1100); @@ -2338,7 +2336,7 @@ Scene2207::Scene2207(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x05C02A55); _palette = new Palette(_vm, 0x05C02A55); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x02A51054, NULL)); + insertMouse433(0x02A51054); _ssMaskPart1 = insertStaticSprite(0x980E46A4, 1200); @@ -2537,7 +2535,7 @@ Scene2208::Scene2208(NeverhoodEngine *vm, Module *parentModule, int which) _palette->usePalette(); addEntity(_palette); // Why? - _mouseCursor = addSprite(new Mouse435(_vm, 0x0028D089, 40, 600)); + insertMouse435(0x0028D089, 40, 600); createFontSurface(); @@ -2712,7 +2710,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x11840E24); _palette = new Palette(_vm, 0x11840E24); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x40E20110, NULL)); + insertMouse433(0x40E20110); setRectList(0x004B3DC8); } else { setBackground(0x25848E24); @@ -2721,7 +2719,7 @@ Scene2242::Scene2242(NeverhoodEngine *vm, Module *parentModule, int which) addEntity(_palette); _palette->copyBasePalette(0, 256, 0); _palette->addPalette(0x68033B1C, 0, 65, 0); - _mouseCursor = addSprite(new Mouse433(_vm, 0x48E20250, NULL)); + insertMouse433(0x48E20250); setRectList(0x004B3E18); } @@ -2850,13 +2848,13 @@ HallOfRecordsScene::HallOfRecordsScene(NeverhoodEngine *vm, Module *parentModule setBackground(_sceneInfo140->bgFilename2); _palette = new Palette(_vm, _sceneInfo140->bgFilename2); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL)); + insertMouse433(0x14320138); } else { setRectList(0x004B2BB8); setBackground(_sceneInfo140->bgFilename1); _palette = new Palette(_vm, _sceneInfo140->bgFilename1); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x63A40028, NULL)); + insertMouse433(0x63A40028); } if (which < 0) { @@ -2947,13 +2945,13 @@ Scene2247::Scene2247(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0x40339414); _palette = new Palette(_vm, 0x40339414); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x3941040B, NULL)); + insertMouse433(0x3941040B); } else { setRectList(0x004B55C8); setBackground(0x071963E5); _palette = new Palette(_vm, 0x071963E5); _palette->usePalette(); - _mouseCursor = addSprite(new Mouse433(_vm, 0x14320138, NULL)); + insertMouse433(0x14320138); } if (which < 0) { diff --git a/engines/neverhood/module3000.cpp b/engines/neverhood/module3000.cpp index 9bcd79a5e8..c28d0eb478 100644 --- a/engines/neverhood/module3000.cpp +++ b/engines/neverhood/module3000.cpp @@ -924,7 +924,7 @@ Scene3009::Scene3009(NeverhoodEngine *vm, Module *parentModule, int which) setBackground(0xD000420C); _palette = new Palette(_vm, 0xD000420C); - _mouseCursor = addSprite(new Mouse435(_vm, 0x04208D08, 20, 620)); + insertMouse435(0x04208D08, 20, 620); _ssFireCannonButton = addSprite(new SsScene3009FireCannonButton(_vm, this)); _vm->_collisionMan->addSprite(_ssFireCannonButton); @@ -1438,7 +1438,7 @@ Scene3010::Scene3010(NeverhoodEngine *vm, Module *parentModule, int which) } if (which == 0) { - _mouseCursor = addSprite(new Mouse435(_vm, 0x02622800, 20, 620)); + insertMouse435(0x02622800, 20, 620); } _soundResource.load(0x68E25540); @@ -1475,7 +1475,7 @@ uint32 Scene3010::handleMessage(int messageNum, const MessageParam ¶m, Entit // TODO: Debug stuff if ((param.asPoint().x <= 20 || param.asPoint().x >= 620) && _countdown == 0 && !_checkUnlocked) { if (!_boltUnlocking[0] && !_boltUnlocking[1] && !_boltUnlocking[2]) { - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); if (!_boltUnlocked[0] && !_boltUnlocked[1] && !_boltUnlocked[2]) { _countdown = 1; } else { @@ -1679,7 +1679,7 @@ Scene3011::Scene3011(NeverhoodEngine *vm, Module *parentModule, int which) _palette->usePalette(); addEntity(_palette); - _mouseCursor = addSprite(new Mouse435(_vm, 0x24A00929, 20, 620)); + insertMouse435(0x24A00929, 20, 620); for (int i = 0; i < 12; i++) { _asSymbols[i] = new AsScene3011Symbol(_vm, i, true); diff --git a/engines/neverhood/mouse.cpp b/engines/neverhood/mouse.cpp index 1eaf0cb843..03b1478c55 100644 --- a/engines/neverhood/mouse.cpp +++ b/engines/neverhood/mouse.cpp @@ -26,146 +26,66 @@ namespace Neverhood { // TODO: Use CursorMan -Mouse433::Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect) - : StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0) { +Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect) + : StaticSprite(vm, 2000), _mouseType(kMouseType433), + _mouseCursorResource(vm), _frameNum(0) { - debug(7, "Mouse433::Mouse433(%08X)", fileHash); - - if (mouseRect) { - _mouseRect = *mouseRect; - } else { - _mouseRect.x1 = -1; - _mouseRect.y1 = -1; - _mouseRect.x2 = -1; - _mouseRect.y2 = -1; - } - _mouseCursorResource.load(fileHash); - _x = _vm->getMouseX(); - _y = _vm->getMouseY(); + _mouseRect = mouseRect; + init(fileHash); if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 && _y >= _mouseRect.y1 && _y <= _mouseRect.y2) { _mouseCursorResource.setCursorNum(1); } else { _mouseCursorResource.setCursorNum(4); } - createSurface(2000, 32, 32); - SetUpdateHandler(&Mouse433::update); - SetMessageHandler(&Mouse433::handleMessage); - _drawRect.x = 0; - _drawRect.y = 0; - _drawRect.width = 32; - _drawRect.height = 32; - _deltaRect.x = 0; - _deltaRect.y = 0; - _deltaRect.width = 32; - _deltaRect.height = 32; - processDelta(); - _needRefresh = true; updateCursor(); } -void Mouse433::load(uint32 fileHash) { - _mouseCursorResource.load(fileHash); - _needRefresh = true; -} - -void Mouse433::update() { - debug(7, "Mouse433::update()"); - updateCursor(); - _frameNum++; - if (_frameNum >= 6) - _frameNum = 0; - _needRefresh = _frameNum % 2 == 0; -} - -uint32 Mouse433::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - debug(7, "Mouse433::handleMessage(%04X)", messageNum); - uint32 messageResult = 0; - if (messageNum != 5) { - messageResult = Sprite::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x4002: - _x = param.asPoint().x; - _y = param.asPoint().y; - if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 && - _y >= _mouseRect.y1 && _y <= _mouseRect.y2) { - _mouseCursorResource.setCursorNum(1); - } else { - _mouseCursorResource.setCursorNum(4); - } - processDelta(); - break; - } - } else { - // TODO: Debug stuff - } - return messageResult; -} - -void Mouse433::updateCursor() { - debug(7, "Mouse433::updateCursor()"); +Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2) + : StaticSprite(vm, 2000), _mouseType(kMouseType435), + _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) { - if (!_surface) - return; - - if (_doDeltaX) { - _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1); - } else { - _surface->getDrawRect().x = filterX(_x + _drawRect.x); - } - - if (_doDeltaY) { - _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1); + init(fileHash); + if (_x <= _x1) { + _mouseCursorResource.setCursorNum(6); + } else if (_x >= _x2) { + _mouseCursorResource.setCursorNum(5); } else { - _surface->getDrawRect().y = filterY(_y + _drawRect.y); + _mouseCursorResource.setCursorNum(4); } + updateCursor(); +} - if (_needRefresh) { - _needRefresh = false; - _drawRect = _mouseCursorResource.getRect(); - _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2); - } +Mouse::Mouse(NeverhoodEngine *vm, uint32 fileHash, int type) + : StaticSprite(vm, 2000), _mouseType(kMouseTypeNavigation), + _mouseCursorResource(vm), _type(type), _frameNum(0) { + init(fileHash); + _mouseCursorResource.setCursorNum(0); } -Mouse435::Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2) - : StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) { - - debug(7, "Mouse435::Mouse435(%08X)", fileHash); - +void Mouse::init(uint32 fileHash) { _mouseCursorResource.load(fileHash); _x = _vm->getMouseX(); - _y = _vm->getMouseY(); - if (_x <= _x1) { - _mouseCursorResource.setCursorNum(6); - } else if (_x >= _x2) { - _mouseCursorResource.setCursorNum(5); - } else { - _mouseCursorResource.setCursorNum(4); - } + _y = _vm->getMouseY(); createSurface(2000, 32, 32); - SetUpdateHandler(&Mouse435::update); - SetMessageHandler(&Mouse435::handleMessage); + SetUpdateHandler(&Mouse::update); + SetMessageHandler(&Mouse::handleMessage); _drawRect.x = 0; _drawRect.y = 0; _drawRect.width = 32; _drawRect.height = 32; - _deltaRect.x = 0; - _deltaRect.y = 0; - _deltaRect.width = 32; - _deltaRect.height = 32; + _deltaRect = _drawRect; processDelta(); _needRefresh = true; - updateCursor(); } -void Mouse435::load(uint32 fileHash) { +void Mouse::load(uint32 fileHash) { _mouseCursorResource.load(fileHash); _needRefresh = true; } -void Mouse435::update() { - debug(7, "Mouse435::update()"); +void Mouse::update() { updateCursor(); _frameNum++; if (_frameNum >= 6) @@ -173,22 +93,61 @@ void Mouse435::update() { _needRefresh = _frameNum % 2 == 0; } -uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - debug(7, "Mouse435::handleMessage(%04X)", messageNum); +uint32 Mouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { + debug(7, "Mouse::handleMessage(%04X)", messageNum); uint32 messageResult = 0; if (messageNum != 5) { messageResult = Sprite::handleMessage(messageNum, param, sender); switch (messageNum) { - case 0x4002: + case 0x2064: _x = param.asPoint().x; _y = param.asPoint().y; - if (_x <= _x1) { - _mouseCursorResource.setCursorNum(6); - } else if (_x >= _x2) { - _mouseCursorResource.setCursorNum(5); - } else { - _mouseCursorResource.setCursorNum(4); + switch (_type) { + case 1: + if (_x >= 320) + messageResult = 1; + else + messageResult = 0; + break; + case 2: + default: + if (_x < 100) + messageResult = 0; + else if (_x > 540) + messageResult = 1; + else + messageResult = 2; + break; + case 3: + if (_x < 100) + messageResult = 0; + else if (_x > 540) + messageResult = 1; + else + messageResult = 4; + break; + case 4: + if (_x < 100) + messageResult = 0; + else if (_x > 540) + messageResult = 1; + else if (_y >= 150) + messageResult = 2; + else + messageResult = 3; + break; + case 5: + if (_y >= 240) + messageResult = 4; + else + messageResult = 3; + break; } + break; + case 0x4002: + _x = param.asPoint().x; + _y = param.asPoint().y; + updateCursorNum(); processDelta(); break; } @@ -198,8 +157,7 @@ uint32 Mouse435::handleMessage(int messageNum, const MessageParam ¶m, Entity return messageResult; } -void Mouse435::updateCursor() { - debug(7, "Mouse435::updateCursor()"); +void Mouse::updateCursor() { if (!_surface) return; @@ -224,91 +182,26 @@ void Mouse435::updateCursor() { } -// NavigationMouse - -NavigationMouse::NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type) - : StaticSprite(vm, 2000), _mouseCursorResource(vm), _type(type), _frameNum(0) { - - _mouseCursorResource.load(fileHash); - _mouseCursorResource.setCursorNum(0); - _x = _vm->getMouseX(); - _y = _vm->getMouseY(); - createSurface(2000, 32, 32); - SetUpdateHandler(&NavigationMouse::update); - SetMessageHandler(&NavigationMouse::handleMessage); - _drawRect.x = 0; - _drawRect.y = 0; - _drawRect.width = 32; - _drawRect.height = 32; - _deltaRect.x = 0; - _deltaRect.y = 0; - _deltaRect.width = 32; - _deltaRect.height = 32; - processDelta(); - _needRefresh = true; - updateCursor(); -} - -void NavigationMouse::update() { - updateCursor(); - _frameNum++; - if (_frameNum >= 6) - _frameNum = 0; - _needRefresh = _frameNum % 2 == 0; -} - -uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - debug("NavigationMouse: _type = %d", _type); - uint32 messageResult = 0; - switch (messageNum) { - case 0x2064: - _x = param.asPoint().x; - _y = param.asPoint().y; - switch (_type) { - case 1: - if (_x >= 320) - messageResult = 1; - else - messageResult = 0; - break; - case 2: - default: - if (_x < 100) - messageResult = 0; - else if (_x > 540) - messageResult = 1; - else - messageResult = 2; - break; - case 3: - if (_x < 100) - messageResult = 0; - else if (_x > 540) - messageResult = 1; - else - messageResult = 4; - break; - case 4: - if (_x < 100) - messageResult = 0; - else if (_x > 540) - messageResult = 1; - else if (_y >= 150) - messageResult = 2; - else - messageResult = 3; - break; - case 5: - if (_y >= 240) - messageResult = 4; - else - messageResult = 3; - break; +void Mouse::updateCursorNum() { + switch (_mouseType) { + case kMouseType433: + if (_x >= _mouseRect.x1 && _x <= _mouseRect.x2 && + _y >= _mouseRect.y1 && _y <= _mouseRect.y2) { + _mouseCursorResource.setCursorNum(1); + } else { + _mouseCursorResource.setCursorNum(4); } break; - case 0x4002: - _x = param.asPoint().x; - _y = param.asPoint().y; + case kMouseType435: + if (_x <= _x1) { + _mouseCursorResource.setCursorNum(6); + } else if (_x >= _x2) { + _mouseCursorResource.setCursorNum(5); + } else { + _mouseCursorResource.setCursorNum(4); + } + break; + case kMouseTypeNavigation: switch (_type) { case 1: if (_x >= 320) @@ -348,36 +241,9 @@ uint32 NavigationMouse::handleMessage(int messageNum, const MessageParam ¶m, _mouseCursorResource.setCursorNum(3); break; } - _needRefresh = true; - processDelta(); break; } - return messageResult; -} - -void NavigationMouse::updateCursor() { - - if (!_surface) - return; - - if (_doDeltaX) { - _surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1); - } else { - _surface->getDrawRect().x = filterX(_x + _drawRect.x); - } - - if (_doDeltaY) { - _surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1); - } else { - _surface->getDrawRect().y = filterY(_y + _drawRect.y); - } - - if (_needRefresh) { - _needRefresh = false; - _drawRect = _mouseCursorResource.getRect(); - _surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2); - } - + } } // End of namespace Neverhood diff --git a/engines/neverhood/mouse.h b/engines/neverhood/mouse.h index 65dcb27856..0b4f6b81db 100644 --- a/engines/neverhood/mouse.h +++ b/engines/neverhood/mouse.h @@ -30,43 +30,30 @@ namespace Neverhood { -class Mouse433 : public StaticSprite { -public: - Mouse433(NeverhoodEngine *vm, uint32 fileHash, NRect *mouseRect); - void load(uint32 fileHash); - void updateCursor(); -protected: - MouseCursorResource _mouseCursorResource; - int _frameNum; - NRect _mouseRect; - void update(); - uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); +enum MouseType { + kMouseType433, + kMouseType435, + kMouseTypeNavigation }; -class Mouse435 : public StaticSprite { +class Mouse : public StaticSprite { public: - Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2); + Mouse(NeverhoodEngine *vm, uint32 fileHash, const NRect &mouseRect); + Mouse(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2); + Mouse(NeverhoodEngine *vm, uint32 fileHash, int _type); void load(uint32 fileHash); void updateCursor(); protected: + MouseType _mouseType; MouseCursorResource _mouseCursorResource; int _frameNum; + NRect _mouseRect; int16 _x1; int16 _x2; - void update(); - uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); -}; - -class NavigationMouse : public StaticSprite { -public: - NavigationMouse(NeverhoodEngine *vm, uint32 fileHash, int type); - void load(uint32 fileHash); - void updateCursor(); -protected: - MouseCursorResource _mouseCursorResource; - int _frameNum; int _type; + void init(uint32 fileHash); void update(); + void updateCursorNum(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); }; diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp index 6b36571252..7a3161cb47 100644 --- a/engines/neverhood/navigationscene.cpp +++ b/engines/neverhood/navigationscene.cpp @@ -73,7 +73,7 @@ int NavigationScene::getNavigationAreaType() { void NavigationScene::update() { if (_smackerFileHash != 0) { - _mouseCursor->getSurface()->setVisible(false); + showMouse(false); _smackerPlayer->open(_smackerFileHash, false); _vm->_screen->clear(); _smackerDone = false; @@ -84,7 +84,7 @@ void NavigationScene::update() { } else { const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex]; createMouseCursor(); - _mouseCursor->getSurface()->setVisible(true); + showMouse(true); _soundFlag2 = false; _soundFlag1 = false; _interactive = true; @@ -127,7 +127,7 @@ void NavigationScene::createMouseCursor() { int areaType; if (_mouseCursor) { - deleteSprite(&_mouseCursor); + deleteSprite((Sprite**)&_mouseCursor); } mouseCursorFileHash = navigationItem.mouseCursorFileHash; @@ -143,7 +143,7 @@ void NavigationScene::createMouseCursor() { areaType = 1; } - _mouseCursor = addSprite(new NavigationMouse(_vm, mouseCursorFileHash, areaType)); + insertNavigationMouse(mouseCursorFileHash, areaType); sendPointMessage(_mouseCursor, 0x4002, _vm->getMousePos()); } diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp index c6f9f127fb..5072d5339d 100644 --- a/engines/neverhood/scene.cpp +++ b/engines/neverhood/scene.cpp @@ -190,6 +190,33 @@ Sprite *Scene::insertStaticSprite(uint32 fileHash, int surfacePriority) { return addSprite(new StaticSprite(_vm, fileHash, surfacePriority)); } +void Scene::insertMouse433(uint32 fileHash, NRect *mouseRect) { + NRect rect(-1, -1, -1, -1); + if (mouseRect) + rect = *mouseRect; + _mouseCursor = new Mouse(_vm, 0x0820C408, rect); + addSprite(_mouseCursor); +} + +void Scene::insertMouse435(uint32 fileHash, int16 x1, int16 x2) { + _mouseCursor = new Mouse(_vm, fileHash, x1, x2); + addSprite(_mouseCursor); +} + +void Scene::insertNavigationMouse(uint32 fileHash, int type) { + _mouseCursor = new Mouse(_vm, fileHash, type); + addSprite(_mouseCursor); +} + +void Scene::showMouse(bool visible) { + _mouseCursor->getSurface()->setVisible(visible); +} + +void Scene::changeMouseCursor(uint32 fileHash) { + _mouseCursor->load(fileHash); + _mouseCursor->updateCursor(); +} + SmackerPlayer *Scene::addSmackerPlayer(SmackerPlayer *smackerPlayer) { addEntity(smackerPlayer); addSurface(smackerPlayer->getSurface()); diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h index 9b928bb19c..31dd61db6d 100644 --- a/engines/neverhood/scene.h +++ b/engines/neverhood/scene.h @@ -56,6 +56,11 @@ public: void setBackground(uint32 fileHash, bool dirtyBackground = true); void changeBackground(uint32 fileHash); Sprite *insertStaticSprite(uint32 fileHash, int surfacePriority); + void insertMouse433(uint32 fileHash, NRect *mouseRect = NULL); + void insertMouse435(uint32 fileHash, int16 x1, int16 x2); + void insertNavigationMouse(uint32 fileHash, int type); + void showMouse(bool visible); + void changeMouseCursor(uint32 fileHash); SmackerPlayer *addSmackerPlayer(SmackerPlayer *smackerPlayer); void update(); protected: @@ -74,7 +79,7 @@ protected: HitRectList _hitRectList; int _rectType; // TODO 0000008E field_8E dw ? - Sprite *_mouseCursor; + Mouse *_mouseCursor; Klayman *_klayman; Palette *_palette; Background *_background; -- cgit v1.2.3