aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorUnavailableDev <ggwildplay@gmail.com>2023-04-03 10:09:40 +0200
committerUnavailableDev <ggwildplay@gmail.com>2023-04-03 10:09:40 +0200
commit05504df10934cac60b774fb10e86593ec3897510 (patch)
tree89a418bb7477904f394e460d5e661c3047117030 /src
parent54c3e1139e3e0e328f7ce3e8a2a61b0bf530a772 (diff)
parent0a014f39c375c0cf28de70ebaab6cb0a5266f3c2 (diff)
Merge branch 'dev' of https://github.com/UnavailableDev/avans-arcade into dev
Diffstat (limited to 'src')
-rw-r--r--src/.gitignore3
-rw-r--r--src/demo.c215
-rw-r--r--src/engine/TODO/combat.h (renamed from src/stm32/TODO/hh_combat.h)0
-rw-r--r--src/engine/bullet.c65
-rw-r--r--src/engine/bullet.h17
-rw-r--r--src/engine/camera.c38
-rw-r--r--src/engine/camera.h6
-rw-r--r--src/engine/draw_screen.c129
-rw-r--r--src/engine/draw_screen.h34
-rw-r--r--src/engine/engine.c4
-rw-r--r--src/engine/entity.c127
-rw-r--r--src/engine/entity.h82
-rw-r--r--src/engine/level.h5
-rw-r--r--src/engine/level_const.c37
-rw-r--r--src/engine/level_const.h31
-rw-r--r--src/engine/maths.c19
-rw-r--r--src/engine/maths.h22
-rw-r--r--src/engine/player_controller.c252
-rw-r--r--src/engine/player_controller.h7
-rw-r--r--src/engine/sprite_controller.c24
-rw-r--r--src/engine/sprite_controller.h118
-rw-r--r--src/engine/title_screen.c93
-rw-r--r--src/engine/title_screen.h3
-rw-r--r--src/entity.h1
-rw-r--r--src/game_loop/game_over.c28
-rw-r--r--src/game_loop/game_over.h18
-rw-r--r--src/game_loop/gameplay.c47
-rw-r--r--src/game_loop/gameplay.h17
-rw-r--r--src/game_loop/shop.c30
-rw-r--r--src/game_loop/shop.h18
-rw-r--r--src/game_loop/starting_screen.c32
-rw-r--r--src/game_loop/starting_screen.h14
-rw-r--r--src/input.h1
-rw-r--r--src/makefile16
-rw-r--r--src/ppusim/input.c2
-rw-r--r--src/ppusim/sim.c30
-rw-r--r--src/ppusim/sim.h3
-rw-r--r--src/static/background/shop.hex331
-rw-r--r--src/static/background/shop_ext.hex459
-rw-r--r--src/static/background/tilemap.hex514
-rw-r--r--src/static/background/title_screen_icon.hex102
-rw-r--r--src/static/foreground/slime.hex24
-rw-r--r--src/static/foreground/title_screen_letteres_large.hex230
-rw-r--r--src/stm32/TODO/hh_draw_screen.h1
-rw-r--r--src/stm32/TODO/hh_entity.c41
-rw-r--r--src/stm32/TODO/hh_entity.h24
-rw-r--r--src/stm32/TODO/hh_level.h1
-rw-r--r--src/stm32/TODO/hh_rand.h1
-rw-r--r--src/stm32/TODO/maths.c10
-rw-r--r--src/stm32/TODO/maths.h16
-rw-r--r--src/stm32/TODO/player_controller.h4
-rw-r--r--src/stm32/TODO/sprite_controller.h6
-rw-r--r--src/stm32/main.c3
53 files changed, 3051 insertions, 304 deletions
diff --git a/src/.gitignore b/src/.gitignore
index d8325cf..e3d1207 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -3,4 +3,5 @@ main.elf
main.bin
main
main.exe
-static/
+static/*.bin
+
diff --git a/src/demo.c b/src/demo.c
index b9bba17..4fa1be2 100644
--- a/src/demo.c
+++ b/src/demo.c
@@ -1,26 +1,26 @@
#include <math.h>
#include "demo.h"
-#include "entity.h"
#include "input.h"
+#include "entity.h"
#include "ppu/ppu.h"
-#define HH_DEMO_BALL_COUNT 1
-hh_s_ppu_loc_fam_entry g_hh_demo_balls[HH_DEMO_BALL_COUNT];
+#include "engine/maths.h"
+#include "engine/camera.h"
+#include "engine/entity.h"
+#include "engine/draw_screen.h"
+#include "engine/player_controller.h"
+#include "engine/sprite_controller.h"
+#include "engine/level_const.h"
+
+#include "game_loop/starting_screen.h"
+#include "game_loop/gameplay.h"
+#include "game_loop/shop.h"
-hh_s_entity_player g_hh_player_1 = {
- .pos_x = 31000, // 0b0000 0001 0011 0110
- .pos_y = 21000,
- .radius = 8,
- .speed = 1,
- .direction_x = 1,
- .rotation = 8,
- .in_air = false,
-};
-void hh_player_movement();
+hh_g_all_levels hh_game;
-uint16_t g_hh_pos_x; // 0b0000 0001 0011 0110
+uint16_t g_hh_pos_x = 1000; // 0b0000 0001 0011 0110
uint16_t g_hh_pos_y;
uint8_t g_hh_left = 0;
uint8_t g_hh_right = 0;
@@ -29,150 +29,69 @@ uint8_t g_hh_down = 0;
uint8_t g_hh_pos_x_bit[2];
uint8_t g_hh_pos_y_bit[2];
uint8_t g_hh_data_send[3];
-int g_hh_tile_x;
+int g_hh_tile_size = 8;
int g_hh_tile_y;
+typedef struct {
+ vec2 pos;
+ uint8_t idx;
+}hh_s_tiles;
+
+
+hh_e_game_state hh_game_states;
+ hh_entity hh_g_player, hh_g_player_new;
void hh_demo_setup() {
- // load sprites
- hh_ppu_update_sprite(0, HH_DBG_SPRITE_BALL);
- hh_ppu_update_sprite(1, HH_DBG_SPRITE_CHECKERBOARD);
-
- // background pattern
- hh_ppu_update_color(0, 1, (hh_ppu_rgb_color_t){0x4, 0x4, 0x4});
- for (unsigned i = 0; i < HH_PPU_BG_CANVAS_TILES_H * HH_PPU_BG_CANVAS_TILES_V; i++) {
- hh_ppu_update_background(i, (hh_s_ppu_loc_bam_entry){
- .horizontal_flip = false,
- .vertical_flip = false,
- .palette_index = 0,
- .tilemap_index = 1,
- });
- }
- // cool colors
- hh_ppu_update_color(1, 1, (hh_ppu_rgb_color_t){0xf, 0x0, 0xf});
- hh_ppu_update_color(2, 1, (hh_ppu_rgb_color_t){0xf, 0xf, 0xf});
- hh_ppu_update_color(3, 1, (hh_ppu_rgb_color_t){0xf, 0x0, 0x0});
- hh_ppu_update_color(4, 1, (hh_ppu_rgb_color_t){0x0, 0xf, 0xf});
- hh_ppu_update_color(5, 1, (hh_ppu_rgb_color_t){0x0, 0x0, 0xf});
-
- // balls
- for (unsigned i = 0; i < HH_DEMO_BALL_COUNT; i++) {
- g_hh_demo_balls[i].horizontal_flip = false;
- g_hh_demo_balls[i].vertical_flip = false;
- g_hh_demo_balls[i].palette_index = i + 1;
- g_hh_demo_balls[i].tilemap_index = 0;
- }
+ hh_setup_palettes();
+ hh_game = hh_init_game_levels();
}
void hh_demo_loop(unsigned long frame) {
- hh_player_movement();
-
- // adjust map size
- g_hh_pos_x = g_hh_player_1.pos_x / 100;
- g_hh_pos_y = g_hh_player_1.pos_y / 100;
-
- // input testing (no hitbox stuff)
- // pos_x += (-1 * g_hh_controller_p1.dpad_left) + (1 * g_hh_controller_p1.dpad_right); // -1 = L || 1 == R
- // pos_y += (-1 * g_hh_controller_p1.dpad_up) + (1 * g_hh_controller_p1.dpad_down); // -1 = D || 1 == U
-
- // update player sprite on ppu
- g_hh_demo_balls[0].position_x = g_hh_pos_x;
- g_hh_demo_balls[0].position_y = g_hh_pos_y;
- hh_ppu_update_foreground(0, g_hh_demo_balls[0]);
-
- // set background pattern position
- hh_ppu_update_aux((hh_s_ppu_loc_aux){
- .bg_shift_x = (frame / 2) % HH_PPU_SPRITE_WIDTH,
- .bg_shift_y = (frame / 8) % HH_PPU_SPRITE_HEIGHT,
- .fg_fetch = 0,
- .sysreset = 0,
- });
+
+
+ switch (hh_game_states)
+ {
+ case hh_e_state_starting_screen:
+ bool ret = hh_show_starting_screen();
+ if(ret){
+ hh_game_states = hh_e_state_shop;
+ }
+ break;
+ case hh_e_state_shop:
+ hh_shop(&hh_game_states);
+ break;
+ case hh_e_state_gameplay:
+ hh_gameplay(hh_game, &hh_game_states);
+ break;
+ case hh_e_state_game_over:
+ // todo:
+ // function: show game over screen
+ // function: after time goto high score
+ break;
+ case hh_e_state_high_score:
+ // todo:
+ // fucntion: show all previously scored points
+ // function: button pressed goto starting screen
+ break;
+ default:
+ hh_game_states = hh_e_state_starting_screen;
+ break;
+ }
}
-// void sendData(uint8_t address, uint16_t data) {
-// uint8_t bitData[3];
-// bitData[2] = data & 0xff;
-// bitData[1] = (data >> 8);
-// bitData[0] = address; // first byte is address
+// void send_data(uint8_t address, uint16_t data) {
+// uint8_t bit_data[3];
+// bit_data[2] = data & 0xff;
+// bit_data[1] = (data >> 8);
+// bit_data[0] = address; // first byte is address
//
-// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
-// HAL_SPI_Transmit(&hspi1, bitData, 3, 100); //2*8 bit data
-// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
+// hal_gpio_write_pin(gpioa, gpio_pin_9, gpio_pin_reset);
+// hal_spi_transmit(&hspi1, bit_data, 3, 100); //2*8 bit data
+// hal_gpio_write_pin(gpioa, gpio_pin_9, gpio_pin_set);
// }
-void hh_player_movement() {
- int8_t directionX = (-1 * g_hh_controller_p1.dpad_left) + (1 * g_hh_controller_p1.dpad_right); // -1 = L || 1 == R
- int8_t directionY = (-1 * g_hh_controller_p1.dpad_down) + (1 * g_hh_controller_p1.dpad_up); // -1 = D || 1 == U
-
- uint8_t i, j;
- uint8_t rotation = 0; // 0-7
-
- // rotation calc
- for (i = -1; i < 2; i++) {
- for (j = -1; j < 2; j++) {
- if (directionX == i) {
- if (directionY == j) {
- if (i != 0 && j != 0) // dont update when player idle
- {
- g_hh_player_1.rotation = rotation;
- }
- }
- }
- rotation++;
- }
- }
- // direction calc
- if (directionX != 0) // update direction if player is not idle
- {
- g_hh_player_1.direction_x = directionX;
- }
- // collision map x-axis
-
- // tile calc including radius and direction for background coliision
-
- uint16_t tileColX;
- uint16_t tileColY = (g_hh_player_1.pos_y / 100) / 16;
- ;
-
- // remaining space between grid and exact
- uint8_t modTileX;
- uint8_t modTileY;
-
- if (g_hh_player_1.in_air == false && directionX != 0) {
- if (directionX == 1) {
- tileColX = ((g_hh_player_1.pos_x / 100) + g_hh_player_1.radius) / 20;
- modTileX = (g_hh_player_1.pos_x + (100 * g_hh_player_1.radius)) % 2000;
- } else if (directionX == -1) {
- tileColX = ((g_hh_player_1.pos_x / 100) - g_hh_player_1.radius) / 20;
- modTileX = (g_hh_player_1.pos_x - (100 * g_hh_player_1.radius)) % 2000;
- }
-
- if (HH_DEMO_HITBOX_TILEMAP[tileColY][tileColX + directionX] != 1) {
- g_hh_player_1.pos_x = g_hh_player_1.pos_x + (directionX * g_hh_player_1.speed); // NEW x set
- }
-
- else if (HH_DEMO_HITBOX_TILEMAP[tileColY][tileColX + directionX] == 1) {
- if (modTileX < g_hh_player_1.speed) {
- g_hh_player_1.pos_x = g_hh_player_1.pos_x + (directionX * modTileX); // NEW x set
- } else {
- g_hh_player_1.pos_x = g_hh_player_1.pos_x + (directionX * g_hh_player_1.speed); // NEW x set
- }
- }
-
- } else // if in air different all borders have to be checked
- {
- }
- // collision map floor (y-axis) (falling)
- // if falling no jump press (implement)
- /*
- tileColY = (( g_hh_player_1.pos_y / 100) + g_hh_player_1.radius) / 16; //bottom of player box
- modTileY = 1;
- if(HH_DEMO_HITBOX_TILEMAP[tileColY+1][tileColX] != 1) //rework after jumping
- {
- g_hh_player_1.pos_y = g_hh_player_1.pos_y + 5 ;// NEW y set //makew var gravity
- //playerStat = falling; //for later use of graphics/sound
- }
- */
- // else if(HH_DEMO_HITBOX_TILEMAP[])
-}
+
+
+
+
diff --git a/src/stm32/TODO/hh_combat.h b/src/engine/TODO/combat.h
index 16c41f5..16c41f5 100644
--- a/src/stm32/TODO/hh_combat.h
+++ b/src/engine/TODO/combat.h
diff --git a/src/engine/bullet.c b/src/engine/bullet.c
index 5aa9e51..e6ca6df 100644
--- a/src/engine/bullet.c
+++ b/src/engine/bullet.c
@@ -1,44 +1,35 @@
#include "bullet.h"
-#include "engine/sprite_controller.h"
-void shootBullet(vec2 playerPos, Bullet* bullet){
- // Set bullet's x and y coordinates to player's coordinates
- bullet->x = playerPos.x;
- bullet->y = playerPos.y;
- // Set bullet's velocity to a fixed value
- bullet->velocity = 1;
- // Set bullet's status to active
- bullet->isActive = true;
-}
-void updateBullet(Bullet* bullet, int deltaTime){
- // Only update bullet if it is active
- static int latestLocationBullet = 0;
- if (bullet->isActive) {
- // Move bullet based on velocity and deltaTime
- bullet->x += bullet->velocity * deltaTime;
- drawBullet(bullet);
- // Check if bullet has moved 16 pixels
- if (bullet->x - latestLocationBullet > 32) {
- // Set bullet's status to inactive
- bullet->isActive = false;
- drawBullet(&(Bullet){.x = -16,.y = -16. });
- }
- }
- else{
- latestLocationBullet = bullet->x;
- }
+
+// TODO: use hh_entity as bullet struct
+void hh_shoot_bullet(vec2 player, vec_cor cam_pos, hh_entity* bullet){
+ vec2 temp;
+ if(g_hh_controller_p1.button_secondary){
+ if(bullet->is_grounded){
+ bullet->is_grounded=false;
+ bullet->pos = player;
+ }
+ }
+ else{
+ if(!bullet->is_grounded){
+ hh_update_bullet(bullet , cam_pos);
+ hh_draw_bullet(*bullet);
+ }
+ }
+
+
}
-void drawBullet(Bullet* bullet){
+void hh_update_bullet(hh_entity* bullet, vec_cor cam_pos){
+ bullet->pos.x += 1;
- hh_ppu_update_foreground(10, (hh_s_ppu_loc_fam_entry)
- {
- .position_x = bullet->x,
- .position_y = bullet->y,
- .horizontal_flip = false,
- .vertical_flip = false,
- .palette_index = 7,
- .tilemap_index = 84, // change tilemap to the correct foreground index;
- });
+ // update bullet sprite on ppu
+ bullet->render.fam.position_x = (bullet->pos.x-cam_pos.x);
+ bullet->render.fam.position_y = (bullet->pos.y-cam_pos.y);
+
+}
+void hh_draw_bullet(hh_entity bullet){
+ hh_s_ppu_loc_fam_entry temp = bullet.render.fam;
+ hh_ppu_update_foreground(10,temp);
}
diff --git a/src/engine/bullet.h b/src/engine/bullet.h
index ad67d84..5f07b2e 100644
--- a/src/engine/bullet.h
+++ b/src/engine/bullet.h
@@ -1,16 +1,11 @@
#pragma once
#include "player_controller.h"
+#include "engine/sprite_controller.h"
+#include "input.h"
-typedef struct {
- int x;
- int y;
- int velocity;
- int isActive;
- int hit;
-} Bullet;
+void hh_shoot_bullet(vec2 playerPos, vec_cor cam_pos, hh_entity*);
-//Bullet* createBullet(float x, float y, float velocity, float direction);
-void shootBullet(vec2 playerPos, Bullet* bullet);
-void updateBullet(Bullet* bullet, int deltaTime);
-void drawBullet(Bullet* bullet);
+void hh_update_bullet(hh_entity* , vec_cor );
+
+void hh_draw_bullet(hh_entity);
diff --git a/src/engine/camera.c b/src/engine/camera.c
new file mode 100644
index 0000000..6898430
--- /dev/null
+++ b/src/engine/camera.c
@@ -0,0 +1,38 @@
+#include "engine/camera.h"
+
+#include "ppu/consts.h"
+
+
+vec_cor hh_update_camera(vec_cen new, vec2 min, vec2 max){
+ //TODO: change floating point math to fix point math
+ //TODO: remove magic number at y camera offset
+
+ // new = vec_cen2cor(new,(vec2){.x=max.x/2,.y=max.y/2});
+ new = vec_cen2cor((vec2){.x=new.x+(HH_PPU_SPRITE_WIDTH),.y=new.y+(HH_PPU_SPRITE_HEIGHT*8)},(vec2){.x=(max.x - min.x)/2,.y=(max.y - min.y)/2});
+ // new = vec_cen2cor((vec2){.x=new.x+(HH_PPU_SPRITE_WIDTH),.y=new.y+(HH_PPU_SPRITE_HEIGHT*8)},(vec2){.x=max.x/2,.y=max.y/2});
+
+ // new.x = new.x << HH_MATH_FIXED_POINT;
+ // new.y = new.y << HH_MATH_FIXED_POINT;
+ static vec_cor old;
+ // old.x = old.x << HH_MATH_FIXED_POINT;
+ // old.y = old.y << HH_MATH_FIXED_POINT;
+
+ // int16_t some = 0;
+ // some = some <<= HH_MATH_FIXED_POINT-1;
+
+ // Camera smoothing
+ new.x = (int)((float)new.x*0.1f + (float)old.x*0.9f);
+ new.y = (int)((float)new.y*0.1f + (float)old.y*0.9f);
+
+ // old.x = old.x >> HH_MATH_FIXED_POINT;
+ // old.y = old.y >> HH_MATH_FIXED_POINT;
+
+
+ old.x = CLAMP(new.x,min.x,max.x);
+ old.y = CLAMP(new.y,min.y,max.y);
+
+ //printf("camera new %d min %d max %d\n",new.y,min.y,max.y);
+ return old;
+}
+
+
diff --git a/src/engine/camera.h b/src/engine/camera.h
new file mode 100644
index 0000000..b3ffb52
--- /dev/null
+++ b/src/engine/camera.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "engine/maths.h"
+
+vec_cor hh_update_camera(vec_cor new, vec2 min, vec2 max);
+
diff --git a/src/engine/draw_screen.c b/src/engine/draw_screen.c
new file mode 100644
index 0000000..d1d7a04
--- /dev/null
+++ b/src/engine/draw_screen.c
@@ -0,0 +1,129 @@
+#include "engine/draw_screen.h"
+
+hh_level_entity level;
+uint64_t offsetY=0;
+uint64_t offsetX=0;
+uint8_t hh_world_to_tile(vec2 pos){
+
+ int index = (((pos.y/HH_PPU_SPRITE_HEIGHT)*level.size.x) + (pos.x/HH_PPU_SPRITE_WIDTH));//TODO: remove magic number(s)
+ int tile= level.place[index];
+ return tile;
+}
+
+void hh_update_screen(vec2 view, vec2 player){
+ int current_tile_y = view.y / HH_PPU_SPRITE_HEIGHT;
+ int current_tile_x = view.x / HH_PPU_SPRITE_WIDTH;
+ int offset_py = view.y - (offsetY / 40 * HH_PPU_SPRITE_HEIGHT);
+ int offset_px = view.x - offsetX * HH_PPU_SPRITE_WIDTH;
+ static int prev_ofsset = 0;
+
+ int size = MIN(HH_PPU_BG_CANVAS_TILES_H,level.size.x) * MIN(HH_PPU_BG_CANVAS_TILES_V,level.size.y);
+ if( (offset_py == 0 || offset_py > 230) && level.size.y > level.size.x && prev_ofsset != offset_py){
+ if(offset_py==0){
+ offsetY = (current_tile_y-14) * level.size.x;
+ }
+ else{
+ offsetY = current_tile_y * level.size.x;
+ }
+
+ // Update the background screen
+ for (int BAM_index = 0; BAM_index < size; BAM_index++) {
+ hh_ppu_update_background(BAM_index, (hh_s_ppu_loc_bam_entry){
+ .horizontal_flip = false,
+ .vertical_flip = false,
+ .palette_index = hh_get_palette(level.place[offsetY + BAM_index]),
+ .tilemap_index = level.place[offsetY + BAM_index],
+ });
+ }
+ prev_ofsset = offset_py;
+ }
+ else if ((offset_px == 0 || offset_px > 310) && level.size.x > level.size.y && prev_ofsset != offset_px)
+ {
+ if(offset_px==0){
+ offsetX = current_tile_x - 14;
+ }
+ else{
+ offsetX = current_tile_x;
+ }
+ // Update the background screen
+ for (int BAM_index = 0; BAM_index < size; BAM_index++) {
+ int var = (BAM_index / HH_PPU_BG_CANVAS_TILES_H) * level.size.x + MIN((BAM_index % HH_PPU_BG_CANVAS_TILES_H + offsetX),level.size.x);
+ hh_ppu_update_background(BAM_index, (hh_s_ppu_loc_bam_entry){
+ .horizontal_flip = false,
+ .vertical_flip = false,
+ .palette_index = hh_get_palette(level.place[var]),
+ .tilemap_index = level.place[var],
+ });
+ }
+ }
+
+ prev_ofsset = offset_px;
+
+}
+void hh_setup_screen(hh_level_entity currentlevel){
+ hh_clear_screen();
+ hh_clear_sprite();
+ level = currentlevel;
+ offsetY=0;
+ offsetX=0;
+ int size = MIN(HH_PPU_BG_CANVAS_TILES_H, level.size.x) * MIN(HH_PPU_BG_CANVAS_TILES_V, level.size.y);
+ for (int BAM_index = 0; BAM_index < size; BAM_index++) {
+ int var = (BAM_index / HH_PPU_BG_CANVAS_TILES_H) * level.size.x + BAM_index % HH_PPU_BG_CANVAS_TILES_H;
+ hh_ppu_update_background(BAM_index, (hh_s_ppu_loc_bam_entry){
+ .horizontal_flip = false,
+ .vertical_flip = false,
+ .palette_index = hh_get_palette(currentlevel.place[var]),
+ .tilemap_index = currentlevel.place[var],
+ });
+ }
+}
+vec_cor hh_draw_screen(vec2 player) {
+ static vec_cor previousViewport = {0, 0};
+ int offset_py = offsetY / 40 * HH_PPU_SPRITE_HEIGHT;
+
+ int offset_px = (offsetX * HH_PPU_SPRITE_WIDTH) ;
+ vec_cor viewport = hh_update_camera(player,(vec2){.x = offset_px, .y = offset_py},(vec2){.x = HH_PPU_SCREEN_WIDTH + offset_px, .y = 480 + offset_py});//TODO: remove magic number(s)
+ viewport.x = CLAMP(viewport.x, 0, level.size.x * HH_PPU_SPRITE_WIDTH - HH_PPU_SCREEN_WIDTH);
+ viewport.y = CLAMP(viewport.y, 0, level.size.y * HH_PPU_SPRITE_HEIGHT - HH_PPU_SCREEN_HEIGHT);
+
+ hh_update_screen((vec2){.y=viewport.y,.x=viewport.x},player);
+ if (viewport.x == previousViewport.x && viewport.y == previousViewport.y){}
+ else{
+ hh_ppu_update_aux((hh_s_ppu_loc_aux){
+ .bg_shift_x = viewport.x - offset_px,
+ .bg_shift_y = viewport.y - offset_py,
+ .fg_fetch = 0,
+ .sysreset = 0,
+ });
+ previousViewport = viewport;
+ }
+
+ return viewport;
+}
+
+void hh_clear_screen(){
+ // (HH_PPU_SCREEN_HEIGHT*HH_PPU_SCREEN_WIDTH)/(HH_PPU_SPRITE_HEIGHT*HH_PPU_SPRITE_WIDTH)
+ for (int i = 0; i < HH_PPU_BG_CANVAS_TILES_H*HH_PPU_BG_CANVAS_TILES_V; i++) {
+ hh_s_ppu_loc_bam_entry temp = {
+ .vertical_flip=false,.horizontal_flip = false,
+ .palette_index = 3,.tilemap_index = 0
+ };
+ hh_ppu_update_background(i,temp);
+ hh_ppu_update_color(3,0,(hh_ppu_rgb_color_t){0x0,0x0,0x0});
+ }
+ hh_ppu_update_aux((hh_s_ppu_loc_aux){
+ .bg_shift_x = 0,
+ .bg_shift_y = 0,
+ .fg_fetch = 0,
+ .sysreset = 0,
+ });
+}
+
+void hh_clear_sprite(){
+ for (int i = 0; i < HH_PPU_FG_SPRITE_COUNT; i++) {
+ hh_ppu_update_foreground(i,(hh_s_ppu_loc_fam_entry){
+ .position_x = -HH_PPU_SPRITE_WIDTH,
+ .position_y = -HH_PPU_SPRITE_HEIGHT,
+ });
+ }
+}
diff --git a/src/engine/draw_screen.h b/src/engine/draw_screen.h
new file mode 100644
index 0000000..9130842
--- /dev/null
+++ b/src/engine/draw_screen.h
@@ -0,0 +1,34 @@
+#pragma once
+
+
+// every function call for drawing the screen goes here.
+#include "engine/maths.h"
+#include "ppu/ppu.h"
+#include "engine/level_const.h"
+#include "engine/sprite_controller.h"
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include "engine/camera.h"
+
+#define hh_max_x_size 40
+#define hh_max_y_size 30
+
+/** @brief return a single tile from world binary */
+uint8_t hh_world_to_tile(vec2 pos);
+
+/** @brief shift to level if viewport changed position */
+vec_cor hh_draw_screen(vec2 player);
+
+/** @brief send data to BAM memory from binary level */
+void hh_setup_screen(hh_level_entity currentlevel);
+/** @brief updates screen based on view and maybe player position if it needs to turn back*/
+void hh_update_screen(vec2 view, vec2 );
+
+/** @brief send black screen to background memory */
+void hh_clear_screen();
+
+/** @brief clears all sprite data */
+void hh_clear_sprite();
+/** @brief send data to BAM memory from binary from shop */
+void hh_setup_Shop();
diff --git a/src/engine/engine.c b/src/engine/engine.c
new file mode 100644
index 0000000..799ee7c
--- /dev/null
+++ b/src/engine/engine.c
@@ -0,0 +1,4 @@
+#include "engine/draw_screen.h"
+#include "engine/level.h"
+#include "engine/maths.h"
+#include "engine/sprite_controller.h"
diff --git a/src/engine/entity.c b/src/engine/entity.c
new file mode 100644
index 0000000..535759d
--- /dev/null
+++ b/src/engine/entity.c
@@ -0,0 +1,127 @@
+#include <stdbool.h>
+
+#include "engine/entity.h"
+#include "engine/maths.h"
+
+/*
+ PLAYER: (pos on X)
+ ,___,
+ | |
+ | X |
+ |___|
+
+*/
+
+bool hh_collision(vec_cor pos1, vec2 pos2){
+ if (pos2.x == CLAMP(pos2.x, pos1.x, pos1.x+16)){// hit x
+ return true;
+ }
+
+ if (pos2.y == CLAMP(pos2.y, pos1.y, pos1.y+16)){// hit y
+ return true;
+ }
+ return false;
+}
+
+void hh_solve_collision(vec2 pos_environment, hh_entity* entity){
+ if (!hh_collision(pos_environment,entity->pos))
+ return;
+
+ printf("BONK!/n");
+ // if (entity->vel.y > 0){
+ // entity->pos.y = MAX(entity->pos.y,pos_environment.y);
+ // entity->vel.y = 0;
+ // } else {
+ // entity->pos.y = MIN(entity->pos.y,pos_environment.y);
+ // entity->vel.y = 0;
+ // }
+ // if (entity->vel.x <= 0){
+ // entity->pos.x = MIN(entity->pos.x,pos_environment.x-16);
+ // entity->vel.x = 0;
+ // } else {
+ // entity->pos.x = MAX(entity->pos.x,pos_environment.x+16);
+ // entity->vel.x = 0;
+ // }
+}
+hh_entity hh_background_collision (hh_entity temp_old_entity,hh_entity temp_new_entity){
+
+ temp_old_entity.is_grounded = false;
+
+// solves x collision
+ if (temp_old_entity.vel.x <= 0) {
+ if (hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 0, .y=temp_old_entity.pos.y + 0})) ||
+ hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 0, .y=temp_old_entity.pos.y + 15}))) {
+ temp_new_entity.pos.x = (temp_new_entity.pos.x & ~15) + 16,
+ temp_new_entity.vel.x = 0;
+ }
+ } else {
+ if (hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 16, .y=temp_old_entity.pos.y + 0})) ||
+ hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 16, .y=temp_old_entity.pos.y + 15}))) {
+ temp_new_entity.pos.x = temp_new_entity.pos.x & ~15, // <-- magic comma, NOT TOUCHY
+ temp_new_entity.vel.x = 0;
+ }
+ }
+
+ //solves y collision
+ if (temp_old_entity.vel.y <= 0) {
+ if (hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 0, .y=temp_new_entity.pos.y + 0})) ||
+ hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 15, .y=temp_new_entity.pos.y + 0}))) {
+ temp_new_entity.pos.y = (temp_new_entity.pos.y & ~15) + 16,
+ temp_new_entity.vel.y = 0;
+ }
+ } else {
+ if (hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 0, .y=temp_new_entity.pos.y + 15})) ||
+ hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 15, .y=temp_new_entity.pos.y + 15}))) {
+ temp_new_entity.pos.y = temp_new_entity.pos.y & ~15,
+ temp_new_entity.vel.y = 0;
+ temp_old_entity.is_grounded = true;
+ }
+ }
+ temp_old_entity.pos = temp_new_entity.pos;
+ temp_old_entity.vel = temp_new_entity.vel;
+ return temp_old_entity;
+}
+
+hh_entity hh_enemy_collision(hh_entity temp_player, hh_entity temp_enemy){
+
+ bool collide = hh_distance_circles( temp_player.pos, temp_enemy.pos, temp_player.radius, temp_enemy.radius);
+
+ if (collide == true && temp_player.is_hit == false)
+ {
+ temp_player.is_hit = true;
+ //angle = atan2( tempEntity.pos_y - tempPlayer.pos_y, tempEntity.pos_x - tempPlayer.pos_x);
+ if(temp_player.pos.x <= temp_enemy.pos.x) //player left of enemy -- creates flinch movement L or R
+ {
+ // printf("BONK-left!/n");
+ temp_player.vel.y = -5;
+ temp_player.vel.x = -8;
+ } else {
+ // printf("BONK-right!/n");
+ temp_player.vel.y = -5;
+ temp_player.vel.x = 8;
+ }
+ // ghost mode / invulnerable or other things on hit
+ // temp_player.hp--;
+
+ } else {
+ temp_player.is_hit = false;
+
+ }
+
+
+return temp_player;
+}
+
+
+bool hh_distance_circles (vec2 object_1, vec2 object_2, int radius_1, int radius_2){
+ int a_squared = (object_1.x - object_2.x) * (object_1.x - object_2.x);
+ int b_squared = (object_1.y - object_2.y) * (object_1.y - object_2.y);
+ int c_squared = a_squared + b_squared;
+ int radius = ( radius_1 + radius_2) * ( radius_1 + radius_2 );
+
+ if( c_squared <= radius ){
+ return true;
+ } else {
+ return false;
+ }
+}
diff --git a/src/engine/entity.h b/src/engine/entity.h
new file mode 100644
index 0000000..cad6ba4
--- /dev/null
+++ b/src/engine/entity.h
@@ -0,0 +1,82 @@
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdio.h>
+
+#include "ppu/types.h"
+
+#include "engine/maths.h"
+
+typedef uint8_t hh_idx_t;
+
+typedef enum {
+ fire, ice, poison
+}hh_e_damage_t;
+
+typedef struct {
+ hh_s_ppu_loc_fam_entry fam; //screen
+ hh_idx_t frame0;
+ hh_idx_t palette;
+
+}hh_s_rendering;
+
+typedef struct {
+ int8_t hp;
+ int8_t dmg;
+ hh_e_damage_t dmg_type;
+ int8_t speed_x, speed_y;
+
+} hh_s_atributes;
+
+
+typedef struct {
+ vec2 pos, vel, vec;
+ bool is_grounded;
+ bool is_hit;
+ uint8_t radius;
+ int8_t hp;
+ int8_t speed;
+ hh_s_rendering render;
+ //armor/block?
+}hh_entity;
+
+typedef struct {
+ hh_entity p;
+ hh_s_atributes atr;
+}hh_s_player;
+
+
+/// @brief detect for collision enity and eviroment
+/// @param pos1 position of environment tile to be checked
+/// @param pos2 position entity
+/// @return true if collision between enity and environment
+bool hh_collision(vec2 pos1, vec2 pos2);
+
+/// @brief solve collisions
+/// @param environment position
+/// @param entity position
+/// @return solved new entity position
+void hh_solve_collision(vec2 pos_environment, hh_entity* entity);
+
+/// @brief solve collision of entity with background tiles
+/// @param temp_old_entity old data of entity
+/// @param temp_new_entity new data of entity where it wants to go to
+/// @return updated new entity where it actually can go to
+hh_entity hh_background_collision (hh_entity temp_old_entity, hh_entity temp_new_entity);
+
+/// @brief solve collision of player with enemy
+/// @param temp_player data of player
+/// @param temp_enemy data of enemy
+/// @return updated player with new stats if hitted with enemy
+hh_entity hh_enemy_collision(hh_entity temp_player, hh_entity temp_enemy);
+
+/// @brief calculate if circles (entity) hit each other
+/// @param object_1 position of first object (entity)
+/// @param object_2 position of second object (entity)
+/// @param radius_1 radius of first object (entity)
+/// @param radius_2 radius of second object (entity)
+/// @return true if objects collids
+bool hh_distance_circles (vec2 object_1, vec2 object_2, int radius_1, int radius_2);
+
+
diff --git a/src/engine/level.h b/src/engine/level.h
new file mode 100644
index 0000000..8d610dd
--- /dev/null
+++ b/src/engine/level.h
@@ -0,0 +1,5 @@
+#pragma once
+//deal with loading/saving the correct level
+
+/** @brief */
+void hh_map_load();
diff --git a/src/engine/level_const.c b/src/engine/level_const.c
new file mode 100644
index 0000000..5ba0187
--- /dev/null
+++ b/src/engine/level_const.c
@@ -0,0 +1,37 @@
+#include "engine/level_const.h"
+
+
+hh_g_all_levels hh_init_game_levels(){
+ hh_g_all_levels levels;
+ levels.current_level=0;
+
+ levels.level[0].size.x=40;
+ levels.level[0].size.y=100;
+ levels.level[0].hh_level_completed=false;
+
+ levels.level[1].size.x=100;
+ levels.level[1].size.y=28;
+ levels.level[1].hh_level_completed=false;
+
+ FILE *fp = fopen("../test/bin/level1_test.bin", "rb");
+ fseek(fp, 0, SEEK_END);
+ int size = ftell(fp) / sizeof(int);
+ fseek(fp, (0 * sizeof(int)) + sizeof(int), SEEK_SET);
+ int* hh_game_level1 = malloc(size * sizeof(int));
+ fread(hh_game_level1, sizeof(int), size, fp);
+ fclose(fp);
+
+ FILE *lvl2 = fopen("../test/bin/level2_test.bin", "rb");
+ fseek(lvl2, 0, SEEK_END);
+ size = ftell(lvl2) / sizeof(int);
+ fseek(lvl2, (0 * sizeof(int)) + sizeof(int), SEEK_SET);
+ int* hh_game_level2 = malloc(size * sizeof(int));
+ fread(hh_game_level2, sizeof(int), size, lvl2);
+ fclose(lvl2);
+
+ levels.level[0].place = hh_game_level1;
+ levels.level[1].place = hh_game_level2;
+
+ return levels;
+}
+
diff --git a/src/engine/level_const.h b/src/engine/level_const.h
new file mode 100644
index 0000000..b86ae7b
--- /dev/null
+++ b/src/engine/level_const.h
@@ -0,0 +1,31 @@
+#pragma once
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include "engine/maths.h"
+#include "engine/entity.h"
+
+typedef enum {
+ hh_e_state_starting_screen,
+ hh_e_state_shop,
+ hh_e_state_gameplay,
+ hh_e_state_game_over,
+ hh_e_state_high_score
+} hh_e_game_state;
+//entity array met enemeies
+typedef struct {
+ vec2 size;
+ int hh_total_enemies;
+ int* place;
+ bool hh_level_completed;
+}hh_level_entity;
+
+typedef struct {
+ hh_level_entity level[2];
+ int current_level;
+
+
+}hh_g_all_levels;
+
+hh_g_all_levels hh_init_game_levels();
diff --git a/src/engine/maths.c b/src/engine/maths.c
new file mode 100644
index 0000000..475bba2
--- /dev/null
+++ b/src/engine/maths.c
@@ -0,0 +1,19 @@
+#include "engine/maths.h"
+
+vec2 vec_add(vec2 a, vec2 b){
+ return (vec2){a.x + b.x, a.y + b.y};
+}
+
+vec_cor vec_cen2cor(vec_cen in, vec2 halfDistance){
+ return (vec_cor){
+ .x = in.x - halfDistance.x,
+ .y = in.y - halfDistance.y,
+ };
+}
+
+vec_cen vec_cor2cen(vec_cor in, vec2 halfDistance){
+ return (vec_cen){
+ .x = in.x + halfDistance.x,
+ .y = in.y + halfDistance.y,
+ };
+}
diff --git a/src/engine/maths.h b/src/engine/maths.h
new file mode 100644
index 0000000..bef287e
--- /dev/null
+++ b/src/engine/maths.h
@@ -0,0 +1,22 @@
+#pragma once
+#include <stdint.h>
+// #include <math.h>
+
+typedef struct {
+ int32_t x,y;
+} vec2;
+
+typedef vec2 vec_cen;//centered
+typedef vec2 vec_cor;//left upper corner
+
+vec2 vec_add(vec2 a, vec2 b);
+
+vec_cor vec_cen2cor(vec_cen in, vec2 halfDistance);
+vec_cor vec_cor2cen(vec_cen in, vec2 halfDistance);
+
+//fixed point at decimal 7lsb (world positions in pixels (with fixed decimal point))
+#define HH_MATH_FIXED_POINT 7
+
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#define CLAMP(N,LOWER,UPPER) (MIN(MAX(LOWER, N), UPPER))
diff --git a/src/engine/player_controller.c b/src/engine/player_controller.c
new file mode 100644
index 0000000..647b00c
--- /dev/null
+++ b/src/engine/player_controller.c
@@ -0,0 +1,252 @@
+#include "ppu/types.h"
+#include "engine/camera.h"
+#include "engine/draw_screen.h"
+#include "engine/sprite_controller.h"
+#include "engine/player_controller.h"
+
+#include "input.h"
+
+#include "engine/bullet.h"
+void hh_player_actions() {
+ static Bullet bullet ={
+ .isActive=false,
+ };
+ static hh_entity player={
+ .hp = 4,
+ .speed = 6,
+ .is_grounded = false,
+ .is_hit = false,
+ .radius = 8,
+ .pos = (vec2){32,32},
+ .vel = (vec2){0,0},
+ .vec = (vec2){0,0},
+ .render = {
+ .frame0 = 80,
+ .palette = 3,
+ .fam = (hh_s_ppu_loc_fam_entry){
+ .horizontal_flip = false,
+ .vertical_flip = false,
+ .palette_index = 2,
+ .tilemap_index = 60,
+ }
+ }
+ }, player_new = {0};
+
+
+ static hh_entity enemy={
+ .hp = 4,
+ .speed = 6,
+ .is_grounded = false,
+ .is_hit = false,
+ .radius = 8,
+ .pos = (vec2){128,48},
+ .vel = (vec2){0,0},
+ .vec = (vec2){0,0},
+ .render = {
+ .frame0 = 20,
+ .palette = 7,
+ .fam = (hh_s_ppu_loc_fam_entry){
+ .horizontal_flip = false,
+ .vertical_flip = false,
+ .palette_index = 7,
+ .tilemap_index = 1,
+ }
+ }
+ };
+ player_new = player;
+ // hh_input_read();
+ static uint8_t hit = 0;
+ int8_t hit_timer = 0;
+ int8_t direction_x = (-1 * g_hh_controller_p1.dpad_left) + (1 * g_hh_controller_p1.dpad_right);
+ int8_t direction_y = (-1 * g_hh_controller_p1.dpad_up) + (1 * g_hh_controller_p1.dpad_down);
+
+ if(player.is_hit == true){
+ hit_timer = 9;
+ player.is_hit = false;
+ }
+ if(hit_timer > -10){
+ hit_timer--;
+ }
+
+ if(hit_timer <= 0){
+ if(direction_x != 0){
+ if(player.vel.x > -1 * player.speed && player.vel.x < player.speed) {
+ player.vel.x = player.vel.x + direction_x;
+ } else {
+ if (player.vel.x > 0) {
+ player.vel.x--;
+ } else if(player.vel.x < 0) {
+ player.vel.x++;
+ }
+ }
+ } else {
+ if (player.vel.x > 0) {
+ player.vel.x--;
+ } else if(player.vel.x < 0) {
+ player.vel.x++;
+ }
+ }
+
+ /* // movement Y (w-s) disable gravity to use this
+ if(direction_y != 0){
+ if(player.vel.y > -4 && player.vel.y < 4 ) {
+ player.vel.y = player.vel.y + direction_y;
+ }
+ } else {
+ if (player.vel.y > 0) {
+ player.vel.y--;
+ } else if(player.vel.y < 0) {
+ player.vel.y++;
+ }
+ }
+
+ */
+ } else {
+ if (player.vel.x > 0) {
+ player.vel.x--;
+ } else if(player.vel.x < 0) {
+ player.vel.x++;
+ }
+ player.vel.y++;
+ }
+
+
+ if (g_hh_controller_p1.button_primary && player.is_grounded == true) {//JUMP
+ player.vel.y = -10;
+ player.is_grounded = false;
+ } else if (player.vel.y < 6){
+ player.vel.y += 1; //gravity
+ }
+
+ if(g_hh_controller_p1.button_secondary==true){
+ shootBullet(player.pos,&bullet);
+ }
+ updateBullet(&bullet,5);
+
+
+
+/*
+ player.vel = (vec2){.x = (-1 * g_hh_controller_p1.dpad_left) + (1 * g_hh_controller_p1.dpad_right),
+ .y = (-1 * g_hh_controller_p1.dpad_up) + (1 * g_hh_controller_p1.dpad_down) };
+
+ player_new.vel = (vec2){
+ .x = player.vel.x,
+ .y = player.vel.y,
+ };
+*/
+
+ player_new.vel = (vec2){
+ .x = player.vel.x,
+ .y = player.vel.y,
+ };
+
+ player_new = hh_enemy_collision(player, enemy);
+
+
+ // const int8_t maa = 3;
+ // const int8_t mbb = -3;
+ // if (g_hh_controller_p1.dpad_up)
+ //
+ // if (g_hh_controller_p1.dpad_down)
+ //
+ // if (g_hh_controller_p1.dpad_left) {
+ // player.vel.x += mbb;
+ // // g_hh_demo_balls[0].horizontal_flip = true;
+ // }
+ // if (g_hh_controller_p1.dpad_right) {
+ // player.vel.x += maa;
+ // // g_hh_demo_balls[0].horizontal_flip = true;
+ // }
+ // if (g_hh_controller_p1.button_primary /*&& player.is_grounded*/) //JUMP
+ // player.vel.y += -6;
+ // // // if (g_hh_controller_p1.button_secondary)
+
+ // player.vel.y += 1; //gravity
+
+
+ //END OF VECTOR CHANGES
+ // player.vel.y = CLAMP(player.vel.y,-32,32);
+ // player.vel.x = CLAMP(player.vel.x,-32,32);
+
+ player_new.pos = (vec2){
+ .x = player.pos.x + player_new.vel.x,
+ .y = player.pos.y + player_new.vel.y,
+ };
+
+
+
+ // const uint8_t empty = 0;
+ // hh_s_tiles tiles[9];
+ // const vec2 tile_offset[9] = {
+ // (vec2){-16,-16},(vec2){0,-16},(vec2){+16,-16},
+ // (vec2){-16,0}, (vec2){0,0}, (vec2){+16,0},
+ // (vec2){-16,+16},(vec2){0,+16},(vec2){+16,+16},
+ // };
+ // for (int i = 0; i < 9; i++) {
+ // vec2 temp_pos = vec_add(player.pos, tile_offset[i]);
+ // temp_pos =(vec2){
+ // .x = temp_pos.x,
+ // .y = temp_pos.y,
+ // };
+ // hh_s_tiles tile = {
+ // .pos = temp_pos,
+ // .idx = hh_world_to_tile(temp_pos)
+ // };
+ // if(hh_colidable(tile.idx)) {
+ // tiles[i]=tile;
+ // // printf(" collidable near!");
+ // } else {
+ // tiles[i].idx = 0;
+ // }
+ // }
+ /*
+ 012
+ 345
+ 678
+ */
+ // for (int i = 0; i < 9; i++)
+ // {
+ // if (tiles[i].idx != 0){
+ // hh_solve_collision(tiles[i].pos, &player);
+ // }
+ // }
+
+ player = hh_background_collision ( player, player_new);
+
+ //player = player_new;
+
+ vec_cor cam_pos;//value in tiles
+ // cam_pos = (vec2){0,0};
+ cam_pos = hh_update_camera(player.pos,(vec2){0,0},(vec2){.x=20*16,.y=30*16});//TODO: remove magic number(s)
+ // printf("%i, %i:%i, %i\n",player.pos.x,player.pos.y,cam_pos.x,cam_pos.y);
+ hh_draw_screen(cam_pos);
+ // update player sprite on ppu
+ player.render.fam.position_x = (player.pos.x-cam_pos.x);
+ player.render.fam.position_y = (player.pos.y-cam_pos.y);
+
+ enemy.render.fam.position_x = (enemy.pos.x-cam_pos.x);
+ enemy.render.fam.position_y = (enemy.pos.y-cam_pos.y);
+
+ player.render.fam.tilemap_index = 2;//TODO: these two lines should be redundant
+ player.render.fam.palette_index = 7;
+ // hh_ppu_update_foreground(0, player.render.fam);
+
+ for (int i = 0; i < 4; i++)
+ {
+ hh_s_ppu_loc_fam_entry temp = player.render.fam;
+ temp.position_x = player.render.fam.position_x+(!(player.vel.x>0)?-1:1)*(i%2?8:-8);
+ temp.position_y = player.render.fam.position_y+(i>1?0:-16);
+ temp.tilemap_index = player.render.frame0 + i;
+ temp.palette_index = player.render.palette;
+ temp.horizontal_flip = !(player.vel.x>0);
+ hh_ppu_update_foreground(i,temp);
+ }
+
+
+
+ hh_ppu_update_foreground(4, enemy.render.fam);
+
+}
+
+
+
diff --git a/src/engine/player_controller.h b/src/engine/player_controller.h
new file mode 100644
index 0000000..400c18e
--- /dev/null
+++ b/src/engine/player_controller.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "engine/maths.h"
+#include "engine/entity.h"
+// inputs
+
+void hh_player_actions();
diff --git a/src/engine/sprite_controller.c b/src/engine/sprite_controller.c
new file mode 100644
index 0000000..b38b647
--- /dev/null
+++ b/src/engine/sprite_controller.c
@@ -0,0 +1,24 @@
+#include <stdint.h>
+
+#include "engine/sprite_controller.h"
+#include "ppu/types.h"
+#include "ppu/consts.h"
+#include "ppu/ppu.h"
+
+uint8_t hh_get_palette(uint8_t tile_idx) {
+ return hh_g_sprite_palette[tile_idx];
+}
+
+void hh_setup_palettes(){
+ //TODO: use simpler function
+ for (int idx = 0; idx < HH_PPU_PALETTE_COUNT; idx++) {
+ for (int col = 0; col < HH_PPU_PALETTE_COLOR_COUNT; col++) {
+ hh_ppu_update_color(idx,col,hh_g_palette[idx][col]);
+ }
+ }
+ // hh_ppu_update_palette_table(hh_g_palette);
+}
+
+bool hh_colidable(uint8_t tile_idx){
+ return (hh_get_palette(tile_idx) != 0);
+}
diff --git a/src/engine/sprite_controller.h b/src/engine/sprite_controller.h
new file mode 100644
index 0000000..fc6d3d3
--- /dev/null
+++ b/src/engine/sprite_controller.h
@@ -0,0 +1,118 @@
+#pragma once
+#include <stdint.h>
+
+#include "ppu/types.h"
+
+// handles sprites
+
+// Bg sprites
+
+// Fg or entity sprites
+
+//TODO: pack data inside of sprite_palette LUT
+//HH_PPU_PALETTE_COUNT
+#define HH_SPRITE_COUNT 80
+#define HH_PAL_IDX_SKY 512
+#define HH_PAL_IDX_BRICK 1
+const static uint8_t hh_g_sprite_palette[HH_SPRITE_COUNT] = {
+ //TODO: make a buffer of 16 no-collider sprites (instead of the current 1)
+ 0,1,1,1,1,1,1,1,1,1, //1+9
+ 1,1,1,1,1,1,1,1,1,1, //6+4
+ 1,1,1,1,1,1,1,1,1, //9
+ 7,7,7,2,7,7,1,2,7,
+ 7,7,7,7, //??
+
+ 7,6,6,6,6,6,6,6, //baskets
+ 7,7,7,7,7,7,7,7,7,7, //shop
+ 7,7,7,7,7, //shop
+ 6,6,6,6,6, //(hi-)score
+
+ 3,3,3,3,3,3, //title_screen icon
+ 6,6,6,6,/*6,6,6,6,6,6, //title_screen large letters
+ 6,6,6,6,*/
+ //other palettes here:
+ // [HH_PAL_IDX_SKY] = 0,
+};
+
+
+const static hh_ppu_loc_palette_table_t hh_g_palette = {
+ {//palette info here
+ {0x1,0x2,0x3},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0}},
+ {//Bricks
+ {0x1,0x2,0x3},//01
+ {0xd,0x8,0xa},//24
+ {0x0,0x0,0x1},//25
+ {0x1,0x1,0x1},//26
+ {0x1,0x1,0x2},//27
+ {0x2,0x2,0x3},//28
+ {0x3,0x4,0x5},//29
+ {0x5,0x1,0x7}},
+ {//slime
+ {0x1,0x2,0x3},
+ {0x1,0x3,0x2},
+ {0x4,0x8,0x3},
+ {0x7,0xa,0x4},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0}},
+ {//player //TODO: use one less color && update player indexed sprites
+ {0x0,0x0,0x0},
+ {0x1,0x1,0x1},
+ {0x4,0x2,0x5},
+ {0x7,0x3,0x7},
+ {0xe,0xe,0xe},
+ {0xe,0xe,0xe}, //elemental
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0}},
+ {
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0}},
+ {//elemental
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0},
+ {0x0,0x0,0x0}},
+ {//white
+ {0x1,0x2,0x3},
+ {0xf,0xf,0xf},
+ {0xf,0xf,0xf},
+ {0xf,0xf,0xf},
+ {0xf,0xf,0xf},
+ {0xf,0xf,0xf},
+ {0xf,0xf,0xf},
+ {0xf,0xf,0xf}},
+ {//Dev palette (7)
+ {0x0,0xf,0xf},
+ {0xf,0xf,0xf},
+ {0xf,0x0,0xf},
+ {0xf,0xf,0x0},
+ {0xf,0x0,0x0},
+ {0x0,0xf,0x0},
+ {0x0,0x0,0xf},
+ {0x0,0x0,0x0}}
+};
+
+void hh_setup_palettes();
+
+/** @brief return palette index that belongs to tilemap index */
+uint8_t hh_get_palette(uint8_t tile_idx);
+
+bool hh_colidable(uint8_t tile_idx);
diff --git a/src/engine/title_screen.c b/src/engine/title_screen.c
new file mode 100644
index 0000000..9c7ed48
--- /dev/null
+++ b/src/engine/title_screen.c
@@ -0,0 +1,93 @@
+#include "ppu/ppu.h"
+#include "ppu/types.h"
+#include "ppu/consts.h"
+
+
+#include "engine/draw_screen.h"
+#include "engine/entity.h"
+
+void hh_init_title_screen(){
+
+ // hh_clear_screen();
+
+ //send data
+ uint8_t idx = 0;
+ const uint8_t tilemap_offset = 59;
+ int tiles_h = HH_PPU_BG_CANVAS_TILES_H;
+ int vp_h = HH_PPU_SCREEN_WIDTH/HH_PPU_SPRITE_WIDTH; //screen_h in tiles
+ int vert_offset = tiles_h*3;
+
+ const uint8_t arr[4][4] = {
+ {0,1,1,0},
+ {2,3,3,2},
+ {4,0,0,4},
+ {5,6,6,5},
+ };
+ int val, counter =0;
+ hh_ppu_update_color(5, 0, (hh_ppu_rgb_color_t) {0x1, 0x1, 0x1});
+ for (int i = 0; i < 4; i++) {
+ for (int j = 0; j < 4; j++) {
+ val = arr[i][j];
+
+ hh_s_ppu_loc_bam_entry temp = {
+ .vertical_flip=false, .horizontal_flip = ((j % 4 < 2) ? false : true),
+ .palette_index = (counter == 9 || counter == 10? 5:3), .tilemap_index = (val > 0 ? (tilemap_offset + val) : 0)
+ };
+
+ int vert_pos = tiles_h*i;
+ int x_pos = j;
+ idx = vert_offset + vert_pos + x_pos + vp_h/2-2;
+
+ hh_ppu_update_background(idx,temp);
+ counter++;
+ }
+
+ }
+
+
+ const uint8_t letters_offset = 66;
+ const int _size_hooded = 7, _size_v = 2;
+
+ // char* hh = "hooded";
+ int hooded_lookup[7][2]={
+ {0,1},{0,2},//H
+ {3,4},{3,4},//oo
+ {5,6},{13,9},//de
+ {5,6}//d
+ };
+
+ counter = 8;
+ for (int i = 0; i < _size_hooded; i++) {
+ for (int vert = 1; vert <= _size_v; vert++) {
+ //TODO: move 'H' a few pixels to the right for a more cohesive font spacing
+ hh_ppu_update_foreground(counter++, (hh_s_ppu_loc_fam_entry) {
+ .vertical_flip = false, .horizontal_flip = false,
+ .palette_index = 6, .tilemap_index = letters_offset + hooded_lookup[i][vert-1],
+ .position_x = (16*i + 64+48), .position_y = (16*(vert > 1 ? 0:1)*-1 + 64+8+16 +(i==2 || i==3 ? 6:0))
+ });
+ }
+ }
+
+
+ hh_ppu_update_color(5, 1, (hh_ppu_rgb_color_t) {0xa, 0x3, 0x3});
+ hh_ppu_update_color(5, 2, (hh_ppu_rgb_color_t) {0xc, 0x5, 0x3});
+
+ const int _size_havoc = 6;
+ int lookup_havoc[6][2]={
+ {0,1},{0,2},//H
+ {13,10},{7,8},//av
+ {13,11},{13,12}//oc
+ };
+
+ counter = 8 + (_size_hooded * _size_v);
+ for (int i = 0; i < _size_havoc; i++) {
+ for (int vert = 1; vert <= _size_v; vert++) {
+ //TODO: move 'H' a few pixels to the right for a more cohesive font spacing
+ hh_ppu_update_foreground(counter++, (hh_s_ppu_loc_fam_entry) {
+ .vertical_flip = false, .horizontal_flip = (i > 4 && vert==0 ? 1:0),
+ .palette_index = 5, .tilemap_index = letters_offset + lookup_havoc[i][vert-1],
+ .position_x = (16*i +64+32+8), .position_y = (16*(vert > 1 ? 0:1)*-1 + 64+8+48)
+ });
+ }
+ }
+}
diff --git a/src/engine/title_screen.h b/src/engine/title_screen.h
new file mode 100644
index 0000000..b5eda63
--- /dev/null
+++ b/src/engine/title_screen.h
@@ -0,0 +1,3 @@
+#pragma once
+
+void hh_init_title_screen();
diff --git a/src/entity.h b/src/entity.h
index 20cbf42..181182b 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -12,4 +12,3 @@ typedef struct {
int8_t speed; //10 default L/R MODifier
bool in_air;
} hh_s_entity_player;
-
diff --git a/src/game_loop/game_over.c b/src/game_loop/game_over.c
new file mode 100644
index 0000000..f5b70cf
--- /dev/null
+++ b/src/game_loop/game_over.c
@@ -0,0 +1,28 @@
+#include "game_over.h"
+
+
+void hh_game_over(hh_e_game_state* hh_game_state){
+ static hh_e_game_over hh_e_states_game_over = hh_e_game_over_show;
+
+ switch (hh_e_states_game_over)
+ {
+ case hh_e_game_over_show:
+ hh_clear_screen();
+ hh_clear_sprite();
+ // todo: make function to show game over
+ hh_e_states_game_over = hh_e_game_over_input;
+ break;
+ case hh_e_game_over_input:
+ if(g_hh_controller_p1.button_primary){
+ hh_e_states_game_over = hh_e_game_over_end;
+ }
+ break;
+ case hh_e_game_over_end:
+ hh_e_states_game_over = hh_e_game_over_show;
+ *hh_game_state = hh_e_state_game_over;
+ break;
+ default:
+ hh_e_states_game_over = hh_e_game_over_show;
+ break;
+ }
+}
diff --git a/src/game_loop/game_over.h b/src/game_loop/game_over.h
new file mode 100644
index 0000000..80db667
--- /dev/null
+++ b/src/game_loop/game_over.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "input.h"
+#include "engine/draw_screen.h"
+#include "engine/level_const.h"
+
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef enum {
+ hh_e_game_over_show,
+ hh_e_game_over_input,
+ hh_e_game_over_end,
+} hh_e_game_over;
+
+
+void hh_game_over(hh_e_game_state*);
diff --git a/src/game_loop/gameplay.c b/src/game_loop/gameplay.c
new file mode 100644
index 0000000..295eb5d
--- /dev/null
+++ b/src/game_loop/gameplay.c
@@ -0,0 +1,47 @@
+#include "gameplay.h"
+
+// player struct
+
+
+void hh_gameplay(hh_g_all_levels game, hh_e_game_state* hh_game_state){
+ static hh_e_gameplay gameplay = hh_e_setup_screen;
+
+ switch (gameplay)
+ {
+ case hh_e_setup_screen:
+ hh_setup_screen(game.level[game.current_level]);
+ gameplay = hh_e_play_level;
+ break;
+ case hh_e_play_level:
+ // todo: here come all the different functions for the gameplay
+ hh_player_actions();
+
+
+
+
+
+ if(game.level[game.current_level].hh_level_completed){
+ gameplay = hh_e_level_complete;
+ }
+ break;
+ case hh_e_level_complete:
+ if(game.current_level < 3){
+ game.current_level++;
+ gameplay = hh_e_setup_screen;
+ }
+ else {
+ gameplay = hh_e_game_over;
+ }
+ break;
+ case hh_e_game_over:
+ // todo make reset levels
+ hh_reset_levels();
+ gameplay = hh_e_setup_screen;
+ *hh_game_state = hh_e_state_game_over;
+ break;
+ default:
+ break;
+ }
+
+}
+void hh_reset_levels(){}
diff --git a/src/game_loop/gameplay.h b/src/game_loop/gameplay.h
new file mode 100644
index 0000000..d309e78
--- /dev/null
+++ b/src/game_loop/gameplay.h
@@ -0,0 +1,17 @@
+#pragma once
+#include "engine/draw_screen.h"
+#include "engine/player_controller.h"
+#include "engine/sprite_controller.h"
+#include "game_loop/starting_screen.h"
+#include "engine/level_const.h"
+
+typedef enum {
+ hh_e_setup_screen,
+ hh_e_play_level,
+ hh_e_level_complete,
+ hh_e_game_over,
+}hh_e_gameplay;
+
+void hh_reset_levels();
+void hh_gameplay(hh_g_all_levels, hh_e_game_state*);
+
diff --git a/src/game_loop/shop.c b/src/game_loop/shop.c
new file mode 100644
index 0000000..b3d2234
--- /dev/null
+++ b/src/game_loop/shop.c
@@ -0,0 +1,30 @@
+#include "shop.h"
+
+
+void hh_shop(hh_e_game_state* hh_game_state){
+ static hh_e_shop_states hh_e_shop = hh_e_shop_show;
+
+ switch (hh_e_shop)
+ {
+ case hh_e_shop_show:
+ hh_clear_screen();
+ hh_clear_sprite();
+ // todo: make function to show shop
+ //hh_setup_shop();
+ hh_e_shop = hh_e_shop_input;
+ break;
+ case hh_e_shop_input:
+ // todo: make it so that you can choose between shop
+ if(g_hh_controller_p1.button_primary){
+ hh_e_shop = hh_e_shop_end;
+ }
+ break;
+ case hh_e_shop_end:
+ hh_e_shop = hh_e_shop_show;
+ *hh_game_state = hh_e_state_gameplay;
+ break;
+ default:
+ hh_e_shop = hh_e_shop_show;
+ break;
+ }
+}
diff --git a/src/game_loop/shop.h b/src/game_loop/shop.h
new file mode 100644
index 0000000..7d01b7e
--- /dev/null
+++ b/src/game_loop/shop.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "input.h"
+#include "engine/draw_screen.h"
+#include "engine/level_const.h"
+
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef enum {
+ hh_e_shop_show,
+ hh_e_shop_input,
+ hh_e_shop_end,
+} hh_e_shop_states;
+
+
+void hh_shop(hh_e_game_state*);
diff --git a/src/game_loop/starting_screen.c b/src/game_loop/starting_screen.c
new file mode 100644
index 0000000..6ab0278
--- /dev/null
+++ b/src/game_loop/starting_screen.c
@@ -0,0 +1,32 @@
+#include "starting_screen.h""
+#include "input.h"
+#include "engine/title_screen.h"
+#include "engine/draw_screen.h"
+// #include "engine/player_controller.h"
+
+bool hh_show_starting_screen(){
+ static hh_e_screen_states hh_e_starting_screen = hh_e_state_show;
+
+ switch (hh_e_starting_screen)
+ {
+ case hh_e_state_show:
+ hh_clear_screen();
+ hh_init_title_screen();
+ hh_e_starting_screen = hh_e_state_input;
+ return false;
+ break;
+ case hh_e_state_input:
+ if(g_hh_controller_p1.button_primary){
+ hh_e_starting_screen = hh_e_state_end;
+ }
+ break;
+ case hh_e_state_end:
+ hh_e_starting_screen = hh_e_state_show;
+ return true;
+ break;
+ default:
+ hh_e_starting_screen = hh_e_state_show;
+ break;
+ }
+ return false;
+}
diff --git a/src/game_loop/starting_screen.h b/src/game_loop/starting_screen.h
new file mode 100644
index 0000000..4228f38
--- /dev/null
+++ b/src/game_loop/starting_screen.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef enum {
+ hh_e_state_show,
+ hh_e_state_input,
+ hh_e_state_end
+} hh_e_screen_states;
+
+
+bool hh_show_starting_screen();
+
diff --git a/src/input.h b/src/input.h
index adacba2..90f0c61 100644
--- a/src/input.h
+++ b/src/input.h
@@ -19,4 +19,3 @@ extern hh_s_gamepad g_hh_controller_p2;
/** @brief update g_hh_controller_p1 and 2 by reading buttons */
void hh_input_read();
-
diff --git a/src/makefile b/src/makefile
index c69bfb5..4dc84e6 100644
--- a/src/makefile
+++ b/src/makefile
@@ -30,7 +30,21 @@ CFLAGS += $(if $(DESKTOP), -DHH_TARGET_DESKTOP, )
LOCAL_SRCS += main.c \
ppu/internals.c \
ppu/ppu.c \
- demo.c
+ demo.c \
+ engine/engine.c \
+ engine/sprite_controller.c \
+ engine/player_controller.c \
+ engine/draw_screen.c \
+ engine/camera.c \
+ engine/maths.c \
+ engine/entity.c \
+ engine/bullet.c \
+ engine/title_screen.c \
+ engine/level_const.c \
+ game_loop/shop.c \
+ game_loop/gameplay.c \
+ game_loop/game_over.c \
+ game_loop/starting_screen.c
CFLAGS += $(SHARED_FLAGS)
LFLAGS += $(SHARED_FLAGS)
diff --git a/src/ppusim/input.c b/src/ppusim/input.c
index 08bc382..4bc7018 100644
--- a/src/ppusim/input.c
+++ b/src/ppusim/input.c
@@ -12,4 +12,6 @@ void hh_input_read() {
g_hh_controller_p1.dpad_down = kb[SDL_SCANCODE_S];
g_hh_controller_p1.dpad_left = kb[SDL_SCANCODE_A];
g_hh_controller_p1.dpad_right = kb[SDL_SCANCODE_D];
+ g_hh_controller_p1.button_primary = kb[SDL_SCANCODE_SPACE];
+ g_hh_controller_p1.button_secondary = kb[SDL_SCANCODE_R];
}
diff --git a/src/ppusim/sim.c b/src/ppusim/sim.c
index 449b78d..8b67acc 100644
--- a/src/ppusim/sim.c
+++ b/src/ppusim/sim.c
@@ -1,9 +1,12 @@
#include <SDL2/SDL.h>
#include <stdbool.h>
#include <stdlib.h>
+#include <stdio.h>
#include "main.h"
#include "ppu/ppu.h"
+#include "ppu/consts.h"
+#include "ppu/internals.h"
#include "ppusim/mem.h"
#include "ppusim/sim.h"
#include "ppusim/work.h"
@@ -22,6 +25,33 @@ void hh_ppu_init() {
g_hh_ppusim_vram = malloc(sizeof(hh_ppu_data_t) * 0xffff);
memset(g_hh_ppusim_vram, 0x0000, 0xffff);
+ 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
+
+ for (int i = 0; i < _size; i++) {
+ uint8_t data[sprite_size];
+
+ 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);
+ }
+ fclose(fp);
}
void hh_ppu_deinit() {
diff --git a/src/ppusim/sim.h b/src/ppusim/sim.h
index 73f4b23..4d1d718 100644
--- a/src/ppusim/sim.h
+++ b/src/ppusim/sim.h
@@ -4,3 +4,6 @@
#define HH_PPUSIM_UPSCALE_FACTOR 3
/** @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?
diff --git a/src/static/background/shop.hex b/src/static/background/shop.hex
new file mode 100644
index 0000000..8c08feb
--- /dev/null
+++ b/src/static/background/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/background/shop_ext.hex b/src/static/background/shop_ext.hex
new file mode 100644
index 0000000..d151156
--- /dev/null
+++ b/src/static/background/shop_ext.hex
@@ -0,0 +1,459 @@
+;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: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000130: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000140: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000150: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000160: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000170: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000180: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+000190: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+0001a0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+0001b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+0001c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+0001d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+0001e0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+0001f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 07
+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: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000230: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000240: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000250: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000260: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000270: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000280: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000290: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0002a0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0002b0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0002c0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0002d0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0002e0: 07 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0002f0: 07 06 06 06 06 06 06 06 06 06 06 06 06 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 06 06 06 06 07 07 06 06 06
+000330: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000340: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000350: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000360: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000370: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000380: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000390: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0003a0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0003b0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0003c0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0003d0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0003e0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0003f0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000400: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000410: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000420: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000430: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000440: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000450: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000460: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000470: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000480: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000490: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0004a0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0004b0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0004c0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0004d0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0004e0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+0004f0: 06 06 06 06 06 06 06 07 07 06 06 06 06 06 06 06
+000500: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000510: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000520: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000530: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000540: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000550: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000560: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000570: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000580: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000590: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0005a0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0005b0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0005c0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0005d0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0005e0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0005f0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000600: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
+000610: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
+000620: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000630: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000640: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000650: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000660: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000670: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000680: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000690: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0006a0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0006b0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0006c0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0006d0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0006e0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+0006f0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+000700: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
+000710: 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
+000720: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000730: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000740: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000750: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000760: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000770: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000780: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000790: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0007a0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0007b0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0007c0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0007d0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0007e0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+0007f0: 06 06 06 06 06 06 06 06 06 06 06 07 07 06 06 06
+000800: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 01 01
+000810: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 01 01
+000820: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000830: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000840: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000850: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000860: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000870: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000880: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+000890: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+0008a0: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+0008b0: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+0008c0: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+0008d0: 06 06 06 06 06 06 06 06 01 01 06 06 06 06 06 06
+0008e0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 01 01
+0008f0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 01 01
+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: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0009f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000a00: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000a10: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000a20: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a30: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a40: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a50: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a60: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a70: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a80: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000a90: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000aa0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000ab0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000ac0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000ad0: 06 06 06 06 06 06 01 01 06 06 06 06 06 06 06 06
+000ae0: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000af0: 01 01 01 01 01 01 01 01 06 06 06 06 06 06 06 06
+000b00: 01 01 06 06 06 06 06 06 01 06 06 06 06 06 06 06
+000b10: 01 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06
+000b20: 01 01 01 06 06 06 06 06 06 06 01 06 06 06 06 06
+000b30: 01 01 06 01 06 06 06 06 06 06 06 01 06 06 06 06
+000b40: 01 01 06 06 01 06 06 06 06 06 06 06 01 06 06 06
+000b50: 01 01 06 06 06 01 06 06 06 06 06 06 06 01 06 06
+000b60: 01 01 06 06 06 06 01 06 06 06 06 06 06 06 01 06
+000b70: 01 01 06 06 06 06 06 01 06 06 06 06 06 06 06 01
+000b80: 01 01 06 06 06 06 06 06 01 06 06 06 06 06 06 06
+000b90: 01 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06
+000ba0: 01 01 01 06 06 06 06 06 06 06 01 06 06 06 06 06
+000bb0: 01 01 06 01 06 06 06 06 06 06 06 01 06 06 06 06
+000bc0: 01 01 06 06 01 06 06 06 06 06 06 06 01 06 06 06
+000bd0: 01 01 06 06 06 01 06 06 06 06 06 06 06 01 06 06
+000be0: 01 01 06 06 06 06 01 06 06 06 06 06 06 06 01 06
+000bf0: 01 01 06 06 06 06 06 01 06 06 06 06 06 06 06 01
+000c00: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01
+000c10: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06
+000c20: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06
+000c30: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06
+000c40: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06
+000c50: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06
+000c60: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06
+000c70: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06
+000c80: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01
+000c90: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06
+000ca0: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06
+000cb0: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06
+000cc0: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06
+000cd0: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06
+000ce0: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06
+000cf0: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 06 06
+000d00: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 01 01
+000d10: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01
+000d20: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 01
+000d30: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 01 01
+000d40: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 01 01
+000d50: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 01 01
+000d60: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 01 01
+000d70: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 01 01
+000d80: 06 06 06 06 06 06 06 01 06 06 06 06 06 06 01 01
+000d90: 06 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01
+000da0: 06 06 06 06 06 01 06 06 06 06 06 06 06 01 01 01
+000db0: 06 06 06 06 01 06 06 06 06 06 06 06 01 06 01 01
+000dc0: 06 06 06 01 06 06 06 06 06 06 06 01 06 06 01 01
+000dd0: 06 06 01 06 06 06 06 06 06 06 01 06 06 06 01 01
+000de0: 06 01 06 06 06 06 06 06 06 01 06 06 06 06 01 01
+000df0: 01 06 06 06 06 06 06 06 01 06 06 06 06 06 01 01
+000e00: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000e10: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000e20: 06 06 06 06 06 06 06 06 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 06 06 06 06 06 06 06 06 06 06
+000e70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000e80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000e90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000ea0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000eb0: 06 06 06 06 06 06 06 06 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 06 06 01 01 06 06 06 06 06 06 06 06 06 06 06
+000f20: 06 06 01 01 01 01 06 06 06 06 06 06 06 06 06 06
+000f30: 06 01 01 01 01 01 01 06 06 06 06 06 06 06 06 06
+000f40: 06 01 01 01 01 01 01 06 06 06 06 06 06 06 06 06
+000f50: 06 06 01 01 01 01 06 06 06 06 06 06 06 06 06 06
+000f60: 06 06 06 01 01 06 06 06 06 06 06 06 06 06 06 06
+000f70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000f80: 06 06 06 06 06 06 06 06 06 06 01 01 06 06 06 06
+000f90: 06 06 06 06 06 06 06 06 06 01 01 01 01 06 06 06
+000fa0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 06 06
+000fb0: 06 06 06 06 06 06 06 06 01 01 01 01 01 01 06 06
+000fc0: 06 06 06 06 06 06 06 06 06 01 01 01 01 06 06 06
+000fd0: 06 06 06 06 06 06 06 06 06 06 01 01 06 06 06 06
+000fe0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+000ff0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001000: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001010: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001020: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001030: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001040: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001050: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001060: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001070: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001080: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+001090: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010a0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010b0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010c0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010d0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010e0: 06 01 01 06 06 06 06 06 06 06 06 06 06 06 06 06
+0010f0: 06 01 01 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: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001120: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001130: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001140: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001150: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001160: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+001170: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001180: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001190: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0011a0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0011b0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0011c0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0011d0: 01 06 06 06 06 06 01 01 01 01 06 06 06 06 06 06
+0011e0: 01 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06
+0011f0: 01 06 06 06 06 06 01 01 01 01 01 01 06 06 06 06
+001200: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001210: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001220: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001230: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001240: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001250: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001260: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+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: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0012b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0012c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0012d0: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 06
+0012e0: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06
+0012f0: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+001300: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001310: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001320: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001330: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001340: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001350: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001360: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+001370: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+001380: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+001390: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0013a0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0013b0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0013c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0013d0: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 01
+0013e0: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 01
+0013f0: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+001400: 01 06 06 06 06 06 01 01 01 01 01 01 06 06 06 06
+001410: 01 06 06 06 06 06 06 01 01 01 01 01 06 06 06 06
+001420: 01 06 06 06 06 06 06 06 01 01 01 01 06 06 06 06
+001430: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001440: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001450: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001460: 01 06 06 06 06 06 01 01 01 01 06 06 06 06 06 06
+001470: 01 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06
+001480: 01 06 06 06 06 06 01 01 01 01 01 01 06 06 06 06
+001490: 01 06 06 06 06 06 01 01 01 01 01 01 06 06 06 06
+0014a0: 01 06 06 06 06 06 06 01 01 01 01 01 06 06 06 06
+0014b0: 01 06 06 06 06 06 06 06 01 01 01 01 06 06 06 06
+0014c0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0014d0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0014e0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0014f0: 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001500: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+001510: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 06
+001520: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 06
+001530: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001540: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001550: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001560: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 06
+001570: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06
+001580: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+001590: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 06
+0015a0: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 06
+0015b0: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 06
+0015c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0015d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0015e0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0015f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001600: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+001610: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 01
+001620: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 01
+001630: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+001640: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+001650: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+001660: 06 06 06 06 06 06 01 01 01 01 06 06 06 06 06 01
+001670: 06 06 06 06 06 01 01 01 01 01 06 06 06 06 06 01
+001680: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+001690: 06 06 06 06 01 01 01 01 01 01 06 06 06 06 06 01
+0016a0: 06 06 06 06 01 01 01 01 01 06 06 06 06 06 06 01
+0016b0: 06 06 06 06 01 01 01 01 06 06 06 06 06 06 06 01
+0016c0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0016d0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0016e0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+0016f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01
+001700: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001710: 06 07 07 06 07 06 07 07 07 07 06 06 06 06 06 06
+001720: 06 07 07 06 07 06 06 07 07 06 06 06 06 06 06 06
+001730: 06 07 07 07 07 06 06 07 07 06 06 07 07 07 07 06
+001740: 06 07 07 06 07 06 06 07 07 06 06 06 06 06 06 06
+001750: 06 07 07 06 07 06 07 07 07 07 06 06 06 06 06 06
+001760: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001770: 06 07 07 07 07 07 07 07 07 07 07 07 07 07 07 06
+001780: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001790: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0017a0: 06 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06
+0017b0: 06 07 06 06 06 06 07 07 06 06 06 07 07 06 07 06
+0017c0: 06 07 07 07 07 06 07 07 06 06 06 07 07 06 07 06
+0017d0: 06 06 06 07 07 06 07 07 06 06 06 07 07 06 07 06
+0017e0: 06 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06
+0017f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001800: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001810: 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 07
+001820: 07 06 06 06 06 07 07 06 06 06 07 07 06 07 06 07
+001830: 07 07 07 07 06 07 07 06 06 06 07 07 06 07 06 07
+001840: 06 06 07 07 06 07 07 06 06 06 07 07 06 07 06 07
+001850: 07 07 07 07 06 07 07 07 07 06 07 07 07 07 06 07
+001860: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001870: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001880: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001890: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0018a0: 07 07 07 07 06 07 07 07 07 06 07 07 06 06 06 06
+0018b0: 07 07 06 07 06 07 07 06 06 06 07 07 06 06 06 06
+0018c0: 07 07 07 06 06 07 07 07 07 06 06 06 06 06 06 07
+0018d0: 07 07 06 07 06 07 07 06 06 06 07 07 06 06 07 06
+0018e0: 07 07 06 07 06 07 07 07 07 06 07 07 06 06 07 07
+0018f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001900: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001910: 07 07 07 06 07 07 07 07 06 07 07 06 06 06 06 06
+001920: 07 06 07 06 07 07 06 06 06 07 07 06 06 06 06 07
+001930: 07 07 06 06 07 07 07 07 06 06 06 06 06 06 07 07
+001940: 07 06 07 06 07 07 06 06 06 07 07 06 06 07 06 07
+001950: 07 06 07 06 07 07 07 07 06 07 07 06 06 07 07 07
+001960: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001970: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001980: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001990: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+0019a0: 06 07 07 07 06 06 06 06 06 07 07 06 06 06 06 07
+0019b0: 07 06 07 07 06 06 06 06 07 07 07 06 06 06 06 06
+0019c0: 06 07 07 06 06 06 06 07 07 07 06 06 06 07 07 07
+0019d0: 07 07 06 06 06 06 07 07 07 06 06 06 07 07 06 06
+0019e0: 07 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06
+0019f0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001a00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001a10: 07 07 07 06 06 07 07 07 07 07 06 06 06 06 07 07
+001a20: 07 07 06 06 06 06 06 07 07 07 06 06 06 07 06 07
+001a30: 07 06 06 06 06 06 07 07 07 06 06 06 07 07 07 07
+001a40: 07 06 06 06 06 07 07 07 06 06 06 07 06 07 07 06
+001a50: 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06 06
+001a60: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001a70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001a80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001a90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001aa0: 07 07 06 06 06 06 07 07 07 06 06 06 07 06 06 07
+001ab0: 07 07 06 06 07 06 06 07 07 06 06 07 06 06 07 07
+001ac0: 07 06 06 06 06 07 07 07 06 06 06 06 07 07 07 06
+001ad0: 06 06 06 07 06 07 07 06 06 06 06 07 07 07 06 06
+001ae0: 06 06 06 07 07 07 06 06 06 06 07 07 07 06 06 06
+001af0: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001b00: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001b10: 07 06 06 06 06 07 07 07 06 06 06 06 06 06 06 06
+001b20: 07 06 06 06 07 06 07 07 06 06 06 06 06 06 06 06
+001b30: 06 06 06 06 07 07 07 06 06 06 06 06 06 06 06 06
+001b40: 06 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06
+001b50: 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06
+001b60: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001b70: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001b80: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001b90: 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
+001ba0: 06 06 06 07 07 07 07 06 06 06 06 06 06 06 06 06
+001bb0: 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06 06
+001bc0: 06 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06
+001bd0: 06 06 06 07 07 06 06 06 06 06 06 06 06 06 06 06
+001be0: 06 07 07 07 06 06 06 06 06 06 06 06 06 06 06 06
+001bf0: 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/background/tilemap.hex b/src/static/background/tilemap.hex
new file mode 100644
index 0000000..446f3dd
--- /dev/null
+++ b/src/static/background/tilemap.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/static/background/title_screen_icon.hex b/src/static/background/title_screen_icon.hex
new file mode 100644
index 0000000..120eaa1
--- /dev/null
+++ b/src/static/background/title_screen_icon.hex
@@ -0,0 +1,102 @@
+;indices: 4
+;17 20 38
+;10 14 1f
+;40 27 51
+;7a 36 7b
+
+000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02
+0000b0: 00 00 00 00 00 00 00 00 00 00 02 02 02 02 03 03
+0000c0: 00 00 00 00 00 00 00 02 02 02 03 03 03 03 03 03
+0000d0: 00 00 00 00 02 02 02 03 03 03 03 03 03 03 03 03
+0000e0: 00 00 02 02 03 03 03 03 03 03 03 03 03 03 03 03
+0000f0: 02 02 03 03 03 03 03 03 03 03 03 03 03 03 03 03
+000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02
+000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 03 03
+000120: 00 00 00 00 00 00 00 00 00 00 00 00 02 03 03 03
+000130: 00 00 00 00 00 00 00 00 00 00 00 02 03 03 03 03
+000140: 00 00 00 00 00 00 00 00 00 00 02 03 03 03 03 03
+000150: 00 00 00 00 00 00 00 00 00 00 02 03 03 03 03 03
+000160: 00 00 00 00 00 00 00 00 00 02 03 03 03 03 03 03
+000170: 00 00 00 00 00 00 00 00 02 03 03 03 03 03 03 03
+000180: 00 00 00 00 00 00 00 00 02 03 03 03 03 03 03 03
+000190: 00 00 00 00 00 00 00 02 03 03 03 03 03 03 03 03
+0001a0: 00 00 00 00 00 00 00 02 03 03 03 03 03 03 03 03
+0001b0: 00 00 00 00 00 00 00 02 03 03 03 03 03 03 03 03
+0001c0: 00 00 00 00 00 00 02 03 03 03 03 03 03 03 03 01
+0001d0: 00 00 00 00 00 00 02 03 03 03 03 03 03 03 01 01
+0001e0: 00 00 00 00 00 00 02 03 03 03 03 03 03 03 01 01
+0001f0: 00 00 00 00 00 02 03 03 03 03 03 03 03 01 01 01
+000200: 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
+000210: 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
+000220: 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
+000230: 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
+000240: 03 03 03 03 03 03 03 03 03 03 01 01 01 01 01 01
+000250: 03 03 03 03 03 03 03 01 01 01 01 01 01 01 01 01
+000260: 03 03 03 03 03 01 01 01 01 01 01 01 01 01 01 01
+000270: 03 03 03 01 01 01 01 01 01 01 01 01 01 01 01 01
+000280: 03 03 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000290: 03 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0002a0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0002b0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0002c0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0002d0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0002e0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0002f0: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000300: 00 00 00 00 00 02 03 03 03 03 03 03 03 01 01 01
+000310: 00 00 00 00 00 02 03 03 03 03 03 03 03 01 01 01
+000320: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000330: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000340: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000350: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000360: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000370: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000380: 00 00 00 00 00 02 03 03 03 03 03 03 01 01 01 01
+000390: 00 00 00 00 00 00 02 03 03 03 03 03 01 01 01 01
+0003a0: 00 00 00 00 00 00 02 03 03 03 03 03 01 01 01 01
+0003b0: 00 00 00 00 00 00 02 03 03 03 03 03 01 01 01 01
+0003c0: 00 00 00 00 00 00 00 02 03 03 03 03 01 01 01 01
+0003d0: 00 00 00 00 00 00 00 02 03 03 03 03 01 01 01 01
+0003e0: 00 00 00 00 00 00 00 02 03 03 03 03 01 01 01 01
+0003f0: 00 00 00 00 00 00 00 00 02 03 03 03 01 01 01 01
+000400: 00 00 00 00 00 00 00 00 02 03 03 03 01 01 01 01
+000410: 00 00 00 00 00 00 00 00 00 02 03 03 01 01 01 01
+000420: 00 00 00 00 00 00 00 00 00 02 03 03 03 01 01 01
+000430: 00 00 00 00 00 00 00 00 00 00 02 03 03 01 01 01
+000440: 00 00 00 00 00 00 00 00 00 00 02 03 03 01 01 01
+000450: 00 00 00 00 00 00 00 00 00 00 00 02 03 03 01 01
+000460: 00 00 00 00 00 00 00 00 00 00 00 02 03 03 01 01
+000470: 00 00 00 00 00 00 00 00 00 00 00 00 02 03 03 01
+000480: 00 00 00 00 00 00 00 00 00 00 00 00 00 02 03 03
+000490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 03
+0004a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02
+0004b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0004c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0004d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0004e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0004f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+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: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000530: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000540: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000550: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000560: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000570: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000580: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+000590: 03 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
+0005a0: 03 03 03 01 01 01 01 01 01 01 01 01 01 01 01 01
+0005b0: 02 03 03 03 03 01 01 01 01 01 01 01 01 01 01 01
+0005c0: 00 02 02 03 03 03 03 01 01 01 01 01 01 01 01 01
+0005d0: 00 00 00 02 02 02 03 03 03 03 03 03 01 01 01 01
+0005e0: 00 00 00 00 00 00 02 02 02 02 02 03 03 03 03 03
+0005f0: 00 00 00 00 00 00 00 00 00 00 00 02 02 02 02 02 \ No newline at end of file
diff --git a/src/static/foreground/slime.hex b/src/static/foreground/slime.hex
new file mode 100644
index 0000000..ce20533
--- /dev/null
+++ b/src/static/foreground/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/foreground/title_screen_letteres_large.hex b/src/static/foreground/title_screen_letteres_large.hex
new file mode 100644
index 0000000..fea1c77
--- /dev/null
+++ b/src/static/foreground/title_screen_letteres_large.hex
@@ -0,0 +1,230 @@
+;title screen letters (Large)
+;indices: 3
+;23 32 56
+;165 48 48
+;207 87 60
+
+0000: 00 00 00 00 00 00 00 00 02 02 00 00 00 00 00 00
+0010: 00 00 00 00 00 00 00 00 02 02 02 00 00 00 00 00
+0020: 00 00 00 00 00 00 00 02 02 02 02 00 00 00 00 00
+0030: 00 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00
+0040: 00 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00
+0050: 00 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00
+0060: 00 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00
+0070: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+0080: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+0090: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+00a0: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+00b0: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+00c0: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+00d0: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00
+00e0: 00 00 00 00 00 00 02 02 01 00 00 00 00 00 00 00
+00f0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0100: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0110: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0120: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0130: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 01
+0140: 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01
+0150: 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01
+0160: 00 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00
+0170: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00
+0180: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0190: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+01a0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+01b0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+01c0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+01d0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+01e0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+01f0: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00
+0200: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0210: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0220: 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00
+0230: 01 01 01 01 01 01 01 01 01 01 01 00 00 00 00 00
+0240: 01 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00
+0250: 01 01 01 00 00 00 01 01 01 00 00 00 00 00 00 00
+0260: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0270: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0280: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00
+0290: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00
+02a0: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00
+02b0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+02c0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+02d0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+02e0: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+02f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0350: 00 00 00 00 00 00 02 02 02 02 00 00 00 00 00 00
+0360: 00 00 00 00 00 02 02 02 02 02 02 00 00 00 00 00
+0370: 00 00 00 00 02 02 02 02 02 02 02 02 00 00 00 00
+0380: 00 00 00 02 02 02 02 02 02 02 02 02 02 00 00 00
+0390: 00 00 00 02 02 02 02 02 02 02 02 02 02 02 00 00
+03a0: 00 00 02 02 02 02 02 02 02 02 02 02 02 02 00 00
+03b0: 00 00 02 02 02 02 02 02 02 02 02 02 02 02 00 00
+03c0: 00 00 02 02 02 02 02 02 02 02 02 02 02 02 00 00
+03d0: 00 00 02 02 02 02 02 02 02 02 02 02 01 01 00 00
+03e0: 00 00 02 02 02 02 02 02 02 02 01 01 01 01 00 00
+03f0: 00 00 02 02 02 02 02 01 01 01 01 01 01 01 00 00
+0400: 00 00 02 02 01 01 01 01 01 01 01 01 01 01 00 00
+0410: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00
+0420: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00
+0430: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00
+0440: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00
+0450: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00
+0460: 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 00
+0470: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00
+0480: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00
+0490: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00
+04a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+04b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+04c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+04d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+04e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+04f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0500: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 00 00
+0510: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0520: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0530: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0540: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0550: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0560: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0570: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 00
+0580: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 00 00
+0590: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 00 00
+05a0: 00 00 00 00 00 00 00 00 00 00 00 00 02 02 00 00
+05b0: 00 00 00 00 00 02 02 02 02 00 00 00 02 02 00 00
+05c0: 00 00 00 00 02 02 02 02 02 02 00 00 02 02 00 00
+05d0: 00 00 00 00 02 02 02 00 00 00 02 00 02 02 00 00
+05e0: 00 00 00 02 02 02 00 00 00 00 00 02 02 02 00 00
+05f0: 00 00 00 02 02 00 00 00 00 00 00 02 02 02 00 00
+0600: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 00 00
+0610: 00 00 02 02 00 00 00 00 00 00 00 00 01 01 00 00
+0620: 00 00 02 01 00 00 00 00 00 00 00 00 01 01 00 00
+0630: 00 00 01 01 00 00 00 00 00 00 00 00 01 01 00 00
+0640: 00 01 01 00 00 00 00 00 00 00 00 00 01 01 00 00
+0650: 00 01 01 00 00 00 00 00 00 00 00 00 01 01 00 00
+0660: 00 01 01 00 00 00 00 00 00 00 00 00 01 01 00 00
+0670: 00 01 01 00 00 00 00 00 00 00 00 01 01 01 00 00
+0680: 00 01 01 00 00 00 00 00 00 00 00 01 01 01 00 00
+0690: 00 01 01 00 00 00 00 00 00 00 00 01 01 01 00 00
+06a0: 00 01 01 00 00 00 00 00 00 00 01 01 01 01 00 00
+06b0: 00 01 01 00 00 00 00 00 00 00 01 01 01 01 00 00
+06c0: 00 00 01 01 00 00 00 00 00 01 01 01 01 01 00 00
+06d0: 00 00 01 01 01 00 00 00 01 01 01 00 01 01 00 00
+06e0: 00 00 00 01 01 01 01 01 01 01 00 00 01 01 00 00
+06f0: 00 00 00 00 01 01 01 01 01 00 00 00 00 01 01 00
+0700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0740: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0750: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+07a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+07b0: 00 02 02 00 00 00 00 00 00 00 00 00 00 02 02 00
+07c0: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+07d0: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+07e0: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+07f0: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0800: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0810: 00 00 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0820: 00 00 02 02 00 00 00 00 00 00 00 00 02 02 02 00
+0830: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 00 00
+0840: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 00 00
+0850: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 00 00
+0860: 00 00 00 02 02 00 00 00 00 00 00 00 02 01 00 00
+0870: 00 00 00 02 01 01 00 00 00 00 00 00 01 00 00 00
+0880: 00 00 00 01 01 01 00 00 00 00 00 01 01 00 00 00
+0890: 00 00 00 00 01 01 00 00 00 00 00 01 01 00 00 00
+08a0: 00 00 00 00 01 01 01 00 00 00 00 01 01 00 00 00
+08b0: 00 00 00 00 00 01 01 00 00 00 00 01 00 00 00 00
+08c0: 00 00 00 00 00 01 01 01 00 00 01 01 00 00 00 00
+08d0: 00 00 00 00 00 00 01 01 00 00 01 00 00 00 00 00
+08e0: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00
+08f0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00
+0900: 00 00 00 02 02 00 00 00 00 00 00 00 02 02 02 00
+0910: 00 00 00 02 02 00 00 00 00 00 00 00 02 02 02 00
+0920: 00 00 00 02 02 00 00 00 00 00 00 00 02 02 02 00
+0930: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 02 00
+0940: 00 00 02 02 02 00 00 00 00 00 00 02 02 02 00 00
+0950: 00 00 02 02 02 00 00 00 00 00 00 02 02 02 00 00
+0960: 00 00 02 02 02 02 00 00 00 00 02 02 02 00 00 00
+0970: 00 00 02 02 02 02 02 02 02 02 02 02 00 00 00 00
+0980: 00 00 02 02 00 00 02 02 02 02 00 00 00 00 00 00
+0990: 00 00 02 01 00 00 00 00 00 00 00 00 00 00 00 00
+09a0: 00 00 01 01 00 00 00 00 00 00 00 00 00 01 01 00
+09b0: 00 00 01 01 00 00 00 00 00 00 00 00 01 01 01 00
+09c0: 00 00 00 01 01 00 00 00 00 00 00 01 01 01 00 00
+09d0: 00 00 00 01 01 01 00 00 00 00 01 01 01 01 00 00
+09e0: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00
+09f0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00
+0a00: 00 00 00 02 02 02 00 00 00 00 00 00 02 02 02 00
+0a10: 00 00 00 02 02 00 00 00 00 00 00 00 02 02 02 00
+0a20: 00 00 00 02 02 00 00 00 00 00 00 00 00 02 02 00
+0a30: 00 00 00 02 02 00 00 00 00 00 00 00 00 02 02 00
+0a40: 00 00 00 00 02 00 00 00 00 00 00 00 00 02 02 00
+0a50: 00 00 00 00 00 00 02 02 02 02 02 02 02 02 02 00
+0a60: 00 00 00 00 02 02 02 02 02 02 02 02 02 02 02 00
+0a70: 00 00 00 01 02 02 02 00 00 00 00 00 02 02 01 00
+0a80: 00 00 01 01 01 00 00 00 00 00 00 00 00 01 01 00
+0a90: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 00
+0aa0: 00 01 01 01 00 00 00 00 00 00 00 00 01 01 01 00
+0ab0: 00 01 01 01 00 00 00 00 00 00 00 00 01 01 01 00
+0ac0: 00 01 01 01 01 00 00 00 00 00 00 01 01 01 01 00
+0ad0: 00 00 01 01 01 01 01 00 01 01 01 01 01 01 01 00
+0ae0: 00 00 00 01 01 01 01 01 01 01 01 01 00 01 01 00
+0af0: 00 00 00 00 00 01 01 01 01 01 00 00 00 01 01 00
+0b00: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 00 00
+0b10: 00 00 02 02 02 00 00 00 00 00 00 00 00 02 00 00
+0b20: 00 00 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0b30: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0b40: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0b50: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 02 00
+0b60: 00 02 02 02 00 00 00 00 00 00 00 00 00 02 01 00
+0b70: 00 02 01 01 00 00 00 00 00 00 00 00 00 01 01 00
+0b80: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 00
+0b90: 00 01 01 01 00 00 00 00 00 00 00 00 01 01 01 00
+0ba0: 00 01 01 01 00 00 00 00 00 00 00 00 01 01 00 00
+0bb0: 00 00 01 01 01 00 00 00 00 00 00 00 01 01 00 00
+0bc0: 00 00 01 01 01 00 00 00 00 00 00 01 01 00 00 00
+0bd0: 00 00 00 01 01 01 01 01 00 00 01 01 01 00 00 00
+0be0: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00
+0bf0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00
+0c00: 00 00 02 02 02 00 00 00 00 00 00 00 02 02 00 00
+0c10: 00 00 02 02 02 00 00 00 00 00 00 02 02 00 00 00
+0c20: 00 00 02 02 02 00 00 00 00 00 00 02 02 00 00 00
+0c30: 00 00 02 02 02 00 00 00 00 00 00 02 00 00 00 00
+0c40: 00 02 02 02 00 00 00 00 00 00 02 00 00 00 00 00
+0c50: 00 02 02 02 00 00 00 00 00 00 00 00 00 00 00 00
+0c60: 00 02 02 02 00 00 00 00 00 00 00 00 00 00 00 00
+0c70: 00 02 01 01 00 00 00 00 00 00 00 00 00 00 00 00
+0c80: 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00
+0c90: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 00
+0ca0: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 00
+0cb0: 00 01 01 01 01 00 00 00 00 00 00 00 01 01 01 00
+0cc0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00
+0cd0: 00 00 00 01 01 01 00 00 00 01 01 01 01 00 00 00
+0ce0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00
+0cf0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00
+0d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0da0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+0db0: 00 00 00 00 00 00 00 02 02 02 02 02 00 00 00 00
+0dc0: 00 00 00 00 00 00 02 02 02 02 02 02 02 00 00 00
+0dd0: 00 00 00 00 00 02 02 00 00 00 02 02 02 00 00 00
+0de0: 00 00 00 00 02 02 00 00 00 00 00 02 02 02 00 00
+0df0: 00 00 00 02 02 02 00 00 00 00 00 00 02 02 00 00
diff --git a/src/stm32/TODO/hh_draw_screen.h b/src/stm32/TODO/hh_draw_screen.h
deleted file mode 100644
index f5d7507..0000000
--- a/src/stm32/TODO/hh_draw_screen.h
+++ /dev/null
@@ -1 +0,0 @@
-// every function call for drawing the screen goes here.
diff --git a/src/stm32/TODO/hh_entity.c b/src/stm32/TODO/hh_entity.c
deleted file mode 100644
index fa550d5..0000000
--- a/src/stm32/TODO/hh_entity.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdbool.h>
-
-#include "hh_entity.h"
-#include "maths.h"
-
-/*
- PLAYER: (pos on X)
- ,___,
- | |
- | X |
- |___|
-
-*/
-
-bool hh_collision(vec2* pos1, vec2* pos2){
- if (pos2->x == CLAMP(pos2->x,pos1->x,pos1->x+1.0f)){// hit x
- return true;
- }
-
- if (pos2->y == CLAMP(pos2->y,pos1->y,pos1->y+0.99f)){// hit y
- return true;
- }
- return false;
-}
-
-void hh_solve_collision(vec2* pos_environment, hh_entity* entity){
- if (entity->vec.x > 0.0f){
- entity->pos.x = MIN(entity->pos.x,pos_environment->x-1.0f);
- entity->vec.x = 0.0f;
- } else if (entity->vec.x < 0.0f){
- entity->pos.x = MAX(entity->pos.x,pos_environment->x+1.0f);
- entity->vec.x = 0.0f;
- } else if (entity->vec.y > 0.0f){
- entity->pos.x = MIN(entity->pos.x,pos_environment->x-1.0f);
- entity->vec.x = 0.0f;
- } else if (entity->vec.y < 0.0f){
- entity->pos.x = MAX(entity->pos.x,pos_environment->x+1.0f);
- entity->vec.x = 0.0f;
- }
-}
-
diff --git a/src/stm32/TODO/hh_entity.h b/src/stm32/TODO/hh_entity.h
deleted file mode 100644
index fdbeb8a..0000000
--- a/src/stm32/TODO/hh_entity.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-
-#include "maths.h"
-
-typedef struct {
- vec2 pos, vec;
- bool is_grounded;
- int8_t hp;
- //armor/block?
-}hh_entity;
-
-/// @brief detect for collision enity and eviroment
-/// @param pos1 position of environment tile to be checked
-/// @param pos2 position entity
-/// @return true if collision between enity and environment
-bool hh_collision(vec2* pos1, vec2* pos2);
-
-/// @brief solve collisions
-/// @param environment position
-/// @param entity position
-/// @return solved new entity position
-void hh_solve_collision(vec2* pos_environment, hh_entity* entity);
diff --git a/src/stm32/TODO/hh_level.h b/src/stm32/TODO/hh_level.h
deleted file mode 100644
index 43b19a3..0000000
--- a/src/stm32/TODO/hh_level.h
+++ /dev/null
@@ -1 +0,0 @@
-//deal with loading/saving the correct level
diff --git a/src/stm32/TODO/hh_rand.h b/src/stm32/TODO/hh_rand.h
deleted file mode 100644
index ea7c1d4..0000000
--- a/src/stm32/TODO/hh_rand.h
+++ /dev/null
@@ -1 +0,0 @@
-// deal with Pseudo random number generation here.
diff --git a/src/stm32/TODO/maths.c b/src/stm32/TODO/maths.c
deleted file mode 100644
index 2f4444a..0000000
--- a/src/stm32/TODO/maths.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "maths.h"
-
-float clamp( float* x, float *min, float *max ){
- if (*x < *min)
- return *min;
- else if (*x > *max)
- return *max;
- else
- return *x;
-}
diff --git a/src/stm32/TODO/maths.h b/src/stm32/TODO/maths.h
deleted file mode 100644
index 0889c47..0000000
--- a/src/stm32/TODO/maths.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-// #include <math.h>
-
-typedef struct {
- u_int32_t x,y;
-} vec2;
-
-typedef vec2 vec_cen;//centered
-typedef vec2 vec_cor;//left upper corner
-
-#define HH_MATH_FIXED_POINT 7 //fixed point at decimal 7lsb (world positions in pixels (with fixed decimal point))
-
-#define MIN(a,b) (((a)<(b))?(a):(b))
-#define MAX(a,b) (((a)>(b))?(a):(b))
-#define CLAMP(N,LOWER,UPPER) (MIN(MAX(LOWER, N), UPPER))
diff --git a/src/stm32/TODO/player_controller.h b/src/stm32/TODO/player_controller.h
deleted file mode 100644
index 1e9b86c..0000000
--- a/src/stm32/TODO/player_controller.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "maths.h"
-#include "hh_entity.h"
-
-// inputs
diff --git a/src/stm32/TODO/sprite_controller.h b/src/stm32/TODO/sprite_controller.h
deleted file mode 100644
index c1fadff..0000000
--- a/src/stm32/TODO/sprite_controller.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// handles sprites
-
-// Bg sprites
-
-
-// Fg or entity sprites
diff --git a/src/stm32/main.c b/src/stm32/main.c
index 735b378..d381d35 100644
--- a/src/stm32/main.c
+++ b/src/stm32/main.c
@@ -1,4 +1,7 @@
#include "main.h"
+#include "ppu/ppu.h"
+
+void hh_ppu_load_tilemap() {}
void hh_loop() {
while(g_hh_run);