mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 03:57:48 +01:00
Anomaly xenoarch effect + Bioscrambler fixes (#19640)
* Anomaly stuff * spacing
This commit is contained in:
@@ -48,6 +48,17 @@
|
||||
#define WEATHER_ANOMALY "weather_anomaly"
|
||||
#define DUST_ANOMALY "dust_anomaly"
|
||||
|
||||
#define ANOMALY_ALL list( \
|
||||
GRAVITATIONAL_ANOMALY, \
|
||||
FLUX_ANOMALY, \
|
||||
PYRO_ANOMALY, \
|
||||
BIOSCRAMBLER_ANOMALY, \
|
||||
HALLUCINATION_ANOMALY, \
|
||||
DIMENSIONAL_ANOMALY, \
|
||||
WEATHER_ANOMALY, \
|
||||
DUST_ANOMALY \
|
||||
)
|
||||
|
||||
#define ANOMALY_PARTICLE_SIGMA "Sigma particles"
|
||||
#define ANOMALY_PARTICLE_DELTA "Delta particles"
|
||||
#define ANOMALY_PARTICLE_ZETA "Zeta particles"
|
||||
|
||||
@@ -116,3 +116,4 @@
|
||||
#define EFFECT_HEALTH 21
|
||||
#define EFFECT_GENERATOR 22
|
||||
#define EFFECT_DNASWITCH 23
|
||||
#define EFFECT_ANOMALY 24
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
if(HALLUCINATION_ANOMALY)
|
||||
new /obj/effect/anomaly/hallucination/supermatter(local_turf, has_changed_lifespan ? rand(15 SECONDS, 25 SECONDS) : null, drops_core)
|
||||
if(BIOSCRAMBLER_ANOMALY)
|
||||
new /obj/effect/anomaly/bioscrambler/docile(local_turf, null, drops_core)
|
||||
new /obj/effect/anomaly/bioscrambler(local_turf, null, drops_core)
|
||||
if(DIMENSIONAL_ANOMALY)
|
||||
new /obj/effect/anomaly/dimensional(local_turf, null, drops_core)
|
||||
if(WEATHER_ANOMALY)
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
playsound(src, 'sound/effects/cosmic_energy.ogg', vol = 50, vary = TRUE)
|
||||
COOLDOWN_START(src, pulse_cooldown, pulse_delay)
|
||||
for(var/mob/living/carbon/human/nearby in viewers(range, src))
|
||||
if(nearby.isSynthetic() || nearby.species.flags & NO_DNA)
|
||||
continue
|
||||
var/susceptibility = GetAnomalySusceptibility(nearby)
|
||||
if(prob(susceptibility * 100))
|
||||
randmutb(nearby)
|
||||
@@ -73,9 +75,14 @@
|
||||
continue
|
||||
if(SEND_SIGNAL(target, COMSIG_CHECK_FOR_GODMODE) & COMSIG_GODMODE_CANCEL)
|
||||
continue
|
||||
if(target.isSynthetic() || target.species.flags & NO_DNA)
|
||||
continue
|
||||
if(target.is_incorporeal())
|
||||
continue
|
||||
if(target.stat >= UNCONSCIOUS)
|
||||
continue
|
||||
if(istype(get_area(target), /area/crew_quarters))
|
||||
var/area/target_area = get_area(target)
|
||||
if(target_area.flag_check(AREA_FORBID_EVENTS))
|
||||
continue
|
||||
var/distance_from_target = get_dist(src, target)
|
||||
if(distance_from_target >= closest_distance)
|
||||
|
||||
@@ -175,6 +175,8 @@
|
||||
. += "drain the blood of subjects, creating creatures or anomalous artifacts in the process"
|
||||
if(EFFECT_DNASWITCH)
|
||||
. += "mutate the cells of the organism that touches it, resulting in rampant mutations"
|
||||
if(EFFECT_ANOMALY)
|
||||
. += "emit strange, anomalous energies"
|
||||
else
|
||||
. += "have no previously-known anomalous properties"
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/datum/artifact_effect/anomaly
|
||||
name = "Anomalous Energies"
|
||||
effect_type = EFFECT_ANOMALY
|
||||
|
||||
effect_color = "#d400ff"
|
||||
var/active = TRUE
|
||||
var/delay = 2 MINUTES
|
||||
|
||||
/datum/artifact_effect/anomaly/DoEffectTouch(mob/user)
|
||||
var/atom/holder = get_master_holder()
|
||||
if(!active)
|
||||
return
|
||||
if(holder)
|
||||
var/turf/holder_loc
|
||||
if(istype(holder, /obj/item/anobattery))
|
||||
holder = holder.loc
|
||||
if(istype(holder, /obj/item/anodevice))
|
||||
holder = holder.loc
|
||||
holder_loc = holder.loc
|
||||
if(isturf(holder_loc))
|
||||
generate_anomaly(holder_loc, pick(ANOMALY_ALL), 2, FALSE)
|
||||
active = FALSE
|
||||
VARSET_IN(src, active, TRUE, delay * 5)
|
||||
|
||||
/datum/artifact_effect/anomaly/DoEffectAura()
|
||||
var/atom/holder = get_master_holder()
|
||||
if(!active)
|
||||
return
|
||||
if(holder)
|
||||
var/turf/holder_loc
|
||||
if(istype(holder, /obj/item/anobattery))
|
||||
holder = holder.loc
|
||||
if(istype(holder, /obj/item/anodevice))
|
||||
holder = holder.loc
|
||||
holder_loc = holder.loc
|
||||
if(isturf(holder_loc))
|
||||
for(var/i = 1, i <= 2, i++)
|
||||
generate_anomaly(holder_loc, pick(ANOMALY_ALL), 15, FALSE)
|
||||
active = FALSE
|
||||
VARSET_IN(src, active, TRUE, delay *4 )
|
||||
|
||||
/datum/artifact_effect/anomaly/DoEffectPulse()
|
||||
if(!active)
|
||||
return
|
||||
|
||||
var/datum/anomaly_placer/placer = new()
|
||||
for(var/i = 1, i <= 4, i++)
|
||||
var/area/chosen_area = placer.find_valid_area()
|
||||
generate_anomaly(placer.find_valid_turf(chosen_area), pick(ANOMALY_ALL), 1, FALSE) // EGG HUNT!!
|
||||
active = FALSE
|
||||
VARSET_IN(src, active, TRUE, delay * 2.5)
|
||||
@@ -5000,6 +5000,7 @@
|
||||
#include "code\modules\xenoarcheaology\artifacts\predefined\_predefined.dm"
|
||||
#include "code\modules\xenoarcheaology\artifacts\predefined\hungry_statue.dm"
|
||||
#include "code\modules\xenoarcheaology\effects\animate_anomaly.dm"
|
||||
#include "code\modules\xenoarcheaology\effects\anomaly.dm"
|
||||
#include "code\modules\xenoarcheaology\effects\atmospheric.dm"
|
||||
#include "code\modules\xenoarcheaology\effects\berserk.dm"
|
||||
#include "code\modules\xenoarcheaology\effects\cell.dm"
|
||||
|
||||
Reference in New Issue
Block a user