Finished up tentacle abominations.

Clone damage will cause body parts to mutate.
The more damage you have, the more chance to get a sweet tentacle.
Healing works other way, the less damage you have, the more chance to unmutate it.
Healing all the damage fixes everything.
This commit is contained in:
Chinsky
2013-05-21 05:40:00 +04:00
parent 7806915619
commit 8b01f8bcc3
6 changed files with 54 additions and 26 deletions

View File

@@ -76,14 +76,6 @@
/mob/living/carbon/attack_paw(mob/M as mob) /mob/living/carbon/attack_paw(mob/M as mob)
if(!istype(M, /mob/living/carbon)) return 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.is_usable())
M << "\red You can't use your [temp.display_name]"
return
for(var/datum/disease/D in viruses) for(var/datum/disease/D in viruses)
if(D.spread_by_touch()) if(D.spread_by_touch())

View File

@@ -3,6 +3,13 @@
M << "No attacking people at spawn, you jackass." M << "No attacking people at spawn, you jackass."
return 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)) if((M != src) && check_shields(0, M.name))

View File

@@ -63,6 +63,35 @@
if(HULK in mutations) return 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 << "<span class = 'notice'>Something is not right with your [O.display_name]...</span>"
return
else
if (prob(heal_prob))
for (var/datum/organ/external/O in organs)
if (O.status & ORGAN_MUTATED)
O.unmutate()
src << "<span class = 'notice'>Your [O.display_name] is shaped normally again.</span>"
return
if (getCloneLoss() < 1)
for (var/datum/organ/external/O in organs)
world << "[O.display_name]!"
if (O.status & ORGAN_MUTATED)
O.unmutate()
src << "<span class = 'notice'>Your [O.display_name] is shaped normally again.</span>"
//////////////////////////////////////////// ////////////////////////////////////////////
//Returns a list of damaged organs //Returns a list of damaged organs

View File

@@ -235,8 +235,9 @@ proc/get_damage_icon_part(damage_state, body_part)
var/g = "m" var/g = "m"
if(gender == FEMALE) g = "f" if(gender == FEMALE) g = "f"
var/datum/organ/external/chest = get_organ("chest")
stand_icon = chest.get_icon(g)
if(!skeleton) if(!skeleton)
stand_icon = new /icon(race_icon, "torso_[g][fat?"_fat":""]")
if(husk) if(husk)
stand_icon.ColorTone(husk_color_mod) stand_icon.ColorTone(husk_color_mod)
else if(hulk) else if(hulk)
@@ -244,8 +245,6 @@ proc/get_damage_icon_part(damage_state, body_part)
stand_icon.MapColors(rgb(TONE[1],0,0),rgb(0,TONE[2],0),rgb(0,0,TONE[3])) stand_icon.MapColors(rgb(TONE[1],0,0),rgb(0,TONE[2],0),rgb(0,0,TONE[3]))
else if(plant) else if(plant)
stand_icon.ColorTone(plant_color_mod) stand_icon.ColorTone(plant_color_mod)
else
stand_icon = new /icon(race_icon, "torso")
var/datum/organ/external/head = get_organ("head") var/datum/organ/external/head = get_organ("head")
var/has_head = 0 var/has_head = 0
@@ -254,7 +253,11 @@ proc/get_damage_icon_part(damage_state, body_part)
for(var/datum/organ/external/part in organs) for(var/datum/organ/external/part in organs)
if(!istype(part, /datum/organ/external/chest) && !(part.status & ORGAN_DESTROYED)) if(!istype(part, /datum/organ/external/chest) && !(part.status & ORGAN_DESTROYED))
var/icon/temp = part.get_icon() var/icon/temp
if (istype(part, /datum/organ/external/groin) || istype(part, /datum/organ/external/head))
temp = part.get_icon(g)
else
temp = part.get_icon()
if(part.status & ORGAN_ROBOT) if(part.status & ORGAN_ROBOT)
temp.GrayScale() temp.GrayScale()

View File

@@ -549,7 +549,10 @@
/datum/organ/external/proc/mutate() /datum/organ/external/proc/mutate()
src.status |= ORGAN_MUTATED src.status |= ORGAN_MUTATED
owner << "<span class = 'notice'>Something is not right with your [display_name]...</span>" owner.update_body()
/datum/organ/external/proc/unmutate()
src.status &= ~ORGAN_MUTATED
owner.update_body() owner.update_body()
/datum/organ/external/proc/get_damage() //returns total damage /datum/organ/external/proc/get_damage() //returns total damage
@@ -561,11 +564,12 @@
return 1 return 1
return 0 return 0
/datum/organ/external/get_icon() /datum/organ/external/get_icon(gender="")
if (status & ORGAN_MUTATED) if (status & ORGAN_MUTATED)
. = new /icon(owner.deform_icon, "[icon_name]") return new /icon(owner.deform_icon, "[icon_name][gender ? "_[gender]" : ""]")
else else
. = new /icon(owner.race_icon, "[icon_name]") return new /icon(owner.race_icon, "[icon_name][gender ? "_[gender]" : ""]")
/datum/organ/external/proc/is_usable() /datum/organ/external/proc/is_usable()
return !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD)) return !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD))
@@ -576,28 +580,21 @@
/datum/organ/external/chest /datum/organ/external/chest
name = "chest" name = "chest"
icon_name = "chest" icon_name = "torso"
display_name = "chest" display_name = "chest"
max_damage = 150 max_damage = 150
min_broken_damage = 75 min_broken_damage = 75
body_part = UPPER_TORSO body_part = UPPER_TORSO
/datum/organ/external/groin /datum/organ/external/groin
name = "groin" name = "groin"
icon_name = "diaper" icon_name = "groin"
display_name = "groin" display_name = "groin"
max_damage = 115 max_damage = 115
min_broken_damage = 70 min_broken_damage = 70
body_part = LOWER_TORSO 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 /datum/organ/external/l_arm
name = "l_arm" name = "l_arm"
display_name = "left arm" display_name = "left arm"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB