Files
Bubberstation/code/game/objects/items/tools/screwdriver.dm
T
MrMelbert b3e8eebdc9 Kills /obj/item/melee/transforming, replaces it with a transforming weapon component (#60761)
This PR kills off the transforming subtype of /obj/item/melee and replaces it with a component to handle the transforming behavior, /datum/component/transforming.

The transforming component handles updating the variables of an item when it's transformed. Things like force, sharpness, whetstone force bonus, and attack verbs. Similar to the two-handed component, but instead of transforming into a two-hander it remains a one handed weapon.

The "nemesis" behavior (dealing addition damage to certain factions) of the transforming subtype was moved to the cleaving saw only, since it was the only transforming item that used it. In the future, this can be made into a bespoke element/component as well.

The following weapons and items have been updated to use this component:

    Energy Swords / Sabers / Bananium Energy Sword
    Energy Circular Saw
    Energy Dagger
    Energy Axe
    Toy Energy Sword
    Holographic Energy Sword
    Switchblade
    Advanced Medical Tools (Laser scalpel, Mechanical Pinches, Searing Tool)
    Advanced Engineering Tools (Hand Drill, Jaws of Life / Syndicate Jaws of Life)
    Combat Wrench
    Cleaving Saw
    Telescopic Batons / Contractor Batons
    Roasting Stick
    Telescopic Riot Shield
    Energy Shield / Bananium Energy Shield

This PR also touches up the code around the various above items.
2021-08-23 11:45:54 -07:00

142 lines
5.4 KiB
Plaintext

/obj/item/screwdriver
name = "screwdriver"
desc = "You can be totally screwy with this."
icon = 'icons/obj/tools.dmi'
icon_state = "screwdriver_map"
inhand_icon_state = "screwdriver"
worn_icon_state = "screwdriver"
belt_icon_state = "screwdriver"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
flags_1 = CONDUCT_1 | IS_PLAYER_COLORABLE_1
slot_flags = ITEM_SLOT_BELT
force = 5
w_class = WEIGHT_CLASS_TINY
throwforce = 5
throw_speed = 3
throw_range = 5
custom_materials = list(/datum/material/iron=75)
attack_verb_continuous = list("stabs")
attack_verb_simple = list("stab")
hitsound = 'sound/weapons/bladeslice.ogg'
usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg')
tool_behaviour = TOOL_SCREWDRIVER
toolspeed = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
drop_sound = 'sound/items/handling/screwdriver_drop.ogg'
pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
sharpness = SHARP_POINTY
greyscale_config = /datum/greyscale_config/screwdriver
greyscale_config_inhand_left = /datum/greyscale_config/screwdriver_inhand_left
greyscale_config_inhand_right = /datum/greyscale_config/screwdriver_inhand_right
greyscale_config_belt = /datum/greyscale_config/screwdriver_belt
/// If the item should be assigned a random color
var/random_color = TRUE
/// List of possible random colors
var/static/list/screwdriver_colors = list(
"blue" = "#1861d5",
"red" = "#ff0000",
"pink" = "#d5188d",
"brown" = "#a05212",
"green" = "#0e7f1b",
"cyan" = "#18a2d5",
"yellow" = "#ffa500"
)
/obj/item/screwdriver/suicide_act(mob/user)
user.visible_message(span_suicide("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!"))
return(BRUTELOSS)
/obj/item/screwdriver/Initialize()
if(random_color)
var/our_color = pick(screwdriver_colors)
set_greyscale(colors=list(screwdriver_colors[our_color]))
. = ..()
AddElement(/datum/element/eyestab)
/obj/item/screwdriver/abductor
name = "alien screwdriver"
desc = "An ultrasonic screwdriver."
icon = 'icons/obj/abductor.dmi'
icon_state = "screwdriver_a"
inhand_icon_state = "screwdriver_nuke"
usesound = 'sound/items/pshoom.ogg'
toolspeed = 0.1
random_color = FALSE
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
/obj/item/screwdriver/abductor/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke")
/obj/item/screwdriver/power
name = "hand drill"
desc = "A simple powered hand drill."
icon_state = "drill"
belt_icon_state = null
inhand_icon_state = "drill"
worn_icon_state = "drill"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
custom_materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25) //done for balance reasons, making them high value for research, but harder to get
force = 8 //might or might not be too high, subject to change
w_class = WEIGHT_CLASS_SMALL
throwforce = 8
throw_speed = 2
throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far
attack_verb_continuous = list("drills", "screws", "jabs", "whacks")
attack_verb_simple = list("drill", "screw", "jab", "whack")
hitsound = 'sound/items/drill_hit.ogg'
usesound = 'sound/items/drill_use.ogg'
toolspeed = 0.7
random_color = FALSE
greyscale_config = null
greyscale_config_belt = null
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
/obj/item/screwdriver/power/Initialize()
. = ..()
AddComponent(/datum/component/transforming, \
force_on = force, \
throwforce_on = throwforce, \
hitsound_on = hitsound, \
w_class_on = w_class, \
clumsy_check = FALSE)
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, .proc/on_transform)
/*
* Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM].
*
* Toggles between crowbar and wirecutters and gives feedback to the user.
*/
/obj/item/screwdriver/power/proc/on_transform(obj/item/source, mob/user, active)
SIGNAL_HANDLER
tool_behaviour = (active ? TOOL_WRENCH : TOOL_SCREWDRIVER)
balloon_alert(user, "attached [active ? "bolt bit" : "screw bit"]")
playsound(user ? user : src, 'sound/items/change_drill.ogg', 50, TRUE)
return COMPONENT_NO_DEFAULT_MESSAGE
/obj/item/screwdriver/power/examine()
. = ..()
. += " It's fitted with a [tool_behaviour == TOOL_SCREWDRIVER ? "screw" : "bolt"] bit."
/obj/item/screwdriver/power/suicide_act(mob/user)
if(tool_behaviour == TOOL_SCREWDRIVER)
user.visible_message(span_suicide("[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!"))
else
user.visible_message(span_suicide("[user] is pressing [src] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!"))
playsound(loc, 'sound/items/drill_use.ogg', 50, TRUE, -1)
return(BRUTELOSS)
/obj/item/screwdriver/cyborg
name = "automated screwdriver"
desc = "A powerful automated screwdriver, designed to be both precise and quick."
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "screwdriver_cyborg"
hitsound = 'sound/items/drill_hit.ogg'
usesound = 'sound/items/drill_use.ogg'
toolspeed = 0.5
random_color = FALSE