Monkeys can now retaliate against xenomorph and animal attacks. (#60157)

Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
Ghom
2021-07-29 12:36:43 +02:00
committed by GitHub
parent 25a1804e70
commit 393c80136d
3 changed files with 21 additions and 6 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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