diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a905e5d90aa..a0d9749744c 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) @@ -76,14 +76,6 @@ /mob/living/carbon/attack_paw(mob/M as mob) if(!istype(M, /mob/living/carbon)) return - if (hasorgans(M)) - 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." - return - for(var/datum/disease/D in viruses) if(D.spread_by_touch()) @@ -187,6 +179,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/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 4ce561eff16..92fb75a1c17 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -3,6 +3,13 @@ M << "No attacking people at spawn, you jackass." return + var/datum/organ/external/temp = M:organs_by_name["r_hand"] + if (M.hand) + temp = M:organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + M << "\red You can't use your [temp.display_name]." + return + ..() if((M != src) && check_shields(0, M.name)) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index c12dc980240..38c5f9d59ab 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -63,6 +63,35 @@ if(HULK in mutations) return ..() +/mob/living/carbon/human/adjustCloneLoss(var/amount) + ..() + var/heal_prob = max(0, 80 - getCloneLoss()) + var/mut_prob = min(80, getCloneLoss()+10) + if (amount > 0) + if (prob(mut_prob)) + var/list/datum/organ/external/candidates = list() + for (var/datum/organ/external/O in organs) + if(!(O.status & ORGAN_MUTATED)) + candidates |= O + if (candidates.len) + var/datum/organ/external/O = pick(candidates) + O.mutate() + src << "Something is not right with your [O.display_name]..." + return + else + if (prob(heal_prob)) + for (var/datum/organ/external/O in organs) + if (O.status & ORGAN_MUTATED) + O.unmutate() + src << "Your [O.display_name] is shaped normally again." + return + + if (getCloneLoss() < 1) + for (var/datum/organ/external/O in organs) + world << "[O.display_name]!" + if (O.status & ORGAN_MUTATED) + O.unmutate() + src << "Your [O.display_name] is shaped normally again." //////////////////////////////////////////// //Returns a list of damaged organs diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index da0a999fdf5..c765bf9711f 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 @@ -234,18 +235,16 @@ proc/get_damage_icon_part(damage_state, body_part) var/g = "m" if(gender == FEMALE) g = "f" + var/datum/organ/external/chest = get_organ("chest") + stand_icon = chest.get_icon(g) if(!skeleton) - stand_icon = new /icon(race_icon, "torso_[g][fat?"_fat":""]") 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) stand_icon.ColorTone(plant_color_mod) - else - stand_icon = new /icon(race_icon, "torso") var/datum/organ/external/head = get_organ("head") var/has_head = 0 @@ -255,28 +254,22 @@ 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]") + if (istype(part, /datum/organ/external/groin) || istype(part, /datum/organ/external/head)) + temp = part.get_icon(g) else - temp = new /icon(race_icon, "[part.icon_name]") + 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 +435,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..8495094abdf 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -547,6 +547,14 @@ if(T) T.robotize() +/datum/organ/external/proc/mutate() + src.status |= ORGAN_MUTATED + owner.update_body() + +/datum/organ/external/proc/unmutate() + src.status &= ~ORGAN_MUTATED + 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,21 +564,32 @@ return 1 return 0 +/datum/organ/external/get_icon(gender="") + if (status & ORGAN_MUTATED) + return new /icon(owner.deform_icon, "[icon_name][gender ? "_[gender]" : ""]") + else + return new /icon(owner.race_icon, "[icon_name][gender ? "_[gender]" : ""]") + + +/datum/organ/external/proc/is_usable() + return !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD)) + /**************************************************** ORGAN DEFINES ****************************************************/ /datum/organ/external/chest name = "chest" - icon_name = "chest" + icon_name = "torso" display_name = "chest" max_damage = 150 min_broken_damage = 75 body_part = UPPER_TORSO + /datum/organ/external/groin name = "groin" - icon_name = "diaper" + icon_name = "groin" display_name = "groin" max_damage = 115 min_broken_damage = 70 @@ -653,27 +672,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 9f319d3c82e..fcfb61e9195 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -583,6 +583,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/html/changelog.html b/html/changelog.html index efa20e78e37..5fec8533dfa 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,7 +57,28 @@ Stuff which is in development and not yet visible to players or just code relate (ie. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit though. Thanks. --> -
+ + + +
+

26th May 2013

+

Chinsky updated:

+ +
+ +
+

25th May 2013

+

Erthilo updated:

+ +
+ +

5/26/2013

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..e622ef14b5a 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..6d7f8128ce3 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..1dd654054b8 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..f0a6ffc5772 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