From 8e30167e854a12cf545e7ad56a33e20122fe58c0 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 17 Jan 2016 23:11:19 +0100 Subject: WAGE: Implement handleAcceptCommand() --- engines/wage/combat.cpp | 10 +++++-- engines/wage/script.cpp | 73 +++++++++++++++++++++++++++---------------------- 2 files changed, 48 insertions(+), 35 deletions(-) (limited to 'engines/wage') diff --git a/engines/wage/combat.cpp b/engines/wage/combat.cpp index cdf336f9f4..2d1e02a955 100644 --- a/engines/wage/combat.cpp +++ b/engines/wage/combat.cpp @@ -53,9 +53,13 @@ namespace Wage { Obj *WageEngine::getOffer() { - warning("STUB: WageEngine::getOffer"); - - return NULL; + if (_offer != NULL) { + Chr *owner = _offer->_currentOwner; + if (owner == NULL || owner->_playerCharacter || owner->_currentScene != _world->_player->_currentScene) { + _offer = NULL; + } + } + return _offer; } Chr *WageEngine::getMonster() { diff --git a/engines/wage/script.cpp b/engines/wage/script.cpp index c4567a55df..6ccb7b3696 100644 --- a/engines/wage/script.cpp +++ b/engines/wage/script.cpp @@ -1044,7 +1044,16 @@ void Script::handleRestCommand() { } void Script::handleAcceptCommand() { - warning("STUB: handleAcceptCommand"); + Obj *offer = _callbacks->_offer; + Chr *chr = offer->_currentOwner; + + char buf[512]; + snprintf(buf, 512, "%s%s lays the %s on the ground and departs peacefully.", + chr->getDefiniteArticle(true), chr->_name.c_str(), offer->_name.c_str()); + appendText(buf); + + _world->move(offer, chr->_currentScene); + _world->move(chr, _world->_storageScene); } void Script::handleTakeCommand(const char *target) { @@ -1077,6 +1086,37 @@ void Script::handleAttack(Weapon *weapon) { warning("STUB: handleAttack"); } +const char *Script::getPercentMessage(double percent) { + if (percent < 0.40) { + return "very bad"; + } else if (percent < 0.55) { + return "bad"; + } else if (percent < 0.70) { + return "average"; + } else if (percent < 0.85) { + return "good"; + } else if (percent <= 1.00) { + return "very good"; + } else { + return "enhanced"; + } +} + +void Script::printPlayerCondition(Chr *player) { + double physicalPercent = (double)player->_context._statVariables[PHYS_HIT_CUR] / player->_context._statVariables[PHYS_HIT_BAS]; + double spiritualPercent = (double)player->_context._statVariables[SPIR_HIT_CUR] / player->_context._statVariables[SPIR_HIT_BAS]; + + Common::String msg = "Your physical condition is "; + msg += getPercentMessage(physicalPercent); + msg += "."; + appendText(msg); + + msg = "Your spiritual condition is "; + msg += getPercentMessage(spiritualPercent); + msg += "."; + appendText(msg); +} + enum { BLOCK_START, BLOCK_END, @@ -1282,35 +1322,4 @@ void Script::convertToText() { delete scr; } -const char *Script::getPercentMessage(double percent) { - if (percent < 0.40) { - return "very bad"; - } else if (percent < 0.55) { - return "bad"; - } else if (percent < 0.70) { - return "average"; - } else if (percent < 0.85) { - return "good"; - } else if (percent <= 1.00) { - return "very good"; - } else { - return "enhanced"; - } -} - -void Script::printPlayerCondition(Chr *player) { - double physicalPercent = (double)player->_context._statVariables[PHYS_HIT_CUR] / player->_context._statVariables[PHYS_HIT_BAS]; - double spiritualPercent = (double)player->_context._statVariables[SPIR_HIT_CUR] / player->_context._statVariables[SPIR_HIT_BAS]; - - Common::String msg = "Your physical condition is "; - msg += getPercentMessage(physicalPercent); - msg += "."; - appendText(msg); - - msg = "Your spiritual condition is "; - msg += getPercentMessage(spiritualPercent); - msg += "."; - appendText(msg); -} - } // End of namespace Wage -- cgit v1.2.3