Noah Petherbridge
5654145fd8
Finally add a second option for Chunk MapAccessor implementation besides the MapAccessor. The RLEAccessor is basically a MapAccessor that will compress your drawing with Run Length Encoding (RLE) in the on-disk format in the ZIP file. This slashes the file sizes of most levels: * Shapeshifter: 21.8 MB -> 8.1 MB * Jungle: 10.4 MB -> 4.1 MB * Zoo: 2.8 MB -> 1.3 MB Implementation details: * The RLE binary format for Chunks is a stream of Uvarint pairs storing the palette index number and the number of pixels to repeat it (along the Y,X axis of the chunk). * Null colors are represented by a Uvarint that decodes to 0xFFFF or 65535 in decimal. * Gameplay logic currently limits maps to 256 colors. * The default for newly created chunks in-game will be RLE by default. * Its in-memory representation is still a MapAccessor (a map of absolute world coordinates to palette index). * The game can still open and play legacy MapAccessor maps. * On save in the editor, the game will upgrade/convert MapAccessor chunks over to RLEAccessors, improving on your level's file size with a simple re-save. Current Bugs * On every re-save to RLE, one pixel is lost in the bottom-right corner of each chunk. Each subsequent re-save loses one more pixel to the left, so what starts as a single pixel per chunk slowly evolves into a horizontal line. * Some pixels smear vertically as well. * Off-by-negative-one errors when some chunks Iter() their pixels but compute a relative coordinate of (-1,0)! Some mismatch between the stored world coords of a pixel inside the chunk vs. the chunk's assigned coordinate by the Chunker: certain combinations of chunk coord/abs coord. To Do * The `doodad touch` command should re-save existing levels to upgrade them. |
||
---|---|---|
.. | ||
balance | ||
branding | ||
campaign | ||
chatbot | ||
collision | ||
cursor | ||
doodads | ||
drawtool | ||
enum | ||
filesystem | ||
gamepad | ||
keybind | ||
level | ||
levelpack | ||
log | ||
modal | ||
native | ||
pattern | ||
physics | ||
plus | ||
savegame | ||
scripting | ||
shmem | ||
sound | ||
sprites | ||
uix | ||
updater | ||
usercfg | ||
userdir | ||
wallpaper | ||
wasm | ||
windows | ||
cheats.go | ||
commands.go | ||
common_menubar.go | ||
config.go | ||
doodle.go | ||
editor_scene_debug.go | ||
editor_scene.go | ||
editor_ui_doodad.go | ||
editor_ui_menubar.go | ||
editor_ui_palette.go | ||
editor_ui_popups.go | ||
editor_ui_toolbar.go | ||
editor_ui.go | ||
fps.go | ||
guitest_scene.go | ||
main_scene.go | ||
menu_scene.go | ||
play_inventory.go | ||
play_scene_menubar.go | ||
play_scene_touch.go | ||
play_scene.go | ||
player_physics.go | ||
scene.go | ||
shell.go |