void ECF::Read(std::string filename)
{
this->data.clear();
std::FILE *fh = std::fopen(filename.c_str(), "rb");
safe_fail_filename = filename.c_str();
if (!fh)
{
Console::Err("Could not load file: %s", filename.c_str());
std::exit(1);
}
SAFE_SEEK(fh, 3, SEEK_SET);
SAFE_READ(this->rid, sizeof(char), 4, fh);
SAFE_READ(this->len, sizeof(char), 2, fh);
int numobj = PacketProcessor::Number(this->len[0], this->len[1]);
SAFE_SEEK(fh, 1, SEEK_CUR);
unsigned char namesize;
std::string name;
char buf[ECF::DATA_SIZE] = {0};
this->data.resize(numobj+1);
this->data[0] = new ECF_Data;
SAFE_READ(static_cast<void *>(&namesize), sizeof(char), 1, fh);
for (int i = 1; i <= numobj; ++i)
{
ECF_Data *newdata = new ECF_Data;
namesize = PacketProcessor::Number(namesize);
name.resize(namesize);
SAFE_READ(&name[0], sizeof(char), namesize, fh);
SAFE_READ(buf, sizeof(char), ECF::DATA_SIZE, fh);
newdata->id = i;
newdata->name = name;
newdata->base = PacketProcessor::Number(buf[0]);//works
newdata->type = PacketProcessor::Number(buf[1]);
//newdata->subclass = static_cast<ECF::SubClass>(PacketProcessor::Number(buf[1]));
newdata->str = PacketProcessor::Number(buf[2], buf[3]);//works
newdata->intl = PacketProcessor::Number(buf[4], buf[5]);//works
newdata->wis = PacketProcessor::Number(buf[6], buf[7]);//works
newdata->agi = PacketProcessor::Number(buf[8], buf[9]);//works
newdata->con = PacketProcessor::Number(buf[10], buf[11]);//works
newdata->cha = PacketProcessor::Number(buf[12], buf[13]);//works
this->data[i] = newdata;
if (std::fread(static_cast<void *>(&namesize), sizeof(char), 1, fh) != 1)
{
break;
}
}
if (this->data.back()->name.compare("eof") == 0)
{
this->data.pop_back();
}
Console::Out("%i classes loaded.", this->data.size()-1);
std::fclose(fh);
}