diff options
author | Eugene Sandulenko | 2016-01-08 00:55:16 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2016-01-08 00:55:16 +0100 |
commit | 51af66371dc71e908dade3563b9792e26f0d9661 (patch) | |
tree | 5c6ee442c7544a479c6a4af03847c161894b396a | |
parent | 87766f675351a5c1d2cf7affe40322fd845633ed (diff) | |
download | scummvm-rg350-51af66371dc71e908dade3563b9792e26f0d9661.tar.gz scummvm-rg350-51af66371dc71e908dade3563b9792e26f0d9661.tar.bz2 scummvm-rg350-51af66371dc71e908dade3563b9792e26f0d9661.zip |
WAGE: Implement WageEngine::encounter()
-rw-r--r-- | engines/wage/util.cpp | 24 | ||||
-rw-r--r-- | engines/wage/wage.cpp | 36 | ||||
-rw-r--r-- | engines/wage/wage.h | 3 |
3 files changed, 62 insertions, 1 deletions
diff --git a/engines/wage/util.cpp b/engines/wage/util.cpp index 8dac0d2935..1390c496ce 100644 --- a/engines/wage/util.cpp +++ b/engines/wage/util.cpp @@ -99,4 +99,28 @@ const char *getIndefiniteArticle(String &word) { return "a "; } +enum { + GENDER_HE = 0, + GENDER_SHE = 1, + GENDER_IT = 2 +}; + +const char *prependGenderSpecificPronoun(int gender) { + if (gender == GENDER_HE) + return "his "; + else if (gender == GENDER_SHE) + return "her "; + else + return "its "; +} + +const char *getGenderSpecificPronoun(int gender, bool capitalize) { + if (gender == GENDER_HE) + return capitalize ? "He" : "he"; + else if (gender == GENDER_SHE) + return capitalize ? "She" : "she"; + else + return capitalize ? "It" : "it"; +} + } // End of namespace Wage diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp index 5841b470b4..d87a7c1413 100644 --- a/engines/wage/wage.cpp +++ b/engines/wage/wage.cpp @@ -360,7 +360,41 @@ void WageEngine::onMove(Designed *what, Designed *from, Designed *to) { } void WageEngine::encounter(Chr *player, Chr *chr) { - warning("STUB WageEngine::encounter()"); + Common::String msg("You encounter "); + if (!chr->_nameProperNoun) + msg += getIndefiniteArticle(chr->_name); + msg += chr->_name; + msg += "."; + appendText(msg); + + if (!chr->_initialComment.empty()) + appendText(chr->_initialComment); + + if (chr->_armor[Chr::HEAD_ARMOR] != NULL) { + msg = chr->getNameWithDefiniteArticle(true); + msg += " is wearing "; + msg += getIndefiniteArticle(chr->_armor[Chr::HEAD_ARMOR]->_name); + msg += "."; + appendText(msg); + } + if (chr->_armor[Chr::BODY_ARMOR] != NULL) { + msg = getGenderSpecificPronoun(chr->_gender, true); + msg += " is protected by "; + msg += prependGenderSpecificPronoun(chr->_gender); + msg += chr->_armor[Chr::BODY_ARMOR]->_name; + msg += "."; + appendText(msg); + } + if (chr->_armor[Chr::SHIELD_ARMOR] != NULL) { + Obj *obj = chr->_armor[Chr::SHIELD_ARMOR]; + msg = getGenderSpecificPronoun(chr->_gender, true); + msg += " carries "; + if (!obj->_namePlural) + msg += getIndefiniteArticle(obj->_name); + msg += obj->_name; + msg += "."; + appendText(msg); + } } void WageEngine::performCombatAction(Chr *npc, Chr *player) { diff --git a/engines/wage/wage.h b/engines/wage/wage.h index 91d940470b..bbf3b991ab 100644 --- a/engines/wage/wage.h +++ b/engines/wage/wage.h @@ -99,6 +99,9 @@ enum { Common::String readPascalString(Common::SeekableReadStream *in); Common::Rect *readRect(Common::SeekableReadStream *in); const char *getIndefiniteArticle(String &word); +const char *prependGenderSpecificPronoun(int gender); +const char *getGenderSpecificPronoun(int gender, bool capitalize); + typedef Common::Array<byte *> Patterns; |