mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 18:22:14 +00:00
Monkeys can now retaliate against xenomorph and animal attacks. (#60157)
Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
@@ -515,6 +515,8 @@
|
|||||||
|
|
||||||
///from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone)
|
///from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone)
|
||||||
#define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage"
|
#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)
|
///from base of /mob/throw_item(): (atom/target)
|
||||||
#define COMSIG_MOB_THROW "mob_throw"
|
#define COMSIG_MOB_THROW "mob_throw"
|
||||||
///from base of /mob/verb/examinate(): (atom/target)
|
///from base of /mob/verb/examinate(): (atom/target)
|
||||||
|
|||||||
@@ -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_PARENT_ATTACKBY, .proc/on_attackby)
|
||||||
RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand)
|
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_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_BULLET_ACT, .proc/on_bullet_act)
|
||||||
RegisterSignal(new_pawn, COMSIG_ATOM_HITBY, .proc/on_hitby)
|
RegisterSignal(new_pawn, COMSIG_ATOM_HITBY, .proc/on_hitby)
|
||||||
RegisterSignal(new_pawn, COMSIG_LIVING_START_PULL, .proc/on_startpulling)
|
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)
|
/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,\
|
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)
|
RemoveElement(/datum/element/connect_loc_behalf, pawn, loc_connections)
|
||||||
|
|
||||||
return ..() //Run parent at end
|
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)
|
if(I.force && I.damtype != STAMINA)
|
||||||
retaliate(user)
|
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
|
SIGNAL_HANDLER
|
||||||
if(prob(MONKEY_RETALIATE_PROB))
|
if(prob(MONKEY_RETALIATE_PROB))
|
||||||
retaliate(L)
|
retaliate(user)
|
||||||
|
|
||||||
|
/datum/ai_controller/monkey/proc/on_attack_paw(datum/source, mob/living/user)
|
||||||
/datum/ai_controller/monkey/proc/on_attack_paw(datum/source, mob/living/L)
|
|
||||||
SIGNAL_HANDLER
|
SIGNAL_HANDLER
|
||||||
if(prob(MONKEY_RETALIATE_PROB))
|
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)
|
/datum/ai_controller/monkey/proc/on_bullet_act(datum/source, obj/projectile/Proj)
|
||||||
SIGNAL_HANDLER
|
SIGNAL_HANDLER
|
||||||
|
|||||||
@@ -217,6 +217,7 @@
|
|||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/mob/living/attack_animal(mob/living/simple_animal/user, list/modifiers)
|
/mob/living/attack_animal(mob/living/simple_animal/user, list/modifiers)
|
||||||
|
. = ..()
|
||||||
user.face_atom(src)
|
user.face_atom(src)
|
||||||
if(user.melee_damage_upper == 0)
|
if(user.melee_damage_upper == 0)
|
||||||
if(user != src)
|
if(user != src)
|
||||||
@@ -306,6 +307,7 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/mob/living/attack_alien(mob/living/carbon/alien/humanoid/user, list/modifiers)
|
/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))
|
if(LAZYACCESS(modifiers, RIGHT_CLICK))
|
||||||
user.do_attack_animation(src, ATTACK_EFFECT_DISARM)
|
user.do_attack_animation(src, ATTACK_EFFECT_DISARM)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
Reference in New Issue
Block a user