doodle/docs/RLE Encoding for Levels.md
Noah Petherbridge c7a3c7a797 Remove never-used GridType accessor + documentation [PTO]
* Add documentation for the game's file formats and RLE encoding
* Remove the never-used GridType Chunk Accessor constant
2024-05-24 16:06:43 -07:00

116 lines
3.9 KiB
Markdown

# RLE Encoding for Levels
This documents some of the file size savings of the game's built-in levelpacks and doodads once the file format was migrated to use Run Length Encoding (RLE) for drawing chunks.
See [Evolution of File Formats](./Evolution%20of%20File%20Formats.md) for a history of the game's file formats.
# Levels
The file sizes of the levels themselves:
## First Quest
| Filename | Orig Size | New Size | Reduction |
|--------------------|-----------|----------|-----------|
| Boat.level | 4.3M | 292K | 93% |
| Castle.level | 5.6M | 241K | 95% |
| Desert-1of2.level | 4.4M | 248K | 94% |
| Desert-2of2.level | 3.2M | 290K | 91% |
| Jungle.level | 11M | 581K | 94% |
| Shapeshifter.level | 22M | 263K | 98% |
| Thief 1.level | 538K | 193K | 64% |
In raw bytes:
| Filename | Orig Size | New Size |
|--------------------|-----------|----------|
| Boat.level | 4494184 | 298943 |
| Castle.level | 5854222 | 245872 |
| Desert-1of2.level | 4589382 | 253768 |
| Desert-2of2.level | 3310784 | 296681 |
| Jungle.level | 10928779 | 594601 |
| Shapeshifter.level | 22823811 | 269307 |
| Thief 1.level | 550579 | 196731 |
The levelpack ZIP:
* Filename: builtin-100-FirstQuest.levelpack
* Original: 50M (52369408)
* New size: 1.8M (1838542) 96%
## Tutorial
| Filename | Orig Size | New Size | Reduction |
|--------------------|-----------|----------|-----------|
| Tutorial 1.level | 186K | 111K | 40% |
| Tutorial 2.level | 680K | 229K | 66% |
| Tutorial 3.level | 409K | 148K | 64% |
| Tutorial 4.level | 901K | 376K | 58% |
| Tutorial 5.level | 3M | 645K | 78% |
| Zoo.level | 2.8M | 226K | 92% |
In raw bytes:
| Filename | Orig Size | New Size |
|--------------------|-----------|----------|
| Tutorial 1.level | 190171 | 113568 |
| Tutorial 2.level | 695936 | 233880 |
| Tutorial 3.level | 418490 | 150565 |
| Tutorial 4.level | 921781 | 384775 |
| Tutorial 5.level | 3059902 | 659487 |
| Zoo.level | 2925633 | 230712 |
The levelpack ZIP:
* Filename: builtin-Tutorial.levelpack
* Original: 7.8M (8119658)
* New size: 1.6M (1650381) 79%
## Azulian Tag
| Filename | Orig Size | New Size | Reduction |
|---------------------------|-----------|----------|-----------|
| AzulianTag-Forest.level | 17M | 312K | 98% |
| AzulianTag-Night.level | 702K | 145K | 79% |
| AzulianTag-Tutorial.level | 3.4M | 185K | 94% |
In raw bytes:
| Filename | Orig Size | New Size |
|---------------------------|-----------|----------|
| AzulianTag-Forest.level | 17662031 | 318547 |
| AzulianTag-Night.level | 718345 | 147612 |
| AzulianTag-Tutorial.level | 3508093 | 189310 |
The levelpack ZIP:
* Filename: builtin-200-AzulianTag.levelpack
* Original: 21M (21824441)
* New size: 525K (537345) 97%
# Doodads
Spot check of random doodad filesize changes:
| Filename | Orig Size | New Size |
|--------------------------|-----------|----------|
| anvil.doodad | 2.7K | 1.3K |
| azu-blu.doodad | 8.1K | 5.2K |
| azu-red.doodad | 8.1K | 5.2K |
| azu-white.doodad | 8.1K | 5.2K |
| box.doodad | 29K | 4.1K |
| boy.doodad | 30K | 8.1K |
| crumbly-floor.doodad | 15K | 3.3K |
| door-blue.doodad | 18K | 2.7K |
| electric-trapdoor.doodad | 9.5K | 2.8K |
Total file size of all builtin doodads:
* Original: 576.8 KiB
* New: 153.7 KiB (73% reduction)
# Game Binary
* Filename: sketchymaze
* Original: 105M
* New size: 30M, 71% smaller