Added organ mutations.

Only have sprites for humans yet.
Added is_usable() proc that checks for both limb missing or being a tentacle
This commit is contained in:
Chinsky
2013-05-19 17:56:29 +04:00
parent 1d5dfcb4db
commit 7806915619
12 changed files with 73 additions and 42 deletions
+6 -4
View File
@@ -54,8 +54,8 @@
var/datum/organ/external/temp = M:organs_by_name["r_hand"]
if (M.hand)
temp = M:organs_by_name["l_hand"]
if(temp && temp.status & ORGAN_DESTROYED)
M << "\red Yo- wait a minute."
if(temp && !temp.is_usable())
M << "\red You can't use your [temp.display_name]"
return
for(var/datum/disease/D in viruses)
@@ -80,8 +80,8 @@
var/datum/organ/external/temp = M:organs_by_name["r_hand"]
if (M.hand)
temp = M:organs_by_name["l_hand"]
if(temp && temp.status & ORGAN_DESTROYED)
M << "\red Yo- wait a minute."
if(temp && !temp.is_usable())
M << "\red You can't use your [temp.display_name]"
return
for(var/datum/disease/D in viruses)
@@ -187,6 +187,8 @@
status += "numb"
if(org.status & ORGAN_DESTROYED)
status = "MISSING!"
if(org.status & ORGAN_MUTATED)
status = "weirdly shapen."
if(status == "")
status = "OK"
src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.display_name,status),1)
@@ -126,7 +126,8 @@ Please contact me on #coderbus IRC. ~Carn x
var/list/overlays_lying[TOTAL_LAYERS]
var/list/overlays_standing[TOTAL_LAYERS]
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
var/race_icon
var/icon/race_icon
var/icon/deform_icon
//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING
//this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers
@@ -239,7 +240,6 @@ proc/get_damage_icon_part(damage_state, body_part)
if(husk)
stand_icon.ColorTone(husk_color_mod)
else if(hulk)
// stand_icon.ColorTone(hulk_color_mod)
var/list/TONE = ReadRGB(hulk_color_mod)
stand_icon.MapColors(rgb(TONE[1],0,0),rgb(0,TONE[2],0),rgb(0,0,TONE[3]))
else if(plant)
@@ -254,29 +254,19 @@ proc/get_damage_icon_part(damage_state, body_part)
for(var/datum/organ/external/part in organs)
if(!istype(part, /datum/organ/external/chest) && !(part.status & ORGAN_DESTROYED))
var/icon/temp
if(istype(part, /datum/organ/external/groin))
if(skeleton)
temp = new /icon(race_icon, "groin")
else
temp = new /icon(race_icon, "groin_[g]")
else if(istype(part, /datum/organ/external/head))
if(skeleton)
temp = new /icon(race_icon, "head")
else
temp = new /icon(race_icon, "head_[g]")
else
temp = new /icon(race_icon, "[part.icon_name]")
var/icon/temp = part.get_icon()
if(part.status & ORGAN_ROBOT)
temp.GrayScale()
if(part.status & ORGAN_DEAD)
temp.ColorTone(necrosis_color_mod)
temp.SetIntensity(0.7)
else if(!skeleton)
if(husk)
temp.ColorTone(husk_color_mod)
else if(hulk)
// temp.ColorTone(hulk_color_mod)
var/list/TONE = ReadRGB(hulk_color_mod)
temp.MapColors(rgb(TONE[1],0,0),rgb(0,TONE[2],0),rgb(0,0,TONE[3]))
else if(plant)
@@ -442,12 +432,16 @@ proc/get_damage_icon_part(damage_state, body_part)
switch(dna.mutantrace)
if("tajaran")
race_icon = 'icons/mob/human_races/r_tajaran.dmi'
deform_icon = 'icons/mob/human_races/r_def_tajaran.dmi'
if("lizard")
race_icon = 'icons/mob/human_races/r_lizard.dmi'
deform_icon = 'icons/mob/human_races/r_def_lizard.dmi'
if("skrell")
race_icon = 'icons/mob/human_races/r_skrell.dmi'
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
else
race_icon = 'icons/mob/human_races/r_human.dmi'
deform_icon = 'icons/mob/human_races/r_def_human.dmi'
else
icon = 'icons/mob/human_races/r_human.dmi'
+3
View File
@@ -11,6 +11,9 @@
proc/receive_chem(chemical as obj)
return 0
/datum/organ/proc/get_icon()
return icon('icons/mob/human.dmi',"blank")
//Handles chem traces
/mob/living/carbon/human/proc/handle_trace_chems()
//New are added for reagents to random organs.
+52 -20
View File
@@ -547,6 +547,11 @@
if(T)
T.robotize()
/datum/organ/external/proc/mutate()
src.status |= ORGAN_MUTATED
owner << "<span class = 'notice'>Something is not right with your [display_name]...</span>"
owner.update_body()
/datum/organ/external/proc/get_damage() //returns total damage
return max(brute_dam + burn_dam - perma_injury, perma_injury) //could use health?
@@ -556,6 +561,15 @@
return 1
return 0
/datum/organ/external/get_icon()
if (status & ORGAN_MUTATED)
. = new /icon(owner.deform_icon, "[icon_name]")
else
. = new /icon(owner.race_icon, "[icon_name]")
/datum/organ/external/proc/is_usable()
return !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD))
/****************************************************
ORGAN DEFINES
****************************************************/
@@ -576,6 +590,14 @@
min_broken_damage = 70
body_part = LOWER_TORSO
/datum/organ/external/groin/get_icon()
var/g = "m"
if(owner.gender == FEMALE) g = "f"
if (status & ORGAN_MUTATED)
. = new /icon(owner.deform_icon, "[icon_name]_[g]")
else
. = new /icon(owner.race_icon, "[icon_name]_[g]")
/datum/organ/external/l_arm
name = "l_arm"
display_name = "left arm"
@@ -653,27 +675,37 @@
body_part = HEAD
var/disfigured = 0
take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
..(brute, burn, sharp, used_weapon, forbidden_limbs)
if (!disfigured)
if (brute_dam > 40)
if (prob(50))
disfigure("brute")
if (burn_dam > 40)
disfigure("burn")
/datum/organ/external/head/get_icon()
if (!owner)
return ..()
var/g = "m"
if(owner.gender == FEMALE) g = "f"
if (status & ORGAN_MUTATED)
. = new /icon(owner.deform_icon, "[icon_name]_[g]")
else
. = new /icon(owner.race_icon, "[icon_name]_[g]")
proc/disfigure(var/type = "brute")
if (disfigured)
return
if(type == "brute")
owner.visible_message("\red You hear a sickening cracking sound coming from \the [owner]'s face.", \
"\red <b>Your face becomes unrecognizible mangled mess!</b>", \
"\red You hear a sickening crack.")
else
owner.visible_message("\red [owner]'s face melts away, turning into mangled mess!", \
"\red <b>Your face melts off!</b>", \
"\red You hear a sickening sizzle.")
disfigured = 1
/datum/organ/external/head/take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
..(brute, burn, sharp, used_weapon, forbidden_limbs)
if (!disfigured)
if (brute_dam > 40)
if (prob(50))
disfigure("brute")
if (burn_dam > 40)
disfigure("burn")
/datum/organ/external/head/proc/disfigure(var/type = "brute")
if (disfigured)
return
if(type == "brute")
owner.visible_message("\red You hear a sickening cracking sound coming from \the [owner]'s face.", \
"\red <b>Your face becomes unrecognizible mangled mess!</b>", \
"\red You hear a sickening crack.")
else
owner.visible_message("\red [owner]'s face melts away, turning into mangled mess!", \
"\red <b>Your face melts off!</b>", \
"\red You hear a sickening sizzle.")
disfigured = 1
/****************************************************
EXTERNAL ORGAN ITEMS
+1
View File
@@ -582,6 +582,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define ORGAN_SPLINTED 256
#define SALVED 512
#define ORGAN_DEAD 1024
#define ORGAN_MUTATED 2048
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.