mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 12:35:33 +01:00
Bumps up Surgery XP gains, Fixes Surgery XP Gains, Fixes Surgery Failure Bug (#48231)
* works on my machine * saving is a sin 1% of the time! * works... on... my... machine...? * i can't test this but it worked on my machine too Co-Authored-By: Bobbahbrown <bobbahbrown@gmail.com> * more testing /w TW * caps XP gain (per iteration) for TW * no skinnies Co-authored-by: Bobbahbrown <bobbahbrown@gmail.com>
This commit is contained in:
@@ -176,8 +176,11 @@
|
||||
if(!parts.len)
|
||||
return
|
||||
var/obj/item/bodypart/picked = pick(parts)
|
||||
var/damage_calculator = picked.get_damage(TRUE) //heal_damage returns update status T/F instead of amount healed so we dance gracefully around this
|
||||
if(picked.heal_damage(brute, burn, stamina, required_status))
|
||||
update_damage_overlays()
|
||||
return max(damage_calculator - picked.get_damage(TRUE), 0)
|
||||
|
||||
|
||||
//Damages ONE bodypart randomly selected from damagable ones.
|
||||
//It automatically updates damage overlays if necessary
|
||||
|
||||
@@ -241,10 +241,9 @@
|
||||
return
|
||||
|
||||
// heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/// needs to return amount healed in order to calculate things like tend wounds xp gain
|
||||
/mob/living/proc/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
adjustBruteLoss(-brute, FALSE) //zero as argument for no instant health update
|
||||
adjustFireLoss(-burn, FALSE)
|
||||
adjustStaminaLoss(-stamina, FALSE)
|
||||
. = (adjustBruteLoss(-brute, FALSE) + adjustFireLoss(-burn, FALSE) + adjustStaminaLoss(-stamina, FALSE)) //zero as argument for no instant health update
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
"<span class='notice'>[user] starts reshaping [target]'s ligaments into a hook-like shape.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s ligaments.</span>")
|
||||
|
||||
/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You reshape [target]'s ligaments into a connective hook!</span>",
|
||||
"<span class='notice'>[user] reshapes [target]'s ligaments into a connective hook!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s ligaments.</span>")
|
||||
new /datum/bioware/hooked_ligaments(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/hooked_ligaments
|
||||
name = "Hooked Ligaments"
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
"<span class='notice'>[user] starts reinforce [target]'s ligaments.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s ligaments.</span>")
|
||||
|
||||
/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You reinforce [target]'s ligaments!</span>",
|
||||
"<span class='notice'>[user] reinforces [target]'s ligaments!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s ligaments.</span>")
|
||||
new /datum/bioware/reinforced_ligaments(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/reinforced_ligaments
|
||||
name = "Reinforced Ligaments"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts wrapping muscles around [target]'s circulatory system.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s circulatory system.</span>")
|
||||
|
||||
/datum/surgery_step/muscled_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/muscled_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You reshape [target]'s circulatory system, adding a muscled membrane!</span>",
|
||||
"<span class='notice'>[user] reshapes [target]'s circulatory system, adding a muscled membrane!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s circulatory system.</span>")
|
||||
new /datum/bioware/muscled_veins(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/muscled_veins
|
||||
name = "Threaded Veins"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts rerouting [target]'s nerves.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s nervous system.</span>")
|
||||
|
||||
/datum/surgery_step/ground_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/ground_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You successfully reroute [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] successfully reroutes [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s nervous system.</span>")
|
||||
new /datum/bioware/grounded_nerves(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/grounded_nerves
|
||||
name = "Grounded Nerves"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts splicing together [target]'s nerves.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s nervous system.</span>")
|
||||
|
||||
/datum/surgery_step/splice_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/splice_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You successfully splice [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] successfully splices [target]'s nervous system!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s nervous system.</span>")
|
||||
new /datum/bioware/spliced_nerves(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/spliced_nerves
|
||||
name = "Spliced Nerves"
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
"<span class='notice'>[user] starts weaving [target]'s circulatory system.</span>",
|
||||
"<span class='notice'>[user] starts manipulating [target]'s circulatory system.</span>")
|
||||
|
||||
/datum/surgery_step/thread_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/thread_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You weave [target]'s circulatory system into a resistant mesh!</span>",
|
||||
"<span class='notice'>[user] weaves [target]'s circulatory system into a resistant mesh!</span>",
|
||||
"<span class='notice'>[user] finishes manipulating [target]'s circulatory system.</span>")
|
||||
new /datum/bioware/threaded_veins(target)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/bioware/threaded_veins
|
||||
name = "Threaded Veins"
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"<span class='notice'>[user] begins to sever [target]'s [parse_zone(target_zone)]!</span>",
|
||||
"<span class='notice'>[user] begins to sever [target]'s [parse_zone(target_zone)]!</span>")
|
||||
|
||||
/datum/surgery_step/sever_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/sever_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/mob/living/carbon/human/L = target
|
||||
display_results(user, target, "<span class='notice'>You sever [L]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] severs [L]'s [parse_zone(target_zone)]!</span>",
|
||||
@@ -28,4 +28,4 @@
|
||||
target_limb.drop_limb()
|
||||
if(user.mind)
|
||||
user.mind.adjust_experience(/datum/skill/medical, experience_given)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"<span class='notice'>[user] begins to fix [target]'s brain.</span>",
|
||||
"<span class='notice'>[user] begins to perform surgery on [target]'s brain.</span>")
|
||||
|
||||
/datum/surgery_step/fix_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/fix_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You succeed in fixing [target]'s brain.</span>",
|
||||
"<span class='notice'>[user] successfully fixes [target]'s brain!</span>",
|
||||
"<span class='notice'>[user] completes the surgery on [target]'s brain.</span>")
|
||||
@@ -38,7 +38,7 @@
|
||||
target.setOrganLoss(ORGAN_SLOT_BRAIN, target.getOrganLoss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
|
||||
var/cured_num = target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
|
||||
experience_given = 2*cured_num
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/fix_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorganslot(ORGAN_SLOT_BRAIN))
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"<span class='notice'>[user] checks for items in [target]'s [target_zone].</span>",
|
||||
"<span class='notice'>[user] looks for something in [target]'s [target_zone].</span>")
|
||||
|
||||
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery = FALSE)
|
||||
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
if(tool)
|
||||
if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || HAS_TRAIT(tool, TRAIT_NODROP) || istype(tool, /obj/item/organ))
|
||||
@@ -43,7 +43,7 @@
|
||||
"<span class='notice'>[user] stuffs [tool.w_class > WEIGHT_CLASS_SMALL ? tool : "something"] into [target]'s [target_zone].</span>")
|
||||
user.transferItemToLoc(tool, target, TRUE)
|
||||
CH.cavity_item = tool
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
else
|
||||
if(IC)
|
||||
display_results(user, target, "<span class='notice'>You pull [IC] out of [target]'s [target_zone].</span>",
|
||||
@@ -51,7 +51,7 @@
|
||||
"<span class='notice'>[user] pulls [IC.w_class > WEIGHT_CLASS_SMALL ? IC : "something"] out of [target]'s [target_zone].</span>")
|
||||
user.put_in_hands(IC)
|
||||
CH.cavity_item = null
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You don't find anything in [target]'s [target_zone].</span>")
|
||||
return 0
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"<span class='notice'>[user] begins to extract a core from [target].</span>",
|
||||
"<span class='notice'>[user] begins to extract a core from [target].</span>")
|
||||
|
||||
/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/extract_core/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/mob/living/simple_animal/slime/slime = target
|
||||
if(slime.cores > 0)
|
||||
slime.cores--
|
||||
@@ -34,9 +34,9 @@
|
||||
|
||||
if(slime.cores <= 0)
|
||||
slime.icon_state = "[slime.colour] baby slime dead-nocore"
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
else
|
||||
return 0
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There aren't any cores left in [target]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"<span class='notice'>[user] begins to make an incision in [target]'s heart.</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target]'s heart.</span>")
|
||||
|
||||
/datum/surgery_step/incise_heart/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/incise_heart/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (!(NOBLOOD in H.dna.species.species_traits))
|
||||
@@ -33,7 +33,7 @@
|
||||
"")
|
||||
H.bleed_rate += 10
|
||||
H.adjustBruteLoss(10)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/incise_heart/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
@@ -50,13 +50,14 @@
|
||||
name = "graft coronary bypass"
|
||||
implements = list(TOOL_HEMOSTAT = 90, TOOL_WIRECUTTER = 35, /obj/item/stack/packageWrap = 15, /obj/item/stack/cable_coil = 5)
|
||||
time = 90
|
||||
experience_given = 20
|
||||
|
||||
/datum/surgery_step/coronary_bypass/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to graft a bypass onto [target]'s heart...</span>",
|
||||
"<span class='notice'>[user] begins to graft something onto [target]'s heart!</span>",
|
||||
"<span class='notice'>[user] begins to graft something onto [target]'s heart!</span>")
|
||||
|
||||
/datum/surgery_step/coronary_bypass/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/coronary_bypass/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
target.setOrganLoss(ORGAN_SLOT_HEART, 60)
|
||||
var/obj/item/organ/heart/heart = target.getorganslot(ORGAN_SLOT_HEART)
|
||||
if(heart) //slightly worrying if we lost our heart mid-operation, but that's life
|
||||
@@ -64,7 +65,7 @@
|
||||
display_results(user, target, "<span class='notice'>You successfully graft a bypass onto [target]'s heart.</span>",
|
||||
"<span class='notice'>[user] finishes grafting something onto [target]'s heart.</span>",
|
||||
"<span class='notice'>[user] finishes grafting something onto [target]'s heart.</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/coronary_bypass/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"<span class='notice'>[user] begins to wedge \the [tool] in [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] begins to wedge something in [target]'s [parse_zone(target_zone)].</span>")
|
||||
|
||||
/datum/surgery_step/insert_pill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/reagent_containers/pill/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/insert_pill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/reagent_containers/pill/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(!istype(tool))
|
||||
return 0
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
display_results(user, target, "<span class='notice'>You wedge [tool] into [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] wedges \the [tool] into [target]'s [parse_zone(target_zone)]!</span>",
|
||||
"<span class='notice'>[user] wedges something into [target]'s [parse_zone(target_zone)]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/hands_free/activate_pill
|
||||
name = "Activate Pill"
|
||||
|
||||
@@ -73,26 +73,32 @@
|
||||
cost *= ED.value_multiplier
|
||||
return (cost-multi_surgery_adjust)
|
||||
|
||||
/datum/surgery_step/dissection/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, display_results = TRUE)
|
||||
/datum/surgery_step/dissection/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/points_earned = check_value(target, surgery)
|
||||
user.visible_message("<span class='notice'>[user] dissects [target], discovering [points_earned] point\s of data!</span>", "<span class='notice'>You dissect [target], finding [points_earned] point\s worth of discoveries, you also write a few notes.</span>")
|
||||
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points_earned*PUBLIC_TECHWEB_GAIN))
|
||||
new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
var/obj/item/research_notes/the_dossier =new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
if(!user.put_in_hands(the_dossier) && istype(user.get_inactive_held_item(), /obj/item/research_notes))
|
||||
var/obj/item/research_notes/hand_dossier = user.get_inactive_held_item()
|
||||
hand_dossier.merge(the_dossier)
|
||||
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
ADD_TRAIT(target, TRAIT_DISSECTED, "[surgery.name]")
|
||||
repeatable = FALSE
|
||||
experience_given = 1+(points_earned/BASE_HUMAN_REWARD)
|
||||
return ..(default_display_results = FALSE)
|
||||
experience_given = 1+(points_earned/(BASE_HUMAN_REWARD/10))//if BHR = 500, 10 XP on base surgery
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
var/points_earned = round(check_value(target, surgery) * 0.01)
|
||||
user.visible_message("<span class='notice'>[user] dissects [target]!</span>", EXPDIS_FAIL_MSG)
|
||||
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points_earned*PUBLIC_TECHWEB_GAIN))
|
||||
new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
var/obj/item/research_notes/the_dossier =new /obj/item/research_notes(user.loc, points_earned*PRIVATE_TECHWEB_GAIN, "biology")
|
||||
if(!user.put_in_hands(the_dossier) && istype(user.get_inactive_held_item(), /obj/item/research_notes))
|
||||
var/obj/item/research_notes/hand_dossier = user.get_inactive_held_item()
|
||||
hand_dossier.merge(the_dossier)
|
||||
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
name = "fix eyes"
|
||||
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 45, /obj/item/pen = 25)
|
||||
time = 64
|
||||
experience_given = 5
|
||||
|
||||
/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target)
|
||||
var/obj/item/organ/eyes/E = target.getorganslot(ORGAN_SLOT_EYES)
|
||||
@@ -23,7 +24,7 @@
|
||||
"<span class='notice'>[user] begins to fix [target]'s eyes.</span>",
|
||||
"<span class='notice'>[user] begins to perform surgery on [target]'s eyes.</span>")
|
||||
|
||||
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/obj/item/organ/eyes/E = target.getorganslot(ORGAN_SLOT_EYES)
|
||||
user.visible_message("<span class='notice'>[user] successfully fixes [target]'s eyes!</span>", "<span class='notice'>You succeed in fixing [target]'s eyes.</span>")
|
||||
display_results(user, target, "<span class='notice'>You succeed in fixing [target]'s eyes.</span>",
|
||||
@@ -34,7 +35,7 @@
|
||||
target.cure_nearsighted(list(EYE_DAMAGE))
|
||||
target.blur_eyes(35) //this will fix itself slowly.
|
||||
E.setOrganDamage(0)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorgan(/obj/item/organ/brain))
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#define PER_ITERATION_XP_CAP 3 //TW XP gain scales with repeated iterations.
|
||||
|
||||
/datum/surgery/healing
|
||||
steps = list(/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
@@ -26,7 +28,7 @@
|
||||
implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 65, /obj/item/pen = 55)
|
||||
repeatable = TRUE
|
||||
time = 25
|
||||
experience_given = 2
|
||||
experience_given = 1 //scales with repeated iterations
|
||||
var/brutehealing = 0
|
||||
var/burnhealing = 0
|
||||
var/missinghpbonus = 0 //heals an extra point of damager per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing!
|
||||
@@ -48,11 +50,13 @@
|
||||
|
||||
/datum/surgery_step/heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
|
||||
if(..())
|
||||
experience_given = min(experience_given+0.25,PER_ITERATION_XP_CAP)
|
||||
while((brutehealing && target.getBruteLoss()) || (burnhealing && target.getFireLoss()))
|
||||
if(!..())
|
||||
break
|
||||
experience_given = min(experience_given+0.25,PER_ITERATION_XP_CAP)
|
||||
|
||||
/datum/surgery_step/heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/umsg = "You succeed in fixing some of [target]'s wounds" //no period, add initial space to "addons"
|
||||
var/tmsg = "[user] fixes some of [target]'s wounds" //see above
|
||||
var/urhealedamt_brute = brutehealing
|
||||
@@ -76,7 +80,7 @@
|
||||
if(istype(surgery, /datum/surgery/healing))
|
||||
var/datum/surgery/healing/the_surgery = surgery
|
||||
the_surgery.antispam = TRUE
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/heal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='warning'>You screwed up!</span>",
|
||||
@@ -214,3 +218,5 @@
|
||||
"<span class='warning'>[user] screws up!</span>",
|
||||
"<span class='notice'>[user] fixes some of [target]'s wounds.</span>", TRUE)
|
||||
target.take_bodypart_damage(5,5)
|
||||
|
||||
#undef PER_ITERATION_XP_CAP
|
||||
|
||||
@@ -24,19 +24,20 @@
|
||||
implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45,
|
||||
/obj/item/shard = 35)
|
||||
time = 52
|
||||
experience_given = 10
|
||||
|
||||
/datum/surgery_step/hepatectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to cut out a damaged peice of [target]'s liver...</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>")
|
||||
|
||||
/datum/surgery_step/hepatectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/hepatectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.setOrganLoss(ORGAN_SLOT_LIVER, 10) //not bad, not great
|
||||
display_results(user, target, "<span class='notice'>You successfully remove the damaged part of [target]'s liver.</span>",
|
||||
"<span class='notice'>[user] successfully removes the damaged part of [target]'s liver.</span>",
|
||||
"<span class='notice'>[user] successfully removes the damaged part of [target]'s liver.</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/hepatectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery)
|
||||
var/mob/living/carbon/human/H = target
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"<span class='notice'>[user] looks for an implant in [target]'s [target_zone].</span>",
|
||||
"<span class='notice'>[user] looks for something in [target]'s [target_zone].</span>")
|
||||
|
||||
/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(I)
|
||||
display_results(user, target, "<span class='notice'>You successfully remove [I] from [target]'s [target_zone].</span>",
|
||||
"<span class='notice'>[user] successfully removes [I] from [target]'s [target_zone]!</span>",
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't find anything in [target]'s [target_zone]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery/implant_removal/mechanic
|
||||
name = "implant removal"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
name = "replace limb"
|
||||
implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100)
|
||||
time = 32
|
||||
experience_given = 10
|
||||
var/obj/item/bodypart/L = null // L because "limb"
|
||||
|
||||
|
||||
@@ -41,7 +42,7 @@
|
||||
|
||||
//SURGERY STEP SUCCESSES
|
||||
|
||||
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(L)
|
||||
if(istype(tool, /obj/item/organ_storage))
|
||||
tool.icon_state = initial(tool.icon_state)
|
||||
@@ -56,4 +57,4 @@
|
||||
log_combat(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[target] has no organic [parse_zone(target_zone)] there!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
|
||||
/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target)
|
||||
if(HAS_TRAIT(target, TRAIT_FAT))
|
||||
if(HAS_TRAIT(target, TRAIT_FAT) && target.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
name = "cut excess fat"
|
||||
implements = list(TOOL_SAW = 100, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
|
||||
time = 64
|
||||
experience_given = 2
|
||||
|
||||
/datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("<span class='notice'>[user] begins to cut away [target]'s excess fat.</span>", "<span class='notice'>You begin to cut away [target]'s excess fat...</span>")
|
||||
@@ -32,20 +33,22 @@
|
||||
name = "remove loose fat"
|
||||
implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35)
|
||||
time = 32
|
||||
experience_given = 0 //scales with fat removed
|
||||
|
||||
/datum/surgery_step/remove_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to extract [target]'s loose fat...</span>",
|
||||
"<span class='notice'>[user] begins to extract [target]'s loose fat!</span>",
|
||||
"<span class='notice'>[user] begins to extract something from [target]'s [target_zone].</span>")
|
||||
|
||||
/datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You extract [target]'s fat.</span>",
|
||||
"<span class='notice'>[user] extracts [target]'s fat!</span>",
|
||||
"<span class='notice'>[user] extracts [target]'s fat!</span>")
|
||||
target.overeatduration = 0 //patient is unfatted
|
||||
var/removednutriment = target.nutrition
|
||||
target.set_nutrition(NUTRITION_LEVEL_WELL_FED)
|
||||
removednutriment -= 450 //whatever was removed goes into the meat
|
||||
removednutriment -= NUTRITION_LEVEL_WELL_FED //whatever was removed goes into the meat
|
||||
experience_given = (round(removednutriment/30))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/typeofmeat = /obj/item/reagent_containers/food/snacks/meat/slab/human
|
||||
|
||||
@@ -59,4 +62,4 @@
|
||||
newmeat.subjectjob = H.job
|
||||
newmeat.reagents.add_reagent (/datum/reagent/consumable/nutriment, (removednutriment / 15)) //To balance with nutriment_factor of nutriment
|
||||
newmeat.forceMove(target.loc)
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -18,13 +18,14 @@
|
||||
implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45,
|
||||
/obj/item/shard = 35)
|
||||
time = 42
|
||||
experience_given = 10
|
||||
|
||||
/datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to make an incision in [target]'s lungs...</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target].</span>")
|
||||
|
||||
/datum/surgery_step/lobectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/lobectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/lungs/L = H.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
@@ -33,7 +34,7 @@
|
||||
display_results(user, target, "<span class='notice'>You successfully excise [H]'s most damaged lobe.</span>",
|
||||
"<span class='notice'>Successfully removes a piece of [H]'s lungs.</span>",
|
||||
"")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/lobectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(ishuman(target))
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/incise/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/incise/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if ishuman(target)
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (!(NOBLOOD in H.dna.species.species_traits))
|
||||
@@ -25,9 +25,10 @@
|
||||
"<span class='notice'>Blood pools around the incision in [H]'s [parse_zone(target_zone)].</span>",
|
||||
"")
|
||||
H.bleed_rate += 3
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/incise/nobleed //silly friendly!
|
||||
experience_given = 1 //safer so not as much XP
|
||||
|
||||
/datum/surgery_step/incise/nobleed/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You begin to <i>carefully</i> make an incision in [target]'s [parse_zone(target_zone)]...</span>",
|
||||
@@ -110,12 +111,12 @@
|
||||
"<span class='notice'>[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)].</span>")
|
||||
|
||||
/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/saw/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
target.apply_damage(50, BRUTE, "[target_zone]")
|
||||
display_results(user, target, "<span class='notice'>You saw [target]'s [parse_zone(target_zone)] open.</span>",
|
||||
"<span class='notice'>[user] saws [target]'s [parse_zone(target_zone)] open!</span>",
|
||||
"<span class='notice'>[user] saws [target]'s [parse_zone(target_zone)] open!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
//drill bone
|
||||
/datum/surgery_step/drill
|
||||
@@ -128,8 +129,8 @@
|
||||
"<span class='notice'>[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)].</span>")
|
||||
|
||||
/datum/surgery_step/drill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/drill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
display_results(user, target, "<span class='notice'>You drill into [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] drills into [target]'s [parse_zone(target_zone)]!</span>",
|
||||
"<span class='notice'>[user] drills into [target]'s [parse_zone(target_zone)]!</span>")
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
name = "reshape face"
|
||||
implements = list(TOOL_SCALPEL = 100, /obj/item/kitchen/knife = 50, TOOL_WIRECUTTER = 35)
|
||||
time = 64
|
||||
experience_given = 5
|
||||
|
||||
/datum/surgery_step/reshape_face/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("<span class='notice'>[user] begins to alter [target]'s appearance.</span>", "<span class='notice'>You begin to alter [target]'s appearance...</span>")
|
||||
@@ -15,7 +16,7 @@
|
||||
"<span class='notice'>[user] begins to alter [target]'s appearance.</span>",
|
||||
"<span class='notice'>[user] begins to make an incision in [target]'s face.</span>")
|
||||
|
||||
/datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/reshape_face/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(HAS_TRAIT_FROM(target, TRAIT_DISFIGURED, TRAIT_GENERIC))
|
||||
REMOVE_TRAIT(target, TRAIT_DISFIGURED, TRAIT_GENERIC)
|
||||
display_results(user, target, "<span class='notice'>You successfully restore [target]'s appearance.</span>",
|
||||
@@ -42,7 +43,7 @@
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.sec_hud_set_ID()
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/reshape_face/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='warning'>You screw up, leaving [target]'s appearance disfigured!</span>",
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
name = "add prosthetic"
|
||||
implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100, /obj/item/twohanded/required/chainsaw = 100, /obj/item/melee/synthetic_arm_blade = 100)
|
||||
time = 32
|
||||
experience_given = 5 //won't get full XP if rejected
|
||||
var/organ_rejection_dam = 0
|
||||
|
||||
/datum/surgery_step/add_prosthetic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
@@ -62,8 +63,8 @@
|
||||
to_chat(user, "<span class='warning'>[tool] must be installed onto an arm.</span>")
|
||||
return -1
|
||||
|
||||
/datum/surgery_step/add_prosthetic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
. = ..(default_display_results = FALSE)
|
||||
/datum/surgery_step/add_prosthetic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
. = ..()
|
||||
if(istype(tool, /obj/item/organ_storage))
|
||||
tool.icon_state = initial(tool.icon_state)
|
||||
tool.desc = initial(tool.desc)
|
||||
@@ -74,6 +75,7 @@
|
||||
L.attach_limb(target)
|
||||
if(organ_rejection_dam)
|
||||
target.adjustToxLoss(organ_rejection_dam)
|
||||
experience_given -= (round(organ_rejection_dam/10))
|
||||
display_results(user, target, "<span class='notice'>You succeed in replacing [target]'s [parse_zone(target_zone)].</span>",
|
||||
"<span class='notice'>[user] successfully replaces [target]'s [parse_zone(target_zone)] with [tool]!</span>",
|
||||
"<span class='notice'>[user] successfully replaces [target]'s [parse_zone(target_zone)]!</span>")
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
name = "remove embedded objects"
|
||||
time = 32
|
||||
accept_hand = 1
|
||||
experience_given = 5
|
||||
var/obj/item/bodypart/L = null
|
||||
|
||||
|
||||
@@ -22,7 +23,7 @@
|
||||
user.visible_message("<span class='notice'>[user] looks for [target]'s [parse_zone(user.zone_selected)].</span>", "<span class='notice'>You look for [target]'s [parse_zone(user.zone_selected)]...</span>")
|
||||
|
||||
|
||||
/datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
||||
/datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
||||
if(L)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
@@ -45,4 +46,4 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't find [target]'s [parse_zone(user.zone_selected)], let alone any objects embedded in it!</span>")
|
||||
|
||||
return ..(default_display_results = FALSE)
|
||||
return ..()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/list/chems_needed = list() //list of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob.
|
||||
var/require_all_chems = TRUE //any on the list or all on the list?
|
||||
var/silicons_obey_prob = FALSE
|
||||
/// The amount of a experience given for successfully completing the step.
|
||||
var/experience_given = 1
|
||||
|
||||
/datum/surgery_step/proc/try_op(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
|
||||
@@ -99,8 +100,7 @@
|
||||
if(failure(user, target, target_zone, tool, surgery, fail_prob))
|
||||
advance = TRUE
|
||||
if(chem_check_result)
|
||||
if(.(user, target, target_zone, tool, surgery, try_to_fail)) //automatically re-attempt if failed for reason other than lack of required chemical
|
||||
advance = TRUE
|
||||
return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical
|
||||
if(advance && !repeatable)
|
||||
surgery.status++
|
||||
if(surgery.status > surgery.steps.len)
|
||||
@@ -122,7 +122,7 @@
|
||||
display_results(user, target, "<span class='notice'>You succeed.</span>",
|
||||
"<span class='notice'>[user] succeeds!</span>",
|
||||
"<span class='notice'>[user] finishes.</span>")
|
||||
user?.mind.adjust_experience(/datum/skill/medical, experience_given)
|
||||
user?.mind.adjust_experience(/datum/skill/medical, round(experience_given))
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/proc/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, var/fail_prob = 0)
|
||||
|
||||
Reference in New Issue
Block a user