mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-30 11:32:20 +00:00
Improved engineering tools patch 2: Bolter Wrench (#72445) This adds a new wrench that can be printed after Advanced Engineering is researched or as a rare mail gift for engineers. The Bolter Wrench is medium sized (fits on toolbelts and bags but not on boxes) and can grab into the bolting system of airlocks, raising it's bolts after a 5 second `do_after`, even if the airlock has no power or the wires are cut, as long as you can access the inner wires. (Won't work if the panel is closed or has it's wires reinforced.) Codersprite blatantly inspired by Iconoclast's wrench and looks like this:   Right now, the only way to fix a powerless bolted down airlock is by fixing the power first, this becomes an issue if the APC is behind the airlock. If that is the case, the only way in is to break through walls/windows or destroy the airlock if you can, both add more things you need to repair, making reconstruction times longer and longer... Or you use an RCD to delete the airlock in 5 seconds, while faster than the above method still is another thing to the repair list... Repairing damaged and bolted down airlocks is such a hassle that doormag'd airlocks bypass the default deconstruction system and just let you deconstruct them directly without the steps of unbolting and welding, something that could be removed with this tool but I won't defend the pros and cons of it now. Reconstruction is slow and cumbersome without an RCD. (And even with one...) I've been trying to make it smoother without using RCDs or a future RAT on previous PRs and future ones to come, this tool is part of those plans. 🆑 Guillaume Prata add: Bolter Wrench as a new tool, it can raise the bolts of airlocks regardless of it's power status to smoother station repairs. It can be printed and is unlocked on the same tier as RCD. It can also rarely be a mail gift for engineers. /🆑 Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
139 lines
5.0 KiB
Plaintext
139 lines
5.0 KiB
Plaintext
/obj/item/wrench
|
|
name = "wrench"
|
|
desc = "A wrench with common uses. Can be found in your hand."
|
|
icon = 'icons/obj/tools.dmi'
|
|
icon_state = "wrench"
|
|
inhand_icon_state = "wrench"
|
|
worn_icon_state = "wrench"
|
|
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
|
flags_1 = CONDUCT_1
|
|
slot_flags = ITEM_SLOT_BELT
|
|
force = 5
|
|
throwforce = 7
|
|
demolition_mod = 1.25
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
usesound = 'sound/items/ratchet.ogg'
|
|
custom_materials = list(/datum/material/iron=150)
|
|
drop_sound = 'sound/items/handling/wrench_drop.ogg'
|
|
pickup_sound = 'sound/items/handling/wrench_pickup.ogg'
|
|
|
|
attack_verb_continuous = list("bashes", "batters", "bludgeons", "whacks")
|
|
attack_verb_simple = list("bash", "batter", "bludgeon", "whack")
|
|
tool_behaviour = TOOL_WRENCH
|
|
toolspeed = 1
|
|
armor_type = /datum/armor/item_wrench
|
|
|
|
/datum/armor/item_wrench
|
|
fire = 50
|
|
acid = 30
|
|
|
|
/obj/item/wrench/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/falling_hazard, damage = force, wound_bonus = wound_bonus, hardhat_safety = TRUE, crushes = FALSE, impact_sound = hitsound)
|
|
|
|
/obj/item/wrench/suicide_act(mob/living/user)
|
|
user.visible_message(span_suicide("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1)
|
|
return BRUTELOSS
|
|
|
|
/obj/item/wrench/abductor
|
|
name = "alien wrench"
|
|
desc = "A polarized wrench. It causes anything placed between the jaws to turn."
|
|
icon = 'icons/obj/abductor.dmi'
|
|
belt_icon_state = "wrench_alien"
|
|
custom_materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
|
usesound = 'sound/effects/empulse.ogg'
|
|
toolspeed = 0.1
|
|
|
|
|
|
/obj/item/wrench/medical
|
|
name = "medical wrench"
|
|
desc = "A medical wrench with common(medical?) uses. Can be found in your hand."
|
|
icon_state = "wrench_medical"
|
|
inhand_icon_state = "wrench_medical"
|
|
force = 2 //MEDICAL
|
|
throwforce = 4
|
|
attack_verb_continuous = list("heals", "medicals", "taps", "pokes", "analyzes") //"cobbyed"
|
|
attack_verb_simple = list("heal", "medical", "tap", "poke", "analyze")
|
|
///var to hold the name of the person who suicided
|
|
var/suicider
|
|
|
|
/obj/item/wrench/medical/examine(mob/user)
|
|
. = ..()
|
|
if(suicider)
|
|
. += span_notice("For some reason, it reminds you of [suicider].")
|
|
|
|
/obj/item/wrench/medical/suicide_act(mob/living/user)
|
|
user.visible_message(span_suicide("[user] is praying to the medical wrench to take [user.p_their()] soul. It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
user.Stun(100, ignore_canstun = TRUE)// Stun stops them from wandering off
|
|
user.set_light_color(COLOR_VERY_SOFT_YELLOW)
|
|
user.set_light(2)
|
|
user.add_overlay(mutable_appearance('icons/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER))
|
|
playsound(loc, 'sound/effects/pray.ogg', 50, TRUE, -1)
|
|
|
|
// Let the sound effect finish playing
|
|
add_fingerprint(user)
|
|
sleep(2 SECONDS)
|
|
if(!user)
|
|
return
|
|
for(var/obj/item/suicide_wrench in user)
|
|
user.dropItemToGround(suicide_wrench)
|
|
suicider = user.real_name
|
|
user.dust()
|
|
return OXYLOSS
|
|
|
|
/obj/item/wrench/cyborg
|
|
name = "hydraulic wrench"
|
|
desc = "An advanced robotic wrench, powered by internal hydraulics. Twice as fast as the handheld version."
|
|
icon = 'icons/obj/items_cyborg.dmi'
|
|
icon_state = "wrench_cyborg"
|
|
toolspeed = 0.5
|
|
|
|
/obj/item/wrench/combat
|
|
name = "combat wrench"
|
|
desc = "It's like a normal wrench but edgier. Can be found on the battlefield."
|
|
icon_state = "wrench_combat"
|
|
inhand_icon_state = "wrench_combat"
|
|
belt_icon_state = "wrench_combat"
|
|
attack_verb_continuous = list("devastates", "brutalizes", "commits a war crime against", "obliterates", "humiliates")
|
|
attack_verb_simple = list("devastate", "brutalize", "commit a war crime against", "obliterate", "humiliate")
|
|
tool_behaviour = null
|
|
toolspeed = null
|
|
|
|
/obj/item/wrench/combat/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/transforming, \
|
|
force_on = 6, \
|
|
throwforce_on = 8, \
|
|
hitsound_on = hitsound, \
|
|
w_class_on = WEIGHT_CLASS_NORMAL, \
|
|
clumsy_check = FALSE)
|
|
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
|
|
|
|
/*
|
|
* Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM].
|
|
*
|
|
* Gives it wrench behaviors when active.
|
|
*/
|
|
/obj/item/wrench/combat/proc/on_transform(obj/item/source, mob/user, active)
|
|
SIGNAL_HANDLER
|
|
|
|
if(active)
|
|
tool_behaviour = TOOL_WRENCH
|
|
toolspeed = 1
|
|
else
|
|
tool_behaviour = initial(tool_behaviour)
|
|
toolspeed = initial(toolspeed)
|
|
|
|
balloon_alert(user, "[name] [active ? "active, woe!":"restrained"]")
|
|
playsound(user ? user : src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 5, TRUE)
|
|
return COMPONENT_NO_DEFAULT_MESSAGE
|
|
|
|
/obj/item/wrench/bolter
|
|
name = "bolter wrench"
|
|
desc = "A wrench designed to grab into airlock's bolting system and raise it regardless of the airlock's power status."
|
|
icon_state = "bolter_wrench"
|
|
inhand_icon_state = "bolter_wrench"
|
|
w_class = WEIGHT_CLASS_NORMAL
|