mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 18:14:22 +01:00
112 lines
4.3 KiB
Plaintext
112 lines
4.3 KiB
Plaintext
/// A floating eyeball which keeps its distance and sometimes make you look away.
|
|
/mob/living/basic/mining/watcher
|
|
name = "watcher"
|
|
desc = "A levitating, monocular creature held aloft by wing-like veins. A sharp spine of crystal protrudes from its body."
|
|
icon = 'icons/mob/simple/lavaland/lavaland_monsters_wide.dmi'
|
|
icon_state = "watcher"
|
|
icon_living = "watcher"
|
|
icon_dead = "watcher_dead"
|
|
health_doll_icon = "watcher"
|
|
pixel_x = -12
|
|
base_pixel_x = -12
|
|
speak_emote = list("chimes")
|
|
speed = 3
|
|
maxHealth = 160
|
|
health = 160
|
|
melee_damage_lower = 15
|
|
melee_damage_upper = 15
|
|
attack_sound = 'sound/items/weapons/bladeslice.ogg'
|
|
attack_verb_continuous = "buffets"
|
|
attack_verb_simple = "buffet"
|
|
crusher_loot = /obj/item/crusher_trophy/watcher_wing
|
|
ai_controller = /datum/ai_controller/basic_controller/watcher
|
|
butcher_results = list(
|
|
/obj/item/stack/sheet/bone = 1,
|
|
/obj/item/stack/ore/diamond = 2,
|
|
/obj/item/stack/sheet/sinew = 2,
|
|
)
|
|
/// How often can we shoot?
|
|
var/ranged_cooldown = 3 SECONDS
|
|
/// What kind of beams we got?
|
|
var/projectile_type = /obj/projectile/temp/watcher
|
|
/// Icon state for our eye overlay
|
|
var/eye_glow = "watcher_glow"
|
|
/// Sound to play when we shoot
|
|
var/shoot_sound = 'sound/items/weapons/pierce.ogg'
|
|
/// Typepath of our gaze ability
|
|
var/gaze_attack = /datum/action/cooldown/mob_cooldown/watcher_gaze
|
|
// We attract and eat these things for some reason
|
|
var/list/wanted_objects = list(
|
|
/obj/item/stack/sheet/mineral/diamond,
|
|
/obj/item/stack/ore/diamond,
|
|
/obj/item/pen/survival,
|
|
)
|
|
|
|
/mob/living/basic/mining/watcher/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/ai_retaliate)
|
|
AddElement(/datum/element/simple_flying)
|
|
AddElement(/datum/element/content_barfer)
|
|
AddComponent(/datum/component/ai_target_timer)
|
|
AddComponent(/datum/component/basic_ranged_ready_overlay, overlay_state = eye_glow)
|
|
AddComponent(\
|
|
/datum/component/ranged_attacks,\
|
|
cooldown_time = ranged_cooldown,\
|
|
projectile_type = projectile_type,\
|
|
projectile_sound = shoot_sound,\
|
|
)
|
|
AddComponent(\
|
|
/datum/component/magnet,\
|
|
attracted_typecache = wanted_objects,\
|
|
on_contact = CALLBACK(src, PROC_REF(consume)),\
|
|
)
|
|
update_appearance(UPDATE_OVERLAYS)
|
|
|
|
var/datum/action/cooldown/mob_cooldown/watcher_gaze/gaze = new gaze_attack(src)
|
|
gaze.Grant(src)
|
|
ai_controller.set_blackboard_key(BB_GENERIC_ACTION, gaze)
|
|
AddComponent(/datum/component/revenge_ability, gaze, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]))
|
|
|
|
/mob/living/basic/mining/watcher/update_overlays()
|
|
. = ..()
|
|
if (stat == DEAD)
|
|
return
|
|
. += emissive_appearance(icon, "watcher_emissive", src, effect_type = EMISSIVE_NO_BLOOM)
|
|
. += emissive_appearance(icon, "watcher_emissive_bloom", src)
|
|
|
|
/// I love eating diamonds yum
|
|
/mob/living/basic/mining/watcher/proc/consume(atom/movable/thing)
|
|
visible_message(span_warning("[thing] seems to vanish into [src]'s body!"))
|
|
thing.forceMove(src)
|
|
|
|
/// More durable, burning projectiles
|
|
/mob/living/basic/mining/watcher/magmawing
|
|
name = "magmawing watcher"
|
|
desc = "Presented with extreme temperatures, adaptive watchers absorb heat through their circulatory wings and repurpose it as a weapon."
|
|
icon_state = "watcher_magmawing"
|
|
icon_living = "watcher_magmawing"
|
|
icon_dead = "watcher_magmawing_dead"
|
|
eye_glow = "fire_glow"
|
|
maxHealth = 175 //Compensate for the lack of slowdown on projectiles with a bit of extra health
|
|
health = 175
|
|
projectile_type = /obj/projectile/temp/watcher/magma_wing
|
|
gaze_attack = /datum/action/cooldown/mob_cooldown/watcher_gaze/fire
|
|
crusher_loot = /obj/item/crusher_trophy/blaster_tubes/magma_wing
|
|
crusher_drop_chance = 100 // There's only going to be one of these per round throw them a bone
|
|
|
|
/// Less durable, freezing projectiles
|
|
/mob/living/basic/mining/watcher/icewing
|
|
name = "icewing watcher"
|
|
desc = "Watchers which fail to absorb enough heat during their development become fragile, but share their internal chill with their enemies."
|
|
icon_state = "watcher_icewing"
|
|
icon_living = "watcher_icewing"
|
|
icon_dead = "watcher_icewing_dead"
|
|
eye_glow = "ice_glow"
|
|
maxHealth = 130
|
|
health = 130
|
|
projectile_type = /obj/projectile/temp/watcher/ice_wing
|
|
gaze_attack = /datum/action/cooldown/mob_cooldown/watcher_gaze/ice
|
|
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/bone = 1)
|
|
crusher_loot = /obj/item/crusher_trophy/watcher_wing/ice_wing
|
|
crusher_drop_chance = 100
|