XEEN: RU Further sharpening

Added 'Born' gender form and plural form for food
This commit is contained in:
Maxim Kovalenko 2021-07-19 18:55:55 +03:00 committed by Eugene Sandulenko
parent d3624575a7
commit 325eb338fe
13 changed files with 258 additions and 36 deletions

View File

@ -179,9 +179,15 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
file.syncStrings(STAT_NAMES(), 16);
delete[] _statNames;
_statNames = NULL;
file.syncStrings(CONSUMABLE_NAMES(), 6);
file.syncStrings(CONSUMABLE_NAMES(), 4);
delete[] _consumableNames;
_consumableNames = NULL;
file.syncStrings(CONSUMABLE_GOLD_FORMS(), 1);
delete[] _consumableGoldForms;
_consumableGoldForms = NULL;
file.syncStrings(CONSUMABLE_GEM_FORMS(), 1);
delete[] _consumableGemForms;
_consumableGemForms = NULL;
file.syncStrings(WHERE_NAMES(), 2);
delete[] _whereNames;
_whereNames = NULL;
@ -233,6 +239,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
file.syncStrings(RATING_TEXT(), 24);
delete[] _ratingText;
_ratingText = NULL;
file.syncStrings(BORN(), 2);
delete[] _born;
_born = NULL;
file.syncString(AGE_TEXT());
file.syncString(LEVEL_TEXT());
file.syncString(RESISTENCES_TEXT());
@ -240,6 +249,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
file.syncString(EXPERIENCE_TEXT());
file.syncString(ELIGIBLE());
file.syncString(IN_PARTY_IN_BANK());
file.syncStrings(FOOD_ON_HAND(), 3);
delete[] _onHand;
_onHand = NULL;
file.syncString(FOOD_TEXT());
file.syncString(EXCHANGE_WITH_WHOM());
file.syncString(QUICK_REF_LINE());
@ -408,6 +420,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
file.syncString(BACKPACKS_FULL_PRESS_KEY());
file.syncString(HIT_A_KEY());
file.syncString(GIVE_TREASURE_FORMATTING());
file.syncStrings(FOUND(), 2);
delete[] _found;
_found = NULL;
file.syncString(X_FOUND_Y());
file.syncString(ON_WHO());
file.syncString(WHICH_ELEMENT1());
@ -433,7 +448,13 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
file.syncString(WARZONE_LEVEL());
file.syncString(WARZONE_HOW_MANY());
file.syncString(PICKS_THE_LOCK());
file.syncStrings(PICK_FORM(), 2);
delete[] _pickForm;
_pickForm = NULL;
file.syncString(UNABLE_TO_PICK_LOCK());
file.syncStrings(UNABLE_TO_PICK_FORM(), 2);
delete[] _unableToPickForm;
_unableToPickForm = NULL;
file.syncString(CONTROL_PANEL_TEXT());
file.syncString(CONTROL_PANEL_BUTTONS());
file.syncString(ON());

View File

@ -124,6 +124,8 @@ protected:
const char **_statNames = NULL;
const char **_whereNames = NULL;
const char **_consumableNames = NULL;
const char **_consumableGoldForms = NULL;
const char **_consumableGemForms = NULL;
const char **_weekDayStrings = NULL;
const char **_ratingText = NULL;
const char **_bonusNames = NULL;
@ -144,11 +146,16 @@ protected:
const char **_removeDelete = NULL;
const char **_spellCastComponents = NULL;
const char **_monsterSpecialAttacks = NULL;
const char **_pickForm = NULL;
const char **_unableToPickForm = NULL;
const char **_quickFightOptions = NULL;
const char **_goober = NULL;
const char **_worldEndText = NULL;
const char **_days = NULL;
const char **_sellXForYGoldEndings = NULL;
const char **_found = NULL;
const char **_born = NULL;
const char **_onHand = NULL;
public:
virtual const char *CLOUDS_CREDITS() = 0;
@ -840,6 +847,8 @@ public:
virtual const char *NO_X_IN_THE_Y() = 0;
virtual const char **STAT_NAMES() = 0;
virtual const char **CONSUMABLE_NAMES() = 0;
virtual const char **CONSUMABLE_GOLD_FORMS() = 0;
virtual const char **CONSUMABLE_GEM_FORMS() = 0;
virtual const char **WHERE_NAMES() = 0;
virtual const char *AMOUNT() = 0;
virtual const char *FOOD_PACKS_FULL() = 0;
@ -965,6 +974,7 @@ public:
virtual const char *CURRENT_MAXIMUM_RATING_TEXT() = 0;
virtual const char *CURRENT_MAXIMUM_TEXT() = 0;
virtual const char **RATING_TEXT() = 0;
virtual const char **BORN() = 0;
virtual const char *AGE_TEXT() = 0;
virtual const char *LEVEL_TEXT() = 0;
virtual const char *RESISTENCES_TEXT() = 0;
@ -972,6 +982,7 @@ public:
virtual const char *EXPERIENCE_TEXT() = 0;
virtual const char *ELIGIBLE() = 0;
virtual const char *IN_PARTY_IN_BANK() = 0;
virtual const char **FOOD_ON_HAND() = 0;
virtual const char *FOOD_TEXT() = 0;
virtual const char *EXCHANGE_WITH_WHOM() = 0;
virtual const char *QUICK_REF_LINE() = 0;
@ -1154,6 +1165,7 @@ public:
virtual const char *BACKPACKS_FULL_PRESS_KEY() = 0;
virtual const char *HIT_A_KEY() = 0;
virtual const char *GIVE_TREASURE_FORMATTING() = 0;
virtual const char **FOUND() = 0;
virtual const char *X_FOUND_Y() = 0;
virtual const char *ON_WHO() = 0;
virtual const char *WHICH_ELEMENT1() = 0;
@ -1185,7 +1197,9 @@ public:
virtual const char *WARZONE_LEVEL() = 0;
virtual const char *WARZONE_HOW_MANY() = 0;
virtual const char *PICKS_THE_LOCK() = 0;
virtual const char **PICK_FORM() = 0;
virtual const char *UNABLE_TO_PICK_LOCK() = 0;
virtual const char **UNABLE_TO_PICK_FORM() = 0;
virtual const char *CONTROL_PANEL_TEXT() = 0;
virtual const char *CONTROL_PANEL_BUTTONS() = 0;
virtual const char *ON() = 0;

View File

@ -561,10 +561,22 @@ public:
const char **CONSUMABLE_NAMES() {
delete[] _consumableNames;
_consumableNames = new const char *[6] { "Gold", "Gems", "Food", "Condition", "", "" };
_consumableNames = new const char *[4] { "Gold", "Gems", "Food", "Condition" };
return _consumableNames;
}
const char **CONSUMABLE_GOLD_FORMS() {
delete[] _consumableGoldForms;
_consumableGoldForms = new const char *[1] { "" };
return _consumableGoldForms;
}
const char **CONSUMABLE_GEM_FORMS() {
delete[] _consumableGemForms;
_consumableGemForms = new const char *[1] { "" };
return _consumableGemForms;
}
const char **WHERE_NAMES() {
delete[] _whereNames;
_whereNames = new const char *[2] { "Party", "Bank" };
@ -794,13 +806,19 @@ public:
return _ratingText;
}
const char **BORN() {
delete[] _born;
_born = new const char *[2] { "Born", "" };
return _born;
}
const char *AGE_TEXT() {
return "\x2\x3"
"c%s\n"
"Current / Natural\n"
"\x3r\t057%u\x3l\t061/ %u\n"
"\x3"
"cBorn: %u / %u\x1";
"c%s: %u / %u\x1";
}
const char *LEVEL_TEXT() {
@ -845,10 +863,16 @@ public:
"%u in bank\x1\x3l";
}
const char **FOOD_ON_HAND() {
delete[] _onHand;
_onHand = new const char *[3] { "on hand", "", "" };
return _onHand;
}
const char *FOOD_TEXT() {
return "\x2\x3"
"cParty %s\n"
"%u on hand\n"
"%u %s\n"
"Enough for %u day%s\x3l";
}
@ -1617,9 +1641,15 @@ public:
"077";
}
const char **FOUND() {
delete[] _found;
_found = new const char *[2] { "found", "" };
return _found;
}
const char *X_FOUND_Y() {
return "\v060\t000\x3"
"c%s found: %s";
"c%s %s: %s";
}
const char *ON_WHO() {
@ -1748,12 +1778,24 @@ public:
const char *PICKS_THE_LOCK() {
return "\x3"
"c\v010%s picks the lock!\nPress any key.";
"c\v010%s %s the lock!\nPress any key.";
}
const char **PICK_FORM() {
delete[] _pickForm;
_pickForm = new const char *[2] { "picks", "" };
return _pickForm;
}
const char *UNABLE_TO_PICK_LOCK() {
return "\x3"
"c\v010%s was unable to pick the lock!\nPress any key.";
"c\v010%s was %s the lock!\nPress any key.";
}
const char **UNABLE_TO_PICK_FORM() {
delete[] _unableToPickForm;
_unableToPickForm = new const char *[2] { "unable to pick", "" };
return _unableToPickForm;
}
const char *CONTROL_PANEL_TEXT() {

View File

@ -628,10 +628,22 @@ public:
const char **CONSUMABLE_NAMES() {
delete[] _consumableNames;
_consumableNames = new const char *[6] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5", "\x87\xAE\xAB\xAE\xE2\xA0", "\x80\xAB\xAC\xA0\xA7\xAE\xA2" }; // "Золото", "Алмазы", "Пища", "Состояние", "Золота", "Алмазов"
_consumableNames = new const char *[4] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" }; // "Золото", "Алмазы", "Пища", "Состояние"
return _consumableNames;
}
const char **CONSUMABLE_GOLD_FORMS() {
delete[] _consumableGoldForms;
_consumableGoldForms = new const char *[1] { "\x87\xAE\xAB\xAE\xE2\xA0" }; // "Золота"
return _consumableGoldForms;
}
const char **CONSUMABLE_GEM_FORMS() {
delete[] _consumableGemForms;
_consumableGemForms = new const char *[1] { "\x80\xAB\xAC\xA0\xA7\xAE\xA2" }; // "Алмазов"
return _consumableGemForms;
}
const char **WHERE_NAMES() {
delete[] _whereNames;
_whereNames = new const char *[2] { "\xE3 \xAE\xE2\xE0\xEF\xA4\xA0", "\xA2 \xA1\xA0\xAD\xAA\xA5" }; // "у отряда", "в банке"
@ -869,11 +881,17 @@ public:
return _ratingText;
}
const char **BORN() {
delete[] _born;
_born = new const char *[2] { "\x90\xAE\xA4\xA8\xAB\xE1\xEF", "\x90\xAE\xA4\xA8\xAB\xA0\xE1\xEC" }; // "Родился", "Родилась"
return _born;
}
const char *AGE_TEXT() {
return "\x2\x3""c%s\n" // "\x2\x3""c%s\n"
"\x92\xA5\xAA\xE3\xE9\xA8\xA9 / \x8D\xA0\xE1\xE2\xAE\xEF\xE9\xA8\xA9\n" // "Текущий / Настоящий\n"
"\x3""r\t057%u\x3""l\t061/ %u\n" // "\x3""r\t057%u\x3""l\t061/ %u\n"
"\x3""c\x90\xAE\xA4\xA8\xAB%s: %u / %u\x1"; // "\x3""cРодил%s: %u / %u\x1";
"\x3""c%s: %u / %u\x1"; // "\x3""cРодил%s: %u / %u\x1";
}
const char *LEVEL_TEXT() {
@ -913,9 +931,15 @@ public:
"%lu \xA2 \xA1\xA0\xAD\xAA\xA5\x1\x3""l"; // "%lu в банке\x1\x3""l";
}
const char **FOOD_ON_HAND() {
delete[] _onHand;
_onHand = new const char *[3] { "\xAF\xAE\xE0\xE6\xA8\xEF", "\xAF\xAE\xE0\xE6\xA8\xA8", "\xAF\xAE\xE0\xE6\xA8\xA9" }; // "порция", "порции", "порций"
return _onHand;
}
const char *FOOD_TEXT() {
return "\x2\x3""c%s\n" // "\x2\x3""c%s\n"
"%u \xAF\xAE\xE0\xE6\xA8%c\n" // "%u порци%c\n"
"%u %s\n" // "%u %s\n"
"\x95\xA2\xA0\xE2\xA8\xE2 \xAD\xA0 %u %s\x1\x3""l"; // "Хватит на %u %s\x1\x3""l";
}
@ -1654,8 +1678,14 @@ public:
"077";
}
const char **FOUND() {
delete[] _found;
_found = new const char *[2] { "\xAD\xA0\xE8\xF1\xAB", "\xAD\xA0\xE8\xAB\xA0" }; // "нашёл", "нашла"
return _found;
}
const char *X_FOUND_Y() {
return "\v060\t000\x3""c%s \xAD\xA0\xE8%s: %s"; // "\v060\t000\x3""c%s наш%s: %s"
return "\v060\t000\x3""c%s %s: %s"; // "\v060\t000\x3""c%s %s: %s"
}
const char *ON_WHO() {
@ -1771,11 +1801,23 @@ public:
}
const char *PICKS_THE_LOCK() {
return "\x3""c\v010%s \xA2\xA7\xAB\xAE\xAC\xA0\xAB%s \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s взломал%s замок!\nНажмите клавишу."
return "\x3""c\v010%s %s \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s %s замок!\nНажмите клавишу."
}
const char **PICK_FORM() {
delete[] _pickForm;
_pickForm = new const char *[2] { "\xA2\xA7\xAB\xAE\xAC\xA0\xAB", "\xA2\xA7\xAB\xAE\xAC\xA0\xAB\xA0" }; // "взломал", "взломала"
return _pickForm;
}
const char *UNABLE_TO_PICK_LOCK() {
return "\x3""c\v010%s \xAD\xA5 \xE1\xAC\xAE\xA3%s \xA2\xA7\xAB\xAE\xAC\xA0\xE2\xEC \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s не смог%s взломать замок!\nНажмите клавишу."
return "\x3""c\v010%s %s \xA2\xA7\xAB\xAE\xAC\xA0\xE2\xEC \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s %s взломать замок!\nНажмите клавишу."
}
const char **UNABLE_TO_PICK_FORM() {
delete[] _unableToPickForm;
_unableToPickForm = new const char *[2] { "\xAD\xA5 \xE1\xAC\xAE\xA3", "\xAD\xA5 \xE1\xAC\xAE\xA3\xAB\xA0" }; // "не смог", "не смогла"
return _unableToPickForm;
}
const char *CONTROL_PANEL_TEXT() {

Binary file not shown.

View File

@ -278,7 +278,7 @@ void CharacterInfo::addButtons() {
addPartyButtons(_vm);
}
Common::String CharacterInfo::getDaysPlurals(int val) {
const char* CharacterInfo::getDaysPlurals(int val) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
int i = val % 100;
if (i < 5 || i > 20)
@ -294,7 +294,6 @@ Common::String CharacterInfo::getDaysPlurals(int val) {
} else {
return Res.DAYS[val == 1 ? 0 : 1];
}
}
Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
@ -330,7 +329,7 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
c.statColor(c.getCurrentLevel(), c._level._permanent), c.getCurrentLevel(),
c.getNumSkills(),
foodVal,
getDaysPlurals(foodVal).c_str(),
getDaysPlurals(foodVal),
c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
c.getNumAwards(),
@ -351,6 +350,35 @@ void CharacterInfo::showCursor(bool flag) {
}
}
const char *CharacterInfo::getBornForm(const Character &c) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
switch (c._sex) {
case MALE:
return Res.BORN[0];
case FEMALE:
return Res.BORN[1];
}
}
return Res.BORN[0];
}
const char *CharacterInfo::getFoodOnHandPlurals(int food) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
int i = food % 100;
if (i < 5 || i > 20)
switch (food % 10) {
case 1:
return Res.FOOD_ON_HAND[0];
case 2:
case 3:
case 4:
return Res.FOOD_ON_HAND[1];
}
return Res.FOOD_ON_HAND[2];
}
return Res.FOOD_ON_HAND[0];
}
bool CharacterInfo::expandStat(int attrib, const Character &c) {
const int STAT_POS[2][20] = {
{
@ -394,7 +422,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
stat1 = c.getAge(false);
stat2 = c.getAge(true);
msg = Common::String::format(Res.AGE_TEXT, Res.STAT_NAMES[attrib],
stat1, stat2, c._birthDay, c._birthYear);
stat1, stat2, getBornForm(c), c._birthDay, c._birthYear);
break;
case 8: {
@ -520,7 +548,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
// Food
int food = (party._food / party._activeParty.size()) / 3;
msg = Common::String::format(Res.FOOD_TEXT, Res.CONSUMABLE_NAMES[2],
party._food, food, food != 1 ? "s" : "");
party._food, getFoodOnHandPlurals(food), food, getDaysPlurals(food));
break;
}

View File

@ -52,7 +52,7 @@ private:
/**
* Get plural day/days form
*/
Common::String getDaysPlurals(int val);
const char* getDaysPlurals(int val);
/**
* Return a string containing the details of the character
@ -64,6 +64,16 @@ private:
*/
void showCursor(bool flag);
/**
* Get gender form 'born'
*/
const char *getBornForm(const Character &c);
/**
* Get plural form 'on hand' for food
*/
const char *getFoodOnHandPlurals(int food);
bool expandStat(int attrib, const Character &c);
public:
static void show(XeenEngine *vm, int charIndex);

View File

@ -752,7 +752,7 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
return (mode == ITEMMODE_CHAR_INFO) ? 0 : result;
}
Common::String ItemsDialog::getGoldPlurals(int cost) {
const char* ItemsDialog::getGoldPlurals(int cost) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
return Res.GOLDS[cost % 10 == 1 ? 0 : 1];
return Res.GOLDS[0];
@ -855,7 +855,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
int cost = calcItemCost(&c, itemIndex, mode, 0, category);
Common::String desc = c._items[category].getFullDescription(itemIndex);
if (Confirm::show(_vm, Common::String::format(Res.BUY_X_FOR_Y_GOLD,
desc.c_str(), cost, getGoldPlurals(cost).c_str()))) {
desc.c_str(), cost, getGoldPlurals(cost)))) {
if (party.subtract(CONS_GOLD, cost, WHERE_PARTY, WT_FREEZE_WAIT)) {
if (ccNum) {
sound.stopSound();
@ -895,7 +895,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
int cost = calcItemCost(&c, itemIndex, mode, c._skills[MERCHANT], category);
Common::String desc = c._items[category].getFullDescription(itemIndex);
Common::String msg = Common::String::format(Res.SELL_X_FOR_Y_GOLD,
desc.c_str(), cost, getGoldPlurals(cost).c_str());
desc.c_str(), cost, getGoldPlurals(cost));
if (Confirm::show(_vm, msg)) {
// Remove the sold item and add gold to the party's total

View File

@ -67,7 +67,7 @@ private:
/**
* Get plural gold form
*/
Common::String getGoldPlurals(int val);
const char* getGoldPlurals(int val);
int doItemOptions(Character &c, int actionIndex, int itemIndex,
ItemCategory category, ItemsMode mode);

View File

@ -20,6 +20,7 @@
*
*/
#include "common/config-manager.h"
#include "common/scummsys.h"
#include "common/algorithm.h"
#include "xeen/party.h"
@ -661,19 +662,18 @@ int Party::subtract(ConsumableType consumableId, uint amount, PartyBank whereId,
return true;
}
int Party::getConsumableForm(ConsumableType consumableId) {
const char* Party::getConsumableForm(ConsumableType consumableId) {
switch (consumableId) {
case CONS_GOLD: return 4;
case CONS_GEMS: return 5;
case CONS_GOLD: return Res.CONSUMABLE_GOLD_FORMS[0];
case CONS_GEMS: return Res.CONSUMABLE_GEM_FORMS[0];
}
return consumableId;
return Res.CONSUMABLE_NAMES[consumableId];
}
void Party::notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait) {
int _tmpConsumableId = getConsumableForm(consumableId);
Common::String msg = Common::String::format(
mode ? Res.NO_X_IN_THE_Y : Res.NOT_ENOUGH_X_IN_THE_Y,
Res.CONSUMABLE_NAMES[_tmpConsumableId], Res.WHERE_NAMES[whereId]);
getConsumableForm(consumableId), Res.WHERE_NAMES[whereId]);
ErrorScroll::show(_vm, msg, wait);
}
@ -821,6 +821,18 @@ bool Party::arePacksFull() const {
return total == (_activeParty.size() * NUM_ITEM_CATEGORIES);
}
const char* Party::getFoundForm(const Character& c) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
switch (c._sex) {
case MALE:
return Res.FOUND[0];
case FEMALE:
return Res.FOUND[1];
}
}
return Res.FOUND[0];
}
void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int itemIndex) {
EventsManager &events = *_vm->_events;
Sound &sound = *_vm->_sound;
@ -844,9 +856,9 @@ void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int ite
if (index >= (_vm->getGameID() == GType_Swords ? 88 : 82)) {
// Quest item, give an extra '*' prefix
Common::String format = Common::String::format("\f04 * \fd%s", itemName);
w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), format.c_str()));
w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), getFoundForm(c), format.c_str()));
} else {
w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), itemName));
w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), getFoundForm(c), itemName));
}
w.update();
@ -1471,6 +1483,30 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
return false;
}
const char* Party::getPickLockForm(const Character &c) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
switch (c._sex) {
case MALE:
return Res.PICK_FORM[0];
case FEMALE:
return Res.PICK_FORM[1];
}
}
return Res.PICK_FORM[0];
}
const char* Party::getUnablePickLockForm(const Character &c) {
if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
switch (c._sex) {
case MALE:
return Res.UNABLE_TO_PICK_FORM[0];
case FEMALE:
return Res.UNABLE_TO_PICK_FORM[1];
}
}
return Res.UNABLE_TO_PICK_FORM[0];
}
bool Party::giveExt(int mode1, uint val1, int mode2, uint val2, int mode3, uint val3, int charId) {
Combat &combat = *g_vm->_combat;
FileManager &files = *g_vm->_files;
@ -1509,14 +1545,14 @@ bool Party::giveExt(int mode1, uint val1, int mode2, uint val2, int mode3, uint
sound.playFX(10);
intf.draw3d(true, false);
Common::String msg = Common::String::format(Res.PICKS_THE_LOCK, c._name.c_str());
Common::String msg = Common::String::format(Res.PICKS_THE_LOCK, c._name.c_str(), getPickLockForm(c));
ErrorScroll::show(g_vm, msg, WT_NONFREEZED_WAIT);
} else {
sound.playFX(21);
obj._frame = 0;
scripts._animCounter = 0;
Common::String msg = Common::String::format(Res.UNABLE_TO_PICK_LOCK, c._name.c_str());
Common::String msg = Common::String::format(Res.UNABLE_TO_PICK_LOCK, c._name.c_str(), getUnablePickLockForm(c));
ErrorScroll::show(g_vm, msg, WT_NONFREEZED_WAIT);
scripts._animCounter = 255;

View File

@ -157,6 +157,11 @@ private:
static XeenEngine *_vm;
Character _itemsCharacter;
/**
* Get gender form 'found'
*/
const char* getFoundForm(const Character &c);
/**
* Give a treasure item to the given character's inventory
*/
@ -269,7 +274,7 @@ public:
int subtract(ConsumableType consumableId, uint amount, PartyBank whereId, MessageWaitType wait = WT_FREEZE_WAIT);
int getConsumableForm(ConsumableType consumableId);
const char* getConsumableForm(ConsumableType consumableId);
void notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait);
@ -297,6 +302,16 @@ public:
*/
bool giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int charIdx);
/*
* Get gender form 'picks'
*/
const char* getPickLockForm(const Character &c);
/*
* Get gender form 'unable to pick'
*/
const char* getUnablePickLockForm(const Character &c);
/**
* Gives up to three different item/amounts to various character and/or party properties
*/

View File

@ -177,7 +177,9 @@ void Resources::loadData() {
file.syncString(NOT_ENOUGH_X_IN_THE_Y);
file.syncString(NO_X_IN_THE_Y);
file.syncStrings(STAT_NAMES, 16);
file.syncStrings(CONSUMABLE_NAMES, 6);
file.syncStrings(CONSUMABLE_NAMES, 4);
file.syncStrings(CONSUMABLE_GOLD_FORMS, 1);
file.syncStrings(CONSUMABLE_GEM_FORMS, 1);
file.syncStrings(WHERE_NAMES, 2);
file.syncString(AMOUNT);
file.syncString(FOOD_PACKS_FULL);
@ -223,6 +225,7 @@ void Resources::loadData() {
file.syncString(CURRENT_MAXIMUM_RATING_TEXT);
file.syncString(CURRENT_MAXIMUM_TEXT);
file.syncStrings(RATING_TEXT, 24);
file.syncStrings(BORN, 2);
file.syncString(AGE_TEXT);
file.syncString(LEVEL_TEXT);
file.syncString(RESISTENCES_TEXT);
@ -230,6 +233,7 @@ void Resources::loadData() {
file.syncString(EXPERIENCE_TEXT);
file.syncString(ELIGIBLE);
file.syncString(IN_PARTY_IN_BANK);
file.syncStrings(FOOD_ON_HAND, 3);
file.syncString(FOOD_TEXT);
file.syncString(EXCHANGE_WITH_WHOM);
file.syncString(QUICK_REF_LINE);
@ -364,6 +368,7 @@ void Resources::loadData() {
file.syncString(BACKPACKS_FULL_PRESS_KEY);
file.syncString(HIT_A_KEY);
file.syncString(GIVE_TREASURE_FORMATTING);
file.syncStrings(FOUND, 2);
file.syncString(X_FOUND_Y);
file.syncString(ON_WHO);
file.syncString(WHICH_ELEMENT1);
@ -387,7 +392,9 @@ void Resources::loadData() {
file.syncString(WARZONE_LEVEL);
file.syncString(WARZONE_HOW_MANY);
file.syncString(PICKS_THE_LOCK);
file.syncStrings(PICK_FORM, 2);
file.syncString(UNABLE_TO_PICK_LOCK);
file.syncStrings(UNABLE_TO_PICK_FORM, 2);
file.syncString(CONTROL_PANEL_TEXT);
file.syncString(CONTROL_PANEL_BUTTONS);
file.syncString(ON);

View File

@ -230,7 +230,9 @@ public:
const char *NOT_ENOUGH_X_IN_THE_Y;
const char *NO_X_IN_THE_Y;
const char *STAT_NAMES[16];
const char *CONSUMABLE_NAMES[6];
const char *CONSUMABLE_NAMES[4];
const char *CONSUMABLE_GOLD_FORMS[1];
const char *CONSUMABLE_GEM_FORMS[1];
const char *WHERE_NAMES[2];
const char *AMOUNT;
const char *FOOD_PACKS_FULL;
@ -276,6 +278,7 @@ public:
const char *CURRENT_MAXIMUM_RATING_TEXT;
const char *CURRENT_MAXIMUM_TEXT;
const char *RATING_TEXT[24];
const char *BORN[2];
const char *AGE_TEXT;
const char *LEVEL_TEXT;
const char *RESISTENCES_TEXT;
@ -283,6 +286,7 @@ public:
const char *EXPERIENCE_TEXT;
const char *ELIGIBLE;
const char *IN_PARTY_IN_BANK;
const char *FOOD_ON_HAND[3];
const char *FOOD_TEXT;
const char *EXCHANGE_WITH_WHOM;
const char *QUICK_REF_LINE;
@ -417,6 +421,7 @@ public:
const char *BACKPACKS_FULL_PRESS_KEY;
const char *HIT_A_KEY;
const char *GIVE_TREASURE_FORMATTING;
const char *FOUND[2];
const char *X_FOUND_Y;
const char *ON_WHO;
const char *WHICH_ELEMENT1;
@ -440,7 +445,9 @@ public:
const char *WARZONE_LEVEL;
const char *WARZONE_HOW_MANY;
const char *PICKS_THE_LOCK;
const char *PICK_FORM[2];
const char *UNABLE_TO_PICK_LOCK;
const char *UNABLE_TO_PICK_FORM[2];
const char *CONTROL_PANEL_TEXT;
const char *CONTROL_PANEL_BUTTONS;
const char *ON;