1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-12-25 14:15:46 +00:00

Merge branch 'master' of /home/fg/fgone/Aquaria_fg_clean

This commit is contained in:
fgenesis 2012-06-27 21:59:09 +00:00
commit e09a4c13ef
27 changed files with 598 additions and 94 deletions

View file

@ -168,6 +168,15 @@ IngredientType Continuity::getIngredientTypeFromName(const std::string &name) co
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
{
if (idx < 0 || idx >= ingredients.size()) return 0;
@ -191,6 +200,7 @@ void Recipe::clear()
types.clear();
names.clear();
result = "";
resultDisplayName = "";
known = false;
}
@ -857,13 +867,6 @@ std::string Continuity::getIngredientAffectsString(IngredientData *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()
{
treasureData.clear();
@ -900,20 +903,6 @@ void Continuity::loadIngredientData(const std::string &file)
{
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();
recipes.clear();
@ -1060,7 +1049,6 @@ void Continuity::loadIngredientData(const std::string &file)
Recipe r;
while (in >> name)
{
r.result = name;
if (name == "+")
{
continue;
@ -1073,10 +1061,13 @@ void Continuity::loadIngredientData(const std::string &file)
else
{
if (quitNext)
{
r.result = name;
r.resultDisplayName = getIngredientDisplayName(name);
}
else
{
IngredientType it = dsq->continuity.getIngredientTypeFromName(name);
IngredientType it = getIngredientTypeFromName(name);
if (it == IT_NONE)
{
r.addName(name);
@ -1101,6 +1092,24 @@ void Continuity::loadIngredientData(const std::string &file)
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)
{
formUpgrades[form] = true;
@ -3231,12 +3240,23 @@ void Continuity::reset()
//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();
ingredientData.clear();
recipes.clear();
std::string fname;
if(dsq->mod.isActive())
{
//load mod ingredients

View file

@ -485,33 +485,38 @@ void DSQ::loadFonts()
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.fontBtmColor = Vector(0.5,0.8,1);
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.fontBtmColor = Vector(0.5,0.8,1);
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.fontBtmColor = Vector(1,0.8,0.5);
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.fontBtmColor = Vector(0.5,0.8,1);
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.fontBtmColor = Vector(0.6,0.5,0.25);
goldFont.overrideTexture = core->addTexture("font");
file = user.localisePath("data/font.ttf");
debugLog("ttf...");
arialFontData = (unsigned char *)readFile("data/font.ttf", &arialFontDataSize);
arialFontData = (unsigned char *)readFile(file, &arialFontDataSize);
if (arialFontData)
{
fontArialSmall .create(arialFontData, arialFontDataSize, 12);

View file

@ -696,10 +696,10 @@ struct IngredientEffect
class IngredientData
{
public:
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) {}
IngredientData(const std::string &name, const std::string &gfx, IngredientType type);
int getIndex() const;
const std::string name, gfx;
std::string displayName;
const IngredientType type;
int amount;
int held;
@ -747,6 +747,7 @@ public:
std::vector<RecipeType> types;
std::vector<RecipeName> names;
std::string result;
std::string resultDisplayName;
int index;
@ -1079,9 +1080,11 @@ public:
void applyIngredientEffects(IngredientData *data);
void loadIngredientData(const std::string &file);
void loadIngredientDisplayNames(const std::string& file);
bool hasIngredients() const { return !ingredients.empty(); }
IngredientDatas::size_type ingredientCount() const { return ingredients.size(); }
IngredientType getIngredientTypeFromName(const std::string &name) const;
std::string getIngredientDisplayName(const std::string& name) const;
void removeEmptyIngredients();
void spawnAllIngredients(const Vector &position);
@ -1130,7 +1133,6 @@ public:
IngredientDescriptions ingredientDescriptions;
std::string getIngredientAffectsString(IngredientData *data);
std::string getIngredientDescription(IngredientEffectType type);
WorldMap worldMap;
@ -1176,6 +1178,9 @@ private:
IngredientDatas ingredients; // held ingredients
IngredientDatas ingredientData; // all possible ingredients
typedef std::map<std::string,std::string> IngredientNameMap;
IngredientNameMap ingredientDisplayNames;
};
class Profile

View file

@ -635,7 +635,7 @@ void FoodSlot::onUpdate(float dt)
if ((core->mouse.position - getWorldPosition()).isLength2DIn(16))
//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->foodDescription->setText(dsq->continuity.getIngredientAffectsString(ingredient));
@ -7946,7 +7946,7 @@ void Game::toggleHelpScreen(bool on, const std::string &label)
#endif
// !!! 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);
helpBG = new Quad;
@ -11182,7 +11182,7 @@ void Game::learnedRecipe(Recipe *r, bool effects)
if (nocasecmp(dsq->getTopStateData()->name,"Game")==0 && !applyingState)
{
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);
if (data)
{

View file

@ -21,6 +21,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "Game.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
{

View file

@ -26,8 +26,7 @@ namespace RecipeMenuNamespace
std::string processFoodName(std::string name)
{
name = splitCamelCase(name);
int p = name.find(' ');
size_t p = name.find(' ');
if (p != std::string::npos)
{
name[p] = '\n';
@ -62,7 +61,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
text->color = 0;
text->position = result->position + Vector(0, 18);
text->setText(processFoodName(data->name));
text->setText(processFoodName(data->displayName));
addChild(text, PM_POINTER);
}
@ -99,7 +98,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
text->scale = Vector(0.7, 0.7);
text->color = 0;
text->position = ing[c]->position + Vector(0, 18);
text->setText(processFoodName(data->name));
text->setText(processFoodName(data->displayName));
addChild(text, PM_POINTER);
if (c < size)
@ -132,15 +131,16 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
std::string typeName = recipe->types[i].typeName;
int loc = typeName.find("Type");
size_t loc = typeName.find("Type");
if (loc != std::string::npos)
{
typeName = typeName.substr(0, loc) + typeName.substr(loc+4, typeName.size());
}
typeName = dsq->continuity.getIngredientDisplayName(typeName);
if (typeName != "Anything")
typeName = std::string("Any\n") + typeName;
if (recipe->types[i].type != IT_ANYTHING)
typeName = dsq->continuity.stringBank.get(2031) + "\n" + typeName;
else
typeName = std::string("\n") + typeName;

View file

@ -5755,6 +5755,33 @@ luaFunc(entity_pullEntities)
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)
{
Entity *e = entity(L);
@ -7415,6 +7442,7 @@ static const struct {
luaRegister(entity_getVectorToEntity),
luaRegister(entity_getDistanceToTarget),
{ "entity_delete", l_entity_delete_override },
luaRegister(entity_move),
luaRegister(entity_getID),

View file

@ -28,6 +28,12 @@ void StringBank::load()
{
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");
_load(fname);

View file

@ -141,7 +141,7 @@ unsigned hash(const std::string &string)
unsigned hash = 5381;
for (int i = 0; i < string.size(); i++)
hash = ((hash << 5) + hash) + string[i];
hash = ((hash << 5) + hash) + (unsigned char)string[i];
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);
}
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)
{
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 'a' && s[i] <= 'z')
{
s[i] = s[i]-'a' + 'A';
}
}
s[i] = charToUpper(s[i]);
}
void stringToLower(std::string &s)
{
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 'A' && s[i] <= 'Z')
{
s[i] = s[i]-'A' + 'a';
}
}
s[i] = charToLower(s[i]);
}
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
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 (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
return (charToUpper(*it1) < charToUpper(*it2)) ? -1 : 1;
//proceed to the next character in each string
++it1;
++it2;
@ -261,18 +267,6 @@ int nocasecmp(const std::string &s1, const std::string &s2)
}
#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 e = false;

View file

@ -139,6 +139,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "math.h"
#include "FileAPI.h"
#ifdef BBGE_BUILD_LINUX
# include <sys/types.h>
# include <stdint.h>
#endif
// dumb win32 includes/defines cleanup
#undef GetCharWidth
@ -220,7 +225,6 @@ static inline int nocasecmp(const char *s1, const char *s2)
#else
int nocasecmp(const std::string &s1, const std::string &s2);
#endif
std::string upperCase(const std::string &s1);
Vector getNearestPointOnLine(Vector start, Vector end, Vector point);
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius=1, Vector* closest=0);
void sizePowerOf2Texture(int &v);

View file

@ -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
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "Core.h"
#if defined(BBGE_BUILD_WINDOWS) && defined(BBGE_BUILD_XINPUT)
@ -68,6 +69,8 @@ bool tryXInput()
#ifdef __LINUX__
#include <sys/types.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>
#include <errno.h>

View file

@ -240,7 +240,6 @@ public:
BB_MAKE_WRITE_OP(uint64);
BB_MAKE_WRITE_OP(float);
BB_MAKE_WRITE_OP(double);
BB_MAKE_WRITE_OP(int);
ByteBuffer &operator<<(bool value)
{
@ -271,7 +270,6 @@ public:
BB_MAKE_READ_OP(uint64);
BB_MAKE_READ_OP(float);
BB_MAKE_READ_OP(double);
BB_MAKE_READ_OP(int);
ByteBuffer &operator>>(bool &value)
{

View file

@ -74,16 +74,14 @@ bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
vfclose(fh);
#endif
int dummy;
// Read the header from file
header.tex = tex;
bb >> dummy; // skip tex field
bb >> header.tex_width;
bb >> header.tex_height;
bb >> header.start_char;
bb >> header.end_char;
bb >> dummy; // skip chars field
bb.skipRead(4); // skip tex field
header.tex_width = bb.read<ByteBuffer::uint32>();
header.tex_height = bb.read<ByteBuffer::uint32>();
header.start_char = bb.read<ByteBuffer::uint32>();
header.end_char = bb.read<ByteBuffer::uint32>();
bb.skipRead(4); // skip chars field
//Allocate space for character array
num_chars = header.end_char - header.start_char + 1;
@ -197,7 +195,7 @@ int GLFont::GetEndChar (void)
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
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
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
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)
{
unsigned int i;
char c;
unsigned char c;
GLFontChar *glfont_char;
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++)
{
//Make sure character is in range
c = (char)text[i];
c = (unsigned char)text[i];
if (c < header.start_char || c > header.end_char)
continue;

View file

@ -36,9 +36,9 @@ private:
//glFont header structure
struct
{
int tex;
int tex_width, tex_height;
int start_char, end_char;
unsigned int tex;
unsigned int tex_width, tex_height;
unsigned int start_char, end_char;
GLFontChar *chars;
} header;
@ -70,9 +70,9 @@ public:
int GetEndChar (void);
//Character size retrieval methods
void GetCharSize (int c, std::pair<int, int> *size);
int GetCharWidth (int c);
int GetCharHeight (int c);
void GetCharSize (unsigned int c, std::pair<int, int> *size);
int GetCharWidth (unsigned int c);
int GetCharHeight (unsigned int c);
void GetStringSize (const std::string &text, std::pair<int, int> *size);

View file

@ -14,9 +14,12 @@
// -------------------------
#include <string>
#ifndef _WIN32
# include <stdint.h>
#endif
namespace minihttp
{

View 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

View file

@ -204,3 +204,5 @@
2028 |Browse & enable/disable installed patches
2029 |Browse mods online
2030 |Return to title
2031 Any
2032 [Achievements]

View file

@ -0,0 +1,2 @@
[Связующая песня]
Эта песня позволяет Найе поднимать и двигать округлые предметы, например камни. Спойте эту песню рядом с подходящим предметом, и он будет следовать за Найей, куда бы она ни отправилась.

View file

@ -0,0 +1,4 @@
[Дополнительная помощь]
Если вы окончательно запутались и не знаете, что делать дальше, загляните на форум aquaria.su и попросите совета у других игроков. :-)
~ Это все советы, которые могут вам пригодиться на данный момент. Удачи! ~

View file

@ -0,0 +1,4 @@
[Дополнительная помощь]
Если вы окончательно запутались и не знаете, что делать дальше, загляните на форум игры по адресу http://www.snowball.ru/forums/ или http://ambrosiasw.com/forums/ и попросите совета у других игроков. :-)
~ Это все советы, которые могут вам пригодиться на данный момент. Удачи! ~

View file

@ -0,0 +1,5 @@
[Форма силы]
В форме силы Найя может атаковать своих врагов. Щелкните правой кнопки мыши, и Найя поразит врага разрядом молнии, но если нажать и держать правую кнопку мыши, Найя одновременно выпустит несколько очень мощных разрядов. Есть и другие формы для атаки, попробуйте их разыскать!
[Возвращение в естественный облик]
Чтобы Найя приняла свое естественное обличье, нажмите левую и правую кнопки мыши одновременно - или нажмите клавишу X.

View file

@ -0,0 +1,3 @@
~ Аквария: руководство и помощь ~
Примечание: нажмите F1, чтобы вызвать этот экран. Вы можете воспользоваться помощью в любое время, когда вы можете управлять персонажем.

View file

@ -0,0 +1,3 @@
~ Аквария: руководство и помощь ~
Примечание: нажмите {ToggleHelp:k0}, чтобы вызвать этот экран. Вы можете воспользоваться помощью в любое время, когда вы можете управлять персонажем.

View file

@ -0,0 +1,2 @@
[Другие песни и обличья]
В водах Акварии вы найдете множество песен и новых обличий. Вам придется узнавать об их возможностях самостоятельно.

View file

@ -0,0 +1,56 @@
[Управление]
Все действия в игре "Аквария" можно выполнить при помощи мыши.
На клавиатуре левой кнопке мыши по умолчанию соответствует клавиша "Пробел", а правой - клавиша "Ctrl".
[Движение]
Нажмите и держите левую кнопку мыши, чтобы плыть. Вы также можете использовать клавиши A-S-D-W или клавиши со стрелками.
Нажмите и задержите левую кнопку мыши, отведя курсор от Найи, чтобы она сделала рывок вперед. Так Найя сможет ускользнуть от любого преследователя. Если вы играете с клавиатуры, чтобы выполнить рывок, нажмите пробел.
Если вы нажмете кнопку мыши сразу после рывка, Найя сделает кувырок.
Если во время рывка на пути у Найи окажется стена, то Найя ухватится за нее. Делая рывок со стены, Найя разгоняется еще сильнее.
Зажмите левую кнопку мыши и проведите курсором вокруг Найи, и она закружится. Это не только притянет к ней легкие предметы, оказавшиеся рядом, но и создаст волну, которая тоже оказывает некоторое воздействие на окружающих. Чтобы кружиться, также можно нажать клавишу R.
[Пение]
Нажмите и держите правую кнопку мыши или клавишу Ctrl, чтобы начать песню.
Когда Найя поет, вокруг нее появляются восемь нот. Наведите курсор на ноту, чтобы Найя ее спела. Разные существа Акварии реагируют на пение по-разному.
[Песни]
Во время странствий Найя найдет несколько песен. Выученные песни можно послушать в любой момент в меню игры. Песня - это определенная последовательность нот, которую надо повторять каждый раз, чтобы получить желаемый эффект. Каждая песня по-своему влияет на Найю и окружающий ее мир.
[Взаимодействие]
С некоторыми предметами в мире Акварии Найя может взаимодействовать. При наведении на такой предмет курсор начинает светиться. Нажмите правую кнопку мыши, чтобы с таким предметом что-нибудь сделать. Среди таких предметов кухонный стол Найи, ее постель, камни, на которых Найя может сидеть, а также кристаллы для сохранения игры.
[Сохранение игры]
Щелкните правой кнопкой мыши по красному кристаллу, чтобы вызвать меню сохраненных игр. Выберите ячейку, в которой следует сохранить ваши достижения.
[Мини-карта]
Мини-карта отображает мир, окружающий Найю. Золотым кружком отмечена пещера, в которой живет ваша героиня. Красные кружки показывают, где находятся кристаллы сохранения.
[Карта мира]
Двойной щелчок по мини-карте откроет карту мира. Здесь отмечены все зоны, которые вам уже известны. Щелкнув по зоне, вы увидите, какие ее части вы уже исследовали, а в каких вам еще предстоит побывать.
Щелкнув по пирамидке в правой части экрана, вы можете поместить на карту собственную отметку. Чтобы убрать отметку, щелкните по ней правой кнопкой мыши.
Большие круги, которые появляются на карте мира, называются маяками. Они показывают Найе новые места, которые ей предстоит посетить. Если вы запутались и не знаете, куда вам плыть дальше, попытайтесь отыскать на карте мира значок маяка.
[Еда]
Найя может создавать вкусные блюда из самых разных ингредиентов или из уже готовых блюд. Откройте экран кулинарии, перетащите по крайней мере два ингредиента на тарелочки в правой части экрана и щелкните по кнопке "Приготовить". Вы можете в любой момент посмотреть, из чего готовится то или иное блюдо, щелкнув по кнопке "Рецепты".
Маленькая кнопочка в верхнем левом углу экрана кулинарии позволит вам отсортировать найденные продукты.
Чтобы съесть блюдо, дважды щелкните по нему левой кнопкой мыши или поднесите его ко рту Найи. Перетащив еду на тарелку с крестиком, вы можете выбросить ее.
[Питомцы]
Вы можете выбрать питомца, который будет сопровождать вас, щелкнув по его икринке на экране питомцев. Если вы хотите путешествовать в одиночестве, щелкните по икринке выбранного питомца еще раз. Каждый из питомцев обладает уникальными способностями.
[Сокровища]
Редкие и необычные предметы, которые привлекают внимание Найи, она называет сокровищами. Отыскав такой предмет, просто прикоснитесь к нему, и он окажется в коллекции Найи. Полный список находок можно в любой момент просмотреть на экране сокровищ. Щелкните по стрелочкам над сокровищами, чтобы перейти к следующей странице.
Щелкнув по изображению сокровища, вы увидите его описание. Некоторые сокровища можно использовать. Для этого щелкните по соответствующей кнопке на этом же экране.
В мире Акварии спрятано немало сокровищ. Постарайтесь разыскать их все!

View 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 Пирог Зууны

View 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 Загрузить игру