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 e772ea8d048..1fa0f5c3a22 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ