From 046b0b997dc46b517a5a5cbc71ace278d605f420 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 23 Dec 2015 11:40:16 -0500 Subject: [PATCH] almost.... --- code/datums/hud.dm | 4 +- code/datums/spells/inflict_handler.dm | 6 +- .../changeling/powers/augmented_eyesight.dm | 12 ++-- .../gamemodes/changeling/powers/panacea.dm | 4 +- .../mutiny/directives/ipc_virus_directive.dm | 2 +- code/game/objects/effects/aliens.dm | 2 +- code/game/objects/items/devices/scanners.dm | 2 +- code/modules/mining/equipment_locker.dm | 6 +- code/modules/mob/living/carbon/alien/alien.dm | 7 +- .../carbon/alien/humanoid/alien_powers.dm | 38 +++++++++-- .../carbon/alien/humanoid/caste/drone.dm | 15 ++--- .../carbon/alien/humanoid/caste/hunter.dm | 2 +- .../carbon/alien/humanoid/caste/sentinel.dm | 4 +- .../living/carbon/alien/humanoid/empress.dm | 10 +-- .../mob/living/carbon/alien/humanoid/queen.dm | 10 +-- .../mob/living/carbon/alien/larva/larva.dm | 5 +- .../carbon/alien/special/alien_embryo.dm | 6 +- .../living/carbon/alien/special/facehugger.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 26 ++++---- .../mob/living/carbon/human/examine.dm | 10 ++- code/modules/mob/living/carbon/human/human.dm | 3 + .../living/carbon/human/species/species.dm | 6 +- .../mob/living/carbon/human/update_icons.dm | 3 + code/modules/mob/living/life.dm | 4 +- code/modules/mob/living/living.dm | 28 +------- code/modules/mob/mob_defines.dm | 2 + code/modules/mob/mob_helpers.dm | 2 +- code/modules/surgery/organs/augments_eyes.dm | 42 ++++++++---- .../surgery/organs/augments_internal.dm | 4 +- code/modules/surgery/organs/helpers.dm | 2 +- code/modules/surgery/organs/organ.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 62 ++++++++---------- code/modules/surgery/organs/subtypes/xenos.dm | 2 +- icons/mob/human_face.dmi | Bin 74337 -> 74697 bytes 34 files changed, 177 insertions(+), 160 deletions(-) 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 e01e99ba040162f9542b46d49d0e3f9b0349347d..4a54071d83cc9837980fcc030f5bf5231c40f254 100644 GIT binary patch delta 11437 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 W%?+5RtD`+g9dxt|G{2}jME*aB;|FyB delta 11080 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