From 027d9660defce12e9d52f2ecead64cf1a16ea827 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 24 Dec 2015 20:26:46 -0500 Subject: [PATCH] IT COMPILES --- _maps/map_files/cyberiad/cyberiad.dmm | 4 +- .../mutiny/directives/ipc_virus_directive.dm | 2 +- .../carbon/alien/humanoid/alien_powers.dm | 4 +- code/modules/mob/living/carbon/brain/MMI.dm | 14 +- .../mob/living/carbon/brain/brain_item.dm | 40 ++-- .../living/carbon/human/species/species.dm | 3 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/surgery/organs/organ.dm | 35 +--- code/modules/surgery/organs/organ_internal.dm | 171 ++++++++++++++++-- code/modules/surgery/organs_internal.dm | 71 +++++--- code/modules/surgery/robotics.dm | 18 +- icons/mob/human_face.dmi | Bin 77924 -> 78637 bytes 12 files changed, 253 insertions(+), 111 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 913ad6f54c1..5920c286a53 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -8266,6 +8266,7 @@ "dcX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor{dir = 6; icon_state = "caution"},/area/atmos) "dcY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/turf/simulated/floor,/area/engine/mechanic_workshop) "dcZ" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor,/area/hallway/primary/starboard/west) +"dda" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ddh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/engine/engineering) "ddi" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "atmospherics_south_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "atmospherics_south_sensor"; pixel_x = -8; pixel_y = -30},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "atmospherics_south"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_airpump = "atmospherics_south_pump"; tag_chamber_sensor = "atmospherics_south_sensor"; tag_exterior_door = "atmospherics_south_outer"; tag_interior_door = "atmospherics_south_inner"},/turf/simulated/floor/plating,/area/engine/engineering) "ddj" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/external{aiControlDisabled = 1; frequency = 1379; hackProof = 1; icon_state = "door_locked"; id_tag = "atmospherics_south_inner"; locked = 1; name = "Atmospherics External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engineering) @@ -8470,7 +8471,6 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) @@ -8749,7 +8749,7 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabXabYabZacaacbaccacdaceacfacfaalbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachaciacjackaclaalacmbikbikbikbikbikabKabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalbikbikbikbikbikbikbikabKabLabLabKactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikabKacFacGactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZdgYdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdheddadgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikabKacGactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikabKactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmdhqdhpdhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadwadxadyadzadAadwadBadCacEadEadDadGadFadIadHadJacEbikbikbikbikbikbikactadKadLadMadNacXadOactadPadtadtadtadtaduadvbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhtdhtdgwdgwdgwdgmdhudgydgydgydhvdgmdgwdgwdgwdhtdhtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm index 5b46cb64b7d..6ec1d60890b 100644 --- a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm +++ b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm @@ -62,7 +62,7 @@ datum/directive/ipc_virus/get_remaining_orders() return text -/hook/debrain/proc/debrain_directive(/obj/item/organ/internal/brain/B) +/hook/debrain/proc/debrain_directive(var/obj/item/organ/internal/brain/B) var/datum/directive/ipc_virus/D = get_directive("ipc_virus") if (!D) return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 9600b326281..ce95c4dd791 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -170,8 +170,8 @@ Doesn't work on other aliens/AI.*/ /mob/living/carbon/proc/adjustPlasma(amount) - var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) - if(!get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) return 0 + var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel) + if(!vessel) return vessel.stored_plasma = max(vessel.stored_plasma + amount,0) vessel.stored_plasma = min(vessel.stored_plasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0 return 1 diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index a0168448391..f5e832cdaa7 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -12,17 +12,17 @@ var/alien = 0 var/syndiemmi = 0 //Whether or not this is a Syndicate MMI var/mob/living/carbon/brain/brainmob = null//The current occupant. - var/obj/item/organ/brain/held_brain = null // This is so MMI's aren't brainscrubber 9000's + var/obj/item/organ/internal/brain/held_brain = null // This is so MMI's aren't brainscrubber 9000's var/mob/living/silicon/robot/robot = null//Appears unused. var/obj/mecha/mecha = null//This does not appear to be used outside of reference in mecha.dm. // I'm using this for mechs giving MMIs HUDs now /obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O, /obj/item/organ/brain/crystal )) + if(istype(O, /obj/item/organ/internal/brain/crystal )) user << " This brain is too malformed to be able to use with the [src]." return - if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO - var/obj/item/organ/brain/B = O + if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO + var/obj/item/organ/internal/brain/B = O if(!B.brainmob) user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain." return @@ -47,7 +47,7 @@ user.drop_item() B.forceMove(src) held_brain = B - if(istype(O,/obj/item/organ/brain/xeno)) // I'm not sure how well this will work now, since I don't think you can actually get xeno brains + if(istype(O,/obj/item/organ/internal/brain/xeno)) // I'm not sure how well this will work now, since I don't think you can actually get xeno brains name = "Man-Machine Interface: Alien - [brainmob.real_name]" icon = 'icons/mob/alien.dmi' icon_state = "AlienMMI" @@ -89,8 +89,8 @@ held_brain = new(src) else // We have a species, and it has a brain var/brain_path = H.species.return_organ("brain") - if(!ispath(brain_path, /obj/item/organ/brain)) - brain_path = /obj/item/organ/brain + if(!ispath(brain_path, /obj/item/organ/internal/brain)) + brain_path = /obj/item/organ/internal/brain held_brain = new brain_path(src) // Slime people will keep their slimy brains this way held_brain.dna = brainmob.dna.Clone() held_brain.name = "\the [brainmob.name]'s [initial(held_brain.name)]" diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 5a0132f6bd8..d647b317a42 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -1,4 +1,4 @@ -/obj/item/organ/brain +/obj/item/organ/internal/brain name = "brain" health = 400 //They need to live awhile longer than other organs. max_damage = 200 @@ -13,33 +13,30 @@ var/mob/living/carbon/brain/brainmob = null organ_tag = "brain" parent_organ = "head" + slot = "brain" vital = 1 -/obj/item/organ/brain/attack_self(mob/user as mob) - return //let's not have players taken out of the round as easily as a click, once you have their brain. - -/obj/item/organ/brain/surgeryize() +/obj/item/organ/internal/brain/surgeryize() if(!owner) return owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. owner.ear_deaf = 0 -/obj/item/organ/brain/xeno +/obj/item/organ/internal/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." - icon = 'icons/mob/alien.dmi' - icon_state = "chitin" + icon_state = "brain-x-d" -/obj/item/organ/brain/New() +/obj/item/organ/internal/brain/New() ..() spawn(5) if(brainmob && brainmob.client) brainmob.client.screen.len = null //clear the hud -/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) +/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) brainmob = new(src) if(isnull(dna)) // someone didn't set this right... - log_to_dd("[src] at [loc] did not contain a dna datum at time of removed.") + log_to_dd("[src] at [loc] did not contain a dna datum at time of removal.") dna = H.dna.Clone() name = "\the [dna.real_name]'s [initial(src.name)]" brainmob.dna = dna.Clone() // Silly baycode, what you do @@ -53,18 +50,18 @@ brainmob << "You feel slightly disoriented. That's normal when you're just a [initial(src.name)]." callHook("debrain", list(brainmob)) -/obj/item/organ/brain/examine(mob/user) // -- TLE +/obj/item/organ/internal/brain/examine(mob/user) // -- TLE ..(user) if(brainmob && brainmob.client)//if thar be a brain inside... the brain. user << "You can feel the small spark of life still left in this one." else user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.." -/obj/item/organ/brain/removed(var/mob/living/user) +/obj/item/organ/internal/brain/Remove(var/mob/living/user) if(!owner) return ..() // Probably a redundant removal; just bail - var/obj/item/organ/brain/B = src + var/obj/item/organ/internal/brain/B = src if(istype(B) && istype(owner) && is_primary_organ()) var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() @@ -76,12 +73,12 @@ ..() -/obj/item/organ/brain/replaced(var/mob/living/target) +/obj/item/organ/internal/brain/Insert(var/mob/living/target) var/brain_already_exists = 0 if(istype(target,/mob/living/carbon/human)) // No more IPC multibrain shenanigans - var/mob/living/carbon/human/H = target - if(organ_tag in H.internal_organs_by_name) + //var/mob/living/carbon/human/H = target + if(target.get_int_organ(/obj/item/organ/internal/brain)) brain_already_exists = 1 if(!brain_already_exists) @@ -97,19 +94,22 @@ target.key = brainmob.key ..() -/obj/item/organ/brain/slime +/obj/item/organ/internal/brain/prepare_eat() + return // Too important to eat. + +/obj/item/organ/internal/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." icon = 'icons/mob/slimes.dmi' icon_state = "green slime extract" -/obj/item/organ/brain/golem +/obj/item/organ/internal/brain/golem name = "chem" desc = "A tightly furled roll of paper, covered with indecipherable runes." icon = 'icons/obj/wizard.dmi' icon_state = "scroll" -/obj/item/organ/brain/Destroy() //copypasted from MMIs. +/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs. if(brainmob) qdel(brainmob) brainmob = null diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e469c09cab4..95892601c83 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -159,8 +159,9 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] + world << "[organ_type]"//debug print H.internal_organs_by_name[organ] = new organ_type(H,1) - H.internal_organs += new has_organ[organ] + H.internal_organs += new organ_type for(var/obj/item/organ/internal/I in H.internal_organs) I.Insert(src) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 0f21d097f5d..f75d9500e7e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -394,7 +394,7 @@ var/global/list/damage_icon_parts = list() //warning("Invalid h_style for [species.name]: [h_style]") if(!get_int_organ(/obj/item/organ/internal/brain)) - face_standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) + face_standing += icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) overlays_standing[HAIR_LAYER] = image(face_standing) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 82f35730bf8..5b297ce24e4 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -32,6 +32,7 @@ var/list/organ_cache = list() /obj/item/organ/Destroy() if(!owner) return ..() +/* if(istype(owner, /mob/living/carbon)) if((owner.internal_organs) && (src in owner.internal_organs)) @@ -43,17 +44,13 @@ var/list/organ_cache = list() owner.organs -= src if((owner.organs_by_name) && (src in owner.organs_by_name)) owner.organs_by_name -= src +*/ if(src in owner.contents) owner.contents -= src return ..() -/obj/item/organ/attack_self(mob/user as mob) - // Convert it to an edible form, yum yum. - if(!robotic && user.a_intent == I_HARM) - bitten(user) - return /obj/item/organ/proc/update_health() return @@ -331,34 +328,6 @@ var/list/organ_cache = list() if(robotic) status |= ORGAN_ROBOT -/obj/item/organ/eyes/replaced(var/mob/living/carbon/human/target) - - // Apply our eye colour to the target. - if(istype(target) && eye_colour) - target.r_eyes = eye_colour[1] - target.g_eyes = eye_colour[2] - target.b_eyes = eye_colour[3] - target.update_eyes() - ..() - -/obj/item/organ/proc/bitten(mob/user) - - if(robotic) - return - - user << "\blue You take a bite out of \the [src]." - - user.unEquip(src) - var/obj/item/weapon/reagent_containers/food/snacks/organ/O = new(get_turf(src)) - O.name = name - O.icon_state = dead_icon ? dead_icon : icon_state - - if(fingerprints) O.fingerprints = fingerprints.Copy() - if(fingerprintshidden) O.fingerprintshidden = fingerprintshidden.Copy() - if(fingerprintslast) O.fingerprintslast = fingerprintslast - - user.put_in_active_hand(O) - qdel(src) /obj/item/organ/proc/surgeryize() return diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 46d7f01b0d9..19286ab2784 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -1,27 +1,136 @@ #define PROCESS_ACCURACY 10 +/obj/item/organ/internal + origin_tech = "biotech=2" + force = 1 + w_class = 2 + throwforce = 0 + var/zone = "chest" + var/slot + vital = 0 + var/organ_action_name = null + +/obj/item/organ/internal/proc/Insert(mob/living/carbon/M, special = 0) + if(!iscarbon(M) || owner == M) + return + + var/obj/item/organ/internal/replaced = M.get_organ_slot(slot) + if(replaced) + replaced.Remove(M, special = 1) + + owner = M + M.internal_organs |= src + loc = null + if(organ_action_name) + action_button_name = organ_action_name + + +/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0) + owner = null + if(M) + M.internal_organs -= src + if(vital && !special) + M.death() + + if(organ_action_name) + action_button_name = null + +/obj/item/organ/internal/proc/on_find(mob/living/finder) + return + +/obj/item/organ/internal/proc/on_life() + return + +/obj/item/organ/internal/proc/prepare_eat() + 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 + + return S + +/obj/item/weapon/reagent_containers/food/snacks/organ + name = "appendix" + icon_state = "appendix" + icon = 'icons/obj/surgery.dmi' + +/obj/item/weapon/reagent_containers/food/snacks/organ/New() + ..() + + reagents.add_reagent("nutriment" = 5) + + +/obj/item/organ/internal/Destroy() + if(owner) + Remove(owner, 1) + return ..() + +/obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) + if(M == user && ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/weapon/reagent_containers/food/snacks/S = prepare_eat() + if(S) + H.drop_item() + H.put_in_active_hand(S) + S.attack(H, H) + qdel(src) + else + ..() + /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ // Brain is defined in brain_item.dm. -/obj/item/organ/heart +/obj/item/organ/internal/heart name = "heart" icon_state = "heart-on" organ_tag = "heart" parent_organ = "chest" dead_icon = "heart-off" vital = 1 + var/beating = 0 -/obj/item/organ/lungs +/obj/item/organ/internal/heart/update_icon() + if(beating) + icon_state = "heart-on" + else + icon_state = "heart-off" + +/obj/item/organ/internal/heart/Insert(mob/living/carbon/M, special = 0) + ..() + beating = 1 + update_icon() + +/obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) + ..() + spawn(120) + beating = 0 + update_icon() + +/obj/item/organ/internal/heart/prepare_eat() + var/obj/S = ..() + S.icon_state = "heart-off" + return S + +/obj/item/organ/internal/lungs name = "lungs" icon_state = "lungs" gender = PLURAL organ_tag = "lungs" parent_organ = "chest" + slot = "lungs" -/obj/item/organ/lungs/process() +//Insert something neat here. +///obj/item/organ/internal/heart/Remove(mob/living/carbon/M, special = 0) +// ..() + + +/obj/item/organ/internal/lungs/process() ..() if(!owner) @@ -39,14 +148,15 @@ spawn owner.custom_emote(1, "gasps for air!") owner.losebreath += 5 -/obj/item/organ/kidneys +/obj/item/organ/internal/kidneys name = "kidneys" icon_state = "kidneys" gender = PLURAL organ_tag = "kidneys" parent_organ = "groin" + slot = "kidneys" -/obj/item/organ/kidneys/process() +/obj/item/organ/internal/kidneys/process() ..() @@ -64,15 +174,16 @@ owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) -/obj/item/organ/eyes +/obj/item/organ/internal/eyes name = "eyeballs" icon_state = "eyes" gender = PLURAL organ_tag = "eyes" parent_organ = "head" + slot = "eyes" var/list/eye_colour = list(0,0,0) -/obj/item/organ/eyes/proc/update_colour() +/obj/item/organ/internal/eyes/proc/update_colour() if(!owner) return eye_colour = list( @@ -81,7 +192,7 @@ owner.b_eyes ? owner.b_eyes : 0 ) -/obj/item/organ/eyes/surgeryize() +/obj/item/organ/internal/eyes/surgeryize() if(!owner) return owner.disabilities &= ~NEARSIGHTED @@ -89,13 +200,14 @@ owner.eye_blurry = 0 owner.eye_blind = 0 -/obj/item/organ/liver +/obj/item/organ/internal/liver name = "liver" icon_state = "liver" organ_tag = "liver" parent_organ = "groin" + slot = "liver" -/obj/item/organ/liver/process() +/obj/item/organ/internal/liver/process() ..() @@ -118,7 +230,7 @@ src.damage += 0.2 * PROCESS_ACCURACY //Damaged one shares the fun else - var/obj/item/organ/O = pick(owner.internal_organs) + var/obj/item/organ/internal/O = pick(owner.internal_organs) if(O) O.damage += 0.2 * PROCESS_ACCURACY @@ -148,15 +260,16 @@ if(owner.reagents.has_reagent(toxin)) owner.adjustToxLoss(0.3 * PROCESS_ACCURACY) -/obj/item/organ/appendix +/obj/item/organ/internal/appendix name = "appendix" icon_state = "appendix" organ_tag = "appendix" parent_organ = "groin" + slot = "appendix" /* -/obj/item/organ/appendix/removed() +/obj/item/organ/internal/appendix/removed() if(owner) var/inflamed = 0 @@ -168,4 +281,34 @@ icon_state = "appendixinflamed" name = "inflamed appendix" ..() -*/ \ No newline at end of file +*/ + +/obj/item/organ/internal/shadowtumor + name = "black tumor" + desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light." + icon_state = "blacktumor" + origin_tech = "biotech=4" + w_class = 1 + parent_organ = "head" + slot = "brain_tumor" + health = 3 + +/obj/item/organ/internal/shadowtumor/New() + ..() + processing_objects.Add(src) + +/obj/item/organ/internal/shadowtumor/Destroy() + processing_objects.Remove(src) + ..() + +/obj/item/organ/internal/shadowtumor/process() + if(isturf(loc)) + var/turf/T = loc + var/light_count = T.get_lumcount() + if(light_count > 4 && health > 0) //Die in the light + health-- + else if(light_count < 2 && health < 3) //Heal in the dark + health++ + if(health <= 0) + visible_message("[src] collapses in on itself!") + qdel(src) \ No newline at end of file diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 97f639e76d3..b55c3deb534 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -45,7 +45,7 @@ user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") ticker.mode.remove_thrall(target.mind,0) - + new /obj/item/organ/internal/shadowtumor(get_turf(target)) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/braincase = target.named_organ_parent("brain") if(prob(50)) @@ -72,9 +72,10 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/embryo = 0 - for(var/obj/item/alien_embryo/A in target) + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) embryo = 1 - break + //break if (!hasorgans(target)) return @@ -92,8 +93,34 @@ user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", "You rip the larva out of [target]'s ribcage!") - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(A.stage < 4) + user << "It's small and weak, barely the size of a foetus." + else + user << "It's grown quite large, and writhes slightly as you look at it." + if(prob(10)) + A.AttemptGrow() + + A.Remove(target) + A.loc = get_turf(target) + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + ////////////////////////////////////////////////////////////////// @@ -116,7 +143,7 @@ if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I.damage > 0 && I.robotic < 2) is_organ_damaged = 1 break @@ -133,7 +160,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic < 2) spread_germs_to_organ(I, user) @@ -154,7 +181,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) @@ -181,7 +208,7 @@ target.adjustToxLoss(10) affected.createwound(CUT, 5) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) I.take_damage(dam_amt,0) @@ -211,7 +238,7 @@ var/list/attached_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs[I.organ_tag] = I @@ -237,7 +264,7 @@ user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.op_stage.organ_ref + var/obj/item/organ/internal/I = target.op_stage.organ_ref if(I && istype(I)) spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY @@ -273,7 +300,7 @@ var/list/removable_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) removable_organs[I.organ_tag] = I @@ -297,10 +324,12 @@ // Extract the organ! if(target.op_stage.current_organ) - var/obj/item/organ/O = target.op_stage.organ_ref + var/obj/item/organ/internal/O = target.op_stage.organ_ref if(O && istype(O)) + spread_germs_to_organ(O, user) - O.removed(user) + O.Remove(user) + O.loc = get_turf(target) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -310,7 +339,7 @@ /datum/surgery_step/internal/replace_organ allowed_tools = list( - /obj/item/organ = 100 + /obj/item/organ/internal = 100 ) min_duration = 60 @@ -318,7 +347,7 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/O = tool + var/obj/item/organ/internal/O = tool var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/organ_compatible @@ -376,15 +405,15 @@ user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") user.drop_item(tool) - var/obj/item/organ/O = tool + var/obj/item/organ/internal/O = tool if(istype(O)) - O.replaced(target,affected) + O.Insert(target) spread_germs_to_organ(O, user) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/I = tool + var/obj/item/organ/internal/I = tool if(istype(I)) I.take_damage(rand(3,5),0) @@ -412,7 +441,7 @@ var/list/removable_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) removable_organs[I.organ_tag] = I @@ -434,7 +463,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.op_stage.organ_ref + var/obj/item/organ/internal/I = target.op_stage.organ_ref if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY spread_germs_to_organ(I, user) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 87f0e3318cd..c18f5eafb34 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -224,7 +224,7 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!affected) return var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I.damage > 0 && I.robotic >= 2) is_organ_damaged = 1 break @@ -236,7 +236,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ @@ -251,7 +251,7 @@ return var/obj/item/organ/external/affected = target.get_organ(target_zone) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) if(I.robotic >= 2) @@ -271,7 +271,7 @@ target.adjustToxLoss(5) affected.createwound(CUT, 5) - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.take_damage(rand(3,5),0) @@ -297,7 +297,7 @@ var/list/attached_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && istype(I) && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs[I.organ_tag] = I @@ -319,7 +319,7 @@ user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status |= ORGAN_CUT_AWAY @@ -348,7 +348,7 @@ var/list/removable_organs = list() for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ + var/obj/item/organ/internal/I = organ if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) removable_organs[I.organ_tag] = I @@ -369,7 +369,7 @@ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] + var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY @@ -432,7 +432,7 @@ "\blue You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/device/mmi/M = tool - var/obj/item/organ/mmi_holder/holder = new(target, 1) + var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) if (istype(M, /obj/item/device/mmi/posibrain)) holder.robotize() diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index e772ea8d04898938a42378b9466fa61369d99e73..1fa0f5c3a222aaeb0fe4488105a2cd164a8597e1 100644 GIT binary patch delta 14837 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 CFCat!