mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-06-08 09:31:58 +00:00
Merge branch 'master' of /home/fg/fgone/Aquaria_fg_clean
This commit is contained in:
commit
e09a4c13ef
27 changed files with 598 additions and 94 deletions
|
@ -168,6 +168,15 @@ IngredientType Continuity::getIngredientTypeFromName(const std::string &name) co
|
||||||
return IT_NONE;
|
return IT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Continuity::getIngredientDisplayName(const std::string& name) const
|
||||||
|
{
|
||||||
|
IngredientNameMap::const_iterator it = ingredientDisplayNames.find(name);
|
||||||
|
if (it != ingredientDisplayNames.end())
|
||||||
|
return it->second;
|
||||||
|
|
||||||
|
return splitCamelCase(name);
|
||||||
|
}
|
||||||
|
|
||||||
IngredientData *Continuity::getIngredientHeldByIndex(int idx) const
|
IngredientData *Continuity::getIngredientHeldByIndex(int idx) const
|
||||||
{
|
{
|
||||||
if (idx < 0 || idx >= ingredients.size()) return 0;
|
if (idx < 0 || idx >= ingredients.size()) return 0;
|
||||||
|
@ -191,6 +200,7 @@ void Recipe::clear()
|
||||||
types.clear();
|
types.clear();
|
||||||
names.clear();
|
names.clear();
|
||||||
result = "";
|
result = "";
|
||||||
|
resultDisplayName = "";
|
||||||
known = false;
|
known = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,13 +867,6 @@ std::string Continuity::getIngredientAffectsString(IngredientData *data)
|
||||||
return getAllIEString(data);
|
return getAllIEString(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Continuity::getIngredientDescription(IngredientEffectType type)
|
|
||||||
{
|
|
||||||
int t = (int)type;
|
|
||||||
if (t < 0 || t >= ingredientDescriptions.size()) return "";
|
|
||||||
return ingredientDescriptions[t].text;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Continuity::loadTreasureData()
|
void Continuity::loadTreasureData()
|
||||||
{
|
{
|
||||||
treasureData.clear();
|
treasureData.clear();
|
||||||
|
@ -900,20 +903,6 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
{
|
{
|
||||||
std::string line, name, gfx, type, effects;
|
std::string line, name, gfx, type, effects;
|
||||||
|
|
||||||
ingredientDescriptions.clear();
|
|
||||||
|
|
||||||
/*
|
|
||||||
int num;
|
|
||||||
InStream in2("data/ingredientdescriptions.txt");
|
|
||||||
while (std::getline(in2, line))
|
|
||||||
{
|
|
||||||
IngredientDescription desc;
|
|
||||||
std::istringstream inLine(line);
|
|
||||||
inLine >> num >> desc.text;
|
|
||||||
ingredientDescriptions.push_back(desc);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
clearIngredientData();
|
clearIngredientData();
|
||||||
recipes.clear();
|
recipes.clear();
|
||||||
|
|
||||||
|
@ -1060,7 +1049,6 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
Recipe r;
|
Recipe r;
|
||||||
while (in >> name)
|
while (in >> name)
|
||||||
{
|
{
|
||||||
r.result = name;
|
|
||||||
if (name == "+")
|
if (name == "+")
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
@ -1073,10 +1061,13 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (quitNext)
|
if (quitNext)
|
||||||
|
{
|
||||||
r.result = name;
|
r.result = name;
|
||||||
|
r.resultDisplayName = getIngredientDisplayName(name);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IngredientType it = dsq->continuity.getIngredientTypeFromName(name);
|
IngredientType it = getIngredientTypeFromName(name);
|
||||||
if (it == IT_NONE)
|
if (it == IT_NONE)
|
||||||
{
|
{
|
||||||
r.addName(name);
|
r.addName(name);
|
||||||
|
@ -1101,6 +1092,24 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
in.close();
|
in.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Continuity::loadIngredientDisplayNames(const std::string& file)
|
||||||
|
{
|
||||||
|
InStream in(file);
|
||||||
|
if (!in)
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::string line, name, text;
|
||||||
|
while (std::getline(in, line))
|
||||||
|
{
|
||||||
|
size_t pos = line.find(' ');
|
||||||
|
if (pos == std::string::npos)
|
||||||
|
continue;
|
||||||
|
name = line.substr(0, pos);
|
||||||
|
text = line.substr(pos + 1);
|
||||||
|
ingredientDisplayNames[name] = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Continuity::learnFormUpgrade(FormUpgradeType form)
|
void Continuity::learnFormUpgrade(FormUpgradeType form)
|
||||||
{
|
{
|
||||||
formUpgrades[form] = true;
|
formUpgrades[form] = true;
|
||||||
|
@ -3231,12 +3240,23 @@ void Continuity::reset()
|
||||||
|
|
||||||
//load ingredients
|
//load ingredients
|
||||||
|
|
||||||
|
ingredientDisplayNames.clear();
|
||||||
|
|
||||||
|
loadIngredientDisplayNames("data/ingredientnames.txt");
|
||||||
|
|
||||||
|
std::string fname = dsq->user.localisePath("data/ingredientnames.txt");
|
||||||
|
loadIngredientDisplayNames(fname);
|
||||||
|
|
||||||
|
if(dsq->mod.isActive())
|
||||||
|
{
|
||||||
|
fname = dsq->user.localisePath(dsq->mod.getPath() + "ingredientnames.txt", dsq->mod.getPath());
|
||||||
|
loadIngredientDisplayNames(fname);
|
||||||
|
}
|
||||||
|
|
||||||
ingredientDescriptions.clear();
|
ingredientDescriptions.clear();
|
||||||
ingredientData.clear();
|
ingredientData.clear();
|
||||||
recipes.clear();
|
recipes.clear();
|
||||||
|
|
||||||
std::string fname;
|
|
||||||
|
|
||||||
if(dsq->mod.isActive())
|
if(dsq->mod.isActive())
|
||||||
{
|
{
|
||||||
//load mod ingredients
|
//load mod ingredients
|
||||||
|
|
|
@ -485,33 +485,38 @@ void DSQ::loadFonts()
|
||||||
|
|
||||||
destroyFonts();
|
destroyFonts();
|
||||||
|
|
||||||
font.load("data/font-small.glf", 1, false);
|
std::string file = user.localisePath("data/font-small.glf");
|
||||||
|
|
||||||
|
font.load(file, 1, false);
|
||||||
font.fontTopColor = Vector(0.9,0.9,1);
|
font.fontTopColor = Vector(0.9,0.9,1);
|
||||||
font.fontBtmColor = Vector(0.5,0.8,1);
|
font.fontBtmColor = Vector(0.5,0.8,1);
|
||||||
font.overrideTexture = core->addTexture("font");
|
font.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
smallFont.load("data/font-small.glf", 0.6, false);
|
smallFont.load(file, 0.6, false);
|
||||||
smallFont.fontTopColor = Vector(0.9,0.9,1);
|
smallFont.fontTopColor = Vector(0.9,0.9,1);
|
||||||
smallFont.fontBtmColor = Vector(0.5,0.8,1);
|
smallFont.fontBtmColor = Vector(0.5,0.8,1);
|
||||||
smallFont.overrideTexture = core->addTexture("font");
|
smallFont.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
smallFontRed.load("data/font-small.glf", 0.6, false);
|
smallFontRed.load(file, 0.6, false);
|
||||||
smallFontRed.fontTopColor = Vector(1,0.9,0.9);
|
smallFontRed.fontTopColor = Vector(1,0.9,0.9);
|
||||||
smallFontRed.fontBtmColor = Vector(1,0.8,0.5);
|
smallFontRed.fontBtmColor = Vector(1,0.8,0.5);
|
||||||
smallFontRed.overrideTexture = core->addTexture("font");
|
smallFontRed.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
subsFont.load("data/font-small.glf", 0.5, false);
|
subsFont.load(file, 0.5, false);
|
||||||
subsFont.fontTopColor = Vector(1,1,1);
|
subsFont.fontTopColor = Vector(1,1,1);
|
||||||
subsFont.fontBtmColor = Vector(0.5,0.8,1);
|
subsFont.fontBtmColor = Vector(0.5,0.8,1);
|
||||||
subsFont.overrideTexture = core->addTexture("font");
|
subsFont.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
goldFont.load("data/font-small.glf", 1, false);
|
goldFont.load(file, 1, false);
|
||||||
goldFont.fontTopColor = Vector(1,0.9,0.5);
|
goldFont.fontTopColor = Vector(1,0.9,0.5);
|
||||||
goldFont.fontBtmColor = Vector(0.6,0.5,0.25);
|
goldFont.fontBtmColor = Vector(0.6,0.5,0.25);
|
||||||
goldFont.overrideTexture = core->addTexture("font");
|
goldFont.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
|
|
||||||
|
file = user.localisePath("data/font.ttf");
|
||||||
|
|
||||||
debugLog("ttf...");
|
debugLog("ttf...");
|
||||||
arialFontData = (unsigned char *)readFile("data/font.ttf", &arialFontDataSize);
|
arialFontData = (unsigned char *)readFile(file, &arialFontDataSize);
|
||||||
if (arialFontData)
|
if (arialFontData)
|
||||||
{
|
{
|
||||||
fontArialSmall .create(arialFontData, arialFontDataSize, 12);
|
fontArialSmall .create(arialFontData, arialFontDataSize, 12);
|
||||||
|
|
|
@ -696,10 +696,10 @@ struct IngredientEffect
|
||||||
class IngredientData
|
class IngredientData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IngredientData(const std::string &name, const std::string &gfx, IngredientType type)
|
IngredientData(const std::string &name, const std::string &gfx, IngredientType type);
|
||||||
: name(name), gfx(gfx), amount(0), held(0), type(type), marked(0), sorted(false) {}
|
|
||||||
int getIndex() const;
|
int getIndex() const;
|
||||||
const std::string name, gfx;
|
const std::string name, gfx;
|
||||||
|
std::string displayName;
|
||||||
const IngredientType type;
|
const IngredientType type;
|
||||||
int amount;
|
int amount;
|
||||||
int held;
|
int held;
|
||||||
|
@ -747,6 +747,7 @@ public:
|
||||||
std::vector<RecipeType> types;
|
std::vector<RecipeType> types;
|
||||||
std::vector<RecipeName> names;
|
std::vector<RecipeName> names;
|
||||||
std::string result;
|
std::string result;
|
||||||
|
std::string resultDisplayName;
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
|
@ -1079,9 +1080,11 @@ public:
|
||||||
void applyIngredientEffects(IngredientData *data);
|
void applyIngredientEffects(IngredientData *data);
|
||||||
|
|
||||||
void loadIngredientData(const std::string &file);
|
void loadIngredientData(const std::string &file);
|
||||||
|
void loadIngredientDisplayNames(const std::string& file);
|
||||||
bool hasIngredients() const { return !ingredients.empty(); }
|
bool hasIngredients() const { return !ingredients.empty(); }
|
||||||
IngredientDatas::size_type ingredientCount() const { return ingredients.size(); }
|
IngredientDatas::size_type ingredientCount() const { return ingredients.size(); }
|
||||||
IngredientType getIngredientTypeFromName(const std::string &name) const;
|
IngredientType getIngredientTypeFromName(const std::string &name) const;
|
||||||
|
std::string getIngredientDisplayName(const std::string& name) const;
|
||||||
|
|
||||||
void removeEmptyIngredients();
|
void removeEmptyIngredients();
|
||||||
void spawnAllIngredients(const Vector &position);
|
void spawnAllIngredients(const Vector &position);
|
||||||
|
@ -1130,7 +1133,6 @@ public:
|
||||||
IngredientDescriptions ingredientDescriptions;
|
IngredientDescriptions ingredientDescriptions;
|
||||||
|
|
||||||
std::string getIngredientAffectsString(IngredientData *data);
|
std::string getIngredientAffectsString(IngredientData *data);
|
||||||
std::string getIngredientDescription(IngredientEffectType type);
|
|
||||||
|
|
||||||
WorldMap worldMap;
|
WorldMap worldMap;
|
||||||
|
|
||||||
|
@ -1176,6 +1178,9 @@ private:
|
||||||
|
|
||||||
IngredientDatas ingredients; // held ingredients
|
IngredientDatas ingredients; // held ingredients
|
||||||
IngredientDatas ingredientData; // all possible ingredients
|
IngredientDatas ingredientData; // all possible ingredients
|
||||||
|
|
||||||
|
typedef std::map<std::string,std::string> IngredientNameMap;
|
||||||
|
IngredientNameMap ingredientDisplayNames;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Profile
|
class Profile
|
||||||
|
|
|
@ -635,7 +635,7 @@ void FoodSlot::onUpdate(float dt)
|
||||||
if ((core->mouse.position - getWorldPosition()).isLength2DIn(16))
|
if ((core->mouse.position - getWorldPosition()).isLength2DIn(16))
|
||||||
//if (isCursorIn())
|
//if (isCursorIn())
|
||||||
{
|
{
|
||||||
dsq->game->foodLabel->setText(splitCamelCase(ingredient->name));
|
dsq->game->foodLabel->setText(ingredient->displayName);
|
||||||
dsq->game->foodLabel->alpha.interpolateTo(1, 0.2);
|
dsq->game->foodLabel->alpha.interpolateTo(1, 0.2);
|
||||||
|
|
||||||
dsq->game->foodDescription->setText(dsq->continuity.getIngredientAffectsString(ingredient));
|
dsq->game->foodDescription->setText(dsq->continuity.getIngredientAffectsString(ingredient));
|
||||||
|
@ -7946,7 +7946,7 @@ void Game::toggleHelpScreen(bool on, const std::string &label)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// !!! FIXME: this is such a hack.
|
// !!! FIXME: this is such a hack.
|
||||||
data += "\n\n[Achievements]\n\n";
|
data += "\n\n" + dsq->continuity.stringBank.get(2032) + "\n\n";
|
||||||
dsq->continuity.statsAndAchievements->appendStringData(data);
|
dsq->continuity.statsAndAchievements->appendStringData(data);
|
||||||
|
|
||||||
helpBG = new Quad;
|
helpBG = new Quad;
|
||||||
|
@ -11182,7 +11182,7 @@ void Game::learnedRecipe(Recipe *r, bool effects)
|
||||||
if (nocasecmp(dsq->getTopStateData()->name,"Game")==0 && !applyingState)
|
if (nocasecmp(dsq->getTopStateData()->name,"Game")==0 && !applyingState)
|
||||||
{
|
{
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << dsq->continuity.stringBank.get(23) << " " << splitCamelCase(r->result) << " " << dsq->continuity.stringBank.get(24);
|
os << dsq->continuity.stringBank.get(23) << " " << r->resultDisplayName << " " << dsq->continuity.stringBank.get(24);
|
||||||
IngredientData *data = dsq->continuity.getIngredientDataByName(r->result);
|
IngredientData *data = dsq->continuity.getIngredientDataByName(r->result);
|
||||||
if (data)
|
if (data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Avatar.h"
|
#include "Avatar.h"
|
||||||
|
|
||||||
|
IngredientData::IngredientData(const std::string &name, const std::string &gfx, IngredientType type)
|
||||||
|
: name(name), gfx(gfx), amount(0), held(0), type(type), marked(0), sorted(false)
|
||||||
|
, displayName(dsq->continuity.getIngredientDisplayName(name))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int IngredientData::getIndex() const
|
int IngredientData::getIndex() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,8 +26,7 @@ namespace RecipeMenuNamespace
|
||||||
|
|
||||||
std::string processFoodName(std::string name)
|
std::string processFoodName(std::string name)
|
||||||
{
|
{
|
||||||
name = splitCamelCase(name);
|
size_t p = name.find(' ');
|
||||||
int p = name.find(' ');
|
|
||||||
if (p != std::string::npos)
|
if (p != std::string::npos)
|
||||||
{
|
{
|
||||||
name[p] = '\n';
|
name[p] = '\n';
|
||||||
|
@ -62,7 +61,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
|
||||||
text->color = 0;
|
text->color = 0;
|
||||||
text->position = result->position + Vector(0, 18);
|
text->position = result->position + Vector(0, 18);
|
||||||
|
|
||||||
text->setText(processFoodName(data->name));
|
text->setText(processFoodName(data->displayName));
|
||||||
addChild(text, PM_POINTER);
|
addChild(text, PM_POINTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +98,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
|
||||||
text->scale = Vector(0.7, 0.7);
|
text->scale = Vector(0.7, 0.7);
|
||||||
text->color = 0;
|
text->color = 0;
|
||||||
text->position = ing[c]->position + Vector(0, 18);
|
text->position = ing[c]->position + Vector(0, 18);
|
||||||
text->setText(processFoodName(data->name));
|
text->setText(processFoodName(data->displayName));
|
||||||
addChild(text, PM_POINTER);
|
addChild(text, PM_POINTER);
|
||||||
|
|
||||||
if (c < size)
|
if (c < size)
|
||||||
|
@ -132,15 +131,16 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
|
||||||
|
|
||||||
std::string typeName = recipe->types[i].typeName;
|
std::string typeName = recipe->types[i].typeName;
|
||||||
|
|
||||||
int loc = typeName.find("Type");
|
size_t loc = typeName.find("Type");
|
||||||
if (loc != std::string::npos)
|
if (loc != std::string::npos)
|
||||||
{
|
{
|
||||||
typeName = typeName.substr(0, loc) + typeName.substr(loc+4, typeName.size());
|
typeName = typeName.substr(0, loc) + typeName.substr(loc+4, typeName.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typeName = dsq->continuity.getIngredientDisplayName(typeName);
|
||||||
|
|
||||||
if (typeName != "Anything")
|
if (recipe->types[i].type != IT_ANYTHING)
|
||||||
typeName = std::string("Any\n") + typeName;
|
typeName = dsq->continuity.stringBank.get(2031) + "\n" + typeName;
|
||||||
else
|
else
|
||||||
typeName = std::string("\n") + typeName;
|
typeName = std::string("\n") + typeName;
|
||||||
|
|
||||||
|
|
|
@ -5755,6 +5755,33 @@ luaFunc(entity_pullEntities)
|
||||||
luaReturnNil();
|
luaReturnNil();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note that this overrides the generic obj_delete function for entities.
|
||||||
|
// (It's registered as "entity_delete" to Lua)
|
||||||
|
// There is at least one known case where this is necessary:
|
||||||
|
// Avatar::pullTarget does a life check to drop the pointer;
|
||||||
|
// If it's instantly deleted, this will cause a crash.
|
||||||
|
luaFunc(entity_delete_override)
|
||||||
|
{
|
||||||
|
Entity *e = entity(L);
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
float time = lua_tonumber(L, 2);
|
||||||
|
if (time == 0)
|
||||||
|
{
|
||||||
|
e->alpha = 0;
|
||||||
|
e->setLife(0);
|
||||||
|
e->setDecayRate(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e->fadeAlphaWithLife = true;
|
||||||
|
e->setLife(1);
|
||||||
|
e->setDecayRate(1.0f/time);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
luaReturnInt(0);
|
||||||
|
}
|
||||||
|
|
||||||
luaFunc(entity_isRidingOnEntity)
|
luaFunc(entity_isRidingOnEntity)
|
||||||
{
|
{
|
||||||
Entity *e = entity(L);
|
Entity *e = entity(L);
|
||||||
|
@ -7415,6 +7442,7 @@ static const struct {
|
||||||
luaRegister(entity_getVectorToEntity),
|
luaRegister(entity_getVectorToEntity),
|
||||||
|
|
||||||
luaRegister(entity_getDistanceToTarget),
|
luaRegister(entity_getDistanceToTarget),
|
||||||
|
{ "entity_delete", l_entity_delete_override },
|
||||||
luaRegister(entity_move),
|
luaRegister(entity_move),
|
||||||
|
|
||||||
luaRegister(entity_getID),
|
luaRegister(entity_getID),
|
||||||
|
|
|
@ -28,6 +28,12 @@ void StringBank::load()
|
||||||
{
|
{
|
||||||
stringMap.clear();
|
stringMap.clear();
|
||||||
|
|
||||||
|
// First, load the default string banks
|
||||||
|
_load("data/stringbank.txt");
|
||||||
|
if (dsq->mod.isActive())
|
||||||
|
_load(dsq->mod.getPath() + "stringbank.txt");
|
||||||
|
|
||||||
|
// Then, load localized ones. If some entries in these are missing, the default for each is taken.
|
||||||
std::string fname = dsq->user.localisePath("data/stringbank.txt");
|
std::string fname = dsq->user.localisePath("data/stringbank.txt");
|
||||||
_load(fname);
|
_load(fname);
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ unsigned hash(const std::string &string)
|
||||||
unsigned hash = 5381;
|
unsigned hash = 5381;
|
||||||
|
|
||||||
for (int i = 0; i < string.size(); i++)
|
for (int i = 0; i < string.size(); i++)
|
||||||
hash = ((hash << 5) + hash) + string[i];
|
hash = ((hash << 5) + hash) + (unsigned char)string[i];
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
@ -197,26 +197,32 @@ bool isVectorInRect(const Vector &vec, const Vector &coord1, const Vector &coord
|
||||||
return (vec.x > coord1.x && vec.x < coord2.x && vec.y > coord1.y && vec.y < coord2.y);
|
return (vec.x > coord1.x && vec.x < coord2.x && vec.y > coord1.y && vec.y < coord2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char charToUpper(char c)
|
||||||
|
{
|
||||||
|
if (c >= 'a' && c <= 'z') c = c - 'a' + 'A';
|
||||||
|
if ((unsigned char)c >= 0xE0 && (unsigned char)c <= 0xFF)
|
||||||
|
c = c - 0xE0 + 0xC0;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char charToLower(char c)
|
||||||
|
{
|
||||||
|
if (c >= 'A' && c <= 'Z') c = c-'A' + 'a';
|
||||||
|
if ((unsigned char)c >= 0xC0 && (unsigned char)c <= 0xDF)
|
||||||
|
c = c-0xC0+0xE0;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
void stringToUpper(std::string &s)
|
void stringToUpper(std::string &s)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < s.size(); i++)
|
for (int i = 0; i < s.size(); i++)
|
||||||
{
|
s[i] = charToUpper(s[i]);
|
||||||
if (s[i] >= 'a' && s[i] <= 'z')
|
|
||||||
{
|
|
||||||
s[i] = s[i]-'a' + 'A';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringToLower(std::string &s)
|
void stringToLower(std::string &s)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < s.size(); i++)
|
for (int i = 0; i < s.size(); i++)
|
||||||
{
|
s[i] = charToLower(s[i]);
|
||||||
if (s[i] >= 'A' && s[i] <= 'Z')
|
|
||||||
{
|
|
||||||
s[i] = s[i]-'A' + 'a';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringToLowerUserData(std::string &s)
|
void stringToLowerUserData(std::string &s)
|
||||||
|
@ -246,9 +252,9 @@ int nocasecmp(const std::string &s1, const std::string &s2)
|
||||||
//stop when either string's end has been reached
|
//stop when either string's end has been reached
|
||||||
while ( (it1!=s1.end()) && (it2!=s2.end()) )
|
while ( (it1!=s1.end()) && (it2!=s2.end()) )
|
||||||
{
|
{
|
||||||
if(::toupper(*it1) != ::toupper(*it2)) //letters differ?
|
if(charToUpper(*it1) != charToUpper(*it2)) //letters differ?
|
||||||
// return -1 to indicate smaller than, 1 otherwise
|
// return -1 to indicate smaller than, 1 otherwise
|
||||||
return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
|
return (charToUpper(*it1) < charToUpper(*it2)) ? -1 : 1;
|
||||||
//proceed to the next character in each string
|
//proceed to the next character in each string
|
||||||
++it1;
|
++it1;
|
||||||
++it2;
|
++it2;
|
||||||
|
@ -261,18 +267,6 @@ int nocasecmp(const std::string &s1, const std::string &s2)
|
||||||
}
|
}
|
||||||
#endif // #if !HAVE_STRCASECMP
|
#endif // #if !HAVE_STRCASECMP
|
||||||
|
|
||||||
std::string upperCase(const std::string &s1)
|
|
||||||
{
|
|
||||||
std::string ret;
|
|
||||||
std::string::const_iterator it1=s1.begin();
|
|
||||||
while (it1 != s1.end())
|
|
||||||
{
|
|
||||||
ret += ::toupper(*it1);
|
|
||||||
++it1;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool exists(const std::string &f, bool makeFatal, bool skipVFS)
|
bool exists(const std::string &f, bool makeFatal, bool skipVFS)
|
||||||
{
|
{
|
||||||
bool e = false;
|
bool e = false;
|
||||||
|
|
|
@ -139,6 +139,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "FileAPI.h"
|
#include "FileAPI.h"
|
||||||
|
|
||||||
|
#ifdef BBGE_BUILD_LINUX
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// dumb win32 includes/defines cleanup
|
// dumb win32 includes/defines cleanup
|
||||||
#undef GetCharWidth
|
#undef GetCharWidth
|
||||||
|
|
||||||
|
@ -220,7 +225,6 @@ static inline int nocasecmp(const char *s1, const char *s2)
|
||||||
#else
|
#else
|
||||||
int nocasecmp(const std::string &s1, const std::string &s2);
|
int nocasecmp(const std::string &s1, const std::string &s2);
|
||||||
#endif
|
#endif
|
||||||
std::string upperCase(const std::string &s1);
|
|
||||||
Vector getNearestPointOnLine(Vector start, Vector end, Vector point);
|
Vector getNearestPointOnLine(Vector start, Vector end, Vector point);
|
||||||
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius=1, Vector* closest=0);
|
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius=1, Vector* closest=0);
|
||||||
void sizePowerOf2Texture(int &v);
|
void sizePowerOf2Texture(int &v);
|
||||||
|
|
|
@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
|
|
||||||
#if defined(BBGE_BUILD_WINDOWS) && defined(BBGE_BUILD_XINPUT)
|
#if defined(BBGE_BUILD_WINDOWS) && defined(BBGE_BUILD_XINPUT)
|
||||||
|
@ -68,6 +69,8 @@ bool tryXInput()
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
|
@ -240,7 +240,6 @@ public:
|
||||||
BB_MAKE_WRITE_OP(uint64);
|
BB_MAKE_WRITE_OP(uint64);
|
||||||
BB_MAKE_WRITE_OP(float);
|
BB_MAKE_WRITE_OP(float);
|
||||||
BB_MAKE_WRITE_OP(double);
|
BB_MAKE_WRITE_OP(double);
|
||||||
BB_MAKE_WRITE_OP(int);
|
|
||||||
|
|
||||||
ByteBuffer &operator<<(bool value)
|
ByteBuffer &operator<<(bool value)
|
||||||
{
|
{
|
||||||
|
@ -271,7 +270,6 @@ public:
|
||||||
BB_MAKE_READ_OP(uint64);
|
BB_MAKE_READ_OP(uint64);
|
||||||
BB_MAKE_READ_OP(float);
|
BB_MAKE_READ_OP(float);
|
||||||
BB_MAKE_READ_OP(double);
|
BB_MAKE_READ_OP(double);
|
||||||
BB_MAKE_READ_OP(int);
|
|
||||||
|
|
||||||
ByteBuffer &operator>>(bool &value)
|
ByteBuffer &operator>>(bool &value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,16 +74,14 @@ bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
|
||||||
vfclose(fh);
|
vfclose(fh);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int dummy;
|
|
||||||
|
|
||||||
// Read the header from file
|
// Read the header from file
|
||||||
header.tex = tex;
|
header.tex = tex;
|
||||||
bb >> dummy; // skip tex field
|
bb.skipRead(4); // skip tex field
|
||||||
bb >> header.tex_width;
|
header.tex_width = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> header.tex_height;
|
header.tex_height = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> header.start_char;
|
header.start_char = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> header.end_char;
|
header.end_char = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> dummy; // skip chars field
|
bb.skipRead(4); // skip chars field
|
||||||
|
|
||||||
//Allocate space for character array
|
//Allocate space for character array
|
||||||
num_chars = header.end_char - header.start_char + 1;
|
num_chars = header.end_char - header.start_char + 1;
|
||||||
|
@ -197,7 +195,7 @@ int GLFont::GetEndChar (void)
|
||||||
return header.end_char;
|
return header.end_char;
|
||||||
}
|
}
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
void GLFont::GetCharSize (int c, std::pair<int, int> *size)
|
void GLFont::GetCharSize (unsigned int c, std::pair<int, int> *size)
|
||||||
{
|
{
|
||||||
//Make sure character is in range
|
//Make sure character is in range
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
|
@ -218,7 +216,7 @@ void GLFont::GetCharSize (int c, std::pair<int, int> *size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
int GLFont::GetCharWidth (int c)
|
int GLFont::GetCharWidth (unsigned int c)
|
||||||
{
|
{
|
||||||
//Make sure in range
|
//Make sure in range
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
|
@ -242,7 +240,7 @@ int GLFont::GetCharWidth (int c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
int GLFont::GetCharHeight (int c)
|
int GLFont::GetCharHeight (unsigned int c)
|
||||||
{
|
{
|
||||||
//Make sure in range
|
//Make sure in range
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
|
@ -268,7 +266,7 @@ void GLFont::Begin (void)
|
||||||
void GLFont::GetStringSize (const std::string &text, std::pair<int, int> *size)
|
void GLFont::GetStringSize (const std::string &text, std::pair<int, int> *size)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char c;
|
unsigned char c;
|
||||||
GLFontChar *glfont_char;
|
GLFontChar *glfont_char;
|
||||||
float width;
|
float width;
|
||||||
|
|
||||||
|
@ -282,7 +280,7 @@ void GLFont::GetStringSize (const std::string &text, std::pair<int, int> *size)
|
||||||
for (i = 0; i < text.size(); i++)
|
for (i = 0; i < text.size(); i++)
|
||||||
{
|
{
|
||||||
//Make sure character is in range
|
//Make sure character is in range
|
||||||
c = (char)text[i];
|
c = (unsigned char)text[i];
|
||||||
|
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -36,9 +36,9 @@ private:
|
||||||
//glFont header structure
|
//glFont header structure
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
int tex;
|
unsigned int tex;
|
||||||
int tex_width, tex_height;
|
unsigned int tex_width, tex_height;
|
||||||
int start_char, end_char;
|
unsigned int start_char, end_char;
|
||||||
GLFontChar *chars;
|
GLFontChar *chars;
|
||||||
} header;
|
} header;
|
||||||
|
|
||||||
|
@ -70,9 +70,9 @@ public:
|
||||||
int GetEndChar (void);
|
int GetEndChar (void);
|
||||||
|
|
||||||
//Character size retrieval methods
|
//Character size retrieval methods
|
||||||
void GetCharSize (int c, std::pair<int, int> *size);
|
void GetCharSize (unsigned int c, std::pair<int, int> *size);
|
||||||
int GetCharWidth (int c);
|
int GetCharWidth (unsigned int c);
|
||||||
int GetCharHeight (int c);
|
int GetCharHeight (unsigned int c);
|
||||||
|
|
||||||
void GetStringSize (const std::string &text, std::pair<int, int> *size);
|
void GetStringSize (const std::string &text, std::pair<int, int> *size);
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,12 @@
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace minihttp
|
namespace minihttp
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
89
files/data/ingredientnames.txt
Normal file
89
files/data/ingredientnames.txt
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
Anything Anything
|
||||||
|
ArcanePoultice Arcane Poultice
|
||||||
|
Berry Berry
|
||||||
|
BerryIceCream Berry Ice Cream
|
||||||
|
Bulb Bulb
|
||||||
|
ButterySeaLoaf Buttery Sea Loaf
|
||||||
|
Cake Cake
|
||||||
|
ColdBorscht Cold Borscht
|
||||||
|
ColdSoup Cold Soup
|
||||||
|
CrabCake Crab Cake
|
||||||
|
CrabMeat Crab Meat
|
||||||
|
DivineSoup Divine Soup
|
||||||
|
DumboIceCream Dumbo Ice Cream
|
||||||
|
EelOil Eel Oil
|
||||||
|
Egg Egg
|
||||||
|
FishMeat Fish Meat
|
||||||
|
FishOil Fish Oil
|
||||||
|
GlowingEgg Glowing Egg
|
||||||
|
HandRoll Hand Roll
|
||||||
|
HealingPoultice Healing Poultice
|
||||||
|
HeartySoup Hearty Soup
|
||||||
|
HotBorscht Hot Borscht
|
||||||
|
HotSoup Hot Soup
|
||||||
|
IceChunk Ice Chunk
|
||||||
|
IceCream Ice Cream
|
||||||
|
JellyOil Jelly Oil
|
||||||
|
LeadershipRoll Leadership Roll
|
||||||
|
Leaf Leaf
|
||||||
|
LeafPoultice Leaf Poultice
|
||||||
|
LeechingPoultice Leeching Poultice
|
||||||
|
LegendaryCake Legendary Cake
|
||||||
|
Loaf Loaf
|
||||||
|
LoafOfLife Loaf Of Life
|
||||||
|
LongLifeSoup Long Life Soup
|
||||||
|
MagicSoup Magic Soup
|
||||||
|
Meat Meat
|
||||||
|
Mushroom Mushroom
|
||||||
|
Oil Oil
|
||||||
|
Part Part
|
||||||
|
Perogi Perogi
|
||||||
|
PerogiType Perogi Type
|
||||||
|
PlantBulb Plant Bulb
|
||||||
|
PlantLeaf Plant Leaf
|
||||||
|
PlumpPerogi Plump Perogi
|
||||||
|
PoisonLoaf Poison Loaf
|
||||||
|
PoisonSoup Poison Soup
|
||||||
|
Poultice Poultice
|
||||||
|
RainbowMushroom Rainbow Mushroom
|
||||||
|
RainbowSoup Rainbow Soup
|
||||||
|
RedBerry Red Berry
|
||||||
|
RedBulb Red Bulb
|
||||||
|
Roll Roll
|
||||||
|
RottenCake Rotten Cake
|
||||||
|
RottenLoaf Rotten Loaf
|
||||||
|
RottenMeat Rotten Meat
|
||||||
|
RoyalSoup Royal Soup
|
||||||
|
RubberyMeat Rubbery Meat
|
||||||
|
RukhEgg Rukh Egg
|
||||||
|
SeaCake Sea Cake
|
||||||
|
SeaLoaf Sea Loaf
|
||||||
|
SharkFin Shark Fin
|
||||||
|
SharkFinSoup Shark Fin Soup
|
||||||
|
SightPoultice Sight Poultice
|
||||||
|
SmallBone Small Bone
|
||||||
|
SmallEgg Small Egg
|
||||||
|
SmallEye Small Eye
|
||||||
|
SmallTentacle Small Tentacle
|
||||||
|
Soup Soup
|
||||||
|
SpecialBulb Special Bulb
|
||||||
|
SpecialCake Special Cake
|
||||||
|
SpicyMeat Spicy Meat
|
||||||
|
SpicyRoll Spicy Roll
|
||||||
|
SpicySoup Spicy Soup
|
||||||
|
SpiderEgg Spider Egg
|
||||||
|
SpiderRoll Spider Roll
|
||||||
|
SwampCake Swamp Cake
|
||||||
|
SwordfishSteak Swordfish Steak
|
||||||
|
TastyCake Tasty Cake
|
||||||
|
TastyRoll Tasty Roll
|
||||||
|
ToughCake Tough Cake
|
||||||
|
TurtleMeat Turtle Meat
|
||||||
|
TurtleSoup Turtle Soup
|
||||||
|
Vedha'sCure-All Vedha's Cure- All
|
||||||
|
VedhaSeaCrisp Vedha Sea Crisp
|
||||||
|
VeggieCake Veggie Cake
|
||||||
|
VeggieIceCream Veggie Ice Cream
|
||||||
|
VeggieSoup Veggie Soup
|
||||||
|
VolcanoRoll Volcano Roll
|
||||||
|
Zuuna'sPerogi Zuuna's Perogi
|
|
@ -204,3 +204,5 @@
|
||||||
2028 |Browse & enable/disable installed patches
|
2028 |Browse & enable/disable installed patches
|
||||||
2029 |Browse mods online
|
2029 |Browse mods online
|
||||||
2030 |Return to title
|
2030 |Return to title
|
||||||
|
2031 Any
|
||||||
|
2032 [Achievements]
|
2
files/locales/ru/data/help_bindsong.txt
Normal file
2
files/locales/ru/data/help_bindsong.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[Связующая песня]
|
||||||
|
Эта песня позволяет Найе поднимать и двигать округлые предметы, например камни. Спойте эту песню рядом с подходящим предметом, и он будет следовать за Найей, куда бы она ни отправилась.
|
4
files/locales/ru/data/help_end.txt
Normal file
4
files/locales/ru/data/help_end.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[Дополнительная помощь]
|
||||||
|
Если вы окончательно запутались и не знаете, что делать дальше, загляните на форум aquaria.su и попросите совета у других игроков. :-)
|
||||||
|
|
||||||
|
~ Это все советы, которые могут вам пригодиться на данный момент. Удачи! ~
|
4
files/locales/ru/data/help_end_mac.txt
Normal file
4
files/locales/ru/data/help_end_mac.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[Дополнительная помощь]
|
||||||
|
Если вы окончательно запутались и не знаете, что делать дальше, загляните на форум игры по адресу http://www.snowball.ru/forums/ или http://ambrosiasw.com/forums/ и попросите совета у других игроков. :-)
|
||||||
|
|
||||||
|
~ Это все советы, которые могут вам пригодиться на данный момент. Удачи! ~
|
5
files/locales/ru/data/help_energyform.txt
Normal file
5
files/locales/ru/data/help_energyform.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[Форма силы]
|
||||||
|
В форме силы Найя может атаковать своих врагов. Щелкните правой кнопки мыши, и Найя поразит врага разрядом молнии, но если нажать и держать правую кнопку мыши, Найя одновременно выпустит несколько очень мощных разрядов. Есть и другие формы для атаки, попробуйте их разыскать!
|
||||||
|
|
||||||
|
[Возвращение в естественный облик]
|
||||||
|
Чтобы Найя приняла свое естественное обличье, нажмите левую и правую кнопки мыши одновременно - или нажмите клавишу X.
|
3
files/locales/ru/data/help_header.txt
Normal file
3
files/locales/ru/data/help_header.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
~ Аквария: руководство и помощь ~
|
||||||
|
|
||||||
|
Примечание: нажмите F1, чтобы вызвать этот экран. Вы можете воспользоваться помощью в любое время, когда вы можете управлять персонажем.
|
3
files/locales/ru/data/help_header_mac.txt
Normal file
3
files/locales/ru/data/help_header_mac.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
~ Аквария: руководство и помощь ~
|
||||||
|
|
||||||
|
Примечание: нажмите {ToggleHelp:k0}, чтобы вызвать этот экран. Вы можете воспользоваться помощью в любое время, когда вы можете управлять персонажем.
|
2
files/locales/ru/data/help_other.txt
Normal file
2
files/locales/ru/data/help_other.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[Другие песни и обличья]
|
||||||
|
В водах Акварии вы найдете множество песен и новых обличий. Вам придется узнавать об их возможностях самостоятельно.
|
56
files/locales/ru/data/help_start.txt
Normal file
56
files/locales/ru/data/help_start.txt
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
[Управление]
|
||||||
|
Все действия в игре "Аквария" можно выполнить при помощи мыши.
|
||||||
|
|
||||||
|
На клавиатуре левой кнопке мыши по умолчанию соответствует клавиша "Пробел", а правой - клавиша "Ctrl".
|
||||||
|
|
||||||
|
[Движение]
|
||||||
|
Нажмите и держите левую кнопку мыши, чтобы плыть. Вы также можете использовать клавиши A-S-D-W или клавиши со стрелками.
|
||||||
|
|
||||||
|
Нажмите и задержите левую кнопку мыши, отведя курсор от Найи, чтобы она сделала рывок вперед. Так Найя сможет ускользнуть от любого преследователя. Если вы играете с клавиатуры, чтобы выполнить рывок, нажмите пробел.
|
||||||
|
|
||||||
|
Если вы нажмете кнопку мыши сразу после рывка, Найя сделает кувырок.
|
||||||
|
|
||||||
|
Если во время рывка на пути у Найи окажется стена, то Найя ухватится за нее. Делая рывок со стены, Найя разгоняется еще сильнее.
|
||||||
|
|
||||||
|
Зажмите левую кнопку мыши и проведите курсором вокруг Найи, и она закружится. Это не только притянет к ней легкие предметы, оказавшиеся рядом, но и создаст волну, которая тоже оказывает некоторое воздействие на окружающих. Чтобы кружиться, также можно нажать клавишу R.
|
||||||
|
|
||||||
|
[Пение]
|
||||||
|
Нажмите и держите правую кнопку мыши или клавишу Ctrl, чтобы начать песню.
|
||||||
|
|
||||||
|
Когда Найя поет, вокруг нее появляются восемь нот. Наведите курсор на ноту, чтобы Найя ее спела. Разные существа Акварии реагируют на пение по-разному.
|
||||||
|
|
||||||
|
[Песни]
|
||||||
|
Во время странствий Найя найдет несколько песен. Выученные песни можно послушать в любой момент в меню игры. Песня - это определенная последовательность нот, которую надо повторять каждый раз, чтобы получить желаемый эффект. Каждая песня по-своему влияет на Найю и окружающий ее мир.
|
||||||
|
|
||||||
|
[Взаимодействие]
|
||||||
|
С некоторыми предметами в мире Акварии Найя может взаимодействовать. При наведении на такой предмет курсор начинает светиться. Нажмите правую кнопку мыши, чтобы с таким предметом что-нибудь сделать. Среди таких предметов кухонный стол Найи, ее постель, камни, на которых Найя может сидеть, а также кристаллы для сохранения игры.
|
||||||
|
|
||||||
|
[Сохранение игры]
|
||||||
|
Щелкните правой кнопкой мыши по красному кристаллу, чтобы вызвать меню сохраненных игр. Выберите ячейку, в которой следует сохранить ваши достижения.
|
||||||
|
|
||||||
|
[Мини-карта]
|
||||||
|
Мини-карта отображает мир, окружающий Найю. Золотым кружком отмечена пещера, в которой живет ваша героиня. Красные кружки показывают, где находятся кристаллы сохранения.
|
||||||
|
|
||||||
|
[Карта мира]
|
||||||
|
Двойной щелчок по мини-карте откроет карту мира. Здесь отмечены все зоны, которые вам уже известны. Щелкнув по зоне, вы увидите, какие ее части вы уже исследовали, а в каких вам еще предстоит побывать.
|
||||||
|
|
||||||
|
Щелкнув по пирамидке в правой части экрана, вы можете поместить на карту собственную отметку. Чтобы убрать отметку, щелкните по ней правой кнопкой мыши.
|
||||||
|
|
||||||
|
Большие круги, которые появляются на карте мира, называются маяками. Они показывают Найе новые места, которые ей предстоит посетить. Если вы запутались и не знаете, куда вам плыть дальше, попытайтесь отыскать на карте мира значок маяка.
|
||||||
|
|
||||||
|
[Еда]
|
||||||
|
Найя может создавать вкусные блюда из самых разных ингредиентов или из уже готовых блюд. Откройте экран кулинарии, перетащите по крайней мере два ингредиента на тарелочки в правой части экрана и щелкните по кнопке "Приготовить". Вы можете в любой момент посмотреть, из чего готовится то или иное блюдо, щелкнув по кнопке "Рецепты".
|
||||||
|
|
||||||
|
Маленькая кнопочка в верхнем левом углу экрана кулинарии позволит вам отсортировать найденные продукты.
|
||||||
|
|
||||||
|
Чтобы съесть блюдо, дважды щелкните по нему левой кнопкой мыши или поднесите его ко рту Найи. Перетащив еду на тарелку с крестиком, вы можете выбросить ее.
|
||||||
|
|
||||||
|
[Питомцы]
|
||||||
|
Вы можете выбрать питомца, который будет сопровождать вас, щелкнув по его икринке на экране питомцев. Если вы хотите путешествовать в одиночестве, щелкните по икринке выбранного питомца еще раз. Каждый из питомцев обладает уникальными способностями.
|
||||||
|
|
||||||
|
[Сокровища]
|
||||||
|
Редкие и необычные предметы, которые привлекают внимание Найи, она называет сокровищами. Отыскав такой предмет, просто прикоснитесь к нему, и он окажется в коллекции Найи. Полный список находок можно в любой момент просмотреть на экране сокровищ. Щелкните по стрелочкам над сокровищами, чтобы перейти к следующей странице.
|
||||||
|
|
||||||
|
Щелкнув по изображению сокровища, вы увидите его описание. Некоторые сокровища можно использовать. Для этого щелкните по соответствующей кнопке на этом же экране.
|
||||||
|
|
||||||
|
В мире Акварии спрятано немало сокровищ. Постарайтесь разыскать их все!
|
88
files/locales/ru/data/ingredientnames.txt
Normal file
88
files/locales/ru/data/ingredientnames.txt
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
Anything Что угодно
|
||||||
|
ArcanePoultice Тайная припарка
|
||||||
|
Berry Ягода
|
||||||
|
BerryIceCream Ягодное мороженое
|
||||||
|
Bulb Клубень
|
||||||
|
ButterySeaLoaf Масляный морской хлеб
|
||||||
|
ColdBorscht Холодный борщ
|
||||||
|
ColdSoup Холодный суп
|
||||||
|
Cake Кекс
|
||||||
|
CrabCake Крабовый кекс
|
||||||
|
CrabMeat Крабовое мясо
|
||||||
|
DivineSoup Божественный суп
|
||||||
|
DumboIceCream Мороженое Дамбо
|
||||||
|
EelOil Жир угря
|
||||||
|
Egg Яйцо
|
||||||
|
FishMeat Мясо рыбы
|
||||||
|
FishOil Рыбий жир
|
||||||
|
GlowingEgg Светящаяся икринка
|
||||||
|
HandRoll Ручной рулет
|
||||||
|
HealingPoultice Целебная припарка
|
||||||
|
HeartySoup Суп здоровья
|
||||||
|
HotBorscht Горячий борщ
|
||||||
|
HotSoup Горячий суп
|
||||||
|
IceChunk Осколок льда
|
||||||
|
IceCream Мороженое
|
||||||
|
JellyOil Желе медузы
|
||||||
|
LeadershipRoll Рулет лидерства
|
||||||
|
Leaf Лист
|
||||||
|
LeafPoultice Припарка
|
||||||
|
LeechingPoultice Припарка высасывания
|
||||||
|
LegendaryCake Легендарный кекс
|
||||||
|
Loaf Хлеб
|
||||||
|
LoafOfLife Хлеб жизни
|
||||||
|
LongLifeSoup Суп долголетия
|
||||||
|
MagicSoup Волшебный суп
|
||||||
|
Meat Мясо
|
||||||
|
Mushroom Гриб
|
||||||
|
Oil Жир
|
||||||
|
Part Часть
|
||||||
|
Perogi Пирог
|
||||||
|
PlantBulb Клубень растения
|
||||||
|
PlantLeaf Лист растения
|
||||||
|
PlumpPerogi Пухлый пирог
|
||||||
|
PoisonLoaf Ядовитый хлеб
|
||||||
|
PoisonSoup Ядовитый суп
|
||||||
|
Poultice Припарка
|
||||||
|
RainbowMushroom Радужный гриб
|
||||||
|
RainbowSoup Радужный суп
|
||||||
|
RedBerry Красная ягода
|
||||||
|
RedBulb Красный клубень
|
||||||
|
Roll Рулет
|
||||||
|
RottenCake Гнилой кекс
|
||||||
|
RottenLoaf Гнилой хлеб
|
||||||
|
RottenMeat Тухлое мясо
|
||||||
|
RoyalSoup Королевский суп
|
||||||
|
RubberyMeat Жесткое мясо
|
||||||
|
RukhEgg Яйцо птицы Рух
|
||||||
|
SeaCake Морской кекс
|
||||||
|
SeaLoaf Морской хлеб
|
||||||
|
SharkFin Акулий плавник
|
||||||
|
SharkFinSoup Суп из акульего плавника
|
||||||
|
SightPoultice Припарка зрения
|
||||||
|
SmallBone Маленькая кость
|
||||||
|
SmallEgg Икра
|
||||||
|
SmallEye Маленький глаз
|
||||||
|
SmallTentacle Маленькое щупальце
|
||||||
|
Soup Суп
|
||||||
|
SpecialBulb Особый клубень
|
||||||
|
SpecialCake Особый кекс
|
||||||
|
SpicyMeat Пряное мясо
|
||||||
|
SpicyRoll Пряный рулет
|
||||||
|
SpicySoup Пряный суп
|
||||||
|
SpiderEgg Паучье яйцо
|
||||||
|
SpiderRoll Паучий рулет
|
||||||
|
SwampCake Болотный кекс
|
||||||
|
SwordfishSteak Стейк рыбы-меч
|
||||||
|
TastyCake Вкусный кекс
|
||||||
|
TastyRoll Вкусный рулет
|
||||||
|
ToughCake Черствый кекс
|
||||||
|
TurtleMeat Черепашье мясо
|
||||||
|
TurtleSoup Черепаший суп
|
||||||
|
Vedha'sCure-All Всеисцеляющая припарка Веды
|
||||||
|
VedhaSeaCrisp Морские чипсы Веды
|
||||||
|
VeggieCake Овощной кекс
|
||||||
|
VeggieIceCream Овощное мороженое
|
||||||
|
VeggieSoup Овощной суп
|
||||||
|
VolcanoRoll Вулканический рулет
|
||||||
|
Zuuna'sPerogi Пирог Зууны
|
177
files/locales/ru/data/stringbank.txt
Normal file
177
files/locales/ru/data/stringbank.txt
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
0 Дважды щелкните по блюду или поднесите его ко рту Найи, чтобы съесть.
|
||||||
|
1 Перетащите два или три ингредиента на тарелки и нажмите кнопку "Приготовить", чтобы создать новое блюдо. Перетащите предмет на тарелку со знаком "Х", чтобы выбросить его. Если вы готовите на кухне, то можете использовать три ингредиента вместо двух.
|
||||||
|
2 Используйте мини-карту в углу экрана, чтобы не заблудиться. Белые кружки отмечают новые зоны. Дом Найи отмечен на карте золотистым кружком.
|
||||||
|
3 Приняв облик зверя и выполнив рывок в сторону противника, вы можете укусить его.
|
||||||
|
4 Вы отыскали подсказку! Дважды щелкните по находящейся в углу экрана мини-карте, чтобы открыть карту мира.
|
||||||
|
6 Теперь вы знаете песню Ли. Спойте ее, чтобы подозвать его, если он начнет отставать. Щелкните по его водолазному шлему, чтобы оставить его здесь.
|
||||||
|
7 Спойте песню Ли, когда он находится рядом, чтобы попросить его атаковать врага.
|
||||||
|
8 Поздравляем! Вы прошли демонстрационную версию игры "Аквария". Вы сможете продолжить игру, приобретя полную версию.
|
||||||
|
9 Собирайте синие растения, чтобы восстановить здоровье Найи.
|
||||||
|
11 Найя умеет готовить вкусные блюда из найденных на дне моря ингредиентов.
|
||||||
|
12 Съев некоторых врагов, вы ненадолго получите их силу...
|
||||||
|
13 Щелкните по Найе, чтобы разжать руки, щелкните на расстоянии от нее, чтобы отпрыгнуть.
|
||||||
|
14 Здесь показаны все песни, которые выучила Найя. Наведите курсор на знак песни, чтобы увидеть, как она поется. Щелкните по знаку, чтобы услышать ее описание.
|
||||||
|
15 Щелкните по этим значкам, чтобы перевернуть страницу.
|
||||||
|
16 Сейчас на этой странице ничего нет. Может быть, позже?
|
||||||
|
17 Здесь показаны питомцы Найи. Щелкните по любому из них, чтобы он сопровождал вас.
|
||||||
|
19 НЕ ИСПОЛЬЗУЕТСЯ
|
||||||
|
20 Примите форму силы, чтобы преодолеть это препятствие
|
||||||
|
21 Чтобы открыть цветок, спойте ноту того же цвета
|
||||||
|
22 Чтобы расколоть яйцо, спойте ноту того же цвета
|
||||||
|
23 Вы выучили новый рецепт:
|
||||||
|
24 !
|
||||||
|
26 Теперь в любом месте вы можете готовить еду на трех тарелках
|
||||||
|
27 Слишком много
|
||||||
|
28 Обведите Найю курсором, чтобы сменить ее облик в дуальной форме
|
||||||
|
29 Убивая врагов, Ли заряжает разрушительную атаку Найи
|
||||||
|
30 Вы нашли икринку Бластера!
|
||||||
|
31 Вы нашли икринку Пираньи!
|
||||||
|
32 Вы нашли икринку осьминога Неуклюжки!
|
||||||
|
33 Вы нашли икринку Наутилуса!
|
||||||
|
34 Связующая песня может снимать панцири с морских обитателей
|
||||||
|
35 Песня-щит - нажмите Esc, чтобы открыть экран песен
|
||||||
|
36 Вы выучили связующую песню
|
||||||
|
37 Вы выучили песню силы
|
||||||
|
38 Вы выучили песню зверя
|
||||||
|
39 Вы выучили песню рыбы
|
||||||
|
40 Вы выучили древесную песню
|
||||||
|
41 Вы выучили песню солнца
|
||||||
|
42 Вы выучили песню Ли
|
||||||
|
43 Вы выучили песню двойной формы
|
||||||
|
44 Вы выучили песню духа
|
||||||
|
50 Связующей песнью можно двигать камни и вытягивать растения
|
||||||
|
51 Неподвижных тритонов можно убирать связующей песнью
|
||||||
|
60 ===WINDOWS/LINUX HINTS START===
|
||||||
|
61 Удерживайте левую кнопку мыши или нажмите пробел, чтобы плыть
|
||||||
|
62 Щелкните по Найе правой кнопкой мыши и держите ее, чтобы запеть
|
||||||
|
63 В форме силы щелкните правой кнопкой по врагу, чтобы прицелиться.
|
||||||
|
64 Зажмите правую кнопку, чтобы создавать семена в древесном облике
|
||||||
|
65 Для водоворота зажмите левую кнопку, вращая курсор вокруг Найи
|
||||||
|
66 Щелкните левой и правой кнопками по Найе, чтобы пройти
|
||||||
|
67 Зажмите среднюю кнопку мыши или кнопку E, чтобы осмотреться
|
||||||
|
68 Чтобы что-то сделать с предметом, щелкните правой кнопкой мыши
|
||||||
|
69 В форме силы зажмите правую кнопку, чтобы нанести мощный удар
|
||||||
|
70 В форме силы щелкните правой кнопкой мыши, чтобы атаковать
|
||||||
|
71 Щелкните левой кнопкой мыши вдалеке от Найи и удерживайте ее.
|
||||||
|
80 ===MAC HINTS START===
|
||||||
|
81 Удерживайте левую кнопку мыши или нажмите пробел, чтобы плыть
|
||||||
|
82 Нажмите Ctrl, наведя курсор на Найю, чтобы запеть
|
||||||
|
83 В форме силы нажмите Ctrl и щелкните по врагу, чтобы прицелиться
|
||||||
|
84 Зажмите Ctrl, чтобы создавать семена в древесном облике
|
||||||
|
85 Для водоворота зажмите левую кнопку и вращайте курсор вокруг Найи
|
||||||
|
86 Щелкните обеими кнопками по Найе или нажмите X, чтобы пройти
|
||||||
|
87 Зажмите среднюю кнопку мыши или левый Shft, чтобы осмотреться
|
||||||
|
88 Нажмите Ctrl, чтобы взаимодействовать с предметами
|
||||||
|
89 В форме силы нажмите и держите Ctrl, чтобы нанести сильный удар
|
||||||
|
90 Нажмите Ctrl, чтобы атаковать врага в форме силы
|
||||||
|
91 Щелкните левой кнопкой мыши вдали от Найи и удерживайте ее.
|
||||||
|
100 +
|
||||||
|
101 -
|
||||||
|
200 Лечит
|
||||||
|
201 Полностью вылечивает
|
||||||
|
202 Защита +
|
||||||
|
203 Секунд
|
||||||
|
204 Скорость +
|
||||||
|
205 в течение
|
||||||
|
206 Регенерация x
|
||||||
|
207 Радуга
|
||||||
|
208 Атака в звериной форме
|
||||||
|
209 Сильный укус
|
||||||
|
210 Неуязвимость
|
||||||
|
211 Выстрел +
|
||||||
|
212 Лечит слепоту
|
||||||
|
213 Лечит отравление
|
||||||
|
214 Отравление
|
||||||
|
215 Вкусно!
|
||||||
|
216 Питомец становится сильнее
|
||||||
|
217 Стрелять ядом в форме рыбы
|
||||||
|
218 Лечит все болезни
|
||||||
|
219 Паутина
|
||||||
|
220 Сияние становится более ярким
|
||||||
|
221 ???
|
||||||
|
222 Вы нашли сокровище! В водах Акварии можно отыскать немало редких и удивительных предметов. Каждый из них украсит собой дом Найи, если вы сумеете их отыскать.
|
||||||
|
223 Сокровище заняло свое место в вашей пещере.
|
||||||
|
224 Вы нашли новый костюм! Чтобы надеть его, откройте экран сокровищ.
|
||||||
|
225 Вам надо найти еще одну древнюю черепаху, чтобы путешествовать с их помощью.
|
||||||
|
226 Древние черепахи помогут вам быстро перемещаться по Акварии.
|
||||||
|
227 Ли съест
|
||||||
|
500 [Медузий маяк] [Это странное растение так привлекало крошечных медуз, что они вились вокруг него стайками.]
|
||||||
|
501 [Броня кротитов] [В одной из потайных комнат Храма силы я отыскала эту древнюю броню - когда-то ее надевали воины кротитов.]
|
||||||
|
502 [Идол силы] [В этой небольшой статуэтке пылала неукротимая воля народа кротитов к жизни.]
|
||||||
|
503 [Клык] [Опьяненная победой, я взяла один из клыков поверженного бога силы. Я решила оставить его на память...]
|
||||||
|
504 [Большое семя] [Я нашла это огромное семя в моем убежище. Когда я посадила его у себя дома, оно проклюнулось и превратилось в чудесный сад.]
|
||||||
|
505 [Броня краба] [Я смастерила эту броню из панциря гигантского краба. Она отлично защищала меня в путешествиях.]
|
||||||
|
506 [Светящееся растение] [Его свет привлекал медуз из глубин моря.]
|
||||||
|
507 [Амфора Миталаса] [В этой амфоре никогда не кончалось мясо для моей кухни.]
|
||||||
|
508 [Броня Арнасси] [Я выиграла эту броню, пройдя все препятствия Арнасси за рекордно короткое время. В ней мне гораздо легче управляться с морскими коньками.]
|
||||||
|
509 [Странный сосуд] [Меня позабавили воздушные пузырьки внутри этого странного сосуда.]
|
||||||
|
510 [Штандарт Миталаса] [Я взяла с собой этот флаг, чтобы он напоминал мне о времени, которое я провела в стенах древнего города.]
|
||||||
|
511 [Кукла из Миталаса] [Судя по всему, эта кукла принадлежала маленькой девочке, которая жила в Миталасе задолго до его гибели.]
|
||||||
|
512 [Детеныш ходунца] [Быть может, когда-нибудь он вырастет таким же высоким и красивым, как и его родители в лесу водорослей?]
|
||||||
|
513 [Мешочек с семенами] [Я посадила эти семена на песчаном дне моей пещеры. Очень скоро там проклюнулись первые листочки.]
|
||||||
|
514 [Статуя Арнасси] [Эту статую я разыскала в руинах уничтоженной цивилизации.]
|
||||||
|
515 [Шестерня] [Я подумала, что было бы забавно поставить у себя дома такую штуку.]
|
||||||
|
516 [Солнечный ключ] [Странный блестящий предмет… Я не знаю, для чего он нужен, но пусть будет.]
|
||||||
|
517 [Костюм морского ежа] [Этот шипастый костюм я смастерила из раковин морских ежей. Его иголки кололи любого, кто пытался приблизиться ко мне.]
|
||||||
|
518 [Купальник-бикини] [Он очень мне идет.]
|
||||||
|
519 [Костюм мутанта] [Почему они были так похожи на меня...]
|
||||||
|
520 [Костюм медузы] [Этот костюм я получила после победы над королем медуз. Он смягчал боль и лечил мои раны, когда я чувствовала себя совсем плохо.]
|
||||||
|
521 [Платье из Миталаса] [Церемониальное одеяние, которое носила принцесса Миталаса.]
|
||||||
|
522 [Семечко анемоны] [Когда я посадила его в моей пещере, очень скоро в ней распустились яркие подводные цветы.]
|
||||||
|
523 [Светящееся семечко] [Из этого семечка в моей пещере выросли чудесные светящиеся растения.]
|
||||||
|
524 [Черепашье яйцо] [Я нашла это яйцо в Пещере черепах]
|
||||||
|
525 [Череп короля] [Интересно, как он угодил в такое место?]
|
||||||
|
526 [Трезубец принца] [Это оружие прежде принадлежало принцу Миталаса.]
|
||||||
|
527 [Поющая спора] [Споры этого растения отзывались на музыку моей песни.]
|
||||||
|
528 [Икринка медузы] [Икринка странной перевернутой медузы.]
|
||||||
|
529 [Каменная голова] [Я не могла понять, было ли это лицо создано природой, или его высекли чьи-то руки?]
|
||||||
|
530 [Золотая звезда] [Особенная морская звезда, наполненная теплыми лучами солнца.]
|
||||||
|
531 [Черная жемчужина] [Прекрасная черная жемчужина, которую я нашла в глубокой пещере.]
|
||||||
|
532 [Колыбелька] [Одного взгляда на этот предмет хватило, чтобы на меня накатила волна ярких воспоминаний.]
|
||||||
|
600 Питомцы
|
||||||
|
601 [Наутилус] [Изо всех сил врезается во врагов.]
|
||||||
|
602 [Неуклюжка] [Светится и помогает не заблудиться в темноте]
|
||||||
|
603 [Бластер] [Стреляет по ближайшим врагам]
|
||||||
|
604 [Пиранья] [Больно кусает врагов, подплывших близко]
|
||||||
|
799 Загадочная ошибка
|
||||||
|
800 Найдено одно воспоминание Найи
|
||||||
|
801 Найдены два воспоминания Найи
|
||||||
|
802 Найдены все воспоминания Найи - новый эпилог
|
||||||
|
850 Конец демонстрационной версии
|
||||||
|
851 Неверный путь!
|
||||||
|
852 Круг
|
||||||
|
853 пройден!
|
||||||
|
860 Введите описание метки:
|
||||||
|
1000 Бойлерная
|
||||||
|
1001 Кит
|
||||||
|
1002 Замерзшая грань
|
||||||
|
1003 Воздушная пещера
|
||||||
|
1004 Храм силы
|
||||||
|
1005 Дом Найи
|
||||||
|
1006 Пещера Песни
|
||||||
|
1007 Пещера песен
|
||||||
|
1008 Знакомые воды
|
||||||
|
1009 Открытые воды
|
||||||
|
1010 Лес водорослей
|
||||||
|
1011 Миталас
|
||||||
|
1012 Собор Миталаса
|
||||||
|
1013 Храм солнца
|
||||||
|
1014 Грань
|
||||||
|
1015 Бездна
|
||||||
|
1016 Затонувший город
|
||||||
|
1017 Пещера рыбок
|
||||||
|
1018 Пещера осьминогов
|
||||||
|
1019 Ледяная пещера
|
||||||
|
1020 ???
|
||||||
|
1021 Тело
|
||||||
|
1022
|
||||||
|
1023 Тайный ход
|
||||||
|
1024 Пещера мермогов
|
||||||
|
1025 Пещера лесных нимф
|
||||||
|
1026 Пещера рыбок
|
||||||
|
1027 Пещера черепах
|
||||||
|
1028 Руины Арнасси
|
||||||
|
1029 Пещера Ли
|
||||||
|
1030 Пещера короля медуз
|
||||||
|
2000 Сохранить игру
|
||||||
|
2001 Загрузить игру
|
Loading…
Add table
Reference in a new issue