diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index a905e5d90aa..c730a175b95 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index da0a999fdf5..18f4d643c7f 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -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'
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index e0d73cfdbb0..160554d4181 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -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.
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 8e646c830f6..e7c71525826 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -547,6 +547,11 @@
if(T)
T.robotize()
+/datum/organ/external/proc/mutate()
+ src.status |= ORGAN_MUTATED
+ owner << "Something is not right with your [display_name]..."
+ 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 Your face becomes unrecognizible mangled mess!", \
- "\red You hear a sickening crack.")
- else
- owner.visible_message("\red [owner]'s face melts away, turning into mangled mess!", \
- "\red Your face melts off!", \
- "\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 Your face becomes unrecognizible mangled mess!", \
+ "\red You hear a sickening crack.")
+ else
+ owner.visible_message("\red [owner]'s face melts away, turning into mangled mess!", \
+ "\red Your face melts off!", \
+ "\red You hear a sickening sizzle.")
+ disfigured = 1
/****************************************************
EXTERNAL ORGAN ITEMS
diff --git a/code/setup.dm b/code/setup.dm
index 35fe8827a4f..ac602bf60b7 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -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.
diff --git a/config/admins.txt b/config/admins.txt
index b2ff2178a4c..765a954884b 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -5,7 +5,7 @@
# Ranks can be anything defined in admin_ranks.txt ~Carn #
######################################################################
-abi79 - Game Master
+chinsky - Game Master
arcalane - Game Admin
asanadas - Game Admin
bobbehluvspropane - Game Admin
diff --git a/config/moderators.txt b/config/moderators.txt
index d4874564c24..3e4c5e39202 100644
--- a/config/moderators.txt
+++ b/config/moderators.txt
@@ -16,7 +16,6 @@ roaper
searif
sparklysheep
themij
-chinsky
danny220
; Why u no keep list in alphabetical order?! Lazies! Lazies! -Abi
; Imma best alphabetiser - Erthilo
diff --git a/icons/mob/human_races/r_def_human.dmi b/icons/mob/human_races/r_def_human.dmi
new file mode 100644
index 00000000000..4bdcb4ee0d8
Binary files /dev/null and b/icons/mob/human_races/r_def_human.dmi differ
diff --git a/icons/mob/human_races/r_def_lizard.dmi b/icons/mob/human_races/r_def_lizard.dmi
new file mode 100644
index 00000000000..e8fb53fdac0
Binary files /dev/null and b/icons/mob/human_races/r_def_lizard.dmi differ
diff --git a/icons/mob/human_races/r_def_skrell.dmi b/icons/mob/human_races/r_def_skrell.dmi
new file mode 100644
index 00000000000..b2156aefcff
Binary files /dev/null and b/icons/mob/human_races/r_def_skrell.dmi differ
diff --git a/icons/mob/human_races/r_def_tajaran.dmi b/icons/mob/human_races/r_def_tajaran.dmi
new file mode 100644
index 00000000000..7fe00fe9a01
Binary files /dev/null and b/icons/mob/human_races/r_def_tajaran.dmi differ
diff --git a/icons/mob/human_races/r_skeleton.dmi b/icons/mob/human_races/r_skeleton.dmi
index cbf854161d9..c30eb60fde5 100644
Binary files a/icons/mob/human_races/r_skeleton.dmi and b/icons/mob/human_races/r_skeleton.dmi differ