I will not touch it, but does write_sint32 works as expected for different endianness?
What endianess used in pak files?
From besch/writer/obj_node.h
cl**** obj_node_t {
[SKIP]
void write_sint8(FILE* fp, sint8 data, int offset) {
this->write_uint8(fp, (uint8) data, offset);
}
void write_sint16(FILE* fp, sint16 data, int offset) {
this->write_uint16(fp, (uint16) data, offset);
}
void write_sint32(FILE* fp, sint32 data, int offset) {
this->write_uint32(fp, (sint32) data, offset);
}
From besch/writer/obj_node.cc:
void obj_node_t::write_data_at(FILE* fp, const void* data, int offset, int size)
{
if (offset < 0 || size < 0 || offset + size > desc.size) {
char reason[1024];
sprintf(reason, "invalid parameters (offset=%d, size=%d, obj_size=%d)", offset, size, desc.size);
throw obj_pak_exception_t("obj_node_t", reason);
}
fseek(fp, write_offset + offset, SEEK_SET);
fwrite(data, size, 1, fp);
}
void obj_node_t::write_uint32(FILE* fp, uint32 data, int offset)
{
uint32 data2 = endian(data);
this->write_data_at(fp, &data2, offset, 4);
}