From 60306c40ac8ec733fb7ec45ea61f91de245ab02e Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Sat, 28 Jan 2012 18:03:00 +0100 Subject: GOB: If there's no air left, Oko dies --- engines/gob/minigames/geisha/diving.cpp | 3 +++ engines/gob/minigames/geisha/oko.cpp | 28 ++++++++++++++++++++++------ engines/gob/minigames/geisha/oko.h | 6 +++++- 3 files changed, 30 insertions(+), 7 deletions(-) (limited to 'engines/gob') diff --git a/engines/gob/minigames/geisha/diving.cpp b/engines/gob/minigames/geisha/diving.cpp index bd87be8e7f..0a43f96be9 100644 --- a/engines/gob/minigames/geisha/diving.cpp +++ b/engines/gob/minigames/geisha/diving.cpp @@ -410,6 +410,9 @@ void Diving::updateAirMeter() { if (_airCycle == 0) _airMeter->decrease(); + + if (_airMeter->getValue() == 0) + _oko->die(); } void Diving::updateEvilFish() { diff --git a/engines/gob/minigames/geisha/oko.cpp b/engines/gob/minigames/geisha/oko.cpp index 23f460fdba..c9d4d1f43f 100644 --- a/engines/gob/minigames/geisha/oko.cpp +++ b/engines/gob/minigames/geisha/oko.cpp @@ -29,12 +29,15 @@ namespace Gob { namespace Geisha { enum kOkoAnimation { - kOkoAnimationEnter = 0, - kOkoAnimationSwim = 1, - kOkoAnimationSink = 8, - kOkoAnimationRaise = 7, - kOkoAnimationBreathe = 2, - kOkoAnimationPick = 3 + kOkoAnimationEnter = 0, + kOkoAnimationSwim = 1, + kOkoAnimationSink = 8, + kOkoAnimationRaise = 7, + kOkoAnimationBreathe = 2, + kOkoAnimationPick = 3, + kOkoAnimationDie0 = 17, + kOkoAnimationDie1 = 18, + kOkoAnimationDie2 = 19 }; static const int16 kOkoPositionX = 110; @@ -56,6 +59,11 @@ Oko::~Oko() { void Oko::advance() { bool wasLastFrame = lastFrame(); + if ((_state == kStateDead) && wasLastFrame) { + setPause(true); + return; + } + ANIObject::advance(); switch (_state) { @@ -127,6 +135,14 @@ void Oko::raise() { _level--; } +void Oko::die() { + if (_state != kStateSwim) + return; + + setAnimation(kOkoAnimationDie0 + _level); + _state = kStateDead; +} + Oko::State Oko::getState() const { return _state; } diff --git a/engines/gob/minigames/geisha/oko.h b/engines/gob/minigames/geisha/oko.h index 37824936e3..d5d18c16b3 100644 --- a/engines/gob/minigames/geisha/oko.h +++ b/engines/gob/minigames/geisha/oko.h @@ -41,7 +41,8 @@ public: kStateSink, kStateRaise, kStateBreathe, - kStatePick + kStatePick, + kStateDead }; Oko(const ANIFile &ani, Sound &sound, SoundDesc &breathe); @@ -55,6 +56,9 @@ public: /** Oko should raise a level. */ void raise(); + /** Oko should die. */ + void die(); + State getState() const; bool isBreathing() const; -- cgit v1.2.3