diff options
author | uruk | 2014-06-14 20:13:08 +0200 |
---|---|---|
committer | uruk | 2014-06-14 20:13:08 +0200 |
commit | 58c312d9e9ac5d78e39ee2ddbb40305bba689aec (patch) | |
tree | 4e4fc611e5972490d639a1cb0d4b9262d7276d9d /engines/cge2/hero.cpp | |
parent | 3d63184fee4e8b533763ecf2cae187f76954ac97 (diff) | |
download | scummvm-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.cpp | 23 |
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() { |