1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2025-02-25 15:33:57 +00:00

Merge branch 'master' of file:///Users/User/code/coding/Aquaria_fg_clean

This commit is contained in:
fgenesis 2012-07-12 01:32:35 +01:00
commit 78e35ca5c9
48 changed files with 1793 additions and 342 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;
@ -1200,11 +1209,11 @@ void Continuity::loadSongBank()
songSlotNames.clear();
songBank.clear();
loadIntoSongBank(dsq->user.localisePath("data/songs.xml"));
loadIntoSongBank(localisePath("data/songs.xml"));
if (dsq->mod.isActive())
{
loadIntoSongBank(dsq->user.localisePath(dsq->mod.getPath() + "scripts/songs.xml", dsq->mod.getPath()));
loadIntoSongBank(localisePath(dsq->mod.getPath() + "scripts/songs.xml", dsq->mod.getPath()));
}
}
@ -2534,6 +2543,7 @@ void Continuity::loadFile(int slot)
{
dsq->user.save();
this->reset();
knowsSong.clear(); // Adds shield song by default, which interferes with mods that don't start with it
TiXmlDocument doc;
loadFileData(slot, doc);
@ -2897,7 +2907,9 @@ void Continuity::loadFile(int slot)
//dsq->game->transitionToScene();
}
// Possibly mod-specific data the the continuity reset didn't catch
loadSongBank();
this->worldMap.load();
}
void Continuity::setNaijaModel(std::string model)
@ -3231,23 +3243,32 @@ void Continuity::reset()
//load ingredients
ingredientDisplayNames.clear();
loadIngredientDisplayNames("data/ingredientnames.txt");
std::string fname = localisePath("data/ingredientnames.txt");
loadIngredientDisplayNames(fname);
if(dsq->mod.isActive())
{
fname = 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
fname = dsq->user.localisePath(dsq->mod.getPath() + "ingredients.txt", dsq->mod.getPath());
loadIngredientData(fname);
loadIngredientData(dsq->mod.getPath() + "ingredients.txt");
}
//load ingredients for the main game
if(ingredientData.empty() && recipes.empty()) {
fname = dsq->user.localisePath("data/ingredients.txt");
loadIngredientData(fname);
loadIngredientData("data/ingredients.txt");
}
loadPetData();

View file

@ -485,33 +485,38 @@ void DSQ::loadFonts()
destroyFonts();
font.load("data/font-small.glf", 1, false);
std::string file = 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 = 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);
@ -2162,9 +2167,7 @@ void DSQ::applyPatches()
vfs.MountExternalPath(mod.getBaseModPath().c_str(), "_mods");
}
// user wants mods, but not yet loaded
if(activePatches.size() && modEntries.empty())
loadMods();
loadMods();
for (std::set<std::string>::iterator it = activePatches.begin(); it != activePatches.end(); ++it)
for(int i = 0; i < modEntries.size(); ++i)

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));
@ -1971,30 +1971,13 @@ void Game::fillGridFromQuad(Quad *q, ObsType obsType, bool trim)
h2/=TILE_SIZE;
tpos.x -= w2;
tpos.y -= h2;
GLuint id = q->texture->textures[0];
int w = 0, h = 0;
glBindTexture(GL_TEXTURE_2D, id);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
//glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPONENTS, &c);// assume 4
unsigned int size = w*h*4;
if (!size || w <= 0 || h <= 0)
return;
unsigned char *data = (unsigned char*)malloc(size + 6);
memcpy(data + size, "SAFE", 5);
unsigned int size = 0;
unsigned char *data = q->texture->getBufferAndSize(&w, &h, &size);
if (!data)
{
errorLog("Game::fillGridFromQuad allocation failure");
return;
}
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_2D, 0);
// Not sure but this might be the case with nouveau drivers on linux... still investigating. -- fg
if(memcmp(data + size, "SAFE", 5))
{
errorLog("Game::fillGridFromQuad(): Broken graphics driver! Wrote past end of buffer!");
free(data); // in case we are here, this will most likely cause a crash.
debugLog("Failed to get buffer in Game::fillGridFromQuad()");
return;
}
@ -2041,16 +2024,13 @@ void Game::fillGridFromQuad(Quad *q, ObsType obsType, bool trim)
}
}
if (data)
{
free(data);
data = 0;
}
free(data);
if (trim)
{
std::vector<TileVector> obsCopy = obs;
obs.clear();
std::vector<TileVector> obsCopy;
obsCopy.swap(obs);
// obs now empty
int sides = 0;
for (int i = 0; i < obsCopy.size(); i++)
@ -2803,25 +2783,15 @@ void Game::generateCollisionMask(Quad *q, int overrideCollideRadius)
h2/=TILE_SIZE;
tpos.x -= w2;
tpos.y -= h2;
GLuint id = q->texture->textures[0];
int w = 0, h = 0;
glBindTexture(GL_TEXTURE_2D, id);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
//glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPONENTS, &c);// assume 4
unsigned int size = w*h*4;
if (!size || w <= 0 || h <= 0)
return;
unsigned char *data = (unsigned char*)malloc(size);
unsigned int size = 0;
unsigned char *data = q->texture->getBufferAndSize(&w, &h, &size);
if (!data)
{
debugLog("Could not malloc in Game::generateCollisionMask");
debugLog("Failed to get buffer in Game::generateCollisionMask()");
return;
}
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
q->collisionMaskRadius = 0;
@ -2865,6 +2835,10 @@ void Game::generateCollisionMask(Quad *q, int overrideCollideRadius)
}
}
q->collisionMaskRadius = 512;
free(data);
/*
for (int i = 0; i < q->collisionMask.size(); i++)
@ -2887,10 +2861,7 @@ void Game::generateCollisionMask(Quad *q, int overrideCollideRadius)
q->collisionMaskRadius = h2*2;
*/
//q->collisionMaskRadius = sqrtf(sqr(w2)+sqr(h2));
q->collisionMaskRadius = 512;
glBindTexture(GL_TEXTURE_2D, 0);
free(data);
/*
int rot = rotation.z;
while (rot > 360)
@ -7948,34 +7919,34 @@ void Game::toggleHelpScreen(bool on, const std::string &label)
// These say "Mac" but we use them on Linux, too.
#if defined(BBGE_BUILD_UNIX)
std::string fname = dsq->user.localisePath("data/help_header_mac.txt");
std::string fname = localisePath("data/help_header_mac.txt");
appendFileToString(data, fname);
#else
std::string fname = dsq->user.localisePath("data/help_header.txt");
std::string fname = localisePath("data/help_header.txt");
appendFileToString(data, fname);
#endif
if (dsq->continuity.hasSong(SONG_BIND)) {
fname = dsq->user.localisePath("data/help_bindsong.txt");
fname = localisePath("data/help_bindsong.txt");
appendFileToString(data, fname);
}
if (dsq->continuity.hasSong(SONG_ENERGYFORM)) {
fname = dsq->user.localisePath("data/help_energyform.txt");
fname = localisePath("data/help_energyform.txt");
appendFileToString(data, fname);
}
fname = dsq->user.localisePath("data/help_start.txt");
fname = localisePath("data/help_start.txt");
appendFileToString(data, fname);
// These say "Mac" but we use them on Linux, too.
#if defined(BBGE_BUILD_UNIX)
fname = dsq->user.localisePath("data/help_end_mac.txt");
fname = localisePath("data/help_end_mac.txt");
appendFileToString(data, fname);
#else
fname = dsq->user.localisePath("data/help_end.txt");
fname = localisePath("data/help_end.txt");
appendFileToString(data, fname);
#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;
@ -11211,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)
@ -130,17 +129,10 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
text->scale = Vector(0.8, 0.8);
text->position = Vector(100*c, 0); //-20
std::string typeName = recipe->types[i].typeName;
std::string typeName = dsq->continuity.getIngredientDisplayName(recipe->types[i].typeName);
int loc = typeName.find("Type");
if (loc != std::string::npos)
{
typeName = typeName.substr(0, loc) + typeName.substr(loc+4, typeName.size());
}
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

@ -988,6 +988,14 @@ luaFunc(obj_setTexture)
luaReturnNil();
}
luaFunc(obj_getTexture)
{
RenderObject *r = robj(L);
if (r && r->texture)
luaReturnStr(r->texture->name.c_str());
luaReturnStr("");
}
luaFunc(obj_delete)
{
RenderObject *r = robj(L);
@ -1490,6 +1498,7 @@ luaFunc(quad_setHeight)
RO_FUNC(getter, prefix, internalOffset ) \
RO_FUNC(getter, prefix, getInternalOffset) \
RO_FUNC(getter, prefix, getPosition ) \
RO_FUNC(getter, prefix, getTexture ) \
RO_FUNC(getter, prefix, x ) \
RO_FUNC(getter, prefix, y ) \
RO_FUNC(getter, prefix, setBlendType ) \
@ -5755,6 +5764,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);
@ -8047,6 +8083,7 @@ static const struct {
// -- overrides / special cases--
{"bone_getPosition", l_bone_getWorldPosition},
{ "entity_delete", l_entity_delete_override },
// -- deprecated/compatibility related functions below here --

View file

@ -174,7 +174,7 @@ void StatsAndAchievements::RunFrame()
VFILE *io = NULL;
// Get generic achievement data...
std::string fname = dsq->user.localisePath("data/achievements.txt");
std::string fname = localisePath("data/achievements.txt");
io = vfopen(fname.c_str(), "r");
char line[1024];
for (size_t i = 0; i < max_achievements; i++)

View file

@ -28,11 +28,17 @@ void StringBank::load()
{
stringMap.clear();
std::string fname = dsq->user.localisePath("data/stringbank.txt");
// 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 = localisePath("data/stringbank.txt");
_load(fname);
if (dsq->mod.isActive()) {
fname = dsq->user.localisePath(dsq->mod.getPath() + "stringbank.txt", dsq->mod.getPath());
fname = localisePath(dsq->mod.getPath() + "stringbank.txt", dsq->mod.getPath());
_load(fname);
}
}

View file

@ -46,7 +46,7 @@ void SubtitlePlayer::go(const std::string &subs)
if (dsq->mod.isActive())
{
f = dsq->mod.getPath() + "audio/" + subs + ".txt";
f = dsq->user.localisePath(f, dsq->mod.getPath());
f = localisePath(f, dsq->mod.getPath());
f = core->adjustFilenameCase(f);
if (exists(f))
checkAfter = false;
@ -55,7 +55,7 @@ void SubtitlePlayer::go(const std::string &subs)
if (checkAfter)
{
f = "scripts/vox/" + subs + ".txt";
f = dsq->user.localisePath(f);
f = localisePath(f);
f = core->adjustFilenameCase(f);
if (!exists(f))
{

View file

@ -28,31 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../ExternalLibs/tinyxml.h"
#endif
#ifdef BBGE_BUILD_WINDOWS
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#ifdef BBGE_BUILD_UNIX
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#endif
#ifdef BBGE_BUILD_MACOSX
#include <Carbon/Carbon.h>
#include <CoreFoundation/CFLocale.h>
#include <CoreFoundation/CFString.h>
// veeery clunky.
static std::string _CFToStdString(CFStringRef cs)
{
char buf[1024];
CFStringGetCString(cs, &buf[0], 2048, kCFStringEncodingUTF8);
return &buf[0];
}
#endif
void UserSettings::save()
{
@ -74,13 +49,11 @@ void UserSettings::save()
}
xml_system.InsertEndChild(xml_debugLog);
if (!system.isSystemLocale) {
TiXmlElement xml_locale("Locale");
{
xml_locale.SetAttribute("name", system.locale);
}
xml_system.InsertEndChild(xml_locale);
TiXmlElement xml_locale("Locale");
{
xml_locale.SetAttribute("name", system.locale);
}
xml_system.InsertEndChild(xml_locale);
}
doc.InsertEndChild(xml_system);
@ -555,14 +528,11 @@ void UserSettings::load(bool doApply, const std::string &overrideFile)
TiXmlElement *xml_net = doc.FirstChildElement("Network");
if (xml_net)
{
network.masterServer = xml_net->Attribute("masterServer");
const char *serv = xml_net->Attribute("masterServer");
if (serv)
network.masterServer = serv;
}
if (system.locale.empty())
getSystemLocale();
else
debugLog("use user config locale: " + system.locale);
//clearInputCodeMap();
if (doApply)
@ -603,93 +573,19 @@ void UserSettings::apply()
dsq->bindInput();
core->settings.prebufferSounds = audio.prebuffer;
#endif
}
std::string UserSettings::localisePath(const std::string &path, const std::string &modpath)
{
if (system.locale.empty())
return path;
const std::string fname = path.substr(modpath.length());
/* we first try with complete locale name, i.e "locales/en_US/" */
std::string localisedPath = modpath + "locales/" + system.locale + "/" + fname;
if (exists(localisedPath.c_str()))
return localisedPath;
/* ok didn't work, let's retry with only language part of locale name, i.e "locales/en/" */
const size_t found = system.locale.find('_');
/* hmm, seems like we didn't have a full locale name anyway, use original path */
if (found == string::npos)
return path;
localisedPath = modpath + "locales/" + system.locale.substr(0,found) + "/" + fname;
/* hooray we found a file! */
if (exists(localisedPath.c_str()))
return localisedPath;
/* seems like we don't have a localized version of the file available, use original path */
return path;
}
void UserSettings::getSystemLocale()
{
system.isSystemLocale = true;
#ifdef BBGE_BUILD_WINDOWS
LCID lcid = GetThreadLocale();
char buf[100];
char ctry[100];
if (GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, buf, sizeof buf) != 0)
{
system.locale = buf;
if (GetLocaleInfo(lcid, LOCALE_SISO3166CTRYNAME, ctry, sizeof ctry) != 0)
{
system.locale += "_";
system.locale += ctry;
}
std::string loc = getSystemLocale();
debugLog("Using autodetected system locale: " + loc);
setUsedLocale(loc);
}
#elif BBGE_BUILD_MACOSX
CFLocaleRef locale = CFLocaleCopyCurrent();
CFStringRef buf;
if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleLanguageCode)) != NULL)
{
system.locale = _CFToStdString(buf);
CFRelease(buf);
if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleCountryCode)) != NULL)
{
system.locale += "_";
system.locale += _CFToStdString(buf);
CFRelease(buf);
}
}
CFRelease(locale);
#else
const char *lang = (const char *)getenv("LANG");
if (lang && *lang)
{
system.locale = lang;
size_t found = system.locale.find('.');
if (found != string::npos)
system.locale.resize(found);
}
#endif
if (system.locale.empty())
debugLog("could not establish system locale");
else
debugLog("use system locale: " + system.locale);
{
debugLog("Using user config locale: " + system.locale);
setUsedLocale(system.locale);
}
#endif
}

View file

@ -77,9 +77,8 @@ class UserSettings
public:
struct System
{
System() { debugLogOn = 0; isSystemLocale = false; }
System() { debugLogOn = 0; }
int debugLogOn;
bool isSystemLocale;
std::string locale;
} system;
@ -182,8 +181,4 @@ public:
void load(bool doApply=true, const std::string &overrideFile="");
void save();
void apply();
std::string localisePath(const std::string &path, const std::string &modpath="");
private:
void getSystemLocale();
};

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

@ -1903,6 +1903,7 @@ bool Core::initGraphicsLibrary(int width, int height, bool fullscreen, int vsync
// putenv(), which takes a (char *), and freaks out newer GCC releases
// when you try to pass a (const!) string literal here... --ryan.
SDL_putenv((char *) "SDL_VIDEO_CENTERED=1");
SDL_putenv((char *) "LIBGL_DEBUG=verbose"); // temp, to track errors on linux with nouveau drivers.
if (recreate)
{

View file

@ -39,6 +39,7 @@ BUILD_LINUX
#include "Flags.h"
//#include "Scripting.h"
#include "Effects.h"
#include "Localization.h"
#include "DarkLayer.h"

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>

120
BBGE/Localization.cpp Normal file
View file

@ -0,0 +1,120 @@
#include "Localization.h"
#ifdef BBGE_BUILD_WINDOWS
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#ifdef BBGE_BUILD_UNIX
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#endif
#ifdef BBGE_BUILD_MACOSX
#include <Carbon/Carbon.h>
#include <CoreFoundation/CFLocale.h>
#include <CoreFoundation/CFString.h>
// veeery clunky.
static std::string _CFToStdString(CFStringRef cs)
{
char buf[1024];
CFStringGetCString(cs, &buf[0], 1024, kCFStringEncodingUTF8);
return &buf[0];
}
#endif
static std::string s_locale;
void setUsedLocale(const std::string& s)
{
s_locale = s;
}
std::string localisePath(const std::string &path, const std::string &modpath /* = "" */)
{
if (s_locale.empty())
return path;
const std::string fname = path.substr(modpath.length());
/* we first try with complete locale name, i.e "locales/en_US/" */
std::string localisedPath = modpath + "locales/" + s_locale + "/" + fname;
if (exists(localisedPath.c_str()))
return localisedPath;
/* ok didn't work, let's retry with only language part of locale name, i.e "locales/en/" */
const size_t found = s_locale.find('_');
/* hmm, seems like we didn't have a full locale name anyway, use original path */
if (found == std::string::npos)
return path;
localisedPath = modpath + "locales/" + s_locale.substr(0,found) + "/" + fname;
/* hooray we found a file! */
if (exists(localisedPath.c_str()))
return localisedPath;
/* seems like we don't have a localized version of the file available, use original path */
return path;
}
std::string getSystemLocale()
{
std::string localeStr;
#ifdef BBGE_BUILD_WINDOWS
LCID lcid = GetThreadLocale();
char buf[100];
char ctry[100];
if (GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, buf, sizeof buf) != 0)
{
localeStr = buf;
if (GetLocaleInfo(lcid, LOCALE_SISO3166CTRYNAME, ctry, sizeof ctry) != 0)
{
localeStr += "_";
localeStr += ctry;
}
}
#elif BBGE_BUILD_MACOSX
CFLocaleRef locale = CFLocaleCopyCurrent();
CFStringRef buf;
if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleLanguageCode)) != NULL)
{
localeStr = _CFToStdString(buf);
CFRelease(buf);
if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleCountryCode)) != NULL)
{
localeStr += "_";
localeStr += _CFToStdString(buf);
CFRelease(buf);
}
}
CFRelease(locale);
#else
const char *lang = (const char *)getenv("LANG");
if (lang && *lang)
{
localeStr = lang;
size_t found = localeStr.find('.');
if (found != string::npos)
localeStr.resize(found);
}
#endif
return localeStr;
}

10
BBGE/Localization.h Normal file
View file

@ -0,0 +1,10 @@
#ifndef LOCALIZATION_H
#define LOCALIZATION_H
#include "Base.h"
void setUsedLocale(const std::string& s);
std::string localisePath(const std::string &path, const std::string &modpath = "");
std::string getSystemLocale();
#endif

View file

@ -18,8 +18,9 @@ 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 "SoundManager.h"
#include "Core.h"
#include "SoundManager.h"
#include "Base.h"
#include "PackRead.h"

View file

@ -195,22 +195,10 @@ int Texture::getPixelWidth()
{
#ifdef BBGE_BUILD_OPENGL
int w = 0, h = 0;
glBindTexture(GL_TEXTURE_2D, textures[0]);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
//glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPONENTS, &c);// assume 4
unsigned int size = w*h*4;
if (!size || w <= 0 || h <= 0)
return 0;
unsigned char *data = (unsigned char*)malloc(size*sizeof(char));
unsigned int size = 0;
unsigned char *data = getBufferAndSize(&w, &h, &size);
if (!data)
{
debugLog("Texture::getPixelWidth() malloc failed");
return 0;
}
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
int smallestx = -1, largestx = -1;
for (unsigned int x = 0; x < unsigned(w); x++)
@ -227,7 +215,6 @@ int Texture::getPixelWidth()
}
}
}
glBindTexture(GL_TEXTURE_2D, 0);
free(data);
return largestx - smallestx;
#elif defined(BBGE_BUILD_DIRECTX)
@ -239,20 +226,11 @@ int Texture::getPixelHeight()
{
#ifdef BBGE_BUILD_OPENGL
int w = 0, h = 0;
glBindTexture(GL_TEXTURE_2D, textures[0]);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
//glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPONENTS, &c);// assume 4
unsigned int size = w*h*4;
if (!size || w <= 0 || h <= 0)
return 0;
unsigned char *data = (unsigned char*)malloc(size*sizeof(char));
unsigned int size = 0;
unsigned char *data = getBufferAndSize(&w, &h, &size);
if (!data)
{
debugLog("Texture::getPixelHeight() malloc failed");
return 0;
}
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
int smallesty = -1, largesty = -1;
for (unsigned int x = 0; x < unsigned(w); x++)
{
@ -268,7 +246,6 @@ int Texture::getPixelHeight()
}
}
}
glBindTexture(GL_TEXTURE_2D, 0);
free(data);
return largesty - smallesty;
#elif defined(BBGE_BUILD_DIRECTX)
@ -304,9 +281,6 @@ void Texture::load(std::string file)
return;
}
stringToLowerUserData(file);
file = core->adjustFilenameCase(file);
loadName = file;
repeating = false;
@ -321,26 +295,28 @@ void Texture::load(std::string file)
pos = std::string::npos;
}
if (core->debugLogTextures)
/*if (core->debugLogTextures)
{
std::ostringstream os;
os << "pos [" << pos << "], file :" << file;
debugLog(os.str());
}*/
bool found = exists(file);
if(!found && exists(file + ".png"))
{
found = true;
file += ".png";
}
bool found = exists(file);
if(!found && exists(file + ".png"))
{
found = true;
file += ".png";
}
// .tga/.zga are never used as game graphics anywhere except save slot thumbnails.
// if so, their file names are passed exact, not with a missing extension
// .tga/.zga are never used as game graphics anywhere except save slot thumbnails.
// if so, their file names are passed exact, not with a missing extension
if (found)
{
file = localisePath(file);
/*
std::ostringstream os;
os << "Loading texture [" << file << "]";
@ -827,3 +803,86 @@ ImageTGA *Texture::TGAloadMem(void *mem, int size)
return pImageData;
}
// ceil to next power of 2
static unsigned int clp2(unsigned int x)
{
--x;
x |= (x >> 1);
x |= (x >> 2);
x |= (x >> 4);
x |= (x >> 8);
x |= (x >> 16);
return x + 1;
}
unsigned char * Texture::getBufferAndSize(int *wparam, int *hparam, unsigned int *sizeparam)
{
unsigned char *data = NULL;
unsigned int size = 0;
int tw = 0, th = 0;
int w = 0, h = 0;
// This can't happen. If it does we're doomed.
if(width <= 0 || height <= 0)
goto fail;
glBindTexture(GL_TEXTURE_2D, textures[0]);
// As returned by graphics driver
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);
// As we know it - but round to nearest power of 2 - OpenGL does this internally anyways.
tw = clp2(width); // known to be > 0.
th = clp2(height);
if (w != tw || h != th)
{
std::ostringstream os;
os << "Texture::getBufferAndSize() WARNING: width/height disagree: ";
os << "Driver says (" << w << ", " << h << "); ";
os << "Texture says (" << width << ", " << height << "); ";
os << "Rounded to (" << tw << ", " << th << ")";
debugLog(os.str());
// choose max. for size calculation
w = w > tw ? w : tw;
h = h > th ? h : th;
}
size = w * h * 4;
if (!size)
goto fail;
data = (unsigned char*)malloc(size + 32);
if (!data)
{
std::ostringstream os;
os << "Game::fillGridFromQuad allocation failure, size = " << size;
errorLog(os.str());
goto fail;
}
memcpy(data + size, "SAFE", 5);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_2D, 0);
// Not sure but this might be the case with nouveau drivers on linux... still investigating. -- fg
if(memcmp(data + size, "SAFE", 5))
{
errorLog("Texture::getBufferAndSize(): Broken graphics driver! Wrote past end of buffer!");
free(data); // in case we are here, this will most likely cause a crash.
goto fail;
}
*wparam = w;
*hparam = h;
*sizeparam = size;
return data;
fail:
*wparam = 0;
*hparam = 0;
*sizeparam = 0;
return NULL;
}

View file

@ -80,6 +80,9 @@ public:
void write(int tx, int ty, int w, int h, const unsigned char *pixels);
void read(int tx, int ty, int w, int h, unsigned char *pixels);
unsigned char *getBufferAndSize(int *w, int *h, unsigned int *size); // returned memory must be free()'d
protected:
std::string loadName;

View file

@ -386,6 +386,7 @@ SET(BBGE_SRCS
${BBGEDIR}/Interpolator.cpp
${BBGEDIR}/Joystick.cpp
${BBGEDIR}/LensFlare.cpp
${BBGEDIR}/Localization.cpp
${BBGEDIR}/Math.cpp
${BBGEDIR}/MT.cpp
${BBGEDIR}/ParticleEffect.cpp

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

@ -47,7 +47,7 @@ GLFont::~GLFont ()
//*******************************************************************
bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
{
int num_chars, num_tex_bytes;
ByteBuffer::uint32 num_chars, num_tex_bytes;
char *tex_bytes;
//Destroy the old font if there was one, just to be safe
@ -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;
@ -91,7 +89,7 @@ bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
return false;
//Read character array
for (int i = 0; i < num_chars; i++)
for (unsigned int i = 0; i < num_chars; i++)
{
bb >> header.chars[i].dx;
bb >> header.chars[i].dy;
@ -104,8 +102,8 @@ bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
//Read texture pixel data
num_tex_bytes = header.tex_width * header.tex_height * 2;
tex_bytes = new char[num_tex_bytes];
//input.read(tex_bytes, num_tex_bytes);
bb.read(tex_bytes, num_tex_bytes);
// HACK: Aquaria uses override textures, so we can live with the truncation.
bb.read(tex_bytes, std::min(num_tex_bytes, bb.readable()));
//Build2DMipmaps(3, header.tex_width, header.tex_height, GL_UNSIGNED_BYTE, tex_bytes, 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
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]

Binary file not shown.

Binary file not shown.

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,207 @@
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 Загрузить игру
2002 Слот
2003 Пусто
2004 ~Пауза~
2005 'S' - пропустить
2006 Стр.
2007 Рецепты
2008 error
2009 No Description
2010 Stopped Recording
2011 Stopped Playback
2013 health
2014 Enter Flag to Set
2015 Enter Value to Set Flag To
2016 Entity data not found! Aborting...
2017 Variables data not found! Aborting...
2018 Particle Name:
2019 Saved worldmap data to
2020 Unable to save worldmap to
2021 Unable to retrieve online mod list.|Check your connection and try again.
2022 Server error!|Bad XML, please contact server admin.|URL:
2023 Finished downloading mod
2024 Download update?
2025 Mod already exists. Re-download?
2026 This mod was installed manually,|not messing with it.
2027 |Browse installed mods
2028 |Browse & enable/disable installed patches
2029 |Browse mods online
2030 |Return to title
2031 Что
2032 [Achievements]

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View file

@ -0,0 +1,431 @@
0 Crotoid Crotoid 1
86 Seal-King Seal-King
87 Seal-Queen Seal-Queen
88 Seal-Prince Seal-Prince
90 HealthUpgrade0 HealthUpgrade/Whole
91 HealthUpgrade1 HealthUpgrade/Whole
92 HealthUpgrade2 HealthUpgrade/Whole
93 HealthUpgrade3 HealthUpgrade/Whole
94 HealthUpgrade4 HealthUpgrade/Whole
110 SporeChildFlowerRed SporeChildFlower/Red1
120 Ekkrit Ekkrit/Head
121 Flea Flea
122 GreenSeaDragon GreenSeaDragon/Head
123 Blazer Blazer
124 Seahorse SeaHorse/Seahorse-0001
125 Moloch moloch
126 Loper Loper
127 Splitter1 Splitter1/Core
128 Splitter2 Splitter2/Core
129 Rotfish-blob Rotfish-blob
130 Rotfish Rotfish
131 Rotworm Rotworm/Head
132 Gear Gear/Gear
133 CrystalHolder LightCrystal/Holder
134 LightCrystal LightCrystal/Crystal
135 Shark Shark/Body
136 Monkey Monkey/Head
137 Simon Simon/Body
138 TransTurtle TransTurtle/Head
139 FormUpgradeEnergy1 EnergyOrb
140 FormUpgradeEnergy2 FormUpgrades/EnergyIdol
141 FormUpgradeBeast EnergyOrb
142 EvilJelly EvilJelly
143 KingJelly KingJelly/Core
144 SunkenDad SunkenDad/Head
145 SunkenMom SunkenMom/Head
146 DeepUrchin DeepUrchin/Body
147 AnglerFish AnglerFish/Body
148 Plasmaworm Plasmaworm/Body
149 PredatoryTunicate PredatoryTunicate/Body
150 Octomun Octomun/Body
151 ClockworkFish ClockworkFish/Head
152 ClockworkCrab ClockworkCrab/Shell
153 CrawPappy CrawPappy/Body
156 LightCrystalCharged LightCrystal/Crystal
157 SpikeyEggDown SpikeyEgg
158 Scavenger Scavenger/Head
159 CC_LostInCave CC/Body
160 CC_Mother CC_Mother/Body
161 CC_MissingMom CC/Body
162 CC_GF CC_GF/Body
163 SporeSeed Seed
164 Vine Vine
165 CC_WantGF CC/Body
166 CC_Cat CC_Cat/Body
167 CC_Kid CC_Kid/Body
168 CC_GetRocked CC/Body
169 13_MainArea 13/Face
170 SpiderCrab SpiderCrab/Body
171 SpikyBall SpikyBall/Body
172 CC_StatueHead MissingImage
173 MossHead MossHead/Head
174 NatureFormFlowers Naija/Flowers
175 NudiBranch0 NudiBranch/NudiBranch0
176 NudiBranch1 NudiBranch/NudiBranch1
177 NudiBranch2 NudiBranch/NudiBranch2
178 NudiBranch3 NudiBranch/NudiBranch3
180 Dandelion Dandelion/Head
181 UberVine Naija/Ubervine-Stalk
182 SporeChildFlowerPortal TubeFlower/Body1
183 Zygote Zygote/Head
184 MomEyes SunkenMom/MomEyes
185 CreatorShadow creator-shadow
186 CathedralDoor CathedralDoor/Body
187 SunkenDoor SunkenDoor/Body
188 LiHelmet Li/Helmet
189 Parrot Parrot/Head
190 CaveFish1 CaveFish
191 CaveFish2 CaveFish
192 CaveFish3 CaveFish
193 CaveFish4 CaveFish
194 OriginalRaspberry OriginalRaspberry
195 Skeeter Skeeter/Body
196 Wisker Wisker/Wisker
197 RedNautilus RedNautilus
198 Toad Toad/Head
199 SpikeyEggUp SpikeyEgg
201 CC_EndDemo CC/Body
202 BigMouth BigMouth/Body
203 BigMouthParasite BigMouth/Parasite
204 FlatFish FlatFish/Body
205 MetaRay MetaRay/Body
206 Clam Clam/Top
207 Tabar Tabar/Body
208 HorseShoe HorseShoe/Body
209 PufferFish PufferFish/PufferSmall
210 Tabar Tabar/Body
211 Swordfish Swordfish/Body
212 SpinyCrab SpinyCrab/Body
213 DeepEel DeepEel/Tail
214 AbyssSpikes Abyss-Spikes
215 Wisp Wisp
216 Triffle Triffle/Body
217 BabyDeepShrimp BabyDeepShrimp
218 ThermalVent thermalvent
219 SlenderEel SlenderEel
220 DeepJelly DeepJelly/Bulb
221 Mermog Mermog/Body
222 RotBaby-Form1 RotBaby/Form1
223 RotBaby-Form2 RotBaby/Form2
224 RotBaby-Form3 RotBaby/Form3-Body
225 Orbiter Orbiter/Body
226 Piranha Piranha
227 UpsideDownJelly UpsideDownJelly/Body
228 Kappa Kappa/Head
229 Seahorse2 Seahorse/Seahorse-0002
230 Seahorse3 Seahorse/Seahorse-0003
231 Seahorse4 Seahorse/Seahorse-0004
232 DarkJelly DarkJelly/Front
233 SnailGear SnailGear/Shell
234 Seahorse5 Seahorse/Seahorse-0005
235 CC_SunkenCity CC/Body
236 AbyssOctopus AbyssOctopus/Head
237 Mutilus Mutilus/Mutilus
238 Horror Horror/Body
239 StressTest missingImage
240 Abaddon Abaddon/Face
241 Bevy Bevy/Body
242 Huggy Huggy/Head
243 Krill Krill/Krill
244 KrillEggs Krill/KrillEggs
245 Starmie1 Starmie/Body
246 Chomper Chomper/Head
247 Armapillar Armapillar/Body
248 Duoeye Duoeye-head
249 ekko ekko/Body
250 SeaTurtleBig SeaTurtle/Head
251 Rukh Rukh/Head
252 Starmie2 Starmie2/Body
253 JellyNew Jelly
254 SeedFlower SeedFlower
255 SeedUberVine SeedUberVine
256 GroundShocker GroundShocker/Core
257 GroundShockerShell GroundShocker/Shell
258 Spookfish Spookfish/Body
259 Mutileye Mutileye/Head
260 GroundShockerAttackL GroundShocker/Shell
261 GroundShockerAttackR GroundShocker/Shell
262 SeaTurtleSmall SeaTurtle/Head
263 JellyZap JellyZap/Head
264 BiteyMouth BiteyMouth/Teeth
265 SeaTurtleBaby BabyTurtle/Head
266 IceChunkLarge IceChunk/Large
267 IceChunkMedium IceChunk/Medium
268 IceChunkSmall IceChunk/Small
269 GrabbyArm GrabbyArm/Front
270 IceCrab IceCrab/Body
271 Walker Walker/Head
272 CreepyFace CreepyFace/Face
273 cc_father cc_father/body
274 SeaTurtleBaby-Special1 babyturtle-special/shell
275 SeaTurtleBaby-Special2 babyturtle-special/shell2
276 SeaTurtleBaby-Special3 babyturtle-special/shell3
277 ancient-plant ancient-plant/stem
278 ancient-bulb ancient-plant/bulb
75 CurrentSwitchOff CurrentSwitch
76 CurrentSwitchOn CurrentSwitch
81 SacrificeButton SacrificeButton-bg
82 ForestGod ForestGod/bg
83 SunWorm SunWorm/Head
84 ForestGodSeed SporeChildSeed
85 ForestGodCrab KingCrab-Head 1
77 Altar Altar/Grate-Front
78 RotCore RotCore/Body
79 SacrificeVictim EnergyOrb
70 MermanThin MermanThin/Head
71 SporeFungus0001 SporeFungus0001
72 Fan Fan
73 Priest Priest/Head
74 Li Li/Head
80 HellBeast HellBeast/Head
57 RockHead Fish-RockHead 1
1 Raspberry wallshooter 0.75
2 Squiddy squiddy 1.0
3 Nautilus nautilus 0.7
4 Moneye moneye-head 0.4
5 Anemone Anemone 1
60 Anemone2 Anemone-0002 1
61 Anemone3 Anemone-0003 1
62 Anemone4 Anemone-0004 1
6 Blaster Blaster/Core 1
7 Leach Leach 1
8 JellySmall JellySmallShell 1
9 MoneyeBreeder MoneyeBreeder 1
10 KingCrab KingCrab-Head 1
11 SeaSlug missingImage 1
12 Trillious trillious-head 1
13 Scooter Scooter 1
14 Lumite missingImage 1
15 Empty missingImage 1
16 RoodShrimp RoodShrimp 1
17 Shocker Shocker-Body 1
18 Turret Turret-Body 1
19 Jelly Jelly 1
20 NewtBlaster NewtBlasterHead 1
21 Maul maul 1
22 SpikeBall spikeball 1
23 AggroHopper AggroHopper-Head 0.5
24 Froog Froog-Head 0.5
25 LesserWurm LesserWurm-Head 1.0
26 Squeezer Squeezer-Head 1.0
30 OrbHolder OrbHolder 1
31 EnergyOrb EnergyOrb 1
32 EnergyDoor EnergyDoor 1
33 EnergyBarrierFlicker EnergyBarrier 1
34 MetalObject MetalObject 1
35 EnergyBarrierSolid EnergyBarrier 1
36 Tromulo Tromulo 1
37 Eel eel-0001 1
38 EnergyOrbCracked EnergyOrbCracked 1
39 EnergyBarrierOff EnergyBarrier 1
40 HydraWurm Wurm-Head 1
41 Turtle Turtle-Body 1
42 Nudi Nudi-Shell 1
43 Shrimp Shrimp 1
50 Rock0001 rock0001 1
63 Rock0002 rock0002 1
64 Rock0003 rock0003 1
65 Rock0004 rock0004 1
66 Rock0005 rock0005 1
67 Rock0006 rock0006 1
52 SongSpore SongSpore-Shell 1
53 SongStalk SongStalk-Body 1
54 Phonograph Phonograph 1
55 JellyShock JellyShock 1
56 HealthPlant HealthPlant 1
102 ErulianGhost ErulianGhost-Body 1
103 TempleStatue temple-statue-0001 1
300 TurtleNoShell EnergyOrb 1
301 NudiNoShell Nudi-Body 1
302 ClayStatue Clay/Head
303 Clay Clay/Clay
304 CreatorForm1SunkenCity Creator/Form1/Head
305 CC_Final CC/Head
306 CC_EndOfGame CC/Head
307 Drask-Final Drask/Head
308 Krotite-Final Krotite/Head
309 Erulian-Final Erulian/Head
310 Druniad-Final Druniad/Head
311 FinalDoor Final-Door
312 FinalTongue Final-Tongue
313 Moray Moray
314 BigBlaster BigBlaster/Core
315 DarkJellyFG DarkJelly/Front
316 GearSlow Gear/Gear
317 GearMed Gear/Gear
318 GearFast Gear/Gear
319 YoungLi YoungLi/Head
320 NaijaChild NaijaChild/Head
321 StrangeCreature StrangeCreature/Head
322 SongLamp3 Particles/Glow
323 SongLamp4 Particles/Glow
324 SongLamp5 Particles/Glow
325 SongLamp6 Particles/Glow
326 SongLamp7 Particles/Glow
327 SongLamp0 Particles/Glow
328 SongLamp1 Particles/Glow
329 SongLamp2 Particles/Glow
330 MithalasUrn Breakable/Urn
331 BrokenPiece Breakable/Urn-0001
332 NaijaBabyGhost NaijaBabyGhost/naija-baby-ghost
333 MiaGhost MiaGhost/Head
334 NaijaChildGhost NaijaChildGhost/Head
335 Mia Mia/Head
336 ForestGodVine ForestGod/Vine
337 ForestGodVineHead ForestGod/Vine-Head
338 MutantNaija Naija/Mutant-Head
339 DeepWhale DeepWhale/Eye
340 LiCage LiCage/Glass-0001
341 TitleTextLeft Title/TextLeft
342 TitleTextCenter Title/TextCenter
343 CursorSwarmer MissingImage
344 KrotiteWorshipper Krotite/Head
345 KrotiteErulianBattle01 Krotite/Head
346 KrotiteOnTheWay Krotite/Head
347 KrotiteVsKrotite Krotite/Head
348 Guardian Guardian/Head
349 ForestSprite ForestSprite/Head
350 Fatso Test/Kurtz
351 Druniad Druniad/Head
352 Drask Drask/Head
353 PriestNormal PriestNormal/Head
354 DraskPriestBattle PriestNormal/Head
355 PullPlantNormal Ingredients/plant-leaf
356 Ompo Ompo/Body
357 Architect Lumerean/Head
358 cf6-shot missingimage
359 SunDoor sun-door-0001
360 EnergyGodSpirit particles/lines
361 Minnow title/minnow
362 camopus camopus/head
363 singbulb singbulb/base-0001
364 seawolf seawolf/head
365 grouper grouper/body
366 poisonberry wallshooter
367 bloodcell-red cell/red-cell
368 bloodcell-white cell/white-cell
369 crawlvirus crawlvirus/body
370 roundvirus roundvirus/body
371 floating-city intro/floating-city
372 eric_13 missingImage
373 eric_energyboss missingImage
374 eric_mithala missingImage
375 eric_sunkenmom missingImage
376 eric_mutantnaija missingImage
377 eric_forestgod missingImage
378 eric_erulian missingImage
379 lucien lucien/lucien-head
380 airship airship/airship-body
381 lucien-baby lucien-baby/head
382 gateway gateway/body
383 final-mutant final-mutant-0001
384 dark-li-shot creator/darklishot/darkli-ball
385 suncontainer breakable/suncontainer
386 falsebg falsebg/bg
387 upgrade-wok gui/wok
388 beluga beluga/body
389 beluga-bubble bubble
390 merchild merchild/head
391 merwoman merwoman/head
392 merman merman/head
393 luciengf luciengf/head
394 otter otter/body
395 fishcaveglow particles/spiralglow
396 timerock missingImage
397 arnassi-spirit missingImage
200 SongDoor1 SongDoor-Body 1
403 CrabBoss CrabBoss-body 1
404 EnergyBoss EnergyBoss/Body 1
405 EnergyGod EnergyGod-Torso 1
406 EnergyBossClimb EnergyBoss-Torso 1
407 NautilusPrime NautilusPrime-Body 1
408 Mergog Mergog/Mergog 1
409 CreatorForm1 Creator/Form1/Mask
410 CreatorForm2 Creator/Form1/Head
411 CreatorForm3 Creator/Form3/Head
412 CreatorForm4 Creator/Form4/Body
413 CreatorForm5 Creator/Form5/Head-Down
414 CreatorForm6 Creator/Form6/Head
415 VineDoor VineDoor
500 CollectibleSongCave Collectibles/SongCave 1
501 CollectibleNautilusPrime Collectibles/NautilusPrime 1
502 CollectibleNaijaCave Collectibles/NaijaCave 1
503 CollectibleEnergyBoss Collectibles/EnergyBoss 1
504 CollectibleEnergyTemple Collectibles/EnergyTemple 1
505 CollectibleCrabCostume Collectibles/CrabCostume 1
506 CollectibleDumboEgg Collectibles/Egg-Dumbo 1
507 CollectibleBlasterEgg Collectibles/Egg-Blaster 1
508 CollectiblePiranhaEgg Collectibles/Egg-Piranha 1
509 CollectibleChest Collectibles/treasure-chest 1
510 CollectibleBanner Collectibles/mithalas-banner 1
511 CollectibleMithalaDoll Collectibles/mithala-doll 1
512 CollectibleWalkerBaby Collectibles/walker-baby 1
513 CollectibleSeedBag Collectibles/seed-bag 1
514 CollectibleArnassiStatue Collectibles/arnassi-statue 1
515 CollectibleGear Collectibles/golden-gear 1
516 CollectibleSunKey Collectibles/sun-key 1
517 CollectibleJellyCostume collectibles/jelly-costume 1
518 CollectibleAnemoneSeed collectibles/anemone-seed 1
519 CollectibleBioSeed collectibles/bio-seed 1
520 CollectibleUrchinCostume collectibles/urchin-costume 1
521 CollectibleMithalanCostume collectibles/mithalan-costume 1
522 CollectibleTeenCostume collectibles/teen-costume 1
523 CollectibleTurtleEgg collectibles/turtle-egg 1
524 CollectibleSkull collectibles/skull 1
525 CollectibleTridentHead collectibles/trident-head 1
526 CollectibleSporeSeed collectibles/sporeseed 1
527 CollectibleUpsideDownSeed collectibles/upsidedownseed 1
528 CollectibleEnergyStatue collectibles/energystatue 1
529 CollectibleJellyPlant collectibles/jellyplant 1
530 CollectibleMithalasPot collectibles/mithalaspot 1
531 CollectibleSeahorseCostume collectibles/seahorse-costume 1
532 CollectibleStoneHead collectibles/stonehead 1
533 CollectibleStarfish collectibles/goldstar 1
534 CollectibleBlackPearl collectibles/blackpearl 1
535 CollectibleBabyCrib collectibles/babycrib 1
536 CollectibleMutantCostume collectibles/mutant-costume 1
600 SporeChild SporeChildSeed 1
700 SongLeaf songleaf
701 EnergyLamp breakable/energylamp
702 Oarfish oarfish
703 Nauplius nauplius
704 CastleCrab castlecrab/body
705 HardBeetle hardbeetle
706 DeepCrawley deepcrawley
707 PlasmawormBG plasmaworm/body-bg
708 Hatchetfish hatchetfish/body
709 IceJelly icejelly/head
710 Spooter spooter
711 MamaTurtle mamaturtle/head
712 IceShrimp iceshrimp/body
713 Mantis mantis/body
714 Coward coward/body
715 Lionfish lionfish/body
716 LeopardShark leopardshark/body
717 TigerShark tigershark/body
718 Mermoth mermoth/body
719 cellgenerator red-cell
720 roundvirus-bg roundvirus-bg
721 pistolshrimp pistolshrimp/body
722 electriceel eel-0002
723 whelk whelk
724 whelknoshell whelk
725 aggroeggs aggro-eggs
726 aggrobaby aggrobaby
727 rotcrab rotcrab/head
728 sporeplant songspore-plant
729 bioplant abyss-plant-0001
730 statuehead creatorstatue-0004
731 weird-derek weirdfish/derek-body
732 weird-alec weirdfish/alec-body
733 sunkencrate Breakable/crate
734 Rock0007 rock0007 1
1000 SeaHorse6 Seahorse/Seahorse-0006
1001 SeaHorseBaby Seahorse/seahorse-baby
1002 GlobeCrab GlobeCrab/Body
1003 BigMaul bigmaul-body
1004 SlipperLobster SlipperLobster/Body
1005 SlipperGenerator SlipperLobster/Body
1006 drask-statue drask/statue-head
1007 queen-statue queen-statue/head

View file

@ -0,0 +1,417 @@
GROUP:OpenWaters
Nautilus
RedNautilus
Tromulo
Seahorse
Seahorse2
Seahorse3
Seahorse4
Seahorse5
SeaHorseBaby
TransTurtle
Phonograph
JellySmall
Jelly
JellyShock
Nauplius
Squiddy
RockHead
Raspberry
Moneye
MoneyeBreeder
Anemone
Anemone2
Anemone3
Anemone4
Leach
KingCrab
GlobeCrab
CastleCrab
Trillious
Scooter
HardBeetle
AggroHopper
aggrobaby
aggroeggs
Eel
Oarfish
HydraWurm
Turtle
Nudi
TurtleNoShell
NudiNoShell
whelk
TurtleNoShell
Shrimp
SongSpore
SongStalk
SongLeaf
sporeplant
HealthPlant
Ekkrit
Crotoid
13_MainArea
OriginalRaspberry
Moloch
Tabar
Swordfish
Kappa
Bevy
Huggy
Krill
KrillEggs
Chomper
Duoeye
Armapillar
StressTest
Minnow
Grouper
poisonberry
GROUP:SongCave
ErulianGhost
SongDoor1
GROUP:EnergyTemple
Blaster
MoneyeBreeder
Shocker
Turret
NewtBlaster
Froog
EnergyLamp
OrbHolder
EnergyOrb
EnergyDoor
EnergyBarrierFlicker
EnergyBarrierSolid
EnergyOrbCracked
EnergyBarrierOff
TempleStatue
BigBlaster
VineDoor
GROUP:Mithalas
Splitter1
Splitter2
Rotworm
rotcrab
Blazer
Flea
RotCore
SporeFungus0001
Priest
Loper
SacrificeButton
Seal-King
Seal-Queen
Seal-Prince
Altar
MermanThin
CathedralDoor
Toad
RotBaby-Form1
DarkJelly
Seahorse5
Moray
DarkJellyFG
MithalasUrn
drask-statue
queen-statue
GROUP:Forest
GreenSeaDragon
Simon
CrawPappy
SpikyBall
SpiderCrab
MossHead
NudiBranch0
NudiBranch1
NudiBranch2
NudiBranch3
Dandelion
electriceel
pistolshrimp
Wisker
Squeezer
BigMaul
Mermog
Mermoth
Maul
SeaWolf
Coward
Piranha
UpsideDownJelly
Orbiter
Walker
ForestSprite
SporeChildFlowerRed
SporeChildFlowerPortal
GROUP:Veil
Shark
LeopardShark
TigerShark
Monkey
Parrot
BigMouth
BigMouthParasite
HorseShoe
PufferFish
FlatFish
Lionfish
MetaRay
Camopus
Clam
Rukh
Starmie1
Starmie2
SeaTurtleBig
SeaTurtleSmall
SeaTurtleBaby
MamaTurtle
SeaTurtleBaby-Special1
SeaTurtleBaby-Special2
SeaTurtleBaby-Special3
ancient-plant
ancient-bulb
GROUP:SunTemple
CrystalHolder
LightCrystal
LightCrystalCharged
ClockworkFish
ClockworkCrab
Gear
SpikeyEggDown
SpikeyEggUp
Skeeter
SnailGear
SlipperLobster
SlipperGenerator
GearSlow
GearMed
GearFast
SunDoor
GROUP:Abyss
Rock0007
EvilJelly
DeepUrchin
AnglerFish
Plasmaworm
PlasmawormBG
PredatoryTunicate
DeepCrawley
SpinyCrab
DeepEel
AbyssSpikes
Wisp
Hatchetfish
Triffle
BabyDeepShrimp
ThermalVent
SlenderEel
DeepJelly
DeepWhale
GROUP:IceCave
IceChunkLarge
IceChunkMedium
IceChunkSmall
Ekko
IceCrab
SeaHorse6
IceJelly
Spooter
IceShrimp
Mantis
GROUP:SunkenCity
Scavenger
CC_LostInCave
CC_Mother
CC_MissingMom
CC_GF
CC_Kid
CC_Cat
SunkenDoor
CC_EndDemo
CC_SunkenCity
sunkencrate
Spookfish
ClayStatue
Clay
cc_father
GROUP:FinalDungeon
AbyssOctopus
Mutilus
Horror
Abaddon
GroundShocker
Mutileye
JellyZap
BiteyMouth
Drask-Final
Erulian-Final
Krotite-Final
Druniad-Final
FinalDoor
FinalTongue
GrabbyArm
MutantNaija
LiCage
Guardian
bloodcell-red
bloodcell-white
cellgenerator
crawlvirus
roundvirus
roundvirus-bg
GROUP:Bosses
EnergyBoss
HellBeast
SunWorm
ForestGod
SunkenDad
SunkenMom
Zygote
MomEyes
NautilusPrime
CrabBoss
KingJelly
Octomun
Mergog
CreatorForm1
CreatorForm2
CreatorForm3
CreatorForm4
CreatorForm5
CreatorForm6
CC_EndOfGame
GROUP:Secrets
YoungLi
Mia
MiaGhost
NaijaBabyGhost
NaijaChild
NaijaChildGhost
StrangeCreature
SongLamp0
SongLamp1
SongLamp2
SongLamp3
SongLamp4
SongLamp5
SongLamp6
SongLamp7
weird-derek
weird-alec
GROUP:Items
HealthUpgrade0
HealthUpgrade1
HealthUpgrade2
HealthUpgrade3
HealthUpgrade4
FormUpgradeEnergy1
FormUpgradeEnergy2
FormUpgradeBeast
CollectibleSongCave
CollectibleNautilusPrime
CollectibleNaijaCave
CollectibleEnergyBoss
CollectibleEnergyTemple
CollectibleCrabCostume
CollectibleChest
CollectibleBanner
CollectibleMithalaDoll
CollectibleWalkerBaby
CollectibleSeedBag
CollectibleArnassiStatue
CollectibleGear
CollectibleSunKey
CollectibleSkull
CollectibleTridentHead
CollectibleSporeSeed
CollectibleUpsideDownSeed
CollectibleEnergyStatue
CollectibleJellyPlant
CollectibleMithalasPot
CollectibleSeahorseCostume
CollectibleStoneHead
CollectibleStarfish
CollectibleBlackPearl
CollectibleMutantCostume
LiHelmet
CaveFish1
CaveFish2
CaveFish3
CaveFish4
CollectibleDumboEgg
CollectibleBlasterEgg
CollectiblePiranhaEgg
CollectibleJellyCostume
CollectibleAnemoneSeed
CollectibleBioSeed
CollectibleUrchinCostume
CollectibleMithalanCostume
CollectibleTeenCostume
CollectibleTurtleEgg
GROUP:Unsorted
Fatso
ForestGodVine
ForestGodVineHead
TitleTextLeft
TitleTextCenter
CursorSwarmer
KrotiteWorshipper
KrotiteErulianBattle01
KrotiteOnTheWay
KrotiteVsKrotite
Druniad
Drask
PriestNormal
DraskPriestBattle
PullPlantNormal
Ompo
Architect
EnergyGodSpirit
SingBulb
floating-city
eric_13
eric_energyboss
eric_mithala
eric_sunkenmom
eric_mutantnaija
eric_forestgod
eric_erulian
lucien
airship
gateway
final-mutant
dark-li-shot
suncontainer
falsebg
upgrade-wok
beluga
merchild
merwoman
merman
luciengf
Rock0001
Rock0002
Rock0003
Rock0004
Rock0005
Rock0006
statuehead
otter
fishcaveglow
timerock
arnassi-spirit

View file

@ -55,7 +55,7 @@ function v.commonInit(me, size)
512, -- sprite height
1, -- particle "explosion" type, maps to particleEffects.txt -1 = none
1, -- 0/1 hit other entities off/on (uses collideRadius)
4000, -- updateCull -1: disabled, default: 4000
4000 -- updateCull -1: disabled, default: 4000
)
loadSound("IceChunkBreak")

View file

@ -131,6 +131,7 @@
BufferSecurityCheck="false"
EnableFunctionLevelLinking="false"
EnableEnhancedInstructionSet="2"
FloatingPointModel="2"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"

View file

@ -123,6 +123,7 @@
BufferSecurityCheck="false"
EnableFunctionLevelLinking="false"
EnableEnhancedInstructionSet="2"
FloatingPointModel="2"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
@ -331,6 +332,14 @@
RelativePath="..\..\BBGE\LensFlare.cpp"
>
</File>
<File
RelativePath="..\..\BBGE\Localization.cpp"
>
</File>
<File
RelativePath="..\..\BBGE\Localization.h"
>
</File>
<File
RelativePath="..\..\BBGE\Math.cpp"
>

View file

@ -123,6 +123,7 @@
BufferSecurityCheck="false"
EnableFunctionLevelLinking="false"
EnableEnhancedInstructionSet="2"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="3"