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); }