mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
100 lines
4.0 KiB
Plaintext
100 lines
4.0 KiB
Plaintext
/**
|
|
* A funny little rolling guy who is great at scouting.
|
|
* It can see through walls, jaunt, and create a psychic network to report its findings.
|
|
* It can blind people to make a getaway, but also get stronger if it attacks the same target consecutively.
|
|
*/
|
|
/mob/living/basic/heretic_summon/raw_prophet
|
|
name = "\improper Raw Prophet"
|
|
real_name = "Raw Prophet"
|
|
desc = "An abomination stitched together from a few severed arms and one swollen, orphaned eye."
|
|
icon_state = "raw_prophet"
|
|
icon_living = "raw_prophet"
|
|
status_flags = CANPUSH
|
|
melee_damage_lower = 5
|
|
melee_damage_upper = 10
|
|
maxHealth = 65
|
|
health = 65
|
|
sight = SEE_MOBS|SEE_OBJS|SEE_TURFS
|
|
/// List of innate abilities we have to add.
|
|
var/static/list/innate_abilities = list(
|
|
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/long = null,
|
|
/datum/action/cooldown/spell/list_target/telepathy/eldritch = null,
|
|
/datum/action/innate/expand_sight = null,
|
|
)
|
|
|
|
/mob/living/basic/heretic_summon/raw_prophet/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/wheel)
|
|
var/static/list/body_parts = list(/obj/effect/gibspawner/human, /obj/item/bodypart/arm/left, /obj/item/organ/eyes)
|
|
AddElement(/datum/element/death_drops, body_parts)
|
|
AddComponent(/datum/component/focused_attacker)
|
|
var/on_link_message = "You feel something new enter your sphere of mind... \
|
|
You hear whispers of people far away, screeches of horror and a huming of welcome to [src]'s Mansus Link."
|
|
var/on_unlink_message = "Your mind shatters as [src]'s Mansus Link leaves your mind."
|
|
AddComponent( \
|
|
/datum/component/mind_linker/active_linking, \
|
|
network_name = "Mansus Link", \
|
|
chat_color = "#568b00", \
|
|
post_unlink_callback = CALLBACK(src, PROC_REF(after_unlink)), \
|
|
speech_action_background_icon_state = "bg_heretic", \
|
|
speech_action_overlay_state = "bg_heretic_border", \
|
|
linker_action_path = /datum/action/cooldown/spell/pointed/manse_link, \
|
|
link_message = on_link_message, \
|
|
unlink_message = on_unlink_message, \
|
|
)
|
|
|
|
grant_actions_by_list(get_innate_abilities())
|
|
|
|
/// Returns a list of abilities that we should add.
|
|
/mob/living/basic/heretic_summon/raw_prophet/proc/get_innate_abilities()
|
|
var/list/returnable_list = innate_abilities.Copy()
|
|
returnable_list += list(/datum/action/cooldown/spell/pointed/blind/eldritch = BB_TARGETED_ACTION)
|
|
return returnable_list
|
|
|
|
/*
|
|
* Callback for the mind_linker component.
|
|
* Stuns people who are ejected from the network.
|
|
*/
|
|
/mob/living/basic/heretic_summon/raw_prophet/proc/after_unlink(mob/living/unlinked_mob)
|
|
if(QDELETED(unlinked_mob) || unlinked_mob.stat == DEAD)
|
|
return
|
|
|
|
INVOKE_ASYNC(unlinked_mob, TYPE_PROC_REF(/mob, emote), "scream")
|
|
unlinked_mob.AdjustParalyzed(0.5 SECONDS) //micro stun
|
|
|
|
/mob/living/basic/heretic_summon/raw_prophet/melee_attack(atom/target, list/modifiers, ignore_cooldown)
|
|
SpinAnimation(speed = 5, loops = 1)
|
|
if (target == src)
|
|
return
|
|
return ..()
|
|
|
|
/// Variant raw prophet used by eldritch transformation with more base attack power
|
|
/mob/living/basic/heretic_summon/raw_prophet/ascended
|
|
melee_damage_lower = 15
|
|
melee_damage_upper = 20
|
|
|
|
/// NPC variant with a less bullshit ability
|
|
/mob/living/basic/heretic_summon/raw_prophet/ruins
|
|
ai_controller = /datum/ai_controller/basic_controller/raw_prophet
|
|
|
|
/mob/living/basic/heretic_summon/raw_prophet/ruins/get_innate_abilities()
|
|
var/list/returnable_list = innate_abilities.Copy()
|
|
returnable_list += list(/datum/action/cooldown/mob_cooldown/watcher_gaze = BB_TARGETED_ACTION)
|
|
return returnable_list
|
|
|
|
/// Walk and attack people, blind them when we can
|
|
/datum/ai_controller/basic_controller/raw_prophet
|
|
blackboard = list(
|
|
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
|
|
)
|
|
|
|
ai_movement = /datum/ai_movement/basic_avoidance
|
|
idle_behavior = /datum/idle_behavior/idle_random_walk
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/escape_captivity,
|
|
/datum/ai_planning_subtree/simple_find_target,
|
|
/datum/ai_planning_subtree/targeted_mob_ability,
|
|
/datum/ai_planning_subtree/attack_obstacle_in_path,
|
|
/datum/ai_planning_subtree/basic_melee_attack_subtree,
|
|
)
|