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 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 45 deletions(-) create mode 100644 src/engine/animator.c create mode 100644 src/engine/animator.h create mode 100644 src/engine/types.h (limited to 'src/engine') 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; -- 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(-) (limited to 'src/engine') 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(-) (limited to 'src/engine') 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 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(-) (limited to 'src/engine') 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