mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-27 09:31:54 +00:00
* Basic mobs can emote when they get a new target (#76654) ## About The Pull Request  Fixes #76624 Restores lost functionality for a mob to play an emote when it acquires a new target. Also I added a generic blackboard key change signal which could potentially have other uses in the future. ## Why It's Good For The Game It's good feedback to know when a mob has chosen to target something. ## Changelog 🆑 fix: Carp, Trees, and Festivus Poles will once more sometimes emote at you if they think you are looking at them the wrong way, before they come over to beat you up. /🆑 * Basic mobs can emote when they get a new target --------- Co-authored-by: Jacquerel <hnevard@gmail.com>
117 lines
3.5 KiB
Plaintext
117 lines
3.5 KiB
Plaintext
/mob/living/basic/tree
|
|
name = "pine tree"
|
|
desc = "A pissed off tree-like alien. It seems annoyed with the festivities..."
|
|
icon = 'icons/obj/fluff/flora/pinetrees.dmi'
|
|
icon_state = "pine_1"
|
|
icon_living = "pine_1"
|
|
icon_dead = "pine_1"
|
|
icon_gib = "pine_1"
|
|
health_doll_icon = "pine_1"
|
|
mob_biotypes = MOB_ORGANIC | MOB_PLANT
|
|
gender = NEUTER
|
|
gold_core_spawnable = HOSTILE_SPAWN
|
|
basic_mob_flags = DEL_ON_DEATH
|
|
|
|
response_help_continuous = "brushes"
|
|
response_help_simple = "brush"
|
|
response_disarm_continuous = "pushes"
|
|
response_disarm_simple = "push"
|
|
|
|
mob_size = MOB_SIZE_LARGE
|
|
pixel_x = -16
|
|
base_pixel_x = -16
|
|
|
|
speed = 1
|
|
maxHealth = 250
|
|
health = 250
|
|
melee_damage_lower = 8
|
|
melee_damage_upper = 12
|
|
attack_verb_continuous = "bites"
|
|
attack_verb_simple = "bite"
|
|
attack_sound = 'sound/weapons/bite.ogg'
|
|
attack_vis_effect = ATTACK_EFFECT_BITE
|
|
|
|
faction = list(FACTION_HOSTILE)
|
|
speak_emote = list("pines")
|
|
|
|
habitable_atmos = list("min_oxy" = 2, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
|
unsuitable_atmos_damage = 2.5
|
|
minimum_survivable_temperature = 0
|
|
maximum_survivable_temperature = 1200
|
|
|
|
death_message = "is hacked into pieces!"
|
|
|
|
ai_controller = /datum/ai_controller/basic_controller/tree
|
|
|
|
///items that make us angry
|
|
var/list/infuriating_objects = list(/obj/item/chainsaw, /obj/item/hatchet, /obj/item/stack/sheet/mineral/wood)
|
|
///chance of target getting paralyzed
|
|
var/paralyze_prob = 15
|
|
///for how the target is paralyzed
|
|
var/paralyze_value = 5 SECONDS
|
|
///Additional paralyze chance
|
|
var/anger_boost = 50
|
|
|
|
/mob/living/basic/tree/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/swabable, CELL_LINE_TABLE_PINE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
|
|
AddElement(/datum/element/death_drops, list(/obj/item/stack/sheet/mineral/wood))
|
|
AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20)
|
|
|
|
/mob/living/basic/tree/Life(seconds_per_tick = SSMOBS_DT, times_fired)
|
|
..()
|
|
if(!isopenturf(loc))
|
|
return
|
|
var/turf/open/our_turf = src.loc
|
|
if(!our_turf.air || !our_turf.air.gases[/datum/gas/carbon_dioxide])
|
|
return
|
|
|
|
var/co2 = our_turf.air.gases[/datum/gas/carbon_dioxide][MOLES]
|
|
if(co2 > 0 && SPT_PROB(13, seconds_per_tick))
|
|
var/amt = min(co2, 9)
|
|
our_turf.air.gases[/datum/gas/carbon_dioxide][MOLES] -= amt
|
|
our_turf.atmos_spawn_air("[GAS_O2]=[amt]")
|
|
|
|
/mob/living/basic/tree/melee_attack(atom/target, list/modifiers)
|
|
. = ..()
|
|
|
|
if(!.)
|
|
return
|
|
|
|
if(!isliving(target))
|
|
return
|
|
|
|
var/mob/living/victim = target
|
|
var/boost = 0
|
|
if(iscarbon(victim))
|
|
for(var/item_path in infuriating_objects)
|
|
if(locate(item_path) in victim.held_items)
|
|
boost = anger_boost
|
|
break
|
|
|
|
if(prob(paralyze_prob + boost))
|
|
victim.Paralyze(paralyze_value + boost)
|
|
victim.visible_message(
|
|
span_danger("[src] knocks down [victim]!"),
|
|
span_userdanger("[src] knocks you down!"),
|
|
)
|
|
|
|
/datum/ai_controller/basic_controller/tree
|
|
blackboard = list(
|
|
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(),
|
|
)
|
|
|
|
ai_movement = /datum/ai_movement/basic_avoidance
|
|
idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/simple_find_target,
|
|
/datum/ai_planning_subtree/basic_melee_attack_subtree/tree,
|
|
/datum/ai_planning_subtree/random_speech/tree,
|
|
)
|
|
|
|
/datum/ai_planning_subtree/basic_melee_attack_subtree/tree
|
|
melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/tree
|
|
|
|
/datum/ai_behavior/basic_melee_attack/tree
|
|
action_cooldown = 2 SECONDS
|