From e03ccde6e9d13a56ca1b8e1264df1f936a234f40 Mon Sep 17 00:00:00 2001 From: uruk Date: Thu, 20 Feb 2014 15:02:22 +0100 Subject: AVALANCHE: Implement ShootEmUp::animate() and connected functions. --- engines/avalanche/shootemup.cpp | 36 ++++++++++++++++++++++++++++++------ engines/avalanche/shootemup.h | 5 +++-- 2 files changed, 33 insertions(+), 8 deletions(-) (limited to 'engines/avalanche') diff --git a/engines/avalanche/shootemup.cpp b/engines/avalanche/shootemup.cpp index 2e689b870d..70b26d267f 100644 --- a/engines/avalanche/shootemup.cpp +++ b/engines/avalanche/shootemup.cpp @@ -87,6 +87,7 @@ ShootEmUp::ShootEmUp(AvalancheEngine *vm) { _cp = false; _wasFacing = 0; _score = 0; + _escapeStock = 0; } void ShootEmUp::run() { @@ -143,9 +144,13 @@ bool ShootEmUp::overlap(uint16 a1x, uint16 a1y, uint16 a2x, uint16 a2y, uint16 b return (a2x >= b1x) && (b2x >= a1x) && (a2y >= b1y) && (b2y >= a1y); } -byte ShootEmUp::getStockNumber(byte x) { - warning("STUB: ShootEmUp::getStockNumber()"); - return 0; +byte ShootEmUp::getStockNumber(byte index) { + while (_hasEscaped[index]) { + index++; + if (index == 7) + index = 0; + } + return index; } void ShootEmUp::blankIt() { @@ -211,8 +216,17 @@ void ShootEmUp::defineCameo(int16 xx, int16 yy, byte pp, int16 time) { warning("STUB: ShootEmUp::defineCameo()"); } -void ShootEmUp::showStock(byte x) { - warning("STUB: ShootEmUp::showStock()"); +void ShootEmUp::showStock(byte index) { + if (_escaping && (index == _escapeStock)) { + _vm->_graphics->seuDrawPicture(index * 90 + 20, 30, kStocks + 2); + return; + } + + if (_stockStatus[index] > 5) + return; + + _vm->_graphics->seuDrawPicture(index * 90 + 20, 30, kStocks + _stockStatus[index]); + _stockStatus[index] = 1 - _stockStatus[index]; } void ShootEmUp::drawNumber(int number, int size, int x) { @@ -404,7 +418,17 @@ void ShootEmUp::readKbd() { } void ShootEmUp::animate() { - warning("STUB: ShootEmUp::animate()"); + if (_vm->_rnd->getRandomNumber(9) == 1) + showStock(getStockNumber(_vm->_rnd->getRandomNumber(5))); + for (int i = 0; i < 7; i++) { + if (_stockStatus[i] > 5) { + _stockStatus[i]--; + if (_stockStatus[i] == 8) { + _stockStatus[i] = 0; + showStock(i); + } + } + } } void ShootEmUp::collisionCheck() { diff --git a/engines/avalanche/shootemup.h b/engines/avalanche/shootemup.h index b3561aceae..9162282e65 100644 --- a/engines/avalanche/shootemup.h +++ b/engines/avalanche/shootemup.h @@ -91,16 +91,17 @@ private: byte _timeThisSecond; bool _cp; byte _wasFacing; + byte _escapeStock; bool overlap(uint16 a1x, uint16 a1y, uint16 a2x, uint16 a2y, uint16 b1x, uint16 b1y, uint16 b2x, uint16 b2y); - byte getStockNumber(byte x); + byte getStockNumber(byte index); void blankIt(); void moveThem(); void blank(Common::Rect rect); void plotThem(); void define(int16 x, int16 y, byte p, int8 ix, int8 iy, int16 time, bool isAMissile, bool doWeWipe); void defineCameo(int16 xx, int16 yy, byte pp, int16 time); - void showStock(byte x); + void showStock(byte index); void drawNumber(int number, int size, int x); void showScore(); void showTime(); -- cgit v1.2.3