diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 119d38f0645..c6033743ce7 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -331,24 +331,30 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
return 1
return 0
-/datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/human/target)
- var/datum/changelingprofile/prof = stored_profiles[1]
- if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it.
- user << "We have reached our capacity to store genetic information! We must transform before absorbing more."
- return
+/datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/human/target, var/verbose=1)
+ if(stored_profiles.len)
+ var/datum/changelingprofile/prof = stored_profiles[1]
+ if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it.
+ if(verbose)
+ user << "We have reached our capacity to store genetic information! We must transform before absorbing more."
+ return
if(!target)
return
if((target.disabilities & NOCLONE) || (target.disabilities & HUSK))
- user << "DNA of [target] is ruined beyond usability!"
+ if(verbose)
+ user << "DNA of [target] is ruined beyond usability!"
return
if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway!
- user << "We could gain no benefit from absorbing a lesser creature."
+ if(verbose)
+ user << "We could gain no benefit from absorbing a lesser creature."
return
if(has_dna(target.dna))
- user << "We already have this DNA in storage!"
+ if(verbose)
+ user << "We already have this DNA in storage!"
return
if(!target.has_dna())
- user << "[target] is not compatible with our biology."
+ if(verbose)
+ user << "[target] is not compatible with our biology."
return
return 1
@@ -366,17 +372,24 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
prof.name = H.real_name
prof.protected = protect
+ prof.underwear = H.underwear
+ prof.undershirt = H.undershirt
+ prof.socks = H.socks
+
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
for(var/slot in slots)
- var/obj/item/I = H.vars[slot]
- if(!I)
+ if(slot in H.vars)
+ var/obj/item/I = H.vars[slot]
+ if(!I)
+ continue
+ prof.name_list[slot] = I.name
+ prof.appearance_list[slot] = I.appearance
+ prof.flags_cover_list[slot] = I.flags_cover
+ prof.item_color_list[slot] = I.item_color
+ prof.item_state_list[slot] = I.item_state
+ prof.exists_list[slot] = 1
+ else
continue
- prof.name_list[slot] = I.name
- prof.appearance_list[slot] = I.appearance
- prof.flags_cover_list[slot] = I.flags_cover
- prof.item_color_list[slot] = I.item_color
- prof.item_state_list[slot] = I.item_state
- prof.exists_list[slot] = 1
stored_profiles += prof
absorbedcount++
@@ -406,8 +419,13 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
/proc/changeling_transform(var/mob/living/carbon/human/user, var/datum/changelingprofile/chosen_prof)
var/datum/dna/chosen_dna = chosen_prof.dna
user.real_name = chosen_prof.name
+ user.underwear = chosen_prof.underwear
+ user.undershirt = chosen_prof.undershirt
+ user.socks = chosen_prof.socks
+
chosen_dna.transfer_identity(user, 1)
user.updateappearance(mutcolor_update=1)
+ user.update_body()
user.domutcheck()
//vars hackery. not pretty, but better than the alternative.
@@ -452,6 +470,10 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
var/list/item_color_list = list()
var/list/item_state_list = list()
+ var/underwear
+ var/undershirt
+ var/socks
+
/datum/changelingprofile/Destroy()
qdel(dna)
return ..()
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm
index d9f6faa9457..db88f244ce0 100644
--- a/code/game/gamemodes/changeling/evolution_menu.dm
+++ b/code/game/gamemodes/changeling/evolution_menu.dm
@@ -370,9 +370,10 @@ var/list/sting_paths
mind.changeling.purchasedpowers+=S
S.on_purchase(src)
- var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
- var/datum/changelingprofile/prof = mind.changeling.add_profile(C) //not really a point in typecasting here but somebody will probably get mad at me if i dont
- mind.changeling.first_prof = prof
+ var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
+ if(ishuman(C))
+ var/datum/changelingprofile/prof = mind.changeling.add_profile(C)
+ mind.changeling.first_prof = prof
return 1
/datum/changeling/proc/reset()
diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
index 98209853cff..92fc36842e4 100644
--- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
+++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
@@ -3,8 +3,8 @@
/obj/effect/proc_holder/changeling/augmented_eyesight
name = "Augmented Eyesight"
- desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability."
- helptext = "Grants us night vision and thermal vision. It may be toggled on or off. We will become more vulnerable to flash-based devices while active."
+ desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability, or protects your vision from flashes."
+ helptext = "Grants us thermal vision or flash protection. We will become a lot more vulnerable to flash-based devices while thermal vision is active."
chemical_cost = 0
dna_cost = 2 //Would be 1 without thermal vision
var/active = 0 //Whether or not vision is enhanced
@@ -12,24 +12,70 @@
/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user)
if(!istype(user))
return
- active = !active
- if(active)
- user << "We feel a minute twitch in our eyes, and darkness creeps away."
- user.weakeyes = 1
- user.sight |= SEE_MOBS
- user.permanent_sight_flags |= SEE_MOBS
- user.see_in_dark = 8
- user.dna.species.invis_sight = SEE_INVISIBLE_MINIMUM
+ if(user.getorgan(/obj/item/organ/internal/cyberimp/eyes/thermals/ling))
+ user << "Our eyes are protected from flashes."
+ var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling()
+ O.Insert(user)
+
else
- user << "Our vision dulls. Shadows gather."
- user.weakeyes = 0
- user.sight &= ~SEE_MOBS
- user.permanent_sight_flags &= ~SEE_MOBS
- user.see_in_dark = 0
- user.dna.species.invis_sight = initial(user.dna.species.invis_sight)
+ var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling()
+ O.Insert(user)
+
return 1
/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user)
- user.permanent_sight_flags &= ~SEE_MOBS
- user.sight &= ~SEE_MOBS
\ No newline at end of file
+ var/obj/item/organ/internal/cyberimp/eyes/O = user.getorganslot("eye_ling")
+ O.Remove(user)
+ qdel(O)
+
+
+
+
+
+/obj/item/organ/internal/cyberimp/eyes/shield/ling
+ name = "protective membranes"
+ desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage."
+ icon_state = "ling_eyeshield"
+ eye_color = null
+ implant_overlay = null
+ origin_tech = "biotech=4"
+ slot = "eye_ling"
+ status = ORGAN_ORGANIC
+
+/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life()
+ ..()
+ if(owner.eye_blind || owner.eye_stat || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHT))
+ owner.reagents.add_reagent("oculine", 1)
+
+/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat()
+ var/obj/S = ..()
+ S.reagents.add_reagent("oculine", 15)
+ return S
+
+
+/obj/item/organ/internal/cyberimp/eyes/thermals/ling
+ name = "heat receptors"
+ desc = "These heat receptors dramatically increases eyes light sensing ability."
+ icon_state = "ling_thermal"
+ eye_color = null
+ implant_overlay = null
+ origin_tech = "biotech=5;magnets=5"
+ slot = "eye_ling"
+ status = ORGAN_ORGANIC
+ aug_message = "You feel a minute twitch in our eyes, and darkness creeps away."
+
+/obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity)
+ return
+
+/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Insert(mob/living/carbon/M, special = 0)
+ ..()
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ H.weakeyes = 1
+
+/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Remove(mob/living/carbon/M, special = 0)
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ H.weakeyes = 0
+ ..()
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm
index c637997a449..71ffc3480ba 100644
--- a/code/game/gamemodes/changeling/powers/headcrab.dm
+++ b/code/game/gamemodes/changeling/powers/headcrab.dm
@@ -29,8 +29,9 @@
for(var/obj/item/organ/internal/I in organs)
I.loc = crab
crab.origin = M
- if(M)
- M.transfer_to(crab)
+ if(crab.origin)
+ crab.origin.active = 1
+ crab.origin.transfer_to(crab)
crab << "You burst out of the remains of your former body in a shower of gore!"
user.gib()
feedback_add_details("changeling_powers","LR")
diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm
index 14f751ec5b4..9d4bb4ff2b8 100644
--- a/code/game/gamemodes/changeling/powers/panacea.dm
+++ b/code/game/gamemodes/changeling/powers/panacea.dm
@@ -1,6 +1,6 @@
/obj/effect/proc_holder/changeling/panacea
name = "Anatomic Panacea"
- desc = "Expels impurifications from our form; curing diseases, removing toxins and radiation, and resetting our genetic code completely."
+ desc = "Expels impurifications from our form; curing diseases, removing parasites, toxins and radiation, and resetting our genetic code completely."
helptext = "Can be used while unconscious."
chemical_cost = 20
dna_cost = 1
@@ -9,15 +9,23 @@
//Heals the things that the other regenerative abilities don't.
/obj/effect/proc_holder/changeling/panacea/sting_action(mob/user)
user << "We begin cleansing impurities from our form."
+
+ var/obj/item/organ/internal/body_egg/egg = user.getorgan(/obj/item/organ/internal/body_egg)
+ if(egg)
+ egg.Remove(user)
+ user.visible_message("[user] vomits up [egg]!", "[user] vomits up [egg]!")
+ playsound(user.loc, 'sound/effects/splat.ogg', 50, 1)
+
+ var/turf/location = user.loc
+ if(istype(location, /turf/simulated))
+ location.add_vomit_floor(user, 1)
+ egg.loc = location
+
user.reagents.add_reagent("mutadone", 10)
user.reagents.add_reagent("potass_iodide", 10)
user.reagents.add_reagent("charcoal", 20)
for(var/datum/disease/D in user.viruses)
D.cure()
- for(var/obj/item/organ/internal/I in user)
- if(istype(I,/obj/item/organ/internal/body_egg/alien_embryo))
- I.Remove(user)
- I.loc = get_turf(user)
feedback_add_details("changeling_powers","AP")
- return 1
+ return 1
\ No newline at end of file
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index c9311f53a64..58a179d394b 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -192,7 +192,8 @@ MASS SPECTROMETER
var/implant_detect
for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs)
- implant_detect += "[H.name] is modified with a [CI.name].
"
+ if(CI.status == ORGAN_ROBOTIC)
+ implant_detect += "[H.name] is modified with a [CI.name].
"
if(implant_detect)
user.show_message("Detected cybernetic modifications:")
user.show_message("[implant_detect]")
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index 15573748de6..8e64f7820cc 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -1,6 +1,5 @@
/obj/item/organ/internal/alien
origin_tech = "biotech=5"
- icon = 'icons/effects/blood.dmi'
icon_state = "xgibmid2"
var/list/alien_powers = list()
@@ -30,6 +29,7 @@
/obj/item/organ/internal/alien/plasmavessel
name = "plasma vessel"
+ icon_state = "plasma"
origin_tech = "biotech=5;plasma=2"
w_class = 3
zone = "chest"
@@ -48,6 +48,7 @@
/obj/item/organ/internal/alien/plasmavessel/large
name = "large plasma vessel"
+ icon_state = "plasma_large"
w_class = 4
storedPlasma = 200
max_plasma = 500
@@ -59,6 +60,7 @@
/obj/item/organ/internal/alien/plasmavessel/small
name = "small plasma vessel"
+ icon_state = "plasma_small"
w_class = 2
storedPlasma = 100
max_plasma = 150
@@ -66,6 +68,7 @@
/obj/item/organ/internal/alien/plasmavessel/small/tiny
name = "tiny plasma vessel"
+ icon_state = "plasma_tiny"
w_class = 1
max_plasma = 100
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
@@ -100,6 +103,7 @@
/obj/item/organ/internal/alien/hivenode
name = "hive node"
+ icon_state = "hivenode"
zone = "head"
slot = "hivenode"
origin_tech = "biotech=5;magnets=4;bluespace=3"
@@ -117,6 +121,7 @@
/obj/item/organ/internal/alien/resinspinner
name = "resin spinner"
+ icon_state = "stomach-x"
zone = "mouth"
slot = "resinspinner"
origin_tech = "biotech=5;materials=4"
@@ -125,6 +130,7 @@
/obj/item/organ/internal/alien/acid
name = "acid gland"
+ icon_state = "acid"
zone = "mouth"
slot = "acidgland"
origin_tech = "biotech=5;materials=2;combat=2"
@@ -133,6 +139,7 @@
/obj/item/organ/internal/alien/neurotoxin
name = "neurotoxin gland"
+ icon_state = "neurotox"
zone = "mouth"
slot = "neurotoxingland"
origin_tech = "biotech=5;combat=5"
@@ -141,6 +148,7 @@
/obj/item/organ/internal/alien/eggsac
name = "egg sac"
+ icon_state = "eggsac"
zone = "groin"
slot = "eggsac"
w_class = 4
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 6995c025b0e..bb7abd6f7f9 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -57,6 +57,10 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
RefreshInfectionImage()
if(stage == 5 && prob(50))
+ for(var/datum/surgery/S in owner.surgeries)
+ if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs))
+ AttemptGrow(0)
+ return
AttemptGrow()
@@ -79,10 +83,8 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
stage = 4 // Let's try again later.
return
- if(owner.lying)
- owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
- else
- owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_stand")
+ var/overlay = image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
+ owner.overlays += overlay
spawn(6)
var/atom/xeno_loc = owner
if(!gib_on_success)
@@ -94,6 +96,9 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
if(gib_on_success)
owner.stomach_contents += new_xeno
owner.gib()
+ else
+ owner.adjustBruteLoss(40)
+ owner.overlays -= overlay
qdel(src)
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index b610fd030ff..031989bd3f0 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -119,5 +119,5 @@
/obj/item/organ/internal/brain/alien
name = "alien brain"
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
- icon_state = "brain-alien"
+ icon_state = "brain-x"
origin_tech = "biotech=7"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index e46f62193d8..1da6b212e10 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -50,9 +50,12 @@
msg += "It isn't responding to anything around it; it seems to be asleep.\n"
msg += ""
- if (digitalcamo)
+ if(digitalcamo)
msg += "It is moving its body in an unnatural and blatantly unsimian manner.\n"
+ if(!getorgan(/obj/item/organ/internal/brain))
+ msg += "It appears that it's brain is missing...\n"
+
msg += "*---------*"
user << msg
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index f2a6715af8e..b59be0b793c 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -280,7 +280,8 @@
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical))
var/implant_detect
for(var/obj/item/organ/internal/cyberimp/CI in internal_organs)
- implant_detect += "[name] is modified with a [CI.name].
"
+ if(CI.status == ORGAN_ROBOTIC)
+ implant_detect += "[name] is modified with a [CI.name].
"
if(implant_detect)
msg += "Detected cybernetic modifications:
"
msg += implant_detect
diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
index cb6ebaf2031..43d9a143831 100644
--- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
@@ -80,8 +80,12 @@
if(origin)
origin.transfer_to(M)
- if(origin.changeling)
- origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
+ if(!origin.changeling)
+ M.make_changeling()
+ if(origin.changeling.can_absorb_dna(M, owner))
+ origin.changeling.add_profile(owner, M)
+
+ origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
M.key = origin.key
owner.gib()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index bcf46938bba..7b65ebb47fe 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -252,25 +252,44 @@
OpenFire()
/mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed)
- new /obj/item/asteroid/hivelord_core(src.loc)
+ new /obj/item/organ/internal/hivelord_core(src.loc)
mouse_opacity = 1
..(gibbed)
-/obj/item/asteroid/hivelord_core
+/obj/item/organ/internal/hivelord_core
name = "hivelord remains"
desc = "All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly."
- icon = 'icons/obj/food/food.dmi'
- icon_state = "boiledrorocore"
+ icon_state = "roro core 2"
+ flags = NOBLUDGEON
+ slot = "hivecore"
+ force = 0
var/inert = 0
-/obj/item/asteroid/hivelord_core/New()
- spawn(1200)
- inert = 1
- desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
+/obj/item/organ/internal/hivelord_core/New()
+ ..()
+ spawn(2400)
+ if(!owner)
+ inert = 1
+ desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested."
-/obj/item/asteroid/hivelord_core/attack(mob/living/M, mob/living/user)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
+/obj/item/organ/internal/hivelord_core/on_life()
+ ..()
+ if(inert)
+ return
+
+ owner.adjustBruteLoss(-1)
+ owner.adjustFireLoss(-1)
+ owner.adjustOxyLoss(-2)
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ var/datum/reagent/blood/B = locate() in H.vessel.reagent_list //Grab some blood
+ var/blood_volume = round(H.vessel.get_reagent_amount("blood"))
+ if(B && blood_volume < 560 && blood_volume)
+ B.volume += 2 // Fast blood regen
+
+/obj/item/organ/internal/hivelord_core/afterattack(atom/target, mob/user, proximity_flag)
+ if(proximity_flag && ishuman(target))
+ var/mob/living/carbon/human/H = target
if(inert)
user << "[src] have become inert, its healing properties are no more."
return
@@ -286,6 +305,9 @@
qdel(src)
..()
+/obj/item/organ/internal/hivelord_core/prepare_eat()
+ return null
+
/mob/living/simple_animal/hostile/asteroid/hivelordbrood
name = "hivelord brood"
desc = "A fragment of the original Hivelord, rallying behind its original. One isn't much of a threat, but..."
@@ -591,7 +613,7 @@
/obj/item/asteroid/fugu_gland
name = "wumborian fugu gland"
desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength."
- icon = 'icons/obj/mining.dmi'
+ icon = 'icons/obj/surgery.dmi'
icon_state = "fugu_gland"
flags = NOBLUDGEON
w_class = 3
diff --git a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm
index 2368f87e60d..43c4effc01f 100644
--- a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm
@@ -587,15 +587,23 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
- if(M.eye_blind > 0 && current_cycle > 20)
- if(prob(30))
+ if(current_cycle > 15)
+ if(M.disabilities & BLIND)
+ if(prob(20))
+ M.disabilities &= ~BLIND
+ M.disabilities &= NEARSIGHT
+ M.eye_blurry = 35
+
+ else if(M.disabilities & NEARSIGHT)
+ M.disabilities &= ~NEARSIGHT
+ M.eye_blurry = 10
+
+ else if(M.eye_blind || M.eye_blurry)
M.eye_blind = 0
- else if(prob(80))
- M.eye_blind = 0
- M.eye_blurry = 1
- if(M.eye_blurry > 0)
- if(prob(80))
- M.eye_blurry = 0
+ M.eye_blurry = 0
+ else if(M.eye_stat > 0)
+ M.eye_stat -= 1
+
..()
return
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 7fdd33e9955..019ec3c4c83 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -123,8 +123,6 @@
if(!reagents.total_volume)
user << "[src] is empty."
return
- if(istype(target, /obj/item/weapon/implantcase/chem))
- return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
user << "You cannot directly fill [target]!"
diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm
index 6a934c160d0..7ad93dbd401 100644
--- a/code/modules/surgery/organ_manipulation.dm
+++ b/code/modules/surgery/organ_manipulation.dm
@@ -23,7 +23,7 @@
/datum/surgery_step/manipulate_organs
time = 64
name = "manipulate organs"
- implements = list(/obj/item/organ/internal = 100)
+ implements = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0)
var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55)
var/implements_mend = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
var/current_type
@@ -84,7 +84,12 @@
else if(implement_type in implements_mend)
current_type = "mend"
+ user.visible_message("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)].",
+ "You begin to mend the incision in [target]'s [parse_zone(target_zone)]...")
+ else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ))
+ user << "[tool] was biten by someone! It's too damaged to use!"
+ return -1
/datum/surgery_step/manipulate_organs/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(current_type == "mend")
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
index 4ef193183b1..f92dffc912a 100644
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ b/code/modules/surgery/organs/augments_eyes.dm
@@ -8,9 +8,11 @@
w_class = 1
var/sight_flags = 0
+ var/dark_view = 0
var/eye_color = "fff"
var/old_eye_color = "fff"
var/flash_protect = 0
+ var/see_invisible = 0
var/aug_message = "Your vision is augmented!"
@@ -36,6 +38,10 @@
/obj/item/organ/internal/cyberimp/eyes/on_life()
..()
owner.sight |= sight_flags
+ if(dark_view)
+ owner.see_in_dark = dark_view
+ if(see_invisible)
+ owner.see_invisible = see_invisible
/obj/item/organ/internal/cyberimp/eyes/emp_act(severity)
if(!owner)
@@ -60,6 +66,7 @@
eye_color = "000"
implant_color = "#000000"
origin_tech = "materials=6;programming=4;biotech=6;magnets=5"
+ dark_view = 8
sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
/obj/item/organ/internal/cyberimp/eyes/thermals
@@ -67,9 +74,11 @@
desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included."
eye_color = "FC0"
implant_color = "#FFCC00"
- sight_flags = SEE_MOBS
- flash_protect = -1
origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4"
+ sight_flags = SEE_MOBS
+ see_invisible = SEE_INVISIBLE_MINIMUM
+ flash_protect = -1
+ dark_view = 8
aug_message = "You see prey everywhere you look..."
diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm
index a3f8d5de65b..5fa8b0811be 100644
--- a/code/modules/surgery/organs/helpers.dm
+++ b/code/modules/surgery/organs/helpers.dm
@@ -14,13 +14,12 @@ mob/living/carbon/getorgan(typepath)
mob/living/carbon/getorganszone(zone, var/subzones = 0)
var/list/returnorg = list()
if(subzones)
+ // Include subzones - groin for chest, eyes and mouth for head
if(zone == "head")
returnorg = getorganszone("eyes") + getorganszone("mouth")
- // We don't have mouth organs now, but who knows?
if(zone == "chest")
returnorg = getorganszone("groin")
-
for(var/obj/item/organ/internal/O in internal_organs)
if(zone == O.zone)
returnorg += O
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 2876ed2b780..5e8b0b9d50e 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -40,17 +40,24 @@
return
/obj/item/organ/internal/proc/prepare_eat()
- var/obj/item/weapon/reagent_containers/food/snacks/S = new
+ var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new
S.name = name
S.desc = desc
S.icon = icon
S.icon_state = icon_state
S.origin_tech = origin_tech
S.w_class = w_class
- S.reagents.add_reagent("nutriment", 5)
return S
+/obj/item/weapon/reagent_containers/food/snacks/organ
+ name = "appendix"
+ icon_state = "appendix"
+ icon = 'icons/obj/surgery.dmi'
+
+ list_reagents = list("nutriment" = 5)
+
+
/obj/item/organ/internal/Destroy()
if(owner)
Remove(owner, 1)
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 0439da5683c..d3218a2825b 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index a8c8ec89e8d..8f4682ee343 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ