Adds 2 cybernetic implants, makes emag_act return TRUE (#23876)

* Adds 2 cybernetic implants, makes emag_act return TRUE

* the rest of the fucking owl

* yeah that would do it

* remove this

* Apply suggestions from code review

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* request changes, scaling burn damage, 3 tile range, lowers tech level

* Apply suggestions from code review

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

* Update code/game/objects/structures/crates_lockers/crates.dm

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

* Update scanners.dm

* Apply suggestions from code review

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* Lewcs good to them?

* Apply suggestions from code review

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* fuck me

* there are no message admins in ba-sing

---------

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
This commit is contained in:
Qwertytoforty
2024-02-08 12:52:11 +00:00
committed by GitHub
co-authored by Henri215 Burzah DGamerL Luc
parent 3c5cb36e81
commit c398e4a617
90 changed files with 386 additions and 32 deletions
@@ -1005,7 +1005,7 @@
if(user)
user.visible_message("<span class='warning'>Sparks fly out of \the [src]!</span>", "<span class='notice'>You emag \the [src], disabling its safeties.</span>")
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, TRUE)
return
return TRUE
/obj/machinery/alarm/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
+1
View File
@@ -401,6 +401,7 @@
if(safety)
safety = 0
to_chat(user, "<span class='warning'>You silently fry [src]'s vocal circuit with the cryptographic sequencer.")
return TRUE
else
return
@@ -448,6 +448,7 @@
else
emagged = TRUE
to_chat(user, "<span class='warning'>You swipe the card and crack the holobadge security checks.</span>")
return TRUE
/obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/H, mob/living/user)
if(isliving(user))
@@ -82,7 +82,7 @@
to_chat(usr, "<span class='warning'>You short out the fryer's safeties, allowing non-food objects to be placed in the oil.</span>")
playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
emagged = TRUE
return
return TRUE
/obj/machinery/cooker/deepfryer/special_attack_shove(mob/living/target, mob/living/attacker)
target.visible_message(
@@ -407,6 +407,7 @@
/obj/machinery/smartfridge/secure/emag_act(mob/user)
emagged = TRUE
to_chat(user, "<span class='notice'>You short out the product lock on \the [src].</span>")
return TRUE
/obj/machinery/smartfridge/secure/emp_act(severity)
if(!emagged && prob(40 / severity))
+1
View File
@@ -589,6 +589,7 @@
new /obj/item/storage/bible/syndi(loc)
visible_message("<span class='notice'>[src]'s printer ominously hums as it produces a completely bound book. How did it do that?</span>")
print_cooldown = world.time + PRINTING_COOLDOWN
return TRUE
#undef LIBRARY_BOOKS_PER_PAGE
#undef LOGIN_FULL
@@ -53,6 +53,7 @@
if(!malfunctioning)
malfunctioning = 1
to_chat(user, "<span class='notice'>You override [src]'s safety protocols.</span>")
return TRUE
/obj/item/lazarus_injector/emp_act()
if(!malfunctioning)
@@ -21,8 +21,7 @@
if(!emagged)
to_chat(usr, "<span class='warning'>You short out the safeties, allowing it to be placed in the station sector.</span>")
emagged = TRUE
return
return TRUE
to_chat(usr, "<span class='warning'>The safeties are already shorted out!</span>")
/obj/item/survivalcapsule/proc/get_template()
@@ -63,8 +63,9 @@
emagged = TRUE
to_chat(user, "<span class='notice'>You emag [src].</span>")
var/turf/T = get_turf(src)
do_sparks(5, 0, T)
do_sparks(5, FALSE, T)
playsound(T, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
return TRUE
/obj/effect/portal/jaunt_tunnel
name = "jaunt tunnel"
@@ -156,6 +156,7 @@
if(!emagged)
emagged = TRUE
to_chat(user, "<span class='warning'>PZZTTPFFFT</span>")
return TRUE
/**********************Point Lookup Console**************************/
/obj/machinery/mineral/labor_points_checker
@@ -247,6 +247,7 @@
to_chat(src, "<b>Obey these laws:</b>")
laws.show_laws(src)
to_chat(src, "<span class='boldwarning'>ALERT: [H.real_name] is your new master. Obey your new laws and [H.real_name]'s commands.</span>")
return TRUE
//DRONE LIFE/DEATH
@@ -990,6 +990,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
else if(locked)
to_chat(user, "You emag the cover lock.")
locked = FALSE
return TRUE
else
to_chat(user, "The cover is already unlocked.")
return
@@ -1045,7 +1046,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
update_module_icon()
module.rebuild_modules() // This will add the emagged items to the borgs inventory.
update_icons()
return
return TRUE
/mob/living/silicon/robot/verb/toggle_own_cover()
set category = "Robot Commands"
@@ -218,7 +218,7 @@
if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again.
locked = FALSE
to_chat(user, "<span class='notice'>You bypass [src]'s controls.</span>")
return
return TRUE
if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging.
emagged = TRUE
remote_disabled = TRUE //Manually emagging the bot locks out the AI built in panel.
@@ -228,7 +228,7 @@
to_chat(src, "<span class='userdanger'>(#$*#$^^( OVERRIDE DETECTED</span>")
show_laws()
add_attack_logs(user, src, "Emagged")
return
return TRUE
else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet.
to_chat(user, "<span class='warning'>You need to open maintenance panel first!</span>")
@@ -732,7 +732,8 @@
if(!emagged)
emagged = TRUE
visible_message("<span class='warning'>[user] swipes a card through [src].</span>", "<span class='notice'>You overload [src]s internal reactor.</span>")
addtimer(CALLBACK(src, PROC_REF(explode)), 1000)
addtimer(CALLBACK(src, PROC_REF(explode)), 100 SECONDS)
return TRUE
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/explode()
visible_message("<span class='warning'>[src] makes an odd whining noise.</span>")
@@ -146,6 +146,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attack_sound = 'sound/machines/defib_zap.ogg'
return TRUE
/mob/living/simple_animal/spiderbot/proc/transfer_personality(obj/item/mmi/M)
mind = M.brainmob.mind
+1
View File
@@ -444,6 +444,7 @@
/obj/item/mod/control/emag_act(mob/user)
locked = !locked
to_chat(user, "<span class='warning'>Suit access [locked ? "locked" : "unlocked"]")
return TRUE
/obj/item/mod/control/emp_act(severity)
. = ..()
+1
View File
@@ -107,6 +107,7 @@ GLOBAL_LIST_EMPTY(fax_blacklist)
emagged = TRUE
req_one_access = list()
to_chat(user, "<span class='notice'>The transmitters realign to an unknown source!</span>")
return TRUE
else
to_chat(user, "<span class='warning'>You swipe the card through [src], but nothing happens.</span>")
+1
View File
@@ -570,6 +570,7 @@
if(!emagged)
emagged = TRUE
to_chat(user, "<span class='notice'>You overload [src]'s laser printing mechanism.</span>")
return TRUE
else
to_chat(user, "<span class='notice'>[src]'s laser printing mechanism is already overloaded!</span>")
+1
View File
@@ -43,6 +43,7 @@
qdel(ticket)
tickets.Cut()
update_icon()
return TRUE
/obj/machinery/ticket_machine/Initialize(mapload)
. = ..()
+1
View File
@@ -341,3 +341,4 @@
my_game.hacked = TRUE
to_chat(user, "<span class='warning'>TR4P_M45T3R.mod successfully initialized. ToS violated. User Agreement nullified. Gotta pwn them all.</span>")
to_chat(user, "<span class='warning'>You can now create trapped versions of any mob in your collection that will damage hunters who attempt to capture it.</span>")
return TRUE
+1
View File
@@ -1026,6 +1026,7 @@
locked = FALSE
to_chat(user, "You emag the APC interface.")
update_icon()
return TRUE
/obj/machinery/power/apc/proc/apc_short()
// if it has internal wires, cut the power wires
@@ -102,6 +102,7 @@
if(user)
user.visible_message("<span class='warning'>[user] shorts out the lock on [src].</span>",
"<span class='warning'>You short out the lock on [src].</span>")
return TRUE
/obj/machinery/power/emitter/attack_hand(mob/user)
add_fingerprint(user)
@@ -608,6 +608,7 @@
desc += " Its temperature cap has been removed."
max_temp = 1000
temperature_multiplier *= 5 //so emagged temp guns adjust their temperature much more quickly
return TRUE
/obj/item/gun/energy/temperature/process()
..()
@@ -341,6 +341,7 @@
sawn_desc = "Omar's coming!"
can_holster = FALSE
unique_reskin = TRUE
var/can_sawoff = TRUE
/obj/item/gun/projectile/revolver/doublebarrel/Initialize(mapload)
. = ..()
@@ -354,6 +355,8 @@
/obj/item/gun/projectile/revolver/doublebarrel/attackby(obj/item/A, mob/user, params)
if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing))
chamber_round()
if(!can_sawoff)
return ..()
if(istype(A, /obj/item/melee/energy))
var/obj/item/melee/energy/W = A
if(W.active)
@@ -26,6 +26,7 @@
emagged = TRUE
ignore_flags = TRUE
to_chat(user, "<span class='warning'>You short out the safeties on [src].</span>")
return TRUE
/obj/item/reagent_containers/applicator/on_reagent_change()
if(!emagged)
@@ -81,6 +81,7 @@
emagged = TRUE
ignore_flags = TRUE
to_chat(user, "<span class='warning'>You short out the safeties on [src].</span>")
return TRUE
/obj/item/reagent_containers/hypospray/safety
name = "medical hypospray"
@@ -375,6 +375,17 @@
build_path = /obj/item/organ/internal/cyberimp/arm/botanical
category = list("Medical")
/datum/design/cyberimp_shell_launcher
name = "Shell Launch System Implant"
desc = "A mounted, single-shot housing for a shell launch cannon; capable of firing twelve-gauge shotgun shells."
id = "ci-shell_launcher"
req_tech = list("materials" = 7, "engineering" = 5, "combat" = 5)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500)
construction_time = 20 SECONDS
build_path = /obj/item/organ/internal/cyberimp/arm/shell_launcher
category = list("Medical")
/datum/design/cyberimp_toolset_abductor
name = "Abductor Toolset Implant"
desc = "An alien toolset, designed to be installed on subject's arm."
+1
View File
@@ -203,6 +203,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
req_access = list()
emagged = TRUE
to_chat(user, "<span class='notice'>You disable the security protocols</span>")
return TRUE
/obj/machinery/computer/rdconsole/proc/valid_nav(next_menu, next_submenu)
switch(next_menu)
+2 -1
View File
@@ -355,9 +355,10 @@
/obj/machinery/computer/rdservercontrol/emag_act(user as mob)
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
playsound(loc, 'sound/effects/sparks4.ogg', 75, TRUE)
emagged = TRUE
to_chat(user, "<span class='notice'>You you disable the security protocols</span>")
return TRUE
src.updateUsrDialog()
/obj/machinery/r_n_d/server/core
+1
View File
@@ -101,6 +101,7 @@
GLOB.minor_announcement.Announce("The emergency shuttle will launch in 10 seconds", "SYSTEM ERROR:")
SSshuttle.emergency.setTimer(100)
emagged = TRUE
return TRUE
/obj/machinery/computer/emergency_shuttle/proc/increase_hijack_stage()
+1
View File
@@ -869,6 +869,7 @@
src.req_access = list()
emagged = TRUE
to_chat(user, "<span class='notice'>You fried the consoles ID checking system.</span>")
return TRUE
//for restricting when the computer can be used, needed for some console subtypes.
/obj/machinery/computer/shuttle/proc/can_call_shuttle(mob/user, action)
@@ -511,6 +511,7 @@
do_sparks(5, FALSE, src)
if(user)
user.visible_message("<span class='warning'>[user] overrides the safety protocols of [src].</span>", "<span class='warning'>You override the safety protocols.</span>")
return TRUE
/obj/structure/spawner/nether/bluespace_tap
spawn_time = 30 SECONDS
+1
View File
@@ -202,3 +202,4 @@
emagged = TRUE
if(active)
change_meteor_chance(2)
return TRUE
+1
View File
@@ -481,6 +481,7 @@
if(!hacked)
to_chat(user, "<span class='notice'>Special supplies unlocked.</span>")
hacked = TRUE
return TRUE
/obj/machinery/computer/supplycomp/public
name = "Supply Ordering Console"
@@ -83,6 +83,8 @@
/obj/item/organ/internal/cyberimp/arm/proc/Retract()
if(!holder || (holder in src) || check_cuffs())
return
if(status & ORGAN_DEAD)
return
owner.visible_message("<span class='notice'>[owner] retracts [holder] back into [owner.p_their()] [parent_organ == "r_arm" ? "right" : "left"] arm.</span>",
"<span class='notice'>[holder] snaps back into your [parent_organ == "r_arm" ? "right" : "left"] arm.</span>",
@@ -100,6 +102,8 @@
/obj/item/organ/internal/cyberimp/arm/proc/Extend(obj/item/item)
if(!(item in src) || check_cuffs())
return
if(status & ORGAN_DEAD)
return
holder = item
@@ -284,6 +288,7 @@
desc = "A powerful cybernetic implant that contains combat modules built into the user's arm"
contents = newlist(/obj/item/melee/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/flash/armimplant)
origin_tech = "materials=5;combat=7;biotech=5;powerstorage=5;syndicate=6;programming=5"
stealth_level = 4 //Only surgery or a body scanner with the highest tier of stock parts can detect this.
/obj/item/organ/internal/cyberimp/arm/combat/New()
..()
@@ -449,6 +454,103 @@
action_icon = list(/datum/action/item_action/organ_action/toggle = 'icons/obj/janitor.dmi')
action_icon_state = list(/datum/action/item_action/organ_action/toggle = "advmop")
// Shell launch system, an arm mounted single-shot shotgun that comes out of your arm
/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher
name = "shell launch system"
desc = "A mounted cannon seated comfortably in a forearm compartment. This humanitarian device is capable of firing essentially any shotgun shell."
icon_state = "shell_cannon_weapon"
righthand_file = 'icons/mob/inhands/implants_righthand.dmi'
lefthand_file = 'icons/mob/inhands/implants_lefthand.dmi'
inhand_x_dimension = 32
inhand_y_dimension = 32
item_state = "shell_cannon"
w_class = WEIGHT_CLASS_BULKY
weapon_weight = WEAPON_LIGHT
force = 10
mag_type = /obj/item/ammo_box/magazine/internal/shot/shell_cannon
unique_reskin = FALSE
can_sawoff = FALSE
/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher/proc/missfire(mob/living/carbon/human/H, our_organ)
to_chat(H, "<span class='warning'>Your [name] misfires!</span>")
process_fire(H, H, 1, zone_override = our_organ)
/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher/examine_more(mob/user)
. = ..()
. += "<i>A Shellguard Munitions classic, the Shellguard Launch System (SLS) was originally a MODsuit heavy weapons accessory, \
later being developed into a forearm-mounted tactical shotgun implant. Though its compact design precludes the use of large ammunition like rockets or burning plasma, \
it excels in firing a variety of smaller shells, both energy and kinetic, thanks to its advanced plasma alloy barrel.<i>"
. += "<i>Adapting an accessory intended for a mechanical suit's gauntlet posed significant hurdles, \
primarily in miniaturizing the barrel and components without sacrificing performance. The limitations initially damaged its perception of the market. \
However, executives would later pivot their niche to concealed carry and versatile shell ammunition, \
focusing on deployability and concealment through neural activation. \
The shift in approach would lead to the SLS being advertised as a powerful and compact holdout weapon, easily concealable and reliably lethal.<i>"
. += "<i>Despite its initial issues, the SLS today holds a strong following in the implant market, being highly sought after among assassins, \
mercenaries, and firearm enthusiasts. Its appeal lies not just in its stealth but also in its compatibility with Shellguard's range of modular products, \
and the potential beyond its advertised capabilities.</i>"
/obj/item/ammo_box/magazine/internal/shot/shell_cannon
name = "shell launch system internal magazine"
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
max_ammo = 1
multiload = FALSE
/obj/item/organ/internal/cyberimp/arm/shell_launcher
name = "shell launch system implant"
desc = "A mounted, single-shot housing for a shell launch cannon; capable of firing twelve-gauge shotgun shells."
contents = newlist(/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher)
icon_state = "shell_cannon"
action_icon = list(/datum/action/item_action/organ_action/toggle = 'icons/obj/surgery.dmi')
action_icon_state = list(/datum/action/item_action/organ_action/toggle = "shell_cannon")
/obj/item/organ/internal/cyberimp/arm/shell_launcher/emp_act(severity)
if(!owner)
return
if(emp_proof)
return
Retract()
for(var/obj/item/gun/projectile/revolver/doublebarrel/shell_launcher/SL in contents)
if(SL.chambered)
if(!SL.chambered.BB)//found a spent ammo
return
if(istype(SL.chambered, /obj/item/ammo_casing/shotgun/ion))
emp_proof = TRUE //This kills the server without it. Do not remove this.
SL.missfire(owner, parent_organ)
emp_proof = FALSE
to_chat(owner, "<span class='warning'>The misfired [SL.chambered] causes your [name] to break!</span>")
necrotize()
return
if(istype(SL.chambered, /obj/item/ammo_casing/shotgun/frag12))
SL.missfire(owner, parent_organ)
var/obj/item/organ/external/probable_organ = owner.get_limb_by_name(parent_organ)
if(probable_organ) //In case it gets popped off by the damage
probable_organ.droplimb(FALSE, DROPLIMB_BLUNT)
return
if(istype(SL.chambered, /obj/item/ammo_casing/shotgun/pulseslug))
SL.missfire(owner, parent_organ)
var/obj/item/organ/external/probable_organ = owner.get_limb_by_name(parent_organ)
if(probable_organ) //In case it gets popped off by the damage
probable_organ.droplimb(FALSE, DROPLIMB_BURN)
return
SL.chambered.BB.damage *= 2 //Stronger since it is inside you
SL.missfire(owner, parent_organ)
/obj/item/organ/internal/cyberimp/arm/shell_launcher/examine_more(mob/user)
. = ..()
. += "<i>A Shellguard Munitions classic, the Shellguard Launch System (SLS) was originally a MODsuit heavy weapons accessory, \
later being developed into a forearm-mounted tactical shotgun implant. Though its compact design precludes the use of large ammunition like rockets or burning plasma, \
it excels in firing a variety of smaller shells, both energy and kinetic, thanks to its advanced plasma alloy barrel.<i>"
. += "<i>Adapting an accessory intended for a mechanical suit's gauntlet posed significant hurdles, \
primarily in miniaturizing the barrel and components without sacrificing performance. The limitations initially damaged its perception of the market. \
However, executives would later pivot their niche to concealed carry and versatile shell ammunition, \
focusing on deployability and concealment through neural activation. \
The shift in approach would lead to the SLS being advertised as a powerful and compact holdout weapon, easily concealable and reliably lethal.<i>"
. += "<i>Despite its initial issues, the SLS today holds a strong following in the implant market, being highly sought after among assassins, \
mercenaries, and firearm enthusiasts. Its appeal lies not just in its stealth but also in its compatibility with Shellguard's range of modular products, \
and the potential beyond its advertised capabilities.</i>"
/obj/item/organ/internal/cyberimp/arm/v1_arm
name = "vortex feedback arm implant"
desc = "An implant, that when deployed surrounds the users arm in armor and circuitry, allowing them to redirect nearby projectiles with feedback from the vortex anomaly core."
@@ -303,6 +303,124 @@
origin_tech = "materials=6;programming=6;biotech=6"
emp_proof = TRUE
/obj/item/organ/internal/cyberimp/brain/hackerman_deck
name = "\improper Binyat wireless hacking system"
desc = "A rare-to-find neural chip that allows its user to interface with nearby machinery from a distance \
and affect it in (usually) beneficial ways. Due to the wireless connection, fine manipulation \
isn't possible, however the deck will drop a payload into the target's systems that will attempt \
hacking for you."
icon_state = "hackerman"
implant_overlay = null
implant_color = null
slot = "brain_antistun"
w_class = WEIGHT_CLASS_SMALL
origin_tech = "materials=4;combat=6;biotech=6;powerstorage=2;syndicate=3"
stealth_level = 4 //Only surgery or a body scanner with the highest tier of stock parts can detect this.
/obj/item/organ/internal/cyberimp/brain/hackerman_deck/examine_more(mob/user)
. = ..()
. += "<i>Considered Cybersun Incorporated's most recent and developed implant system focused on hacking from a range while being undetectable from normal means. \
The Binyat Wireless Hacking System (BWHS) is a stealth-built implant that gives its user a rudimentary electronic interface on whatever can be perceived. \
It uses a micro jammer to hide its existence from even the most advanced scanning systems.<i>"
. += "<i>Originally designed as a hand-held device for long-range testing of Cybersun's electronic security systems, \
the easy integration of the components into a neural implant led to a revaluation of the device's potential. \
Development would commence to create the first sets of prototypes, focusing on tricking scanners with no false positives, \
and being able to hack from afar. The System does have a major flaw, however, as Cybersun R&D was never able to miniaturize its cooling systems to a practical level. \
Repeated use will lead to skin irritation, internal burns, and even severe nerve damage in extreme cases.<i>"
. += "<i>As of modern times, the BWHS is heavily vetted under Cybersun Inc. due to its dangerous nature and rather difficult detection. \
However, this hasn't stopped the flow of these implants from reaching the black market, whether by inside or outside influences.</i>"
/obj/item/organ/internal/cyberimp/brain/hackerman_deck/insert(mob/living/carbon/M, special = 0)
. = ..()
add_spell()
RegisterSignal(M, COMSIG_BODY_TRANSFER_TO, PROC_REF(on_body_transfer))
/obj/item/organ/internal/cyberimp/brain/hackerman_deck/remove(mob/living/carbon/M, special = 0)
. = ..()
if(M.mind)
M.mind.RemoveSpell(/obj/effect/proc_holder/spell/hackerman_deck)
UnregisterSignal(M, COMSIG_BODY_TRANSFER_TO)
/obj/item/organ/internal/cyberimp/brain/hackerman_deck/proc/on_body_transfer()
SIGNAL_HANDLER
for(var/datum/action/A in owner.actions)
if(A.name == "Activate Ranged Hacking") //Bit snowflake, but the action doesn't remove right otherwise
A.Remove(owner)
addtimer(CALLBACK(src, PROC_REF(add_spell)), 1 SECONDS) //Give the mind a moment to settle in
add_spell()
/obj/item/organ/internal/cyberimp/brain/hackerman_deck/proc/add_spell()
if(owner.mind)
owner.mind.RemoveSpell(/obj/effect/proc_holder/spell/hackerman_deck) //Just to be sure.
owner.mind.AddSpell(new /obj/effect/proc_holder/spell/hackerman_deck(null))
/obj/item/organ/internal/cyberimp/brain/hackerman_deck/emp_act(severity)
owner.adjustStaminaLoss(40 / severity)
owner.adjust_bodytemperature(400 / severity)
to_chat(owner, "<span class='warning'>Your [name] heats up drastically!</span>")
return TRUE
/obj/effect/proc_holder/spell/hackerman_deck
name = "Activate Ranged Hacking"
desc = "Click on any machine to hack them. Has a short range of only three tiles."
base_cooldown = 10 SECONDS
clothes_req = FALSE
invocation = "none"
invocation_type = "none"
selection_activated_message = "You warm up your Binyat deck, there's an idle buzzing at the back of your mind as it awaits a target."
selection_deactivated_message = "Your hacking deck makes an almost disappointed sounding buzz at the back of your mind as it powers down."
action_icon_state = "hackerman"
action_background_icon_state = "bg_pulsedemon"
/// How many times have we successfully hacked in the last minute? Increases burn damage by 3 for each value above 0.
var/recent_hacking = 0
/obj/effect/proc_holder/spell/hackerman_deck/create_new_targeting()
var/datum/spell_targeting/clicked_atom/C = new()
C.range = 3
C.try_auto_target = FALSE
return C
/obj/effect/proc_holder/spell/hackerman_deck/on_mind_transfer(mob/living/L)
if(!ishuman(L))
return FALSE
var/mob/living/carbon/human/H = L
var/obj/item/organ/internal/cyberimp/brain/hackerman_deck/our_deck = H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/hackerman_deck)
if(!our_deck)
return FALSE
return TRUE
/obj/effect/proc_holder/spell/hackerman_deck/cast(list/targets, mob/user)
var/atom/target = targets[1]
if(get_dist(user, target) > 3) //fucking cameras holy shit
to_chat(user, "<span class='warning'>Your implant is not robust enough to hack at that distance!</span>")
cooldown_handler.start_recharge(cooldown_handler.recharge_duration * 0.3)
return
var/beam = user.Beam(target, icon_state = "sm_arc_supercharged", time = 3 SECONDS)
user.visible_message("<span class='warning'>[user] makes an unusual buzzing sound as the air between them and [target] crackles.</span>", \
"<span class='warning'>The air between you and [target] begins to crackle audibly as the Binyat gets to work and heats up in your head!</span>")
if(!do_after(user, 3 SECONDS, target))
qdel(beam)
cooldown_handler.start_recharge(cooldown_handler.recharge_duration * 0.3)
return
if(!target.emag_act(user))
to_chat(user, "<span class='warning'>You are unable to hack this!</span>")
cooldown_handler.start_recharge(cooldown_handler.recharge_duration * 0.3)
return
target.add_hiddenprint(user)
playsound(target, 'sound/machines/terminal_processing.ogg', 15, TRUE)
var/mob/living/carbon/human/human_owner = user
human_owner.adjustFireLoss(5 + (recent_hacking * 3))
recent_hacking++
addtimer(CALLBACK(src, PROC_REF(lower_recent_hacking)), 1 MINUTES)
/obj/effect/proc_holder/spell/hackerman_deck/proc/lower_recent_hacking()
recent_hacking--
//[[[[MOUTH]]]]
/obj/item/organ/internal/cyberimp/mouth
@@ -93,6 +93,24 @@
uses = 1
starting_organ = /obj/item/organ/internal/eyes/cybernetic/meson
/obj/item/autosurgeon/organ/syndicate/hackerman_deck
desc = "A single use autosurgeon that contains a Binyat wireless hacking system. A screwdriver can be used to remove it, but implants can't be placed back in."
uses = 1
starting_organ = /obj/item/organ/internal/cyberimp/brain/hackerman_deck
/obj/item/autosurgeon/organ/syndicate/hackerman_deck/examine_more(mob/user)
. = ..()
. += "<i>Considered Cybersun Incorporated's most recent and developed implant system focused on hacking from a range while being undetectable from normal means. \
The Binyat Wireless Hacking System (BWHS) is a stealth-built implant that gives its user a rudimentary electronic interface on whatever can be perceived. \
It uses a micro jammer to hide its existence from even the most advanced scanning systems.<i>"
. += "<i>Originally designed as a hand-held device for long-range testing of Cybersun's electronic security systems, \
the easy integration of the components into a neural implant led to a revaluation of the device's potential. \
Development would commence to create the first sets of prototypes, focusing on tricking scanners with no false positives, \
and being able to hack from afar. The System does have a major flaw, however, as Cybersun R&D was never able to miniaturize its cooling systems to a practical level. \
Repeated use will lead to skin irritation, internal burns, and even severe nerve damage in extreme cases.<i>"
. += "<i>As of modern times, the BWHS is heavily vetted under Cybersun Inc. due to its dangerous nature and rather difficult detection. \
However, this hasn't stopped the flow of these implants from reaching the black market, whether by inside or outside influences.</i>"
/obj/item/autosurgeon/organ/syndicate/thermal_eyes
starting_organ = /obj/item/organ/internal/eyes/cybernetic/thermals/hardened
+1
View File
@@ -273,6 +273,7 @@
if(!emagged)
to_chat(user, "<span class='warning'>You disable the safeties on [src]</span>")
emagged = TRUE
return TRUE
else
to_chat(user, "<span class='warning'>You re-enable the safeties on [src]</span>")
emagged = FALSE
+2
View File
@@ -40,6 +40,8 @@
var/last_pain_message
/// When can we get the next pain message?
var/next_pain_time
/// What level of upgrades are needed to detect this. Level 0 is default. 1 is hidden from health analysers. 2 is hidden from cyborg analysers, and the body scanner at level 1. 4 is the highest level the body scanner can reach.
var/stealth_level = 0
/obj/item/organ/Destroy()
STOP_PROCESSING(SSobj, src)
+1 -1
View File
@@ -102,7 +102,7 @@
emagged = TRUE
do_sparks(3, TRUE, src)
to_chat(user, "<span class='boldwarning'>Warning: Safeties disabled.</span>")
return
return TRUE
/obj/item/rcs/proc/try_send_container(mob/user, obj/structure/closet/C)
+1
View File
@@ -76,6 +76,7 @@
if(!emagged)
to_chat(user, "<span class='notice'>You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!</span>")
emagged = TRUE
return TRUE
else
to_chat(user, "<span class='warning'>The machine seems unaffected by the card swipe...</span>")