mirror of
https://github.com/aimrebirth/tools.git
synced 2026-04-14 17:33:25 +00:00
[paker] Misc.
This commit is contained in:
parent
506365055e
commit
cac8693c42
1 changed files with 13 additions and 4 deletions
|
|
@ -39,6 +39,7 @@ using namespace std;
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
cl::opt<path> name(cl::Positional, cl::desc("<pack name>"), cl::Required);
|
cl::opt<path> name(cl::Positional, cl::desc("<pack name>"), cl::Required);
|
||||||
|
// game produces warnings on empty .pak files
|
||||||
cl::list<String> in_files(cl::Positional, cl::desc("<files to pack>"), cl::Required, cl::OneOrMore);
|
cl::list<String> in_files(cl::Positional, cl::desc("<files to pack>"), cl::Required, cl::OneOrMore);
|
||||||
|
|
||||||
cl::ParseCommandLineOptions(argc, argv);
|
cl::ParseCommandLineOptions(argc, argv);
|
||||||
|
|
@ -85,8 +86,15 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t total{};
|
size_t total{};
|
||||||
|
auto aligned_size = [](auto sz) {
|
||||||
|
// align like 0x4000 does not work
|
||||||
|
// neither align works
|
||||||
|
//constexpr auto align = 128;
|
||||||
|
//return (sz + align - 1) / align * align;
|
||||||
|
return sz;
|
||||||
|
};
|
||||||
for (auto &[f,_] : files) {
|
for (auto &[f,_] : files) {
|
||||||
total += fs::file_size(f);
|
total += aligned_size(fs::file_size(f));
|
||||||
}
|
}
|
||||||
uint32_t block_size = pak::default_block_size;
|
uint32_t block_size = pak::default_block_size;
|
||||||
uint32_t block_size_len = sizeof(block_size);
|
uint32_t block_size_len = sizeof(block_size);
|
||||||
|
|
@ -117,18 +125,18 @@ int main(int argc, char *argv[]) {
|
||||||
std::ofstream{name};
|
std::ofstream{name};
|
||||||
fs::resize_file(name, total);
|
fs::resize_file(name, total);
|
||||||
primitives::templates2::mmap_file<uint8_t> f{name, primitives::templates2::mmap_file<uint8_t>::rw{}};
|
primitives::templates2::mmap_file<uint8_t> f{name, primitives::templates2::mmap_file<uint8_t>::rw{}};
|
||||||
//f.alloc_raw(total);
|
memset(f.p, 0, f.sz);
|
||||||
|
|
||||||
stream s{f};
|
stream s{f};
|
||||||
s = p;
|
s = p;
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
for (auto &[name,alias] : files) {
|
for (auto &[name,alias] : files) {
|
||||||
pak::file_description d;
|
pak::file_description d{};
|
||||||
auto str = alias.empty() ? name.string() : alias;
|
auto str = alias.empty() ? name.string() : alias;
|
||||||
strcpy(d.name, str.c_str());
|
strcpy(d.name, str.c_str());
|
||||||
d.size = fs::file_size(name);
|
d.size = fs::file_size(name);
|
||||||
d.offset = offset;
|
d.offset = offset;
|
||||||
offset += d.size;
|
offset += aligned_size(d.size);
|
||||||
s = d;
|
s = d;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < nsegs; ++i) {
|
for (int i = 0; i < nsegs; ++i) {
|
||||||
|
|
@ -137,6 +145,7 @@ int main(int argc, char *argv[]) {
|
||||||
seg.offset = sizeof(pak) + files.size() * sizeof(pak::file_description) + nsegs * sizeof(pak::segment) + i * block_size;
|
seg.offset = sizeof(pak) + files.size() * sizeof(pak::file_description) + nsegs * sizeof(pak::segment) + i * block_size;
|
||||||
s = seg;
|
s = seg;
|
||||||
}
|
}
|
||||||
|
// each data segment starts with its size
|
||||||
s = block_size_minus_len; // for single seg
|
s = block_size_minus_len; // for single seg
|
||||||
for (auto &[name,_] : files) {
|
for (auto &[name,_] : files) {
|
||||||
std::cout << "processing: " << name << "\n";
|
std::cout << "processing: " << name << "\n";
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue