mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-16 05:02:42 +00:00
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:
@@ -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())
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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 |
Reference in New Issue
Block a user