mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-02-25 23:43:58 +00:00
Merge branch 'master' of file:///Users/User/code/coding/Aquaria_fg_clean
This commit is contained in:
commit
78e35ca5c9
48 changed files with 1793 additions and 342 deletions
|
@ -168,6 +168,15 @@ IngredientType Continuity::getIngredientTypeFromName(const std::string &name) co
|
||||||
return IT_NONE;
|
return IT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Continuity::getIngredientDisplayName(const std::string& name) const
|
||||||
|
{
|
||||||
|
IngredientNameMap::const_iterator it = ingredientDisplayNames.find(name);
|
||||||
|
if (it != ingredientDisplayNames.end())
|
||||||
|
return it->second;
|
||||||
|
|
||||||
|
return splitCamelCase(name);
|
||||||
|
}
|
||||||
|
|
||||||
IngredientData *Continuity::getIngredientHeldByIndex(int idx) const
|
IngredientData *Continuity::getIngredientHeldByIndex(int idx) const
|
||||||
{
|
{
|
||||||
if (idx < 0 || idx >= ingredients.size()) return 0;
|
if (idx < 0 || idx >= ingredients.size()) return 0;
|
||||||
|
@ -191,6 +200,7 @@ void Recipe::clear()
|
||||||
types.clear();
|
types.clear();
|
||||||
names.clear();
|
names.clear();
|
||||||
result = "";
|
result = "";
|
||||||
|
resultDisplayName = "";
|
||||||
known = false;
|
known = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,13 +867,6 @@ std::string Continuity::getIngredientAffectsString(IngredientData *data)
|
||||||
return getAllIEString(data);
|
return getAllIEString(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Continuity::getIngredientDescription(IngredientEffectType type)
|
|
||||||
{
|
|
||||||
int t = (int)type;
|
|
||||||
if (t < 0 || t >= ingredientDescriptions.size()) return "";
|
|
||||||
return ingredientDescriptions[t].text;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Continuity::loadTreasureData()
|
void Continuity::loadTreasureData()
|
||||||
{
|
{
|
||||||
treasureData.clear();
|
treasureData.clear();
|
||||||
|
@ -900,20 +903,6 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
{
|
{
|
||||||
std::string line, name, gfx, type, effects;
|
std::string line, name, gfx, type, effects;
|
||||||
|
|
||||||
ingredientDescriptions.clear();
|
|
||||||
|
|
||||||
/*
|
|
||||||
int num;
|
|
||||||
InStream in2("data/ingredientdescriptions.txt");
|
|
||||||
while (std::getline(in2, line))
|
|
||||||
{
|
|
||||||
IngredientDescription desc;
|
|
||||||
std::istringstream inLine(line);
|
|
||||||
inLine >> num >> desc.text;
|
|
||||||
ingredientDescriptions.push_back(desc);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
clearIngredientData();
|
clearIngredientData();
|
||||||
recipes.clear();
|
recipes.clear();
|
||||||
|
|
||||||
|
@ -1060,7 +1049,6 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
Recipe r;
|
Recipe r;
|
||||||
while (in >> name)
|
while (in >> name)
|
||||||
{
|
{
|
||||||
r.result = name;
|
|
||||||
if (name == "+")
|
if (name == "+")
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
@ -1073,10 +1061,13 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (quitNext)
|
if (quitNext)
|
||||||
|
{
|
||||||
r.result = name;
|
r.result = name;
|
||||||
|
r.resultDisplayName = getIngredientDisplayName(name);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IngredientType it = dsq->continuity.getIngredientTypeFromName(name);
|
IngredientType it = getIngredientTypeFromName(name);
|
||||||
if (it == IT_NONE)
|
if (it == IT_NONE)
|
||||||
{
|
{
|
||||||
r.addName(name);
|
r.addName(name);
|
||||||
|
@ -1101,6 +1092,24 @@ void Continuity::loadIngredientData(const std::string &file)
|
||||||
in.close();
|
in.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Continuity::loadIngredientDisplayNames(const std::string& file)
|
||||||
|
{
|
||||||
|
InStream in(file);
|
||||||
|
if (!in)
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::string line, name, text;
|
||||||
|
while (std::getline(in, line))
|
||||||
|
{
|
||||||
|
size_t pos = line.find(' ');
|
||||||
|
if (pos == std::string::npos)
|
||||||
|
continue;
|
||||||
|
name = line.substr(0, pos);
|
||||||
|
text = line.substr(pos + 1);
|
||||||
|
ingredientDisplayNames[name] = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Continuity::learnFormUpgrade(FormUpgradeType form)
|
void Continuity::learnFormUpgrade(FormUpgradeType form)
|
||||||
{
|
{
|
||||||
formUpgrades[form] = true;
|
formUpgrades[form] = true;
|
||||||
|
@ -1200,11 +1209,11 @@ void Continuity::loadSongBank()
|
||||||
songSlotNames.clear();
|
songSlotNames.clear();
|
||||||
songBank.clear();
|
songBank.clear();
|
||||||
|
|
||||||
loadIntoSongBank(dsq->user.localisePath("data/songs.xml"));
|
loadIntoSongBank(localisePath("data/songs.xml"));
|
||||||
|
|
||||||
if (dsq->mod.isActive())
|
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();
|
dsq->user.save();
|
||||||
this->reset();
|
this->reset();
|
||||||
|
knowsSong.clear(); // Adds shield song by default, which interferes with mods that don't start with it
|
||||||
|
|
||||||
TiXmlDocument doc;
|
TiXmlDocument doc;
|
||||||
loadFileData(slot, doc);
|
loadFileData(slot, doc);
|
||||||
|
@ -2897,7 +2907,9 @@ void Continuity::loadFile(int slot)
|
||||||
//dsq->game->transitionToScene();
|
//dsq->game->transitionToScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Possibly mod-specific data the the continuity reset didn't catch
|
||||||
loadSongBank();
|
loadSongBank();
|
||||||
|
this->worldMap.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Continuity::setNaijaModel(std::string model)
|
void Continuity::setNaijaModel(std::string model)
|
||||||
|
@ -3231,23 +3243,32 @@ void Continuity::reset()
|
||||||
|
|
||||||
//load ingredients
|
//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();
|
ingredientDescriptions.clear();
|
||||||
ingredientData.clear();
|
ingredientData.clear();
|
||||||
recipes.clear();
|
recipes.clear();
|
||||||
|
|
||||||
std::string fname;
|
|
||||||
|
|
||||||
if(dsq->mod.isActive())
|
if(dsq->mod.isActive())
|
||||||
{
|
{
|
||||||
//load mod ingredients
|
//load mod ingredients
|
||||||
fname = dsq->user.localisePath(dsq->mod.getPath() + "ingredients.txt", dsq->mod.getPath());
|
loadIngredientData(dsq->mod.getPath() + "ingredients.txt");
|
||||||
loadIngredientData(fname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//load ingredients for the main game
|
//load ingredients for the main game
|
||||||
if(ingredientData.empty() && recipes.empty()) {
|
if(ingredientData.empty() && recipes.empty()) {
|
||||||
fname = dsq->user.localisePath("data/ingredients.txt");
|
loadIngredientData("data/ingredients.txt");
|
||||||
loadIngredientData(fname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPetData();
|
loadPetData();
|
||||||
|
|
|
@ -485,33 +485,38 @@ void DSQ::loadFonts()
|
||||||
|
|
||||||
destroyFonts();
|
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.fontTopColor = Vector(0.9,0.9,1);
|
||||||
font.fontBtmColor = Vector(0.5,0.8,1);
|
font.fontBtmColor = Vector(0.5,0.8,1);
|
||||||
font.overrideTexture = core->addTexture("font");
|
font.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
smallFont.load("data/font-small.glf", 0.6, false);
|
smallFont.load(file, 0.6, false);
|
||||||
smallFont.fontTopColor = Vector(0.9,0.9,1);
|
smallFont.fontTopColor = Vector(0.9,0.9,1);
|
||||||
smallFont.fontBtmColor = Vector(0.5,0.8,1);
|
smallFont.fontBtmColor = Vector(0.5,0.8,1);
|
||||||
smallFont.overrideTexture = core->addTexture("font");
|
smallFont.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
smallFontRed.load("data/font-small.glf", 0.6, false);
|
smallFontRed.load(file, 0.6, false);
|
||||||
smallFontRed.fontTopColor = Vector(1,0.9,0.9);
|
smallFontRed.fontTopColor = Vector(1,0.9,0.9);
|
||||||
smallFontRed.fontBtmColor = Vector(1,0.8,0.5);
|
smallFontRed.fontBtmColor = Vector(1,0.8,0.5);
|
||||||
smallFontRed.overrideTexture = core->addTexture("font");
|
smallFontRed.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
subsFont.load("data/font-small.glf", 0.5, false);
|
subsFont.load(file, 0.5, false);
|
||||||
subsFont.fontTopColor = Vector(1,1,1);
|
subsFont.fontTopColor = Vector(1,1,1);
|
||||||
subsFont.fontBtmColor = Vector(0.5,0.8,1);
|
subsFont.fontBtmColor = Vector(0.5,0.8,1);
|
||||||
subsFont.overrideTexture = core->addTexture("font");
|
subsFont.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
goldFont.load("data/font-small.glf", 1, false);
|
goldFont.load(file, 1, false);
|
||||||
goldFont.fontTopColor = Vector(1,0.9,0.5);
|
goldFont.fontTopColor = Vector(1,0.9,0.5);
|
||||||
goldFont.fontBtmColor = Vector(0.6,0.5,0.25);
|
goldFont.fontBtmColor = Vector(0.6,0.5,0.25);
|
||||||
goldFont.overrideTexture = core->addTexture("font");
|
goldFont.overrideTexture = core->addTexture("font");
|
||||||
|
|
||||||
|
|
||||||
|
file = localisePath("data/font.ttf");
|
||||||
|
|
||||||
debugLog("ttf...");
|
debugLog("ttf...");
|
||||||
arialFontData = (unsigned char *)readFile("data/font.ttf", &arialFontDataSize);
|
arialFontData = (unsigned char *)readFile(file, &arialFontDataSize);
|
||||||
if (arialFontData)
|
if (arialFontData)
|
||||||
{
|
{
|
||||||
fontArialSmall .create(arialFontData, arialFontDataSize, 12);
|
fontArialSmall .create(arialFontData, arialFontDataSize, 12);
|
||||||
|
@ -2162,8 +2167,6 @@ void DSQ::applyPatches()
|
||||||
vfs.MountExternalPath(mod.getBaseModPath().c_str(), "_mods");
|
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 (std::set<std::string>::iterator it = activePatches.begin(); it != activePatches.end(); ++it)
|
||||||
|
|
|
@ -696,10 +696,10 @@ struct IngredientEffect
|
||||||
class IngredientData
|
class IngredientData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IngredientData(const std::string &name, const std::string &gfx, IngredientType type)
|
IngredientData(const std::string &name, const std::string &gfx, IngredientType type);
|
||||||
: name(name), gfx(gfx), amount(0), held(0), type(type), marked(0), sorted(false) {}
|
|
||||||
int getIndex() const;
|
int getIndex() const;
|
||||||
const std::string name, gfx;
|
const std::string name, gfx;
|
||||||
|
std::string displayName;
|
||||||
const IngredientType type;
|
const IngredientType type;
|
||||||
int amount;
|
int amount;
|
||||||
int held;
|
int held;
|
||||||
|
@ -747,6 +747,7 @@ public:
|
||||||
std::vector<RecipeType> types;
|
std::vector<RecipeType> types;
|
||||||
std::vector<RecipeName> names;
|
std::vector<RecipeName> names;
|
||||||
std::string result;
|
std::string result;
|
||||||
|
std::string resultDisplayName;
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
|
@ -1079,9 +1080,11 @@ public:
|
||||||
void applyIngredientEffects(IngredientData *data);
|
void applyIngredientEffects(IngredientData *data);
|
||||||
|
|
||||||
void loadIngredientData(const std::string &file);
|
void loadIngredientData(const std::string &file);
|
||||||
|
void loadIngredientDisplayNames(const std::string& file);
|
||||||
bool hasIngredients() const { return !ingredients.empty(); }
|
bool hasIngredients() const { return !ingredients.empty(); }
|
||||||
IngredientDatas::size_type ingredientCount() const { return ingredients.size(); }
|
IngredientDatas::size_type ingredientCount() const { return ingredients.size(); }
|
||||||
IngredientType getIngredientTypeFromName(const std::string &name) const;
|
IngredientType getIngredientTypeFromName(const std::string &name) const;
|
||||||
|
std::string getIngredientDisplayName(const std::string& name) const;
|
||||||
|
|
||||||
void removeEmptyIngredients();
|
void removeEmptyIngredients();
|
||||||
void spawnAllIngredients(const Vector &position);
|
void spawnAllIngredients(const Vector &position);
|
||||||
|
@ -1130,7 +1133,6 @@ public:
|
||||||
IngredientDescriptions ingredientDescriptions;
|
IngredientDescriptions ingredientDescriptions;
|
||||||
|
|
||||||
std::string getIngredientAffectsString(IngredientData *data);
|
std::string getIngredientAffectsString(IngredientData *data);
|
||||||
std::string getIngredientDescription(IngredientEffectType type);
|
|
||||||
|
|
||||||
WorldMap worldMap;
|
WorldMap worldMap;
|
||||||
|
|
||||||
|
@ -1176,6 +1178,9 @@ private:
|
||||||
|
|
||||||
IngredientDatas ingredients; // held ingredients
|
IngredientDatas ingredients; // held ingredients
|
||||||
IngredientDatas ingredientData; // all possible ingredients
|
IngredientDatas ingredientData; // all possible ingredients
|
||||||
|
|
||||||
|
typedef std::map<std::string,std::string> IngredientNameMap;
|
||||||
|
IngredientNameMap ingredientDisplayNames;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Profile
|
class Profile
|
||||||
|
|
|
@ -635,7 +635,7 @@ void FoodSlot::onUpdate(float dt)
|
||||||
if ((core->mouse.position - getWorldPosition()).isLength2DIn(16))
|
if ((core->mouse.position - getWorldPosition()).isLength2DIn(16))
|
||||||
//if (isCursorIn())
|
//if (isCursorIn())
|
||||||
{
|
{
|
||||||
dsq->game->foodLabel->setText(splitCamelCase(ingredient->name));
|
dsq->game->foodLabel->setText(ingredient->displayName);
|
||||||
dsq->game->foodLabel->alpha.interpolateTo(1, 0.2);
|
dsq->game->foodLabel->alpha.interpolateTo(1, 0.2);
|
||||||
|
|
||||||
dsq->game->foodDescription->setText(dsq->continuity.getIngredientAffectsString(ingredient));
|
dsq->game->foodDescription->setText(dsq->continuity.getIngredientAffectsString(ingredient));
|
||||||
|
@ -1971,30 +1971,13 @@ void Game::fillGridFromQuad(Quad *q, ObsType obsType, bool trim)
|
||||||
h2/=TILE_SIZE;
|
h2/=TILE_SIZE;
|
||||||
tpos.x -= w2;
|
tpos.x -= w2;
|
||||||
tpos.y -= h2;
|
tpos.y -= h2;
|
||||||
GLuint id = q->texture->textures[0];
|
|
||||||
int w = 0, h = 0;
|
int w = 0, h = 0;
|
||||||
glBindTexture(GL_TEXTURE_2D, id);
|
unsigned int size = 0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
|
unsigned char *data = q->texture->getBufferAndSize(&w, &h, &size);
|
||||||
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);
|
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
errorLog("Game::fillGridFromQuad allocation failure");
|
debugLog("Failed to get buffer in Game::fillGridFromQuad()");
|
||||||
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.
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2041,16 +2024,13 @@ void Game::fillGridFromQuad(Quad *q, ObsType obsType, bool trim)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
free(data);
|
free(data);
|
||||||
data = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trim)
|
if (trim)
|
||||||
{
|
{
|
||||||
std::vector<TileVector> obsCopy = obs;
|
std::vector<TileVector> obsCopy;
|
||||||
obs.clear();
|
obsCopy.swap(obs);
|
||||||
|
// obs now empty
|
||||||
|
|
||||||
int sides = 0;
|
int sides = 0;
|
||||||
for (int i = 0; i < obsCopy.size(); i++)
|
for (int i = 0; i < obsCopy.size(); i++)
|
||||||
|
@ -2803,25 +2783,15 @@ void Game::generateCollisionMask(Quad *q, int overrideCollideRadius)
|
||||||
h2/=TILE_SIZE;
|
h2/=TILE_SIZE;
|
||||||
tpos.x -= w2;
|
tpos.x -= w2;
|
||||||
tpos.y -= h2;
|
tpos.y -= h2;
|
||||||
GLuint id = q->texture->textures[0];
|
|
||||||
int w = 0, h = 0;
|
int w = 0, h = 0;
|
||||||
glBindTexture(GL_TEXTURE_2D, id);
|
unsigned int size = 0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
|
unsigned char *data = q->texture->getBufferAndSize(&w, &h, &size);
|
||||||
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);
|
|
||||||
|
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
debugLog("Could not malloc in Game::generateCollisionMask");
|
debugLog("Failed to get buffer in Game::generateCollisionMask()");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
|
||||||
|
|
||||||
q->collisionMaskRadius = 0;
|
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++)
|
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 = h2*2;
|
||||||
*/
|
*/
|
||||||
//q->collisionMaskRadius = sqrtf(sqr(w2)+sqr(h2));
|
//q->collisionMaskRadius = sqrtf(sqr(w2)+sqr(h2));
|
||||||
q->collisionMaskRadius = 512;
|
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
|
||||||
free(data);
|
|
||||||
/*
|
/*
|
||||||
int rot = rotation.z;
|
int rot = rotation.z;
|
||||||
while (rot > 360)
|
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.
|
// These say "Mac" but we use them on Linux, too.
|
||||||
#if defined(BBGE_BUILD_UNIX)
|
#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);
|
appendFileToString(data, fname);
|
||||||
#else
|
#else
|
||||||
std::string fname = dsq->user.localisePath("data/help_header.txt");
|
std::string fname = localisePath("data/help_header.txt");
|
||||||
appendFileToString(data, fname);
|
appendFileToString(data, fname);
|
||||||
#endif
|
#endif
|
||||||
if (dsq->continuity.hasSong(SONG_BIND)) {
|
if (dsq->continuity.hasSong(SONG_BIND)) {
|
||||||
fname = dsq->user.localisePath("data/help_bindsong.txt");
|
fname = localisePath("data/help_bindsong.txt");
|
||||||
appendFileToString(data, fname);
|
appendFileToString(data, fname);
|
||||||
}
|
}
|
||||||
if (dsq->continuity.hasSong(SONG_ENERGYFORM)) {
|
if (dsq->continuity.hasSong(SONG_ENERGYFORM)) {
|
||||||
fname = dsq->user.localisePath("data/help_energyform.txt");
|
fname = localisePath("data/help_energyform.txt");
|
||||||
appendFileToString(data, fname);
|
appendFileToString(data, fname);
|
||||||
}
|
}
|
||||||
fname = dsq->user.localisePath("data/help_start.txt");
|
fname = localisePath("data/help_start.txt");
|
||||||
appendFileToString(data, fname);
|
appendFileToString(data, fname);
|
||||||
|
|
||||||
// These say "Mac" but we use them on Linux, too.
|
// These say "Mac" but we use them on Linux, too.
|
||||||
#if defined(BBGE_BUILD_UNIX)
|
#if defined(BBGE_BUILD_UNIX)
|
||||||
fname = dsq->user.localisePath("data/help_end_mac.txt");
|
fname = localisePath("data/help_end_mac.txt");
|
||||||
appendFileToString(data, fname);
|
appendFileToString(data, fname);
|
||||||
#else
|
#else
|
||||||
fname = dsq->user.localisePath("data/help_end.txt");
|
fname = localisePath("data/help_end.txt");
|
||||||
appendFileToString(data, fname);
|
appendFileToString(data, fname);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// !!! FIXME: this is such a hack.
|
// !!! FIXME: this is such a hack.
|
||||||
data += "\n\n[Achievements]\n\n";
|
data += "\n\n" + dsq->continuity.stringBank.get(2032) + "\n\n";
|
||||||
dsq->continuity.statsAndAchievements->appendStringData(data);
|
dsq->continuity.statsAndAchievements->appendStringData(data);
|
||||||
|
|
||||||
helpBG = new Quad;
|
helpBG = new Quad;
|
||||||
|
@ -11211,7 +11182,7 @@ void Game::learnedRecipe(Recipe *r, bool effects)
|
||||||
if (nocasecmp(dsq->getTopStateData()->name,"Game")==0 && !applyingState)
|
if (nocasecmp(dsq->getTopStateData()->name,"Game")==0 && !applyingState)
|
||||||
{
|
{
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << dsq->continuity.stringBank.get(23) << " " << splitCamelCase(r->result) << " " << dsq->continuity.stringBank.get(24);
|
os << dsq->continuity.stringBank.get(23) << " " << r->resultDisplayName << " " << dsq->continuity.stringBank.get(24);
|
||||||
IngredientData *data = dsq->continuity.getIngredientDataByName(r->result);
|
IngredientData *data = dsq->continuity.getIngredientDataByName(r->result);
|
||||||
if (data)
|
if (data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Avatar.h"
|
#include "Avatar.h"
|
||||||
|
|
||||||
|
IngredientData::IngredientData(const std::string &name, const std::string &gfx, IngredientType type)
|
||||||
|
: name(name), gfx(gfx), amount(0), held(0), type(type), marked(0), sorted(false)
|
||||||
|
, displayName(dsq->continuity.getIngredientDisplayName(name))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int IngredientData::getIndex() const
|
int IngredientData::getIndex() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,8 +26,7 @@ namespace RecipeMenuNamespace
|
||||||
|
|
||||||
std::string processFoodName(std::string name)
|
std::string processFoodName(std::string name)
|
||||||
{
|
{
|
||||||
name = splitCamelCase(name);
|
size_t p = name.find(' ');
|
||||||
int p = name.find(' ');
|
|
||||||
if (p != std::string::npos)
|
if (p != std::string::npos)
|
||||||
{
|
{
|
||||||
name[p] = '\n';
|
name[p] = '\n';
|
||||||
|
@ -62,7 +61,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
|
||||||
text->color = 0;
|
text->color = 0;
|
||||||
text->position = result->position + Vector(0, 18);
|
text->position = result->position + Vector(0, 18);
|
||||||
|
|
||||||
text->setText(processFoodName(data->name));
|
text->setText(processFoodName(data->displayName));
|
||||||
addChild(text, PM_POINTER);
|
addChild(text, PM_POINTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +98,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
|
||||||
text->scale = Vector(0.7, 0.7);
|
text->scale = Vector(0.7, 0.7);
|
||||||
text->color = 0;
|
text->color = 0;
|
||||||
text->position = ing[c]->position + Vector(0, 18);
|
text->position = ing[c]->position + Vector(0, 18);
|
||||||
text->setText(processFoodName(data->name));
|
text->setText(processFoodName(data->displayName));
|
||||||
addChild(text, PM_POINTER);
|
addChild(text, PM_POINTER);
|
||||||
|
|
||||||
if (c < size)
|
if (c < size)
|
||||||
|
@ -130,17 +129,10 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
|
||||||
text->scale = Vector(0.8, 0.8);
|
text->scale = Vector(0.8, 0.8);
|
||||||
text->position = Vector(100*c, 0); //-20
|
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 (recipe->types[i].type != IT_ANYTHING)
|
||||||
if (loc != std::string::npos)
|
typeName = dsq->continuity.stringBank.get(2031) + "\n" + typeName;
|
||||||
{
|
|
||||||
typeName = typeName.substr(0, loc) + typeName.substr(loc+4, typeName.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (typeName != "Anything")
|
|
||||||
typeName = std::string("Any\n") + typeName;
|
|
||||||
else
|
else
|
||||||
typeName = std::string("\n") + typeName;
|
typeName = std::string("\n") + typeName;
|
||||||
|
|
||||||
|
|
|
@ -988,6 +988,14 @@ luaFunc(obj_setTexture)
|
||||||
luaReturnNil();
|
luaReturnNil();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
luaFunc(obj_getTexture)
|
||||||
|
{
|
||||||
|
RenderObject *r = robj(L);
|
||||||
|
if (r && r->texture)
|
||||||
|
luaReturnStr(r->texture->name.c_str());
|
||||||
|
luaReturnStr("");
|
||||||
|
}
|
||||||
|
|
||||||
luaFunc(obj_delete)
|
luaFunc(obj_delete)
|
||||||
{
|
{
|
||||||
RenderObject *r = robj(L);
|
RenderObject *r = robj(L);
|
||||||
|
@ -1490,6 +1498,7 @@ luaFunc(quad_setHeight)
|
||||||
RO_FUNC(getter, prefix, internalOffset ) \
|
RO_FUNC(getter, prefix, internalOffset ) \
|
||||||
RO_FUNC(getter, prefix, getInternalOffset) \
|
RO_FUNC(getter, prefix, getInternalOffset) \
|
||||||
RO_FUNC(getter, prefix, getPosition ) \
|
RO_FUNC(getter, prefix, getPosition ) \
|
||||||
|
RO_FUNC(getter, prefix, getTexture ) \
|
||||||
RO_FUNC(getter, prefix, x ) \
|
RO_FUNC(getter, prefix, x ) \
|
||||||
RO_FUNC(getter, prefix, y ) \
|
RO_FUNC(getter, prefix, y ) \
|
||||||
RO_FUNC(getter, prefix, setBlendType ) \
|
RO_FUNC(getter, prefix, setBlendType ) \
|
||||||
|
@ -5755,6 +5764,33 @@ luaFunc(entity_pullEntities)
|
||||||
luaReturnNil();
|
luaReturnNil();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note that this overrides the generic obj_delete function for entities.
|
||||||
|
// (It's registered as "entity_delete" to Lua)
|
||||||
|
// There is at least one known case where this is necessary:
|
||||||
|
// Avatar::pullTarget does a life check to drop the pointer;
|
||||||
|
// If it's instantly deleted, this will cause a crash.
|
||||||
|
luaFunc(entity_delete_override)
|
||||||
|
{
|
||||||
|
Entity *e = entity(L);
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
float time = lua_tonumber(L, 2);
|
||||||
|
if (time == 0)
|
||||||
|
{
|
||||||
|
e->alpha = 0;
|
||||||
|
e->setLife(0);
|
||||||
|
e->setDecayRate(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e->fadeAlphaWithLife = true;
|
||||||
|
e->setLife(1);
|
||||||
|
e->setDecayRate(1.0f/time);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
luaReturnInt(0);
|
||||||
|
}
|
||||||
|
|
||||||
luaFunc(entity_isRidingOnEntity)
|
luaFunc(entity_isRidingOnEntity)
|
||||||
{
|
{
|
||||||
Entity *e = entity(L);
|
Entity *e = entity(L);
|
||||||
|
@ -8047,6 +8083,7 @@ static const struct {
|
||||||
// -- overrides / special cases--
|
// -- overrides / special cases--
|
||||||
|
|
||||||
{"bone_getPosition", l_bone_getWorldPosition},
|
{"bone_getPosition", l_bone_getWorldPosition},
|
||||||
|
{ "entity_delete", l_entity_delete_override },
|
||||||
|
|
||||||
// -- deprecated/compatibility related functions below here --
|
// -- deprecated/compatibility related functions below here --
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ void StatsAndAchievements::RunFrame()
|
||||||
VFILE *io = NULL;
|
VFILE *io = NULL;
|
||||||
|
|
||||||
// Get generic achievement data...
|
// 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");
|
io = vfopen(fname.c_str(), "r");
|
||||||
char line[1024];
|
char line[1024];
|
||||||
for (size_t i = 0; i < max_achievements; i++)
|
for (size_t i = 0; i < max_achievements; i++)
|
||||||
|
|
|
@ -28,11 +28,17 @@ void StringBank::load()
|
||||||
{
|
{
|
||||||
stringMap.clear();
|
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);
|
_load(fname);
|
||||||
|
|
||||||
if (dsq->mod.isActive()) {
|
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);
|
_load(fname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ void SubtitlePlayer::go(const std::string &subs)
|
||||||
if (dsq->mod.isActive())
|
if (dsq->mod.isActive())
|
||||||
{
|
{
|
||||||
f = dsq->mod.getPath() + "audio/" + subs + ".txt";
|
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);
|
f = core->adjustFilenameCase(f);
|
||||||
if (exists(f))
|
if (exists(f))
|
||||||
checkAfter = false;
|
checkAfter = false;
|
||||||
|
@ -55,7 +55,7 @@ void SubtitlePlayer::go(const std::string &subs)
|
||||||
if (checkAfter)
|
if (checkAfter)
|
||||||
{
|
{
|
||||||
f = "scripts/vox/" + subs + ".txt";
|
f = "scripts/vox/" + subs + ".txt";
|
||||||
f = dsq->user.localisePath(f);
|
f = localisePath(f);
|
||||||
f = core->adjustFilenameCase(f);
|
f = core->adjustFilenameCase(f);
|
||||||
if (!exists(f))
|
if (!exists(f))
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,31 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "../ExternalLibs/tinyxml.h"
|
#include "../ExternalLibs/tinyxml.h"
|
||||||
#endif
|
#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()
|
void UserSettings::save()
|
||||||
{
|
{
|
||||||
|
@ -74,14 +49,12 @@ void UserSettings::save()
|
||||||
}
|
}
|
||||||
xml_system.InsertEndChild(xml_debugLog);
|
xml_system.InsertEndChild(xml_debugLog);
|
||||||
|
|
||||||
if (!system.isSystemLocale) {
|
|
||||||
TiXmlElement xml_locale("Locale");
|
TiXmlElement xml_locale("Locale");
|
||||||
{
|
{
|
||||||
xml_locale.SetAttribute("name", system.locale);
|
xml_locale.SetAttribute("name", system.locale);
|
||||||
}
|
}
|
||||||
xml_system.InsertEndChild(xml_locale);
|
xml_system.InsertEndChild(xml_locale);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
doc.InsertEndChild(xml_system);
|
doc.InsertEndChild(xml_system);
|
||||||
|
|
||||||
TiXmlElement xml_audio("Audio");
|
TiXmlElement xml_audio("Audio");
|
||||||
|
@ -555,14 +528,11 @@ void UserSettings::load(bool doApply, const std::string &overrideFile)
|
||||||
TiXmlElement *xml_net = doc.FirstChildElement("Network");
|
TiXmlElement *xml_net = doc.FirstChildElement("Network");
|
||||||
if (xml_net)
|
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();
|
//clearInputCodeMap();
|
||||||
|
|
||||||
if (doApply)
|
if (doApply)
|
||||||
|
@ -603,93 +573,19 @@ void UserSettings::apply()
|
||||||
dsq->bindInput();
|
dsq->bindInput();
|
||||||
|
|
||||||
core->settings.prebufferSounds = audio.prebuffer;
|
core->settings.prebufferSounds = audio.prebuffer;
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string UserSettings::localisePath(const std::string &path, const std::string &modpath)
|
|
||||||
{
|
|
||||||
if (system.locale.empty())
|
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;
|
std::string loc = getSystemLocale();
|
||||||
|
debugLog("Using autodetected system locale: " + loc);
|
||||||
if (GetLocaleInfo(lcid, LOCALE_SISO3166CTRYNAME, ctry, sizeof ctry) != 0)
|
setUsedLocale(loc);
|
||||||
{
|
|
||||||
system.locale += "_";
|
|
||||||
system.locale += ctry;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#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
|
else
|
||||||
debugLog("use system locale: " + system.locale);
|
{
|
||||||
|
debugLog("Using user config locale: " + system.locale);
|
||||||
|
setUsedLocale(system.locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,9 +77,8 @@ class UserSettings
|
||||||
public:
|
public:
|
||||||
struct System
|
struct System
|
||||||
{
|
{
|
||||||
System() { debugLogOn = 0; isSystemLocale = false; }
|
System() { debugLogOn = 0; }
|
||||||
int debugLogOn;
|
int debugLogOn;
|
||||||
bool isSystemLocale;
|
|
||||||
std::string locale;
|
std::string locale;
|
||||||
} system;
|
} system;
|
||||||
|
|
||||||
|
@ -182,8 +181,4 @@ public:
|
||||||
void load(bool doApply=true, const std::string &overrideFile="");
|
void load(bool doApply=true, const std::string &overrideFile="");
|
||||||
void save();
|
void save();
|
||||||
void apply();
|
void apply();
|
||||||
std::string localisePath(const std::string &path, const std::string &modpath="");
|
|
||||||
|
|
||||||
private:
|
|
||||||
void getSystemLocale();
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -141,7 +141,7 @@ unsigned hash(const std::string &string)
|
||||||
unsigned hash = 5381;
|
unsigned hash = 5381;
|
||||||
|
|
||||||
for (int i = 0; i < string.size(); i++)
|
for (int i = 0; i < string.size(); i++)
|
||||||
hash = ((hash << 5) + hash) + string[i];
|
hash = ((hash << 5) + hash) + (unsigned char)string[i];
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
@ -197,26 +197,32 @@ bool isVectorInRect(const Vector &vec, const Vector &coord1, const Vector &coord
|
||||||
return (vec.x > coord1.x && vec.x < coord2.x && vec.y > coord1.y && vec.y < coord2.y);
|
return (vec.x > coord1.x && vec.x < coord2.x && vec.y > coord1.y && vec.y < coord2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char charToUpper(char c)
|
||||||
|
{
|
||||||
|
if (c >= 'a' && c <= 'z') c = c - 'a' + 'A';
|
||||||
|
if ((unsigned char)c >= 0xE0 && (unsigned char)c <= 0xFF)
|
||||||
|
c = c - 0xE0 + 0xC0;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char charToLower(char c)
|
||||||
|
{
|
||||||
|
if (c >= 'A' && c <= 'Z') c = c-'A' + 'a';
|
||||||
|
if ((unsigned char)c >= 0xC0 && (unsigned char)c <= 0xDF)
|
||||||
|
c = c-0xC0+0xE0;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
void stringToUpper(std::string &s)
|
void stringToUpper(std::string &s)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < s.size(); i++)
|
for (int i = 0; i < s.size(); i++)
|
||||||
{
|
s[i] = charToUpper(s[i]);
|
||||||
if (s[i] >= 'a' && s[i] <= 'z')
|
|
||||||
{
|
|
||||||
s[i] = s[i]-'a' + 'A';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringToLower(std::string &s)
|
void stringToLower(std::string &s)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < s.size(); i++)
|
for (int i = 0; i < s.size(); i++)
|
||||||
{
|
s[i] = charToLower(s[i]);
|
||||||
if (s[i] >= 'A' && s[i] <= 'Z')
|
|
||||||
{
|
|
||||||
s[i] = s[i]-'A' + 'a';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void stringToLowerUserData(std::string &s)
|
void stringToLowerUserData(std::string &s)
|
||||||
|
@ -246,9 +252,9 @@ int nocasecmp(const std::string &s1, const std::string &s2)
|
||||||
//stop when either string's end has been reached
|
//stop when either string's end has been reached
|
||||||
while ( (it1!=s1.end()) && (it2!=s2.end()) )
|
while ( (it1!=s1.end()) && (it2!=s2.end()) )
|
||||||
{
|
{
|
||||||
if(::toupper(*it1) != ::toupper(*it2)) //letters differ?
|
if(charToUpper(*it1) != charToUpper(*it2)) //letters differ?
|
||||||
// return -1 to indicate smaller than, 1 otherwise
|
// return -1 to indicate smaller than, 1 otherwise
|
||||||
return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
|
return (charToUpper(*it1) < charToUpper(*it2)) ? -1 : 1;
|
||||||
//proceed to the next character in each string
|
//proceed to the next character in each string
|
||||||
++it1;
|
++it1;
|
||||||
++it2;
|
++it2;
|
||||||
|
@ -261,18 +267,6 @@ int nocasecmp(const std::string &s1, const std::string &s2)
|
||||||
}
|
}
|
||||||
#endif // #if !HAVE_STRCASECMP
|
#endif // #if !HAVE_STRCASECMP
|
||||||
|
|
||||||
std::string upperCase(const std::string &s1)
|
|
||||||
{
|
|
||||||
std::string ret;
|
|
||||||
std::string::const_iterator it1=s1.begin();
|
|
||||||
while (it1 != s1.end())
|
|
||||||
{
|
|
||||||
ret += ::toupper(*it1);
|
|
||||||
++it1;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool exists(const std::string &f, bool makeFatal, bool skipVFS)
|
bool exists(const std::string &f, bool makeFatal, bool skipVFS)
|
||||||
{
|
{
|
||||||
bool e = false;
|
bool e = false;
|
||||||
|
|
|
@ -139,6 +139,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "FileAPI.h"
|
#include "FileAPI.h"
|
||||||
|
|
||||||
|
#ifdef BBGE_BUILD_LINUX
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// dumb win32 includes/defines cleanup
|
// dumb win32 includes/defines cleanup
|
||||||
#undef GetCharWidth
|
#undef GetCharWidth
|
||||||
|
|
||||||
|
@ -220,7 +225,6 @@ static inline int nocasecmp(const char *s1, const char *s2)
|
||||||
#else
|
#else
|
||||||
int nocasecmp(const std::string &s1, const std::string &s2);
|
int nocasecmp(const std::string &s1, const std::string &s2);
|
||||||
#endif
|
#endif
|
||||||
std::string upperCase(const std::string &s1);
|
|
||||||
Vector getNearestPointOnLine(Vector start, Vector end, Vector point);
|
Vector getNearestPointOnLine(Vector start, Vector end, Vector point);
|
||||||
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius=1, Vector* closest=0);
|
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius=1, Vector* closest=0);
|
||||||
void sizePowerOf2Texture(int &v);
|
void sizePowerOf2Texture(int &v);
|
||||||
|
|
|
@ -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
|
// putenv(), which takes a (char *), and freaks out newer GCC releases
|
||||||
// when you try to pass a (const!) string literal here... --ryan.
|
// when you try to pass a (const!) string literal here... --ryan.
|
||||||
SDL_putenv((char *) "SDL_VIDEO_CENTERED=1");
|
SDL_putenv((char *) "SDL_VIDEO_CENTERED=1");
|
||||||
|
SDL_putenv((char *) "LIBGL_DEBUG=verbose"); // temp, to track errors on linux with nouveau drivers.
|
||||||
|
|
||||||
if (recreate)
|
if (recreate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,6 +39,7 @@ BUILD_LINUX
|
||||||
#include "Flags.h"
|
#include "Flags.h"
|
||||||
//#include "Scripting.h"
|
//#include "Scripting.h"
|
||||||
#include "Effects.h"
|
#include "Effects.h"
|
||||||
|
#include "Localization.h"
|
||||||
|
|
||||||
#include "DarkLayer.h"
|
#include "DarkLayer.h"
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
|
|
||||||
#if defined(BBGE_BUILD_WINDOWS) && defined(BBGE_BUILD_XINPUT)
|
#if defined(BBGE_BUILD_WINDOWS) && defined(BBGE_BUILD_XINPUT)
|
||||||
|
@ -68,6 +69,8 @@ bool tryXInput()
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
120
BBGE/Localization.cpp
Normal file
120
BBGE/Localization.cpp
Normal 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
10
BBGE/Localization.h
Normal 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
|
|
@ -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
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
#include "SoundManager.h"
|
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
|
#include "SoundManager.h"
|
||||||
#include "Base.h"
|
#include "Base.h"
|
||||||
#include "PackRead.h"
|
#include "PackRead.h"
|
||||||
|
|
||||||
|
|
125
BBGE/Texture.cpp
125
BBGE/Texture.cpp
|
@ -195,22 +195,10 @@ int Texture::getPixelWidth()
|
||||||
{
|
{
|
||||||
#ifdef BBGE_BUILD_OPENGL
|
#ifdef BBGE_BUILD_OPENGL
|
||||||
int w = 0, h = 0;
|
int w = 0, h = 0;
|
||||||
glBindTexture(GL_TEXTURE_2D, textures[0]);
|
unsigned int size = 0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
|
unsigned char *data = getBufferAndSize(&w, &h, &size);
|
||||||
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));
|
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
|
||||||
debugLog("Texture::getPixelWidth() malloc failed");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
|
||||||
|
|
||||||
int smallestx = -1, largestx = -1;
|
int smallestx = -1, largestx = -1;
|
||||||
for (unsigned int x = 0; x < unsigned(w); x++)
|
for (unsigned int x = 0; x < unsigned(w); x++)
|
||||||
|
@ -227,7 +215,6 @@ int Texture::getPixelWidth()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
|
||||||
free(data);
|
free(data);
|
||||||
return largestx - smallestx;
|
return largestx - smallestx;
|
||||||
#elif defined(BBGE_BUILD_DIRECTX)
|
#elif defined(BBGE_BUILD_DIRECTX)
|
||||||
|
@ -239,20 +226,11 @@ int Texture::getPixelHeight()
|
||||||
{
|
{
|
||||||
#ifdef BBGE_BUILD_OPENGL
|
#ifdef BBGE_BUILD_OPENGL
|
||||||
int w = 0, h = 0;
|
int w = 0, h = 0;
|
||||||
glBindTexture(GL_TEXTURE_2D, textures[0]);
|
unsigned int size = 0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);
|
unsigned char *data = getBufferAndSize(&w, &h, &size);
|
||||||
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));
|
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
|
||||||
debugLog("Texture::getPixelHeight() malloc failed");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
|
||||||
int smallesty = -1, largesty = -1;
|
int smallesty = -1, largesty = -1;
|
||||||
for (unsigned int x = 0; x < unsigned(w); x++)
|
for (unsigned int x = 0; x < unsigned(w); x++)
|
||||||
{
|
{
|
||||||
|
@ -268,7 +246,6 @@ int Texture::getPixelHeight()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
|
||||||
free(data);
|
free(data);
|
||||||
return largesty - smallesty;
|
return largesty - smallesty;
|
||||||
#elif defined(BBGE_BUILD_DIRECTX)
|
#elif defined(BBGE_BUILD_DIRECTX)
|
||||||
|
@ -304,9 +281,6 @@ void Texture::load(std::string file)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
stringToLowerUserData(file);
|
|
||||||
file = core->adjustFilenameCase(file);
|
|
||||||
|
|
||||||
loadName = file;
|
loadName = file;
|
||||||
repeating = false;
|
repeating = false;
|
||||||
|
|
||||||
|
@ -321,12 +295,12 @@ void Texture::load(std::string file)
|
||||||
pos = std::string::npos;
|
pos = std::string::npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (core->debugLogTextures)
|
/*if (core->debugLogTextures)
|
||||||
{
|
{
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << "pos [" << pos << "], file :" << file;
|
os << "pos [" << pos << "], file :" << file;
|
||||||
debugLog(os.str());
|
debugLog(os.str());
|
||||||
}
|
}*/
|
||||||
|
|
||||||
bool found = exists(file);
|
bool found = exists(file);
|
||||||
|
|
||||||
|
@ -341,6 +315,8 @@ void Texture::load(std::string file)
|
||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
|
file = localisePath(file);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << "Loading texture [" << file << "]";
|
os << "Loading texture [" << file << "]";
|
||||||
|
@ -827,3 +803,86 @@ ImageTGA *Texture::TGAloadMem(void *mem, int size)
|
||||||
return pImageData;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -80,6 +80,9 @@ public:
|
||||||
|
|
||||||
void write(int tx, int ty, int w, int h, const unsigned char *pixels);
|
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);
|
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:
|
protected:
|
||||||
std::string loadName;
|
std::string loadName;
|
||||||
|
|
||||||
|
|
|
@ -386,6 +386,7 @@ SET(BBGE_SRCS
|
||||||
${BBGEDIR}/Interpolator.cpp
|
${BBGEDIR}/Interpolator.cpp
|
||||||
${BBGEDIR}/Joystick.cpp
|
${BBGEDIR}/Joystick.cpp
|
||||||
${BBGEDIR}/LensFlare.cpp
|
${BBGEDIR}/LensFlare.cpp
|
||||||
|
${BBGEDIR}/Localization.cpp
|
||||||
${BBGEDIR}/Math.cpp
|
${BBGEDIR}/Math.cpp
|
||||||
${BBGEDIR}/MT.cpp
|
${BBGEDIR}/MT.cpp
|
||||||
${BBGEDIR}/ParticleEffect.cpp
|
${BBGEDIR}/ParticleEffect.cpp
|
||||||
|
|
|
@ -240,7 +240,6 @@ public:
|
||||||
BB_MAKE_WRITE_OP(uint64);
|
BB_MAKE_WRITE_OP(uint64);
|
||||||
BB_MAKE_WRITE_OP(float);
|
BB_MAKE_WRITE_OP(float);
|
||||||
BB_MAKE_WRITE_OP(double);
|
BB_MAKE_WRITE_OP(double);
|
||||||
BB_MAKE_WRITE_OP(int);
|
|
||||||
|
|
||||||
ByteBuffer &operator<<(bool value)
|
ByteBuffer &operator<<(bool value)
|
||||||
{
|
{
|
||||||
|
@ -271,7 +270,6 @@ public:
|
||||||
BB_MAKE_READ_OP(uint64);
|
BB_MAKE_READ_OP(uint64);
|
||||||
BB_MAKE_READ_OP(float);
|
BB_MAKE_READ_OP(float);
|
||||||
BB_MAKE_READ_OP(double);
|
BB_MAKE_READ_OP(double);
|
||||||
BB_MAKE_READ_OP(int);
|
|
||||||
|
|
||||||
ByteBuffer &operator>>(bool &value)
|
ByteBuffer &operator>>(bool &value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,7 +47,7 @@ GLFont::~GLFont ()
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
|
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;
|
char *tex_bytes;
|
||||||
|
|
||||||
//Destroy the old font if there was one, just to be safe
|
//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);
|
vfclose(fh);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int dummy;
|
|
||||||
|
|
||||||
// Read the header from file
|
// Read the header from file
|
||||||
header.tex = tex;
|
header.tex = tex;
|
||||||
bb >> dummy; // skip tex field
|
bb.skipRead(4); // skip tex field
|
||||||
bb >> header.tex_width;
|
header.tex_width = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> header.tex_height;
|
header.tex_height = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> header.start_char;
|
header.start_char = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> header.end_char;
|
header.end_char = bb.read<ByteBuffer::uint32>();
|
||||||
bb >> dummy; // skip chars field
|
bb.skipRead(4); // skip chars field
|
||||||
|
|
||||||
//Allocate space for character array
|
//Allocate space for character array
|
||||||
num_chars = header.end_char - header.start_char + 1;
|
num_chars = header.end_char - header.start_char + 1;
|
||||||
|
@ -91,7 +89,7 @@ bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Read character array
|
//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].dx;
|
||||||
bb >> header.chars[i].dy;
|
bb >> header.chars[i].dy;
|
||||||
|
@ -104,8 +102,8 @@ bool GLFont::Create (const char *file_name, int tex, bool loadTexture)
|
||||||
//Read texture pixel data
|
//Read texture pixel data
|
||||||
num_tex_bytes = header.tex_width * header.tex_height * 2;
|
num_tex_bytes = header.tex_width * header.tex_height * 2;
|
||||||
tex_bytes = new char[num_tex_bytes];
|
tex_bytes = new char[num_tex_bytes];
|
||||||
//input.read(tex_bytes, num_tex_bytes);
|
// HACK: Aquaria uses override textures, so we can live with the truncation.
|
||||||
bb.read(tex_bytes, num_tex_bytes);
|
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);
|
//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;
|
return header.end_char;
|
||||||
}
|
}
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
void GLFont::GetCharSize (int c, std::pair<int, int> *size)
|
void GLFont::GetCharSize (unsigned int c, std::pair<int, int> *size)
|
||||||
{
|
{
|
||||||
//Make sure character is in range
|
//Make sure character is in range
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
|
@ -218,7 +216,7 @@ void GLFont::GetCharSize (int c, std::pair<int, int> *size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
int GLFont::GetCharWidth (int c)
|
int GLFont::GetCharWidth (unsigned int c)
|
||||||
{
|
{
|
||||||
//Make sure in range
|
//Make sure in range
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
|
@ -242,7 +240,7 @@ int GLFont::GetCharWidth (int c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//*******************************************************************
|
//*******************************************************************
|
||||||
int GLFont::GetCharHeight (int c)
|
int GLFont::GetCharHeight (unsigned int c)
|
||||||
{
|
{
|
||||||
//Make sure in range
|
//Make sure in range
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
|
@ -268,7 +266,7 @@ void GLFont::Begin (void)
|
||||||
void GLFont::GetStringSize (const std::string &text, std::pair<int, int> *size)
|
void GLFont::GetStringSize (const std::string &text, std::pair<int, int> *size)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char c;
|
unsigned char c;
|
||||||
GLFontChar *glfont_char;
|
GLFontChar *glfont_char;
|
||||||
float width;
|
float width;
|
||||||
|
|
||||||
|
@ -282,7 +280,7 @@ void GLFont::GetStringSize (const std::string &text, std::pair<int, int> *size)
|
||||||
for (i = 0; i < text.size(); i++)
|
for (i = 0; i < text.size(); i++)
|
||||||
{
|
{
|
||||||
//Make sure character is in range
|
//Make sure character is in range
|
||||||
c = (char)text[i];
|
c = (unsigned char)text[i];
|
||||||
|
|
||||||
if (c < header.start_char || c > header.end_char)
|
if (c < header.start_char || c > header.end_char)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -36,9 +36,9 @@ private:
|
||||||
//glFont header structure
|
//glFont header structure
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
int tex;
|
unsigned int tex;
|
||||||
int tex_width, tex_height;
|
unsigned int tex_width, tex_height;
|
||||||
int start_char, end_char;
|
unsigned int start_char, end_char;
|
||||||
GLFontChar *chars;
|
GLFontChar *chars;
|
||||||
} header;
|
} header;
|
||||||
|
|
||||||
|
@ -70,9 +70,9 @@ public:
|
||||||
int GetEndChar (void);
|
int GetEndChar (void);
|
||||||
|
|
||||||
//Character size retrieval methods
|
//Character size retrieval methods
|
||||||
void GetCharSize (int c, std::pair<int, int> *size);
|
void GetCharSize (unsigned int c, std::pair<int, int> *size);
|
||||||
int GetCharWidth (int c);
|
int GetCharWidth (unsigned int c);
|
||||||
int GetCharHeight (int c);
|
int GetCharHeight (unsigned int c);
|
||||||
|
|
||||||
void GetStringSize (const std::string &text, std::pair<int, int> *size);
|
void GetStringSize (const std::string &text, std::pair<int, int> *size);
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,12 @@
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace minihttp
|
namespace minihttp
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
89
files/data/ingredientnames.txt
Normal file
89
files/data/ingredientnames.txt
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
Anything Anything
|
||||||
|
ArcanePoultice Arcane Poultice
|
||||||
|
Berry Berry
|
||||||
|
BerryIceCream Berry Ice Cream
|
||||||
|
Bulb Bulb
|
||||||
|
ButterySeaLoaf Buttery Sea Loaf
|
||||||
|
Cake Cake
|
||||||
|
ColdBorscht Cold Borscht
|
||||||
|
ColdSoup Cold Soup
|
||||||
|
CrabCake Crab Cake
|
||||||
|
CrabMeat Crab Meat
|
||||||
|
DivineSoup Divine Soup
|
||||||
|
DumboIceCream Dumbo Ice Cream
|
||||||
|
EelOil Eel Oil
|
||||||
|
Egg Egg
|
||||||
|
FishMeat Fish Meat
|
||||||
|
FishOil Fish Oil
|
||||||
|
GlowingEgg Glowing Egg
|
||||||
|
HandRoll Hand Roll
|
||||||
|
HealingPoultice Healing Poultice
|
||||||
|
HeartySoup Hearty Soup
|
||||||
|
HotBorscht Hot Borscht
|
||||||
|
HotSoup Hot Soup
|
||||||
|
IceChunk Ice Chunk
|
||||||
|
IceCream Ice Cream
|
||||||
|
JellyOil Jelly Oil
|
||||||
|
LeadershipRoll Leadership Roll
|
||||||
|
Leaf Leaf
|
||||||
|
LeafPoultice Leaf Poultice
|
||||||
|
LeechingPoultice Leeching Poultice
|
||||||
|
LegendaryCake Legendary Cake
|
||||||
|
Loaf Loaf
|
||||||
|
LoafOfLife Loaf Of Life
|
||||||
|
LongLifeSoup Long Life Soup
|
||||||
|
MagicSoup Magic Soup
|
||||||
|
Meat Meat
|
||||||
|
Mushroom Mushroom
|
||||||
|
Oil Oil
|
||||||
|
Part Part
|
||||||
|
Perogi Perogi
|
||||||
|
PerogiType Perogi
|
||||||
|
PlantBulb Plant Bulb
|
||||||
|
PlantLeaf Plant Leaf
|
||||||
|
PlumpPerogi Plump Perogi
|
||||||
|
PoisonLoaf Poison Loaf
|
||||||
|
PoisonSoup Poison Soup
|
||||||
|
Poultice Poultice
|
||||||
|
RainbowMushroom Rainbow Mushroom
|
||||||
|
RainbowSoup Rainbow Soup
|
||||||
|
RedBerry Red Berry
|
||||||
|
RedBulb Red Bulb
|
||||||
|
Roll Roll
|
||||||
|
RottenCake Rotten Cake
|
||||||
|
RottenLoaf Rotten Loaf
|
||||||
|
RottenMeat Rotten Meat
|
||||||
|
RoyalSoup Royal Soup
|
||||||
|
RubberyMeat Rubbery Meat
|
||||||
|
RukhEgg Rukh Egg
|
||||||
|
SeaCake Sea Cake
|
||||||
|
SeaLoaf Sea Loaf
|
||||||
|
SharkFin Shark Fin
|
||||||
|
SharkFinSoup Shark Fin Soup
|
||||||
|
SightPoultice Sight Poultice
|
||||||
|
SmallBone Small Bone
|
||||||
|
SmallEgg Small Egg
|
||||||
|
SmallEye Small Eye
|
||||||
|
SmallTentacle Small Tentacle
|
||||||
|
Soup Soup
|
||||||
|
SpecialBulb Special Bulb
|
||||||
|
SpecialCake Special Cake
|
||||||
|
SpicyMeat Spicy Meat
|
||||||
|
SpicyRoll Spicy Roll
|
||||||
|
SpicySoup Spicy Soup
|
||||||
|
SpiderEgg Spider Egg
|
||||||
|
SpiderRoll Spider Roll
|
||||||
|
SwampCake Swamp Cake
|
||||||
|
SwordfishSteak Swordfish Steak
|
||||||
|
TastyCake Tasty Cake
|
||||||
|
TastyRoll Tasty Roll
|
||||||
|
ToughCake Tough Cake
|
||||||
|
TurtleMeat Turtle Meat
|
||||||
|
TurtleSoup Turtle Soup
|
||||||
|
Vedha'sCure-All Vedha's Cure- All
|
||||||
|
VedhaSeaCrisp Vedha Sea Crisp
|
||||||
|
VeggieCake Veggie Cake
|
||||||
|
VeggieIceCream Veggie Ice Cream
|
||||||
|
VeggieSoup Veggie Soup
|
||||||
|
VolcanoRoll Volcano Roll
|
||||||
|
Zuuna'sPerogi Zuuna's Perogi
|
|
@ -204,3 +204,5 @@
|
||||||
2028 |Browse & enable/disable installed patches
|
2028 |Browse & enable/disable installed patches
|
||||||
2029 |Browse mods online
|
2029 |Browse mods online
|
||||||
2030 |Return to title
|
2030 |Return to title
|
||||||
|
2031 Any
|
||||||
|
2032 [Achievements]
|
BIN
files/locales/ru/data/font-small.glf
Normal file
BIN
files/locales/ru/data/font-small.glf
Normal file
Binary file not shown.
BIN
files/locales/ru/data/font.ttf
Normal file
BIN
files/locales/ru/data/font.ttf
Normal file
Binary file not shown.
2
files/locales/ru/data/help_bindsong.txt
Normal file
2
files/locales/ru/data/help_bindsong.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[Связующая песня]
|
||||||
|
Эта песня позволяет Найе поднимать и двигать округлые предметы, например камни. Спойте эту песню рядом с подходящим предметом, и он будет следовать за Найей, куда бы она ни отправилась.
|
4
files/locales/ru/data/help_end.txt
Normal file
4
files/locales/ru/data/help_end.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[Дополнительная помощь]
|
||||||
|
Если вы окончательно запутались и не знаете, что делать дальше, загляните на форум aquaria.su и попросите совета у других игроков. :-)
|
||||||
|
|
||||||
|
~ Это все советы, которые могут вам пригодиться на данный момент. Удачи! ~
|
4
files/locales/ru/data/help_end_mac.txt
Normal file
4
files/locales/ru/data/help_end_mac.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[Дополнительная помощь]
|
||||||
|
Если вы окончательно запутались и не знаете, что делать дальше, загляните на форум игры по адресу http://www.snowball.ru/forums/ или http://ambrosiasw.com/forums/ и попросите совета у других игроков. :-)
|
||||||
|
|
||||||
|
~ Это все советы, которые могут вам пригодиться на данный момент. Удачи! ~
|
5
files/locales/ru/data/help_energyform.txt
Normal file
5
files/locales/ru/data/help_energyform.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[Форма силы]
|
||||||
|
В форме силы Найя может атаковать своих врагов. Щелкните правой кнопки мыши, и Найя поразит врага разрядом молнии, но если нажать и держать правую кнопку мыши, Найя одновременно выпустит несколько очень мощных разрядов. Есть и другие формы для атаки, попробуйте их разыскать!
|
||||||
|
|
||||||
|
[Возвращение в естественный облик]
|
||||||
|
Чтобы Найя приняла свое естественное обличье, нажмите левую и правую кнопки мыши одновременно - или нажмите клавишу X.
|
3
files/locales/ru/data/help_header.txt
Normal file
3
files/locales/ru/data/help_header.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
~ Аквария: руководство и помощь ~
|
||||||
|
|
||||||
|
Примечание: нажмите F1, чтобы вызвать этот экран. Вы можете воспользоваться помощью в любое время, когда вы можете управлять персонажем.
|
3
files/locales/ru/data/help_header_mac.txt
Normal file
3
files/locales/ru/data/help_header_mac.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
~ Аквария: руководство и помощь ~
|
||||||
|
|
||||||
|
Примечание: нажмите {ToggleHelp:k0}, чтобы вызвать этот экран. Вы можете воспользоваться помощью в любое время, когда вы можете управлять персонажем.
|
2
files/locales/ru/data/help_other.txt
Normal file
2
files/locales/ru/data/help_other.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[Другие песни и обличья]
|
||||||
|
В водах Акварии вы найдете множество песен и новых обличий. Вам придется узнавать об их возможностях самостоятельно.
|
56
files/locales/ru/data/help_start.txt
Normal file
56
files/locales/ru/data/help_start.txt
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
[Управление]
|
||||||
|
Все действия в игре "Аквария" можно выполнить при помощи мыши.
|
||||||
|
|
||||||
|
На клавиатуре левой кнопке мыши по умолчанию соответствует клавиша "Пробел", а правой - клавиша "Ctrl".
|
||||||
|
|
||||||
|
[Движение]
|
||||||
|
Нажмите и держите левую кнопку мыши, чтобы плыть. Вы также можете использовать клавиши A-S-D-W или клавиши со стрелками.
|
||||||
|
|
||||||
|
Нажмите и задержите левую кнопку мыши, отведя курсор от Найи, чтобы она сделала рывок вперед. Так Найя сможет ускользнуть от любого преследователя. Если вы играете с клавиатуры, чтобы выполнить рывок, нажмите пробел.
|
||||||
|
|
||||||
|
Если вы нажмете кнопку мыши сразу после рывка, Найя сделает кувырок.
|
||||||
|
|
||||||
|
Если во время рывка на пути у Найи окажется стена, то Найя ухватится за нее. Делая рывок со стены, Найя разгоняется еще сильнее.
|
||||||
|
|
||||||
|
Зажмите левую кнопку мыши и проведите курсором вокруг Найи, и она закружится. Это не только притянет к ней легкие предметы, оказавшиеся рядом, но и создаст волну, которая тоже оказывает некоторое воздействие на окружающих. Чтобы кружиться, также можно нажать клавишу R.
|
||||||
|
|
||||||
|
[Пение]
|
||||||
|
Нажмите и держите правую кнопку мыши или клавишу Ctrl, чтобы начать песню.
|
||||||
|
|
||||||
|
Когда Найя поет, вокруг нее появляются восемь нот. Наведите курсор на ноту, чтобы Найя ее спела. Разные существа Акварии реагируют на пение по-разному.
|
||||||
|
|
||||||
|
[Песни]
|
||||||
|
Во время странствий Найя найдет несколько песен. Выученные песни можно послушать в любой момент в меню игры. Песня - это определенная последовательность нот, которую надо повторять каждый раз, чтобы получить желаемый эффект. Каждая песня по-своему влияет на Найю и окружающий ее мир.
|
||||||
|
|
||||||
|
[Взаимодействие]
|
||||||
|
С некоторыми предметами в мире Акварии Найя может взаимодействовать. При наведении на такой предмет курсор начинает светиться. Нажмите правую кнопку мыши, чтобы с таким предметом что-нибудь сделать. Среди таких предметов кухонный стол Найи, ее постель, камни, на которых Найя может сидеть, а также кристаллы для сохранения игры.
|
||||||
|
|
||||||
|
[Сохранение игры]
|
||||||
|
Щелкните правой кнопкой мыши по красному кристаллу, чтобы вызвать меню сохраненных игр. Выберите ячейку, в которой следует сохранить ваши достижения.
|
||||||
|
|
||||||
|
[Мини-карта]
|
||||||
|
Мини-карта отображает мир, окружающий Найю. Золотым кружком отмечена пещера, в которой живет ваша героиня. Красные кружки показывают, где находятся кристаллы сохранения.
|
||||||
|
|
||||||
|
[Карта мира]
|
||||||
|
Двойной щелчок по мини-карте откроет карту мира. Здесь отмечены все зоны, которые вам уже известны. Щелкнув по зоне, вы увидите, какие ее части вы уже исследовали, а в каких вам еще предстоит побывать.
|
||||||
|
|
||||||
|
Щелкнув по пирамидке в правой части экрана, вы можете поместить на карту собственную отметку. Чтобы убрать отметку, щелкните по ней правой кнопкой мыши.
|
||||||
|
|
||||||
|
Большие круги, которые появляются на карте мира, называются маяками. Они показывают Найе новые места, которые ей предстоит посетить. Если вы запутались и не знаете, куда вам плыть дальше, попытайтесь отыскать на карте мира значок маяка.
|
||||||
|
|
||||||
|
[Еда]
|
||||||
|
Найя может создавать вкусные блюда из самых разных ингредиентов или из уже готовых блюд. Откройте экран кулинарии, перетащите по крайней мере два ингредиента на тарелочки в правой части экрана и щелкните по кнопке "Приготовить". Вы можете в любой момент посмотреть, из чего готовится то или иное блюдо, щелкнув по кнопке "Рецепты".
|
||||||
|
|
||||||
|
Маленькая кнопочка в верхнем левом углу экрана кулинарии позволит вам отсортировать найденные продукты.
|
||||||
|
|
||||||
|
Чтобы съесть блюдо, дважды щелкните по нему левой кнопкой мыши или поднесите его ко рту Найи. Перетащив еду на тарелку с крестиком, вы можете выбросить ее.
|
||||||
|
|
||||||
|
[Питомцы]
|
||||||
|
Вы можете выбрать питомца, который будет сопровождать вас, щелкнув по его икринке на экране питомцев. Если вы хотите путешествовать в одиночестве, щелкните по икринке выбранного питомца еще раз. Каждый из питомцев обладает уникальными способностями.
|
||||||
|
|
||||||
|
[Сокровища]
|
||||||
|
Редкие и необычные предметы, которые привлекают внимание Найи, она называет сокровищами. Отыскав такой предмет, просто прикоснитесь к нему, и он окажется в коллекции Найи. Полный список находок можно в любой момент просмотреть на экране сокровищ. Щелкните по стрелочкам над сокровищами, чтобы перейти к следующей странице.
|
||||||
|
|
||||||
|
Щелкнув по изображению сокровища, вы увидите его описание. Некоторые сокровища можно использовать. Для этого щелкните по соответствующей кнопке на этом же экране.
|
||||||
|
|
||||||
|
В мире Акварии спрятано немало сокровищ. Постарайтесь разыскать их все!
|
88
files/locales/ru/data/ingredientnames.txt
Normal file
88
files/locales/ru/data/ingredientnames.txt
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
Anything Что угодно
|
||||||
|
ArcanePoultice Тайная припарка
|
||||||
|
Berry Ягода
|
||||||
|
BerryIceCream Ягодное мороженое
|
||||||
|
Bulb Клубень
|
||||||
|
ButterySeaLoaf Масляный морской хлеб
|
||||||
|
ColdBorscht Холодный борщ
|
||||||
|
ColdSoup Холодный суп
|
||||||
|
Cake Кекс
|
||||||
|
CrabCake Крабовый кекс
|
||||||
|
CrabMeat Крабовое мясо
|
||||||
|
DivineSoup Божественный суп
|
||||||
|
DumboIceCream Мороженое Дамбо
|
||||||
|
EelOil Жир угря
|
||||||
|
Egg Яйцо
|
||||||
|
FishMeat Мясо рыбы
|
||||||
|
FishOil Рыбий жир
|
||||||
|
GlowingEgg Светящаяся икринка
|
||||||
|
HandRoll Ручной рулет
|
||||||
|
HealingPoultice Целебная припарка
|
||||||
|
HeartySoup Суп здоровья
|
||||||
|
HotBorscht Горячий борщ
|
||||||
|
HotSoup Горячий суп
|
||||||
|
IceChunk Осколок льда
|
||||||
|
IceCream Мороженое
|
||||||
|
JellyOil Желе медузы
|
||||||
|
LeadershipRoll Рулет лидерства
|
||||||
|
Leaf Лист
|
||||||
|
LeafPoultice Припарка
|
||||||
|
LeechingPoultice Припарка высасывания
|
||||||
|
LegendaryCake Легендарный кекс
|
||||||
|
Loaf Хлеб
|
||||||
|
LoafOfLife Хлеб жизни
|
||||||
|
LongLifeSoup Суп долголетия
|
||||||
|
MagicSoup Волшебный суп
|
||||||
|
Meat Мясо
|
||||||
|
Mushroom Гриб
|
||||||
|
Oil Жир
|
||||||
|
Part Часть
|
||||||
|
Perogi Пирог
|
||||||
|
PlantBulb Клубень растения
|
||||||
|
PlantLeaf Лист растения
|
||||||
|
PlumpPerogi Пухлый пирог
|
||||||
|
PoisonLoaf Ядовитый хлеб
|
||||||
|
PoisonSoup Ядовитый суп
|
||||||
|
Poultice Припарка
|
||||||
|
RainbowMushroom Радужный гриб
|
||||||
|
RainbowSoup Радужный суп
|
||||||
|
RedBerry Красная ягода
|
||||||
|
RedBulb Красный клубень
|
||||||
|
Roll Рулет
|
||||||
|
RottenCake Гнилой кекс
|
||||||
|
RottenLoaf Гнилой хлеб
|
||||||
|
RottenMeat Тухлое мясо
|
||||||
|
RoyalSoup Королевский суп
|
||||||
|
RubberyMeat Жесткое мясо
|
||||||
|
RukhEgg Яйцо птицы Рух
|
||||||
|
SeaCake Морской кекс
|
||||||
|
SeaLoaf Морской хлеб
|
||||||
|
SharkFin Акулий плавник
|
||||||
|
SharkFinSoup Суп из акульего плавника
|
||||||
|
SightPoultice Припарка зрения
|
||||||
|
SmallBone Маленькая кость
|
||||||
|
SmallEgg Икра
|
||||||
|
SmallEye Маленький глаз
|
||||||
|
SmallTentacle Маленькое щупальце
|
||||||
|
Soup Суп
|
||||||
|
SpecialBulb Особый клубень
|
||||||
|
SpecialCake Особый кекс
|
||||||
|
SpicyMeat Пряное мясо
|
||||||
|
SpicyRoll Пряный рулет
|
||||||
|
SpicySoup Пряный суп
|
||||||
|
SpiderEgg Паучье яйцо
|
||||||
|
SpiderRoll Паучий рулет
|
||||||
|
SwampCake Болотный кекс
|
||||||
|
SwordfishSteak Стейк рыбы-меч
|
||||||
|
TastyCake Вкусный кекс
|
||||||
|
TastyRoll Вкусный рулет
|
||||||
|
ToughCake Черствый кекс
|
||||||
|
TurtleMeat Черепашье мясо
|
||||||
|
TurtleSoup Черепаший суп
|
||||||
|
Vedha'sCure-All Всеисцеляющая припарка Веды
|
||||||
|
VedhaSeaCrisp Морские чипсы Веды
|
||||||
|
VeggieCake Овощной кекс
|
||||||
|
VeggieIceCream Овощное мороженое
|
||||||
|
VeggieSoup Овощной суп
|
||||||
|
VolcanoRoll Вулканический рулет
|
||||||
|
Zuuna'sPerogi Пирог Зууны
|
207
files/locales/ru/data/stringbank.txt
Normal file
207
files/locales/ru/data/stringbank.txt
Normal 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]
|
BIN
files/locales/ru/gfx/font.png
Normal file
BIN
files/locales/ru/gfx/font.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
431
game_scripts/scripts/entities/entities.txt
Normal file
431
game_scripts/scripts/entities/entities.txt
Normal 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
|
417
game_scripts/scripts/entities/entitygroups.txt
Normal file
417
game_scripts/scripts/entities/entitygroups.txt
Normal 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
|
|
@ -55,7 +55,7 @@ function v.commonInit(me, size)
|
||||||
512, -- sprite height
|
512, -- sprite height
|
||||||
1, -- particle "explosion" type, maps to particleEffects.txt -1 = none
|
1, -- particle "explosion" type, maps to particleEffects.txt -1 = none
|
||||||
1, -- 0/1 hit other entities off/on (uses collideRadius)
|
1, -- 0/1 hit other entities off/on (uses collideRadius)
|
||||||
4000, -- updateCull -1: disabled, default: 4000
|
4000 -- updateCull -1: disabled, default: 4000
|
||||||
)
|
)
|
||||||
|
|
||||||
loadSound("IceChunkBreak")
|
loadSound("IceChunkBreak")
|
||||||
|
|
|
@ -131,6 +131,7 @@
|
||||||
BufferSecurityCheck="false"
|
BufferSecurityCheck="false"
|
||||||
EnableFunctionLevelLinking="false"
|
EnableFunctionLevelLinking="false"
|
||||||
EnableEnhancedInstructionSet="2"
|
EnableEnhancedInstructionSet="2"
|
||||||
|
FloatingPointModel="2"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
DebugInformationFormat="3"
|
DebugInformationFormat="3"
|
||||||
|
|
|
@ -123,6 +123,7 @@
|
||||||
BufferSecurityCheck="false"
|
BufferSecurityCheck="false"
|
||||||
EnableFunctionLevelLinking="false"
|
EnableFunctionLevelLinking="false"
|
||||||
EnableEnhancedInstructionSet="2"
|
EnableEnhancedInstructionSet="2"
|
||||||
|
FloatingPointModel="2"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
DebugInformationFormat="3"
|
DebugInformationFormat="3"
|
||||||
|
@ -331,6 +332,14 @@
|
||||||
RelativePath="..\..\BBGE\LensFlare.cpp"
|
RelativePath="..\..\BBGE\LensFlare.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\BBGE\Localization.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\BBGE\Localization.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BBGE\Math.cpp"
|
RelativePath="..\..\BBGE\Math.cpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -123,6 +123,7 @@
|
||||||
BufferSecurityCheck="false"
|
BufferSecurityCheck="false"
|
||||||
EnableFunctionLevelLinking="false"
|
EnableFunctionLevelLinking="false"
|
||||||
EnableEnhancedInstructionSet="2"
|
EnableEnhancedInstructionSet="2"
|
||||||
|
FloatingPointModel="2"
|
||||||
RuntimeTypeInfo="false"
|
RuntimeTypeInfo="false"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
|
|
Loading…
Add table
Reference in a new issue