Files
Bubberstation/code/modules/surgery/advanced/brainwashing.dm
SkyratBot 0377dba670 [MIRROR] Mirror logging for brainwashing and hypnosis in the player panel and attack logs. (#2988)
* Mirror logging for brainwashing and hypnosis in the player panel and attack logs. (#56515)

Hypnosis and brainwashing now have entries in the Player Panel logging
under attack and entries in the attack logs.

Mirrors some logging that would otherwise just be in the game logs.
From an admin-perspective, issues where you'd want to check
brainwashing/hypnosis tend to go hand-in-hand with issues relating to
attack logs as opposed to game logs.

* Mirror logging for brainwashing and hypnosis in the player panel and attack logs.

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
2021-01-31 22:09:07 +00:00

69 lines
3.9 KiB
Plaintext

/obj/item/disk/surgery/brainwashing
name = "Brainwashing Surgery Disk"
desc = "The disk provides instructions on how to impress an order on a brain, making it the primary objective of the patient."
surgeries = list(/datum/surgery/advanced/brainwashing)
/datum/surgery/advanced/brainwashing
name = "Brainwashing"
desc = "A surgical procedure which directly implants a directive into the patient's brain, making it their absolute priority. It can be cleared using a mindshield implant."
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/saw,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/brainwash,
/datum/surgery_step/close)
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_HEAD)
/datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target)
if(!..())
return FALSE
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
if(!B)
return FALSE
return TRUE
/datum/surgery_step/brainwash
name = "brainwash"
implements = list(TOOL_HEMOSTAT = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/package_wrap = 35, /obj/item/stack/cable_coil = 15)
time = 200
var/objective
/datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
objective = stripped_input(user, "Choose the objective to imprint on your victim's brain.", "Brainwashing", null, MAX_MESSAGE_LEN)
if(!objective)
return -1
display_results(user, target, "<span class='notice'>You begin to brainwash [target]...</span>",
"<span class='notice'>[user] begins to fix [target]'s brain.</span>",
"<span class='notice'>[user] begins to perform surgery on [target]'s brain.</span>")
/datum/surgery_step/brainwash/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
if(!target.mind)
to_chat(user, "<span class='warning'>[target] doesn't respond to the brainwashing, as if [target.p_they()] lacked a mind...</span>")
return FALSE
if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
to_chat(user, "<span class='warning'>You hear a faint buzzing from a device inside [target]'s brain, and the brainwashing is erased.</span>")
return FALSE
display_results(user, target, "<span class='notice'>You succeed in brainwashing [target].</span>",
"<span class='notice'>[user] successfully fixes [target]'s brain!</span>",
"<span class='notice'>[user] completes the surgery on [target]'s brain.</span>")
to_chat(target, "<span class='userdanger'>A new compulsion fills your mind... you feel forced to obey it!</span>")
brainwash(target, objective)
message_admins("[ADMIN_LOOKUPFLW(user)] surgically brainwashed [ADMIN_LOOKUPFLW(target)] with the objective '[objective]'.")
target.log_message("has been brainwashed with the objective '[objective]' by [key_name(user)] using brainwashing surgery.", LOG_ATTACK)
user.log_message("has brainwashed [key_name(target)] with the objective '[objective]' using brainwashing surgery.", LOG_ATTACK, log_globally = FALSE)
log_game("[key_name(user)] surgically brainwashed [key_name(target)] with the objective '[objective]'.")
return ..()
/datum/surgery_step/brainwash/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(target.getorganslot(ORGAN_SLOT_BRAIN))
display_results(user, target, "<span class='warning'>You screw up, bruising the brain tissue!</span>",
"<span class='warning'>[user] screws up, causing brain damage!</span>",
"<span class='notice'>[user] completes the surgery on [target]'s brain.</span>")
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 40)
else
user.visible_message("<span class='warning'>[user] suddenly notices that the brain [user.p_they()] [user.p_were()] working on is not there anymore.</span>", "<span class='warning'>You suddenly notice that the brain you were working on is not there anymore.</span>")
return FALSE