4coder/test_data/lots_of_files/handmade_file_formats.h

179 lines
3.2 KiB
C

#if !defined(HANDMADE_FILE_FORMATS_H)
/* ========================================================================
$File: $
$Date: $
$Revision: $
$Creator: Casey Muratori $
$Notice: (C) Copyright 2015 by Molly Rocket, Inc. All Rights Reserved. $
======================================================================== */
enum asset_font_type
{
FontType_Default = 0,
FontType_Debug = 10,
};
enum asset_tag_id
{
Tag_Smoothness,
Tag_Flatness,
Tag_FacingDirection, // NOTE(casey): Angle in radians off of due right
Tag_UnicodeCodepoint,
Tag_FontType, // NOTE(casey): 0 - Default Game Font, 10 - Debug Font?
Tag_Count,
};
enum asset_type_id
{
Asset_None,
//
// NOTE(casey): Bitmaps!
//
Asset_Shadow,
Asset_Tree,
Asset_Sword,
// Asset_Stairwell,
Asset_Rock,
Asset_Grass,
Asset_Tuft,
Asset_Stone,
Asset_Head,
Asset_Cape,
Asset_Torso,
Asset_Font,
Asset_FontGlyph,
//
// NOTE(casey): Sounds!
//
Asset_Bloop,
Asset_Crack,
Asset_Drop,
Asset_Glide,
Asset_Music,
Asset_Puhp,
//
//
//
Asset_Count,
};
#define HHA_CODE(a, b, c, d) (((uint32)(a) << 0) | ((uint32)(b) << 8) | ((uint32)(c) << 16) | ((uint32)(d) << 24))
#pragma pack(push, 1)
struct hha_header
{
#define HHA_MAGIC_VALUE HHA_CODE('h','h','a','f')
u32 MagicValue;
#define HHA_VERSION 0
u32 Version;
u32 TagCount;
u32 AssetTypeCount;
u32 AssetCount;
u64 Tags; // hha_tag[TagCount]
u64 AssetTypes; // hha_asset_type[AssetTypeCount]
u64 Assets; // hha_asset[AssetCount]
// TODO(casey): Primacy numbers for asset files?
/* TODO(casey):
u32 FileGUID[8];
u32 RemovalCount;
struct hha_asset_removal
{
u32 FileGUID[8];
u32 AssetIndex;
};
*/
};
struct hha_tag
{
u32 ID;
r32 Value;
};
struct hha_asset_type
{
u32 TypeID;
u32 FirstAssetIndex;
u32 OnePastLastAssetIndex;
};
enum hha_sound_chain
{
HHASoundChain_None,
HHASoundChain_Loop,
HHASoundChain_Advance,
};
struct hha_bitmap
{
u32 Dim[2];
r32 AlignPercentage[2];
/* NOTE(casey): Data is:
u32 Pixels[Dim[1]][Dim[0]]
*/
};
struct hha_sound
{
u32 SampleCount;
u32 ChannelCount;
u32 Chain; // NOTE(casey): hha_sound_chain
/* NOTE(casey): Data is:
s16 Channels[ChannelCount][SampleCount]
*/
};
struct hha_font_glyph
{
u32 UnicodeCodePoint;
bitmap_id BitmapID;
};
struct hha_font
{
u32 OnePastHighestCodepoint;
u32 GlyphCount;
r32 AscenderHeight;
r32 DescenderHeight;
r32 ExternalLeading;
/* NOTE(casey): Data is:
hha_font_glyph CodePoints[GlyphCount];
r32 HorizontalAdvance[GlyphCount][GlyphCount];
*/
};
struct hha_asset
{
u64 DataOffset;
u32 FirstTagIndex;
u32 OnePastLastTagIndex;
union
{
hha_bitmap Bitmap;
hha_sound Sound;
hha_font Font;
};
};
#pragma pack(pop)
#define HANDMADE_FILE_FORMATS_H
#endif