Full Eye and Robot Organ Implementation

Tested work to implement eyes ad internal organs and the charpref selectable robotic organ replacements for heart and eyes, both for assisted and fully mechanical variants!
This commit is contained in:
Nanai
2013-11-14 13:08:29 -05:00
parent 85f4626bc3
commit 2416ae715c
6 changed files with 120 additions and 32 deletions
+2 -2
View File
@@ -60,7 +60,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if(heart.min_bruised_damage to heart.min_broken_damage)
blood_volume *= 0.6
if(heart.min_broken_damage to INFINITY)
blood_volume *= 0.4
blood_volume *= 0.3
//Effects of bloodloss
switch(blood_volume)
@@ -93,7 +93,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
src << "\red You feel extremely [word]"
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
oxyloss += 5
toxloss += 1
toxloss += 3
if(prob(15))
var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]"
+7 -6
View File
@@ -35,6 +35,7 @@
/mob/living/carbon/human/var/list/organs = list()
/mob/living/carbon/human/var/list/organs_by_name = list() // map organ names to organs
/mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too
//Creates and initializes and connects external and internal organs
/mob/living/carbon/human/proc/make_organs()
@@ -51,12 +52,12 @@
organs_by_name["l_foot"] = new/datum/organ/external/l_foot(organs_by_name["l_leg"])
organs_by_name["r_foot"] = new/datum/organ/external/r_foot(organs_by_name["r_leg"])
new/datum/organ/internal/heart(src)
new/datum/organ/internal/lungs(src)
new/datum/organ/internal/liver(src)
new/datum/organ/internal/kidney(src)
new/datum/organ/internal/brain(src)
new/datum/organ/internal/eyes(src)
internal_organs_by_name["heart"] = new/datum/organ/internal/heart(src)
internal_organs_by_name["lungs"] = new/datum/organ/internal/lungs(src)
internal_organs_by_name["liver"] = new/datum/organ/internal/liver(src)
internal_organs_by_name["kidney"] = new/datum/organ/internal/kidney(src)
internal_organs_by_name["brain"] = new/datum/organ/internal/brain(src)
internal_organs_by_name["eyes"] = new/datum/organ/internal/eyes(src)
for(var/name in organs_by_name)
organs += organs_by_name[name]
+39 -17
View File
@@ -32,23 +32,47 @@
/datum/organ/internal/proc/take_damage(amount, var/silent=0)
if(src.robotic == 2)
src.damage += amount * 0.8
src.damage += amount
src.damage += (amount * 0.8)
else
src.damage += amount
var/datum/organ/external/parent = owner.get_organ(parent_organ)
var/datum/organ/internal/eyes/E
var/datum/organ/internal/heart/H
if (!silent)
owner.custom_pain("Something inside your [parent.display_name] hurts a lot.", 1)
if(istype(E))
owner.custom_pain("Your eyes burn like mad!", 1)
if(istype(H))
owner.custom_pain("You feel a sudden, stabbing pain inside of your [parent.display_name]!", 1)
else owner.custom_pain("Something inside your [parent.display_name] hurts a lot.", 1)
/datum/organ/internal/proc/emp_act(severity)
if(src.robotic == 1)
take_damage(15, 0)
if(severity == 2)
take_damage(5, 0)
if(src.robotic == 2)
take_damage(30, 0)
if(severity == 2)
take_damage(15, 0)
switch(robotic)
if(0)
return
if(1)
switch (severity)
if (1.0)
take_damage(20,0)
return
if (2.0)
take_damage(7,0)
return
if(3.0)
take_damage(3,0)
return
if(2)
switch (severity)
if (1.0)
take_damage(40,0)
return
if (2.0)
take_damage(15,0)
return
if(3.0)
take_damage(10,0)
return
/datum/organ/internal/proc/mechanize() //Being used to make robutt hearts, etc
robotic = 2
@@ -130,9 +154,7 @@
parent_organ = "head"
process() //Eye damage replaces the old eye_stat var.
if(damage > min_bruised_damage)
if(damage > min_broken_damage)
owner.client.screen += global_hud.darkMask
owner.eye_blind = 20
else
owner.client.screen += global_hud.vimpaired
if(is_bruised())
owner.eye_blurry = 20
if(is_broken())
owner.eye_blind = 20