Implemented medical side-effects.

This commit is contained in:
cib
2013-02-12 16:19:39 +01:00
parent e957db8067
commit 1648c69f9d
4 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
// MEDICAL SIDE EFFECT BASE
// ========================
/datum/medical_effect/var/name = "None"
/datum/medical_effect/var/strength = 0
/datum/medical_effect/proc/on_life(mob/living/carbon/human/H, strength)
/datum/medical_effect/proc/cure(mob/living/carbon/human/H)
// MOB HELPERS
// ===========
/mob/living/carbon/human/var/list/datum/medical_effect/side_effects = list()
/mob/proc/add_side_effect(name, strength = 0)
/mob/living/carbon/human/add_side_effect(name, strength = 0)
for(var/datum/medical_effect/M in src.side_effects) if(M.name == name)
M.strength = max(M.strength, strength = 10)
return
var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect
for(var/T in L)
var/datum/medical_effect/M = new L
if(M.name == name)
M.strength = strength
side_effects += M
/mob/living/carbon/human/proc/handle_medical_side_effects()
// Only process every 30 ticks
if(life_tick % 30 == 0)
// One full cycle(in terms of strength) every 10 minutes
var/strength_percent = sin(life_tick / 600)
// Only do anything if the effect is currently strong enough
if(strength_percent >= 0.7)
for (var/datum/medical_effect/M in side_effects)
if (M.cure())
side_effects -= M
del(M)
else
M.on_life(src, 0.7*M.strength)
// Effect slowly growing stronger
M.strength++
// HEADACHE
// ========
/datum/medical_effect/headache/name = "Headache"
/datum/medical_effect/headache/on_life(mob/living/carbon/human/H, strength)
switch(strength)
if(1 to 10)
H.custom_pain("You feel a light pain in your head.",0)
if(11 to 30)
H.custom_pain("You feel a throbbing pain in your head!",1)
if(31 to 99)
H.custom_pain("You feel an excrutiating pain in your head!",1)
H.adjustBrainLoss(1)
if(99 to INFINITY)
H.custom_pain("It feels like your head is about to split open!",1)
H.adjustBrainLoss(3)
var/datum/organ/external/O = H.organs_by_name["head"]
O.take_damage(0, 1, 0, "Headache")
/datum/medical_effect/headache/cure(mob/living/carbon/human/H)
if(H.reagents.has_reagent("alkysine"))
return 1
return 0

View File

@@ -99,6 +99,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
handle_pain()
handle_medical_side_effects()
//Status updates, death etc.
handle_regular_status_updates() //TODO: optimise ~Carn
update_canmove()

View File

@@ -1501,6 +1501,7 @@ datum
return
if(!M) M = holder.my_atom
M.heal_organ_damage(2*REM,0)
M.add_side_effect("Headache")
..()
return