bool MesenMovie::LoadGame() { string mesenVersion = LoadString(_settings, MovieKeys::MesenVersion); string gameFile = LoadString(_settings, MovieKeys::GameFile); string sha1Hash = LoadString(_settings, MovieKeys::Sha1); //string patchFile = LoadString(_settings, MovieKeys::PatchFile); //string patchFileSha1 = LoadString(_settings, MovieKeys::PatchFileSha1); //string patchedRomSha1 = LoadString(_settings, MovieKeys::PatchedRomSha1); HashInfo hashInfo; hashInfo.Sha1Hash = sha1Hash; VirtualFile romFile = Console::FindMatchingRom(gameFile, hashInfo); bool gameLoaded = false; if(romFile.IsValid()) { VirtualFile patchFile(_movieFile.GetFilePath(), "PatchData.dat"); if(patchFile.IsValid()) { gameLoaded = Console::LoadROM(romFile, patchFile); } else { gameLoaded = Console::LoadROM(romFile); } } return gameLoaded; }
PATCH_RESULT CPatchFile::Execute(Framework::CStream& stream, const boost::filesystem::path& gameLocationPath) { try { CPatchFile patchFile(gameLocationPath); patchFile.DoExecute(stream); return patchFile.GetResult(); } catch(...) { PATCH_RESULT result; result.succeeded = false; return result; } }
void Terrain::loadModel() { std::ifstream patchFile("model/patch", std::ios::binary); std::ifstream terrainFile("model/terrain", std::ios::binary); if (!patchFile.good() || !terrainFile.good()) { throw std::runtime_error("unable to read file"); } std::vector<GLfloat> vertices; std::vector<GLuint> indices; std::vector<GLfloat> terrain; GLuint terrainSidePointCount; ModelUtils::readFileToValue(patchFile, vertices, indices); ModelUtils::readFileToValue(terrainFile, terrainSideLength, terrainSidePointCount, terrain); vertexCount = static_cast<GLsizei>(indices.size()); vao->addElementBuffer(indices, GL_STATIC_DRAW); vao->addVertexAttribBuffer(0, 2, GL_FLOAT, vertices, GL_STATIC_DRAW); texture = std::make_shared<Texture>(GL_TEXTURE_2D, terrainSidePointCount, terrain); }
uint32_t iiflags(struct imageInfo *ii, uint32_t size, bool needsFlip) { if (needsFlip) { ii->flags = OSSwapInt32(ii->flags); } if (debug) printf("flags->%x, nitems %d\n", ii->flags, size/sizeof(struct imageInfo)); uint32_t flags = ii->flags; if (patch && (flags&0x2)==0) { //printf("will patch %s at offset %p\n", FileName, (char*)(&ii->flags) - FileBase); uint32_t newvalue = flags | 0x2; if (needsFlip) newvalue = OSSwapInt32(newvalue); patchFile(newvalue, (char*)(&ii->flags) - FileBase); } for(int niis = 1; niis < size/sizeof(struct imageInfo); ++niis) { if (needsFlip) ii[niis].flags = OSSwapInt32(ii[niis].flags); if (ii[niis].flags != flags) { // uh, oh. printf("XXX ii[%d].flags %x != ii[0].flags %x\n", niis, ii[niis].flags, flags); ++Errors; } } return flags; }
int C3dsTool::Action() { if (m_eAction == kActionExtract) { if (!extractFile()) { printf("ERROR: extract file failed\n\n"); return 1; } } if (m_eAction == kActionCreate) { if (!createFile()) { printf("ERROR: create file failed\n\n"); return 1; } } if (m_eAction == kActionEncrypt) { if (!encryptFile()) { printf("ERROR: encrypt file failed\n\n"); return 1; } } if (m_eAction == kActionUncompress) { if (!uncompressFile()) { printf("ERROR: uncompress file failed\n\n"); return 1; } } if (m_eAction == kActionCompress) { if (!compressFile()) { printf("ERROR: compress file failed\n\n"); return 1; } } if (m_eAction == kActionTrim) { if (!trimFile()) { printf("ERROR: trim file failed\n\n"); return 1; } } if (m_eAction == kActionPad) { if (!padFile()) { printf("ERROR: pad file failed\n\n"); return 1; } } if (m_eAction == kActionDiff) { if (!diffFile()) { printf("ERROR: create patch file failed\n\n"); return 1; } } if (m_eAction == kActionPatch) { if (!patchFile()) { printf("ERROR: apply patch file failed\n\n"); return 1; } } if (m_eAction == kActionSample) { return sample(); } if (m_eAction == kActionHelp) { return Help(); } return 0; }