diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index f25d18ab255..7b76230864f 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -24,8 +24,8 @@ var/datum/atom_hud/huds = list( \
/datum/atom_hud/proc/remove_hud_from(mob/M)
if(!M)
return
- //if(src in M.permanent_huds)//I will deal with you later -Fethas
- // return
+ if(src in M.permanent_huds)//I will deal with you later -Fethas
+ return
for(var/atom/A in hudatoms)
remove_from_single_hud(M, A)
hudusers -= M
diff --git a/code/datums/spells/inflict_handler.dm b/code/datums/spells/inflict_handler.dm
index ae985308ba5..a9aa44c2771 100644
--- a/code/datums/spells/inflict_handler.dm
+++ b/code/datums/spells/inflict_handler.dm
@@ -28,11 +28,11 @@
if("gib_brain")
if(ishuman(target))
var/mob/living/carbon/C = target
- var/obj/item/organ/internal/brain/B = C_target.get_int_organ(/obj/item/organ/internal/brain)//do we has brains?
+ var/obj/item/organ/internal/brain/B = C.get_int_organ(/obj/item/organ/internal/brain)//do we has brains?
if(B)
- B.loc = get_turf(C_target)
+ B.loc = get_turf(C)
B.transfer_identity(C)
- C_target.internal_organs -= B
+ C.internal_organs -= B
target.gib()
if("disintegrate")
target.dust()
diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
index cd2419fa1ae..c276d703996 100644
--- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
+++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
@@ -38,20 +38,20 @@
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
+ eye_colour = null
implant_overlay = null
origin_tech = "biotech=4"
slot = "eye_ling"
- status = ORGAN_ORGANIC
+ //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))
+ if(owner.eye_blind || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHTED))
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)
+ S.reagents.add_reagent("oculine", 15)
return S
@@ -59,11 +59,11 @@
name = "heat receptors"
desc = "These heat receptors dramatically increases eyes light sensing ability."
icon_state = "ling_thermal"
- eye_color = null
+ eye_colour = null
implant_overlay = null
origin_tech = "biotech=5;magnets=5"
slot = "eye_ling"
- status = ORGAN_ORGANIC
+ //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)
diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm
index 25fc19bd04b..126d30d55ce 100644
--- a/code/game/gamemodes/changeling/powers/panacea.dm
+++ b/code/game/gamemodes/changeling/powers/panacea.dm
@@ -15,8 +15,8 @@
if(egg)
egg.Remove(user)
if(iscarbon(user))
- var/mob/living/carbon/C = user
- C.vomit(0)
+ var/mob/living/carbon/human/C = user
+ C.vomit()
egg.loc = get_turf(user)
user.reagents.add_reagent("mutadone", 10)
diff --git a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm
index c67780b709d..5b46cb64b7d 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/brain/B)
+/hook/debrain/proc/debrain_directive(/obj/item/organ/internal/brain/B)
var/datum/directive/ipc_virus/D = get_directive("ipc_virus")
if (!D) return 1
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index b86c330d762..e6f14e1e73f 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -322,7 +322,7 @@
/obj/structure/alien/egg/attack_hand(mob/user)
- if(user.getorgan(/obj/item/organ/internal/xenos/plasmavessel))
+ if(user.get_int_organ(/obj/item/organ/internal/xenos/plasmavessel))
switch(status)
if(BURST)
user << "You clear the hatched egg."
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5afaabd00d4..17ba0c69436 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -247,7 +247,7 @@ REAGENT SCANNER
user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.")
var/implant_detect
for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs)
- if(CI.status == ORGAN_ROBOT && !(species && species.name == "Machine"))
+ if(CI.status == ORGAN_ROBOT && !(H.species && H.species.name == "Machine"))
implant_detect += "[H.name] is modified with a [CI.name].
"
if(implant_detect)
user.show_message("Detected cybernetic modifications:")
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 4ad70ebe1c4..5b9a563d0fe 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -986,11 +986,11 @@
w_class = 1
origin_tech = "biotech=1"
-/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/M, mob/user)
- var/obj/item/asteroid/hivelord_core/C = M
+/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user)
+ var/obj/item/organ/internal/hivelord_core/C = M
if(!istype(C, /obj/item/organ/internal/hivelord_core))
user << "The stabilizer only works on hivelord cores."
return ..()
C.preserved = 1
user << "You inject the hivelord core with the stabilizer. It will no longer go inert."
- qdel(src)
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 3c462638335..e7656c67dab 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -71,7 +71,7 @@
..(amount)
return
-/mob/living/carbon/alien/proc/getPlasma()
+/mob/living/carbon/alien/getPlasma()
return storedPlasma
/mob/living/carbon/alien/eyecheck()
@@ -262,9 +262,8 @@ Des: Gives the client of the alien an image on each infected mob.
for (var/mob/living/C in mob_list)
if(C.status_flags & XENO_HOST)
var/obj/item/organ/internal/body_egg/alien_embryo/A = C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo)
- var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]")
if(A)
- var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]")
+ var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]")
client.images += I
return
@@ -285,7 +284,7 @@ Des: Removes all infected images from the alien.
/mob/living/carbon/alien/proc/updatePlasmaDisplay()
if(hud_used) //clientless aliens
- hud_used.alien_plasma_display.maptext = "
[storedPlasma]
"
+ hud_used.alien_plasma_display.maptext = " [getPlasma()]
"
/mob/living/carbon/alien/larva/updatePlasmaDisplay()
return
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 3a60506ebe1..9600b326281 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -28,7 +28,7 @@ Doesn't work on other aliens/AI.*/
return
if(powerc(50,1))
- adjustToxLoss(-50)
+ adjustPlasma(-50)
for(var/mob/O in viewers(src, null))
O.show_message(text("[src] has planted some alien weeds!"), 1)
new /obj/structure/alien/weeds/node(loc)
@@ -40,7 +40,7 @@ Doesn't work on other aliens/AI.*/
set category = "Alien"
if(powerc(10))
- adjustToxLoss(-10)
+ adjustPlasma(-10)
var/msg = sanitize(input("Message:", "Alien Whisper") as text|null)
if(msg)
log_say("Alien Whisper: [key_name(src)]->[key_name(M)]: [msg]")
@@ -61,8 +61,8 @@ Doesn't work on other aliens/AI.*/
amount = abs(round(amount))
if(powerc(amount))
if (get_dist(src,M) <= 1)
- M.adjustToxLoss(amount)
- adjustToxLoss(-amount)
+ M.adjustPlasma(amount)
+ adjustPlasma(-amount)
M << "[src] has transfered [amount] plasma to you."
src << {"You have trasferred [amount] plasma to [M]"}
else
@@ -97,7 +97,7 @@ Doesn't work on other aliens/AI.*/
else// Not a type we can acid.
return
- adjustToxLoss(-200)
+ adjustPlasma(-200)
new /obj/effect/acid(get_turf(O), O)
visible_message("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!")
else
@@ -110,7 +110,7 @@ Doesn't work on other aliens/AI.*/
set category = "Alien"
if(powerc(50))
- adjustToxLoss(-50)
+ adjustPlasma(-50)
src.visible_message("[src] spits neurotoxin!", "You spit neurotoxin.")
var/turf/T = loc
@@ -136,7 +136,7 @@ Doesn't work on other aliens/AI.*/
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist
if(!choice || !powerc(55)) return
- adjustToxLoss(-55)
+ adjustPlasma(-55)
for(var/mob/O in viewers(src, null))
O.show_message(text("[src] vomits up a thick purple substance and shapes it!"), 1)
switch(choice)
@@ -162,3 +162,27 @@ Doesn't work on other aliens/AI.*/
//Paralyse(10)
src.visible_message("[src] hurls out the contents of their stomach!")
return
+
+/mob/living/carbon/proc/getPlasma()
+ var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)
+ if(!vessel) return 0
+ return vessel.stored_plasma
+
+
+/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
+ 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
+
+/mob/living/carbon/alien/adjustPlasma(amount)
+ . = ..()
+ updatePlasmaDisplay()
+
+/mob/living/carbon/proc/usePlasma(amount)
+ if(getPlasma() >= amount)
+ adjustPlasma(-amount)
+ return 1
+
+ return 0
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
index cff294c42cb..4a35eb8afa4 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
@@ -13,12 +13,11 @@
if(src.name == "alien drone")
src.name = text("alien drone ([rand(1, 1000)])")
src.real_name = src.name
- internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/large
- internal_organs += new /obj/item/organ/internal/xenos/resinspinner
- internal_organs += new /obj/item/organ/internal/xenos/acid
- //verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid)
- //..()
-
+ internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/drone
+ internal_organs += new /obj/item/organ/internal/xenos/acidgland
+ internal_organs += new /obj/item/organ/internal/xenos/resinspinner
+ ..()
+//
//Drones use the same base as generic humanoids.
//Drone verbs
@@ -31,7 +30,7 @@
// Queen check
var/no_queen = 1
for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list)
- if(!Q.key && Q.brain_op_stage != 4)
+ if(!Q.key && Q.get_int_organ(/obj/item/organ/internal/brain/))//Q.brain_op_stage != 4)
continue
no_queen = 0
@@ -39,7 +38,7 @@
src << "We cannot perform this ability at the present time!"
return
if(no_queen)
- adjustToxLoss(-500)
+ adjustPlasma(-500)
src << "You begin to evolve!"
for(var/mob/O in viewers(src, null))
O.show_message(text("[src] begins to twist and contort!"), 1)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index dca1719b0e3..567987ff50d 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -44,7 +44,7 @@
if(m_intent == "run" || resting)
..()
else
- adjustToxLoss(-heal_rate)
+ adjustPlasma(-heal_rate)
//Hunter verbs
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 12d5c4e155c..defb8a1554d 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -46,8 +46,8 @@
name = text("alien sentinel ([rand(1, 1000)])")
real_name = name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel
- internal_organs += new /obj/item/organ/internal/xenos/acid
- internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
+ internal_organs += new /obj/item/organ/internal/xenos/acidgland
+ internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
//..()
/mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm
index 24c1809382f..3be1e389671 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm
@@ -49,11 +49,11 @@
real_name = src.name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen
- internal_organs += new /obj/item/organ/internal/xenos/resinspinner
- internal_organs += new /obj/item/organ/internal/xenos/acid
- internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
- internal_organs += new /obj/item/organ/internal/xenos/eggsac
- //..()
+ internal_organs += new /obj/item/organ/internal/xenos/acidgland
+ internal_organs += new /obj/item/organ/internal/xenos/eggsac
+ internal_organs += new /obj/item/organ/internal/xenos/resinspinner
+ internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
+// ..()
/mob/living/carbon/alien/humanoid/empress
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 690e2722ddc..e79338f5e90 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -24,11 +24,11 @@
break
real_name = src.name
- internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/lqueen
- internal_organs += new /obj/item/organ/internal/xenos/resinspinner
- internal_organs += new /obj/item/organ/internal/xenos/acid
- internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
- internal_organs += new /obj/item/organ/internal/xenos/eggsac
+ internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen
+ internal_organs += new /obj/item/organ/internal/xenos/acidgland
+ internal_organs += new /obj/item/organ/internal/xenos/eggsac
+ internal_organs += new /obj/item/organ/internal/xenos/resinspinner
+ internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
// ..()
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 28104b67a18..df0c64f40d0 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -66,8 +66,9 @@
..()
stat(null, "Progress: [amount_grown]/[max_grown]")
-/mob/living/carbon/alien/larva/adjustToxLoss(amount)
- if(stat != DEAD)
+
+/mob/living/carbon/alien/larva/adjustPlasma(amount)
+ if(stat != DEAD && amount > 0)
amount_grown = min(amount_grown + 1, max_grown)
..(amount)
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 f7bbbd5e985..efbea778c1a 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -119,7 +119,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
Proc: RefreshInfectionImage()
Des: Removes the current icons located in the infected mob adds the current stage
----------------------------------------*/
-/obj/item/organ/internal/body_egg/proc/RefreshInfectionImage()
+/obj/item/organ/internal/body_egg/alien_embryo/RefreshInfectionImage()
RemoveInfectionImages()
AddInfectionImages()
@@ -127,7 +127,7 @@ Des: Removes the current icons located in the infected mob adds the current stag
Proc: AddInfectionImages(C)
Des: Adds the infection image to all aliens for this embryo
----------------------------------------*/
-/obj/item/organ/internal/body_egg/proc/AddInfectionImages()
+/obj/item/organ/internal/body_egg/alien_embryo/AddInfectionImages()
for(var/mob/living/carbon/alien/alien in player_list)
if(alien.client)
var/I = image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "infected[stage]")
@@ -137,7 +137,7 @@ Des: Adds the infection image to all aliens for this embryo
Proc: RemoveInfectionImage(C)
Des: Removes all images from the mob infected by this embryo
----------------------------------------*/
-/obj/item/organ/internal/body_egg/proc/RemoveInfectionImages()
+/obj/item/organ/internal/body_egg/alien_embryo/RemoveInfectionImages()
for(var/mob/living/carbon/alien/alien in player_list)
if(alien.client)
for(var/image/I in alien.client.images)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index d8ad905221e..7711df5d7f6 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -102,7 +102,7 @@ var/const/MAX_ACTIVE_TIME = 400
icon_state = "[initial(icon_state)]"
Attach(hit_atom)
-/obj/item/clothing/mask/facehugger/proc/Attach(M as mob)
+/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M as mob)
if(!isliving(M))
return 0
if( (!iscorgi(M) && !iscarbon(M)) || isalien(M))
@@ -185,7 +185,7 @@ var/const/MAX_ACTIVE_TIME = 400
icon_state = "[initial(icon_state)]_impregnated"
if(!(target.status_flags & XENO_HOST))
- new /obj/item/alien_embryo(target)
+ new /obj/item/organ/internal/body_egg/alien_embryo(target)
if(iscorgi(target))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 5fbdd068d60..2426766b212 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -732,22 +732,22 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
else
return initial(pixel_y)
+/mob/living/carbon/emp_act(severity)
+ for(var/obj/item/organ/internal/O in internal_organs)
+ O.emp_act(severity)
+ ..()
+
+/mob/living/carbon/Stat()
+ if(statpanel("Status"))
+ var/obj/item/organ/internal/xenos/plasmavessel/vessel = get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)
+ if(vessel)
+ stat(null, "Plasma Stored: [vessel.stored_plasma]/[vessel.max_plasma]")
+ ..()
+
/mob/living/carbon/get_all_slots()
return list(l_hand,
r_hand,
handcuffed,
legcuffed,
back,
- wear_mask)
-
-/mob/living/carbon/emp_act(severity)
- for(var/obj/item/organ/internal/O in internal_organs)
- O.emp_act(severity)
- ..()
-
-
- /mob/living/carbon/check_eye_prot()
- var/number = ..()
- for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs)
- number += EFP.flash_protect
- return number
+ wear_mask)
\ 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 26cd094ee3b..bdc1652231a 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -250,12 +250,15 @@
if(getBrainLoss() >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
- if(species.show_ssd && (!species.has_organ["brain"] || species.get_int_organ(/obj/item/organ/internal/brain)) && stat != DEAD)
+ if(species.show_ssd && (!species.has_organ["brain"] || src.get_int_organ(/obj/item/organ/internal/brain)) && stat != DEAD)
if(!key)
msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n"
else if(!client)
msg += "[t_He] [t_has] suddenly fallen asleep.\n"
+ if(!get_int_organ(/obj/item/organ/internal/brain))
+ msg += "It appears that it's brain is missing...\n"
+
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
var/list/is_bleeding = list()
@@ -484,11 +487,12 @@
/proc/hasHUD(mob/M as mob, hudtype)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
+ var/obj/item/organ/internal/cyberimp/eyes/hud/CIH = H.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/hud)
switch(hudtype)
if("security")
- return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses)
+ return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/security)
if("medical")
- return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced)
+ return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical)
else
return 0
else if(istype(M, /mob/living/silicon))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index a25a7273243..4c8b53ccfe7 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1110,6 +1110,9 @@
if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask
var/obj/item/clothing/mask/MFP = src.wear_mask
number += MFP.flash_protect
+ for(var/obj/item/organ/internal/cyberimp/eyes/EFP in src.internal_organs)
+ number += EFP.flash_protect
+
return number
///tintcheck()
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 3052db0793d..2b9135ea044 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -159,10 +159,10 @@
for(var/organ in has_organ)
var/organ_type = has_organ[organ]
H.internal_organs_by_name[organ] = new organ_type(H,1)
- internal_organs += new has_organ[organ]
+ H.internal_organs += new has_organ[organ]
- for(var/obj/item/organ/internal/I in internal_organs)
- I.Insert(src)
+ for(var/obj/item/organ/internal/I in H.internal_organs)
+ I.Insert(src)
for(var/name in H.organs_by_name)
H.organs |= H.organs_by_name[name]
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index d9b00be4126..0f21d097f5d 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -393,6 +393,9 @@ var/global/list/damage_icon_parts = list()
else
//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)
+
overlays_standing[HAIR_LAYER] = image(face_standing)
if(update_icons) update_icons()
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 03682334dae..684690de435 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -226,13 +226,13 @@
A.Remove(src)
for(var/obj/item/I in src)
give_action_button(I, 1)
- return
+ return
/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0)
if(I.action_button_name)
if(!I.action)
if(istype(I, /obj/item/organ/internal))
- I.action = new/datum/action/organ_action
+ I.action = new/datum/action/item_action/organ_action
else if(I.action_button_is_hands_free)
I.action = new/datum/action/item_action/hands_free
else
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 580dd5e035e..3c02732c9f5 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -923,30 +923,4 @@
//used in datum/reagents/reaction() proc
/mob/living/proc/get_permeability_protection()
- return 0
-
-/mob/living/proc/handle_actions()
- //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent
- for(var/datum/action/A in actions)
- if(A.CheckRemoval(src))
- A.Remove(src)
- for(var/obj/item/I in src)
- give_action_button(I, 1)
- return
-
-/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0)
- if(I.action_button_name)
- if(!I.action)
- if(istype(I, /obj/item/organ/internal))
- I.action = new/datum/action/item_action/organ_action
- else if(I.action_button_is_hands_free)
- I.action = new/datum/action/item_action/hands_free
- else
- I.action = new/datum/action/item_action
- I.action.name = I.action_button_name
- I.action.target = I
- I.action.Grant(src)
-
- if(recursive)
- for(var/obj/item/T in I)
- give_action_button(I, recursive - 1)
+ return 0
\ No newline at end of file
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 0a61d9030c1..ebb94255278 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -241,3 +241,5 @@
var/resize = 1 //Badminnery resize
var/datum/vision_override/vision_type = null //Vision override datum.
+
+ var/list/permanent_huds = list()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 46ee6eae9a1..29b803a6bea 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -38,7 +38,7 @@ proc/isfacehugger(A)
return 0
proc/isembryo(A)
- if(istype(A, /obj/item/alien_embryo))
+ if(istype(A, /obj/item/organ/internal/body_egg/alien_embryo))
return 1
return 0
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
index 2af447757f2..f1137f58897 100644
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ b/code/modules/surgery/organs/augments_eyes.dm
@@ -8,20 +8,34 @@
w_class = 1
var/sight_flags = 0
- var/eye_color = "fff"
- var/old_eye_color = "fff"
+ var/list/eye_colour = list(0,0,0)
+ var/list/old_eye_colour = list(0,0,0)
var/flash_protect = 0
var/aug_message = "Your vision is augmented!"
+/obj/item/organ/internal/cyberimp/eyes/proc/update_colour()
+ if(!owner)
+ return
+ eye_colour = list(
+ owner.r_eyes ? owner.r_eyes : 0,
+ owner.g_eyes ? owner.g_eyes : 0,
+ owner.b_eyes ? owner.b_eyes : 0
+ )
+
/obj/item/organ/internal/cyberimp/eyes/Insert(var/mob/living/carbon/M, var/special = 0)
..()
- if(istype(owner, /mob/living/carbon/human) && eye_color)
+ if(istype(owner, /mob/living/carbon/human) && eye_colour)
var/mob/living/carbon/human/HMN = owner
- old_eye_color = HMN.eye_color
- HMN.eye_color = eye_color
- HMN.regenerate_icons()
+ old_eye_colour[1] = HMN.r_eyes
+ old_eye_colour[2] = HMN.g_eyes
+ old_eye_colour[2] = HMN.b_eyes
+
+ HMN.r_eyes = eye_colour[1]
+ HMN.g_eyes = eye_colour[2]
+ HMN.b_eyes = eye_colour[3]
+ HMN.update_eyes()
if(aug_message && !special)
owner << "[aug_message]"
M.sight |= sight_flags
@@ -29,10 +43,12 @@
/obj/item/organ/internal/cyberimp/eyes/Remove(var/mob/living/carbon/M, var/special = 0)
..()
M.sight ^= sight_flags
- if(istype(owner,/mob/living/carbon/human) && eye_color)
+ if(istype(owner,/mob/living/carbon/human) && eye_colour)
var/mob/living/carbon/human/HMN = owner
- HMN.eye_color = old_eye_color
- HMN.regenerate_icons()
+ HMN.r_eyes = old_eye_colour[1]
+ HMN.g_eyes = old_eye_colour[2]
+ HMN.b_eyes = old_eye_colour[3]
+ HMN.update_eyes()
/obj/item/organ/internal/cyberimp/eyes/on_life()
..()
@@ -58,7 +74,7 @@
/obj/item/organ/internal/cyberimp/eyes/xray
name = "X-ray implant"
desc = "These cybernetic eye implants will give you X-ray vision. Blinking is futile."
- eye_color = "000"
+ eye_colour = rgb(0, 0, 0)
implant_color = "#000000"
origin_tech = "materials=6;programming=4;biotech=6;magnets=5"
sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
@@ -66,7 +82,7 @@
/obj/item/organ/internal/cyberimp/eyes/thermals
name = "Thermals implant"
desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included."
- eye_color = "FC0"
+ eye_colour = rgb(255, 204, 0)
implant_color = "#FFCC00"
sight_flags = SEE_MOBS
flash_protect = -1
@@ -97,7 +113,7 @@
/obj/item/organ/internal/cyberimp/eyes/hud/medical
name = "Medical HUD implant"
desc = "These cybernetic eye implants will display a medical HUD over everything you see."
- eye_color = "0ff"
+ eye_colour = rgb(15,15,0)
implant_color = "#00FFFF"
origin_tech = "materials=4;programming=3;biotech=4"
aug_message = "You suddenly see health bars floating above people's heads..."
@@ -106,7 +122,7 @@
/obj/item/organ/internal/cyberimp/eyes/hud/security
name = "Security HUD implant"
desc = "These cybernetic eye implants will display a security HUD over everything you see."
- eye_color = "d00"
+ eye_colour = rgb(208,0,0)
implant_color = "#CC0000"
origin_tech = "materials=4;programming=4;biotech=3;combat=1"
aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..."
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index bff7e2ed3ff..fe00f6f2e3e 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -157,7 +157,7 @@
desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
icon_state = "chest_implant"
implant_color = "#00AA00"
- var/hunger_threshold = NUTRITION_LEVEL_STARVING
+ var/hunger_threshold = 150
var/synthesizing = 0
var/poison_amount = 5
slot = "stomach"
@@ -186,7 +186,7 @@
desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
icon_state = "chest_implant"
implant_color = "#006607"
- hunger_threshold = NUTRITION_LEVEL_HUNGRY
+ hunger_threshold = 250
poison_amount = 10
origin_tech = "materials=5;programming=3;biotech=5"
diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm
index 755ca5e4417..a71e1003fbc 100644
--- a/code/modules/surgery/organs/helpers.dm
+++ b/code/modules/surgery/organs/helpers.dm
@@ -22,7 +22,7 @@
returnorg = get_organs_zone("groin")
for(var/obj/item/organ/internal/O in internal_organs)
- if(parent_organ == O.parent_organ)
+ if(zone == O.parent_organ)
returnorg += O
return returnorg
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index 9ecda01a4e3..85de7330052 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -4,7 +4,7 @@ var/list/organ_cache = list()
name = "organ"
icon = 'icons/obj/surgery.dmi'
var/dead_icon
- var/mob/living/carbon/owner = null
+ var/mob/living/carbon/human/owner = null
var/status = 0
var/vital //Lose a vital limb, die immediately.
var/damage = 0 // amount of damage to the organ
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index b6575e970cd..dc28e8e22d0 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -24,7 +24,7 @@
owner = M
M.internal_organs |= src
- M.internal_organs_by_name[organ_tag] = src
+ //M.internal_organs_by_name[organ_tag] = src
loc = null
if(organ_action_name)
action_button_name = organ_action_name
@@ -32,23 +32,12 @@
/obj/item/organ/internal/proc/Remove(mob/living/carbon/M, special = 0)
owner = null
if(M)
- M.internal_organs_by_name[organ_tag] = null
- M.internal_organs_by_name -= organ_tag
- M.internal_organs_by_name -= null
+ // M.internal_organs_by_name[organ_tag] = null
+ // M.internal_organs_by_name -= organ_tag
+ // M.internal_organs_by_name -= null
M.internal_organs -= src
- loc = get_turf(M)
- processing_objects |= src
- var/datum/reagent/blood/organ_blood
- if(reagents) organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list
- if(!organ_blood || !organ_blood.data["blood_DNA"])
- M.vessel.trans_to(src, 5, 1, 1)
-
if(vital && !special)
- //if(user)
- // user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [key_name(M)] (INTENT: [uppertext(user.a_intent)])"
- // M.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [key_name(user)] (INTENT: [uppertext(user.a_intent)])"
- // msg_admin_attack("[key_name_admin(user)] removed a vital organ ([src]) from [key_name_admin(M)]")
M.death()
@@ -97,14 +86,14 @@
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.unEquip()
- H.put_in_active_hand(S)
- if(fingerprints) S.fingerprints = fingerprints.Copy()
- if(fingerprintshidden) S.fingerprintshidden = fingerprintshidden.Copy()
- if(fingerprintslast) S.fingerprintslast = fingerprintslast
- S.attack(H, H)
- qdel(src)
+ if(S)
+ H.unEquip()
+ H.put_in_active_hand(S)
+ if(fingerprints) S.fingerprints = fingerprints.Copy()
+ if(fingerprintshidden) S.fingerprintshidden = fingerprintshidden.Copy()
+ if(fingerprintslast) S.fingerprintslast = fingerprintslast
+ S.attack(H, H)
+ qdel(src)
else
..()
@@ -213,20 +202,23 @@
/obj/item/organ/internal/eyes/proc/update_colour()
if(!owner)
return
- eye_colour = list(
- owner.r_eyes ? owner.r_eyes : 0,
- owner.g_eyes ? owner.g_eyes : 0,
- owner.b_eyes ? owner.b_eyes : 0
- )
+ if(istype(owner,/mob/living/carbon/human))
+ var/mob/living/carbon/human/eyes = owner
+ eye_colour = list(
+ eyes.r_eyes ? owner.r_eyes : 0,
+ eyes.g_eyes ? owner.g_eyes : 0,
+ eyes.b_eyes ? owner.b_eyes : 0
+ )
/obj/item/organ/internal/eyes/Insert(mob/living/carbon/M, special = 0)
..()
// Apply our eye colour to the target.
- if(istype(M) && eye_colour)
- M.r_eyes = eye_colour[1]
- M.g_eyes = eye_colour[2]
- M.b_eyes = eye_colour[3]
- M.update_eyes()
+ if(istype(M,/mob/living/carbon/human) && eye_colour)
+ var/mob/living/carbon/human/eyes = M
+ eyes.r_eyes = eye_colour[1]
+ eyes.g_eyes = eye_colour[2]
+ eyes.b_eyes = eye_colour[3]
+ eyes.update_eyes()
/obj/item/organ/internal/eyes/surgeryize()
@@ -335,10 +327,10 @@
/obj/item/organ/internal/shadowtumor/New()
..()
- processing_object.Add(src)
+ processing_objects.Add(src)
/obj/item/organ/internal/shadowtumor/Destroy()
- processing_object.Remove(src)
+ processing_objects.Remove(src)
..()
/obj/item/organ/internal/shadowtumor/process()
diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm
index 8863e79455f..7ae770d5551 100644
--- a/code/modules/surgery/organs/subtypes/xenos.dm
+++ b/code/modules/surgery/organs/subtypes/xenos.dm
@@ -16,7 +16,7 @@
for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers)
verbs += P
-/obj/item/organ/internal/alien/Remove(mob/living/carbon/M, special = 0)
+/obj/item/organ/internal/xenos/Remove(mob/living/carbon/M, special = 0)
for(var/mob/living/carbon/alien/humanoid/verb/P in alien_powers)
verbs -= P
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index e01e99ba040..4a54071d83c 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ