diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index e3ab85a2a13..71ef8c31d15 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -515,6 +515,8 @@ ///from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone) #define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage" +///from base of /mob/living/attack_alien(): (user) +#define COMSIG_MOB_ATTACK_ALIEN "mob_attack_alien" ///from base of /mob/throw_item(): (atom/target) #define COMSIG_MOB_THROW "mob_throw" ///from base of /mob/verb/examinate(): (atom/target) diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 8060cb101b5..921a7b93d28 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -43,6 +43,8 @@ have ways of interacting with a specific mob and control it. RegisterSignal(new_pawn, COMSIG_PARENT_ATTACKBY, .proc/on_attackby) RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand) RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_PAW, .proc/on_attack_paw) + RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_ANIMAL, .proc/on_attack_animal) + RegisterSignal(new_pawn, COMSIG_MOB_ATTACK_ALIEN, .proc/on_attack_alien) RegisterSignal(new_pawn, COMSIG_ATOM_BULLET_ACT, .proc/on_bullet_act) RegisterSignal(new_pawn, COMSIG_ATOM_HITBY, .proc/on_hitby) RegisterSignal(new_pawn, COMSIG_LIVING_START_PULL, .proc/on_startpulling) @@ -58,7 +60,7 @@ have ways of interacting with a specific mob and control it. /datum/ai_controller/monkey/UnpossessPawn(destroy) UnregisterSignal(pawn, list(COMSIG_PARENT_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_LIVING_START_PULL,\ - COMSIG_LIVING_TRY_SYRINGE, COMSIG_ATOM_HULK_ATTACK, COMSIG_CARBON_CUFF_ATTEMPTED, COMSIG_MOB_MOVESPEED_UPDATED)) + COMSIG_LIVING_TRY_SYRINGE, COMSIG_ATOM_HULK_ATTACK, COMSIG_CARBON_CUFF_ATTEMPTED, COMSIG_MOB_MOVESPEED_UPDATED, COMSIG_ATOM_ATTACK_ANIMAL, COMSIG_MOB_ATTACK_ALIEN)) RemoveElement(/datum/element/connect_loc_behalf, pawn, loc_connections) return ..() //Run parent at end @@ -206,16 +208,25 @@ have ways of interacting with a specific mob and control it. if(I.force && I.damtype != STAMINA) retaliate(user) -/datum/ai_controller/monkey/proc/on_attack_hand(datum/source, mob/living/L) +/datum/ai_controller/monkey/proc/on_attack_hand(datum/source, mob/living/user) SIGNAL_HANDLER if(prob(MONKEY_RETALIATE_PROB)) - retaliate(L) + retaliate(user) - -/datum/ai_controller/monkey/proc/on_attack_paw(datum/source, mob/living/L) +/datum/ai_controller/monkey/proc/on_attack_paw(datum/source, mob/living/user) SIGNAL_HANDLER if(prob(MONKEY_RETALIATE_PROB)) - retaliate(L) + retaliate(user) + +/datum/ai_controller/monkey/proc/on_attack_animal(datum/source, mob/living/user) + SIGNAL_HANDLER + if(user.melee_damage_upper > 0 && prob(MONKEY_RETALIATE_PROB)) + retaliate(user) + +/datum/ai_controller/monkey/proc/on_attack_alien(datum/source, mob/living/user) + SIGNAL_HANDLER + if(prob(MONKEY_RETALIATE_PROB)) + retaliate(user) /datum/ai_controller/monkey/proc/on_bullet_act(datum/source, obj/projectile/Proj) SIGNAL_HANDLER diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 1150b611e55..7c943cc4442 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -217,6 +217,7 @@ return TRUE /mob/living/attack_animal(mob/living/simple_animal/user, list/modifiers) + . = ..() user.face_atom(src) if(user.melee_damage_upper == 0) if(user != src) @@ -306,6 +307,7 @@ return FALSE /mob/living/attack_alien(mob/living/carbon/alien/humanoid/user, list/modifiers) + SEND_SIGNAL(src, COMSIG_MOB_ATTACK_ALIEN, user) if(LAZYACCESS(modifiers, RIGHT_CLICK)) user.do_attack_animation(src, ATTACK_EFFECT_DISARM) return TRUE