mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Frankenstein Station 13: Introducing dissections and alien organs to xenobiology (#29093)
* ddsadsa ddsadsa * moderate again * revert * beginning with rebase * organssssssssss * organs now process! * analyzer finished! + mapping * tool bit implementation and quality * organs and fixes and reworks * more organ work * more organs done * more organ progress! * more organ work * MORE. ORGANS. * temp * more organsssss * ITS DONE!!!!!!!! * oops * also oops * linter stuff * forgot this + oops * linter * i forgot to save! * lots of improvements and tweaks * move icon over * icon tweaks * icon mistake * oops * dumb * more icon validations * i think thisll fix it? * Apply suggestions from code review Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * fixes * fixes+tweaks * fix * oops * linter * i didnt save.... * this should give -some- warning * forgot a span * Apply suggestions from code review Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * beginning edits * more fixed and tweaks with cooldowns * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * lots of tweaks * more review changes * comment change * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * returns start back to gland * Apply suggestions from code review Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * code review fixes * trying to make surgery work.... * might as well push this * perfection. now i need text * text + small tweaks and bugfixing * linting * forgot to implement this * deconflicting maps * modifying for xenos again * i guess this wasnt needed??? * added surgical belts to xeno * minor swap * quick fix * small tweaks * small tweak * tiny tweak * some slime updates * more tweaks * more updates * first batch of fixes * hiero audio fix * robotic fauna fixes * more rounds of bugfixes * prevents teleporting * tiny fix * makes sharp more common * misc fixes * surgery and revenant fixes + extractor * adds cursed organ logging * small bananium organ tweak * actually gives teleporter access * adds a message to the analyzer * can now drag naughts * slime behavior tweaks * headslug tweak, cant eat organs * Update code/datums/components/special_tastes.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/datums/components/special_tastes.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/datums/components/special_tastes.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/mob/living/simple_animal/slime/slime_mob.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/mob/living/simple_animal/slime/slime_mob.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/game/gamemodes/miniantags/revenant/revenant.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/datums/components/special_tastes.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/game/gamemodes/miniantags/abduction/gland.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/game/gamemodes/miniantags/abduction/gland.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * moved this * major rework prep * didnt save * rework done * small fix * makes aliens draggable by crew after death * shouldnt have cut this * xeno organ tweak + tips * oops * fixes and tweaks to slimes * not used * temp revert * rebase map files to master * re-applying changes * access fix * access tweak * big fix for new refactor * more refactoring * forgot a span * Update code/datums/components/surgery_initiator.dm Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * hiero only doesnt target dead megafauna * various fixes * fix requests * fixed weird conflict markers * deconflict * deconflicting * antimagic flags * merge fixing * Update code/modules/mining/lavaland/loot/hierophant_loot.dm Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> * regen mesh fix * small fixes * tick fix * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * grammar * Update code/modules/surgery/organs/organ_internal.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/surgery/organs/organ_internal.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/research/xenobiology/xenobiology_organs.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/research/xenobiology/xenobiology_organs.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/research/xenobiology/xenobiology_organs.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * tweaks --------- Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: BeagleGaming1 <56142455+BeagleGaming1@users.noreply.github.com> Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
co-authored by
PollardTheDragon
1080pCat
Luc
warriorstar-orion
BeagleGaming1
Burzah
parent
438b3d7c98
commit
fdcf4899a2
@@ -720,3 +720,13 @@
|
||||
materials = list(MAT_GLASS = 1000)
|
||||
build_path = /obj/item/circuitboard/autochef
|
||||
category = list("Misc. Machinery")
|
||||
|
||||
/datum/design/organ_analyzer
|
||||
name = "Machine Design (Organ Analyzer)"
|
||||
desc = "The circuit board for an organ analyzer."
|
||||
id = "organ_analyzer"
|
||||
req_tech = list("programming" = 3, "bluespace" = 3, "materials" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000)
|
||||
build_path = /obj/item/circuitboard/organ_analyzer
|
||||
category = list("Research Machinery")
|
||||
|
||||
@@ -295,6 +295,37 @@
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/dissector
|
||||
name = "Dissection Manager"
|
||||
desc = "An advanced handheld device that assists with the preparation and removal of non-standard alien organs."
|
||||
id = "dissection_manager"
|
||||
req_tech = list("biotech" = 3, "materials" = 3, "programming" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500)
|
||||
build_path = /obj/item/dissector
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/improved_dissector
|
||||
name = "Improved Dissection Manager"
|
||||
desc = "An advanced handheld device that assists with the preparation and removal of non-standard alien organs. This one has had several improvements applied to it."
|
||||
id = "dissection_manager_upgraded"
|
||||
req_tech = list("biotech" = 7, "materials" = 6, "engineering" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_SILVER = 1500, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/dissector/upgraded
|
||||
category = list("Medical")
|
||||
|
||||
// allows for perfect dissections, should be very hard to obtain.
|
||||
/datum/design/alien_dissector
|
||||
name = "Alien Dissection Manager"
|
||||
desc = "A tool of alien origin, capable of near impossible levels of precision during dissections."
|
||||
id = "dissection_manager_alien"
|
||||
req_tech = list("biotech" = 7, "materials" = 7, "abductor" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 6000, MAT_GLASS = 4500, MAT_DIAMOND = 3000, MAT_TITANIUM = 4000, MAT_PLASMA = 4000)
|
||||
build_path = /obj/item/dissector/alien
|
||||
category = list("Medical")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Cybernetic Implants////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
/obj/item/circuitboard/organ_analyzer
|
||||
board_name = "Organ Analyzer"
|
||||
icon_state = "science"
|
||||
build_path = /obj/machinery/organ_analyzer
|
||||
board_type = "machine"
|
||||
origin_tech = "biotech=2"
|
||||
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/scanning_module = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
)
|
||||
|
||||
/obj/machinery/organ_analyzer
|
||||
name = "Organ Analysis Chamber"
|
||||
desc = "A sophisticated machine made to break down and study samples of alien organs. Only revitalized organs are valid for analysis."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
icon = 'icons/obj/xeno_organs.dmi'
|
||||
icon_state = "organ_analyzer0"
|
||||
idle_power_consumption = 40
|
||||
layer = ABOVE_OBJ_LAYER
|
||||
resistance_flags = FIRE_PROOF|ACID_PROOF
|
||||
// what organ are we currently holding?
|
||||
var/obj/item/organ/internal/contains_organ
|
||||
// Are we actively taking apart an organ?
|
||||
var/processing_organ = FALSE
|
||||
// How long until the machine finishes?
|
||||
var/time_to_complete = 15 SECONDS
|
||||
// How good is the machine at giving credits for our work?
|
||||
var/reward_coeff
|
||||
|
||||
COOLDOWN_DECLARE(process_organ)
|
||||
|
||||
/obj/machinery/organ_analyzer/Initialize(mapload)
|
||||
. = ..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/organ_analyzer(null)
|
||||
component_parts += new /obj/item/stock_parts/scanning_module(null)
|
||||
component_parts += new /obj/item/stock_parts/scanning_module(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
RefreshParts()
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
|
||||
|
||||
/obj/machinery/organ_analyzer/update_overlays()
|
||||
underlays = null
|
||||
if(contains_organ)
|
||||
var/mutable_appearance/underlay_organ = mutable_appearance(layer = OBJ_LAYER, plane = GAME_PLANE)
|
||||
underlay_organ.icon = icon = 'icons/obj/xeno_organs.dmi'
|
||||
underlay_organ.icon_state = contains_organ.icon_state
|
||||
underlay_organ.pixel_y = -3
|
||||
underlays += underlay_organ
|
||||
var/mutable_appearance/underlay_base = mutable_appearance(layer = BELOW_OBJ_LAYER, plane = GAME_PLANE)
|
||||
underlay_base.icon = 'icons/obj/xeno_organs.dmi'
|
||||
if(processing_organ)
|
||||
underlay_base.icon_state += "organ_analyzer_on"
|
||||
else
|
||||
underlay_base.icon_state += "organ_analyzer_off"
|
||||
underlays += underlay_base
|
||||
|
||||
/obj/machinery/organ_analyzer/RefreshParts()
|
||||
reward_coeff = 0
|
||||
for(var/obj/item/stock_parts/scanning_module/S in component_parts)
|
||||
reward_coeff += S.rating
|
||||
reward_coeff = reward_coeff / 2 // average the parts
|
||||
|
||||
/obj/machinery/organ_analyzer/screwdriver_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(processing_organ || contains_organ)
|
||||
to_chat(user, "<span class='warning'>The machine cannot be opened while holding an organ! Remove it first.</span>")
|
||||
return TRUE
|
||||
default_deconstruction_screwdriver(user, "organ_analyzer1", "organ_analyzer0", I)
|
||||
|
||||
/obj/machinery/organ_analyzer/crowbar_act(mob/user, obj/item/I)
|
||||
if(!panel_open)
|
||||
return
|
||||
. = TRUE
|
||||
default_deconstruction_crowbar(user, I)
|
||||
|
||||
/obj/machinery/organ_analyzer/attack_hand(mob/user)
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>You can't interact with the machine while the panel is open!</span>")
|
||||
return
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(contains_organ)
|
||||
if(processing_organ)
|
||||
to_chat(user, "<span class='warning'>The machine is already analyzing the organ!</span>")
|
||||
return
|
||||
else
|
||||
COOLDOWN_START(src, process_organ, time_to_complete)
|
||||
processing_organ = TRUE
|
||||
playsound(src, 'sound/machines/organ_analyzer.ogg', 60, FALSE)
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
|
||||
/obj/machinery/organ_analyzer/item_interaction(mob/living/user, obj/item/used, list/modifiers)
|
||||
if(!istype(used, /obj/item/organ/internal))
|
||||
to_chat(user, "<span class='warning'>The machines rejects [used]; it finds no possible potential in it.</span>")
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>You can't interact with the machine while the panel is open!</span>")
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
var/obj/item/organ/internal/organ = used
|
||||
if(organ.is_xeno_organ)
|
||||
if(organ.type in GLOB.scanned_organs)
|
||||
if(GLOB.scanned_organs[organ.type] >= 3) // No more than
|
||||
to_chat(user, "<span class='warning'>The analyzer rejects the organ. It's gotten as much data as it can from this type of organ.</span>")
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
else
|
||||
GLOB.scanned_organs[organ.type]++
|
||||
else
|
||||
GLOB.scanned_organs += list(organ.type = 1)
|
||||
contains_organ = organ
|
||||
user.transfer_item_to(organ, src)
|
||||
src.visible_message("[user] inserts [organ] into the recepticle.")
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
return ITEM_INTERACT_COMPLETE
|
||||
return ..()
|
||||
|
||||
/obj/machinery/organ_analyzer/AltClick(mob/user)
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>You can't interact with the machine while the panel is open!</span>")
|
||||
return
|
||||
if(processing_organ)
|
||||
to_chat(user, "<span class='warning'>You cannot remove an organ currently being processed!</span>")
|
||||
return
|
||||
if(contains_organ)
|
||||
user.put_in_hands(contains_organ)
|
||||
contains_organ = null
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
|
||||
/obj/machinery/organ_analyzer/process()
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
processing_organ = FALSE
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
return
|
||||
if(processing_organ && COOLDOWN_FINISHED(src, process_organ))
|
||||
complete_analysis()
|
||||
|
||||
/obj/machinery/organ_analyzer/proc/complete_analysis()
|
||||
playsound(src, 'sound/machines/ping.ogg', 50, FALSE)
|
||||
processing_organ = FALSE
|
||||
|
||||
if(contains_organ.hidden_origin_tech)
|
||||
handle_disk()
|
||||
|
||||
var/account = GLOB.station_money_database.get_account_by_department(DEPARTMENT_SCIENCE)
|
||||
var/datum/money_account_database/main_station/station_db = GLOB.station_money_database
|
||||
var/quality_modifier = 1
|
||||
if(contains_organ.organ_quality == ORGAN_PRISTINE)
|
||||
quality_modifier = 2
|
||||
if(contains_organ.organ_quality == ORGAN_DAMAGED)
|
||||
quality_modifier = 0.5
|
||||
var/final_value = round((contains_organ.analyzer_price * reward_coeff) * quality_modifier)
|
||||
station_db.credit_account(account, final_value, "Organ Analyzation Subsidy", "Xenobiology Organ Analyzer", FALSE)
|
||||
SSblackbox.record_feedback("amount", "Organ_Analyzer_Revenue", final_value)
|
||||
atom_say("Analysis complete. Depositing [final_value] credits into the science account.")
|
||||
qdel(contains_organ)
|
||||
contains_organ = null
|
||||
update_appearance(UPDATE_OVERLAYS)
|
||||
|
||||
/obj/machinery/organ_analyzer/proc/handle_disk()
|
||||
var/obj/item/disk/tech_disk/disk = new /obj/item/disk/tech_disk(src.loc)
|
||||
var/datum/tech/tech
|
||||
|
||||
switch(contains_organ.hidden_origin_tech)
|
||||
if(TECH_MATERIAL)
|
||||
tech = new /datum/tech/materials
|
||||
if(TECH_ENGINEERING)
|
||||
tech = new /datum/tech/engineering
|
||||
if(TECH_PLASMA)
|
||||
tech = new /datum/tech/plasmatech
|
||||
if(TECH_POWER)
|
||||
tech = new /datum/tech/powerstorage
|
||||
if(TECH_BLUESPACE)
|
||||
tech = new /datum/tech/bluespace
|
||||
if(TECH_BIO)
|
||||
tech = new /datum/tech/biotech
|
||||
if(TECH_COMBAT)
|
||||
tech = new /datum/tech/combat
|
||||
if(TECH_MAGNETS)
|
||||
tech = new /datum/tech/magnets
|
||||
if(TECH_PROGRAM)
|
||||
tech = new /datum/tech/programming
|
||||
if(TECH_TOXINS)
|
||||
tech = new /datum/tech/toxins
|
||||
if(TECH_SYNDICATE)
|
||||
tech = new /datum/tech/syndicate
|
||||
if(TECH_ABDUCTOR)
|
||||
tech = new /datum/tech/abductor
|
||||
|
||||
tech.level = contains_organ.hidden_tech_level
|
||||
disk.load_tech(tech)
|
||||
@@ -0,0 +1,838 @@
|
||||
/obj/item/dissector
|
||||
name = "\improper Dissection Manager"
|
||||
desc = "An advanced handheld device that assists with the preparation and removal of non-standard alien organs."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "dissector"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
tool_behaviour = TOOL_DISSECTOR
|
||||
|
||||
/obj/item/dissector/upgraded
|
||||
name = "\improper Improved Dissection Manager"
|
||||
desc = "An advanced handheld device that assists with the preparation and removal of non-standard alien organs. This one has had several improvements applied to it."
|
||||
icon_state = "dissector_upgrade"
|
||||
toolspeed = 0.6
|
||||
|
||||
// allows for perfect pristine organ extraction. Only available from non-lavaland abductor tech
|
||||
/obj/item/dissector/alien
|
||||
name = "\improper Alien Dissection Manager"
|
||||
desc = "A tool of alien origin, capable of near impossible levels of precision during dissections."
|
||||
icon_state = "dissector_alien"
|
||||
origin_tech = "abductor=3"
|
||||
toolspeed = 0.2
|
||||
|
||||
/obj/item/dissector/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
|
||||
AddComponent(/datum/component/surgery_initiator)
|
||||
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
|
||||
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
|
||||
|
||||
/datum/surgery_step/generic/dissect
|
||||
name = "dissect"
|
||||
allowed_tools = list(
|
||||
/obj/item/dissector/alien = 100,
|
||||
/obj/item/dissector/upgraded = 70,
|
||||
/obj/item/organ_extractor = 60,
|
||||
TOOL_DISSECTOR = 40,
|
||||
/obj/item/scalpel/laser/manager = 10,
|
||||
/obj/item/scalpel = 5,
|
||||
/obj/item/wirecutters = 2,
|
||||
/obj/item/kitchen/utensil/fork = 1,
|
||||
)
|
||||
preop_sound = 'sound/surgery/organ1.ogg'
|
||||
success_sound = 'sound/surgery/organ2.ogg'
|
||||
failure_sound = 'sound/effects/bone_break_1.ogg'
|
||||
time = 1.5 SECONDS
|
||||
|
||||
/datum/surgery_step/generic/dissect/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(istype(surgery, /datum/surgery/dissect))
|
||||
to_chat(user, "[target.surgery_container.dissection_text[surgery.step_number]]")
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/generic/dissect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(istype(surgery, /datum/surgery/dissect))
|
||||
to_chat(user, "[target.surgery_container.dissection_success_text[surgery.step_number]]")
|
||||
if(length(surgery.steps) <= surgery.step_number) // only procs if its the finishing step
|
||||
if(isalien(target)) // xenos are special snowflakes
|
||||
var/picked = pick_organ(target)
|
||||
var/obj/item/organ/internal/alien/xeno = new picked(target.loc)
|
||||
xeno.organ_quality = pick_quality(tool, surgery.get_surgery_step())
|
||||
SSblackbox.record_feedback("nested tally", "xeno_organ_type", 1, list("[picked]", xeno.organ_quality))
|
||||
target.surgery_container.xeno_specialized_organs -= picked
|
||||
for(var/obj/item/organ/internal/alien/A in target.internal_organs)
|
||||
if(A.type == xeno)
|
||||
A.remove()
|
||||
if(istype(tool, /obj/item/organ_extractor))
|
||||
var/obj/item/organ_extractor/I = tool
|
||||
I.insert_internal_organ_in_extractor(xeno)
|
||||
else
|
||||
if(istype(tool, /obj/item/organ_extractor)) // lets directly insert it into an organ extractor
|
||||
var/obj/item/organ_extractor/I = tool
|
||||
var/organ_type = pick_organ(target)
|
||||
var/obj/item/organ/internal/organ = new organ_type(target.loc)
|
||||
organ.organ_quality = pick_quality(tool, surgery.get_surgery_step())
|
||||
SSblackbox.record_feedback("nested tally", "xeno_organ_type", 1, list("[organ.type]", organ.organ_quality))
|
||||
I.insert_internal_organ_in_extractor(organ)
|
||||
return SURGERY_STEP_CONTINUE
|
||||
var/obj/item/xeno_organ/new_organ = new /obj/item/xeno_organ(target.loc)
|
||||
if(length(target.surgery_container.custom_organ_states))
|
||||
new_organ.icon_state = pick(target.surgery_container.custom_organ_states)
|
||||
new_organ.true_organ_type = pick_organ(target)
|
||||
new_organ.unknown_quality = pick_quality(tool, surgery.get_surgery_step())
|
||||
user.put_in_inactive_hand(new_organ)
|
||||
SSblackbox.record_feedback("nested tally", "xeno_organ_type", 1, list("[new_organ.true_organ_type]", new_organ.unknown_quality))
|
||||
target.contains_xeno_organ = FALSE
|
||||
return SURGERY_STEP_CONTINUE
|
||||
|
||||
/datum/surgery_step/generic/dissect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(istype(surgery, /datum/surgery/dissect))
|
||||
to_chat(user, "[target.surgery_container.dissection_failure_text[surgery.step_number]]")
|
||||
return SURGERY_STEP_RETRY
|
||||
|
||||
/datum/surgery_step/generic/dissect/proc/pick_organ(mob/living/target)
|
||||
var/chosen_organ_type
|
||||
if(!target.ignore_generic_organs && (prob(75) || !target.surgery_container.xeno_specialized_organs)) //if it has no specialized organs always roll generic
|
||||
chosen_organ_type = pick(target.surgery_container.xeno_generic_organs)
|
||||
else
|
||||
chosen_organ_type = pick(target.surgery_container.xeno_specialized_organs)
|
||||
return chosen_organ_type
|
||||
|
||||
/// Decides the quality of the new organ based off tool efficiency and tool bit mods
|
||||
/datum/surgery_step/generic/dissect/proc/pick_quality(obj/item/I, datum/surgery_step/current_step)
|
||||
if(istype(I, /obj/item/dissector/alien))
|
||||
return ORGAN_PRISTINE
|
||||
var/quality_chance
|
||||
for(var/key in current_step.allowed_tools)
|
||||
if(ispath(key) && istype(I, key))
|
||||
quality_chance = allowed_tools[key]
|
||||
break
|
||||
else if(I.tool_behaviour == key)
|
||||
quality_chance = allowed_tools[key]
|
||||
break
|
||||
|
||||
var/inverted_chance = 100 - quality_chance
|
||||
quality_chance += ((inverted_chance * 0.66) * -(I.bit_efficiency_mod - 1))
|
||||
if(prob(quality_chance / 2)) // at best, ~50% chance
|
||||
return ORGAN_PRISTINE
|
||||
if(prob(quality_chance))
|
||||
return ORGAN_NORMAL
|
||||
return ORGAN_DAMAGED
|
||||
|
||||
// Dissections should always end in he dissect step for organ quality sake
|
||||
/datum/surgery/dissect
|
||||
name = "experimental dissection"
|
||||
requires_bodypart = FALSE // most simplemobs wont have limbs
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
target_mobtypes = list(/mob/living)
|
||||
requires_organic_bodypart = FALSE
|
||||
lying_required = FALSE
|
||||
steps = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
/datum/surgery/dissect/can_start(mob/user, mob/living/target)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return FALSE
|
||||
if(target.stat == DEAD && target.contains_xeno_organ)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/surgery_step/fake_robotics
|
||||
name = "fake robotics operations - do not use this parent object"
|
||||
allowed_tools = list()
|
||||
time = 10 SECONDS
|
||||
|
||||
/datum/surgery_step/fake_robotics/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(istype(surgery, /datum/surgery/dissect))
|
||||
to_chat(user, "[target.surgery_container.dissection_text[surgery.step_number]]")
|
||||
if(tool && tool.tool_behaviour)
|
||||
tool.play_tool_sound(user, 30)
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/fake_robotics/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(istype(surgery, /datum/surgery/dissect))
|
||||
to_chat(user, "[target.surgery_container.dissection_success_text[surgery.step_number]]")
|
||||
if(tool && tool.tool_behaviour)
|
||||
tool.play_tool_sound(user, 30)
|
||||
return SURGERY_STEP_CONTINUE
|
||||
|
||||
/datum/surgery_step/fake_robotics/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(istype(surgery, /datum/surgery/dissect))
|
||||
to_chat(user, "[target.surgery_container.dissection_failure_text[surgery.step_number]]")
|
||||
if(tool && tool.tool_behaviour)
|
||||
tool.play_tool_sound(user, 30)
|
||||
return SURGERY_STEP_RETRY
|
||||
|
||||
/datum/surgery_step/fake_robotics/unscrew_hatch
|
||||
name = "unscrew hatch"
|
||||
allowed_tools = list(
|
||||
TOOL_SCREWDRIVER = 100,
|
||||
/obj/item/coin = 50,
|
||||
/obj/item/kitchen/knife = 50
|
||||
)
|
||||
|
||||
time = 1.6 SECONDS
|
||||
|
||||
/datum/surgery_step/fake_robotics/open_hatch
|
||||
name = "open hatch"
|
||||
allowed_tools = list(
|
||||
TOOL_RETRACTOR = 100,
|
||||
TOOL_CROWBAR = 100,
|
||||
/obj/item/kitchen/utensil = 50
|
||||
)
|
||||
|
||||
time = 2.4 SECONDS
|
||||
|
||||
/datum/surgery_step/fake_robotics/amputate
|
||||
name = "remove component"
|
||||
|
||||
allowed_tools = list(
|
||||
TOOL_MULTITOOL = 100
|
||||
)
|
||||
|
||||
time = 5 SECONDS
|
||||
|
||||
/datum/xenobiology_surgery_container
|
||||
/// Does this organ have custom icon states it should be choosing from
|
||||
var/list/custom_organ_states = list()
|
||||
|
||||
/// Contains the results for any specialized organs this creature should have
|
||||
var/list/xeno_specialized_organs = list()
|
||||
|
||||
/// Holds the list of all generic non-specific organs
|
||||
var/static/list/xeno_generic_organs = list(
|
||||
/obj/item/organ/internal/liver/xenobiology/toxic,
|
||||
/obj/item/organ/internal/liver/xenobiology/detox,
|
||||
/obj/item/organ/internal/heart/xenobiology/vestigial,
|
||||
/obj/item/organ/internal/heart/xenobiology/incompatible,
|
||||
/obj/item/organ/internal/appendix/xenobiology/feverish,
|
||||
/obj/item/organ/internal/appendix/xenobiology/freezing,
|
||||
/obj/item/organ/internal/kidneys/xenobiology/lethargic,
|
||||
/obj/item/organ/internal/ears/xenobiology/colorful,
|
||||
)
|
||||
|
||||
/// Contains the list for which paths are needed at each dissection step.
|
||||
var/list/dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
/// Contains specialty text for each dissection step.
|
||||
var/list/dissection_text = list(
|
||||
"<span class='notice'>You begin prepping the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin to make a careful incision into the subject's corpse.</span>",
|
||||
"<span class='notice'>You begin clamping any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
/// Contains specialty text for dissection success steps
|
||||
var/list/dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully make an incision into the dissection site.</span>",
|
||||
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
/// Contains specialty text for dissection step failures
|
||||
var/list/dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/goliath
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/appendix/xenobiology/tendril)
|
||||
|
||||
/datum/xenobiology_surgery_container/megacarp
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/heart/xenobiology/megacarp)
|
||||
|
||||
/datum/xenobiology_surgery_container/morph
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/liver/xenobiology/hungry)
|
||||
|
||||
/datum/xenobiology_surgery_container/hound
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/liver/xenobiology/sharp)
|
||||
|
||||
/datum/xenobiology_surgery_container/sweating
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/kidneys/xenobiology/sweating)
|
||||
|
||||
/datum/xenobiology_surgery_container/watcher
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/kidneys/xenobiology/sinew)
|
||||
|
||||
/datum/xenobiology_surgery_container/migo
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/appendix/xenobiology/noisemaker)
|
||||
|
||||
/datum/xenobiology_surgery_container/spider
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/appendix/xenobiology/toxin_stinger)
|
||||
|
||||
/datum/xenobiology_surgery_container/hivelord
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/heart/xenobiology/hyperactive)
|
||||
|
||||
/datum/xenobiology_surgery_container/goldgrub
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/kidneys/xenobiology/metallic)
|
||||
|
||||
/datum/xenobiology_surgery_container/tomato
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/liver/xenobiology/soupy)
|
||||
|
||||
/datum/xenobiology_surgery_container/herald
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/lungs/xenobiology/mirror)
|
||||
|
||||
/datum/xenobiology_surgery_container/clown
|
||||
xeno_specialized_organs = list(
|
||||
/obj/item/organ/internal/heart/xenobiology/bananium,
|
||||
/obj/item/organ/internal/heart/xenobiology/cursed_bananium,
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/revenant
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/appendix/xenobiology/electro_strands)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin prepping the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin to easily open up a surgical site from the ashen mound.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the nearly ashen pile!</span>",
|
||||
"<span class='warning'>You struggle to get the surgical site open as ash crumples back in on itself!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/colossus
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/cyberimp/mouth/xenobiology/vocal_remnants)
|
||||
|
||||
custom_organ_states = list("colossus1", "colossus2", "colossus3", "colossus4")
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You make a careful incision into the subject's corpse.</span>",
|
||||
"<span class='notice'>You clamp any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You carefully begin severing the metal sections from the surrounding flesh.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully make an incision into the dissection site.</span>",
|
||||
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You manage to cut away and seperate the metal from flesh.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>The mixture of metal and flesh seems impossible to distinguish in some places!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/pandora
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/heart/xenobiology/paradox)
|
||||
|
||||
custom_organ_states = list("hiero1", "hiero2")
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/fake_robotics/unscrew_hatch,
|
||||
/datum/surgery_step/fake_robotics/open_hatch,
|
||||
/datum/surgery_step/fake_robotics/amputate,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin to unscrew the coverings.</span>",
|
||||
"<span class='notice'>You begin prying open the loose panel from the machine.</span>",
|
||||
"<span class='notice'>You carefully begin to disconnect the core from the surrounding power network.</span>",
|
||||
"<span class='notice'>You begin removing the core from the metal housing surrounding it.</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully remove any screws keeping the panel shut.</span>",
|
||||
"<span class='notice'>You pry open the loose panels to expose the core within.</span>",
|
||||
"<span class='notice'>You successfully disconnect the core from the power connectors.</span>",
|
||||
"<span class='notice'>You remove the core from the metal housing!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='warning'>You cant get enough torque to unscrew the rusted fastenings off!</span>",
|
||||
"<span class='warning'>You fail to find enough leverage to get the panel off!</span>",
|
||||
"<span class='warning'>You cant find how to safely remove the core from its attached wiring!</span>",
|
||||
"<span class='warning'>The tool fails to remove the core from the metal housing!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/legionnaire
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/ears/xenobiology/sinister)
|
||||
|
||||
custom_organ_states = list("legion1", "legion2")
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/amputate,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin sawing through the dense bone obstructions.</span>",
|
||||
"<span class='notice'>With a sickening crunch, you begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>"
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You manage to detach the bones away from the dissection cavity.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>"
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='notice'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='notice'>Your saw fails to find purchase against the hardened bone!</span>",
|
||||
"<span class='notice'>The surrounding bone refuses to budge!</span>",
|
||||
"<span class='notice'>The tool fails to remove the organ from the surrounding skeletal structure!</span>"
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/bubblegum
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/heart/xenobiology/bloody_sack)
|
||||
|
||||
custom_organ_states = list("bubblegum1", "bubblegum2", "bubblegum3", "bubblegum4")
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the corpse for dissection... If you can even call it that at this point</span>",
|
||||
"<span class='notice'>You begin removing shards and chunks of bone, clearing a spot to safely cut deeper.</span>",
|
||||
"<span class='notice'>You slowly cut your way into the pile, looking for anything other than formless flesh and bone...</span>",
|
||||
"<span class='notice'>You begin clamping the mass amount of leaking arteries in the surgical site.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You finally find something, and begin to remove a unidentifiable mass out of the mass!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You manage to clear out the dissection site of obstructive bone.</span>",
|
||||
"<span class='notice'>You manage to cut deep enough until something of signifigance seems to reveal.</span>",
|
||||
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>You begin removing shards and chunks of bone, clearing a spot to safely cut deeper.</span>",
|
||||
"<span class='warning'>You slowly cut your way into the pile, looking for anything other than formless flesh and bone..</span>",
|
||||
"<span class='warning'>You clamp the mass amount of leaking arteries in the surgical site.</span>",
|
||||
"<span class='warning'>You force the dissection cavity open.</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/alien
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/alien/hivenode)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/saw_carapace,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin sawing through the chitinous outer layer.</span>",
|
||||
"<span class='notice'>You begin clamping any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You manage to saw through the armored exoskeleton.</span>",
|
||||
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>You fail to get through the armored outer layer!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/alien/sentinel
|
||||
xeno_specialized_organs = list(
|
||||
/obj/item/organ/internal/alien/plasmavessel,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/neurotoxin,
|
||||
/obj/item/organ/internal/alien/hivenode,
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/alien/larva
|
||||
xeno_specialized_organs = list(
|
||||
/obj/item/organ/internal/alien/plasmavessel/larva,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/neurotoxin,
|
||||
/obj/item/organ/internal/alien/hivenode,
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/alien/queen
|
||||
xeno_specialized_organs = list(
|
||||
/obj/item/organ/internal/alien/plasmavessel/queen,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/eggsac,
|
||||
/obj/item/organ/internal/alien/neurotoxin,
|
||||
/obj/item/organ/internal/alien/resinspinner,
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/alien/drone
|
||||
xeno_specialized_organs = list(
|
||||
/obj/item/organ/internal/alien/plasmavessel/drone,
|
||||
/obj/item/organ/internal/alien/acidgland,
|
||||
/obj/item/organ/internal/alien/resinspinner,
|
||||
/obj/item/organ/internal/alien/hivenode,
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/alien/hunter
|
||||
xeno_specialized_organs = list(
|
||||
/obj/item/organ/internal/alien/plasmavessel/hunter,
|
||||
/obj/item/organ/internal/alien/hivenode,
|
||||
/obj/item/organ/internal/alien/resinspinner,
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/hierophant
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/eyes/cybernetic/xenobiology/glowing)
|
||||
|
||||
custom_organ_states = list("hiero1", "hiero2")
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/fake_robotics/unscrew_hatch,
|
||||
/datum/surgery_step/fake_robotics/open_hatch,
|
||||
/datum/surgery_step/fake_robotics/amputate,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin to unscrew the coverings.</span>",
|
||||
"<span class='notice'>You begin prying open the loose panel from the machine.</span>",
|
||||
"<span class='notice'>You carefully begin to disconnect the core from the surrounding power network.</span>",
|
||||
"<span class='notice'>You begin removing the core from the metal housing surrounding it.</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully remove any screws keeping the panel shut.</span>",
|
||||
"<span class='notice'>You pry open the loose panels to expose the core within.</span>",
|
||||
"<span class='notice'>You successfully disconnect the core from the power connectors.</span>",
|
||||
"<span class='notice'>You remove the core from the metal housing!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>You cant get enough torque to unscrew the rusted fastenings off!</span>",
|
||||
"<span class='warning'>You fail to find enough leverage to get the panel off!</span>",
|
||||
"<span class='warning'>You cant find how to safely remove the core from its attached wiring!</span>",
|
||||
"<span class='warning'>The tool fails to remove the core from the metal housing!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/blobbernaut
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/eyes/xenobiology/receptors)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin closing off one of the many leaking fluid sacks in the corpse.</span>",
|
||||
"<span class='notice'>Your work area closed filled back in. You begin to re-open it.</span>",
|
||||
"<span class='notice'>You begin closing off more leaking sacks and fluid veins.</span>",
|
||||
"<span class='notice'>This damned dissection site <b>WON'T STOP CLOSING!</b></span>",
|
||||
"<span class='notice'>You begin once again closing off more fluid sacks and leaking cavities....</span>",
|
||||
"<span class='notice'>You at last begin to remove something from the cadaver...</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You easily pry apart the semi-liquid corpse.</span>",
|
||||
"<span class='notice'>You close off one numerous leaking cavities.</span>",
|
||||
"<span class='notice'>You manage to get the dissection site back open</span>",
|
||||
"<span class='notice'>You close off more leaking sacks and fluid veins.</span>",
|
||||
"<span class='notice'>You manage to get the dissection site back open... again.</span>",
|
||||
"<span class='notice'>You finally get the leaking under control.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>The you fail to open the incision site, it simply closes back up!</span>",
|
||||
"<span class='warning'>The leakage is too intense, you cant get it under control!</span>",
|
||||
"<span class='warning'>The you fail to open the incision site, it simply closes back up!</span>",
|
||||
"<span class='warning'>The leakage is too intense, you cant get it under control!</span>",
|
||||
"<span class='warning'>The you fail to open the incision site, it simply closes back up!</span>",
|
||||
"<span class='warning'>The leakage is too intense, you cant get it under control!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the goopy flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/terror_spider
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/appendix/xenobiology/toxin_stinger/terror)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/amputate,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin sawing through the chitinout outer layer.</span>",
|
||||
"<span class='notice'>You begin clamping any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You manage to saw through the hardened exoskeleton.</span>",
|
||||
"<span class='notice'>You clamp any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='warning'>Your saw fails to find purchase against the reinforced exoskeleton!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/vetus
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/cell/xenobiology/supercharged)
|
||||
|
||||
custom_organ_states = list("vetus1", "vetus2")
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/fake_robotics/unscrew_hatch,
|
||||
/datum/surgery_step/fake_robotics/open_hatch,
|
||||
/datum/surgery_step/fake_robotics/amputate,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin to unscrew the coverings.</span>",
|
||||
"<span class='notice'>You begin prying open the loose panel from the machine.</span>",
|
||||
"<span class='notice'>You carefully begin to disconnect the core from the machinery without setting off any secondary explosions.</span>",
|
||||
"<span class='notice'>You begin removing the core from the metal housing surrounding it.</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully remove any screws keeping the panel shut.</span>",
|
||||
"<span class='notice'>You pry open the loose panels to expose the core within.</span>",
|
||||
"<span class='notice'>You successfully disconnect the core from the power connectors.</span>",
|
||||
"<span class='notice'>You remove the core from the metal housing!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='warning'>You cant get enough torque to unscrew the rusted fastenings off!</span>",
|
||||
"<span class='warning'>You fail to find enough leverage to get the panel off!</span>",
|
||||
"<span class='warning'>You cant find how to safely remove the core from its attached wiring!</span>",
|
||||
"<span class='warning'>The tool fails to remove the core from the metal housing!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/drake
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/lungs/xenobiology/flame_sack)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/amputate,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin sawing through the hardened scales of the drake.</span>",
|
||||
"<span class='notice'>You carefully begin removing the scales from the corpse</span>",
|
||||
"<span class='notice'>You begin to make a careful incision into the subject's corpse.</span>",
|
||||
"<span class='notice'>You begin clamping any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You feel the resistance of the hardened scales give away to the saw.</span>",
|
||||
"<span class='notice'>You pluck away the remaining scales from around the dissection site.</span>",
|
||||
"<span class='notice'>You successfully make an incision into the dissection site.</span>",
|
||||
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
|
||||
"<span class='notice'>You force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>You fail to find enough leverage to saw through the thick scales!</span>",
|
||||
"<span class='warning'>You cant get a good enough grip on the loosened scales to pluck them off!</span>",
|
||||
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/headslug
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/heart/xenobiology/contortion)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You carefully begin making a tiny incision in the diminutive creature.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You successfully make an incision into the tiny creature.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/basilisk
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/kidneys/xenobiology/sweating)
|
||||
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/drill,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/clamp_bleeders,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin drilling into the crystals to weakent he structure.</span>",
|
||||
"<span class='notice'>You begin breaking apart the crystals preventing access to the subject.</span>",
|
||||
"<span class='notice'>You begin removing the remaining pieces of obstructive material.</span>",
|
||||
"<span class='notice'>You begin to make a careful incision into the subject's corpse.</span>",
|
||||
"<span class='notice'>You begin clamping any cavities leaking fluids into the surgical site.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You drill a series of holes into the crystalline carapace.</span>",
|
||||
"<span class='notice'>You crack open the crystalline lattice into many pieces.</span>",
|
||||
"<span class='notice'>You colelct and remove the myriad of loose crystals.</span>",
|
||||
"<span class='notice'>You successfully make an incision into the dissection site.</span>",
|
||||
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
|
||||
"<span class='notice'>You successfully force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>You fail to drill through the hardened crystals!</span>",
|
||||
"<span class='warning'>You fail to get enough leverage to break apart the crystal lattice!</span>",
|
||||
"<span class='warning'>You cant seem to get a good grip on the irregular chunks of material!</span>",
|
||||
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
|
||||
)
|
||||
|
||||
/datum/xenobiology_surgery_container/legion
|
||||
xeno_specialized_organs = list(/obj/item/organ/internal/heart/xenobiology/squirming)
|
||||
custom_organ_states = list("legion1", "legion2")
|
||||
dissection_tool_step = list(
|
||||
/datum/surgery_step/generic/dissect,
|
||||
/datum/surgery_step/generic/amputate,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/retract_skin,
|
||||
/datum/surgery_step/generic/cut_open,
|
||||
/datum/surgery_step/generic/dissect,
|
||||
)
|
||||
|
||||
dissection_text = list(
|
||||
"<span class='notice'>You begin to prep the subject for dissection...</span>",
|
||||
"<span class='notice'>You begin to saw through the thick skull plating.</span>",
|
||||
"<span class='notice'>You make a careful incision into the subject's corpse.</span>",
|
||||
"<span class='notice'>You begin cutting away at the small skulls continuing to bud up from the corpse.</span>",
|
||||
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
|
||||
"<span class='notice'>You once again cut away at the budding skulls attempting to seal up the surgical site.</span>",
|
||||
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>"
|
||||
)
|
||||
dissection_success_text = list(
|
||||
"<span class='notice'>You successfully set up a dissection site.</span>",
|
||||
"<span class='notice'>You manage to crack through the thick skull plating.</span>",
|
||||
"<span class='notice'>You successfully make an incision into the dissection site</span>",
|
||||
"<span class='notice'>You manage to cut away and control the growing buds.</span>",
|
||||
"<span class='notice'>You force the dissection cavity open.</span>",
|
||||
"<span class='notice'>You again manage to cut away and control the growing buds.</span>",
|
||||
"<span class='notice'>You remove an unidentifiable mass out of the subject!</span>"
|
||||
)
|
||||
dissection_failure_text = list(
|
||||
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
|
||||
"<span class='warning'>You cant get enough leverage to saw through the thick skull plating!</span>",
|
||||
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
|
||||
"<span class='warning'>You fail to cut the buds away faster than they're regrowing!</span>",
|
||||
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
|
||||
"<span class='warning'>You fail to cut the buds away faster than they're regrowing!</span>",
|
||||
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>"
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user