Files
6268313705 Repaths rigs to hardsuits (#5455)
I realized it's literally impossible to translate all of this code at
once. RIG suit code is just all over the place.

This lets me develop rigs from the ground up without conflicting with
existing code. Old rigs will therefore not be the same item or ecosystem
as new rigs.

---------

Co-authored-by: silicons <no@you.cat>
2023-05-06 01:57:53 +02:00

150 lines
4.8 KiB
Plaintext

/datum/artifact_effect
var/name = "unknown"
var/effect = EFFECT_TOUCH
var/effectrange = 4
var/trigger = TRIGGER_TOUCH
var/atom/holder
var/activated = 0
var/chargelevel = 0
var/chargelevelmax = 10
var/artifact_id = ""
var/effect_type = 0
/datum/artifact_effect/New(var/atom/location)
..()
holder = location
effect = rand(0, MAX_EFFECT)
trigger = rand(0, MAX_TRIGGER)
//this will be replaced by the excavation code later, but it's here just in case
artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]"
//random charge time and distance
switch(pick(100;1, 50;2, 25;3))
if(1)
//short range, short charge time
chargelevelmax = rand(3, 20)
effectrange = rand(1, 3)
if(2)
//medium range, medium charge time
chargelevelmax = rand(15, 40)
effectrange = rand(5, 15)
if(3)
//large range, long charge time
chargelevelmax = rand(20, 120)
effectrange = rand(20, 100)
/datum/artifact_effect/proc/ToggleActivate(var/reveal_toggle = 1)
//so that other stuff happens first
spawn(0)
if(activated)
activated = 0
else
activated = 1
if(reveal_toggle && holder)
if(istype(holder, /obj/machinery/artifact))
var/obj/machinery/artifact/A = holder
A.icon_state = "ano[A.icon_num][activated]"
var/display_msg
if(activated)
display_msg = pick("momentarily glows brightly!","distorts slightly for a moment!","flickers slightly!","vibrates!","shimmers slightly for a moment!")
else
display_msg = pick("grows dull!","fades in intensity!","suddenly becomes very still!","suddenly becomes very quiet!")
var/atom/toplevelholder = holder
while(!istype(toplevelholder.loc, /turf))
toplevelholder = toplevelholder.loc
toplevelholder.visible_message("<font color='red'>[icon2html(thing = toplevelholder, target = world)] [toplevelholder] [display_msg]</font>")
/datum/artifact_effect/proc/DoEffectTouch(var/mob/user)
/datum/artifact_effect/proc/DoEffectAura(var/atom/holder)
/datum/artifact_effect/proc/DoEffectPulse(var/atom/holder)
/datum/artifact_effect/proc/UpdateMove()
/datum/artifact_effect/process(delta_time)
if(chargelevel < chargelevelmax)
chargelevel++
if(activated)
if(effect == EFFECT_AURA)
DoEffectAura()
else if(effect == EFFECT_PULSE && chargelevel >= chargelevelmax)
chargelevel = 0
DoEffectPulse()
/datum/artifact_effect/proc/getDescription()
. = "<b>"
switch(effect_type)
if(EFFECT_ENERGY)
. += "Concentrated energy emissions"
if(EFFECT_PSIONIC)
. += "Intermittent psionic wavefront"
if(EFFECT_ELECTRO)
. += "Electromagnetic energy"
if(EFFECT_PARTICLE)
. += "High frequency particles"
if(EFFECT_ORGANIC)
. += "Organically reactive exotic particles"
if(EFFECT_BLUESPACE)
. += "Interdimensional/bluespace? phasing"
if(EFFECT_SYNTH)
. += "Atomic synthesis"
else
. += "Low level energy emissions"
. += "</b> have been detected <b>"
switch(effect)
if(EFFECT_TOUCH)
. += "interspersed throughout substructure and shell."
if(EFFECT_AURA)
. += "emitting in an ambient energy field."
if(EFFECT_PULSE)
. += "emitting in periodic bursts."
else
. += "emitting in an unknown way."
. += "</b>"
switch(trigger)
if(TRIGGER_TOUCH, TRIGGER_WATER, TRIGGER_ACID, TRIGGER_VOLATILE, TRIGGER_TOXIN)
. += " Activation index involves <b>physical interaction</b> with artifact surface."
if(TRIGGER_FORCE, TRIGGER_ENERGY, TRIGGER_HEAT, TRIGGER_COLD)
. += " Activation index involves <b>energetic interaction</b> with artifact surface."
if(TRIGGER_PHORON, TRIGGER_OXY, TRIGGER_CO2, TRIGGER_NITRO)
. += " Activation index involves <b>precise local atmospheric conditions</b>."
else
. += " Unable to determine any data about activation trigger."
//returns 0..1, with 1 being no protection and 0 being fully protected
/proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H)
if(!istype(H))
return 1
if(istype(get_area(H),/area/crew_quarters/sleep))
return 0
var/protected = 0
//anomaly suits give best protection, but excavation suits are almost as good
if(istype(H.back,/obj/item/hardsuit/hazmat))
var/obj/item/hardsuit/hazmat/hardsuit = H.back
if(hardsuit.suit_is_deployed() && hardsuit.is_online())
protected += 1
if(istype(H.wear_suit,/obj/item/clothing/suit/bio_suit/anomaly))
protected += 0.6
else if(istype(H.wear_suit,/obj/item/clothing/suit/space/anomaly))
protected += 0.5
if(istype(H.head,/obj/item/clothing/head/bio_hood/anomaly))
protected += 0.3
else if(istype(H.head,/obj/item/clothing/head/helmet/space/anomaly))
protected += 0.2
//latex gloves and science goggles also give a bit of bonus protection
if(istype(H.gloves,/obj/item/clothing/gloves/sterile))
protected += 0.1
if(istype(H.glasses,/obj/item/clothing/glasses/science))
protected += 0.1
return 1 - protected