From 01a693ff474a20e41e697fb68cb51a44662ac737 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Fri, 3 Mar 2023 11:52:26 +0100 Subject: apu constants cleanup --- basys3/basys3.srcs/apu_consts.vhd | 8 ++++++++ basys3/basys3.srcs/apu_lut_reader.vhd | 16 +++++++++++----- basys3/basys3.srcs/apu_note_to_frequency.vhd | 10 +++++----- 3 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 basys3/basys3.srcs/apu_consts.vhd diff --git a/basys3/basys3.srcs/apu_consts.vhd b/basys3/basys3.srcs/apu_consts.vhd new file mode 100644 index 0000000..5c4edcf --- /dev/null +++ b/basys3/basys3.srcs/apu_consts.vhd @@ -0,0 +1,8 @@ + + + +package apu_consts is + constant SAMPLE_SIZE_WIDTH : natural := 8; -- data width for sample size + constant SAMPLE_SIZE : natural := 256; -- max value in sample size + +end package apu_consts; \ No newline at end of file diff --git a/basys3/basys3.srcs/apu_lut_reader.vhd b/basys3/basys3.srcs/apu_lut_reader.vhd index 2f92eca..b3b0ca4 100644 --- a/basys3/basys3.srcs/apu_lut_reader.vhd +++ b/basys3/basys3.srcs/apu_lut_reader.vhd @@ -2,20 +2,23 @@ library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; +library work; +use work.apu_consts.all; + entity apu_lut_reader is port ( clk : in std_logic; rst : in std_logic; freq : in std_logic_vector(11 downto 0); wave : in std_logic_vector(1 downto 0); - value : out std_logic_vector(7 downto 0) + value : out std_logic_vector(SAMPLE_SIZE_WIDTH-1 downto 0) ); end entity; architecture behavioral of apu_lut_reader is - constant AMPLITUDE : natural := 0; - constant SAMPLE_SIZE : natural := 256; + -- amplitude (currently) only applies to square waves + constant AMPLITUDE : natural := SAMPLE_SIZE/2; -- less or equals SAMPLE_SIZE/2 (Amplitude around SAMPLE_SIZE/2) signal idx : unsigned := (others => '0'); signal buf : unsigned := (others => '0'); @@ -23,6 +26,9 @@ architecture behavioral of apu_lut_reader is begin process (clk) + variable val_min : unsigned := to_unsigned(SAMPLE_SIZE/2 - integer(AMPLITUDE),SAMPLE_SIZE_WIDTH-1); + variable val_max : unsigned := to_unsigned(SAMPLE_SIZE/2 + integer(AMPLITUDE),SAMPLE_SIZE_WIDTH-1); + begin if rst = '1' then idx <= x"00"; @@ -35,9 +41,9 @@ begin value <= std_logic_vector( idx ); elsif wave = "01" then -- Square if idx < (SAMPLE_SIZE/2) then - value <= x"00"; --std_logic_vector( SAMPLE_SIZE-AMPLITUDE ); -- TODO: make so that this work with a changable amplitude (for square wave) + value <= std_logic_vector(val_min); --std_logic_vector( SAMPLE_SIZE-AMPLITUDE ); -- TODO: make so that this work with a changable amplitude (for square wave) else - value <= x"FF"; + value <= std_logic_vector(val_max); end if; elsif wave = "10" then -- Triangle if idx < (SAMPLE_SIZE/2) then diff --git a/basys3/basys3.srcs/apu_note_to_frequency.vhd b/basys3/basys3.srcs/apu_note_to_frequency.vhd index 810cef9..48defa3 100644 --- a/basys3/basys3.srcs/apu_note_to_frequency.vhd +++ b/basys3/basys3.srcs/apu_note_to_frequency.vhd @@ -2,6 +2,9 @@ library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; +library work; +use work.apu_consts.all; + entity apu_note_to_frequency is port ( -- clk : in std_logic; -- rst : in std_logic; @@ -10,7 +13,6 @@ entity apu_note_to_frequency is port ( end entity; architecture Behavioral of apu_note_to_frequency is - signal buff_small : std_logic_vector(7 downto 0) := (others => '0'); signal buff : std_logic_vector(15 downto 0) := (others => '0'); signal shift : integer; begin @@ -18,7 +20,7 @@ begin shift <= to_integer(unsigned( data(2 downto 0) )); buff <= - x"1F0" when data(6 downto 3) = (x"1") else -- C 496 + x"1F0" when data(6 downto 3) = (x"1") else -- C 496 --values are calculated for 8kHz sample rate x"1D0" when data(6 downto 3) = (x"2") else -- C#/Db 464 x"1B0" when data(6 downto 3) = (x"3") else -- D 432 x"1A0" when data(6 downto 3) = (x"4") else -- D#/Eb 416 @@ -32,8 +34,6 @@ begin x"100" when data(6 downto 3) = (x"C") else -- B 256 x"000"; - -- buff <= x"1" & buff_small; - freq <= std_logic_vector( shift_right(unsigned(buff), shift) ); - -- freq <= (others => '0') & buff(11 downto shift); -- bitshift values out (or div by powers of 2) -- TODO: NO WORKY!!! (concat (others => '0');) + freq <= std_logic_vector( shift_right(unsigned(buff), natural(shift)) ); -- TODO: MAYBE WORKY??? end architecture; -- cgit v1.2.3 From 586aded2dddf2e6101d2709e42bceccadb50e8a1 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Fri, 3 Mar 2023 11:54:48 +0100 Subject: file cleanup --- basys3/basys3.srcs/apu_consts.vhd | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/basys3/basys3.srcs/apu_consts.vhd b/basys3/basys3.srcs/apu_consts.vhd index 5c4edcf..f0e2754 100644 --- a/basys3/basys3.srcs/apu_consts.vhd +++ b/basys3/basys3.srcs/apu_consts.vhd @@ -1,8 +1,5 @@ - - - package apu_consts is constant SAMPLE_SIZE_WIDTH : natural := 8; -- data width for sample size constant SAMPLE_SIZE : natural := 256; -- max value in sample size -end package apu_consts; \ No newline at end of file +end package apu_consts; -- cgit v1.2.3 From 54c3e1139e3e0e328f7ce3e8a2a61b0bf530a772 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Wed, 22 Mar 2023 10:05:46 +0100 Subject: merge --- assets/TopLevel.PNG | Bin 0 -> 13919 bytes assets/hh_introScreen.png | Bin 0 -> 130932 bytes docs/BobSprint2.md | 19 ++++++++++++++++++ src/GameLoop/shop.c | 30 ++++++++++++++++++++++++++++ src/GameLoop/shop.h | 16 +++++++++++++++ src/GameLoop/startingScreen.c | 32 ++++++++++++++++++++++++++++++ src/GameLoop/startingScreen.h | 14 ++++++++++++++ src/engine/bullet.c | 44 ++++++++++++++++++++++++++++++++++++++++++ src/engine/bullet.h | 16 +++++++++++++++ 9 files changed, 171 insertions(+) create mode 100644 assets/TopLevel.PNG create mode 100644 assets/hh_introScreen.png create mode 100644 docs/BobSprint2.md create mode 100644 src/GameLoop/shop.c create mode 100644 src/GameLoop/shop.h create mode 100644 src/GameLoop/startingScreen.c create mode 100644 src/GameLoop/startingScreen.h create mode 100644 src/engine/bullet.c create mode 100644 src/engine/bullet.h diff --git a/assets/TopLevel.PNG b/assets/TopLevel.PNG new file mode 100644 index 0000000..2a7b16d Binary files /dev/null and b/assets/TopLevel.PNG differ diff --git a/assets/hh_introScreen.png b/assets/hh_introScreen.png new file mode 100644 index 0000000..8b6e192 Binary files /dev/null and b/assets/hh_introScreen.png differ diff --git a/docs/BobSprint2.md b/docs/BobSprint2.md new file mode 100644 index 0000000..6fff8fc --- /dev/null +++ b/docs/BobSprint2.md @@ -0,0 +1,19 @@ + + +# Proud of +Simulation: We're proud of the simulation that we created to test our game because it allows us to identify and address potential issues before the game is released. This helps ensure that the game is as polished and bug-free as possible. + +PPU: Our use of an FPGA-based PPU (Picture Processing Unit) in our game engine allows us to achieve high-quality graphics and smooth animation. This is important because it helps create an immersive and engaging gaming experience. + +Upscaling: We've implemented a sophisticated upscaling that allows us to scale up our game. This Ensures that our game runs smoothly and without any + +Collisions: We've put a lot of effort into making sure that our collision detection system is accurate and reliable. This ensures that the game mechanics work as intended and that players are able to navigate the game world without frustration. + +Artwork: We're proud of the artwork that was created which is stunning and imaginative artwork that brings the game world to life. From character designs to background artwork, every aspect of the game has been given careful attention to ensure that it looks as good as it plays. And more is coming! +# Challegens +Upscaling: While our upscaling algorithm is sophisticated, one of the challenges we faced was synchronization. Because we're upscaling in real-time, we had to ensure that the upscaling process didn't cause any lag or delay in the game. This required careful optimization of the algorithm and synchronization with other game components. + +PPU: While the use of an FPGA-based PPU allowed us to achieve high-quality graphics, it also presented some challenges. Specifically, the limited resources of the FPGA required us to optimize the PPU code to ensure that it could handle the demands of real-time gameplay. + +Communication bug fixes on the STM32: As with any complex system, we encountered some bugs in the communication between the STM32 microcontroller and the other components of the system. This required careful debugging and troubleshooting to identify and fix the issues. + diff --git a/src/GameLoop/shop.c b/src/GameLoop/shop.c new file mode 100644 index 0000000..eb6bed5 --- /dev/null +++ b/src/GameLoop/shop.c @@ -0,0 +1,30 @@ +#include "shop.h" + + +bool hh_show_Shop(){ + static hh_e_ShopStates hh_e_Shop = hh_e_STATE_SHOW; + + switch (hh_e_Shop) + { + case hh_e_STATE_SHOW: + //hh_clear_screen(); + + //hh_setup_shop(); + hh_e_Shop = hh_e_STATE_Input; + return false; + break; + case hh_e_STATE_Input: + if(g_hh_controller_p1.button_primary){ + hh_e_Shop = hh_e_STATE_END; + } + break; + case hh_e_STATE_END: + hh_e_Shop = hh_e_STATE_SHOW; + return true; + break; + default: + hh_e_Shop = hh_e_STATE_SHOW; + break; + } + return false; +} diff --git a/src/GameLoop/shop.h b/src/GameLoop/shop.h new file mode 100644 index 0000000..4014f58 --- /dev/null +++ b/src/GameLoop/shop.h @@ -0,0 +1,16 @@ +#include "input.h" +#include "engine/draw_screen.h" + + + +#include +#include + +typedef enum { + hh_e_STATE_SHOW, + hh_e_STATE_Input, + hh_e_STATE_END +} hh_e_ShopStates; + + +bool hh_show_Shop(); diff --git a/src/GameLoop/startingScreen.c b/src/GameLoop/startingScreen.c new file mode 100644 index 0000000..4fc5af9 --- /dev/null +++ b/src/GameLoop/startingScreen.c @@ -0,0 +1,32 @@ +#include "startingScreen.h" +#include "input.h" +#include "engine/title_screen.h" +#include "engine/draw_screen.h" +// #include "engine/player_controller.h" + +bool hh_show_startingScreen(){ + static hh_e_screenStates hh_e_startingScreen = hh_e_STATE_SHOW; + + switch (hh_e_startingScreen) + { + case hh_e_STATE_SHOW: + hh_clear_screen(); + hh_init_title_screen(); + hh_e_startingScreen = hh_e_STATE_Input; + return false; + break; + case hh_e_STATE_Input: + if(g_hh_controller_p1.button_primary){ + hh_e_startingScreen = hh_e_STATE_END; + } + break; + case hh_e_STATE_END: + hh_e_startingScreen = hh_e_STATE_SHOW; + return true; + break; + default: + hh_e_startingScreen = hh_e_STATE_SHOW; + break; + } + return false; +} diff --git a/src/GameLoop/startingScreen.h b/src/GameLoop/startingScreen.h new file mode 100644 index 0000000..f51cc66 --- /dev/null +++ b/src/GameLoop/startingScreen.h @@ -0,0 +1,14 @@ +#pragma once + +#include +#include + +typedef enum { + hh_e_STATE_SHOW, + hh_e_STATE_Input, + hh_e_STATE_END +} hh_e_screenStates; + + +bool hh_show_startingScreen(); + diff --git a/src/engine/bullet.c b/src/engine/bullet.c new file mode 100644 index 0000000..5aa9e51 --- /dev/null +++ b/src/engine/bullet.c @@ -0,0 +1,44 @@ +#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; + } +} +void drawBullet(Bullet* bullet){ + + + 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; + }); +} diff --git a/src/engine/bullet.h b/src/engine/bullet.h new file mode 100644 index 0000000..ad67d84 --- /dev/null +++ b/src/engine/bullet.h @@ -0,0 +1,16 @@ +#pragma once +#include "player_controller.h" + +typedef struct { + int x; + int y; + int velocity; + int isActive; + int hit; +} Bullet; + + +//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); -- cgit v1.2.3 From 516f3e1ae9d33db3dec42361bcaae1c898b42f8f Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Wed, 22 Mar 2023 18:41:03 +0100 Subject: Animated jumpable slime --- src/static/foreground/slime_jumpable.h | 4 + src/static/foreground/slime_jumpable.hex | 134 +++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 src/static/foreground/slime_jumpable.h create mode 100644 src/static/foreground/slime_jumpable.hex diff --git a/src/static/foreground/slime_jumpable.h b/src/static/foreground/slime_jumpable.h new file mode 100644 index 0000000..1112591 --- /dev/null +++ b/src/static/foreground/slime_jumpable.h @@ -0,0 +1,4 @@ +#define HH_TM_SLIME_JUMPABLE_ANI_WALK_OFFSET HH_TM_SLIME_JUMPABLE_OFFSET +#define HH_TM_SLIME_JUMPABLE_ANI_WALK_SIZE 4 +#define HH_TM_SLIME_JUMPABLE_ANI_JUMP_OFFSET HH_TM_SLIME_JUMPABLE_OFFSET + HH_TM_SLIME_JUMPABLE_ANI_WALK_SIZE +#define HH_TM_SLIME_JUMPABLE_ANI_JUMP_SIZE 4 diff --git a/src/static/foreground/slime_jumpable.hex b/src/static/foreground/slime_jumpable.hex new file mode 100644 index 0000000..e808df5 --- /dev/null +++ b/src/static/foreground/slime_jumpable.hex @@ -0,0 +1,134 @@ +;indices: 4 +;17 20 38 +;19 33 2d +;46 82 32 +;75 a7 43 + +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 02 02 02 02 00 00 00 00 00 00 +000050: 00 00 00 00 02 02 03 03 03 03 02 02 00 00 00 00 +000060: 00 00 02 02 03 03 03 03 03 03 03 03 02 00 00 00 +000070: 00 01 03 03 03 03 03 03 03 03 03 01 03 02 00 00 +000080: 01 03 03 03 03 01 03 03 03 03 03 01 03 03 01 00 +000090: 01 03 03 03 03 01 03 03 03 03 03 03 03 03 03 01 +0000a0: 01 03 03 03 03 03 03 02 03 02 03 03 03 03 03 01 +0000b0: 01 02 03 03 03 03 03 03 02 03 03 03 03 03 02 01 +0000c0: 01 02 02 03 03 03 03 03 03 03 03 03 02 02 02 01 +0000d0: 00 01 02 02 03 03 03 03 03 03 02 02 02 02 01 00 +0000e0: 00 00 01 01 02 02 02 02 02 02 02 02 02 01 00 00 +0000f0: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 +000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000130: 00 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 +000140: 00 00 00 00 02 02 02 03 03 03 02 02 00 00 00 00 +000150: 00 00 02 02 03 03 03 03 03 03 03 03 02 00 00 00 +000160: 00 01 03 03 03 03 03 03 03 03 03 03 03 02 00 00 +000170: 00 01 03 03 03 01 03 03 03 03 03 01 03 02 00 00 +000180: 00 01 03 03 03 01 03 03 03 03 03 01 03 03 01 00 +000190: 01 02 03 03 03 03 03 03 03 03 03 03 03 03 01 00 +0001a0: 01 02 02 03 03 03 03 02 03 02 03 03 03 03 03 01 +0001b0: 00 01 02 02 03 03 03 03 02 03 03 03 03 02 02 01 +0001c0: 00 01 01 02 02 03 03 03 03 03 03 02 02 02 02 01 +0001d0: 00 00 00 01 01 02 02 02 03 02 02 02 02 02 01 00 +0001e0: 00 00 00 00 00 01 01 01 02 02 02 02 02 01 00 00 +0001f0: 00 00 00 00 00 00 00 00 01 01 01 01 01 00 00 00 +000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000210: 00 00 00 00 02 02 02 02 02 02 02 00 00 00 00 00 +000220: 00 00 00 02 03 03 03 03 03 03 03 02 00 00 00 00 +000230: 00 00 02 03 03 03 03 03 03 03 03 03 02 00 00 00 +000240: 00 00 02 03 03 03 03 03 03 03 03 03 03 01 00 00 +000250: 00 01 03 03 03 01 03 03 03 03 03 01 03 01 00 00 +000260: 00 01 03 03 03 01 03 03 03 03 03 01 03 01 00 00 +000270: 00 01 03 03 03 03 03 03 03 03 03 03 03 01 00 00 +000280: 00 01 03 03 03 03 03 03 03 03 03 03 03 01 00 00 +000290: 00 01 02 03 03 03 03 02 03 02 03 03 03 01 00 00 +0002a0: 00 00 01 02 03 03 03 03 02 03 03 03 02 01 00 00 +0002b0: 00 00 01 02 02 03 03 03 03 03 03 03 02 01 00 00 +0002c0: 00 00 00 01 02 02 03 03 03 03 03 02 02 01 00 00 +0002d0: 00 00 00 01 02 02 02 03 03 02 02 02 02 01 00 00 +0002e0: 00 00 00 00 01 02 02 02 02 02 02 02 01 00 00 00 +0002f0: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +000300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000330: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00 +000340: 00 00 00 00 02 02 03 03 03 02 02 02 00 00 00 00 +000350: 00 00 00 02 03 03 03 03 03 03 03 03 02 02 00 00 +000360: 00 00 02 03 03 03 03 03 03 03 03 03 03 03 01 00 +000370: 00 00 02 03 03 01 03 03 03 03 03 01 03 03 01 00 +000380: 00 01 03 03 03 01 03 03 03 03 03 01 03 03 01 00 +000390: 00 01 03 03 03 03 03 03 03 03 03 03 03 03 02 01 +0003a0: 01 03 03 03 03 03 03 02 03 02 03 03 03 02 02 01 +0003b0: 01 02 02 03 03 03 03 03 02 03 03 03 02 02 01 00 +0003c0: 01 02 02 02 02 03 03 03 03 03 03 02 02 01 01 00 +0003d0: 00 01 02 02 02 02 02 03 02 02 02 01 01 00 00 00 +0003e0: 00 00 01 02 02 02 02 02 01 01 01 00 00 00 00 00 +0003f0: 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 00 +000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000410: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000440: 00 00 00 00 00 00 02 02 02 02 00 00 00 00 00 00 +000450: 00 00 00 00 02 02 03 03 03 03 02 02 00 00 00 00 +000460: 00 00 02 02 03 03 03 03 03 03 03 03 02 00 00 00 +000470: 00 01 03 03 03 03 03 03 03 03 01 03 03 02 00 00 +000480: 01 03 03 03 03 01 03 03 03 03 01 03 03 03 01 00 +000490: 01 03 03 03 03 01 03 03 03 03 03 03 03 03 03 01 +0004a0: 01 03 03 03 03 03 03 02 03 02 03 03 03 03 03 01 +0004b0: 01 02 03 03 03 03 03 03 02 03 03 03 03 03 02 01 +0004c0: 01 02 02 03 03 03 03 03 03 03 03 03 02 02 02 01 +0004d0: 00 01 02 02 03 03 03 03 03 03 02 02 02 02 01 00 +0004e0: 00 00 01 01 02 02 02 02 02 02 02 02 02 01 00 00 +0004f0: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 +000500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000560: 00 00 00 00 02 02 02 02 02 02 02 00 00 00 00 00 +000570: 00 00 02 02 03 03 03 03 03 03 03 02 02 00 00 00 +000580: 00 01 03 03 03 03 03 03 03 03 01 03 03 02 00 00 +000590: 01 03 03 03 03 01 03 03 03 03 01 03 03 03 01 00 +0005a0: 01 03 03 03 03 01 03 03 03 03 03 03 03 03 03 01 +0005b0: 01 03 03 03 03 03 03 02 03 02 03 03 03 03 03 01 +0005c0: 01 02 03 03 03 03 03 03 02 03 03 03 03 03 02 01 +0005d0: 01 02 02 03 03 03 03 03 03 03 03 03 02 02 02 01 +0005e0: 00 01 02 02 02 02 02 02 02 02 02 02 02 02 01 00 +0005f0: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00 +000600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000610: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00 +000620: 00 00 00 00 02 02 03 03 03 02 02 00 00 00 00 00 +000630: 00 00 00 02 03 03 03 03 03 03 03 02 00 00 00 00 +000640: 00 00 01 03 03 03 03 03 03 03 01 03 01 00 00 00 +000650: 00 01 03 03 03 01 03 03 03 03 01 03 01 00 00 00 +000660: 00 01 03 03 03 01 03 03 03 03 03 03 03 01 00 00 +000670: 00 01 03 03 03 03 03 02 03 02 03 03 03 01 00 00 +000680: 00 00 01 02 03 03 03 03 02 03 03 03 02 01 00 00 +000690: 00 00 00 01 02 03 03 03 03 03 03 02 01 00 00 00 +0006a0: 00 00 00 00 01 02 03 03 03 03 02 02 01 00 00 00 +0006b0: 00 00 00 00 01 02 02 03 03 02 02 01 00 00 00 00 +0006c0: 00 00 00 00 00 01 02 02 03 02 01 00 00 00 00 00 +0006d0: 00 00 00 00 00 00 01 02 02 01 00 00 00 00 00 00 +0006e0: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 +0006f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000700: 00 00 00 00 00 00 02 02 02 00 00 00 00 00 00 00 +000710: 00 00 00 00 02 02 03 03 03 02 02 00 00 00 00 00 +000720: 00 00 00 02 03 03 03 03 03 03 03 02 00 00 00 00 +000730: 00 00 01 03 03 03 03 03 03 03 01 03 02 00 00 00 +000740: 00 01 03 03 03 01 03 03 03 03 01 03 03 01 00 00 +000750: 00 01 03 03 03 01 03 03 03 03 03 03 03 03 01 00 +000760: 00 01 03 03 03 03 03 02 03 02 03 03 03 03 01 00 +000770: 00 01 02 03 03 03 03 03 02 03 03 03 03 02 01 00 +000780: 00 01 02 02 03 03 03 03 03 03 03 03 02 02 01 00 +000790: 00 00 01 02 02 03 03 03 03 03 03 03 02 01 00 00 +0007a0: 00 00 00 01 01 02 02 03 03 03 02 02 01 00 00 00 +0007b0: 00 00 00 00 00 01 01 02 02 02 01 01 00 00 00 00 +0007c0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +0007d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0007e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0007f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ No newline at end of file -- cgit v1.2.3 From 43d99be4bc31ef11156ae787e54e93f798458f35 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Wed, 22 Mar 2023 18:49:22 +0100 Subject: updated test/bin/.gitignore --- test/bin/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/bin/.gitignore b/test/bin/.gitignore index a8a0dce..0f56516 100644 --- a/test/bin/.gitignore +++ b/test/bin/.gitignore @@ -1 +1,4 @@ *.bin +*.pip +*.src +*.hex -- cgit v1.2.3 From 7d61b040f5711a219b1782a673a446aa546c411f Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Wed, 22 Mar 2023 19:12:46 +0100 Subject: added normal slime animations --- src/static/foreground/slime.h | 3 + src/static/foreground/slime.hex | 134 +++++++++++++++++++++++++++++++++------- 2 files changed, 114 insertions(+), 23 deletions(-) create mode 100644 src/static/foreground/slime.h diff --git a/src/static/foreground/slime.h b/src/static/foreground/slime.h new file mode 100644 index 0000000..98a4cb7 --- /dev/null +++ b/src/static/foreground/slime.h @@ -0,0 +1,3 @@ +#define HH_TM_SLIME_ANI_WALK_OFFSET HH_TM_SLIME_OFFSET +#define HH_TM_SLIME_ANI_WALK_SIZE 4 + diff --git a/src/static/foreground/slime.hex b/src/static/foreground/slime.hex index ce20533..435bfb5 100644 --- a/src/static/foreground/slime.hex +++ b/src/static/foreground/slime.hex @@ -1,24 +1,112 @@ -;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 +;indices: 46 +;17 20 38 +;25 3a 5e +;3c 5e 8b +;4f 8f ba +;73 be d3 +;a4 dd db +;19 33 2d +;25 56 2e +;46 82 32 +;75 a7 43 +;a8 ca 58 +;d0 da 91 +;4d 2b 32 +;7a 48 41 +;ad 77 57 +;c0 94 73 +;d7 b5 94 +;e7 d5 b3 +;34 1c 27 +;60 2c 2c +;88 4b 2b +;be 77 2b +;de 9e 41 +;e8 c1 70 +;24 15 27 +;41 1d 31 +;75 24 38 +;a5 30 30 +;cf 57 3c +;da 86 3e +;1e 1d 39 +;40 27 51 +;7a 36 7b +;a2 3e 8c +;c6 51 97 +;df 84 a5 +;09 0a 14 +;10 14 1f +;15 1d 28 +;20 2e 37 +;39 4a 50 +;57 72 77 +;81 97 96 +;a8 b5 b2 +;c7 cf cc +;eb ed e9 +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 08 08 08 08 08 08 08 08 00 00 00 00 +000060: 00 00 08 08 09 09 09 09 09 09 09 09 08 00 00 00 +000070: 00 06 09 09 09 09 09 09 09 09 06 06 09 08 00 00 +000080: 06 09 09 09 06 06 09 09 09 09 06 06 09 09 06 00 +000090: 06 09 09 09 06 06 09 09 09 09 09 09 09 09 09 06 +0000a0: 06 09 09 09 09 09 09 09 09 09 09 09 09 09 09 06 +0000b0: 06 08 09 09 09 09 09 09 08 09 09 09 09 09 08 06 +0000c0: 06 08 08 09 09 09 09 09 09 09 09 09 08 08 08 06 +0000d0: 00 06 08 08 09 09 09 09 09 09 08 08 08 08 06 00 +0000e0: 00 00 06 06 08 08 08 08 08 08 08 08 08 06 00 00 +0000f0: 00 00 00 00 06 06 06 06 06 06 06 06 06 00 00 00 +000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000140: 00 00 00 00 08 08 08 08 08 08 08 08 00 00 00 00 +000150: 00 00 08 08 09 09 09 09 09 09 09 09 08 00 00 00 +000160: 00 06 09 09 09 09 09 09 09 09 09 09 09 08 00 00 +000170: 00 06 09 09 06 06 09 09 09 09 06 06 09 08 00 00 +000180: 00 06 09 09 06 06 09 09 09 09 06 06 09 09 06 00 +000190: 06 08 09 09 09 09 09 09 09 09 09 09 09 09 06 00 +0001a0: 06 08 08 09 09 09 09 09 09 09 09 09 09 09 09 06 +0001b0: 00 06 08 08 09 09 09 09 08 09 09 09 09 08 08 06 +0001c0: 00 06 06 08 08 09 09 09 09 09 09 08 08 08 08 06 +0001d0: 00 00 00 06 06 08 08 08 09 08 08 08 08 08 06 00 +0001e0: 00 00 00 00 00 06 06 06 08 08 08 08 08 06 00 00 +0001f0: 00 00 00 00 00 00 00 00 06 06 06 06 06 00 00 00 +000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000220: 00 00 00 00 00 08 08 08 08 08 08 08 00 00 00 00 +000230: 00 00 00 08 08 09 09 09 09 09 09 09 08 00 00 00 +000240: 00 00 08 09 09 09 09 09 09 09 09 09 09 06 00 00 +000250: 00 06 09 09 06 06 09 09 09 09 06 06 09 06 00 00 +000260: 00 06 09 09 06 06 09 09 09 09 06 06 09 06 00 00 +000270: 00 06 09 09 09 09 09 09 09 09 09 09 09 06 00 00 +000280: 00 06 09 09 09 09 09 09 09 09 09 09 09 06 00 00 +000290: 00 06 08 09 09 09 09 09 09 09 09 09 09 06 00 00 +0002a0: 00 00 06 08 09 09 09 09 08 09 09 09 08 06 00 00 +0002b0: 00 00 06 08 08 09 09 09 09 09 09 09 08 06 00 00 +0002c0: 00 00 00 06 08 08 09 09 09 09 09 08 08 06 00 00 +0002d0: 00 00 00 06 08 08 08 09 09 08 08 08 08 06 00 00 +0002e0: 00 00 00 00 06 08 08 08 08 08 08 08 06 00 00 00 +0002f0: 00 00 00 00 00 06 06 06 06 06 06 06 00 00 00 00 +000300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000340: 00 00 00 00 08 08 08 08 08 08 08 08 00 00 00 00 +000350: 00 00 00 08 09 09 09 09 09 09 09 09 08 08 00 00 +000360: 00 00 08 09 09 09 09 09 09 09 09 09 09 09 06 00 +000370: 00 00 08 09 06 06 09 09 09 09 06 06 09 09 06 00 +000380: 00 06 09 09 06 06 09 09 09 09 06 06 09 09 06 00 +000390: 00 06 09 09 09 09 09 09 09 09 09 09 09 09 08 06 +0003a0: 06 09 09 09 09 09 09 09 09 09 09 09 09 08 08 06 +0003b0: 06 08 08 09 09 09 09 09 08 09 09 09 08 08 06 00 +0003c0: 06 08 08 08 08 09 09 09 09 09 09 08 08 06 06 00 +0003d0: 00 06 08 08 08 08 08 09 08 08 08 06 06 00 00 00 +0003e0: 00 00 06 08 08 08 08 08 06 06 06 00 00 00 00 00 +0003f0: 00 00 00 06 06 06 06 06 00 00 00 00 00 00 00 00 \ No newline at end of file -- cgit v1.2.3 From 70e7d8b8094918c332b8f6ccfa44157c307ccee1 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Thu, 23 Mar 2023 15:25:36 +0100 Subject: added font.hex --- src/static/foreground/font.hex | 580 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 580 insertions(+) create mode 100644 src/static/foreground/font.hex diff --git a/src/static/foreground/font.hex b/src/static/foreground/font.hex new file mode 100644 index 0000000..890554b --- /dev/null +++ b/src/static/foreground/font.hex @@ -0,0 +1,580 @@ +;indices: 2 +;17 20 38 +;40 27 51 + +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 01 01 00 00 00 00 00 00 00 +000030: 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 +000040: 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 +000050: 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 +000060: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +000070: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +000080: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +000090: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0000a0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0000b0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0000c0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0000d0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0000e0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0000f0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000120: 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 +000130: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000140: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000150: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000160: 00 00 00 01 01 00 00 00 00 01 01 01 00 00 00 00 +000170: 00 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 +000180: 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 +000190: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +0001a0: 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 +0001b0: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +0001c0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0001d0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +0001e0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0001f0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000210: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000220: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000230: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000240: 00 00 00 01 01 00 00 00 00 01 01 01 00 00 00 00 +000250: 00 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 +000260: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +000270: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 +000280: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 +000290: 00 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 +0002a0: 00 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 +0002b0: 00 00 00 01 01 00 00 00 00 01 01 01 00 00 00 00 +0002c0: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +0002d0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0002e0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0002f0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000310: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +000320: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +000330: 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 +000340: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +000350: 00 00 00 00 00 01 01 00 01 01 01 00 00 00 00 00 +000360: 00 00 00 00 01 01 00 00 01 01 01 00 00 00 00 00 +000370: 00 00 00 00 01 00 00 00 01 01 01 00 00 00 00 00 +000380: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000390: 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 00 +0003a0: 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 00 +0003b0: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +0003c0: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +0003d0: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +0003e0: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +0003f0: 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 +000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000410: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000420: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000430: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000440: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000450: 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 00 +000460: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000470: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000480: 00 00 00 01 01 01 01 00 00 01 01 01 00 00 00 00 +000490: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0004a0: 00 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 +0004b0: 00 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 +0004c0: 00 00 00 01 01 00 00 00 01 01 01 01 00 00 00 00 +0004d0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +0004e0: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +0004f0: 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 +000500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000510: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +000520: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +000530: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +000540: 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 +000550: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +000560: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +000570: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000580: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000590: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0005a0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0005b0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0005c0: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +0005d0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0005e0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0005f0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000610: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000620: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000630: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000640: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000650: 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 +000660: 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 +000670: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +000680: 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 +000690: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +0006a0: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +0006b0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0006c0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0006d0: 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 +0006e0: 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 +0006f0: 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 +000700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000710: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000720: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000730: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000740: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000750: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000760: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000770: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000780: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 +000790: 00 00 00 01 01 01 01 00 01 01 01 01 00 00 00 00 +0007a0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0007b0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0007c0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0007d0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0007e0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0007f0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000810: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000820: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000830: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000840: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000850: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +000860: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000870: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000880: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000890: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0008a0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0008b0: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 +0008c0: 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 +0008d0: 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 +0008e0: 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 +0008f0: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +000900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000910: 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 +000920: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 +000930: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000940: 00 00 00 00 01 01 01 00 01 01 01 01 00 00 00 00 +000950: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000960: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000970: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000980: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000990: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0009a0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0009b0: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +0009c0: 00 00 00 00 01 01 01 00 01 01 01 00 00 00 00 00 +0009d0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0009e0: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +0009f0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +000a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000a10: 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 +000a20: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +000a30: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +000a40: 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 +000a50: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +000a60: 00 00 00 00 00 01 01 00 01 01 01 00 00 00 00 00 +000a70: 00 00 00 00 00 01 01 00 01 01 01 00 00 00 00 00 +000a80: 00 00 00 00 01 01 00 00 01 01 01 00 00 00 00 00 +000a90: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 +000aa0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000ab0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000ac0: 00 00 00 01 01 00 00 00 00 01 01 01 00 00 00 00 +000ad0: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +000ae0: 00 00 01 01 00 00 00 00 00 00 01 01 01 00 00 00 +000af0: 00 00 01 01 00 00 00 00 00 00 00 01 01 00 00 00 +000b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000b10: 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 +000b20: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000b30: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000b40: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +000b50: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000b60: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +000b70: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000b80: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000b90: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000ba0: 00 00 00 01 01 01 00 00 00 01 01 01 01 00 00 00 +000bb0: 00 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 +000bc0: 00 00 00 01 01 01 00 00 00 01 01 01 01 00 00 00 +000bd0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000be0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000bf0: 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 00 +000c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000c10: 00 00 00 00 00 00 00 01 01 01 01 01 01 00 00 00 +000c20: 00 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 +000c30: 00 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 +000c40: 00 00 00 00 01 01 01 01 00 00 00 01 01 00 00 00 +000c50: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +000c60: 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 00 +000c70: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000c80: 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 +000c90: 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 +000ca0: 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 +000cb0: 00 00 01 01 01 00 00 00 00 00 00 01 01 00 00 00 +000cc0: 00 00 01 01 01 01 00 00 00 01 01 01 01 00 00 00 +000cd0: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000ce0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +000cf0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +000d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000d10: 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 +000d20: 00 00 01 01 01 01 01 00 00 00 00 00 00 00 00 00 +000d30: 00 00 01 01 01 01 01 01 01 00 00 00 00 00 00 00 +000d40: 00 00 01 01 01 00 01 01 01 01 00 00 00 00 00 00 +000d50: 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 00 +000d60: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +000d70: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +000d80: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +000d90: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +000da0: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +000db0: 00 00 01 01 01 00 00 00 00 01 01 01 01 00 00 00 +000dc0: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +000dd0: 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 00 +000de0: 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 00 +000df0: 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 +000e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000e10: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000e20: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000e30: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000e40: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000e50: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000e60: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000e70: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000e80: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000e90: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000ea0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000eb0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000ec0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000ed0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000ee0: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000ef0: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 +000f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +000f10: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000f20: 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 +000f30: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000f40: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000f50: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000f60: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000f70: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000f80: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +000f90: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +000fa0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000fb0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000fc0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000fd0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000fe0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +000ff0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 +001000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001010: 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 +001020: 00 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 +001030: 00 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 +001040: 00 00 00 00 01 01 01 01 00 00 00 01 01 00 00 00 +001050: 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 00 +001060: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001070: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001080: 00 00 01 01 01 00 00 00 01 01 01 01 01 01 00 00 +001090: 00 00 01 01 01 00 01 01 01 01 01 01 01 01 00 00 +0010a0: 00 00 01 01 01 00 01 01 01 01 01 01 01 00 00 00 +0010b0: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +0010c0: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +0010d0: 00 00 01 01 01 01 01 01 01 01 01 01 00 00 00 00 +0010e0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +0010f0: 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 +001100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001110: 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 +001120: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001130: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001140: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001150: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001160: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001170: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00 +001180: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00 +001190: 00 00 01 01 01 01 01 01 01 01 01 01 01 01 00 00 +0011a0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +0011b0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +0011c0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +0011d0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +0011e0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +0011f0: 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 +001200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001210: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +001220: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +001230: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +001240: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001250: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001260: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001270: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001280: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001290: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0012a0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0012b0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0012c0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0012d0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0012e0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0012f0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +001300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001310: 00 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 +001320: 00 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 +001330: 00 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 +001340: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +001350: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +001360: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +001370: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +001380: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +001390: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +0013a0: 00 00 00 01 00 00 00 00 01 01 01 00 00 00 00 00 +0013b0: 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 00 +0013c0: 00 00 01 01 01 01 00 00 01 01 01 00 00 00 00 00 +0013d0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +0013e0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0013f0: 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 +001400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001410: 00 00 00 00 01 00 00 00 00 00 01 01 00 00 00 00 +001420: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +001430: 00 00 00 01 01 01 00 00 00 01 01 00 00 00 00 00 +001440: 00 00 00 01 01 01 00 00 01 01 01 00 00 00 00 00 +001450: 00 00 00 01 01 01 00 01 01 01 00 00 00 00 00 00 +001460: 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 00 +001470: 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 00 +001480: 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 00 +001490: 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 00 +0014a0: 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 00 +0014b0: 00 00 00 01 01 01 00 01 01 01 01 00 00 00 00 00 +0014c0: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +0014d0: 00 00 00 01 01 01 00 00 00 01 01 01 01 00 00 00 +0014e0: 00 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 +0014f0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 +001500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001510: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 +001520: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001530: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001540: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001550: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001560: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001570: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001580: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +001590: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0015a0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0015b0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0015c0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0015d0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +0015e0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0015f0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +001600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001610: 00 00 00 00 01 01 00 00 00 00 01 01 00 00 00 00 +001620: 00 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 +001630: 00 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 +001640: 00 00 01 01 01 01 01 00 00 00 01 01 01 00 00 00 +001650: 00 00 01 01 01 01 01 00 00 01 01 01 01 00 00 00 +001660: 00 00 01 01 01 01 01 00 00 01 01 01 01 01 00 00 +001670: 00 00 01 01 01 01 01 00 00 01 01 01 01 01 00 00 +001680: 00 00 01 01 00 01 01 00 01 01 01 01 01 01 00 00 +001690: 00 01 01 01 00 01 01 00 01 01 01 01 01 01 00 00 +0016a0: 00 01 01 01 00 01 01 01 01 01 00 00 01 01 00 00 +0016b0: 00 01 01 01 00 01 01 01 01 01 00 00 01 01 00 00 +0016c0: 01 01 01 00 00 01 01 01 01 01 00 00 01 01 01 00 +0016d0: 01 01 01 00 00 00 01 01 01 01 00 00 01 01 01 00 +0016e0: 01 01 01 00 00 00 01 01 01 00 00 00 01 01 01 00 +0016f0: 01 01 01 00 00 00 01 01 01 00 00 00 00 01 01 00 +001700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001710: 00 00 01 01 00 00 00 00 00 00 00 00 01 01 00 00 +001720: 00 00 01 01 01 00 00 00 00 00 00 00 01 01 01 00 +001730: 00 00 01 01 01 01 00 00 00 00 00 00 01 01 01 00 +001740: 00 00 01 01 01 01 00 00 00 00 00 00 01 01 01 00 +001750: 00 00 01 01 01 01 01 00 00 00 00 00 01 01 01 00 +001760: 00 00 01 01 01 01 01 01 00 00 00 00 01 01 01 00 +001770: 00 00 01 01 01 00 01 01 00 00 00 00 01 01 01 00 +001780: 00 00 01 01 01 00 00 01 01 00 00 00 01 01 01 00 +001790: 00 00 01 01 01 00 00 00 01 01 00 00 01 01 01 00 +0017a0: 00 00 01 01 01 00 00 00 01 01 01 00 01 01 01 00 +0017b0: 00 00 01 01 01 00 00 00 00 01 01 01 01 01 01 00 +0017c0: 00 00 01 01 01 00 00 00 00 00 01 01 01 01 01 00 +0017d0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 01 00 +0017e0: 00 00 01 01 01 00 00 00 00 00 00 00 01 01 01 00 +0017f0: 00 00 00 01 00 00 00 00 00 00 00 00 00 01 00 00 +001800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001810: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +001820: 00 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 +001830: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 +001840: 00 00 00 01 01 01 01 00 00 00 01 01 01 01 00 00 +001850: 00 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 +001860: 00 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 +001870: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001880: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +001890: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +0018a0: 00 00 01 01 01 00 00 00 00 00 01 01 01 01 00 00 +0018b0: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +0018c0: 00 00 01 01 01 01 00 00 00 01 01 01 01 00 00 00 +0018d0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0018e0: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +0018f0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +001900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001910: 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 00 +001920: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +001930: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +001940: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +001950: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +001960: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +001970: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +001980: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +001990: 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 00 +0019a0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0019b0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0019c0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0019d0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0019e0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0019f0: 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 +001a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001a10: 00 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 +001a20: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 +001a30: 00 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 +001a40: 00 00 01 01 01 01 01 00 00 00 00 01 01 01 01 00 +001a50: 00 00 01 01 01 00 00 00 00 00 00 00 01 01 01 00 +001a60: 00 01 01 01 01 00 00 00 00 00 00 00 00 01 01 01 +001a70: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 01 +001a80: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 01 +001a90: 00 01 01 01 00 00 00 00 00 00 00 00 00 01 01 01 +001aa0: 00 01 01 01 00 00 00 00 01 01 00 00 00 01 01 01 +001ab0: 00 00 01 01 01 00 00 00 01 01 01 00 01 01 01 01 +001ac0: 00 00 01 01 01 01 01 00 00 01 01 01 01 01 01 00 +001ad0: 00 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 +001ae0: 00 00 00 00 01 01 01 01 01 01 01 01 01 01 00 00 +001af0: 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 00 +001b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001b10: 00 00 01 01 01 01 01 00 00 00 00 00 00 00 00 00 +001b20: 00 00 01 01 01 01 01 01 01 00 00 00 00 00 00 00 +001b30: 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 00 +001b40: 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 00 +001b50: 00 00 01 01 01 00 00 00 01 01 01 01 00 00 00 00 +001b60: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +001b70: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +001b80: 00 00 01 01 01 00 00 00 01 01 01 01 00 00 00 00 +001b90: 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 00 +001ba0: 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 00 +001bb0: 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 00 +001bc0: 00 00 01 01 01 00 01 01 01 01 01 00 00 00 00 00 +001bd0: 00 00 01 01 01 00 00 00 01 01 01 01 01 00 00 00 +001be0: 00 00 01 01 01 00 00 00 00 01 01 01 01 00 00 00 +001bf0: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 +001c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001c10: 00 00 00 00 00 00 00 01 01 01 01 00 00 00 00 00 +001c20: 00 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 +001c30: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 +001c40: 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 +001c50: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +001c60: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +001c70: 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 +001c80: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 +001c90: 00 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 +001ca0: 00 00 00 00 00 00 00 00 00 00 01 01 01 00 00 00 +001cb0: 00 00 00 01 01 00 00 00 00 00 01 01 01 00 00 00 +001cc0: 00 00 00 01 01 00 00 00 00 01 01 01 01 00 00 00 +001cd0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +001ce0: 00 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 +001cf0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +001d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001d10: 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 00 +001d20: 00 01 01 01 01 01 01 01 01 01 01 01 01 01 00 00 +001d30: 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 00 +001d40: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001d50: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001d60: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001d70: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001d80: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001d90: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001da0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001db0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001dc0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001dd0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001de0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +001df0: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 +001e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001e10: 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 +001e20: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e30: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e40: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e50: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e60: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e70: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e80: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001e90: 00 00 01 01 01 00 00 00 00 00 01 01 00 00 00 00 +001ea0: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +001eb0: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +001ec0: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +001ed0: 00 00 00 01 01 01 01 01 01 01 01 00 00 00 00 00 +001ee0: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +001ef0: 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 +001f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +001f10: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +001f20: 00 00 01 01 01 00 00 00 00 01 01 01 01 00 00 00 +001f30: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +001f40: 00 00 01 01 01 01 00 00 00 01 01 01 00 00 00 00 +001f50: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +001f60: 00 00 00 01 01 01 00 00 01 01 01 00 00 00 00 00 +001f70: 00 00 00 01 01 01 00 00 01 01 01 00 00 00 00 00 +001f80: 00 00 00 00 01 01 00 00 01 01 01 00 00 00 00 00 +001f90: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +001fa0: 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 00 +001fb0: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +001fc0: 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 +001fd0: 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 +001fe0: 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 +001ff0: 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 +002000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +002010: 01 01 00 00 00 00 00 01 01 00 00 00 00 00 01 01 +002020: 01 01 00 00 00 00 01 01 01 00 00 00 00 00 01 01 +002030: 01 01 00 00 00 00 01 01 01 00 00 00 00 01 01 01 +002040: 01 01 01 00 00 01 01 01 01 01 00 00 00 01 01 01 +002050: 01 01 01 00 00 01 01 01 01 01 00 00 00 01 01 01 +002060: 01 01 01 00 00 01 01 01 01 01 00 00 00 01 01 01 +002070: 01 01 01 00 00 01 01 01 01 01 00 00 01 01 01 00 +002080: 00 01 01 00 01 01 01 00 01 01 00 00 01 01 01 00 +002090: 00 01 01 00 01 01 01 00 01 01 00 00 01 01 00 00 +0020a0: 00 01 01 01 01 01 00 00 01 01 01 01 01 01 00 00 +0020b0: 00 01 01 01 01 01 00 00 01 01 01 01 01 01 00 00 +0020c0: 00 00 01 01 01 01 00 00 01 01 01 01 01 00 00 00 +0020d0: 00 00 01 01 01 00 00 00 00 01 01 01 01 00 00 00 +0020e0: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +0020f0: 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 00 +002100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +002110: 00 00 00 01 01 00 00 00 00 00 00 00 01 01 00 00 +002120: 00 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 +002130: 00 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 +002140: 00 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 +002150: 00 00 00 00 00 01 01 01 00 01 01 01 00 00 00 00 +002160: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +002170: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +002180: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +002190: 00 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 +0021a0: 00 00 00 00 00 01 01 01 01 01 01 00 00 00 00 00 +0021b0: 00 00 00 00 01 01 01 01 00 01 01 01 00 00 00 00 +0021c0: 00 00 00 01 01 01 01 00 00 01 01 01 01 00 00 00 +0021d0: 00 00 00 01 01 01 00 00 00 00 01 01 01 00 00 00 +0021e0: 00 00 01 01 01 01 00 00 00 00 01 01 01 01 00 00 +0021f0: 00 00 01 01 01 00 00 00 00 00 00 01 01 01 00 00 +002200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +002210: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +002220: 00 00 01 01 01 00 00 00 00 00 01 01 01 00 00 00 +002230: 00 00 01 01 01 01 00 00 00 01 01 01 01 00 00 00 +002240: 00 00 00 01 01 01 00 00 00 01 01 01 00 00 00 00 +002250: 00 00 00 01 01 01 00 00 01 01 01 01 00 00 00 00 +002260: 00 00 00 00 01 01 01 00 01 01 01 00 00 00 00 00 +002270: 00 00 00 00 01 01 01 00 01 01 01 00 00 00 00 00 +002280: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +002290: 00 00 00 00 00 01 01 01 01 01 00 00 00 00 00 00 +0022a0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0022b0: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +0022c0: 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 +0022d0: 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 +0022e0: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +0022f0: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +002300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +002310: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +002320: 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 00 +002330: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +002340: 00 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 +002350: 00 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 +002360: 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 +002370: 00 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 +002380: 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 +002390: 00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 +0023a0: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +0023b0: 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 +0023c0: 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 +0023d0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 +0023e0: 00 00 01 01 01 01 01 01 01 01 01 01 01 00 00 00 +0023f0: 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 00 \ No newline at end of file -- cgit v1.2.3 From 810d05156a99dd0a1c6ae14d67685f63460ef621 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Thu, 23 Mar 2023 15:31:09 +0100 Subject: fixed slime.hex --- src/static/foreground/slime.hex | 142 ++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 92 deletions(-) diff --git a/src/static/foreground/slime.hex b/src/static/foreground/slime.hex index 435bfb5..9ce574b 100644 --- a/src/static/foreground/slime.hex +++ b/src/static/foreground/slime.hex @@ -1,112 +1,70 @@ -;indices: 46 +;indices: 4 ;17 20 38 -;25 3a 5e -;3c 5e 8b -;4f 8f ba -;73 be d3 -;a4 dd db ;19 33 2d -;25 56 2e ;46 82 32 ;75 a7 43 -;a8 ca 58 -;d0 da 91 -;4d 2b 32 -;7a 48 41 -;ad 77 57 -;c0 94 73 -;d7 b5 94 -;e7 d5 b3 -;34 1c 27 -;60 2c 2c -;88 4b 2b -;be 77 2b -;de 9e 41 -;e8 c1 70 -;24 15 27 -;41 1d 31 -;75 24 38 -;a5 30 30 -;cf 57 3c -;da 86 3e -;1e 1d 39 -;40 27 51 -;7a 36 7b -;a2 3e 8c -;c6 51 97 -;df 84 a5 -;09 0a 14 -;10 14 1f -;15 1d 28 -;20 2e 37 -;39 4a 50 -;57 72 77 -;81 97 96 -;a8 b5 b2 -;c7 cf cc -;eb ed e9 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 08 08 08 08 08 08 08 08 00 00 00 00 -000060: 00 00 08 08 09 09 09 09 09 09 09 09 08 00 00 00 -000070: 00 06 09 09 09 09 09 09 09 09 06 06 09 08 00 00 -000080: 06 09 09 09 06 06 09 09 09 09 06 06 09 09 06 00 -000090: 06 09 09 09 06 06 09 09 09 09 09 09 09 09 09 06 -0000a0: 06 09 09 09 09 09 09 09 09 09 09 09 09 09 09 06 -0000b0: 06 08 09 09 09 09 09 09 08 09 09 09 09 09 08 06 -0000c0: 06 08 08 09 09 09 09 09 09 09 09 09 08 08 08 06 -0000d0: 00 06 08 08 09 09 09 09 09 09 08 08 08 08 06 00 -0000e0: 00 00 06 06 08 08 08 08 08 08 08 08 08 06 00 00 -0000f0: 00 00 00 00 06 06 06 06 06 06 06 06 06 00 00 00 +000050: 00 00 00 00 02 02 02 02 02 02 02 02 00 00 00 00 +000060: 00 00 02 02 03 03 03 03 03 03 03 03 02 00 00 00 +000070: 00 01 03 03 03 03 03 03 03 03 01 01 03 02 00 00 +000080: 01 03 03 03 01 01 03 03 03 03 01 01 03 03 01 00 +000090: 01 03 03 03 01 01 03 03 03 03 03 03 03 03 03 01 +0000a0: 01 03 03 03 03 03 03 03 03 03 03 03 03 03 03 01 +0000b0: 01 02 03 03 03 03 03 03 02 03 03 03 03 03 02 01 +0000c0: 01 02 02 03 03 03 03 03 03 03 03 03 02 02 02 01 +0000d0: 00 01 02 02 03 03 03 03 03 03 02 02 02 02 01 00 +0000e0: 00 00 01 01 02 02 02 02 02 02 02 02 02 01 00 00 +0000f0: 00 00 00 00 01 01 01 01 01 01 01 01 01 00 00 00 000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -000140: 00 00 00 00 08 08 08 08 08 08 08 08 00 00 00 00 -000150: 00 00 08 08 09 09 09 09 09 09 09 09 08 00 00 00 -000160: 00 06 09 09 09 09 09 09 09 09 09 09 09 08 00 00 -000170: 00 06 09 09 06 06 09 09 09 09 06 06 09 08 00 00 -000180: 00 06 09 09 06 06 09 09 09 09 06 06 09 09 06 00 -000190: 06 08 09 09 09 09 09 09 09 09 09 09 09 09 06 00 -0001a0: 06 08 08 09 09 09 09 09 09 09 09 09 09 09 09 06 -0001b0: 00 06 08 08 09 09 09 09 08 09 09 09 09 08 08 06 -0001c0: 00 06 06 08 08 09 09 09 09 09 09 08 08 08 08 06 -0001d0: 00 00 00 06 06 08 08 08 09 08 08 08 08 08 06 00 -0001e0: 00 00 00 00 00 06 06 06 08 08 08 08 08 06 00 00 -0001f0: 00 00 00 00 00 00 00 00 06 06 06 06 06 00 00 00 +000140: 00 00 00 00 02 02 02 02 02 02 02 02 00 00 00 00 +000150: 00 00 02 02 03 03 03 03 03 03 03 03 02 00 00 00 +000160: 00 01 03 03 03 03 03 03 03 03 03 03 03 02 00 00 +000170: 00 01 03 03 01 01 03 03 03 03 01 01 03 02 00 00 +000180: 00 01 03 03 01 01 03 03 03 03 01 01 03 03 01 00 +000190: 01 02 03 03 03 03 03 03 03 03 03 03 03 03 01 00 +0001a0: 01 02 02 03 03 03 03 03 03 03 03 03 03 03 03 01 +0001b0: 00 01 02 02 03 03 03 03 02 03 03 03 03 02 02 01 +0001c0: 00 01 01 02 02 03 03 03 03 03 03 02 02 02 02 01 +0001d0: 00 00 00 01 01 02 02 02 03 02 02 02 02 02 01 00 +0001e0: 00 00 00 00 00 01 01 01 02 02 02 02 02 01 00 00 +0001f0: 00 00 00 00 00 00 00 00 01 01 01 01 01 00 00 00 000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -000220: 00 00 00 00 00 08 08 08 08 08 08 08 00 00 00 00 -000230: 00 00 00 08 08 09 09 09 09 09 09 09 08 00 00 00 -000240: 00 00 08 09 09 09 09 09 09 09 09 09 09 06 00 00 -000250: 00 06 09 09 06 06 09 09 09 09 06 06 09 06 00 00 -000260: 00 06 09 09 06 06 09 09 09 09 06 06 09 06 00 00 -000270: 00 06 09 09 09 09 09 09 09 09 09 09 09 06 00 00 -000280: 00 06 09 09 09 09 09 09 09 09 09 09 09 06 00 00 -000290: 00 06 08 09 09 09 09 09 09 09 09 09 09 06 00 00 -0002a0: 00 00 06 08 09 09 09 09 08 09 09 09 08 06 00 00 -0002b0: 00 00 06 08 08 09 09 09 09 09 09 09 08 06 00 00 -0002c0: 00 00 00 06 08 08 09 09 09 09 09 08 08 06 00 00 -0002d0: 00 00 00 06 08 08 08 09 09 08 08 08 08 06 00 00 -0002e0: 00 00 00 00 06 08 08 08 08 08 08 08 06 00 00 00 -0002f0: 00 00 00 00 00 06 06 06 06 06 06 06 00 00 00 00 +000220: 00 00 00 00 00 02 02 02 02 02 02 02 00 00 00 00 +000230: 00 00 00 02 02 03 03 03 03 03 03 03 02 00 00 00 +000240: 00 00 02 03 03 03 03 03 03 03 03 03 03 01 00 00 +000250: 00 01 03 03 01 01 03 03 03 03 01 01 03 01 00 00 +000260: 00 01 03 03 01 01 03 03 03 03 01 01 03 01 00 00 +000270: 00 01 03 03 03 03 03 03 03 03 03 03 03 01 00 00 +000280: 00 01 03 03 03 03 03 03 03 03 03 03 03 01 00 00 +000290: 00 01 02 03 03 03 03 03 03 03 03 03 03 01 00 00 +0002a0: 00 00 01 02 03 03 03 03 02 03 03 03 02 01 00 00 +0002b0: 00 00 01 02 02 03 03 03 03 03 03 03 02 01 00 00 +0002c0: 00 00 00 01 02 02 03 03 03 03 03 02 02 01 00 00 +0002d0: 00 00 00 01 02 02 02 03 03 02 02 02 02 01 00 00 +0002e0: 00 00 00 00 01 02 02 02 02 02 02 02 01 00 00 00 +0002f0: 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 000300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -000340: 00 00 00 00 08 08 08 08 08 08 08 08 00 00 00 00 -000350: 00 00 00 08 09 09 09 09 09 09 09 09 08 08 00 00 -000360: 00 00 08 09 09 09 09 09 09 09 09 09 09 09 06 00 -000370: 00 00 08 09 06 06 09 09 09 09 06 06 09 09 06 00 -000380: 00 06 09 09 06 06 09 09 09 09 06 06 09 09 06 00 -000390: 00 06 09 09 09 09 09 09 09 09 09 09 09 09 08 06 -0003a0: 06 09 09 09 09 09 09 09 09 09 09 09 09 08 08 06 -0003b0: 06 08 08 09 09 09 09 09 08 09 09 09 08 08 06 00 -0003c0: 06 08 08 08 08 09 09 09 09 09 09 08 08 06 06 00 -0003d0: 00 06 08 08 08 08 08 09 08 08 08 06 06 00 00 00 -0003e0: 00 00 06 08 08 08 08 08 06 06 06 00 00 00 00 00 -0003f0: 00 00 00 06 06 06 06 06 00 00 00 00 00 00 00 00 \ No newline at end of file +000340: 00 00 00 00 02 02 02 02 02 02 02 02 00 00 00 00 +000350: 00 00 00 02 03 03 03 03 03 03 03 03 02 02 00 00 +000360: 00 00 02 03 03 03 03 03 03 03 03 03 03 03 01 00 +000370: 00 00 02 03 01 01 03 03 03 03 01 01 03 03 01 00 +000380: 00 01 03 03 01 01 03 03 03 03 01 01 03 03 01 00 +000390: 00 01 03 03 03 03 03 03 03 03 03 03 03 03 02 01 +0003a0: 01 03 03 03 03 03 03 03 03 03 03 03 03 02 02 01 +0003b0: 01 02 02 03 03 03 03 03 02 03 03 03 02 02 01 00 +0003c0: 01 02 02 02 02 03 03 03 03 03 03 02 02 01 01 00 +0003d0: 00 01 02 02 02 02 02 03 02 02 02 01 01 00 00 00 +0003e0: 00 00 01 02 02 02 02 02 01 01 01 00 00 00 00 00 +0003f0: 00 00 00 01 01 01 01 01 00 00 00 00 00 00 00 00 \ No newline at end of file -- cgit v1.2.3 From ba830f93a15299fd578b00969eff3c403456950c Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Fri, 24 Mar 2023 20:20:44 +0100 Subject: added first pass on animation systems --- src/engine/animator.c | 27 +++++++++++++++++++++++++++ src/engine/animator.h | 15 +++++++++++++++ src/engine/entity.c | 10 ++++++---- src/engine/entity.h | 46 +++++----------------------------------------- src/engine/types.h | 42 ++++++++++++++++++++++++++++++++++++++++++ src/makefile | 1 + 6 files changed, 96 insertions(+), 45 deletions(-) create mode 100644 src/engine/animator.c create mode 100644 src/engine/animator.h create mode 100644 src/engine/types.h diff --git a/src/engine/animator.c b/src/engine/animator.c new file mode 100644 index 0000000..887493c --- /dev/null +++ b/src/engine/animator.c @@ -0,0 +1,27 @@ +#include "engine/animator.h" +#include "engine/entity.h" +#include "engine/maths.h" + + +#define hh_white_palette 6 + +void hh_animate_hit(hh_s_rendering* in, bool hit) { + if (hit) { + in->fam.palette_index = hh_white_palette; + } else { + in->fam.palette_index = in->palette; + } +} + +void hh_animate(hh_s_rendering* in, hh_idx_t start, hh_idx_t end, uint8_t step) { + if (in->fam.palette_index >= start && in->fam.palette_index < end) { + in->fam.palette_index += step; + } else {// rollover + in->fam.palette_index = start; + } +} + +void hh_update_sprite(hh_entity* in) { + hh_animate_hit(&in->render, in->is_hit); + +} diff --git a/src/engine/animator.h b/src/engine/animator.h new file mode 100644 index 0000000..3b015a6 --- /dev/null +++ b/src/engine/animator.h @@ -0,0 +1,15 @@ +#pragma once +#include + +#include "ppu/types.h" +#include "engine/types.h" +#include "engine/entity.h" + +/** @brief flashes sprite white, also needs to be called next frame */ +void hh_animate_hit(hh_s_rendering*, bool hit); +/** @brief updates current animation frame */ +void hh_animate(hh_s_rendering*, hh_idx_t start, hh_idx_t end, uint8_t step); + +/** @brief passively updates sprite*/ +void hh_update_sprite(hh_entity* in); + diff --git a/src/engine/entity.c b/src/engine/entity.c index 535759d..b374f8c 100644 --- a/src/engine/entity.c +++ b/src/engine/entity.c @@ -45,7 +45,7 @@ void hh_solve_collision(vec2 pos_environment, hh_entity* entity){ } hh_entity hh_background_collision (hh_entity temp_old_entity,hh_entity temp_new_entity){ - temp_old_entity.is_grounded = false; + temp_new_entity.is_grounded = false; // solves x collision if (temp_old_entity.vel.x <= 0) { @@ -74,11 +74,13 @@ hh_entity hh_background_collision (hh_entity temp_old_entity,hh_entity temp_new_ 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_new_entity.is_grounded = true; } } - temp_old_entity.pos = temp_new_entity.pos; - temp_old_entity.vel = temp_new_entity.vel; + temp_old_entity = temp_new_entity; + // temp_old_entity.is_grounded = temp_new_entity.is_grounded; + // temp_old_entity.pos = temp_new_entity.pos; + // temp_old_entity.vel = temp_new_entity.vel; return temp_old_entity; } diff --git a/src/engine/entity.h b/src/engine/entity.h index cad6ba4..43fd5dd 100644 --- a/src/engine/entity.h +++ b/src/engine/entity.h @@ -5,47 +5,11 @@ #include #include "ppu/types.h" - #include "engine/maths.h" +#include "engine/types.h" +#include "engine/animator.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; - +// TODO: make a sprite update function (and required data structs?) /// @brief detect for collision enity and eviroment /// @param pos1 position of environment tile to be checked @@ -63,7 +27,7 @@ void hh_solve_collision(vec2 pos_environment, hh_entity* entity); /// @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); +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 @@ -77,6 +41,6 @@ hh_entity hh_enemy_collision(hh_entity temp_player, hh_entity temp_enemy); /// @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); +bool hh_distance_circles(vec2 object_1, vec2 object_2, int radius_1, int radius_2); diff --git a/src/engine/types.h b/src/engine/types.h new file mode 100644 index 0000000..241d706 --- /dev/null +++ b/src/engine/types.h @@ -0,0 +1,42 @@ +#pragma once + +#include "engine/maths.h" + +typedef uint8_t hh_idx_t; + +typedef enum { + fire, ice, poison +}hh_e_damage_t; + + +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 { + hh_s_ppu_loc_fam_entry fam; //screen + hh_idx_t frame0; + hh_idx_t palette; + +}hh_s_rendering; + +typedef struct { + vec2 pos, vel, size; + bool is_grounded; + bool is_hit; + uint8_t radius; + int8_t hp; + int8_t speed; + hh_s_rendering render; + +}hh_entity; + +typedef struct { + hh_entity p; + hh_s_atributes atr; +}hh_s_player; diff --git a/src/makefile b/src/makefile index cd248e2..aac3856 100644 --- a/src/makefile +++ b/src/makefile @@ -40,6 +40,7 @@ LOCAL_SRCS += main.c \ engine/entity.c \ engine/bullet.c \ engine/title_screen.c \ + engine/animator.c \ GameLoop/shop.c \ GameLoop/startingScreen.c -- cgit v1.2.3 From cd41b5310bc3cb14dc41f6abe7923ad14339fc9f Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Fri, 24 Mar 2023 20:21:16 +0100 Subject: a little clean up of player_controller.c --- src/engine/player_controller.c | 88 ++++++------------------------------------ 1 file changed, 11 insertions(+), 77 deletions(-) diff --git a/src/engine/player_controller.c b/src/engine/player_controller.c index 647b00c..5027655 100644 --- a/src/engine/player_controller.c +++ b/src/engine/player_controller.c @@ -3,9 +3,9 @@ #include "engine/draw_screen.h" #include "engine/sprite_controller.h" #include "engine/player_controller.h" - #include "input.h" +#include "engine/animator.h" #include "engine/bullet.h" void hh_player_actions() { static Bullet bullet ={ @@ -19,15 +19,14 @@ void hh_player_actions() { .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, + .palette_index = 3, + .tilemap_index = 80, } } }, player_new = {0}; @@ -41,7 +40,6 @@ void hh_player_actions() { .radius = 8, .pos = (vec2){128,48}, .vel = (vec2){0,0}, - .vec = (vec2){0,0}, .render = { .frame0 = 20, .palette = 7, @@ -140,29 +138,8 @@ void hh_player_actions() { .y = player.vel.y, }; - player_new = hh_enemy_collision(player, enemy); - + 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); @@ -174,52 +151,14 @@ void hh_player_actions() { }; - - // 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 = 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_update_sprite(&player); hh_draw_screen(cam_pos); + + // TODO: make this a function call // 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); @@ -227,22 +166,17 @@ void hh_player_actions() { 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); - + // TODO: make this loop a function call 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.tilemap_index = player.render.fam.tilemap_index + i; + temp.palette_index = player.render.fam.palette_index; temp.horizontal_flip = !(player.vel.x>0); hh_ppu_update_foreground(i,temp); } - - hh_ppu_update_foreground(4, enemy.render.fam); -- cgit v1.2.3 From 7373a9529659d4591e9fd921ef3a4771ec378965 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Mon, 3 Apr 2023 10:04:54 +0200 Subject: misc/cleanup --- src/engine/bullet.c | 2 +- src/engine/draw_screen.c | 6 ++++++ src/engine/types.h | 8 +++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/engine/bullet.c b/src/engine/bullet.c index 5aa9e51..b97ed5c 100644 --- a/src/engine/bullet.c +++ b/src/engine/bullet.c @@ -22,7 +22,7 @@ void updateBullet(Bullet* bullet, int deltaTime){ if (bullet->x - latestLocationBullet > 32) { // Set bullet's status to inactive bullet->isActive = false; - drawBullet(&(Bullet){.x = -16,.y = -16. }); + drawBullet(&(Bullet){.x = -16,.y = -16}); } } else{ diff --git a/src/engine/draw_screen.c b/src/engine/draw_screen.c index 0c31bf6..a34a20b 100644 --- a/src/engine/draw_screen.c +++ b/src/engine/draw_screen.c @@ -1,6 +1,12 @@ #include "engine/draw_screen.h" #include "engine/sprite_controller.h" +static struct draw_screen +{ + void* levels[12] +}; + + uint8_t hh_world_to_tile(vec2 pos){ //TODO: remove magic file name here FILE* level = fopen("static/level1_test.bin", "rb"); /* open binary file */ diff --git a/src/engine/types.h b/src/engine/types.h index 241d706..00b381b 100644 --- a/src/engine/types.h +++ b/src/engine/types.h @@ -2,7 +2,8 @@ #include "engine/maths.h" -typedef uint8_t hh_idx_t; +typedef uint8_t hh_ppu_fg_idx; +// typedef uint16_t hh_bg_idx; typedef enum { fire, ice, poison @@ -20,8 +21,9 @@ typedef struct { typedef struct { hh_s_ppu_loc_fam_entry fam; //screen - hh_idx_t frame0; - hh_idx_t palette; + uint16_t frame0; + uint16_t palette; + uint16_t ppu_foreground_index; }hh_s_rendering; -- cgit v1.2.3 From db78763b67a75be924cf6940258b026ba962cfe0 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Mon, 3 Apr 2023 10:05:19 +0200 Subject: shop statemachine --- src/GameLoop/shop.c | 68 +++++++++++++++++++++++++++++++++++++++++++++-------- src/GameLoop/shop.h | 22 ++++++++++++++--- 2 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/GameLoop/shop.c b/src/GameLoop/shop.c index eb6bed5..fb7ef4c 100644 --- a/src/GameLoop/shop.c +++ b/src/GameLoop/shop.c @@ -1,30 +1,78 @@ #include "shop.h" - +#include "engine/maths.h" +#include "ppu/ppu.h" bool hh_show_Shop(){ - static hh_e_ShopStates hh_e_Shop = hh_e_STATE_SHOW; + static hh_e_ShopStates hh_e_Shop = hh_e_shop_init; + static hh_e_upgrades upgrades[HH_SHOP_UPG_DISPLAY] = {0}; + static uint8_t selected = 0; switch (hh_e_Shop) { - case hh_e_STATE_SHOW: - //hh_clear_screen(); + case hh_e_shop_init: + hh_clear_screen(); + hh_clear_sprite(); + //TODO: render shop bg from level file here //hh_setup_shop(); - hh_e_Shop = hh_e_STATE_Input; + hh_shop_init(&upgrades); + selected = HH_SHOP_UPG_DISPLAY/2; + hh_shop_display(selected, &upgrades); + hh_e_Shop = hh_e_shop_main; return false; break; - case hh_e_STATE_Input: + case hh_e_shop_main: + if(g_hh_controller_p1.dpad_left || g_hh_controller_p1.dpad_right){ + hh_shift_selected(&selected,(g_hh_controller_p1.dpad_right?1:0),0,HH_SHOP_UPG_DISPLAY); + hh_shop_display(selected, &upgrades); + } if(g_hh_controller_p1.button_primary){ - hh_e_Shop = hh_e_STATE_END; + //apply selected upgrade + hh_e_Shop = hh_e_shop_end; + } + if(g_hh_controller_p1.button_secondary){ + hh_e_Shop = hh_e_shop_end; } break; - case hh_e_STATE_END: - hh_e_Shop = hh_e_STATE_SHOW; + case hh_e_shop_end: + hh_e_Shop = hh_e_shop_init; return true; break; default: - hh_e_Shop = hh_e_STATE_SHOW; + hh_e_Shop = hh_e_shop_init; break; } return false; } + +void hh_shop_init(hh_e_upgrades* in) { + for (int i = 0; i < HH_SHOP_UPG_DISPLAY; i++) { + in[i] = i%HH_SHOP_UPG_COUNT; + } +} + +void hh_shop_display(uint8_t selected, hh_e_upgrades* upgrades) { + const vec_cor start = {48,16}; + const uint8_t up = 8, + space = 24+8; + + for (int i = 0; i < HH_SHOP_UPG_DISPLAY; i++) { + hh_ppu_update_foreground(i+16, + (hh_s_ppu_loc_fam_entry){ + .horizontal_flip = false, .vertical_flip = false, + .position_x = i*space+start.x, .position_y = start.y + (i==selected?up:0), + .palette_index = 7, + .tilemap_index = i + }); + } +} + +void hh_shift_selected(uint8_t* pos, bool dir, uint8_t min, uint8_t max) { + if (dir) { + pos = CLAMP(++pos,min,max); + } else { + if (pos > 0) { + pos--; + } + } +} diff --git a/src/GameLoop/shop.h b/src/GameLoop/shop.h index 4014f58..5cd6b53 100644 --- a/src/GameLoop/shop.h +++ b/src/GameLoop/shop.h @@ -7,10 +7,26 @@ #include typedef enum { - hh_e_STATE_SHOW, - hh_e_STATE_Input, - hh_e_STATE_END + hh_e_shop_init, + hh_e_shop_main, + hh_e_shop_end } hh_e_ShopStates; +/** @brief amount of upgrade types */ +#define HH_SHOP_UPG_COUNT 2 +/** @brief count of visible upgrades in shop */ +#define HH_SHOP_UPG_DISPLAY 4 +/** @brief all possible upgrades */ +typedef enum { + hh_e_UPG_JUMP, + hh_e_UPG_HEALTH +} hh_e_upgrades; + +/** @brief init */ +void hh_shop_init(hh_e_upgrades* in); +/** @brief deals with displayed entity rendering */ +void hh_shop_display(uint8_t selected, hh_e_upgrades* upgrades); +/** @brief moves 'cursor' through selection field */ +void hh_shift_selected(uint8_t* pos, bool dir, uint8_t min, uint8_t max); bool hh_show_Shop(); -- cgit v1.2.3 From cd9d3141626e7be29b69da15b989d23eb63e46f0 Mon Sep 17 00:00:00 2001 From: UnavailableDev Date: Mon, 3 Apr 2023 10:06:00 +0200 Subject: sprite rendering, collision fix --- src/engine/animator.c | 35 ++++++++++++++++++++++++++++---- src/engine/animator.h | 5 ++--- src/engine/entity.c | 12 +++++------ src/engine/maths.h | 1 + src/engine/player_controller.c | 45 +++++++++++++++++++++++++++--------------- 5 files changed, 69 insertions(+), 29 deletions(-) diff --git a/src/engine/animator.c b/src/engine/animator.c index 887493c..58c50d8 100644 --- a/src/engine/animator.c +++ b/src/engine/animator.c @@ -1,6 +1,8 @@ #include "engine/animator.h" #include "engine/entity.h" #include "engine/maths.h" +#include "ppu/consts.h" +#include "ppu/ppu.h" #define hh_white_palette 6 @@ -13,7 +15,7 @@ void hh_animate_hit(hh_s_rendering* in, bool hit) { } } -void hh_animate(hh_s_rendering* in, hh_idx_t start, hh_idx_t end, uint8_t step) { +void hh_animate(hh_s_rendering* in, uint16_t start, uint16_t end, uint8_t step) { if (in->fam.palette_index >= start && in->fam.palette_index < end) { in->fam.palette_index += step; } else {// rollover @@ -21,7 +23,32 @@ void hh_animate(hh_s_rendering* in, hh_idx_t start, hh_idx_t end, uint8_t step) } } -void hh_update_sprite(hh_entity* in) { - hh_animate_hit(&in->render, in->is_hit); - +uint16_t hh_update_sprite(uint16_t idx, hh_entity* in, vec_cor cam) { + hh_animate_hit(&in->render, in->is_hit); + hh_s_ppu_loc_fam_entry temp = in->render.fam; + for (int y = 0; y < CEILI(in->size.y,16); y++) { + temp.position_y = CLAMP(in->pos.y - cam.y + y*HH_PPU_SPRITE_HEIGHT, -16, HH_PPU_SCREEN_HEIGHT); + for (int x = 0; x < CEILI(in->size.x,16); x++) { + temp.position_x = CLAMP(in->pos.x - cam.x + x*HH_PPU_SPRITE_WIDTH, -16, HH_PPU_SCREEN_WIDTH); + hh_ppu_update_foreground(++idx, temp); + temp.tilemap_index++; + } + } + return idx; } + + +// void hh_update_sprite(hh_entity* in, vec_cor cam) { +// hh_animate_hit(&in->render, in->is_hit); +// // uint16_t idx = in->render.ppu_foreground_index; +// uint16_t idx = 0; +// hh_s_ppu_loc_fam_entry temp = in->render.fam; +// for (int y = 0; y < CEILI(in->size.y,16); y++) { +// temp.position_y = CLAMP(in->pos.y - cam.y + y*HH_PPU_SPRITE_HEIGHT, -16, HH_PPU_SCREEN_HEIGHT); +// for (int x = 0; x < CEILI(in->size.x,16); x++) { +// temp.position_x = CLAMP(in->pos.x - cam.x + x*HH_PPU_SPRITE_WIDTH, -16, HH_PPU_SCREEN_WIDTH); +// hh_ppu_update_foreground(idx++, temp); +// temp.tilemap_index++; +// } +// } +// } diff --git a/src/engine/animator.h b/src/engine/animator.h index 3b015a6..10fa321 100644 --- a/src/engine/animator.h +++ b/src/engine/animator.h @@ -8,8 +8,7 @@ /** @brief flashes sprite white, also needs to be called next frame */ void hh_animate_hit(hh_s_rendering*, bool hit); /** @brief updates current animation frame */ -void hh_animate(hh_s_rendering*, hh_idx_t start, hh_idx_t end, uint8_t step); +void hh_animate(hh_s_rendering*, uint16_t start, uint16_t end, uint8_t step); /** @brief passively updates sprite*/ -void hh_update_sprite(hh_entity* in); - +uint16_t hh_update_sprite(uint16_t idx, hh_entity* in, vec_cor cam); diff --git a/src/engine/entity.c b/src/engine/entity.c index b374f8c..58b62c9 100644 --- a/src/engine/entity.c +++ b/src/engine/entity.c @@ -50,13 +50,13 @@ hh_entity hh_background_collision (hh_entity temp_old_entity,hh_entity temp_new_ // 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}))) { + hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 0, .y=temp_old_entity.pos.y + (temp_old_entity.size.y-1)}))) { 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}))) { + if (hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + temp_old_entity.size.x, .y=temp_old_entity.pos.y + 0})) || + hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + temp_old_entity.size.x, .y=temp_old_entity.pos.y + (temp_old_entity.size.y-1)}))) { temp_new_entity.pos.x = temp_new_entity.pos.x & ~15, // <-- magic comma, NOT TOUCHY temp_new_entity.vel.x = 0; } @@ -65,13 +65,13 @@ hh_entity hh_background_collision (hh_entity temp_old_entity,hh_entity temp_new_ //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}))) { + hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + (temp_new_entity.size.x-1), .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}))) { + if (hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + 0, .y=temp_new_entity.pos.y + (temp_new_entity.size.y-1)})) || + hh_colidable(hh_world_to_tile((vec2){.x=temp_new_entity.pos.x + (temp_new_entity.size.x-1), .y=temp_new_entity.pos.y + (temp_new_entity.size.y-1)}))) { temp_new_entity.pos.y = temp_new_entity.pos.y & ~15, temp_new_entity.vel.y = 0; temp_new_entity.is_grounded = true; diff --git a/src/engine/maths.h b/src/engine/maths.h index bef287e..6f66042 100644 --- a/src/engine/maths.h +++ b/src/engine/maths.h @@ -20,3 +20,4 @@ vec_cor vec_cor2cen(vec_cen in, vec2 halfDistance); #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)) +#define CEILI(numerator, denominator) (numerator / denominator + (numerator % denominator != 0)) diff --git a/src/engine/player_controller.c b/src/engine/player_controller.c index 5027655..7d2847e 100644 --- a/src/engine/player_controller.c +++ b/src/engine/player_controller.c @@ -17,11 +17,13 @@ void hh_player_actions() { .is_grounded = false, .is_hit = false, .radius = 8, - .pos = (vec2){32,32}, + .pos = (vec2){128+16,32}, .vel = (vec2){0,0}, + .size = (vec2){32,32}, .render = { .frame0 = 80, .palette = 3, + .ppu_foreground_index = 0, .fam = (hh_s_ppu_loc_fam_entry){ .horizontal_flip = false, .vertical_flip = false, @@ -40,9 +42,11 @@ void hh_player_actions() { .radius = 8, .pos = (vec2){128,48}, .vel = (vec2){0,0}, + .size = (vec2){16,16}, .render = { .frame0 = 20, .palette = 7, + .ppu_foreground_index = 16, .fam = (hh_s_ppu_loc_fam_entry){ .horizontal_flip = false, .vertical_flip = false, @@ -155,28 +159,37 @@ void hh_player_actions() { vec_cor cam_pos;//value in tiles cam_pos = hh_update_camera(player.pos,(vec2){0,0},(vec2){.x=20*16,.y=30*16});//TODO: remove magic number(s) - hh_update_sprite(&player); + uint16_t idx = 16; + idx = hh_update_sprite(idx, &player, cam_pos); + idx = hh_update_sprite(idx, &enemy, cam_pos); hh_draw_screen(cam_pos); + idx =16; + // TODO: make this a function call // 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); + // 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); - enemy.render.fam.position_x = (enemy.pos.x-cam_pos.x); - enemy.render.fam.position_y = (enemy.pos.y-cam_pos.y); // TODO: make this loop a function call - 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.fam.tilemap_index + i; - temp.palette_index = player.render.fam.palette_index; - temp.horizontal_flip = !(player.vel.x>0); - hh_ppu_update_foreground(i,temp); - } + // 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.fam.tilemap_index + i; + // temp.horizontal_flip = !(player.vel.x>0); + // hh_ppu_update_foreground(i,temp); + + // // hh_s_ppu_loc_fam_entry temp = { + // // .position_x = player.render.fam.position_x+(!(player.vel.x>0)?-1:1)*(i%2?8:-8) + // // }; + + // } hh_ppu_update_foreground(4, enemy.render.fam); -- cgit v1.2.3