/* Asset manifest data format definition -Allen 06.06.2016 */ // TOP #ifndef CD_ASSET_MANIFEST_H #define CD_ASSET_MANIFEST_H #define ASSET_MANIFEST_VERSION 1 #define ASSET_MAX_NAME 32 // IMPORTANT(allen): // If Asset_Node or Asset_Manifest are edited at all it will invalidate // all CDmanifest files. // // If Asset_Flag or Asset_Type are rearranged it will invalidate all // CDmanifest files. // // If we _have_ to invalidate CDmanifest files we will have to write a // one time convert which is time consuming, so usually finding a method // other that does not invalidate our data format will be best. // // If this turns into a big issue, I'll look into making a way to write // these one time converts more quickly or to support a more flexible // data format. // // Note we can insert enumeration values in Asset_Type right above // AssetType_TypeCount safely, as that value is just meant to count how many // asset types we have and should not actually be stored in CDmanifest. // struct Asset_Node{ rptr32 first_child; rptr32 parent; rptr32 next_sibling; rptr32 prev_sibling; char name[ASSET_MAX_NAME]; i32 image_id; i32 type; u64 flags; char expansion_space[32]; }; enum Asset_Flag{ AssetFlag_None = 0x0, }; enum Asset_Type{ AssetType_GenericFolder, AssetType_Image, AssetType_ObstacleType, // this must be at the end AssetType_TypeCount }; struct Asset_Manifest{ Relative_Partition part; i32 version; Asset_Node free_sentinel; rptr32 asset_nodes; i32 asset_node_count; i32 asset_free_count; char expansion_space[1008]; }; struct Manifest_Setup{ rptr32 parents[32]; i32 count; }; struct Asset_Walker_Entry{ rptr32 first, current; i32 level; }; struct Asset_Walker{ Asset_Walker_Entry stack[32]; i32 top; i32 current_level; }; #endif // BOTTOM