mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-18 21:15:21 +00:00
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.
149 lines
5.5 KiB
Plaintext
149 lines
5.5 KiB
Plaintext
/obj/item/crowbar
|
|
name = "pocket crowbar"
|
|
desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors."
|
|
icon = 'icons/obj/tools.dmi'
|
|
icon_state = "crowbar"
|
|
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
|
usesound = 'sound/items/crowbar.ogg'
|
|
flags_1 = CONDUCT_1
|
|
slot_flags = ITEM_SLOT_BELT
|
|
force = 5
|
|
throwforce = 7
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
custom_materials = list(/datum/material/iron=50)
|
|
drop_sound = 'sound/items/handling/crowbar_drop.ogg'
|
|
pickup_sound = 'sound/items/handling/crowbar_pickup.ogg'
|
|
|
|
attack_verb_continuous = list("attacks", "bashes", "batters", "bludgeons", "whacks")
|
|
attack_verb_simple = list("attack", "bash", "batter", "bludgeon", "whack")
|
|
tool_behaviour = TOOL_CROWBAR
|
|
toolspeed = 1
|
|
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30)
|
|
var/force_opens = FALSE
|
|
|
|
/obj/item/crowbar/suicide_act(mob/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/crowbar/red
|
|
icon_state = "crowbar_red"
|
|
force = 8
|
|
|
|
/obj/item/crowbar/abductor
|
|
name = "alien crowbar"
|
|
desc = "A hard-light crowbar. It appears to pry by itself, without any effort required."
|
|
icon = 'icons/obj/abductor.dmi'
|
|
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
|
icon_state = "crowbar"
|
|
toolspeed = 0.1
|
|
|
|
|
|
/obj/item/crowbar/large
|
|
name = "crowbar"
|
|
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big."
|
|
force = 12
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
throw_speed = 3
|
|
throw_range = 3
|
|
custom_materials = list(/datum/material/iron=70)
|
|
icon_state = "crowbar_large"
|
|
inhand_icon_state = "crowbar"
|
|
worn_icon_state = "crowbar"
|
|
toolspeed = 0.7
|
|
|
|
/obj/item/crowbar/large/heavy //from space ruin
|
|
name = "heavy crowbar"
|
|
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big. It feels oddly heavy.."
|
|
force = 20
|
|
icon_state = "crowbar_powergame"
|
|
|
|
/obj/item/crowbar/power
|
|
name = "jaws of life"
|
|
desc = "A set of jaws of life, compressed through the magic of science."
|
|
icon_state = "jaws"
|
|
inhand_icon_state = "jawsoflife"
|
|
worn_icon_state = "jawsoflife"
|
|
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)
|
|
usesound = 'sound/items/jaws_pry.ogg'
|
|
force = 15
|
|
toolspeed = 0.7
|
|
force_opens = TRUE
|
|
|
|
/obj/item/crowbar/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/crowbar/power/proc/on_transform(obj/item/source, mob/user, active)
|
|
SIGNAL_HANDLER
|
|
|
|
tool_behaviour = (active ? TOOL_WIRECUTTER : TOOL_CROWBAR)
|
|
balloon_alert(user, "attached [active ? "cutting" : "prying"]")
|
|
playsound(user ? user : src, 'sound/items/change_jaws.ogg', 50, TRUE)
|
|
return COMPONENT_NO_DEFAULT_MESSAGE
|
|
|
|
/obj/item/crowbar/power/syndicate
|
|
name = "Syndicate jaws of life"
|
|
desc = "A re-engineered copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration."
|
|
icon_state = "jaws_syndie"
|
|
toolspeed = 0.5
|
|
force_opens = TRUE
|
|
|
|
/obj/item/crowbar/power/examine()
|
|
. = ..()
|
|
. += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head."
|
|
|
|
/obj/item/crowbar/power/suicide_act(mob/user)
|
|
if(tool_behaviour == TOOL_CROWBAR)
|
|
user.visible_message(span_suicide("[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!"))
|
|
playsound(loc, 'sound/items/jaws_pry.ogg', 50, TRUE, -1)
|
|
else
|
|
user.visible_message(span_suicide("[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!"))
|
|
playsound(loc, 'sound/items/jaws_cut.ogg', 50, TRUE, -1)
|
|
if(iscarbon(user))
|
|
var/mob/living/carbon/C = user
|
|
var/obj/item/bodypart/BP = C.get_bodypart(BODY_ZONE_HEAD)
|
|
if(BP)
|
|
BP.drop_limb()
|
|
playsound(loc, "desecration", 50, TRUE, -1)
|
|
return (BRUTELOSS)
|
|
|
|
/obj/item/crowbar/power/attack(mob/living/carbon/C, mob/user)
|
|
if(istype(C) && C.handcuffed && tool_behaviour == TOOL_WIRECUTTER)
|
|
user.visible_message(span_notice("[user] cuts [C]'s restraints with [src]!"))
|
|
qdel(C.handcuffed)
|
|
return
|
|
else if(istype(C) && C.has_status_effect(STATUS_EFFECT_CHOKINGSTRAND) && tool_behaviour == TOOL_WIRECUTTER)
|
|
user.visible_message(span_notice("[user] attempts to cut the durathread strand from around [C]'s neck."))
|
|
if(do_after(user, 1.5 SECONDS, C))
|
|
user.visible_message(span_notice("[user] succesfully cuts the durathread strand from around [C]'s neck."))
|
|
C.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
|
|
playsound(loc, usesound, 50, TRUE, -1)
|
|
return
|
|
else
|
|
..()
|
|
|
|
/obj/item/crowbar/cyborg
|
|
name = "hydraulic crowbar"
|
|
desc = "A hydraulic prying tool, simple but powerful."
|
|
icon = 'icons/obj/items_cyborg.dmi'
|
|
icon_state = "crowbar_cyborg"
|
|
worn_icon_state = "crowbar"
|
|
usesound = 'sound/items/jaws_pry.ogg'
|
|
force = 10
|
|
toolspeed = 0.5
|