mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-16 01:23:41 +01:00
you buy organ, yaya?
Is fresh.
This commit is contained in:
@@ -103,6 +103,7 @@
|
||||
"strange crystal" = /obj/item/organ/internal/nucleation/strange_crystal,
|
||||
"resonant crystal" = /obj/item/organ/internal/nucleation/resonant_crystal
|
||||
)
|
||||
vision_organ = /obj/item/organ/internal/eyes/luminescent_crystal
|
||||
|
||||
/datum/species/nucleation/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.light_color = "#1C1C00"
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
/datum/species/New()
|
||||
//If the species has eyes, they are the default vision organ
|
||||
if(!vision_organ && has_organ["eyes"])
|
||||
vision_organ = "eyes"
|
||||
vision_organ = /obj/item/organ/internal/eyes
|
||||
|
||||
unarmed = new unarmed_type()
|
||||
|
||||
|
||||
@@ -512,7 +512,7 @@
|
||||
"optics" = /obj/item/organ/internal/optical_sensor
|
||||
)
|
||||
|
||||
vision_organ = "optics"
|
||||
vision_organ = /obj/item/organ/internal/optical_sensor
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/ipc),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/ipc),
|
||||
|
||||
@@ -7,12 +7,25 @@
|
||||
name = "bone repair"
|
||||
steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
|
||||
possible_locs = list("chest","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin")
|
||||
disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime)
|
||||
|
||||
|
||||
/datum/surgery/bone_repair/skull
|
||||
name = "bone repair"
|
||||
steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
|
||||
possible_locs = list("head")
|
||||
disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime)
|
||||
|
||||
/datum/surgery/bonerepair/can_start(mob/user, mob/living/carbon/target)
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(affected.status & ORGAN_ROBOT)
|
||||
return 0
|
||||
if(!(affected.encased))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
//surgery steps
|
||||
/datum/surgery_step/glue_bone
|
||||
@@ -82,10 +95,9 @@
|
||||
affected.stage = 2
|
||||
return 1
|
||||
else
|
||||
user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \
|
||||
"\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].")
|
||||
affected.fracture()//can i remove this please?
|
||||
return 0
|
||||
user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \
|
||||
"\blue You set the bone in [target]'s [affected.name] in place with \the [tool].")
|
||||
return 1
|
||||
|
||||
/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \
|
||||
"\blue You amputate [target]'s [affected.name] with \the [tool].")
|
||||
|
||||
add_logs(user,target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")
|
||||
add_logs(target,user ,"surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")
|
||||
|
||||
affected.droplimb(1,DROPLIMB_EDGE)
|
||||
return 1
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
H = M
|
||||
affecting = H.get_organ(check_zone(selected_zone))
|
||||
else if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))
|
||||
H = M
|
||||
affecting = selected_zone
|
||||
|
||||
if(can_operate(H)) //if they're prone or a slime
|
||||
var/datum/surgery/current_surgery
|
||||
world << "line 15"
|
||||
|
||||
for(var/datum/surgery/S in M.surgeries)
|
||||
if(S.location == selected_zone)
|
||||
@@ -33,9 +35,8 @@
|
||||
break
|
||||
|
||||
if(override)
|
||||
if(I == /obj/item/robot_parts)
|
||||
if(istype(I,/obj/item/robot_parts))
|
||||
var/datum/surgery/S = available_surgeries["robotic limb attachment"]
|
||||
world << "[S]"
|
||||
if(S)
|
||||
var/datum/surgery/procedure = new S.type
|
||||
if(procedure)
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
if(tool)
|
||||
user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
|
||||
"You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
|
||||
else
|
||||
else if(IC)
|
||||
user.visible_message("[user] checks for items in [target]'s [target_zone].", "<span class='notice'>You check for items in [target]'s [target_zone]...</span>")
|
||||
target.custom_pain("The pain in your chest is living hell!",1)
|
||||
..()
|
||||
@@ -155,6 +155,10 @@
|
||||
user << "Central command would kill you if you implanted the disk into someone."
|
||||
return 0//fail
|
||||
|
||||
if(istype(tool,/obj/item/organ))
|
||||
user << "This isn't the type of surgery for that!"
|
||||
return 0//fail
|
||||
|
||||
if(tool)
|
||||
user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
|
||||
"\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
|
||||
|
||||
@@ -170,9 +170,13 @@
|
||||
var/new_limb_type = organ_data["path"]
|
||||
var/obj/item/organ/external/new_limb = new new_limb_type(target)
|
||||
new_limb.robotize(L.model_info)
|
||||
new_limb.replaced(target)
|
||||
new_limb.status &= ~ORGAN_DESTROYED
|
||||
if(new_limb.children)
|
||||
for(var/obj/item/organ/external/C in new_limb.children)
|
||||
C.status &= ~ORGAN_DESTROYED
|
||||
if(L.sabotaged)
|
||||
new_limb.sabotaged = 1
|
||||
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
|
||||
@@ -166,6 +166,8 @@ datumvars//note i am putting External in robolimbs.
|
||||
origin_tech = "materials=5;programming=3;biotech=4"
|
||||
|
||||
/obj/item/organ/internal/cyberimp/chest/nutriment/on_life()
|
||||
if(!owner)
|
||||
return
|
||||
if(synthesizing)
|
||||
return
|
||||
if(owner.stat == DEAD)
|
||||
|
||||
@@ -5,7 +5,7 @@ var/list/organ_cache = list()
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
var/dead_icon
|
||||
var/mob/living/carbon/human/owner = null
|
||||
var/status = 0
|
||||
var/status = ORGAN_ORGANIC
|
||||
var/vital //Lose a vital limb, die immediately.
|
||||
var/damage = 0 // amount of damage to the organ
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
max_damage = 50 //made same as arm, since it is not vital
|
||||
min_broken_damage = 30
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/head/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
@@ -12,43 +13,82 @@
|
||||
|
||||
/obj/item/organ/external/chest/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/chest/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/groin/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/groin/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/arm/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/arm/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/arm/right/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/arm/right/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
/obj/item/organ/external/leg/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/leg/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/leg/right/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
|
||||
/obj/item/organ/external/leg/right/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
|
||||
/obj/item/organ/external/foot/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
|
||||
/obj/item/organ/external/foot/right/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/hand/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right/ipc
|
||||
encased = null
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/external/hand/right/ipc/New()
|
||||
robotize("Morpheus Cyberkinetics")
|
||||
..()
|
||||
@@ -62,6 +102,7 @@
|
||||
parent_organ = "chest"
|
||||
slot = "heart"
|
||||
vital = 1
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/internal/cell/New()
|
||||
robotize()
|
||||
@@ -81,6 +122,7 @@
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "camera"
|
||||
slot = "eyes"
|
||||
status = ORGAN_ROBOT
|
||||
// dead_icon = "camera_broken"
|
||||
|
||||
/obj/item/organ/internal/optical_sensor/New()
|
||||
@@ -95,6 +137,7 @@
|
||||
vital = 1
|
||||
max_damage = 200
|
||||
slot = "brain"
|
||||
status = ORGAN_ROBOT
|
||||
var/obj/item/device/mmi/stored_mmi
|
||||
|
||||
/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
|
||||
possible_locs = list("chest","head")
|
||||
requires_organic_bodypart = 0
|
||||
disallowed_mob = (/mob/living/carbon/human/machine)
|
||||
disallowed_mob = list(/mob/living/carbon/human/machine,/mob/living/carbon/human/diona,/mob/living/carbon/human/slime)
|
||||
|
||||
/datum/surgery/organ_manipulation/soft
|
||||
possible_locs = list("groin", "eyes", "mouth")
|
||||
@@ -24,6 +24,13 @@
|
||||
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize)
|
||||
|
||||
|
||||
/datum/surgery/organ_manipulation/can_start(mob/user, mob/living/carbon/target)
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(affected.status & ORGAN_ROBOT)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
// Internal surgeries.
|
||||
/datum/surgery_step/internal
|
||||
@@ -204,7 +211,7 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste))
|
||||
if(!I.sterile)
|
||||
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]." )
|
||||
@@ -228,6 +235,8 @@
|
||||
tool_name = "regenerative membrane"
|
||||
if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
tool_name = "the bandaid"
|
||||
if (istype(tool, /obj/item/stack/nanopaste))
|
||||
tool_name = "\the [tool]" //what else do you call nanopaste medically?
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
@@ -285,7 +294,64 @@
|
||||
|
||||
return 0
|
||||
|
||||
//todo set up fail steps
|
||||
/datum/surgery_step/internal/manipulate_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
|
||||
if(current_type == "mend")
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!")
|
||||
var/dam_amt = 2
|
||||
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
target.adjustToxLoss(5)
|
||||
|
||||
else if (istype(tool, /obj/item/stack/medical/bruise_pack) || istype(tool, /obj/item/stack/nanopaste))
|
||||
dam_amt = 5
|
||||
target.adjustToxLoss(10)
|
||||
affected.createwound(CUT, 5)
|
||||
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
if(I && I.damage > 0 && !(I.tough))
|
||||
I.take_damage(dam_amt,0)
|
||||
|
||||
return 0
|
||||
else if(current_type == "insert")
|
||||
|
||||
user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \
|
||||
"\red Your hand slips, damaging \the [tool]!")
|
||||
var/obj/item/organ/internal/I = tool
|
||||
if(istype(I) &&!(I.tough))
|
||||
I.take_damage(rand(3,5),0)
|
||||
return 0
|
||||
|
||||
|
||||
else if(current_type == "extract")
|
||||
if(I && I.owner == target)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
|
||||
affected.createwound(BRUISE, 20)
|
||||
else
|
||||
user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!",
|
||||
"<span class='notice'>You can't extract anything from [target]'s [parse_zone(target_zone)]!</span>")
|
||||
return 0
|
||||
else if(current_type == "finish")
|
||||
if(affected.encased)
|
||||
var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!"
|
||||
var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!"
|
||||
user.visible_message(msg, self_msg)
|
||||
affected.fracture()
|
||||
else
|
||||
var/msg = "\red [user]'s hand slips, tearing the skin!"
|
||||
var/self_msg = "\red Your hand slips, tearing skin!"
|
||||
user.visible_message(msg, self_msg)
|
||||
affected.createwound(BRUISE, 20)
|
||||
return 0
|
||||
|
||||
|
||||
return 0
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// HEART SURGERY //
|
||||
|
||||
@@ -19,6 +19,14 @@
|
||||
allowed_mob = list(/mob/living/carbon/human/machine)
|
||||
disallowed_mob = list(/mob/living/carbon/human)
|
||||
|
||||
/datum/surgery/cybernetic_repair/can_start(mob/user, mob/living/carbon/target)
|
||||
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
if(affected.status & ORGAN_ORGANIC)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
//to do, moar surgerys or condense down ala mainpulate organs.
|
||||
/datum/surgery_step/robotics
|
||||
@@ -49,6 +57,7 @@
|
||||
return 1
|
||||
|
||||
/datum/surgery_step/robotics/external/unscrew_hatch
|
||||
name = "unscrew hatch"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/screwdriver = 100,
|
||||
/obj/item/weapon/coin = 50,
|
||||
@@ -82,6 +91,7 @@
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/robotics/external/open_hatch
|
||||
name = "open hatch"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/retractor = 100,
|
||||
/obj/item/weapon/crowbar = 100,
|
||||
@@ -115,6 +125,7 @@
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/robotics/external/close_hatch
|
||||
name = "close hatch"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/retractor = 100,
|
||||
/obj/item/weapon/crowbar = 100,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
///Datum Surgery Helpers//
|
||||
/datum/surgery
|
||||
var/name = "surgery"
|
||||
var/name
|
||||
var/status = 1
|
||||
var/list/steps = list()
|
||||
/*
|
||||
@@ -20,7 +20,7 @@
|
||||
var/obj/item/organ/organ_ref //Operable body part
|
||||
var/current_organ = "organ"
|
||||
var/list/allowed_mob = list(/mob/living/carbon/human)
|
||||
var/list/disallowed_mob = null
|
||||
var/list/disallowed_mob = list(/mob/living/carbon/human/machine)
|
||||
|
||||
/datum/surgery/proc/can_start(mob/user, mob/living/carbon/target)
|
||||
// if 0 surgery wont show up in list
|
||||
@@ -110,7 +110,7 @@
|
||||
prob_chance *= get_location_modifier(target)
|
||||
|
||||
if(prob_chance > 100)//if we are using a super tool
|
||||
max_duration = max_duration - 50 //PLACEHOLDER VALUES
|
||||
max_duration = max_duration/prob_chance //PLACEHOLDER VALUES
|
||||
|
||||
if(do_after(user, max_duration, target = target))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user