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