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