aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/shootemup.cpp
diff options
context:
space:
mode:
authoruruk2014-02-20 15:59:14 +0100
committeruruk2014-02-20 15:59:14 +0100
commit808a59bdf26ce1bac620c9d6e9a67b815d22696a (patch)
treeff86bc4c2a7887b214c2f52d7998f0ff3d5e38e2 /engines/avalanche/shootemup.cpp
parentad9a8df66dafd2a44a3a9e3869b1ec6948a5dabf (diff)
downloadscummvm-rg350-808a59bdf26ce1bac620c9d6e9a67b815d22696a.tar.gz
scummvm-rg350-808a59bdf26ce1bac620c9d6e9a67b815d22696a.tar.bz2
scummvm-rg350-808a59bdf26ce1bac620c9d6e9a67b815d22696a.zip
AVALANCHE: Implement ShootEmUp::collisionCheck().
Diffstat (limited to 'engines/avalanche/shootemup.cpp')
-rw-r--r--engines/avalanche/shootemup.cpp36
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) {