aboutsummaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/animator.c26
-rw-r--r--src/engine/enemy_ai.c13
-rw-r--r--src/engine/entity.c5
-rw-r--r--src/engine/player_controller.c4
-rw-r--r--src/engine/sprite_controller.h3
-rw-r--r--src/engine/types.h6
6 files changed, 49 insertions, 8 deletions
diff --git a/src/engine/animator.c b/src/engine/animator.c
index 71d0582..f188096 100644
--- a/src/engine/animator.c
+++ b/src/engine/animator.c
@@ -6,21 +6,38 @@
#define hh_white_palette 6
+#define hh_animate_cycle 4
void hh_animate_hit(hh_s_rendering* in, bool hit) {
if (hit) {
in->fam.palette_index = hh_white_palette;
- } else {
+ in->cooldown = hh_animate_cycle;
+ } else if(in->cooldown == 0) {
in->fam.palette_index = in->palette;
+ } else {
+ if (in->cooldown > 0) {
+ in->cooldown--;
+ }
}
}
void hh_animate(hh_s_rendering* in, uint16_t start, uint16_t end, uint8_t step) {
- if (in->fam.tilemap_index >= start && in->fam.tilemap_index < end) {
- in->fam.tilemap_index += step;
- } else {// rollover
+ if (in->fam.tilemap_index < start) {//check for sudden animation change
in->fam.tilemap_index = start;
+ in->cooldown = hh_animate_cycle;
+ } else {
+ if (in->cooldown-- == 0) {
+
+ if (in->fam.tilemap_index < end) {
+ in->fam.tilemap_index += step;
+ } else {// rollover
+ in->fam.tilemap_index = start;
+ }
+ in->cooldown = hh_animate_cycle;
+ }
+
}
+
}
//TODO: if entity not inside of screen, don't update idx (problems with old idx not being overwritten anymore)
@@ -45,5 +62,4 @@ void hh_show_quad(uint16_t *idx, hh_s_rendering* in) {
temp.position_y = CLAMP(in->fam.position_y, -16, HH_PPU_SCREEN_HEIGHT);
temp.position_x = CLAMP(in->fam.position_x, -16, HH_PPU_SCREEN_WIDTH);
hh_ppu_update_foreground(++*idx, temp);
- temp.tilemap_index++;
}
diff --git a/src/engine/enemy_ai.c b/src/engine/enemy_ai.c
index 81d04d9..974de9e 100644
--- a/src/engine/enemy_ai.c
+++ b/src/engine/enemy_ai.c
@@ -34,9 +34,15 @@ void hh_slime_ai(hh_entity* enemy, hh_entity player){
hh_gravity_entity(enemy);
hh_update_enemy_movement(enemy);
+ hh_animate(&enemy->render,
+ HH_TM_SLIME_JUMPABLE_OFFSET ,
+ HH_TM_SLIME_JUMPABLE_OFFSET + 3,1
+ );
+
}
void hh_jump_slime_ai(hh_entity* enemy, hh_entity player){
+ bool jumped = false;
int8_t direction = hh_get_direction(player.pos.x, enemy->pos.x);
hh_gravity_entity(enemy);
if((player.pos.x - enemy->pos.x) >= -hunt_player && (player.pos.x - enemy->pos.x) <= hunt_player){
@@ -44,11 +50,16 @@ void hh_jump_slime_ai(hh_entity* enemy, hh_entity player){
// TODO: fix this if statement and make it cleaner. this makes the enemy jump when the player mets the condition
if((player.pos.y - enemy->pos.y) < -16 && (player.pos.y - enemy->pos.y) >= -100 && (player.pos.x - enemy->pos.x) >= -10 && (player.pos.x - enemy->pos.x) <= 10){
hh_jump_entity(enemy);
+ jumped = true;
}
}
-
+ hh_animate(&enemy->render,
+ HH_TM_SLIME_JUMPABLE_OFFSET + (jumped?4:0),
+ HH_TM_SLIME_JUMPABLE_OFFSET + (enemy->render.fam.tilemap_index>=HH_TM_SLIME_JUMPABLE_OFFSET+5 ? 7 : 3),1
+ );
hh_update_enemy_movement(enemy);
+
}
#define terror_owl_attack_timer 100
#define terror_owl_follow_player_delay 5
diff --git a/src/engine/entity.c b/src/engine/entity.c
index eba6481..4bf1b60 100644
--- a/src/engine/entity.c
+++ b/src/engine/entity.c
@@ -173,7 +173,9 @@ void hh_jump_entity(hh_entity* object_1){
}
void hh_gravity_entity(hh_entity* object_1){
if (object_1->is_grounded == false) {
- object_1->vel.y += 1; //gravity
+ if(object_1->vel.y < 15) {
+ object_1->vel.y += 1; //gravity
+ }
}
}
@@ -181,6 +183,7 @@ void hh_movement_entity(hh_entity* object_1, int8_t* direction){
if(direction != 0){
if(object_1->vel.x > -1 * object_1->speed && object_1->vel.x < object_1->speed) {
object_1->vel.x = object_1->vel.x + direction;
+ object_1->render.fam.horizontal_flip=(object_1->vel.x>0?0:1);// flips direction of object_1
} else {
if (object_1->vel.x > 0) {
object_1->vel.x--;
diff --git a/src/engine/player_controller.c b/src/engine/player_controller.c
index 0148792..7e2e678 100644
--- a/src/engine/player_controller.c
+++ b/src/engine/player_controller.c
@@ -37,6 +37,10 @@ void hh_player_actions(hh_entity* player){
*player = hh_background_collision ( *player, player_new);
+
+ if (direction_x != 0) {
+ player->render.fam.horizontal_flip = (direction_x > 0 ?0:1);
+ }
}
diff --git a/src/engine/sprite_controller.h b/src/engine/sprite_controller.h
index 93a2aaf..7467289 100644
--- a/src/engine/sprite_controller.h
+++ b/src/engine/sprite_controller.h
@@ -18,6 +18,7 @@
#define HH_PAL_IDX_BRICK 1
#define HH_PAL_IDX_SLIME 2
#define HH_PAL_IDX_HUD 2
+#define HH_PAL_IDX_UPGRADE 2
#define HH_PAL_IDX_BULLET 3
#define HH_PAL_IDX_GOZER 3
#define HH_PAL_IDX_TITLE_SCREEN_ICON 3
@@ -35,7 +36,7 @@ const static uint8_t hh_g_sprite_palette[HH_TM_GROUPS] = {
HH_PAL_IDX_TITLE_SCREEN_ICON,
HH_PAL_IDX_TITLE_SCREEN_ICON,
HH_PAL_IDX_HUD,
- HH_PAL_IDX_HUD,
+ HH_PAL_IDX_UPGRADE,
HH_PAL_IDX_BULLET,
HH_PAL_IDX_GOZER,
HH_PAL_IDX_SLIME,
diff --git a/src/engine/types.h b/src/engine/types.h
index 5fc80fa..ba41ca7 100644
--- a/src/engine/types.h
+++ b/src/engine/types.h
@@ -26,10 +26,16 @@ typedef struct {
hh_s_ppu_loc_fam_entry fam; //screen
uint16_t frame0;
uint16_t palette;
+ uint16_t cooldown;
}hh_s_rendering;
typedef struct {
+ uint8_t* start, len;
+}hh_s_animations;
+
+
+typedef struct {
vec2 pos, vel, size;
bool is_grounded;
bool is_hit;