From 01201e522708b4a8c2e7138c64594a0d1a1c3f56 Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Wed, 21 Jun 2023 17:30:50 -0400 Subject: [PATCH 01/15] Adds twohanded and ports some things to use it this will require update_appearance to properly compile. Haven't ran updatepaths yet, I'm just saving my progress. --- .../dcs/signals/signals_mob/signals_mob.dm | 7 +- code/__DEFINES/dcs/signals/signals_twohand.dm | 7 + code/__DEFINES/traits.dm | 4 + code/_onclick/drag_drop.dm | 4 - code/datums/components/twohanded.dm | 408 ++++++++++++++++++ code/game/objects/items.dm | 6 + code/game/objects/items/holy_weapons.dm | 37 +- code/game/objects/items/two_handed/fireaxe.dm | 158 +++++++ code/game/objects/items/two_handed/spears.dm | 245 +++++++++++ .../objects/items/two_handed/updatepaths.txt | 5 + code/game/objects/items/twohanded.dm | 365 ---------------- code/game/objects/items/weaponry.dm | 1 + code/modules/mining/ores_coins.dm | 2 +- yogstation.dme | 4 + 14 files changed, 855 insertions(+), 398 deletions(-) create mode 100644 code/__DEFINES/dcs/signals/signals_twohand.dm create mode 100644 code/datums/components/twohanded.dm create mode 100644 code/game/objects/items/two_handed/fireaxe.dm create mode 100644 code/game/objects/items/two_handed/spears.dm create mode 100644 code/game/objects/items/two_handed/updatepaths.txt diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm index 649204104c1f..6e536322a11e 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm @@ -120,9 +120,12 @@ #define MOB_DEADSAY_SIGNAL_INTERCEPT (1<<0) ///from /mob/living/emote(): () #define COMSIG_MOB_EMOTE "mob_emote" -///from base of mob/swap_hand(): (obj/item) -#define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" +///from base of mob/swap_hand(): (obj/item/currently_held_item) +#define COMSIG_MOB_SWAPPING_HANDS "mob_swapping_hands" #define COMPONENT_BLOCK_SWAP (1<<0) +/// from base of mob/swap_hand(): () +/// Performed after the hands are swapped. +#define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" ///from base of /mob/verb/pointed: (atom/A) #define COMSIG_MOB_POINTED "mob_pointed" ///Mob is trying to open the wires of a target [/atom], from /datum/wires/interactable(): (atom/target) diff --git a/code/__DEFINES/dcs/signals/signals_twohand.dm b/code/__DEFINES/dcs/signals/signals_twohand.dm new file mode 100644 index 000000000000..ffe335954cb3 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_twohand.dm @@ -0,0 +1,7 @@ +// /datum/component/two_handed signals + +///from base of datum/component/two_handed/proc/wield(mob/living/carbon/user): (/mob/user) +#define COMSIG_TWOHANDED_WIELD "twohanded_wield" + #define COMPONENT_TWOHANDED_BLOCK_WIELD (1<<0) +///from base of datum/component/two_handed/proc/unwield(mob/living/carbon/user): (/mob/user) +#define COMSIG_TWOHANDED_UNWIELD "twohanded_unwield" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 63edf6f14ef0..1f1be6102bdb 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -284,6 +284,10 @@ // item traits #define TRAIT_NODROP "nodrop" #define TRAIT_T_RAY_VISIBLE "t-ray-visible" // Visible on t-ray scanners if the atom/var/level == 1 +/// Properly wielded two handed item +#define TRAIT_WIELDED "wielded" +/// The items needs two hands to be carried +#define TRAIT_NEEDS_TWO_HANDS "needstwohands" #define TRAIT_NO_TELEPORT "no-teleport" //you just can't #define TRAIT_NO_STORAGE "no-storage" //you cannot put this in any container, backpack, box etc diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index df3b9cb5279c..3b29ed83f923 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -177,10 +177,6 @@ /obj/item/proc/onMouseUp(object, location, params, mob) return -/obj/item - var/canMouseDown = FALSE - var/syndicate = FALSE // Does this item have syndicate only functionality via hud buttons? Needs to be in this scope to encompass all Chameleon items - Hopek - /obj/item/gun var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm new file mode 100644 index 000000000000..d84a61b21e7d --- /dev/null +++ b/code/datums/components/twohanded.dm @@ -0,0 +1,408 @@ +/** + * Two Handed Component + * + * When applied to an item it will make it two handed + * + */ +/datum/component/two_handed + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS // Only one of the component can exist on an item + + /// Reference to the offhand created for the item + var/obj/item/offhand/offhand_item + + /// Are we holding the two handed item properly + var/wielded = FALSE + /// The multiplier applied to force when wielded, does not work with force_wielded, and force_unwielded + var/force_multiplier = 0 + /// The force of the item when wielded + var/force_wielded = 0 + /// The force of the item when unweilded + var/force_unwielded = 0 + /// Play sound when wielded + var/wieldsound = FALSE + /// Play sound when unwielded + var/unwieldsound = FALSE + /// Play sound on attack when wielded + var/attacksound = FALSE + /// Does it have to be held in both hands + var/require_twohands = FALSE + /// The icon that will be used when wielded + var/icon_wielded = FALSE + /// The amount of increase recived from sharpening the item + var/sharpened_increase = 0 + + /// stat list for wielded/unwielded, switches with weapon_stats when wielding or unwielding + var/list/wielded_stats + + /// A callback on the parent to be called when the item is wielded + var/datum/callback/wield_callback + /// A callback on the parent to be called when the item is unwielded + var/datum/callback/unwield_callback + +/** + + * Two Handed component + * + * vars: + * * require_twohands (optional) Does the item need both hands to be carried + * * wieldsound (optional) The sound to play when wielded + * * unwieldsound (optional) The sound to play when unwielded + * * attacksound (optional) The sound to play when wielded and attacking + * * force_multiplier (optional) The force multiplier when wielded, do not use with force_wielded, and force_unwielded + * * force_wielded (optional) The force setting when the item is wielded, do not use with force_multiplier + * * force_unwielded (optional) The force setting when the item is unwielded, do not use with force_multiplier + * * icon_wielded (optional) The icon to be used when wielded + */ +/datum/component/two_handed/Initialize( + require_twohands = FALSE, + wieldsound = FALSE, + unwieldsound = FALSE, + attacksound = FALSE, + force_multiplier = 0, + force_wielded = 0, + force_unwielded = 0, + icon_wielded = FALSE, + datum/callback/wield_callback, + datum/callback/unwield_callback, + list/wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0), +) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + src.require_twohands = require_twohands + src.wieldsound = wieldsound + src.unwieldsound = unwieldsound + src.attacksound = attacksound + src.force_multiplier = force_multiplier + src.force_wielded = force_wielded + src.force_unwielded = force_unwielded + src.icon_wielded = icon_wielded + src.wield_callback = wield_callback + src.unwield_callback = unwield_callback + src.wielded_stats = wielded_stats + + if(require_twohands) + ADD_TRAIT(parent, TRAIT_NEEDS_TWO_HANDS, ABSTRACT_ITEM_TRAIT) + +// Inherit the new values passed to the component +/datum/component/two_handed/InheritComponent( + datum/component/two_handed/new_comp, + original, + require_twohands, + wieldsound, + unwieldsound, + force_multiplier, + force_wielded, + force_unwielded, + icon_wielded, + datum/callback/wield_callback, + datum/callback/unwield_callback, +) + if(!original) + return + if(require_twohands) + src.require_twohands = require_twohands + if(wieldsound) + src.wieldsound = wieldsound + if(unwieldsound) + src.unwieldsound = unwieldsound + if(attacksound) + src.attacksound = attacksound + if(force_multiplier) + src.force_multiplier = force_multiplier + if(force_wielded) + src.force_wielded = force_wielded + if(force_unwielded) + src.force_unwielded = force_unwielded + if(icon_wielded) + src.icon_wielded = icon_wielded + if(wield_callback) + src.wield_callback = wield_callback + if(unwield_callback) + src.unwield_callback = unwield_callback + +// register signals withthe parent item +/datum/component/two_handed/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_drop)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(on_attack)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_update_icon)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(parent, COMSIG_ITEM_SHARPEN_ACT, PROC_REF(on_sharpen)) + +// Remove all siginals registered to the parent item +/datum/component/two_handed/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_ITEM_EQUIPPED, + COMSIG_ITEM_DROPPED, + COMSIG_ITEM_ATTACK_SELF, + COMSIG_ITEM_ATTACK, + COMSIG_ATOM_UPDATE_ICON, + COMSIG_MOVABLE_MOVED, + COMSIG_ITEM_SHARPEN_ACT, + )) + +/// Triggered on equip of the item containing the component +/datum/component/two_handed/proc/on_equip(datum/source, mob/user, slot) + SIGNAL_HANDLER + + if(require_twohands && (slot & ITEM_SLOT_HANDS)) // force equip the item + wield(user) + if(!user.is_holding(parent) && wielded && !require_twohands) + unwield(user) + +/// Triggered on drop of item containing the component +/datum/component/two_handed/proc/on_drop(datum/source, mob/user) + SIGNAL_HANDLER + + if(require_twohands) //Don't let the item fall to the ground and cause bugs if it's actually being equipped on another slot. + unwield(user, FALSE, FALSE) + if(wielded) + unwield(user) + if(source == offhand_item && !QDELETED(source)) + offhand_item = null + qdel(source) + +/// Triggered on destroy of the component's offhand +/datum/component/two_handed/proc/on_destroy(datum/source) + SIGNAL_HANDLER + offhand_item = null + +/// Triggered on attack self of the item containing the component +/datum/component/two_handed/proc/on_attack_self(datum/source, mob/user) + SIGNAL_HANDLER + + if(!require_twohands) + if(wielded) + unwield(user) + else if(user.is_holding(parent)) + wield(user) + +/** + * Wield the two handed item in both hands + * + * vars: + * * user The mob/living/carbon that is wielding the item + */ +/datum/component/two_handed/proc/wield(mob/living/carbon/user) + if(wielded) + return + if(ismonkey(user)) + if(require_twohands) + to_chat(user, span_notice("[parent] is too heavy and cumbersome for you to carry!")) + user.dropItemToGround(parent, force=TRUE) + else + to_chat(user, span_notice("It's too heavy for you to wield fully.")) + return + if(user.get_inactive_held_item()) + if(require_twohands) + to_chat(user, span_notice("[parent] is too cumbersome to carry in one hand!")) + user.dropItemToGround(parent, force=TRUE) + else + to_chat(user, span_warning("You need your other hand to be empty!")) + return + if(user.get_num_arms() < 2) + if(require_twohands) + user.dropItemToGround(parent, force=TRUE) + to_chat(user, span_warning("You don't have enough intact hands.")) + return + + // wield update status + if(SEND_SIGNAL(parent, COMSIG_TWOHANDED_WIELD, user) & COMPONENT_TWOHANDED_BLOCK_WIELD) + return // blocked wield from item + wielded = TRUE + ADD_TRAIT(parent, TRAIT_WIELDED, REF(src)) + RegisterSignal(user, COMSIG_MOB_SWAPPING_HANDS, PROC_REF(on_swapping_hands)) + wield_callback?.Invoke(parent, user) + + // update item stats and name + var/obj/item/parent_item = parent + if(force_multiplier) + parent_item.force *= force_multiplier + else if(force_wielded) + parent_item.force = force_wielded + if(sharpened_increase) + parent_item.force += sharpened_increase + parent_item.weapon_stats = wielded_stats + parent_item.name = "[parent_item.name] (Wielded)" + parent_item.update_appearance() + + if(iscyborg(user)) + to_chat(user, span_notice("You dedicate your module to [parent].")) + else + to_chat(user, span_notice("You grab [parent] with both hands.")) + + // Play sound if one is set + if(wieldsound) + playsound(parent_item.loc, wieldsound, 50, TRUE) + + // Let's reserve the other hand + offhand_item = new(user) + offhand_item.name = "[parent_item.name] - offhand" + offhand_item.desc = "Your second grip on [parent_item]." + offhand_item.wielded = TRUE + RegisterSignal(offhand_item, COMSIG_ITEM_DROPPED, PROC_REF(on_drop)) + RegisterSignal(offhand_item, COMSIG_PARENT_QDELETING, PROC_REF(on_destroy)) + user.put_in_inactive_hand(offhand_item) + +/** + * Unwield the two handed item + * + * vars: + * * user The mob/living/carbon that is unwielding the item + * * show_message (option) show a message to chat on unwield + * * can_drop (option) whether 'dropItemToGround' can be called or not. + */ +/datum/component/two_handed/proc/unwield(mob/living/carbon/user, show_message=TRUE, can_drop=TRUE) + if(!wielded) + return + + // wield update status + wielded = FALSE + UnregisterSignal(user, COMSIG_MOB_SWAPPING_HANDS) + SEND_SIGNAL(parent, COMSIG_TWOHANDED_UNWIELD, user) + REMOVE_TRAIT(parent, TRAIT_WIELDED, REF(src)) + unwield_callback?.Invoke(parent, user) + + // update item stats + var/obj/item/parent_item = parent + if(sharpened_increase) + parent_item.force -= sharpened_increase + if(force_multiplier) + parent_item.force /= force_multiplier + else if(force_unwielded) + parent_item.force = force_unwielded + + parent_item.weapon_stats = initial(parent_item.weapon_stats) + + // update the items name to remove the wielded status + var/sf = findtext(parent_item.name, " (Wielded)", -10) // 10 == length(" (Wielded)") + if(sf) + parent_item.name = copytext(parent_item.name, 1, sf) + else + parent_item.name = "[initial(parent_item.name)]" + + // Update icons + parent_item.update_icon() + + if(istype(user)) // tk showed that we might not have a mob here + if(user.get_item_by_slot(ITEM_SLOT_BACK) == parent) + user.update_inv_back() + else + user.update_inv_hands() + + // if the item requires two handed drop the item on unwield + if(require_twohands && can_drop) + user.dropItemToGround(parent, force=TRUE) + + // Show message if requested + if(show_message) + if(iscyborg(user)) + to_chat(user, span_notice("You free up your module.")) + else if(require_twohands) + to_chat(user, span_notice("You drop [parent].")) + else + to_chat(user, span_notice("You are now carrying [parent] with one hand.")) + + // Play sound if set + if(unwieldsound) + playsound(parent_item.loc, unwieldsound, 50, TRUE) + + // Remove the object in the offhand + if(offhand_item) + UnregisterSignal(offhand_item, list(COMSIG_ITEM_DROPPED, COMSIG_PARENT_QDELETING)) + qdel(offhand_item) + // Clear any old refrence to an item that should be gone now + offhand_item = null + +/** + * on_attack triggers on attack with the parent item + */ +/datum/component/two_handed/proc/on_attack(obj/item/source, mob/living/target, mob/living/user) + SIGNAL_HANDLER + if(wielded && attacksound) + var/obj/item/parent_item = parent + playsound(parent_item.loc, attacksound, 50, TRUE) + +/** + * on_update_icon triggers on call to update parent items icon + * + * Updates the icon using icon_wielded if set + */ +/datum/component/two_handed/proc/on_update_icon(obj/item/source) + SIGNAL_HANDLER + if(!wielded) + return NONE + if(!icon_wielded) + return NONE + source.icon_state = icon_wielded + return COMSIG_ATOM_NO_UPDATE_ICON_STATE + +/** + * on_moved Triggers on item moved + */ +/datum/component/two_handed/proc/on_moved(datum/source, mob/user, dir) + SIGNAL_HANDLER + + unwield(user, can_drop=FALSE) + +/** + * on_swap_hands Triggers on swapping hands, blocks swap if the other hand is busy + */ +/datum/component/two_handed/proc/on_swapping_hands(mob/user, obj/item/held_item) + SIGNAL_HANDLER + + if(!held_item) + return + if(held_item == parent) + return COMPONENT_BLOCK_SWAP + +/** + * on_sharpen Triggers on usage of a sharpening stone on the item + */ +/datum/component/two_handed/proc/on_sharpen(obj/item/item, amount, max_amount) + SIGNAL_HANDLER + + if(!item) + return COMPONENT_BLOCK_SHARPEN_BLOCKED + if(sharpened_increase) + return COMPONENT_BLOCK_SHARPEN_ALREADY + var/wielded_val = 0 + if(force_multiplier) + var/obj/item/parent_item = parent + if(wielded) + wielded_val = parent_item.force + else + wielded_val = parent_item.force * force_multiplier + else + wielded_val = force_wielded + if(wielded_val > max_amount) + return COMPONENT_BLOCK_SHARPEN_MAXED + sharpened_increase = min(amount, (max_amount - wielded_val)) + return COMPONENT_BLOCK_SHARPEN_APPLIED + +/** + * The offhand dummy item for two handed items + * + */ +/obj/item/offhand + name = "offhand" + icon_state = "offhand" + w_class = WEIGHT_CLASS_HUGE + item_flags = ABSTRACT + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + var/wielded = FALSE // Off Hand tracking of wielded status + +/obj/item/offhand/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + +/obj/item/offhand/Destroy() + wielded = FALSE + return ..() + +/obj/item/offhand/equipped(mob/user, slot) + . = ..() + if(wielded && !user.is_holding(src) && !QDELETED(src)) + qdel(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4dda5c6d909c..260a5afe78db 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -10,6 +10,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) blocks_emissive = EMISSIVE_BLOCK_GENERIC ///icon state name for inhand overlays var/item_state = null + ///the base icon state used for anything that changes their icon state. + var/base_icon_state ///Icon file for left hand inhand overlays var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' ///Icon file for right inhand overlays @@ -142,6 +144,10 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/printed = FALSE + var/canMouseDown = FALSE + /// Does this item have syndicate only functionality via hud buttons? Needs to be in this scope to encompass all Chameleon items - Hopek + var/syndicate = FALSE + /obj/item/Initialize(mapload) materials = typelist("materials", materials) diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 733066766591..1d524e8d7e42 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -389,49 +389,34 @@ /obj/item/nullrod/tribal_knife/process() slowdown = rand(-2, 2) -/obj/item/nullrod/hammer //this doesn't actually get used, it's more of a visual to select the actual nullrod +/obj/item/nullrod/hammer name = "relic war hammer" desc = "This war hammer cost the chaplain forty thousand space dollars." icon = 'icons/obj/weapons/misc.dmi' icon_state = "hammer" item_state = "hammer" + base_icon_state = "hammer" lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE attack_verb = list("smashed", "bashed", "hammered", "crunched") + sharpness = SHARP_NONE menutab = MENU_WEAPON additional_desc = "Bonk the sinners." -/obj/item/nullrod/hammer/equipped(mob/user, slot, initial) //can't do it on initialize because it initializes before getting put in hands +/obj/item/nullrod/hammer/Initialize(mapload) . = ..() - var/obj/item/twohanded/required/nullrod/hammah = new /obj/item/twohanded/required/nullrod(src) - user.drop_all_held_items() - user.put_in_active_hand(hammah) - qdel(src)//lemme just delete the nullrod you just selected + AddComponent(/datum/component/two_handed, \ + require_twohands = TRUE, \ + ) -/obj/item/twohanded/required/nullrod - name = "relic war hammer" - desc = "This war hammer cost the chaplain forty thousand space dollars." - icon = 'icons/obj/weapons/misc.dmi' - icon_state = "hammer" - item_state = "hammer" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_HUGE - force = 18 //it's not quite a baseball bat - attack_verb = list("smashed", "bashed", "hammered", "crunched", "clobbered") - sharpness = SHARP_NONE - -/obj/item/twohanded/required/nullrod/Initialize(mapload) - . = ..() - AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE) //trust me, this is better than re-coding two-handed weapons - -/obj/item/twohanded/required/nullrod/attack(mob/living/M, mob/living/user)//functions like a throw, but without the wallsplat +/obj/item/nullrod/hammer/attack(mob/living/M, mob/living/user)//functions like a throw, but without the wallsplat . = ..() if(M == user) return + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + return var/atom/throw_target = get_edge_target_turf(M, user.dir) ADD_TRAIT(M, TRAIT_IMPACTIMMUNE, "Nullrod Hammer") var/distance = rand(1,5) @@ -439,7 +424,7 @@ distance = 50 //hehe funny hallway launch M.throw_at(throw_target, distance, 3, user, TRUE, TRUE, callback = CALLBACK(src, PROC_REF(afterimpact), M)) -/obj/item/twohanded/required/nullrod/proc/afterimpact(mob/living/M) +/obj/item/nullrod/hammer/proc/afterimpact(mob/living/M) REMOVE_TRAIT(M, TRAIT_IMPACTIMMUNE, "Nullrod Hammer") /obj/item/nullrod/dualsword diff --git a/code/game/objects/items/two_handed/fireaxe.dm b/code/game/objects/items/two_handed/fireaxe.dm new file mode 100644 index 000000000000..bf18760bd9fb --- /dev/null +++ b/code/game/objects/items/two_handed/fireaxe.dm @@ -0,0 +1,158 @@ +/* + * Fireaxe + */ +/obj/item/fireaxe // DEM AXES MAN, marker -Agouri + icon = 'icons/obj/tools.dmi' + icon_state = "fireaxe0" + base_icon_state = "fireaxe" + lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' + name = "fire axe" + desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" + force = 5 + throwforce = 15 + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut", "axed") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = SHARP_EDGED + max_integrity = 200 + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) + resistance_flags = FIRE_PROOF + wound_bonus = -15 + bare_wound_bonus = 20 + + /// How much damage to do wielded + var/force_wielded = 24 + +/obj/item/fireaxe/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + ) + AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools + +/obj/item/fireaxe/update_icon() + icon_state = "[base_icon_state]0" + return + +/obj/item/fireaxe/suicide_act(mob/user) + user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) + return (BRUTELOSS) + +/obj/item/fireaxe/afterattack(atom/A, mob/user, proximity) + . = ..() + if(!proximity) + return + if(HAS_TRAIT(src, TRAIT_WIELDED)) //destroys shit faster, generally in 1-2 hits. + if(istype(A, /obj/structure/window)) + var/obj/structure/window/W = A + W.take_damage(W.max_integrity*2, BRUTE, MELEE, FALSE, null, armour_penetration) + else if(istype(A, /obj/structure/grille)) + var/obj/structure/grille/G = A + G.take_damage(G.max_integrity*2, BRUTE, MELEE, FALSE, null, armour_penetration) + else if(istype(A, /obj/machinery/door)) //Nines hits for reinforced airlock, seven for normal + var/obj/machinery/door/D = A + D.take_damage((force+25), BRUTE, MELEE, FALSE, null, armour_penetration) + else if(istype(A, /obj/structure/door_assembly)) //Two hits for frames left behind + var/obj/machinery/door/D = A + D.take_damage((force+25), BRUTE, MELEE, FALSE, null, armour_penetration) + +/* + * Metal Hydrogen Axe + */ +/obj/item/fireaxe/metal_h2_axe // Blatant imitation of the fireaxe, but made out of metallic hydrogen + icon_state = "metalh2_axe0" + base_icon_state = "metalh2_axe" + name = "metallic hydrogen axe" + desc = "A large, menacing axe made of an unknown substance that the most elder atmosians call Metallic Hydrogen. Truly an otherworldly weapon." + force_wielded = 18 + +/* + * Energy Fire Axe + */ + +/obj/item/fireaxe/energy + name = "energy fire axe" + desc = "A massive, two handed, energy-based hardlight axe capable of cutting through solid metal. 'Glory to atmosia' is carved on the side of the handle." + icon = 'icons/obj/weapons/energy.dmi' + icon_state = "energy-fireaxe0" + base_icon_state = "energy-fireaxe" + armour_penetration = 50 // Probably doesn't care much for armor given how it can destroy solid metal structures + block_chance = 50 // Big handle and large flat energy blade, good for blocking things + heat = 1800 // It's a FIRE axe + w_class = WEIGHT_CLASS_NORMAL + hitsound = "swing_hit" + light_system = MOVABLE_LIGHT + light_range = 6 //This is NOT a stealthy weapon + light_color = "#ff4800" //red-orange + light_on = FALSE + sharpness = SHARP_NONE + resistance_flags = FIRE_PROOF | ACID_PROOF + + force_wielded = 25 + + var/w_class_on = WEIGHT_CLASS_BULKY + +/obj/item/fireaxe/energy/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + wieldsound = 'sound/weapons/saberon.ogg', \ + unwieldsound = 'sound/weapons/saberoff.ogg', \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/obj/item/fireaxe/energy/proc/on_wield(obj/item/source, mob/living/carbon/user) + w_class = w_class_on + sharpness = SHARP_EDGED + hitsound = 'sound/weapons/blade1.ogg' + START_PROCESSING(SSobj, src) + set_light_on(TRUE) + +/obj/item/fireaxe/energy/proc/on_unwield(obj/item/source, mob/living/carbon/user) + w_class = initial(w_class) + sharpness = initial(sharpness) + hitsound = "swing_hit" + STOP_PROCESSING(SSobj, src) + set_light_on(FALSE) + +/obj/item/fireaxe/energy/attack(mob/living/M, mob/living/user) + ..() + M.ignite_mob() // Ignites you if you're flammable + +/obj/item/fireaxe/energy/afterattack(atom/A, mob/user, proximity) + . = ..() + if(!proximity) + return + if(HAS_TRAIT(src, TRAIT_WIELDED)) // Does x2 damage against inanimate objects like machines, structures, mechs, etc + if(isobj(A) && !isitem(A)) + var/obj/O = A + O.take_damage(force, BRUTE, MELEE, FALSE, null, armour_penetration) + +/obj/item/fireaxe/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + return 0 // large energy blade can only block stuff if it's actually on + return ..() + +/obj/item/fireaxe/energy/ignition_effect(atom/A, mob/user) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + return "[user] tries to light [A] with [src] while it's off. Nothing happens." + playsound(loc, hitsound, get_clamped_volume(), 1, -1) + return "[user] casually raises [src] up to [user.p_their()] face and lights [A]. Hot damn." + +/obj/item/fireaxe/energy/is_hot() + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + return FALSE // Shouldn't be able to ignite stuff if it's off + return ..() + +/obj/item/fireaxe/energy/process() + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + STOP_PROCESSING(SSobj, src) + return PROCESS_KILL + open_flame(heat) diff --git a/code/game/objects/items/two_handed/spears.dm b/code/game/objects/items/two_handed/spears.dm new file mode 100644 index 000000000000..2b052fca77e5 --- /dev/null +++ b/code/game/objects/items/two_handed/spears.dm @@ -0,0 +1,245 @@ +//spears +/obj/item/spear + icon = 'icons/obj/weapons/spears.dmi' + icon_state = "spearglass0" + base_icon_state = "spearglass" + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "spear" + desc = "A haphazardly-constructed yet still deadly weapon of ancient design." + force = 10 + max_integrity = 100 + weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + throwforce = 20 + throw_speed = 4 + embedding = list("embedded_impact_pain_multiplier" = 3) + armour_penetration = 10 + materials = list(/datum/material/iron=1150, /datum/material/glass=2075) + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + sharpness = SHARP_EDGED + max_integrity = 200 + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) + break_message = "%SRC's cable binding suddenly snaps" + wound_bonus = -15 + bare_wound_bonus = 15 + + ///How much damage to deal when wielded. + var/force_wielded = 8 + ///Whether the spear can have an explosive attached to it. + var/can_be_explosive = TRUE + +/obj/item/spear/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 2, DAMAGE_HIGH = 5), \ + ) + AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. + +/obj/item/spear/suicide_act(mob/living/carbon/user) + user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + return BRUTELOSS + +/obj/item/spear/Initialize(mapload) + . = ..() + AddComponent(/datum/component/jousting) + +/obj/item/spear/update_icon() + icon_state = "[base_icon_state]0" + +/obj/item/spear/deconstruct() //we drop our rod and maybe the glass shard used + new /obj/item/stack/rods(get_turf(src)) + if(!prob(20)) //20% chance to save our spearhead + break_message += " and its head smashes into pieces!" + return ..() + var/spearhead = base_icon_state == "spear_plasma" ? /obj/item/shard/plasma : /obj/item/shard //be honest we have this stored //we do NOT have this stored + new spearhead(get_turf(src)) + break_message += "!" + ..() + +/obj/item/spear/CheckParts(list/parts_list) + var/obj/item/shard/tip = locate() in parts_list + if (istype(tip, /obj/item/shard/plasma)) + force_wielded += 1 + force += 1 + throwforce += 1 + righthand_file = 'yogstation/icons/mob/inhands/weapons/polearms_righthand.dmi' //yogs + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' //yogs + base_icon_state = "spearplasma" + update_icon() + qdel(tip) + var/obj/item/grenade/G = locate() in parts_list + if(G && can_be_explosive) + var/obj/item/spear/explosive/lance = new /obj/item/spear/explosive(src.loc, G) + lance.force_wielded = force_wielded + lance.force = force + lance.throwforce = throwforce + lance.base_icon_state = base_icon_state + parts_list -= G + qdel(src) + ..() + + +/obj/item/spear/explosive + name = "explosive lance" + base_icon_state = "spearbomb" + + ///The grenade attached to the explosive spear. + var/obj/item/grenade/explosive + ///The war cry, editable by the player, that gets yelled when attacking. + var/war_cry = "AAAAARGH!!!" + +/obj/item/spear/explosive/Initialize(mapload, obj/item/grenade/default_grenade) + . = ..() + if(!default_grenade) + default_grenade = new /obj/item/grenade/iedcasing() //For admin-spawned explosive lances + default_grenade.forceMove(src) + explosive = default_grenade + desc = "A makeshift spear with [default_grenade] attached to it" + update_icon() + +/obj/item/spear/explosive/suicide_act(mob/living/carbon/user) + user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + user.say("[war_cry]", forced = "spear warcry") + explosive.forceMove(user) + explosive.prime() + user.gib() + qdel(src) + return BRUTELOSS + +/obj/item/spear/explosive/examine(mob/user) + . = ..() + . += span_notice("Alt-click to set your war cry.") + +/obj/item/spear/explosive/AltClick(mob/user) + if(!user.canUseTopic(src, BE_CLOSE)) + return + . = ..() + if(istype(user) && loc == user) + var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) + if(input) + war_cry = input + +/obj/item/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) + . = ..() + if(!proximity) + return + if(HAS_TRAIT(src, TRAIT_WIELDED)) + user.say("[war_cry]", forced = "spear warcry") + explosive.forceMove(AM) + explosive.prime() + qdel(src) + +/** + * Grey Tide + */ +/obj/item/twohanded/spear/grey_tide + icon_state = "spearglass0" + name = "\improper Grey Tide" + desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." + force = 15 + weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) + throwforce = 20 + throw_speed = 4 + attack_verb = list("gored") + + force_wielded = 10 + +/obj/item/spear/grey_tide/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0), \ + ) + +/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) + . = ..() + if(!proximity) + return + user.faction |= "greytide([REF(user)])" + if(isliving(AM)) + var/mob/living/L = AM + if(istype (L, /mob/living/simple_animal/hostile/illusion)) + return + if(!L.stat && prob(50)) + var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) + M.faction = user.faction.Copy() + M.Copy_Parent(user, 100, user.health/2.5, 12, 30) + M.GiveTarget(L) + +/* + * Bone Spear + */ +/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. + icon = 'icons/obj/weapons/spears.dmi' + icon_state = "bone_spear0" + base_icon_state = "bone_spear" + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "bone spear" + desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." + force = 11 + max_integrity = 100 + weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + throwforce = 22 + throw_speed = 4 + embedding = list("embedded_impact_pain_multiplier" = 3) + armour_penetration = 15 //Enhanced armor piercing + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + sharpness = SHARP_EDGED + + force_wielded = 9 //I have no idea how to balance + can_be_explosive = FALSE + +/obj/item/spear/bonespear/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0), \ + ) + +/obj/item/spear/bonespear/chitinspear //like a mix of a bone spear and bone axe, but more like a bone spear. And better. + icon = 'icons/obj/weapons/spears.dmi' + icon_state = "chitin_spear0" + base_icon_state = "chitin_spear" + name = "chitin spear" + desc = "A well constructed spear with a sharpened edge akin to a naginata, making it equally great for slicing and throwing." + force = 13 + throwforce = 25 + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored", "sliced", "ripped", "cut") + + force_wielded = 10 + +/obj/item/spear/bamboospear + icon = 'icons/obj/weapons/spears.dmi' + icon_state = "bamboo_spear0" + base_icon_state = "bamboo_spear" + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "bamboo spear" + desc = "A haphazardly-constructed bamboo stick with a sharpened tip, ready to poke holes into unsuspecting people." + force = 10 + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + throwforce = 22 + throw_speed = 4 + embedding = list("embedded_impact_pain_multiplier" = 2) + armour_penetration = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + sharpness = SHARP_EDGED + + force_wielded = 8 + can_be_explosive = FALSE diff --git a/code/game/objects/items/two_handed/updatepaths.txt b/code/game/objects/items/two_handed/updatepaths.txt new file mode 100644 index 000000000000..9b23b37c5bc0 --- /dev/null +++ b/code/game/objects/items/two_handed/updatepaths.txt @@ -0,0 +1,5 @@ +/obj/item/twohanded/bonespear : /obj/item/spear/bonespear +/obj/item/twohanded/bonespear/chitinspear : /obj/item/spear/bonespear/chitinspear +/obj/item/twohanded/bamboospear : /obj/item/spear/bamboospear +/obj/item/twohanded/required/@SUBTYPES : /obj/item/@SUBTYPES +/obj/item/twohanded/@SUBTYPES : /obj/item/@SUBTYPES diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index ec890b100ebf..f5f643faf911 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -226,154 +226,6 @@ to_chat(user, span_notice("You drop [src].")) ..(user, FALSE) -/* - * Fireaxe - */ -/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri - icon = 'icons/obj/tools.dmi' - icon_state = "fireaxe0" - lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - force = 5 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 19 - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut", "axed") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = SHARP_EDGED - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) - resistance_flags = FIRE_PROOF - wound_bonus = -15 - bare_wound_bonus = 20 - -/obj/item/twohanded/fireaxe/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools - -/obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "fireaxe[wielded]" - return - -/obj/item/twohanded/fireaxe/suicide_act(mob/user) - user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) - return (BRUTELOSS) - -/obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded && !QDELETED(A)) //destroys windows and grilles in one or two hits, most of the time - if(istype(A, /obj/structure/window)) - var/obj/structure/window/W = A - W.take_damage(W.max_integrity*2, BRUTE, MELEE, FALSE, null, armour_penetration) - else if(istype(A, /obj/structure/grille)) - var/obj/structure/grille/G = A - G.take_damage(G.max_integrity*2, BRUTE, MELEE, FALSE, null, armour_penetration) - else if(istype(A, /obj/machinery/door)) //Nines hits for reinforced airlock, seven for normal - var/obj/machinery/door/D = A - D.take_damage((force+25), BRUTE, MELEE, FALSE, null, armour_penetration) - else if(istype(A, /obj/structure/door_assembly)) //Two hits for frames left behind - var/obj/machinery/door/D = A - D.take_damage((force+25), BRUTE, MELEE, FALSE, null, armour_penetration) - -/* - * Metal Hydrogen Axe - */ -/obj/item/twohanded/fireaxe/metal_h2_axe // Blatant imitation of the fireaxe, but made out of metallic hydrogen - icon_state = "metalh2_axe0" - name = "metallic hydrogen axe" - desc = "A large, menacing axe made of an unknown substance that the most elder atmosians call Metallic Hydrogen. Truly an otherworldly weapon." - force_wielded = 18 - -/obj/item/twohanded/fireaxe/metal_h2_axe/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "metalh2_axe[wielded]" - return - -/* - * Energy Fire Axe - */ - -/obj/item/twohanded/fireaxe/energy - name = "energy fire axe" - desc = "A massive, two handed, energy-based hardlight axe capable of cutting through solid metal. 'Glory to atmosia' is carved on the side of the handle." - icon = 'icons/obj/weapons/energy.dmi' - icon_state = "energy-fireaxe0" - force_wielded = 25 - armour_penetration = 50 // Probably doesn't care much for armor given how it can destroy solid metal structures - block_chance = 50 // Big handle and large flat energy blade, good for blocking things - heat = 1800 // It's a FIRE axe - w_class = WEIGHT_CLASS_NORMAL - var/w_class_on = WEIGHT_CLASS_BULKY - hitsound = "swing_hit" - wieldsound = 'sound/weapons/saberon.ogg' - unwieldsound = 'sound/weapons/saberoff.ogg' - light_system = MOVABLE_LIGHT - light_range = 6 //This is NOT a stealthy weapon - light_color = "#ff4800" //red-orange - light_on = FALSE - sharpness = SHARP_NONE - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/twohanded/fireaxe/energy/wield(mob/living/carbon/M) //Specific wield () to switch hitsounds. - ..() - if(wielded) - sharpness = SHARP_EDGED - w_class = w_class_on - hitsound = 'sound/weapons/blade1.ogg' - START_PROCESSING(SSobj, src) - set_light_on(TRUE) - -/obj/item/twohanded/fireaxe/energy/unwield() //Specific unwield () to switch hitsounds. - sharpness = initial(sharpness) - w_class = initial(w_class) - ..() - hitsound = "swing_hit" - STOP_PROCESSING(SSobj, src) - set_light_on(FALSE) - -/obj/item/twohanded/fireaxe/energy/attack(mob/living/M, mob/living/user) - ..() - M.ignite_mob() // Ignites you if you're flammable - -/obj/item/twohanded/fireaxe/energy/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded && !QDELETED(A)) // Does x2 damage against inanimate objects like machines, structures, mechs, etc - if(isobj(A) && !isitem(A)) - var/obj/O = A - O.take_damage(force, BRUTE, MELEE, FALSE, null, armour_penetration) - -/obj/item/twohanded/fireaxe/energy/update_icon() - icon_state = "energy-fireaxe[wielded]" - SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) - -/obj/item/twohanded/fireaxe/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) - if(!wielded) - return 0 // large energy blade can only block stuff if it's actually on - return ..() - -/obj/item/twohanded/fireaxe/energy/ignition_effect(atom/A, mob/user) - if(!wielded) - return "[user] tries to light [A] with [src] while it's off. Nothing happens." - playsound(loc, hitsound, get_clamped_volume(), 1, -1) - return "[user] casually raises [src] up to [user.p_their()] face and lights [A]. Hot damn." - -/obj/item/twohanded/fireaxe/energy/is_hot() - if(!wielded) - return FALSE // Shouldn't be able to ignite stuff if it's off - ..() - -/obj/item/twohanded/fireaxe/energy/process() - if(!wielded) - STOP_PROCESSING(SSobj, src) - return PROCESS_KILL - open_flame(heat) - /* * Double-Bladed Energy Swords - Cheridan */ @@ -581,132 +433,6 @@ return ..() return FALSE -//spears -/obj/item/twohanded/spear - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "spearglass0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - force = 10 - max_integrity = 100 - weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 8 - throwforce = 20 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 3) - armour_penetration = 10 - materials = list(/datum/material/iron=1150, /datum/material/glass=2075) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = SHARP_EDGED - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) - break_message = "%SRC's cable binding suddenly snaps" - var/war_cry = "AAAAARGH!!!" - var/icon_prefix = "spearglass" - wound_bonus = -15 - bare_wound_bonus = 15 - -/obj/item/twohanded/spear/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. - -/obj/item/twohanded/spear/suicide_act(mob/living/carbon/user) - user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return BRUTELOSS - -/obj/item/twohanded/spear/Initialize(mapload) - . = ..() - AddComponent(/datum/component/jousting) - -/obj/item/twohanded/spear/update_icon() - icon_state = "[icon_prefix][wielded]" - -/obj/item/twohanded/spear/deconstruct() //we drop our rod and maybe the glass shard used - new /obj/item/stack/rods(get_turf(src)) - if(!prob(20)) //20% chance to save our spearhead - break_message += " and its head smashes into pieces!" - return ..() - var/spearhead = icon_prefix == "spear_plasma" ? /obj/item/shard/plasma : /obj/item/shard //be honest we have this stored //we do NOT have this stored - new spearhead(get_turf(src)) - break_message += "!" - ..() - -/obj/item/twohanded/spear/CheckParts(list/parts_list) - var/obj/item/shard/tip = locate() in parts_list - if (istype(tip, /obj/item/shard/plasma)) - force_wielded += 1 - force += 1 - throwforce += 1 - righthand_file = 'yogstation/icons/mob/inhands/weapons/polearms_righthand.dmi' //yogs - mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' //yogs - icon_prefix = "spearplasma" - update_icon() - qdel(tip) - var/obj/item/grenade/G = locate() in parts_list - if(G) - var/obj/item/twohanded/spear/explosive/lance = new /obj/item/twohanded/spear/explosive(src.loc, G) - lance.force_wielded = force_wielded - lance.force = force - lance.throwforce = throwforce - lance.icon_prefix = icon_prefix - parts_list -= G - qdel(src) - ..() - - -/obj/item/twohanded/spear/explosive - name = "explosive lance" - var/obj/item/grenade/explosive = null - -/obj/item/twohanded/spear/explosive/Initialize(mapload, obj/item/grenade/G) - . = ..() - if (!G) - G = new /obj/item/grenade/iedcasing() //For admin-spawned explosive lances - G.forceMove(src) - explosive = G - desc = "A makeshift spear with [G] attached to it" - update_icon() - -/obj/item/twohanded/spear/explosive/suicide_act(mob/living/carbon/user) - user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(user) - explosive.prime() - user.gib() - qdel(src) - return BRUTELOSS - -/obj/item/twohanded/spear/explosive/examine(mob/user) - . = ..() - . += span_notice("Alt-click to set your war cry.") - -/obj/item/twohanded/spear/explosive/update_icon() - icon_state = "spearbomb[wielded]" - -/obj/item/twohanded/spear/explosive/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - ..() - if(istype(user) && loc == user) - var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) - if(input) - src.war_cry = input - -/obj/item/twohanded/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(AM) - explosive.prime() - qdel(src) - // CHAINSAW /datum/action/item_action/startchainsaw @@ -794,34 +520,6 @@ . = ..() AddComponent(/datum/component/lifesteal, 30) -//GREY TIDE -/obj/item/twohanded/spear/grey_tide - icon_state = "spearglass0" - name = "\improper Grey Tide" - desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." - force = 15 - force_wielded = 10 - weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - throwforce = 20 - throw_speed = 4 - attack_verb = list("gored") - -/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) - . = ..() - if(!proximity) - return - user.faction |= "greytide([REF(user)])" - if(isliving(AM)) - var/mob/living/L = AM - if(istype (L, /mob/living/simple_animal/hostile/illusion)) - return - if(!L.stat && prob(50)) - var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) - M.faction = user.faction.Copy() - M.Copy_Parent(user, 100, user.health/2.5, 12, 30) - M.GiveTarget(L) - /obj/item/twohanded/pitchfork icon = 'icons/obj/weapons/spears.dmi' icon_state = "pitchfork0" @@ -974,47 +672,6 @@ /obj/item/twohanded/fireaxe/boneaxe/update_icon() icon_state = "bone_axe[wielded]" -/* - * Bone Spear - */ -/obj/item/twohanded/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "bone_spear0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "bone spear" - desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." - force = 11 - max_integrity = 100 - weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 9 //I have no idea how to balance - throwforce = 22 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 3) - armour_penetration = 15 //Enhanced armor piercing - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = SHARP_EDGED - -/obj/item/twohanded/bonespear/update_icon() - icon_state = "bone_spear[wielded]" - -/obj/item/twohanded/bonespear/chitinspear //like a mix of a bone spear and bone axe, but more like a bone spear. And better. - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "chitin_spear0" - name = "chitin spear" - desc = "A well constructed spear with a sharpened edge akin to a naginata, making it equally great for slicing and throwing." - force = 13 - force_wielded = 10 - throwforce = 25 - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored", "sliced", "ripped", "cut") - -/obj/item/twohanded/bonespear/chitinspear/update_icon() - icon_state = "chitin_spear[wielded]" - /obj/item/twohanded/binoculars name = "binoculars" desc = "Used for long-distance surveillance." @@ -1060,28 +717,6 @@ lad.regenerate_icons() lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir) -/obj/item/twohanded/bamboospear - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "bamboo_spear0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "bamboo spear" - desc = "A haphazardly-constructed bamboo stick with a sharpened tip, ready to poke holes into unsuspecting people." - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 8 - throwforce = 22 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 2) - armour_penetration = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = SHARP_EDGED - -/obj/item/twohanded/bamboospear/update_icon() - icon_state = "bamboo_spear[wielded]" - /* * Vxtvul Hammer */ diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 8811dc9c4c8d..0d05a9729a33 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -832,6 +832,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 item_state = "nothing" force = 0 throwforce = 0 + w_class = WEIGHT_CLASS_HUGE item_flags = DROPDEL | ABSTRACT /obj/item/twohanded/required/raisedhands/attack(mob/living/M, mob/living/user) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index f3cd67f402b5..c6332a2431e6 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -229,7 +229,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ icon = 'icons/obj/mining.dmi' icon_state = "Gibtonite ore" item_state = "Gibtonite ore" - w_class = WEIGHT_CLASS_BULKY + w_class = WEIGHT_CLASS_HUGE throw_range = 0 var/primed = FALSE var/det_time = 100 diff --git a/yogstation.dme b/yogstation.dme index 1d4632a51ae4..14d8042c571d 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -155,6 +155,7 @@ #include "code\__DEFINES\dcs\signals\signals_storage.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" #include "code\__DEFINES\dcs\signals\signals_turf.dm" +#include "code\__DEFINES\dcs\signals\signals_twohand.dm" #include "code\__DEFINES\dcs\signals\signals_wash.dm" #include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_attack.dm" #include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_lighting.dm" @@ -547,6 +548,7 @@ #include "code\datums\components\tactical.dm" #include "code\datums\components\tether.dm" #include "code\datums\components\thermite.dm" +#include "code\datums\components\twohanded.dm" #include "code\datums\components\uplink.dm" #include "code\datums\components\waddling.dm" #include "code\datums\components\wearertargeting.dm" @@ -1326,6 +1328,8 @@ #include "code\game\objects\items\tools\weldingtool.dm" #include "code\game\objects\items\tools\wirecutters.dm" #include "code\game\objects\items\tools\wrench.dm" +#include "code\game\objects\items\two_handed\fireaxe.dm" +#include "code\game\objects\items\two_handed\spears.dm" #include "code\game\objects\structures\aliens.dm" #include "code\game\objects\structures\artstuff.dm" #include "code\game\objects\structures\barsigns.dm" From b65e63ccaaf5bb5a98bcb6d99dc6c35a79fc5f52 Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Wed, 21 Jun 2023 23:19:01 -0400 Subject: [PATCH 02/15] Saving my progress again. --- code/controllers/subsystem/traumas.dm | 6 +- code/datums/components/crafting/antag.dm | 10 +- code/datums/components/crafting/recipes.dm | 16 +- code/datums/components/crafting/weapons.dm | 14 +- code/datums/wires/explosive.dm | 4 +- code/game/machinery/doors/airlock.dm | 4 +- code/game/machinery/doors/door.dm | 2 +- code/game/objects/effects/mines.dm | 18 +- code/game/objects/items/RCL.dm | 73 +-- code/game/objects/items/binoculars.dm | 50 ++ code/game/objects/items/defib.dm | 90 ++-- code/game/objects/items/melee/transforming.dm | 1 - code/game/objects/items/raised_hand.dm | 18 + .../objects/items/robot/robot_upgrades.dm | 8 +- .../objects/items/stacks/sheets/mineral.dm | 2 +- .../items/stacks/sheets/sheet_types.dm | 4 +- code/game/objects/items/storage/book.dm | 4 +- .../game/objects/items/storage/uplink_kits.dm | 2 +- .../objects/items/two_handed/baseball_bat.dm | 80 ++++ code/game/objects/items/two_handed/broom.dm | 80 ++++ .../game/objects/items/two_handed/chainsaw.dm | 85 ++++ code/game/objects/items/two_handed/fireaxe.dm | 16 +- .../items/two_handed/highfrequencyblade.dm | 58 +++ code/game/objects/items/two_handed/spears.dm | 42 +- .../objects/items/two_handed/updatepaths.txt | 13 +- code/game/objects/items/twohanded.dm | 440 +----------------- code/game/objects/items/weaponry.dm | 22 +- .../crates_lockers/closets/secure/medical.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 2 +- code/game/objects/structures/fireaxe.dm | 6 +- code/game/objects/structures/flora.dm | 17 +- .../objects/structures/ghost_role_spawners.dm | 4 +- code/game/objects/structures/headpike.dm | 8 +- code/game/objects/structures/janicart.dm | 6 +- code/game/turfs/simulated/minerals.dm | 2 +- .../turfs/simulated/wall/mineral_walls.dm | 2 +- code/game/turfs/turf.dm | 2 +- code/modules/admin/fun_balloon.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 25 +- .../antagonists/fugitive/fugitive_outfits.dm | 2 +- .../antagonists/revolution/revolution.dm | 2 +- .../antagonists/wizard/equipment/artefact.dm | 2 +- .../equipment/spellbook_entries/offensive.dm | 2 +- .../awaymissions/mission_code/snowdin.dm | 4 +- code/modules/cargo/bounties/assistant.dm | 8 +- code/modules/cargo/bounties/engineering.dm | 2 +- code/modules/cargo/bounties/mining.dm | 2 +- code/modules/cargo/exports/lavaland.dm | 2 +- code/modules/cargo/exports/weapons.dm | 2 +- code/modules/cargo/packs.dm | 12 +- code/modules/clothing/outfits/imperial.dm | 2 +- code/modules/clothing/outfits/standard.dm | 4 +- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- code/modules/clothing/suits/armor.dm | 10 +- .../recipes/tablecraft/recipes_burger.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 12 +- code/modules/mining/lavaland/world_anvil.dm | 4 +- code/modules/mining/ores_coins.dm | 20 +- code/modules/mob/living/emote.dm | 4 +- .../mob/living/silicon/robot/robot_modules.dm | 2 +- .../living/simple_animal/friendly/catslug.dm | 6 +- .../hostile/mining_mobs/hivelord.dm | 2 +- .../living/simple_animal/hostile/skeleton.dm | 2 +- code/modules/pool/components/swimming.dm | 4 +- .../pool/components/swimming_felinid.dm | 2 +- code/modules/pool/pool_items.dm | 20 +- code/modules/power/cable.dm | 4 +- code/modules/projectiles/guns/ballistic.dm | 2 +- .../research/designs/autolathe_designs.dm | 2 +- .../xenobiology/crossbreeding/_weapons.dm | 6 +- .../xenobiology/crossbreeding/burning.dm | 2 +- code/modules/surgery/advanced/revival.dm | 8 +- code/modules/surgery/amputation.dm | 2 +- code/modules/surgery/organic_steps.dm | 6 +- .../modules/surgery/prosthetic_replacement.dm | 4 +- code/modules/uplink/uplink_items.dm | 4 +- code/modules/vending/wardrobes.dm | 2 +- yogstation.dme | 6 + .../_globalvars/lists/maintenance_loot.dm | 8 +- .../code/game/gamemodes/battle_royale/loot.dm | 20 +- .../code/modules/jobs/job_types/tourist.dm | 2 +- 81 files changed, 712 insertions(+), 744 deletions(-) create mode 100644 code/game/objects/items/binoculars.dm create mode 100644 code/game/objects/items/raised_hand.dm create mode 100644 code/game/objects/items/two_handed/baseball_bat.dm create mode 100644 code/game/objects/items/two_handed/broom.dm create mode 100644 code/game/objects/items/two_handed/chainsaw.dm create mode 100644 code/game/objects/items/two_handed/highfrequencyblade.dm diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index ac90d508acd8..a7179f51f679 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -70,7 +70,7 @@ SUBSYSTEM_DEF(traumas) /obj/item/trash/cheesie)), "greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod, - /obj/item/twohanded/spear, /obj/item/clothing/mask/gas)), + /obj/item/melee/spear, /obj/item/clothing/mask/gas)), "lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail, /obj/item/organ/tail/lizard, /obj/item/reagent_containers/food/drinks/bottle/lizardwine)), @@ -111,7 +111,7 @@ SUBSYSTEM_DEF(traumas) /obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)), "the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome, - /obj/item/melee/cultblade, /obj/item/twohanded/required/cult_bastard, /obj/item/restraints/legcuffs/bola/cult, + /obj/item/melee/cultblade, /obj/item/melee/cult_bastard, /obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/cultrobes, /obj/item/clothing/suit/space/hardsuit/cult, /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune, /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie, @@ -142,7 +142,7 @@ SUBSYSTEM_DEF(traumas) "anime" = typecacheof(list(/obj/item/clothing/under/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi, /obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/head/kitty/genuine, /obj/item/clothing/suit/space/space_ninja, - /obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, /obj/item/twohanded/vibro_weapon, /obj/item/horrortentacle, + /obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, /obj/item/vibro_weapon, /obj/item/horrortentacle, /obj/item/nullrod/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)) ) diff --git a/code/datums/components/crafting/antag.dm b/code/datums/components/crafting/antag.dm index 53be3491f07c..bee860e3a44a 100644 --- a/code/datums/components/crafting/antag.dm +++ b/code/datums/components/crafting/antag.dm @@ -6,7 +6,7 @@ // Weapons /datum/crafting_recipe/metal_baseball_bat name = "Titanium Baseball Bat" - result = /obj/item/twohanded/required/baseball_bat/metal_bat + result = /obj/item/melee/baseball_bat/metal_bat reqs = list(/obj/item/stack/sheet/mineral/titanium = 10 ) tools = list(TOOL_WELDER) //to weld the bat together @@ -16,12 +16,12 @@ /datum/crafting_recipe/lance name = "Explosive Lance (Grenade)" - result = /obj/item/twohanded/spear - reqs = list(/obj/item/twohanded/spear = 1, + result = /obj/item/melee/spear + reqs = list(/obj/item/melee/spear = 1, /obj/item/grenade = 1) - blacklist = list(/obj/item/twohanded/spear/explosive, + blacklist = list(/obj/item/melee/spear/explosive, /obj/item/grenade/flashbang) - parts = list(/obj/item/twohanded/spear = 1, + parts = list(/obj/item/melee/spear = 1, /obj/item/grenade = 1) time = 1.5 SECONDS category = CAT_WEAPONRY diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 8c7e036901c9..ea93e8a6fdf2 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -361,31 +361,31 @@ /datum/crafting_recipe/headpike name = "Spike Head (Glass Spear)" time = 6.5 SECONDS - reqs = list(/obj/item/twohanded/spear = 1, + reqs = list(/obj/item/melee/spear = 1, /obj/item/bodypart/head = 1) parts = list(/obj/item/bodypart/head = 1, - /obj/item/twohanded/spear = 1) - blacklist = list(/obj/item/twohanded/bonespear, /obj/item/twohanded/bamboospear) + /obj/item/melee/spear = 1) + blacklist = list(/obj/item/melee/spear/bonespear, /obj/item/melee/spear/bamboospear) result = /obj/structure/headpike/glass category = CAT_PRIMAL /datum/crafting_recipe/headpikebone name = "Spike Head (Bone Spear)" time = 6.5 SECONDS - reqs = list(/obj/item/twohanded/bonespear = 1, + reqs = list(/obj/item/melee/spear/bonespear = 1, /obj/item/bodypart/head = 1) parts = list(/obj/item/bodypart/head = 1, - /obj/item/twohanded/bonespear = 1) + /obj/item/melee/spear/bonespear = 1) result = /obj/structure/headpike/bone category = CAT_PRIMAL /datum/crafting_recipe/headpikebamboo name = "Spike Head (Bamboo Spear)" time = 6.5 SECONDS - reqs = list(/obj/item/twohanded/bamboospear = 1, + reqs = list(/obj/item/melee/spear/bamboospear = 1, /obj/item/bodypart/head = 1) parts = list(/obj/item/bodypart/head = 1, - /obj/item/twohanded/bamboospear = 1) + /obj/item/melee/spear/bamboospear = 1) result = /obj/structure/headpike/bamboo category = CAT_PRIMAL @@ -409,7 +409,7 @@ /datum/crafting_recipe/rcl name = "Makeshift Rapid Cable Layer" - result = /obj/item/twohanded/rcl/ghetto + result = /obj/item/rcl/ghetto time = 4 SECONDS tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH) reqs = list(/obj/item/stack/sheet/metal = 15) diff --git a/code/datums/components/crafting/weapons.dm b/code/datums/components/crafting/weapons.dm index ea03e590a527..ebe1f0da56a6 100644 --- a/code/datums/components/crafting/weapons.dm +++ b/code/datums/components/crafting/weapons.dm @@ -210,7 +210,7 @@ /datum/crafting_recipe/chainsaw name = "Chainsaw" - result = /obj/item/twohanded/required/chainsaw + result = /obj/item/melee/chainsaw reqs = list(/obj/item/circular_saw = 1, /obj/item/stack/cable_coil = 3, /obj/item/stack/sheet/plasteel = 5) @@ -221,7 +221,7 @@ /datum/crafting_recipe/spear name = "Spear" - result = /obj/item/twohanded/spear + result = /obj/item/melee/spear reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/shard = 1, /obj/item/stack/rods = 1) @@ -255,7 +255,7 @@ result = /obj/item/bombcore/chemical reqs = list( /obj/item/stock_parts/matter_bin = 1, - /obj/item/twohanded/required/gibtonite = 1, + /obj/item/melee/gibtonite = 1, /obj/item/grenade/chem_grenade = 2 ) parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2) @@ -310,7 +310,7 @@ /datum/crafting_recipe/bonespear name = "Bone Spear" - result = /obj/item/twohanded/bonespear + result = /obj/item/melee/spear/bonespear time = 3 SECONDS reqs = list(/obj/item/stack/sheet/bone = 4, /obj/item/stack/sheet/sinew = 1) @@ -319,7 +319,7 @@ /datum/crafting_recipe/boneaxe name = "Bone Axe" - result = /obj/item/twohanded/fireaxe/boneaxe + result = /obj/item/fireaxe/boneaxe time = 5 SECONDS reqs = list(/obj/item/stack/sheet/bone = 6, /obj/item/stack/sheet/sinew = 3) @@ -328,9 +328,9 @@ /datum/crafting_recipe/chitinspear name = "Chitin Spear" - result = /obj/item/twohanded/bonespear/chitinspear //take a bonespear, reinforce it with some chitin and resin, profit? + result = /obj/item/melee/spear/bonespear/chitinspear //take a bonespear, reinforce it with some chitin and resin, profit? time = 7.5 SECONDS - reqs = list(/obj/item/twohanded/bonespear = 1, + reqs = list(/obj/item/melee/spear/bonespear = 1, /obj/item/stack/sheet/sinew = 3, /obj/item/stack/sheet/ashresin = 1, /obj/item/stack/sheet/animalhide/weaver_chitin = 6) diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index 744df7059312..b7691aefcbc7 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -117,8 +117,8 @@ /datum/wires/explosive/gibtonite - holder_type = /obj/item/twohanded/required/gibtonite + holder_type = /obj/item/melee/gibtonite /datum/wires/explosive/gibtonite/explode() - var/obj/item/twohanded/required/gibtonite/P = holder + var/obj/item/melee/gibtonite/P = holder P.GibtoniteReaction(null, 2) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a85a6d3dbddc..7b0b1dc7c120 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1268,8 +1268,8 @@ else if(brace) to_chat(user, span_warning("The airlock won't budge!")) else if( !welded && !operating) - if(istype(I, /obj/item/twohanded/fireaxe)) //being fireaxe'd - var/obj/item/twohanded/fireaxe/F = I + if(istype(I, /obj/item/fireaxe)) //being fireaxe'd + var/obj/item/fireaxe/F = I if(!F.wielded) to_chat(user, span_warning("You need to be wielding the fire axe to do that!")) return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index ff0912f09588..972d663e43d2 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -245,7 +245,7 @@ /obj/machinery/door/attackby(obj/item/I, mob/user, params) add_fingerprint(user) - if(user.a_intent != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/twohanded/fireaxe))) + if(user.a_intent != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/fireaxe))) try_to_crowbar(I, user) return 1 else if(istype(I, /obj/item/zombie_hand/gamemode)) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 9c4618da8052..f8216dbbe237 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -283,6 +283,8 @@ duration = 2 MINUTES //2min color = "#FF0000" + var/obj/item/melee/chainsaw/doomslayer/chainsaw + /obj/effect/mine/pickup/bloodbath/mineEffect(mob/living/carbon/victim) if(!victim.client || !istype(victim)) return @@ -295,16 +297,16 @@ spawn(0) new /datum/hallucination/delusion(victim, TRUE, "demon",duration,0) - var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc) victim.log_message("entered a blood frenzy", LOG_ATTACK) - ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) - victim.drop_all_held_items() - victim.put_in_hands(chainsaw, forced = TRUE) - chainsaw.attack_self(victim) - chainsaw.wield(victim) - victim.reagents.add_reagent(/datum/reagent/medicine/adminordrazine,25) - to_chat(victim, span_warning("KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!")) + if(iscarbon(owner)) + chainsaw = new(victim.loc) + ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) + victim.drop_all_held_items() + victim.put_in_hands(chainsaw, forced = TRUE) + chainsaw.attack_self(victim) + victim.reagents.add_reagent(/datum/reagent/medicine/adminordrazine,25) + to_chat(victim, span_warning("KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!")) victim.client.color = pure_red animate(victim.client,color = red_splash, time = 1 SECONDS, easing = SINE_EASING|EASE_OUT) diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 431d6ed997d4..a28f4a4226de 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -1,29 +1,44 @@ -/obj/item/twohanded/rcl +/obj/item/rcl name = "rapid cable layer" desc = "A device used to rapidly deploy cables. It has screws on the side which can be removed to slide off the cables. Do not use without insulation!" icon = 'icons/obj/tools.dmi' icon_state = "rcl-0" item_state = "rcl-0" - var/obj/structure/cable/last - var/obj/item/stack/cable_coil/loaded opacity = FALSE force = 5 //Plastic is soft throwforce = 5 throw_speed = 1 throw_range = 7 w_class = WEIGHT_CLASS_NORMAL + actions_types = list(/datum/action/item_action/rcl_col,/datum/action/item_action/rcl_gui) + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + var/obj/structure/cable/last + var/obj/item/stack/cable_coil/loaded var/max_amount = 90 var/active = FALSE - actions_types = list(/datum/action/item_action/rcl_col,/datum/action/item_action/rcl_gui,) var/list/colors = list("red", "yellow", "green", "blue", "pink", "orange", "cyan", "white") var/current_color_index = 1 var/ghetto = FALSE - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' var/datum/radial_menu/persistent/wiring_gui_menu var/mob/listeningTo -/obj/item/twohanded/rcl/attackby(obj/item/W, mob/user) +/obj/item/rcl/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/// triggered on wield of two handed item +/obj/item/rcl/proc/on_wield(obj/item/source, mob/user) + active = TRUE + +/// triggered on unwield of two handed item +/obj/item/rcl/proc/on_unwield(obj/item/source, mob/user) + active = FALSE + +/obj/item/rcl/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W @@ -78,19 +93,19 @@ else ..() -/obj/item/twohanded/rcl/examine(mob/user) +/obj/item/rcl/examine(mob/user) . = ..() if(loaded) . += span_info("It contains [loaded.amount]/[max_amount] cables.") -/obj/item/twohanded/rcl/Destroy() +/obj/item/rcl/Destroy() QDEL_NULL(loaded) last = null listeningTo = null QDEL_NULL(wiring_gui_menu) return ..() -/obj/item/twohanded/rcl/update_icon() +/obj/item/rcl/update_icon() if(!loaded) icon_state = "rcl-0" item_state = "rcl-0" @@ -109,7 +124,7 @@ icon_state = "rcl-0" item_state = "rcl-0" -/obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1) +/obj/item/rcl/proc/is_empty(mob/user, loud = 1) update_icon() if(!loaded || !loaded.amount) if(loud) @@ -118,26 +133,23 @@ QDEL_NULL(loaded) loaded = null QDEL_NULL(wiring_gui_menu) - unwield(user) - active = wielded return TRUE return FALSE -/obj/item/twohanded/rcl/pickup(mob/user) +/obj/item/rcl/pickup(mob/user) ..() getMobhook(user) -/obj/item/twohanded/rcl/dropped(mob/wearer) +/obj/item/rcl/dropped(mob/wearer) ..() UnregisterSignal(wearer, COMSIG_MOVABLE_MOVED) listeningTo = null last = null QDEL_NULL(wiring_gui_menu) -/obj/item/twohanded/rcl/attack_self(mob/user) +/obj/item/rcl/attack_self(mob/user) ..() - active = wielded if(!active) last = null else if(!last) @@ -146,7 +158,7 @@ last = C break -/obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook) +/obj/item/rcl/proc/getMobhook(mob/to_hook) if(listeningTo == to_hook) return if(listeningTo) @@ -155,7 +167,7 @@ RegisterSignal(listeningTo, COMSIG_MOVABLE_MOVED, PROC_REF(trigger)) -/obj/item/twohanded/rcl/proc/trigger(mob/user) +/obj/item/rcl/proc/trigger(mob/user) if(active) layCable(user) if(wiring_gui_menu) //update the wire options as you move @@ -163,7 +175,7 @@ //previous contents of trigger(), lays cable each time the player moves -/obj/item/twohanded/rcl/proc/layCable(mob/user) +/obj/item/rcl/proc/layCable(mob/user) if(!isturf(user.loc)) return if(is_empty(user, 0)) @@ -172,7 +184,6 @@ if(prob(2) && ghetto) //Give ghetto RCLs a 2% chance to jam, requiring it to be reactviated manually. to_chat(user, span_warning("[src]'s wires jam!")) - active = FALSE return else if(last) @@ -197,7 +208,7 @@ //searches the current tile for a stub cable of the same colour -/obj/item/twohanded/rcl/proc/findLinkingCable(mob/user) +/obj/item/rcl/proc/findLinkingCable(mob/user) var/turf/T if(!isturf(user.loc)) return @@ -216,7 +227,7 @@ return -/obj/item/twohanded/rcl/proc/wiringGuiGenerateChoices(mob/user) +/obj/item/rcl/proc/wiringGuiGenerateChoices(mob/user) var/fromdir = 0 var/obj/structure/cable/linkingCable = findLinkingCable(user) if(linkingCable) @@ -233,12 +244,12 @@ wiredirs[icondir] = img return wiredirs -/obj/item/twohanded/rcl/proc/showWiringGui(mob/user) +/obj/item/rcl/proc/showWiringGui(mob/user) var/list/choices = wiringGuiGenerateChoices(user) wiring_gui_menu = show_radial_menu_persistent(user, src , choices, select_proc = CALLBACK(src, PROC_REF(wiringGuiReact), user), radius = 42) -/obj/item/twohanded/rcl/proc/wiringGuiUpdate(mob/user) +/obj/item/rcl/proc/wiringGuiUpdate(mob/user) if(!wiring_gui_menu) return @@ -249,7 +260,7 @@ //Callback used to respond to interactions with the wiring menu -/obj/item/twohanded/rcl/proc/wiringGuiReact(mob/living/user,choice) +/obj/item/rcl/proc/wiringGuiReact(mob/living/user,choice) if(!choice) //close on a null choice (the center button) QDEL_NULL(wiring_gui_menu) return @@ -281,18 +292,18 @@ wiringGuiUpdate(user) -/obj/item/twohanded/rcl/pre_loaded/Initialize(mapload) //Comes preloaded with cable, for testing stuff +/obj/item/rcl/pre_loaded/Initialize(mapload) //Comes preloaded with cable, for testing stuff . = ..() loaded = new() loaded.max_amount = max_amount loaded.amount = max_amount update_icon() -/obj/item/twohanded/rcl/Initialize(mapload) +/obj/item/rcl/Initialize(mapload) . = ..() update_icon() -/obj/item/twohanded/rcl/ui_action_click(mob/user, action) +/obj/item/rcl/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/rcl_col)) current_color_index++; if (current_color_index > colors.len) @@ -309,13 +320,13 @@ else //open the menu showWiringGui(user) -/obj/item/twohanded/rcl/ghetto +/obj/item/rcl/ghetto actions_types = list() max_amount = 30 name = "makeshift rapid cable layer" ghetto = TRUE -/obj/item/twohanded/rcl/ghetto/update_icon() +/obj/item/rcl/ghetto/update_icon() if(!loaded) icon_state = "rclg-0" item_state = "rclg-0" diff --git a/code/game/objects/items/binoculars.dm b/code/game/objects/items/binoculars.dm new file mode 100644 index 000000000000..3bb10090f750 --- /dev/null +++ b/code/game/objects/items/binoculars.dm @@ -0,0 +1,50 @@ +/obj/item/binoculars + name = "binoculars" + desc = "Used for long-distance surveillance." + icon = 'icons/obj/tools.dmi' + item_state = "binoculars" + icon_state = "binoculars" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + + var/mob/listeningTo + var/zoom_out_amt = 6 + var/zoom_amt = 10 + +/obj/item/binoculars/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/obj/item/binoculars/Destroy() + listeningTo = null + return ..() + +/obj/item/binoculars/proc/on_wield(atom/source, mob/user) + SIGNAL_HANDLER + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(unwield)) + RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate)) + listeningTo = user + user.visible_message("[user] holds [src] up to [user.p_their()] eyes.","You hold [src] up to your eyes.") + item_state = "binoculars_wielded" + user.regenerate_icons() + user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, user.dir) + +/obj/item/binoculars/proc/on_unwield(atom/source, mob/user) + SIGNAL_HANDLER + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE) + listeningTo = null + item_state = "binoculars" + user.regenerate_icons() + user.client.view_size.zoomIn() + +/obj/item/binoculars/proc/rotate(atom/thing, old_dir, new_dir) + if(ismob(thing)) + var/mob/lad = thing + lad.regenerate_icons() + lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 46ffad89b726..eaec1acd0c26 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -19,7 +19,7 @@ var/on = FALSE //if the paddles are equipped (1) or on the defib (0) var/safety = TRUE //if you can zap people with the defibs on harm mode var/powered = FALSE //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise - var/obj/item/twohanded/shockpaddles/paddles + var/obj/item/shockpaddles/paddles var/obj/item/stock_parts/cell/high/cell var/combat = FALSE //can we revive through space suits? var/grab_ghost = TRUE // Do we pull the ghost back into their body? @@ -119,7 +119,6 @@ /obj/item/defibrillator/attackby(obj/item/W, mob/user, params) if(W == paddles) - paddles.unwield() toggle_paddles() else if(istype(W, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/C = W @@ -186,7 +185,6 @@ return else //Remove from their hands and back onto the defib unit - paddles.unwield() remove_paddles(user) update_icon() @@ -195,7 +193,7 @@ A.build_all_button_icons() /obj/item/defibrillator/proc/make_paddles() - return new /obj/item/twohanded/shockpaddles(src) + return new /obj/item/shockpaddles(src) /obj/item/defibrillator/equipped(mob/user, slot) ..() @@ -279,19 +277,19 @@ /obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params) if(W == paddles) - paddles.unwield() toggle_paddles() update_icon() return //paddles -/obj/item/twohanded/shockpaddles +/obj/item/shockpaddles name = "defibrillator paddles" desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." icon = 'icons/obj/defib.dmi' icon_state = "defibpaddles0" item_state = "defibpaddles0" + base_icon_state = "defibpaddles" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' @@ -311,7 +309,31 @@ var/mob/listeningTo -/obj/item/twohanded/shockpaddles/equipped(mob/user, slot) +/obj/item/shockpaddles/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 8, \ + force_wielded = 12, \ + icon_wielded = "[base_icon_state]1", \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + if(check_defib_exists(mainunit, src) && req_defib) + defib = mainunit + forceMove(defib) + busy = FALSE + update_icon() + + +/// triggered on wield of two handed item +/obj/item/shockpaddles/proc/on_wield(obj/item/source, mob/user) + wielded = TRUE + +/// triggered on unwield of two handed item +/obj/item/shockpaddles/proc/on_unwield(obj/item/source, mob/user) + wielded = FALSE + +/obj/item/shockpaddles/equipped(mob/user, slot) . = ..() if(!req_defib || listeningTo == user) return @@ -320,17 +342,16 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) listeningTo = user -/obj/item/twohanded/shockpaddles/Moved() +/obj/item/shockpaddles/Moved() . = ..() check_range() - -/obj/item/twohanded/shockpaddles/fire_act(exposed_temperature, exposed_volume) +/obj/item/shockpaddles/fire_act(exposed_temperature, exposed_volume) . = ..() if((req_defib && defib) && loc != defib) defib.fire_act(exposed_temperature, exposed_volume) -/obj/item/twohanded/shockpaddles/proc/check_range() +/obj/item/shockpaddles/proc/check_range() if(!req_defib) return if(!in_range(src,defib)) @@ -342,7 +363,7 @@ visible_message(span_notice("[src] snap back into [defib].")) snap_back() -/obj/item/twohanded/shockpaddles/proc/recharge(time) +/obj/item/shockpaddles/proc/recharge(time) if(req_defib || !time) return cooldown = TRUE @@ -354,24 +375,16 @@ cooldown = FALSE update_icon() -/obj/item/twohanded/shockpaddles/New(mainunit) - ..() - if(check_defib_exists(mainunit, src) && req_defib) - defib = mainunit - forceMove(defib) - busy = FALSE - update_icon() - -/obj/item/twohanded/shockpaddles/update_icon() - icon_state = "defibpaddles[wielded]" - item_state = "defibpaddles[wielded]" +/obj/item/shockpaddles/update_icon() + icon_state = "[base_icon_state]0" + item_state = icon_state if(cooldown) - icon_state = "defibpaddles[wielded]_cooldown" + icon_state = "[base_icon_state][!!HAS_TRAIT(src, TRAIT_WIELDED)]_cooldown" if(iscarbon(loc)) var/mob/living/carbon/C = loc C.update_inv_hands() -/obj/item/twohanded/shockpaddles/suicide_act(mob/user) +/obj/item/shockpaddles/suicide_act(mob/user) if(req_defib && !defib.deductcharge(revivecost)) user.visible_message(span_danger("[user] is putting the paddles on [user.p_their()] chest but it has no charge!")) return SHAME @@ -379,27 +392,24 @@ playsound(src, 'sound/machines/defib_zap.ogg', 50, 1, -1) return OXYLOSS -/obj/item/twohanded/shockpaddles/dropped(mob/user) +/obj/item/shockpaddles/dropped(mob/user) if(!req_defib) return ..() if(listeningTo) UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) if(user) - var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() - if(istype(O)) - O.unwield() to_chat(user, span_notice("The paddles snap back into the main unit.")) snap_back() - return unwield(user) + return -/obj/item/twohanded/shockpaddles/proc/snap_back() +/obj/item/shockpaddles/proc/snap_back() if(!defib) return defib.on = FALSE forceMove(defib) defib.update_icon() -/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/M, obj/O) +/obj/item/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/M, obj/O) if(!req_defib) return TRUE //If it doesn't need a defib, just say it exists if (!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns @@ -408,7 +418,7 @@ else return TRUE -/obj/item/twohanded/shockpaddles/attack(mob/M, mob/user) +/obj/item/shockpaddles/attack(mob/M, mob/user) if(busy) return @@ -466,14 +476,14 @@ to_chat(user, span_notice("Your snake holds the other paddle in its mouth and places it on [H]'s chest.")) do_help(H, user) -/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H) +/obj/item/shockpaddles/proc/shock_touching(dmg, mob/H) if(isliving(H.pulledby)) //CLEAR! var/mob/living/M = H.pulledby if(M.electrocute_act(30, src)) M.visible_message(span_danger("[M] is electrocuted by [M.p_their()] contact with [H]!")) M.emote("scream") -/obj/item/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user) +/obj/item/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user) if(req_defib && defib.safety) return if(!req_defib && !combat) @@ -497,7 +507,7 @@ else recharge(6 SECONDS) -/obj/item/twohanded/shockpaddles/proc/do_harm(mob/living/carbon/H, mob/living/user) +/obj/item/shockpaddles/proc/do_harm(mob/living/carbon/H, mob/living/user) if(req_defib && defib.safety) return if(!req_defib && !combat) @@ -552,7 +562,7 @@ busy = FALSE update_icon() -/obj/item/twohanded/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user) +/obj/item/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user) user.visible_message(span_warning("[user] begins to place [src] on [H]'s chest."), span_warning("You begin to place [src] on [H]'s chest...")) busy = TRUE update_icon() @@ -662,13 +672,13 @@ busy = FALSE update_icon() -/obj/item/twohanded/shockpaddles/cyborg +/obj/item/shockpaddles/cyborg name = "cyborg defibrillator paddles" icon_state = "defibpaddles0" item_state = "defibpaddles0" req_defib = FALSE -/obj/item/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user) +/obj/item/shockpaddles/cyborg/attack(mob/M, mob/user) if(iscyborg(user)) var/mob/living/silicon/robot/R = user if(R.emagged) @@ -680,7 +690,7 @@ . = ..() -/obj/item/twohanded/shockpaddles/syndicate +/obj/item/shockpaddles/syndicate name = "syndicate defibrillator paddles" desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively." combat = TRUE diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm index 21f4a00ad65d..ef9160a77d02 100644 --- a/code/game/objects/items/melee/transforming.dm +++ b/code/game/objects/items/melee/transforming.dm @@ -90,7 +90,6 @@ user.take_bodypart_damage(5,5) /// Security lethal melee weapon, stats inspired by combat knife and energy sword -/// Legally distinct from /obj/item/twohanded/vibro_weapon /obj/item/melee/transforming/vib_blade name = "vibration blade" desc = "A blade with an edge that vibrates rapidly, enabling it to easily cut through armor and flesh alike." diff --git a/code/game/objects/items/raised_hand.dm b/code/game/objects/items/raised_hand.dm new file mode 100644 index 000000000000..091624ccdb8f --- /dev/null +++ b/code/game/objects/items/raised_hand.dm @@ -0,0 +1,18 @@ +/obj/item/raisedhands + name = "raised hands" + desc = "What are you, French?" + icon = 'icons/obj/toy.dmi' + icon_state = "latexballon" + item_state = "nothing" + force = 0 + throwforce = 0 + w_class = WEIGHT_CLASS_HUGE + item_flags = DROPDEL | ABSTRACT + +/obj/item/raisedhands/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + +/obj/item/raisedhands/dropped(mob/user) + user.visible_message(span_userdanger(("[user] lowers their hands!"))) + return ..() diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2d9f490bc109..e9d7b49792a4 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -582,7 +582,7 @@ /obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) - var/obj/item/twohanded/shockpaddles/cyborg/S = locate() in R.module.modules //yogs start + var/obj/item/shockpaddles/cyborg/S = locate() in R.module.modules //yogs start if(S) to_chat(user, span_warning("This unit is already equipped with a defibrillator module.")) return FALSE @@ -594,7 +594,7 @@ /obj/item/borg/upgrade/defib/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) - for(var/obj/item/twohanded/shockpaddles/cyborg/S in R.module.modules) + for(var/obj/item/shockpaddles/cyborg/S in R.module.modules) R.module.remove_module(S, TRUE) /obj/item/borg/upgrade/adv_analyzer @@ -897,7 +897,7 @@ /obj/item/borg/upgrade/broomer/action(mob/living/silicon/robot/R, user = usr) if (!..()) return - var/obj/item/twohanded/broom/cyborg/BR = locate() in R.module.modules + var/obj/item/broom/cyborg/BR = locate() in R.module.modules if (BR) to_chat(user, span_warning("This janiborg is already equipped with an experimental broom!")) return FALSE @@ -908,6 +908,6 @@ /obj/item/borg/upgrade/broomer/deactivate(mob/living/silicon/robot/R, user = usr) if (!..()) return - var/obj/item/twohanded/broom/cyborg/BR = locate() in R.module.modules + var/obj/item/broom/cyborg/BR = locate() in R.module.modules if (BR) R.module.remove_module(BR, TRUE) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 60f34da00965..3b81adcb57f1 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -473,7 +473,7 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 10, res_amount = 1), new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 5, res_amount = 1), - new /datum/stack_recipe("metallic hydrogen axe", /obj/item/twohanded/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1), + new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1), )) /obj/item/stack/sheet/mineral/metal_hydrogen diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 72ef66331b05..569619156efc 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -200,7 +200,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ */ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\ - new/datum/stack_recipe("baseball bat", /obj/item/twohanded/required/baseball_bat, 10, time = 15),\ + new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 10, time = 15),\ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \ @@ -312,7 +312,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ */ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ - new/datum/stack_recipe("bamboo spear", /obj/item/twohanded/bamboospear, 25, time = 90), \ + new/datum/stack_recipe("bamboo spear", /obj/item/melee/spear/bamboospear, 25, time = 90), \ new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 70), \ new/datum/stack_recipe("crude syringe", /obj/item/reagent_containers/syringe/crude, 5, time = 10), \ new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 30, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index f3a557001a7d..93c3afa29916 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -192,8 +192,8 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", B.name = name B.icon_state = icon_state B.item_state = item_state - if(istype(A, /obj/item/twohanded/required/cult_bastard) && !iscultist(user)) - var/obj/item/twohanded/required/cult_bastard/sword = A + if(istype(A, /obj/item/melee/cult_bastard) && !iscultist(user)) + var/obj/item/melee/cult_bastard/sword = A to_chat(user, span_notice("You begin to exorcise [sword].")) playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,1) if(do_after(user, 4 SECONDS, sword)) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index ced3b7e0c1a2..3f611d4ecfa9 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -29,7 +29,7 @@ if("recon") //28ish TC new /obj/item/clothing/glasses/thermal/xray(src) //Would argue 6 TC. Thermals are 4 TC but work on organic targets in darkness new /obj/item/storage/briefcase/launchpad(src) //6 TC - new /obj/item/twohanded/binoculars(src) //1 TC, maybe. Very good but mining medic/detective get them for free + new /obj/item/binoculars(src) //1 TC, maybe. Very good but mining medic/detective get them for free new /obj/item/encryptionkey/syndicate(src) //2 TC new /obj/item/storage/box/syndie_kit/space(src) //4 TC new /obj/item/grenade/syndieminibomb/concussion/frag(src) //Minibomb with one less range on each part except for fire. 3-4 TC. diff --git a/code/game/objects/items/two_handed/baseball_bat.dm b/code/game/objects/items/two_handed/baseball_bat.dm new file mode 100644 index 000000000000..2f6dbb3153c1 --- /dev/null +++ b/code/game/objects/items/two_handed/baseball_bat.dm @@ -0,0 +1,80 @@ +/obj/item/melee/baseball_bat + name = "baseball bat" + desc = "A traditional tool for a game of Baseball. Modern wood isn't very strong, try not to crack the bat!" + icon = 'icons/obj/weapons/misc.dmi' + icon_state = "baseball_bat" + item_state = "baseball_bat" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 16 + wound_bonus = 5 + armour_penetration = -30 + bare_wound_bonus = 40 + throwforce = 0 + attack_verb = list("beat", "smacked") + sharpness = SHARP_NONE + w_class = WEIGHT_CLASS_HUGE + var/homerun_ready = FALSE + var/homerun_able = FALSE + var/flimsy = TRUE //spesswood? only used for knockback check now + +/obj/item/melee/baseball_bat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + +/obj/item/melee/baseball_bat/homerun + name = "home run bat" + desc = "This thing looks dangerous... Dangerously good at baseball, that is." + homerun_able = TRUE + +/obj/item/melee/baseball_bat/attack_self(mob/user) + if(!homerun_able) + ..() + return + if(homerun_ready) + to_chat(user, span_notice("You're already ready to do a home run!")) + return + to_chat(user, span_warning("You begin gathering strength...")) + playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1) + if(do_after(user, 9 SECONDS, src)) + to_chat(user, span_userdanger("You gather power! Time for a home run!")) + homerun_ready = 1 + return ..() + +/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) + . = ..() + var/atom/throw_target = get_edge_target_turf(target, user.dir) + if(target == user) + return + if(homerun_ready) + user.visible_message(span_userdanger("It's a home run!")) + target.throw_at(throw_target, rand(8,10), 14, user) + SSexplosions.medturf += throw_target + playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) + homerun_ready = 0 + return + else if(!flimsy && !target.anchored) + var/whack_speed = (prob(50) ? 1 : 6) + target.throw_at(throw_target, rand(1, 2), whack_speed, user) // sorry friends, 7 speed batting caused wounds to absolutely delete whoever you knocked your target into (and said target) + +/obj/item/melee/baseball_bat/metal_bat + name = "titanium baseball bat" + desc = "This bat is made of titanium, it feels light yet strong." + icon_state = "baseball_bat_metal" + item_state = "baseball_bat_metal" + hitsound = 'yogstation/sound/weapons/bat_hit.ogg' + force = 18 + throwforce = 0 + wound_bonus = 15 + armour_penetration = -25 + bare_wound_bonus = 50 + w_class = WEIGHT_CLASS_HUGE + flimsy = FALSE + +/obj/item/melee/baseball_bat/metal_bat/attack(mob/living/target, mob/living/user) + . = ..() + if(user.zone_selected == BODY_ZONE_HEAD && get_location_accessible(target, BODY_ZONE_HEAD)) + if(prob(30)) + target.Paralyze(40) + else + return TRUE diff --git a/code/game/objects/items/two_handed/broom.dm b/code/game/objects/items/two_handed/broom.dm new file mode 100644 index 000000000000..59cd90377462 --- /dev/null +++ b/code/game/objects/items/two_handed/broom.dm @@ -0,0 +1,80 @@ +#define BROOM_PUSH_LIMIT 20 + +/obj/item/broom + name = "broom" + desc = "This is my BROOMSTICK! It can be used manually or braced with two hands to sweep items as you move." + icon = 'icons/obj/janitor.dmi' + icon_state = "broom0" + base_icon_state = "broom" + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' + force = 8 + throwforce = 10 + throw_speed = 3 + throw_range = 7 + w_class = WEIGHT_CLASS_BULKY + attack_verb = list("swept", "brushed off", "bludgeoned", "whacked") + resistance_flags = FLAMMABLE + +/obj/item/broom/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 8, \ + force_wielded = 4, \ + icon_wielded = "[base_icon_state]1", \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/obj/item/broom/update_icon() + icon_state = "[base_icon_state]0" + +/obj/item/broom/proc/on_wield(atom/source, mob/user) + SIGNAL_HANDLER + to_chat(user, span_notice("You brace the [src] against the ground in a firm sweeping stance.")) + RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(sweep)) + +/obj/item/broom/proc/on_unwield(atom/source, mob/user) + SIGNAL_HANDLER + UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE) + +/obj/item/broom/afterattack(atom/A, mob/user, proximity) + . = ..() + if(!proximity) + return + sweep(user, A) + +/obj/item/broom/proc/sweep(mob/user, atom/A) + + var/turf/current_item_loc = isturf(A) ? A : get_turf(A) + if (!isturf(current_item_loc)) + return + var/turf/new_item_loc = get_step(current_item_loc, user.dir) + var/obj/machinery/disposal/bin/target_bin = locate(/obj/machinery/disposal/bin) in new_item_loc.contents + var/i = 1 + for (var/obj/item/garbage in current_item_loc.contents) + if (!garbage.anchored) + if (target_bin) + garbage.forceMove(target_bin) + else + garbage.Move(new_item_loc, user.dir) + i++ + if (i > BROOM_PUSH_LIMIT) + break + if (i > 1) + if (target_bin) + target_bin.update_icon() + to_chat(user, span_notice("You sweep the pile of garbage into [target_bin].")) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) + +/obj/item/broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) //bless you whoever fixes this copypasta + J.put_in_cart(src, user) + J.mybroom=src + J.update_icon() + +/obj/item/broom/cyborg + name = "robotic push broom" + +/obj/item/broom/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) + to_chat(user, span_notice("You cannot place your [src] into the [J]")) + return FALSE diff --git a/code/game/objects/items/two_handed/chainsaw.dm b/code/game/objects/items/two_handed/chainsaw.dm new file mode 100644 index 000000000000..38e447b0d432 --- /dev/null +++ b/code/game/objects/items/two_handed/chainsaw.dm @@ -0,0 +1,85 @@ +/datum/action/item_action/startchainsaw + name = "Pull The Starting Cord" + +/obj/item/melee/chainsaw + name = "chainsaw" + desc = "A versatile power tool. Useful for limbing trees and delimbing humans." + icon = 'icons/obj/tools.dmi' + icon_state = "chainsaw_off" + lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' + flags_1 = CONDUCT_1 + force = 13 + w_class = WEIGHT_CLASS_HUGE + throwforce = 13 + throw_speed = 2 + throw_range = 4 + materials = list(/datum/material/iron=13000) + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = "swing_hit" + sharpness = SHARP_EDGED + actions_types = list(/datum/action/item_action/startchainsaw) + var/on = FALSE + var/force_on = 24 + var/icon_name = "chainsaw" + +/obj/item/melee/chainsaw/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + AddComponent(/datum/component/butchering, 30, 100, 0, 'sound/weapons/chainsawhit.ogg', TRUE) + +/obj/item/melee/chainsaw/suicide_act(mob/living/carbon/user) + if(on) + user.visible_message(span_suicide("[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(src, 'sound/weapons/chainsawhit.ogg', 100, 1) + var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) + if(myhead) + myhead.dismember() + else + user.visible_message(span_suicide("[user] smashes [src] into [user.p_their()] neck, destroying [user.p_their()] esophagus! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(src, 'sound/weapons/genhit1.ogg', 100, 1) + return(BRUTELOSS) + +/obj/item/melee/chainsaw/attack_self(mob/user) + on = !on + to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]") + force = on ? force_on : initial(force) + throwforce = on ? force_on : initial(force) + icon_state = "[icon_name]_[on ? "on" : "off"]" + var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) + butchering.butchering_enabled = on + + if(on) + hitsound = 'sound/weapons/chainsawhit.ogg' + else + hitsound = "swing_hit" + + if(src == user.get_active_held_item()) //update inhands + user.update_inv_hands() + for(var/X in actions) + var/datum/action/A = X + A.build_all_button_icons() + +/obj/item/melee/chainsaw/doomslayer + name = "THE GREAT COMMUNICATOR" + desc = span_warning("VRRRRRRR!!!") + armour_penetration = 100 + force_on = 30 + +/obj/item/melee/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK) + owner.visible_message(span_danger("Ranged attacks just make [owner] angrier!")) + playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) + return 1 + return 0 + +/obj/item/melee/chainsaw/demon + name = "demon chainsaw" + desc = "Show me your dreams." + icon_state = "demon_off" + force_on = 30 + icon_name = "demon" + +/obj/item/melee/chainsaw/demon/Initialize(mapload) + . = ..() + AddComponent(/datum/component/lifesteal, 30) diff --git a/code/game/objects/items/two_handed/fireaxe.dm b/code/game/objects/items/two_handed/fireaxe.dm index bf18760bd9fb..bf033fd54695 100644 --- a/code/game/objects/items/two_handed/fireaxe.dm +++ b/code/game/objects/items/two_handed/fireaxe.dm @@ -1,7 +1,4 @@ -/* - * Fireaxe - */ -/obj/item/fireaxe // DEM AXES MAN, marker -Agouri +/obj/item/fireaxe icon = 'icons/obj/tools.dmi' icon_state = "fireaxe0" base_icon_state = "fireaxe" @@ -71,9 +68,18 @@ force_wielded = 18 /* - * Energy Fire Axe + * Bone Axe */ +/obj/item/fireaxe/boneaxe + icon_state = "bone_axe0" + base_icon_state = "bone_axe" + name = "bone axe" + desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." + force_wielded = 18 +/* + * Energy Fire Axe + */ /obj/item/fireaxe/energy name = "energy fire axe" desc = "A massive, two handed, energy-based hardlight axe capable of cutting through solid metal. 'Glory to atmosia' is carved on the side of the handle." diff --git a/code/game/objects/items/two_handed/highfrequencyblade.dm b/code/game/objects/items/two_handed/highfrequencyblade.dm new file mode 100644 index 000000000000..01503fd131e1 --- /dev/null +++ b/code/game/objects/items/two_handed/highfrequencyblade.dm @@ -0,0 +1,58 @@ +/obj/item/vibro_weapon + icon = 'icons/obj/weapons/swords.dmi' + icon_state = "hfrequency0" + base_icon_state = "hfrequency" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + name = "vibro sword" + desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." + force = 20 + force_wielded = 20 + armour_penetration = 100 + block_chance = 40 + throwforce = 20 + throw_speed = 4 + sharpness = SHARP_EDGED + attack_verb = list("cut", "sliced", "diced") + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + hitsound = 'sound/weapons/bladeslice.ogg' + +/obj/item/vibro_weapon/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + ) + AddComponent(/datum/component/butchering, 20, 105) + +/obj/item/vibro_weapon/update_icon() + icon_state = "[base_icon_state]0" + +/obj/item/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(HAS_TRAIT(src, TRAIT_WIELDED)) + final_block_chance *= 2 + if(HAS_TRAIT(src, TRAIT_WIELDED) || attack_type != PROJECTILE_ATTACK) + if(prob(final_block_chance)) + if(attack_type == PROJECTILE_ATTACK) + owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) + playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) + return TRUE + else + owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!")) + return TRUE + return FALSE + +/obj/item/vibro_weapon/wizard + desc = "A blade that was mastercrafted by a legendary blacksmith. Its' enchantments let it slash through anything." + force = 8 + throwforce = 20 + wound_bonus = 20 + bare_wound_bonus = 25 + +/obj/item/vibro_weapon/wizard/attack_self(mob/user, modifiers) + if(!iswizard(user)) + balloon_alert(user, "you're too weak!") + return + return ..() diff --git a/code/game/objects/items/two_handed/spears.dm b/code/game/objects/items/two_handed/spears.dm index 2b052fca77e5..35879b75f7c1 100644 --- a/code/game/objects/items/two_handed/spears.dm +++ b/code/game/objects/items/two_handed/spears.dm @@ -1,5 +1,5 @@ //spears -/obj/item/spear +/obj/item/melee/spear icon = 'icons/obj/weapons/spears.dmi' icon_state = "spearglass0" base_icon_state = "spearglass" @@ -31,7 +31,7 @@ ///Whether the spear can have an explosive attached to it. var/can_be_explosive = TRUE -/obj/item/spear/Initialize(mapload) +/obj/item/melee/spear/Initialize(mapload) . = ..() AddComponent(/datum/component/two_handed, \ force_unwielded = force, \ @@ -41,18 +41,18 @@ ) AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. -/obj/item/spear/suicide_act(mob/living/carbon/user) +/obj/item/melee/spear/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/spear/Initialize(mapload) +/obj/item/melee/spear/Initialize(mapload) . = ..() AddComponent(/datum/component/jousting) -/obj/item/spear/update_icon() +/obj/item/melee/spear/update_icon() icon_state = "[base_icon_state]0" -/obj/item/spear/deconstruct() //we drop our rod and maybe the glass shard used +/obj/item/melee/spear/deconstruct() //we drop our rod and maybe the glass shard used new /obj/item/stack/rods(get_turf(src)) if(!prob(20)) //20% chance to save our spearhead break_message += " and its head smashes into pieces!" @@ -62,7 +62,7 @@ break_message += "!" ..() -/obj/item/spear/CheckParts(list/parts_list) +/obj/item/melee/spear/CheckParts(list/parts_list) var/obj/item/shard/tip = locate() in parts_list if (istype(tip, /obj/item/shard/plasma)) force_wielded += 1 @@ -75,7 +75,7 @@ qdel(tip) var/obj/item/grenade/G = locate() in parts_list if(G && can_be_explosive) - var/obj/item/spear/explosive/lance = new /obj/item/spear/explosive(src.loc, G) + var/obj/item/melee/spear/explosive/lance = new /obj/item/melee/spear/explosive(src.loc, G) lance.force_wielded = force_wielded lance.force = force lance.throwforce = throwforce @@ -85,7 +85,7 @@ ..() -/obj/item/spear/explosive +/obj/item/melee/spear/explosive name = "explosive lance" base_icon_state = "spearbomb" @@ -94,7 +94,7 @@ ///The war cry, editable by the player, that gets yelled when attacking. var/war_cry = "AAAAARGH!!!" -/obj/item/spear/explosive/Initialize(mapload, obj/item/grenade/default_grenade) +/obj/item/melee/spear/explosive/Initialize(mapload, obj/item/grenade/default_grenade) . = ..() if(!default_grenade) default_grenade = new /obj/item/grenade/iedcasing() //For admin-spawned explosive lances @@ -103,7 +103,7 @@ desc = "A makeshift spear with [default_grenade] attached to it" update_icon() -/obj/item/spear/explosive/suicide_act(mob/living/carbon/user) +/obj/item/melee/spear/explosive/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) user.say("[war_cry]", forced = "spear warcry") explosive.forceMove(user) @@ -112,11 +112,11 @@ qdel(src) return BRUTELOSS -/obj/item/spear/explosive/examine(mob/user) +/obj/item/melee/spear/explosive/examine(mob/user) . = ..() . += span_notice("Alt-click to set your war cry.") -/obj/item/spear/explosive/AltClick(mob/user) +/obj/item/melee/spear/explosive/AltClick(mob/user) if(!user.canUseTopic(src, BE_CLOSE)) return . = ..() @@ -125,7 +125,7 @@ if(input) war_cry = input -/obj/item/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) +/obj/item/melee/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) . = ..() if(!proximity) return @@ -138,7 +138,7 @@ /** * Grey Tide */ -/obj/item/twohanded/spear/grey_tide +/obj/item/melee/spear/grey_tide icon_state = "spearglass0" name = "\improper Grey Tide" desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." @@ -150,7 +150,7 @@ force_wielded = 10 -/obj/item/spear/grey_tide/Initialize(mapload) +/obj/item/melee/spear/grey_tide/Initialize(mapload) . = ..() AddComponent(/datum/component/two_handed, \ force_unwielded = force, \ @@ -159,7 +159,7 @@ wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0), \ ) -/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) +/obj/item/melee/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) . = ..() if(!proximity) return @@ -177,7 +177,7 @@ /* * Bone Spear */ -/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. +/obj/item/melee/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. icon = 'icons/obj/weapons/spears.dmi' icon_state = "bone_spear0" base_icon_state = "bone_spear" @@ -201,7 +201,7 @@ force_wielded = 9 //I have no idea how to balance can_be_explosive = FALSE -/obj/item/spear/bonespear/Initialize(mapload) +/obj/item/melee/spear/bonespear/Initialize(mapload) . = ..() AddComponent(/datum/component/two_handed, \ force_unwielded = force, \ @@ -210,7 +210,7 @@ wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0), \ ) -/obj/item/spear/bonespear/chitinspear //like a mix of a bone spear and bone axe, but more like a bone spear. And better. +/obj/item/melee/spear/bonespear/chitinspear //like a mix of a bone spear and bone axe, but more like a bone spear. And better. icon = 'icons/obj/weapons/spears.dmi' icon_state = "chitin_spear0" base_icon_state = "chitin_spear" @@ -222,7 +222,7 @@ force_wielded = 10 -/obj/item/spear/bamboospear +/obj/item/melee/spear/bamboospear icon = 'icons/obj/weapons/spears.dmi' icon_state = "bamboo_spear0" base_icon_state = "bamboo_spear" diff --git a/code/game/objects/items/two_handed/updatepaths.txt b/code/game/objects/items/two_handed/updatepaths.txt index 9b23b37c5bc0..08a2a7521d16 100644 --- a/code/game/objects/items/two_handed/updatepaths.txt +++ b/code/game/objects/items/two_handed/updatepaths.txt @@ -1,5 +1,12 @@ -/obj/item/twohanded/bonespear : /obj/item/spear/bonespear -/obj/item/twohanded/bonespear/chitinspear : /obj/item/spear/bonespear/chitinspear -/obj/item/twohanded/bamboospear : /obj/item/spear/bamboospear +# start off with snowflake stuff we're changing the paths of + +/obj/item/melee/spear/bonespear : /obj/item/melee/spear/bonespear +/obj/item/melee/spear/bonespear/chitinspear : /obj/item/melee/spear/bonespear/chitinspear +/obj/item/melee/spear/bamboospear : /obj/item/melee/spear/bamboospear +/obj/item/twohanded/required/cult_bastard : /obj/item/melee/cult_bastard +/obj/item/twohanded/required/chainsaw : /obj/item/melee/chainsaw + +# now we'll do the generic paths, removing 'required' entirely. + /obj/item/twohanded/required/@SUBTYPES : /obj/item/@SUBTYPES /obj/item/twohanded/@SUBTYPES : /obj/item/@SUBTYPES diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index f5f643faf911..0b7a55ec9191 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -1,25 +1,3 @@ -/* Two-handed Weapons - * Contains: - * Twohanded - * Fireaxe - * Double-Bladed Energy Swords - * Spears - * CHAINSAWS - * Bone Axe and Spear - * Vxtvul Hammer - */ - -/*################################################################## -##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## -####################################################################*/ - -//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn -//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. -//It also tidies stuff up elsewhere. - - - - /* * Twohanded */ @@ -120,14 +98,12 @@ /obj/item/twohanded/equip_to_best_slot(mob/M) if(..()) - if(istype(src, /obj/item/twohanded/required)) - return // unwield forces twohanded-required items to be dropped. unwield(M) return /obj/item/twohanded/equipped(mob/user, slot) ..() - if(!user.is_holding(src) && wielded && !istype(src, /obj/item/twohanded/required)) + if(!user.is_holding(src) && wielded) unwield(user) ///////////OFFHAND/////////////// @@ -148,8 +124,6 @@ if(I && istype(I, /obj/item/twohanded)) var/obj/item/twohanded/thw = I thw.unwield(user, show_message) - if(istype(thw, /obj/item/twohanded/required)) - user.dropItemToGround(thw) if(!QDELETED(src)) qdel(src) @@ -171,61 +145,6 @@ return qdel(src) //If it's another offhand, or literally anything else, qdel. If I knew how to add logging messages I'd put one here. -///////////Two hand required objects/////////////// -//This is for objects that require two hands to even pick up -/obj/item/twohanded/required - w_class = WEIGHT_CLASS_HUGE - -/obj/item/twohanded/required/attack_self() - return - -/obj/item/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) - if(wielded && !slot_flags) - if(!disable_warning) - to_chat(M, span_warning("[src] is too cumbersome to carry with anything but your hands!")) - return 0 - return ..() - -/obj/item/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty - var/obj/item/twohanded/required/H = user.get_inactive_held_item() - if(get_dist(src,user) > 1) - return - if(H != null) - to_chat(user, span_notice("[src] is too cumbersome to carry in one hand!")) - return - if(loc != user) - wield(user) - . = ..() - -/obj/item/twohanded/required/equipped(mob/user, slot) - ..() - if(slot_flags & slot) - var/datum/O = user.is_holding_item_of_type(/obj/item/twohanded/offhand) - if(!O || QDELETED(O)) - return - qdel(O) - return - if(slot == ITEM_SLOT_HANDS) - wield(user) - else - unwield(user) - -/obj/item/twohanded/required/dropped(mob/living/user, show_message = TRUE) - unwield(user, show_message) - ..() - -/obj/item/twohanded/required/wield(mob/living/carbon/user) - ..() - if(!wielded) - user.dropItemToGround(src) - -/obj/item/twohanded/required/unwield(mob/living/carbon/user, show_message = TRUE) - if(!wielded) - return - if(show_message) - to_chat(user, span_notice("You drop [src].")) - ..(user, FALSE) - /* * Double-Bladed Energy Swords - Cheridan */ @@ -433,93 +352,6 @@ return ..() return FALSE -// CHAINSAW - -/datum/action/item_action/startchainsaw - name = "Pull The Starting Cord" - -/obj/item/twohanded/required/chainsaw - name = "chainsaw" - desc = "A versatile power tool. Useful for limbing trees and delimbing humans." - icon = 'icons/obj/tools.dmi' - icon_state = "chainsaw_off" - var/icon_name = "chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - flags_1 = CONDUCT_1 - force = 13 - var/force_on = 24 - w_class = WEIGHT_CLASS_HUGE - throwforce = 13 - throw_speed = 2 - throw_range = 4 - materials = list(/datum/material/iron=13000) - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = "swing_hit" - sharpness = SHARP_EDGED - actions_types = list(/datum/action/item_action/startchainsaw) - var/on = FALSE - -/obj/item/twohanded/required/chainsaw/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 30, 100, 0, 'sound/weapons/chainsawhit.ogg', TRUE) - -/obj/item/twohanded/required/chainsaw/suicide_act(mob/living/carbon/user) - if(on) - user.visible_message(span_suicide("[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/chainsawhit.ogg', 100, 1) - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) - if(myhead) - myhead.dismember() - else - user.visible_message(span_suicide("[user] smashes [src] into [user.p_their()] neck, destroying [user.p_their()] esophagus! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/genhit1.ogg', 100, 1) - return(BRUTELOSS) - -/obj/item/twohanded/required/chainsaw/attack_self(mob/user) - on = !on - to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]") - force = on ? force_on : initial(force) - throwforce = on ? force_on : initial(force) - icon_state = "[icon_name]_[on ? "on" : "off"]" - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.butchering_enabled = on - - if(on) - hitsound = 'sound/weapons/chainsawhit.ogg' - else - hitsound = "swing_hit" - - if(src == user.get_active_held_item()) //update inhands - user.update_inv_hands() - for(var/X in actions) - var/datum/action/A = X - A.build_all_button_icons() - -/obj/item/twohanded/required/chainsaw/doomslayer - name = "THE GREAT COMMUNICATOR" - desc = span_warning("VRRRRRRR!!!") - armour_penetration = 100 - force_on = 30 - -/obj/item/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message(span_danger("Ranged attacks just make [owner] angrier!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) - return 1 - return 0 - -/obj/item/twohanded/required/chainsaw/demon - name = "demon chainsaw" - desc = "Show me your dreams." - icon_state = "demon_off" - force_on = 30 - icon_name = "demon" - -/obj/item/twohanded/required/chainsaw/demon/Initialize(mapload) - . = ..() - AddComponent(/datum/component/lifesteal, 30) - /obj/item/twohanded/pitchfork icon = 'icons/obj/weapons/spears.dmi' icon_state = "pitchfork0" @@ -605,118 +437,6 @@ W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return -//HF blade - -/obj/item/twohanded/vibro_weapon - icon = 'icons/obj/weapons/swords.dmi' - icon_state = "hfrequency0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "vibro sword" - desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." - force = 20 - force_wielded = 20 - armour_penetration = 100 - block_chance = 40 - throwforce = 20 - throw_speed = 4 - sharpness = SHARP_EDGED - attack_verb = list("cut", "sliced", "diced") - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/twohanded/vibro_weapon/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 20, 105) - -/obj/item/twohanded/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(wielded || attack_type != PROJECTILE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) - return 1 - else - owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!")) - return 1 - return 0 - -/obj/item/twohanded/vibro_weapon/update_icon() - icon_state = "hfrequency[wielded]" - -/obj/item/twohanded/vibro_weapon/wizard - desc = "A blade that was mastercrafted by a legendary blacksmith. Its' enchantments let it slash through anything." - force = 8 - throwforce = 20 - wound_bonus = 20 - bare_wound_bonus = 25 - -/obj/item/twohanded/vibro_weapon/wizard/wizard/attack_self(mob/user, modifiers) - if(!iswizard(user)) - balloon_alert(user, "you're too weak!") - return - return ..() - -/* - * Bone Axe - */ -/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. - icon_state = "bone_axe0" - name = "bone axe" - desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." - force_wielded = 18 - -/obj/item/twohanded/fireaxe/boneaxe/update_icon() - icon_state = "bone_axe[wielded]" - -/obj/item/twohanded/binoculars - name = "binoculars" - desc = "Used for long-distance surveillance." - icon = 'icons/obj/tools.dmi' - item_state = "binoculars" - icon_state = "binoculars" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - var/mob/listeningTo - var/zoom_out_amt = 6 - var/zoom_amt = 10 - -/obj/item/twohanded/binoculars/Destroy() - listeningTo = null - return ..() - -/obj/item/twohanded/binoculars/wield(mob/user) - . = ..() - if(!wielded) - return - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(unwield)) - RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate)) - listeningTo = user - user.visible_message("[user] holds [src] up to [user.p_their()] eyes.","You hold [src] up to your eyes.") - item_state = "binoculars_wielded" - user.regenerate_icons() - user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, user.dir) - -/obj/item/twohanded/binoculars/unwield(mob/user) - . = ..() - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE) - listeningTo = null - item_state = "binoculars" - user.regenerate_icons() - user.client.view_size.zoomIn() - -/obj/item/twohanded/binoculars/proc/rotate(atom/thing, old_dir, new_dir) - if(ismob(thing)) - var/mob/lad = thing - lad.regenerate_icons() - lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir) - /* * Vxtvul Hammer */ @@ -923,85 +643,6 @@ /obj/item/twohanded/vxtvulhammer/pirate/update_icon() icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" -// Baseball Bats -/obj/item/twohanded/required/baseball_bat - name = "baseball bat" - desc = "A traditional tool for a game of Baseball. Modern wood isn't very strong, try not to crack the bat!" - icon = 'icons/obj/weapons/misc.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 16 - wound_bonus = 5 - armour_penetration = -30 - bare_wound_bonus = 40 - throwforce = 0 - attack_verb = list("beat", "smacked") - sharpness = SHARP_NONE - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - var/flimsy = TRUE //spesswood? only used for knockback check now - -/obj/item/twohanded/required/baseball_bat/homerun - name = "home run bat" - desc = "This thing looks dangerous... Dangerously good at baseball, that is." - homerun_able = 1 - - -/obj/item/twohanded/required/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, span_notice("You're already ready to do a home run!")) - return - to_chat(user, span_warning("You begin gathering strength...")) - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1) - if(do_after(user, 9 SECONDS, src)) - to_chat(user, span_userdanger("You gather power! Time for a home run!")) - homerun_ready = 1 - ..() - -/obj/item/twohanded/required/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(target == user) - return - if(homerun_ready) - user.visible_message(span_userdanger("It's a home run!")) - target.throw_at(throw_target, rand(8,10), 14, user) - SSexplosions.medturf += throw_target - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) - homerun_ready = 0 - return - else if(!flimsy && !target.anchored) - var/whack_speed = (prob(50) ? 1 : 6) - target.throw_at(throw_target, rand(1, 2), whack_speed, user) // sorry friends, 7 speed batting caused wounds to absolutely delete whoever you knocked your target into (and said target) - -/obj/item/twohanded/required/baseball_bat/metal_bat - name = "titanium baseball bat" - desc = "This bat is made of titanium, it feels light yet strong." - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - hitsound = 'yogstation/sound/weapons/bat_hit.ogg' - force = 18 - throwforce = 0 - flimsy = FALSE - wound_bonus = 15 - armour_penetration = -25 - bare_wound_bonus = 50 - w_class = WEIGHT_CLASS_HUGE - -/obj/item/twohanded/required/baseball_bat/metal_bat/attack(mob/living/target, mob/living/user) - . = ..() - if(user.zone_selected == BODY_ZONE_HEAD && get_location_accessible(target, BODY_ZONE_HEAD)) - if(prob(30)) - target.Paralyze(40) - else - return TRUE - /obj/item/twohanded/bigspoon name = "comically large spoon" desc = "For when you're only allowed one spoonful of something." @@ -1028,82 +669,3 @@ /obj/item/twohanded/bigspoon/update_icon() hitsound = wielded ? 'yogstation/sound/weapons/bat_hit.ogg' : 'sound/items/trayhit1.ogg' //big donk if wielded item_state = "bigspoon[wielded]" //i don't know why it's item_state rather than icon_state like every other wielded weapon - return - - -/* -Broom -*/ - -#define BROOM_PUSH_LIMIT 20 -/obj/item/twohanded/broom - name = "broom" - desc = "This is my BROOMSTICK! It can be used manually or braced with two hands to sweep items as you move." - icon = 'icons/obj/janitor.dmi' - icon_state = "broom0" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 8 - throwforce = 10 - throw_speed = 3 - throw_range = 7 - w_class = WEIGHT_CLASS_BULKY - force_wielded = 4 - attack_verb = list("swept", "brushed off", "bludgeoned", "whacked") - resistance_flags = FLAMMABLE - -/obj/item/twohanded/broom/update_icon() - icon_state = "broom[wielded]" - -/obj/item/twohanded/broom/wield(mob/user) - . = ..() - if(!wielded) - return - - to_chat(user, span_notice("You brace the [src] against the ground in a firm sweeping stance.")) - RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(sweep)) - -/obj/item/twohanded/broom/unwield(mob/user) - . = ..() - UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE) - -/obj/item/twohanded/broom/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - sweep(user, A) - -/obj/item/twohanded/broom/proc/sweep(mob/user, atom/A) - - var/turf/current_item_loc = isturf(A) ? A : get_turf(A) - if (!isturf(current_item_loc)) - return - var/turf/new_item_loc = get_step(current_item_loc, user.dir) - var/obj/machinery/disposal/bin/target_bin = locate(/obj/machinery/disposal/bin) in new_item_loc.contents - var/i = 1 - for (var/obj/item/garbage in current_item_loc.contents) - if (!garbage.anchored) - if (target_bin) - garbage.forceMove(target_bin) - else - garbage.Move(new_item_loc, user.dir) - i++ - if (i > BROOM_PUSH_LIMIT) - break - if (i > 1) - if (target_bin) - target_bin.update_icon() - to_chat(user, span_notice("You sweep the pile of garbage into [target_bin].")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) - -/obj/item/twohanded/broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) //bless you whoever fixes this copypasta - J.put_in_cart(src, user) - J.mybroom=src - J.update_icon() - -/obj/item/twohanded/broom/cyborg - name = "robotic push broom" - -/obj/item/twohanded/broom/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) - to_chat(user, span_notice("You cannot place your [src] into the [J]")) - return FALSE diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 0d05a9729a33..37fd6d73c954 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -333,7 +333,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/wirerod/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/shard)) - var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear + var/obj/item/melee/spear/S = new /obj/item/melee/spear remove_item_from_storage(user) if (!user.transferItemToLoc(I, S)) @@ -588,7 +588,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/mounted_chainsaw/Destroy() var/obj/item/bodypart/part - new /obj/item/twohanded/required/chainsaw(get_turf(src)) + new /obj/item/melee/chainsaw(get_turf(src)) if(iscarbon(loc)) var/mob/living/carbon/holder = loc var/index = holder.get_held_index_of_item(src) @@ -823,21 +823,3 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 to_chat(user, span_warning("[M] is too close to use [src] on.")) return M.attack_hand(user) - -/obj/item/twohanded/required/raisedhands - name = "raised hands" - desc = "What are you, French?" - icon = 'icons/obj/toy.dmi' - icon_state = "latexballon" - item_state = "nothing" - force = 0 - throwforce = 0 - w_class = WEIGHT_CLASS_HUGE - item_flags = DROPDEL | ABSTRACT - -/obj/item/twohanded/required/raisedhands/attack(mob/living/M, mob/living/user) - return - -/obj/item/twohanded/required/raisedhands/dropped(mob/user) - user.visible_message(span_userdanger(("[user] lowers their hands!"))) - ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 87ddb7d12cd9..8f88403b9ae5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -136,7 +136,7 @@ new /obj/item/clothing/shoes/sneakers/white(src) new /obj/item/radio/headset/headset_medcargo(src) new /obj/item/clothing/mask/gas/explorer(src) - new /obj/item/twohanded/binoculars(src) + new /obj/item/binoculars(src) new /obj/item/pinpointer/crew(src) new /obj/item/sensor_device(src) new /obj/item/bodybag/environmental(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 8658b81c86f5..12a29dddd2fe 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -178,7 +178,7 @@ new /obj/item/clothing/suit/armor/vest/det_suit(src) new /obj/item/storage/belt/holster/full(src) new /obj/item/pinpointer/crew(src) - new /obj/item/twohanded/binoculars(src) + new /obj/item/binoculars(src) new /obj/item/storage/backpack/duffelbag/clothing/sec/detective(src) new /obj/item/barrier_taperoll/police(src) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 49548bf352c4..34212d11468c 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -10,7 +10,7 @@ integrity_failure = 50 var/locked = TRUE var/open = FALSE - var/obj/item/twohanded/fireaxe/fireaxe + var/obj/item/fireaxe/fireaxe var/obj/item/card/id/captains_spare/spareid var/obj/item/twohanded/fishingrod/collapsible/miningmedic/olreliable //what the fuck? var/alert = TRUE @@ -66,8 +66,8 @@ //yogs end else if(open || broken) //Fireaxe cabinet is open or broken, so we can access it's axe slot - if(istype(I, /obj/item/twohanded/fireaxe) && !fireaxe && axe) - var/obj/item/twohanded/fireaxe/F = I + if(istype(I, /obj/item/fireaxe) && !fireaxe && axe) + var/obj/item/fireaxe/F = I if(F.wielded) to_chat(user, span_warning("Unwield the [F.name] first.")) return diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 93a4cacd3c57..678e3983b9d8 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -305,7 +305,7 @@ icon_state = "fullgrass_[rand(1, 3)]" . = ..() -/obj/item/twohanded/required/kirbyplants +/obj/item/kirbyplants name = "potted plant" icon = 'icons/obj/flora/plants.dmi' icon_state = "plant-01" @@ -317,23 +317,24 @@ throw_speed = 2 throw_range = 4 -/obj/item/twohanded/required/kirbyplants/Initialize(mapload) +/obj/item/kirbyplants/Initialize(mapload) . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) AddComponent(/datum/component/tactical) -/obj/item/twohanded/required/kirbyplants/random +/obj/item/kirbyplants/random icon = 'icons/obj/flora/_flora.dmi' icon_state = "random_plant" var/list/static/states -/obj/item/twohanded/required/kirbyplants/random/Initialize(mapload) +/obj/item/kirbyplants/random/Initialize(mapload) . = ..() icon = 'icons/obj/flora/plants.dmi' if(!states) generate_states() icon_state = pick(states) -/obj/item/twohanded/required/kirbyplants/random/proc/generate_states() +/obj/item/kirbyplants/random/proc/generate_states() states = list() for(var/i in 1 to 34) //yogs changed 25 plants to 34 var/number @@ -345,19 +346,19 @@ states += "applebush" -/obj/item/twohanded/required/kirbyplants/dead +/obj/item/kirbyplants/dead name = "RD's potted plant" desc = "A gift from the botanical staff, presented after the RD's reassignment. There's a tag on it that says \"Y'all come back now, y'hear?\"\nIt doesn't look very healthy..." icon_state = "plant-25" -/obj/item/twohanded/required/kirbyplants/photosynthetic +/obj/item/kirbyplants/photosynthetic name = "photosynthetic potted plant" desc = "A bioluminescent plant." icon_state = "plant-09" light_color = "#2cb2e8" light_range = 3 -/obj/item/twohanded/required/kirbyplants/Initialize(mapload) +/obj/item/kirbyplants/Initialize(mapload) . = ..() AddComponent(/datum/component/storage/concrete/kirbyplants) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index e6923a09f890..5fd05218b157 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -99,7 +99,7 @@ uniform = /obj/item/clothing/under/tribal head = /obj/item/clothing/head/helmet/skull suit = /obj/item/clothing/suit/armor/bone/heavy - back = /obj/item/twohanded/bonespear + back = /obj/item/melee/spear/bonespear gloves = /obj/item/clothing/gloves/bracer belt = /obj/item/storage/belt/mining/primitive shoes = /obj/item/clothing/shoes/xeno_wraps @@ -111,7 +111,7 @@ uniform = /obj/item/clothing/under/ash_robe/chief head = /obj/item/clothing/head/crown/resin suit = /obj/item/clothing/suit/armor/bone - back = /obj/item/twohanded/bonespear/chitinspear + back = /obj/item/melee/spear/bonespear/chitinspear gloves = /obj/item/clothing/gloves/color/black/goliath shoes = /obj/item/clothing/shoes/xeno_wraps/goliath neck = /obj/item/clothing/neck/cloak/tribalmantle diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index 258ef6579213..57b9335c7232 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/structures.dmi' density = FALSE anchored = TRUE - var/obj/item/twohanded/spear/spear + var/obj/item/melee/spear/spear var/obj/item/bodypart/head/victim /obj/structure/headpike/glass //for regular spears @@ -23,15 +23,15 @@ update_icon() /obj/structure/headpike/glass/CheckParts(list/parts_list) - spear = locate(/obj/item/twohanded/spear) in parts_list + spear = locate(/obj/item/melee/spear) in parts_list ..() /obj/structure/headpike/bone/CheckParts(list/parts_list) - spear = locate(/obj/item/twohanded/bonespear) in parts_list + spear = locate(/obj/item/melee/spear/bonespear) in parts_list ..() /obj/structure/headpike/bamboo/CheckParts(list/parts_list) - spear = locate(/obj/item/twohanded/bamboospear) in parts_list + spear = locate(/obj/item/melee/spear/bamboospear) in parts_list ..() /obj/structure/headpike/Initialize(mapload) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 37bb885f2d59..b3ad4b4d145d 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -9,7 +9,7 @@ var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite var/obj/item/storage/bag/trash/mybag var/obj/item/mop/mymop - var/obj/item/twohanded/broom/mybroom + var/obj/item/broom/mybroom var/obj/item/reagent_containers/spray/cleaner/myspray var/obj/item/lightreplacer/myreplacer var/obj/item/paint/paint_remover/myremover @@ -94,9 +94,9 @@ l.janicart_insert(user,src) else to_chat(user, fail_msg) - else if(istype(I, /obj/item/twohanded/broom)) + else if(istype(I, /obj/item/broom)) if(!mybroom) - var/obj/item/twohanded/broom/b=I + var/obj/item/broom/b=I b.janicart_insert(user,src) else to_chat(user, fail_msg) diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index e092293e435a..786f77febfd4 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -825,7 +825,7 @@ stage = GIBTONITE_DETONATE explosion(bombturf,1,2,5, adminlog = 0) if(stage == GIBTONITE_STABLE) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore. - var/obj/item/twohanded/required/gibtonite/G = new (src) + var/obj/item/melee/gibtonite/G = new (src) if(det_time <= 0) G.quality = 3 G.icon_state = "Gibtonite ore 3" diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index 796fe71a52d3..8407b937aaff 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -148,7 +148,7 @@ /turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user) if(W.is_sharp() && W.force) var/duration = (48/W.force) * 2 //In seconds, for now. - if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/twohanded/fireaxe)) + if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe)) duration /= 4 //Much better with hatchets and axes. if(do_after(user, duration*10, src)) //Into deciseconds. dismantle_wall(FALSE,FALSE) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 7dd6c1b46906..d0c665dbd9e6 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -210,7 +210,7 @@ GLOBAL_LIST_EMPTY(station_turfs) coil.place_turf(src, user) return TRUE - else if(istype(C, /obj/item/twohanded/rcl)) + else if(istype(C, /obj/item/rcl)) handleRCL(C, user) return FALSE diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 4d03bdd61615..c444519e7ae1 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -126,7 +126,7 @@ L.forceMove(LA) L.remove_status_effect(/datum/status_effect/hallucination) to_chat(L, "The battle is won. Your bloodlust subsides.") - for(var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw in L) + for(var/obj/item/melee/chainsaw/doomslayer/chainsaw in L) qdel(chainsaw) else to_chat(L, "You are not yet worthy of passing. Drag a severed head to the barrier to be allowed entry to the hall of champions.") diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 74c0b5bd29c7..a2158bd12823 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -89,7 +89,7 @@ user.apply_damage(30, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) user.dropItemToGround(src) -/obj/item/twohanded/required/cult_bastard +/obj/item/melee/cult_bastard name = "bloody bastard sword" desc = "An enormous sword used by Nar'sien cultists to rapidly harvest the souls of non-believers." w_class = WEIGHT_CLASS_HUGE @@ -120,30 +120,33 @@ var/spin_cooldown = 25 SECONDS var/dash_toggled = TRUE -/obj/item/twohanded/required/cult_bastard/Initialize(mapload) +/obj/item/melee/cult_bastard/Initialize(mapload) . = ..() + AddComponent(/datum/component/two_handed, \ + require_twohands = TRUE, \ + ) jaunt = new(src) linked_action = new(src) AddComponent(/datum/component/butchering, 50, 80) -/obj/item/twohanded/required/cult_bastard/examine(mob/user) +/obj/item/melee/cult_bastard/examine(mob/user) . = ..() if(contents.len) . += "There are [contents.len] souls trapped within the sword's core." else . += "The sword appears to be quite lifeless." -/obj/item/twohanded/required/cult_bastard/can_be_pulled(user) +/obj/item/cult_bastard/can_be_pulled(user) return FALSE -/obj/item/twohanded/required/cult_bastard/attack_self(mob/user) +/obj/item/melee/cult_bastard/attack_self(mob/user) dash_toggled = !dash_toggled if(dash_toggled) to_chat(loc, span_notice("You raise [src] and prepare to jaunt with it.")) else to_chat(loc, span_notice("You lower [src] and prepare to swing it normally.")) -/obj/item/twohanded/required/cult_bastard/pickup(mob/living/user) +/obj/item/melee/cult_bastard/pickup(mob/living/user) . = ..() if(!iscultist(user)) if(!is_servant_of_ratvar(user)) @@ -163,20 +166,20 @@ linked_action.Grant(user, src) user.update_icons() -/obj/item/twohanded/required/cult_bastard/dropped(mob/user) +/obj/item/melee/cult_bastard/dropped(mob/user) . = ..() linked_action.Remove(user) jaunt.Remove(user) user.update_icons() -/obj/item/twohanded/required/cult_bastard/IsReflect() +/obj/item/melee/cult_bastard/IsReflect() if(spinning) playsound(src, pick('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg', 'sound/weapons/effects/ric3.ogg', 'sound/weapons/effects/ric4.ogg', 'sound/weapons/effects/ric5.ogg'), 100, 1) return TRUE else ..() -/obj/item/twohanded/required/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) +/obj/item/melee/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(prob(final_block_chance)) if(attack_type == PROJECTILE_ATTACK) owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) @@ -188,7 +191,7 @@ return TRUE return FALSE -/obj/item/twohanded/required/cult_bastard/afterattack(atom/target, mob/user, proximity, click_parameters) +/obj/item/melee/cult_bastard/afterattack(atom/target, mob/user, proximity, click_parameters) . = ..() if(dash_toggled && !proximity) jaunt.Teleport(user, target) @@ -233,7 +236,7 @@ button_icon_state = "sintouch" var/cooldown = 0 var/mob/living/carbon/human/holder - var/obj/item/twohanded/required/cult_bastard/sword + var/obj/item/melee/cult_bastard/sword /datum/action/innate/cult/spin2win/Grant(mob/user, obj/bastard) . = ..() diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm index 45bd95f03ac1..8219ad234158 100644 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ b/code/modules/antagonists/fugitive/fugitive_outfits.dm @@ -5,7 +5,7 @@ r_pocket = /obj/item/kitchen/knife/carrotshiv var/list/rhand_items = list( /obj/item/storage/toolbox/mechanical, - /obj/item/twohanded/spear, + /obj/item/melee/spear, /obj/item/gun/ballistic/automatic/surplus, /obj/item/melee/baton/cattleprod ) //Prisoners get a random item from this list diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 2e0f24481c15..006debcc78f2 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -467,5 +467,5 @@ uniform = /obj/item/clothing/under/yogs/soviet_dress_uniform head = /obj/item/clothing/head/ushanka gloves = /obj/item/clothing/gloves/color/black - l_hand = /obj/item/twohanded/spear + l_hand = /obj/item/melee/spear r_hand = /obj/item/assembly/flash diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index a8d38d361538..fa3fdf8a3742 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -272,7 +272,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), ITEM_SLOT_BACK) + H.equip_to_slot_or_del(new /obj/item/melee/spear(H), ITEM_SLOT_BACK) /obj/item/voodoo diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index 0cd5736bba0c..25f88f80753e 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -110,6 +110,6 @@ /datum/spellbook_entry/item/highfrequencyblade name = "High Frequency Blade" desc = "An incredibly swift enchanted blade resonating at a frequency high enough to be able to slice through anything." - item_path = /obj/item/twohanded/vibro_weapon/wizard + item_path = /obj/item/vibro_weapon/wizard category = "Offensive" cost = 3 diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 81a01c7a101b..76339bfee319 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -518,7 +518,7 @@ name = "dungeon heavy" loot = list(/obj/item/twohanded/singularityhammer = 25, /obj/item/twohanded/mjollnir = 10, - /obj/item/twohanded/fireaxe = 25, + /obj/item/fireaxe = 25, /obj/item/organ/brain/alien = 17, /obj/item/twohanded/dualsaber = 15, /obj/item/organ/heart/demon = 7, @@ -541,7 +541,7 @@ loot = list(/obj/item/stack/sheet/mineral/snow{amount = 25} = 10, /obj/item/toy/snowball = 15, /obj/item/shovel = 10, - /obj/item/twohanded/spear = 8, + /obj/item/melee/spear = 8, ) //special items//-- diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 4462ce93d07e..ecef4a1f77ad 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -35,7 +35,7 @@ description = "CentCom's security forces are going through budget cuts. You will be paid if you ship a set of spears." reward = 2000 required_count = 5 - wanted_types = list(/obj/item/twohanded/spear) + wanted_types = list(/obj/item/melee/spear) /datum/bounty/item/assistant/toolbox name = "Toolboxes" @@ -68,7 +68,7 @@ description = "Baseball fever is going on at CentCom! Be a dear and ship them some baseball bats, so that management can live out their childhood dream." reward = 3500 required_count = 5 - wanted_types = list(/obj/item/twohanded/required/baseball_bat) + wanted_types = list(/obj/item/melee/baseball_bat) /datum/bounty/item/assistant/extendohand name = "Extendo-Hand" @@ -150,7 +150,7 @@ description = "Central Command is looking to commission a new BirdBoat-class station. You've been ordered to supply the potted plants." reward = 2000 required_count = 8 - wanted_types = list(/obj/item/twohanded/required/kirbyplants) + wanted_types = list(/obj/item/kirbyplants) /datum/bounty/item/assistant/earmuffs name = "Earmuffs" @@ -176,7 +176,7 @@ name = "Chainsaw" description = "The chef at CentCom is having trouble butchering her animals. She requests one chainsaw, please." reward = 2500 - wanted_types = list(/obj/item/twohanded/required/chainsaw) + wanted_types = list(/obj/item/melee/chainsaw) /datum/bounty/item/assistant/ied name = "IED" diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm index e907263cb8a6..a2dad0de195f 100644 --- a/code/modules/cargo/bounties/engineering.dm +++ b/code/modules/cargo/bounties/engineering.dm @@ -70,7 +70,7 @@ description = "Nanotrasen is requiring new axes to be made. Ship them some metallic hydrogen helmets." reward = 7500 required_count = 3 - wanted_types = list(/obj/item/twohanded/fireaxe/metal_h2_axe) + wanted_types = list(/obj/item/fireaxe/metal_h2_axe) /datum/bounty/item/supermatter_silver name = "Supermatter Silvers" diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index fd757cab241f..d9c8602660b6 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -22,7 +22,7 @@ name = "Bone Axe" description = "Station 12 has had their fire axes stolen by marauding clowns. Ship them a bone axe as a replacement." reward = 7500 - wanted_types = list(/obj/item/twohanded/fireaxe/boneaxe) + wanted_types = list(/obj/item/fireaxe/boneaxe) /datum/bounty/item/mining/bone_bow name = "Bone Bow" diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index d056cdb28c3b..95d4cb6996f6 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -39,7 +39,7 @@ /obj/item/clothing/under/drip, //Drip is very valuable to many investors in high fashion /obj/item/clothing/shoes/drip, /obj/item/gun/energy/plasmacutter/adv/robocutter, - /obj/item/twohanded/bonespear/stalwartpike) + /obj/item/melee/spear/bonespear/stalwartpike) //Megafauna loot, except for stalwart, ash drakes, and legion diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index 6e5cd533033d..ed290227e2a3 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -73,4 +73,4 @@ /datum/export/weapon/gibtonite cost = 1000 unit_name = "Gibtonite Chunk" - export_types = list(/obj/item/twohanded/required/gibtonite) + export_types = list(/obj/item/melee/gibtonite) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index ba19f778d306..c0af58143dc8 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1832,7 +1832,7 @@ /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket, /obj/item/mop, - /obj/item/twohanded/broom, + /obj/item/broom, /obj/item/clothing/suit/caution, /obj/item/clothing/suit/caution, /obj/item/clothing/suit/caution, @@ -2284,11 +2284,11 @@ name = "Potted Plants Crate" desc = "Spruce up the station with these lovely plants! Contains a random assortment of five potted plants from Nanotrasen's potted plant research division. Warranty void if thrown." cost = 700 - contains = list(/obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random) + contains = list(/obj/item/kirbyplants/random, + /obj/item/kirbyplants/random, + /obj/item/kirbyplants/random, + /obj/item/kirbyplants/random, + /obj/item/kirbyplants/random) crate_name = "potted plants crate" crate_type = /obj/structure/closet/crate/hydroponics diff --git a/code/modules/clothing/outfits/imperial.dm b/code/modules/clothing/outfits/imperial.dm index 264e5c04a55c..9a60ee5d8f33 100644 --- a/code/modules/clothing/outfits/imperial.dm +++ b/code/modules/clothing/outfits/imperial.dm @@ -143,7 +143,7 @@ new /obj/item/reagent_containers/autoinjector/medipen(src) new /obj/item/restraints/handcuffs/cable/zipties(src) new /obj/item/jawsoflife/jimmy(src) - new /obj/item/twohanded/binoculars(src) + new /obj/item/binoculars(src) /obj/item/storage/belt/military/imperial/sergeant/Initialize(mapload) // Sergeant diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index eee636bc41d0..5e24db298e40 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -126,7 +126,7 @@ l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana r_pocket = /obj/item/bikehorn id = /obj/item/card/id - r_hand = /obj/item/twohanded/fireaxe + r_hand = /obj/item/fireaxe /datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(visualsOnly) @@ -152,7 +152,7 @@ suit = /obj/item/clothing/suit/apron l_pocket = /obj/item/kitchen/knife r_pocket = /obj/item/scalpel - r_hand = /obj/item/twohanded/fireaxe + r_hand = /obj/item/fireaxe /datum/outfit/psycho/post_equip(mob/living/carbon/human/H) for(var/obj/item/carried_item in H.get_equipped_items(TRUE)) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index fd422cc78b1e..3c1988fbb74b 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -377,7 +377,7 @@ hardsuit_type = "syndi" w_class = WEIGHT_CLASS_NORMAL armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 25, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, WOUND = 25) - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/twohanded/fireaxe/energy) + allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/fireaxe/energy) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi jetpack = /obj/item/tank/jetpack/suit diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 6fe7c7c62bab..a24cf2eb9469 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -138,7 +138,7 @@ /obj/item/clothing/suit/armor/bone name = "bone armor" desc = "A mass of bones wrapped together into a protective shell. Not as effective as modern protection, but it still offers notable protection." - allowed = list (/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/tank/internals/ipc_coolant, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) + allowed = list (/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/tank/internals/ipc_coolant, /obj/item/melee/spear, /obj/item/melee/spear/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) icon_state = "bonearmor" item_state = "bonearmor" blood_overlay_type = "armor" @@ -157,7 +157,7 @@ /obj/item/clothing/suit/armor/tribalcoat name = "tribal coat" desc = "A light, yet tough leather coat, reinforced with bone pauldrons. Often worn by tribal leaders." - allowed = list (/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/tank/internals/ipc_coolant, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) + allowed = list (/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/tank/internals/ipc_coolant, /obj/item/melee/spear, /obj/item/melee/spear/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) icon_state = "tribalcoat" item_state = "tribalcoat" blood_overlay_type = "armor" @@ -168,7 +168,7 @@ /obj/item/clothing/suit/armor/pathfinder name = "pathfinder cloak" desc = "A thick cloak woven from sinew and hides, designed to protect its wearer from hazardous weather." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/melee/spear/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) icon_state = "pathcloak" item_state = "pathcloak" armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 15) @@ -338,7 +338,7 @@ name = "goliath cloak" icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials. It is coveted amongst exiles and hermits." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/melee/spear/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 35, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot resistance_flags = FIRE_PROOF hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath @@ -374,7 +374,7 @@ name = "drake armour" icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/melee/spear/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) armor = list(MELEE = 70, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 60, BIO = 60, RAD = 50, FIRE = 100, ACID = 100) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 90154e8acf52..00921f1c28dd 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -149,7 +149,7 @@ /datum/crafting_recipe/food/baseballburger name = "Home Run Baseball Burger" reqs = list( - /obj/item/twohanded/required/baseball_bat = 1, + /obj/item/melee/baseball_bat = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) result = /obj/item/reagent_containers/food/snacks/burger/baseball diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index f9c695e2e838..110c1f76c2f3 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1720,7 +1720,7 @@ GLOBAL_LIST_EMPTY(aide_list) selfcharge = 1 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF -/obj/item/twohanded/bonespear/stalwartpike +/obj/item/melee/spear/bonespear/stalwartpike icon = 'icons/obj/weapons/spears.dmi' icon_state = "stalwart_spear0" lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' @@ -1743,7 +1743,7 @@ GLOBAL_LIST_EMPTY(aide_list) var/fauna_damage_type = BRUTE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF -/obj/item/twohanded/bonespear/stalwartpike/update_icon() +/obj/item/melee/spear/bonespear/stalwartpike/update_icon() . = ..() if(wielded) icon_state = "stalwart_spear1" @@ -1751,7 +1751,7 @@ GLOBAL_LIST_EMPTY(aide_list) icon_state = "stalwart_spear0" SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) -/obj/item/twohanded/bonespear/stalwartpike/wield(mob/living/carbon/M) +/obj/item/melee/spear/bonespear/stalwartpike/wield(mob/living/carbon/M) . = ..() if(wielded) playsound(src, 'sound/magic/summonitems_generic.ogg', 50, 1) @@ -1761,7 +1761,7 @@ GLOBAL_LIST_EMPTY(aide_list) force = 8 fauna_damage_bonus = 52 -/obj/item/twohanded/bonespear/stalwartpike/unwield(mob/living/carbon/M) +/obj/item/melee/spear/bonespear/stalwartpike/unwield(mob/living/carbon/M) if(wielded) playsound(src, 'sound/magic/teleport_diss.ogg', 50, 1) sharpness = initial(sharpness) @@ -1771,7 +1771,7 @@ GLOBAL_LIST_EMPTY(aide_list) fauna_damage_bonus = initial(fauna_damage_bonus) . = ..() -/obj/item/twohanded/bonespear/stalwartpike/afterattack(atom/target, mob/user, proximity) +/obj/item/melee/spear/bonespear/stalwartpike/afterattack(atom/target, mob/user, proximity) . = ..() if(!proximity || !wielded) return @@ -1792,7 +1792,7 @@ GLOBAL_LIST_EMPTY(aide_list) new /obj/item/gun/energy/plasmacutter/adv/robocutter(src) new /obj/item/gem/purple(src) if(2) - new /obj/item/twohanded/bonespear/stalwartpike(src) + new /obj/item/melee/spear/bonespear/stalwartpike(src) new /obj/item/ai_cpu/stalwart(src) //Just some minor stuff diff --git a/code/modules/mining/lavaland/world_anvil.dm b/code/modules/mining/lavaland/world_anvil.dm index acf746ba7888..3853d4a2db17 100644 --- a/code/modules/mining/lavaland/world_anvil.dm +++ b/code/modules/mining/lavaland/world_anvil.dm @@ -39,8 +39,8 @@ . += "It currently has [forge_charges] forge[forge_charges != 1 ? "s" : ""] remaining." /obj/structure/world_anvil/attackby(obj/item/I, mob/living/user, params) - if(istype(I,/obj/item/twohanded/required/gibtonite)) - var/obj/item/twohanded/required/gibtonite/placed_ore = I + if(istype(I,/obj/item/melee/gibtonite)) + var/obj/item/melee/gibtonite/placed_ore = I forge_charges = forge_charges + placed_ore.quality to_chat(user,"You place down the gibtonite on the World Anvil, and watch as the gibtonite melts into it. The World Anvil is now heated enough for [forge_charges] forge[forge_charges > 1 ? "s" : ""].") qdel(placed_ore) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index c6332a2431e6..63bff09afa86 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -223,7 +223,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ item_state = "slag" singular_name = "slag chunk" -/obj/item/twohanded/required/gibtonite +/obj/item/melee/gibtonite name = "gibtonite ore" desc = "Extremely explosive if struck with mining equipment, Gibtonite is often used by miners to speed up their work by using it as a mining charge. This material is illegal to possess by unauthorized personnel under space law." icon = 'icons/obj/mining.dmi' @@ -237,12 +237,16 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ var/attacher = "UNKNOWN" var/det_timer -/obj/item/twohanded/required/gibtonite/Destroy() +/obj/item/melee/gibtonite/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + +/obj/item/melee/gibtonite/Destroy() qdel(wires) wires = null return ..() -/obj/item/twohanded/required/gibtonite/attackby(obj/item/I, mob/user, params) +/obj/item/melee/gibtonite/attackby(obj/item/I, mob/user, params) if(!wires && istype(I, /obj/item/assembly/igniter)) user.visible_message("[user] attaches [I] to [src].", span_notice("You attach [I] to [src].")) wires = new /datum/wires/explosive/gibtonite(src) @@ -278,20 +282,20 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ return ..() -/obj/item/twohanded/required/gibtonite/attack_self(user) +/obj/item/melee/gibtonite/attack_self(user) if(wires) wires.interact(user) else ..() -/obj/item/twohanded/required/gibtonite/bullet_act(obj/item/projectile/P) +/obj/item/melee/gibtonite/bullet_act(obj/item/projectile/P) GibtoniteReaction(P.firer) . = ..() -/obj/item/twohanded/required/gibtonite/ex_act() +/obj/item/melee/gibtonite/ex_act() GibtoniteReaction(null, 1) -/obj/item/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0) +/obj/item/melee/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0) if(!primed) primed = TRUE playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1) @@ -314,7 +318,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ log_bomber(user, "has primed a", src, "for detonation", notify_admins) det_timer = addtimer(CALLBACK(src, PROC_REF(detonate), notify_admins), det_time, TIMER_STOPPABLE) -/obj/item/twohanded/required/gibtonite/proc/detonate(notify_admins) +/obj/item/melee/gibtonite/proc/detonate(notify_admins) if(primed) switch(quality) if(GIBTONITE_QUALITY_HIGH) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index d6a0b67b1711..a13bd92a71d4 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -213,7 +213,7 @@ return for(var/obj/item/I in user.held_items) user.drop_all_held_items(I, TRUE) - var/obj/item/twohanded/required/raisedhands/L = new(user) + var/obj/item/raisedhands/L = new(user) user.put_in_hands(L) /datum/emote/living/jump @@ -571,4 +571,4 @@ key_third_person = "cluelesses" message = "looks clueless." message_param = "looks cluelessly at %t" - stat_allowed = SOFT_CRIT \ No newline at end of file + stat_allowed = SOFT_CRIT diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index bd710740f7c7..23c44c8b7393 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -637,7 +637,7 @@ basic_modules = list( /obj/item/assembly/flash/cyborg/combat, /obj/item/reagent_containers/borghypo/syndicate, - /obj/item/twohanded/shockpaddles/syndicate, + /obj/item/shockpaddles/syndicate, /obj/item/healthanalyzer, /obj/item/retractor, /obj/item/hemostat, diff --git a/code/modules/mob/living/simple_animal/friendly/catslug.dm b/code/modules/mob/living/simple_animal/friendly/catslug.dm index 744858cdf902..7641151a6ab0 100644 --- a/code/modules/mob/living/simple_animal/friendly/catslug.dm +++ b/code/modules/mob/living/simple_animal/friendly/catslug.dm @@ -22,14 +22,14 @@ melee_damage_lower = 0 melee_damage_upper = 0 attacktext = "stabs" - var/obj/item/twohanded/spear/weapon + var/obj/item/melee/spear/weapon /mob/living/simple_animal/pet/catslug/UnarmedAttack(atom/A) . = ..() if(!isitem(A)) return - if(!weapon && istype(A, /obj/item/twohanded/spear)) + if(!weapon && istype(A, /obj/item/melee/spear)) visible_message(span_notice("[src] wields the [A]."), span_notice("You wield the [A].")) weapon = A weapon.forceMove(src) @@ -40,7 +40,7 @@ sharpness = weapon.sharpness attack_sound = weapon.hitsound update_icons() - else if(!weapon && !istype(A, /obj/item/twohanded/spear)) + else if(!weapon && !istype(A, /obj/item/melee/spear)) to_chat(src, span_warning("You do not know how to wield the [A]!")) /mob/living/simple_animal/pet/catslug/RangedAttack(atom/A, params) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index a7d0ba7379dd..f51deb8a3ba1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -340,7 +340,7 @@ suit = /obj/item/clothing/suit/armor/bone gloves = /obj/item/clothing/gloves/bracer if(prob(5)) - back = pickweight(list(/obj/item/twohanded/bonespear = 3, /obj/item/twohanded/fireaxe/boneaxe = 2)) + back = pickweight(list(/obj/item/melee/spear/bonespear = 3, /obj/item/fireaxe/boneaxe = 2)) if(prob(10)) belt = /obj/item/storage/belt/mining/primitive if(prob(30)) diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index c192919cd07b..034d1006afc1 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -51,7 +51,7 @@ melee_damage_upper = 20 deathmessage = "collapses into a pile of bones, its gear falling to the floor!" loot = list(/obj/effect/decal/remains/human, - /obj/item/twohanded/spear, + /obj/item/melee/spear, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat) diff --git a/code/modules/pool/components/swimming.dm b/code/modules/pool/components/swimming.dm index 85acbfb237a8..849b7d2e16e8 100644 --- a/code/modules/pool/components/swimming.dm +++ b/code/modules/pool/components/swimming.dm @@ -75,7 +75,7 @@ /datum/component/swimming/process() var/mob/living/L = parent var/floating = FALSE - var/obj/item/twohanded/required/pool/helditem = L.get_active_held_item() + var/obj/item/pool/helditem = L.get_active_held_item() if(istype(helditem) && helditem.wielded) bob_tick ++ animate(L, time=0.95 SECONDS, pixel_y = (L.pixel_y == bob_height_max) ? bob_height_min : bob_height_max) @@ -95,7 +95,7 @@ L.adjust_fire_stacks(-3) /datum/component/swimming/proc/is_drowning(mob/living/victim) - var/obj/item/twohanded/required/pool/helditem = victim.get_active_held_item() + var/obj/item/pool/helditem = victim.get_active_held_item() if(istype(helditem) && helditem.wielded) return if(iscarbon(victim)) diff --git a/code/modules/pool/components/swimming_felinid.dm b/code/modules/pool/components/swimming_felinid.dm index 62006b528f11..6092c82100bb 100644 --- a/code/modules/pool/components/swimming_felinid.dm +++ b/code/modules/pool/components/swimming_felinid.dm @@ -6,7 +6,7 @@ /datum/component/swimming/felinid/process() ..() var/mob/living/L = parent - var/obj/item/twohanded/required/pool/helditem = L.get_active_held_item() + var/obj/item/pool/helditem = L.get_active_held_item() if(istype(helditem) && helditem.wielded) return switch(rand(1, 100)) diff --git a/code/modules/pool/pool_items.dm b/code/modules/pool/pool_items.dm index 1896c263f62f..99c310f4c208 100644 --- a/code/modules/pool/pool_items.dm +++ b/code/modules/pool/pool_items.dm @@ -1,26 +1,26 @@ -/obj/item/twohanded/required/pool +/obj/item/pool icon = 'icons/obj/pool.dmi' lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' - force = 0 + force = 5 damtype = STAMINA - force_wielded = 5 wieldsound = 'sound/weapons/tap.ogg' unwieldsound = 'sound/weapons/tap.ogg' w_class = WEIGHT_CLASS_BULKY attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") -/obj/item/twohanded/required/pool/Initialize(mapload) +/obj/item/pool/Initialize(mapload) . = ..() //Pick a random color + AddComponent(/datum/component/two_handed, require_twohands = TRUE) color = pick(COLOR_YELLOW, COLOR_LIME, COLOR_RED, COLOR_BLUE_LIGHT, COLOR_CYAN, COLOR_MAGENTA) -/obj/item/twohanded/required/pool/rubber_ring +/obj/item/pool/rubber_ring name = "inflatable" desc = "An inflatable ring used for keeping people afloat. Throw at drowning people to save them." icon_state = "rubber_ring" -/obj/item/twohanded/required/pool/rubber_ring/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/pool/rubber_ring/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom @@ -34,7 +34,7 @@ if(H.put_in_active_hand(src)) visible_message("The [src] lands over [H]'s head!") -/obj/item/twohanded/required/pool/pool_noodle +/obj/item/pool/pool_noodle icon_state = "pool_noodle" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' @@ -42,15 +42,15 @@ desc = "A long noodle made of foam. Helping those with fears of swimming swim since the 1980s." var/suiciding = FALSE -/obj/item/twohanded/required/pool/pool_noodle/attack(mob/target, mob/living/carbon/human/user) +/obj/item/pool/pool_noodle/attack(mob/target, mob/living/carbon/human/user) . = ..() if(wielded && prob(50)) INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) -/obj/item/twohanded/required/pool/pool_noodle/proc/jedi_spin(mob/living/user) //rip complex code, but this fucked up blocking +/obj/item/pool/pool_noodle/proc/jedi_spin(mob/living/user) //rip complex code, but this fucked up blocking user.emote("flip") -/obj/item/twohanded/required/pool/pool_noodle/suicide_act(mob/user) +/obj/item/pool/pool_noodle/suicide_act(mob/user) if(suiciding) return SHAME suiciding = TRUE diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 200b4381ce59..ebdc6bee9c3d 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -144,8 +144,8 @@ By design, d1 is the smallest direction and d2 is the highest return coil.cable_join(src, user) - else if(istype(W, /obj/item/twohanded/rcl)) - var/obj/item/twohanded/rcl/R = W + else if(istype(W, /obj/item/rcl)) + var/obj/item/rcl/R = W if(R.loaded) R.loaded.cable_join(src, user) R.is_empty(user) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 703e8dfe6a9d..d0c091e4fe43 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -595,7 +595,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( /obj/item/circular_saw, /obj/item/gun/energy/plasmacutter, /obj/item/melee/transforming/energy, - /obj/item/twohanded/required/chainsaw, + /obj/item/melee/chainsaw, /obj/item/nullrod/claymore/chainsaw_sword, /obj/item/nullrod/chainsaw, /obj/item/mounted_chainsaw))) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index ab00a666b9e7..84cb6d26af8b 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -34,7 +34,7 @@ id="broom" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 2000) - build_path = /obj/item/twohanded/broom + build_path = /obj/item/broom category = list("initial","Tools","Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_SERVICE diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 9e953babc9da..4c8c02a29160 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -49,7 +49,7 @@ Slimecrossing Weapons return ..() //Adamantine shield - Chilling Adamantine -/obj/item/twohanded/required/adamantineshield +/obj/item/adamantineshield name = "adamantine shield" desc = "A gigantic shield made of solid adamantium." icon = 'icons/obj/slimecrossing.dmi' @@ -66,6 +66,10 @@ Slimecrossing Weapons attack_verb = list("bashed","pounded","slammed") item_flags = SLOWS_WHILE_IN_HAND +/obj/item/adamantineshield/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + //Bloodchiller - Chilling Green /obj/item/gun/magic/bloodchill name = "blood chiller" diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 4a64bb6fe39b..9d83b34df81f 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -300,7 +300,7 @@ Burning extracts: /obj/item/slimecross/burning/adamantine/do_effect(mob/user) user.visible_message(span_notice("[src] crystallizes into a large shield!")) - new /obj/item/twohanded/required/adamantineshield(get_turf(user)) + new /obj/item/adamantineshield(get_turf(user)) ..() /obj/item/slimecross/burning/rainbow diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm index c0438b2fca00..6af81b7afd9f 100644 --- a/code/modules/surgery/advanced/revival.dm +++ b/code/modules/surgery/advanced/revival.dm @@ -29,15 +29,15 @@ /datum/surgery_step/revive name = "shock brain" - implements = list(/obj/item/twohanded/shockpaddles = 100, /obj/item/melee/baton = 75, /obj/item/gun/energy = 60, /obj/item/melee/touch_attack/shock = 100, /obj/item/rod_of_asclepius = 100) + implements = list(/obj/item/shockpaddles = 100, /obj/item/melee/baton = 75, /obj/item/gun/energy = 60, /obj/item/melee/touch_attack/shock = 100, /obj/item/rod_of_asclepius = 100) time = 12 SECONDS success_sound = 'sound/magic/lightningbolt.ogg' failure_sound = 'sound/machines/defib_zap.ogg' /datum/surgery_step/revive/tool_check(mob/user, obj/item/tool) . = TRUE - if(istype(tool, /obj/item/twohanded/shockpaddles)) - var/obj/item/twohanded/shockpaddles/S = tool + if(istype(tool, /obj/item/shockpaddles)) + var/obj/item/shockpaddles/S = tool if((S.req_defib && !S.defib.powered) || !S.wielded || S.cooldown || S.busy) to_chat(user, span_warning("You need to wield both paddles, and [S.defib] must be powered!")) return FALSE @@ -61,7 +61,7 @@ target.notify_ghost_cloning("Someone is trying to zap your brain.", source = target) /datum/surgery_step/revive/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(istype(tool, /obj/item/twohanded/shockpaddles)) + if(istype(tool, /obj/item/shockpaddles)) playsound(tool, 'sound/machines/defib_charge.ogg', 75, 0) else ..() diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 8028bec15537..73712ab4f036 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -21,7 +21,7 @@ /datum/surgery_step/sever_limb name = "sever limb" - implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, /obj/item/twohanded/required/chainsaw = 80, /obj/item/mounted_chainsaw = 80, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25) + implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, /obj/item/melee/chainsaw = 80, /obj/item/mounted_chainsaw = 80, /obj/item/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25) time = 6.4 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ2.ogg' diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 429d22cd5100..084b48e0de16 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -119,13 +119,13 @@ /datum/surgery_step/saw name = "saw bone" implements = list(TOOL_SAW = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, - /obj/item/melee/arm_blade = 75, /obj/item/mounted_chainsaw = 65, /obj/item/twohanded/required/chainsaw = 50, - /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25) + /obj/item/melee/arm_blade = 75, /obj/item/mounted_chainsaw = 65, /obj/item/melee/chainsaw = 50, + /obj/item/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25) time = 5.4 SECONDS preop_sound = list( /obj/item/circular_saw = 'sound/surgery/saw.ogg', /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg', - /obj/item/twohanded/fireaxe = 'sound/surgery/scalpel1.ogg', + /obj/item/fireaxe = 'sound/surgery/scalpel1.ogg', /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', /obj/item/kitchen/knife/butcher = 'sound/surgery/scalpel1.ogg', /obj/item = 'sound/surgery/scalpel1.ogg', diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index beda133348e9..760c1d75f11b 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -35,7 +35,7 @@ /datum/surgery_step/add_prosthetic name = "add prosthetic" - implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100, /obj/item/twohanded/required/chainsaw = 100, /obj/item/melee/synthetic_arm_blade = 100, /obj/item/medbeam_arm = 100) + implements = list(/obj/item/bodypart = 100, /obj/item/organ_storage = 100, /obj/item/melee/chainsaw = 100, /obj/item/melee/synthetic_arm_blade = 100, /obj/item/medbeam_arm = 100) time = 3.2 SECONDS var/organ_rejection_dam = 0 @@ -110,7 +110,7 @@ "[user] finishes attaching [tool]!", "[user] finishes the attachment procedure!") qdel(tool) - if(istype(tool, /obj/item/twohanded/required/chainsaw)) + if(istype(tool, /obj/item/melee/chainsaw)) var/obj/item/mounted_chainsaw/new_arm = new(target) target_zone == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) return TRUE diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index d90b6a4a74d6..ab8c93948007 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -617,7 +617,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Energy Fire Axe" desc = "A terrifying axe with a blade of pure energy, able to tear down structures with ease. \ Easier to store than a standard fire axe while inactive." - item = /obj/item/twohanded/fireaxe/energy + item = /obj/item/fireaxe/energy cost = 10 include_modes = list(/datum/game_mode/nuclear) surplus = 0 @@ -2581,7 +2581,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Energy Fire Axe" desc = "A terrifying axe with a blade of pure energy, able to tear down structures with ease. \ Easier to store than a standard fire axe while inactive." - item = /obj/item/twohanded/fireaxe/energy + item = /obj/item/fireaxe/energy cost = 10 restricted_roles = list("Station Engineer","Atmospheric Technician","Network Admin","Chief Engineer") diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index d239781277d7..0fdc3ad4ec6e 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -356,7 +356,7 @@ /obj/item/clothing/under/janimaid = 2, /obj/item/clothing/gloves/color/black = 2, /obj/item/clothing/head/soft/purple = 2, - /obj/item/twohanded/broom = 2, + /obj/item/broom = 2, /obj/item/paint/paint_remover = 2, /obj/item/melee/flyswatter = 2, /obj/item/flashlight = 2, diff --git a/yogstation.dme b/yogstation.dme index 14d8042c571d..c6f3667de60d 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1084,6 +1084,7 @@ #include "code\game\objects\items\ashtray.dm" #include "code\game\objects\items\barriertape.dm" #include "code\game\objects\items\bell.dm" +#include "code\game\objects\items\binoculars.dm" #include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\body_egg.dm" #include "code\game\objects\items\bodybag.dm" @@ -1138,6 +1139,7 @@ #include "code\game\objects\items\pneumaticCannon.dm" #include "code\game\objects\items\powerfist.dm" #include "code\game\objects\items\puzzle_pieces.dm" +#include "code\game\objects\items\raised_hand.dm" #include "code\game\objects\items\RCD.dm" #include "code\game\objects\items\RCL.dm" #include "code\game\objects\items\religion.dm" @@ -1328,7 +1330,11 @@ #include "code\game\objects\items\tools\weldingtool.dm" #include "code\game\objects\items\tools\wirecutters.dm" #include "code\game\objects\items\tools\wrench.dm" +#include "code\game\objects\items\two_handed\baseball_bat.dm" +#include "code\game\objects\items\two_handed\broom.dm" +#include "code\game\objects\items\two_handed\chainsaw.dm" #include "code\game\objects\items\two_handed\fireaxe.dm" +#include "code\game\objects\items\two_handed\highfrequencyblade.dm" #include "code\game\objects\items\two_handed\spears.dm" #include "code\game\objects\structures\aliens.dm" #include "code\game\objects\structures\artstuff.dm" diff --git a/yogstation/code/_globalvars/lists/maintenance_loot.dm b/yogstation/code/_globalvars/lists/maintenance_loot.dm index 3267bbec6c9d..49890c7e7ae0 100644 --- a/yogstation/code/_globalvars/lists/maintenance_loot.dm +++ b/yogstation/code/_globalvars/lists/maintenance_loot.dm @@ -517,8 +517,8 @@ GLOBAL_LIST_INIT(maintenance_loot_makeshift,list( /obj/item/storage/box/fancy/rollingpapers = W_RARE, /obj/item/storage/box/hug = W_RARE, /obj/item/tank/jetpack/improvised = W_MYTHICAL, - /obj/item/twohanded/rcl/ghetto = W_MYTHICAL, - /obj/item/twohanded/required/baseball_bat = W_RARE, + /obj/item/rcl/ghetto = W_MYTHICAL, + /obj/item/melee/baseball_bat = W_RARE, /obj/item/weaponcrafting/receiver = W_UNCOMMON, /obj/item/weaponcrafting/silkstring = W_UNCOMMON, /obj/item/weaponcrafting/stock = W_UNCOMMON, @@ -763,7 +763,7 @@ GLOBAL_LIST_INIT(maintenance_loot_minor,list( /obj/item/surgicaldrill = W_RARE, /obj/item/toy/crayon/spraycan/lubecan = W_MYTHICAL, /obj/item/toy/crayon/spraycan/mimecan = W_MYTHICAL, - /obj/item/twohanded/rcl = W_MYTHICAL, + /obj/item/rcl = W_MYTHICAL, /obj/item/watertank = W_MYTHICAL, /obj/item/watertank/atmos = W_MYTHICAL, /obj/item/watertank/janitor = W_MYTHICAL, @@ -892,7 +892,7 @@ GLOBAL_LIST_INIT(maintenance_loot_moderate,list( /obj/item/toy/cards/deck/syndicate = W_MYTHICAL, /obj/item/toy/crayon/spraycan/hellcan = W_MYTHICAL, /obj/item/toy/eightball/haunted = W_RARE, - /obj/item/twohanded/binoculars = W_RARE, + /obj/item/binoculars = W_RARE, /obj/item/clothing/gloves/chameleon/broken = W_RARE, /obj/item/clothing/head/chameleon/broken = W_RARE, /obj/item/clothing/head/foilhat = W_RARE, diff --git a/yogstation/code/game/gamemodes/battle_royale/loot.dm b/yogstation/code/game/gamemodes/battle_royale/loot.dm index ce7ca7e84a71..e7111a52a4b8 100644 --- a/yogstation/code/game/gamemodes/battle_royale/loot.dm +++ b/yogstation/code/game/gamemodes/battle_royale/loot.dm @@ -144,29 +144,29 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/kitchen/knife/carrotshiv = 5, /obj/item/kitchen/knife/combat/survival = 4, - /obj/item/twohanded/required/baseball_bat = 4, - /obj/item/twohanded/spear = 4, + /obj/item/melee/baseball_bat = 4, + /obj/item/melee/spear = 4, /obj/item/pen/edagger = 3, /obj/item/twohanded/bigspoon = 3, /obj/item/kitchen/knife/combat = 2, - /obj/item/twohanded/bonespear = 2, + /obj/item/melee/spear/bonespear = 2, /obj/item/nullrod/hammer = 2, /obj/item/nullrod/tribal_knife = 2, /obj/item/nullrod/vibro = 2, /obj/item/flamethrower/full/tank = 1, - /obj/item/twohanded/required/chainsaw = 1, - /obj/item/twohanded/fireaxe/metal_h2_axe = 1, + /obj/item/melee/chainsaw = 1, + /obj/item/fireaxe/metal_h2_axe = 1, /obj/item/nullrod/whip = 1, /obj/item/twohanded/vxtvulhammer = 0, /obj/item/gun/ballistic/shotgun/riot = 0, /obj/item/gun/ballistic/shotgun/automatic/dual_tube = 0, /obj/item/gun/ballistic/revolver/detective = 0, - /obj/item/twohanded/required/baseball_bat/homerun = 0, - /obj/item/twohanded/fireaxe = 0, + /obj/item/melee/baseball_bat/homerun = 0, + /obj/item/fireaxe = 0, /obj/item/nullrod/talking = 0, /obj/item/melee/powerfist = -1, @@ -174,7 +174,7 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/gun/ballistic/shotgun/doublebarrel = -1, /obj/item/melee/transforming/energy/sword = -1, /obj/item/gun/energy/laser/retro/old = -1, - /obj/item/twohanded/required/baseball_bat/metal_bat = -1, + /obj/item/melee/baseball_bat/metal_bat = -1, /obj/item/gun/ballistic/shotgun/automatic/combat = -2, /obj/item/gun/ballistic/shotgun/automatic/combat/compact = -2, @@ -193,7 +193,7 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/gun/ballistic/automatic/c20r/unrestricted = -3, /obj/item/gun/ballistic/automatic/mini_uzi = -3, /obj/item/gun/ballistic/automatic/tommygun = -3, - /obj/item/twohanded/vibro_weapon = -3, //Strong melee weapon, but not enough to be -5 + /obj/item/vibro_weapon = -3, //Strong melee weapon, but not enough to be -5 /obj/item/autosurgeon/arm/syndicate/syndie_mantis = -4, /obj/item/twohanded/dualsaber = -4, @@ -202,7 +202,7 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/melee/fryingpan/bananium = -5, /obj/item/his_grace = -5, - /obj/item/twohanded/required/chainsaw/doomslayer = -5, + /obj/item/melee/chainsaw/doomslayer = -5, /obj/item/gun/ballistic/bow/energy/ert = -5, /obj/item/gun/ballistic/automatic/sniper_rifle = -5, //Sniper stuns )) diff --git a/yogstation/code/modules/jobs/job_types/tourist.dm b/yogstation/code/modules/jobs/job_types/tourist.dm index 53da5a78e611..d5ebb5c1e177 100644 --- a/yogstation/code/modules/jobs/job_types/tourist.dm +++ b/yogstation/code/modules/jobs/job_types/tourist.dm @@ -19,7 +19,7 @@ mail_goodies = list( /obj/effect/spawner/lootdrop/plushies = 15, /obj/item/fakeartefact = 5, - /obj/item/twohanded/binoculars = 5, + /obj/item/binoculars = 5, /obj/item/storage/photo_album = 4, /obj/item/clothing/glasses/sunglasses = 1 ) From 759d41838d1e15714b988906adeea7ed55def4fb Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 00:55:54 -0400 Subject: [PATCH 03/15] Nearly finished --- .../LavaRuins/lavaland_biodome_fishing.dmm | 6 +- .../LavaRuins/lavaland_surface_I.dmm | 8 +- .../lavaland_surface_animal_hospital.dmm | 2 +- .../lavaland_surface_ash_walker1.dmm | 8 +- .../lavaland_surface_biodome_winter.dmm | 4 +- .../lavaland_surface_cursedtoyshop.dmm | 2 +- .../lavaland_surface_forgottenkitchen.dmm | 4 +- .../lavaland_surface_kinggoatboss.dmm | 2 +- .../LavaRuins/lavaland_surface_medical.dmm | 2 +- .../LavaRuins/lavaland_surface_meteorite.dmm | 14 +- .../LavaRuins/lavaland_surface_weavernest.dmm | 6 +- .../SpaceRuins/hilbertshoteltestingsite.dmm | 2 +- .../SpaceRuins/listeningstation.dmm | 12 +- .../SpaceRuins/mrow_thats_right.dmm | 6 +- .../RandomRuins/SpaceRuins/nicelittlenest.dmm | 4 +- _maps/RandomRuins/SpaceRuins/oldstation.dmm | 12 +- .../SpaceRuins/pubby_monastery.dmm | 26 +- _maps/RandomRuins/SpaceRuins/spacebar.dmm | 6 +- _maps/RandomRuins/SpaceRuins/spacehotel.dmm | 22 +- .../StationRuins/BoxStation/bar_arcade.dmm | 4 +- .../StationRuins/BoxStation/bar_box.dmm | 4 +- .../StationRuins/BoxStation/bar_casino.dmm | 2 +- .../StationRuins/BoxStation/bar_cheese.dmm | 2 +- .../StationRuins/BoxStation/bar_conveyor.dmm | 4 +- .../StationRuins/BoxStation/bar_grassy.dmm | 4 +- .../StationRuins/BoxStation/bar_irish.dmm | 4 +- .../StationRuins/BoxStation/bar_purple.dmm | 4 +- .../StationRuins/BoxStation/bar_spacious.dmm | 4 +- .../StationRuins/BoxStation/bar_trek.dmm | 4 +- .../StationRuins/BoxStation/chapel1.dmm | 2 +- .../StationRuins/BoxStation/chapel2.dmm | 2 +- .../StationRuins/BoxStation/hydro2.dmm | 2 +- .../StationRuins/BoxStation/hydro4.dmm | 2 +- .../StationRuins/BoxStation/hydro5.dmm | 2 +- .../StationRuins/BoxStation/hydro6.dmm | 2 +- .../BoxStation/testingsite_range4.dmm | 4 +- .../StationRuins/BoxStation/transfer10.dmm | 2 +- .../StationRuins/GaxStation/ai_whale.dmm | 2 +- .../maint/10x10/10x10_deltalibrary.dmm | 6 +- .../maint/10x10/10x10_fishinghole.dmm | 8 +- .../maint/10x10/10x10_fourshops.dmm | 2 +- .../maint/10x10/10x10_olddiner.dmm | 2 +- .../maint/10x10/10x10_roosterdome.dmm | 2 +- .../maint/10x10/10x10_smallmagician.dmm | 2 +- .../maint/10x10/10x10_snakefighter.dmm | 2 +- .../maint/10x5/10x5_barbershop.dmm | 2 +- .../maint/10x5/10x5_deltaarcade.dmm | 2 +- .../maint/10x5/10x5_deltabotnis.dmm | 4 +- .../maint/10x5/10x5_deltacafeteria.dmm | 2 +- .../maint/10x5/10x5_deltaclutter1.dmm | 6 +- .../maint/10x5/10x5_deltarobotics.dmm | 8 +- .../maint/10x5/10x5_medicalmaint.dmm | 2 +- .../StationRuins/maint/10x5/10x5_transit.dmm | 4 +- .../StationRuins/maint/3x3/3x3_memorial.dmm | 2 +- .../StationRuins/maint/5x3/5x3_smallfish.dmm | 2 +- .../maint/5x3/5x3_waitingroom.dmm | 2 +- .../maint/5x4/5x4_deltadetective.dmm | 2 +- .../maint/5x4/5x4_deltagamble.dmm | 6 +- .../maint/5x4/5x4_deltalounge.dmm | 2 +- .../maint/5x4/5x4_deltasurgery.dmm | 2 +- .../maint/5x4/5x4_kilohauntedlibrary.dmm | 2 +- _maps/RandomZLevels/Cabin.dmm | 2 +- _maps/RandomZLevels/VR/syndicate_trainer.dmm | 4 +- _maps/RandomZLevels/VR/vrhub.dmm | 4 +- _maps/RandomZLevels/caves.dmm | 2 +- _maps/RandomZLevels/moonoutpost19.dmm | 4 +- _maps/RandomZLevels/research.dmm | 18 +- _maps/RandomZLevels/undergroundoutpost45.dmm | 14 +- _maps/RandomZLevels/wildwest.dmm | 2 +- .../AsteroidStation/AsteroidStation.dmm | 152 ++-- _maps/map_files/GaxStation/GaxStation.dmm | 66 +- _maps/map_files/YogStation/YogStation.dmm | 184 ++--- _maps/map_files/Yogsmeta/Yogsmeta.dmm | 126 ++-- _maps/map_files/debug/multiz.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 196 ++--- _maps/shuttles/arrival_delta.dmm | 8 +- _maps/shuttles/arrival_omega.dmm | 2 +- _maps/shuttles/emergency_bar.dmm | 8 +- _maps/shuttles/emergency_birdboat.dmm | 8 +- _maps/shuttles/emergency_cere.dmm | 8 +- _maps/shuttles/emergency_delta.dmm | 12 +- .../emergency_imfedupwiththisworld.dmm | 2 +- _maps/shuttles/emergency_kilo.dmm | 14 +- _maps/shuttles/emergency_omega.dmm | 6 +- _maps/shuttles/emergency_pool.dmm | 16 +- _maps/shuttles/emergency_pubby.dmm | 8 +- _maps/shuttles/emergency_russiafightpit.dmm | 2 +- _maps/shuttles/emergency_scrapheap.dmm | 2 +- _maps/shuttles/ferry_lighthouse.dmm | 2 +- _maps/shuttles/infiltrator_basic.dmm | 2 +- _maps/shuttles/pirate_default.dmm | 2 +- _maps/templates/shelter_2.dmm | 2 +- code/datums/components/chasm.dm | 4 +- code/datums/components/crafting/recipes.dm | 2 +- code/datums/martial/sleeping_carp.dm | 25 +- code/datums/status_effects/debuffs/debuffs.dm | 4 +- code/datums/wounds/bones.dm | 2 +- code/game/machinery/computer/arcade.dm | 2 +- code/game/machinery/doors/airlock.dm | 4 +- code/game/objects/effects/mines.dm | 2 +- code/game/objects/items/binoculars.dm | 14 +- code/game/objects/items/defib.dm | 28 +- code/game/objects/items/melee/energy.dm | 2 +- code/game/objects/items/sharpener.dm | 25 +- code/game/objects/items/singularityhammer.dm | 66 +- .../game/objects/items/storage/uplink_kits.dm | 2 +- code/game/objects/items/toys.dm | 16 +- code/game/objects/items/two_handed/broom.dm | 2 - .../objects/items/two_handed/dualsaber.dm | 211 ++++++ .../items/two_handed/highfrequencyblade.dm | 3 +- .../objects/items/two_handed/pitchfork.dm | 95 +++ .../objects/items/two_handed/updatepaths.txt | 2 +- code/game/objects/items/twohanded.dm | 671 ------------------ code/game/objects/structures/fireaxe.dm | 8 +- code/game/objects/structures/mjollnir.dm | 2 +- code/game/turfs/turf.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 64 +- .../equipment/spellbook_entries/offensive.dm | 4 +- code/modules/awaymissions/capture_the_flag.dm | 24 +- .../awaymissions/mission_code/mining.dm | 2 +- .../awaymissions/mission_code/snowdin.dm | 6 +- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- .../goals/station_goals/bluespace_tap.dm | 2 +- code/modules/holiday/easter.dm | 2 +- .../mining/equipment/kinetic_crusher.dm | 170 ++--- code/modules/mining/equipment/upgrades.dm | 6 +- .../mining/lavaland/necropolis_chests.dm | 55 +- code/modules/mining/machine_vending.dm | 6 +- code/modules/mob/living/carbon/carbon.dm | 10 +- .../mob/living/simple_animal/simple_animal.dm | 10 +- code/modules/mob/mob.dm | 13 +- code/modules/pool/components/swimming.dm | 4 +- .../pool/components/swimming_felinid.dm | 2 +- code/modules/pool/pool_items.dm | 10 +- code/modules/spells/spell_types/devil.dm | 6 +- code/modules/surgery/advanced/revival.dm | 2 +- code/modules/surgery/organs/augments_arms.dm | 2 +- code/modules/uplink/uplink_items.dm | 6 +- code/modules/vending/dinnerware.dm | 2 +- code/modules/vending/liberation_toy.dm | 4 +- code/modules/vending/toys.dm | 4 +- icons/obj/mining.dmi | Bin 71302 -> 71626 bytes yogstation.dme | 5 +- .../_globalvars/lists/maintenance_loot.dm | 4 +- .../code/game/gamemodes/battle_royale/loot.dm | 6 +- .../code/game/objects/items/fishing/rods.dm | 52 +- .../game/objects/items/wielded/big_spoon.dm | 41 ++ .../objects/items/wielded/vxtvulhammer.dm | 208 ++++++ .../modules/donor/unique_donator_items.dm | 2 +- .../code/modules/jobs/job_types/clerk.dm | 2 +- yogstation/code/modules/vending/fishing.dm | 2 +- 152 files changed, 1487 insertions(+), 1607 deletions(-) create mode 100644 code/game/objects/items/two_handed/dualsaber.dm create mode 100644 code/game/objects/items/two_handed/pitchfork.dm delete mode 100644 code/game/objects/items/twohanded.dm create mode 100644 yogstation/code/game/objects/items/wielded/big_spoon.dm create mode 100644 yogstation/code/game/objects/items/wielded/vxtvulhammer.dm diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_fishing.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_fishing.dmm index 44229d8048a6..8ce33a885177 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_fishing.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_fishing.dmm @@ -146,8 +146,8 @@ /area/ruin/powered/fishing/shop) "dV" = ( /obj/structure/rack, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, +/obj/item/fishingrod, /obj/item/storage/toolbox/mechanical/insulateds{ pixel_x = 1; pixel_y = -1 @@ -1537,7 +1537,7 @@ /obj/machinery/vending/fishing{ contraband = list(/obj/item/reagent_containers/food/snacks/bait/type = 6); premium = list(/obj/item/reagent_containers/food/snacks/bait/master = 10); - products = list(/obj/item/twohanded/fishingrod = 12, /obj/item/reagent_containers/food/snacks/bait/apprentice = 30, /obj/item/reagent_containers/food/snacks/bait/journeyman = 20, /obj/item/clothing/head/fishing = 6, /obj/item/clothing/suit/fishing = 6, /obj/item/clothing/gloves/fishing = 6, /obj/item/clothing/shoes/fishing = 6) + products = list(/obj/item/fishingrod = 12, /obj/item/reagent_containers/food/snacks/bait/apprentice = 30, /obj/item/reagent_containers/food/snacks/bait/journeyman = 20, /obj/item/clothing/head/fishing = 6, /obj/item/clothing/suit/fishing = 6, /obj/item/clothing/gloves/fishing = 6, /obj/item/clothing/shoes/fishing = 6) }, /turf/open/floor/plasteel, /area/ruin/powered/fishing/shop) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_I.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_I.dmm index 887846c85691..2bcca7b11561 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_I.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_I.dmm @@ -181,7 +181,7 @@ "BJ" = ( /obj/structure/closet/crate/coffin, /obj/item/shield/riot/buckler, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/plasteel/dark/lavaland, /area/ruin/unpowered) "Ch" = ( @@ -200,7 +200,7 @@ /turf/open/floor/plasteel/dark/lavaland, /area/ruin/unpowered) "He" = ( -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/plating/lavaland_baseturf{ icon_state = "panelscorched" }, @@ -221,14 +221,14 @@ "NG" = ( /obj/structure/closet/crate/coffin, /obj/effect/mob_spawn/human/skeleton, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/plasteel/dark/lavaland, /area/ruin/unpowered) "Pa" = ( /obj/structure/closet/crate/coffin, /obj/effect/decal/cleanable/dirt, /obj/item/shield/riot/buckler, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/plasteel/dark/lavaland, /area/ruin/unpowered) "QE" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm index 525013d9a402..a6766cd2660b 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm @@ -529,7 +529,7 @@ /turf/open/floor/plasteel, /area/ruin/powered/animal_hospital) "bt" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/floor/plasteel, /area/ruin/powered/animal_hospital) "bu" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index fd768d45c5da..e6d24008769e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1276,7 +1276,7 @@ dir = 4 }, /obj/effect/mapping_helpers/no_lava, -/obj/item/twohanded/bonespear, +/obj/item/melee/spear/bonespear, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "AD" = ( @@ -1305,12 +1305,12 @@ dir = 8 }, /obj/structure/table/wood, -/obj/item/twohanded/bonespear, -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear, +/obj/item/melee/spear/bonespear{ pixel_x = 3; pixel_y = -3 }, -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear{ pixel_x = -3; pixel_y = 3 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index d9045b172bbf..0f57dd23bcca 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -334,7 +334,7 @@ /turf/open/floor/plating, /area/ruin/powered/snow_biodome) "As" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/ruin/powered/snow_biodome) "AM" = ( @@ -372,7 +372,7 @@ /turf/open/floor/pod/dark, /area/ruin/powered/snow_biodome) "KS" = ( -/obj/item/twohanded/required/chainsaw, +/obj/item/melee/chainsaw, /obj/structure/closet, /obj/machinery/light/small{ dir = 4 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm index ef4d9f183223..292c36fd8200 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm @@ -479,7 +479,7 @@ /area/ruin/powered) "bb" = ( /obj/structure/table/wood, -/obj/item/twohanded/dualsaber/toy, +/obj/item/melee/dualsaber/toy, /obj/item/toy/katana{ pixel_x = 6 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_forgottenkitchen.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_forgottenkitchen.dmm index 7e33fba0ea03..4577ddf91be7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_forgottenkitchen.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_forgottenkitchen.dmm @@ -198,7 +198,7 @@ /turf/open/floor/plating/lavaland_baseturf, /area/ruin/powered) "kb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/dark/opposingcorners, /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/plasteel/lavaland, @@ -213,7 +213,7 @@ }, /area/ruin/powered) "kD" = ( -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /obj/effect/turf_decal/tile/dark/opposingcorners, /obj/effect/turf_decal/tile/red/opposingcorners, /obj/item/stack/sheet/metal, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_kinggoatboss.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_kinggoatboss.dmm index 93bdf350758f..f55718c31d77 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_kinggoatboss.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_kinggoatboss.dmm @@ -139,7 +139,7 @@ /area/lavaland/surface/outdoors) "G" = ( /obj/effect/decal/cleanable/blood/old, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /mob/living/simple_animal/hostile/retaliate/goat, /turf/open/floor/wood, /area/ruin/powered/kinggoatlair) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm index 51434ee9fa79..beab03230486 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm @@ -612,7 +612,7 @@ /turf/open/floor/plasteel/white, /area/ruin/powered) "bI" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /obj/machinery/light, /turf/open/floor/plasteel/white, /area/ruin/powered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_meteorite.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_meteorite.dmm index 03eb0f3cdc21..4a57e983cee8 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_meteorite.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_meteorite.dmm @@ -337,7 +337,7 @@ pixel_x = -3; pixel_y = -6 }, -/obj/item/twohanded/fireaxe/boneaxe, +/obj/item/fireaxe/boneaxe, /mob/living/simple_animal/hostile/asteroid/gutlunch, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) @@ -1339,7 +1339,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "yJ" = ( -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear{ pixel_x = 3; pixel_y = -3 }, @@ -1912,7 +1912,7 @@ /obj/structure/closet/crate/necropolis{ anchored = 1 }, -/obj/item/twohanded/required/gibtonite{ +/obj/item/melee/gibtonite{ quality = 3 }, /obj/item/survivalcapsule/luxuryelite{ @@ -2636,11 +2636,11 @@ /obj/structure/stone_tile/cracked{ dir = 1 }, -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear{ pixel_x = -11; pixel_y = 1 }, -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear{ pixel_x = 3; pixel_y = -1 }, @@ -2651,11 +2651,11 @@ /obj/structure/stone_tile/cracked{ dir = 1 }, -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear{ pixel_x = -11; pixel_y = 1 }, -/obj/item/twohanded/bonespear{ +/obj/item/melee/spear/bonespear{ pixel_x = 3; pixel_y = -1 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_weavernest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_weavernest.dmm index ee1919c82e32..c74ec78dbcfa 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_weavernest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_weavernest.dmm @@ -30,7 +30,7 @@ "dV" = ( /obj/structure/table, /obj/effect/turf_decal/sand, -/obj/item/twohanded/bonespear, +/obj/item/melee/spear/bonespear, /turf/open/floor/plasteel/lavaland, /area/ruin/unpowered) "fQ" = ( @@ -150,7 +150,7 @@ /area/ruin/unpowered) "za" = ( /obj/effect/mob_spawn/human/skeleton, -/obj/item/twohanded/bonespear, +/obj/item/melee/spear/bonespear, /obj/item/reagent_containers/food/snacks/spidereggs, /obj/effect/spawner/lootdrop/mob/marrow_weaver, /obj/structure/spider/stickyweb, @@ -222,7 +222,7 @@ "He" = ( /obj/effect/mob_spawn/human/skeleton, /obj/item/clothing/suit/armor/bone, -/obj/item/twohanded/fireaxe/boneaxe, +/obj/item/fireaxe/boneaxe, /obj/structure/spider/stickyweb, /obj/structure/spider/cocoon, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, diff --git a/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm b/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm index 367372c00270..c4edff5424f0 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm @@ -165,7 +165,7 @@ /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/hilbertresearchfacility) "D" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/hilbertresearchfacility) "E" = ( diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index b8162e9846d9..97e6640e7bef 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -889,7 +889,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/listeningstation/quarters) "hv" = ( @@ -1183,7 +1183,7 @@ /obj/item/clothing/head/HoS/syndicate{ desc = "A black cap fit for a Syndicate recon officer." }, -/obj/item/twohanded/binoculars, +/obj/item/binoculars, /obj/item/clothing/under/syndicate, /obj/item/clothing/under/syndicate/combat, /obj/item/clothing/under/syndicate/camo, @@ -1205,7 +1205,7 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation/hallway) @@ -2322,7 +2322,7 @@ /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation/hallway) "JS" = ( @@ -2643,7 +2643,7 @@ /area/ruin/space/has_grav/listeningstation/warehouse) "OJ" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/listeningstation/hallway) "OV" = ( @@ -3300,7 +3300,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/listeningstation/quarters) "YH" = ( diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm index 1f99f423fb66..9af5ce7cbb6c 100644 --- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm +++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm @@ -198,7 +198,7 @@ /area/ruin/space/has_grav/powered/cat_man) "aE" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -211,7 +211,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/cat_man) "aF" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -520,7 +520,7 @@ /area/ruin/space/has_grav/powered/cat_man) "bv" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 diff --git a/_maps/RandomRuins/SpaceRuins/nicelittlenest.dmm b/_maps/RandomRuins/SpaceRuins/nicelittlenest.dmm index 04bb769afc92..4aa7410bacbb 100644 --- a/_maps/RandomRuins/SpaceRuins/nicelittlenest.dmm +++ b/_maps/RandomRuins/SpaceRuins/nicelittlenest.dmm @@ -37,7 +37,7 @@ /turf/open/floor/grass, /area/ruin/space/has_grav/powered) "dc" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /turf/open/floor/wood, /area/ruin/space/has_grav/powered) "dm" = ( @@ -310,7 +310,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/powered) "uf" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index b4224844470b..9016da1c8aff 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -215,7 +215,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /obj/effect/decal/cleanable/cobweb, @@ -595,7 +595,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /turf/open/floor/plasteel, @@ -1502,7 +1502,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/sec) "ft" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /turf/open/floor/plasteel, @@ -1751,7 +1751,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/hydroponics) "gF" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /obj/effect/decal/cleanable/cobweb, @@ -6126,7 +6126,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/deltacorridor) "CV" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /obj/effect/decal/cleanable/dirt, @@ -6380,7 +6380,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/atmo) "EW" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/RandomRuins/SpaceRuins/pubby_monastery.dmm b/_maps/RandomRuins/SpaceRuins/pubby_monastery.dmm index e11acf100bd8..8c0ac13dbd3a 100644 --- a/_maps/RandomRuins/SpaceRuins/pubby_monastery.dmm +++ b/_maps/RandomRuins/SpaceRuins/pubby_monastery.dmm @@ -199,7 +199,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/monastery/library) "cH" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_y = 3 }, @@ -310,7 +310,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/monastery/library) "eg" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/firealarm{ @@ -557,7 +557,7 @@ /area/ruin/space/has_grav/monastery) "hb" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22"; pixel_y = 8 }, @@ -1055,7 +1055,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/monastery) "nI" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -1165,7 +1165,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/monastery) "ph" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/structure/cable{ @@ -1459,7 +1459,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/monastery/maint) "sM" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/item/radio/intercom{ @@ -1922,7 +1922,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/monastery/library) "yj" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/plasteel/dark, @@ -2153,7 +2153,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -2776,7 +2776,7 @@ /obj/structure/sign/plaques/deempisi{ pixel_y = 28 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_y = 3 }, @@ -2979,7 +2979,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/monastery) "LV" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -3029,7 +3029,7 @@ /turf/open/space/basic, /area/ruin/unpowered/no_grav) "Mn" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-08" }, /turf/open/floor/plasteel/dark, @@ -4298,7 +4298,7 @@ /area/ruin/space/has_grav/monastery/library) "Zn" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-05"; pixel_y = 10 }, @@ -4368,7 +4368,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ diff --git a/_maps/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/RandomRuins/SpaceRuins/spacebar.dmm index fbd93c217671..a2972a4b4ff4 100644 --- a/_maps/RandomRuins/SpaceRuins/spacebar.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacebar.dmm @@ -527,7 +527,7 @@ icon_state = "tile_corner" }, /obj/effect/turf_decal/tile/bar, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/spacebar) "tt" = ( @@ -542,7 +542,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/has_grav/powered/spacebar) "tH" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/spacebar) @@ -1392,7 +1392,7 @@ /obj/effect/turf_decal/tile/darkgreen{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/powered/spacebar) "YH" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 4acd93bb0e3f..80cbdd2fe420 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -169,7 +169,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_3) "aD" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-02" }, /turf/open/floor/wood, @@ -212,7 +212,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_3) "aL" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-16" }, /turf/open/floor/wood, @@ -258,7 +258,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_4) "aT" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-16" }, /turf/open/floor/wood, @@ -301,7 +301,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_4) "bb" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-18" }, /turf/open/floor/wood, @@ -1159,7 +1159,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/dock) "cY" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-02" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ @@ -1311,7 +1311,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_2) "dq" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/wood, @@ -1379,7 +1379,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_1) "dy" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-14" }, /turf/open/floor/wood, @@ -2416,7 +2416,7 @@ }, /area/ruin/space/has_grav/hotel/dock) "gh" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/wood, @@ -2859,7 +2859,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) "hq" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-18" }, /turf/open/floor/plasteel/dark, @@ -3509,7 +3509,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/hotel/power) "iM" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/floor/wood, /area/ruin/space/has_grav/hotel) "iO" = ( @@ -4760,7 +4760,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/hotel/pool) "mD" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-25" }, /obj/effect/turf_decal/tile/neutral{ diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_arcade.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_arcade.dmm index 2d959b4a81d1..24a5ed9f52d9 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_arcade.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_arcade.dmm @@ -563,7 +563,7 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "pw" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ pixel_y = 28 }, @@ -768,7 +768,7 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "FY" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/eighties, /area/crew_quarters/bar) "Go" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_box.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_box.dmm index d320e380cdde..5e54bbcb84c8 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_box.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_box.dmm @@ -1135,7 +1135,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/bar) "cY" = ( @@ -1391,7 +1391,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/bar) "MY" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_casino.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_casino.dmm index 532b831e2ee6..1984be3362a7 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_casino.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_casino.dmm @@ -920,7 +920,7 @@ /turf/open/floor/carpet, /area/crew_quarters/bar) "JA" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet, /area/crew_quarters/bar) "Kb" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_cheese.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_cheese.dmm index 5333f4d5bdb6..62b732bf11b5 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_cheese.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_cheese.dmm @@ -635,7 +635,7 @@ }, /area/crew_quarters/bar) "cr" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/crew_quarters/bar) "cs" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_conveyor.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_conveyor.dmm index 2735a6065c16..fc6c66a58b6b 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_conveyor.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_conveyor.dmm @@ -312,7 +312,7 @@ }, /area/crew_quarters/kitchen) "bb" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-03" }, /turf/open/floor/plasteel/vaporwave, @@ -926,7 +926,7 @@ /turf/open/floor/plasteel/vaporwave, /area/crew_quarters/bar) "gz" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-26" }, /turf/open/floor/plasteel/vaporwave, diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_grassy.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_grassy.dmm index 853a9247efa0..979de574ab71 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_grassy.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_grassy.dmm @@ -681,7 +681,7 @@ /turf/open/floor/grass, /area/crew_quarters/bar) "vt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/crew_quarters/bar) "vA" = ( @@ -959,7 +959,7 @@ /turf/open/floor/grass, /area/crew_quarters/bar) "JJ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/grass, /area/crew_quarters/bar) "JV" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_irish.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_irish.dmm index 010b8e9f10ac..11747a413005 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_irish.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_irish.dmm @@ -112,7 +112,7 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "ar" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/green{ dir = 8 }, @@ -1416,7 +1416,7 @@ /obj/machinery/newscaster{ pixel_y = -28 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/green{ dir = 8 }, diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_purple.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_purple.dmm index ceb16098146c..5892f213398d 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_purple.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_purple.dmm @@ -1153,7 +1153,7 @@ /obj/machinery/newscaster{ pixel_y = -28 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "dy" = ( @@ -1244,7 +1244,7 @@ /turf/open/floor/mineral/titanium/purple, /area/crew_quarters/kitchen) "vE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "xW" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_spacious.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_spacious.dmm index d890017f279d..afdd41aae8cc 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_spacious.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_spacious.dmm @@ -699,7 +699,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/bar) "cl" = ( @@ -1126,7 +1126,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/bar) "Wu" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/bar_trek.dmm b/_maps/RandomRuins/StationRuins/BoxStation/bar_trek.dmm index 9d9702621ac2..26b1044df6b0 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/bar_trek.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/bar_trek.dmm @@ -109,7 +109,7 @@ /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/bar) "at" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/item/radio/intercom{ pixel_y = 25 }, @@ -1231,7 +1231,7 @@ /turf/closed/wall, /area/crew_quarters/bar) "Sd" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /turf/open/floor/mineral/titanium/white, /area/crew_quarters/bar) "Sl" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/chapel1.dmm b/_maps/RandomRuins/StationRuins/BoxStation/chapel1.dmm index 8f29a200fc3b..f0e80d95eca0 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/chapel1.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/chapel1.dmm @@ -856,7 +856,7 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "ZG" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/chapel/main) "ZR" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/chapel2.dmm b/_maps/RandomRuins/StationRuins/BoxStation/chapel2.dmm index b79a309f9b98..afb7bc893fdc 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/chapel2.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/chapel2.dmm @@ -478,7 +478,7 @@ }, /area/chapel/main) "Cq" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/chapel/main) "Cv" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/hydro2.dmm b/_maps/RandomRuins/StationRuins/BoxStation/hydro2.dmm index 47ff04036713..38cc3322b920 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/hydro2.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/hydro2.dmm @@ -122,7 +122,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/template_noop) "x" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/hydro4.dmm b/_maps/RandomRuins/StationRuins/BoxStation/hydro4.dmm index f9450363d94d..09d510dbb5bf 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/hydro4.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/hydro4.dmm @@ -279,7 +279,7 @@ /turf/open/floor/plasteel, /area/template_noop) "Y" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/template_noop) "Z" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/hydro5.dmm b/_maps/RandomRuins/StationRuins/BoxStation/hydro5.dmm index 57a095c295fc..12a2e59bfb53 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/hydro5.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/hydro5.dmm @@ -101,7 +101,7 @@ /turf/open/floor/plasteel, /area/template_noop) "k" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/template_noop) "m" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/hydro6.dmm b/_maps/RandomRuins/StationRuins/BoxStation/hydro6.dmm index 2250ef8d4130..16c11a6628a3 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/hydro6.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/hydro6.dmm @@ -4,7 +4,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/template_noop) "d" = ( diff --git a/_maps/RandomRuins/StationRuins/BoxStation/testingsite_range4.dmm b/_maps/RandomRuins/StationRuins/BoxStation/testingsite_range4.dmm index 60a3bf83bd60..55dba3516761 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/testingsite_range4.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/testingsite_range4.dmm @@ -268,7 +268,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/template_noop) "S" = ( @@ -354,7 +354,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/template_noop) diff --git a/_maps/RandomRuins/StationRuins/BoxStation/transfer10.dmm b/_maps/RandomRuins/StationRuins/BoxStation/transfer10.dmm index 4bb474b79920..d5c0f7cef2b3 100644 --- a/_maps/RandomRuins/StationRuins/BoxStation/transfer10.dmm +++ b/_maps/RandomRuins/StationRuins/BoxStation/transfer10.dmm @@ -198,7 +198,7 @@ pixel_x = 2; pixel_y = 8 }, -/obj/item/twohanded/required/pool/pool_noodle{ +/obj/item/pool/pool_noodle{ pixel_x = 8; pixel_y = -7 }, diff --git a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm index ce59a7294f9b..c9855d2fd277 100644 --- a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm +++ b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm @@ -1354,7 +1354,7 @@ dir = 1; pixel_y = -24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) "Bs" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_deltalibrary.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_deltalibrary.dmm index 796004b57842..890fb8b4cab7 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_deltalibrary.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_deltalibrary.dmm @@ -23,7 +23,7 @@ /area/template_noop) "ag" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood{ icon_state = "wood-broken" }, @@ -296,7 +296,7 @@ /turf/open/floor/plasteel/grimy, /area/template_noop) "yo" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/grimy, /area/template_noop) "GX" = ( @@ -307,7 +307,7 @@ /area/template_noop) "Ob" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/template_noop) "QX" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm index 277d2d79154d..419ab0526ebe 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm @@ -109,7 +109,7 @@ /area/template_noop) "tg" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /obj/structure/rack, /obj/item/poster/random_contraband, /obj/item/picket_sign, @@ -317,7 +317,7 @@ /obj/structure/rack, /obj/item/radio, /obj/item/relic, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -356,7 +356,7 @@ /area/template_noop) "MI" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /obj/structure/rack, /obj/item/pet_carrier, /turf/open/floor/plasteel/checker, @@ -455,7 +455,7 @@ /obj/structure/rack, /obj/item/soap/homemade, /obj/item/soap/homemade, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light{ dir = 4 diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fourshops.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fourshops.dmm index 61986d9d3d51..96084e2bf188 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fourshops.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fourshops.dmm @@ -199,7 +199,7 @@ /obj/effect/turf_decal/tile/darkgreen{ dir = 4 }, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/plasteel, /area/template_noop) "sa" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_olddiner.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_olddiner.dmm index e66413f1ea3b..b1acec8126ff 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_olddiner.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_olddiner.dmm @@ -116,7 +116,7 @@ }, /area/template_noop) "nJ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/template_noop) "pn" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_roosterdome.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_roosterdome.dmm index c1a72b9d9faf..cdaed06b25a5 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_roosterdome.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_roosterdome.dmm @@ -3,7 +3,7 @@ /turf/open/floor/plasteel/dark, /area/template_noop) "b" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/plasteel/dark, diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_smallmagician.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_smallmagician.dmm index 054336469cb8..ad3f8af97c73 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_smallmagician.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_smallmagician.dmm @@ -148,7 +148,7 @@ /turf/open/floor/plasteel/cafeteria, /area/template_noop) "D" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/template_noop) "E" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_snakefighter.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_snakefighter.dmm index 9dd2f7a567a8..c4344c8606ad 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_snakefighter.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_snakefighter.dmm @@ -73,7 +73,7 @@ /turf/open/floor/plating, /area/template_noop) "q" = ( -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/plating, /area/template_noop) "r" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_barbershop.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_barbershop.dmm index 40845516729a..46315b65f4fb 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_barbershop.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_barbershop.dmm @@ -116,7 +116,7 @@ "B" = ( /obj/structure/window/spawner/west, /obj/structure/table/wood, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-18"; pixel_y = 10 }, diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaarcade.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaarcade.dmm index ae67dd7a25c2..e41daebad355 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaarcade.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaarcade.dmm @@ -119,7 +119,7 @@ /turf/open/floor/plasteel, /area/template_noop) "k" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/template_noop) "l" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltabotnis.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltabotnis.dmm index 40e9b4bba597..0a6e4481d818 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltabotnis.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltabotnis.dmm @@ -7,7 +7,7 @@ /turf/open/floor/plasteel, /area/template_noop) "b" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light/small{ dir = 1 }, @@ -76,7 +76,7 @@ /turf/open/floor/plasteel, /area/template_noop) "n" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltacafeteria.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltacafeteria.dmm index 40e93af23fe2..5941663f0954 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltacafeteria.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltacafeteria.dmm @@ -31,7 +31,7 @@ /area/template_noop) "c" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/poster/contraband/random{ pixel_y = 32 }, diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaclutter1.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaclutter1.dmm index 6e25fc698aea..8f492fc4d493 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaclutter1.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltaclutter1.dmm @@ -15,7 +15,7 @@ /turf/open/floor/wood, /area/template_noop) "e" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/template_noop) "f" = ( @@ -45,7 +45,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/template_noop) "j" = ( @@ -123,7 +123,7 @@ }, /area/template_noop) "s" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/template_noop) "t" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltarobotics.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltarobotics.dmm index 97be06e1bb5f..529c71da467e 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltarobotics.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_deltarobotics.dmm @@ -7,7 +7,7 @@ /turf/open/floor/plasteel, /area/template_noop) "b" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -21,7 +21,7 @@ /turf/open/floor/plating, /area/template_noop) "d" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/template_noop) @@ -245,11 +245,11 @@ /turf/open/floor/plating, /area/template_noop) "Q" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/template_noop) "T" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/template_noop) diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_medicalmaint.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_medicalmaint.dmm index 9838244fb2e9..b688ef4be84b 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_medicalmaint.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_medicalmaint.dmm @@ -117,7 +117,7 @@ /turf/open/floor/plasteel/white, /area/template_noop) "r" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-27" }, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_transit.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_transit.dmm index 7e00d512d6f3..ae2dfa323a26 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_transit.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_transit.dmm @@ -25,7 +25,7 @@ /turf/closed/wall/r_wall, /area/template_noop) "n" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/template_noop) "p" = ( @@ -54,7 +54,7 @@ /area/template_noop) "z" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/template_noop) "I" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/3x3/3x3_memorial.dmm b/_maps/RandomRuins/StationRuins/maint/3x3/3x3_memorial.dmm index bda3d6d823d1..3135a1dc264f 100644 --- a/_maps/RandomRuins/StationRuins/maint/3x3/3x3_memorial.dmm +++ b/_maps/RandomRuins/StationRuins/maint/3x3/3x3_memorial.dmm @@ -11,7 +11,7 @@ desc = "This plaque seems to memorialize those who fell while constructing the station. The names have been redacted, and they cover the entire plaque."; pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants/dead{ +/obj/item/kirbyplants/dead{ desc = "Some flowers have been placed lovingly here in a pot. They have not been watered quite as lovingly..."; name = "Dead Flowers"; pixel_y = 19 diff --git a/_maps/RandomRuins/StationRuins/maint/5x3/5x3_smallfish.dmm b/_maps/RandomRuins/StationRuins/maint/5x3/5x3_smallfish.dmm index 696f6233e14b..cf9cede6afd3 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x3/5x3_smallfish.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x3/5x3_smallfish.dmm @@ -67,7 +67,7 @@ dir = 8 }, /obj/structure/chair/stool/bamboo, -/obj/item/twohanded/fishingrod{ +/obj/item/fishingrod{ pixel_x = -6; pixel_y = 7 }, diff --git a/_maps/RandomRuins/StationRuins/maint/5x3/5x3_waitingroom.dmm b/_maps/RandomRuins/StationRuins/maint/5x3/5x3_waitingroom.dmm index e68eac9b904b..cdf5e5e2deb8 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x3/5x3_waitingroom.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x3/5x3_waitingroom.dmm @@ -70,7 +70,7 @@ /turf/open/floor/plasteel, /area/template_noop) "Q" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 diff --git a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltadetective.dmm b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltadetective.dmm index e1f32fd311a0..b8f7ce24281b 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltadetective.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltadetective.dmm @@ -22,7 +22,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/poster/official/do_not_question{ pixel_x = 32 }, diff --git a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltagamble.dmm b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltagamble.dmm index 4fd9fcaabd5c..e5b5855941db 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltagamble.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltagamble.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet/green, /area/template_noop) "c" = ( @@ -8,12 +8,12 @@ /turf/open/floor/wood, /area/template_noop) "d" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/template_noop) "e" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/template_noop) "f" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltalounge.dmm b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltalounge.dmm index c8915974f370..60dae668d911 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltalounge.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltalounge.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/template_noop) "b" = ( diff --git a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltasurgery.dmm b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltasurgery.dmm index 0d83f5d663d5..371091a916f9 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltasurgery.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_deltasurgery.dmm @@ -44,7 +44,7 @@ /turf/open/floor/plasteel, /area/template_noop) "e" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/template_noop) diff --git a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_kilohauntedlibrary.dmm b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_kilohauntedlibrary.dmm index 86733cf23389..f01d8affdc7e 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_kilohauntedlibrary.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_kilohauntedlibrary.dmm @@ -108,7 +108,7 @@ /turf/open/floor/plasteel/dark, /area/template_noop) "q" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-05" }, /obj/effect/turf_decal/tile/neutral, diff --git a/_maps/RandomZLevels/Cabin.dmm b/_maps/RandomZLevels/Cabin.dmm index a9527b6d5d3e..5174801ad407 100644 --- a/_maps/RandomZLevels/Cabin.dmm +++ b/_maps/RandomZLevels/Cabin.dmm @@ -54,7 +54,7 @@ /area/awaymission/snowforest/lumbermill) "am" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/chainsaw, +/obj/item/melee/chainsaw, /turf/open/floor/wood/cold, /area/awaymission/snowforest/lumbermill) "an" = ( diff --git a/_maps/RandomZLevels/VR/syndicate_trainer.dmm b/_maps/RandomZLevels/VR/syndicate_trainer.dmm index 1fc1b4328a38..1d08d6f2d374 100644 --- a/_maps/RandomZLevels/VR/syndicate_trainer.dmm +++ b/_maps/RandomZLevels/VR/syndicate_trainer.dmm @@ -1368,7 +1368,7 @@ /turf/open/indestructible, /area/awaymission/centcomAway/general) "hW" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/indestructible, /area/awaymission/centcomAway/general) "hX" = ( @@ -1949,7 +1949,7 @@ "lv" = ( /obj/structure/rack, /obj/item/restraints/legcuffs/beartrap, -/obj/item/twohanded/fireaxe, +/obj/item/fireaxe, /turf/open/indestructible, /area/awaymission/centcomAway/thunderdome) "lw" = ( diff --git a/_maps/RandomZLevels/VR/vrhub.dmm b/_maps/RandomZLevels/VR/vrhub.dmm index 0c21c794f44e..ceceb64f4810 100644 --- a/_maps/RandomZLevels/VR/vrhub.dmm +++ b/_maps/RandomZLevels/VR/vrhub.dmm @@ -1289,7 +1289,7 @@ /turf/open/indestructible, /area/awaymission/vr/syndicate) "pX" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/indestructible, /area/awaymission/vr/syndicate) "pY" = ( @@ -2750,7 +2750,7 @@ "Pm" = ( /obj/structure/rack, /obj/item/restraints/legcuffs/beartrap, -/obj/item/twohanded/fireaxe, +/obj/item/fireaxe, /turf/open/indestructible, /area/awaymission/vr/syndicate) "Pn" = ( diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index c8b16e9ce4e7..63c45280811d 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -516,7 +516,7 @@ }, /area/awaymission/caves/BMP_asteroid/level_three) "by" = ( -/obj/item/twohanded/mjollnir, +/obj/item/mjolnir, /mob/living/simple_animal/hostile/poison/giant_spider/nurse, /turf/open/floor/plating/asteroid/basalt{ initial_gas_mix = "n2=23;o2=14" diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 8971737f2c1e..f0d1565b750d 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -4829,7 +4829,7 @@ }, /area/awaymission/moonoutpost19/research) "jq" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "A plastic potted plant."; pixel_y = 3 }, @@ -7050,7 +7050,7 @@ }, /area/awaymission/moonoutpost19/arrivals) "ob" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "A plastic potted plant."; pixel_y = 3 }, diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index a41f693aecc1..5870b74f7fa4 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -117,7 +117,7 @@ /turf/open/floor/plasteel/white, /area/awaymission/research/interior/engineering) "ax" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-20"; pixel_y = 3 }, @@ -1762,7 +1762,7 @@ /turf/open/floor/plasteel/dark, /area/awaymission/research/interior/secure) "dN" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-16" }, /obj/effect/turf_decal/tile/purple{ @@ -4065,7 +4065,7 @@ /turf/open/floor/plasteel, /area/awaymission/research/interior/genetics) "hV" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/effect/turf_decal/tile/purple{ @@ -4191,7 +4191,7 @@ /turf/open/floor/plasteel, /area/awaymission/research/interior/security) "ii" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "A potted plant, it doesn't look very healthy..."; name = "dead potted plant" }, @@ -4693,7 +4693,7 @@ /turf/open/floor/wood, /area/awaymission/research/interior/dorm) "jm" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-14" }, /turf/open/floor/plasteel/yellowsiding{ @@ -5340,7 +5340,7 @@ /turf/open/floor/plating, /area/awaymission/research/interior/medbay) "kC" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/plasteel/yellowsiding{ @@ -5714,7 +5714,7 @@ /turf/open/floor/plasteel/white, /area/awaymission/research/interior/medbay) "ly" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-16" }, /turf/open/floor/plasteel/yellowsiding{ @@ -6198,7 +6198,7 @@ /turf/open/floor/plasteel/white, /area/awaymission/research/interior/escapepods) "mJ" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -6235,7 +6235,7 @@ /turf/open/floor/grass, /area/awaymission/research/interior/escapepods) "mN" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "applebush" }, /obj/effect/turf_decal/tile/green, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index c887b018a1c6..e4a00e6ce961 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -1427,7 +1427,7 @@ }, /area/awaymission/undergroundoutpost45/central) "do" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /obj/effect/decal/cleanable/dirt, @@ -2931,7 +2931,7 @@ }, /area/awaymission/undergroundoutpost45/central) "fT" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /obj/effect/decal/cleanable/dirt, @@ -5166,7 +5166,7 @@ }, /area/awaymission/undergroundoutpost45/gateway) "kh" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /obj/effect/decal/cleanable/dirt, @@ -6820,7 +6820,7 @@ /area/awaymission/undergroundoutpost45/research) "mQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /turf/open/floor/plasteel/cafeteria{ @@ -8422,7 +8422,7 @@ }, /area/awaymission/undergroundoutpost45/research) "pl" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /obj/effect/decal/cleanable/dirt, @@ -9495,7 +9495,7 @@ }, /area/awaymission/undergroundoutpost45/engineering) "rk" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /obj/effect/turf_decal/tile/yellow{ @@ -12431,7 +12431,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ layer = 5 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm index e7c0455431b9..c05dc686a041 100644 --- a/_maps/RandomZLevels/wildwest.dmm +++ b/_maps/RandomZLevels/wildwest.dmm @@ -722,7 +722,7 @@ /area/awaymission/wildwest/mines) "cL" = ( /obj/structure/table/wood, -/obj/item/twohanded/dualsaber, +/obj/item/melee/dualsaber, /turf/open/floor/wood, /area/awaymission/wildwest/gov) "cM" = ( diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index f237acc94a23..792ae17d41a4 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -129,7 +129,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aaV" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "abc" = ( @@ -927,7 +927,7 @@ /turf/closed/wall/r_wall, /area/engine/foyer) "ahm" = ( -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "ahu" = ( @@ -1224,7 +1224,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ dir = 4; name = "Station Intercom (General)"; @@ -1796,7 +1796,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/green, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/virology) "aoW" = ( @@ -1948,7 +1948,7 @@ /area/chapel/main) "aqo" = ( /obj/structure/table/glass, -/obj/item/twohanded/required/kirbyplants/dead{ +/obj/item/kirbyplants/dead{ pixel_y = 13 }, /turf/open/floor/plasteel/dark, @@ -2125,7 +2125,7 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "arn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/light/small{ dir = 1 @@ -3249,7 +3249,7 @@ /turf/open/floor/plasteel, /area/security/checkpoint/medical) "aAu" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, @@ -3535,7 +3535,7 @@ /turf/open/space/basic, /area/space) "aCk" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark/corner{ dir = 8 }, @@ -3606,7 +3606,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aCx" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark/corner, /area/chapel/main) "aCB" = ( @@ -5739,7 +5739,7 @@ dir = 8 }, /obj/structure/table, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /turf/open/floor/black, @@ -6122,7 +6122,7 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/heads/chief) "aYJ" = ( -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "aYK" = ( @@ -6448,7 +6448,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) "bcW" = ( @@ -7614,7 +7614,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light_switch{ pixel_x = -25 }, @@ -7639,7 +7639,7 @@ pixel_y = 22; req_access_txt = "39" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -8936,7 +8936,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "bSE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/patients_rooms/room_b) "bTo" = ( @@ -9266,7 +9266,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "bZR" = ( -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /obj/machinery/firealarm{ dir = 4; pixel_x = -24 @@ -9276,7 +9276,7 @@ /area/crew_quarters/heads/hor) "bZS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/engine/engineering) "bZW" = ( @@ -11660,7 +11660,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/pumproom) "cOs" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/camera{ c_tag = "Construction Area North"; dir = 0 @@ -11812,7 +11812,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/engineering) "cQY" = ( @@ -12008,7 +12008,7 @@ /turf/open/floor/plating, /area/teleporter) "cUF" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white/side, /area/science/xenobiology) "cUI" = ( @@ -14633,7 +14633,7 @@ /area/ruin/space/has_grav/listeningstation) "dSG" = ( /obj/item/reagent_containers/food/snacks/fish/tuna, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /turf/open/floor/white{ icon = 'icons/turf/floors/ice_turf.dmi'; icon_state = "unsmooth"; @@ -15772,7 +15772,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/storage) "elG" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/patients_rooms/room_a) "elQ" = ( @@ -16288,7 +16288,7 @@ /turf/open/floor/plating, /area/maintenance/port) "euL" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ pixel_y = 26 }, @@ -16913,7 +16913,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/hfr) "eFQ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -20351,7 +20351,7 @@ /turf/open/floor/plating, /area/maintenance/port) "fOX" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/structure/sign/painting{ persistence_id = "public"; @@ -20489,7 +20489,7 @@ /turf/open/floor/plasteel, /area/storage/tech) "fQU" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/maintenance/starboard/fore) "fQX" = ( @@ -21944,7 +21944,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -22634,7 +22634,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "gAc" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, @@ -23226,11 +23226,11 @@ /area/engine/atmos/distro) "gJL" = ( /obj/structure/closet/crate, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod/collapsible, -/obj/item/twohanded/fishingrod/collapsible, +/obj/item/fishingrod, +/obj/item/fishingrod, +/obj/item/fishingrod, +/obj/item/fishingrod/collapsible, +/obj/item/fishingrod/collapsible, /turf/open/floor/white{ icon = 'icons/turf/floors/ice_turf.dmi'; icon_state = "unsmooth"; @@ -23764,7 +23764,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "gSF" = ( -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /obj/structure/table/wood, /turf/open/floor/plating/beach/sand, /area/crew_quarters/bar) @@ -25848,7 +25848,7 @@ /turf/closed/wall/r_wall, /area/engine/engineering) "hAR" = ( -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /turf/open/floor/white{ icon = 'icons/turf/floors/ice_turf.dmi'; icon_state = "unsmooth"; @@ -28362,7 +28362,7 @@ /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/fifty, /obj/item/clothing/gloves/color/yellow, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /obj/item/stack/cable_coil, /obj/machinery/airalarm{ dir = 8; @@ -28491,7 +28491,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) "ivd" = ( @@ -28714,7 +28714,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "izr" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 }, @@ -32439,7 +32439,7 @@ /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "jLj" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/eighties, /area/maintenance/starboard/fore) "jLp" = ( @@ -32447,7 +32447,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "jLz" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet/royalblack, /area/bridge/meeting_room) "jLH" = ( @@ -32516,7 +32516,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -34245,7 +34245,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "krT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/airalarm{ dir = 4; pixel_x = -24 @@ -35094,7 +35094,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "kGv" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light{ dir = 1 }, @@ -35186,7 +35186,7 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "kHV" = ( @@ -39982,7 +39982,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "About as helpful as an actual cargo tech."; icon_state = "plant-27"; name = "Planty the Cargo Technician " @@ -41580,7 +41580,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "mTt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 }, @@ -44035,7 +44035,7 @@ /turf/open/floor/plating, /area/engine/atmos/storage) "nFe" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/lawoffice) "nFm" = ( @@ -44277,7 +44277,7 @@ /turf/open/floor/eighties, /area/maintenance/starboard/fore) "nJQ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/science/explab) "nKG" = ( @@ -45625,7 +45625,7 @@ /turf/open/floor/wood, /area/library) "ogU" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, @@ -45639,7 +45639,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) "ohi" = ( @@ -45690,7 +45690,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "oic" = ( @@ -47627,7 +47627,7 @@ }, /area/ruin/powered) "oRq" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 }, @@ -49622,7 +49622,7 @@ /turf/open/floor/plasteel, /area/hydroponics) "puW" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "pvc" = ( @@ -50305,7 +50305,7 @@ /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "pGo" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, @@ -50531,7 +50531,7 @@ /obj/effect/turf_decal/siding/wideplating{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "pKa" = ( @@ -51645,7 +51645,7 @@ pixel_x = 27 }, /obj/effect/turf_decal/siding/wideplating, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/engine/engineering) "pYC" = ( @@ -52202,7 +52202,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "qhL" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet/black, /area/maintenance/department/tcoms) "qhM" = ( @@ -52929,7 +52929,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/pumproom) "qtP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/science/nanite"; dir = 1; @@ -54013,7 +54013,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "qMV" = ( @@ -54596,7 +54596,7 @@ /area/bridge) "qXQ" = ( /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, @@ -56782,7 +56782,7 @@ /turf/open/floor/plasteel, /area/engine/foyer) "rEy" = ( -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /turf/open/floor/plating/beach/coastline_t{ dir = 8 }, @@ -56838,7 +56838,7 @@ /area/hallway/primary/central) "rEU" = ( /obj/structure/table/reinforced, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -57533,7 +57533,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/sleeper) "rQU" = ( @@ -58678,7 +58678,7 @@ /obj/structure/sign/poster/official/random{ pixel_y = -32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "sir" = ( @@ -58743,7 +58743,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -59189,7 +59189,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/locker) "stv" = ( @@ -59759,7 +59759,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "sDn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/painting{ persistence_id = "public"; pixel_y = 32 @@ -61394,7 +61394,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "tbS" = ( @@ -62100,7 +62100,7 @@ /turf/open/space/basic, /area/space/nearstation) "tob" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 }, @@ -63098,7 +63098,7 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos/distro) "tHP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/medical/surgery) "tHQ" = ( @@ -63795,7 +63795,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "tVH" = ( -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "tVJ" = ( @@ -67276,7 +67276,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/quartermaster/office) "veL" = ( @@ -67354,7 +67354,7 @@ /area/medical/medbay/central) "vfv" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/kirbyplants/random{ +/obj/item/kirbyplants/random{ pixel_x = -1; pixel_y = 12 }, @@ -70420,7 +70420,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "wjG" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ pixel_y = -30 }, @@ -74289,7 +74289,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/satellite) "xwy" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "xwA" = ( @@ -75324,7 +75324,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light_switch{ pixel_x = -25 }, diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm index 1d3c1359e34b..1eccf4f530d2 100644 --- a/_maps/map_files/GaxStation/GaxStation.dmm +++ b/_maps/map_files/GaxStation/GaxStation.dmm @@ -614,7 +614,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/chemistry) "aoG" = ( @@ -1447,7 +1447,7 @@ dir = 1 }, /obj/effect/turf_decal/trimline/blue/filled/corner/lower, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/sleeper) "aMq" = ( @@ -3843,7 +3843,7 @@ /obj/machinery/camera{ c_tag = "Bridge North" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 5 }, @@ -4452,7 +4452,7 @@ c_tag = "Engineering East"; dir = 8 }, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel, /area/engine/engineering) "cmq" = ( @@ -8629,7 +8629,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "ekN" = ( @@ -10600,7 +10600,7 @@ /turf/open/floor/plasteel/white, /area/medical/surgery) "fcw" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/airalarm{ dir = 4; pixel_x = -24 @@ -10792,7 +10792,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "fhj" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/camera{ c_tag = "AI Ship Access"; dir = 8 @@ -11472,7 +11472,7 @@ /turf/open/space/basic, /area/space/nearstation) "fzn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/camera{ c_tag = "EVA East"; dir = 6 @@ -12331,7 +12331,7 @@ dir = 1; pixel_y = -24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/bridge) "fRO" = ( @@ -13486,7 +13486,7 @@ /obj/structure/sign/departments/minsky/research/robotics{ pixel_x = 32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 6 }, @@ -13745,7 +13745,7 @@ /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "gBL" = ( @@ -14484,7 +14484,7 @@ dir = 1; pixel_y = -28 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet/purple, /area/chapel/main) "gXE" = ( @@ -14799,7 +14799,7 @@ /area/maintenance/solars/starboard/fore) "hfV" = ( /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 6 }, @@ -16724,7 +16724,7 @@ /obj/effect/turf_decal/trimline/white/filled/line/lower{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/secred/warning/lower{ alpha = 220; dir = 1 @@ -21900,7 +21900,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/quartermaster/storage) "kLw" = ( @@ -24666,7 +24666,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -24951,7 +24951,7 @@ c_tag = "Escape Arm Airlocks"; dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/secred/warning/lower{ alpha = 220; dir = 1 @@ -26788,7 +26788,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ dir = 8; pixel_x = 28 @@ -27008,7 +27008,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "npL" = ( @@ -27279,7 +27279,7 @@ /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "nvs" = ( @@ -28099,7 +28099,7 @@ /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/atmos/warning/lower/nobottom{ dir = 9 }, @@ -29549,7 +29549,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 5 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "oEB" = ( @@ -29635,7 +29635,7 @@ /turf/open/floor/plasteel/dark, /area/medical/sleeper) "oGQ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 9 }, @@ -30469,7 +30469,7 @@ /area/maintenance/port/aft) "peJ" = ( /obj/effect/turf_decal/trimline/blue/filled/line/lower, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "peO" = ( @@ -32670,7 +32670,7 @@ /turf/open/floor/plating, /area/maintenance/department/science/xenobiology) "qet" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/neutral/filled/line/lower{ dir = 6 }, @@ -33020,7 +33020,7 @@ /turf/open/floor/plasteel, /area/science/storage) "qlO" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel/white, /area/science/lab) @@ -33072,7 +33072,7 @@ "qmG" = ( /obj/structure/table, /obj/item/restraints/handcuffs, -/obj/item/twohanded/required/baseball_bat{ +/obj/item/melee/baseball_bat{ desc = "A staple of security force interrogations."; icon_state = "baseball_bat_metal"; name = "kneecapper" @@ -38922,7 +38922,7 @@ pixel_x = 32; pixel_y = -2 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/lawoffice) "teC" = ( @@ -39812,7 +39812,7 @@ /obj/effect/turf_decal/trimline/green/filled/line/lower{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "tDz" = ( @@ -44300,7 +44300,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 10 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -44766,7 +44766,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -46661,7 +46661,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "wYh" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 }, @@ -47278,7 +47278,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "xlQ" = ( diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 4ef0b1797971..cea8378199a0 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -757,7 +757,7 @@ /area/security/prison) "adr" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/security/prison) "ads" = ( @@ -2064,7 +2064,7 @@ name = "Head of Security's Office APC"; pixel_x = -25 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable{ icon_state = "0-4" }, @@ -2698,7 +2698,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 1 }, @@ -6418,7 +6418,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aPz" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aPA" = ( @@ -6486,7 +6486,7 @@ /turf/open/floor/plating, /area/security/processing) "aPM" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /turf/open/floor/plasteel, /area/hallway/primary/port) @@ -6528,7 +6528,7 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aQn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aQr" = ( @@ -6626,7 +6626,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ pixel_y = 26 }, @@ -6646,7 +6646,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/poster/official/pda_ad{ pixel_x = 32 }, @@ -8427,7 +8427,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bdr" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -11621,7 +11621,7 @@ dir = 8; pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "bCi" = ( @@ -13966,7 +13966,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "caT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, @@ -14424,7 +14424,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "cgo" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 1 @@ -15279,7 +15279,7 @@ /turf/closed/wall/r_wall, /area/engine/engineering) "cru" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -16644,7 +16644,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cMh" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/storage/tech) "cMs" = ( @@ -16825,7 +16825,7 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/item/toy/figure/cmo, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) @@ -17149,7 +17149,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "cTB" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 5 }, @@ -17543,7 +17543,7 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "ddC" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/brown/filled/line/lower, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -18204,7 +18204,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "dtc" = ( @@ -19321,7 +19321,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "dOW" = ( @@ -19619,7 +19619,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/camera/motion/armory, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) @@ -20004,7 +20004,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "edX" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "eec" = ( @@ -20057,7 +20057,7 @@ /turf/open/floor/plating, /area/engine/engineering) "efg" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ pixel_x = -25 }, @@ -21007,7 +21007,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "About as helpful as an actual cargo tech."; icon_state = "plant-27"; name = "Planty the Cargo Technician " @@ -21197,7 +21197,7 @@ /obj/machinery/camera{ c_tag = "Central Hallway North" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 1 }, @@ -21860,7 +21860,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "eME" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /obj/structure/noticeboard{ dir = 8; @@ -23719,7 +23719,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "fyB" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -23949,7 +23949,7 @@ /obj/machinery/status_display/evac{ pixel_y = -32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, @@ -24042,7 +24042,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "fFL" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 1 }, @@ -25346,7 +25346,7 @@ /area/engine/engineering) "gha" = ( /obj/machinery/light/small, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/engine/engineering) "ghg" = ( @@ -26101,7 +26101,7 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "gzz" = ( -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "gzP" = ( @@ -26185,7 +26185,7 @@ pixel_x = 7; pixel_y = 23 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 9 }, @@ -27632,8 +27632,8 @@ dir = 1 }, /obj/item/clothing/shoes/jackboots, -/obj/item/twohanded/required/pool/rubber_ring, -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "hfW" = ( @@ -27969,7 +27969,7 @@ name = "Security Office APC"; pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable, /obj/effect/turf_decal/trimline/secred/filled/corner/lower{ dir = 4 @@ -28129,7 +28129,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 5 }, @@ -28463,7 +28463,7 @@ name = "Escape Hallway APC"; pixel_x = -25 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/exit) @@ -28546,7 +28546,7 @@ /turf/open/floor/carpet/royalblue, /area/crew_quarters/heads/cmo) "hwu" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/crew_quarters/heads/captain) @@ -28912,7 +28912,7 @@ /turf/open/floor/plating, /area/maintenance/port) "hDa" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 }, @@ -30174,7 +30174,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "ibZ" = ( @@ -30200,7 +30200,7 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "ics" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/vacant_room) "icK" = ( @@ -30216,7 +30216,7 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "icP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) @@ -30347,7 +30347,7 @@ name = "Station Intercom (General)"; pixel_y = -29 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/vacant_room) "ies" = ( @@ -31843,7 +31843,7 @@ dir = 1; pixel_y = -26 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel, /area/science/misc_lab) @@ -32067,14 +32067,14 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "iNE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 10 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "iNM" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 8 }, @@ -32082,7 +32082,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "iNT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -32292,7 +32292,7 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "iSt" = ( -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "iSP" = ( @@ -32355,7 +32355,7 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "iUt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/security/courtroom) "iUu" = ( @@ -32702,7 +32702,7 @@ /turf/open/floor/plasteel, /area/vacant_room/commissary) "jbY" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 10 }, @@ -33885,7 +33885,7 @@ /turf/open/floor/plasteel, /area/security/processing) "jFt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, @@ -34584,7 +34584,7 @@ /obj/structure/table/reinforced, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high/plus, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "jVQ" = ( @@ -35642,7 +35642,7 @@ /turf/open/floor/plasteel, /area/engine/foyer) "kua" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /obj/effect/turf_decal/trimline/green/filled/corner/lower, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ @@ -35655,7 +35655,7 @@ /area/medical/medbay/central) "kuY" = ( /obj/machinery/holopad, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 1 }, @@ -36761,7 +36761,7 @@ /turf/open/floor/carpet/blue, /area/bridge/meeting_room) "kRG" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 8 }, @@ -37761,7 +37761,7 @@ dir = 1; pixel_y = -24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "llW" = ( @@ -37771,7 +37771,7 @@ /obj/effect/turf_decal/stripes{ dir = 5 }, -/obj/item/twohanded/required/kirbyplants/random{ +/obj/item/kirbyplants/random{ pixel_x = -5 }, /obj/effect/turf_decal/ramp_middle{ @@ -37781,7 +37781,7 @@ /turf/open/floor/carpet, /area/library) "lmd" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 6 }, @@ -39186,7 +39186,7 @@ c_tag = "EVA South"; dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "lRt" = ( @@ -39333,7 +39333,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "lUn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/wood, /area/medical/psych) @@ -39957,7 +39957,7 @@ /turf/open/floor/plating, /area/maintenance/port) "mhE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 4 }, @@ -40668,7 +40668,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "muS" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 5 @@ -44244,7 +44244,7 @@ /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /obj/structure/table, @@ -44876,7 +44876,7 @@ pixel_x = 5; pixel_y = -36 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "ohL" = ( @@ -45545,7 +45545,7 @@ dir = 8; pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -46508,7 +46508,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "oNV" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ dir = 1; pixel_y = -26 @@ -47400,7 +47400,7 @@ /turf/open/floor/plating, /area/science/xenobiology) "piy" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/window/reinforced, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 10 @@ -49279,7 +49279,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "pVW" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -51642,7 +51642,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "qRi" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 10 }, @@ -51748,7 +51748,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "qTl" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 4 }, @@ -54996,7 +54996,7 @@ /turf/closed/wall, /area/engine/atmos/mix) "soM" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 5 }, @@ -55729,7 +55729,7 @@ layer = 4; pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/green/filled/line/lower{ dir = 5 }, @@ -57267,7 +57267,7 @@ /turf/open/floor/plating, /area/maintenance/port) "tmp" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/requests_console{ department = "Medbay"; departmentType = 1; @@ -57688,7 +57688,7 @@ /turf/open/floor/plating, /area/storage/tech) "twb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 9 }, @@ -60043,8 +60043,8 @@ /area/crew_quarters/heads/captain) "utp" = ( /obj/structure/closet/athletic_mixed, -/obj/item/twohanded/required/pool/pool_noodle, -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "utG" = ( @@ -60086,7 +60086,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 }, @@ -60371,7 +60371,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "uBu" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable{ icon_state = "1-2" }, @@ -61629,7 +61629,7 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "vbw" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 1 }, @@ -62255,7 +62255,7 @@ /obj/machinery/airalarm{ pixel_y = 24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -63436,7 +63436,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "vLb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, @@ -63526,7 +63526,7 @@ pixel_x = 30; receive_ore_updates = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/science/nanite) "vNR" = ( @@ -63917,7 +63917,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "vUT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ dir = 1 }, @@ -64298,7 +64298,7 @@ /turf/open/floor/plasteel, /area/science/nanite) "wcf" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/mapping_helpers/teleport_anchor, /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ dir = 4 @@ -64312,7 +64312,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/mix) "wcl" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 5 }, @@ -66081,7 +66081,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "wRN" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /turf/open/floor/plasteel, /area/science/robotics/lab) @@ -66853,7 +66853,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/distro) "xjZ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -68048,7 +68048,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "xKE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet, /area/library) "xLu" = ( @@ -68618,7 +68618,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 5 }, @@ -68649,8 +68649,8 @@ pixel_y = 30 }, /obj/structure/table, -/obj/item/twohanded/rcl/pre_loaded, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel, /area/engine/engineering) "xYw" = ( @@ -68751,7 +68751,7 @@ pixel_x = -21; pixel_y = -11 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable{ icon_state = "0-2" }, @@ -69100,7 +69100,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "ygx" = ( diff --git a/_maps/map_files/Yogsmeta/Yogsmeta.dmm b/_maps/map_files/Yogsmeta/Yogsmeta.dmm index 2bb488da2bff..5b02d18d44c2 100644 --- a/_maps/map_files/Yogsmeta/Yogsmeta.dmm +++ b/_maps/map_files/Yogsmeta/Yogsmeta.dmm @@ -157,7 +157,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-03" }, /obj/effect/decal/cleanable/dirt, @@ -177,7 +177,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/security/prison) @@ -629,7 +629,7 @@ /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard/fore) "acm" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-13" }, /obj/effect/decal/cleanable/dirt, @@ -10358,7 +10358,7 @@ /area/lawoffice) "aBD" = ( /obj/effect/decal/cleanable/cobweb, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-20"; pixel_y = 3 }, @@ -10751,7 +10751,7 @@ c_tag = "AI Upload Chamber - Fore"; network = list("aiupload") }, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -12770,8 +12770,8 @@ /obj/effect/turf_decal/bot{ dir = 1 }, -/obj/item/twohanded/rcl/pre_loaded, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel{ dir = 1 }, @@ -13763,7 +13763,7 @@ name = "Law Office APC"; pixel_y = 23 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/wood, @@ -16490,7 +16490,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/clerk) "aPc" = ( @@ -17264,7 +17264,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-03" }, /obj/effect/turf_decal/tile/neutral{ @@ -19183,7 +19183,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aUY" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/engineering) "aUZ" = ( @@ -19371,7 +19371,7 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "aVt" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-13" }, /obj/effect/turf_decal/stripes/line{ @@ -19727,7 +19727,7 @@ /obj/machinery/airalarm{ pixel_y = 24 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "applebush" }, /obj/effect/turf_decal/tile/neutral{ @@ -19836,7 +19836,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-16" }, /obj/item/radio/intercom{ @@ -20637,7 +20637,7 @@ /turf/closed/wall, /area/hallway/secondary/entry) "aYF" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-05" }, /obj/effect/turf_decal/stripes/line{ @@ -21113,7 +21113,7 @@ charge = 100; maxcharge = 15000 }, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -25153,7 +25153,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/aisat) "bjN" = ( @@ -28665,7 +28665,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "btR" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-18" }, /obj/effect/turf_decal/stripes/line{ @@ -28683,7 +28683,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "btU" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-08" }, /turf/open/floor/plasteel/grimy, @@ -28695,7 +28695,7 @@ /turf/open/floor/plasteel/grimy, /area/hallway/primary/port) "btW" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-03" }, /turf/open/floor/plasteel/grimy, @@ -28953,7 +28953,7 @@ /turf/closed/wall, /area/aisat) "bvB" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-20" }, /obj/effect/turf_decal/stripes/line{ @@ -30447,7 +30447,7 @@ /turf/open/floor/wood, /area/library) "bBx" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/wood, @@ -33227,7 +33227,7 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) "bKS" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-06" }, /obj/effect/turf_decal/stripes/line{ @@ -35139,7 +35139,7 @@ /turf/open/floor/carpet, /area/bridge/showroom/corporate) "bRG" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/effect/turf_decal/tile/purple, @@ -36623,7 +36623,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "applebush" }, /obj/effect/turf_decal/tile/blue{ @@ -38031,7 +38031,7 @@ /obj/item/radio/intercom{ pixel_y = -30 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-08" }, /obj/effect/turf_decal/tile/purple, @@ -39849,7 +39849,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "coj" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/effect/turf_decal/tile/purple, @@ -44824,7 +44824,7 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "cJQ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/effect/turf_decal/tile/purple{ @@ -50360,7 +50360,7 @@ /area/medical/virology) "dZO" = ( /obj/machinery/holopad, -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -51538,7 +51538,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/hfr) "eHu" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -51584,7 +51584,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/aisat) "eIa" = ( @@ -54624,7 +54624,7 @@ dir = 8 }, /obj/effect/turf_decal/trimline/yellow/filled/corner, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/atmos/distro) "gIT" = ( @@ -54710,7 +54710,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ dir = 4 @@ -55367,7 +55367,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/atmos/mix) "hlX" = ( @@ -56273,7 +56273,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "hTB" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/bar{ dir = 1 }, @@ -56619,7 +56619,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "ihp" = ( @@ -56927,7 +56927,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "isH" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "applebush" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -57550,7 +57550,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "iQE" = ( -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/indestructible/sound/pool/end, /area/crew_quarters/fitness/recreation) "iQM" = ( @@ -58153,7 +58153,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "jhQ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/atmos/distro) "jhU" = ( @@ -59027,7 +59027,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "jHe" = ( @@ -61012,8 +61012,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/pool/rubber_ring, -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) "kRB" = ( @@ -63276,7 +63276,7 @@ /turf/open/floor/plasteel/freezer, /area/security/prison) "mgw" = ( -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness/recreation) "mgP" = ( @@ -63612,7 +63612,7 @@ dir = 8 }, /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/aisat) "mtq" = ( @@ -64972,7 +64972,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/sleeper) "nkk" = ( @@ -68127,8 +68127,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/pool/pool_noodle, -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) "plS" = ( @@ -68154,7 +68154,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/aisat) "pnv" = ( @@ -70984,7 +70984,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/power/apc{ areastring = "/area/medical/storage/locker"; dir = 8; @@ -71991,7 +71991,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/mix) "rGz" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 6 }, @@ -72849,7 +72849,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "sqh" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, @@ -72913,7 +72913,7 @@ /obj/item/radio/intercom{ pixel_x = 29 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-16" }, /obj/effect/turf_decal/tile/yellow{ @@ -73794,7 +73794,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-14" }, /turf/open/floor/plasteel, @@ -74025,7 +74025,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "sYP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ pixel_x = -26; pixel_y = -1 @@ -74036,7 +74036,7 @@ /turf/open/floor/plasteel, /area/engine/foyer) "sYX" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-11" }, /obj/effect/turf_decal/trimline/chemorange/filled/line, @@ -75626,7 +75626,7 @@ /turf/open/floor/wood, /area/crew_quarters/theatre) "tXA" = ( -/obj/item/twohanded/required/kirbyplants/random{ +/obj/item/kirbyplants/random{ pixel_x = 6; pixel_y = -2 }, @@ -78104,7 +78104,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "vtO" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 }, @@ -78875,7 +78875,7 @@ icon_state = "map-right-MS"; pixel_y = -32 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-03" }, /obj/effect/turf_decal/tile/blue{ @@ -79530,7 +79530,7 @@ dir = 4 }, /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/aisat) "wwz" = ( @@ -80318,7 +80318,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-04" }, /obj/effect/turf_decal/tile/yellow{ @@ -81026,7 +81026,7 @@ /obj/structure/window/reinforced/tinted{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/crew_quarters/heads/cmo) "xuR" = ( @@ -81381,7 +81381,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/aisat) "xEA" = ( @@ -81458,7 +81458,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/atmos/distro) "xHY" = ( diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm index 2704a71d5dc1..56c2fd036619 100644 --- a/_maps/map_files/debug/multiz.dmm +++ b/_maps/map_files/debug/multiz.dmm @@ -1209,7 +1209,7 @@ "dO" = ( /obj/structure/table, /obj/machinery/light, -/obj/item/twohanded/fireaxe, +/obj/item/fireaxe, /obj/item/extinguisher, /turf/open/floor/plasteel, /area/storage/primary) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 1e4d92890254..1a34459798f4 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1571,7 +1571,7 @@ name = "chain whip" }, /obj/item/scythe, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "adO" = ( @@ -1832,19 +1832,19 @@ /obj/item/melee/chainofcommand{ name = "chain whip" }, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "aez" = ( /obj/structure/table/wood, /obj/item/scythe, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "aeA" = ( /obj/structure/table/wood, /obj/item/tailclub, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "aeB" = ( @@ -2038,7 +2038,7 @@ /area/yogs/infiltrator_base) "aeX" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/kirbyplants/random{ +/obj/item/kirbyplants/random{ pixel_y = 12 }, /turf/open/floor/holofloor/carpet, @@ -2998,11 +2998,11 @@ /turf/open/floor/circuit/green/anim, /area/ctf) "ahE" = ( -/obj/item/twohanded/ctf/blue, +/obj/item/ctf_flag/blue, /turf/open/floor/circuit/green/anim, /area/ctf) "ahF" = ( -/obj/item/twohanded/ctf/red, +/obj/item/ctf_flag/red, /turf/open/floor/circuit/green/anim, /area/ctf) "ahG" = ( @@ -4030,7 +4030,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/control) "ake" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -4134,7 +4134,7 @@ /turf/open/floor/plasteel, /area/centcom/supply) "akk" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/neutral{ @@ -4247,7 +4247,7 @@ /turf/open/floor/plasteel/grimy, /area/centcom/control) "akB" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/firealarm{ @@ -4270,7 +4270,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/plasteel/grimy, @@ -4279,7 +4279,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/plasteel/grimy, @@ -4320,13 +4320,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/plasteel/grimy, /area/centcom/control) "akJ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/airalarm{ @@ -4786,7 +4786,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "alQ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/firealarm{ @@ -5226,7 +5226,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "amL" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/green{ @@ -5238,7 +5238,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "amM" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -6028,7 +6028,7 @@ /obj/machinery/status_display/ai{ pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-15"; pixel_x = -6; pixel_y = 12 @@ -6242,7 +6242,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "aoy" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -6605,7 +6605,7 @@ /turf/open/floor/plasteel/grimy, /area/centcom/ferry) "aph" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/light{ @@ -6839,7 +6839,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/control) "apw" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/structure/extinguisher_cabinet{ @@ -7207,13 +7207,13 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "aqd" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/wood, /area/centcom/ferry) "aqe" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/light_switch{ @@ -7527,7 +7527,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/reagent_containers/pill/adminordrazine, /turf/open/floor/plasteel/bluespace, /area/centcom/testchamber) @@ -7869,7 +7869,7 @@ /turf/open/floor/plasteel, /area/centcom/ferry) "art" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/newscaster{ @@ -7891,7 +7891,7 @@ /obj/machinery/light_switch{ pixel_y = 24 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/wood, @@ -8069,7 +8069,7 @@ /turf/open/floor/grass, /area/centcom/control) "arL" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/structure/extinguisher_cabinet{ @@ -9126,7 +9126,7 @@ /turf/open/floor/plasteel, /area/centcom/ferry) "atJ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/green{ @@ -9165,7 +9165,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "atO" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green{ @@ -9188,7 +9188,7 @@ /turf/closed/indestructible/riveted, /area/centcom/evac) "atS" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/stripes/line{ @@ -9300,7 +9300,7 @@ /area/centcom/testchamber) "aug" = ( /obj/structure/table/wood, -/obj/item/twohanded/pitchfork/demonic/ascended, +/obj/item/pitchfork/demonic/ascended, /obj/item/melee/powerfist, /turf/open/floor/wood, /area/centcom/testchamber) @@ -9621,7 +9621,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/storage/pill_bottle/zoom, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -9731,7 +9731,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "auT" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/neutral{ @@ -9761,7 +9761,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "auV" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -10849,7 +10849,7 @@ /turf/open/floor/plating, /area/centcom/ferry) "axi" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/delivery, @@ -10919,7 +10919,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "axp" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green{ @@ -10931,7 +10931,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "axq" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green, @@ -10950,7 +10950,7 @@ /turf/open/floor/plating, /area/centcom/evac) "axs" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/stripes/line{ @@ -11619,7 +11619,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/reagent_containers/pill/adminordrazine, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -11756,7 +11756,7 @@ }, /area/holodeck/rec_center/medical) "azd" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/light{ @@ -12341,7 +12341,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "aAm" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/red{ @@ -12362,7 +12362,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "aAp" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/blue, @@ -13423,7 +13423,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "aCw" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/power/apc{ @@ -13460,7 +13460,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "aCy" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/light, @@ -13481,7 +13481,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "aCz" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/structure/extinguisher_cabinet{ @@ -13777,7 +13777,7 @@ /area/centcom/holding) "aCW" = ( /obj/structure/table/wood, -/obj/item/twohanded/spear, +/obj/item/melee/spear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "aCX" = ( @@ -13908,7 +13908,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/evac) "aDf" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/structure/extinguisher_cabinet{ @@ -14416,7 +14416,7 @@ /turf/open/floor/plasteel/dark, /area/centcom/control) "aDV" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green{ @@ -14425,7 +14425,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "aDW" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/green, @@ -15060,7 +15060,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aFs" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/green{ @@ -15074,7 +15074,7 @@ }, /area/tdome/tdomeobserve) "aFu" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green, @@ -15176,7 +15176,7 @@ /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) "aFG" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/red, @@ -15256,7 +15256,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aFQ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green{ @@ -15396,7 +15396,7 @@ }, /area/tdome/tdomeobserve) "aGg" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/neutral{ @@ -15410,7 +15410,7 @@ }, /area/tdome/tdomeobserve) "aGh" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/red{ @@ -15419,7 +15419,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aGi" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/red{ @@ -15432,7 +15432,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aGj" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/red, @@ -15461,7 +15461,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aGn" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/effect/turf_decal/tile/green, @@ -15471,7 +15471,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aGo" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green, @@ -15484,7 +15484,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aGp" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/green{ @@ -16563,7 +16563,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aHZ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral, @@ -16636,7 +16636,7 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "aIg" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -17526,7 +17526,7 @@ }, /area/bluespace_locker) "aJZ" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/firealarm{ @@ -17558,7 +17558,7 @@ /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) "aKc" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -18000,7 +18000,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/holofloor{ icon_state = "white" }, @@ -18842,7 +18842,7 @@ }, /area/holodeck/rec_center/chapelcourt) "aMs" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /turf/open/floor/wood, @@ -18938,7 +18938,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/throwing_star/ninja, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -19252,10 +19252,10 @@ /area/centcom/supplypod) "aNi" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/cult_bastard{ +/obj/item/melee/cult_bastard{ pixel_y = 3 }, -/obj/item/twohanded/cult_spear, +/obj/item/cult_spear, /obj/item/kitchen/knife/envy, /turf/open/floor/wood, /area/centcom/testchamber) @@ -19666,7 +19666,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/reagent_containers/autoinjector/medipen/stimpack/large, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -19725,7 +19725,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/storage/pill_bottle/stimulant, /obj/item/encryptionkey/syndicate, /turf/open/floor/plasteel, @@ -19757,7 +19757,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "aOk" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/hot_potato/syndicate, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -19777,16 +19777,16 @@ "aOm" = ( /obj/structure/table/wood, /obj/item/veilrender/honkrender/honkhulkrender, -/obj/item/twohanded/required/baseball_bat/homerun, +/obj/item/melee/baseball_bat/homerun, /obj/item/melee/singularity_sword, /turf/open/floor/wood, /area/centcom/testchamber) "aOn" = ( /obj/structure/table/wood, -/obj/item/twohanded/mjollnir{ +/obj/item/mjolnir{ pixel_y = 3 }, -/obj/item/twohanded/singularityhammer, +/obj/item/singularityhammer, /obj/item/melee/transforming/cleaving_saw, /turf/open/floor/wood, /area/centcom/testchamber) @@ -19917,7 +19917,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/throwing_star/ninja, /obj/item/throwing_star/ninja, /obj/item/encryptionkey/binary, @@ -20000,7 +20000,7 @@ /area/centcom/holding) "aOH" = ( /obj/effect/turf_decal/tile/neutral, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/storage/pill_bottle/aranesp, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -20253,14 +20253,14 @@ /area/yogs/infiltrator_base) "aPg" = ( /obj/structure/table/wood, -/obj/item/twohanded/dualsaber/purple{ +/obj/item/melee/dualsaber/purple{ pixel_y = 3 }, -/obj/item/twohanded/dualsaber/green{ +/obj/item/melee/dualsaber/green{ pixel_y = 6 }, -/obj/item/twohanded/dualsaber/blue, -/obj/item/twohanded/dualsaber/red{ +/obj/item/melee/dualsaber/blue, +/obj/item/melee/dualsaber/red{ pixel_y = 9 }, /obj/item/melee/transforming/energy/blade, @@ -20448,7 +20448,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/switchblade, /obj/item/reagent_containers/pill/adminordrazine, /turf/open/floor/plasteel, @@ -20545,7 +20545,7 @@ /turf/open/floor/plasteel/white, /area/centcom/holding) "aPP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/centcom/testchamber) "aPQ" = ( @@ -20816,7 +20816,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/holofloor{ icon_state = "white" }, @@ -21216,7 +21216,7 @@ "aRf" = ( /obj/structure/glowshroom/glowcap, /obj/structure/table/wood, -/obj/item/twohanded/required/chainsaw/doomslayer, +/obj/item/melee/chainsaw/doomslayer, /obj/item/melee/fryingpan/bananium, /obj/item/kitchen/knife/rainbowknife, /turf/open/floor/wood, @@ -21458,7 +21458,7 @@ /area/holodeck/rec_center/chapelcourt) "aRE" = ( /obj/structure/table/wood, -/obj/item/twohanded/bonespear/chitinspear, +/obj/item/melee/spear/bonespear/chitinspear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "aRF" = ( @@ -22682,7 +22682,7 @@ }, /area/holodeck/rec_center/lounge) "aUb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/storage/pill_bottle/stimulant, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -23720,7 +23720,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/switchblade, /obj/item/reagent_containers/pill/adminordrazine, /turf/open/floor/plasteel, @@ -23729,7 +23729,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/storage/pill_bottle/stimulant, /obj/item/reagent_containers/pill/adminordrazine, /turf/open/floor/plasteel, @@ -23762,7 +23762,7 @@ /turf/open/floor/mineral/titanium/white, /area/centcom/evac) "aWo" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/reagent_containers/pill/adminordrazine, /obj/item/malf_upgrade, /turf/open/floor/plasteel, @@ -23936,7 +23936,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/pneumatic_cannon/pie/selfcharge, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -24075,7 +24075,7 @@ "aWV" = ( /obj/structure/table/wood, /obj/item/tailclub, -/obj/item/twohanded/bonespear/chitinspear, +/obj/item/melee/spear/bonespear/chitinspear, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/thunderdome1218) "aWW" = ( @@ -24158,7 +24158,7 @@ /area/holodeck/rec_center/spacechess) "aXc" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/adamantineshield, +/obj/item/adamantineshield, /obj/item/shield/mirror, /obj/item/shield/energy/bananium, /obj/item/shield/energy, @@ -24388,7 +24388,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/switchblade, /turf/open/floor/plasteel, /area/centcom/testchamber) @@ -24803,7 +24803,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/centcom/testchamber) "aYs" = ( @@ -25274,7 +25274,7 @@ /turf/open/floor/plasteel, /area/centcom/testchamber) "aZs" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -25531,7 +25531,7 @@ "aZR" = ( /obj/structure/table/wood, /obj/item/rune_scimmy, -/obj/item/twohanded/vibro_weapon, +/obj/item/vibro_weapon, /obj/item/melee/ghost_sword, /obj/item/katana, /obj/item/energy_katana, @@ -25882,7 +25882,7 @@ /turf/open/floor/plasteel/bluespace, /area/centcom) "gkW" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /turf/open/floor/wood, /area/centcom/holding) "gxx" = ( diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index c4796f8babad..0f4ba1ebe833 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -210,7 +210,7 @@ /obj/machinery/status_display/evac{ pixel_x = -32 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -233,7 +233,7 @@ /obj/machinery/status_display/ai{ pixel_x = 32 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral, @@ -284,7 +284,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/arrival) "A" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -322,7 +322,7 @@ /turf/open/floor/plasteel, /area/shuttle/arrival) "E" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral, diff --git a/_maps/shuttles/arrival_omega.dmm b/_maps/shuttles/arrival_omega.dmm index f877f2a5fd52..b6826676a292 100644 --- a/_maps/shuttles/arrival_omega.dmm +++ b/_maps/shuttles/arrival_omega.dmm @@ -131,7 +131,7 @@ /turf/open/floor/plasteel, /area/shuttle/arrival) "o" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 90762a9dd9aa..5d96b338ec29 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -175,7 +175,7 @@ pixel_x = 6; pixel_y = 24 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -398,7 +398,7 @@ /turf/open/floor/plasteel/grimy, /area/shuttle/escape) "bc" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -565,7 +565,7 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "bG" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -665,7 +665,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bT" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /obj/effect/turf_decal/tile/bar, diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index 0ccf53dbb40f..a9ad698be4be 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -14,7 +14,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "ae" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/mineral/titanium, @@ -26,7 +26,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "ag" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/door/firedoor/border_only{ @@ -286,7 +286,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "aN" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/mineral/titanium/blue, @@ -435,7 +435,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bi" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/door/firedoor/border_only{ diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index cda82dd4bfec..e302b09a663c 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -420,7 +420,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aM" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/item/radio/intercom{ @@ -446,7 +446,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aP" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/item/radio/intercom{ @@ -1012,7 +1012,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "ca" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/plasteel, @@ -1038,7 +1038,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/plasteel, diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 641d335aca49..65e07c4d50a3 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -189,7 +189,7 @@ /turf/open/floor/plasteel/white, /area/shuttle/escape) "an" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -218,7 +218,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "ap" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -837,7 +837,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "bz" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/button/flasher{ @@ -851,7 +851,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bA" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/effect/turf_decal/tile/neutral{ @@ -1059,7 +1059,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "cb" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -1379,7 +1379,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "cA" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm index b08da6ba93d3..2dce8da131ac 100644 --- a/_maps/shuttles/emergency_imfedupwiththisworld.dmm +++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm @@ -183,7 +183,7 @@ /turf/open/floor/carpet, /area/shuttle/escape) "y" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /turf/open/floor/wood, /area/shuttle/escape) "z" = ( diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm index 5d2844f4e6aa..cf1411adcb30 100644 --- a/_maps/shuttles/emergency_kilo.dmm +++ b/_maps/shuttles/emergency_kilo.dmm @@ -511,7 +511,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "applebush" }, /turf/open/floor/mineral/plastitanium, @@ -535,7 +535,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/mineral/plastitanium, @@ -872,7 +872,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/mineral/titanium/white, @@ -1237,7 +1237,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21" }, /turf/open/floor/mineral/titanium/white, @@ -1267,7 +1267,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "applebush" }, /obj/effect/turf_decal/stripes/line, @@ -1374,7 +1374,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-05" }, /obj/machinery/portable_atmospherics/canister/air, @@ -1445,7 +1445,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-10" }, /turf/open/floor/mineral/titanium/white, diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index 6483937d2b38..b0cb5ac7f0a7 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -202,7 +202,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "as" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -338,7 +338,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aC" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -918,7 +918,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "by" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 diff --git a/_maps/shuttles/emergency_pool.dmm b/_maps/shuttles/emergency_pool.dmm index 98968940f6ab..867ae0b50968 100644 --- a/_maps/shuttles/emergency_pool.dmm +++ b/_maps/shuttles/emergency_pool.dmm @@ -369,7 +369,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "rf" = ( -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, /area/shuttle/escape) "tt" = ( @@ -380,9 +380,9 @@ /area/shuttle/escape) "wx" = ( /obj/machinery/door/firedoor/border_only, -/obj/item/twohanded/required/pool/rubber_ring, -/obj/item/twohanded/required/pool/rubber_ring, -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, +/obj/item/pool/rubber_ring, +/obj/item/pool/rubber_ring, /obj/structure/closet/athletic_mixed{ name = "pool floaties" }, @@ -492,7 +492,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "Ut" = ( -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/indestructible/sound/pool, /area/shuttle/escape) "Wn" = ( @@ -536,9 +536,9 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "Yy" = ( -/obj/item/twohanded/required/pool/pool_noodle, -/obj/item/twohanded/required/pool/pool_noodle, -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, +/obj/item/pool/pool_noodle, +/obj/item/pool/pool_noodle, /obj/structure/closet/athletic_mixed{ name = "pool noodles" }, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index b256a141599b..220dbaf4a64f 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -62,7 +62,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "am" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/door/firedoor/border_only{ @@ -77,7 +77,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "ao" = ( -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-22" }, /obj/machinery/door/firedoor/border_only{ @@ -114,7 +114,7 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 @@ -205,7 +205,7 @@ /area/shuttle/escape) "aB" = ( /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ icon_state = "plant-11" }, /obj/effect/turf_decal/tile/green, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index 4f3623a37ceb..eaf4d4157ae1 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -446,7 +446,7 @@ /area/shuttle/escape) "bo" = ( /obj/structure/table, -/obj/item/twohanded/required/baseball_bat{ +/obj/item/melee/baseball_bat{ pixel_x = -5 }, /obj/item/crowbar/large{ diff --git a/_maps/shuttles/emergency_scrapheap.dmm b/_maps/shuttles/emergency_scrapheap.dmm index f686dcb2fb0d..3a1105fc48d1 100644 --- a/_maps/shuttles/emergency_scrapheap.dmm +++ b/_maps/shuttles/emergency_scrapheap.dmm @@ -228,7 +228,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "aF" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aG" = ( diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index f3003ccdb173..09dada7dbeb3 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -283,7 +283,7 @@ /turf/open/floor/wood, /area/shuttle/transport) "bd" = ( -/obj/item/twohanded/required/kirbyplants/dead{ +/obj/item/kirbyplants/dead{ desc = "It doesn't look very healthy..."; name = "potted plant" }, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 1ecc20c4c220..36824ea576ed 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -1381,7 +1381,7 @@ /obj/item/pickaxe/drill/jackhammer, /obj/item/pickaxe/drill/jackhammer, /obj/item/pickaxe/drill/jackhammer, -/obj/item/twohanded/vxtvulhammer, +/obj/item/melee/vxtvulhammer, /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/airlock) diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index 9b74590832ab..142d1db91c3d 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -1257,7 +1257,7 @@ pixel_x = 13; pixel_y = 6 }, -/obj/item/twohanded/vxtvulhammer/pirate, +/obj/item/melee/vxtvulhammer/pirate, /turf/open/floor/pod/light, /area/shuttle/pirate) "Yj" = ( diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index e50107f991d3..aabe42b6a117 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -94,7 +94,7 @@ /area/survivalpod) "q" = ( /obj/structure/tubes, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/pod, /area/survivalpod) "r" = ( diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 528b4e74c963..eba05ee4bddd 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -207,9 +207,9 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT /datum/component/chasm/proc/fish(datum/source, obj/item/I, mob/user, params) - if(!istype(I,/obj/item/twohanded/fishingrod)) + if(!istype(I,/obj/item/fishingrod)) return - var/obj/item/twohanded/fishingrod/rod = I + var/obj/item/fishingrod/rod = I if(!rod.wielded) to_chat(user, span_warning("You need to wield the rod in both hands before you can fish in the chasm!")) return diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index ea93e8a6fdf2..5f8d908bf919 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -232,7 +232,7 @@ /datum/crafting_recipe/toysword name = "Toy Sledgehammer" reqs = list(/obj/item/light/bulb = 2, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) - result = /obj/item/twohanded/vxtvulhammer/toy/pirate // not authentic!!!! + result = /obj/item/melee/vxtvulhammer/toy/pirate // not authentic!!!! category = CAT_MISC /datum/crafting_recipe/toybat diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 0f303e307b86..bd072e57b583 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -165,27 +165,34 @@ to_chat(usr, "You will only deflect projectiles while throwmode is enabled.") -/obj/item/twohanded/bostaff +/obj/item/melee/bostaff name = "bo staff" desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate." force = 10 w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BACK - force_wielded = 14 + slot_flags = ITEM_SLOT_BACK throwforce = 20 throw_speed = 2 attack_verb = list("smashed", "slammed", "whacked", "thwacked") icon = 'icons/obj/weapons/misc.dmi' icon_state = "bostaff0" + base_icon_state = "bostaff" lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' block_chance = 50 -/obj/item/twohanded/bostaff/update_icon() - icon_state = "bostaff[wielded]" +/obj/item/melee/bostaff/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 10, \ + force_wielded = 14, \ + ) + +/obj/item/melee/bostaff/update_icon() + icon_state = "[base_icon_state]0" return -/obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) +/obj/item/melee/bostaff/attack(mob/target, mob/living/user) add_fingerprint(user) if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) to_chat(user, "You club yourself over the head with [src].") @@ -205,7 +212,7 @@ to_chat(user, span_warning("It would be dishonorable to attack a foe while they cannot retaliate.")) return if(user.a_intent == INTENT_DISARM) - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return ..() if(!ishuman(target)) return ..() @@ -240,7 +247,7 @@ else return ..() -/obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) +/obj/item/melee/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return ..() return FALSE diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index 7b3d069bac4a..2dc5de245a62 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -540,9 +540,9 @@ status_type = STATUS_EFFECT_REPLACE alert_type = null var/mutable_appearance/marked_underlay - var/obj/item/twohanded/kinetic_crusher/hammer_synced + var/obj/item/kinetic_crusher/hammer_synced -/datum/status_effect/crusher_mark/on_creation(mob/living/new_owner, obj/item/twohanded/kinetic_crusher/new_hammer_synced) +/datum/status_effect/crusher_mark/on_creation(mob/living/new_owner, obj/item/kinetic_crusher/new_hammer_synced) . = ..() if(.) hammer_synced = new_hammer_synced diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 24520151f986..57056d469677 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -47,7 +47,7 @@ RegisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, PROC_REF(attack_with_hurt_hand)) if(limb.held_index && victim.get_item_for_held_index(limb.held_index) && (disabling || prob(30 * severity))) var/obj/item/I = victim.get_item_for_held_index(limb.held_index) - if(istype(I, /obj/item/twohanded/offhand)) + if(istype(I, /obj/item/offhand)) I = victim.get_inactive_held_item() if(I && victim.dropItemToGround(I)) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b5ca55cbf96c..162b245700f7 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( /obj/item/toy/talking/codex_gigas = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, - /obj/item/twohanded/vxtvulhammer/toy = 2, + /obj/item/melee/vxtvulhammer/toy = 2, /obj/item/toy/gun = 2, /obj/item/gun/ballistic/shotgun/toy/crossbow = 2, /obj/item/storage/box/fakesyndiesuit = 2, diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 7b0b1dc7c120..d1a2e71d3f07 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1267,10 +1267,10 @@ to_chat(user, span_warning("The airlock's bolts prevent it from being forced!")) else if(brace) to_chat(user, span_warning("The airlock won't budge!")) - else if( !welded && !operating) + else if(!welded && !operating) if(istype(I, /obj/item/fireaxe)) //being fireaxe'd var/obj/item/fireaxe/F = I - if(!F.wielded) + if(!HAS_TRAIT(F, TRAIT_WIELDED)) to_chat(user, span_warning("You need to be wielding the fire axe to do that!")) return INVOKE_ASYNC(src, (density ? PROC_REF(open) : PROC_REF(close)), 2) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index f8216dbbe237..4a902a8740ae 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -299,7 +299,7 @@ victim.log_message("entered a blood frenzy", LOG_ATTACK) - if(iscarbon(owner)) + if(iscarbon(victim)) chainsaw = new(victim.loc) ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) victim.drop_all_held_items() diff --git a/code/game/objects/items/binoculars.dm b/code/game/objects/items/binoculars.dm index 3bb10090f750..a75bf3250077 100644 --- a/code/game/objects/items/binoculars.dm +++ b/code/game/objects/items/binoculars.dm @@ -25,8 +25,7 @@ return ..() /obj/item/binoculars/proc/on_wield(atom/source, mob/user) - SIGNAL_HANDLER - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(unwield)) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_walk)) RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate)) listeningTo = user user.visible_message("[user] holds [src] up to [user.p_their()] eyes.","You hold [src] up to your eyes.") @@ -35,9 +34,9 @@ user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, user.dir) /obj/item/binoculars/proc/on_unwield(atom/source, mob/user) - SIGNAL_HANDLER - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE) + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE) listeningTo = null item_state = "binoculars" user.regenerate_icons() @@ -48,3 +47,8 @@ var/mob/lad = thing lad.regenerate_icons() lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir) + +/obj/item/binoculars/proc/on_walk() + SIGNAL_HANDLER + + attack_self(listeningTo) //Yes I have sinned, why do you ask? diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index eaec1acd0c26..042fed1f5d14 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -309,30 +309,19 @@ var/mob/listeningTo -/obj/item/shockpaddles/Initialize(mapload) +/obj/item/shockpaddles/Initialize(mapload, obj/item/defibrillator/spawned_in) . = ..() AddComponent(/datum/component/two_handed, \ force_unwielded = 8, \ force_wielded = 12, \ icon_wielded = "[base_icon_state]1", \ - wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ - unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ ) - if(check_defib_exists(mainunit, src) && req_defib) - defib = mainunit + if(check_defib_exists(spawned_in, src) && spawned_in) + defib = spawned_in forceMove(defib) busy = FALSE update_icon() - -/// triggered on wield of two handed item -/obj/item/shockpaddles/proc/on_wield(obj/item/source, mob/user) - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/shockpaddles/proc/on_unwield(obj/item/source, mob/user) - wielded = FALSE - /obj/item/shockpaddles/equipped(mob/user, slot) . = ..() if(!req_defib || listeningTo == user) @@ -409,14 +398,13 @@ forceMove(defib) defib.update_icon() -/obj/item/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/M, obj/O) +/obj/item/shockpaddles/proc/check_defib_exists(obj/item/defibrillator/spawned_in, mob/living/carbon/M, obj/O) if(!req_defib) return TRUE //If it doesn't need a defib, just say it exists - if (!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns + if(!spawned_in || !istype(spawned_in)) //To avoid weird issues from admin spawns qdel(O) return FALSE - else - return TRUE + return TRUE /obj/item/shockpaddles/attack(mob/M, mob/user) @@ -433,7 +421,7 @@ has_rod = TRUE break - if(!(wielded || has_rod)) + if(!(HAS_TRAIT(src, TRAIT_WIELDED) || has_rod)) if(iscyborg(user)) to_chat(user, span_warning("You must activate the paddles in your active module before you can use them on someone!")) else @@ -472,7 +460,7 @@ H.grab_ghost() // Shove them back in their body. else if(H.can_defib(FALSE)) H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) - if(has_rod && !wielded) + if(has_rod && !HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, span_notice("Your snake holds the other paddle in its mouth and places it on [H]'s chest.")) do_help(H, user) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index e7f75f6af293..bf0e97233bb1 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -111,7 +111,7 @@ to_chat(user, span_warning("\the [HAS_TRAIT(src, TRAIT_NODROP) ? src : I] is stuck to your hand, you can't attach it to \the [HAS_TRAIT(src, TRAIT_NODROP) ? I : src]!")) return else - var/obj/item/twohanded/dualsaber/makeshift/newSaber = new /obj/item/twohanded/dualsaber/makeshift(user.loc) + var/obj/item/melee/dualsaber/makeshift/newSaber = new /obj/item/melee/dualsaber/makeshift(user.loc) to_chat(user, span_notice("You crudely attach both [src]s together in order to make a [newSaber].")) qdel(I) qdel(src) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index f01ce181d0df..a692cd0da11d 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -24,21 +24,20 @@ if(istype(I, /obj/item/melee/transforming/energy)) to_chat(user, span_warning("You don't think \the [I] will be the thing getting modified if you use it on \the [src]!")) return - if(istype(I, /obj/item/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff - var/obj/item/twohanded/TH = I - if(TH.force_wielded >= max) - to_chat(user, span_warning("[TH] is much too powerful to sharpen further!")) - return - if(TH.wielded) - to_chat(user, span_warning("[TH] must be unwielded before it can be sharpened!")) - return - if(TH.force_wielded > initial(TH.force_wielded)) - to_chat(user, span_warning("[TH] has already been refined before. It cannot be sharpened further!")) - return - TH.force_wielded = clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay - if(I.force > initial(I.force)) + //This block is used to check more things if the item has a relevant component. + var/signal_out = SEND_SIGNAL(I, COMSIG_ITEM_SHARPEN_ACT, increment, max) //Stores the bitflags returned by SEND_SIGNAL + if(signal_out & COMPONENT_BLOCK_SHARPEN_MAXED) //If the item's components enforce more limits on maximum power from sharpening, we fail + to_chat(user, span_warning("[I] is much too powerful to sharpen further!")) + return + if(signal_out & COMPONENT_BLOCK_SHARPEN_BLOCKED) + to_chat(user, span_warning("[I] is not able to be sharpened right now!")) + return + if((signal_out & COMPONENT_BLOCK_SHARPEN_ALREADY) || (I.force > initial(I.force) && !signal_out)) //No sharpening stuff twice to_chat(user, span_warning("[I] has already been refined before. It cannot be sharpened further!")) return + if(!(signal_out & COMPONENT_BLOCK_SHARPEN_APPLIED)) //If the item has a relevant component and COMPONENT_BLOCK_SHARPEN_APPLIED is returned, the item only gets the throw force increase + I.force = clamp(I.force + increment, 0, max) + I.wound_bonus = I.wound_bonus + increment //wound_bonus has no cap user.visible_message(span_notice("[user] sharpens [I] with [src]!"), span_notice("You sharpen [I], making it much more deadly than before.")) playsound(src, 'sound/items/unsheath.ogg', 25, 1) I.sharpness = SHARP_EDGED diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index bff05696d0e1..4ecb98997dc9 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -1,40 +1,45 @@ -/obj/item/twohanded/singularityhammer +/obj/item/singularityhammer name = "singularity hammer" desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." icon_state = "singhammer0" + base_icon_state = "singhammer" icon = 'icons/obj/wizard.dmi' lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK force = 5 - force_wielded = 15 throwforce = 15 throw_range = 1 w_class = WEIGHT_CLASS_HUGE - var/charged = 5 armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF force_string = "LORD SINGULOTH HIMSELF" + var/charged = 5 -/obj/item/twohanded/singularityhammer/New() - ..() +/obj/item/singularityhammer/Initialize(mapload) + . = ..() START_PROCESSING(SSobj, src) + AddComponent(/datum/component/two_handed, \ + force_unwielded = 5, \ + force_wielded = 15, \ + icon_wielded = "[base_icon_state]1", \ + ) -/obj/item/twohanded/singularityhammer/Destroy() +/obj/item/singularityhammer/update_icon() + icon_state = "[base_icon_state]0" + return + +/obj/item/singularityhammer/Destroy() STOP_PROCESSING(SSobj, src) return ..() -/obj/item/twohanded/singularityhammer/process() +/obj/item/singularityhammer/process() if(charged < 5) charged++ return -/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "singhammer[wielded]" - return - -/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) +/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder) for(var/atom/X in orange(5,pull)) if(ismovable(X)) var/atom/movable/A = X @@ -56,24 +61,25 @@ step_towards(H,pull) return -/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) +/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) . = ..() if(!proximity) return - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) if(charged == 5) charged = 0 - if(istype(A, /mob/living/)) + if(istype(A, /mob/living)) var/mob/living/Z = A Z.take_bodypart_damage(20,0) playsound(user, 'sound/weapons/marauder.ogg', 50, 1) var/turf/target = get_turf(A) vortex(target,user) -/obj/item/twohanded/mjollnir +/obj/item/mjolnir name = "Mjolnir" desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." icon_state = "mjollnir0" + base_icon_state = "mjollnir" icon = 'icons/obj/wizard.dmi' lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' @@ -81,12 +87,22 @@ resistance_flags = FIRE_PROOF | ACID_PROOF slot_flags = ITEM_SLOT_BACK force = 5 - force_wielded = 20 throwforce = 30 throw_range = 7 w_class = WEIGHT_CLASS_HUGE -/obj/item/twohanded/mjollnir/proc/shock(mob/living/target) +/obj/item/mjolnir/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 5, \ + force_wielded = 20, \ + icon_wielded = "[base_icon_state]1", \ + ) + +/obj/item/mjolnir/update_icon() + icon_state = "[base_icon_state]0" + +/obj/item/mjolnir/proc/shock(mob/living/target) target.Stun(60) var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread s.set_up(5, 1, target.loc) @@ -98,13 +114,13 @@ target.throw_at(throw_target, 200, 4) return -/obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user) +/obj/item/mjolnir/attack(mob/living/M, mob/user) ..() - if(wielded) - playsound(src.loc, "sparks", 50, 1) + if(HAS_TRAIT(src, TRAIT_WIELDED)) + playsound(loc, "sparks", 50, 1) shock(M) -/obj/item/twohanded/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/mjolnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() if(isliving(hit_atom)) var/mob/M = hit_atom @@ -114,11 +130,7 @@ M.visible_message(span_warning("[M]'s [A] glows brightly as it disrupts the Mjolnir's power!")) visible_message(span_boldwarning("With a mighty thud, Mjolnir slams into the [src.loc], and its glow fades!
")) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1, extrarange = 30) - new /obj/structure/mjollnir(src.loc) + new /obj/structure/mjollnir(loc) qdel(src) else shock(hit_atom) - -/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - return diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 3f611d4ecfa9..0f59b2dfacae 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -190,7 +190,7 @@ new /obj/item/storage/magspear_quiver(src) new /obj/item/clothing/suit/space/hardsuit/carp(src) //1 carp new /obj/item/clothing/mask/gas/carp(src) //1 carp? - new /obj/item/twohanded/pitchfork/trident(src) + new /obj/item/pitchfork/trident(src) new /obj/item/grenade/clusterbuster/syndie/spawner_spesscarp(src) //when you need A LOT of carps, you'll get at least (but most likely more) 30 carps with that new /obj/item/grenade/spawnergrenade/spesscarp(src) //for precise and quick delivery of carps, 5 carps per grenade for a total of 20 carps new /obj/item/grenade/spawnergrenade/spesscarp(src) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index b7dbd2c8e38e..3583eb319073 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -287,7 +287,7 @@ return else to_chat(user, span_notice("You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.")) - var/obj/item/twohanded/dualsaber/toy/newSaber = new /obj/item/twohanded/dualsaber/toy(user.loc) + var/obj/item/melee/dualsaber/toy/newSaber = new /obj/item/melee/dualsaber/toy(user.loc) if(hacked) // That's right, we'll only check the "original" "sword". newSaber.hacked = TRUE newSaber.saber_color = "rainbow" @@ -367,7 +367,7 @@ /* * Subtype of Double-Bladed Energy Swords */ -/obj/item/twohanded/dualsaber/toy +/obj/item/melee/dualsaber/toy name = "double-bladed toy sword" desc = "A cheap, plastic replica of TWO energy swords. Double the fun!" force = 0 @@ -377,16 +377,16 @@ throw_range = 5 attack_verb = list("attacked", "struck", "hit") -/obj/item/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) +/obj/item/melee/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) return 0 -/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles +/obj/item/melee/dualsaber/toy/IsReflect() //Stops Toy Dualsabers from reflecting energy projectiles return 0 /* * Subtype of Vxtvul Hammer */ -/obj/item/twohanded/vxtvulhammer/toy +/obj/item/melee/vxtvulhammer/toy name = "toy sledgehammer" desc = "A Donksoft motorized hammer with realistic flashing lights and speakers." force = 0 @@ -399,7 +399,7 @@ toy = TRUE var/pirated = FALSE // knockoff brand! -/obj/item/twohanded/vxtvulhammer/toy/Initialize(mapload) +/obj/item/melee/vxtvulhammer/toy/Initialize(mapload) . = ..() if(pirated || prob(10)) // man i got scammed! pirated = TRUE @@ -408,13 +408,13 @@ icon_state = "vxtvul_hammer_pirate0-0" update_icon() -/obj/item/twohanded/vxtvulhammer/toy/update_icon() +/obj/item/melee/vxtvulhammer/toy/update_icon() if(!pirated) icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" else icon_state = "vxtvul_hammer[wielded]-[supercharged]" -/obj/item/twohanded/vxtvulhammer/toy/pirate +/obj/item/melee/vxtvulhammer/toy/pirate pirated = TRUE /obj/item/toy/katana diff --git a/code/game/objects/items/two_handed/broom.dm b/code/game/objects/items/two_handed/broom.dm index 59cd90377462..cf332b742e17 100644 --- a/code/game/objects/items/two_handed/broom.dm +++ b/code/game/objects/items/two_handed/broom.dm @@ -30,12 +30,10 @@ icon_state = "[base_icon_state]0" /obj/item/broom/proc/on_wield(atom/source, mob/user) - SIGNAL_HANDLER to_chat(user, span_notice("You brace the [src] against the ground in a firm sweeping stance.")) RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(sweep)) /obj/item/broom/proc/on_unwield(atom/source, mob/user) - SIGNAL_HANDLER UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE) /obj/item/broom/afterattack(atom/A, mob/user, proximity) diff --git a/code/game/objects/items/two_handed/dualsaber.dm b/code/game/objects/items/two_handed/dualsaber.dm new file mode 100644 index 000000000000..930600f5c2fe --- /dev/null +++ b/code/game/objects/items/two_handed/dualsaber.dm @@ -0,0 +1,211 @@ +/* + * Double-Bladed Energy Swords - Cheridan + */ +/obj/item/melee/dualsaber + icon = 'icons/obj/weapons/energy.dmi' + icon_state = "dualsaber0" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + name = "double-bladed energy sword" + desc = "A more powerful version on the energy sword, it is more capable of blocking energy projectiles than its single bladed counterpart. 'At last we will have revenge' is carved on the side of the handle." + force = 3 + throwforce = 5 + throw_speed = 3 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + wieldsound = 'sound/weapons/saberon.ogg' + unwieldsound = 'sound/weapons/saberoff.ogg' + hitsound = "swing_hit" + armour_penetration = 35 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 75 + max_integrity = 200 + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) + resistance_flags = FIRE_PROOF + light_system = MOVABLE_LIGHT + light_range = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD + light_color = "#00ff00" //green + light_on = FALSE + wound_bonus = -10 + bare_wound_bonus = 20 + var/force_wielded = 31 + var/w_class_on = WEIGHT_CLASS_BULKY + var/saber_color = "green" + var/hacked = FALSE + var/list/possible_colors = list("red", "blue", "green", "purple") + +/obj/item/melee/dualsaber/Initialize(mapload) + . = ..() + if(LAZYLEN(possible_colors)) + saber_color = pick(possible_colors) + var/new_color + switch(saber_color) + if("red") + new_color = LIGHT_COLOR_RED + if("green") + new_color = LIGHT_COLOR_GREEN + if("blue") + new_color = LIGHT_COLOR_LIGHT_CYAN + if("purple") + new_color = LIGHT_COLOR_LAVENDER + set_light_color(new_color) + + AddComponent(/datum/component/two_handed, \ + force_unwielded = 3, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state][sabre_color]1", \ + wieldsound = 'sound/weapons/saberon.ogg', \ + unwieldsound = 'sound/weapons/saberoff.ogg', \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/obj/item/melee/dualsaber/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/melee/dualsaber/suicide_act(mob/living/carbon/user) + if(HAS_TRAIT(src, TRAIT_WIELDED)) + user.visible_message(span_suicide("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!")) + + var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code + var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) + B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea + var/randdir + for(var/i in 1 to 24)//like a headless chicken! + if(user.is_holding(src)) + randdir = pick(GLOB.alldirs) + user.Move(get_step(user, randdir),randdir) + user.emote("spin") + if (i == 3 && myhead) + myhead.drop_limb() + sleep(0.3 SECONDS) + else + user.visible_message(span_suicide("[user] panics and starts choking to death!")) + return OXYLOSS + + else + user.visible_message(span_suicide("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!")) + return BRUTELOSS + +/obj/item/melee/dualsaber/update_icon() + icon_state = "[base_icon_state]0" + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) + +/obj/item/melee/dualsaber/attack(mob/target, mob/living/carbon/human/user) + if(user.has_dna()) + if(user.dna.check_mutation(HULK) || user.dna.check_mutation(ACTIVE_HULK)) + to_chat(user, span_warning("You grip the blade too hard and accidentally close it!")) + unwield() + return + ..() + if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40)) + impale(user) + return + if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(50)) + INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) + +/obj/item/melee/dualsaber/proc/jedi_spin(mob/living/user) + for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH)) + user.setDir(i) + if(i == WEST) + user.emote("flip") + sleep(0.1 SECONDS) + +/obj/item/melee/dualsaber/proc/impale(mob/living/user) + to_chat(user, span_warning("You twirl around a bit before losing your balance and impaling yourself on [src].")) + if (force_wielded) + user.take_bodypart_damage(20,25,check_armor = TRUE) + else + user.adjustStaminaLoss(25) + +/obj/item/melee/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(HAS_TRAIT(src, TRAIT_WIELDED)) + return ..() + return 0 + +/obj/item/melee/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up + if(HAS_TRAIT(src, TRAIT_WIELDED)) + to_chat(user, span_warning("You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!")) + return 1 + +/obj/item/melee/dualsaber/process() + if(HAS_TRAIT(src, TRAIT_WIELDED)) + if(hacked) + light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER) + open_flame() + else + STOP_PROCESSING(SSobj, src) + +/obj/item/melee/dualsaber/IsReflect() + if(HAS_TRAIT(src, TRAIT_WIELDED)) + return TRUE + +/obj/item/melee/dualsaber/ignition_effect(atom/A, mob/user) + // same as /obj/item/melee/transforming/energy, mostly + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + return "" + var/in_mouth = "" + if(iscarbon(user)) + var/mob/living/carbon/C = user + if(C.wear_mask) + in_mouth = ", barely missing [user.p_their()] nose" + . = span_warning("[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process.") + playsound(loc, hitsound, get_clamped_volume(), 1, -1) + add_fingerprint(user) + // Light your candles while spinning around the room + INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) + +/obj/item/melee/dualsaber/green + possible_colors = list("green") + +/obj/item/melee/dualsaber/red + possible_colors = list("red") + +/obj/item/melee/dualsaber/blue + possible_colors = list("blue") + +/obj/item/melee/dualsaber/purple + possible_colors = list("purple") + +/obj/item/melee/dualsaber/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_MULTITOOL) + if(!hacked) + hacked = TRUE + to_chat(user, span_warning("2XRNBW_ENGAGE")) + saber_color = "rainbow" + update_icon() + else + to_chat(user, span_warning("It's starting to look like a triple rainbow - no, nevermind.")) + return + return ..() + +/obj/item/melee/dualsaber/proc/on_wield(atom/source, mob/living/carbon/M) + if(!M.has_dna()) + return + if(M.dna.check_mutation(HULK) || M.dna.check_mutation(ACTIVE_HULK)) + to_chat(M, span_warning("You lack the grace to wield this!")) + return + sharpness = SHARP_EDGED + w_class = w_class_on + hitsound = 'sound/weapons/blade1.ogg' + START_PROCESSING(SSobj, src) + set_light_on(TRUE) + +/obj/item/melee/dualsaber/proc/on_unwield(atom/source, mob/living/user) + sharpness = initial(sharpness) + w_class = initial(w_class) + hitsound = initial(hitsound) + STOP_PROCESSING(SSobj, src) + set_light_on(FALSE) + +/obj/item/melee/dualsaber/makeshift + name = "makeshift double-bladed energy sword" + desc = "Two energy swords taped crudely together. 'at last we finally get some revenge' is scribbled on the side with crayon." + + force_wielded = 27 //total of 30 to be equal to an esword, it's literally just two duct taped together + +/obj/item/melee/dualsaber/makeshift/IsReflect()//only 50% chance to reflect, so it still has the cool effect, but not 100% chance + if(prob(50)) + return ..() + return FALSE diff --git a/code/game/objects/items/two_handed/highfrequencyblade.dm b/code/game/objects/items/two_handed/highfrequencyblade.dm index 01503fd131e1..ae1e86a5a7f9 100644 --- a/code/game/objects/items/two_handed/highfrequencyblade.dm +++ b/code/game/objects/items/two_handed/highfrequencyblade.dm @@ -7,7 +7,6 @@ name = "vibro sword" desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." force = 20 - force_wielded = 20 armour_penetration = 100 block_chance = 40 throwforce = 20 @@ -22,7 +21,7 @@ . = ..() AddComponent(/datum/component/two_handed, \ force_unwielded = force, \ - force_wielded = force_wielded, \ + force_wielded = 20, \ icon_wielded = "[base_icon_state]1", \ ) AddComponent(/datum/component/butchering, 20, 105) diff --git a/code/game/objects/items/two_handed/pitchfork.dm b/code/game/objects/items/two_handed/pitchfork.dm new file mode 100644 index 000000000000..7deaed424be8 --- /dev/null +++ b/code/game/objects/items/two_handed/pitchfork.dm @@ -0,0 +1,95 @@ +/obj/item/pitchfork + icon = 'icons/obj/weapons/spears.dmi' + icon_state = "pitchfork0" + base_icon_state = "pitchfork" + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "pitchfork" + desc = "A simple tool used for moving hay." + force = 7 + throwforce = 15 + w_class = WEIGHT_CLASS_BULKY + attack_verb = list("attacked", "impaled", "pierced") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = SHARP_POINTY + max_integrity = 200 + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) + resistance_flags = FIRE_PROOF + + ///How much damage the pitchfork will do while wielded. + var/force_wielded = 8 + +/obj/item/pitchfork/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ + icon_wielded = "[base_icon_state]1", \ + ) + +/obj/item/pitchfork/trident + icon_state = "trident" + name = "trident" + desc = "A trident recovered from the ruins of atlantis" + slot_flags = ITEM_SLOT_BELT + force = 14 + throwforce = 23 + + force_wielded = 6 + +/obj/item/pitchfork/demonic + name = "demonic pitchfork" + desc = "A red pitchfork, it looks like the work of the devil." + force = 19 + throwforce = 24 + light_system = MOVABLE_LIGHT + light_range = 3 + light_power = 6 + light_color = LIGHT_COLOR_RED + + force_wielded = 6 + +/obj/item/pitchfork/demonic/greater + force = 24 + throwforce = 50 + + force_wielded = 10 + +/obj/item/pitchfork/demonic/ascended + force = 100 + throwforce = 100 + + force_wielded = 500000 // Kills you DEAD. + +/obj/item/pitchfork/suicide_act(mob/user) + user.visible_message(span_suicide("[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + return (BRUTELOSS) + +/obj/item/pitchfork/demonic/pickup(mob/living/user) + . = ..() + if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) + var/mob/living/U = user + U.visible_message(span_warning("As [U] picks [src] up, [U]'s arms briefly catch fire."), \ + span_warning("\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"")) + if(ishuman(U)) + var/mob/living/carbon/human/H = U + H.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + else + U.adjustFireLoss(rand(force/2,force)) + +/obj/item/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) + if(user.mind && user.owns_soul() && !is_devil(user)) + to_chat(user, "[src] burns in your hands.") + user.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + return ..() + +/obj/item/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity || !HAS_TRAIT(src, TRAIT_WIELDED)) + return + if(iswallturf(target)) + var/turf/closed/wall/W = target + user.visible_message(span_danger("[user] blasts \the [target] with \the [src]!")) + playsound(target, 'sound/magic/disintegrate.ogg', 100, 1) + W.break_wall() + W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) diff --git a/code/game/objects/items/two_handed/updatepaths.txt b/code/game/objects/items/two_handed/updatepaths.txt index 08a2a7521d16..9fcdc1249b8d 100644 --- a/code/game/objects/items/two_handed/updatepaths.txt +++ b/code/game/objects/items/two_handed/updatepaths.txt @@ -4,7 +4,7 @@ /obj/item/melee/spear/bonespear/chitinspear : /obj/item/melee/spear/bonespear/chitinspear /obj/item/melee/spear/bamboospear : /obj/item/melee/spear/bamboospear /obj/item/twohanded/required/cult_bastard : /obj/item/melee/cult_bastard -/obj/item/twohanded/required/chainsaw : /obj/item/melee/chainsaw +/obj/item/melee/chainsaw : /obj/item/melee/chainsaw # now we'll do the generic paths, removing 'required' entirely. diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm deleted file mode 100644 index 0b7a55ec9191..000000000000 --- a/code/game/objects/items/twohanded.dm +++ /dev/null @@ -1,671 +0,0 @@ -/* - * Twohanded - */ -/obj/item/twohanded - /// Is the item currently wielded with two hands - var/wielded = FALSE - /// How much additonal force to give - var/force_wielded = 0 - /// Sound made when you wield it - var/wieldsound = null - /// Sound made when you unwield it - var/unwieldsound = null - /// stat list for wielded/unwielded, switches with weapon_stats when wielding or unwielding - var/list/wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - -/obj/item/twohanded/proc/unwield(mob/living/carbon/user, show_message = TRUE) - if(!wielded || !user) - return - wielded = FALSE - force -= force_wielded - var/sf = findtext(name, " (Wielded)", -10)//10 == length(" (Wielded)") - if(sf) - name = copytext(name, 1, sf) - else //something wrong - name = "[initial(name)]" - update_icon() - if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) - user.update_inv_back() - else - user.update_inv_hands() - if(show_message) - if(iscyborg(user)) - to_chat(user, span_notice("You free up your module.")) - else - to_chat(user, span_notice("You are now carrying [src] with one hand.")) - if(unwieldsound) - playsound(loc, unwieldsound, 50, 1) - var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() - if(O && istype(O)) - O.unwield() - var/list/stats = weapon_stats - weapon_stats = wielded_stats - wielded_stats = stats - return - -/obj/item/twohanded/proc/wield(mob/living/carbon/user) - if(wielded) - return - if(ismonkey(user)) - to_chat(user, span_warning("It's too heavy for you to wield fully.")) - return - if(user.get_inactive_held_item()) - to_chat(user, span_warning("You need your other hand to be empty!")) - return - var/obj/item/twohanded/offhand/O = new(user) // Reserve other hand - // Cyborgs are snowflakes hand wise - if(iscyborg(user)) - user.put_in_inactive_hand(O) - else - if(!user.put_in_inactive_hand(O)) - to_chat(user, span_notice("You try to wield it... but it seems you're missing the matching arm.")) // should be better text but dunno what - return - wielded = TRUE - if(force_wielded) - force += force_wielded - name = "[name] (Wielded)" - update_icon() - if(iscyborg(user)) - to_chat(user, span_notice("You dedicate your module to [src].")) - else - to_chat(user, span_notice("You grab [src] with both hands.")) - if (wieldsound) - playsound(loc, wieldsound, 50, 1) - var/list/stats = weapon_stats - weapon_stats = wielded_stats - wielded_stats = stats - O.name = "[name] - offhand" - O.desc = "Your second grip on [src]." - O.wielded = TRUE - return - -/obj/item/twohanded/dropped(mob/user) - . = ..() - //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand - if(!wielded) - return - unwield(user) - -/obj/item/twohanded/update_icon() - return - -/obj/item/twohanded/attack_self(mob/user) - . = ..() - if(wielded) //Trying to unwield it - unwield(user) - else //Trying to wield it - wield(user) - -/obj/item/twohanded/equip_to_best_slot(mob/M) - if(..()) - unwield(M) - return - -/obj/item/twohanded/equipped(mob/user, slot) - ..() - if(!user.is_holding(src) && wielded) - unwield(user) - -///////////OFFHAND/////////////// -/obj/item/twohanded/offhand - name = "offhand" - icon_state = "offhand" - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/item/twohanded/offhand/Destroy() - wielded = FALSE - return ..() - -/obj/item/twohanded/offhand/dropped(mob/living/user, show_message = TRUE) //Only utilized by dismemberment since you can't normally switch to the offhand to drop it. - SHOULD_CALL_PARENT(FALSE) - var/obj/I = user.get_active_held_item() - if(I && istype(I, /obj/item/twohanded)) - var/obj/item/twohanded/thw = I - thw.unwield(user, show_message) - if(!QDELETED(src)) - qdel(src) - -/obj/item/twohanded/offhand/unwield() - if(wielded)//Only delete if we're wielded - wielded = FALSE - qdel(src) - -/obj/item/twohanded/offhand/wield() - if(wielded)//Only delete if we're wielded - wielded = FALSE - qdel(src) - -/obj/item/twohanded/offhand/attack_self(mob/living/carbon/user) //You should never be able to do this in standard use of two handed items. This is a backup for lingering offhands. - var/obj/item/twohanded/O = user.get_inactive_held_item() - if (istype(O) && !istype(O, /obj/item/twohanded/offhand/)) //If you have a proper item in your other hand that the offhand is for, do nothing. This should never happen. - return - if (QDELETED(src)) - return - qdel(src) //If it's another offhand, or literally anything else, qdel. If I knew how to add logging messages I'd put one here. - -/* - * Double-Bladed Energy Swords - Cheridan - */ -/obj/item/twohanded/dualsaber - icon = 'icons/obj/weapons/energy.dmi' - icon_state = "dualsaber0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "double-bladed energy sword" - desc = "A more powerful version on the energy sword, it is more capable of blocking energy projectiles than its single bladed counterpart. 'At last we will have revenge' is carved on the side of the handle." - force = 3 - throwforce = 5 - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - var/w_class_on = WEIGHT_CLASS_BULKY - force_wielded = 31 - wieldsound = 'sound/weapons/saberon.ogg' - unwieldsound = 'sound/weapons/saberoff.ogg' - hitsound = "swing_hit" - armour_penetration = 35 - var/saber_color = "green" - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 75 - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) - resistance_flags = FIRE_PROOF - light_system = MOVABLE_LIGHT - light_range = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD - light_color = "#00ff00" //green - light_on = FALSE - wound_bonus = -10 - bare_wound_bonus = 20 - var/hacked = FALSE - var/list/possible_colors = list("red", "blue", "green", "purple") - -/obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user) - if(wielded) - user.visible_message(span_suicide("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!")) - - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code - var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) - B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea - var/randdir - for(var/i in 1 to 24)//like a headless chicken! - if(user.is_holding(src)) - randdir = pick(GLOB.alldirs) - user.Move(get_step(user, randdir),randdir) - user.emote("spin") - if (i == 3 && myhead) - myhead.drop_limb() - sleep(0.3 SECONDS) - else - user.visible_message(span_suicide("[user] panics and starts choking to death!")) - return OXYLOSS - - - else - user.visible_message(span_suicide("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!")) - return BRUTELOSS - -/obj/item/twohanded/dualsaber/Initialize(mapload) - . = ..() - if(LAZYLEN(possible_colors)) - saber_color = pick(possible_colors) - var/new_color - switch(saber_color) - if("red") - new_color = LIGHT_COLOR_RED - if("green") - new_color = LIGHT_COLOR_GREEN - if("blue") - new_color = LIGHT_COLOR_LIGHT_CYAN - if("purple") - new_color = LIGHT_COLOR_LAVENDER - set_light_color(new_color) - -/obj/item/twohanded/dualsaber/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/twohanded/dualsaber/update_icon() - if(wielded) - icon_state = "dualsaber[saber_color][wielded]" - else - icon_state = "dualsaber0" - SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) - -/obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) - if(user.has_dna()) - if(user.dna.check_mutation(HULK) || user.dna.check_mutation(ACTIVE_HULK)) - to_chat(user, span_warning("You grip the blade too hard and accidentally close it!")) - unwield() - return - ..() - if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40)) - impale(user) - return - if((wielded) && prob(50)) - INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) - -/obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user) - for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH)) - user.setDir(i) - if(i == WEST) - user.emote("flip") - sleep(0.1 SECONDS) - -/obj/item/twohanded/dualsaber/proc/impale(mob/living/user) - to_chat(user, span_warning("You twirl around a bit before losing your balance and impaling yourself on [src].")) - if (force_wielded) - user.take_bodypart_damage(20,25,check_armor = TRUE) - else - user.adjustStaminaLoss(25) - -/obj/item/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - return ..() - return 0 - -/obj/item/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up - if(wielded) - to_chat(user, span_warning("You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!")) - return 1 - -/obj/item/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds. - if(M.has_dna()) - if(M.dna.check_mutation(HULK) || M.dna.check_mutation(ACTIVE_HULK)) - to_chat(M, span_warning("You lack the grace to wield this!")) - return - ..() - if(wielded) - sharpness = SHARP_EDGED - w_class = w_class_on - hitsound = 'sound/weapons/blade1.ogg' - START_PROCESSING(SSobj, src) - set_light_on(TRUE) - -/obj/item/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds. - sharpness = initial(sharpness) - w_class = initial(w_class) - ..() - hitsound = "swing_hit" - STOP_PROCESSING(SSobj, src) - set_light_on(FALSE) - -/obj/item/twohanded/dualsaber/process() - if(wielded) - if(hacked) - light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER) - open_flame() - else - STOP_PROCESSING(SSobj, src) - -/obj/item/twohanded/dualsaber/IsReflect() - if(wielded) - return TRUE - -/obj/item/twohanded/dualsaber/ignition_effect(atom/A, mob/user) - // same as /obj/item/melee/transforming/energy, mostly - if(!wielded) - return "" - var/in_mouth = "" - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.wear_mask) - in_mouth = ", barely missing [user.p_their()] nose" - . = span_warning("[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process.") - playsound(loc, hitsound, get_clamped_volume(), 1, -1) - add_fingerprint(user) - // Light your candles while spinning around the room - INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) - -/obj/item/twohanded/dualsaber/green - possible_colors = list("green") - -/obj/item/twohanded/dualsaber/red - possible_colors = list("red") - -/obj/item/twohanded/dualsaber/blue - possible_colors = list("blue") - -/obj/item/twohanded/dualsaber/purple - possible_colors = list("purple") - -/obj/item/twohanded/dualsaber/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!hacked) - hacked = TRUE - to_chat(user, span_warning("2XRNBW_ENGAGE")) - saber_color = "rainbow" - update_icon() - else - to_chat(user, span_warning("It's starting to look like a triple rainbow - no, nevermind.")) - else - return ..() - -/obj/item/twohanded/dualsaber/makeshift - name = "makeshift double-bladed energy sword" - desc = "Two energy swords taped crudely together. 'at last we finally get some revenge' is scribbled on the side with crayon." - force_wielded = 27 //total of 30 to be equal to an esword, it's literally just two duct taped together - -/obj/item/twohanded/dualsaber/makeshift/IsReflect()//only 50% chance to reflect, so it still has the cool effect, but not 100% chance - if(prob(50)) - return ..() - return FALSE - -/obj/item/twohanded/pitchfork - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "pitchfork0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "pitchfork" - desc = "A simple tool used for moving hay." - force = 7 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - force_wielded = 8 - attack_verb = list("attacked", "impaled", "pierced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = SHARP_POINTY - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) - resistance_flags = FIRE_PROOF - -/obj/item/twohanded/pitchfork/trident - icon_state = "trident" - name = "trident" - desc = "A trident recovered from the ruins of atlantis" - slot_flags = ITEM_SLOT_BELT - force = 14 - throwforce = 23 - force_wielded = 6 - -/obj/item/twohanded/pitchfork/demonic - name = "demonic pitchfork" - desc = "A red pitchfork, it looks like the work of the devil." - force = 19 - throwforce = 24 - force_wielded = 6 - light_system = MOVABLE_LIGHT - light_range = 3 - light_power = 6 - light_color = LIGHT_COLOR_RED - -/obj/item/twohanded/pitchfork/demonic/greater - force = 24 - throwforce = 50 - force_wielded = 10 - -/obj/item/twohanded/pitchfork/demonic/ascended - force = 100 - throwforce = 100 - force_wielded = 500000 // Kills you DEAD. - -/obj/item/twohanded/pitchfork/update_icon() - icon_state = "pitchfork[wielded]" - -/obj/item/twohanded/pitchfork/suicide_act(mob/user) - user.visible_message(span_suicide("[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return (BRUTELOSS) - -/obj/item/twohanded/pitchfork/demonic/pickup(mob/living/user) - . = ..() - if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) - var/mob/living/U = user - U.visible_message(span_warning("As [U] picks [src] up, [U]'s arms briefly catch fire."), \ - span_warning("\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"")) - if(ishuman(U)) - var/mob/living/carbon/human/H = U - H.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - U.adjustFireLoss(rand(force/2,force)) - -/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul() && !is_devil(user)) - to_chat(user, "[src] burns in your hands.") - user.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - ..() - -/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !wielded) - return - if(iswallturf(target)) - var/turf/closed/wall/W = target - user.visible_message(span_danger("[user] blasts \the [target] with \the [src]!")) - playsound(target, 'sound/magic/disintegrate.ogg', 100, 1) - W.break_wall() - W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - return - -/* - * Vxtvul Hammer - */ - -/datum/action/item_action/charge_hammer - name = "Charge the Blast Pads" - -/datum/action/item_action/charge_hammer/Trigger() - var/obj/item/twohanded/vxtvulhammer/vxtvulhammer = target - if(istype(vxtvulhammer)) - vxtvulhammer.charge_hammer(owner) - -/obj/item/twohanded/vxtvulhammer - icon = 'icons/obj/weapons/misc.dmi' - icon_state = "vxtvul_hammer0-0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - name = "Vxtvul Hammer" - desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. \ - While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." - force = 4 //It's heavy as hell - force_wielded = 24 - armour_penetration = 50 //Designed for shattering walls in a single blow, I don't think it cares much about armor - throwforce = 18 - attack_verb = list("attacked", "hit", "struck", "bludgeoned", "bashed", "smashed") - block_chance = 30 //Only works in melee, but I bet your ass you could raise its handle to deflect a sword - sharpness = SHARP_NONE //Blunt, breaks bones - wound_bonus = -10 - bare_wound_bonus = 15 - max_integrity = 200 - resistance_flags = ACID_PROOF | FIRE_PROOF - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/effects/hammerhitbasic.ogg' - slot_flags = ITEM_SLOT_BACK - actions_types = list(/datum/action/item_action/charge_hammer) - light_system = MOVABLE_LIGHT - light_color = LIGHT_COLOR_HALOGEN - light_range = 2 - light_power = 2 - var/datum/effect_system/spark_spread/spark_system //It's a surprise tool that'll help us later - var/charging = FALSE - var/supercharged = FALSE - var/toy = FALSE - -/obj/item/twohanded/vxtvulhammer/Initialize(mapload) //For the sparks when you begin to charge it - . = ..() - spark_system = new - spark_system.set_up(5, 0, src) - spark_system.attach(src) - set_light_on(FALSE) - -/obj/item/twohanded/vxtvulhammer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK || !wielded) //Doesn't work against ranged or if it's not wielded - final_block_chance = 0 //Please show me how you can block a bullet with an industrial hammer I would LOVE to see it - return ..() - -/obj/item/twohanded/vxtvulhammer/Destroy() //Even though the hammer won't probably be destroyed, Everâ„¢ - QDEL_NULL(spark_system) - return ..() - -/obj/item/twohanded/vxtvulhammer/update_icon() - icon_state = "vxtvul_hammer[wielded]-[supercharged]" - -/obj/item/twohanded/vxtvulhammer/examine(mob/living/carbon/user) - . = ..() - if(supercharged) - . += "Electric sparks are bursting from the blast pads!" - -/obj/item/twohanded/vxtvulhammer/unwield(mob/living/carbon/user) - ..() - if(supercharged) //So you can't one-hand the charged hit - to_chat(user, span_notice("Your hammer loses its power as you adjust your grip.")) - user.visible_message(span_warning("The sparks from [user]'s hammer suddenly stop!")) - supercharge() - if(charging) //So you can't one-hand while charging - to_chat(user, span_notice("You flip the switch off as you adjust your grip.")) - user.visible_message(span_warning("[user] flicks the hammer off!")) - charging = FALSE - -/obj/item/twohanded/vxtvulhammer/attack(mob/living/carbon/human/target, mob/living/carbon/user) //This doesn't consider objects, only people - if (charging) //So you can't attack while charging - to_chat(user, span_notice("You flip the switch off before your attack.")) - user.visible_message(span_warning("[user] flicks the hammer off and raises it!")) - charging = FALSE - return ..() - -/obj/item/twohanded/vxtvulhammer/AltClick(mob/living/carbon/user) - charge_hammer(user) - -/obj/item/twohanded/vxtvulhammer/proc/supercharge() //Proc to handle when it's charged for light + sprite + damage - supercharged = !supercharged - if(supercharged) - set_light_on(TRUE) //Glows when charged - if(!toy) - force = initial(force) + (wielded ? force_wielded : 0) + 12 //12 additional damage for a total of 40 has to be a massively irritating check because of how force_wielded works - armour_penetration = 100 - else - set_light_on(FALSE) - force = initial(force) + (wielded ? force_wielded : 0) - armour_penetration = initial(armour_penetration) - update_icon() - -/obj/item/twohanded/vxtvulhammer/proc/charge_hammer(mob/living/carbon/user) - if(!wielded) - to_chat(user, span_warning("The hammer must be wielded in two hands in order to charge it!")) - return - if(supercharged) - to_chat(user, span_warning("The hammer is already supercharged!")) - else - charging = TRUE - to_chat(user, span_notice("You begin charging the weapon, concentration flowing into it...")) - user.visible_message(span_warning("[user] flicks the hammer on, tilting [user.p_their()] head down as if in thought.")) - spark_system.start() //Generates sparks when you charge - if(!do_mob(user, user, ispreternis(user)? 5 SECONDS : 6 SECONDS)) - if(!charging) //So no duplicate messages - return - to_chat(user, span_notice("You flip the switch off as you lose your focus.")) - user.visible_message(span_warning("[user]'s concentration breaks!")) - charging = FALSE - if(!charging) //No charging for you if you cheat - return //Has to double-check return because attacking or one-handing won't actually proc !do_mob, so the channel will seem to continue despite the message that pops out, but this actually ensures that it won't charge despite attacking or one-handing - to_chat(user, span_notice("You complete charging the weapon.")) - user.visible_message(span_warning("[user] looks up as [user.p_their()] hammer begins to crackle and hum!")) - playsound(loc, 'sound/magic/lightningshock.ogg', 60, TRUE) //Mainly electric crack - playsound(loc, 'sound/effects/magic.ogg', 40, TRUE) //Reverb undertone - supercharge() - charging = FALSE - -/obj/item/twohanded/vxtvulhammer/afterattack(atom/target, mob/living/carbon/user, proximity) //Afterattack to properly be able to smack walls - . = ..() - if(!proximity) - return - if(isfloorturf(target)) //So you don't just lose your supercharge if you miss and wack the floor. No I will NOT let people space with this thing - return - - if(charging) //Needs a special snowflake check if you hit something that isn't a mob - if(ismachinery(target) || isstructure(target) || ismecha(target)) - to_chat(user, span_notice("You flip the switch off after your blow.")) - user.visible_message(span_warning("[user] flicks the hammer off after striking [target]!")) - charging = FALSE - - if(supercharged) - var/turf/target_turf = get_turf(target) //Does the nice effects first so whatever happens to what's about to get clapped doesn't affect it - var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) - K.color = color - playsound(loc, 'sound/effects/powerhammerhit.ogg', 80, FALSE) //Mainly this sound - playsound(loc, 'sound/effects/explosion3.ogg', 20, TRUE) //Bit of a reverb - supercharge() //At start so it doesn't give an unintentional message if you hit yourself - - if(ismachinery(target) && !toy) - var/obj/machinery/machine = target - machine.take_damage(machine.max_integrity * 2) //Should destroy machines in one hit - if(istype(target, /obj/machinery/door)) - for(var/obj/structure/door_assembly/door in target_turf) //Will destroy airlock assembly left behind, but drop the parts - door.take_damage(door.max_integrity * 2) - else - for(var/obj/structure/frame/base in target_turf) //Will destroy machine or computer frame left behind, but drop the parts - base.take_damage(base.max_integrity * 2) - for(var/obj/structure/light_construct/light in target_turf) //Also light frames because why not - light.take_damage(light.max_integrity * 2) - user.visible_message(span_danger("The hammer thunders against the [target.name], demolishing it!")) - - else if(isstructure(target) && !toy) - var/obj/structure/struct = target - struct.take_damage(struct.max_integrity * 2) //Destroy structures in one hit too - if(istype(target, /obj/structure/table)) - for(var/obj/structure/table_frame/platform in target_turf) - platform.take_damage(platform.max_integrity * 2) //Destroys table frames left behind - user.visible_message(span_danger("The hammer thunders against the [target.name], destroying it!")) - - else if(iswallturf(target) && !toy) - var/turf/closed/wall/fort = target - fort.dismantle_wall(1) //Deletes the wall but drop the materials, just like destroying a machine above - user.visible_message(span_danger("The hammer thunders against the [target.name], shattering it!")) - playsound(loc, 'sound/effects/meteorimpact.ogg', 50, TRUE) //Otherwise there's no sound for hitting the wall, since it's just dismantled - - else if(ismecha(target) && !toy) - var/obj/mecha/mech = target - mech.take_damage(mech.max_integrity/3) //A third of its max health is dealt as an untyped damage, in addition to the normal damage of the weapon (which has high AP) - user.visible_message(span_danger("The hammer thunders as it massively dents the plating of the [target.name]!")) - - else if(isliving(target)) - var/atom/throw_target = get_edge_target_turf(target, user.dir) - var/mob/living/victim = target - if(toy) - ADD_TRAIT(victim, TRAIT_IMPACTIMMUNE, "Toy Hammer") - victim.safe_throw_at(throw_target, rand(1,2), 3, callback = CALLBACK(src, PROC_REF(afterimpact), victim)) - else - victim.throw_at(throw_target, 15, 5) //Same distance as maxed out power fist with three extra force - victim.Paralyze(2 SECONDS) - user.visible_message(span_danger("The hammer thunders as it viscerally strikes [target.name]!")) - to_chat(victim, span_userdanger("Agony sears through you as [user]'s blow cracks your body off its feet!")) - victim.emote("scream") - -/obj/item/twohanded/vxtvulhammer/proc/afterimpact(mob/living/victim) - REMOVE_TRAIT(victim, TRAIT_IMPACTIMMUNE, "Toy Hammer") - -/obj/item/twohanded/vxtvulhammer/pirate //Exact same but different text and sprites - icon_state = "vxtvul_hammer_pirate0-0" - name = "pirate Vxtvul Hammer" - desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. This one has been defaced by Syndicate pirates. \ - While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." - -/obj/item/twohanded/vxtvulhammer/pirate/update_icon() - icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" - -/obj/item/twohanded/bigspoon - name = "comically large spoon" - desc = "For when you're only allowed one spoonful of something." - icon = 'yogstation/icons/obj/kitchen.dmi' - mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' - icon_state = "bigspoon" - item_state = "bigspoon0" - lefthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_lefthand.dmi' - righthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_righthand.dmi' - force = 2 //It's a big unwieldy for one hand - force_wielded = 16 //cleaver is 15 and sharp, this at least gets to be on-par with a nullrod - sharpness = SHARP_NONE //issa spoon - armour_penetration = -50 //literally couldn't possibly be a worse weapon for hitting armour - throwforce = 1 //it's terribly weighted, what do you expect? - hitsound = 'sound/items/trayhit1.ogg' - attack_verb = list("scooped", "bopped", "spooned", "wacked") - block_chance = 30 //Only works in melee, but I bet your ass you could raise its handle to deflect a sword - wound_bonus = -10 - bare_wound_bonus = -15 - materials = list(/datum/material/iron=18000) - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK - -/obj/item/twohanded/bigspoon/update_icon() - hitsound = wielded ? 'yogstation/sound/weapons/bat_hit.ogg' : 'sound/items/trayhit1.ogg' //big donk if wielded - item_state = "bigspoon[wielded]" //i don't know why it's item_state rather than icon_state like every other wielded weapon diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 34212d11468c..02c0d27729f0 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -12,7 +12,7 @@ var/open = FALSE var/obj/item/fireaxe/fireaxe var/obj/item/card/id/captains_spare/spareid - var/obj/item/twohanded/fishingrod/collapsible/miningmedic/olreliable //what the fuck? + var/obj/item/fishingrod/collapsible/miningmedic/olreliable //what the fuck? var/alert = TRUE var/axe = TRUE @@ -68,7 +68,7 @@ //Fireaxe cabinet is open or broken, so we can access it's axe slot if(istype(I, /obj/item/fireaxe) && !fireaxe && axe) var/obj/item/fireaxe/F = I - if(F.wielded) + if(HAS_TRAIT(F, TRAIT_WIELDED)) to_chat(user, span_warning("Unwield the [F.name] first.")) return if(!user.transferItemToLoc(F, src)) @@ -85,8 +85,8 @@ to_chat(user, span_caution("You place the [S.name] back in the [name].")) update_icon() return - else if(istype(I, /obj/item/twohanded/fishingrod/collapsible/miningmedic) && !olreliable && !axe) - var/obj/item/twohanded/fishingrod/collapsible/miningmedic/R = I + else if(istype(I, /obj/item/fishingrod/collapsible/miningmedic) && !olreliable && !axe) + var/obj/item/fishingrod/collapsible/miningmedic/R = I if(R.opened) to_chat(user, span_caution("[R.name] won't seem to fit!")) return diff --git a/code/game/objects/structures/mjollnir.dm b/code/game/objects/structures/mjollnir.dm index 98b4707e64bf..45665b1efebd 100644 --- a/code/game/objects/structures/mjollnir.dm +++ b/code/game/objects/structures/mjollnir.dm @@ -16,7 +16,7 @@ to_chat(user, span_notice("You place your hands firmly around the handle of the hammer but feel it resist the pull of a nonmagical host! This will take a while.")) if(do_after(user, pull_time * (user.mind.assigned_role == ROLE_WIZARD || user.mind.special_role == ROLE_WIZARD ? 1 : 2), src)) //if it is a wizard, it takes normal time to_chat(user, span_userdanger("You successfully free Mjolnir from the ground and can feel its power returning once more!")) //if it's crew, it takes twice as long - var/obj/item/twohanded/mjollnir/M = new /obj/item/twohanded/mjollnir + var/obj/item/mjolnir/M = new /obj/item/mjolnir playsound(user, 'sound/magic/lightningbolt.ogg', 50, 1) //keep this at 50 for half volume it's so fucking loud user.put_in_hands(M) //firmly grasp it qdel(src) //byebye diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index d0c665dbd9e6..e63c25cd1f3b 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -187,7 +187,7 @@ GLOBAL_LIST_EMPTY(station_turfs) target.zImpact(A, levels) return TRUE -/turf/proc/handleRCL(obj/item/twohanded/rcl/C, mob/user) +/turf/proc/handleRCL(obj/item/rcl/C, mob/user) if(C.loaded) for(var/obj/structure/cable/LC in src) if(!LC.d1 || !LC.d2) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 9e01314bf471..06b2fe749d1b 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -792,7 +792,7 @@ var/turf/T = get_turf(user) qdel(src) var/datum/action/innate/cult/spear/S = new(user) - var/obj/item/twohanded/cult_spear/rite = new(T) + var/obj/item/cult_spear/rite = new(T) S.Grant(user, rite) rite.spear_act = S if(user.put_in_hands(rite)) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index a2158bd12823..80c4b3a002ba 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -664,59 +664,67 @@ GLOBAL_VAR_INIT(curselimit, 0) to_chat(user, span_warning("\The [src] can only transport items!")) -/obj/item/twohanded/cult_spear +/obj/item/cult_spear name = "blood halberd" desc = "A sickening spear composed entirely of crystallized blood." icon = 'icons/obj/weapons/spears.dmi' icon_state = "bloodspear0" + base_icon_state = "bloodspear" lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' slot_flags = 0 force = 12 - force_wielded = 16 throwforce = 35 throw_speed = 2 armour_penetration = 20 weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) attack_verb = list("attacked", "impaled", "stabbed", "torn", "gored") sharpness = SHARP_POINTY hitsound = 'sound/weapons/bladeslice.ogg' var/datum/action/innate/cult/spear/spear_act -/obj/item/twohanded/cult_spear/Initialize(mapload) +/obj/item/cult_spear/Initialize(mapload) . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 12, \ + force_wielded = 16, \ + icon_wielded = "[base_icon_state]1", \ + wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 2, DAMAGE_HIGH = 5), \ + ) AddComponent(/datum/component/butchering, 100, 90) -/obj/item/twohanded/cult_spear/Destroy() +/obj/item/cult_spear/Destroy() if(spear_act) qdel(spear_act) ..() -/obj/item/twohanded/cult_spear/update_icon() - icon_state = "bloodspear[wielded]" +/obj/item/cult_spear/update_icon() + icon_state = "[base_icon_state]0" -/obj/item/twohanded/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/T = get_turf(hit_atom) - if(isliving(hit_atom)) - var/mob/living/L = hit_atom - if(iscultist(L)) - playsound(src, 'sound/weapons/throwtap.ogg', 50) - if(L.put_in_active_hand(src)) - L.visible_message(span_warning("[L] catches [src] out of the air!")) - else - L.visible_message(span_warning("[src] bounces off of [L], as if repelled by an unseen force!")) - else if(!..()) - if(!L.anti_magic_check()) - if(is_servant_of_ratvar(L)) - L.Paralyze(20) - else - L.Paralyze(10) - break_spear(T) - else - ..() +/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + if(!isliving(hit_atom)) + return ..() + + var/mob/living/L = hit_atom + if(iscultist(L)) + playsound(src, 'sound/weapons/throwtap.ogg', 50) + if(L.put_in_active_hand(src)) + L.visible_message(span_warning("[L] catches [src] out of the air!")) + else + L.visible_message(span_warning("[src] bounces off of [L], as if repelled by an unseen force!")) + return + + . = ..() + if(.) + return + if(!L.anti_magic_check()) + if(is_servant_of_ratvar(L)) + L.Paralyze(20) + else + L.Paralyze(10) + break_spear(get_turf(hit_atom)) -/obj/item/twohanded/cult_spear/proc/break_spear(turf/T) +/obj/item/cult_spear/proc/break_spear(turf/T) if(src) if(!T) T = get_turf(src) @@ -735,7 +743,7 @@ GLOBAL_VAR_INIT(curselimit, 0) button_icon_state = "bloodspear" default_button_position = "6:157,4:-2" - var/obj/item/twohanded/cult_spear/spear + var/obj/item/cult_spear/spear var/cooldown = 0 /datum/action/innate/cult/spear/Grant(mob/user, obj/blood_spear) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index 25f88f80753e..c7568497afc4 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -92,13 +92,13 @@ /datum/spellbook_entry/item/mjolnir name = "Mjolnir" desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." - item_path = /obj/item/twohanded/mjollnir + item_path = /obj/item/mjolnir category = "Offensive" /datum/spellbook_entry/item/singularity_hammer name = "Singularity Hammer" desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." - item_path = /obj/item/twohanded/singularityhammer + item_path = /obj/item/singularityhammer category = "Offensive" /datum/spellbook_entry/item/spellblade diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 31e7d7fa5d59..01b5e24f6f59 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -9,7 +9,7 @@ -/obj/item/twohanded/ctf +/obj/item/ctf_flag name = "banner" icon = 'icons/obj/banners.dmi' icon_state = "banner" @@ -31,16 +31,16 @@ var/obj/effect/ctf/flag_reset/reset var/reset_path = /obj/effect/ctf/flag_reset -/obj/item/twohanded/ctf/Destroy() +/obj/item/ctf_flag/Destroy() QDEL_NULL(reset) return ..() -/obj/item/twohanded/ctf/Initialize(mapload) +/obj/item/ctf_flag/Initialize(mapload) . = ..() if(!reset) reset = new reset_path(get_turf(src)) -/obj/item/twohanded/ctf/process() +/obj/item/ctf_flag/process() if(is_ctf_target(loc)) //don't reset from someone's hands. return PROCESS_KILL if(world.time > reset_cooldown) @@ -52,7 +52,7 @@ STOP_PROCESSING(SSobj, src) //ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/twohanded/ctf/attack_hand(mob/living/user) +/obj/item/ctf_flag/attack_hand(mob/living/user) if(!is_ctf_target(user) && !anyonecanpickup) to_chat(user, "Non players shouldn't be moving the flag!") return @@ -76,7 +76,7 @@ STOP_PROCESSING(SSobj, src) ..() -/obj/item/twohanded/ctf/dropped(mob/user) +/obj/item/ctf_flag/dropped(mob/user) ..() user.anchored = FALSE user.status_flags |= CANPUSH @@ -89,7 +89,7 @@ anchored = TRUE -/obj/item/twohanded/ctf/red +/obj/item/ctf_flag/red name = "red flag" icon_state = "banner-red" item_state = "banner-red" @@ -98,7 +98,7 @@ reset_path = /obj/effect/ctf/flag_reset/red -/obj/item/twohanded/ctf/blue +/obj/item/ctf_flag/blue name = "blue flag" icon_state = "banner-blue" item_state = "banner-blue" @@ -279,8 +279,8 @@ attack_ghost(ghost) /obj/machinery/capture_the_flag/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/twohanded/ctf)) - var/obj/item/twohanded/ctf/flag = I + if(istype(I, /obj/item/ctf_flag)) + var/obj/item/ctf_flag/flag = I if(flag.team != src.team) user.transferItemToLoc(flag, get_turf(flag.reset), TRUE) points++ @@ -297,7 +297,7 @@ if(istype(mob_area, /area/ctf)) to_chat(M, "[team] team wins!") to_chat(M, span_userdanger("Teams have been cleared. Click on the machines to vote to begin another round.")) - for(var/obj/item/twohanded/ctf/W in M) + for(var/obj/item/ctf_flag/W in M) M.dropItemToGround(W) M.dust() for(var/obj/machinery/control_point/control in GLOB.machines) @@ -338,7 +338,7 @@ var/list/ctf_object_typecache = typecacheof(list( /obj/machinery, /obj/effect/ctf, - /obj/item/twohanded/ctf + /obj/item/ctf_flag )) for(var/atm in A) if (isturf(A) || ismob(A) || isarea(A)) diff --git a/code/modules/awaymissions/mission_code/mining.dm b/code/modules/awaymissions/mission_code/mining.dm index 6a74b4522a3a..2be2b71b6922 100644 --- a/code/modules/awaymissions/mission_code/mining.dm +++ b/code/modules/awaymissions/mission_code/mining.dm @@ -163,7 +163,7 @@ name = "Kinetic Crusher Chest" desc = "Contains an assortment of kinetic crusher equipment." respawn_loot = list( - /obj/item/twohanded/kinetic_crusher=1, + /obj/item/kinetic_crusher=1, /obj/item/crusher_trophy/vortex_talisman=1, /obj/item/crusher_trophy/demon_claws=1, /obj/item/crusher_trophy/tail_spike=1, diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 76339bfee319..0f09fe7b60b2 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -516,11 +516,11 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonheavy name = "dungeon heavy" - loot = list(/obj/item/twohanded/singularityhammer = 25, - /obj/item/twohanded/mjollnir = 10, + loot = list(/obj/item/singularityhammer = 25, + /obj/item/mjolnir = 10, /obj/item/fireaxe = 25, /obj/item/organ/brain/alien = 17, - /obj/item/twohanded/dualsaber = 15, + /obj/item/melee/dualsaber = 15, /obj/item/organ/heart/demon = 7, /obj/item/gun/ballistic/automatic/c20r/unrestricted = 16, /obj/item/gun/magic/wand/resurrection/inert = 15, diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 3c1988fbb74b..cb3412b3591f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -1156,7 +1156,7 @@ item_state = "advpa1_hardsuit" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/powerarmor_advanced hardsuit_type = "advancedpa1" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/twohanded/kinetic_crusher, /obj/item/pickaxe, /obj/item/pickaxe/drill/jackhammer, /obj/item/shield/riot/goliath, /obj/item/shield/riot/roman) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/kinetic_crusher, /obj/item/pickaxe, /obj/item/pickaxe/drill/jackhammer, /obj/item/shield/riot/goliath, /obj/item/shield/riot/roman) armor = list(MELEE = 50, BULLET = 10, LASER = 25, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 10, WOUND = 0) slowdown = 0 strip_delay = 180 diff --git a/code/modules/goals/station_goals/bluespace_tap.dm b/code/modules/goals/station_goals/bluespace_tap.dm index e91795e7a065..0caca8c1b0f1 100644 --- a/code/modules/goals/station_goals/bluespace_tap.dm +++ b/code/modules/goals/station_goals/bluespace_tap.dm @@ -98,7 +98,7 @@ /obj/item/gun/ballistic/automatic/l6_saw/toy, /obj/item/gun/ballistic/shotgun/toy, /obj/item/gun/ballistic/shotgun/toy/crossbow, - /obj/item/twohanded/dualsaber/toy, + /obj/item/melee/dualsaber/toy, /obj/machinery/smoke_machine, /obj/item/clothing/head/kitty, /obj/item/coin/antagtoken, diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 64b76dd43476..df7ddf02efe3 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -122,7 +122,7 @@ /obj/item/toy/balloon, /obj/item/toy/gun, /obj/item/toy/sword, - /obj/item/twohanded/vxtvulhammer/toy, + /obj/item/melee/vxtvulhammer/toy, /obj/item/toy/foamblade, /obj/item/toy/prize/ripley, /obj/item/toy/prize/honk, diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index fad185b85682..e9f57c3c4a94 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -1,14 +1,14 @@ /*********************Mining Hammer****************/ -/obj/item/twohanded/kinetic_crusher +/obj/item/kinetic_crusher icon = 'icons/obj/mining.dmi' icon_state = "mining_hammer0" + base_icon_state = "mining_hammer" lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' name = "proto-kinetic crusher" desc = "An early design of the proto-kinetic accelerator, it is little more than a combination of various mining tools cobbled together, forming a high-tech club. \ While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna." force = 0 //Can't be used if not wielded - force_wielded = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times w_class = WEIGHT_CLASS_BULKY obj_flags = UNIQUE_RENAME slot_flags = ITEM_SLOT_BACK @@ -27,34 +27,34 @@ var/charge_time = 15 var/detonation_damage = 50 var/backstab_bonus = 30 + var/projectile_type = /obj/item/projectile/destabilizer -/obj/item/twohanded/kinetic_crusher/update_icon() //Updates the sprite for in-hand and on-mob. - icon_state = "mining_hammer[wielded]" +/obj/item/kinetic_crusher/update_icon() + item_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent return -/obj/item/twohanded/kinetic_crusher/Initialize(mapload) +/obj/item/kinetic_crusher/Initialize(mapload) . = ..() AddComponent(/datum/component/butchering, 60, 110) //technically it's huge and bulky, but this provides an incentive to use it + AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=20) -/obj/item/twohanded/kinetic_crusher/Destroy() +/obj/item/kinetic_crusher/Destroy() QDEL_LIST(trophies) return ..() -/obj/item/twohanded/kinetic_crusher/examine(mob/living/user) +/obj/item/kinetic_crusher/examine(mob/living/user) . = ..() . += span_notice("Mark a large creature with the destabilizing force, then hit them in melee to do [force + detonation_damage] damage.") . += span_notice("Does [force + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force + detonation_damage].") - for(var/t in trophies) - var/obj/item/crusher_trophy/T = t + for(var/obj/item/crusher_trophy/T as anything in trophies) . += span_notice("It has \a [T] attached, which causes [T.effect_desc()].") -/obj/item/twohanded/kinetic_crusher/attackby(obj/item/I, mob/living/user) +/obj/item/kinetic_crusher/attackby(obj/item/I, mob/living/user) if(I.tool_behaviour == TOOL_CROWBAR) if(LAZYLEN(trophies)) to_chat(user, span_notice("You remove [src]'s trophies.")) I.play_tool_sound(src) - for(var/t in trophies) - var/obj/item/crusher_trophy/T = t + for(var/obj/item/crusher_trophy/T as anything in trophies) T.remove_from(src, user) else to_chat(user, span_warning("There are no trophies on [src].")) @@ -64,8 +64,8 @@ else return ..() -/obj/item/twohanded/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) - if(!wielded) +/obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, span_warning("[src] is too heavy to use with one hand!")) return var/datum/status_effect/crusher_damage/C = target.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) @@ -73,25 +73,23 @@ C = target.apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) var/target_health = target.health ..() - for(var/t in trophies) + for(var/obj/item/crusher_trophy/T as anything in trophies) if(!QDELETED(target)) - var/obj/item/crusher_trophy/T = t T.on_melee_hit(target, user) if(!QDELETED(C) && !QDELETED(target)) C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did -/obj/item/twohanded/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams, magmite = FALSE) +/obj/item/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams, magmite = FALSE) . = ..() - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, span_warning("[src] is too heavy to use with one hand!")) - return + return FALSE if(!proximity_flag && charged)//Mark a target, or mine a tile. var/turf/proj_turf = user.loc if(!isturf(proj_turf)) return - var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf) - for(var/t in trophies) - var/obj/item/crusher_trophy/T = t + var/obj/item/projectile/destabilizer/D = new projectile_type(proj_turf) + for(var/obj/item/crusher_trophy/T as anything in trophies) T.on_projectile_fire(D, user) D.preparePixelProjectile(target, user, clickparams) D.firer = user @@ -99,8 +97,8 @@ playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1) D.fire() charged = FALSE - icon_state = "mining_hammer0_uncharged" - addtimer(CALLBACK(src, PROC_REF(Recharge)), charge_time) + icon_state = "[base_icon_state]_uncharged" + addtimer(CALLBACK(src, PROC_REF(recharge)), charge_time) return if(proximity_flag && isliving(target)) var/mob/living/L = target @@ -130,14 +128,10 @@ C.total_damage += detonation_damage L.apply_damage(detonation_damage, BRUTE, blocked = def_check) -/obj/item/twohanded/kinetic_crusher/proc/Recharge(magmite = FALSE) - if(magmite == TRUE) - charged = TRUE - icon_state = "magmite_crusher0" - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) +/obj/item/kinetic_crusher/proc/recharge(magmite = FALSE) if(!charged) charged = TRUE - icon_state = "mining_hammer0" + icon_state = "[base_icon_state]0" playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) //destablizing force @@ -150,7 +144,7 @@ flag = BOMB range = 6 log_override = TRUE - var/obj/item/twohanded/kinetic_crusher/hammer_synced + var/obj/item/kinetic_crusher/hammer_synced /obj/item/projectile/destabilizer/Destroy() hammer_synced = null @@ -170,7 +164,24 @@ var/turf/closed/mineral/M = target_turf new /obj/effect/temp_visual/kinetic_blast(M) M.attempt_drill(firer) - ..() + return ..() + +/obj/item/projectile/destabilizer/mega + icon_state = "pulse0" + var/mine_range = 4 + +/obj/item/projectile/destabilizer/mega/on_hit(atom/target, blocked = FALSE) + var/target_turf = get_turf(target) + if(ismineralturf(target_turf)) + var/turf/closed/mineral/M = target_turf + M.attempt_drill(firer) + if(mine_range) + mine_range-- + range++ + if(range > 0) + return BULLET_ACT_FORCE_PIERCE + return ..() + //trophies /obj/item/crusher_trophy @@ -189,14 +200,13 @@ return "errors" /obj/item/crusher_trophy/attackby(obj/item/A, mob/living/user) - if(istype(A, /obj/item/twohanded/kinetic_crusher)) + if(istype(A, /obj/item/kinetic_crusher)) add_to(A, user) else ..() -/obj/item/crusher_trophy/proc/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user) - for(var/t in H.trophies) - var/obj/item/crusher_trophy/T = t +/obj/item/crusher_trophy/proc/add_to(obj/item/kinetic_crusher/H, mob/living/user) + for(var/obj/item/crusher_trophy/T as anything in H.trophies) if(istype(T, denied_type) || istype(src, T.denied_type)) to_chat(user, span_warning("You can't seem to attach [src] to [H]. Maybe remove a few trophies?")) return FALSE @@ -206,7 +216,7 @@ to_chat(user, span_notice("You attach [src] to [H].")) return TRUE -/obj/item/crusher_trophy/proc/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user) +/obj/item/crusher_trophy/proc/remove_from(obj/item/kinetic_crusher/H, mob/living/user) forceMove(get_turf(H)) H.trophies -= src return TRUE @@ -330,12 +340,12 @@ /obj/item/crusher_trophy/legion_skull/effect_desc() return "a kinetic crusher to recharge [bonus_value*0.1] second\s faster" -/obj/item/crusher_trophy/legion_skull/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user) +/obj/item/crusher_trophy/legion_skull/add_to(obj/item/kinetic_crusher/H, mob/living/user) . = ..() if(.) H.charge_time -= bonus_value -/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user) +/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/kinetic_crusher/H, mob/living/user) . = ..() if(.) H.charge_time += bonus_value @@ -388,19 +398,19 @@ /obj/item/crusher_trophy/demon_claws/effect_desc() return "melee hits to do [bonus_value * 0.2] more damage and heal you for [bonus_value * 0.1], with 5X effect on mark detonation" -/obj/item/crusher_trophy/demon_claws/add_to(obj/item/twohanded/kinetic_crusher/H, mob/living/user) +/obj/item/crusher_trophy/demon_claws/add_to(obj/item/kinetic_crusher/H, mob/living/user) . = ..() if(.) H.force += bonus_value * 0.2 - H.force_wielded += bonus_value * 0.2 H.detonation_damage += bonus_value * 0.8 + AddComponent(/datum/component/two_handed, force_wielded=(20 + bonus_value * 0.2)) -/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user) +/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/kinetic_crusher/H, mob/living/user) . = ..() if(.) H.force -= bonus_value * 0.2 - H.force_wielded -= bonus_value * 0.2 H.detonation_damage -= bonus_value * 0.8 + AddComponent(/datum/component/two_handed, force_wielded=20) /obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user) user.heal_ordered_damage(bonus_value * 0.1, damage_heal_order) @@ -465,66 +475,22 @@ /obj/item/crusher_trophy/malformed_bone/effect_desc() return "mark detonation to have a [bonus_value]% chance to mark nearby targets" -/obj/item/crusher_trophy/malformed_bone/on_mark_detonation(mob/living/target, mob/living/user, obj/item/twohanded/kinetic_crusher/hammer_synced) - if(hammer_synced) - for(var/mob/living/L in oview(2,user))//fuck you and everything around you with a mark - if(prob(bonus_value) && !L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)) - L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK,hammer_synced) - -//Magmite Crusher - -/obj/item/twohanded/kinetic_crusher/mega - icon_state = "magmite_crusher0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - name = "mega proto-kinetic crusher" - desc = "An early design of the proto-kinetic accelerator, it is now a combination of various mining tools infused with magmite, forming a high-tech club, increasing its capacity as a mining tool. \ - It does little to aid any but the most skilled and/or suicidal miners against local fauna." - -/obj/item/twohanded/kinetic_crusher/mega/attack(mob/living/target, mob/living/carbon/user) - if(!wielded) - to_chat(user, span_warning("[src] is too heavy to use with one hand!")) +/obj/item/crusher_trophy/malformed_bone/on_mark_detonation(mob/living/target, mob/living/user, obj/item/kinetic_crusher/hammer_synced) + if(!hammer_synced) return - ..() + for(var/mob/living/L in oview(2,user))//fuck you and everything around you with a mark + if(prob(bonus_value) && !L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)) + L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK, hammer_synced) -/obj/item/twohanded/kinetic_crusher/mega/afterattack(atom/target, mob/living/user, proximity_flag, clickparams) - if(!wielded) - to_chat(user, span_warning("[src] is too heavy to use with one hand!")) - return - if(!proximity_flag && charged) - var/turf/proj_turf = user.loc - if(!isturf(proj_turf)) - return - var/obj/item/projectile/destabilizer/mega/D = new /obj/item/projectile/destabilizer/mega(proj_turf) - D.preparePixelProjectile(target, user, clickparams) - D.firer = user - D.hammer_synced = src - playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1) - D.fire() - icon_state = "magmite_crusher_uncharged" - charged = FALSE - addtimer(CALLBACK(src, PROC_REF(Recharge), TRUE), charge_time) - return - ..() - - -/obj/item/twohanded/kinetic_crusher/mega/update_icon() - icon_state = "magmite_crusher[wielded]" - return +//Magmite Crusher -/obj/item/projectile/destabilizer/mega - name = "destabilizing force" - icon_state = "pulse0" - var/mine_range = 4 +/obj/item/kinetic_crusher/mega + icon_state = "magmite_crusher0" + base_icon_state = "magmite_crusher" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + name = "mega proto-kinetic crusher" + desc = "An early design of the proto-kinetic accelerator, it is now a combination of various mining tools infused with magmite, forming a high-tech club, increasing its capacity as a mining tool. \ + It does little to aid any but the most skilled and/or suicidal miners against local fauna." -/obj/item/projectile/destabilizer/mega/on_hit(atom/target, blocked = FALSE) - var/target_turf = get_turf(target) - if(ismineralturf(target_turf)) - var/turf/closed/mineral/M = target_turf - M.attempt_drill(firer) - if(mine_range) - mine_range-- - range++ - if(range > 0) - return BULLET_ACT_FORCE_PIERCE - ..() + projectile_type = /obj/item/projectile/destabilizer/mega diff --git a/code/modules/mining/equipment/upgrades.dm b/code/modules/mining/equipment/upgrades.dm index d990070d4beb..3ab67d8be93c 100644 --- a/code/modules/mining/equipment/upgrades.dm +++ b/code/modules/mining/equipment/upgrades.dm @@ -67,13 +67,13 @@ user.put_in_hand(newgun) to_chat(user,"Harsh tendrils wrap around the plasma cutter shotgun, merging the parts and cutter to form a mega plasma cutter shotgun.") qdel(src) - if(/obj/item/twohanded/kinetic_crusher) - var/obj/item/twohanded/kinetic_crusher/gun = target + if(/obj/item/kinetic_crusher) + var/obj/item/kinetic_crusher/gun = target for(var/t in gun.trophies) var/obj/item/crusher_trophy/T = t T.remove_from(gun, user) qdel(gun) - var/obj/item/twohanded/kinetic_crusher/mega/newgun = new(get_turf(user)) + var/obj/item/kinetic_crusher/mega/newgun = new(get_turf(user)) user.put_in_hand(newgun) to_chat(user,"Harsh tendrils wrap around the kinetic crusher, merging the parts and cutter to form a mega kinetic crusher.") qdel(src) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 110c1f76c2f3..bd4c59609f58 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1723,15 +1723,14 @@ GLOBAL_LIST_EMPTY(aide_list) /obj/item/melee/spear/bonespear/stalwartpike icon = 'icons/obj/weapons/spears.dmi' icon_state = "stalwart_spear0" + base_icon_state = "stalwart_spear" lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' name = "ancient control rod" //don't want your rare megafauna loot shattering easily max_integrity = 2000 desc = "A mysterious crystaline rod of exceptional length, humming with ancient power. Too unweildy for use in one hand." - wielded_stats = list(SWING_SPEED = 0.8, ENCUMBRANCE = 0.2, ENCUMBRANCE_TIME = 2, REACH = 3, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) w_class = WEIGHT_CLASS_SMALL - var/w_class_on = WEIGHT_CLASS_HUGE slot_flags = ITEM_SLOT_BELT force = 0 throwforce = 0 @@ -1739,41 +1738,43 @@ GLOBAL_LIST_EMPTY(aide_list) materials = list(/datum/material/bluespace = 8000, /datum/material/diamond = 2000, /datum/material/dilithium = 2000) sharpness = SHARP_NONE block_chance = 0 + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + var/w_class_on = WEIGHT_CLASS_HUGE var/fauna_damage_bonus = 0 var/fauna_damage_type = BRUTE - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + +/obj/item/melee/spear/bonespear/stalwartpike/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + icon_wielded = "[base_icon_state]1", \ + wielded_stats = list(SWING_SPEED = 0.8, ENCUMBRANCE = 0.2, ENCUMBRANCE_TIME = 2, REACH = 3, DAMAGE_LOW = 0, DAMAGE_HIGH = 0), \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) /obj/item/melee/spear/bonespear/stalwartpike/update_icon() . = ..() - if(wielded) - icon_state = "stalwart_spear1" - else - icon_state = "stalwart_spear0" SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) -/obj/item/melee/spear/bonespear/stalwartpike/wield(mob/living/carbon/M) - . = ..() - if(wielded) - playsound(src, 'sound/magic/summonitems_generic.ogg', 50, 1) - sharpness = SHARP_POINTY - w_class = w_class_on - block_chance = 25 - force = 8 - fauna_damage_bonus = 52 - -/obj/item/melee/spear/bonespear/stalwartpike/unwield(mob/living/carbon/M) - if(wielded) - playsound(src, 'sound/magic/teleport_diss.ogg', 50, 1) - sharpness = initial(sharpness) - w_class = initial(w_class) - force = initial(force) - block_chance = initial(block_chance) - fauna_damage_bonus = initial(fauna_damage_bonus) - . = ..() +/obj/item/melee/spear/bonespear/stalwartpike/proc/on_wield(atom/source, mob/living/carbon/M) + playsound(src, 'sound/magic/summonitems_generic.ogg', 50, 1) + sharpness = SHARP_POINTY + w_class = w_class_on + block_chance = 25 + force = 8 + fauna_damage_bonus = 52 + +/obj/item/melee/spear/bonespear/stalwartpike/proc/on_unwield(atom/source, mob/living/carbon/M) + playsound(src, 'sound/magic/teleport_diss.ogg', 50, 1) + sharpness = initial(sharpness) + w_class = initial(w_class) + force = initial(force) + block_chance = initial(block_chance) + fauna_damage_bonus = initial(fauna_damage_bonus) /obj/item/melee/spear/bonespear/stalwartpike/afterattack(atom/target, mob/user, proximity) . = ..() - if(!proximity || !wielded) + if(!proximity || !HAS_TRAIT(src, TRAIT_WIELDED)) return if(isliving(target)) var/mob/living/L = target diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 4727e1a51b3b..2b7012fa1818 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -19,7 +19,7 @@ var/icon_deny = "mining-deny" var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces. new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750, VENDING_WEAPON), - new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/kinetic_crusher, 750, VENDING_WEAPON), + new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/kinetic_crusher, 750, VENDING_WEAPON), new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800, VENDING_WEAPON), new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500, VENDING_WEAPON), new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000, VENDING_WEAPON), @@ -224,7 +224,7 @@ new /obj/item/stack/marker_beacon/thirty(drop_location) if("Crusher Kit") new /obj/item/extinguisher/mini(drop_location) - new /obj/item/twohanded/kinetic_crusher(drop_location) + new /obj/item/kinetic_crusher(drop_location) if("Mining Conscription Kit") new /obj/item/storage/backpack/duffelbag/mining_conscript(drop_location) if("Mini Plasma Cutter Kit") @@ -368,7 +368,7 @@ new /obj/item/borg/upgrade/modkit/minebot_passthrough(drop_location) if("Crusher Kit") new /obj/item/extinguisher/mini(drop_location) - new /obj/item/twohanded/kinetic_crusher(drop_location) + new /obj/item/kinetic_crusher(drop_location) if("Advanced Scanner") new /obj/item/t_scanner/adv_mining_scanner(drop_location) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 340f9918a803..f613aaeb7f47 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -29,16 +29,12 @@ AddComponent(/datum/component/footstep, 1, 2) /mob/living/carbon/swap_hand(held_index) + . = ..() + if(!.) + return if(!held_index) held_index = (active_hand_index % held_items.len)+1 - var/obj/item/item_in_hand = src.get_active_held_item() - if(item_in_hand) //this segment checks if the item in your hand is twohanded. - var/obj/item/twohanded/TH = item_in_hand - if(istype(TH)) - if(TH.wielded == 1) - to_chat(usr, span_warning("Your other hand is too busy holding [TH].")) - return var/oindex = active_hand_index active_hand_index = held_index if(hud_used) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 7e56049b2801..d692aafcc148 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -519,17 +519,13 @@ mode() /mob/living/simple_animal/swap_hand(hand_index) + . = ..() + if(!.) + return if(!dextrous) return ..() if(!hand_index) hand_index = (active_hand_index % held_items.len)+1 - var/obj/item/held_item = get_active_held_item() - if(held_item) - if(istype(held_item, /obj/item/twohanded)) - var/obj/item/twohanded/T = held_item - if(T.wielded == 1) - to_chat(usr, span_warning("Your other hand is too busy holding [T].")) - return var/oindex = active_hand_index active_hand_index = hand_index if(hud_used) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 12c2fda13881..a8cdabfe9135 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -973,7 +973,18 @@ return FALSE /mob/proc/swap_hand() - return + SHOULD_NOT_OVERRIDE(TRUE) // Override perform_hand_swap instead + + var/obj/item/held_item = get_active_held_item() + if(SEND_SIGNAL(src, COMSIG_MOB_SWAPPING_HANDS, held_item) & COMPONENT_BLOCK_SWAP) + to_chat(src, span_warning("Your other hand is too busy holding [held_item].")) + return FALSE + + var/result = perform_hand_swap(held_index) + if (result) + SEND_SIGNAL(src, COMSIG_MOB_SWAP_HANDS) + + return result /mob/proc/activate_hand(selhand) return diff --git a/code/modules/pool/components/swimming.dm b/code/modules/pool/components/swimming.dm index 849b7d2e16e8..220eb5b66fe5 100644 --- a/code/modules/pool/components/swimming.dm +++ b/code/modules/pool/components/swimming.dm @@ -76,7 +76,7 @@ var/mob/living/L = parent var/floating = FALSE var/obj/item/pool/helditem = L.get_active_held_item() - if(istype(helditem) && helditem.wielded) + if(istype(helditem) && HAS_TRAIT(helditem, TRAIT_WIELDED)) bob_tick ++ animate(L, time=0.95 SECONDS, pixel_y = (L.pixel_y == bob_height_max) ? bob_height_min : bob_height_max) floating = TRUE @@ -96,7 +96,7 @@ /datum/component/swimming/proc/is_drowning(mob/living/victim) var/obj/item/pool/helditem = victim.get_active_held_item() - if(istype(helditem) && helditem.wielded) + if(istype(helditem) && HAS_TRAIT(helditem, TRAIT_WIELDED)) return if(iscarbon(victim)) var/mob/living/carbon/C = victim diff --git a/code/modules/pool/components/swimming_felinid.dm b/code/modules/pool/components/swimming_felinid.dm index 6092c82100bb..339cebb32f4b 100644 --- a/code/modules/pool/components/swimming_felinid.dm +++ b/code/modules/pool/components/swimming_felinid.dm @@ -7,7 +7,7 @@ ..() var/mob/living/L = parent var/obj/item/pool/helditem = L.get_active_held_item() - if(istype(helditem) && helditem.wielded) + if(istype(helditem) && HAS_TRAIT(helditem, TRAIT_WIELDED)) return switch(rand(1, 100)) if(1 to 4) diff --git a/code/modules/pool/pool_items.dm b/code/modules/pool/pool_items.dm index 99c310f4c208..036dc5778622 100644 --- a/code/modules/pool/pool_items.dm +++ b/code/modules/pool/pool_items.dm @@ -4,15 +4,17 @@ righthand_file = 'icons/mob/inhands/items_righthand.dmi' force = 5 damtype = STAMINA - wieldsound = 'sound/weapons/tap.ogg' - unwieldsound = 'sound/weapons/tap.ogg' w_class = WEIGHT_CLASS_BULKY attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") /obj/item/pool/Initialize(mapload) . = ..() //Pick a random color - AddComponent(/datum/component/two_handed, require_twohands = TRUE) + AddComponent(/datum/component/two_handed, \ + wieldsound = 'sound/weapons/tap.ogg', \ + unwieldsound = 'sound/weapons/tap.ogg', \ + require_twohands = TRUE, \ + ) color = pick(COLOR_YELLOW, COLOR_LIME, COLOR_RED, COLOR_BLUE_LIGHT, COLOR_CYAN, COLOR_MAGENTA) /obj/item/pool/rubber_ring @@ -44,7 +46,7 @@ /obj/item/pool/pool_noodle/attack(mob/target, mob/living/carbon/human/user) . = ..() - if(wielded && prob(50)) + if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(50)) INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) /obj/item/pool/pool_noodle/proc/jedi_spin(mob/living/user) //rip complex code, but this fucked up blocking diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index fa10bbc0f116..202b0029dafb 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -8,15 +8,15 @@ school = SCHOOL_CONJURATION invocation_type = INVOCATION_NONE - item_type = /obj/item/twohanded/pitchfork/demonic + item_type = /obj/item/pitchfork/demonic cooldown_time = 15 SECONDS spell_requirements = NONE /datum/action/cooldown/spell/conjure_item/summon_pitchfork/greater - item_type = /obj/item/twohanded/pitchfork/demonic/greater + item_type = /obj/item/pitchfork/demonic/greater /datum/action/cooldown/spell/conjure_item/summon_pitchfork/ascended - item_type = /obj/item/twohanded/pitchfork/demonic/ascended + item_type = /obj/item/pitchfork/demonic/ascended /datum/action/cooldown/spell/conjure_item/violin name = "Summon golden violin" diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm index 6af81b7afd9f..abdb3819d3af 100644 --- a/code/modules/surgery/advanced/revival.dm +++ b/code/modules/surgery/advanced/revival.dm @@ -38,7 +38,7 @@ . = TRUE if(istype(tool, /obj/item/shockpaddles)) var/obj/item/shockpaddles/S = tool - if((S.req_defib && !S.defib.powered) || !S.wielded || S.cooldown || S.busy) + if((S.req_defib && !S.defib.powered) || !HAS_TRAIT(S, TRAIT_WIELDED) || S.cooldown || S.busy) to_chat(user, span_warning("You need to wield both paddles, and [S.defib] must be powered!")) return FALSE if(istype(tool, /obj/item/melee/baton)) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 1f140af763b9..4149d42633d5 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -403,7 +403,7 @@ /obj/item/organ/cyberimp/arm/syndie_hammer name = "Vxtvul Hammer implant" desc = "A folded Vxtvul Hammer designed to be incorporated into preterni chassis. Surgery can permit it to fit in other organic bodies." - contents = newlist(/obj/item/twohanded/vxtvulhammer) + contents = newlist(/obj/item/melee/vxtvulhammer) syndicate_implant = TRUE /obj/item/organ/cyberimp/arm/nt_mantis diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index ab8c93948007..cae998125d80 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -407,7 +407,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Double-Bladed Energy Sword" desc = "The double-bladed energy sword does slightly more damage than a standard energy sword and will deflect \ all energy projectiles, but requires two hands to wield." - item = /obj/item/twohanded/dualsaber + item = /obj/item/melee/dualsaber player_minimum = 25 cost = 16 include_modes = list(/datum/game_mode/nuclear) // yogs: infiltration @@ -434,7 +434,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/dangerous/bostaff name = "Bo Staff" desc = "A wielded wooden staff that can be used to incapacitate opponents if intending to disarm." - item = /obj/item/twohanded/bostaff + item = /obj/item/melee/bostaff cost = 8 exclude_modes = list(/datum/game_mode/infiltration) // yogs: infiltration @@ -529,7 +529,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) This weapon must be wielded in two hands to be used effectively, but possesses high armor penetration. \ In addition, the user can charge the hammer to enable a thunderous blow that will decimate construction in a single hit, \ do sizeable damage to mechs, or shatter people off of their feet. The battery is charged by the user's concentration." - item = /obj/item/twohanded/vxtvulhammer + item = /obj/item/melee/vxtvulhammer cost = 8 include_modes = list(/datum/game_mode/nuclear) //Only traitor preterni can buy the implant version diff --git a/code/modules/vending/dinnerware.dm b/code/modules/vending/dinnerware.dm index f49fa2166aee..a4e3a4f56023 100644 --- a/code/modules/vending/dinnerware.dm +++ b/code/modules/vending/dinnerware.dm @@ -20,7 +20,7 @@ /obj/item/plate = 10) contraband = list(/obj/item/kitchen/knife/butcher = 2, /obj/item/melee/fryingpan = 2, // Yogs -- Pan - /obj/item/twohanded/bigspoon = 2, // Yogs -- Big spoon + /obj/item/bigspoon = 2, // Yogs -- Big spoon ) refill_canister = /obj/item/vending_refill/dinnerware default_price = 5 diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 67342c251aee..141df9a93cae 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -11,7 +11,7 @@ /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, /obj/item/toy/sword = 10, - /obj/item/twohanded/vxtvulhammer/toy = 7, + /obj/item/melee/vxtvulhammer/toy = 7, /obj/item/ammo_box/foambox = 20, /obj/item/toy/foamblade = 10, /obj/item/toy/syndicateballoon = 10, @@ -22,7 +22,7 @@ /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5, + /obj/item/melee/dualsaber/toy = 5, /obj/item/toy/cards/deck/syndicate = 10) //Gambling and it hurts, making it a +18 item armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index cac9a3facb12..02a44878dbf2 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -11,7 +11,7 @@ /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, /obj/item/toy/sword = 10, - /obj/item/twohanded/vxtvulhammer/toy = 7, + /obj/item/melee/vxtvulhammer/toy = 7, /obj/item/ammo_box/foambox = 20, /obj/item/toy/foamblade = 10, /obj/item/toy/foamblade/baseball = 10, @@ -27,7 +27,7 @@ /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5) + /obj/item/melee/dualsaber/toy = 5) armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index f5c8325c1721b4f8f32c0fda5b66904db75f39b6..3878383b74f38a0540ccf93a0ec5e53335274299 100644 GIT binary patch delta 29733 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�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 delta 29407 zcmZ^~1yodFyZ60mkOq}z2*IF1N@7q_0YQ=OP8pESJv7paG?F49NJ~nCNOw0#cf%0# zZk}__`=0f!^{vH%VfTIASN(tYo~~l-;Gftr55T9M@3fp{%$-a>SUWgdBkTddJ@r?- zGGdySD7e3~m~5;-tWCK*TAGAI=Ptv5iInj6qk%FTr?{8WpJVMCeM9UbliSIs-z#8! zYmyGTd+}EMttC~0rtsz!%BHqVk||c_$MAUhhFPSG-RRq1mG7}*Cc}Sv;mj{8Z1N3C ztL}mD-^s6Sj-PX>i+-K)Sl?bfW7S}ONj)17jsLoBj+mQttkUgj);(0H+q0={vCdI} zRdy>tkUS|3k%_S9F)(uRIyjNFtpEGUK_h^8gz@VzLviJ?^^5e^4}ZDr>vO4Vf05PR z7MMpQ$4s{PGZ`z zpdB10dd2BFItw3#w;Pbs(zRIm2wmVQ7LG3vJT@FV6?m6K! z_{_BKDt_a&eQ#&fL8Pgl z68)C6?m$YtqSB#A8CEd|p}|FRK#siQEtkY0o~?dgtd?c_DdJ3ERnoAB;RYQXyZ43R#xO+S zI5K2vlks;3W%>YZCn^!)GQ9x|N>_YVm+ksB_D70LmSdWyxb}`j;->=L?Ln!xfsug~ z2hvuu{hew7Ggt?{@BHwxsMW_l)mDpYu8nIBr`ObG5`3Io2`V?ma{C5q-CLPLHxfQl z!yuQzAbreu7#jTjWqsH`+eU`RVefP!oh?_j-O2=pDyL^AE3x8|LP#oI)IPtLDV?al zxF3V~l$@2d_%R?ORhCSl9C>lgCthwrTyDg$T4FStzO`iXGf8{vvL`ud?WXUVp8dfD z9u29!z=c|D9V+sV{#|nqTQVeDT50^g7?zy)6olR0U^#rOVCOO=R?SS)Oo3J@+E$~zi zVAOQe1)cR}%~KfK>;Ltsabb3QQbn}4bA=6_@4fty93yBu=75DqBD2=_HS-t2B;4ae z`QoqDfgh9YdQPE3^RsU=Gz&!KlHX$>!!>;a^qh!*D^wl$+$t(bf>nl`a%6~}(L~24 z*w}e*VW^NNR2}!hgNcrR*CABOzbgJB^?rY{K7{3_+&q2JdqXmdIuZ8hFC%`dd}>f+ z7%bw%Y|o-CWa3=FE`{*XB_sW%-r~*MaD%c9Xl#T}%opj`5!Jcw@PEtArF)(F%uiN@ z=TDhnc#Q`o_^WX^p71viQ?>2!kIReEZ|`wJrpIP}ZZ#gGI{*#&4SJ3XklHtX7 zLnaDL5sidi$pPO`5t9Nhk_9_}rZae&l<~&kG7+onNdMIHYY{O>e5TxhTVzHj$@B zhYL`?e>qQ4m}J&-KXD_*RYX}uMcAGASZa6OsoLjmV(}*eK1=bi(+AmBD*Tx9Uea+3 zm#rWvJOh2d;fI6n82NQo^+E_NVshZLh^NEv-dau5ko$=GzpNq_s_5Y3W@w=9+Z*?S zJJJj?&-Kxe3s+z6){!C)4gl#8lF_z6-g4&gy@2=Gt^$Nc9!{YY*{Wmq6DB3U=7T7D zpPTpym1-%@YioJZ1$fTqC;Fa|a9i{Sfr)y%&q(@GAB(|5C%i)+vQi=}-C$%$7_n0& zC@jAJUbxWxXH#-%#@K zDNVv3^9g^gO`Wvrb$Ik%f%84d8(aLMoNMk88)~7Z{zyX zB$?m6@-E+%nK>uQ(MuNOiYM*eE642&j&Va(cMnu`r7n6x*t|t0W*0thf2?~Y;czLg zdcwCKafkf@`^ZGi+o=&ID)+Nq+8|OntT-x_#Wayi`3L9s?=OYGe8DDC_!Sej?`cCu ziK^iB$IQ$bw~Y4(MTi!cnc5#*x1;K ziDaiVw#uQR!%X`2`T0ia@NF5HlP zdA;^|h-jsX?qH)345_xhJf-364CF0j5H&rJF)Q9xdK%i>amA)s;xsKZ<3r_;S8{QB z;Xy_0<9W$pz-;*Y)5quf{*DK7>@!yx+Gx_T`R6nLO6=OKnE!U2xRsc*6#aX*Z22uc zp_|bTGNYCx+ZRepk+u~IJW#QVb&TpLLQJU)CZ%?oYkjH)Djvrz{A5%4z&4Ip=#PHg z6t|g@Y$@61eUlIn{BSPy&+J7wp1oUv?5yNMQc~uO{QP6ObCeKGv`@Jl24K3K+S${cMp#w zGk92dIH+7{x|c*yv)6E`s;9^K8$21+>(R-JLUUlLi3 zFR6`+_#c#h=t;XW10P*%iaFy%;kQ>`lxOw=>hauJ-)VJ4yS`Ct{H3H|>m$)4*a&D? zNVN$>SfojYUns^Wnu%8r5iY#q0TwK|)R#qhhd`pghCg=sF4QO`F2yPWN3?#stp=)c zk2#x!(@^yLnAlVBk717{OB(fLXblkwAm+rQu0JMVIN%>OPh3JK3g*Cd{=MRdqR2QE zaN%bL5Hg80#tM7qqjwqr1or0#&GXvFk*fjy6eN*)wohSuBpQN8%{_Qqm(0QD($q`e zL0a3(P_1D*76y}Ui={9b-0T4qMqsVSk7lE$FVB}({SJbeli z&)A;X>UAO*RheXW|dll-O(vV2ShEM z6)xwy*L+6xv*pmtMWwdAOgAD-l$>wZ{l_wKWYDHoks<&Cj1*K37UP_qEDLP)46TWX0wzSL|y(3C$(d_e}z+S^+oek6AbEb zl58=Jwt7jYUyOCh(T_II$w&Ab&l)v)LBRs*ZjpN}b`iHr(21rZl1=c(|^Drc4}PPXBbN9 zCqvr=RmzaTg138=yj@P7uxJ!EeWZNoa1sLB-o0d&OC=x3+Av?PUD1QVeZM0PW@rJZ zmgc?rK6Z>@q`D`j{yxe?r6W#~5|{V%Bu3IGs@M5R+FmvrmWdPY1J-hi+r)BJ?aDD5_POjhni%%#DBWa!Cdb&^Hkgl)~vB$O{Wg;th;EG&_1)G{=y~gZWI)1@Hb8y53QFSeM7{4&X?OXHb9KXgd^1`JeF* z=Iqfm%+$u17LSgZ{&_wVIHdOU=&1nAWZ3xUWQ_FsG>BmooV3!TmngvYisgOOBTjWh z1!2I6nDHJL4Q_#1lFqOtt^${jg=CwY^lyWir>y!9`#inLXdXZ9{YyihLLBP+mj5T& z8Ad0T`%!a5hXOGFqkw08q**ESXHs6r+RK)OwD4pl#R{b6kS47C& z()^gM{>;FQn3kU43V4X#QMl-rRGd*gr@-VAWP{`Ehu5zScUGC|PuiX3G!q3L%-J{1 z^bZr&!P49Gi-iSgw+ZUD1>RDcXyX2RqYJmg^E?4D$g|}@!pB2R#TsL+20l5bd zw6wJKk$g%ZF_H9i9{Qh+jV)0a!MK*EO$MAl8RPS38@y3%wM&#vJ%|~ydq89~bd_~1 zz0n56SD$aicOJQdPa>Y1isj76L9@_Ed;#XS*#~xSKfe@``CYVQDfPPbDPb1*D+|${ zOz_u+!`-?*X6KqX>`YPUCeShd1N8h%*n?48znsadY&KZJ*+V=JJI%vXSXQ=C z*w3}1SOhXD0tFnlxBF){(2607nua6l8UUcdt-ndu8XzoA*{be#j-xBw*AcYsbbFPv zu`vdV?$dv<-PNK_=}bQUOwIw&EsU8>Lr4WUwSI#myy)m?I_Ls6>(g~qB;Ub~ovUpp z{k?Coh6dfr#LKW?XXZXdodbULOS}=VEwdgJ*N=>0 zUEk8itv{K@+Q}mQ`)A)_GS=w*t1xzO=cuo!5mggyc47!#(uAzTGI4H)A%vLi3X+f{ z#IVPG08?6J`7WDRi5^-Bj>bh?kkm*^ zl?=$Rlp_6Sm}lpPGT1}Yot?rWVrjPC)bI1j9$R`JMf%Zvq?z|N9dtAYwJCw7f1Rm0 z>E(gS;j4~@SLe^ZN2PbP?+)B-45ZxeU8ZmqG8*&tIi~Tv#{Dx7{)#W_?aEj~6bJgI z^daqtNY{jdL!1_|#8|wIK(C)4%|50l12}`T68B{pwJssK3bzpbpqmQ;BYyz0nU^03V>REu80w zfb;Q=+|sjlywn$lys(a07AXuFAIl^3(-wCr43lgC3MM=2w*O`p2DFeC`?lSzbSQ zM=y~Uwv?=g?S9%ZxSS6lq0j0k43Q(0Ni!AbvwKqLW5q8g?_uF9Vj^ zL?9`^NGS)!P7_x4-!1L1cp%01nu|J&as3+8bpD|k^K((HR5v8K-x8(7hsWuY{$(_AKgs#*UjjKhp;j$C z6XmbbBp033${HK z8#*QJ3>gX>myM7V7>S=T4>S(#8ZJS+cLB>4#T>?eP0MtA!o?2}4&PQ8^MGB2#g zt7jEqRHFzRBYtW=!56Co8$^zp9~E`pBa%0tCH|KRXXeC0wsuHX6~O;OhOxJ3bKX{z zM8<_vne_f}(JFJWDc>9JPNnzQGbaH~eL(sE_8T~-R!={1na7rfecSaixsXl`|4%3! zb@?7*Q{AySI61T2-w$BjhyLQe;T>JTK`@fl%XQh1ZV+=gDym#gf}iQ|6Kh_JN|@v zZ8bRi$JzgcF=YbyyO`h{=Dg`@3t(*Ebpf-=su{Ar`)G|r&oA^*1U z8&)x9Pzbht7Eb|dZGLZMTFzfb8cA9CCd+PU{^gck!~{|fhl=%CpHX>(I<8qSVL?si z8IhF!3Gp#Z1c;1`Y^lAP5kEg&kJ^i(SL+QdktF6UDU%}H_ksQMN9bdrCkq-UV1Zxt z(@!?=_qTaCO_jL>TJHZ%j!r##7`S66$UHp%B$Em*lnK9yzHPH0qeR`r5Vy-rh4$gNMsvl}2f#O#S_=`TzU&eK!j%qZ? zucZ{in}r?G2JsjrwR(LS{Yq_6B5wWT(k%*5PmNraJ(ie_0r~yJe6K_xphpa-f?nrD ze+10~CxwRgCJ~nM?;KI-d%)(CtMM#tsUPUchxPj%4~w7tK=duNbvXDRC`?Q;aauNi zb-^`n457sh^bu~dOaq>pOS?}zbJWgxbaGiig=M2osbqQfIhuoP zu5r#cUb9Shx;2v0_-L!4yT0n%Ajm>NX91UIFD{6MNBtYiHxPPNU}~&Tqn%z=YKjCa zw&|Y;3ATM5#S#(ZAvG+ zdd8K!q$8X$wx#Q_%CCbHoZN9;fJ#Ig#zjGVNO#|*D$^$SP#$2#LPoixC;QV3&ZKS_VtGxfkyDu{`xxyUzYnj8aQV%j|qwF#@3qW z7WRlxOARpO#VVBr@1Y92!-uVQ8p;E=>CZUi^A}x$7@-LT=2C#c^LqOd`g)JC4Fp#kOXLiH6N5mVe`EG~d0~j?QL|hNK$dLSHa$5_ zu5Kp+NN!;O0w#-EgKdSM?LU^CbhF{+2 z<7&xhbKc=R$3%iWhV*@$?GMuvapy}yS^_<|sj+aepU_@S*ER5ZuI$seD^W8iMh78y zK$%7_OPX7gH93}iPlEVtV1E>i0B%P#jB1YK(>1k+{8P8xc*55^)@^x{-0O2+`?tR& zBoN9Ojck8Nof<~IDc9#cjI!E2-a7~z^)vC2%=^%Ltj+XJ+R&yNN`)Cvt;n{h1Kb&N zPoE08Na;uBFKcEGwNhnUB$%GrUxHYU+fn+#Z_3v`%+_5dCz572K==CiyyZ215-sC} zFUu*D5DYmO@v+>5Tx>i@Yf#nvJA1i@B>c)Po2U z4hy+uY(oQb-R;90W<~TG#t1ZdW-&AL)vUsFD5AH@^>p76!SUV^j2G) zo=TJK_63m9UI`lV4Zv@0a=Lpt%W&^Sc(uY2kX7GvGM)wI;!W$Dxqq12kTlKwY!fOr;AR>9kf0^eX2{N1qWs|?Jher+n5=&Qi_u}v;xO0y;G&7+n zJE}!NKt^dP1uxq_9HYt3kj&PqA9v&l*5TnFP2ysEt$vpiaMNG0CSmZGEfpZOa$++h zkOAX1tO-jHZunutG+^VZ!smAFsz`0jLUMdvhXNK14I3lUnhk*gRUD^!^U`X{3-M`~B&a(0$)I z{{~Z`Te!Z0_X86u8G;~(om`ma;U&AcNFe7orawI5VTGglfd+JIeARq&R}P0A$xYvP zo*j{{G8kt$^X7ar26Ea!pqHm|yD&(hHzb~D!>UR2O$==4&7>mYYXCIR=LSK}2@;9ANKY9rr;rE@LxfC2+>V9XJ)h`#!yZzqR8Zyr&d!nH| zI(ViV=MgtYOL3z*7VrZx(+2T^gKk8l?xhP!|J0Yet&oJ+^(Ia?H)0UiF2`%ayEOQU z2vhR^AeWC2CRr372 zo{fw!={?G8=TQ8!l=Hqr$)5-KUAlq5bqvlhY=orH2tuuNWyj5qeK4XvHSsx9i5$BCke!`I21RE9_ zu6M;E7z8K)houo3B07E|6>(9`qg8TwWYTBIU!L&KgTd!s?F_G0*r_S|kzL1eUA|gj z?!IJf&r)?-f|ZLu0P~CQdT(Gb`}wX&t7;3i@^FdJfa1jBMz|^eX29_;W}&BFOpm-H zJWU%)W`+iNUX?&{Hwp(Bqlt->H0~Z{4DNL9n_UX5+h=AN9jA(pFxD|?b3){aQvP@s z-rV&K)L50inijzNYlN%XYs!?{AJr%U;r*Bd1D)<5_)~%gNqr1J6i0LadN6&zi-Yd# z5Hjy$4RiHs@W0dbuFS$PIFaXZg0;#6gnJYga%Sj`a&N~`DUXw4?ukIs4&?y%`LntP zQ4?wDAa1>Q& zok&1Rspm#B@nUy-wGR2XeObA^r<~aYkSa}0m zi5R)7^Lt@`KsFw$sI3=kz@UsgKFUJObxx! z)WyLJ*Xxr7p0NZQtO1$EdKy&-f-t|>>%n7!_v37cv2)U~*nfUAjU?-foWoUp>2te# z@dEyO1+bc1JcdHnY^{dLr$Y{$c_0n3C(aNe{O9YT&K2_BU84F>Z@9@JYiIRH9@MHcws-S`NB8~U3H zS)jmkpZ~#1Hvaz&p`g?LH*o_03pqgy>bVsO4cRS&VtRV}Ft+cl6gawH%YR*{m=kkp;W*0}8jpa#L#m!!lL z4q=40-HDuT>83o)rOYiu_&REQ59NkE)p}56OS+Ezph6OFeS*%K^j-|tfarqAz{%ds zgxA%MFExW9;QF>_c|`It{UY|=c^~Uv^KY-usYz~2K=fm|V;1vcE(yPX6`N(C>3(~( zgGQ0Writ=uA_3dU=BrF=~0azI_CcwJ6GOE<^;@!{K?nh3sq^- zKGHYuHtsx|P?P-Le3}r~KDYNv!;plHhZ70UpO7p=pGM2#mg(3c1g%%0#H<;J+V81??;QBDmWjgFhffgNG(hdmibL@2J8lQ1$VOHTNe z7#e8_#OQc!8w&Of!|V9-Z!FV~TVUzGf8;gPP>M?iQ$~5U^x+zdUcS$bGUO_ZB_ug* z@uwF%-4pqxWU%i#&!(&wo5hQFUD^I*#XIA`UM9xd*W%K9#W)I{$XpFe=OBb-3zWsiM zEAs;hP0c0BkUS;0wv46vZ2fVe>E8V8(@yT|E-yy<>Epv)tZ=BHpQo!-hHs%a;6DBv z)3JLW6lv%e&#S6X(4Yrvf%pY{3Wi0=CQu97u9r9=Y?3>PL$vA7Mqq7-lg{2439VNEifs~rv+-`mBsK%SP3KV z0ytyIWbz_6QkMm2bK<`(D}pI7@}RzVWo2ce-m6O4oCfNw&pf~? zO82WNtK+|~6%=j%%n zl9tBPhuN)Bu|jlY@}f68r8iYpcO#CQ*thMZ^j(SMdR;O0#UVLiw~0{)@t2NbxttIl zxnAy$-Pu#kwo)-y8oA!IZkN4X+qW0gC;ARHDnt~nhbvF#k~;BNb@TdNo6Gypm!^!D zOXOV-dqpqAAcuH5Z=Ydu2<>}r7RpiNV?C0-vBzTduV8T#@D zK;|u&0NzbzmnIynd!efq55k{hRIJ`pjmFY`G~KBw#abM>`lSeY{~HYlQz7kV(`CAix@>Fax_80 zOyq_F%;mEYLSSlPKr(=f8<_(&b*;IqAO`=Dqm2sdX1RXgIMN$jBdDsKUWNMu*DSWv!5le)OiY;>x z6rV_g+|40QWJ;zCh$J$en7(>(Pj#AD3gV=q$JIAtGf!SDetP=b8_v50G;)$Rb-S%( z>?_bdQ{pbu%mSodL5|+@EJpB*04R71%3%U?ci^+%i$D!~pf}m@%OlcJbQe81nG^xZ z>-R?NEYJFo>mmUT&&x3Z@0>P+@Q1RSkc1C9jAy-hUHbi8-nay4^A-0>HUxa(@an(9 z^6&d}!ft~Sa_OWS?iZ-{PGfI@COj&RK>o+FCKgDC&*gXGzdCQjb<^H~QyHN*P%a3b zV5lR?=ZIaXU(4zgg@hK8!0@yq>phLgl@)i9&&asU@SNCd(YE;{XqPSQqZK<4)TF* z@dC(Gzoi#+o^*gjNuNU-)e1X{BIAodFXFsxJ#^ZrHvXunbumFZ69}u?+BHtue=iLj=;2$ z>BD!BpWLRSUe_1qp_c(AQAXskSLFBfBKV5;r|H3uAkW=8v9hXuSw(YTAWM=Xd&qpE z!itfKuM^g3%@&&YFFNkIZjeh#dHkL3*x^_2wy>B+qoJ$=Wt$&GJoc1#)3HnveW4=e zIku-+c&(`y%u+?u;ut?{X|7gFjGCFF5>0?VWIf#Xxm65Z89x;g86Ol{-cyB6`OJP5 z2>x+n;r;g!d{l{EJ8k&uVt59=knJuihmsrne-0vnCx;&rqjM5(Gn(E=^+*V3@j)X-Ny z+KtTLnzV(BzW;$t9Y*p`@QK_^tI9~604!zl%pU8HAKYx=Mbrp@y0Kf}YAUap!4C3k z_I>5M&lSA*?YqVtB?ZW)os~3f4X)8b)|o^?TUcF*q_|KNk2T&G z9xL-@j$>?SVF*2sHfQXceY@u&vu5uI5wv?xybsdB`>O%XQ*~(!|7;HpIJ8!}r=~_W ztvFT&VrZp97$6+G#`1ai6&d8PPzugm(iAukKcV`z@^tuY&gqTI^=;Ie9F?*aQbGQA zi#=;EVm7h9GsupPSzf<@>Kx(}h2GSYe5=WxuZ|5xXp83BVXpz&@N2gw)Y(V<1HG_# z4ba>58g>^g$0*CaIJqI72W-Zk1G`Xx%re$z;eX{Fv;{r+KmW!TiR&u!X(LLF#`;;C zs{zkX8b6#gs@J!FW0%nbxcnREP)I&};7{6x4mPY*(u<3cCL``Yxuq@J@>4DU%fTq$ zv2{f;h3`d5Z!78>1@kaJyauuE0GWtgTDPmUC%~Vrz4Lx`d>^NA5kVK4;i`uO&z80f zf9t*cr=+knSUz#N?^*bY#`?o`0r?g50^B(I$CppH8y_%A6nwnMKp9S==9k#1`JC4J zR-iX#z(BlJgW4{sday<}{ea5doWjN0d)?oF|fnu*ygAa`J^jj=);)$CvMy-5P%{2OIp zR#WreR}_=u^KB&YS4ul?<%I~VGA=eR?u(4a>(*9MW+$U0wJh%yPTICco`i@-#&^kz z2>oZhyHLsue1ToT3nQ{_!g;h#@t$(Ul86Q0->O5QH#mM3%gSB|T4aBJuj_v_%l}%Ah2bN5ednlmQ162d;bVXo9YS@ zN4`wtM| zC{L+dHRj;1wKC090s~BOes8Q3gKbe;58t&A>0)MlMghD#i=Dk)rnaIA^PWCz*0yWu zLns?#Os)aLu1HGcNzvcC5-d?-h6KeqZhpe{ zb1xEJGbm#&G#58w7&WkH=r(3bTYjTg64J#T(ljtsvc;&bPX~W)Yz6hUf)4*9*j~lA zf9DseYe+M9!1k%HV30N3n}>dy-nQh*0ws24eze%<7shjx0w*!9I@i{uD)(=0tuwqe zfrUy3Z8q^DX*)WvwGXvZi0}nqY8}O6T$jzz$}dheL?pP4EdzF+D-_R5A+TO`q~}U7 zf;Fdz#|RaW&W^KtkdB(ER_se_GLRSCAQ;ndh#JFQICa0tHwKah*QZvvop(M^0m%AY z=%bd&i$Wo$C?iSwAe5cYnq&BXFF5xGkbT7xcfR^1dQ*6<%cIb^vo%eLoNm40AQoT* zR9%)e-_4%i`z5IU==WRy77n(&+Jgewc~emR;X93k5%UhfAxFnb~FuSvdVX5qh)~i9i8wn%^xsWD>Kx!9`Ln?8hndrkiad1Si0dAb?zo&@e%Hq zDDYC^rcM%$bSdpm;=EiDZpaezx}mq{z9jU9yORPXtCQyL>hB1086=p0R|*0;Sv*Vx zfXQ`tkmkZ{I~LnTLZEpp3`~+kxo%>Wte;Q6(iK6Ej39_DB<~b|!S7ByAmcgP-+uDj zzB5oO4ud>}^geLj6&hl=7IvPvM$WKy$4Kxztjp@z7ko*j1RDCLdntGCV8(Ak(h&H< zB-+cwsrkZirife65gOiYYhIxw3%70Hpm6;`6-eKX96CUN9cXYznJ#GW;OwY5SQ(MR z)nTg~S4=M}E8DWg{qyAoq!X zEzHfAERvlcurG#1_T&r#6@Fw>>*X`` z|61bAf_4bMrpmn*w1>dzeLPhd;k1t>Xw2aVfJZH}GPX@A?h zZ1&PR+U8$S+<(5%+uK{Yk$8ca!5%2R=wQ&A=jR+$nXRDC2k(Q~E|>jLXeYdWR#!bL z=*V+!JIt`I?m;yRFGb9fUzdgl+x&Ch7-ehezi?IejtrwR-Yi!`el;@owBJ6_*4MaV z1dUbFgoId?`TD1o&RIz}o*Ujk*k z6nL&kA2eDs4_<3Jy_NJwV+-^!O~C<=|X?~_-vwmz<*XO3C zWfupQG+`r6-tAFnNYsDbIKRBO$Shgl|M3HnQJ_f`i}txZ<)4i24Pu(Xz+&G3n^0m> zIVV4frFN9(r-&51hO5SaO`n@?W}&-7V2y;hcwN@!pW^-fZJW3QBdA6|Km-4tiBBaV zi?p8Ojw00q3)~DZYb^HARhiH`-1pUGnjl$Ol6#Q@y-Ct9xg2gA5=qN>-t+%Z$WNO? z)Fc^`gW#I7G zQ?~=@8fszt5diRX-Rnze^?#+Q?4yXO>NQsN0BbPqgo_X9nT{Sa3h%Tc2qz9bkK%-C z+Z!18UrKtNMpN%H521#m&5}s^UmA{+ggBqCElaMG9}7w5J;6|N-?>^nu!Ysy{leEs zL(P-re}e^^gQNSZ029=>lRR5h{ESJbnnr_sbhjI~Lneu* z3eT4K5r=RSohmqXHB=Gpn%!|=d8^ksA7Cs*gA=O?vW;j+g0z0Y($=Gn=v9J>@cYek zT_>!!zRK@j)@Eq0=+d+=*0r0qMy-1K=?f?NK}*I>>-0*RX!tZuJ`^l zY4+mgbPH(q#y+bhMm9QeRXv|yYdPykM)}&vL?J|B{TwB9~!zIm7;Dt-z{26eC92$CC(9P9=Wp?x+G=$^FPaYB}`O1!GUmHZQ z4#sIrzrHrK15QNHoD%4hmLIu`Wsc|`t5D;6NB$M`bt!s1)&h|bsMDgUP}iywwaqUP z7yT&{M?;(BEBBFyUE(Qy_)HcVG+>J8wDu^J%r_se`^-1@!q$aB8gi+T$0w&*UI!x) z_`mP@(hfS}GLQBeUBV#E2_?&W=Hae9vDWyg zTp}nnnE1F}jgF;%=!>nZ58VrBE|QR!xT%~$iVK-O6F!||(rfr|4_Me8)OHnX-1X)1 zRWWyQDbOiA1g|Zx7&GnuOLRQcP?m|WrYI%gI?gHykB~shH=Zf{luAdJPYcxox&|?gC6sP zeaq>CLLK^#p)c>fFa&U6S3aLUErkc}Jdf4{F{3Z^&gaVf&_7i@`U9fbW&%1ixfm}* zi`666MbxfujT*NU4$=C%!Z75Bg*W@gBS0Lhz7%n=v7&)K7NE~(z?hEZd?4bg~PalL|)IkBw)Ho z5Svqa+tyzFyj@D_l-^|j+|_8=+H0U`zz-|N=W)pK%k*Ogpnxc}n&rx22*?beSFHJA zE=hgMP3NM$zUp2-4RM^zE`b;T%Ui$fXy52@_-@z)16p--v>htR6Bm8DGvWQ%Mr-#> z<(pU3M6Z^!ZNqS3qLlnwQe)uE^kwYr)XOOG&-$u|6~}lak^~08c5Q}J=}crM6Zh*$ zi}AYKWR!mJPI70rX~y-0P+MS5s7`Ph*AED|z{5-|n4Z0sIAShFOuc#c-e-*G-)W8a zBpt*omx+Zs{NdTg<*B_KQCX{CES=#@=JPF}5Ezl5Hh@iQDJpXFAQv zu*ri2A^9J&!^FVvGd-CPIv@8h%fGAqLI8<3{uQYfsM9%Q$*}-%W&MZseC-B}zh?@K zH_v(brokXD0<3w1laMYc?E&r)v{Xvtks#~59xh%NqpJv2M3ROT2%0{wpg%JvCWv`K`c)xtq~0U2tw z$njC9hCYZo{pL7dXy|*Fmmyii$7@JL@7%yq!YPSN{5PY5c61ncq`l9;2_KUAxPW+# zCfN5IcXJ>+h1jaqro)d4=sQ?JQZWZ-n&lhqg_26qjT)$1Q-7zI=r%T|$XbrbMvSbx znQIvGzj)|kPLa_>{CANuH*g$GJ_wBoHmJ8_?&>;cPcJK@C^V=f;{)|cNr9F6hYLY` zyXR~7Zk+my!D%A^3773(E#q0ik1IAnLAH=ur7^8PzN#e-hIYjJSiv?5oUY(nwv%`F zcMh(~!0l zZoHhHsNL`mQI`r@;K@$+-*}0`vcsmF0!=722!+uBD~ApL{x+GEUGOjH>%+_gTh5dj z$Hadd&tSYgDFWeJGavUZz-8C^PE_i5hPz``BUb|k{cyz-s8$$PN44OfGfi{4cOQ3- zajt)SW^qS#fDQjryLQ2v1OzI5&r6@%dnj&cJruW=<*47X&u95>zGEE=VJtyron+GB ziNKf(Cj1pL&B}PA4PF^V4uheGK9*zSpM`88r~?5ftGbF&Nv7MS_2(7F|NnT3geFF) zr*c5GDCg|<*hMg}qBBYLYuv}|S?qv=z>a`K3hGCkUMU2^E) zKIQnnjwcSXk{XeCA1yodB zwD1tpjfkL>2q@uDg5(eaDj=XDh{({Ow1V_pI;26Qlu|kc=@?RwkZxhY_ohQVh#+lLWUU{Y6au_(qHoJ^5uXbI z$|+&7*n=M~alpj5lFqZsl69F%RgV%ccy0U`s@h(Pxk`et+$zBMIGm1Z-J6f(sFBh9 zK3NtQ(csU{hV{WhcMH$O_s!AZ$c&!~lE`m=_%NT{c!dhm|CQlA8FqH;0V?U}NFM*J z-)ec`{`JOj zLJ56B+y`ZMcYPQyD}-1q^U8czRE7o5Cf&JabJXFNXYic^EmEwA*-r>0iB3smb3LHT z&&$Q-?%&*Vx8BjT9@%Vz;0M|87h`0QT_;z1Bb$s8NpSpAJW)%jYcrwj-dr#U=n$L( zARm5YmMOv`O!w!g;d3*Zyd6PQ(-kFBmr3a9anNBh+oJ_`v-u?n!jk_Iij)!{ln-t^yvJ=U#|{Z>-g*vk^_>EH2o zWMm|_*pApx&i!EEFu6f54!jAxHC>on*!EkWRIPsNBhUf0DY2!bUdkpWxp9Y&2||1z za^_F#cnhj!9jlZ4i5~`0c+Fs$<_@or`TqPU?vB|p8kSe!zz=;7HWS$M?MGqslP+GW_ zyXt#38$a?hjK$$9BjNVBQC+vi!=(=GuMCxKUS#L|#ER;E(6x=+l9RKs-$!gQs(s|& zP(P1~BshD#nnvOPNtTMAytJR_Ut5beb+@XFt3CwFF9Zt&Tb{?eMDU*5Udz&akn4Gi zxps}526CfsnR{)JE#%J@b-28*>xl}*#;~6SOrMde8{u`ZSq|~3&Dl|TVG=Z78*c^e zE}_#!K(x_mCro4ZIBt3(~@hCveO0T-s(NAP|b@M}zs{ajMAMaqBA<59AYgCxG zcaM|-Xq#ikcE)w1b%JLfxf>0fF=_9)No2I%>~QZZvy#~`i*M|~;n4MN zL?MhFDqbOc@cpLTwD5ZKQqa)Ek{`JaKP4dq27G*7tMKIP6#}cmV=g$BK#c50!3v8J zTa=MS`1!XkM`AE%LGQIQ$-T7ob)@#f_&Egt2ZZjnTlX$yDlIN9X4aNbNlDdo{`%E^ z=J%Vo`wlZxEaKW=)woXx+N;!(MvqxO`>r@^!17f+W*X`U5;y1fOg)gP-|YI!t)CmC z>cZZf`|Uw|0u?+qjg&nMJ;Y9+S7Wex1St0RuanJiYXHG)im@m=J|+4R0hq68q^=2s z#EOd%Xy)3<8;s~lol>4ZVVu2n&QA&`!ru^HSAj3hLRZx_eZH;=IAcT0FHW|kz`_DI zSdW|h{^S*=X}@|AwB9AEO9Wjj$Z;6BmH3y=Dk3h7>DX5gPIFHEaw^L6aFD#xGkz97 z&eK4t$4=92lv}b$d9R7ukO3e@n;eqQxV5#j(DA)EDctiucXcB1k-U+?Y+Bu~spYu# z-IGc4sr=j?=O{-MDa2&FXxuG?MWyzN=H;+T+tEo_$X~ z&zvm@1>t^m*~B(hWPszCm2)R%bLd3M)ChhV(<`AnUI1W|bzld8G8LuK?7hGJag=wj z9w+D2H`ZjcdLAt_^lk`vVT-0q+v$eH`N*15=)T_`u(=%mv9seV1me(uy|PxN=p7b3 zx9{8NzUyEuo?e;#NSJTX4uWtiZfG@mIaty-0V#Q0YGARt!Vd-jaaO~WOCGuesi=(>gO?cWg+7NFwZ!KwWx^;5Tm5ak7 zkmVGMY!Gpp|8@oTPPz^(;V_=fw|)5B{a93VzJ%K`-3i;rVKI+WOGdd{v>o^w7=})Y ziud2ZBE>;XG8?*ns4ulyv3yh728AW z1Z!~~1sY#0D~fpUot;d6={s$P-xjgQ7Sz#1+mn@6C$t5Iy&X^Y); zv`;S(NCk7vnYm*R-ETm|sVN)!%-wFS$uuGgG=(n&&boa~=JqFn{DJ~a)#TyndH+Tr zAt50;$yoDdA$i-^@&Zj6-chR(fej6{T1b5jC^~f1fJ5?|uWDP{yaH;2_m|D8Bq@Tf z?S#ZF8>tOu$wYq~__5h$-JW7H{%kXxDJ-oimo%ZuZ7#~gu_mKXxHTKWIVh6{>N$(A zM5k4Y_bEe95B)Jr~E zXke1UzcdAR`Hz6W9+FLZ7U_WcIW?4>_eN=PyEsl>>+*KXNYG)*hQs5?pUaEZDadkN zqPL<4iOry7SvBvHcFW8lVNZQE@LievkBmfm#y}Gg6+rL(7-RL0yjilM^l`QZvKiv$ zGOtz*@lqQmiJ`a_+1+ItW`DuY7AL$CsS4P<2|=k$FSYB6I735H*?RFPKv$Ui5!Y|T zMK?D*vs3F>a;H2gTL!X<-;jIBjSVbh4M##EjDwvRwxjK{OD?LLu>I*EpiF=4i%e#ET$ zc__(f0(dIvLy?$Fceh7P%v*<4LlJqKET7)%A^a__Jtg(2DPv~vnX#?>>Kb4_w_ET*V1rA5|%?Eo(#CVL1j9RQ2v(k_)$%a5;4V{+4 zPmNGec>KD~`G_UsaJ(U?b9%zKJAEf|w3@|K0{RY9CU}xSp+DVDM@8T1oCKH-}*_Qdhq?YJwEZCQ!KA0R7FR}@PRmd?xFu?sgo z_-Pr96U*LMQ86)_0czoHoF&W1VS~FE*IkxYStGI6pNu!Mmi=8qda40L8^T*B`r4KH z^cr~*amvQ6=lHu?fBUzuq&+o?OK5sZmI=js*x5-Ahqd=aNS2| zXkMkey_~J<0R8E2ArFy9XILyNKLV|X4np`0k2@o0@#fV>x*jw|D03y}5rv_lb0WXb{qNO=FF#3AIcDHW>TbV|@A9FNW>8up`K-bEex$1Ii zS>E$NwR6xXcD^>%1=6=u0xN6!%1w)a1!a=9X1Wt}zu3Xw0OdEPN4Ksjy=pt~ww4+r zy|`sf&O%2T5aBUUFcAn^Wt_u5=Yt36Cv}X*Qo=7f3>0Vlm*8gLpXlcQH!&X^>%Zsa z{~iB-43hqL7=5f@;>W(mSx|k-oLgowd4czxs|GEEMmaPmChDoKcO?0Ru@={8bPkk! zvt8id=byW_YF74H$n&<>-=>!#Tyk>L^AQ)e#f7>K>Nud@>7(9j0#W$7LL6tYV1-kO z=kUES*dD^6SiL8ePOo;hBlG>Eqwo z2I^ZVfJSX%#>JI;pd|C%QQwP!6}2kV4VL89#24I>v}##myWJ>@tbyV6qM0Xk-c9`ndl96 z$S%k_juG*in5=zbh%t+o%Rmk`2TN*=|KfsAP?05uoK8)p#Wgan?@*|dLIPGI`c?2l z-CoNk6oxJXRj&9g3C@(buLKZk$)}J%R-&?xDQ6B@dN<&MYH7!5#~kTc*HJ70K+j%k z9z8&PKU~QQl4uybL&RnI7?nM6ixn&!G+u}QV4?85e$8%2Z-Tgv$e=JxdJA^(nyp8d zoUm1wZ)|+=1?%GFiE?75+r4?a$JywjO`j5Mj##-WR2N6dU-YHjLb9J5Y$LCGpnPTO z8fPw;`IkFH^H1Jgr3NJ5HSrS`?f853)M5W04t@p`z!O?Yz} zD4>1-qRZjdFRf!S{?0@iY(wT~v0pTZd-7{CwepZTKg9VhN9e!Utb~eAO|{?qc|oDIGt+FkmzGvNTwUW_Y+vXq*1U-q z{u@)|>L&8xpbm8{ORcyS6!{meYcU)7x=R0y@@V}jBh>{k=#tG`7&Uh6Q+e@O8z9DS zL76Uq3Utql)tCGN)@ngJ;({#F4#A^+U6ODAg^~&=Ktk3!{}kg&zANMT;`oMD_x>FM zxqtinG-_%J7sfUuzNZ1_n9F}luVVi1_Her=oZ>+-q~j5QH|u`z&*&c-LCSw3-_V0P z)ATI>8sHX;buEJgkU4j5=YI(7a0-u(n<0fPM(95{f1HZ~tpwU6=IPup92PdyyWuL( zuab6*wA(>WlbBzS3WRlr;6qXZ>*V1h4(~}|5`ffh;bR_n6LPG{1mWVT&xzT8#_VbO zs|G+~m0EN%G@EsZLhNIg=3TRqw65`(;q#9_B$-^$G6R^S2 zYHSQm^UT4!3(}7xN~a1bpCK5+`anT7Z9RzWi_LWqBMcZg}BubmaZkcV7q1BDkfS_K!r(4=!Y#!#c2zaHD|B`D2HW-=CR5EzEgKpNztqeuq9wOqI$V4LHdA3k zi|Cc@KUNnXy=n!f!B0JuclFCt!F3w7xng04$Vk%qvyK5$8e+`$i7Kk>7Byv7d&_<9+McMR+}{9JCYi0U3;mE3 zT_HC14jPq01Uap&C9_fov}VsE44TcsS*0Fq&->0HzV1cqX+fG$k%;_6@(DSB_hbdV zLkPiq#>;#ta9CKGviJKn4&Ih5RF)&Gmp0Z%%0M7H*UxlC828tTowvWcM-f6O_SLl$ z^}+`Qc$A{gob{wv#-=#D35gtCVF08F>FS-QPj|z6Wz_02prYc$HQ?26;fiC|0wS`C zi^mV=%ppynA$wydRyrx39bko2)YV_cx9?nSr9(Tr`k=02F}UYC+#uCs0V zW@>5FX2fRh1NS5TU%O8}5d>c*1}jZzKb-!JUFdnY+|!f9VTE7|+(C0B&LthBTHPx- zz^1O8$@i_^TahLgnZe0xW5fxS=_96^hAtPv_Q?RJK7qc61@0Xj^oRa;r){c`@ z5G?e;XyTlGT$G5}VE>@$+f#CgkPvTMl!l}AHJB*D3$vi^5i@Y(f;;BhZoD^_6?`>K z10!e}9Ek{Dv`)C$cBbD52zxyHJl%lQ+jn&>l@O$-=jhfOpT47f-3xcr2sD3pz;Ev| zLL$A)b0YBsK@v+R?YCA6UaK17O~LQFk%S^%DlyYo+WA zF-E+*Ep1cODfs&e&PdneS*HiJG+PHl_^`9569ZU&t2rwIT3_zSRrP)X3W1PPXO2*bB203CO(5>sVR% zTr<4D5ReKu3(uU-vtAk2d%Nw|-#d>ijv$!Tx4E2)uazK)`59If0K1%qgd*U^W5WL0 z0HcZ0z+G%KY&beNpCER<`o3M}%GgysrUmA8>HFhx;|T{)x($UAL7nzJSVYqlEaF z5V>rc-~mR!>9IU}|D*tNBb@hH8WJFNcj7agA|cNU@Z(|E#LKXrc$4Q+$M=rix1of47 zq6#X4%zpOcMh3#`aB-z3&%r~tuhJCfl{DRz;~no<hCb;K6|fxu5#EJR~_`IK$)q$ zE=~{QRq(h&YApYhLY=ov^mJy^R+{VPwNzEH&o)Zq8(2lz*g4^Rr?-^rO?+G~s*L$I zG~~a6hd2Cu>vX6;d4xpQuO=&|w+k@aCW z6I!y{jW$asey1A~3#SuNr|}G%zmwP`8B&S*!#{Dg>@*+tS+n@@{LFiT{!c92&L%g?d#nW~Cj(|r)>NQFG>oXhMKgA*<9%!!Y>^`;G0@QV6Y|dUgUGegN z2<)NnUK*OD%6)g5-bP5}dFOhxgi}BO1j0~sQJ4Vch3lEO1SLafmGi-qZqBEZjYb?PQ7`aA>i`BD8Pfq&lopX z)uog)7>Ib?doB)#6ttR+S-jW0BC$m=xY{bT;mV4I_-PY~t|LzydJMu4WQW>_n0L`7 zj`k5Y2ZN&Ghhw;MrQuYlq|!l(q;c+{cW?DoK+E}g$fOY}lJuQe>A?mgqR4WuYMUDr zw)MzX9{}Fl8WJBqd{!q+nAI9h*d=ke)}JU2JpZ~v*lX5#|PJskjz zI<(Vf{+SpAaeJ#cnPkqvtl}YLlbii_O4Rqtp>4$Vp9Q!ry1b`qWJesJo*^~t7tYQU z{JN$dNXY23I1m|qo)f7Myz&|#1viu_oAY$;9Iy-3jo7eN~X8pvvp6^wGTaaJAQZRLHl z+ItOl;HloEbaaN|M`#J&>0HQ!IP>j(g@T24nxM#Ye!|&=;EX zUmp^s(?|QPMPZqv5cjp9in@8|0ouIRED2Zz{w1cLAJkwB9XzJfT}Yr>lk;1)#pe?u zlS>6}LphQ-Z(iHuW^_c_N&lSwwDH95%zzG$!JO2}(wN_+xXboyg~RXr0omh9ahaQJ zAf9CCMyb6tq^5YQdN3qOos`HB*QwQaN`P;;GbZBo_J$}sdr(!E5BZqTYW1lcRZibm z45Q~1h(QlRSo~UJzPka9;xwA*uZ|{g8PTUV2AnoM)4b$@>*%r~=ouhBv`U55+D*4l zp*9AQZbIpeo2TBKIV$ZTf{>%@+k`(A8J4XG`o92KLZ@Od$j82OG6!IFrjKx=i=q!_ z5k+%6iI0E$D;SDpmZ?92hu8JN-JmQbM3DIk)+n6uaT*rS0yM89`K~Z8IvvERWo8yp zj{2kf6F%P|hLcRK_;Jx-AcQoys?YF`Zq)}vWDk5m0z-?Q57-Nc>aOJ8OqeKpwTEd= z7@&P_o}B8KU~ZCcxhkAk;)c4{%?Ls0jk;9j+GZG$>q{*Ykq@) zJf~QuVj=ADPGS{{f5q$7FmbMfx`{GxZzfIsrqWBP<15-*S-&fgrR0I$^Q& zVfZ^(4`D=yeQMRUN2UG~{!0TXHnOIgxo*1A@*%L#ROq$zLl57j_tUp9E*nN75(Fg9=Xv-YP#nQg6K(o_`)&C`#N)31~4s-281uRR)n^JzU< z83Gu;+?sb!Dtb4i@Vt4mVLbA-NGMH*ATh`4MAeMPKC@|}dghJbpHIhPk{H$;d!9|9 z#xL&YOh(QLOr^Tto=?~*ntR^(mX($2)1SV%3M*7=8?)G6uxFYdq9eG{s&}=}p(9zB zCl^=Sl_4jfYToQHB?hf&AnV=}^Kh7o0N@;W;X>Rrv^dz~^9#3a+7tOezID{@s#UY3 zJ`N^##E3aR4d&WAu#*FD4JX^GRZe#x3J#w)jt)-Rq3!d2vi1Y5PfJbkMsqb)u6lLE zD9~sK^ywoL-$gyaMYt%naCLAv5|(LYGXYtJ{Yf;73~*1=A6OiwFf8xMqweW`ek zJmGPg=~J%9j7qH;7npy3yca=0yx!bM%jjLeC+X z*iO*oRj7E$sKslDwWK7)0Vu1olXYS9ti^@qNCMmCa5B2ST@>lQ*djSFCE_5{RaNM7 z4zRZ{<`Nid71LizKrhlaXI}a+l);OX!`H4@o75=M73f^=j*+ zcg>vB>$=grX7iQJraSHLsiuiG+hKnqy&hChUx~;mHk;3r>?b?n<^a|2_B0MGqqIk# z+2|EEcFzjBBRB%^H_hqIHM%B8ap|@z5l2Jhd<|tOr)7T1*O)ZS%)rKxp^_3|pn&Vr1kyg zle&x#6J`{)jHSB3AC|o-E33DlO|*b>^3o|NdCHF(PE!DsyDuSCVOIrQ3q$lJY%b;0 zPRUc*ZORfBdDNSGu9!aEfO%k8vBt6u?rLqMl$K6O%JyV^F4xiQRV#B?>C^Q!vO~sVC_euaip}rL`@qS$}`fXKz&=#Jqvno9nFg||)*6I8n z)vN054K%3tD&JyxfD2h)U)R2#u$mKMqflQIzBl@t<6E|+Y{lO2Z#{j68^H>3v?9MB zhCqpvy+WKGD|vDCFDmzZuIDjSBNgW2V!=x}^U*+KW}ePg9J*<^emxy)m4Xwkaghg8Re{Xzh zzvOPXCv5x_dYKYb_BeJ$|9Y#cnM^KXJ=j83Za*}k#Su+wkzbUU0og1IdffJz7w)!C zaVZIWpQtMEsp^HdRPtK>!?=Nj!lu#RM1QonFC5BkK3R>8sTc}HmE6DX#8Mz-Pq2hD;{L|tMpOFuwx|p%%oNOY{Ss}iW zTYt)A7n0cUp)pJ`Awqy5<2|qus<6uk0@J{9m1ets7fCSw09r=z z6rjKIRSL5Lk6izB1ars9@_+$bxBU7Fj3-^Bi(lm|(C8O|rUKNfMuqp-43 z4*IpiicH};s&~J?ymK!)-TNHjQZ|$O4IbZ$E~+R^ge_pdS7e-UQ|CQcz>c;?A~w!m ze#KK?^WT78vpq?$2p;W|$KPPWpXnKx03ylmKo?M1MT?MNrSGsJ`ggS|ZVN0Wf;im4>ts^J=0J<5djKC^0Vv zYxz!BsvZ^FicZOQL)sZMnc~7vQec!taHinT??|(-6X*SC{{i5rXBOQ}0&th#yY{K9 zc{ML_c?SMzD-DFS%5&U-t2{p3()`o(rLckP2FSVtl=U(irG*6%ulfFa`h2$~%BC?+ zTQ(6wA8$l$`6z`84IaII#9NP1Vto!8myqY0LTb(r<%OSe*BM{Hu}uJGh^bT;&8M^Att~o}7>-EL4qBH2-dN>6dNL3Tim^%sniqASWCrS)zDYKp08SAfJ%Pl}2vOYKA&wms}(m`8*#T3w? zeSZ$BYcszXc#$^`!!r-k6^t0`*6_;WG}T`9;Suu}h{{{0*IX(i;cxf&%ttpWGZa%= znh}cxgx`$bH91OGyp`MuC!_B5n(Y>PLJ;BGV8V=CQ=f78<=cEE@vf%sd)OP3dtJ;b zlm3>`*nD#Bf_X#m4V+|fvjM9CG8Q}bvH@-9PP>C#J|0J$74hOg^p;KqHtf;>9%BfH zTVOhyEwbtW_5AWA2j*fMZ=^%N4s8HOe?Cw$N54T|L5*6Hz3bh~B!hg9$SO7e#8vry zcxR0iiK%?;qu)!V-;>7mT#Q>B@of*0xQTfAgy9PEGY&0>q`2 zO+$h@k|hgD0I*AD(LQb z+1^R!;b^`;Skk5VrnU&zWLlzP+${MGF_oYAYavAOLS&SUTt}YLcyvY@C)o{c60lOC)^XT)dr4j0wTr}Ol5LwE<;9VL7HvoHzqK8S z>a=Tcv={NlHmV2)tc43R(Iq(touFcF5~HHe(b9D8cONBw2(4!ge4f~{a*~BtWW`2r zRe_VMMZ2QUIJ7Qjo8E}x+fT!LyOLeZP-_LRxrr*X2tzvfgEQbXkMg+($4E;{Ya1D{ ze;0zK$vBcVaUsH1M=f7EeJfh#uDuDnwfSpz!nqM%vUt`xxwP$2edv4;X5 zDnWe`{BsS+i?J?=k|DgUee0!OZV}-uaVm?Xe+98z{1mRKMtmSA-ZyR z?-6E>ZPeseT3)6l%6#&V3KzyPdrti&+<5by0s`#mi~waJIK4l-oS>ga{lNpDqgnYm zsk|_FE+-6hyLn?RN8|wrRd9v|7I4m#Exnyb!bTdyK@20gPM( zCL_lXpD<_)`mh7bf diff --git a/yogstation.dme b/yogstation.dme index c6f3667de60d..e72cd230587b 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1162,7 +1162,6 @@ #include "code\game\objects\items\theft_tools.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" -#include "code\game\objects\items\twohanded.dm" #include "code\game\objects\items\vending_items.dm" #include "code\game\objects\items\weaponry.dm" #include "code\game\objects\items\circuitboards\circuitboard.dm" @@ -1333,8 +1332,10 @@ #include "code\game\objects\items\two_handed\baseball_bat.dm" #include "code\game\objects\items\two_handed\broom.dm" #include "code\game\objects\items\two_handed\chainsaw.dm" +#include "code\game\objects\items\two_handed\dualsaber.dm" #include "code\game\objects\items\two_handed\fireaxe.dm" #include "code\game\objects\items\two_handed\highfrequencyblade.dm" +#include "code\game\objects\items\two_handed\pitchfork.dm" #include "code\game\objects\items\two_handed\spears.dm" #include "code\game\objects\structures\aliens.dm" #include "code\game\objects\structures\artstuff.dm" @@ -3853,6 +3854,8 @@ #include "yogstation\code\game\objects\items\storage\mre.dm" #include "yogstation\code\game\objects\items\storage\toolbox.dm" #include "yogstation\code\game\objects\items\storage\uplink_kits.dm" +#include "yogstation\code\game\objects\items\wielded\big_spoon.dm" +#include "yogstation\code\game\objects\items\wielded\vxtvulhammer.dm" #include "yogstation\code\game\objects\structures\bedsheet_bin.dm" #include "yogstation\code\game\objects\structures\fireaxe.dm" #include "yogstation\code\game\objects\structures\ghost_role_spawners.dm" diff --git a/yogstation/code/_globalvars/lists/maintenance_loot.dm b/yogstation/code/_globalvars/lists/maintenance_loot.dm index 49890c7e7ae0..b6d749983b84 100644 --- a/yogstation/code/_globalvars/lists/maintenance_loot.dm +++ b/yogstation/code/_globalvars/lists/maintenance_loot.dm @@ -424,7 +424,7 @@ GLOBAL_LIST_INIT(maintenance_loot_traditional,list( /obj/item/toy/snappop/phoenix = W_LEGENDARY, /obj/item/toy/spinningtoy = W_RARE, /obj/item/toy/sword = W_RARE, - /obj/item/twohanded/vxtvulhammer/toy = W_RARE, + /obj/item/melee/vxtvulhammer/toy = W_RARE, /obj/item/toy/syndicateballoon = W_RARE, /obj/item/toy/talking/AI = W_RARE, /obj/item/toy/talking/codex_gigas = W_RARE, @@ -437,7 +437,7 @@ GLOBAL_LIST_INIT(maintenance_loot_traditional,list( /obj/item/toy/turn_tracker = W_RARE, /obj/item/toy/windupToolbox = W_RARE, /obj/item/toy/xmas_cracker = W_UNCOMMON, - /obj/item/twohanded/dualsaber/toy = W_RARE, + /obj/item/melee/dualsaber/toy = W_RARE, /obj/item/clothing/gloves/rapid/hug = W_MYTHICAL, /obj/item/clothing/mask/cigarette/pipe = W_UNCOMMON, /obj/item/clothing/mask/cigarette/pipe/cobpipe = W_COMMON, diff --git a/yogstation/code/game/gamemodes/battle_royale/loot.dm b/yogstation/code/game/gamemodes/battle_royale/loot.dm index e7111a52a4b8..722707576dc8 100644 --- a/yogstation/code/game/gamemodes/battle_royale/loot.dm +++ b/yogstation/code/game/gamemodes/battle_royale/loot.dm @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/melee/spear = 4, /obj/item/pen/edagger = 3, - /obj/item/twohanded/bigspoon = 3, + /obj/item/bigspoon = 3, /obj/item/kitchen/knife/combat = 2, /obj/item/melee/spear/bonespear = 2, @@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/fireaxe/metal_h2_axe = 1, /obj/item/nullrod/whip = 1, - /obj/item/twohanded/vxtvulhammer = 0, + /obj/item/melee/vxtvulhammer = 0, /obj/item/gun/ballistic/shotgun/riot = 0, /obj/item/gun/ballistic/shotgun/automatic/dual_tube = 0, /obj/item/gun/ballistic/revolver/detective = 0, @@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(battleroyale_weapon, list( /obj/item/vibro_weapon = -3, //Strong melee weapon, but not enough to be -5 /obj/item/autosurgeon/arm/syndicate/syndie_mantis = -4, - /obj/item/twohanded/dualsaber = -4, + /obj/item/melee/dualsaber = -4, /obj/item/battleroyale/itemspawner/breakbow = -4, //Strong melee weapon, along with infinte arrows /obj/item/gun/energy/beam_rifle = -4, diff --git a/yogstation/code/game/objects/items/fishing/rods.dm b/yogstation/code/game/objects/items/fishing/rods.dm index f03277760b12..bfa923015edb 100644 --- a/yogstation/code/game/objects/items/fishing/rods.dm +++ b/yogstation/code/game/objects/items/fishing/rods.dm @@ -1,4 +1,4 @@ -/obj/item/twohanded/fishingrod +/obj/item/fishingrod name = "fishing rod" desc = "A rod used for fishing. Despite ordinary appearances, fishing has evolved to suit the cosmos with various features, like auto-reeling." icon = 'yogstation/icons/obj/fishing/fishing.dmi' @@ -22,16 +22,22 @@ var/mob/fisher var/bite = FALSE -/obj/item/twohanded/fishingrod/examine(mob/user) +/obj/item/fishingrod/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 2, \ + ) + +/obj/item/fishingrod/examine(mob/user) . = ..() . += "Its current fishing power is [fishing_power]." -/obj/item/twohanded/fishingrod/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/fishingrod/afterattack(atom/target, mob/user, proximity_flag, click_parameters) var/datum/component/fishable/fc = target.GetComponent(/datum/component/fishable) if(!fc) return ..() if(!fishing) - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, span_warning("You need to wield the rod in both hands before you can cast it!")) return cast(fc,user) @@ -41,7 +47,7 @@ return reel_in() //intentionally able to reel in with one hand -/obj/item/twohanded/fishingrod/process() +/obj/item/fishingrod/process() if(!fishing) return PROCESS_KILL if(bite) @@ -58,11 +64,11 @@ bite = TRUE do_fishing_alert(fisher) -/obj/item/twohanded/fishingrod/Destroy() +/obj/item/fishingrod/Destroy() STOP_PROCESSING(SSobj,src) return ..() -/obj/item/twohanded/fishingrod/proc/cast(datum/component/fishable/fc,mob/user) +/obj/item/fishingrod/proc/cast(datum/component/fishable/fc,mob/user) fishing = TRUE fishing_component = fc var/turf/fishing_turf = fishing_component.parent @@ -75,7 +81,7 @@ playsound(fishing_component, 'sound/effects/splash.ogg', 50, FALSE, -5) to_chat(fisher, span_italics("You cast out your fishing rod...")) -/obj/item/twohanded/fishingrod/proc/reel_in(forced = FALSE) +/obj/item/fishingrod/proc/reel_in(forced = FALSE) if(!forced && bite) // we got something!!! playsound(fishing_component, 'sound/effects/water_emerge.ogg', 50, FALSE, -5) var/power = 0 @@ -108,17 +114,17 @@ fishing_component = null bite = FALSE //just to be safe -/obj/item/twohanded/fishingrod/proc/reel_in_forced() +/obj/item/fishingrod/proc/reel_in_forced() reel_in(forced = TRUE) -/obj/item/twohanded/fishingrod/proc/do_fishing_alert(atom/A) +/obj/item/fishingrod/proc/do_fishing_alert(atom/A) playsound(A.loc, 'sound/machines/chime.ogg', 50, FALSE, -5) var/image/I = image('icons/obj/closet.dmi', A, "cardboard_special", A.layer+1) flick_overlay_view(I, A, 8) I.alpha = 0 animate(I, pixel_z = 32, alpha = 255, time = 2, easing = ELASTIC_EASING) -/obj/item/twohanded/fishingrod/proc/spawn_reward(fishing_power = 0) +/obj/item/fishingrod/proc/spawn_reward(fishing_power = 0) var/picked_reward = fishing_component.get_reward(fishing_power) if(!picked_reward || picked_reward == FISHING_LOOT_NOTHING) //nothing or something messed up fisher.visible_message(span_notice("[fisher] reels in ... nothing!"), span_notice("You reel in... nothing! Better luck next time!")) @@ -137,7 +143,7 @@ reward_item.throw_at(get_step(fishing_component,get_dir(fishing_component,fisher)),2,3,fisher) //whip it at them! -/obj/item/twohanded/fishingrod/attackby(obj/item/B, mob/user, params) +/obj/item/fishingrod/attackby(obj/item/B, mob/user, params) if(!istype(B,/obj/item/reagent_containers/food/snacks/bait)) return @@ -152,7 +158,7 @@ add_overlay("fishing_rod_[bait.icon_state]") recalculate_power() -/obj/item/twohanded/fishingrod/AltClick(mob/living/user) +/obj/item/fishingrod/AltClick(mob/living/user) if(bait) user.put_in_hands(bait) to_chat(user, span_notice("You take the [bait] off the fishing rod.")) @@ -160,12 +166,12 @@ bait = null recalculate_power() -/obj/item/twohanded/fishingrod/proc/recalculate_power() +/obj/item/fishingrod/proc/recalculate_power() fishing_power = initial(fishing_power) if(bait) fishing_power += bait.fishing_power -/obj/item/twohanded/fishingrod/collapsible +/obj/item/fishingrod/collapsible name = "collapsible fishing rod" desc = "A collapsible fishing rod! This one can fit into your backpack for space hikes and the like." icon_state = "fishing_rod_collapse_c" @@ -175,7 +181,7 @@ var/rod_icon_state = "fishing_rod_collapse" -/obj/item/twohanded/fishingrod/collapsible/attackby(obj/item/B, mob/user, params) +/obj/item/fishingrod/collapsible/attackby(obj/item/B, mob/user, params) if(!istype(B,/obj/item/reagent_containers/food/snacks/bait)) return if(!opened) @@ -183,13 +189,13 @@ return ..() -/obj/item/twohanded/fishingrod/collapsible/AltClick(mob/living/user) +/obj/item/fishingrod/collapsible/AltClick(mob/living/user) if(bait) return ..() toggle(user) -/obj/item/twohanded/fishingrod/collapsible/proc/toggle(mob/user) - if(wielded) +/obj/item/fishingrod/collapsible/proc/toggle(mob/user) + if(HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user,"You can't collapse the rod if you are holding it with both hands") return if(fishing) @@ -203,23 +209,23 @@ update_icon() user.regenerate_icons() -/obj/item/twohanded/fishingrod/collapsible/update_icon() +/obj/item/fishingrod/collapsible/update_icon() item_state = opened ? "fishing_rod" : "" icon_state = "[rod_icon_state][opened ? "" : "_c"]" -/obj/item/twohanded/fishingrod/collapsible/attack_self(mob/user) +/obj/item/fishingrod/collapsible/attack_self(mob/user) if(!opened) toggle(user) return ..() -/obj/item/twohanded/fishingrod/collapsible/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/fishingrod/collapsible/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(!opened) to_chat(user,"The collapsible rod has to be open before you can do anything!") return ..() -/obj/item/twohanded/fishingrod/collapsible/miningmedic +/obj/item/fishingrod/collapsible/miningmedic name = "ol' reliable" desc = "Hey! I caught a miner!" icon_state = "fishing_rod_miningmedic_c" diff --git a/yogstation/code/game/objects/items/wielded/big_spoon.dm b/yogstation/code/game/objects/items/wielded/big_spoon.dm new file mode 100644 index 000000000000..3fe2465345ae --- /dev/null +++ b/yogstation/code/game/objects/items/wielded/big_spoon.dm @@ -0,0 +1,41 @@ +/obj/item/bigspoon + name = "comically large spoon" + desc = "For when you're only allowed one spoonful of something." + icon = 'yogstation/icons/obj/kitchen.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' + icon_state = "bigspoon" + item_state = "bigspoon0" + base_icon_state = "bigspoon" + lefthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_lefthand.dmi' + righthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_righthand.dmi' + force = 2 //It's a big unwieldy for one hand + force_wielded = 16 //cleaver is 15 and sharp, this at least gets to be on-par with a nullrod + sharpness = SHARP_NONE //issa spoon + armour_penetration = -50 //literally couldn't possibly be a worse weapon for hitting armour + throwforce = 1 //it's terribly weighted, what do you expect? + hitsound = 'sound/items/trayhit1.ogg' + attack_verb = list("scooped", "bopped", "spooned", "wacked") + block_chance = 30 //Only works in melee, but I bet your ass you could raise its handle to deflect a sword + wound_bonus = -10 + bare_wound_bonus = -15 + materials = list(/datum/material/iron=18000) + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BACK + +/obj/item/bigspoon/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + force_unwielded = 2, \ + force_wielded = 16, \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/obj/item/bigspoon/proc/on_wield(atom/source, mob/living/user) + hitsound = 'yogstation/sound/weapons/bat_hit.ogg' + +/obj/item/bigspoon/proc/on_unwield(atom/source, mob/living/user) + hitsound = initial(hitsound) + +/obj/item/bigspoon/update_icon() + item_state = "[base_icon_state]0" //i don't know why it's item_state rather than icon_state like every other wielded weapon //because you're changing in-hand icons not the inventory icon diff --git a/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm b/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm new file mode 100644 index 000000000000..9deeeacb7c4a --- /dev/null +++ b/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm @@ -0,0 +1,208 @@ +/* + * Vxtvul Hammer + */ +/obj/item/melee/vxtvulhammer + icon = 'icons/obj/weapons/misc.dmi' + icon_state = "vxtvul_hammer0-0" + base_icon_state = "vxtvul_hammer" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + name = "Vxtvul Hammer" + desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. \ + While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." + force = 4 //It's heavy as hell + force_wielded = 24 + armour_penetration = 50 //Designed for shattering walls in a single blow, I don't think it cares much about armor + throwforce = 18 + attack_verb = list("attacked", "hit", "struck", "bludgeoned", "bashed", "smashed") + block_chance = 30 //Only works in melee, but I bet your ass you could raise its handle to deflect a sword + sharpness = SHARP_NONE //Blunt, breaks bones + wound_bonus = -10 + bare_wound_bonus = 15 + max_integrity = 200 + resistance_flags = ACID_PROOF | FIRE_PROOF + w_class = WEIGHT_CLASS_HUGE + hitsound = 'sound/effects/hammerhitbasic.ogg' + slot_flags = ITEM_SLOT_BACK + actions_types = list(/datum/action/item_action/charge_hammer) + light_system = MOVABLE_LIGHT + light_color = LIGHT_COLOR_HALOGEN + light_range = 2 + light_power = 2 + + var/datum/effect_system/spark_spread/spark_system //It's a surprise tool that'll help us later + var/charging = FALSE + var/supercharged = FALSE + var/toy = FALSE + +/obj/item/melee/vxtvulhammer/Initialize(mapload) //For the sparks when you begin to charge it + . = ..() + spark_system = new + spark_system.set_up(5, 0, src) + spark_system.attach(src) + set_light_on(FALSE) + AddComponent(/datum/component/two_handed, \ + force_unwielded = 24, \ + force_wielded = 24, \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + +/obj/item/melee/vxtvulhammer/Destroy() //Even though the hammer won't probably be destroyed, Everâ„¢ + QDEL_NULL(spark_system) + return ..() + +/obj/item/melee/vxtvulhammer/update_icon() + icon_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]-[supercharged]" + +/obj/item/melee/vxtvulhammer/examine(mob/living/carbon/user) + . = ..() + if(supercharged) + . += "Electric sparks are bursting from the blast pads!" + +/obj/item/melee/vxtvulhammer/proc/on_unwield(atom/source, mob/living/carbon/user) + if(supercharged) //So you can't one-hand the charged hit + to_chat(user, span_notice("Your hammer loses its power as you adjust your grip.")) + user.visible_message(span_warning("The sparks from [user]'s hammer suddenly stop!")) + supercharge() + if(charging) //So you can't one-hand while charging + to_chat(user, span_notice("You flip the switch off as you adjust your grip.")) + user.visible_message(span_warning("[user] flicks the hammer off!")) + charging = FALSE + +/obj/item/melee/vxtvulhammer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK || !wielded) //Doesn't work against ranged or if it's not wielded + final_block_chance = 0 //Please show me how you can block a bullet with an industrial hammer I would LOVE to see it + return ..() + +/obj/item/melee/vxtvulhammer/attack(mob/living/carbon/human/target, mob/living/carbon/user) //This doesn't consider objects, only people + if (charging) //So you can't attack while charging + to_chat(user, span_notice("You flip the switch off before your attack.")) + user.visible_message(span_warning("[user] flicks the hammer off and raises it!")) + charging = FALSE + return ..() + +/obj/item/melee/vxtvulhammer/AltClick(mob/living/carbon/user) + charge_hammer(user) + +/obj/item/melee/vxtvulhammer/proc/supercharge() //Proc to handle when it's charged for light + sprite + damage + supercharged = !supercharged + if(supercharged) + set_light_on(TRUE) //Glows when charged + if(!toy) + force = initial(force) + (wielded ? force_wielded : 0) + 12 //12 additional damage for a total of 40 has to be a massively irritating check because of how force_wielded works + armour_penetration = 100 + else + set_light_on(FALSE) + force = initial(force) + (wielded ? force_wielded : 0) + armour_penetration = initial(armour_penetration) + update_icon() + +/obj/item/melee/vxtvulhammer/proc/charge_hammer(mob/living/carbon/user) + if(!wielded) + to_chat(user, span_warning("The hammer must be wielded in two hands in order to charge it!")) + return + if(supercharged) + to_chat(user, span_warning("The hammer is already supercharged!")) + else + charging = TRUE + to_chat(user, span_notice("You begin charging the weapon, concentration flowing into it...")) + user.visible_message(span_warning("[user] flicks the hammer on, tilting [user.p_their()] head down as if in thought.")) + spark_system.start() //Generates sparks when you charge + if(!do_mob(user, user, ispreternis(user)? 5 SECONDS : 6 SECONDS)) + if(!charging) //So no duplicate messages + return + to_chat(user, span_notice("You flip the switch off as you lose your focus.")) + user.visible_message(span_warning("[user]'s concentration breaks!")) + charging = FALSE + if(!charging) //No charging for you if you cheat + return //Has to double-check return because attacking or one-handing won't actually proc !do_mob, so the channel will seem to continue despite the message that pops out, but this actually ensures that it won't charge despite attacking or one-handing + to_chat(user, span_notice("You complete charging the weapon.")) + user.visible_message(span_warning("[user] looks up as [user.p_their()] hammer begins to crackle and hum!")) + playsound(loc, 'sound/magic/lightningshock.ogg', 60, TRUE) //Mainly electric crack + playsound(loc, 'sound/effects/magic.ogg', 40, TRUE) //Reverb undertone + supercharge() + charging = FALSE + +/obj/item/melee/vxtvulhammer/afterattack(atom/target, mob/living/carbon/user, proximity) //Afterattack to properly be able to smack walls + . = ..() + if(!proximity) + return + if(isfloorturf(target)) //So you don't just lose your supercharge if you miss and wack the floor. No I will NOT let people space with this thing + return + + if(charging) //Needs a special snowflake check if you hit something that isn't a mob + if(ismachinery(target) || isstructure(target) || ismecha(target)) + to_chat(user, span_notice("You flip the switch off after your blow.")) + user.visible_message(span_warning("[user] flicks the hammer off after striking [target]!")) + charging = FALSE + + if(supercharged) + var/turf/target_turf = get_turf(target) //Does the nice effects first so whatever happens to what's about to get clapped doesn't affect it + var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) + K.color = color + playsound(loc, 'sound/effects/powerhammerhit.ogg', 80, FALSE) //Mainly this sound + playsound(loc, 'sound/effects/explosion3.ogg', 20, TRUE) //Bit of a reverb + supercharge() //At start so it doesn't give an unintentional message if you hit yourself + + if(ismachinery(target) && !toy) + var/obj/machinery/machine = target + machine.take_damage(machine.max_integrity * 2) //Should destroy machines in one hit + if(istype(target, /obj/machinery/door)) + for(var/obj/structure/door_assembly/door in target_turf) //Will destroy airlock assembly left behind, but drop the parts + door.take_damage(door.max_integrity * 2) + else + for(var/obj/structure/frame/base in target_turf) //Will destroy machine or computer frame left behind, but drop the parts + base.take_damage(base.max_integrity * 2) + for(var/obj/structure/light_construct/light in target_turf) //Also light frames because why not + light.take_damage(light.max_integrity * 2) + user.visible_message(span_danger("The hammer thunders against the [target.name], demolishing it!")) + + else if(isstructure(target) && !toy) + var/obj/structure/struct = target + struct.take_damage(struct.max_integrity * 2) //Destroy structures in one hit too + if(istype(target, /obj/structure/table)) + for(var/obj/structure/table_frame/platform in target_turf) + platform.take_damage(platform.max_integrity * 2) //Destroys table frames left behind + user.visible_message(span_danger("The hammer thunders against the [target.name], destroying it!")) + + else if(iswallturf(target) && !toy) + var/turf/closed/wall/fort = target + fort.dismantle_wall(1) //Deletes the wall but drop the materials, just like destroying a machine above + user.visible_message(span_danger("The hammer thunders against the [target.name], shattering it!")) + playsound(loc, 'sound/effects/meteorimpact.ogg', 50, TRUE) //Otherwise there's no sound for hitting the wall, since it's just dismantled + + else if(ismecha(target) && !toy) + var/obj/mecha/mech = target + mech.take_damage(mech.max_integrity/3) //A third of its max health is dealt as an untyped damage, in addition to the normal damage of the weapon (which has high AP) + user.visible_message(span_danger("The hammer thunders as it massively dents the plating of the [target.name]!")) + + else if(isliving(target)) + var/atom/throw_target = get_edge_target_turf(target, user.dir) + var/mob/living/victim = target + if(toy) + ADD_TRAIT(victim, TRAIT_IMPACTIMMUNE, "Toy Hammer") + victim.safe_throw_at(throw_target, rand(1,2), 3, callback = CALLBACK(src, PROC_REF(afterimpact), victim)) + else + victim.throw_at(throw_target, 15, 5) //Same distance as maxed out power fist with three extra force + victim.Paralyze(2 SECONDS) + user.visible_message(span_danger("The hammer thunders as it viscerally strikes [target.name]!")) + to_chat(victim, span_userdanger("Agony sears through you as [user]'s blow cracks your body off its feet!")) + victim.emote("scream") + +/obj/item/melee/vxtvulhammer/proc/afterimpact(mob/living/victim) + REMOVE_TRAIT(victim, TRAIT_IMPACTIMMUNE, "Toy Hammer") + +/obj/item/melee/vxtvulhammer/pirate //Exact same but different text and sprites + icon_state = "vxtvul_hammer_pirate0-0" + base_icon_state = "vxtvul_hammer_pirate" + name = "pirate Vxtvul Hammer" + desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. This one has been defaced by Syndicate pirates. \ + While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." + +/datum/action/item_action/charge_hammer + name = "Charge the Blast Pads" + +/datum/action/item_action/charge_hammer/Trigger() + var/obj/item/melee/vxtvulhammer/vxtvulhammer = target + if(istype(vxtvulhammer)) + vxtvulhammer.charge_hammer(owner) diff --git a/yogstation/code/modules/donor/unique_donator_items.dm b/yogstation/code/modules/donor/unique_donator_items.dm index dbcd8769d879..59ec68301e5b 100644 --- a/yogstation/code/modules/donor/unique_donator_items.dm +++ b/yogstation/code/modules/donor/unique_donator_items.dm @@ -597,7 +597,7 @@ Uncomment this and use atomproccall as necessary, then copypaste the output into unlock_path = /obj/item/toy/sword /datum/donator_gear/hammer name = "toy sledgehammer" - unlock_path = /obj/item/twohanded/vxtvulhammer/toy + unlock_path = /obj/item/melee/vxtvulhammer/toy //plushies - kill me, for fuck sake /datum/donator_gear/plushvar diff --git a/yogstation/code/modules/jobs/job_types/clerk.dm b/yogstation/code/modules/jobs/job_types/clerk.dm index c57b7640125a..4cdd0fcaa55e 100644 --- a/yogstation/code/modules/jobs/job_types/clerk.dm +++ b/yogstation/code/modules/jobs/job_types/clerk.dm @@ -27,7 +27,7 @@ /obj/effect/spawner/lootdrop/plushies = 20, /obj/item/toy/minimeteor = 15, /obj/item/circuitboard/computer/slot_machine = 15, - /obj/item/twohanded/dualsaber/toy = 10, + /obj/item/melee/dualsaber/toy = 10, /obj/item/toy/windupToolbox = 10, /obj/item/storage/box/fancy/cigarettes/cigpack_syndicate = 5, /obj/item/storage/box/fancy/heart_box = 5, diff --git a/yogstation/code/modules/vending/fishing.dm b/yogstation/code/modules/vending/fishing.dm index 465e82103cc4..d6a7322dac98 100644 --- a/yogstation/code/modules/vending/fishing.dm +++ b/yogstation/code/modules/vending/fishing.dm @@ -9,7 +9,7 @@ icon_deny = "fishing-deny" product_slogans = "Don't tell my wife which bank I went to!;Fish fear me. Women love me.;If you want me to listen to you... talk about FISHING!;Good things come to those who bait.;Why did the lizard cross the road?" vend_reply = "Go get 'em, tiger!" - products = list(/obj/item/twohanded/fishingrod = 3, + products = list(/obj/item/fishingrod = 3, /obj/item/reagent_containers/food/snacks/bait/apprentice = 15, /obj/item/reagent_containers/food/snacks/bait/journeyman = 10, /obj/item/clothing/head/fishing = 3, From 38166f9d21b2dce77fb07d5225f8e630eee7f22e Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 01:09:04 -0400 Subject: [PATCH 04/15] Fixes --- code/datums/components/chasm.dm | 4 ++-- code/game/objects/items/toys.dm | 14 ++++++-------- code/game/objects/items/two_handed/dualsaber.dm | 11 +++++------ code/modules/mob/living/carbon/carbon.dm | 6 +++++- code/modules/mob/living/silicon/robot/inventory.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/mob.dm | 7 ++++++- yogstation/code/game/objects/items/fishing/rods.dm | 1 - .../code/game/objects/items/wielded/big_spoon.dm | 1 - .../game/objects/items/wielded/vxtvulhammer.dm | 14 +++++++------- 10 files changed, 33 insertions(+), 29 deletions(-) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index eba05ee4bddd..5c9d30f144f1 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -210,11 +210,11 @@ if(!istype(I,/obj/item/fishingrod)) return var/obj/item/fishingrod/rod = I - if(!rod.wielded) + if(!HAS_TRAIT(rod, TRAIT_WIELDED)) to_chat(user, span_warning("You need to wield the rod in both hands before you can fish in the chasm!")) return if(do_after(user, 3 SECONDS, src.parent)) - if(!rod.wielded) + if(!HAS_TRAIT(rod, TRAIT_WIELDED)) return var/list/fishing_contents = list() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 3583eb319073..8d87fc0568f7 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -389,14 +389,17 @@ /obj/item/melee/vxtvulhammer/toy name = "toy sledgehammer" desc = "A Donksoft motorized hammer with realistic flashing lights and speakers." - force = 0 - force_wielded = 0 // after recreating the dozen procs this thing has I decided it should be a subtype + base_icon_state = "vxtvul_hammer" throwforce = 0 resistance_flags = NONE armour_penetration = 0 block_chance = 0 w_class = WEIGHT_CLASS_NORMAL toy = TRUE + + force = 0 + force_wielded = 0 + var/pirated = FALSE // knockoff brand! /obj/item/melee/vxtvulhammer/toy/Initialize(mapload) @@ -406,14 +409,9 @@ name = "toy pirate sledgehammer" desc += " This one looks different from the ones you see on commercials..." icon_state = "vxtvul_hammer_pirate0-0" + base_icon_state = "vxtvul_hammer_pirate" update_icon() -/obj/item/melee/vxtvulhammer/toy/update_icon() - if(!pirated) - icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" - else - icon_state = "vxtvul_hammer[wielded]-[supercharged]" - /obj/item/melee/vxtvulhammer/toy/pirate pirated = TRUE diff --git a/code/game/objects/items/two_handed/dualsaber.dm b/code/game/objects/items/two_handed/dualsaber.dm index 930600f5c2fe..195b3fb35729 100644 --- a/code/game/objects/items/two_handed/dualsaber.dm +++ b/code/game/objects/items/two_handed/dualsaber.dm @@ -13,8 +13,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - wieldsound = 'sound/weapons/saberon.ogg' - unwieldsound = 'sound/weapons/saberoff.ogg' hitsound = "swing_hit" armour_penetration = 35 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -53,7 +51,7 @@ AddComponent(/datum/component/two_handed, \ force_unwielded = 3, \ force_wielded = force_wielded, \ - icon_wielded = "[base_icon_state][sabre_color]1", \ + icon_wielded = "[base_icon_state][saber_color]1", \ wieldsound = 'sound/weapons/saberon.ogg', \ unwieldsound = 'sound/weapons/saberoff.ogg', \ wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ @@ -96,10 +94,11 @@ if(user.has_dna()) if(user.dna.check_mutation(HULK) || user.dna.check_mutation(ACTIVE_HULK)) to_chat(user, span_warning("You grip the blade too hard and accidentally close it!")) - unwield() - return + if(HAS_TRAIT(src, TRAIT_WIELDED)) + user.dropItemToGround(src, force=TRUE) + return ..() - if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40)) + if(HAS_TRAIT(user, TRAIT_CLUMSY) && (HAS_TRAIT(src, TRAIT_WIELDED)) && prob(40)) impale(user) return if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(50)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f613aaeb7f47..180daf226734 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -28,12 +28,16 @@ /mob/living/carbon/initialize_footstep() AddComponent(/datum/component/footstep, 1, 2) -/mob/living/carbon/swap_hand(held_index) +/mob/living/carbon/perform_hand_swap(held_index) . = ..() if(!.) return + if(!held_index) held_index = (active_hand_index % held_items.len)+1 + + if(!isnum(held_index)) + CRASH("You passed [held_index] into swap_hand instead of a number. WTF man") var/oindex = active_hand_index active_hand_index = held_index diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 359da210af97..f16290208eef 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -389,5 +389,5 @@ if(slot_num > 4) // not >3 otherwise cycling with just one item on module 3 wouldn't work slot_num = 1 //Wrap around. -/mob/living/silicon/robot/swap_hand() +/mob/living/silicon/robot/perform_hand_swap() cycle_modules() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index d692aafcc148..d8708077ce6b 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -518,7 +518,7 @@ else mode() -/mob/living/simple_animal/swap_hand(hand_index) +/mob/living/simple_animal/perform_hand_swap(hand_index) . = ..() if(!.) return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a8cdabfe9135..67027f210e5b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -972,7 +972,7 @@ /mob/proc/IsAdvancedToolUser() return FALSE -/mob/proc/swap_hand() +/mob/proc/swap_hand(held_index) SHOULD_NOT_OVERRIDE(TRUE) // Override perform_hand_swap instead var/obj/item/held_item = get_active_held_item() @@ -986,6 +986,11 @@ return result +/// Performs the actual ritual of swapping hands, such as setting the held index variables +/mob/proc/perform_hand_swap(held_index) + PROTECTED_PROC(TRUE) + return TRUE + /mob/proc/activate_hand(selhand) return diff --git a/yogstation/code/game/objects/items/fishing/rods.dm b/yogstation/code/game/objects/items/fishing/rods.dm index bfa923015edb..bb44afcde557 100644 --- a/yogstation/code/game/objects/items/fishing/rods.dm +++ b/yogstation/code/game/objects/items/fishing/rods.dm @@ -137,7 +137,6 @@ return fisher.visible_message(span_notice("[fisher] reels in [reward_item]!"), span_notice("You reel in [reward_item]!")) if(fisher.Adjacent(fishing_component.parent)) - unwield(fisher,show_message = FALSE) if(fisher.put_in_hands(reward_item)) return reward_item.throw_at(get_step(fishing_component,get_dir(fishing_component,fisher)),2,3,fisher) //whip it at them! diff --git a/yogstation/code/game/objects/items/wielded/big_spoon.dm b/yogstation/code/game/objects/items/wielded/big_spoon.dm index 3fe2465345ae..21e3f2982dd9 100644 --- a/yogstation/code/game/objects/items/wielded/big_spoon.dm +++ b/yogstation/code/game/objects/items/wielded/big_spoon.dm @@ -9,7 +9,6 @@ lefthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_lefthand.dmi' righthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_righthand.dmi' force = 2 //It's a big unwieldy for one hand - force_wielded = 16 //cleaver is 15 and sharp, this at least gets to be on-par with a nullrod sharpness = SHARP_NONE //issa spoon armour_penetration = -50 //literally couldn't possibly be a worse weapon for hitting armour throwforce = 1 //it's terribly weighted, what do you expect? diff --git a/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm b/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm index 9deeeacb7c4a..8b74bce9c8e6 100644 --- a/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm +++ b/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm @@ -11,7 +11,6 @@ desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. \ While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." force = 4 //It's heavy as hell - force_wielded = 24 armour_penetration = 50 //Designed for shattering walls in a single blow, I don't think it cares much about armor throwforce = 18 attack_verb = list("attacked", "hit", "struck", "bludgeoned", "bashed", "smashed") @@ -30,6 +29,7 @@ light_range = 2 light_power = 2 + var/force_wielded = 24 var/datum/effect_system/spark_spread/spark_system //It's a surprise tool that'll help us later var/charging = FALSE var/supercharged = FALSE @@ -42,8 +42,8 @@ spark_system.attach(src) set_light_on(FALSE) AddComponent(/datum/component/two_handed, \ - force_unwielded = 24, \ - force_wielded = 24, \ + force_unwielded = force, \ + force_wielded = force_wielded, \ unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ ) @@ -70,7 +70,7 @@ charging = FALSE /obj/item/melee/vxtvulhammer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK || !wielded) //Doesn't work against ranged or if it's not wielded + if(attack_type == PROJECTILE_ATTACK || !HAS_TRAIT(src, TRAIT_WIELDED)) //Doesn't work against ranged or if it's not wielded final_block_chance = 0 //Please show me how you can block a bullet with an industrial hammer I would LOVE to see it return ..() @@ -89,16 +89,16 @@ if(supercharged) set_light_on(TRUE) //Glows when charged if(!toy) - force = initial(force) + (wielded ? force_wielded : 0) + 12 //12 additional damage for a total of 40 has to be a massively irritating check because of how force_wielded works + force = initial(force) + (HAS_TRAIT(src, TRAIT_WIELDED) ? force_wielded : 0) + 12 //12 additional damage for a total of 40 has to be a massively irritating check because of how force_wielded works armour_penetration = 100 else set_light_on(FALSE) - force = initial(force) + (wielded ? force_wielded : 0) + force = initial(force) + (HAS_TRAIT(src, TRAIT_WIELDED) ? force_wielded : 0) armour_penetration = initial(armour_penetration) update_icon() /obj/item/melee/vxtvulhammer/proc/charge_hammer(mob/living/carbon/user) - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, span_warning("The hammer must be wielded in two hands in order to charge it!")) return if(supercharged) From 6e4e79a57ad0ea28879341f6746e34a906358f6f Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 02:51:15 -0400 Subject: [PATCH 05/15] test commit --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 5 ++--- code/modules/admin/verbs/debug.dm | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 5447486c772b..8dcd990d6c14 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -792,9 +792,8 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null for(var/arg in arguments) new_args[++new_args.len] = SDQL_expression(source, arg) if(object == GLOB) // Global proc. - procname = "/proc/[procname]" - return superuser? (call(procname)(new_args)) : (WrapAdminProcCall(GLOBAL_PROC, procname, new_args)) - return superuser? (call(object, procname)(new_args)) : (WrapAdminProcCall(object, procname, new_args)) + return superuser ? (call("/proc/[procname]")(arglist(new_args))) : (WrapAdminProcCall(GLOBAL_PROC, procname, new_args)) + return superuser ? (call(object, procname)(arglist(new_args))) : (WrapAdminProcCall(object, procname, new_args)) /datum/SDQL2_query/proc/SDQL_function_async(datum/object, procname, list/arguments, source) set waitfor = FALSE diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 1e05e75f80c2..921ec51b4507 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -136,7 +136,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) //adv proc call this, ya nerds /world/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target == GLOBAL_PROC) - return call(procname)(arglist(arguments)) + return call("/proc/[procname]")(arglist(arguments)) else if(target != world) return call(target, procname)(arglist(arguments)) else From c5d1608e1e2690022ee9803bcbef5240a29ed38d Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 02:55:11 -0400 Subject: [PATCH 06/15] Revert "test commit" This reverts commit 6e4e79a57ad0ea28879341f6746e34a906358f6f. --- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 5 +++-- code/modules/admin/verbs/debug.dm | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 8dcd990d6c14..5447486c772b 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -792,8 +792,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null for(var/arg in arguments) new_args[++new_args.len] = SDQL_expression(source, arg) if(object == GLOB) // Global proc. - return superuser ? (call("/proc/[procname]")(arglist(new_args))) : (WrapAdminProcCall(GLOBAL_PROC, procname, new_args)) - return superuser ? (call(object, procname)(arglist(new_args))) : (WrapAdminProcCall(object, procname, new_args)) + procname = "/proc/[procname]" + return superuser? (call(procname)(new_args)) : (WrapAdminProcCall(GLOBAL_PROC, procname, new_args)) + return superuser? (call(object, procname)(new_args)) : (WrapAdminProcCall(object, procname, new_args)) /datum/SDQL2_query/proc/SDQL_function_async(datum/object, procname, list/arguments, source) set waitfor = FALSE diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 921ec51b4507..1e05e75f80c2 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -136,7 +136,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) //adv proc call this, ya nerds /world/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target == GLOBAL_PROC) - return call("/proc/[procname]")(arglist(arguments)) + return call(procname)(arglist(arguments)) else if(target != world) return call(target, procname)(arglist(arguments)) else From f49ee0c679654b4d4ede389365486d5f6a363dac Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 13:55:42 -0400 Subject: [PATCH 07/15] existing base_icon_state --- .../machinery/porta_turret/portable_turret.dm | 2 +- code/game/objects/effects/glowshroom.dm | 2 +- code/game/objects/items/shields.dm | 2 +- .../reagents/reagent_containers/bottle.dm | 21 ++++++++++--------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 3b8aa2b67cb1..cab13d5b4ec3 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -8,6 +8,7 @@ name = "turret" icon = 'icons/obj/turrets.dmi' icon_state = "turretCover" + base_icon_state = "standard" layer = OBJ_LAYER invisibility = INVISIBILITY_OBSERVER //the turret is invisible if it's inside its cover density = TRUE @@ -18,7 +19,6 @@ req_access = list(ACCESS_SEC_DOORS) power_channel = AREA_USAGE_EQUIP //drains power from the EQUIPMENT channel - var/base_icon_state = "standard" var/scan_range = 7 var/atom/base = null //for turrets inside other objects diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index c1e5fbb34288..ddcb00969b36 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -13,6 +13,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0) density = FALSE icon = 'icons/obj/lighting.dmi' icon_state = "glowshroom" //replaced in New + base_icon_state = "glowshroom" layer = ABOVE_NORMAL_TURF_LAYER max_integrity = GLOWSHROOM_BASE_INTEGRITY ///Cooldown for when next to try to spread. @@ -87,7 +88,6 @@ GLOBAL_VAR_INIT(glowshrooms, 0) myseed.genes += G set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color) setDir(calc_dir()) - var/base_icon_state = initial(icon_state) if(!floor) switch(dir) //offset to make it be on the wall rather than on the floor if(NORTH) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index b3041e42b3ef..6b9d9b71ccfd 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -211,13 +211,13 @@ lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' icon_state = "eshield1" // So it can display without initializing + base_icon_state = "eshield" w_class = WEIGHT_CLASS_TINY attack_verb = list("shoved", "bashed") throw_range = 5 force = 3 throwforce = 3 throw_speed = 3 - var/base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted var/on_force = 10 var/on_throwforce = 8 var/on_throw_speed = 2 diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 916c955288e0..1018fd381252 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -452,23 +452,24 @@ name = "vial" desc = "A small vial for holding small amounts of reagents." icon_state = "vial" + base_icon_state = "vial" item_state = "atoxinbottle" - unique_reskin = list("vial" = "vial", - "white vial" = "vial_white", - "red vial" = "vial_red", - "blue vial" = "vial_blue", - "green vial" = "vial_green", - "orange vial" = "vial_orange", - "purple vial" = "vial_purple", - "black vial" = "vial_black" - ) + unique_reskin = list( + "vial" = "vial", + "white vial" = "vial_white", + "red vial" = "vial_red", + "blue vial" = "vial_blue", + "green vial" = "vial_green", + "orange vial" = "vial_orange", + "purple vial" = "vial_purple", + "black vial" = "vial_black" + ) possible_transfer_amounts = list(5, 10, 15) spillable = FALSE volume = 15 disease_amount = 15 /// Name that used as the base for pen renaming, so subtypes can have different names without having to worry about messing with it var/base_name = "vial" - var/base_icon_state = "vial" /// List of icon_states that require the stripe overlay to look good. Not a very good way of doing it, but its the best I can come up with right now. var/list/striped_vial_skins = list("vial_white", "vial_red", "vial_blue", "vial_green", "vial_orange", "vial_purple", "vial_black", "viallarge_white", "viallarge_red", "viallarge_blue", "viallarge_green", "viallarge_orange", "viallarge_purple", "viallarge_black") From 69085ce0eae5705a27fec7e116df60cc752f515b Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:24:00 -0400 Subject: [PATCH 08/15] base to atom --- code/game/atoms.dm | 3 +++ code/game/objects/items.dm | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6e828d26c9bc..bfc28f7e915d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -86,6 +86,9 @@ var/base_pixel_x = 0 ///Default pixel y shifting for the atom's icon. var/base_pixel_y = 0 + ///the base icon state used for anything that changes their icon state. + var/base_icon_state + ///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy() var/list/targeted_by diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 260a5afe78db..c4002ffd42a8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -10,8 +10,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) blocks_emissive = EMISSIVE_BLOCK_GENERIC ///icon state name for inhand overlays var/item_state = null - ///the base icon state used for anything that changes their icon state. - var/base_icon_state ///Icon file for left hand inhand overlays var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' ///Icon file for right inhand overlays From 8108162559350d5b65c4f638056ce1d449242ab6 Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Jun 2023 21:02:24 -0400 Subject: [PATCH 09/15] Update twohanded.dm --- code/datums/components/twohanded.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index d84a61b21e7d..268d39996fbe 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -214,7 +214,8 @@ wielded = TRUE ADD_TRAIT(parent, TRAIT_WIELDED, REF(src)) RegisterSignal(user, COMSIG_MOB_SWAPPING_HANDS, PROC_REF(on_swapping_hands)) - wield_callback?.Invoke(parent, user) + if(wield_callback) + wield_callback.Invoke(parent, user) // update item stats and name var/obj/item/parent_item = parent From 175ccedb8684a3df07b8f4d4efa299f8d11d1860 Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Fri, 21 Jul 2023 20:37:37 -0400 Subject: [PATCH 10/15] map updates and updatepaths relocation --- .../AsteroidStation/AsteroidStation.dmm | 154 +- _maps/map_files/YogStation/YogStation.dmm | 190 +-- _maps/shuttles/emergency_cargo.dmm | 2 +- _maps/shuttles/emergency_mafia.dmm | 2 +- _maps/shuttles/emergency_octa.dmm | 6 +- code/game/objects/items/twohanded.dm | 1484 ----------------- .../mapmerge2/map_scripts/19365_twohanded.txt | 8 +- .../code/game/objects/items/fishing/rods.dm | 2 +- 8 files changed, 182 insertions(+), 1666 deletions(-) delete mode 100644 code/game/objects/items/twohanded.dm rename code/game/objects/items/two_handed/updatepaths.txt => tools/mapmerge2/map_scripts/19365_twohanded.txt (52%) diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index 5726ce005980..66422f02793f 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -91,7 +91,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aaV" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "abc" = ( @@ -809,7 +809,7 @@ /turf/closed/wall/r_wall, /area/engine/foyer) "ahm" = ( -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "ahu" = ( @@ -1112,7 +1112,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ dir = 4; name = "Station Intercom (General)"; @@ -1801,7 +1801,7 @@ /area/chapel/main) "aqo" = ( /obj/structure/table/glass, -/obj/item/twohanded/required/kirbyplants/dead{ +/obj/item/kirbyplants/dead{ pixel_y = 13 }, /turf/open/floor/plasteel/dark, @@ -1948,7 +1948,7 @@ /turf/open/floor/carpet, /area/medical/psych) "arn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/light/small{ dir = 1 @@ -3067,7 +3067,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aAu" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, @@ -3337,7 +3337,7 @@ /turf/open/space/basic, /area/space) "aCk" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark/corner{ dir = 8 }, @@ -3402,7 +3402,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aCx" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark/corner, /area/chapel/main) "aCB" = ( @@ -5783,7 +5783,7 @@ /turf/open/floor/plasteel/white, /area/medical/paramedic) "aYJ" = ( -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "aYK" = ( @@ -6108,7 +6108,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) "bcW" = ( @@ -7291,7 +7291,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light_switch{ pixel_x = -25 }, @@ -8828,7 +8828,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "bZR" = ( -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /obj/machinery/firealarm{ dir = 4; pixel_x = -24 @@ -8838,7 +8838,7 @@ /area/crew_quarters/heads/hor) "bZS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/engine/engineering) "bZW" = ( @@ -11237,7 +11237,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/pumproom) "cOs" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/camera{ c_tag = "Construction Area North"; dir = 0 @@ -11390,7 +11390,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/engine/engineering) "cQY" = ( @@ -11576,7 +11576,7 @@ /turf/open/floor/plating, /area/teleporter) "cUF" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white/side, /area/science/xenobiology) "cUI" = ( @@ -14305,7 +14305,7 @@ /area/ruin/space/has_grav/listeningstation) "dSG" = ( /obj/item/reagent_containers/food/snacks/fish/tuna, -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /turf/open/floor/white{ icon = 'icons/turf/floors/ice_turf.dmi'; icon_state = "unsmooth"; @@ -15568,7 +15568,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 }, @@ -16102,7 +16102,7 @@ /turf/open/floor/plating, /area/maintenance/port) "euL" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ pixel_y = 26 }, @@ -16739,7 +16739,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/hfr) "eFQ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -19574,7 +19574,7 @@ /turf/open/indestructible/grass/sand, /area/hydroponics/garden) "fDb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, @@ -20173,7 +20173,7 @@ /turf/open/floor/plating, /area/maintenance/port) "fOX" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/structure/sign/painting{ persistence_id = "public"; @@ -20311,7 +20311,7 @@ /turf/open/floor/plasteel, /area/storage/tech) "fQU" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/maintenance/starboard/fore) "fQX" = ( @@ -22384,7 +22384,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "gAc" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, @@ -22963,11 +22963,11 @@ /area/engine/atmos/distro) "gJL" = ( /obj/structure/closet/crate, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod, -/obj/item/twohanded/fishingrod/collapsible, -/obj/item/twohanded/fishingrod/collapsible, +/obj/item/fishingrod, +/obj/item/fishingrod, +/obj/item/fishingrod, +/obj/item/fishingrod/collapsible, +/obj/item/fishingrod/collapsible, /turf/open/floor/white{ icon = 'icons/turf/floors/ice_turf.dmi'; icon_state = "unsmooth"; @@ -23536,7 +23536,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "gSF" = ( -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /obj/structure/table/wood, /turf/open/floor/plating/beach/sand, /area/crew_quarters/bar) @@ -25678,7 +25678,7 @@ /turf/closed/wall/r_wall, /area/engine/engineering) "hAR" = ( -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /turf/open/floor/white{ icon = 'icons/turf/floors/ice_turf.dmi'; icon_state = "unsmooth"; @@ -28210,7 +28210,7 @@ /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/fifty, /obj/item/clothing/gloves/color/yellow, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /obj/item/stack/cable_coil, /obj/machinery/airalarm{ dir = 8; @@ -31437,7 +31437,7 @@ dir = 8 }, /obj/structure/table, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /turf/open/floor/black, @@ -31615,7 +31615,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "jyK" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 }, @@ -32436,7 +32436,7 @@ /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "jLj" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/eighties, /area/maintenance/starboard/fore) "jLp" = ( @@ -32444,7 +32444,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "jLz" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet/royalblack, /area/bridge/meeting_room) "jLH" = ( @@ -32495,7 +32495,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -33360,7 +33360,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -33694,7 +33694,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "khG" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/patients_rooms/room_a) "kiq" = ( @@ -34271,7 +34271,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "krT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/airalarm{ dir = 4; pixel_x = -24 @@ -35135,7 +35135,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "kGv" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light{ dir = 1 }, @@ -35227,7 +35227,7 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/central) "kIj" = ( @@ -38720,7 +38720,7 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "lTX" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/green/filled/line, /turf/open/floor/plasteel/white, /area/medical/virology) @@ -40191,7 +40191,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "About as helpful as an actual cargo tech."; icon_state = "plant-27"; name = "Planty the Cargo Technician " @@ -41647,7 +41647,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "mTt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 }, @@ -43556,7 +43556,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "nuU" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, @@ -44140,7 +44140,7 @@ /turf/open/floor/plating, /area/engine/atmos/storage) "nFe" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/lawoffice) "nFm" = ( @@ -44387,7 +44387,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "nJQ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/science/explab) "nKG" = ( @@ -45806,7 +45806,7 @@ /turf/open/floor/wood, /area/library) "ogU" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, @@ -45857,7 +45857,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "oic" = ( @@ -47887,7 +47887,7 @@ }, /area/ruin/powered) "oRq" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 }, @@ -49885,7 +49885,7 @@ /turf/open/floor/plasteel, /area/hydroponics) "puW" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "pvd" = ( @@ -50583,7 +50583,7 @@ /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "pGo" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, @@ -50804,7 +50804,7 @@ /obj/effect/turf_decal/siding/wideplating{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "pKa" = ( @@ -51878,7 +51878,7 @@ pixel_x = 27 }, /obj/effect/turf_decal/siding/wideplating, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/engine/engineering) "pYC" = ( @@ -52373,7 +52373,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "qhL" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet/black, /area/maintenance/department/tcoms) "qhM" = ( @@ -53060,7 +53060,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/pumproom) "qtP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/science/nanite"; dir = 1; @@ -54615,7 +54615,7 @@ /area/bridge) "qXQ" = ( /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, @@ -56696,7 +56696,7 @@ /turf/open/floor/plasteel, /area/engine/foyer) "rEy" = ( -/obj/item/twohanded/fishingrod, +/obj/item/fishingrod, /turf/open/floor/plating/beach/coastline_t{ dir = 8 }, @@ -56752,7 +56752,7 @@ /area/hallway/primary/central) "rEU" = ( /obj/structure/table/reinforced, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -58560,7 +58560,7 @@ /obj/structure/sign/poster/official/random{ pixel_y = -32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "sir" = ( @@ -58644,7 +58644,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -59079,7 +59079,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/locker) "sti" = ( @@ -59674,7 +59674,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "sDn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/painting{ persistence_id = "public"; pixel_y = 32 @@ -61324,7 +61324,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "tbS" = ( @@ -61965,7 +61965,7 @@ /turf/open/space/basic, /area/space/nearstation) "tob" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 }, @@ -62153,7 +62153,7 @@ pixel_y = 22; req_access_txt = "39" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -63482,7 +63482,7 @@ /turf/open/floor/plating, /area/maintenance/central) "tTf" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/patients_rooms/room_b) "tTG" = ( @@ -63599,7 +63599,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "tVH" = ( -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "tVJ" = ( @@ -64385,7 +64385,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "uiJ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, @@ -67012,7 +67012,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/quartermaster/office) "veL" = ( @@ -67077,7 +67077,7 @@ /area/security/main) "vfv" = ( /obj/structure/table/wood, -/obj/item/twohanded/required/kirbyplants/random{ +/obj/item/kirbyplants/random{ pixel_x = -1; pixel_y = 12 }, @@ -69485,7 +69485,7 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "vYn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/plasteel/white, /area/medical/storage/backroom) @@ -70132,7 +70132,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "wjG" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ pixel_y = -30 }, @@ -71496,7 +71496,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -74036,7 +74036,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/satellite) "xwy" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "xwA" = ( @@ -75211,7 +75211,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light_switch{ pixel_x = -25 }, diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index fe2c22cba276..26d5a9f20e7a 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -1727,7 +1727,7 @@ name = "Head of Security's Office APC"; pixel_x = -25 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable{ icon_state = "0-4" }, @@ -2335,7 +2335,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 1 }, @@ -5989,7 +5989,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aPz" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aPA" = ( @@ -6057,7 +6057,7 @@ /turf/open/floor/plating, /area/security/processing) "aPM" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /turf/open/floor/plasteel, /area/hallway/primary/port) @@ -6099,7 +6099,7 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aQn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aQr" = ( @@ -6197,7 +6197,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ pixel_y = 26 }, @@ -6217,7 +6217,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/poster/official/pda_ad{ pixel_x = 32 }, @@ -7651,7 +7651,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bdr" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -10661,7 +10661,7 @@ dir = 8; pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants/dead, +/obj/item/kirbyplants/dead, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) "bCi" = ( @@ -13044,7 +13044,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "caT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, @@ -13515,7 +13515,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "cgo" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 1 @@ -14391,7 +14391,7 @@ /turf/closed/wall/r_wall, /area/engine/engineering) "cru" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -15780,7 +15780,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cMh" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plating, /area/storage/tech) "cMj" = ( @@ -15969,7 +15969,7 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/item/toy/figure/cmo, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) @@ -16293,7 +16293,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "cTB" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 5 }, @@ -16812,7 +16812,7 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "ddC" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/brown/filled/line/lower, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -17543,7 +17543,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "dtc" = ( @@ -18703,7 +18703,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "dOW" = ( @@ -19069,7 +19069,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/camera/motion/armory, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) @@ -19487,7 +19487,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "edX" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "eec" = ( @@ -19540,7 +19540,7 @@ /turf/open/floor/plating, /area/engine/engineering) "efg" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/item/radio/intercom{ pixel_x = -25 }, @@ -20589,7 +20589,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ +/obj/item/kirbyplants{ desc = "About as helpful as an actual cargo tech."; icon_state = "plant-27"; name = "Planty the Cargo Technician " @@ -20775,7 +20775,7 @@ /obj/machinery/camera{ c_tag = "Central Hallway North" }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 1 }, @@ -21427,7 +21427,7 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "eME" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /obj/structure/noticeboard{ dir = 8; @@ -23423,7 +23423,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "fyB" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -23648,7 +23648,7 @@ /obj/machinery/status_display/evac{ pixel_y = -32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, @@ -23730,7 +23730,7 @@ /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 9 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/security/prison/hallway) "fEW" = ( @@ -23775,7 +23775,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "fFL" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 1 }, @@ -25186,7 +25186,7 @@ /area/engine/engineering) "gha" = ( /obj/machinery/light/small, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/engine/engineering) "ghg" = ( @@ -25980,7 +25980,7 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "gzz" = ( -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "gzP" = ( @@ -26082,7 +26082,7 @@ pixel_x = 7; pixel_y = 23 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 9 }, @@ -27654,8 +27654,8 @@ dir = 1 }, /obj/item/clothing/shoes/jackboots, -/obj/item/twohanded/required/pool/rubber_ring, -/obj/item/twohanded/required/pool/rubber_ring, +/obj/item/pool/rubber_ring, +/obj/item/pool/rubber_ring, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "hfW" = ( @@ -27992,7 +27992,7 @@ name = "Security Office APC"; pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable, /obj/effect/turf_decal/trimline/secred/filled/corner/lower{ dir = 4 @@ -28152,7 +28152,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 5 }, @@ -28514,7 +28514,7 @@ name = "Escape Hallway APC"; pixel_x = -25 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/exit) @@ -28602,7 +28602,7 @@ /turf/open/floor/carpet/royalblue, /area/crew_quarters/heads/cmo) "hwu" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/crew_quarters/heads/captain) @@ -28983,7 +28983,7 @@ /turf/open/floor/plating, /area/maintenance/port) "hDa" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 }, @@ -30186,7 +30186,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "ibZ" = ( @@ -30212,7 +30212,7 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "ics" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/vacant_room) "icy" = ( @@ -30251,7 +30251,7 @@ /turf/open/floor/plasteel, /area/security/prison) "icP" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) @@ -30400,7 +30400,7 @@ name = "Station Intercom (General)"; pixel_y = -29 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/vacant_room) "ies" = ( @@ -32022,7 +32022,7 @@ dir = 1; pixel_y = -26 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower, /turf/open/floor/plasteel, /area/science/misc_lab) @@ -32270,14 +32270,14 @@ /turf/open/floor/grass, /area/hallway/primary/fore) "iNE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 10 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "iNM" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/item/kirbyplants, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 8 }, @@ -32285,7 +32285,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "iNT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -32495,7 +32495,7 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "iSt" = ( -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/indestructible/sound/pool, /area/crew_quarters/fitness) "iSH" = ( @@ -32568,7 +32568,7 @@ /turf/open/floor/carpet, /area/security/detectives_office) "iUt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/security/courtroom) "iUu" = ( @@ -32969,7 +32969,7 @@ /turf/open/floor/plasteel, /area/vacant_room/commissary) "jbY" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 10 }, @@ -34351,7 +34351,7 @@ /turf/open/floor/plasteel, /area/security/processing) "jFt" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, @@ -35100,7 +35100,7 @@ /obj/structure/table/reinforced, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high/plus, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "jVQ" = ( @@ -36246,7 +36246,7 @@ /turf/open/floor/plasteel, /area/engine/foyer) "kua" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /obj/effect/turf_decal/trimline/green/filled/corner/lower, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ @@ -36277,7 +36277,7 @@ /area/security/prison) "kuY" = ( /obj/machinery/holopad, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/brown/filled/line/lower{ dir = 1 }, @@ -37377,7 +37377,7 @@ /turf/open/floor/carpet/blue, /area/bridge/meeting_room) "kRG" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 8 }, @@ -38431,7 +38431,7 @@ dir = 1; pixel_y = -24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "llW" = ( @@ -38441,7 +38441,7 @@ /obj/effect/turf_decal/stripes{ dir = 5 }, -/obj/item/twohanded/required/kirbyplants/random{ +/obj/item/kirbyplants/random{ pixel_x = -5 }, /obj/effect/turf_decal/ramp_middle{ @@ -38451,7 +38451,7 @@ /turf/open/floor/carpet, /area/library) "lmd" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 6 }, @@ -39381,7 +39381,7 @@ /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/construction/mining/aux_base) "lHv" = ( @@ -39871,7 +39871,7 @@ c_tag = "EVA South"; dir = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "lRt" = ( @@ -40033,7 +40033,7 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "lUn" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/wood, /area/medical/psych) @@ -40706,7 +40706,7 @@ /turf/open/floor/plating, /area/security/prison) "mhE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 4 }, @@ -41418,7 +41418,7 @@ /turf/open/floor/plasteel, /area/storage/primary) "muS" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 5 @@ -41975,7 +41975,7 @@ /obj/machinery/firealarm{ pixel_y = 26 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/security/interrogation) "mEh" = ( @@ -45177,7 +45177,7 @@ /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 8 }, -/obj/item/twohanded/required/kirbyplants/photosynthetic{ +/obj/item/kirbyplants/photosynthetic{ pixel_y = 10 }, /obj/structure/table, @@ -45845,7 +45845,7 @@ pixel_x = 5; pixel_y = -36 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "ohL" = ( @@ -46522,7 +46522,7 @@ dir = 8; pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -47566,7 +47566,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "oNV" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/firealarm{ dir = 1; pixel_y = -26 @@ -48600,7 +48600,7 @@ /turf/open/floor/plating, /area/science/xenobiology) "piy" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/window/reinforced, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 10 @@ -50630,7 +50630,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "pVW" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -51618,7 +51618,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "qnM" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "qnN" = ( @@ -53201,7 +53201,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "qRi" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/engiyellow/filled/line/lower{ dir = 10 }, @@ -53310,7 +53310,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "qTl" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 4 }, @@ -56933,7 +56933,7 @@ /turf/closed/wall, /area/engine/atmos/mix) "soM" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 5 }, @@ -57691,7 +57691,7 @@ layer = 4; pixel_y = 32 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/green/filled/line/lower{ dir = 5 }, @@ -59339,7 +59339,7 @@ /turf/open/floor/plating, /area/maintenance/port) "tmp" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/requests_console{ department = "Medbay"; departmentType = 1; @@ -59744,7 +59744,7 @@ /turf/open/floor/plating, /area/storage/tech) "twb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line/lower{ dir = 9 }, @@ -62238,8 +62238,8 @@ /area/crew_quarters/heads/captain) "utp" = ( /obj/structure/closet/athletic_mixed, -/obj/item/twohanded/required/pool/pool_noodle, -/obj/item/twohanded/required/pool/pool_noodle, +/obj/item/pool/pool_noodle, +/obj/item/pool/pool_noodle, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "utG" = ( @@ -62281,7 +62281,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 }, @@ -63952,7 +63952,7 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "vbw" = ( -/obj/item/twohanded/required/kirbyplants/photosynthetic, +/obj/item/kirbyplants/photosynthetic, /obj/effect/turf_decal/trimline/blue/filled/corner/lower{ dir = 1 }, @@ -64615,7 +64615,7 @@ /obj/machinery/airalarm{ pixel_y = 24 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -65864,14 +65864,14 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "vLb" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, /turf/open/floor/plasteel/white, /area/medical/virology) "vLD" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/secred/filled/line/lower{ dir = 6 }, @@ -65970,7 +65970,7 @@ pixel_x = 30; receive_ore_updates = 1 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/science/nanite) "vNB" = ( @@ -66365,7 +66365,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "vUT" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ dir = 1 }, @@ -66760,7 +66760,7 @@ /turf/open/floor/plasteel, /area/science/nanite) "wcf" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/mapping_helpers/teleport_anchor, /obj/effect/turf_decal/trimline/engiyellow/filled/corner/lower{ dir = 4 @@ -66774,7 +66774,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/mix) "wcl" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 5 }, @@ -68689,7 +68689,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "wRN" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /turf/open/floor/plasteel, /area/science/robotics/lab) @@ -69531,7 +69531,7 @@ /turf/open/floor/plasteel, /area/engine/atmos/distro) "xjZ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/machinery/light, /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -70803,7 +70803,7 @@ /turf/open/floor/plasteel, /area/science/mixing) "xKE" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/carpet, /area/library) "xLu" = ( @@ -71426,7 +71426,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line/lower{ dir = 5 }, @@ -71452,8 +71452,8 @@ pixel_y = 30 }, /obj/structure/table, -/obj/item/twohanded/rcl/pre_loaded, -/obj/item/twohanded/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, +/obj/item/rcl/pre_loaded, /turf/open/floor/plasteel, /area/engine/engineering) "xYw" = ( @@ -71567,7 +71567,7 @@ pixel_x = -21; pixel_y = -11 }, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/structure/cable{ icon_state = "0-2" }, @@ -71915,7 +71915,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "ygx" = ( diff --git a/_maps/shuttles/emergency_cargo.dmm b/_maps/shuttles/emergency_cargo.dmm index bb7fcb4d47e1..2f377b118a5a 100644 --- a/_maps/shuttles/emergency_cargo.dmm +++ b/_maps/shuttles/emergency_cargo.dmm @@ -562,7 +562,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "Hv" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel/rockvault, /area/shuttle/escape) "HR" = ( diff --git a/_maps/shuttles/emergency_mafia.dmm b/_maps/shuttles/emergency_mafia.dmm index a7a7346efc54..da9a3979ea57 100644 --- a/_maps/shuttles/emergency_mafia.dmm +++ b/_maps/shuttles/emergency_mafia.dmm @@ -48,7 +48,7 @@ /turf/open/floor/carpet/exoticgreen, /area/shuttle/escape) "jA" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/wood, /area/shuttle/escape) "jZ" = ( diff --git a/_maps/shuttles/emergency_octa.dmm b/_maps/shuttles/emergency_octa.dmm index 55fe205a112c..fa46cb3fa758 100644 --- a/_maps/shuttles/emergency_octa.dmm +++ b/_maps/shuttles/emergency_octa.dmm @@ -382,7 +382,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "Ie" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "Ki" = ( @@ -539,7 +539,7 @@ /area/shuttle/escape) "RU" = ( /obj/machinery/door/firedoor/border_only, -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "SM" = ( @@ -573,7 +573,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "UJ" = ( -/obj/item/twohanded/required/kirbyplants/random, +/obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/darkblue/filled/line/lower{ dir = 6 }, diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm deleted file mode 100644 index 9dad7e549220..000000000000 --- a/code/game/objects/items/twohanded.dm +++ /dev/null @@ -1,1484 +0,0 @@ -/* Two-handed Weapons - * Contains: - * Twohanded - * Fireaxe - * Double-Bladed Energy Swords - * Spears - * CHAINSAWS - * Bone Axe and Spear - * Vxtvul Hammer - */ - -/*################################################################## -##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## -####################################################################*/ - -//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn -//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. -//It also tidies stuff up elsewhere. - - - - -/* - * Twohanded - */ -/obj/item/twohanded - /// Is the item currently wielded with two hands - var/wielded = FALSE - /// How much additonal force to give - var/force_wielded = 0 - /// Sound made when you wield it - var/wieldsound = null - /// Sound made when you unwield it - var/unwieldsound = null - /// stat list for wielded/unwielded, switches with weapon_stats when wielding or unwielding - var/list/wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - -/obj/item/twohanded/proc/unwield(mob/living/carbon/user, show_message = TRUE) - if(!wielded || !user) - return - wielded = FALSE - force -= force_wielded - var/sf = findtext(name, " (Wielded)", -10)//10 == length(" (Wielded)") - if(sf) - name = copytext(name, 1, sf) - else //something wrong - name = "[initial(name)]" - update_appearance(UPDATE_ICON) - if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) - user.update_inv_back() - else - user.update_inv_hands() - if(show_message) - if(iscyborg(user)) - to_chat(user, span_notice("You free up your module.")) - else - to_chat(user, span_notice("You are now carrying [src] with one hand.")) - if(unwieldsound) - playsound(loc, unwieldsound, 50, 1) - var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() - if(O && istype(O)) - O.unwield() - var/list/stats = weapon_stats - weapon_stats = wielded_stats - wielded_stats = stats - return - -/obj/item/twohanded/proc/wield(mob/living/carbon/user) - if(wielded) - return - if(ismonkey(user)) - to_chat(user, span_warning("It's too heavy for you to wield fully.")) - return - if(user.get_inactive_held_item()) - to_chat(user, span_warning("You need your other hand to be empty!")) - return - var/obj/item/twohanded/offhand/O = new(user) // Reserve other hand - // Cyborgs are snowflakes hand wise - if(iscyborg(user)) - user.put_in_inactive_hand(O) - else - if(!user.put_in_inactive_hand(O)) - to_chat(user, span_notice("You try to wield it... but it seems you're missing the matching arm.")) // should be better text but dunno what - return - wielded = TRUE - if(force_wielded) - force += force_wielded - name = "[name] (Wielded)" - update_appearance(UPDATE_ICON) - if(iscyborg(user)) - to_chat(user, span_notice("You dedicate your module to [src].")) - else - to_chat(user, span_notice("You grab [src] with both hands.")) - if (wieldsound) - playsound(loc, wieldsound, 50, 1) - var/list/stats = weapon_stats - weapon_stats = wielded_stats - wielded_stats = stats - O.name = "[name] - offhand" - O.desc = "Your second grip on [src]." - O.wielded = TRUE - return - -/obj/item/twohanded/dropped(mob/user) - . = ..() - //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand - if(!wielded) - return - unwield(user) - -/obj/item/twohanded/attack_self(mob/user) - . = ..() - if(wielded) //Trying to unwield it - unwield(user) - else //Trying to wield it - wield(user) - -/obj/item/twohanded/equip_to_best_slot(mob/M) - if(..()) - if(istype(src, /obj/item/twohanded/required)) - return // unwield forces twohanded-required items to be dropped. - unwield(M) - return - -/obj/item/twohanded/equipped(mob/user, slot) - ..() - if(!user.is_holding(src) && wielded && !istype(src, /obj/item/twohanded/required)) - unwield(user) - -///////////OFFHAND/////////////// -/obj/item/twohanded/offhand - name = "offhand" - icon_state = "offhand" - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/item/twohanded/offhand/Destroy() - wielded = FALSE - return ..() - -/obj/item/twohanded/offhand/dropped(mob/living/user, show_message = TRUE) //Only utilized by dismemberment since you can't normally switch to the offhand to drop it. - SHOULD_CALL_PARENT(FALSE) - var/obj/I = user.get_active_held_item() - if(I && istype(I, /obj/item/twohanded)) - var/obj/item/twohanded/thw = I - thw.unwield(user, show_message) - if(istype(thw, /obj/item/twohanded/required)) - user.dropItemToGround(thw) - if(!QDELETED(src)) - qdel(src) - -/obj/item/twohanded/offhand/unwield() - if(wielded)//Only delete if we're wielded - wielded = FALSE - qdel(src) - -/obj/item/twohanded/offhand/wield() - if(wielded)//Only delete if we're wielded - wielded = FALSE - qdel(src) - -/obj/item/twohanded/offhand/attack_self(mob/living/carbon/user) //You should never be able to do this in standard use of two handed items. This is a backup for lingering offhands. - var/obj/item/twohanded/O = user.get_inactive_held_item() - if (istype(O) && !istype(O, /obj/item/twohanded/offhand/)) //If you have a proper item in your other hand that the offhand is for, do nothing. This should never happen. - return - if (QDELETED(src)) - return - qdel(src) //If it's another offhand, or literally anything else, qdel. If I knew how to add logging messages I'd put one here. - -///////////Two hand required objects/////////////// -//This is for objects that require two hands to even pick up -/obj/item/twohanded/required - w_class = WEIGHT_CLASS_HUGE - -/obj/item/twohanded/required/attack_self() - return - -/obj/item/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0) - if(wielded && !slot_flags) - if(!disable_warning) - to_chat(M, span_warning("[src] is too cumbersome to carry with anything but your hands!")) - return 0 - return ..() - -/obj/item/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty - var/obj/item/twohanded/required/H = user.get_inactive_held_item() - if(get_dist(src,user) > 1) - return - if(H != null) - to_chat(user, span_notice("[src] is too cumbersome to carry in one hand!")) - return - if(loc != user) - wield(user) - . = ..() - -/obj/item/twohanded/required/equipped(mob/user, slot) - ..() - if(slot_flags & slot) - var/datum/O = user.is_holding_item_of_type(/obj/item/twohanded/offhand) - if(!O || QDELETED(O)) - return - qdel(O) - return - if(slot == ITEM_SLOT_HANDS) - wield(user) - else - unwield(user) - -/obj/item/twohanded/required/dropped(mob/living/user, show_message = TRUE) - unwield(user, show_message) - ..() - -/obj/item/twohanded/required/wield(mob/living/carbon/user) - ..() - if(!wielded) - user.dropItemToGround(src) - -/obj/item/twohanded/required/unwield(mob/living/carbon/user, show_message = TRUE) - if(!wielded) - return - if(show_message) - to_chat(user, span_notice("You drop [src].")) - ..(user, FALSE) - -/* - * Fireaxe - */ -/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri - icon = 'icons/obj/tools.dmi' - icon_state = "fireaxe0" - lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - force = 5 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 19 - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut", "axed") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = SHARP_EDGED - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) - resistance_flags = FIRE_PROOF - wound_bonus = -15 - bare_wound_bonus = 20 - -/obj/item/twohanded/fireaxe/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools - -/obj/item/twohanded/fireaxe/update_icon(updates=ALL) //Currently only here to fuck with the on-mob icons. - . = ..() - icon_state = "fireaxe[wielded]" - -/obj/item/twohanded/fireaxe/suicide_act(mob/user) - user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) - return (BRUTELOSS) - -/obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded && !QDELETED(A)) //destroys windows and grilles in one or two hits, most of the time - if(istype(A, /obj/structure/window)) - var/obj/structure/window/W = A - W.take_damage(W.max_integrity*2, BRUTE, MELEE, FALSE, null, armour_penetration) - else if(istype(A, /obj/structure/grille)) - var/obj/structure/grille/G = A - G.take_damage(G.max_integrity*2, BRUTE, MELEE, FALSE, null, armour_penetration) - else if(istype(A, /obj/machinery/door)) //Nines hits for reinforced airlock, seven for normal - var/obj/machinery/door/D = A - D.take_damage((force+25), BRUTE, MELEE, FALSE, null, armour_penetration) - else if(istype(A, /obj/structure/door_assembly)) //Two hits for frames left behind - var/obj/machinery/door/D = A - D.take_damage((force+25), BRUTE, MELEE, FALSE, null, armour_penetration) - -/* - * Metal Hydrogen Axe - */ -/obj/item/twohanded/fireaxe/metal_h2_axe // Blatant imitation of the fireaxe, but made out of metallic hydrogen - icon_state = "metalh2_axe0" - name = "metallic hydrogen axe" - desc = "A large, menacing axe made of an unknown substance that the most elder atmosians call Metallic Hydrogen. Truly an otherworldly weapon." - force_wielded = 18 - -/obj/item/twohanded/fireaxe/metal_h2_axe/update_icon(updates=ALL) //Currently only here to fuck with the on-mob icons. - . = ..() - icon_state = "metalh2_axe[wielded]" - return - -/* - * Energy Fire Axe - */ - -/obj/item/twohanded/fireaxe/energy - name = "energy fire axe" - desc = "A massive, two handed, energy-based hardlight axe capable of cutting through solid metal. 'Glory to atmosia' is carved on the side of the handle." - icon = 'icons/obj/weapons/energy.dmi' - icon_state = "energy-fireaxe0" - force_wielded = 25 - armour_penetration = 50 // Probably doesn't care much for armor given how it can destroy solid metal structures - block_chance = 50 // Big handle and large flat energy blade, good for blocking things - heat = 1800 // It's a FIRE axe - w_class = WEIGHT_CLASS_NORMAL - var/w_class_on = WEIGHT_CLASS_BULKY - hitsound = "swing_hit" - wieldsound = 'sound/weapons/saberon.ogg' - unwieldsound = 'sound/weapons/saberoff.ogg' - light_system = MOVABLE_LIGHT - light_range = 6 //This is NOT a stealthy weapon - light_color = "#ff4800" //red-orange - light_on = FALSE - sharpness = SHARP_NONE - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/twohanded/fireaxe/energy/wield(mob/living/carbon/M) //Specific wield () to switch hitsounds. - ..() - if(wielded) - sharpness = SHARP_EDGED - w_class = w_class_on - hitsound = 'sound/weapons/blade1.ogg' - START_PROCESSING(SSobj, src) - set_light_on(TRUE) - -/obj/item/twohanded/fireaxe/energy/unwield() //Specific unwield () to switch hitsounds. - sharpness = initial(sharpness) - w_class = initial(w_class) - ..() - hitsound = "swing_hit" - STOP_PROCESSING(SSobj, src) - set_light_on(FALSE) - -/obj/item/twohanded/fireaxe/energy/attack(mob/living/M, mob/living/user) - ..() - M.ignite_mob() // Ignites you if you're flammable - -/obj/item/twohanded/fireaxe/energy/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded && !QDELETED(A)) // Does x2 damage against inanimate objects like machines, structures, mechs, etc - if(isobj(A) && !isitem(A)) - var/obj/O = A - O.take_damage(force, BRUTE, MELEE, FALSE, null, armour_penetration) - -/obj/item/twohanded/fireaxe/energy/update_icon(updates=ALL) - . = ..() - icon_state = "energy-fireaxe[wielded]" - SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) - -/obj/item/twohanded/fireaxe/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) - if(!wielded) - return 0 // large energy blade can only block stuff if it's actually on - return ..() - -/obj/item/twohanded/fireaxe/energy/ignition_effect(atom/A, mob/user) - if(!wielded) - return "[user] tries to light [A] with [src] while it's off. Nothing happens." - playsound(loc, hitsound, get_clamped_volume(), 1, -1) - return "[user] casually raises [src] up to [user.p_their()] face and lights [A]. Hot damn." - -/obj/item/twohanded/fireaxe/energy/is_hot() - if(!wielded) - return FALSE // Shouldn't be able to ignite stuff if it's off - ..() - -/obj/item/twohanded/fireaxe/energy/process() - if(!wielded) - STOP_PROCESSING(SSobj, src) - return PROCESS_KILL - open_flame(heat) - -/* - * Double-Bladed Energy Swords - Cheridan - */ -/obj/item/twohanded/dualsaber - icon = 'icons/obj/weapons/energy.dmi' - icon_state = "dualsaber0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "double-bladed energy sword" - desc = "A more powerful version on the energy sword, it is more capable of blocking energy projectiles than its single bladed counterpart. 'At last we will have revenge' is carved on the side of the handle." - force = 3 - throwforce = 5 - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - var/w_class_on = WEIGHT_CLASS_BULKY - force_wielded = 31 - wieldsound = 'sound/weapons/saberon.ogg' - unwieldsound = 'sound/weapons/saberoff.ogg' - hitsound = "swing_hit" - armour_penetration = 35 - var/saber_color = "green" - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 75 - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) - resistance_flags = FIRE_PROOF - light_system = MOVABLE_LIGHT - light_range = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD - light_color = "#00ff00" //green - light_on = FALSE - wound_bonus = -10 - bare_wound_bonus = 20 - var/hacked = FALSE - var/list/possible_colors = list("red", "blue", "green", "purple") - -/obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user) - if(wielded) - user.visible_message(span_suicide("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!")) - - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code - var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) - B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea - var/randdir - for(var/i in 1 to 24)//like a headless chicken! - if(user.is_holding(src)) - randdir = pick(GLOB.alldirs) - user.Move(get_step(user, randdir),randdir) - user.emote("spin") - if (i == 3 && myhead) - myhead.drop_limb() - sleep(0.3 SECONDS) - else - user.visible_message(span_suicide("[user] panics and starts choking to death!")) - return OXYLOSS - - - else - user.visible_message(span_suicide("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!")) - return BRUTELOSS - -/obj/item/twohanded/dualsaber/Initialize(mapload) - . = ..() - if(LAZYLEN(possible_colors)) - saber_color = pick(possible_colors) - var/new_color - switch(saber_color) - if("red") - new_color = LIGHT_COLOR_RED - if("green") - new_color = LIGHT_COLOR_GREEN - if("blue") - new_color = LIGHT_COLOR_LIGHT_CYAN - if("purple") - new_color = LIGHT_COLOR_LAVENDER - set_light_color(new_color) - -/obj/item/twohanded/dualsaber/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/twohanded/dualsaber/update_icon(updates=ALL) - . = ..() - if(wielded) - icon_state = "dualsaber[saber_color][wielded]" - else - icon_state = "dualsaber0" - SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) - -/obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) - if(user.has_dna()) - if(user.dna.check_mutation(HULK) || user.dna.check_mutation(ACTIVE_HULK)) - to_chat(user, span_warning("You grip the blade too hard and accidentally close it!")) - unwield() - return - ..() - if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40)) - impale(user) - return - if((wielded) && prob(50)) - INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) - -/obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user) - for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH)) - user.setDir(i) - if(i == WEST) - user.emote("flip") - sleep(0.1 SECONDS) - -/obj/item/twohanded/dualsaber/proc/impale(mob/living/user) - to_chat(user, span_warning("You twirl around a bit before losing your balance and impaling yourself on [src].")) - if (force_wielded) - user.take_bodypart_damage(20,25,check_armor = TRUE) - else - user.adjustStaminaLoss(25) - -/obj/item/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - return ..() - return 0 - -/obj/item/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up - if(wielded) - to_chat(user, span_warning("You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!")) - return 1 - -/obj/item/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds. - if(M.has_dna()) - if(M.dna.check_mutation(HULK) || M.dna.check_mutation(ACTIVE_HULK)) - to_chat(M, span_warning("You lack the grace to wield this!")) - return - ..() - if(wielded) - sharpness = SHARP_EDGED - w_class = w_class_on - hitsound = 'sound/weapons/blade1.ogg' - START_PROCESSING(SSobj, src) - set_light_on(TRUE) - -/obj/item/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds. - sharpness = initial(sharpness) - w_class = initial(w_class) - ..() - hitsound = "swing_hit" - STOP_PROCESSING(SSobj, src) - set_light_on(FALSE) - -/obj/item/twohanded/dualsaber/process() - if(wielded) - if(hacked) - light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER) - open_flame() - else - STOP_PROCESSING(SSobj, src) - -/obj/item/twohanded/dualsaber/IsReflect() - if(wielded) - return TRUE - -/obj/item/twohanded/dualsaber/ignition_effect(atom/A, mob/user) - // same as /obj/item/melee/transforming/energy, mostly - if(!wielded) - return "" - var/in_mouth = "" - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.wear_mask) - in_mouth = ", barely missing [user.p_their()] nose" - . = span_warning("[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process.") - playsound(loc, hitsound, get_clamped_volume(), 1, -1) - add_fingerprint(user) - // Light your candles while spinning around the room - INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) - -/obj/item/twohanded/dualsaber/green - possible_colors = list("green") - -/obj/item/twohanded/dualsaber/red - possible_colors = list("red") - -/obj/item/twohanded/dualsaber/blue - possible_colors = list("blue") - -/obj/item/twohanded/dualsaber/purple - possible_colors = list("purple") - -/obj/item/twohanded/dualsaber/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!hacked) - hacked = TRUE - to_chat(user, span_warning("2XRNBW_ENGAGE")) - saber_color = "rainbow" - update_appearance(UPDATE_ICON) - else - to_chat(user, span_warning("It's starting to look like a triple rainbow - no, nevermind.")) - else - return ..() - -/obj/item/twohanded/dualsaber/makeshift - name = "makeshift double-bladed energy sword" - desc = "Two energy swords taped crudely together. 'at last we finally get some revenge' is scribbled on the side with crayon." - force_wielded = 27 //total of 30 to be equal to an esword, it's literally just two duct taped together - -/obj/item/twohanded/dualsaber/makeshift/IsReflect()//only 50% chance to reflect, so it still has the cool effect, but not 100% chance - if(prob(50)) - return ..() - return FALSE - -//spears -/obj/item/twohanded/spear - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "spearglass0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - force = 10 - max_integrity = 100 - weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 2, DAMAGE_HIGH = 5) - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 8 - throwforce = 20 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 3) - armour_penetration = 10 - materials = list(/datum/material/iron=1150, /datum/material/glass=2075) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = SHARP_EDGED - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) - break_message = "%SRC's cable binding suddenly snaps" - var/war_cry = "AAAAARGH!!!" - var/icon_prefix = "spearglass" - wound_bonus = -15 - bare_wound_bonus = 15 - -/obj/item/twohanded/spear/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. - -/obj/item/twohanded/spear/suicide_act(mob/living/carbon/user) - user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return BRUTELOSS - -/obj/item/twohanded/spear/Initialize(mapload) - . = ..() - AddComponent(/datum/component/jousting) - -/obj/item/twohanded/spear/update_icon(updates=ALL) - . = ..() - icon_state = "[icon_prefix][wielded]" - -/obj/item/twohanded/spear/deconstruct() //we drop our rod and maybe the glass shard used - new /obj/item/stack/rods(get_turf(src)) - if(!prob(20)) //20% chance to save our spearhead - break_message += " and its head smashes into pieces!" - return ..() - var/spearhead = icon_prefix == "spear_plasma" ? /obj/item/shard/plasma : /obj/item/shard //be honest we have this stored //we do NOT have this stored - new spearhead(get_turf(src)) - break_message += "!" - ..() - -/obj/item/twohanded/spear/CheckParts(list/parts_list) - var/obj/item/shard/tip = locate() in parts_list - if (istype(tip, /obj/item/shard/plasma)) - force_wielded += 1 - force += 1 - throwforce += 1 - righthand_file = 'yogstation/icons/mob/inhands/weapons/polearms_righthand.dmi' //yogs - mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' //yogs - icon_prefix = "spearplasma" - update_appearance(UPDATE_ICON) - qdel(tip) - var/obj/item/grenade/G = locate() in parts_list - if(G) - var/obj/item/twohanded/spear/explosive/lance = new /obj/item/twohanded/spear/explosive(src.loc, G) - lance.force_wielded = force_wielded - lance.force = force - lance.throwforce = throwforce - lance.icon_prefix = icon_prefix - parts_list -= G - qdel(src) - ..() - - -/obj/item/twohanded/spear/explosive - name = "explosive lance" - var/obj/item/grenade/explosive = null - -/obj/item/twohanded/spear/explosive/Initialize(mapload, obj/item/grenade/G) - . = ..() - if (!G) - G = new /obj/item/grenade/iedcasing() //For admin-spawned explosive lances - G.forceMove(src) - explosive = G - desc = "A makeshift spear with [G] attached to it" - update_appearance(UPDATE_ICON) - -/obj/item/twohanded/spear/explosive/suicide_act(mob/living/carbon/user) - user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(user) - explosive.prime() - user.gib() - qdel(src) - return BRUTELOSS - -/obj/item/twohanded/spear/explosive/examine(mob/user) - . = ..() - . += span_notice("Alt-click to set your war cry.") - -/obj/item/twohanded/spear/explosive/update_icon(updates=ALL) - . = ..() - icon_state = "spearbomb[wielded]" - -/obj/item/twohanded/spear/explosive/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - ..() - if(istype(user) && loc == user) - var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) - if(input) - src.war_cry = input - -/obj/item/twohanded/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(AM) - explosive.prime() - qdel(src) - -// CHAINSAW - -/datum/action/item_action/startchainsaw - name = "Pull The Starting Cord" - -/obj/item/twohanded/required/chainsaw - name = "chainsaw" - desc = "A versatile power tool. Useful for limbing trees and delimbing humans." - icon = 'icons/obj/tools.dmi' - icon_state = "chainsaw_off" - var/icon_name = "chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - flags_1 = CONDUCT_1 - force = 13 - var/force_on = 24 - w_class = WEIGHT_CLASS_HUGE - throwforce = 13 - throw_speed = 2 - throw_range = 4 - materials = list(/datum/material/iron=13000) - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = "swing_hit" - sharpness = SHARP_EDGED - actions_types = list(/datum/action/item_action/startchainsaw) - var/on = FALSE - -/obj/item/twohanded/required/chainsaw/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 30, 100, 0, 'sound/weapons/chainsawhit.ogg', TRUE) - -/obj/item/twohanded/required/chainsaw/suicide_act(mob/living/carbon/user) - if(on) - user.visible_message(span_suicide("[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/chainsawhit.ogg', 100, 1) - var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) - if(myhead) - myhead.dismember() - else - user.visible_message(span_suicide("[user] smashes [src] into [user.p_their()] neck, destroying [user.p_their()] esophagus! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/genhit1.ogg', 100, 1) - return(BRUTELOSS) - -/obj/item/twohanded/required/chainsaw/attack_self(mob/user) - on = !on - to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]") - force = on ? force_on : initial(force) - throwforce = on ? force_on : initial(force) - icon_state = "[icon_name]_[on ? "on" : "off"]" - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.butchering_enabled = on - - if(on) - hitsound = 'sound/weapons/chainsawhit.ogg' - else - hitsound = "swing_hit" - - if(src == user.get_active_held_item()) //update inhands - user.update_inv_hands() - for(var/X in actions) - var/datum/action/A = X - A.build_all_button_icons() - -/obj/item/twohanded/required/chainsaw/doomslayer - name = "THE GREAT COMMUNICATOR" - desc = span_warning("VRRRRRRR!!!") - armour_penetration = 100 - force_on = 30 - -/obj/item/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message(span_danger("Ranged attacks just make [owner] angrier!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) - return 1 - return 0 - -/obj/item/twohanded/required/chainsaw/demon - name = "demon chainsaw" - desc = "Show me your dreams." - icon_state = "demon_off" - force_on = 30 - icon_name = "demon" - -/obj/item/twohanded/required/chainsaw/demon/Initialize(mapload) - . = ..() - AddComponent(/datum/component/lifesteal, 30) - -//GREY TIDE -/obj/item/twohanded/spear/grey_tide - icon_state = "spearglass0" - name = "\improper Grey Tide" - desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." - force = 15 - force_wielded = 10 - weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - throwforce = 20 - throw_speed = 4 - attack_verb = list("gored") - -/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) - . = ..() - if(!proximity) - return - user.faction |= "greytide([REF(user)])" - if(isliving(AM)) - var/mob/living/L = AM - if(istype (L, /mob/living/simple_animal/hostile/illusion)) - return - if(!L.stat && prob(50)) - var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) - M.faction = user.faction.Copy() - M.Copy_Parent(user, 100, user.health/2.5, 12, 30) - M.GiveTarget(L) - -/obj/item/twohanded/pitchfork - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "pitchfork0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "pitchfork" - desc = "A simple tool used for moving hay." - force = 7 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - force_wielded = 8 - attack_verb = list("attacked", "impaled", "pierced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = SHARP_POINTY - max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) - resistance_flags = FIRE_PROOF - -/obj/item/twohanded/pitchfork/trident - icon_state = "trident" - name = "trident" - desc = "A trident recovered from the ruins of atlantis" - slot_flags = ITEM_SLOT_BELT - force = 14 - throwforce = 23 - force_wielded = 6 - -/obj/item/twohanded/pitchfork/demonic - name = "demonic pitchfork" - desc = "A red pitchfork, it looks like the work of the devil." - force = 19 - throwforce = 24 - force_wielded = 6 - light_system = MOVABLE_LIGHT - light_range = 3 - light_power = 6 - light_color = LIGHT_COLOR_RED - -/obj/item/twohanded/pitchfork/demonic/greater - force = 24 - throwforce = 50 - force_wielded = 10 - -/obj/item/twohanded/pitchfork/demonic/ascended - force = 100 - throwforce = 100 - force_wielded = 500000 // Kills you DEAD. - -/obj/item/twohanded/pitchfork/update_icon(updates=ALL) - . = ..() - icon_state = "pitchfork[wielded]" - -/obj/item/twohanded/pitchfork/suicide_act(mob/user) - user.visible_message(span_suicide("[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return (BRUTELOSS) - -/obj/item/twohanded/pitchfork/demonic/pickup(mob/living/user) - . = ..() - if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) - var/mob/living/U = user - U.visible_message(span_warning("As [U] picks [src] up, [U]'s arms briefly catch fire."), \ - span_warning("\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"")) - if(ishuman(U)) - var/mob/living/carbon/human/H = U - H.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - U.adjustFireLoss(rand(force/2,force)) - -/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul() && !is_devil(user)) - to_chat(user, "[src] burns in your hands.") - user.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - ..() - -/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !wielded) - return - if(iswallturf(target)) - var/turf/closed/wall/W = target - user.visible_message(span_danger("[user] blasts \the [target] with \the [src]!")) - playsound(target, 'sound/magic/disintegrate.ogg', 100, 1) - W.break_wall() - W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - return - -//HF blade - -/obj/item/twohanded/vibro_weapon - icon = 'icons/obj/weapons/swords.dmi' - icon_state = "hfrequency0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "vibro sword" - desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." - force = 20 - force_wielded = 20 - armour_penetration = 100 - block_chance = 40 - throwforce = 20 - throw_speed = 4 - sharpness = SHARP_EDGED - attack_verb = list("cut", "sliced", "diced") - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/twohanded/vibro_weapon/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, 20, 105) - -/obj/item/twohanded/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(wielded || attack_type != PROJECTILE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) - return 1 - else - owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!")) - return 1 - return 0 - -/obj/item/twohanded/vibro_weapon/update_icon(updates=ALL) - . = ..() - icon_state = "hfrequency[wielded]" - -/obj/item/twohanded/vibro_weapon/wizard - desc = "A blade that was mastercrafted by a legendary blacksmith. Its' enchantments let it slash through anything." - force = 8 - throwforce = 20 - wound_bonus = 20 - bare_wound_bonus = 25 - -/obj/item/twohanded/vibro_weapon/wizard/wizard/attack_self(mob/user, modifiers) - if(!iswizard(user)) - balloon_alert(user, "you're too weak!") - return - return ..() - -/* - * Bone Axe - */ -/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. - icon_state = "bone_axe0" - name = "bone axe" - desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." - force_wielded = 18 - -/obj/item/twohanded/fireaxe/boneaxe/update_icon(updates=ALL) - . = ..() - icon_state = "bone_axe[wielded]" - -/* - * Bone Spear - */ -/obj/item/twohanded/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "bone_spear0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "bone spear" - desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." - force = 11 - max_integrity = 100 - weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 1, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - wielded_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0.4, ENCUMBRANCE_TIME = 5, REACH = 2, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 9 //I have no idea how to balance - throwforce = 22 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 3) - armour_penetration = 15 //Enhanced armor piercing - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = SHARP_EDGED - -/obj/item/twohanded/bonespear/update_icon(updates=ALL) - . = ..() - icon_state = "bone_spear[wielded]" - -/obj/item/twohanded/bonespear/chitinspear //like a mix of a bone spear and bone axe, but more like a bone spear. And better. - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "chitin_spear0" - name = "chitin spear" - desc = "A well constructed spear with a sharpened edge akin to a naginata, making it equally great for slicing and throwing." - force = 13 - force_wielded = 10 - throwforce = 25 - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored", "sliced", "ripped", "cut") - -/obj/item/twohanded/bonespear/chitinspear/update_icon(updates=ALL) - . = ..() - icon_state = "chitin_spear[wielded]" - -/obj/item/twohanded/binoculars - name = "binoculars" - desc = "Used for long-distance surveillance." - icon = 'icons/obj/tools.dmi' - item_state = "binoculars" - icon_state = "binoculars" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - var/mob/listeningTo - var/zoom_out_amt = 6 - var/zoom_amt = 10 - -/obj/item/twohanded/binoculars/Destroy() - listeningTo = null - return ..() - -/obj/item/twohanded/binoculars/wield(mob/user) - . = ..() - if(!wielded) - return - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(unwield)) - RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate)) - listeningTo = user - user.visible_message("[user] holds [src] up to [user.p_their()] eyes.","You hold [src] up to your eyes.") - item_state = "binoculars_wielded" - user.regenerate_icons() - user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, user.dir) - -/obj/item/twohanded/binoculars/unwield(mob/user) - . = ..() - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE) - listeningTo = null - item_state = "binoculars" - user.regenerate_icons() - user.client.view_size.zoomIn() - -/obj/item/twohanded/binoculars/proc/rotate(atom/thing, old_dir, new_dir) - if(ismob(thing)) - var/mob/lad = thing - lad.regenerate_icons() - lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir) - -/obj/item/twohanded/bamboospear - icon = 'icons/obj/weapons/spears.dmi' - icon_state = "bamboo_spear0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "bamboo spear" - desc = "A haphazardly-constructed bamboo stick with a sharpened tip, ready to poke holes into unsuspecting people." - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - force_wielded = 8 - throwforce = 22 - throw_speed = 4 - embedding = list("embedded_impact_pain_multiplier" = 2) - armour_penetration = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = SHARP_EDGED - -/obj/item/twohanded/bamboospear/update_icon(updates=ALL) - . = ..() - icon_state = "bamboo_spear[wielded]" - -/* - * Vxtvul Hammer - */ - -/datum/action/item_action/charge_hammer - name = "Charge the Blast Pads" - -/datum/action/item_action/charge_hammer/Trigger() - var/obj/item/twohanded/vxtvulhammer/vxtvulhammer = target - if(istype(vxtvulhammer)) - vxtvulhammer.charge_hammer(owner) - -/obj/item/twohanded/vxtvulhammer - icon = 'icons/obj/weapons/misc.dmi' - icon_state = "vxtvul_hammer0-0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - name = "Vxtvul Hammer" - desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. \ - While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." - force = 4 //It's heavy as hell - force_wielded = 24 - armour_penetration = 50 //Designed for shattering walls in a single blow, I don't think it cares much about armor - throwforce = 18 - attack_verb = list("attacked", "hit", "struck", "bludgeoned", "bashed", "smashed") - block_chance = 30 //Only works in melee, but I bet your ass you could raise its handle to deflect a sword - sharpness = SHARP_NONE //Blunt, breaks bones - wound_bonus = -10 - bare_wound_bonus = 15 - max_integrity = 200 - resistance_flags = ACID_PROOF | FIRE_PROOF - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/effects/hammerhitbasic.ogg' - slot_flags = ITEM_SLOT_BACK - actions_types = list(/datum/action/item_action/charge_hammer) - light_system = MOVABLE_LIGHT - light_color = LIGHT_COLOR_HALOGEN - light_range = 2 - light_power = 2 - var/datum/effect_system/spark_spread/spark_system //It's a surprise tool that'll help us later - var/charging = FALSE - var/supercharged = FALSE - var/toy = FALSE - -/obj/item/twohanded/vxtvulhammer/Initialize(mapload) //For the sparks when you begin to charge it - . = ..() - spark_system = new - spark_system.set_up(5, 0, src) - spark_system.attach(src) - set_light_on(FALSE) - -/obj/item/twohanded/vxtvulhammer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK || !wielded) //Doesn't work against ranged or if it's not wielded - final_block_chance = 0 //Please show me how you can block a bullet with an industrial hammer I would LOVE to see it - return ..() - -/obj/item/twohanded/vxtvulhammer/Destroy() //Even though the hammer won't probably be destroyed, Everâ„¢ - QDEL_NULL(spark_system) - return ..() - -/obj/item/twohanded/vxtvulhammer/update_icon(updates=ALL) - . = ..() - icon_state = "vxtvul_hammer[wielded]-[supercharged]" - -/obj/item/twohanded/vxtvulhammer/examine(mob/living/carbon/user) - . = ..() - if(supercharged) - . += "Electric sparks are bursting from the blast pads!" - -/obj/item/twohanded/vxtvulhammer/unwield(mob/living/carbon/user) - ..() - if(supercharged) //So you can't one-hand the charged hit - to_chat(user, span_notice("Your hammer loses its power as you adjust your grip.")) - user.visible_message(span_warning("The sparks from [user]'s hammer suddenly stop!")) - supercharge() - if(charging) //So you can't one-hand while charging - to_chat(user, span_notice("You flip the switch off as you adjust your grip.")) - user.visible_message(span_warning("[user] flicks the hammer off!")) - charging = FALSE - -/obj/item/twohanded/vxtvulhammer/attack(mob/living/carbon/human/target, mob/living/carbon/user) //This doesn't consider objects, only people - if (charging) //So you can't attack while charging - to_chat(user, span_notice("You flip the switch off before your attack.")) - user.visible_message(span_warning("[user] flicks the hammer off and raises it!")) - charging = FALSE - return ..() - -/obj/item/twohanded/vxtvulhammer/AltClick(mob/living/carbon/user) - charge_hammer(user) - -/obj/item/twohanded/vxtvulhammer/proc/supercharge() //Proc to handle when it's charged for light + sprite + damage - supercharged = !supercharged - if(supercharged) - set_light_on(TRUE) //Glows when charged - if(!toy) - force = initial(force) + (wielded ? force_wielded : 0) + 12 //12 additional damage for a total of 40 has to be a massively irritating check because of how force_wielded works - armour_penetration = 100 - else - set_light_on(FALSE) - force = initial(force) + (wielded ? force_wielded : 0) - armour_penetration = initial(armour_penetration) - update_appearance(UPDATE_ICON) - -/obj/item/twohanded/vxtvulhammer/proc/charge_hammer(mob/living/carbon/user) - if(!wielded) - to_chat(user, span_warning("The hammer must be wielded in two hands in order to charge it!")) - return - if(supercharged) - to_chat(user, span_warning("The hammer is already supercharged!")) - else - charging = TRUE - to_chat(user, span_notice("You begin charging the weapon, concentration flowing into it...")) - user.visible_message(span_warning("[user] flicks the hammer on, tilting [user.p_their()] head down as if in thought.")) - spark_system.start() //Generates sparks when you charge - if(!do_mob(user, user, ispreternis(user)? 5 SECONDS : 6 SECONDS)) - if(!charging) //So no duplicate messages - return - to_chat(user, span_notice("You flip the switch off as you lose your focus.")) - user.visible_message(span_warning("[user]'s concentration breaks!")) - charging = FALSE - if(!charging) //No charging for you if you cheat - return //Has to double-check return because attacking or one-handing won't actually proc !do_mob, so the channel will seem to continue despite the message that pops out, but this actually ensures that it won't charge despite attacking or one-handing - to_chat(user, span_notice("You complete charging the weapon.")) - user.visible_message(span_warning("[user] looks up as [user.p_their()] hammer begins to crackle and hum!")) - playsound(loc, 'sound/magic/lightningshock.ogg', 60, TRUE) //Mainly electric crack - playsound(loc, 'sound/effects/magic.ogg', 40, TRUE) //Reverb undertone - supercharge() - charging = FALSE - -/obj/item/twohanded/vxtvulhammer/afterattack(atom/target, mob/living/carbon/user, proximity) //Afterattack to properly be able to smack walls - . = ..() - if(!proximity) - return - if(isfloorturf(target)) //So you don't just lose your supercharge if you miss and wack the floor. No I will NOT let people space with this thing - return - - if(charging) //Needs a special snowflake check if you hit something that isn't a mob - if(ismachinery(target) || isstructure(target) || ismecha(target)) - to_chat(user, span_notice("You flip the switch off after your blow.")) - user.visible_message(span_warning("[user] flicks the hammer off after striking [target]!")) - charging = FALSE - - if(supercharged) - var/turf/target_turf = get_turf(target) //Does the nice effects first so whatever happens to what's about to get clapped doesn't affect it - var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) - K.color = color - playsound(loc, 'sound/effects/powerhammerhit.ogg', 65, FALSE) //Mainly this sound - playsound(loc, 'sound/effects/explosion3.ogg', 20, TRUE) //Bit of a reverb - supercharge() //At start so it doesn't give an unintentional message if you hit yourself - - if(ismachinery(target) && !toy) - var/obj/machinery/machine = target - machine.take_damage(machine.max_integrity * 2, armour_penetration = 100) //Should destroy machines in one hit - if(istype(target, /obj/machinery/door)) - for(var/obj/structure/door_assembly/door in target_turf) //Will destroy airlock assembly left behind, but drop the parts - door.take_damage(door.max_integrity * 2) - else - for(var/obj/structure/frame/base in target_turf) //Will destroy machine or computer frame left behind, but drop the parts - base.take_damage(base.max_integrity * 2) - for(var/obj/structure/light_construct/light in target_turf) //Also light frames because why not - light.take_damage(light.max_integrity * 2) - user.visible_message(span_danger("The hammer thunders against the [target.name], demolishing it!")) - - else if(isstructure(target) && !toy) - var/obj/structure/struct = target - struct.take_damage(struct.max_integrity * 2, armour_penetration = 100) //Destroy structures in one hit too - if(istype(target, /obj/structure/table)) - for(var/obj/structure/table_frame/platform in target_turf) - platform.take_damage(platform.max_integrity * 2, armour_penetration = 100) //Destroys table frames left behind - user.visible_message(span_danger("The hammer thunders against the [target.name], destroying it!")) - - else if(iswallturf(target) && !toy) - var/turf/closed/wall/fort = target - fort.dismantle_wall(1) //Deletes the wall but drop the materials, just like destroying a machine above - user.visible_message(span_danger("The hammer thunders against the [target.name], shattering it!")) - playsound(loc, 'sound/effects/meteorimpact.ogg', 50, TRUE) //Otherwise there's no sound for hitting the wall, since it's just dismantled - - else if(ismecha(target) && !toy) - var/obj/mecha/mech = target - mech.take_damage(mech.max_integrity/3, armour_penetration = armour_penetration) //A third of its max health is dealt as an untyped damage, in addition to the normal damage of the weapon (which has high AP) - user.visible_message(span_danger("The hammer thunders as it massively dents the plating of the [target.name]!")) - - else if(isliving(target)) - var/atom/throw_target = get_edge_target_turf(target, user.dir) - var/mob/living/victim = target - if(toy) - ADD_TRAIT(victim, TRAIT_IMPACTIMMUNE, "Toy Hammer") - victim.safe_throw_at(throw_target, rand(1,2), 3, callback = CALLBACK(src, PROC_REF(afterimpact), victim)) - else - victim.throw_at(throw_target, 15, 5) //Same distance as maxed out power fist with three extra force - victim.Paralyze(2 SECONDS) - user.visible_message(span_danger("The hammer thunders as it viscerally strikes [target.name]!")) - to_chat(victim, span_userdanger("Agony sears through you as [user]'s blow cracks your body off its feet!")) - victim.emote("scream") - -/obj/item/twohanded/vxtvulhammer/proc/afterimpact(mob/living/victim) - REMOVE_TRAIT(victim, TRAIT_IMPACTIMMUNE, "Toy Hammer") - -/obj/item/twohanded/vxtvulhammer/pirate //Exact same but different text and sprites - icon_state = "vxtvul_hammer_pirate0-0" - name = "pirate Vxtvul Hammer" - desc = "A relic sledgehammer with charge packs wired to two blast pads on its head. This one has been defaced by Syndicate pirates. \ - While wielded in two hands, the user can charge a massive blow that will shatter construction and hurl bodies." - -/obj/item/twohanded/vxtvulhammer/pirate/update_icon(updates=ALL) - . = ..() - icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" - -// Baseball Bats -/obj/item/twohanded/required/baseball_bat - name = "baseball bat" - desc = "A traditional tool for a game of Baseball. Modern wood isn't very strong, try not to crack the bat!" - icon = 'icons/obj/weapons/misc.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 16 - wound_bonus = 5 - armour_penetration = -30 - bare_wound_bonus = 40 - throwforce = 0 - attack_verb = list("beat", "smacked") - sharpness = SHARP_NONE - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - var/flimsy = TRUE //spesswood? only used for knockback check now - -/obj/item/twohanded/required/baseball_bat/homerun - name = "home run bat" - desc = "This thing looks dangerous... Dangerously good at baseball, that is." - homerun_able = 1 - - -/obj/item/twohanded/required/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, span_notice("You're already ready to do a home run!")) - return - to_chat(user, span_warning("You begin gathering strength...")) - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1) - if(do_after(user, 9 SECONDS, src)) - to_chat(user, span_userdanger("You gather power! Time for a home run!")) - homerun_ready = 1 - ..() - -/obj/item/twohanded/required/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(target == user) - return - if(homerun_ready) - user.visible_message(span_userdanger("It's a home run!")) - target.throw_at(throw_target, rand(8,10), 14, user) - SSexplosions.medturf += throw_target - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) - homerun_ready = 0 - return - else if(!flimsy && !target.anchored) - var/whack_speed = (prob(50) ? 1 : 6) - target.throw_at(throw_target, rand(1, 2), whack_speed, user) // sorry friends, 7 speed batting caused wounds to absolutely delete whoever you knocked your target into (and said target) - -/obj/item/twohanded/required/baseball_bat/metal_bat - name = "titanium baseball bat" - desc = "This bat is made of titanium, it feels light yet strong." - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - hitsound = 'yogstation/sound/weapons/bat_hit.ogg' - force = 18 - throwforce = 0 - flimsy = FALSE - wound_bonus = 15 - armour_penetration = -25 - bare_wound_bonus = 50 - w_class = WEIGHT_CLASS_HUGE - -/obj/item/twohanded/required/baseball_bat/metal_bat/attack(mob/living/target, mob/living/user) - . = ..() - if(user.zone_selected == BODY_ZONE_HEAD && get_location_accessible(target, BODY_ZONE_HEAD)) - if(prob(30)) - target.Paralyze(40) - else - return TRUE - -/obj/item/twohanded/bigspoon - name = "comically large spoon" - desc = "For when you're only allowed one spoonful of something." - icon = 'yogstation/icons/obj/kitchen.dmi' - mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' - icon_state = "bigspoon" - item_state = "bigspoon0" - lefthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_lefthand.dmi' - righthand_file = 'yogstation/icons/mob/inhands/weapons/bigspoon_righthand.dmi' - force = 2 //It's a big unwieldy for one hand - force_wielded = 16 //cleaver is 15 and sharp, this at least gets to be on-par with a nullrod - sharpness = SHARP_NONE //issa spoon - armour_penetration = -50 //literally couldn't possibly be a worse weapon for hitting armour - throwforce = 1 //it's terribly weighted, what do you expect? - hitsound = 'sound/items/trayhit1.ogg' - attack_verb = list("scooped", "bopped", "spooned", "wacked") - block_chance = 30 //Only works in melee, but I bet your ass you could raise its handle to deflect a sword - wound_bonus = -10 - bare_wound_bonus = -15 - materials = list(/datum/material/iron=18000) - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK - -/obj/item/twohanded/bigspoon/update_icon(updates=ALL) - . = ..() - hitsound = wielded ? 'yogstation/sound/weapons/bat_hit.ogg' : 'sound/items/trayhit1.ogg' //big donk if wielded - item_state = "bigspoon[wielded]" //i don't know why it's item_state rather than icon_state like every other wielded weapon - -/* -Broom -*/ - -#define BROOM_PUSH_LIMIT 20 -/obj/item/twohanded/broom - name = "broom" - desc = "This is my BROOMSTICK! It can be used manually or braced with two hands to sweep items as you move." - icon = 'icons/obj/janitor.dmi' - icon_state = "broom0" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - force = 8 - throwforce = 10 - throw_speed = 3 - throw_range = 7 - w_class = WEIGHT_CLASS_BULKY - force_wielded = 4 - attack_verb = list("swept", "brushed off", "bludgeoned", "whacked") - resistance_flags = FLAMMABLE - -/obj/item/twohanded/broom/update_icon(updates=ALL) - . = ..() - icon_state = "broom[wielded]" - -/obj/item/twohanded/broom/wield(mob/user) - . = ..() - if(!wielded) - return - - to_chat(user, span_notice("You brace the [src] against the ground in a firm sweeping stance.")) - RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(sweep)) - -/obj/item/twohanded/broom/unwield(mob/user) - . = ..() - UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE) - -/obj/item/twohanded/broom/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - sweep(user, A) - -/obj/item/twohanded/broom/proc/sweep(mob/user, atom/A) - - var/turf/current_item_loc = isturf(A) ? A : get_turf(A) - if (!isturf(current_item_loc)) - return - var/turf/new_item_loc = get_step(current_item_loc, user.dir) - var/obj/machinery/disposal/bin/target_bin = locate(/obj/machinery/disposal/bin) in new_item_loc.contents - var/i = 1 - for (var/obj/item/garbage in current_item_loc.contents) - if (!garbage.anchored) - if (target_bin) - garbage.forceMove(target_bin) - else - garbage.Move(new_item_loc, user.dir) - i++ - if (i > BROOM_PUSH_LIMIT) - break - if (i > 1) - if (target_bin) - target_bin.update_appearance(UPDATE_ICON) - to_chat(user, span_notice("You sweep the pile of garbage into [target_bin].")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) - -/obj/item/twohanded/broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) //bless you whoever fixes this copypasta - J.put_in_cart(src, user) - J.mybroom=src - J.update_appearance(UPDATE_ICON) - -/obj/item/twohanded/broom/cyborg - name = "robotic push broom" - -/obj/item/twohanded/broom/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) - to_chat(user, span_notice("You cannot place your [src] into the [J]")) - return FALSE diff --git a/code/game/objects/items/two_handed/updatepaths.txt b/tools/mapmerge2/map_scripts/19365_twohanded.txt similarity index 52% rename from code/game/objects/items/two_handed/updatepaths.txt rename to tools/mapmerge2/map_scripts/19365_twohanded.txt index 9fcdc1249b8d..a6e0ddd7eddd 100644 --- a/code/game/objects/items/two_handed/updatepaths.txt +++ b/tools/mapmerge2/map_scripts/19365_twohanded.txt @@ -1,10 +1,10 @@ # start off with snowflake stuff we're changing the paths of -/obj/item/melee/spear/bonespear : /obj/item/melee/spear/bonespear -/obj/item/melee/spear/bonespear/chitinspear : /obj/item/melee/spear/bonespear/chitinspear -/obj/item/melee/spear/bamboospear : /obj/item/melee/spear/bamboospear +/obj/item/twohanded/bonespear : /obj/item/melee/spear/bonespear +/obj/item/twohanded/bonespear/chitinspear : /obj/item/melee/spear/bonespear/chitinspear +/obj/item/twohanded/bamboospear : /obj/item/melee/spear/bamboospear /obj/item/twohanded/required/cult_bastard : /obj/item/melee/cult_bastard -/obj/item/melee/chainsaw : /obj/item/melee/chainsaw +/obj/item/twohanded/required/chainsaw : /obj/item/melee/chainsaw # now we'll do the generic paths, removing 'required' entirely. diff --git a/yogstation/code/game/objects/items/fishing/rods.dm b/yogstation/code/game/objects/items/fishing/rods.dm index a07ffdafefaa..8b86eb1d03f5 100644 --- a/yogstation/code/game/objects/items/fishing/rods.dm +++ b/yogstation/code/game/objects/items/fishing/rods.dm @@ -214,7 +214,7 @@ update_appearance(UPDATE_ICON) user.regenerate_icons() -/obj/item/twohanded/fishingrod/collapsible/update_icon_state() +/obj/item/fishingrod/collapsible/update_icon_state() . = ..() item_state = opened ? "fishing_rod" : "" icon_state = "[rod_icon_state][opened ? "" : "_c"]" From cb267c175d0ef623914cba0b72082b3957f07468 Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Fri, 21 Jul 2023 20:39:43 -0400 Subject: [PATCH 11/15] merge conflicts --- code/game/objects/items/defib.dm | 2 +- code/game/objects/items/two_handed/broom.dm | 7 ++++--- code/game/objects/items/two_handed/dualsaber.dm | 5 +++-- code/game/objects/items/two_handed/fireaxe.dm | 4 ++-- code/game/objects/items/two_handed/highfrequencyblade.dm | 3 ++- code/game/objects/items/two_handed/spears.dm | 7 ++++--- yogstation/code/game/objects/items/wielded/big_spoon.dm | 3 ++- yogstation/code/game/objects/items/wielded/vxtvulhammer.dm | 5 +++-- 8 files changed, 21 insertions(+), 15 deletions(-) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index ccac49b718c1..700b8be2f630 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -314,7 +314,7 @@ defib = spawned_in forceMove(defib) busy = FALSE - update_icon() + update_appearance(UPDATE_ICON) /obj/item/shockpaddles/equipped(mob/user, slot) . = ..() diff --git a/code/game/objects/items/two_handed/broom.dm b/code/game/objects/items/two_handed/broom.dm index cf332b742e17..929c0759e5a9 100644 --- a/code/game/objects/items/two_handed/broom.dm +++ b/code/game/objects/items/two_handed/broom.dm @@ -26,7 +26,8 @@ unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ ) -/obj/item/broom/update_icon() +/obj/item/broom/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" /obj/item/broom/proc/on_wield(atom/source, mob/user) @@ -61,14 +62,14 @@ break if (i > 1) if (target_bin) - target_bin.update_icon() + target_bin.update_appearance(UPDATE_ICON) to_chat(user, span_notice("You sweep the pile of garbage into [target_bin].")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) /obj/item/broom/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) //bless you whoever fixes this copypasta J.put_in_cart(src, user) J.mybroom=src - J.update_icon() + J.update_appearance(UPDATE_ICON) /obj/item/broom/cyborg name = "robotic push broom" diff --git a/code/game/objects/items/two_handed/dualsaber.dm b/code/game/objects/items/two_handed/dualsaber.dm index 195b3fb35729..d4e0f6960e1f 100644 --- a/code/game/objects/items/two_handed/dualsaber.dm +++ b/code/game/objects/items/two_handed/dualsaber.dm @@ -86,7 +86,8 @@ user.visible_message(span_suicide("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!")) return BRUTELOSS -/obj/item/melee/dualsaber/update_icon() +/obj/item/melee/dualsaber/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) @@ -173,7 +174,7 @@ hacked = TRUE to_chat(user, span_warning("2XRNBW_ENGAGE")) saber_color = "rainbow" - update_icon() + update_appearance(UPDATE_ICON) else to_chat(user, span_warning("It's starting to look like a triple rainbow - no, nevermind.")) return diff --git a/code/game/objects/items/two_handed/fireaxe.dm b/code/game/objects/items/two_handed/fireaxe.dm index bf033fd54695..d61023b7b344 100644 --- a/code/game/objects/items/two_handed/fireaxe.dm +++ b/code/game/objects/items/two_handed/fireaxe.dm @@ -31,9 +31,9 @@ ) AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools -/obj/item/fireaxe/update_icon() +/obj/item/fireaxe/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" - return /obj/item/fireaxe/suicide_act(mob/user) user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/game/objects/items/two_handed/highfrequencyblade.dm b/code/game/objects/items/two_handed/highfrequencyblade.dm index ae1e86a5a7f9..5684a084ba55 100644 --- a/code/game/objects/items/two_handed/highfrequencyblade.dm +++ b/code/game/objects/items/two_handed/highfrequencyblade.dm @@ -26,7 +26,8 @@ ) AddComponent(/datum/component/butchering, 20, 105) -/obj/item/vibro_weapon/update_icon() +/obj/item/vibro_weapon/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" /obj/item/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) diff --git a/code/game/objects/items/two_handed/spears.dm b/code/game/objects/items/two_handed/spears.dm index 35879b75f7c1..1133aa0ee564 100644 --- a/code/game/objects/items/two_handed/spears.dm +++ b/code/game/objects/items/two_handed/spears.dm @@ -49,7 +49,8 @@ . = ..() AddComponent(/datum/component/jousting) -/obj/item/melee/spear/update_icon() +/obj/item/melee/spear/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" /obj/item/melee/spear/deconstruct() //we drop our rod and maybe the glass shard used @@ -71,7 +72,7 @@ righthand_file = 'yogstation/icons/mob/inhands/weapons/polearms_righthand.dmi' //yogs mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' //yogs base_icon_state = "spearplasma" - update_icon() + update_appearance(UPDATE_ICON) qdel(tip) var/obj/item/grenade/G = locate() in parts_list if(G && can_be_explosive) @@ -101,7 +102,7 @@ default_grenade.forceMove(src) explosive = default_grenade desc = "A makeshift spear with [default_grenade] attached to it" - update_icon() + update_appearance(UPDATE_ICON) /obj/item/melee/spear/explosive/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins to sword-swallow \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/yogstation/code/game/objects/items/wielded/big_spoon.dm b/yogstation/code/game/objects/items/wielded/big_spoon.dm index 21e3f2982dd9..ab205406bc64 100644 --- a/yogstation/code/game/objects/items/wielded/big_spoon.dm +++ b/yogstation/code/game/objects/items/wielded/big_spoon.dm @@ -36,5 +36,6 @@ /obj/item/bigspoon/proc/on_unwield(atom/source, mob/living/user) hitsound = initial(hitsound) -/obj/item/bigspoon/update_icon() +/obj/item/bigspoon/update_icon_state() + . = ..() item_state = "[base_icon_state]0" //i don't know why it's item_state rather than icon_state like every other wielded weapon //because you're changing in-hand icons not the inventory icon diff --git a/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm b/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm index 8b74bce9c8e6..61669d8568c3 100644 --- a/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm +++ b/yogstation/code/game/objects/items/wielded/vxtvulhammer.dm @@ -51,7 +51,8 @@ QDEL_NULL(spark_system) return ..() -/obj/item/melee/vxtvulhammer/update_icon() +/obj/item/melee/vxtvulhammer/update_icon_state() + . = ..() icon_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]-[supercharged]" /obj/item/melee/vxtvulhammer/examine(mob/living/carbon/user) @@ -95,7 +96,7 @@ set_light_on(FALSE) force = initial(force) + (HAS_TRAIT(src, TRAIT_WIELDED) ? force_wielded : 0) armour_penetration = initial(armour_penetration) - update_icon() + update_appearance(UPDATE_ICON) /obj/item/melee/vxtvulhammer/proc/charge_hammer(mob/living/carbon/user) if(!HAS_TRAIT(src, TRAIT_WIELDED)) From ec63202428099388dd958fd3a8da970d3bfd8418 Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Fri, 21 Jul 2023 21:33:25 -0400 Subject: [PATCH 12/15] Fixes in local testing --- code/datums/components/twohanded.dm | 2 +- code/game/objects/items/defib.dm | 28 ++++++------------- code/game/objects/items/toys.dm | 11 ++------ .../code/game/objects/items/fishing/rods.dm | 6 ++-- .../game/objects/items/wielded/big_spoon.dm | 1 + 5 files changed, 16 insertions(+), 32 deletions(-) diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 268d39996fbe..1525c282ec07 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -285,7 +285,7 @@ parent_item.name = "[initial(parent_item.name)]" // Update icons - parent_item.update_icon() + parent_item.update_appearance(UPDATE_ICON) if(istype(user)) // tk showed that we might not have a mob here if(user.get_item_by_slot(ITEM_SLOT_BACK) == parent) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 700b8be2f630..b666ae3b887a 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -58,6 +58,8 @@ powered = TRUE else powered = FALSE + if(istype(loc, /obj/machinery/defibrillator_mount)) + loc.update_appearance(UPDATE_ICON) return ..() /obj/item/defibrillator/update_overlays() @@ -282,7 +284,6 @@ desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." icon = 'icons/obj/defib.dmi' icon_state = "defibpaddles0" - item_state = "defibpaddles0" base_icon_state = "defibpaddles" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' @@ -310,11 +311,12 @@ force_wielded = 12, \ icon_wielded = "[base_icon_state]1", \ ) - if(check_defib_exists(spawned_in, src) && spawned_in) - defib = spawned_in - forceMove(defib) - busy = FALSE - update_appearance(UPDATE_ICON) + if(!req_defib) + return + if (!loc || !istype(loc, /obj/item/defibrillator)) //To avoid weird issues from admin spawns + return INITIALIZE_HINT_QDEL + defib = loc + busy = FALSE /obj/item/shockpaddles/equipped(mob/user, slot) . = ..() @@ -361,12 +363,8 @@ /obj/item/shockpaddles/update_icon_state() . = ..() icon_state = "[base_icon_state]0" - item_state = "[base_icon_state]0" if(cooldown) icon_state = "[base_icon_state][!!HAS_TRAIT(src, TRAIT_WIELDED)]_cooldown" - if(iscarbon(loc)) - var/mob/living/carbon/C = loc - C.update_inv_hands() /obj/item/shockpaddles/suicide_act(mob/user) if(req_defib && !defib.deductcharge(revivecost)) @@ -393,14 +391,6 @@ forceMove(defib) defib.update_appearance(UPDATE_ICON) -/obj/item/shockpaddles/proc/check_defib_exists(obj/item/defibrillator/spawned_in, mob/living/carbon/M, obj/O) - if(!req_defib) - return TRUE //If it doesn't need a defib, just say it exists - if(!spawned_in || !istype(spawned_in)) //To avoid weird issues from admin spawns - qdel(O) - return FALSE - return TRUE - /obj/item/shockpaddles/attack(mob/M, mob/user) if(busy) @@ -658,7 +648,6 @@ /obj/item/shockpaddles/cyborg name = "cyborg defibrillator paddles" icon_state = "defibpaddles0" - item_state = "defibpaddles0" req_defib = FALSE /obj/item/shockpaddles/cyborg/attack(mob/M, mob/user) @@ -678,7 +667,6 @@ desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively." combat = TRUE icon_state = "defibpaddles0" - item_state = "defibpaddles0" req_defib = FALSE #undef HALFWAYCRITDEATH diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 7b90c257b921..0bf579c41817 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -410,17 +410,12 @@ pirated = TRUE name = "toy pirate sledgehammer" desc += " This one looks different from the ones you see on commercials..." - icon_state = "vxtvul_hammer_pirate0-0" + base_icon_state = "vxtvul_hammer_pirate" + icon_state = "[base_icon_state]0-0" update_appearance(UPDATE_ICON) -/obj/item/melee/vxtvulhammer/toy/update_icon_state() - . = ..() - if(!pirated) - icon_state = "vxtvul_hammer_pirate[wielded]-[supercharged]" - else - icon_state = "vxtvul_hammer[wielded]-[supercharged]" - /obj/item/melee/vxtvulhammer/toy/pirate + base_icon_state = "vxtvul_hammer_pirate" pirated = TRUE /obj/item/toy/katana diff --git a/yogstation/code/game/objects/items/fishing/rods.dm b/yogstation/code/game/objects/items/fishing/rods.dm index 8b86eb1d03f5..80a4c449a9ba 100644 --- a/yogstation/code/game/objects/items/fishing/rods.dm +++ b/yogstation/code/game/objects/items/fishing/rods.dm @@ -180,10 +180,10 @@ name = "collapsible fishing rod" desc = "A collapsible fishing rod! This one can fit into your backpack for space hikes and the like." icon_state = "fishing_rod_collapse_c" + base_icon_state = "fishing_rod_collapse" fishing_power = 15 w_class = WEIGHT_CLASS_SMALL //it starts collapsed and small var/opened = FALSE - var/rod_icon_state = "fishing_rod_collapse" /obj/item/fishingrod/collapsible/attackby(obj/item/B, mob/user, params) @@ -217,7 +217,7 @@ /obj/item/fishingrod/collapsible/update_icon_state() . = ..() item_state = opened ? "fishing_rod" : "" - icon_state = "[rod_icon_state][opened ? "" : "_c"]" + icon_state = "[base_icon_state][opened ? "" : "_c"]" /obj/item/fishingrod/collapsible/attack_self(mob/user) if(!opened) @@ -235,5 +235,5 @@ name = "ol' reliable" desc = "Hey! I caught a miner!" icon_state = "fishing_rod_miningmedic_c" - rod_icon_state = "fishing_rod_miningmedic" + base_icon_state = "fishing_rod_miningmedic" fishing_power = 1 //Rescue Yo Miners Bitch Damn! Fuck You Doin Fishin For! diff --git a/yogstation/code/game/objects/items/wielded/big_spoon.dm b/yogstation/code/game/objects/items/wielded/big_spoon.dm index ab205406bc64..25fb6a13368e 100644 --- a/yogstation/code/game/objects/items/wielded/big_spoon.dm +++ b/yogstation/code/game/objects/items/wielded/big_spoon.dm @@ -26,6 +26,7 @@ AddComponent(/datum/component/two_handed, \ force_unwielded = 2, \ force_wielded = 16, \ + icon_wielded = "[base_icon_state]1", \ wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ ) From 885de1b61349e2136a4d7ff6ac2f5b0e38e57b0e Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sat, 22 Jul 2023 06:50:33 -0400 Subject: [PATCH 13/15] call parent --- code/game/objects/items/singularityhammer.dm | 2 ++ code/modules/mining/equipment/kinetic_crusher.dm | 1 + 2 files changed, 3 insertions(+) diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index a88cf6b70b49..63c629ed64ef 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -27,6 +27,7 @@ ) /obj/item/singularityhammer/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" /obj/item/singularityhammer/Destroy() @@ -103,6 +104,7 @@ ) /obj/item/mjolnir/update_icon_state() + . = ..() icon_state = "[base_icon_state]0" /obj/item/mjolnir/proc/shock(mob/living/target) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index db0506bd1aba..d953bda62c20 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -30,6 +30,7 @@ var/projectile_type = /obj/item/projectile/destabilizer /obj/item/kinetic_crusher/update_icon_state() + . = ..() item_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent /obj/item/kinetic_crusher/Initialize(mapload) From 7a8c5ac6e4b5f59f22e663e942f2ee928872206f Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sat, 22 Jul 2023 07:07:59 -0400 Subject: [PATCH 14/15] fuck you admins have to wait procs out --- code/modules/admin/verbs/debug.dm | 34 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index d02738d80ecd..15916f9e5423 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -103,34 +103,34 @@ GLOBAL_PROTECT(LastAdminCalledProc) GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention) GLOBAL_PROTECT(AdminProcCallSpamPrevention) + +/// Wrapper for proccalls where the datum is flagged as vareditted /proc/WrapAdminProcCall(datum/target, procname, list/arguments) - if(target != GLOBAL_PROC && procname == "Del") - to_chat(usr, span_warning("Calling Del() is not allowed"), confidential=TRUE) + SIGNAL_HANDLER + if(target && procname == "Del") + to_chat(usr, "Calling Del() is not allowed", confidential = TRUE) return - if(target != GLOBAL_PROC && !target.CanProcCall(procname)) to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!", confidential=TRUE) return + var/current_caller = GLOB.AdminProcCaller - var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller - if(!ckey) + var/user_identifier = usr ? usr.client?.ckey : GLOB.AdminProcCaller + if(!user_identifier) CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]") - if(current_caller && current_caller != ckey) - if(!GLOB.AdminProcCallSpamPrevention[ckey]) - to_chat(usr, span_adminnotice("Another set of admin called procs are still running, your proc will be run after theirs finish."), confidential=TRUE) - GLOB.AdminProcCallSpamPrevention[ckey] = TRUE - UNTIL(!GLOB.AdminProcCaller) - to_chat(usr, span_adminnotice("Running your proc"), confidential=TRUE) - GLOB.AdminProcCallSpamPrevention -= ckey - else - UNTIL(!GLOB.AdminProcCaller) + if(current_caller && current_caller != user_identifier) + to_chat(usr, span_adminnotice("Another set of admin called procs are still running. Try again later."), confidential = TRUE) + return + GLOB.LastAdminCalledProc = procname if(target != GLOBAL_PROC) - GLOB.LastAdminCalledTargetRef = "[REF(target)]" - GLOB.AdminProcCaller = ckey //if this runtimes, too bad for you + GLOB.LastAdminCalledTargetRef = REF(target) + + GLOB.AdminProcCaller = user_identifier //if this runtimes, too bad for you ++GLOB.AdminProcCallCount . = world.WrapAdminProcCall(target, procname, arguments) - if(--GLOB.AdminProcCallCount == 0) + GLOB.AdminProcCallCount-- + if(GLOB.AdminProcCallCount == 0) GLOB.AdminProcCaller = null //adv proc call this, ya nerds From 21149c1133ed76beb43a13698b38fa738395359c Mon Sep 17 00:00:00 2001 From: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sat, 22 Jul 2023 07:19:54 -0400 Subject: [PATCH 15/15] wielded stats --- code/datums/components/twohanded.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 1525c282ec07..4892e0208f1c 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -97,6 +97,7 @@ icon_wielded, datum/callback/wield_callback, datum/callback/unwield_callback, + list/wielded_stats, ) if(!original) return @@ -120,6 +121,8 @@ src.wield_callback = wield_callback if(unwield_callback) src.unwield_callback = unwield_callback + if(wielded_stats) + src.wielded_stats = wielded_stats // register signals withthe parent item /datum/component/two_handed/RegisterWithParent()