diff options
author | uruk | 2014-02-20 15:59:14 +0100 |
---|---|---|
committer | uruk | 2014-02-20 15:59:14 +0100 |
commit | 808a59bdf26ce1bac620c9d6e9a67b815d22696a (patch) | |
tree | ff86bc4c2a7887b214c2f52d7998f0ff3d5e38e2 | |
parent | ad9a8df66dafd2a44a3a9e3869b1ec6948a5dabf (diff) | |
download | scummvm-rg350-808a59bdf26ce1bac620c9d6e9a67b815d22696a.tar.gz scummvm-rg350-808a59bdf26ce1bac620c9d6e9a67b815d22696a.tar.bz2 scummvm-rg350-808a59bdf26ce1bac620c9d6e9a67b815d22696a.zip |
AVALANCHE: Implement ShootEmUp::collisionCheck().
-rw-r--r-- | engines/avalanche/shootemup.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/engines/avalanche/shootemup.cpp b/engines/avalanche/shootemup.cpp index 4224b7f2e7..00e74ccd3b 100644 --- a/engines/avalanche/shootemup.cpp +++ b/engines/avalanche/shootemup.cpp @@ -433,7 +433,41 @@ void ShootEmUp::animate() { } void ShootEmUp::collisionCheck() { - warning("STUB: ShootEmUp::collisionCheck()"); + for (int i = 0; i < 99; i++) { + if ((_sprites[i]._x != kFlag) && (_sprites[i]._missile) && + (_sprites[i]._y < 60) && (_sprites[i]._timeout == 1)) { + int distFromSide = (_sprites[i]._x - 20) % 90; + int thisStock = (_sprites[i]._x - 20) / 90; + if ((!_hasEscaped[thisStock]) && (distFromSide > 17) && (distFromSide < 34)) { + _vm->_sound->playNote(999, 3); + _vm->_system->delayMillis(3); + define(_sprites[i]._x + 20, _sprites[i]._y, 26 + _vm->_rnd->getRandomNumber(1), 3, 1, 12, false, true); // Well done! + define(thisStock * 90 + 20, 30, 31, 0, 0, 7, false, false); // Face of man + defineCameo(thisStock * 90 + 20 + 10, 35, 40, 7); // Splat! + define(thisStock * 90 + 20 + 20, 50, 34 + _vm->_rnd->getRandomNumber(4), 0, 2, 9, false, true); // Oof! + _stockStatus[thisStock] = 17; + gain(3); // Score for hitting a face. + + if (_escaping && (_escapeStock = thisStock)) { // Hit the escaper. + _vm->_sound->playNote(1777, 1); + _vm->_system->delayMillis(1); + gain(5); // Bonus for hitting escaper. + _escaping = false; + newEscape(); + } + } else { + define(_sprites[i]._x, _sprites[i]._y, 83 + _vm->_rnd->getRandomNumber(2), 2, 2, 17, false, true); // Missed! + if ((!_hasEscaped[thisStock]) && (distFromSide > 3) && (distFromSide < 43)) { + define(thisStock * 90 + 20, 30, 30, 0, 0, 7, false, false); // Face of man + if (distFromSide > 35) + defineCameo(_sprites[i]._x - 27, 35, 40, 7); // Splat! + else + defineCameo(_sprites[i]._x - 7, 35, 40, 7); + _stockStatus[thisStock] = 17; + } + } + } + } } void ShootEmUp::turnAround(byte who, bool randomX) { |