mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-10 15:45:05 +01:00
125 parser errors.
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user