Files
Paradise/code/modules/surgery/organs/ears.dm
Fox McCloud 02b9445b9b Refactors DNA Mutations; Refactors Mutations to use Traits (#15483)
* Refactors Mutations

* traits

* more work

* styling fix

* yet even more work

* oh hush

* almost there

* it continues yet further

* and that's genetics done

* and that's it folks

* last bit and golem fixup

* oof

* oops

* tweaks and fixes

* styling
2021-02-21 21:25:19 +00:00

79 lines
2.3 KiB
Plaintext

/obj/item/organ/internal/ears
name = "ears"
icon_state = "ears"
gender = PLURAL
organ_tag = "ears"
parent_organ = "head"
slot = "ears"
// `deaf` measures "ticks" of deafness. While > 0, the person is deaf.
var/deaf = 0
// `ear_damage` measures long term damage to the ears, if too high,
// the person will not have either `deaf` or `ear_damage` decrease
// without external aid (earmuffs, drugs)
var/ear_damage = 0
// Multiplier for both long term and short term ear damage
var/damage_multiplier = 1
/obj/item/organ/internal/ears/on_life()
if(!iscarbon(owner))
return
var/mob/living/carbon/C = owner
if(ear_damage < 100)
AdjustEarDamage(-0.1)
// if we have non-damage related deafness like mutations, quirks or clothing (earmuffs), don't bother processing here. Ear healing from earmuffs or chems happen elsewhere
if(HAS_TRAIT_NOT_FROM(C, TRAIT_DEAF, EAR_DAMAGE))
return
if(ear_damage >= 100)
deaf = max(deaf, 1) // if we're failing we always have at least 1 deaf stack (and thus deafness)
else
deaf = max(deaf - 1, 0)
if((ear_damage > 10) && prob(ear_damage / 30))
AdjustEarDamage(0, 4)
SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg'))
if(deaf)
ADD_TRAIT(owner, TRAIT_DEAF, EAR_DAMAGE)
else
REMOVE_TRAIT(owner, TRAIT_DEAF, EAR_DAMAGE)
/obj/item/organ/internal/ears/proc/RestoreEars()
deaf = 0
ear_damage = 0
/obj/item/organ/internal/ears/proc/AdjustEarDamage(ddmg, ddeaf)
ear_damage = clamp(ear_damage + (ddmg * damage_multiplier), 0, 100)
deaf = max(deaf + (ddeaf * damage_multiplier), 0)
/obj/item/organ/internal/ears/surgeryize()
RestoreEars()
// Mob procs
/mob/living/carbon/RestoreEars()
var/obj/item/organ/internal/ears/ears = get_int_organ(/obj/item/organ/internal/ears)
if(ears)
ears.RestoreEars()
/mob/living/carbon/AdjustEarDamage(ddmg, ddeaf)
var/obj/item/organ/internal/ears/ears = get_int_organ(/obj/item/organ/internal/ears)
if(ears)
ears.AdjustEarDamage(ddmg, ddeaf)
/obj/item/organ/internal/ears/cybernetic
name = "cybernetic ears"
icon_state = "ears-c"
desc = "a basic cybernetic designed to mimic the operation of ears."
origin_tech = "biotech=4"
status = ORGAN_ROBOT
damage_multiplier = 0.9
/obj/item/organ/internal/ears/cybernetic/emp_act(severity)
if(emp_proof)
return
..()
ear_damage += 40 / severity