mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 07:27:57 +01:00
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:
co-authored by
Henri215
Burzah
DGamerL
Luc
parent
3c5cb36e81
commit
c398e4a617
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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>")
|
||||
|
||||
|
||||
@@ -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>")
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
qdel(ticket)
|
||||
tickets.Cut()
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/ticket_machine/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -202,3 +202,4 @@
|
||||
emagged = TRUE
|
||||
if(active)
|
||||
change_meteor_chance(2)
|
||||
return TRUE
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user