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