aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/cge2/cge2.h1
-rw-r--r--engines/cge2/snail.cpp38
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;