aboutsummaryrefslogtreecommitdiff
path: root/engines/cge2/hero.cpp
diff options
context:
space:
mode:
authoruruk2014-06-14 20:13:08 +0200
committeruruk2014-06-14 20:13:08 +0200
commit58c312d9e9ac5d78e39ee2ddbb40305bba689aec (patch)
tree4e4fc611e5972490d639a1cb0d4b9262d7276d9d /engines/cge2/hero.cpp
parent3d63184fee4e8b533763ecf2cae187f76954ac97 (diff)
downloadscummvm-rg350-58c312d9e9ac5d78e39ee2ddbb40305bba689aec.tar.gz
scummvm-rg350-58c312d9e9ac5d78e39ee2ddbb40305bba689aec.tar.bz2
scummvm-rg350-58c312d9e9ac5d78e39ee2ddbb40305bba689aec.zip
CGE2: Implement snReach() and connected functions.
Diffstat (limited to 'engines/cge2/hero.cpp')
-rw-r--r--engines/cge2/hero.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/engines/cge2/hero.cpp b/engines/cge2/hero.cpp
index f68cf82539..2090d497c1 100644
--- a/engines/cge2/hero.cpp
+++ b/engines/cge2/hero.cpp
@@ -360,12 +360,29 @@ void Hero::park() {
}
bool Hero::lower(Sprite * spr) {
- warning("STUB: Hero::lower()");
- return false;
+ return (spr->_pos3D._y + (spr->_siz.y >> 2) < 10);
}
void Hero::reach(int mode) {
- warning("STUB: Hero::reach()");
+ Sprite *spr = nullptr;
+ if (mode >= 4) {
+ spr = _vm->_vga->_showQ->locate(mode);
+ if (spr) {
+ mode = !spr->_flags._east; // 0-1
+ if (lower(spr)) // 2-3
+ mode += 2;
+ }
+ }
+ // note: insert SNAIL commands in reverse order
+ _vm->_commandHandler->insertCommand(kCmdPause, -1, 24, nullptr);
+ _vm->_commandHandler->insertCommand(kCmdSeq, -1, _reachStart + _reachCycle * mode, this);
+ if (spr) {
+ _vm->_commandHandler->insertCommand(kCmdWait, -1, -1, this);
+ _vm->_commandHandler->insertCommand(kCmdWalk, -1, spr->_ref, this);
+ }
+ // sequence is not finished,
+ // now it is just at sprite appear (disappear) point
+ resetFun();
}
void Hero::fun() {