diff --git a/src/game/objects/har.c b/src/game/objects/har.c index 45461b011..d96391c52 100644 --- a/src/game/objects/har.c +++ b/src/game/objects/har.c @@ -582,20 +582,9 @@ void har_move(object *obj) { // make sure HAR's are facing each other object *obj_enemy = game_state_find_object(obj->gs, game_state_get_player(obj->gs, h->player_id == 1 ? 0 : 1)->har_obj_id); - if(object_get_direction(obj) == object_get_direction(obj_enemy)) { - log_debug("HARS facing same direction"); - vec2i pos = object_get_pos(obj); - vec2i pos_enemy = object_get_pos(obj_enemy); - if(pos.x > pos_enemy.x) { - log_debug("HARS facing player %d LEFT", h->player_id); - object_set_direction(obj, OBJECT_FACE_LEFT); - } else { - log_debug("HARS facing player %d RIGHT", h->player_id); - object_set_direction(obj, OBJECT_FACE_RIGHT); - } - - log_debug("HARS facing enemy player %d", abs(h->player_id - 1)); - object_set_direction(obj_enemy, object_get_direction(obj) * -1); + har *h_enemy = object_get_userdata(obj_enemy); + if(h_enemy->state != STATE_FALLEN) { + har_face_enemy(obj, obj_enemy); } } else if(h->state == STATE_FALLEN || h->state == STATE_RECOIL) { float dampen = 0.2f; @@ -679,6 +668,9 @@ void har_take_damage(object *obj, const str *string, float damage, float stun) { // Save damage taken h->last_damage_value = damage; + // interrupted + h->executing_move = 0; + if(h->linked_obj) { object *linked = game_state_find_object(obj->gs, h->linked_obj); if(linked) { @@ -1541,6 +1533,9 @@ void har_tick(object *obj) { } if(h->stun_timer > 100) { har_stunned_done(obj); + object *enemy_obj = game_state_find_object( + obj->gs, game_player_get_har_obj_id(game_state_get_player(obj->gs, !h->player_id))); + har_face_enemy(obj, enemy_obj); } } diff --git a/src/game/scenes/arena.c b/src/game/scenes/arena.c index f1410da7a..c0e611c82 100644 --- a/src/game/scenes/arena.c +++ b/src/game/scenes/arena.c @@ -652,20 +652,8 @@ void arena_maybe_turn_har(int player_id, scene *scene) { game_state_find_object(scene->gs, game_player_get_har_obj_id(game_state_get_player(scene->gs, player_id))); object *obj_har2 = game_state_find_object( scene->gs, game_player_get_har_obj_id(game_state_get_player(scene->gs, other_player_id))); - if(obj_har1->pos.x > obj_har2->pos.x) { - log_debug("ARENA facing player %d LEFT", player_id); - object_set_direction(obj_har1, OBJECT_FACE_LEFT); - } else { - log_debug("ARENA facing player %d RIGHT", player_id); - object_set_direction(obj_har1, OBJECT_FACE_RIGHT); - } - // there isn;t an idle event hook, so do the best we can... - har *har2 = obj_har2->userdata; - if((har2->state == STATE_STANDING || har_is_crouching(har2) || har_is_walking(har2)) && !har2->executing_move) { - log_debug("ARENA facing player %d", other_player_id); - object_set_direction(obj_har2, object_get_direction(obj_har1) * -1); - } + har_face_enemy(obj_har1, obj_har2); } void arena_har_hook(har_event event, void *data) { @@ -713,7 +701,7 @@ void arena_har_hook(har_event event, void *data) { har2->executing_move) { // if the other HAR is jumping or recoiling, don't flip the direction. This specifically is to fix // jaguar ending up facing backwards after an overhead throw. - arena_maybe_turn_har(event.player_id, scene); + arena_maybe_turn_har(other_player_id, scene); } log_debug("LAND %u", event.player_id); break;