summaryrefslogtreecommitdiff
path: root/ASSET_SYSTEM.md
blob: 843d8f238b8ec98c43cb945be56e539d34169650 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# compact asset system for the 64k demo

This file describe the features of a compact asset system used in the demo.

The idea is the following:

# run-time asset retrieval:
 All assets are const byte arrays. We need a 'const uint8_t* GetAsset(uint16 asset_id)'
 The asset ID is defined in a 'assets.h' header, generated during the final
 compile by our own assembling tool. assets.h needs to be re-generated
 infrequently.

# assembling the assets:

## description file 'assets.txt'
 All assets are just files in the assets/final/ directory
 This directory needs a assets.txt text file to describe the asset files.
 Each line of the assets.txt file contain, comma-separated:
   * the name of the asset (that will be used by the #define in assets.h),
   * the name of the file associated
   * the compression to use for this asset (default NONE. More options later)
   * and optionally the type of assets.

## example For instance, a line in assets.txt will read:

SAMPLE_142, sample_142.spec, NONE, "this is a drum kick sample"

This instructs the final assembled file assets.h to have a code line:
  #define ASSET_SAMPLE_142 6323

(6323 is just an associated id)

(or an enum instead of #define's)

so that we can call 
```
#include "asset.h"
const uint8_t* mysample = GetAsset(ASSET_SAMPLE_142);
...etc
```

(if we use enums, GetAssert() signature needs to be changed)

### Lazy decompression
to save memory some assets can be decompressed 'at retrieval time' but kept
compressed in memory until then.
This means that we need a 'void DropAsset(uint16 asset_id, const uint8* asset)'
method to handle memory disallocation depending on the asset type.

### assembling tool

we need a simple tool that:
  * takes the assets.txt file and parse it
  * generates the assets.h file with asset enums
  * generates the assets_data.cc file with all the data
  * put these in the source tree
  * this process needs a script for automation