112 lines
3.6 KiB
C
112 lines
3.6 KiB
C
#ifndef _URF_H
|
|
#define _URF_H
|
|
|
|
#define UPKG_MAX_NAME_SIZE 64
|
|
#define UPKG_MAX_ORDERS 10
|
|
|
|
// all data types in upkg files are signed
|
|
#define UPKG_DATA_FCI 'F'
|
|
#define UPKG_DATA_32 '3'
|
|
#define UPKG_DATA_16 '1'
|
|
#define UPKG_DATA_8 '8'
|
|
#define UPKG_DATA_ASCIC 'C'
|
|
#define UPKG_DATA_ASCIZ 'Z'
|
|
|
|
#define UPKG_OBJ_JUNK 'j'
|
|
#define UPKG_OBJ_NAME 'n'
|
|
#define UPKG_EXP_SIZE 's'
|
|
#define UPKG_OBJ_SIZE 'd'
|
|
|
|
#define UPKG_NAME_NOCOUNT -1
|
|
|
|
#define UPKG_HDR_TAG 0x9e2a83c1
|
|
|
|
enum upkg_flags {
|
|
RF_Transactional = 0x00000001,
|
|
RF_SourceModified = 0x00000002,
|
|
RF_Public = 0x00000004,
|
|
RF_LoadForClient = 0x00010000,
|
|
RF_LoadForServer = 0x00020000,
|
|
RF_LoadForEdit = 0x00040000,
|
|
RF_Standalone = 0x00080000,
|
|
RF_HasStack = 0x02000000,
|
|
RF_Intrinsic = 0x04000000
|
|
};
|
|
|
|
struct unreal_pkg_hdr {
|
|
int32_t tag, // hdr tag, should == UPKG_HDR_TAG
|
|
file_version, // should be 61 for unreal. > for UT
|
|
pkg_flags, // bitflags.. we don't need them
|
|
name_count, // number of names in name table (>= 0)
|
|
name_offset, // offset to name table (>= 0)
|
|
export_count, // num. exports in export table (>= 0)
|
|
export_offset, // offset to export table (>= 0)
|
|
import_count, // -- seeing a trend yet? (>= 0)
|
|
import_offset, // (>= 0)
|
|
heritage_count, // heritage table (has GUID's) (>= 1)
|
|
heritage_offset; // (>= 0)
|
|
};
|
|
|
|
/* indices have 2 types. type 1 is harder, so I'll describe type 2 first. =)
|
|
|
|
type 2 is an index into the name table (upkg_name_table). pure and simple.
|
|
|
|
type 1 is an index into either the imports table, or the exports table, or NULL.
|
|
if index == 0, you can ignore it
|
|
if index < 0, use imports[-index - 1]
|
|
if index > 0, use exports[index - 1]
|
|
|
|
type 1 is used for dependency/inheritancy info
|
|
*/
|
|
struct unreal_pkg_export_tbl {
|
|
int32_t class_index, // index, type 1
|
|
package_index, // index, type 1
|
|
super_index, // index, type 1
|
|
object_name, // index, type 2
|
|
object_flags, // flags for the object (will be supported when I decide to code it ;-)
|
|
serial_size, // size of export described
|
|
serial_offset, // start of the export in the the package file (offset from beginning of file)
|
|
class_name, // index, type 2 (the name of the object class)
|
|
package_name, // index, type 2 (the name of the object package)
|
|
type_name, // index, type 2 (the name of the object type)
|
|
object_size, // bytes of data in object
|
|
object_offset; // offset into package file that object starts
|
|
};
|
|
|
|
struct unreal_pkg_import_tbl {
|
|
int32_t class_package, // index, type 2
|
|
class_name, // index, type 2
|
|
package_index, // index, type 1
|
|
object_name; // index, type 2
|
|
};
|
|
|
|
struct unreal_pkg_name_tbl {
|
|
char name[UPKG_MAX_NAME_SIZE]; // a name
|
|
int32_t flags; // flags for the name
|
|
};
|
|
|
|
struct unreal_pkg_export_hdr {
|
|
int32_t version; // version of pkg header this supports
|
|
const char* class_name; //[UPKG_MAX_NAME_SIZE]; // unreal class
|
|
const char* order; //[UPKG_MAX_ORDERS * 10]; // order of the header
|
|
};
|
|
|
|
struct unreal_pkg_object_hdr {
|
|
const char type_str[4]; // type string of the object type
|
|
const char object_sig[5]; // sig of the object data (if exists)
|
|
int32_t sig_offset; // offset in object that object_sig occurs
|
|
// char desc[33]; // description of the object
|
|
};
|
|
|
|
typedef struct unreal_pkg_hdr upkg_hdr;
|
|
typedef struct unreal_pkg_export_tbl upkg_exports;
|
|
typedef struct unreal_pkg_import_tbl upkg_imports;
|
|
typedef struct unreal_pkg_name_tbl upkg_names;
|
|
typedef struct unreal_pkg_export_hdr upkg_export_hdr;
|
|
typedef struct unreal_pkg_object_hdr upkg_object_hdr;
|
|
|
|
extern const upkg_export_hdr export_desc[];
|
|
extern const upkg_object_hdr object_desc[];
|
|
|
|
#endif // _URF_H
|