Files
CHOMPStation2/code/modules/genetics/side_effects.dm
Neerti ea6128f986 Adds Modifier System, Changes Some Ling Stuff
Adds a fairly simple system that allows adjusting various numbers like max health, incoming damage, outgoing melee damage, etc.  The nice part is that changing certain variables this way (like max health) is a lot safer than manually setting the max health var directly.
Changes a lot of short lines of code to point towards a variable's getter or setter helper instead of reading the var directly so the modifiers can work.
Endoarmor, delayed toxin sting, Enfeebling sting, and recursive adrenaline overdose now use the modifier system.
Enfeebling sting now only lasts two minutes, from five minutes, however it now also reduces the victim's melee damage by 25%/50%, and increases the damage they suffer by 10%/35%, for normal and recursive respectively.
Delayed Toxin Sting's effects are now felt all at once instead of over the course of a few minutes.
2017-04-18 21:23:59 -04:00

92 lines
3.0 KiB
Plaintext

/datum/genetics/side_effect
var/name // name of the side effect, to use as a header in the manual
var/symptom // description of the symptom of the side effect
var/treatment // description of the treatment of the side effect
var/effect // description of what happens when not treated
var/duration = 0 // delay between start() and finish()
proc/start(mob/living/carbon/human/H)
// start the side effect, this should give some cue as to what's happening,
// such as gasping. These cues need to be unique among side-effects.
proc/finish(mob/living/carbon/human/H)
// Finish the side-effect. This should first check whether the cure has been
// applied, and if not, cause bad things to happen.
/datum/genetics/side_effect/genetic_burn
name = "Genetic Burn"
symptom = "Subject's skin turns unusualy red."
treatment = "Inject small dose of dexalin."
effect = "Subject's skin burns."
duration = 10*30
start(mob/living/carbon/human/H)
H.emote("me", 1, "starts turning very red..")
finish(mob/living/carbon/human/H)
if(!H.reagents.has_reagent("dexalin"))
for(var/organ_name in BP_ALL)
var/obj/item/organ/external/E = H.get_organ(organ_name)
E.take_damage(0, 5, 0)
/datum/genetics/side_effect/bone_snap
name = "Bone Snap"
symptom = "Subject's limbs tremble notably."
treatment = "Inject small dose of bicaridine."
effect = "Subject's bone breaks."
duration = 10*60
start(mob/living/carbon/human/H)
H.emote("me", 1, "'s limbs start shivering uncontrollably.")
finish(mob/living/carbon/human/H)
if(!H.reagents.has_reagent("bicaridine"))
var/organ_name = pick(BP_ALL)
var/obj/item/organ/external/E = H.get_organ(organ_name)
E.take_damage(20, 0, 0)
E.fracture()
/*/datum/genetics/side_effect/monkey
name = "Monkey"
symptom = "Subject starts drooling uncontrollably."
treatment = "Inject small dose of dylovene."
effect = "Subject turns into monkey."
duration = 10*90
start(mob/living/carbon/human/H)
H.emote("me", 1, "has drool running down from [H.gender == MALE ? "his" : H.gender == FEMALE ? "her" : "their"] mouth.")
finish(mob/living/carbon/human/H)
if(!H.reagents.has_reagent("anti_toxin"))
H.monkeyize()**/
/datum/genetics/side_effect/confuse
name = "Confuse"
symptom = "Subject starts drooling uncontrollably."
treatment = "Inject small dose of dylovene."
effect = "Subject becomes confused."
duration = 10*30
start(mob/living/carbon/human/H)
H.emote("me", 1, "has drool running down from [H.gender == MALE ? "his" : H.gender == FEMALE ? "her" : "their"] mouth.")
finish(mob/living/carbon/human/H)
if(!H.reagents.has_reagent("anti_toxin"))
H.Confuse(100)
proc/trigger_side_effect(mob/living/carbon/human/H)
spawn
if(!istype(H)) return
var/tp = pick(typesof(/datum/genetics/side_effect) - /datum/genetics/side_effect)
var/datum/genetics/side_effect/S = new tp
S.start(H)
spawn(20)
if(!istype(H)) return
H.Weaken(rand(0, S.duration / 50))
sleep(S.duration)
if(!istype(H)) return
H.SetWeakened(0)
S.finish(H)