179 lines
3.2 KiB
C
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
|