aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUnavailableDev <ggwildplay@gmail.com>2023-04-04 14:34:03 +0200
committerUnavailableDev <ggwildplay@gmail.com>2023-04-04 14:34:03 +0200
commitabfb6d3667e0c1955f09636ed72e48ed17129c84 (patch)
tree2245e26fe38e00c194fb9db5d53947c6572b7851
parentb125ec41bfc18c9beb652cff1a58e567304c9c32 (diff)
parent9df9b163852cd5fd2462e1dec25ad4b00ca12a8c (diff)
Merge branch 'tilemap-build-system' into dev
-rwxr-xr-xscripts/manifest2header.awk13
-rwxr-xr-xscripts/tiled.mk.awk16
-rwxr-xr-xscripts/tilemap2png47
-rwxr-xr-xscripts/tilemap2tiled42
-rwxr-xr-xscripts/tilepack22
-rw-r--r--src/makefile14
-rw-r--r--src/ppu/consts.h6
-rw-r--r--src/ppu/ppu.c24
-rw-r--r--src/ppu/ppu.h3
-rw-r--r--src/ppusim/sim.c33
-rw-r--r--src/ppusim/sim.h4
-rw-r--r--src/static/.gitignore6
-rw-r--r--src/static/air.hex17
-rw-r--r--src/static/makefile42
-rw-r--r--src/static/shop.hex331
-rw-r--r--src/static/slime.hex24
-rw-r--r--src/static/world.h1
-rw-r--r--src/static/world.hex514
-rw-r--r--src/stm32/setup.c4
-rw-r--r--src/tilemap.h7
20 files changed, 1146 insertions, 24 deletions
diff --git a/scripts/manifest2header.awk b/scripts/manifest2header.awk
new file mode 100755
index 0000000..15cd682
--- /dev/null
+++ b/scripts/manifest2header.awk
@@ -0,0 +1,13 @@
+#!/bin/awk -f
+BEGIN {
+ offset = 0
+ print "#pragma once"
+}
+1 {
+ print "#define HH_TM_"toupper($1)"_OFFSET "offset
+ print "#define HH_TM_"toupper($1)"_SIZE "$2
+ offset += $2
+}
+END {
+ print "#define HH_TM_SIZE "offset
+}
diff --git a/scripts/tiled.mk.awk b/scripts/tiled.mk.awk
new file mode 100755
index 0000000..7728cf3
--- /dev/null
+++ b/scripts/tiled.mk.awk
@@ -0,0 +1,16 @@
+#!/bin/awk -f
+BEGIN {
+ targets=""
+ print "tiled_dir:\n\tmkdir -p tiled"
+}
+1 {
+ for (i = 0; i < $2; i++) {
+ target = sprintf("tiled/%s_%02d.png", $1,i)
+ printf target" "
+ targets = targets" "target
+ }
+ printf "&: %s.bin\n",$1
+ printf "\t$(TILEMAP2TILED) $<\n\n"
+}
+END { print "tiled: tiled_dir"targets }
+
diff --git a/scripts/tilemap2png b/scripts/tilemap2png
new file mode 100755
index 0000000..e37bfab
--- /dev/null
+++ b/scripts/tilemap2png
@@ -0,0 +1,47 @@
+#!/bin/python3
+# read packed tilemap file from stdin and output png on stdout
+
+import sys
+import io
+import struct
+from PIL import Image
+
+color_map = (
+ (0x00, 0x00, 0x00),
+ (0x24, 0x24, 0x24),
+ (0x49, 0x49, 0x49),
+ (0x6d, 0x6d, 0x6d),
+ (0x92, 0x92, 0x92),
+ (0xb6, 0xb6, 0xb6),
+ (0xda, 0xda, 0xda),
+ (0xff, 0xff, 0xff),
+)
+
+buf = []
+for byte in sys.stdin.buffer.read():
+ buf.append(byte)
+
+size_horizontal = 16 * 16
+size_vertical = ((len(buf) // 104) // 16 + 1) * 16
+img = Image.new('RGB', (size_horizontal, size_vertical))
+
+i = 0
+sprite_idx = 0
+for x in range(0, len(buf), 2):
+ word = 0x0000
+ word |= buf[x]
+ word |= buf[x+1] << 8
+
+ for p in range(5):
+ img.putpixel(((i % 16) + (16 * (sprite_idx % 16)), (i // 16) + (16 * (sprite_idx // 16))), color_map[(word >> (p * 3)) & 0b111])
+ i += 1
+ if i > 0xff:
+ i = 0
+ sprite_idx += 1
+ break
+
+with io.BytesIO() as out:
+ img.save(out, format="PNG")
+ sys.stdout.buffer.write(out.getvalue())
+ sys.stdout.buffer.flush()
+
diff --git a/scripts/tilemap2tiled b/scripts/tilemap2tiled
new file mode 100755
index 0000000..905f801
--- /dev/null
+++ b/scripts/tilemap2tiled
@@ -0,0 +1,42 @@
+#!/bin/python3
+# read packed tilemap file from argv[1] and output pngs
+
+import sys
+import io
+import struct
+from PIL import Image
+
+color_map = (
+ (0x00, 0x00, 0x00),
+ (0x24, 0x24, 0x24),
+ (0x49, 0x49, 0x49),
+ (0x6d, 0x6d, 0x6d),
+ (0x92, 0x92, 0x92),
+ (0xb6, 0xb6, 0xb6),
+ (0xda, 0xda, 0xda),
+ (0xff, 0xff, 0xff),
+)
+
+img = Image.new('RGB', (16, 16))
+
+buf = ""
+with open(sys.argv[1], "rb") as f:
+ buf = f.read()
+
+i = 0
+sprite_idx = 0
+for x in range(0, len(buf), 2):
+ word = 0x0000
+ word |= buf[x]
+ word |= buf[x+1] << 8
+
+ for p in range(5):
+ img.putpixel((i % 16, i // 16), color_map[(word >> (p * 3)) & 0b111])
+ i += 1
+ if i > 0xff:
+ i = 0
+ img.save(f"tiled/{sys.argv[1].replace('.bin','')}_{str(sprite_idx).zfill(2)}.png", format="PNG")
+ img = Image.new('RGB', (16, 16))
+ sprite_idx += 1
+ break
+
diff --git a/scripts/tilepack b/scripts/tilepack
new file mode 100755
index 0000000..a07cbb6
--- /dev/null
+++ b/scripts/tilepack
@@ -0,0 +1,22 @@
+#!/bin/python3
+# read bytes from input and pack into ppu format
+# each input sprite is 256 bytes
+
+import sys
+import struct
+
+i = 0
+word = 0x0000
+for byte in sys.stdin.buffer.read():
+ pixel_idx = i % 5
+ word |= (byte & 0b111) << 3 * pixel_idx
+
+ if pixel_idx == 4 or i == 0xff:
+ sys.stdout.buffer.write(struct.pack('<H', word))
+ word = 0x0000
+
+ i += 1
+ if i > 0xff: i = 0
+
+sys.stdout.buffer.flush()
+
diff --git a/src/makefile b/src/makefile
index c30840d..ac67c86 100644
--- a/src/makefile
+++ b/src/makefile
@@ -82,7 +82,15 @@ $(TARGET).bin: $(TARGET).elf
PHONY += flash
flash: $(TARGET).bin
- st-flash --reset write $(TARGET).bin 0x08000000
+ st-flash --reset write $< 0x08000000
+
+# see definition of g_hh_tilemap_rom in stm32/setup.c
+PHONY += rom
+rom: static/tilemap.bin
+ st-flash --reset write $< 0x08033000
+
+static/tilemap.bin static/tilemap.h &:
+ $(MAKE) -C static all
%-ds.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
@@ -103,4 +111,8 @@ PHONY += clean
clean:
$(RM) $(TARGET).bin $(TARGET).elf $(OBJS)
+PHONY += distclean
+distclean: clean
+ $(MAKE) -C static clean
+
.PHONY: $(PHONY)
diff --git a/src/ppu/consts.h b/src/ppu/consts.h
index a27b7b7..d7caf5e 100644
--- a/src/ppu/consts.h
+++ b/src/ppu/consts.h
@@ -55,3 +55,9 @@
#define HH_PPU_VRAM_AUX_OFFSET ((hh_ppu_addr_t) 0xde00)
/** @brief auxiliary memory size in words */
#define HH_PPU_VRAM_AUX_SIZE ((hh_ppu_addr_t) 0x0002)
+
+/** @brief sprite size in bytes */
+#define HH_PPU_BYTE_SPRITE_SIZE (HH_PPU_VRAM_TMM_SPRITE_SIZE * sizeof(hh_ppu_data_t))
+/** @brief sprite size in 32-bit words (for stm) */
+#define HH_PPU_NATIVE_SPRITE_SIZE (HH_PPU_BYTE_SPRITE_SIZE / sizeof(uint32_t))
+
diff --git a/src/ppu/ppu.c b/src/ppu/ppu.c
index df14b9f..1f46b16 100644
--- a/src/ppu/ppu.c
+++ b/src/ppu/ppu.c
@@ -3,6 +3,7 @@
#include "ppu/consts.h"
#include "ppu/internals.h"
#include "ppu/ppu.h"
+#include "tilemap.h"
void hh_ppu_update_foreground(unsigned index, hh_s_ppu_loc_fam_entry e) {
hh_s_ppu_vram_data s = hh_ppu_2nat_fam(e);
@@ -46,3 +47,26 @@ void hh_ppu_update_color(unsigned palette_index, unsigned color_index, hh_ppu_rg
hh_ppu_vram_write(c);
free(c.data);
}
+
+void hh_ppu_load_tilemap() {
+ for (size_t sprite_idx = 0; sprite_idx < HH_TM_SIZE; sprite_idx++) {
+ for (size_t word_idx = 0; word_idx < HH_PPU_NATIVE_SPRITE_SIZE; word_idx++) {
+ uint32_t native_word = g_hh_tilemap_rom[word_idx + sprite_idx * HH_PPU_NATIVE_SPRITE_SIZE];
+ uint32_t native_word_bytes[4] = { // TODO: check endianness of stm32
+ (native_word >> 24) & 0xff,
+ (native_word >> 16) & 0xff,
+ (native_word >> 8) & 0xff,
+ (native_word >> 0) & 0xff,
+ };
+ uint16_t ppu_words[2] = {
+ (native_word_bytes[2] << 8) | (native_word_bytes[3] << 0),
+ (native_word_bytes[0] << 8) | (native_word_bytes[1] << 0),
+ };
+ hh_ppu_vram_write((hh_s_ppu_vram_data) {
+ .data = ppu_words,
+ .offset = HH_PPU_VRAM_TMM_OFFSET + sprite_idx * HH_PPU_VRAM_TMM_SPRITE_SIZE + word_idx * 2,
+ .size = 2,
+ });
+ }
+ }
+}
diff --git a/src/ppu/ppu.h b/src/ppu/ppu.h
index 75d97c1..46b58af 100644
--- a/src/ppu/ppu.h
+++ b/src/ppu/ppu.h
@@ -23,3 +23,6 @@ void hh_ppu_update_palette_table(hh_ppu_loc_palette_table_t table);
void hh_ppu_update_palette(unsigned palette_index, hh_ppu_loc_palette_data_t palette);
/** @brief update single color in palette */
void hh_ppu_update_color(unsigned palette_index, unsigned color_index, hh_ppu_rgb_color_t color);
+
+/** @brief copy g_hh_tilemap_rom into PPU vram */
+void hh_ppu_load_tilemap();
diff --git a/src/ppusim/sim.c b/src/ppusim/sim.c
index 8b67acc..0f8d687 100644
--- a/src/ppusim/sim.c
+++ b/src/ppusim/sim.c
@@ -10,9 +10,11 @@
#include "ppusim/mem.h"
#include "ppusim/sim.h"
#include "ppusim/work.h"
+#include "tilemap.h"
SDL_Window *g_hh_window = NULL;
SDL_Renderer *g_hh_renderer = NULL;
+uint32_t* g_hh_tilemap_rom = NULL;
void hh_ppu_init() {
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS);
@@ -25,38 +27,27 @@ void hh_ppu_init() {
g_hh_ppusim_vram = malloc(sizeof(hh_ppu_data_t) * 0xffff);
memset(g_hh_ppusim_vram, 0x0000, 0xffff);
+ hh_ppusim_load_tilemap();
+
hh_ppu_load_tilemap();
}
-void hh_ppu_load_tilemap() {
- //TODO: remove magic file name here
- char* filename = "static/tiles.bin";
- FILE* fp = fopen(filename,"rb");
- if (!fp){
- fprintf(stderr,"Error: Failed to load tiles.");
- return;//error
- }
- int sprite_size = (HH_PPU_SPRITE_WIDTH * HH_PPU_SPRITE_HEIGHT);
- fseek(fp, 0, SEEK_END);//goto EOF
- int _size = ftell(fp)/sprite_size;
- fseek(fp, 0, 0);//goto start of file
+void hh_ppusim_load_tilemap() {
+ FILE* fp = fopen("static/tilemap.bin", "rb");
- for (int i = 0; i < _size; i++) {
- uint8_t data[sprite_size];
+ fseek(fp, 0, SEEK_END);
+ size_t file_size = ftell(fp);
+ rewind(fp);
- fread(data,sizeof(uint8_t),sprite_size,fp);
-
- hh_s_ppu_vram_data sprite = hh_ppu_2nat_sprite(data);
- sprite.offset = i*HH_PPU_VRAM_TMM_SPRITE_SIZE;
- hh_ppu_vram_write(sprite);
- free(sprite.data);
- }
+ g_hh_tilemap_rom = malloc(file_size);
+ fread(g_hh_tilemap_rom, file_size, 1, fp);
fclose(fp);
}
void hh_ppu_deinit() {
free(g_hh_ppusim_threads);
free(g_hh_ppusim_vram);
+ free(g_hh_tilemap_rom);
SDL_DestroyRenderer(g_hh_renderer);
SDL_DestroyWindow(g_hh_window);
diff --git a/src/ppusim/sim.h b/src/ppusim/sim.h
index 4d1d718..218d61d 100644
--- a/src/ppusim/sim.h
+++ b/src/ppusim/sim.h
@@ -5,5 +5,5 @@
/** @brief max framerate for PPUSIM */
#define HH_PPUSIM_FRAMERATE 60
-/** @brief pump tilemap from rom to ppu ram */
-void hh_ppu_load_tilemap(); //ppu sim?
+/** @brief load static/tilemap.bin into memory */
+void hh_ppusim_load_tilemap();
diff --git a/src/static/.gitignore b/src/static/.gitignore
new file mode 100644
index 0000000..348c5b9
--- /dev/null
+++ b/src/static/.gitignore
@@ -0,0 +1,6 @@
+**/*.bin
+**/*.meta
+manifest.txt
+tilemap.h
+tiled/*
+tiled.mk
diff --git a/src/static/air.hex b/src/static/air.hex
new file mode 100644
index 0000000..5160cd6
--- /dev/null
+++ b/src/static/air.hex
@@ -0,0 +1,17 @@
+00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
diff --git a/src/static/makefile b/src/static/makefile
new file mode 100644
index 0000000..6025a55
--- /dev/null
+++ b/src/static/makefile
@@ -0,0 +1,42 @@
+XXD := xxd
+TILEPACK := ../../scripts/tilepack
+MANIFEST2HEADER := ../../scripts/manifest2header.awk
+TILEDMK := ../../scripts/tiled.mk.awk
+TILEMAP2TILED := ../../scripts/tilemap2tiled
+
+INPUT += air.hex \
+ shop.hex \
+ slime.hex \
+ world.hex
+USER_META += world.h
+
+OUT_BIN := $(patsubst %.hex,%.bin, $(INPUT))
+OUT_META := $(patsubst %.hex,%.meta, $(INPUT))
+
+.PHONY: all clean
+
+all: tilemap.bin tilemap.h
+
+%.bin: %.hex
+ sed 's/;.*//g' $< | $(XXD) -r | $(TILEPACK) > $@
+
+%.meta: %.bin
+ wc -c $< | tr '.' ' ' | awk '1 { print $$2" "$$1 / 104 }' > $@
+
+manifest.txt: $(OUT_BIN) $(OUT_META)
+ cat $(OUT_META) > $@
+
+tilemap.bin: manifest.txt $(OUT_BIN)
+ awk '1 { print $$1".bin" }' $< | xargs cat > $@
+
+tilemap.h: manifest.txt
+ $(MANIFEST2HEADER) $< > $@
+ cat $(USER_META) >> $@
+
+tiled.mk: manifest.txt
+ $(TILEDMK) < $< > $@
+
+include tiled.mk
+
+clean:
+ $(RM) -r $(OUT_BIN) $(OUT_META) manifest.txt tilemap.h tilemap.bin tiled.mk tiled
diff --git a/src/static/shop.hex b/src/static/shop.hex
new file mode 100644
index 0000000..8c08feb
--- /dev/null
+++ b/src/static/shop.hex
@@ -0,0 +1,331 @@
+;indices: 9
+;75 24 38
+;a5 30 30
+;cf 57 3c
+;1e 1d 39
+;40 27 51
+;7a 36 7b
+;10 14 1f
+;eb ed e9
+;17 20 38
+
+000000: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+000010: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+000020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000030: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000040: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000050: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000070: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000080: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000090: 06 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01
+0000a0: 06 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01
+0000b0: 06 06 01 00 00 00 00 00 00 00 00 00 00 00 01 06
+0000c0: 06 06 06 01 00 00 00 00 00 00 00 00 00 01 06 06
+0000d0: 06 06 06 06 01 01 00 00 00 00 00 01 01 06 06 06
+0000e0: 06 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06
+0000f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000100: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000110: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000120: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000130: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000140: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000150: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000160: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000170: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000180: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000190: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0001a0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0001b0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0001c0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0001d0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0001e0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0001f0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000200: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000210: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000220: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000230: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000240: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000250: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000260: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000270: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000280: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000290: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0002a0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0002b0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0002c0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0002d0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0002e0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0002f0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000300: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000310: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000320: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000330: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000340: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000350: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000360: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000370: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000380: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000390: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0003a0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0003b0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0003c0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0003d0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0003e0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0003f0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000400: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
+000410: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
+000420: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000430: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000440: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000450: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000460: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000470: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000480: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000490: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0004a0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0004b0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0004c0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0004d0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0004e0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0004f0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000500: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000510: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000520: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000530: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000540: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000550: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000560: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000570: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000580: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000590: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0005a0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0005b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0005c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0005d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0005e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0005f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000600: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000610: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000620: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000630: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000640: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000650: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000660: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000670: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000680: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000690: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+0006a0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+0006b0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+0006c0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+0006d0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+0006e0: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+0006f0: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000700: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 01 01
+000710: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01
+000720: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 01
+000730: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 01 01
+000740: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 01 01
+000750: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 01 01
+000760: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 01 01
+000770: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 01 01
+000780: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 01 01
+000790: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01
+0007a0: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 01
+0007b0: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 01 01
+0007c0: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 01 01
+0007d0: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 01 01
+0007e0: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 01 01
+0007f0: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 01 01
+000800: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01
+000810: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06
+000820: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06
+000830: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06
+000840: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06
+000850: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06
+000860: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06
+000870: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06
+000880: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01
+000890: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06
+0008a0: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06
+0008b0: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06
+0008c0: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06
+0008d0: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06
+0008e0: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06
+0008f0: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06
+000900: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000910: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000920: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000930: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000940: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000950: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000960: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000970: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000980: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000990: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0009a0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0009b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0009c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0009d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0009e0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0009f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000a00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000a10: 06 06 06 01 01 06 06 06 06 06 06 06 06 06 06 06
+000a20: 06 06 01 01 01 01 06 06 06 06 06 06 06 06 06 06
+000a30: 06 01 01 01 01 01 01 06 06 06 06 06 06 06 06 06
+000a40: 06 01 01 01 01 01 01 06 06 06 06 06 06 06 06 06
+000a50: 06 06 01 01 01 01 06 06 06 06 06 06 06 06 06 06
+000a60: 06 06 06 01 01 06 06 06 06 06 06 06 06 06 06 06
+000a70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000a80: 06 06 06 06 06 06 06 06 06 06 01 01 06 06 06 06
+000a90: 06 06 06 06 06 06 06 06 06 01 01 01 01 06 06 06
+000aa0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 06 06
+000ab0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 06 06
+000ac0: 06 06 06 06 06 06 06 06 06 01 01 01 01 06 06 06
+000ad0: 06 06 06 06 06 06 06 06 06 06 01 01 06 06 06 06
+000ae0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000af0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b00: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b10: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b20: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b30: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b40: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b50: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b60: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b70: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b80: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000b90: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000ba0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000bb0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000bc0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000bd0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000be0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000bf0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c10: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c20: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c30: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c40: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c50: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000c60: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000c70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000c80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000c90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000ca0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000cb0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000cc0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000cd0: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 01
+000ce0: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 01
+000cf0: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+000d00: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+000d10: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 01
+000d20: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 01
+000d30: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000d40: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000d50: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000d60: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 01
+000d70: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 01
+000d80: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+000d90: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+000da0: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 01
+000db0: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 01
+000dc0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000dd0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000de0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000df0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+000e00: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+000e10: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 06
+000e20: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 06
+000e30: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000e40: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000e50: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000e60: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 06
+000e70: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06
+000e80: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+000e90: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+000ea0: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 06
+000eb0: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 06
+000ec0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000ed0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000ee0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000ef0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000f00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000f10: 06 07 07 06 07 06 07 07 07 07 06 06 06 06 06 06
+000f20: 06 07 07 06 07 06 06 07 07 06 06 06 06 06 06 06
+000f30: 06 07 07 07 07 06 06 07 07 06 06 07 07 07 07 06
+000f40: 06 07 07 06 07 06 06 07 07 06 06 06 06 06 06 06
+000f50: 06 07 07 06 07 06 07 07 07 07 06 06 06 06 06 06
+000f60: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000f70: 06 07 07 07 07 07 07 07 07 07 07 07 07 07 07 06
+000f80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000f90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000fa0: 06 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06
+000fb0: 06 07 06 06 06 06 07 07 06 06 06 07 07 06 07 06
+000fc0: 06 07 07 07 07 06 07 07 06 06 06 07 07 06 07 06
+000fd0: 06 06 06 07 07 06 07 07 06 06 06 07 07 06 07 06
+000fe0: 06 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06
+000ff0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001000: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001010: 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 07
+001020: 07 06 06 06 06 07 07 06 06 06 07 07 06 07 06 07
+001030: 07 07 07 07 06 07 07 06 06 06 07 07 06 07 06 07
+001040: 06 06 07 07 06 07 07 06 06 06 07 07 06 07 06 07
+001050: 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 07
+001060: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001070: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001080: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001090: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010a0: 07 07 07 07 06 07 07 07 07 06 07 07 06 06 06 06
+0010b0: 07 07 06 07 06 07 07 06 06 06 07 07 06 06 06 06
+0010c0: 07 07 07 06 06 07 07 07 07 06 06 06 06 06 06 07
+0010d0: 07 07 06 07 06 07 07 06 06 06 07 07 06 06 07 06
+0010e0: 07 07 06 07 06 07 07 07 07 06 07 07 06 06 07 07
+0010f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001100: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001110: 07 07 07 06 07 07 07 07 06 07 07 06 06 06 06 06
+001120: 07 06 07 06 07 07 06 06 06 07 07 06 06 06 06 07
+001130: 07 07 06 06 07 07 07 07 06 06 06 06 06 06 07 07
+001140: 07 06 07 06 07 07 06 06 06 07 07 06 06 07 06 07
+001150: 07 06 07 06 07 07 07 07 06 07 07 06 06 07 07 07
+001160: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001170: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001180: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001190: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0011a0: 06 07 07 07 06 06 06 06 06 07 07 06 06 06 06 07
+0011b0: 07 06 07 07 06 06 06 06 07 07 07 06 06 06 06 06
+0011c0: 06 07 07 06 06 06 06 07 07 07 06 06 06 07 07 07
+0011d0: 07 07 06 06 06 06 07 07 07 06 06 06 07 07 06 06
+0011e0: 07 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06
+0011f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001200: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001210: 07 07 07 06 06 07 07 07 07 07 06 06 06 06 07 07
+001220: 07 07 06 06 06 06 06 07 07 07 06 06 06 07 06 07
+001230: 07 06 06 06 06 06 07 07 07 06 06 06 07 07 07 07
+001240: 07 06 06 06 06 07 07 07 06 06 06 07 06 07 07 06
+001250: 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06 06
+001260: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001270: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001280: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001290: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0012a0: 07 07 06 06 06 06 07 07 07 06 06 06 07 06 06 07
+0012b0: 07 07 06 06 07 06 06 07 07 06 06 07 06 06 07 07
+0012c0: 07 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06
+0012d0: 06 06 06 07 06 07 07 06 06 06 06 07 07 07 06 06
+0012e0: 06 06 06 07 07 07 06 06 06 06 07 07 07 06 06 06
+0012f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001300: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001310: 07 06 06 06 06 07 07 07 06 06 06 06 06 06 06 06
+001320: 07 06 06 06 07 06 07 07 06 06 06 06 06 06 06 06
+001330: 06 06 06 06 07 07 07 06 06 06 06 06 06 06 06 06
+001340: 06 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06
+001350: 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06
+001360: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001370: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001380: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001390: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0013a0: 06 06 06 07 07 07 07 06 06 06 06 06 06 06 06 06
+0013b0: 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06 06
+0013c0: 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06
+0013d0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0013e0: 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06 06
+0013f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 \ No newline at end of file
diff --git a/src/static/slime.hex b/src/static/slime.hex
new file mode 100644
index 0000000..ce20533
--- /dev/null
+++ b/src/static/slime.hex
@@ -0,0 +1,24 @@
+;slime sprite
+;indices: 4
+;23 32 56
+;25 51 45
+;70 130 50
+;117 167 67
+
+00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+40: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00
+50: 00 00 00 01 03 03 03 03 03 03 01 00 00 00 00 00
+60: 00 00 01 03 03 03 03 03 03 03 03 01 00 00 00 00
+70: 00 01 03 03 03 03 03 03 03 01 02 03 01 00 00 00
+80: 01 03 03 03 01 02 03 03 03 01 01 03 03 01 00 00
+90: 01 03 03 03 01 01 03 03 03 03 03 03 03 03 01 00
+a0: 01 03 03 03 03 03 03 03 02 03 03 03 03 03 02 01
+b0: 01 02 03 03 03 03 03 03 03 03 03 03 03 02 02 01
+c0: 00 01 02 03 03 03 03 03 03 03 03 02 02 02 02 01
+d0: 00 00 01 02 02 03 03 03 02 02 02 02 02 02 01 00
+e0: 00 00 00 01 02 02 02 02 02 02 02 02 02 01 00 00
+f0: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00
+
diff --git a/src/static/world.h b/src/static/world.h
new file mode 100644
index 0000000..081b157
--- /dev/null
+++ b/src/static/world.h
@@ -0,0 +1 @@
+#define HH_TM_WORLD_DUMMY_OFFSET (HH_TM_WORLD_OFFSET + 5)
diff --git a/src/static/world.hex b/src/static/world.hex
new file mode 100644
index 0000000..446f3dd
--- /dev/null
+++ b/src/static/world.hex
@@ -0,0 +1,514 @@
+;TODO split up file
+;Tilemap (all current tiles)
+0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0100: 06 06 06 06 06 05 06 06 06 06 06 05 06 06 06 06
+0110: 06 05 05 05 05 03 05 05 05 05 05 03 05 05 05 05
+0120: 06 05 04 04 04 03 05 05 05 05 05 03 05 05 05 05
+0130: 06 04 04 04 04 02 02 02 02 02 02 02 02 02 02 02
+0140: 06 04 04 04 04 02 02 03 03 03 03 03 03 02 03 03
+0150: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03
+0160: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03
+0170: 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 02
+0180: 06 06 04 04 04 04 04 02 02 02 03 03 03 03 02 02
+0190: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+01a0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02
+01b0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02
+01c0: 00 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03
+01d0: 00 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03
+01e0: 00 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03
+01f0: 06 06 06 05 05 05 02 02 02 02 02 02 02 02 02 02
+0200: 06 06 06 05 06 06 06 06 06 06 06 05 06 06 06 06
+0210: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05
+0220: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05
+0230: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0240: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+0250: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+0260: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+0270: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0280: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+0290: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+02a0: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+02b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+02c0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+02d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+02e0: 02 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+02f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0300: 06 06 06 05 06 06 06 06 06 06 05 06 06 06 06 06
+0310: 05 05 05 03 05 05 05 05 05 05 03 05 05 05 05 06
+0320: 05 05 05 03 05 05 05 05 05 05 03 04 04 05 05 06
+0330: 02 02 02 02 02 02 02 02 02 02 02 04 04 04 04 06
+0340: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 06
+0350: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05
+0360: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05
+0370: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05
+0380: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00
+0390: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+03a0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+03b0: 02 02 02 02 02 02 02 02 02 02 02 05 05 06 06 06
+03c0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 06
+03d0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 06
+03e0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 05
+03f0: 02 02 02 02 02 02 02 02 02 02 02 02 03 03 03 05
+0400: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0410: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0420: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 02 02
+0430: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02
+0440: 00 05 04 04 04 03 02 03 03 03 03 03 03 02 03 03
+0450: 00 05 04 04 04 02 03 03 03 03 03 03 03 02 03 03
+0460: 00 04 04 04 04 02 03 03 03 03 03 02 02 02 02 03
+0470: 06 06 05 05 02 02 02 02 02 02 02 02 02 02 02 02
+0480: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0490: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+04a0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02
+04b0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02
+04c0: 00 05 05 04 04 04 04 03 02 03 03 03 03 03 03 03
+04d0: 00 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03
+04e0: 00 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03
+04f0: 00 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02
+0500: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+0510: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+0520: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+0530: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0540: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+0550: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+0560: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03
+0570: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0580: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+0590: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+05a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+05b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+05c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03
+05d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+05e0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03
+05f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0600: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00
+0610: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00
+0620: 03 03 02 02 03 03 03 03 03 03 03 02 04 04 04 00
+0630: 02 02 02 02 02 02 02 02 02 02 02 02 02 06 06 06
+0640: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 06
+0650: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05
+0660: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05
+0670: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05
+0680: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00
+0690: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+06a0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+06b0: 02 02 02 02 02 02 02 02 02 02 02 03 03 06 06 06
+06c0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 06
+06d0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 05
+06e0: 03 02 03 03 03 03 03 03 03 02 04 04 04 04 04 05
+06f0: 02 02 02 02 02 02 02 02 02 02 02 02 03 03 03 05
+0700: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0710: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0720: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 02 02
+0730: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02
+0740: 00 05 04 04 04 03 02 03 03 03 03 03 03 02 03 03
+0750: 00 05 04 04 04 02 03 03 03 03 03 03 03 02 03 03
+0760: 00 04 04 04 04 02 03 03 03 03 03 02 02 02 02 03
+0770: 06 06 05 05 02 02 02 02 02 02 02 02 02 02 02 02
+0780: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0790: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+07a0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02
+07b0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02
+07c0: 00 05 05 04 04 04 04 04 04 04 04 02 02 02 02 04
+07d0: 00 05 05 04 04 04 04 04 04 04 04 04 02 04 04 04
+07e0: 00 06 05 05 05 04 04 04 04 04 04 04 03 04 04 04
+07f0: 00 06 06 06 05 05 05 05 05 05 05 05 03 05 05 05
+0800: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+0810: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+0820: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+0830: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0840: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+0850: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+0860: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03
+0870: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0880: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+0890: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+08a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+08b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+08c0: 04 04 04 04 04 04 04 04 03 03 03 04 04 04 04 04
+08d0: 04 04 04 04 04 04 04 04 04 03 03 04 04 04 04 04
+08e0: 04 04 04 04 04 04 04 04 04 03 04 04 04 04 04 04
+08f0: 05 05 05 05 05 05 05 05 05 03 05 05 05 05 05 05
+0900: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00
+0910: 03 03 03 02 03 03 03 03 03 03 03 02 04 04 05 00
+0920: 03 03 02 02 03 03 03 03 03 03 03 02 04 04 04 00
+0930: 02 02 02 02 02 02 02 02 02 02 02 02 02 06 06 06
+0940: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 06
+0950: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05
+0960: 03 03 03 03 03 02 03 03 03 02 04 04 04 04 04 05
+0970: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05
+0980: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00
+0990: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+09a0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+09b0: 02 02 02 02 02 02 03 03 03 03 03 03 03 06 06 06
+09c0: 04 04 03 03 03 04 04 04 04 04 04 04 04 04 05 06
+09d0: 04 04 04 03 03 04 04 04 04 04 04 04 04 05 05 05
+09e0: 04 04 04 03 04 04 04 04 04 04 04 05 05 05 05 06
+09f0: 05 05 05 03 05 05 05 05 05 05 05 05 05 06 06 06
+0a00: 06 06 06 06 06 05 06 06 06 06 06 05 06 06 06 06
+0a10: 06 05 05 05 05 03 05 05 05 05 05 03 05 05 05 05
+0a20: 06 05 04 04 04 03 05 05 05 05 05 03 05 05 05 05
+0a30: 06 04 04 04 04 02 02 02 02 02 02 02 02 02 02 02
+0a40: 06 04 04 04 04 02 02 03 03 03 03 03 03 02 03 03
+0a50: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03
+0a60: 05 04 04 04 04 02 03 03 03 03 03 03 03 02 03 03
+0a70: 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 02
+0a80: 06 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0a90: 05 04 04 04 04 04 04 02 03 03 03 03 03 03 03 02
+0aa0: 05 04 04 04 04 04 04 02 02 03 03 03 03 03 03 02
+0ab0: 05 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02
+0ac0: 00 05 05 04 04 04 04 04 04 04 04 02 02 02 02 04
+0ad0: 00 05 05 04 04 04 04 04 04 04 04 04 02 04 04 04
+0ae0: 00 06 05 05 05 04 04 04 04 04 04 04 03 04 04 04
+0af0: 00 06 06 06 05 05 05 05 05 05 05 05 03 05 05 05
+0b00: 06 06 06 05 06 06 06 06 06 06 06 05 06 06 06 06
+0b10: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05
+0b20: 05 05 05 03 05 05 05 05 05 05 05 03 05 05 05 05
+0b30: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0b40: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+0b50: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+0b60: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+0b70: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0b80: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+0b90: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+0ba0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+0bb0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+0bc0: 04 04 04 04 04 04 04 04 03 03 03 04 04 04 04 04
+0bd0: 04 04 04 04 04 04 04 04 04 03 03 04 04 04 04 04
+0be0: 04 04 04 04 04 04 04 04 04 03 04 04 04 04 04 04
+0bf0: 05 05 05 05 05 05 05 05 05 03 05 05 05 05 05 05
+0c00: 06 06 06 05 06 06 06 06 06 06 05 06 06 06 06 06
+0c10: 05 05 05 03 05 05 05 05 05 05 03 05 05 05 05 06
+0c20: 05 05 05 03 05 05 05 05 05 05 03 04 04 05 05 06
+0c30: 02 02 02 02 02 02 02 02 02 02 02 04 04 04 04 06
+0c40: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 06
+0c50: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05
+0c60: 03 03 03 03 03 02 03 03 03 03 02 04 04 04 04 05
+0c70: 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 05
+0c80: 03 03 03 03 03 03 03 02 04 04 04 04 04 05 05 00
+0c90: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+0ca0: 03 03 03 03 03 03 03 02 04 04 04 04 04 04 05 00
+0cb0: 02 02 02 02 02 02 03 03 03 03 03 03 03 06 06 06
+0cc0: 04 04 03 03 03 04 04 04 04 04 04 04 04 04 05 06
+0cd0: 04 04 04 03 03 04 04 04 04 04 04 04 04 05 05 05
+0ce0: 04 04 04 03 04 04 04 04 04 04 04 05 05 05 05 06
+0cf0: 05 05 05 03 05 05 05 05 05 05 05 05 05 06 06 06
+0d00: 06 06 06 06 06 05 06 06 06 06 05 06 06 06 06 06
+0d10: 06 05 05 05 05 03 05 05 05 05 03 05 05 05 05 06
+0d20: 06 05 04 04 04 03 05 05 05 05 03 04 04 05 05 06
+0d30: 06 04 04 04 04 02 02 02 02 02 02 04 04 04 04 06
+0d40: 06 04 04 04 04 02 02 03 03 03 02 04 04 04 04 06
+0d50: 05 04 04 04 04 02 03 03 03 03 02 04 04 04 04 05
+0d60: 05 04 04 04 04 02 03 03 03 03 02 04 04 04 04 05
+0d70: 03 03 03 03 03 02 02 02 02 02 02 03 03 03 03 05
+0d80: 06 06 04 04 04 04 04 02 04 04 04 04 04 05 05 00
+0d90: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00
+0da0: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00
+0db0: 05 03 03 03 03 03 02 02 02 02 02 05 05 06 06 06
+0dc0: 00 05 04 04 04 04 04 04 03 02 04 04 04 04 04 06
+0dd0: 00 05 04 04 04 04 04 04 03 02 04 04 04 04 04 06
+0de0: 00 05 04 04 04 04 04 04 03 02 04 04 04 04 04 05
+0df0: 06 06 06 05 05 05 02 02 02 02 02 02 03 03 03 05
+0e00: 06 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00
+0e10: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00
+0e20: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 04 00
+0e30: 05 03 03 03 03 03 02 02 02 02 02 02 02 06 06 06
+0e40: 00 05 04 04 04 03 02 03 03 02 04 04 04 04 04 06
+0e50: 00 05 04 04 04 02 03 03 03 02 04 04 04 04 04 05
+0e60: 00 04 04 04 04 02 03 03 03 02 03 04 04 04 04 05
+0e70: 06 06 05 05 02 02 02 02 02 02 02 03 03 03 03 05
+0e80: 06 04 04 04 04 04 04 02 04 04 04 04 04 05 05 00
+0e90: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00
+0ea0: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00
+0eb0: 05 03 03 03 03 03 02 02 02 02 02 03 03 06 06 06
+0ec0: 00 05 05 04 04 04 03 03 03 03 03 04 04 04 04 06
+0ed0: 00 05 04 04 04 04 03 03 03 03 04 04 04 04 04 05
+0ee0: 00 05 04 04 04 03 03 03 03 03 04 04 04 04 04 05
+0ef0: 00 05 03 03 03 03 03 02 02 02 02 02 03 03 03 05
+0f00: 06 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00
+0f10: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 05 00
+0f20: 05 04 04 04 04 04 04 02 03 03 03 02 04 04 04 00
+0f30: 05 03 03 03 03 03 02 02 02 02 02 02 02 06 06 06
+0f40: 00 05 04 04 04 03 02 03 03 02 04 04 04 04 04 06
+0f50: 00 05 04 04 04 02 03 03 03 02 04 04 04 04 04 05
+0f60: 00 04 04 04 04 02 03 03 03 02 04 04 04 04 04 05
+0f70: 06 06 05 05 02 02 02 02 02 02 02 03 03 03 03 05
+0f80: 06 04 04 04 04 04 04 02 04 04 04 04 04 05 05 00
+0f90: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00
+0fa0: 05 04 04 04 04 04 04 02 04 04 04 04 04 04 05 00
+0fb0: 05 03 03 03 03 03 02 02 03 03 03 03 03 06 06 06
+0fc0: 00 05 05 04 04 04 04 04 04 04 04 04 04 04 05 06
+0fd0: 00 05 05 04 04 04 04 04 04 04 04 04 04 05 05 05
+0fe0: 00 06 05 05 05 04 04 04 04 04 04 05 05 05 05 06
+0ff0: 00 06 06 06 05 05 05 05 05 05 05 05 05 06 06 06
+1000: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+1010: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+1020: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+1030: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1040: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+1050: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+1060: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03
+1070: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1080: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+1090: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+10a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+10b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+10c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 04 04 04
+10d0: 03 02 03 03 03 03 03 03 03 02 03 03 04 04 04 04
+10e0: 03 02 03 03 03 03 03 03 02 02 02 03 04 04 04 04
+10f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1100: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+1110: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+1120: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+1130: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1140: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+1150: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+1160: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03
+1170: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1180: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+1190: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+11a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+11b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+11c0: 02 02 02 04 04 03 03 03 03 02 03 03 03 03 03 03
+11d0: 04 02 04 04 04 04 03 03 03 02 03 03 03 03 03 03
+11e0: 04 02 04 04 04 04 03 03 02 02 02 03 03 03 03 03
+11f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1200: 03 03 02 02 02 03 03 03 03 03 03 02 02 05 05 05
+1210: 03 03 03 02 03 03 03 03 03 03 03 02 03 05 05 05
+1220: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 05 05
+1230: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1240: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+1250: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+1260: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03
+1270: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1280: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+1290: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+12a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+12b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+12c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03
+12d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+12e0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03
+12f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1300: 06 05 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+1310: 05 05 05 02 03 03 03 03 03 03 03 02 03 03 03 03
+1320: 05 05 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+1330: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1340: 03 03 03 03 02 02 03 03 03 03 03 03 03 02 03 03
+1350: 03 03 03 03 03 02 03 03 03 03 03 03 03 02 03 03
+1360: 03 03 03 03 03 02 03 03 03 03 03 03 02 02 02 03
+1370: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1380: 02 03 03 03 03 03 03 02 03 03 03 03 03 03 02 02
+1390: 03 03 03 03 03 03 03 02 03 03 03 03 03 03 03 02
+13a0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+13b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+13c0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03
+13d0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+13e0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03
+13f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1400: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1410: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1420: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1430: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1440: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1450: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1460: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1470: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1480: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1490: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+14a0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+14b0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+14c0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+14d0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+14e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+14f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1500: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+1510: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+1520: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+1530: 02 02 02 02 02 02 02 02 02 02 02 02 02 01 01 01
+1540: 03 03 03 03 02 02 03 03 02 02 02 02 02 01 02 02
+1550: 03 03 03 03 03 02 02 02 02 02 02 02 02 01 02 02
+1560: 03 03 03 03 03 01 02 02 02 02 02 02 01 01 01 02
+1570: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01
+1580: 02 03 03 03 02 02 02 01 02 02 02 02 02 02 01 01
+1590: 03 03 03 03 02 02 02 01 02 02 02 02 02 02 02 01
+15a0: 03 03 03 03 02 02 01 01 01 01 02 02 02 02 01 01
+15b0: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01
+15c0: 02 02 02 03 03 02 02 02 02 01 02 02 02 01 01 01
+15d0: 03 02 03 03 03 02 02 02 02 01 02 02 01 01 01 01
+15e0: 03 02 03 03 03 03 02 02 01 01 01 02 01 01 01 01
+15f0: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01
+1600: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+1610: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+1620: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+1630: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1640: 02 02 02 02 01 01 02 02 02 02 02 02 02 01 02 02
+1650: 02 02 02 02 02 01 02 02 02 02 02 02 02 01 02 02
+1660: 02 02 02 02 02 01 02 02 02 02 02 02 01 01 01 02
+1670: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1680: 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01 01
+1690: 01 02 02 02 02 02 02 01 02 02 02 02 02 02 02 01
+16a0: 01 02 02 02 01 01 01 01 01 01 02 02 02 02 02 01
+16b0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+16c0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+16d0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+16e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+16f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1700: 03 03 02 02 02 03 03 03 03 03 03 02 02 03 03 03
+1710: 03 03 03 02 03 03 03 03 03 03 03 02 03 03 03 03
+1720: 03 03 03 02 03 03 03 03 03 03 02 02 02 03 03 03
+1730: 01 01 01 01 02 02 02 02 02 02 02 02 02 02 02 02
+1740: 02 02 02 02 01 01 03 03 03 03 03 03 03 02 03 03
+1750: 02 02 02 02 02 01 02 02 03 03 03 03 03 02 03 03
+1760: 02 02 02 02 02 01 02 02 02 03 03 03 02 02 02 03
+1770: 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02
+1780: 01 02 02 02 02 02 02 01 02 02 03 03 03 03 02 02
+1790: 02 02 02 02 02 02 02 01 02 02 02 03 03 03 03 02
+17a0: 02 02 02 02 02 02 01 01 01 01 02 03 03 03 03 02
+17b0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02
+17c0: 01 01 01 02 02 02 02 02 02 01 02 03 03 03 03 03
+17d0: 01 01 02 02 02 02 02 02 02 01 02 03 03 03 03 03
+17e0: 01 01 02 02 02 02 02 02 01 01 01 03 03 03 03 03
+17f0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02
+1800: 03 03 02 02 02 02 02 02 02 02 02 01 01 01 01 01
+1810: 03 03 03 02 03 02 02 02 02 02 02 01 01 01 01 01
+1820: 03 03 03 02 03 02 02 02 02 02 01 01 01 01 01 01
+1830: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01
+1840: 03 03 03 03 02 01 02 02 02 02 02 02 01 01 01 01
+1850: 03 03 03 03 02 01 02 02 02 02 02 02 01 01 01 01
+1860: 03 03 03 03 02 01 02 02 02 02 02 01 01 01 01 01
+1870: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01
+1880: 02 03 03 03 02 02 02 01 02 02 02 01 01 01 01 01
+1890: 03 03 03 03 02 02 02 01 02 02 02 01 01 01 01 01
+18a0: 03 03 03 03 02 02 01 01 01 01 02 01 01 01 01 01
+18b0: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01
+18c0: 02 02 02 03 02 02 02 02 02 01 02 02 01 01 01 01
+18d0: 03 02 03 03 03 02 02 02 02 01 02 02 02 01 01 01
+18e0: 03 02 03 03 02 02 02 02 01 01 01 02 02 01 01 01
+18f0: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01
+1900: 01 01 01 01 01 02 02 02 02 02 02 02 02 03 03 03
+1910: 01 01 01 01 02 02 02 02 02 02 02 02 03 03 03 03
+1920: 01 01 01 01 02 02 02 02 02 02 02 02 02 03 03 03
+1930: 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02
+1940: 01 01 01 01 01 02 02 02 02 02 03 03 03 02 03 03
+1950: 01 01 01 01 01 02 02 02 02 02 03 03 03 02 03 03
+1960: 01 01 01 01 01 01 02 02 02 02 03 03 02 02 02 03
+1970: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02
+1980: 01 01 01 01 02 02 02 01 02 02 02 03 03 03 02 02
+1990: 01 01 01 01 02 02 02 01 02 02 02 03 03 03 03 02
+19a0: 01 01 01 01 01 02 01 01 01 01 02 03 03 03 03 02
+19b0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02
+19c0: 01 01 01 01 01 02 02 02 02 01 02 03 03 03 03 03
+19d0: 01 01 01 01 02 02 02 02 02 01 02 03 03 03 03 03
+19e0: 01 01 01 01 02 02 02 02 01 01 02 03 03 03 03 03
+19f0: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02
+1a00: 03 03 02 02 01 02 02 02 02 02 02 01 01 02 01 01
+1a10: 03 03 03 02 02 02 02 02 02 02 02 01 02 02 02 01
+1a20: 03 03 03 02 02 02 02 02 02 02 01 01 01 02 02 02
+1a30: 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01
+1a40: 03 03 03 03 01 01 02 02 02 02 02 02 02 01 02 02
+1a50: 03 03 03 03 02 01 02 02 02 02 02 02 02 01 02 02
+1a60: 03 03 03 03 03 01 02 02 02 02 02 02 01 01 01 02
+1a70: 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01
+1a80: 02 03 03 03 03 03 02 01 02 02 02 02 02 02 01 01
+1a90: 03 03 03 03 03 03 03 02 02 02 02 02 02 02 02 01
+1aa0: 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 02
+1ab0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1ac0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03
+1ad0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+1ae0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03
+1af0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1b00: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1b10: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1b20: 02 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02
+1b30: 01 01 01 01 01 01 01 01 02 02 02 02 01 01 01 01
+1b40: 02 02 02 02 01 01 02 02 02 02 02 02 02 01 02 02
+1b50: 02 02 02 02 02 01 02 02 02 02 02 02 02 01 02 02
+1b60: 02 02 02 02 02 01 02 02 02 02 02 02 01 01 01 02
+1b70: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+1b80: 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01 01
+1b90: 02 02 02 02 02 02 02 01 02 02 02 02 02 02 02 01
+1ba0: 03 03 02 02 02 02 01 01 01 01 02 02 02 02 02 01
+1bb0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1bc0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03
+1bd0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+1be0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03
+1bf0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1c00: 01 01 01 01 01 02 02 02 02 02 02 02 02 03 03 03
+1c10: 02 02 02 01 02 02 02 02 02 02 02 02 03 03 03 03
+1c20: 02 02 02 01 02 02 02 02 02 02 01 02 02 03 03 03
+1c30: 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02
+1c40: 02 02 02 02 01 01 02 02 02 02 02 03 03 02 03 03
+1c50: 02 02 02 02 02 01 02 02 02 02 02 03 03 02 03 03
+1c60: 02 02 02 02 02 01 02 02 02 02 02 03 02 02 02 03
+1c70: 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02
+1c80: 01 02 02 02 02 02 02 01 02 02 03 03 03 03 02 02
+1c90: 02 02 02 02 02 02 02 01 02 03 03 03 03 03 03 02
+1ca0: 02 02 02 02 02 02 01 02 02 02 03 03 03 03 03 02
+1cb0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1cc0: 02 02 02 03 03 03 03 03 03 02 03 03 03 03 03 03
+1cd0: 03 02 03 03 03 03 03 03 03 02 03 03 03 03 03 03
+1ce0: 03 02 03 03 03 03 03 03 02 02 02 03 03 03 03 03
+1cf0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
+1d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1d10: 00 00 01 01 01 01 01 00 00 00 01 01 01 00 00 00
+1d20: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00
+1d30: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00
+1d40: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00
+1d50: 00 00 00 00 01 00 00 00 00 01 00 00 00 01 00 00
+1d60: 00 00 00 00 01 00 00 00 00 00 01 01 01 00 00 00
+1d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1d80: 00 00 01 01 01 01 00 00 00 00 01 01 01 00 00 00
+1d90: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00
+1da0: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00
+1db0: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00
+1dc0: 00 00 01 00 00 00 01 00 00 01 00 00 00 01 00 00
+1dd0: 00 00 01 01 01 01 00 00 00 00 01 01 01 00 00 00
+1de0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1df0: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 00
+1e00: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+1e10: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+1e20: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00
+1e30: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00
+1e40: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00
+1e50: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00
+1e60: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00
+1e70: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+1e80: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+1e90: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+1ea0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1eb0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+1ec0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+1ed0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+1ee0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+1ef0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+1f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1f10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1f20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1f30: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00
+1f40: 00 00 00 00 00 01 00 00 00 00 01 00 00 00 00 00
+1f50: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00
+1f60: 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00
+1f70: 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00
+1f80: 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00
+1f90: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00
+1fa0: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
+1fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+1fe0: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
+1ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
diff --git a/src/stm32/setup.c b/src/stm32/setup.c
index 2c3552b..2102347 100644
--- a/src/stm32/setup.c
+++ b/src/stm32/setup.c
@@ -8,6 +8,10 @@
#include "main.h"
#include "setup.h"
#include "ppu/ppu.h"
+#include "tilemap.h"
+
+// hex(0x0803_ffff - 0xd000 + 1) (stm32f091rc rm0091 table 5, flash memory organization)
+uint32_t* g_hh_tilemap_rom = 0x08033000;
UART_HandleTypeDef huart2 = {
.Instance = USART2,
diff --git a/src/tilemap.h b/src/tilemap.h
new file mode 100644
index 0000000..2f8b709
--- /dev/null
+++ b/src/tilemap.h
@@ -0,0 +1,7 @@
+#pragma once
+#include <stdint.h>
+
+#include "static/tilemap.h"
+
+extern uint32_t* g_hh_tilemap_rom;
+