optimizations

develop
Petr Mrázek 2009-11-22 14:43:53 +00:00
parent 99f6e0860f
commit 6cb7c4a636
7 changed files with 1936 additions and 1163 deletions

@ -41,6 +41,9 @@ class API::Private
uint32_t tile_type_offset; uint32_t tile_type_offset;
uint32_t designation_offset; uint32_t designation_offset;
uint32_t occupancy_offset; uint32_t occupancy_offset;
uint32_t biome_stuffs;
uint32_t veinvector;
uint32_t veinsize;
uint32_t window_x_offset; uint32_t window_x_offset;
uint32_t window_y_offset; uint32_t window_y_offset;
@ -151,7 +154,10 @@ bool API::InitMap()
d->tile_type_offset = d->offset_descriptor->getOffset("type"); d->tile_type_offset = d->offset_descriptor->getOffset("type");
d->designation_offset = d->offset_descriptor->getOffset("designation"); d->designation_offset = d->offset_descriptor->getOffset("designation");
d->occupancy_offset = d->offset_descriptor->getOffset("occupancy"); d->occupancy_offset = d->offset_descriptor->getOffset("occupancy");
d->biome_stuffs = d->offset_descriptor->getOffset("biome_stuffs");
d->veinvector = d->offset_descriptor->getOffset("v_vein");
d->veinsize = d->offset_descriptor->getHexValue("v_vein_size");
// get the map pointer // get the map pointer
uint32_t x_array_loc = MreadDWord(map_offset); uint32_t x_array_loc = MreadDWord(map_offset);
@ -211,14 +217,14 @@ bool API::DestroyMap()
bool API::isValidBlock(uint32_t x, uint32_t y, uint32_t z) bool API::isValidBlock(uint32_t x, uint32_t y, uint32_t z)
{ {
return d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z] != NULL; return d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z] != 0;
} }
// 256 * sizeof(uint16_t) // 256 * sizeof(uint16_t)
bool API::ReadTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer) bool API::ReadTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mread(addr+d->tile_type_offset, 256 * sizeof(uint16_t), (uint8_t *)buffer); Mread(addr+d->tile_type_offset, 256 * sizeof(uint16_t), (uint8_t *)buffer);
return true; return true;
@ -231,7 +237,7 @@ bool API::ReadTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
bool API::ReadDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer) bool API::ReadDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mread(addr+d->designation_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer); Mread(addr+d->designation_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true; return true;
@ -244,7 +250,7 @@ bool API::ReadDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
bool API::ReadOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer) bool API::ReadOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mread(addr+d->occupancy_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer); Mread(addr+d->occupancy_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true; return true;
@ -257,7 +263,7 @@ bool API::ReadOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
bool API::WriteTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer) bool API::WriteTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mwrite(addr+d->tile_type_offset, 256 * sizeof(uint16_t), (uint8_t *)buffer); Mwrite(addr+d->tile_type_offset, 256 * sizeof(uint16_t), (uint8_t *)buffer);
return true; return true;
@ -270,7 +276,7 @@ bool API::WriteTileTypes(uint32_t x, uint32_t y, uint32_t z, uint16_t *buffer)
bool API::WriteDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer) bool API::WriteDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mwrite(addr+d->designation_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer); Mwrite(addr+d->designation_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true; return true;
@ -283,7 +289,7 @@ bool API::WriteDesignations(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer
bool API::WriteOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer) bool API::WriteOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mwrite(addr+d->occupancy_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer); Mwrite(addr+d->occupancy_offset, 256 * sizeof(uint32_t), (uint8_t *)buffer);
return true; return true;
@ -296,11 +302,10 @@ bool API::WriteOccupancy(uint32_t x, uint32_t y, uint32_t z, uint32_t *buffer)
// 16 * sizeof(uint8_t) // 16 * sizeof(uint8_t)
bool API::ReadRegionOffsets(uint32_t x, uint32_t y, uint32_t z, uint8_t *buffer) bool API::ReadRegionOffsets(uint32_t x, uint32_t y, uint32_t z, uint8_t *buffer)
{ {
uint32_t biome_stuffs = d->offset_descriptor->getOffset("biome_stuffs");
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
if (addr!=NULL) if (addr)
{ {
Mread(addr+biome_stuffs, 16 * sizeof(uint8_t), buffer); Mread(addr+d->biome_stuffs, 16 * sizeof(uint8_t), buffer);
return true; return true;
} }
return false; return false;
@ -311,25 +316,25 @@ bool API::ReadRegionOffsets(uint32_t x, uint32_t y, uint32_t z, uint8_t *buffer)
bool API::ReadVeins(uint32_t x, uint32_t y, uint32_t z, vector <t_vein> & veins) bool API::ReadVeins(uint32_t x, uint32_t y, uint32_t z, vector <t_vein> & veins)
{ {
uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z]; uint32_t addr = d->block[x*d->y_block_count*d->z_block_count + y*d->z_block_count + z];
int veinvector = d->offset_descriptor->getOffset("v_vein"); assert(sizeof(t_vein) == d->veinsize);
int veinsize = d->offset_descriptor->getHexValue("v_vein_size");
veins.clear(); veins.clear();
if(addr!=NULL && veinvector && veinsize) if(addr && d->veinvector && d->veinsize)
{ {
assert(sizeof(t_vein) == veinsize);
// veins are stored as a vector of pointers to veins // veins are stored as a vector of pointers to veins
/*pointer is 4 bytes! we work with a 32bit program here, no matter what architecture we compile khazad for*/ /*pointer is 4 bytes! we work with a 32bit program here, no matter what architecture we compile khazad for*/
DfVector p_veins = d->dm->readVector(addr + veinvector, 4); DfVector p_veins = d->dm->readVector(addr + d->veinvector, 4);
uint32_t size = p_veins.getSize();
veins.reserve(size);
// read all veins // read all veins
for (uint32_t i = 0; i< p_veins.getSize();i++) for (uint32_t i = 0; i< size;i++)
{ {
t_vein v; t_vein v;
// read the vein pointer from the vector // read the vein pointer from the vector
uint32_t temp = *(uint32_t *) p_veins[i]; uint32_t temp = *(uint32_t *) p_veins[i];
// read the vein data (dereference pointer) // read the vein data (dereference pointer)
Mread(temp, veinsize, (uint8_t *)&v); Mread(temp, d->veinsize, (uint8_t *)&v);
// store it in the vector // store it in the vector
veins.push_back(v); veins.push_back(v);
} }

@ -29,29 +29,12 @@ distribution.
#include <string> #include <string>
#include <vector> #include <vector>
#include "integers.h" #include "integers.h"
#include "DFTileTypes.h"
namespace DFHack namespace DFHack
{ {
class memory_info; class memory_info;
class Process; class Process;
enum VegetationType
{
TREE_DEAD,
TREE_OK,
SAPLING_DEAD,
SAPLING_OK,
SHRUB_DEAD,
SHRUB_OK
};
DFHACK_EXPORT bool isWallTerrain(int in);
DFHACK_EXPORT bool isFloorTerrain(int in);
DFHACK_EXPORT bool isRampTerrain(int in);
DFHACK_EXPORT bool isStairTerrain(int in);
DFHACK_EXPORT bool isOpenTerrain(int in);
DFHACK_EXPORT int getVegetationType(int in);
class DFHACK_EXPORT API class DFHACK_EXPORT API
{ {
class Private; class Private;

@ -39,7 +39,7 @@ void memory_info::setVersion(const char * v)
} }
void memory_info::setVersion(string v) void memory_info::setVersion(const string &v)
{ {
version = v; version = v;
} }
@ -63,7 +63,7 @@ void memory_info::setOS(const char *os)
} }
void memory_info::setOS(string os) void memory_info::setOS(const string &os)
{ {
if(os == "windows") if(os == "windows")
OS = OS_WINDOWS; OS = OS_WINDOWS;
@ -85,7 +85,7 @@ void memory_info::setOS(OSType os)
} }
memory_info::OSType memory_info::getOS() memory_info::OSType memory_info::getOS() const
{ {
return OS; return OS;
} }
@ -112,57 +112,57 @@ memory_info::memory_info(const memory_info &old)
} }
uint32_t memory_info::getBase () uint32_t memory_info::getBase () const
{ {
return base; return base;
} }
void memory_info::setBase (string s) void memory_info::setBase (const string &s)
{ {
base = strtol(s.c_str(), NULL, 16); base = strtol(s.c_str(), NULL, 16);
} }
void memory_info::setBase (uint32_t b) void memory_info::setBase (const uint32_t b)
{ {
base = b; base = b;
} }
void memory_info::setOffset (string key, string value) void memory_info::setOffset (const string & key, const string & value)
{ {
uint32_t offset = strtol(value.c_str(), NULL, 16); uint32_t offset = strtol(value.c_str(), NULL, 16);
offsets[key] = offset; offsets[key] = offset;
} }
void memory_info::setAddress (string key, string value) void memory_info::setAddress (const string & key, const string & value)
{ {
uint32_t address = strtol(value.c_str(), NULL, 16); uint32_t address = strtol(value.c_str(), NULL, 16);
addresses[key] = address; addresses[key] = address;
} }
void memory_info::setHexValue (string key, string value) void memory_info::setHexValue (const string & key, const string & value)
{ {
uint32_t hexval = strtol(value.c_str(), NULL, 16); uint32_t hexval = strtol(value.c_str(), NULL, 16);
hexvals[key] = hexval; hexvals[key] = hexval;
} }
void memory_info::setString (string key, string value) void memory_info::setString (const string & key, const string & value)
{ {
strings[key] = value; strings[key] = value;
} }
void memory_info::setLabor(string key, string value) void memory_info::setLabor(const string & key, const string & value)
{ {
uint32_t keyInt = strtol(key.c_str(), NULL, 10); uint32_t keyInt = strtol(key.c_str(), NULL, 10);
labors[keyInt] = value; labors[keyInt] = value;
} }
void memory_info::setProfession (string key, string value) void memory_info::setProfession (const string & key, const string & value)
{ {
uint32_t keyInt = strtol(key.c_str(), NULL, 10); uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(professions.size() <= keyInt) if(professions.size() <= keyInt)
@ -172,7 +172,7 @@ void memory_info::setProfession (string key, string value)
professions[keyInt] = value; professions[keyInt] = value;
} }
void memory_info::setJob (string key, string value) void memory_info::setJob (const string & key, const string & value)
{ {
uint32_t keyInt = strtol(key.c_str(), NULL, 10); uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(jobs.size() <= keyInt) if(jobs.size() <= keyInt)
@ -182,7 +182,7 @@ void memory_info::setJob (string key, string value)
jobs[keyInt] = value; jobs[keyInt] = value;
} }
void memory_info::setSkill (string key, string value) void memory_info::setSkill (const string & key, const string & value)
{ {
uint32_t keyInt = strtol(key.c_str(), NULL, 10); uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(skills.size() <= keyInt){ if(skills.size() <= keyInt){
@ -191,7 +191,14 @@ void memory_info::setSkill (string key, string value)
skills[keyInt] = value; skills[keyInt] = value;
} }
void memory_info::setTrait(string key,string value,string zero,string one,string two,string three,string four,string five) void memory_info::setTrait(const string & key,
const string & value,
const string & zero,
const string & one,
const string & two,
const string & three,
const string & four,
const string & five)
{ {
uint32_t keyInt = strtol(key.c_str(), NULL, 10); uint32_t keyInt = strtol(key.c_str(), NULL, 10);
if(traits.size() <= keyInt) if(traits.size() <= keyInt)
@ -341,7 +348,7 @@ void memory_info::copyBuildings(vector<string> & v_buildingtypes)
// change base of all addresses // change base of all addresses
void memory_info::RebaseAddresses(int32_t new_base) void memory_info::RebaseAddresses(const int32_t new_base)
{ {
map<string, uint32_t>::iterator iter; map<string, uint32_t>::iterator iter;
int32_t rebase = - (int32_t)base + new_base; int32_t rebase = - (int32_t)base + new_base;
@ -375,74 +382,115 @@ void memory_info::RebaseVTable(int32_t offset)
} }
} }
// Get named address // Get named address
uint32_t memory_info::getAddress (string key) uint32_t memory_info::getAddress (const char *key)
{ {
if(addresses.count(key)) map <string, uint32_t>::iterator iter = addresses.find(key);
if(iter != addresses.end())
{ {
return addresses[key]; return (*iter).second;
} }
return 0; return 0;
} }
// Get named offset // Get named offset
uint32_t memory_info::getOffset (string key) uint32_t memory_info::getOffset (const char *key)
{
map <string, uint32_t>::iterator iter = offsets.find(key);
if(iter != offsets.end())
{
return (*iter).second;
}
return 0;
}
// Get named numerical value
uint32_t memory_info::getHexValue (const char *key)
{ {
if(offsets.count(key)) map <string, uint32_t>::iterator iter = hexvals.find(key);
if(iter != hexvals.end())
{ {
return offsets[key]; return (*iter).second;
} }
return 0; return 0;
} }
// Get named string // Get named address
std::string memory_info::getString (string key) uint32_t memory_info::getAddress (const string &key)
{ {
if(strings.count(key)) map <string, uint32_t>::iterator iter = addresses.find(key);
if(iter != addresses.end())
{ {
return strings[key]; return (*iter).second;
} }
else return string(""); return 0;
} }
// Get named offset
uint32_t memory_info::getOffset (const string &key)
{
map <string, uint32_t>::iterator iter = offsets.find(key);
if(iter != offsets.end())
{
return (*iter).second;
}
return 0;
}
// Get named numerical value // Get named numerical value
uint32_t memory_info::getHexValue (string key) uint32_t memory_info::getHexValue (const string &key)
{ {
if(hexvals.count(key)) map <string, uint32_t>::iterator iter = hexvals.find(key);
if(iter != hexvals.end())
{ {
return hexvals[key]; return (*iter).second;
} }
return 0; return 0;
} }
// Get named string
std::string memory_info::getString (const string &key)
{
map <string, string>::iterator iter = strings.find(key);
if(iter != strings.end())
{
return (*iter).second;
}
return string("");
}
// Get Profession // Get Profession
string memory_info::getProfession (uint32_t key) string memory_info::getProfession (const uint32_t key) const
{ {
if(professions.size() > key) if(professions.size() > key)
{ {
return professions[key]; return professions[key];
} }
else{ else
{
return string(""); return string("");
} }
} }
// Get Job // Get Job
string memory_info::getJob (uint32_t key) string memory_info::getJob (const uint32_t key) const
{ {
if(jobs.size() > key){ if(jobs.size() > key)
{
return jobs[key]; return jobs[key];
} }
return string("Job Does Not Exist"); return string("Job Does Not Exist");
} }
string memory_info::getSkill (uint32_t key) string memory_info::getSkill (const uint32_t key) const
{ {
if(skills.size() > key){ if(skills.size() > key)
{
return skills[key]; return skills[key];
} }
return string("Skill is not Defined"); return string("Skill is not Defined");
@ -456,7 +504,7 @@ int absolute (int number)
return number; return number;
} }
string memory_info::getTrait (uint32_t traitIdx, uint32_t traitValue) string memory_info::getTrait (const uint32_t traitIdx, const uint32_t traitValue) const
{ {
if(traits.size() > traitIdx) if(traits.size() > traitIdx)
{ {
@ -481,7 +529,7 @@ string memory_info::getTrait (uint32_t traitIdx, uint32_t traitValue)
return string("Trait is not Defined"); return string("Trait is not Defined");
} }
string memory_info::getTraitName(uint32_t traitIdx) string memory_info::getTraitName(const uint32_t traitIdx) const
{ {
if(traits.size() > traitIdx) if(traits.size() > traitIdx)
{ {
@ -490,7 +538,7 @@ string memory_info::getTraitName(uint32_t traitIdx)
return string("Trait is not Defined"); return string("Trait is not Defined");
} }
string memory_info::getLabor (uint32_t laborIdx) string memory_info::getLabor (const uint32_t laborIdx)
{ {
if(labors.count(laborIdx)) if(labors.count(laborIdx))
{ {

@ -60,59 +60,63 @@ namespace DFHack
memory_info(const memory_info&); memory_info(const memory_info&);
void RebaseAddresses(int32_t new_base); void RebaseAddresses(const int32_t new_base);
void RebaseAll(int32_t new_base); void RebaseAll(const int32_t new_base);
uint32_t getBase (); uint32_t getBase () const;
void setBase (string); void setBase (const string&);
void setBase (uint32_t); void setBase (const uint32_t);
uint32_t getOffset (string); uint32_t getOffset (const string&);
uint32_t getAddress (string); uint32_t getAddress (const string&);
uint32_t getHexValue (string); uint32_t getHexValue (const string&);
string getString (string); uint32_t getOffset (const char *);
string getProfession(uint32_t); uint32_t getAddress (const char *);
string getJob(uint32_t); uint32_t getHexValue (const char *);
string getSkill (uint32_t);
string getTrait (uint32_t, uint32_t); string getString (const string&);
string getTraitName(uint32_t); string getProfession(const uint32_t) const;
string getLabor (uint32_t); string getJob(const uint32_t) const;
string getSkill (const uint32_t) const;
string getTrait (const uint32_t, const uint32_t) const;
string getTraitName(const uint32_t) const;
string getLabor (const uint32_t);
void setVersion(const char *); void setVersion(const char *);
void setVersion(string); void setVersion(const string&);
string getVersion(); string getVersion();
void setOS(const char *); void setOS(const char *);
void setOS(string); void setOS(const string&);
void setOS(OSType); void setOS(const OSType);
OSType getOS(); OSType getOS() const;
void setOffset (string, int32_t); void setOffset (const string &, const int32_t);
void setAddress (string, uint32_t); void setAddress (const string &, const uint32_t);
void setHexValue (string, uint32_t); void setHexValue (const string &, const uint32_t);
void setOffset (string, const char *); void setOffset (const string &, const char *);
void setAddress (string, const char *); void setAddress (const string &, const char *);
void setHexValue (string, const char *); void setHexValue (const string &, const char *);
void setString (string, const char *); void setString (const string &, const char *);
void setOffset (string, string); void setOffset (const string &, const string &);
void setAddress (string, string); void setAddress (const string &, const string &);
void setHexValue (string, string); void setHexValue (const string &, const string &);
void setString (string, string); void setString (const string &, const string &);
void setProfession(string, string); void setProfession(const string &, const string &);
void setJob(string, string); void setJob(const string &, const string &);
void setSkill(string, string); void setSkill(const string &, const string &);
void setTrait(string,string,string,string,string,string,string,string); void setTrait(const string &,const string &,const string &,const string &,const string &,const string &,const string &,const string &);
void setLabor(string, string); void setLabor(const string &, const string &);
void RebaseVTable(int32_t offset); void RebaseVTable(const int32_t offset);
void setClass (const char * name, const char * vtable); void setClass (const char * name, const char * vtable);
uint32_t setMultiClass (const char * name, const char * vtable, const char * typeoffset); uint32_t setMultiClass (const char * name, const char * vtable, const char * typeoffset);
void setMultiClassChild (uint32_t multi_index, const char * name, const char * type); void setMultiClassChild (uint32_t multi_index, const char * name, const char * type);
// ALERT: uses memory reading directly // ALERT: uses memory reading directly
bool resolveClassId(uint32_t address, int32_t & classid); bool resolveClassId(const uint32_t address, int32_t & classid);
void copyBuildings(vector<string> & v_buildingtypes); void copyBuildings(vector<string> & v_buildingtypes);
void flush(); void flush();

File diff suppressed because it is too large Load Diff

@ -25,4 +25,734 @@ distribution.
#ifndef TILETYPES_H_INCLUDED #ifndef TILETYPES_H_INCLUDED
#define TILETYPES_H_INCLUDED #define TILETYPES_H_INCLUDED
namespace DFHack
{
enum TileClass
{
EMPTY,
WALL,
PILLAR,
FORTIFICATION,
STAIR_UP,
STAIR_DOWN,
STAIR_UPDOWN,
RAMP,
FLOOR,
TREE_DEAD,
TREE_OK,
SAPLING_DEAD,
SAPLING_OK,
SHRUB_DEAD,
SHRUB_OK,
BOULDER,
PEBBLES
};
enum TileMaterial
{
AIR,
SOIL,
STONE,
FEATSTONE, // whatever it is
OBSIDIAN,
VEIN,
ICE,
GRASS,
GRASS2,
GRASS_DEAD,
GRASS_DRY,
DRIFTWOOD,
HFS,
MAGMA,
CAMPFIRE,
FIRE,
ASHES,
CONSTRUCTED
};
enum TileVariant
{
VAR_1,
VAR_2,
VAR_3,
VAR_4
};
struct TileRow
{
const char * name;
TileClass c;
TileMaterial m;
TileVariant v;
};
const TileRow tileTypeTable[520] =
{
// 0
{"void",EMPTY, AIR, VAR_1},
{"ramp top",EMPTY, AIR, VAR_1},
{"pool",FLOOR, SOIL, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
// 10
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{0, EMPTY, AIR, VAR_1},
{"driftwood stack",FLOOR, DRIFTWOOD, VAR_1},
// 20
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"tree",TREE_OK, SOIL, VAR_1},
{"ice stair up/down",STAIR_UPDOWN, ICE, VAR_1},
{"ice stair down",STAIR_DOWN, ICE, VAR_1},
{"ice stair up",STAIR_UP, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 30
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"empty space",EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"shrub",SHRUB_OK, SOIL, VAR_1},
{"chasm",FLOOR, AIR, VAR_1},
{"obsidian stair up/down",STAIR_UPDOWN, OBSIDIAN, VAR_1},
{"obsidian stair down",STAIR_DOWN, OBSIDIAN, VAR_1},
{"obsidian stair up",STAIR_UP, OBSIDIAN, VAR_1},
{"soil stair up/down",STAIR_UPDOWN, SOIL, VAR_1},
// 40
{"soil stair down",STAIR_DOWN, SOIL, VAR_1},
{"soil stair up",STAIR_UP, SOIL, VAR_1},
{"eerie pit",FLOOR, HFS, VAR_1},
{"smooth stone floor",FLOOR, STONE, VAR_1},
{"smooth obsidian floor",FLOOR, OBSIDIAN, VAR_1},
{"smooth featstone? floor",FLOOR, FEATSTONE, VAR_1},
{"smooth vein floor",FLOOR, VEIN, VAR_1},
{"smooth ice floor",FLOOR, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"grass stair up/down",STAIR_UPDOWN, GRASS, VAR_1},
// 50
{"grass stair down",STAIR_DOWN, GRASS, VAR_1},
{"grass stair up",STAIR_UP, GRASS, VAR_1},
{"grass2 stair up/down",STAIR_UPDOWN, GRASS2, VAR_1},
{"grass2 stair down",STAIR_DOWN, GRASS2, VAR_1},
{"grass2 stair up",STAIR_UP, GRASS2, VAR_1},
{"stone stair up/down",STAIR_UPDOWN, STONE, VAR_1},
{"stone stair down",STAIR_DOWN, STONE, VAR_1},
{"stone stair up",STAIR_UP, STONE, VAR_1},
{"vein stair up/down",STAIR_UPDOWN, VEIN, VAR_1},
{"vein stair down",STAIR_DOWN, VEIN, VAR_1},
// 60
{"vein stair up",STAIR_UP, VEIN, VAR_1},
{"featstone? stair up/down",STAIR_UPDOWN, FEATSTONE, VAR_1},
{"featstone? stair down",STAIR_DOWN, FEATSTONE, VAR_1},
{"featstone? stair up",STAIR_UP, FEATSTONE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"stone fortification",FORTIFICATION, STONE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"campfire",FLOOR, CAMPFIRE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 70
{"fire",FLOOR, FIRE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"stone pillar",PILLAR, STONE, VAR_1},
//80
{"obsidian pillar",PILLAR, OBSIDIAN, VAR_1},
{"featstone? pillar",PILLAR, FEATSTONE, VAR_1},
{"vein pillar",PILLAR, VEIN, VAR_1},
{"ice pillar",PILLAR, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"waterfall landing",FLOOR, SOIL, VAR_1}, // verify material
// 90
{"river source",FLOOR, SOIL, VAR_1}, // verify material
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 100
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 110
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 120
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 130
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 140
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 150
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 160
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 170
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"cracked stone wall" ,WALL, STONE, VAR_1},
{"damaged stone wall" ,WALL, STONE, VAR_1},
{"worn stone wall" ,WALL, STONE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 180
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 190
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 200
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 210
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"stone wall" ,WALL, STONE, VAR_1},
// 220
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 230
{0 ,EMPTY, AIR, VAR_1},
{"sapling" ,SAPLING_OK, SOIL, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"dry grass ramp" ,RAMP, GRASS_DRY, VAR_1},
{"dead grass ramp" ,RAMP, GRASS_DEAD, VAR_1},
{"grass ramp" ,RAMP, GRASS, VAR_1},
{"grass ramp" ,RAMP, GRASS2, VAR_1},
{"stone ramp" ,RAMP, STONE, VAR_1},
{"obsidian ramp" ,RAMP, OBSIDIAN, VAR_1},
{"featstone? ramp" ,RAMP, FEATSTONE, VAR_1},
// 240
{"vein ramp" ,RAMP, VEIN, VAR_1},
{"soil ramp" ,RAMP, SOIL, VAR_1},
{"ashes" ,FLOOR, ASHES, VAR_1},
{"ashes" ,FLOOR, ASHES, VAR_2},
{"ashes" ,FLOOR, ASHES, VAR_3},
{"ice ramp" ,RAMP, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 250
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"ice floor" ,FLOOR, ICE, VAR_2},
{"ice floor" ,FLOOR, ICE, VAR_3},
// 260
{"ice floor" ,FLOOR, ICE, VAR_4},
{"furrowed soil" ,FLOOR, SOIL, VAR_1},
{"ice floor" ,FLOOR, ICE, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"magma" ,FLOOR, MAGMA, VAR_1}, // is it really a floor?
{"soil wall" ,WALL, SOIL, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
// 270
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
// 280
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth obsidian wall",WALL,OBSIDIAN,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
// 290
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
//300
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth featstone? wall",WALL,FEATSTONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
//310
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
//320
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"smooth stone wall",WALL,STONE,VAR_1},
{"obsidian fortification",FORTIFICATION,OBSIDIAN,VAR_1},
{"featstone? fortification",FORTIFICATION,FEATSTONE,VAR_1},
{"cracked obsidian wall",WALL,OBSIDIAN,VAR_1},
{"damaged obsidian wall",WALL,OBSIDIAN,VAR_1},
// 330
{"worn obsidian wall",WALL,OBSIDIAN,VAR_1},
{"obsidian wall",WALL,OBSIDIAN,VAR_1},
{"cracked stone wall",WALL,STONE,VAR_1},
{"damaged stone wall",WALL,STONE,VAR_1},
{"worn stone wall",WALL,STONE,VAR_1},
{"stone wall",WALL,STONE,VAR_1},
{"stone floor",FLOOR,STONE,VAR_1},
{"stone floor",FLOOR,STONE,VAR_2},
{"stone floor",FLOOR,STONE,VAR_3},
{"stone floor",FLOOR,STONE,VAR_4},
// 340
{"obsidian floor",FLOOR,OBSIDIAN,VAR_1},
{"obsidian floor",FLOOR,OBSIDIAN,VAR_2},
{"obsidian floor",FLOOR,OBSIDIAN,VAR_3},
{"obsidian floor",FLOOR,OBSIDIAN,VAR_4},
{"featstone? floor",FLOOR,FEATSTONE,VAR_1},
{"featstone? floor",FLOOR,FEATSTONE,VAR_2},
{"featstone? floor",FLOOR,FEATSTONE,VAR_3},
{"featstone? floor",FLOOR,FEATSTONE,VAR_4},
{"grass",FLOOR,GRASS,VAR_1},
{"grass",FLOOR,GRASS,VAR_2},
// 350
{"grass",FLOOR,GRASS,VAR_3},
{"grass",FLOOR,GRASS,VAR_4},
{"soil floor",FLOOR,SOIL,VAR_1},
{"soil floor",FLOOR,SOIL,VAR_2},
{"soil floor",FLOOR,SOIL,VAR_3},
{"soil floor",FLOOR,SOIL,VAR_4},
{"wet soil floor",FLOOR,SOIL,VAR_1},
{"wet soil floor",FLOOR,SOIL,VAR_2},
{"wet soil floor",FLOOR,SOIL,VAR_3},
{"wet soil floor",FLOOR,SOIL,VAR_4},
// 360
{"ice fortification",FORTIFICATION,ICE,VAR_1},
{"cracked ice wall",WALL,ICE,VAR_1},
{"damaged ice wall",WALL,ICE,VAR_1},
{"worn ice wall",WALL,ICE,VAR_1},
{"ice wall",WALL,ICE,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
//370
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"river",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
{"stream",FLOOR,SOIL,VAR_1},
// 380
{"stream",FLOOR,SOIL,VAR_1},
{"stream top",FLOOR,SOIL,VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"dry grass",FLOOR,GRASS_DRY,VAR_1},
{"dry grass",FLOOR,GRASS_DRY,VAR_2},
{"dry grass",FLOOR,GRASS_DRY,VAR_3},
// 390
{"dry grass",FLOOR,GRASS_DRY,VAR_4},
{"dead tree",TREE_DEAD,SOIL,VAR_1},
{"dead sapling",SAPLING_DEAD,SOIL,VAR_1},
{"dead shrub",SHRUB_DEAD,SOIL,VAR_1},
{"dead grass",FLOOR,GRASS_DEAD,VAR_1},
{"dead grass",FLOOR,GRASS_DEAD,VAR_2},
{"dead grass",FLOOR,GRASS_DEAD,VAR_3},
{"dead grass",FLOOR,GRASS_DEAD,VAR_4},
{"grass",FLOOR,GRASS2,VAR_1},
{"grass",FLOOR,GRASS2,VAR_2},
// 400
{"grass",FLOOR,GRASS2,VAR_3},
{"grass",FLOOR,GRASS2,VAR_4},
{"boulder",BOULDER,STONE,VAR_1},
{"obsidian boulder",BOULDER,OBSIDIAN,VAR_1},
{"featstone? boulder",BOULDER,FEATSTONE,VAR_1},
{"pebbles",PEBBLES,STONE,VAR_1},
{"pebbles",PEBBLES,STONE,VAR_2},
{"pebbles",PEBBLES,STONE,VAR_3},
{"pebbles",PEBBLES,STONE,VAR_4},
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_1},
// 410
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_2},
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_3},
{"obsidian shards",PEBBLES,OBSIDIAN,VAR_4},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_1},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_2},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_3},
{"featstone? pebbles",PEBBLES,FEATSTONE,VAR_4},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
// 420
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
// 430
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"smooth vein wall",WALL,VEIN,VAR_1},
{"vein fortification",FORTIFICATION,VEIN,VAR_1},
{"cracked vein wall",WALL,VEIN,VAR_1},
{"damaged vein wall",WALL,VEIN,VAR_1},
{"worn vein wall",WALL,VEIN,VAR_1},
// 440
{"vein wall",WALL,VEIN,VAR_1},
{"vein floor",FLOOR,VEIN,VAR_1},
{"vein floor",FLOOR,VEIN,VAR_2},
{"vein floor",FLOOR,VEIN,VAR_3},
{"vein floor",FLOOR,VEIN,VAR_4},
{"vein boulder",BOULDER,VEIN,VAR_1},
{"vein pebbles",PEBBLES,VEIN,VAR_1},
{"vein pebbles",PEBBLES,VEIN,VAR_2},
{"vein pebbles",PEBBLES,VEIN,VAR_3},
{"vein pebbles",PEBBLES,VEIN,VAR_4},
// 450
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
// 460
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{"smooth ice wall",WALL,ICE,VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 470
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 480
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
// 490
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{0 ,EMPTY, AIR, VAR_1},
{"constructed floor",FLOOR,CONSTRUCTED, VAR_1},
{"constructed fortification",FORTIFICATION,CONSTRUCTED, VAR_1},
{"constructed pillar",PILLAR,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
// 500
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
// 510
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed wall",WALL,CONSTRUCTED, VAR_1},
{"constructed stair up/down",STAIR_UPDOWN,CONSTRUCTED, VAR_1},
{"constructed stair down",STAIR_DOWN,CONSTRUCTED, VAR_1},
{"constructed stair up",STAIR_UP,CONSTRUCTED, VAR_1},
{"constructed ramp",STAIR_UPDOWN,CONSTRUCTED, VAR_1},
{0 ,EMPTY, AIR, VAR_1} // end
};
inline
bool isWallTerrain(int in)
{
return tileTypeTable[in].c >= WALL && tileTypeTable[in].c <= FORTIFICATION ;
}
inline
bool isFloorTerrain(int in)
{
return tileTypeTable[in].c >= FLOOR && tileTypeTable[in].c <= PEBBLES;
}
inline
bool isRampTerrain(int in)
{
return tileTypeTable[in].c == RAMP;
}
inline
bool isStairTerrain(int in)
{
return tileTypeTable[in].c >= STAIR_UP && tileTypeTable[in].c <= STAIR_UPDOWN;
}
inline
bool isOpenTerrain(int in)
{
return tileTypeTable[in].c == EMPTY;
}
inline
int getVegetationType(int in)
{
return tileTypeTable[in].c;
}
}
#endif // TILETYPES_H_INCLUDED #endif // TILETYPES_H_INCLUDED

File diff suppressed because it is too large Load Diff