void ESF::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, shoutsize; std::string name, shout; char buf[ESF::DATA_SIZE] = {0}; this->data.resize(numobj+1); this->data[0] = new ESF_Data; SAFE_READ(static_cast<void *>(&namesize), sizeof(char), 1, fh); SAFE_READ(static_cast<void *>(&shoutsize), sizeof(char), 1, fh); for (int i = 1; i <= numobj; ++i) { ESF_Data *newdata = new ESF_Data; namesize = PacketProcessor::Number(namesize); name.resize(namesize); if (namesize > 0) { SAFE_READ(&name[0], sizeof(char), namesize, fh); } shoutsize = PacketProcessor::Number(shoutsize); shout.resize(shoutsize); if (shoutsize > 0) { SAFE_READ(&shout[0], sizeof(char), shoutsize, fh); } SAFE_READ(buf, sizeof(char), ESF::DATA_SIZE, fh); newdata->id = i; newdata->name = name; newdata->shout = shout; newdata->icon = PacketProcessor::Number(buf[0], buf[1]); newdata->graphic = PacketProcessor::Number(buf[2], buf[3]); newdata->tp = PacketProcessor::Number(buf[4], buf[5]); newdata->sp = PacketProcessor::Number(buf[6], buf[7]); newdata->cast_time = PacketProcessor::Number(buf[8]); newdata->unka = PacketProcessor::Number(buf[9]);//works //newdata->damage_heal = PacketProcessor::Number(buf[10]); newdata->spell_effect = static_cast<ESF::Spell_Effect>(PacketProcessor::Number(buf[11])); newdata->element = PacketProcessor::Number(buf[14]); newdata->unkc = PacketProcessor::Number(buf[15]);//works newdata->unkd = PacketProcessor::Number(buf[16]);//works newdata->target = static_cast<ESF::Target>(PacketProcessor::Number(buf[17])); newdata->type = static_cast<ESF::Type>(PacketProcessor::Number(buf[18])); newdata->unke = PacketProcessor::Number(buf[20]);//works newdata->unkf = PacketProcessor::Number(buf[21]);//works newdata->unkg = PacketProcessor::Number(buf[22]);//works newdata->mindam = PacketProcessor::Number(buf[23], buf[24]); newdata->maxdam = PacketProcessor::Number(buf[25], buf[26]); newdata->unkh = PacketProcessor::Number(buf[29]);//works newdata->unki = PacketProcessor::Number(buf[31]);//works newdata->unkj = PacketProcessor::Number(buf[33]);//works newdata->hp = PacketProcessor::Number(buf[34], buf[35]); newdata->unkk = PacketProcessor::Number(buf[37]);//works newdata->unkl = PacketProcessor::Number(buf[38]);//works newdata->unkm = PacketProcessor::Number(buf[39]);//works newdata->unkn = PacketProcessor::Number(buf[41]);//works newdata->unko = PacketProcessor::Number(buf[43]);//works newdata->unkp = PacketProcessor::Number(buf[45]);//works newdata->unkq = PacketProcessor::Number(buf[47]);//works newdata->unkr = PacketProcessor::Number(buf[49]);//works this->data[i] = newdata; if (std::fread(static_cast<void *>(&namesize), sizeof(char), 1, fh) != 1) { break; } if (std::fread(static_cast<void *>(&shoutsize), sizeof(char), 1, fh) != 1) { break; } } if (this->data.back()->name.compare("eof") == 0) { this->data.pop_back(); } Console::Out("%i spells loaded.", this->data.size()-1); std::fclose(fh); }