diff options
author | uruk | 2014-06-13 22:29:39 +0200 |
---|---|---|
committer | uruk | 2014-06-13 22:29:39 +0200 |
commit | 2b5eec4427814e501f4a11103befedaf4628f528 (patch) | |
tree | 9d07a89747adf313ef34ab8100f711080f4e6595 | |
parent | 63c0cb40feb9acfb600503688358af28da4f14b7 (diff) | |
download | scummvm-rg350-2b5eec4427814e501f4a11103befedaf4628f528.tar.gz scummvm-rg350-2b5eec4427814e501f4a11103befedaf4628f528.tar.bz2 scummvm-rg350-2b5eec4427814e501f4a11103befedaf4628f528.zip |
CGE2: Implement snCover and snUncover.
Also add and implement expandSprite().
-rw-r--r-- | engines/cge2/cge2.h | 1 | ||||
-rw-r--r-- | engines/cge2/snail.cpp | 38 |
2 files changed, 37 insertions, 2 deletions
diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h index cb5e6205e8..968fe2bb41 100644 --- a/engines/cge2/cge2.h +++ b/engines/cge2/cge2.h @@ -193,6 +193,7 @@ public: void snSay(Sprite *spr, int val); void hide1(Sprite *spr); + Sprite *expandSprite(Sprite *spr); const ADGameDescription *_gameDescription; diff --git a/engines/cge2/snail.cpp b/engines/cge2/snail.cpp index ee94ab8894..86ce006e4a 100644 --- a/engines/cge2/snail.cpp +++ b/engines/cge2/snail.cpp @@ -416,12 +416,40 @@ void CGE2Engine::snSend(Sprite *spr, int val) { void CGE2Engine::snSwap(Sprite *spr, int val) { warning("STUB: CGE2Engine::snSwap()"); } + void CGE2Engine::snCover(Sprite *spr, int val) { - warning("STUB: CGE2Engine::snCover()"); + bool tak = _taken; + Sprite *xspr = locate(val); + if (spr && xspr) { + spr->_flags._hide = true; + xspr->setCave(spr->_scene); + xspr->gotoxyz(spr->_pos3D); + expandSprite(xspr); + if ((xspr->_flags._shad = spr->_flags._shad) == true) { + _vga->_showQ->insert(_vga->_showQ->remove(spr->_prev), xspr); + spr->_flags._shad = false; + } + feedSnail(xspr, kNear, _heroTab[_sex]->_ptr); + _taken = false; + } + if (_taken) + _spare->dispose(xspr); + _taken = tak; } void CGE2Engine::snUncover(Sprite *spr, Sprite *spr2) { - warning("STUB: CGE2Engine::snUncover()"); + if (spr && spr2) { + spr->_flags._hide = false; + spr->setCave(spr2->_scene); + if ((spr->_flags._shad = spr2->_flags._shad) == true) { + _vga->_showQ->insert(_vga->_showQ->remove(spr2->_prev), spr); + spr2->_flags._shad = false; + } + spr->gotoxyz(spr2->_pos3D); + snSend(spr2, -1); + if (spr->_time == 0) + ++spr->_time; + } } void CGE2Engine::snFocus(int val) { @@ -594,6 +622,12 @@ void CGE2Engine::hide1(Sprite *spr) { _commandHandlerTurbo->addCommand(kCmdGhost, -1, 0, spr->ghost()); } +Sprite *CGE2Engine::expandSprite(Sprite *spr) { + if (spr) + _vga->_showQ->insert(spr); + return spr; +} + void CommandHandler::addCommand(CommandType com, int ref, int val, void *ptr) { if (ref == 2) ref = 142 - _vm->_sex; |