Files
Bubberstation/code/modules/hallucination/hazard.dm
MrMelbert 73d108025f Adds wibbles to certain anomalous entities (#79549)
## About The Pull Request

Adds wibble animation to portals, some anomalies, and bluespace rifts.


https://github.com/tgstation/tgstation/assets/51863163/9355dc53-590e-4558-82a3-15145829ce16

## Why It's Good For The Game

It looks kinda cool.
Helps cement these as anomalous, wacky things that don't necessarily fit
in our plane of existence.

## Changelog

🆑 Melbert
add: Anomalies, portals, and bluespace rifts will now wibble a bit. 
/🆑
2023-11-07 17:41:42 -07:00

107 lines
4.1 KiB
Plaintext

/// Hallucinations that create a hazard somewhere nearby that actually has a danger associated.
/datum/hallucination/hazard
abstract_hallucination_parent = /datum/hallucination/hazard
random_hallucination_weight = 5
/// The type of effect we create
var/hazard_type = /obj/effect/client_image_holder/hallucination/danger
/datum/hallucination/hazard/start()
var/list/possible_points = list()
for(var/turf/open/floor/floor_in_view in view(hallucinator))
possible_points += floor_in_view
if(!length(possible_points))
return FALSE
new hazard_type(pick(possible_points), hallucinator, src)
QDEL_IN(src, rand(20 SECONDS, 45 SECONDS))
return TRUE
/datum/hallucination/hazard/lava
hazard_type = /obj/effect/client_image_holder/hallucination/danger/lava
/datum/hallucination/hazard/chasm
hazard_type = /obj/effect/client_image_holder/hallucination/danger/chasm
/datum/hallucination/hazard/anomaly
hazard_type = /obj/effect/client_image_holder/hallucination/danger/anomaly
/// These hallucination effects cause side effects when the hallucinator walks into them.
/obj/effect/client_image_holder/hallucination/danger
image_layer = TURF_LAYER
/obj/effect/client_image_holder/hallucination/danger/Initialize(mapload, list/mobs_which_see_us, datum/hallucination/parent)
. = ..()
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(atom_touched_holder),
COMSIG_ATOM_EXITED = PROC_REF(atom_touched_holder),
)
AddElement(/datum/element/connect_loc, loc_connections)
/obj/effect/client_image_holder/hallucination/danger/proc/atom_touched_holder(datum/source, atom/movable/entered)
SIGNAL_HANDLER
if(!(entered in who_sees_us))
return
on_hallucinator_entered(entered)
/// Applies effects whenever the hallucinator enters the turf with our hallucination present.
/obj/effect/client_image_holder/hallucination/danger/proc/on_hallucinator_entered(mob/living/afflicted)
return
/obj/effect/client_image_holder/hallucination/danger/lava
name = "lava"
image_icon = 'icons/turf/floors/lava.dmi'
/obj/effect/client_image_holder/hallucination/danger/lava/generate_image()
var/turf/danger_turf = get_turf(src)
image_state = "lava-[danger_turf.smoothing_junction || 0]"
return ..()
/obj/effect/client_image_holder/hallucination/danger/lava/on_hallucinator_entered(mob/living/afflicted)
afflicted.adjustStaminaLoss(20)
afflicted.cause_hallucination(/datum/hallucination/fire, "fake lava hallucination")
/obj/effect/client_image_holder/hallucination/danger/chasm
name = "chasm"
image_icon = 'icons/turf/floors/chasms.dmi'
/obj/effect/client_image_holder/hallucination/danger/chasm/generate_image()
var/turf/danger_turf = get_turf(src)
image_state = "chasms-[danger_turf.smoothing_junction || 0]"
return ..()
/obj/effect/client_image_holder/hallucination/danger/chasm/on_hallucinator_entered(mob/living/afflicted)
to_chat(afflicted, span_userdanger("You fall into the chasm!"))
afflicted.visible_message(span_warning("[afflicted] falls to the ground suddenly!"), ignored_mobs = afflicted)
afflicted.Paralyze(4 SECONDS)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), afflicted, span_notice("...It's surprisingly shallow.")), 1.5 SECONDS)
QDEL_IN(src, 3 SECONDS)
/obj/effect/client_image_holder/hallucination/danger/anomaly
name = "flux wave anomaly"
image_icon = 'icons/effects/anomalies.dmi'
image_state = "flux"
image_layer = OBJ_LAYER + 0.01
/obj/effect/client_image_holder/hallucination/danger/anomaly/generate_image()
. = ..()
apply_wibbly_filters(.)
/obj/effect/client_image_holder/hallucination/danger/anomaly/Initialize(mapload, list/mobs_which_see_us, datum/hallucination/parent)
. = ..()
START_PROCESSING(SSobj, src)
/obj/effect/client_image_holder/hallucination/danger/anomaly/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/effect/client_image_holder/hallucination/danger/anomaly/process(seconds_per_tick)
if(SPT_PROB(ANOMALY_MOVECHANCE, seconds_per_tick))
step(src, pick(GLOB.alldirs))
/obj/effect/client_image_holder/hallucination/danger/anomaly/on_hallucinator_entered(mob/living/afflicted)
afflicted.cause_hallucination(/datum/hallucination/shock, "fake anomaly hallucination")