Add id check for each chunk load
parent
20d5bd4ac7
commit
5cfa0c0fc0
|
@ -40,7 +40,18 @@ bool load_from_rres(const char* file, Assets_t* assets)
|
||||||
rres_file.dir = rresLoadCentralDirectory(file);
|
rres_file.dir = rresLoadCentralDirectory(file);
|
||||||
rres_file.fname = file;
|
rres_file.fname = file;
|
||||||
|
|
||||||
rresResourceChunk chunk = rresLoadResourceChunk(file, rresGetResourceId(rres_file.dir, "assets.info")); // Hardcoded
|
if (rres_file.dir.count == 0)
|
||||||
|
{
|
||||||
|
puts("Empty central directory");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int res_id = rresGetResourceId(rres_file.dir, "assets.info");
|
||||||
|
rresResourceChunk chunk = rresLoadResourceChunk(file, res_id); // Hardcoded
|
||||||
|
bool okay = false;
|
||||||
|
|
||||||
|
if (chunk.info.id == res_id)
|
||||||
|
{
|
||||||
FILE* in_file = fmemopen(chunk.data.raw, chunk.info.baseSize, "rb");
|
FILE* in_file = fmemopen(chunk.data.raw, chunk.info.baseSize, "rb");
|
||||||
|
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
|
@ -137,10 +148,11 @@ bool load_from_rres(const char* file, Assets_t* assets)
|
||||||
line_num++;
|
line_num++;
|
||||||
}
|
}
|
||||||
fclose(in_file);
|
fclose(in_file);
|
||||||
|
okay = true;
|
||||||
|
}
|
||||||
rresUnloadResourceChunk(chunk);
|
rresUnloadResourceChunk(chunk);
|
||||||
rresUnloadCentralDirectory(rres_file.dir);
|
rresUnloadCentralDirectory(rres_file.dir);
|
||||||
return true;
|
return okay;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool load_from_infofile(const char* file, Assets_t* assets)
|
bool load_from_infofile(const char* file, Assets_t* assets)
|
||||||
|
|
|
@ -87,19 +87,25 @@ Texture2D* add_texture_rres(Assets_t* assets, const char* name, const char* file
|
||||||
uint8_t tex_idx = n_loaded[0];
|
uint8_t tex_idx = n_loaded[0];
|
||||||
assert(tex_idx < MAX_TEXTURES);
|
assert(tex_idx < MAX_TEXTURES);
|
||||||
|
|
||||||
rresResourceChunk chunk = rresLoadResourceChunk(rres_file->fname, rresGetResourceId(rres_file->dir, filename));
|
int res_id = rresGetResourceId(rres_file->dir, filename);
|
||||||
|
rresResourceChunk chunk = rresLoadResourceChunk(rres_file->fname, res_id);
|
||||||
|
|
||||||
|
Texture2D* out_tex = NULL;
|
||||||
|
if (chunk.info.id == res_id)
|
||||||
|
{
|
||||||
//Expect RAW type of png extension
|
//Expect RAW type of png extension
|
||||||
Image image = LoadImageFromMemory(GetFileExtension(filename), chunk.data.raw, chunk.info.baseSize);
|
Image image = LoadImageFromMemory(GetFileExtension(filename), chunk.data.raw, chunk.info.baseSize);
|
||||||
Texture2D tex = LoadTextureFromImage(image);
|
Texture2D tex = LoadTextureFromImage(image);
|
||||||
UnloadImage(image);
|
UnloadImage(image);
|
||||||
rresUnloadResourceChunk(chunk);
|
|
||||||
|
|
||||||
textures[tex_idx].texture = tex;
|
textures[tex_idx].texture = tex;
|
||||||
strncpy(textures[tex_idx].name, name, MAX_NAME_LEN);
|
strncpy(textures[tex_idx].name, name, MAX_NAME_LEN);
|
||||||
sc_map_put_s64(&assets->m_textures, textures[tex_idx].name, tex_idx);
|
sc_map_put_s64(&assets->m_textures, textures[tex_idx].name, tex_idx);
|
||||||
n_loaded[0]++;
|
n_loaded[0]++;
|
||||||
return &textures[tex_idx].texture;
|
out_tex = &textures[tex_idx].texture;
|
||||||
|
}
|
||||||
|
rresUnloadResourceChunk(chunk);
|
||||||
|
return out_tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture)
|
Sprite_t* add_sprite(Assets_t* assets, const char* name, Texture2D* texture)
|
||||||
|
@ -312,14 +318,18 @@ LevelPack_t* uncompress_level_pack(Assets_t* assets, const char* name, const cha
|
||||||
|
|
||||||
LevelPack_t* add_level_pack_rres(Assets_t* assets, const char* name, const char* filename, const RresFileInfo_t* rres_file)
|
LevelPack_t* add_level_pack_rres(Assets_t* assets, const char* name, const char* filename, const RresFileInfo_t* rres_file)
|
||||||
{
|
{
|
||||||
|
int res_id = rresGetResourceId(rres_file->dir, filename);
|
||||||
|
|
||||||
rresResourceChunk chunk = rresLoadResourceChunk(rres_file->fname, rresGetResourceId(rres_file->dir, filename));
|
rresResourceChunk chunk = rresLoadResourceChunk(rres_file->fname, res_id);
|
||||||
|
|
||||||
|
LevelPack_t* pack = NULL;
|
||||||
|
if ( chunk.info.id == res_id)
|
||||||
|
{
|
||||||
FILE* f_in = fmemopen(chunk.data.raw, chunk.info.baseSize, "rb");
|
FILE* f_in = fmemopen(chunk.data.raw, chunk.info.baseSize, "rb");
|
||||||
|
pack = add_level_pack_zst(assets, name, f_in);
|
||||||
LevelPack_t* pack = add_level_pack_zst(assets, name, f_in);
|
|
||||||
fclose(f_in);
|
fclose(f_in);
|
||||||
|
}
|
||||||
rresUnloadResourceChunk(chunk);
|
rresUnloadResourceChunk(chunk);
|
||||||
|
|
||||||
return pack;
|
return pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,11 +183,22 @@ bool init_player_creation_rres(const char* rres_fname, const char* file, Assets_
|
||||||
rres_file.dir = rresLoadCentralDirectory(rres_fname);
|
rres_file.dir = rresLoadCentralDirectory(rres_fname);
|
||||||
rres_file.fname = rres_fname;
|
rres_file.fname = rres_fname;
|
||||||
|
|
||||||
rresResourceChunk chunk = rresLoadResourceChunk(rres_file.fname, rresGetResourceId(rres_file.dir, file)); // Hardcoded
|
if (rres_file.dir.count == 0)
|
||||||
FILE* in_file = fmemopen(chunk.data.raw, chunk.info.baseSize, "rb");
|
{
|
||||||
|
puts("Empty central directory");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool okay = init_player_file(in_file, assets);
|
int res_id = rresGetResourceId(rres_file.dir, file);
|
||||||
|
rresResourceChunk chunk = rresLoadResourceChunk(rres_file.fname, res_id);
|
||||||
|
|
||||||
|
bool okay = false;
|
||||||
|
if (chunk.info.id == res_id)
|
||||||
|
{
|
||||||
|
FILE* in_file = fmemopen(chunk.data.raw, chunk.info.baseSize, "rb");
|
||||||
|
okay = init_player_file(in_file, assets);
|
||||||
fclose(in_file);
|
fclose(in_file);
|
||||||
|
}
|
||||||
|
|
||||||
rresUnloadResourceChunk(chunk);
|
rresUnloadResourceChunk(chunk);
|
||||||
rresUnloadCentralDirectory(rres_file.dir);
|
rresUnloadCentralDirectory(rres_file.dir);
|
||||||
|
|
Loading…
Reference in New Issue