125 parser errors.

This commit is contained in:
Alexis
2026-03-06 13:33:54 -05:00
parent 7109107b52
commit 3b05cd16d3
63 changed files with 86 additions and 1680 deletions
@@ -42,4 +42,4 @@
#define BORER_ALONE_PRODUCTION (1<<4)
// Clock cultist
#define IS_CLOCK(mob) ((FACTION_CLOCK in mob.faction) || mob?.mind?.has_antag_datum(/datum/antagonist/clock_cultist))
#define IS_CLOCK(mob) ((mob.has_faction(FACTION_CLOCK)) || mob?.mind?.has_antag_datum(/datum/antagonist/clock_cultist))
+1 -1
View File
@@ -36,7 +36,7 @@
forge_objectives()
if(equip_ert)
equipERT()
owner?.current.faction |= FACTION_ERT // SKYRAT EDIT ADDITION
owner?.current.add_faction(FACTION_ERT) // SKYRAT EDIT ADDITION
. = ..()
/datum/antagonist/ert/get_team()
@@ -63,5 +63,5 @@
id_trim = /datum/id_trim/chameleon/operative
/datum/outfit/syndicateinfiltrator/post_equip(mob/living/carbon/human/H)
H.faction |= ROLE_SYNDICATE
H.add_faction(ROLE_SYNDICATE)
H.update_icons()
@@ -14,12 +14,12 @@
. = ..()
RegisterSignal(carbon_target, COMSIG_MOB_ITEM_ATTACK, PROC_REF(mob_attack))
carbon_target.AddComponent(/datum/component/ash_age)
carbon_target.faction |= FACTION_ASHWALKER
carbon_target.add_faction(FACTION_ASHWALKER)
/datum/species/lizard/ashwalker/on_species_loss(mob/living/carbon/carbon_target)
. = ..()
UnregisterSignal(carbon_target, COMSIG_MOB_ITEM_ATTACK)
carbon_target.faction &= FACTION_ASHWALKER
carbon_target.remove_faction(FACTION_ASHWALKER)
/datum/species/lizard/ashwalker/proc/mob_attack(datum/source, mob/mob_target, mob/user, list/modifiers)
SIGNAL_HANDLER
@@ -24,7 +24,7 @@
var/obj/item/implant/weapons_auth/weapons_authorisation = new/obj/item/implant/weapons_auth(equipping_human)
weapons_authorisation.implant(equipping_human)
equipping_human.faction |= ROLE_SYNDICATE
equipping_human.add_faction(ROLE_SYNDICATE)
equipping_human.update_icons()
@@ -14,7 +14,7 @@
return TRUE
/obj/machinery/computer/shuttle/goldeneye_cruiser/allowed(mob/to_check)
if(issilicon(to_check) && !(ROLE_SYNDICATE in to_check.faction))
if(issilicon(to_check) && !(to_check.has_faction(ROLE_SYNDICATE)))
return FALSE
return ..()
@@ -61,7 +61,7 @@
/datum/outfit/cin_soldier_player/post_equip(mob/living/carbon/human/user, visualsOnly)
. = ..()
user.faction |= ROLE_SYNDICATE
user.add_faction(ROLE_SYNDICATE)
// make sure we update the ID's name too
var/obj/item/card/id/id_card = user.wear_id
@@ -28,7 +28,7 @@
/datum/outfit/science_team/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
equipped_human.faction |= FACTION_BLACKMESA
equipped_human.add_faction(FACTION_BLACKMESA)
/datum/id_trim/science_team
assignment = "Science Team Scientist"
@@ -65,7 +65,7 @@
/datum/outfit/security_guard/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
equipped_human.faction |= FACTION_BLACKMESA
equipped_human.add_faction(FACTION_BLACKMESA)
/datum/id_trim/security_guard
assignment = "Security Guard"
@@ -170,7 +170,7 @@
/datum/outfit/hecu/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
equipped_human.faction |= FACTION_HECU
equipped_human.add_faction(FACTION_HECU)
/datum/id_trim/hecu
assignment = "HECU Marine"
@@ -222,7 +222,7 @@
/datum/outfit/hecu/leader/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
equipped_human.faction |= FACTION_HECU
equipped_human.add_faction(FACTION_HECU)
/datum/id_trim/hecu_leader
assignment = "HECU Captain"
@@ -60,7 +60,7 @@
for(var/mob/living/mob_to_neutralize in view(src, effect_range))
if(is_type_in_list(mob_to_neutralize, blacklisted_mobs))
return
mob_to_neutralize.faction |= factions
mob_to_neutralize.add_faction(factions)
mob_to_neutralize.visible_message(span_green("[mob_to_neutralize] is overcome by a wave of peace and tranquility!"))
new /obj/effect/particle_effect/sparks/quantum(get_turf(mob_to_neutralize))
qdel(src)
@@ -467,11 +467,11 @@
/obj/item/robot_model/ninja/rebuild_modules()
. = ..()
var/mob/living/silicon/robot/Ninja = loc
Ninja.faction -= "silicon" //ai turrets hostile against assault and medical
Ninja.remove_faction("silicon") //ai turrets hostile against assault and medical
/obj/item/robot_model/ninja/remove_module(obj/item/I, delete_after)
var/mob/living/silicon/robot/Ninja = loc
Ninja.faction += "silicon"
Ninja.add_faction("silicon")
. = ..()
/obj/item/robot_model/ninja/ninja_medical
@@ -32,7 +32,7 @@
/datum/antagonist/clock_cultist/apply_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/current = owner.current
current.faction |= FACTION_CLOCK
current.add_faction(FACTION_CLOCK)
current.grant_language(/datum/language/ratvar, source = LANGUAGE_CULTIST)
communicate.Grant(current)
recall.Grant(current)
@@ -42,7 +42,7 @@
/datum/antagonist/clock_cultist/remove_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/current = owner.current
current.faction -= FACTION_CLOCK
current.remove_faction(FACTION_CLOCK)
current.remove_language(/datum/language/ratvar, TRUE, TRUE, LANGUAGE_CULTIST)
communicate.Remove(current)
recall.Remove(current)
@@ -14,7 +14,7 @@
)
/datum/outfit/clock/pre_equip(mob/living/carbon/human/equip_human, visualsOnly)
equip_human.faction |= FACTION_CLOCK
equip_human.add_faction(FACTION_CLOCK)
/datum/outfit/clock/armor
@@ -12,7 +12,7 @@
/// The sound made when an item is eaten
var/item_recycle_sound = 'modular_skyrat/modules/reagent_forging/sound/forge.ogg'
/// The recycler's internal materials storage, for when items recycled don't produce enough to make a full sheet of that material
var/datum/component/material_container/materials
var/datum/material_container/materials
/// The list of all the materials we can recycle
var/static/list/allowed_materials = list(
/datum/material/iron,
@@ -34,8 +34,8 @@
. = ..()
AddElement(/datum/element/repackable, repacked_type, 5 SECONDS)
AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
materials = AddComponent( \
/datum/component/material_container, \
materials = new ( \
src, \
allowed_materials, \
INFINITY, \
MATCONTAINER_EXAMINE, \
@@ -1,66 +0,0 @@
// A surgery that repairs the patient's NIF
/datum/surgery/repair_nif
name = "Repair NIF"
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/saw,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/incise,
/datum/surgery_step/repair_nif,
/datum/surgery_step/close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_HEAD)
desc = "A surgical procedure that restores the integrity of an installed NIF."
/datum/surgery/repair_nif/can_start(mob/user, mob/living/patient)
var/mob/living/carbon/human/nif_patient = patient
var/obj/item/organ/cyberimp/brain/nif/installed_nif = nif_patient.get_organ_by_type(/obj/item/organ/cyberimp/brain/nif)
if(!nif_patient || !installed_nif)
return FALSE
return ..()
/datum/surgery_step/repair_nif
name = "repair installed NIF (multitool)"
repeatable = FALSE
implements = list(
TOOL_MULTITOOL = 100,
TOOL_HEMOSTAT = 35,
TOOL_SCREWDRIVER = 15,
)
time = 12 SECONDS
/datum/surgery_step/repair_nif/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You begin to restore the integrity of [target]'s NIF..."),
"[user] begins to fix [target]'s NIF.",
"[user] begins to perform repairs on [target]'s NIF."
)
/datum/surgery_step/repair_nif/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, span_notice("You succeed in restoring the integrity of [target]'s NIF."),
"[user] successfully repairs [target]'s NIF!",
"[user] completes the repair on [target]'s NIF."
)
var/mob/living/carbon/human/nif_patient = target
var/obj/item/organ/cyberimp/brain/nif/installed_nif = nif_patient.get_organ_by_type(/obj/item/organ/cyberimp/brain/nif)
installed_nif.durability = installed_nif.max_durability
installed_nif.send_message("Restored to full integrity!")
return ..()
/datum/surgery_step/repair_nif/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(target.get_organ_slot(ORGAN_SLOT_BRAIN))
display_results(user, target, span_warning("You screw up, causing [target] brain damage!"),
span_warning("[user] screws up, while trying to repair [target]'s NIF!"),
"[user] fails to complete the repair on [target]'s NIF.")
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 20)
return FALSE
@@ -86,7 +86,7 @@
var/mob/living/entered_mob = arrived
if((NEST_FACTION in entered_mob.faction))
if((entered_mob.has_faction(NEST_FACTION)))
return
spawn_mob()
@@ -102,7 +102,7 @@
var/mob/living/spawned_mob = new chosen_mob_type(loc)
spawned_mob.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
spawned_mob.faction = faction
spawned_mob.has_faction = faction
spawned_mob.ghost_controllable = ghost_controllable
RegisterSignal(spawned_mob, COMSIG_LIVING_DEATH, PROC_REF(mob_death))
@@ -54,6 +54,6 @@ ADMIN_VERB(spawn_mob_spawner, R_ADMIN, "Spawn mob spawner", "Spawns a mob spawne
spawned_spawner.icon_state = prefs["nest_icon"]["value"]
spawned_spawner.ghost_controllable = prefs["ghost_controllable"]["value"] == "Yes" ? TRUE : FALSE
spawned_spawner.passive_spawning = prefs["passive_spawning"]["value"] == "Yes" ? TRUE : FALSE
spawned_spawner.faction += prefs["faction"]["value"]
spawned_spawner.add_faction(prefs["faction"]["value"])
if(prefs["passive_spawning"]["value"] == "Yes")
START_PROCESSING(SSobj, spawned_spawner)
@@ -100,8 +100,8 @@ GLOBAL_VAR(first_officer)
/datum/outfit/pirate/nri/post_equip(mob/living/carbon/human/equipped)
. = ..()
equipped.faction -= "pirate"
equipped.faction |= "raider"
equipped.remove_faction("pirate")
equipped.add_faction("raider")
// make sure we update the ID's name too
var/obj/item/card/id/id_card = equipped.wear_id
@@ -55,7 +55,7 @@ would only be recognisable with someone that had the syndicate trait.
if(EXAMINE_CHECK_SYNDICATE)
if(user.mind)
var/datum/mind/M = user.mind
if((ROLE_TRAITOR in M.get_special_roles()) || (ROLE_SYNDICATE in user.faction))
if((ROLE_TRAITOR in M.get_special_roles()) || (user.has_faction(ROLE_SYNDICATE)))
composed_message = "You note the following because of your <span class='red'><b>[special_desc_affiliation ? special_desc_affiliation : "Syndicate Affiliation"]</b></span>: <br>"
composed_message += special_desc
. += composed_message
@@ -99,7 +99,7 @@ would only be recognisable with someone that had the syndicate trait.
//Standard faction checks
if(EXAMINE_CHECK_FACTION)
for(var/faction_i in special_desc_factions)
if(faction_i in user.faction)
if(user.has_faction(faction_i))
composed_message = "You note the following because of your loyalty to <b>[faction_i]</b>: <br>"
composed_message += special_desc
. += composed_message
@@ -160,7 +160,7 @@
if(1) //Random traitor items
new /obj/item/storage/box/syndie_kit/chameleon(src)
new /obj/item/storage/backpack/duffelbag/syndie/c4(src)
new /obj/item/computer_disk/syndicate/camera_app(src)
new /obj/item/disk/computer/syndicate/camera_app(src)
new /obj/item/gun/chem(src)
new /obj/item/card/emag(src)
new /obj/item/card/emag/doorjack(src)
@@ -27,7 +27,7 @@
ears = /obj/item/radio/headset/syndicateciv/staff
/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/syndicate, visualsOnly = FALSE)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
var/obj/item/card/id/id_card = syndicate.wear_id
if(istype(id_card))
@@ -277,7 +277,7 @@
ears = /obj/item/radio/headset/syndicateciv/staff
/datum/outfit/ds2/syndicate/post_equip(mob/living/carbon/human/syndicate)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
return ..()
//DS-2 Command
@@ -334,7 +334,7 @@
id_trim = /datum/id_trim/syndicom/skyrat/ds2/stationadmiral
/datum/outfit/ds2/syndicate_command/post_equip(mob/living/carbon/human/syndicate)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
return ..()
/datum/outfit/hotelstaff
@@ -135,7 +135,7 @@
if(held_item && victim.dropItemToGround(held_item))
victim.visible_message(span_danger("[victim] drops [held_item] in shock!"), span_warning("<b>The force on your [limb.plaintext_zone] causes you to drop [held_item]!</b>"), vision_distance=COMBAT_MESSAGE_RANGE)
/datum/wound/blunt/robotic/remove_wound(ignore_limb, replaced)
/datum/wound/blunt/robotic/remove_wound(ignore_limb, replaced, destroying)
. = ..()
QDEL_NULL(active_trauma)
@@ -132,7 +132,7 @@
set_highest_scar(null)
/datum/wound/burn/robotic/overheat/remove_wound(ignore_limb, replaced)
/datum/wound/burn/robotic/overheat/remove_wound(ignore_limb, replaced, destroying)
if (!replaced && highest_scar)
already_scarred = TRUE
highest_scar.lazy_attach(limb)
@@ -238,7 +238,7 @@
if(!isliving(nearby_atom))
return
var/mob/living/nearby_mob = nearby_atom
if(!(FACTION_MOLD in nearby_mob.faction))
if(!(nearby_mob.has_faction(FACTION_MOLD)))
INVOKE_ASYNC(src, PROC_REF(discharge))
/obj/structure/mold/structure/bulb/proc/make_full()
@@ -267,7 +267,7 @@
addtimer(CALLBACK(src, PROC_REF(make_full)), 1 MINUTES, TIMER_UNIQUE|TIMER_NO_HASH_WAIT)
/obj/structure/mold/structure/bulb/attack_generic(mob/user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration)
if(FACTION_MOLD in user.faction)
if(user.has_faction(FACTION_MOLD))
return ..()
discharge()
. = ..()
@@ -106,7 +106,7 @@
/obj/item/modular_computer/pda/nanotrasen_consultant
name = "nanotrasen consultant's PDA"
icon_state = "/obj/item/modular_computer/pda/nanotrasen_consultant"
inserted_disk = /obj/item/computer_disk/command/captain
inserted_disk = /obj/item/disk/computer/command/captain
inserted_item = /obj/item/pen/fountain/green
greyscale_colors = "#017941#0060b8"
@@ -151,7 +151,7 @@
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/pet_carrier(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/computer_disk/command/captain(src)
new /obj/item/disk/computer/command/captain(src)
new /obj/item/radio/headset/heads/nanotrasen_consultant/alt(src)
new /obj/item/radio/headset/heads/nanotrasen_consultant(src)
new /obj/item/storage/photo_album/personal(src)
@@ -171,7 +171,7 @@
/datum/opposing_force_equipment/gadget_stealth/camera_app
name = "SyndEye Program"
item_type = /obj/item/computer_disk/syndicate/camera_app
item_type = /obj/item/disk/computer/syndicate/camera_app
/datum/opposing_force_equipment/gadget_stealth/microlaser
name = "Radioactive Microlaser"
+1 -1
View File
@@ -301,7 +301,7 @@ GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay())
/datum/quirk/item_quirk/mouse/add_unique(client/client_source)
var/mob/living/carbon/human/human_holder = quirk_holder
var/obj/item/organ/tongue/mouse/new_tongue = new(get_turf(human_holder))
human_holder.faction |= FACTION_RAT
human_holder.add_faction(FACTION_RAT)
new_tongue.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE))
new_tongue.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED)
@@ -1,150 +0,0 @@
//cut wires
/datum/surgery_step/cut_wires
name = "cut wires (wirecutters/scalpel)"
implements = list(
TOOL_WIRECUTTER = 100,
TOOL_SCALPEL = 75,
/obj/item/knife = 50,
/obj/item = 10,
) // 10% success with any sharp item.
time = 2.4 SECONDS
preop_sound = 'sound/items/tools/wirecutter.ogg'
/datum/surgery_step/cut_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to cut loose wires in [target]'s [parse_zone(target_zone)]..."),
"[user] begins to cut loose wires in [target]'s [parse_zone(target_zone)].",
"[user] begins to cut loose wires in [target]'s [parse_zone(target_zone)].",
)
/datum/surgery_step/cut_wires/tool_check(mob/user, obj/item/tool)
if(implement_type == /obj/item && !tool.get_sharpness())
return FALSE
return TRUE
//pry off plating
/datum/surgery_step/pry_off_plating
name = "pry off plating (crowbar/hemostat)"
implements = list(
TOOL_CROWBAR = 100,
TOOL_HEMOSTAT = 75,
)
time = 2.4 SECONDS
preop_sound = 'sound/items/tools/crowbar.ogg'
/datum/surgery_step/pry_off_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
do_sparks(rand(5, 9), FALSE, target.loc)
return TRUE
/datum/surgery_step/pry_off_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to pry off [target]'s [parse_zone(target_zone)] plating..."),
"[user] begins to pry off [target]'s [parse_zone(target_zone)] plating.",
"[user] begins to pry off [target]'s [parse_zone(target_zone)] plating.",
)
//weld plating
/datum/surgery_step/weld_plating
name = "weld plating (welder)"
implements = list(
TOOL_WELDER = 100,
)
time = 2.4 SECONDS
preop_sound = 'sound/items/tools/welder.ogg'
/datum/surgery_step/weld_plating/tool_check(mob/user, obj/item/tool)
if(implement_type == TOOL_WELDER && !tool.use_tool(user, user, 0, volume=50, amount=1))
return FALSE
return TRUE
/datum/surgery_step/weld_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to weld [target]'s [parse_zone(target_zone)] plating..."),
"[user] begins to weld [target]'s [parse_zone(target_zone)] plating.",
"[user] begins to weld [target]'s [parse_zone(target_zone)] plating.",
)
//weld plating - Act
/datum/surgery_step/weld_plating_slice
name = "weld plating"
implements = list(
TOOL_WELDER = 100,
)
time = 2.4 SECONDS
preop_sound = 'sound/items/tools/welder.ogg'
/datum/surgery_step/weld_plating/tool_check(mob/user, obj/item/tool)
if(implement_type == TOOL_WELDER && !tool.use_tool(user, user, 0, volume=50, amount=1))
return FALSE
return TRUE
/datum/surgery_step/weld_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to weld into [target]'s [parse_zone(target_zone)] plating to open it..."),
"[user] begins to weld into [target]'s [parse_zone(target_zone)] plating with [tool].",
"[user] begins to weld into [target]'s [parse_zone(target_zone)] plating.",
)
//replace wires
/datum/surgery_step/replace_wires
name = "replace wires (cable coil)"
implements = list(/obj/item/stack/cable_coil = 100)
time = 2.4 SECONDS
var/cableamount = 5
/datum/surgery_step/replace_wires/tool_check(mob/user, obj/item/tool)
var/obj/item/stack/cable_coil/coil = tool
if(coil.get_amount() < cableamount)
to_chat(user, span_warning("Not enough cable!"))
return FALSE
return TRUE
/datum/surgery_step/replace_wires/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/stack/cable_coil/coil = tool
if(coil && !(coil.get_amount() < cableamount)) //failproof
coil.use(cableamount)
return TRUE
/datum/surgery_step/replace_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to replace [target]'s [parse_zone(target_zone)] wiring..."),
"[user] begins to replace [target]'s [parse_zone(target_zone)] wiring.",
"[user] begins to replace [target]'s [parse_zone(target_zone)] wiring.",
)
//add plating
/datum/surgery_step/add_plating
name = "add plating (iron sheet)"
implements = list(/obj/item/stack/sheet/iron = 100)
time = 2.4 SECONDS
var/ironamount = 5
/datum/surgery_step/add_plating/tool_check(mob/user, obj/item/tool)
var/obj/item/stack/sheet/iron/plat = tool
if(plat.get_amount() < ironamount)
to_chat(user, span_warning("Not enough iron!"))
return FALSE
return TRUE
/datum/surgery_step/add_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/stack/sheet/iron/plat = tool
return plat?.use(ironamount)
/datum/surgery_step/add_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to add plating to [target]'s [parse_zone(target_zone)]..."),
"[user] begins to add plating to [target]'s [parse_zone(target_zone)].",
"[user] begins to add plating to [target]'s [parse_zone(target_zone)].",
)
@@ -1,124 +0,0 @@
/datum/surgery/robot_brain_surgery
name = "Reset Posibrain Logic (Brain Surgery)"
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_robot_brain,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest
requires_bodypart_type = BODYTYPE_ROBOTIC | BODYTYPE_NANO //Bubber Edit - BODYTYPE_NANO
desc = "A surgical procedure that restores the default behavior logic and personality matrix of an IPC posibrain."
/datum/surgery/robot_brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
var/obj/item/organ/brain/synth/brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if (!..())
return FALSE
if(!istype(brain) && !issynthetic(target))
return FALSE
else
return TRUE
/datum/surgery_step/fix_robot_brain
name = "fix posibrain (multitool)"
implements = list(
TOOL_MULTITOOL = 95,
TOOL_HEMOSTAT = 35,
/obj/item/pen = 15
)
repeatable = TRUE
time = 12 SECONDS //long and complicated
/datum/surgery_step/fix_robot_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to clear system corruption from [target]'s posibrain..."),
"[user] begins to fix [target]'s posibrain.",
"[user] begins to perform surgery on [target]'s posibrain.",
)
/datum/surgery_step/fix_robot_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user,
target,
span_notice("You succeed in clearing system corruption from [target]'s posibrain."),
"[user] successfully fixes [target]'s posibrain!",
"[user] completes the surgery on [target]'s posibrain.",
)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
target.set_organ_loss(ORGAN_SLOT_BRAIN, target.get_organ_loss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY) //Lobotomy tier fix cause you can't clone this!
target.apply_status_effect(/datum/status_effect/vulnerable_to_damage/surgery)
if(target.get_organ_loss(ORGAN_SLOT_BRAIN) > NONE)
to_chat(user, "[target]'s posibrain still has some lasting system damage that can be cleared.")
return ..()
/datum/surgery_step/fix_robot_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(target.get_organ_slot(ORGAN_SLOT_BRAIN))
display_results(
user,
target,
span_warning("You screw up, fragmenting their data!"),
span_warning("[user] screws up, causing damage to the circuits!"),
"[user] completes the surgery on [target]'s posibrain.",
)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 60)
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY)
else
user.visible_message(span_warning("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore."), span_warning("You suddenly notice that the posibrain you were working on is not there anymore."))
return FALSE
/datum/surgery/robot_trauma_surgery
name = "Reticulate Posibrain Splines (Blessed Lobotomy)"
desc = "A surgical procedure that refurbishes low level components in the posibrain, to fix the strongest trauma errors."
possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest
requires_bodypart_type = BODYTYPE_ROBOTIC
target_mobtypes = list(/mob/living/carbon/human)
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_robot_brain/advanced,
/datum/surgery_step/mechanic_close,
)
/datum/surgery_step/fix_robot_brain/advanced
name = "reticulate splines (multitool)"
repeatable = FALSE
chems_needed = list(
/datum/reagent/medicine/liquid_solder,
/datum/reagent/water/holywater,
)
/datum/surgery_step/fix_robot_brain/advanced/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user,
target,
span_notice("You succeed in reticulating [target]'s splines."),
"[user] successfully fixes [target]'s posibrain!",
"[user] completes the surgery on [target]'s posibrain.",
)
target.set_organ_loss(ORGAN_SLOT_BRAIN, target.get_organ_loss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY)
target.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC)
target.apply_status_effect(/datum/status_effect/vulnerable_to_damage/surgery)
playsound(source = get_turf(target), soundin = 'sound/effects/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
return ..()
@@ -1,120 +0,0 @@
#define SYNTH_REVIVE_WELD_INTERNALS_DAMAGE 30
// Should be a very quick surgery, it's meant to replace defibs (mostly!)
/datum/surgery/positronic_restoration
name = "Posibrain Reboot (Revival)"
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/open_hatch,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/weld_plating/fullbody,
/datum/surgery_step/finalize_positronic_restoration,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST)
requires_bodypart_type = BODYTYPE_ROBOTIC
desc = "A surgical procedure that reboots a positronic brain."
/datum/surgery/positronic_restoration/can_start(mob/user, mob/living/carbon/target)
if(!..() || target.stat != DEAD || !target.get_organ_slot(ORGAN_SLOT_BRAIN) || !issynthetic(target))
return FALSE
return TRUE
/datum/surgery_step/pry_off_plating/fullbody
time = 1.4 SECONDS
/datum/surgery_step/pry_off_plating/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to pry open the outer protective panels on [target]'s braincase..."),
span_notice("[user] begins to pry open the outer protective panels on [target]'s braincase."),
span_notice("[user] begins to pry open the panels on [target]'s braincase.")
)
/datum/surgery_step/weld_plating/fullbody
time = 2 SECONDS
/datum/surgery_step/weld_plating/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to slice the inner protective panels from [target]'s braincase..."),
span_notice("[user] begins to slice the inner protective panels from [target]'s braincase."),
span_notice("[user] begins to slice the panels from [target]'s braincase.")
)
/datum/surgery_step/weld_plating/fullbody/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
. = ..()
target.apply_damage(SYNTH_REVIVE_WELD_INTERNALS_DAMAGE, BRUTE, "[target_zone]", wound_bonus = CANT_WOUND)
/datum/surgery_step/add_plating/fullbody
time = 3 SECONDS
ironamount = 15
/datum/surgery_step/add_plating/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to add new panels to [target]'s braincase..."),
span_notice("[user] begins to add new panels to [target]'s braincase."),
span_notice("[user] begins to add new panels to [target]'s braincase.")
)
/datum/surgery_step/add_plating/fullbody/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
. = ..()
target.heal_bodypart_damage(brute = SYNTH_REVIVE_WELD_INTERNALS_DAMAGE, target_zone = "[target_zone]")
/datum/surgery_step/finalize_positronic_restoration
name = "finalize positronic restoration (multitool/shocking implement)"
implements = list(
TOOL_MULTITOOL = 100,
/obj/item/shockpaddles = 70,
/obj/item/melee/touch_attack/shock = 70,
/obj/item/melee/baton/security = 35,
/obj/item/gun/energy = 10
)
time = 5 SECONDS
/datum/surgery_step/finalize_positronic_restoration/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to force a reboot in [target]'s posibrain..."),
span_notice("[user] begins to force a reboot in [target]'s posibrain."),
span_notice("[user] begins to force a reboot in [target]'s posibrain.")
)
target.notify_revival("Someone is trying to reboot your posibrain.", source = target)
/datum/surgery_step/finalize_positronic_restoration/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if (target.stat < DEAD)
target.visible_message(span_notice("...[target] is completely unaffected! Seems like they're already active!"))
return TRUE
target.cure_husk()
target.grab_ghost()
target.updatehealth()
if(target.revive())
target.emote("chime")
target.visible_message(span_notice("...[target] reactivates, their chassis coming online!"))
to_chat(target, span_danger("[CONFIG_GET(string/blackoutpolicy)]"))
return TRUE //This is due to synths having some weirdness with their revive.
else
target.emote("buzz")
target.visible_message(span_warning("...[target.p_they()] convulses, then goes offline."))
return FALSE
/datum/surgery_step/finalize_positronic_restoration/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, fail_prob)
. = ..()
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 5, 130)
#undef SYNTH_REVIVE_WELD_INTERNALS_DAMAGE
@@ -1,269 +0,0 @@
#define DAMAGE_ROUNDING 0.1
#define FAIL_DAMAGE_MULTIPLIER 0.8
#define FINAL_STEP_HEAL_MULTIPLIER 0.55
//Almost copypaste of tend wounds, with some changes
/datum/surgery/robot_healing
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/cut_wires,
/datum/surgery_step/robot_heal,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST)
replaced_by = /datum/surgery
requires_bodypart_type = BODYTYPE_ROBOTIC
surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_SELF_OPERABLE
/// The step to use in the 4th surgery step.
var/healing_step_type
/// If true, doesn't send the surgery preop message. Set during surgery.
var/surgery_preop_message_sent = FALSE
/datum/surgery/robot_healing/New(surgery_target, surgery_location, surgery_bodypart)
..()
if(healing_step_type)
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/cut_wires,
healing_step_type,
/datum/surgery_step/mechanic_close,
)
/datum/surgery_step/robot_heal
name = "repair body (crowbar/wirecutters)"
implements = list(TOOL_CROWBAR = 100, TOOL_WIRECUTTER = 100)
repeatable = TRUE
time = 2.7 SECONDS
/// If this surgery is healing brute damage. Set during operation steps.
var/heals_brute = FALSE
/// If this surgery is healing burn damage. Set during operation steps.
var/heals_burn = FALSE
/// How much healing the sugery gives.
var/brute_heal_amount = 7
/// How much healing the sugery gives.
var/burn_heal_amount = 7
/// Percentage of total damaged healed per cycle. If 0, no healing of the damage is performed
var/brute_multiplier = 0
/// Percentage of total damaged healed per cycle. If 0, no healing of the damage is performed
var/burn_multiplier = 0
/datum/surgery_step/robot_heal/tool_check(mob/user, obj/item/tool)
if(implement_type == TOOL_CROWBAR && implement_type == TOOL_WIRECUTTER)
return FALSE
return TRUE
/datum/surgery_step/robot_heal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/woundtype
if(implement_type == TOOL_CROWBAR)
heals_brute = TRUE
heals_burn = FALSE
woundtype = "dents"
return
if(implement_type == TOOL_WIRECUTTER)
heals_brute = FALSE
heals_burn = TRUE
woundtype = "wiring"
return
if(!istype(surgery, /datum/surgery/robot_healing))
return
var/datum/surgery/robot_healing/the_surgery = surgery
if(the_surgery.surgery_preop_message_sent)
return
display_results(
user,
target,
span_notice("You attempt to fix some of [target]'s [woundtype]."),
span_notice("[user] attempts to fix some of [target]'s [woundtype]."),
span_notice("[user] attempts to fix some of [target]'s [woundtype]."),
)
/datum/surgery_step/robot_heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
if(..())
while((heals_brute && target.get_brute_loss() && tool) || (heals_burn && target.get_fire_loss() && tool))
if(!..())
break
/datum/surgery_step/robot_heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/user_message = "You succeed in fixing some of [target]'s damage" //no period, add initial space to "addons"
var/target_message = "[user] fixes some of [target]'s damage" //see above
var/brute_healed = 0
var/burn_healed = 0
var/status_msg = list()
feedback_value = null
if(heals_brute)
brute_healed = brute_heal_amount
tool.use_tool(target, user, 0, volume = 50, amount = 1)
brute_healed += round((target.get_brute_loss() * brute_multiplier), DAMAGE_ROUNDING)
if(heals_burn)
burn_healed = burn_heal_amount
tool.use_tool(target, user, 0, volume = 50, amount = 1)
burn_healed += round((target.get_fire_loss() * burn_multiplier), DAMAGE_ROUNDING)
if(!get_location_accessible(target, target_zone))
brute_healed *= FINAL_STEP_HEAL_MULTIPLIER
burn_healed *= FINAL_STEP_HEAL_MULTIPLIER
status_msg += "[target.p_have()] clothing on"
if(length(status_msg) > 0)
user_message += " as best as you can while [target.p_they()] [english_list(status_msg)]"
target_message += " as best as [user.p_they()] can while [target.p_they()] [english_list(status_msg)]"
feedback_value = brute_healed + burn_healed
target.heal_bodypart_damage(brute_healed, burn_healed, updating_health = FALSE)
if(!get_feedback_message(user, target))
user_message += get_progress(user, target, brute_healed, burn_healed)
if(HAS_MIND_TRAIT(user, TRAIT_MORBID) && ishuman(user) && target.stat != DEAD) //Morbid folk don't care about tending the dead as much as tending the living
var/mob/living/carbon/human/morbid_weirdo = user
morbid_weirdo.add_mood_event("morbid_tend_wounds", /datum/mood_event/morbid_tend_wounds)
display_results(
user,
target,
span_notice("[user_message]."),
span_notice("[target_message]."),
span_notice("[target_message]."),
)
if(istype(surgery, /datum/surgery/robot_healing))
var/datum/surgery/robot_healing/the_surgery = surgery
the_surgery.surgery_preop_message_sent = TRUE
return TRUE
/datum/surgery_step/robot_heal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_warning("You screwed up!"),
span_warning("[user] screws up!"),
span_notice("[user] fixes some of [target]'s damage."),
target_detailed = TRUE,
)
var/brute_dealt = 0
var/burn_dealt = 0
if(heals_brute)
brute_dealt = brute_heal_amount * FAIL_DAMAGE_MULTIPLIER
brute_dealt += round((target.get_brute_loss() * (brute_multiplier * 0.5)), DAMAGE_ROUNDING)
if(heals_burn)
burn_dealt = burn_heal_amount * FAIL_DAMAGE_MULTIPLIER
burn_dealt += round((target.get_fire_loss() * (burn_multiplier * 0.5)), DAMAGE_ROUNDING)
target.take_bodypart_damage(brute_dealt, burn_dealt, wound_bonus = CANT_WOUND)
return FALSE
/***************************TYPES***************************/
/datum/surgery/robot_healing/basic
name = "Repair Robotic Chassis (Basic)"
desc = "A surgical procedure that provides repairs and maintenance to robotic chassis. Is slightly more efficient when the patient is severely damaged."
healing_step_type = /datum/surgery_step/robot_heal/basic
replaced_by = /datum/surgery/robot_healing/upgraded
/datum/surgery/robot_healing/upgraded
name = "Repair Robotic Chassis (Adv.)"
desc = "A surgical procedure that provides highly effective repairs and maintenance to robotic chassis. Is somewhat more efficient when the patient is severely damaged."
healing_step_type = /datum/surgery_step/robot_heal/upgraded
replaced_by = /datum/surgery/robot_healing/experimental
requires_tech = TRUE
/datum/surgery/robot_healing/experimental
name = "Repair Robotic Chassis (Exp.)"
desc = "A surgical procedure that quickly provides highly effective repairs and maintenance to robotic chassis. Is moderately more efficient when the patient is severely damaged."
healing_step_type = /datum/surgery_step/robot_heal/experimental
replaced_by = null
requires_tech = TRUE
/***************************STEPS***************************/
/datum/surgery_step/robot_heal/basic
brute_multiplier = 0.07
burn_multiplier = 0.07
/datum/surgery_step/robot_heal/upgraded
brute_multiplier = 0.1
burn_multiplier = 0.1
/datum/surgery_step/robot_heal/experimental
brute_multiplier = 0.2
burn_multiplier = 0.2
// Mostly a copypaste of standard tend wounds get_progress(). In order to abstract this, I'd have to rework the hierarchy of surgery upstream, so I'll just do this. Pain.
/**
* Args:
* * mob/user: The user performing this surgery.
* * mob/living/carbon/target: The target of the surgery.
* * brute_healed: The amount of brute we just healed.
* * burn_healed: The amount of burn we just healed.
*
* Returns:
* * A string containing either an estimation of how much longer the surgery will take, or exact numbers of the remaining damages, depending on if a health analyzer
* is held or not.
*/
/datum/surgery_step/robot_heal/proc/get_progress(mob/user, mob/living/carbon/target, brute_healed, burn_healed)
var/estimated_remaining_steps = 0
if(brute_healed > 0)
estimated_remaining_steps = max(0, (target.get_brute_loss() / brute_healed))
if(burn_healed > 0)
estimated_remaining_steps = max(estimated_remaining_steps, (target.get_fire_loss() / burn_healed)) // whichever is higher between brute or burn steps
var/progress_text
if(locate(/obj/item/healthanalyzer) in user.held_items)
if(target.get_brute_loss())
progress_text = ". Remaining brute: <font color='#ff3333'>[target.get_brute_loss()]</font>"
if(target.get_fire_loss())
progress_text += ". Remaining burn: <font color='#ff9933'>[target.get_fire_loss()]</font>"
else
switch(estimated_remaining_steps)
if(-INFINITY to 1)
return
if(1 to 3)
progress_text = ", finishing up the last few signs of damage"
if(3 to 6)
progress_text = ", counting down the last few patches of trauma"
if(6 to 9)
progress_text = ", continuing to plug away at [target.p_their()] extensive damages"
if(9 to 12)
progress_text = ", steadying yourself for the long surgery ahead"
if(12 to 15)
progress_text = ", though [target.p_they()] still look[target.p_s()] heavily battered"
if(15 to INFINITY)
progress_text = ", though you feel like you're barely making a dent in treating [target.p_their()] broken body"
return progress_text
/datum/surgery_step/robot_heal/get_feedback_message(mob/living/user, mob/living/target, speed_mod = 1)
var/show_message = FALSE
if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD) || HAS_TRAIT(user, TRAIT_DIAGNOSTIC_HUD))
show_message = TRUE
else if(locate(/obj/item/healthanalyzer) in user.held_items)
show_message = TRUE
else if(get_location_modifier(target) == OPERATING_COMPUTER_MODIFIER)
show_message = TRUE
if(!show_message)
return
if(heals_brute)
return "[round(1 / speed_mod, 0.1)]x (<font color='#F0197D'>[target.get_brute_loss()]</font>) <font color='#7DF9FF'>[feedback_value]</font>"
else
return "[round(1 / speed_mod, 0.1)]x (<font color='#FF7F50'>[target.get_fire_loss()]</font>) <font color='#7DF9FF'>[feedback_value]</font>"
#undef DAMAGE_ROUNDING
#undef FAIL_DAMAGE_MULTIPLIER
#undef FINAL_STEP_HEAL_MULTIPLIER
@@ -1,74 +0,0 @@
/// Hydraulic Pump Surgery
/datum/surgery/hydraulic_maintenance
name = "Hydraulic Pump Maintenance"
requires_bodypart_type = BODYTYPE_ROBOTIC | BODYTYPE_NANO
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/hydraulic/repair,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST)
desc = "A mechanical surgery procedure designed to repair an androids internal hydraulic pump."
/datum/surgery/hydraulic_maintenance/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/heart/hydraulic_pump = target.get_organ_slot(ORGAN_SLOT_HEART)
if(isnull(hydraulic_pump) || !issynthetic(target) || hydraulic_pump.damage < 10)
return FALSE
return ..()
/datum/surgery_step/hydraulic/repair
name = "tighten seals (screwdriver or wrench)"
implements = list(
TOOL_SCREWDRIVER = 90,
TOOL_WRENCH = 90,
TOOL_WIRECUTTER = 35,
/obj/item/stack/package_wrap = 15,
)
preop_sound = 'sound/items/tools/ratchet_slow.ogg'
success_sound = 'sound/machines/airlock/doorclick.ogg'
/datum/surgery_step/hydraulic/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to tighten the clamps around [target]'s hydraulic pump..."),
span_notice("[user] begins to repair [target]'s hydraulic pump with [tool]!"),
span_notice("[user] begins to repair [target]'s hydraulic pump!"),
)
display_pain(target, "The pain in your chest is unbearable! You can barely take it anymore!")
/datum/surgery_step/hydraulic/repair/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
var/mob/living/carbon/human/patient = target
var/obj/item/organ/heart/hydraulic = patient.get_organ_slot(ORGAN_SLOT_HEART)
patient.set_organ_loss(ORGAN_SLOT_HEART, 0) // adjust_organ_loss didnt work here without runtimes spamming, setting to 0 as synths have no natural organ decay/regeneration
if(hydraulic.organ_flags & ORGAN_EMP)
hydraulic.organ_flags &= ~ORGAN_EMP
display_results(
user,
target,
span_notice("You successfully repair [target]'s hydraulic pump."),
span_notice("[user] finishes clamping tubing down around [target]'s hydraulic pump with [tool]."),
span_notice("[user] finishes clamping tubing down around [target]'s hydraulic pump."),
)
display_pain(target, "The warnings, but your pump is as strong as ever!")
return ..()
/datum/surgery_step/hydraulic/repair/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(ishuman(target))
var/mob/living/carbon/human/patient = target
display_results(
user,
target,
span_warning("You screw up and slip your [tool] into their pump, tearing part of the pump off!"),
span_warning("[user] screws up, causing high pressure oil to spurt out of [target]'s chest profusely!"),
span_warning("[user] completes the surgery, but is that oil supposed to be squirting out of [target]'s chest like that?"),
)
display_pain(target, "Your chest burns; you feel oil flooding your chest cavity!")
patient.adjust_organ_loss(ORGAN_SLOT_HEART, 20)
return FALSE
@@ -1,73 +0,0 @@
/// Reagent Processor Repair surgery
/datum/surgery/reagent_pump
name = "Reagent Processor Manual Reset"
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/reagent_pump/repair,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST)
requires_bodypart_type = BODYTYPE_ROBOTIC
desc = "A mechanical list of actions to reset the reagent processor and purge built up minerals."
/datum/surgery/reagent_pump/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/liver/reagent_processor = target.get_organ_slot(ORGAN_SLOT_LIVER)
if(isnull(reagent_processor) || !issynthetic(target) || reagent_processor.damage < 10)
return FALSE
return ..()
/datum/surgery_step/reagent_pump/repair
name = "perform valve adjustment (screwdriver)"
implements = list(
TOOL_SCREWDRIVER = 95,
TOOL_SCALPEL = 45,
/obj/item/melee/energy/sword = 35,
/obj/item/knife = 25,
/obj/item/shard = 5,
)
preop_sound = 'sound/items/tools/screwdriver_operating.ogg'
success_sound = 'sound/machines/airlock/doorclick.ogg'
/datum/surgery_step/reagent_pump/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You start to descale minerals built up in [target]'s reagent processor..."),
span_notice("[user] begins to fix [target]'s reagent processor with [tool]."),
span_notice("[user] begins to fix [target]'s reagent processor."),
)
display_pain(target, "Your systems disconnect from your reagent processor, avoiding unnecessary errors.")
/datum/surgery_step/reagent_pump/repair/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
var/mob/living/carbon/human/patient = target
var/obj/item/organ/liver/reagent_processor = target.get_organ_slot(ORGAN_SLOT_LIVER)
patient.set_organ_loss(ORGAN_SLOT_LIVER, 0) // adjust_organ_loss didnt work here without runtimes spamming, setting to 0 as synths have no natural organ decay/regeneration
if(reagent_processor.organ_flags & ORGAN_EMP)
reagent_processor.organ_flags &= ~ORGAN_EMP
display_results(
user,
target,
span_notice("You successfully descale [target]'s reagent processor, restoring factory settings and removing built up minerals."),
span_notice("[user] successfully descales [target]'s reagent processor, restoring factory settings and removing built up minerals."),
span_notice("[user] successfully resets [target]'s reagent processor."),
)
display_pain(target, "Flow rate restored.")
return ..()
/datum/surgery_step/reagent_pump/repair/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery)
var/mob/living/carbon/human/patient = target
patient.adjust_organ_loss(ORGAN_SLOT_LIVER, 15)
display_results(
user,
target,
span_warning("You adjust [target]'s reagent processor out of spec!"),
span_warning("[user] follows the wrong guide for [target]'s reagent processor!"),
span_warning("[user] finishes adjusting [target]'s reagent processor... wait that isn't right..."),
)
display_pain(target, "You see errors flow across your vision!")
@@ -1,75 +0,0 @@
/// Heatsink Repair Surgery
/datum/surgery/heatsink
name = "Heatsink Maintenance"
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/weld_plating_slice,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/heatsink/repair,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST)
requires_bodypart_type = BODYTYPE_ROBOTIC
desc = "A mechanical surgery procedure designed to repair an androids internal heatsink."
/datum/surgery/heatsink/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
var/obj/item/organ/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS)
if(isnull(target_lungs) || !issynthetic(target) || target_lungs.damage < 10 )
return FALSE
return ..()
/datum/surgery_step/heatsink/repair
name = "Tighten heatsink mounts (wrench)"
implements = list(
TOOL_WRENCH = 90,
TOOL_RETRACTOR = 45,
)
time = 2.4 SECONDS
preop_sound = 'sound/items/tools/ratchet_fast.ogg'
success_sound = 'sound/machines/airlock/doorclick.ogg'
/datum/surgery_step/heatsink/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to tighten the bolts on [target]'s heatsink..."),
span_notice("[user] begins to tighten the bolts on [target]'s heatsink using [tool]."),
span_notice("[user] begins to tighten the bolts on [target]'s heatsink."),
)
display_pain(target, "You feel a metal clank inside your chest as [user] starts to work.")
/datum/surgery_step/heatsink/repair/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/patient = target
var/obj/item/organ/lungs/heatsink = patient.get_organ_slot(ORGAN_SLOT_LUNGS)
patient.set_organ_loss(ORGAN_SLOT_LUNGS, 0) // adjust_organ_loss didnt work here without runtimes spamming, setting to 0 as synths have no natural organ decay/regeneration
if(heatsink.organ_flags & ORGAN_EMP)
heatsink.organ_flags &= ~ORGAN_EMP
display_results(
user,
target,
span_notice("You successfully tighten [target]'s bolts on their heatsink."),
span_notice("[user] successfully tightened [target]'s heatsink using [tool]."),
span_notice("[user] finishes tightening [target]'s heatsink."),
)
display_pain(target, "Your internal errors clear for your temperature regulation.")
return ..()
/datum/surgery_step/heatsink/repair/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(ishuman(target))
var/mob/living/carbon/human/patient = target
display_results(
user,
target,
span_warning("You slip and barely catch the [tool] before it falls, failing to tighten [target]'s heatsink down!"),
span_warning("[user]'s butterfingers barely catches the [tool] before it falls into [target]'s chest!"),
span_warning("[user] screws up, nearly dropping the [tool] into [target]'s chest!"),
)
display_pain(target, "You feel a dull thud in your chest; it feels like a [tool] fell into your chest cavity!")
patient.adjust_organ_loss(ORGAN_SLOT_LUNGS, 10) // better find your wrench!
return FALSE
@@ -1,73 +0,0 @@
/// Bioreactor Maintenance
/datum/surgery/bioreactor
name = "Bioreactor Maintenance"
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB
organ_to_manipulate = ORGAN_SLOT_STOMACH
possible_locs = list(BODY_ZONE_CHEST)
requires_bodypart_type = BODYTYPE_ROBOTIC | BODYTYPE_NANO
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/bioreactor/repair,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close,
)
desc = "A mechanical surgery procedure designed to repair an androids internal bioreactor."
/datum/surgery/bioreactor/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/stomach/bioreactor = target.get_organ_slot(ORGAN_SLOT_STOMACH)
if(isnull(bioreactor) || !issynthetic(target) || bioreactor.damage < 10)
return FALSE
return ..()
/datum/surgery_step/bioreactor/repair
name = "perform bioreactor maintenance (screwdriver)"
implements = list(
TOOL_SCREWDRIVER = 95,
TOOL_SCALPEL = 45,
/obj/item/melee/energy/sword = 35,
/obj/item/knife = 25,
/obj/item/shard = 5,
)
preop_sound = 'sound/items/tools/ratchet_slow.ogg'
success_sound = 'sound/machines/airlock/doorclick.ogg'
/datum/surgery_step/bioreactor/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to patch the damaged section of [target]'s bioreactor..."),
span_notice("[user] begins to delicately repair [target]'s bioreactor using [tool]."),
span_notice("[user] begins to delicately repair [target]'s bioreactor."),
)
display_pain(target, "You feel a horrible stab in your gut!")
/datum/surgery_step/bioreactor/repair/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
var/mob/living/carbon/human/patient = target
var/obj/item/organ/stomach/bioreactor = target.get_organ_slot(ORGAN_SLOT_STOMACH)
patient.set_organ_loss(ORGAN_SLOT_STOMACH, 0) // adjust_organ_loss didnt work here without runtimes spamming, setting to 0 as synths have no natural organ decay/regeneration
if(bioreactor.organ_flags & ORGAN_EMP)
bioreactor.organ_flags &= ~ORGAN_EMP
display_results(
user,
target,
span_notice("You successfully repair the damaged part of [target]'s bioreactor."),
span_notice("[user] successfully repairs the damaged part of [target]'s bioreactor using [tool]."),
span_notice("[user] successfully repairs the damaged part of [target]'s bioreactor."),
)
display_pain(target, "The errors clear from your bioreactor.")
return ..()
/datum/surgery_step/bioreactor/repair/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery)
var/mob/living/carbon/human/patient = target
patient.adjust_organ_loss(ORGAN_SLOT_STOMACH, 15)
display_results(
user,
target,
span_warning("You slip and puncture [target]'s bioreactor!"),
span_warning("[user] slips and punctures [target]'s bioreactor with the [tool]!"),
span_warning("[user] slips and punctures [target]'s bioreactor!"),
)
display_pain(target, "Your midsection throws additional errors; that's not right!")
@@ -1,14 +0,0 @@
/datum/surgery/amputation/mechanic
name = "Disconnect limb"
/datum/surgery/autopsy/mechanic
name = "System Failure Analysis (Autopsy)"
/datum/surgery/organ_manipulation/mechanic
name = "Hardware Manipulation (Organ Manipulation)"
/datum/surgery/organ_manipulation/mechanic/external
name = "Chassis Manipulation (External Manipulation)"
@@ -1,57 +0,0 @@
//Blacklists upstream's mechanical surgeries for augmented people in favor of our synth surgeries
/datum/surgery/advanced/bioware/cortex_folding/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/bioware/cortex_imprint/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/bioware/ligament_hook/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/bioware/muscled_veins/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/bioware/nerve_grounding/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/bioware/nerve_splicing/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/bioware/vein_threading/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/advanced/lobotomy/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/blood_filter/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/brain_surgery/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/coronary_bypass/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/gastrectomy/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/hepatectomy/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/lipoplasty/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/lobectomy/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
//Disable both normal and mechanical for synths. Makes some sense on augmented people so lacks a biotype check.
/datum/surgery/revival/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/datum/surgery/stomach_pump/mechanic/can_start(mob/user, mob/living/carbon/target)
return !issynthetic(target) && ..()
/// Proteans can not heal via these surgeries.
/datum/surgery/healing/can_start(mob/user, mob/living/patient)
return !isprotean(patient) && ..()
@@ -38,7 +38,7 @@
/obj/item/reagent_containers/cup = 10,
/obj/item/stock_parts/subspace = 8,
/obj/item/banhammer = 8,
/obj/item/computer_disk/maintenance = 1,
/obj/item/disk/computer/maintenance = 1,
)
rpg_title = "Code Whisperer"
job_flags = STATION_JOB_FLAGS
@@ -549,18 +549,18 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/mining_voucher = 3
) = 75,
list(
/obj/item/computer_disk = 25,
/obj/item/computer_disk/engineering = 1,
/obj/item/computer_disk/medical = 1,
/obj/item/computer_disk/ordnance = 1,
/obj/item/computer_disk/security = 1,
/obj/item/computer_disk/advanced = 5,
/obj/item/computer_disk/maintenance/camera = 20,
/obj/item/computer_disk/maintenance/modsuit_control = 20,
/obj/item/computer_disk/maintenance/scanner = 20,
/obj/item/computer_disk/maintenance/theme = 20,
/obj/item/computer_disk/virus/clown = 1,
/obj/item/computer_disk/virus/mime = 1,
/obj/item/disk/computer = 25,
/obj/item/disk/computer/engineering = 1,
/obj/item/disk/computer/medical = 1,
/obj/item/disk/computer/ordnance = 1,
/obj/item/disk/computer/security = 1,
/obj/item/disk/computer/advanced = 5,
/obj/item/disk/computer/maintenance/camera = 20,
/obj/item/disk/computer/maintenance/modsuit_control = 20,
/obj/item/disk/computer/maintenance/scanner = 20,
/obj/item/disk/computer/maintenance/theme = 20,
/obj/item/disk/computer/virus/clown = 1,
/obj/item/disk/computer/virus/mime = 1,
/obj/item/disk/data = 25,
/obj/item/disk/holodisk = 10,
/obj/item/disk/holodisk/woospider = 5,
@@ -78,7 +78,7 @@
if(!message)
return
for(var/mob/iterating_mob in GLOB.player_list)
if(!(FACTION_FLESHMIND in iterating_mob.faction) && !isobserver(iterating_mob))
if(!(iterating_mob.has_faction(FACTION_FLESHMIND)) && !isobserver(iterating_mob))
continue
to_chat(iterating_mob, span_purple("<b>FLESHMIND ([owner]):</b> [message]"))
@@ -60,7 +60,7 @@
granted_actions += new_action
RegisterSignal(new_action, COMSIG_QDELETING, PROC_REF(action_destroyed))
infected_human.faction |= FACTION_FLESHMIND
infected_human.add_faction(FACTION_FLESHMIND)
for(var/trait in traits_to_give)
ADD_TRAIT(infected_human, trait, "fleshmind")
@@ -73,7 +73,7 @@
/datum/component/human_corruption/Destroy(force, silent)
QDEL_LIST(granted_actions)
var/mob/living/parent_mob = parent
parent_mob.faction -= FACTION_FLESHMIND
parent_mob.remove_faction(FACTION_FLESHMIND)
UnregisterSignal(parent, list(
COMSIG_ATOM_UPDATE_OVERLAYS,
COMSIG_ATOM_EXAMINE,
@@ -167,7 +167,7 @@
if(!isliving(user))
return
var/mob/living/living_user = user
if((FACTION_FLESHMIND in living_user.faction))
if((living_user.has_faction(FACTION_FLESHMIND)))
return
if(!living_user.can_interact_with(parent_machinery))
return
@@ -16,7 +16,7 @@
/obj/item/disk/data,
/obj/item/disk/design_disk,
/obj/item/disk/tech_disk,
/obj/item/computer_disk,//ordinance
/obj/item/disk/computer,//ordinance
/obj/item/disk/nanite_program,
/obj/item/stock_parts,
/obj/item/reagent_containers/cup/beaker,
@@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(pp_transformables, list(
),
list(
name = "Blood-Drunk Miner",
key = /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner
key = /mob/living/basic/boss/blood_drunk_miner
),
list(
name = "Gladiator",
@@ -3,4 +3,4 @@
/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/carbon_target, datum/species/old_species, pref_load, regenerate_icons)
. = ..()
carbon_target.faction |= FACTION_ASHWALKER
carbon_target.add_faction(FACTION_ASHWALKER)
@@ -25,7 +25,7 @@ SUBSYSTEM_DEF(condos)
/obj/item/clothing/suit/hooded/ablative, \
/obj/item/nuke_core, \
/obj/item/nuke_core_container, \
/obj/item/computer_disk/hdd_theft, \
/obj/item/disk/computer/hdd_theft, \
/obj/item/nuke_core_container/supermatter, \
/obj/item/aicard, \
/obj/item/gun/energy/temperature/security, \
@@ -256,7 +256,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
return
var/lewd = (Lover.client?.prefs?.read_preference(/datum/preference/toggle/erp/hypnosis)) && (Love.client?.prefs?.read_preference(/datum/preference/toggle/erp/hypnosis))
to_chat(Lover, "[(lewd?"<span class='love'>":"<span class='warning'>")]You develop a deep and sudden bond with [Love][(lewd?", your heart beginning to race as your mind filles with thoughts about them.":".")] You are determined to keep them safe and happy, and feel drawn towards them.</span>")
Lover.faction |= "[REF(Love)]"
Lover.add_faction("[REF(Love)]")
Lover.apply_status_effect(/datum/status_effect/in_love, Love)
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times people have become infatuated.")
return
@@ -23,6 +23,6 @@
return FALSE
if (the_target in controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST])
return FALSE
if (FACTION_CARP in the_target.faction)
if (the_target.has_faction(FACTION_CARP))
return FALSE
return TRUE
@@ -66,14 +66,14 @@
var/mob/living/silicon/robot/cyborg = loc
cyborg.scrambledcodes = TRUE
cyborg.req_access = list(ACCESS_CENT_GENERAL)
cyborg.faction |= ROLE_DEATHSQUAD //You're part of CENTCOM now
cyborg.add_faction(ROLE_DEATHSQUAD) //You're part of CENTCOM now
/obj/item/robot_model/centcom/remove_module(obj/item/removed_module, delete_after)
..()
var/mob/living/silicon/robot/cyborg = loc
cyborg.scrambledcodes = FALSE
cyborg.req_access = list(ACCESS_ROBOTICS)
cyborg.faction -= ROLE_DEATHSQUAD //You're no longer part of CENTCOM
cyborg.remove_faction(ROLE_DEATHSQUAD) //You're no longer part of CENTCOM
/* Research cyborgs */
@@ -1,132 +0,0 @@
/datum/surgery/brain_surgery
desc = "A minor head surgery for repairing brain damage and removing mild traumas."
/datum/surgery/advanced/neurectomy
name = "Neurectomy"
desc = "An invasive surgical procedure which guarantees removal of deep-rooted brain traumas, but takes a while for the body to recover..."
possible_locs = list(BODY_ZONE_HEAD)
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/saw,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/neurectomy,
/datum/surgery_step/close,
)
var/resilience_level = TRAUMA_RESILIENCE_LOBOTOMY
/datum/surgery/advanced/neurectomy/can_start(mob/user, mob/living/carbon/target)
. = ..()
if(!.)
return FALSE
var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
if(LAZYLEN(target.get_traumas()))
for(var/active_trauma in target.get_traumas())
var/datum/brain_trauma/trauma = active_trauma
if(trauma.resilience == resilience_level)
return TRUE
return FALSE
/datum/surgery_step/neurectomy
name = "reticulate nerve splines (scalpel)"
implements = list(
TOOL_SCALPEL = 100,
/obj/item/melee/energy/sword = 55,
/obj/item/knife = 35,
/obj/item/shard = 25,
/obj/item/pen = 15,
)
chems_needed = list(
/datum/reagent/medicine/neurine,
)
time = 10 SECONDS
repeatable = FALSE
preop_sound = 'sound/items/handling/surgery/scalpel1.ogg'
success_sound = 'sound/items/handling/surgery/scalpel2.ogg'
failure_sound = 'sound/items/handling/surgery/organ2.ogg'
surgery_effects_mood = TRUE
/datum/surgery_step/neurectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to excise the nerve in [target]'s brain..."),
span_notice("[user] begins to fix [target]'s brain."),
span_notice("[user] begins to perform surgery on [target]'s brain."),
)
display_pain(target, "Your head pounds with unimaginable pain!")
/datum/surgery_step/neurectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
display_results(
user,
target,
span_notice("You succeed in excising [target]'s failed nerve."),
span_notice("[user] successfully excises [target]'s nerve!"),
span_notice("[user] completes the surgery on [target]'s brain."),
)
display_pain(target, "Your head goes totally numb for a moment, the pain is overwhelming!")
target.set_organ_loss(ORGAN_SLOT_BRAIN, target.get_organ_loss(ORGAN_SLOT_BRAIN) - 40)
target.cure_all_traumas(TRAUMA_RESILIENCE_BASIC)
target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY)
var/datum/surgery/advanced/neurectomy/surgery_type = surgery
if(surgery_type.resilience_level == TRAUMA_RESILIENCE_MAGIC)
target.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC)
playsound(source = get_turf(target), soundin = 'sound/effects/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2)
target.apply_status_effect(/datum/status_effect/vulnerable_to_damage/surgery)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
return ..()
/datum/surgery_step/neurectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(target_brain)
display_results(
user,
target,
span_warning("You excise the wrong nerve, causing more damage!"),
span_warning("[user] fails to excise [target]'s brain!"),
span_notice("[user] completes the surgery on [target]'s brain."),
)
display_pain(target, "The pain in your head only seems to get worse!")
target_brain.apply_organ_damage(80)
target.apply_status_effect(/datum/status_effect/vulnerable_to_damage/surgery)
switch(rand(1,3))
if(1)
target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_MAGIC)
if(2)
if(HAS_TRAIT(target, TRAIT_SPECIAL_TRAUMA_BOOST) && prob(50))
target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_MAGIC)
else
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_MAGIC)
if(3)
target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_MAGIC)
else
user.visible_message(span_warning("[user] suddenly notices that the brain [user.p_they()] [user.p_were()] working on is not there anymore."), span_warning("You suddenly notice that the brain you were working on is not there anymore."))
return FALSE
/datum/surgery/advanced/neurectomy/blessed
name = "Blessed Neurectomy"
desc = "We're not quite sure exactly how it works, but with the blessing of a chaplain combined with modern chemicals, this manages to remove soul-bound traumas once thought to be magic."
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/saw,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/neurectomy/blessed,
/datum/surgery_step/close,
)
resilience_level = TRAUMA_RESILIENCE_MAGIC
/datum/surgery_step/neurectomy/blessed
name = "reticulate nerve splines (scalpel)"
chems_needed = list(
/datum/reagent/water/holywater,
/datum/reagent/medicine/neurine,
)
@@ -1,7 +0,0 @@
/datum/surgery/autopsy/xenomorph
name = "Xenomorph Autopsy"
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_MORBID_CURIOSITY
target_mobtypes = list(/mob/living/basic/alien, /mob/living/carbon/alien)
/datum/experiment/autopsy/xenomorph/is_valid_autopsy(mob/target)
return (isalien(target) || istype(target, /mob/living/basic/alien))
@@ -1,80 +0,0 @@
// Speed changes to tend wounds balancing for 135% player health
/datum/surgery_step/heal
time = 2.7 SECONDS
/datum/surgery_step/heal/brute/basic
brutehealing = 7
/datum/surgery_step/heal/brute/upgraded
brutehealing = 7
/datum/surgery_step/heal/brute/upgraded/femto
brutehealing = 7
/datum/surgery_step/heal/burn/basic
burnhealing = 7
/datum/surgery_step/heal/burn/upgraded
burnhealing = 7
/datum/surgery_step/heal/burn/upgraded/femto
burnhealing = 7
/datum/surgery_step/heal/combo
brutehealing = 5
burnhealing = 5
brute_multiplier = 0.07
burn_multiplier = 0.07
time = 1.5 SECONDS
/datum/surgery_step/heal/combo/upgraded
brutehealing = 5
burnhealing = 5
brute_multiplier = 0.1
burn_multiplier = 0.1
/datum/surgery_step/heal/combo/upgraded/femto
brutehealing = 7
burnhealing = 7
brute_multiplier = 0.2
burn_multiplier = 0.2
time = 1.5 SECONDS
/datum/surgery_step/proc/get_feedback_message(mob/living/user, mob/living/target, speed_mod = 1)
return
/datum/surgery_step/heal/brute/get_feedback_message(mob/living/user, mob/living/target, speed_mod = 1)
var/show_message = FALSE
if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD))
show_message = TRUE
else if(locate(/obj/item/healthanalyzer) in user.held_items)
show_message = TRUE
else if(get_location_modifier(target) == OPERATING_COMPUTER_MODIFIER)
show_message = TRUE
if(show_message)
return "[round(1 / speed_mod, 0.1)]x (<font color='#F0197D'>[target.get_brute_loss()]</font>) <font color='#7DF9FF'>[feedback_value]</font>"
/datum/surgery_step/heal/burn/get_feedback_message(mob/living/user, mob/living/target, speed_mod = 1)
var/show_message = FALSE
if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD))
show_message = TRUE
else if(locate(/obj/item/healthanalyzer) in user.held_items)
show_message = TRUE
else if(get_location_modifier(target) == OPERATING_COMPUTER_MODIFIER)
show_message = TRUE
if(show_message)
return "[round(1 / speed_mod, 0.1)]x (<font color='#FF7F50'>[target.get_fire_loss()]</font>) <font color='#7DF9FF'>[feedback_value]</font>"
/datum/surgery_step/heal/combo/get_feedback_message(mob/living/user, mob/living/target, speed_mod = 1)
var/show_message = FALSE
if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD))
show_message = TRUE
else if(locate(/obj/item/healthanalyzer) in user.held_items)
show_message = TRUE
else if(get_location_modifier(target) == OPERATING_COMPUTER_MODIFIER)
show_message = TRUE
if(show_message)
return "[round(1 / speed_mod, 0.1)]x (<font color='#F0197D'>[target.get_brute_loss()]</font>/<font color='#FF7F50'>[target.get_fire_loss()]</font>) <font color='#7DF9FF'>[feedback_value]</font>"
@@ -1,30 +0,0 @@
/datum/surgery/ear_surgery
requires_bodypart_type = BODYTYPE_ORGANIC | BODYTYPE_ALIEN | BODYTYPE_NANO | BODYTYPE_SHADOW
/datum/surgery/ear_surgery/mechanic
name = "Auditory Sensor repair"
requires_bodypart_type = BODYTYPE_ROBOTIC
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/open_hatch,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_ears/mechanic,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close
)
/datum/surgery_step/fix_ears
preop_sound = 'sound/items/handling/surgery/hemostat1.ogg'
success_sound = 'sound/items/handling/surgery/retractor2.ogg'
failure_sound = 'sound/items/handling/surgery/organ2.ogg'
/datum/surgery_step/fix_ears/mechanic
name = "repair auditory sensor (screwdriver/hemostat)"
implements = list(
TOOL_SCREWDRIVER = 100,
TOOL_HEMOSTAT = 45,
/obj/item/pen = 25)
preop_sound = 'sound/items/taperecorder/tape_flip.ogg'
success_sound = 'sound/items/taperecorder/taperecorder_close.ogg'
failure_sound = 'sound/items/handling/disk_drop.ogg'
@@ -1,28 +0,0 @@
/datum/surgery/eye_surgery
requires_bodypart_type = BODYTYPE_ORGANIC | BODYTYPE_ALIEN | BODYTYPE_NANO | BODYTYPE_SHADOW
/datum/surgery/eye_surgery/mechanic
name = "Optical Sensor repair"
requires_bodypart_type = BODYTYPE_ROBOTIC
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/open_hatch,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_eyes/mechanic,
/datum/surgery_step/mechanic_close
)
/datum/surgery_step/fix_eyes
preop_sound = 'sound/items/handling/surgery/hemostat1.ogg'
success_sound = 'sound/items/handling/surgery/retractor2.ogg'
failure_sound = 'sound/items/handling/surgery/organ2.ogg'
/datum/surgery_step/fix_eyes/mechanic
name = "repair optical sensor (screwdriver/hemostat)"
implements = list(
TOOL_SCREWDRIVER = 100,
TOOL_HEMOSTAT = 45,
/obj/item/pen = 25)
preop_sound = 'sound/items/taperecorder/tape_flip.ogg'
success_sound = 'sound/items/taperecorder/taperecorder_close.ogg'
failure_sound = 'sound/items/handling/disk_drop.ogg'
@@ -1,34 +0,0 @@
/datum/surgery/cavity_implant/mechanic //new surgery path for augments and synths so they can have cavity implants.
name = "Robotic cavity implant"
requires_bodypart_type = BODYTYPE_ROBOTIC
possible_locs = list(BODY_ZONE_CHEST)
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/open_hatch,
/datum/surgery_step/handle_cavity,
/datum/surgery_step/close_cavity,
/datum/surgery_step/mechanic_wrench,
/datum/surgery_step/mechanic_close)
/datum/surgery_step/close_cavity //new surgery step used solely for the mechanical variant. Used to seal the cavity so the surgery can progress to the proper surgery end point for synthetics.
name = "solder cavity (cautery or welder)"
implements = list(
TOOL_CAUTERY = 100,
/obj/item/gun/energy/laser = 90,
TOOL_WELDER = 100,
/obj/item = 30) // 30% success with any hot item.
time = 24
preop_sound = 'sound/items/handling/surgery/cautery1.ogg'
success_sound = 'sound/items/handling/surgery/cautery2.ogg'
/datum/surgery_step/close_cavity/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to solder the electronics around [target]'s cavity..."),
span_notice("[user] begins to solder [target]'s internal cavity with [tool]!"),
span_notice("[user] begins to solder [target]'s internal cavity!"),
)
display_pain(target, "The pain in your chest is unbearable! You can barely take it anymore!")
@@ -1,165 +0,0 @@
/datum/surgery/robot_brain_surgery
name = "Reset Posibrain Logic (Brain Surgery)"
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_robot_brain,
/datum/surgery_step/mechanic_close,
)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest
requires_bodypart_type = BODYTYPE_ROBOTIC
desc = "A surgical procedure that restores the default behavior logic and personality matrix of an IPC posibrain, removing deep-rooted traumas."
/datum/surgery/robot_brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
var/obj/item/organ/brain/synth/brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if (!..())
return FALSE
if(!istype(brain) && !issynthetic(target))
return FALSE
else
return TRUE
/datum/surgery_step/fix_robot_brain
name = "fix posibrain (multitool/hemostat)"
implements = list(
TOOL_MULTITOOL = 100,
TOOL_HEMOSTAT = 90,
/obj/item/pen = 15)
repeatable = TRUE
preop_sound = 'sound/items/handling/tools/multitool_pickup.ogg'
success_sound = 'sound/items/handling/tools/multitool_drop.ogg'
failure_sound = 'sound/items/handling/tools/multitool_drop.ogg'
time = 12 SECONDS //long and complicated
/datum/surgery_step/fix_robot_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to clear system corruption from [target]'s posibrain..."),
"[user] begins to fix [target]'s posibrain.",
"[user] begins to perform surgery on [target]'s posibrain.",
)
/datum/surgery_step/fix_robot_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user,
target,
span_notice("You succeed in clearing system corruption from [target]'s posibrain."),
"[user] successfully fixes [target]'s posibrain!",
"[user] completes the surgery on [target]'s posibrain.",
)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
target.set_organ_loss(ORGAN_SLOT_BRAIN, target.get_organ_loss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
if(target.get_organ_loss(ORGAN_SLOT_BRAIN) > NONE)
to_chat(user, "[target]'s posibrain still has some lasting system damage that can be cleared.")
return ..()
/datum/surgery_step/fix_robot_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(target.get_organ_slot(ORGAN_SLOT_BRAIN))
display_results(
user,
target,
span_warning("You screw up, fragmenting their data!"),
span_warning("[user] screws up, causing damage to the circuits!"),
"[user] completes the surgery on [target]'s posibrain.",
)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, 60)
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY)
else
user.visible_message(span_warning("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore."), span_warning("You suddenly notice that the posibrain you were working on is not there anymore."))
return FALSE
/datum/surgery/robot_trauma_surgery
name = "Neural Defragmentation (Neurectomy)"
desc = "Requires Liquid Solder. A surgical procedure that refurbishes low level components in the posibrain, to fix deep-rooted trauma errors."
possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest
requires_bodypart_type = BODYTYPE_ROBOTIC
requires_tech = TRUE
target_mobtypes = list(/mob/living/carbon/human)
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_robot_brain/trauma,
/datum/surgery_step/mechanic_close,
)
var/resilience_level = TRAUMA_RESILIENCE_LOBOTOMY
/datum/surgery/robot_trauma_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
. = ..()
if(!.)
return FALSE
var/obj/item/organ/brain/synth/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!istype(target_brain) && !issynthetic(target))
return FALSE
if(LAZYLEN(target.get_traumas()))
for(var/active_trauma in target.get_traumas())
var/datum/brain_trauma/trauma = active_trauma
if(trauma.resilience == resilience_level)
return TRUE
return FALSE
/datum/surgery_step/fix_robot_brain/trauma
name = "reticulate splines (multitool/hemostat)"
repeatable = FALSE
chems_needed = list(
/datum/reagent/medicine/liquid_solder,
)
/datum/surgery_step/fix_robot_brain/trauma/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user,
target,
span_notice("You succeed in reticulating [target]'s splines."),
"[user] successfully fixes [target]'s posibrain!",
"[user] completes the surgery on [target]'s posibrain.",
)
target.set_organ_loss(ORGAN_SLOT_BRAIN, target.get_organ_loss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag
target.cure_all_traumas(TRAUMA_RESILIENCE_BASIC)
target.cure_all_traumas(TRAUMA_RESILIENCE_SURGERY)
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY)
var/datum/surgery/robot_trauma_surgery/surgery_type = surgery
if(surgery_type.resilience_level == TRAUMA_RESILIENCE_MAGIC)
target.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC)
playsound(source = get_turf(target), soundin = 'sound/effects/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2)
target.apply_status_effect(/datum/status_effect/vulnerable_to_damage/surgery)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
return ..()
/datum/surgery/robot_trauma_surgery/blessed
name = "Devine Debugging (Blessed Neurectomy)"
desc = "Requires Liquid Solder and Holy Water. A surgical procedure that refurbishes low level components in the posibrain, to fix the strongest, soulbound trauma errors."
steps = list(
/datum/surgery_step/mechanic_open,
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating,
/datum/surgery_step/prepare_electronics,
/datum/surgery_step/fix_robot_brain/blessed,
/datum/surgery_step/mechanic_close,
)
resilience_level = TRAUMA_RESILIENCE_MAGIC
/datum/surgery_step/fix_robot_brain/blessed
name = "trigger godmode debugging (multitool/hemostat)"
repeatable = FALSE
chems_needed = list(
/datum/reagent/medicine/liquid_solder,
/datum/reagent/water/holywater,
)
@@ -6,7 +6,7 @@
/obj/machinery/mecha_part_fabricator/interdyne/emag_act(mob/user, obj/item/card/emag/emag_card)
if(obj_flags & EMAGGED)
return FALSE
if(ROLE_SYNDICATE in user.faction)
if(user.has_faction(ROLE_SYNDICATE))
obj_flags |= EMAGGED
for(var/found_illegal_mech_nods in SSresearch.techweb_nodes)
var/datum/techweb_node/illegal_mech_node = SSresearch.techweb_nodes[found_illegal_mech_nods]
@@ -15,7 +15,7 @@
var/mob/living/living_target = target
var/obj/item/implant/weapons_auth/weapons_authorisation = new/obj/item/implant/weapons_auth(living_target)
weapons_authorisation.implant(living_target)
living_target.faction |= ROLE_SYNDICATE
living_target.add_faction(ROLE_SYNDICATE)
return TRUE
/obj/item/implant/interdyne/removed(mob/target, silent = FALSE, special = FALSE)
@@ -25,7 +25,7 @@
var/mob/living/living_target = target
var/obj/item/implant/weapons_auth/weapons_authorisation = new/obj/item/implant/weapons_auth(living_target)
weapons_authorisation.removed(living_target)
living_target.faction &= ROLE_SYNDICATE
living_target.remove_faction(ROLE_SYNDICATE)
return TRUE
/obj/item/implanter/interdyne
@@ -297,7 +297,7 @@
head = /obj/item/clothing/head/soft/black
/datum/outfit/dauntless/syndicate/post_equip(mob/living/carbon/human/syndicate)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
return ..()
// Dauntless Command
@@ -356,5 +356,5 @@
id_trim = /datum/id_trim/syndicom/bubberstation/dauntless/stationadmiral
/datum/outfit/dauntless/command/post_equip(mob/living/carbon/human/syndicate)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
return ..()
@@ -9,7 +9,7 @@
/obj/item/borg/upgrade/syndicate_access/action(mob/living/silicon/robot/R, user)
. = ..()
// Turns out this is all you need for access to the doors. See code\game\machinery\_machinery.dm
R.faction += ROLE_SYNDICATE
R.add_faction(ROLE_SYNDICATE)
to_chat(R, span_alert("Additional access detected! Remote camera interface destroyed."))
to_chat(user, span_warning("The cyborg whirrs a bit as additional access levels are added, and the remote camera module shorts out a fuse."))
// Remove the camera, much like how the camera is removed for ghost cafe cyborgs
@@ -19,7 +19,7 @@
/obj/item/borg/upgrade/syndicate_access/deactivate(mob/living/silicon/robot/R, user)
. = ..()
R.faction = initial(R.faction)
R.set_faction(initial(faction))
/obj/item/borg/upgrade/syndicate_access/dauntless/examine_more(mob/user)
. = ..()
@@ -72,8 +72,8 @@
/obj/effect/mob_spawn/ghost_role/robot/persistence/special(mob/living/silicon/robot/new_spawn)
. = ..()
if(new_spawn.client) //It should have a client, right?
new_spawn.faction += ROLE_SYNDICATE
new_spawn.faction += ROLE_PERSISTENCE //This is the one to select the cyborg model.
new_spawn.add_faction(ROLE_SYNDICATE)
new_spawn.add_faction(ROLE_PERSISTENCE) //This is the one to select the cyborg model.
new_spawn.radio.keyslot = new /obj/item/encryptionkey/headset_syndicate/cybersun(src)
new_spawn.radio.recalculateChannels()
new_spawn.UnlinkSelf() //This should prevent AI linking and consoles to see or lock them down.
@@ -328,7 +328,7 @@
//gives syndicate role so turrets don't shoot operative
/datum/outfit/persistence/syndicate/post_equip(mob/living/carbon/human/syndicate)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
return ..()
// Dauntless Command
@@ -394,7 +394,7 @@
//gives syndicate role so turrets don't shoot operatives
/datum/outfit/persistence/command/post_equip(mob/living/carbon/human/syndicate)
syndicate.faction |= ROLE_SYNDICATE
syndicate.add_faction(ROLE_SYNDICATE)
return ..()
//Give cyborg a specific chameleon item that do not disrupt, still lose power though.
@@ -50,6 +50,7 @@
/// can this print any round of any caliber given a correct ammo_box? (you varedit this at your own risk, especially if used in a player-facing context.)
/// does not force ammo to load in. just makes it able to print wacky ammotypes e.g. lionhunter 7.62, techshells
var/adminbus = FALSE
var/datum/material_container/materials
/obj/machinery/ammo_workbench/unlocked
allowed_harmful = TRUE
@@ -66,8 +67,9 @@
)
/obj/machinery/ammo_workbench/Initialize(mapload)
AddComponent( \
/datum/component/material_container, \
var/datum/material_container/materials = new( \
src, \
/datum/material_container, \
SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \
200000, \
MATCONTAINER_EXAMINE, \
@@ -78,7 +80,6 @@
/obj/machinery/ammo_workbench/examine(mob/user)
. += ..()
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(in_range(user, src) || isobserver(user))
. += span_notice("The status display reads: Storing up to <b>[materials.max_amount]</b> material units.<br>Material consumption at <b>[creation_efficiency*100]%</b>.")
@@ -171,11 +172,10 @@
data["turboBoost"] = turbo_boost
data["materials"] = list()
var/datum/component/material_container/mat_container = GetComponent(/datum/component/material_container)
if (mat_container)
for(var/mat in mat_container.materials)
if (materials)
for(var/mat in materials.materials)
var/datum/material/M = mat
var/amount = mat_container.materials[M]
var/amount = materials.materials[M]
var/sheet_amount = amount / SHEET_MATERIAL_AMOUNT
var/ref = REF(M)
data["materials"] += list(list("name" = M.name, "id" = ref, "amount" = sheet_amount))
@@ -226,13 +226,11 @@
if("Release")
var/datum/component/material_container/mat_container = GetComponent(/datum/component/material_container)
if(!mat_container)
if(!materials)
return
var/datum/material/mat = locate(params["id"])
var/amount = mat_container.materials[mat]
var/amount = materials.materials[mat]
if(!amount)
return
@@ -247,7 +245,7 @@
var/sheets_to_remove = round(min(desired,50,stored_amount))
mat_container.retrieve_stack(sheets_to_remove, mat, loc)
materials.retrieve_stack(sheets_to_remove, mat, loc)
. = TRUE
if("ReadDisk")
@@ -344,8 +342,6 @@
if(!loaded_magazine)
return
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/obj/item/ammo_casing/new_casing = new casing_type
var/list/required_materials = new_casing.get_material_composition()
@@ -457,7 +453,6 @@
for(var/datum/stock_part/matter_bin/new_matter_bin in component_parts)
mat_capacity += new_matter_bin.tier * (40 * SHEET_MATERIAL_AMOUNT)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
materials.max_amount = mat_capacity
update_ammotypes()
-18
View File
@@ -7976,7 +7976,6 @@
#include "modular_skyrat\modules\customization\modules\surgery\organs\moth_antennae.dm"
#include "modular_skyrat\modules\customization\modules\surgery\organs\moth_markings.dm"
#include "modular_skyrat\modules\customization\modules\surgery\organs\neck_accessory.dm"
#include "modular_skyrat\modules\customization\modules\surgery\organs\nif.dm"
#include "modular_skyrat\modules\customization\modules\surgery\organs\organ.dm"
#include "modular_skyrat\modules\customization\modules\surgery\organs\pod.dm"
#include "modular_skyrat\modules\customization\modules\surgery\organs\skrell_hair.dm"
@@ -8801,16 +8800,6 @@
#include "modular_skyrat\modules\synths\code\species\prefsmenu.dm"
#include "modular_skyrat\modules\synths\code\species\screen.dm"
#include "modular_skyrat\modules\synths\code\species\synthetic.dm"
#include "modular_skyrat\modules\synths\code\surgery\mechanic_steps.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_brain_surgery.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_chassis_restoration.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_healing.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_heart_surgery.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_liver_surgery.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_lung_surgery.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_stomach_surgery.dm"
#include "modular_skyrat\modules\synths\code\surgery\robot_surgery_rename.dm"
#include "modular_skyrat\modules\synths\code\surgery\surgery.dm"
#include "modular_skyrat\modules\tagline\code\world.dm"
#include "modular_skyrat\modules\tarkon\code\clothing\head.dm"
#include "modular_skyrat\modules\tarkon\code\clothing\mod.dm"
@@ -9921,18 +9910,12 @@
#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_4_bomb.dm"
#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_5_gamer.dm"
#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_6_enemy.dm"
#include "modular_zubbers\code\modules\surgery\autopsy.dm"
#include "modular_zubbers\code\modules\surgery\healing.dm"
#include "modular_zubbers\code\modules\surgery\robotic_cavity_implant.dm"
#include "modular_zubbers\code\modules\surgery\surgery_step.dm"
#include "modular_zubbers\code\modules\surgery\tools.dm"
#include "modular_zubbers\code\modules\surgery\advanced\trauma_surgery.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\_bodyparts.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\dismemberment.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\kinetic.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\species_parts\misc_bodyparts.dm"
#include "modular_zubbers\code\modules\surgery\organs\ear_surgery.dm"
#include "modular_zubbers\code\modules\surgery\organs\eye_surgery.dm"
#include "modular_zubbers\code\modules\surgery\organs\external\antennae.dm"
#include "modular_zubbers\code\modules\surgery\organs\external\wings.dm"
#include "modular_zubbers\code\modules\surgery\organs\internal\cyberimp\augments_arms.dm"
@@ -9949,7 +9932,6 @@
#include "modular_zubbers\code\modules\syndicate_offstation\storage\fireaxe.dm"
#include "modular_zubbers\code\modules\syndicate_offstation\storage\lockers.dm"
#include "modular_zubbers\code\modules\syndicate_offstation\storage\safe.dm"
#include "modular_zubbers\code\modules\synths\code\surgery\robot_brain_surgery.dm"
#include "modular_zubbers\code\modules\tarkon\code\cameras.dm"
#include "modular_zubbers\code\modules\tarkon\code\tarkon_loot.dm"
#include "modular_zubbers\code\modules\tarkon\code\clothing\backpack.dm"