mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-12 00:27:31 +01:00
566 lines
22 KiB
Plaintext
566 lines
22 KiB
Plaintext
// Deprecated, you do not need to use this type for melee weapons.
|
|
/obj/item/melee
|
|
abstract_type = /obj/item/melee
|
|
item_flags = NEEDS_PERMIT
|
|
|
|
/obj/item/melee/synthetic_arm_blade
|
|
name = "synthetic arm blade"
|
|
desc = "A grotesque blade that on closer inspection seems to be made out of synthetic flesh, it still feels like it would hurt very badly as a weapon."
|
|
icon = 'icons/obj/weapons/changeling_items.dmi'
|
|
icon_state = "arm_blade"
|
|
inhand_icon_state = "arm_blade"
|
|
icon_angle = 180
|
|
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
force = 20
|
|
throwforce = 10
|
|
hitsound = 'sound/items/weapons/bladeslice.ogg'
|
|
attack_verb_continuous = list("attacks", "slashes", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
|
attack_verb_simple = list("attack", "slash", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
|
sharpness = SHARP_EDGED
|
|
var/list/alt_continuous = list("stabs", "pierces", "impales")
|
|
var/list/alt_simple = list("stab", "pierce", "impale")
|
|
|
|
/obj/item/melee/synthetic_arm_blade/Initialize(mapload)
|
|
. = ..()
|
|
alt_continuous = string_list(alt_continuous)
|
|
alt_simple = string_list(alt_simple)
|
|
AddComponent(/datum/component/alternative_sharpness, SHARP_POINTY, alt_continuous, alt_simple, -5)
|
|
AddComponent(/datum/component/butchering, \
|
|
speed = 6 SECONDS, \
|
|
effectiveness = 80, \
|
|
)
|
|
//very imprecise
|
|
|
|
/obj/item/melee/beesword
|
|
name = "The Stinger"
|
|
desc = "Taken from a giant bee and folded over one thousand times in pure honey. Can sting through anything."
|
|
icon = 'icons/obj/weapons/sword.dmi'
|
|
icon_state = "beesword"
|
|
inhand_icon_state = "stinger"
|
|
worn_icon_state = "stinger"
|
|
icon_angle = -45
|
|
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
|
slot_flags = ITEM_SLOT_BELT
|
|
force = 5
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
sharpness = SHARP_EDGED
|
|
throwforce = 10
|
|
attack_speed = CLICK_CD_RAPID
|
|
block_chance = 20
|
|
armour_penetration = 65
|
|
attack_verb_continuous = list("slashes", "stings", "prickles", "pokes")
|
|
attack_verb_simple = list("slash", "sting", "prickle", "poke")
|
|
hitsound = 'sound/items/weapons/rapierhit.ogg'
|
|
block_sound = 'sound/items/weapons/parry.ogg'
|
|
|
|
/obj/item/melee/beesword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
|
|
if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK || attack_type == OVERWHELMING_ATTACK)
|
|
final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword. Or a road roller, if one happened to hit you.
|
|
return ..()
|
|
|
|
/obj/item/melee/beesword/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
|
|
if(iscarbon(target) && !QDELETED(target))
|
|
var/mob/living/carbon/carbon_target = target
|
|
carbon_target.reagents.add_reagent(/datum/reagent/toxin, 4)
|
|
|
|
/obj/item/melee/beesword/suicide_act(mob/living/user)
|
|
user.visible_message(span_suicide("[user] is stabbing [user.p_them()]self in the throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
playsound(get_turf(src), hitsound, 75, TRUE, -1)
|
|
return TOXLOSS
|
|
|
|
/obj/item/melee/curator_whip
|
|
name = "curator's whip"
|
|
desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by."
|
|
icon = 'icons/obj/weapons/whip.dmi'
|
|
icon_state = "whip"
|
|
inhand_icon_state = "chain"
|
|
icon_angle = -90
|
|
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
|
worn_icon_state = "whip"
|
|
slot_flags = ITEM_SLOT_BELT
|
|
force = 15
|
|
demolition_mod = 0.25
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
attack_verb_continuous = list("flogs", "whips", "lashes", "disciplines")
|
|
attack_verb_simple = list("flog", "whip", "lash", "discipline")
|
|
hitsound = 'sound/items/weapons/whip.ogg'
|
|
|
|
/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
|
|
if(ishuman(target))
|
|
var/mob/living/carbon/human/human_target = target
|
|
human_target.drop_all_held_items()
|
|
human_target.visible_message(span_danger("[user] disarms [human_target]!"), span_userdanger("[user] disarmed you!"))
|
|
|
|
/obj/item/melee/roastingstick
|
|
name = "advanced roasting stick"
|
|
desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits."
|
|
icon = 'icons/obj/service/kitchen.dmi'
|
|
icon_state = "roastingstick"
|
|
inhand_icon_state = null
|
|
worn_icon_state = "tele_baton"
|
|
icon_angle = -45
|
|
slot_flags = ITEM_SLOT_BELT
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
item_flags = NONE
|
|
force = 0
|
|
attack_verb_continuous = list("hits", "pokes")
|
|
attack_verb_simple = list("hit", "poke")
|
|
/// The sausage attatched to our stick.
|
|
var/obj/item/food/sausage/held_sausage
|
|
/// Static list of things our roasting stick can interact with.
|
|
var/static/list/ovens
|
|
/// The beam that links to the oven we use
|
|
var/datum/beam/beam
|
|
|
|
/obj/item/melee/roastingstick/Initialize(mapload)
|
|
. = ..()
|
|
if (!ovens)
|
|
ovens = typecacheof(list(/obj/singularity, /obj/energy_ball, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire))
|
|
AddComponent( \
|
|
/datum/component/transforming, \
|
|
hitsound_on = hitsound, \
|
|
clumsy_check = FALSE, \
|
|
inhand_icon_change = FALSE, \
|
|
)
|
|
RegisterSignal(src, COMSIG_TRANSFORMING_PRE_TRANSFORM, PROC_REF(attempt_transform))
|
|
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
|
|
|
|
/*
|
|
* Signal proc for [COMSIG_TRANSFORMING_PRE_TRANSFORM].
|
|
*
|
|
* If there is a sausage attached, returns COMPONENT_BLOCK_TRANSFORM.
|
|
*/
|
|
/obj/item/melee/roastingstick/proc/attempt_transform(obj/item/source, mob/user, active)
|
|
SIGNAL_HANDLER
|
|
|
|
if(held_sausage)
|
|
to_chat(user, span_warning("You can't retract [src] while [held_sausage] is attached!"))
|
|
return COMPONENT_BLOCK_TRANSFORM
|
|
|
|
/*
|
|
* Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM].
|
|
*
|
|
* Gives feedback on stick extension.
|
|
*/
|
|
/obj/item/melee/roastingstick/proc/on_transform(obj/item/source, mob/user, active)
|
|
SIGNAL_HANDLER
|
|
|
|
inhand_icon_state = active ? "nullrod" : null
|
|
if(user)
|
|
balloon_alert(user, "[active ? "extended" : "collapsed"] [src]")
|
|
playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE)
|
|
return COMPONENT_NO_DEFAULT_MESSAGE
|
|
|
|
/obj/item/melee/roastingstick/attackby(atom/target, mob/user)
|
|
..()
|
|
if (istype(target, /obj/item/food/sausage))
|
|
if (!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE))
|
|
to_chat(user, span_warning("You must extend [src] to attach anything to it!"))
|
|
return
|
|
if (held_sausage)
|
|
to_chat(user, span_warning("[held_sausage] is already attached to [src]!"))
|
|
return
|
|
if (user.transferItemToLoc(target, src))
|
|
held_sausage = target
|
|
else
|
|
to_chat(user, span_warning("[target] doesn't seem to want to get on [src]!"))
|
|
update_appearance()
|
|
|
|
/obj/item/melee/roastingstick/attack_hand(mob/user, list/modifiers)
|
|
..()
|
|
if (held_sausage)
|
|
user.put_in_hands(held_sausage)
|
|
|
|
/obj/item/melee/roastingstick/update_overlays()
|
|
. = ..()
|
|
if(held_sausage)
|
|
. += mutable_appearance(icon, "roastingstick_sausage")
|
|
|
|
/obj/item/melee/roastingstick/Exited(atom/movable/gone, direction)
|
|
. = ..()
|
|
if (gone == held_sausage)
|
|
held_sausage = null
|
|
update_appearance()
|
|
|
|
/obj/item/melee/roastingstick/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
|
if (!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE))
|
|
return NONE
|
|
if (!is_type_in_typecache(interacting_with, ovens))
|
|
return NONE
|
|
if (istype(interacting_with, /obj/singularity) || istype(interacting_with, /obj/energy_ball) && get_dist(user, interacting_with) < 10)
|
|
to_chat(user, span_notice("You send [held_sausage] towards [interacting_with]."))
|
|
playsound(src, 'sound/items/tools/rped.ogg', 50, TRUE)
|
|
beam = user.Beam(interacting_with, icon_state = "rped_upgrade", time = 10 SECONDS)
|
|
finish_roasting(user, interacting_with)
|
|
return ITEM_INTERACT_SUCCESS
|
|
return NONE
|
|
|
|
/obj/item/melee/roastingstick/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
|
if (!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE))
|
|
return NONE
|
|
if (!is_type_in_typecache(interacting_with, ovens))
|
|
return NONE
|
|
to_chat(user, span_notice("You extend [src] towards [interacting_with]."))
|
|
playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE)
|
|
finish_roasting(user, interacting_with)
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/obj/item/melee/roastingstick/proc/finish_roasting(user, atom/target)
|
|
if(do_after(user, 10 SECONDS, target = user))
|
|
to_chat(user, span_notice("You finish roasting [held_sausage]."))
|
|
playsound(src, 'sound/items/tools/welder2.ogg', 50, TRUE)
|
|
held_sausage.add_atom_colour(rgb(103, 63, 24), FIXED_COLOUR_PRIORITY)
|
|
held_sausage.name = "[target.name]-roasted [held_sausage.name]"
|
|
held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]."
|
|
update_appearance()
|
|
else
|
|
QDEL_NULL(beam)
|
|
playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE)
|
|
to_chat(user, span_notice("You put [src] away."))
|
|
|
|
/obj/item/melee/cleric_mace
|
|
name = "cleric mace"
|
|
desc = "The grandson of the club, yet the grandfather of the baseball bat. Most notably used by holy orders in days past."
|
|
icon = 'icons/map_icons/items/_item.dmi'
|
|
icon_state = "/obj/item/melee/cleric_mace"
|
|
post_init_icon_state = "default"
|
|
inhand_icon_state = "default"
|
|
worn_icon_state = "default_worn"
|
|
icon_angle = -45
|
|
|
|
greyscale_config = /datum/greyscale_config/cleric_mace
|
|
greyscale_config_inhand_left = /datum/greyscale_config/cleric_mace_lefthand
|
|
greyscale_config_inhand_right = /datum/greyscale_config/cleric_mace_righthand
|
|
greyscale_config_worn = /datum/greyscale_config/cleric_mace
|
|
greyscale_colors = COLOR_WHITE + COLOR_BROWN
|
|
|
|
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS
|
|
// Defaults to an iron head, wooden handle mace
|
|
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 4.5, /datum/material/wood = SHEET_MATERIAL_AMOUNT * 1.5)
|
|
material_slots = list(/datum/material_slot/weapon_head/mace = /datum/material/iron, /datum/material_slot/handle = /datum/material/wood)
|
|
slot_flags = ITEM_SLOT_BELT
|
|
force = 16
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
throwforce = 8
|
|
block_chance = 10
|
|
block_sound = 'sound/items/weapons/genhit.ogg'
|
|
armour_penetration = 50
|
|
attack_verb_continuous = list("smacks", "strikes", "cracks", "beats")
|
|
attack_verb_simple = list("smack", "strike", "crack", "beat")
|
|
|
|
// It only inherits the name of the main material it's made of. The secondary is in the description.
|
|
/obj/item/melee/cleric_mace/get_material_prefixes(list/materials)
|
|
var/datum/material/material = get_material_from_slot(/datum/material_slot/weapon_head)
|
|
return material?.name
|
|
|
|
/obj/item/melee/cleric_mace/finalize_material_effects(list/materials)
|
|
. = ..()
|
|
var/datum/material/material = get_material_from_slot(/datum/material_slot/handle)
|
|
if (material)
|
|
desc = "[initial(desc)] Its handle is made of [material.name]."
|
|
|
|
/obj/item/melee/cleric_mace/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
|
|
// Don't bring a...mace to a gunfight, and also you aren't going to really block someone full body tackling you with a mace.
|
|
// Or a road roller, if one happened to hit you.
|
|
if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK || attack_type == OVERWHELMING_ATTACK)
|
|
final_block_chance = 0
|
|
return ..()
|
|
|
|
/datum/material_slot/weapon_head/mace
|
|
name = "mace head"
|
|
material_amount = 3
|
|
|
|
/obj/item/sord
|
|
name = "\improper SORD"
|
|
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
|
|
icon = 'icons/obj/weapons/sword.dmi'
|
|
icon_state = "sord"
|
|
inhand_icon_state = "sord"
|
|
icon_angle = -35
|
|
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
|
slot_flags = ITEM_SLOT_BELT
|
|
force = 2
|
|
throwforce = 1
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
hitsound = 'sound/items/weapons/bladeslice.ogg'
|
|
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
|
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
|
|
|
/obj/item/sord/suicide_act(mob/living/user)
|
|
user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty."), \
|
|
span_suicide("You try to impale yourself with [src], but it's USELESS..."))
|
|
return SHAME
|
|
|
|
/obj/item/carpenter_hammer
|
|
name = "carpenter hammer"
|
|
icon = 'icons/obj/weapons/hammer.dmi'
|
|
icon_state = "carpenter_hammer"
|
|
inhand_icon_state = "carpenter_hammer"
|
|
worn_icon_state = "clawhammer" //plaecholder
|
|
icon_angle = -45
|
|
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
|
|
desc = "Uncanny looking hammer."
|
|
force = 17
|
|
throwforce = 14
|
|
throw_range = 4
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
wound_bonus = 20
|
|
demolition_mod = 1.15
|
|
slot_flags = ITEM_SLOT_BELT
|
|
|
|
/obj/item/carpenter_hammer/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/kneejerk)
|
|
AddComponent(/datum/component/item_killsound, \
|
|
allowed_mobs = list(/mob/living/carbon/human), \
|
|
killsound = 'sound/items/weapons/hammer_death_scream.ogg', \
|
|
replace_default_death_sound = TRUE, \
|
|
)
|
|
|
|
/obj/item/carpenter_hammer/examine(mob/user)
|
|
. = ..()
|
|
. += ""
|
|
. += "Real World Tip:"
|
|
. += pick(
|
|
"Every building, from hospitals to homes, has a room that serves as the heart of the building \
|
|
and carries blood and nutrients to its extremities. Try to find the heart of your home!",
|
|
"All the food you've tried is rotten. You've never eaten fresh food.",
|
|
"Viruses do not exist. Illness is simply your body punishing you for what you have done wrong.",
|
|
"Space stations must have at least 50 mammalian teeth embedded in the north walls for structural safety reasons.",
|
|
"Queen dragonfly sleeps and smiles.",
|
|
)
|
|
|
|
/obj/item/phone
|
|
name = "red phone"
|
|
desc = "Should anything ever go wrong..."
|
|
icon = 'icons/obj/devices/voice.dmi'
|
|
icon_state = "red_phone"
|
|
force = 3
|
|
throwforce = 2
|
|
throw_speed = 3
|
|
throw_range = 4
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
attack_verb_continuous = list("calls", "rings")
|
|
attack_verb_simple = list("call", "ring")
|
|
hitsound = 'sound/items/weapons/ring.ogg'
|
|
|
|
/obj/item/phone/suicide_act(mob/living/user)
|
|
if(locate(/obj/structure/chair/stool) in user.loc)
|
|
user.visible_message(span_suicide("[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
else
|
|
user.visible_message(span_suicide("[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
return OXYLOSS
|
|
|
|
/obj/item/bambostaff
|
|
name = "bamboo staff"
|
|
desc = "A long bamboo-made staff with steel-capped ends. It is rumoured that initiates of Spider Clan train with such before getting to learn how to use a katana."
|
|
force = 10
|
|
block_chance = 45
|
|
block_sound = 'sound/items/weapons/genhit.ogg'
|
|
slot_flags = ITEM_SLOT_BACK
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
hitsound = SFX_SWING_HIT
|
|
attack_verb_continuous = list("smashes", "slams", "whacks", "thwacks")
|
|
attack_verb_simple = list("smash", "slam", "whack", "thwack")
|
|
icon = 'icons/obj/weapons/staff.dmi'
|
|
icon_state = "bambostaff0"
|
|
base_icon_state = "bambostaff"
|
|
inhand_icon_state = "bambostaff0"
|
|
worn_icon_state = "bambostaff0"
|
|
icon_angle = -135
|
|
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
|
custom_materials = list(/datum/material/bamboo = SHEET_MATERIAL_AMOUNT * 4)
|
|
|
|
/obj/item/bambostaff/Initialize(mapload)
|
|
. = ..()
|
|
// there are too many puns to choose from. ('Bo' is the 'real' name for this kind of weapon.)
|
|
name = pick("bamboo staff", "bambo staff", "bam-Bo staff", "bam boo staff", "bam-boo staff", "bam Bo", "bambo", "bam-Bo", "bamboo-Bo")
|
|
AddComponent(/datum/component/two_handed, \
|
|
force_unwielded = 10, \
|
|
force_wielded = 14, \
|
|
)
|
|
|
|
/obj/item/bambostaff/update_icon_state()
|
|
icon_state = inhand_icon_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]"
|
|
return ..()
|
|
|
|
/obj/item/bambostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
|
|
if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK || attack_type == OVERWHELMING_ATTACK)
|
|
final_block_chance = 0 //Don't bring a staff to a gunfight, and also you aren't going to really block someone full body tackling you with a staff. Or a road roller, if one happened to hit you.
|
|
return ..()
|
|
|
|
/obj/item/staff
|
|
name = "wizard staff"
|
|
desc = "Apparently a staff used by the wizard."
|
|
icon = 'icons/obj/weapons/guns/magic.dmi'
|
|
icon_state = "staff"
|
|
inhand_icon_state = "staff"
|
|
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
|
force = 3
|
|
throwforce = 5
|
|
throw_speed = 2
|
|
throw_range = 5
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
armour_penetration = 100
|
|
attack_verb_continuous = list("bludgeons", "whacks", "disciplines")
|
|
attack_verb_simple = list("bludgeon", "whack", "discipline")
|
|
resistance_flags = FLAMMABLE
|
|
|
|
/obj/item/staff/broom
|
|
name = "broom"
|
|
desc = "Used for sweeping, and flying into the night while cackling. Black cat not included."
|
|
icon_state = "broom"
|
|
inhand_icon_state = "broom"
|
|
resistance_flags = FLAMMABLE
|
|
|
|
/obj/item/staff/tape
|
|
name = "tape staff"
|
|
desc = "A roll of tape snugly attached to a stick."
|
|
icon_state = "tapestaff"
|
|
inhand_icon_state = "tapestaff"
|
|
resistance_flags = FLAMMABLE
|
|
|
|
/obj/item/staff/stick
|
|
name = "stick"
|
|
desc = "A great tool to drag someone else's drinks across the bar."
|
|
icon = 'icons/obj/weapons/staff.dmi'
|
|
icon_state = "cane"
|
|
inhand_icon_state = "stick"
|
|
icon_angle = 135
|
|
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
|
force = 3
|
|
throwforce = 5
|
|
throw_speed = 2
|
|
throw_range = 5
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
|
|
/obj/item/tailclub
|
|
name = "tail club"
|
|
desc = "For the beating to death of lizards with their own tails."
|
|
icon = 'icons/obj/weapons/club.dmi'
|
|
icon_state = "tailclub"
|
|
icon_angle = -25
|
|
force = 14
|
|
throwforce = 1 // why are you throwing a club do you even weapon
|
|
throw_speed = 1
|
|
throw_range = 1
|
|
attack_verb_continuous = list("clubs", "bludgeons")
|
|
attack_verb_simple = list("club", "bludgeon")
|
|
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/melee/flyswatter
|
|
name = "flyswatter"
|
|
desc = "Useful for killing pests of all sizes."
|
|
icon = 'icons/obj/service/hydroponics/equipment.dmi'
|
|
icon_state = "flyswatter"
|
|
inhand_icon_state = "flyswatter"
|
|
icon_angle = -45
|
|
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
|
force = 1
|
|
throwforce = 1
|
|
attack_verb_continuous = list("swats", "smacks")
|
|
attack_verb_simple = list("swat", "smack")
|
|
hitsound = 'sound/effects/snap.ogg'
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
/// Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
|
|
var/static/list/splattable
|
|
|
|
/obj/item/melee/flyswatter/Initialize(mapload)
|
|
. = ..()
|
|
if (isnull(splattable))
|
|
splattable = typecacheof(list(
|
|
/mob/living/basic/ant,
|
|
/mob/living/basic/butterfly,
|
|
/mob/living/basic/cockroach,
|
|
/mob/living/basic/cockroach/bloodroach,
|
|
/mob/living/basic/spider/growing/spiderling,
|
|
/mob/living/basic/bee,
|
|
/obj/effect/decal/cleanable/ants,
|
|
/obj/item/queen_bee,
|
|
))
|
|
AddComponent(/datum/component/bane, affected_biotypes = MOB_BUG, pre_bane_callback = CALLBACK(src, PROC_REF(bane_check)) )
|
|
|
|
// Different type of bug mobs get different amounts of damage multipliers
|
|
/obj/item/melee/flyswatter/proc/bane_check(mob/living/target, mob/living/attacker, list/attack_modifiers)
|
|
if(isanimal_or_basicmob(target))
|
|
MODIFY_ATTACK_FORCE(attack_modifiers, 24)
|
|
else if(isflyperson(target))
|
|
MODIFY_ATTACK_FORCE(attack_modifiers, 29)
|
|
else if(ismoth(target))
|
|
MODIFY_ATTACK_FORCE(attack_modifiers, 9)
|
|
else // ?? Whatever
|
|
MODIFY_ATTACK_FORCE(attack_modifiers, 14)
|
|
|
|
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers)
|
|
if(is_type_in_typecache(target, splattable))
|
|
to_chat(user, span_warning("You easily splat [target]."))
|
|
if(QDELETED(target))
|
|
return
|
|
if(isliving(target))
|
|
new /obj/effect/decal/cleanable/insectguts(target.drop_location())
|
|
var/mob/living/bug = target
|
|
bug.investigate_log("has been splatted by a flyswatter.", INVESTIGATE_DEATHS)
|
|
bug.gib(DROP_ALL_REMAINS)
|
|
else
|
|
qdel(target)
|
|
|
|
/obj/item/proc/can_trigger_gun(mob/living/user, akimbo_usage)
|
|
if(!user.can_use_guns(src))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/obj/item/gohei
|
|
name = "gohei"
|
|
desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things. Now used by the station's valued weeaboos."
|
|
resistance_flags = FLAMMABLE
|
|
force = 5
|
|
throwforce = 5
|
|
hitsound = SFX_SWING_HIT
|
|
attack_verb_continuous = list("whacks", "thwacks", "wallops", "socks")
|
|
attack_verb_simple = list("whack", "thwack", "wallop", "sock")
|
|
icon = 'icons/obj/weapons/club.dmi'
|
|
icon_state = "gohei"
|
|
inhand_icon_state = "gohei"
|
|
icon_angle = -65
|
|
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
|
|
|
/obj/item/melee/moonlight_greatsword
|
|
name = "moonlight greatsword"
|
|
desc = "Don't tell anyone you put any points into dex, though."
|
|
icon = 'icons/obj/weapons/sword.dmi'
|
|
icon_state = "swordon"
|
|
inhand_icon_state = "swordon"
|
|
worn_icon_state = "swordon"
|
|
icon_angle = -45
|
|
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT
|
|
block_chance = 20
|
|
block_sound = 'sound/items/weapons/parry.ogg'
|
|
sharpness = SHARP_EDGED
|
|
force = 14
|
|
throwforce = 12
|
|
hitsound = 'sound/items/weapons/bladeslice.ogg'
|
|
attack_verb_continuous = list("attacks", "slashes", "slices", "tears", "lacerates", "rips", "dices", "cuts")
|
|
attack_verb_simple = list("attack", "slash", "slice", "tear", "lacerate", "rip", "dice", "cut")
|
|
var/list/alt_continuous = list("stabs", "pierces", "impales")
|
|
var/list/alt_simple = list("stab", "pierce", "impale")
|
|
|
|
/obj/item/melee/moonlight_greatsword/Initialize(mapload)
|
|
. = ..()
|
|
alt_continuous = string_list(alt_continuous)
|
|
alt_simple = string_list(alt_simple)
|
|
AddComponent(/datum/component/alternative_sharpness, SHARP_POINTY, alt_continuous, alt_simple)
|