diff options
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/animator.c | 34 | ||||
-rw-r--r-- | src/engine/animator.h | 2 | ||||
-rw-r--r-- | src/engine/bullet.c | 4 | ||||
-rw-r--r-- | src/engine/level_const.c | 21 | ||||
-rw-r--r-- | src/engine/level_const.h | 1 | ||||
-rw-r--r-- | src/engine/player_controller.c | 2 | ||||
-rw-r--r-- | src/engine/sprite_controller.c | 12 | ||||
-rw-r--r-- | src/engine/sprite_controller.h | 92 | ||||
-rw-r--r-- | src/engine/title_screen.c | 6 |
9 files changed, 103 insertions, 71 deletions
diff --git a/src/engine/animator.c b/src/engine/animator.c index 1af8dde..e293eb1 100644 --- a/src/engine/animator.c +++ b/src/engine/animator.c @@ -16,40 +16,26 @@ void hh_animate_hit(hh_s_rendering* in, bool hit) { } 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; + if (in->fam.tilemap_index >= start && in->fam.tilemap_index < end) { + in->fam.tilemap_index += step; } else {// rollover - in->fam.palette_index = start; + in->fam.tilemap_index = start; } } -//TODO: if entity not inside of screen, don't update idx -uint16_t hh_update_sprite(uint16_t idx, hh_entity* in, vec_cor cam) { +//TODO: if entity not inside of screen, don't update idx (problems with old idx not being overwritten anymore) +void 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++; + // if (temp.position_x != -16 && temp.position_y != -16) {// removes redundant sprites + hh_ppu_update_foreground(++*idx, temp); + temp.tilemap_index++; + // hh_animate(&in->render, start+counter,end+counter,4); + // } } } - 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 10fa321..2f6e00d 100644 --- a/src/engine/animator.h +++ b/src/engine/animator.h @@ -11,4 +11,4 @@ void hh_animate_hit(hh_s_rendering*, bool hit); void hh_animate(hh_s_rendering*, uint16_t start, uint16_t end, uint8_t step); /** @brief passively updates sprite*/ -uint16_t hh_update_sprite(uint16_t idx, hh_entity* in, vec_cor cam); +void hh_update_sprite(uint16_t* idx, hh_entity* in, vec_cor cam); diff --git a/src/engine/bullet.c b/src/engine/bullet.c index eb9a8bb..3251472 100644 --- a/src/engine/bullet.c +++ b/src/engine/bullet.c @@ -18,13 +18,13 @@ hh_entity* hh_init_bullets(int size) { .vel = (vec2){0,0}, .size = (vec2) { 13,16}, .render = { - .frame0 = 84, + .frame0 = HH_TM_BULLET_OFFSET, .palette = 3, .fam = (hh_s_ppu_loc_fam_entry){ .horizontal_flip = false, .vertical_flip = false, .palette_index = 7, - .tilemap_index = 84, + .tilemap_index = HH_TM_BULLET_OFFSET, } } }; diff --git a/src/engine/level_const.c b/src/engine/level_const.c index a6a7c84..2522814 100644 --- a/src/engine/level_const.c +++ b/src/engine/level_const.c @@ -5,6 +5,10 @@ hh_g_all_levels hh_init_game_levels(){ hh_g_all_levels levels; levels.current_level=1; + + levels.shop.size.x=40; + levels.shop.size.y=15; + levels.shop.hh_level_completed=false; levels.level[0].size.x=40; levels.level[0].size.y=100; @@ -14,9 +18,9 @@ hh_g_all_levels hh_init_game_levels(){ levels.level[1].size.y=28; levels.level[1].hh_level_completed=false; - FILE *fp = fopen("../test/bin/level1_test.bin", "rb"); + FILE *fp = fopen("static/shop_new.bin", "rb"); if (fp == NULL) { - printf("level1_test.bin not found!\n"); + printf("shop_new.bin not found!\n"); return levels; } fseek(fp, 0, SEEK_END); @@ -38,6 +42,19 @@ hh_g_all_levels hh_init_game_levels(){ fread(hh_game_level2, sizeof(int), size, lvl2); fclose(lvl2); + FILE *shop = fopen("static/shop_new.bin", "rb"); + if (shop == NULL) { + printf("shop.bin not found!\n"); + return levels; + } + fseek(shop, 0, SEEK_END); + size = ftell(shop) / sizeof(int); + fseek(shop, (0 * sizeof(int)) + sizeof(int), SEEK_SET); + int* hh_game_shop = malloc(size * sizeof(int)); + fread(hh_game_shop, sizeof(int), size, shop); + fclose(shop); + + levels.shop.place = hh_game_shop; levels.level[0].place = hh_game_level1; levels.level[1].place = hh_game_level2; diff --git a/src/engine/level_const.h b/src/engine/level_const.h index 6275b72..a17993e 100644 --- a/src/engine/level_const.h +++ b/src/engine/level_const.h @@ -23,6 +23,7 @@ typedef struct { typedef struct { hh_level_entity level[2]; + hh_level_entity shop; int current_level; diff --git a/src/engine/player_controller.c b/src/engine/player_controller.c index 5b0da99..0148792 100644 --- a/src/engine/player_controller.c +++ b/src/engine/player_controller.c @@ -5,6 +5,8 @@ #include "engine/player_controller.h" #include "input.h" +#include "static/tilemap.h" + #include "engine/animator.h" #include "engine/bullet.h" void hh_player_actions(hh_entity* player){ diff --git a/src/engine/sprite_controller.c b/src/engine/sprite_controller.c index b38b647..d386d0f 100644 --- a/src/engine/sprite_controller.c +++ b/src/engine/sprite_controller.c @@ -5,8 +5,18 @@ #include "ppu/consts.h" #include "ppu/ppu.h" +#include "static/tilemap.h" + + uint8_t hh_get_palette(uint8_t tile_idx) { - return hh_g_sprite_palette[tile_idx]; + for (int i = 0; i < HH_TM_GROUPS; i++) { + if (hh_palette_lut[i] > tile_idx){ + return hh_g_sprite_palette[i-1]; + } + } + + return 0; //not found + // return hh_g_sprite_palette[tile_idx]; } void hh_setup_palettes(){ diff --git a/src/engine/sprite_controller.h b/src/engine/sprite_controller.h index fc6d3d3..3693850 100644 --- a/src/engine/sprite_controller.h +++ b/src/engine/sprite_controller.h @@ -3,6 +3,8 @@ #include "ppu/types.h" +#include "static/tilemap.h" + // handles sprites // Bg sprites @@ -11,27 +13,29 @@ //TODO: pack data inside of sprite_palette LUT //HH_PPU_PALETTE_COUNT -#define HH_SPRITE_COUNT 80 -#define HH_PAL_IDX_SKY 512 + +#define HH_PAL_IDX_SKY 0 #define HH_PAL_IDX_BRICK 1 -const static uint8_t hh_g_sprite_palette[HH_SPRITE_COUNT] = { - //TODO: make a buffer of 16 no-collider sprites (instead of the current 1) - 0,1,1,1,1,1,1,1,1,1, //1+9 - 1,1,1,1,1,1,1,1,1,1, //6+4 - 1,1,1,1,1,1,1,1,1, //9 - 7,7,7,2,7,7,1,2,7, - 7,7,7,7, //?? +#define HH_PAL_IDX_SLIME 2 +#define HH_PAL_IDX_CRATE 4 +#define HH_PAL_IDX_SHOP 5 +#define HH_PAL_IDX_TITLE_SCREEN_ICON 3 +#define HH_PAL_IDX_FONT 6 +#define HH_PAL_IDX_DEV 7 +const static uint8_t hh_g_sprite_palette[HH_TM_GROUPS] = { + HH_PAL_IDX_SKY, + HH_PAL_IDX_BRICK, + HH_PAL_IDX_CRATE, + HH_PAL_IDX_SHOP, + // HH_PAL_IDX_SHOP, + HH_PAL_IDX_TITLE_SCREEN_ICON, + HH_PAL_IDX_FONT, + HH_PAL_IDX_SKY, + HH_PAL_IDX_DEV, + HH_PAL_IDX_SLIME, + HH_PAL_IDX_DEV + // HH_PAL_IDX_FONT - 7,6,6,6,6,6,6,6, //baskets - 7,7,7,7,7,7,7,7,7,7, //shop - 7,7,7,7,7, //shop - 6,6,6,6,6, //(hi-)score - - 3,3,3,3,3,3, //title_screen icon - 6,6,6,6,/*6,6,6,6,6,6, //title_screen large letters - 6,6,6,6,*/ - //other palettes here: - // [HH_PAL_IDX_SKY] = 0, }; @@ -47,13 +51,13 @@ const static hh_ppu_loc_palette_table_t hh_g_palette = { {0x0,0x0,0x0}}, {//Bricks {0x1,0x2,0x3},//01 - {0xd,0x8,0xa},//24 {0x0,0x0,0x1},//25 {0x1,0x1,0x1},//26 {0x1,0x1,0x2},//27 {0x2,0x2,0x3},//28 {0x3,0x4,0x5},//29 - {0x5,0x1,0x7}}, + {0x5,0x1,0x7}, + {0xd,0x8,0xa}},//24 {//slime {0x1,0x2,0x3}, {0x1,0x3,0x2}, @@ -69,27 +73,35 @@ const static hh_ppu_loc_palette_table_t hh_g_palette = { {0x4,0x2,0x5}, {0x7,0x3,0x7}, {0xe,0xe,0xe}, - {0xe,0xe,0xe}, //elemental - {0x0,0x0,0x0}, - {0x0,0x0,0x0}}, - { - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}}, - {//elemental - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, - {0x0,0x0,0x0}, + {0x7,0x2,0x3}, //elemental + {0xc,0x5,0x3}, + {0xe,0xc,0x7}}, + {//crates + {0x5,0x7,0x7}, + {0x3,0x1,0x2}, + {0x6,0x2,0x2}, + {0x7,0x4,0x4}, + {0xa,0x7,0x5}, {0x0,0x0,0x0}, {0x0,0x0,0x0}, {0x0,0x0,0x0}}, + {//shop + // {0x1,0x2,0x3}, + // {0x0,0x0,0x1}, + // {0x0,0x0,0x0}, + // {0x0,0x0,0x0}, + // {0x0,0x0,0x0}, + // {0x0,0x0,0x0}, + // {0x0,0x0,0x0}, + // {0x0,0x0,0x0}}, + {0x1, 0x2, 0x3},//0 + {0x0, 0x0, 0x1},//1 + {0x6, 0x2, 0x2},//2 + {0x7, 0x4, 0x4},//3 + {0xc, 0x9, 0x7},//4 + {0xd, 0xb, 0x9},//5 + {0x3, 0x4, 0x5},//6 + {0x8, 0x9, 0x9}}, {//white {0x1,0x2,0x3}, {0xf,0xf,0xf}, @@ -112,7 +124,9 @@ const static hh_ppu_loc_palette_table_t hh_g_palette = { void hh_setup_palettes(); +//TODO: UPDATE THIS FUNCTION /** @brief return palette index that belongs to tilemap index */ uint8_t hh_get_palette(uint8_t tile_idx); +//TODO: UPDATE THIS FUNCTION bool hh_colidable(uint8_t tile_idx); diff --git a/src/engine/title_screen.c b/src/engine/title_screen.c index 9c7ed48..1e9e586 100644 --- a/src/engine/title_screen.c +++ b/src/engine/title_screen.c @@ -2,6 +2,8 @@ #include "ppu/types.h" #include "ppu/consts.h" +#include "static/tilemap.h" + #include "engine/draw_screen.h" #include "engine/entity.h" @@ -12,7 +14,7 @@ void hh_init_title_screen(){ //send data uint8_t idx = 0; - const uint8_t tilemap_offset = 59; + const uint8_t tilemap_offset = HH_TM_TITLE_SCREEN_ICON_OFFSET; int tiles_h = HH_PPU_BG_CANVAS_TILES_H; int vp_h = HH_PPU_SCREEN_WIDTH/HH_PPU_SPRITE_WIDTH; //screen_h in tiles int vert_offset = tiles_h*3; @@ -45,7 +47,7 @@ void hh_init_title_screen(){ } - const uint8_t letters_offset = 66; + const uint8_t letters_offset = HH_TM_TITLE_SCREEN_LETTERES_LARGE_OFFSET; const int _size_hooded = 7, _size_v = 2; // char* hh = "hooded"; |