mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-16 09:34:21 +01:00
things
and stuff...gonna need to get to those merge conflicts eventually. also purged all mention of internal_organs by name from the face of the earth. we have get_int_organ now...i may need to tweak shit. oh and i broke some things...
This commit is contained in:
@@ -1575,9 +1575,9 @@ datum/preferences
|
||||
else
|
||||
O.robotize()
|
||||
else
|
||||
var/obj/item/organ/internal/I = character.internal_organs_by_name[name]
|
||||
var/obj/item/organ/internal/I = character.get_int_organ(name)
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
if(status == "assisted")//add an actual organ for this?
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
gender = MALE
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD)
|
||||
var/list/stomach_contents = list()
|
||||
var/list/internal_organs = list()
|
||||
var/brain_op_stage = 0.0
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/antibodies = 0
|
||||
|
||||
@@ -256,8 +256,8 @@
|
||||
else if(!client)
|
||||
msg += "[t_He] [t_has] suddenly fallen asleep.\n"
|
||||
|
||||
if(!get_int_organ(/obj/item/organ/internal/brain))
|
||||
msg += "<span class='deadsay'>It appears that it's brain is missing...</span>\n"
|
||||
if(!src.get_int_organ(/obj/item/organ/internal/brain))
|
||||
msg += "<span class='deadsay'>It appears that thier brain is missing...</span>\n"
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_destroyed = list()
|
||||
|
||||
@@ -1313,14 +1313,14 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/proc/is_lung_ruptured()
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"]
|
||||
var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs)
|
||||
if(!L)
|
||||
return 0
|
||||
|
||||
return L.is_bruised()
|
||||
|
||||
/mob/living/carbon/human/proc/rupture_lung()
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"]
|
||||
var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs)
|
||||
if(!L)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 is the magic human max health number
|
||||
ChangeToHusk() //BECAUSE NO ONE THOUGHT TO USE LIVING/VAR/MAXHEALTH I GUESS
|
||||
if(species.can_revive_by_healing)
|
||||
var/obj/item/organ/internal/brain/B = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(B)
|
||||
if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD)
|
||||
update_revive()
|
||||
@@ -32,7 +32,7 @@
|
||||
return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(sponge)
|
||||
sponge.take_damage(amount, 1)
|
||||
brainloss = sponge.damage
|
||||
@@ -46,7 +46,7 @@
|
||||
return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(sponge)
|
||||
sponge.damage = min(max(amount, 0),(maxHealth*2))
|
||||
brainloss = sponge.damage
|
||||
@@ -60,7 +60,7 @@
|
||||
return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
|
||||
if(sponge)
|
||||
brainloss = min(sponge.damage,maxHealth*2)
|
||||
else
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/mob/living/carbon/human/proc/update_eyes()
|
||||
var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(eyes)
|
||||
eyes.update_colour()
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/carbon/var/list/internal_organs = list()
|
||||
///mob/living/carbon/var/list/internal_organs = list()
|
||||
/mob/living/carbon/human/var/list/organs = list()
|
||||
/mob/living/carbon/human/var/list/organs_by_name = list() // map organ names to organs
|
||||
/mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too
|
||||
//mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too
|
||||
|
||||
// Takes care of organ related updates, such as broken and missing limbs
|
||||
/mob/living/carbon/human/proc/handle_organs()
|
||||
@@ -157,7 +157,7 @@ I use this to standardize shadowling dethrall code
|
||||
-- Crazylemon
|
||||
*/
|
||||
/mob/living/carbon/human/proc/named_organ_parent(var/organ_name)
|
||||
if (!(organ_name in internal_organs_by_name))
|
||||
if (!get_int_organ(organ_name))
|
||||
return null
|
||||
var/obj/item/organ/O = internal_organs_by_name[organ_name]
|
||||
var/obj/item/organ/internal/O = get_int_organ(organ_name)
|
||||
return O.parent_organ
|
||||
@@ -215,7 +215,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
if (radiation)
|
||||
|
||||
if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs))
|
||||
if(src.get_int_organ(/obj/item/organ/internal/nucleation/resonant_crystal))
|
||||
var/rads = radiation/25
|
||||
radiation -= rads
|
||||
radiation -= 0.1
|
||||
@@ -894,7 +894,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
//Vision //god knows why this is here
|
||||
var/obj/item/organ/internal/vision
|
||||
if(species.vision_organ)
|
||||
vision = internal_organs_by_name[species.vision_organ]
|
||||
vision = get_int_organ(/obj/item/organ/internal/eyes)//wot?
|
||||
|
||||
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
|
||||
eye_blind = 0
|
||||
@@ -1207,7 +1207,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
/mob/living/carbon/human/proc/handle_heartbeat()
|
||||
var/client/C = src.client
|
||||
if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref
|
||||
var/obj/item/organ/internal/heart/H = internal_organs_by_name["heart"]
|
||||
var/obj/item/organ/internal/heart/H = get_int_organ(/obj/item/organ/internal/heart)
|
||||
|
||||
if(!H) //H.status will runtime if there is no H (obviously)
|
||||
return
|
||||
|
||||
@@ -47,14 +47,14 @@
|
||||
|
||||
/datum/species/wryn/handle_death(var/mob/living/carbon/human/H)
|
||||
for(var/mob/living/carbon/C in living_mob_list)
|
||||
if(locate(/obj/item/organ/internal/wryn/hivenode) in C.internal_organs)
|
||||
if(C.get_int_organ(/obj/item/organ/internal/wryn/hivenode))
|
||||
C << "<span class='danger'><B>Your antennae tingle as you are overcome with pain...</B></span>"
|
||||
C << "<span class='danger'>It feels like part of you has died.</span>"
|
||||
|
||||
/datum/species/wryn/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M)
|
||||
if(M.a_intent == I_HARM)
|
||||
if(H.handcuffed)
|
||||
if(!(locate(H.internal_organs_by_name["antennae"]) in H.internal_organs)) return
|
||||
if(!H.get_int_organ(/obj/item/organ/internal/wryn/hivenode)) return
|
||||
var/turf/p_loc = M.loc
|
||||
var/turf/p_loc_m = H.loc
|
||||
|
||||
@@ -62,9 +62,10 @@
|
||||
H << "<span class='danger'><B>[M] grips your antennae and starts violently pulling!<B></span>"
|
||||
do_after(H, 250, target = src)
|
||||
if(p_loc == M.loc && p_loc_m == H.loc)
|
||||
qdel(H.internal_organs_by_name["antennae"])
|
||||
var/obj/item/organ/internal/wryn/hivenode/node = new /obj/item/organ/internal/wryn/hivenode
|
||||
H.remove_language("Wryn Hivemind")
|
||||
new /obj/item/organ/internal/wryn/hivenode(M.loc)
|
||||
node.remove(H)
|
||||
node.loc = M.loc
|
||||
M << "<span class='notice'>You hear a loud crunch as you mercilessly pull off [H]'s antennae.</span>"
|
||||
H << "<span class='danger'><B>You hear a loud crunch as your antennae is ripped off your head by [M].</span></B>"
|
||||
H << "<span class='danger'><span class='danger'><B>It's so quiet...</B></span>"
|
||||
|
||||
@@ -137,19 +137,17 @@
|
||||
if((organ in H.organs))
|
||||
qdel(organ)
|
||||
|
||||
for(var/obj/item/organ/internal/organ in H.contents)
|
||||
if((organ in H.internal_organs))
|
||||
qdel(organ)
|
||||
//for(var/obj/item/organ/internal/organ in H.contents)
|
||||
// if((organ in H.internal_organs))
|
||||
// qdel(organ)
|
||||
|
||||
if(H.organs) H.organs.Cut()
|
||||
if(H.internal_organs) H.internal_organs.Cut()
|
||||
//if(H.internal_organs) H.internal_organs.Cut()
|
||||
if(H.organs_by_name) H.organs_by_name.Cut()
|
||||
if(H.internal_organs_by_name) H.internal_organs_by_name.Cut()
|
||||
|
||||
H.organs = list()
|
||||
H.internal_organs = list()
|
||||
H.organs_by_name = list()
|
||||
H.internal_organs_by_name = list()
|
||||
|
||||
for(var/limb_type in has_limbs)
|
||||
var/list/organ_data = has_limbs[limb_type]
|
||||
@@ -157,15 +155,12 @@
|
||||
var/obj/item/organ/O = new limb_path(H)
|
||||
organ_data["descriptor"] = O.name
|
||||
|
||||
for(var/organ in has_organ)
|
||||
var/organ_type = has_organ[organ]
|
||||
//world << "[organ_type]"//debug print
|
||||
H.internal_organs_by_name[organ] = new organ_type(H,1)
|
||||
H.internal_organs += new organ_type
|
||||
for(var/index in has_organ)
|
||||
var/organ = has_organ[index]
|
||||
H.internal_organs += new organ(null)
|
||||
|
||||
for(var/obj/item/organ/internal/I in H.internal_organs)
|
||||
if(!H.get_int_organ(I))
|
||||
I.insert(src)
|
||||
I.insert(H)
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
H.organs |= H.organs_by_name[name]
|
||||
@@ -609,6 +604,7 @@
|
||||
Returns the path corresponding to the corresponding organ
|
||||
It'll return null if the organ doesn't correspond, so include null checks when using this!
|
||||
*/
|
||||
//Fethas Todo:Do i need to redo this?
|
||||
/datum/species/proc/return_organ(var/organ_slot)
|
||||
if(!(organ_slot in has_organ))
|
||||
return null
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
reagent_tag = PROCESS_SYN
|
||||
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/internal/mmi_holder/posibrain,
|
||||
"brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain,
|
||||
"cell" = /obj/item/organ/internal/cell,
|
||||
"optics" = /obj/item/organ/internal/optical_sensor
|
||||
)
|
||||
|
||||
@@ -245,7 +245,7 @@ var/global/list/damage_icon_parts = list()
|
||||
qdel(stand_icon)
|
||||
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
|
||||
var/icon_key = ""
|
||||
var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
|
||||
if(eyes)
|
||||
icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]"
|
||||
|
||||
@@ -652,7 +652,7 @@
|
||||
//Synthetic human mob goes here.
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!isnull(H.internal_organs_by_name["cell"]) && H.a_intent == I_GRAB)
|
||||
if(H.get_int_organ(/obj/item/organ/internal/cell) && H.a_intent == I_GRAB)
|
||||
if(emagged || stat & BROKEN)
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
continue
|
||||
// Where we're going, we don't need eyes.
|
||||
// Prosthetic eyes will also protect against this business.
|
||||
var/obj/item/organ/internal/eyes = l.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = l.get_int_organ(/obj/item/organ/internal/eyes/)
|
||||
if(!istype(eyes))
|
||||
continue
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
|
||||
|
||||
@@ -525,7 +525,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
|
||||
if(prob(80))
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(istype(E))
|
||||
E.damage = max(E.damage-1, 0)
|
||||
M.eye_blurry = max(M.eye_blurry-1 , 0)
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
M:drowsyness = max(M:drowsyness, 30/sober_str)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
||||
if (istype(L))
|
||||
if (H.get_int_organ(/obj/item/organ/internal/liver))
|
||||
var/obj/item/organ/internal/liver/L = /obj/item/organ/internal/liver
|
||||
L.take_damage(0.1, 1)
|
||||
H.adjustToxLoss(0.1)
|
||||
..()
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
M.eye_blind = 0
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(istype(E))
|
||||
E.damage = max(E.damage-5 , 0)
|
||||
M.SetWeakened(0)
|
||||
|
||||
@@ -78,8 +78,8 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
//Mitocholide is hard enough to get, it's probably fair to make this all internal organs
|
||||
for(var/name in H.internal_organs_by_name)
|
||||
var/obj/item/organ/internal/I = H.internal_organs_by_name[name]
|
||||
for(var/name in H.internal_organs)
|
||||
var/obj/item/organ/internal/I = H.get_int_organ(name)
|
||||
if(I.damage > 0)
|
||||
I.damage = max(I.damage-0.4, 0)
|
||||
..()
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
target.blinded += 1.5
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = target.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \
|
||||
"\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" )
|
||||
|
||||
@@ -7,13 +7,12 @@
|
||||
parent_organ = "eyes"
|
||||
w_class = 1
|
||||
|
||||
var/sight_flags = 0
|
||||
var/vision_flags = 0
|
||||
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
|
||||
@@ -38,11 +37,12 @@
|
||||
HMN.update_eyes()
|
||||
if(aug_message && !special)
|
||||
owner << "<span class='notice'>[aug_message]</span>"
|
||||
M.sight |= sight_flags
|
||||
M.sight |= vision_flags
|
||||
world << "[M.sight]"
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/remove(var/mob/living/carbon/M, var/special = 0)
|
||||
..()
|
||||
M.sight ^= sight_flags
|
||||
M.sight ^= vision_flags
|
||||
if(istype(owner,/mob/living/carbon/human) && eye_colour)
|
||||
var/mob/living/carbon/human/HMN = owner
|
||||
HMN.r_eyes = old_eye_colour[1]
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/on_life()
|
||||
..()
|
||||
owner.sight |= sight_flags
|
||||
owner.sight |= vision_flags
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/emp_act(severity)
|
||||
if(!owner)
|
||||
@@ -77,14 +77,14 @@
|
||||
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
|
||||
vision_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
|
||||
|
||||
/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_colour = rgb(255, 204, 0)
|
||||
implant_color = "#FFCC00"
|
||||
sight_flags = SEE_MOBS
|
||||
vision_flags = SEE_MOBS
|
||||
flash_protect = -1
|
||||
origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4"
|
||||
aug_message = "You see prey everywhere you look..."
|
||||
@@ -137,5 +137,6 @@
|
||||
implant_color = "#101010"
|
||||
flash_protect = 2
|
||||
// Welding with thermals will still hurt your eyes a bit.
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/emp_act(severity)
|
||||
return
|
||||
@@ -8,6 +8,8 @@
|
||||
status = ORGAN_ROBOT
|
||||
var/implant_color = "#FFFFFF"
|
||||
var/implant_overlay
|
||||
tough = 1 //not easyly broken by combat damage
|
||||
sterile = 1 //not very germy
|
||||
|
||||
/obj/item/organ/internal/cyberimp/New(var/mob/M = null)
|
||||
if(iscarbon(M))
|
||||
|
||||
@@ -87,7 +87,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
|
||||
|
||||
// Damaged heart virtually reduces the blood volume, as the blood isn't
|
||||
// being pumped properly anymore.
|
||||
var/obj/item/organ/internal/heart/heart = internal_organs_by_name["heart"]
|
||||
var/obj/item/organ/internal/heart/heart = get_int_organ(/obj/item/organ/internal/heart)
|
||||
|
||||
if(heart)
|
||||
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
|
||||
|
||||
@@ -32,19 +32,20 @@ var/list/organ_cache = list()
|
||||
/obj/item/organ/Destroy()
|
||||
if(!owner)
|
||||
return ..()
|
||||
/*
|
||||
|
||||
|
||||
if(istype(owner, /mob/living/carbon))
|
||||
if((owner.internal_organs) && (src in owner.internal_organs))
|
||||
owner.internal_organs -= src
|
||||
var/obj/item/organ/internal/O = src
|
||||
O.remove(owner)
|
||||
if(istype(owner, /mob/living/carbon/human))
|
||||
if((owner.internal_organs_by_name) && (src in owner.internal_organs_by_name))
|
||||
owner.internal_organs_by_name -= src
|
||||
if((owner.organs) && (src in owner.organs))
|
||||
owner.organs -= src
|
||||
if((owner.organs_by_name) && (src in owner.organs_by_name))
|
||||
owner.organs_by_name -= src
|
||||
*/
|
||||
var/obj/item/organ/internal/O = src
|
||||
O.remove(owner)
|
||||
if((owner.organs) && (src in owner.organs))
|
||||
owner.organs -= src
|
||||
if((owner.organs_by_name) && (src in owner.organs_by_name))
|
||||
owner.organs_by_name -= src
|
||||
|
||||
if(src in owner.contents)
|
||||
owner.contents -= src
|
||||
|
||||
@@ -101,8 +102,8 @@ var/list/organ_cache = list()
|
||||
owner.death()
|
||||
|
||||
/obj/item/organ/process()
|
||||
if(loc != owner)
|
||||
owner = null
|
||||
//if(loc != owner)
|
||||
// owner = null
|
||||
|
||||
//dead already, no need for more processing
|
||||
if(status & ORGAN_DEAD)
|
||||
@@ -289,10 +290,10 @@ var/list/organ_cache = list()
|
||||
if(!istype(owner))
|
||||
return
|
||||
|
||||
if(is_primary_organ())
|
||||
owner.internal_organs_by_name[organ_tag] = null
|
||||
owner.internal_organs_by_name -= organ_tag
|
||||
owner.internal_organs_by_name -= null // uh what does this line even do this seems silly
|
||||
//if(is_primary_organ())//Toddo from fethas:Do i need to move ths?
|
||||
// owner.internal_organs_by_name[organ_tag] = null
|
||||
// owner.internal_organs_by_name -= organ_tag
|
||||
// owner.internal_organs_by_name -= null // uh what does this line even do this seems silly
|
||||
|
||||
owner.internal_organs -= src
|
||||
|
||||
@@ -320,10 +321,9 @@ var/list/organ_cache = list()
|
||||
|
||||
owner = target
|
||||
processing_objects -= src
|
||||
target.internal_organs |= src
|
||||
affected.internal_organs |= src
|
||||
if (!(organ_tag in target.internal_organs_by_name))
|
||||
target.internal_organs_by_name[organ_tag] = src // In case multiple of the same type are inserted, only the first one is the primary organ
|
||||
if (!target.get_int_organ(src))
|
||||
target.internal_organs |= src
|
||||
src.loc = target
|
||||
if(robotic)
|
||||
status |= ORGAN_ROBOT
|
||||
@@ -342,4 +342,4 @@ I use this so that this can be made better once the organ overhaul rolls out --
|
||||
O = owner
|
||||
if (!istype(owner)) // You're not the primary organ of ANYTHING, bucko
|
||||
return 0
|
||||
return src == O.internal_organs_by_name[organ_tag]
|
||||
return src == O.get_int_organ(organ_tag)
|
||||
|
||||
@@ -71,7 +71,9 @@
|
||||
|
||||
if(internal_organs)
|
||||
for(var/obj/item/organ/internal/O in internal_organs)
|
||||
qdel(O)
|
||||
internal_organs -= O
|
||||
O.remove(owner)
|
||||
//qdel(O)
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -95,11 +97,12 @@
|
||||
if(contents.len)
|
||||
var/obj/item/removing = pick(contents)
|
||||
removing.loc = get_turf(user.loc)
|
||||
var/obj/item/organ/O = removing
|
||||
var/obj/item/organ/internal/O = removing
|
||||
if(istype(O))
|
||||
O.status |= ORGAN_CUT_AWAY
|
||||
spread_germs_to_organ(O,user) // This wouldn't be any cleaner than the actual surgery
|
||||
O.removed(user)
|
||||
if(!O.sterile)
|
||||
spread_germs_to_organ(O,user) // This wouldn't be any cleaner than the actual surgery
|
||||
O.remove(src)
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(removing)
|
||||
user.visible_message("<span class='danger'><b>[user]</b> extracts [removing] from [src] with [W]!")
|
||||
@@ -166,7 +169,8 @@
|
||||
// Damage an internal organ
|
||||
if(internal_organs && internal_organs.len)
|
||||
var/obj/item/organ/internal/I = pick(internal_organs)
|
||||
I.take_damage(brute / 2)
|
||||
if(!I.tough)//mostly for cybernetic organs
|
||||
I.take_damage(brute / 2)
|
||||
brute -= brute / 2
|
||||
|
||||
if(status & ORGAN_BROKEN && prob(40) && brute)
|
||||
|
||||
@@ -33,7 +33,7 @@ var/global/list/limb_icon_cache = list()
|
||||
|
||||
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human)
|
||||
..()
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ("eyes")//owner.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"]
|
||||
if(eyes) eyes.update_colour()
|
||||
|
||||
/obj/item/organ/external/head/removed()
|
||||
@@ -48,7 +48,7 @@ var/global/list/limb_icon_cache = list()
|
||||
return
|
||||
|
||||
if(species.has_organ["eyes"])
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"]
|
||||
if(species.eyes)
|
||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
|
||||
if(eyes)
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
var/slot
|
||||
vital = 0
|
||||
var/organ_action_name = null
|
||||
var/sterile = 0 //can the organ be infected by germs?
|
||||
var/tough = 0 //can organ be easily damaged?
|
||||
|
||||
/obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0)
|
||||
if(!iscarbon(M) || owner == M)
|
||||
@@ -19,7 +21,9 @@
|
||||
replaced.remove(M, special = 1)
|
||||
|
||||
owner = M
|
||||
|
||||
M.internal_organs |= src
|
||||
//M.internal_organs_by_name[src] |= src(H,1)
|
||||
loc = null
|
||||
if(organ_action_name)
|
||||
action_button_name = organ_action_name
|
||||
@@ -29,6 +33,7 @@
|
||||
owner = null
|
||||
if(M)
|
||||
M.internal_organs -= src
|
||||
//M.internal_organs_by_name[src] -= src
|
||||
if(vital && !special)
|
||||
M.death()
|
||||
|
||||
@@ -192,6 +197,16 @@
|
||||
owner.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)
|
||||
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()
|
||||
if(!owner)
|
||||
return
|
||||
@@ -200,6 +215,7 @@
|
||||
owner.eye_blurry = 0
|
||||
owner.eye_blind = 0
|
||||
|
||||
|
||||
/obj/item/organ/internal/liver
|
||||
name = "liver"
|
||||
icon_state = "liver"
|
||||
@@ -282,7 +298,7 @@
|
||||
name = "inflamed appendix"
|
||||
..()
|
||||
*/
|
||||
|
||||
//shadowling tumor
|
||||
/obj/item/organ/internal/shadowtumor
|
||||
name = "black tumor"
|
||||
desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light."
|
||||
@@ -305,10 +321,34 @@
|
||||
if(isturf(loc))
|
||||
var/turf/T = loc
|
||||
var/light_count = T.get_lumcount()
|
||||
world << "[light_count]"
|
||||
if(light_count > 4 && health > 0) //Die in the light
|
||||
health--
|
||||
else if(light_count < 2 && health < 3) //Heal in the dark
|
||||
health++
|
||||
if(health <= 0)
|
||||
visible_message("<span class='warning'>[src] collapses in on itself!</span>")
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
//debug and adminbus....
|
||||
|
||||
/obj/item/organ/internal/honktumor
|
||||
name = "banana tumor"
|
||||
desc = "A tiny yellow mass shaped like..a banana?"
|
||||
icon_state = "honktumor"
|
||||
origin_tech = "biotech=1"
|
||||
w_class = 1
|
||||
parent_organ = "head"
|
||||
slot = "brain_tumor"
|
||||
health = 3
|
||||
|
||||
/obj/item/organ/internal/honktumor/insert(mob/living/carbon/M, special = 0)
|
||||
|
||||
M.mutations.Add(CLUMSY)
|
||||
M.dna.SetSEState(COMICBLOCK,1,1)
|
||||
//genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED)
|
||||
|
||||
/obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0)
|
||||
M.mutations.Remove(CLUMSY)
|
||||
M.mutations.Remove(COMICBLOCK)
|
||||
//genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED)
|
||||
@@ -88,7 +88,7 @@
|
||||
..()
|
||||
|
||||
// Used for an MMI or posibrain being installed into a human.
|
||||
/obj/item/organ/internal/mmi_holder
|
||||
/obj/item/organ/internal/brain/mmi_holder
|
||||
name = "brain"
|
||||
organ_tag = "brain"
|
||||
parent_organ = "chest"
|
||||
@@ -97,7 +97,7 @@
|
||||
slot = "brain"
|
||||
var/obj/item/device/mmi/stored_mmi
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/proc/update_from_mmi()
|
||||
/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi()
|
||||
if(!stored_mmi)
|
||||
return
|
||||
name = stored_mmi.name
|
||||
@@ -105,7 +105,7 @@
|
||||
icon = stored_mmi.icon
|
||||
icon_state = stored_mmi.icon_state
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/remove(var/mob/living/user)
|
||||
/obj/item/organ/internal/brain/mmi_holder/remove(var/mob/living/user)
|
||||
if(stored_mmi)
|
||||
stored_mmi.loc = get_turf(src)
|
||||
if(owner.mind)
|
||||
@@ -117,7 +117,7 @@
|
||||
holder_mob.unEquip(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/New()
|
||||
/obj/item/organ/internal/brain/mmi_holder/New()
|
||||
..()
|
||||
// This is very ghetto way of rebooting an IPC. TODO better way.
|
||||
spawn(1)
|
||||
@@ -125,7 +125,7 @@
|
||||
owner.stat = CONSCIOUS
|
||||
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/posibrain/New()
|
||||
/obj/item/organ/internal/brain/mmi_holder/posibrain/New()
|
||||
robotize()
|
||||
stored_mmi = new /obj/item/device/mmi/posibrain(src)
|
||||
..()
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
origin_tech = "biotech=5"
|
||||
icon_state = "xgibmid2"
|
||||
var/list/alien_powers = list()
|
||||
tough = 1
|
||||
sterile = 1
|
||||
|
||||
/obj/item/organ/internal/xenos/New()
|
||||
for(var/A in alien_powers)
|
||||
|
||||
@@ -163,7 +163,8 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic < 2)
|
||||
spread_germs_to_organ(I, user)
|
||||
if(!I.sterile)
|
||||
spread_germs_to_organ(I, user)
|
||||
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
|
||||
"You start treating damage to [target]'s [I.name] with [tool_name]." )
|
||||
|
||||
@@ -370,13 +371,13 @@
|
||||
|
||||
if(O.organ_tag == "limb")
|
||||
return 0
|
||||
else if(target.species.has_organ[O.organ_tag])
|
||||
else if(target.species.has_organ[O.organ_tag])//need to change this around for cybernetic implants
|
||||
|
||||
if(O.damage > (O.max_damage * 0.75))
|
||||
user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted."
|
||||
return 2
|
||||
|
||||
if(!target.internal_organs_by_name[O.organ_tag])
|
||||
if(!target.get_int_organ(O))
|
||||
organ_missing = 1
|
||||
else
|
||||
user << "\red \The [target] already has [o_a][O.organ_tag]."
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \
|
||||
"\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
|
||||
var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ)
|
||||
if(I && istype(I))
|
||||
I.status |= ORGAN_CUT_AWAY
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||
user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \
|
||||
"\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
|
||||
var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ)
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
user << "<span class='danger'>You're pretty sure [target.species.name_plural] don't normally have a brain.</span>"
|
||||
return 2
|
||||
|
||||
if(!isnull(target.internal_organs["brain"]))
|
||||
if(target.get_int_organ(/obj/item/organ/internal/brain/))
|
||||
user << "<span class='danger'>Your subject already has a brain.</span>"
|
||||
return 2
|
||||
|
||||
@@ -432,11 +432,11 @@
|
||||
"\blue You have installed \the [tool] into [target]'s [affected.name].")
|
||||
|
||||
var/obj/item/device/mmi/M = tool
|
||||
var/obj/item/organ/internal/mmi_holder/holder = new(target, 1)
|
||||
var/obj/item/organ/internal/brain/mmi_holder/holder = new()
|
||||
if (istype(M, /obj/item/device/mmi/posibrain))
|
||||
holder.robotize()
|
||||
|
||||
target.internal_organs_by_name["brain"] = holder
|
||||
holder.insert(target)
|
||||
user.unEquip(tool)
|
||||
tool.forceMove(holder)
|
||||
holder.stored_mmi = tool
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
/proc/spread_germs_to_organ(obj/item/organ/E, mob/living/carbon/human/user)
|
||||
if(!istype(user) || !istype(E)) return
|
||||
|
||||
//world << "Germ spread: [E] : [E.owner]"
|
||||
var/germ_level = user.germ_level
|
||||
if(user.gloves)
|
||||
germ_level = user.gloves.germ_level
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
if(istype(mob, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = mob
|
||||
var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain)
|
||||
if (B.damage < B.min_broken_damage)
|
||||
B.take_damage(5, 1)
|
||||
else
|
||||
@@ -442,7 +442,7 @@
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
if(istype(mob, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = mob
|
||||
var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain)
|
||||
if (B.damage < B.min_broken_damage)
|
||||
B.take_damage(1, 1)
|
||||
else
|
||||
@@ -704,7 +704,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
if(istype(mob, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = mob
|
||||
var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain)
|
||||
if (B.damage < B.min_broken_damage)
|
||||
B.take_damage(0.5, 1)
|
||||
else
|
||||
@@ -936,7 +936,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
|
||||
name = "Watery Eyes"
|
||||
stage = 1
|
||||
activate(var/mob/living/carbon/human/mob,var/multiplier)
|
||||
var/obj/item/organ/internal/eyes/E = mob.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = mob.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(!istype(E) || (E.status & ORGAN_ROBOT)) // No eyes or robotic eyes? No problem!
|
||||
return
|
||||
mob << "<span class='warning'>Your eyes sting and water!</span>"
|
||||
|
||||
Reference in New Issue
Block a user