Files
carlarctgandGitHub 6c30a0179b Adds the Perceptomatrix Helm, a hallucination anomaly core item. (#87701)
## About The Pull Request

Changes the color of hallucination cores from red (?) to hot pink.

Adds the Perceptomatrix Helm, a hallucination anomaly core item.


![image](https://github.com/user-attachments/assets/d1b37313-f141-4638-b950-7d58556dbf8d)

This helmet shields the user's brain from all external stimuli while
creating a 1:1 replica of it, beamed straight into their mind. What this
means in practice is that the user's perception is hypercharged and
their brain shielded from psychic phenomena.

The sprite is a resprited marine helmet. It's mid and I don't like it
but I'm not a spriter.

List of effects:
Perception:
- Flash/Weld Immunity
- True Night Vision
- Blindness and blurriness immunity
- Expanded FOV

Brain Shielding:
- Perceptual Trauma Immunity
- Hallucination Immunity

Psyshield:
- Conversion and Mindswap Immunity
- Magical Mind Resistance (Much more limited than normal resistance)
- Technically counts as casting clothes

Additionally, you can an ability to invoke hallucinations on others on a
25-second cooldown.

![image](https://github.com/user-attachments/assets/7dd4eaba-90ba-4e67-a302-2aae844009a7)
## Why It's Good For The Game

I'm kinda tired of half the anomaly cores in the game having jack and
shit going for them. I also think there's a moderate lack of psychic
content in the game, so here we go.

### Yeah this is cool but like isn't it kinda fucking nuts? Holy shit
dude

Let's dissect this.

> Perception:
> - Flash/Weld Immunity
> - True Night Vision
> - Blindness and blurriness immunity
> - Expanded FOV

This part effectively amounts to nothing but night vision sunglasses.

> Brain Shielding:
> - Perceptual Trauma Immunity
> - Hallucination Immunity

This isn't all that impactful, either. Hallucination immunity is
immensely irrelevant. Perceptual trauma immunity, which means you ignore
effects like blindness or imaginary friends, is very, very niche.

> Psyshield:
> - Conversion and Mindswap Immunity
> - Magical Mind Resistance (Much more limited than normal resistance)
> - Technically counts as casting clothes

Basically just having a mindshield, and that only if you don't get it
taken off anyways. Mindswap immunity could be nice, that's really not
something you can even get otherwise.
Magical mind resistance isn't very good. It blocks mind reading,
nullblade sneak attacks, eye of god, many forms of telepathy, psyker
magic, the curse of madness, the curse of babel, and that's about it.
It's nice, but it won't stop a fireball.

A lot of this can in the end be duplicated with sunglasses &
oculine/mesons and welding protection, and a tinfoil hat, which is
partly why I added the ability. It staggers for a small duration and
causes hallucinations, and it's pretty fun to use, despite its effects
being rather understated.
2024-11-15 18:25:25 +00:00

57 lines
2.2 KiB
Plaintext

/// This number is multiplied by the duration remaining (IN SECONDS, NOT DECISECONDS)
/// of the eye blur status effect to determine the intensity of the blur on the user
#define BLUR_DURATION_TO_INTENSITY 0.05
/// Applies a blur to the user's screen, increasing in strength depending on duration remaining.
/datum/status_effect/eye_blur
id = "eye_blur"
tick_interval = 1 SECONDS
alert_type = null
remove_on_fullheal = TRUE
/datum/status_effect/eye_blur/on_creation(mob/living/new_owner, duration = 10 SECONDS)
src.duration = duration
return ..()
/datum/status_effect/eye_blur/on_apply()
if(owner.mob_biotypes & (MOB_ROBOTIC|MOB_SPIRIT|MOB_SPECIAL))
return FALSE
// Refresh the blur when a client jumps into the mob, in case we get put on a clientless mob with no hud
RegisterSignals(owner, list(COMSIG_MOB_LOGIN, SIGNAL_ADDTRAIT(TRAIT_SIGHT_BYPASS), SIGNAL_REMOVETRAIT(TRAIT_SIGHT_BYPASS)), PROC_REF(update_blur))
// Apply initial blur
update_blur()
return TRUE
/datum/status_effect/eye_blur/on_remove()
UnregisterSignal(owner, COMSIG_MOB_LOGIN)
if(!owner.hud_used)
return
var/atom/movable/plane_master_controller/game_plane_master_controller = owner.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
game_plane_master_controller.remove_filter("eye_blur")
/datum/status_effect/eye_blur/tick(seconds_between_ticks)
// Blur lessens the closer we are to expiring, so we update per tick.
update_blur()
/// Updates the blur of the owner of the status effect.
/// Also a signal proc for [COMSIG_MOB_LOGIN], to trigger then when the mob gets a client.
/datum/status_effect/eye_blur/proc/update_blur(datum/source)
SIGNAL_HANDLER
if(!owner.hud_used)
return
var/atom/movable/plane_master_controller/game_plane_master_controller = owner.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
if(HAS_TRAIT(owner, TRAIT_SIGHT_BYPASS))
game_plane_master_controller.remove_filter("eye_blur")
return
var/time_left_in_seconds = (duration - world.time) / (1 SECONDS)
var/amount_of_blur = clamp(time_left_in_seconds * BLUR_DURATION_TO_INTENSITY, 0.6, 3)
game_plane_master_controller.add_filter("eye_blur", 1, gauss_blur_filter(amount_of_blur))
#undef BLUR_DURATION_TO_INTENSITY