diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index 4906c6bdd4fd..94b91d88af85 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -37,3 +37,53 @@ /// How much integrity does a shirt lose every time we bite it? #define MOTH_EATING_CLOTHING_DAMAGE 15 */ + +// Base equipment delays +/// Delay base for full-body coverage suit slot items. (hardsuits, spacesuits, radsuits, etc.) +#define EQUIP_DELAY_OVERSUIT (6 SECONDS) + +/// Delay base for suit slot items +#define EQUIP_DELAY_SUIT (4 SECONDS) + +/// Delay base for hard-body shoes and boots. +#define EQUIP_DELAY_BOOTS (2 SECONDS) +/// Delay base for hard-body, strapped, or otherwise head-covering hats. +#define EQUIP_DELAY_HELMET (2 SECONDS) +/// Delay base for shoes. +#define EQUIP_DELAY_SHOES (2 SECONDS) +/// Delay base for suit and cloak slot items that are trivially removed or put on. (Coats, Jackets, Ponchos, etc.) +#define EQUIP_DELAY_COAT (2 SECONDS) +/// Delay base for Undersuits. +#define EQUIP_DELAY_UNDERSUIT (2 SECONDS) + +/// Delay base for masks. +#define EQUIP_DELAY_MASK (1 SECONDS) +/// Delay base for back-worn objects. +#define EQUIP_DELAY_BACK (1 SECONDS) +/// Delay base for belts. +#define EQUIP_DELAY_BELT (1 SECONDS) +/// Delay base for hats. +#define EQUIP_DELAY_HAT (1 SECONDS) +/// Delay base for gloves. +#define EQUIP_DELAY_GLOVES (1 SECONDS) +/// Delay base for glasses. +#define EQUIP_DELAY_EYEWEAR (1 SECONDS) + +// Flags for self equipping items +/// Allow movement during equip/unequip +#define EQUIP_ALLOW_MOVEMENT (1<<0) +/// Apply a slowdown when equipping or unequipping. +#define EQUIP_SLOWDOWN (1<<1) + +//sound defines for equipping and unequipping +#define EQUIP_SOUND_VFAST_GENERIC 'sound/items/equip/equipping_vfast_generic.ogg' +#define UNEQUIP_SOUND_VFAST_GENERIC 'sound/items/equip/unequipping_vfast_generic.ogg' + +#define EQUIP_SOUND_SHORT_GENERIC 'sound/items/equip/equipping_short_generic.ogg' +#define UNEQUIP_SOUND_SHORT_GENERIC 'sound/items/equip/unequipping_short_generic.ogg' + +#define EQUIP_SOUND_MED_GENERIC 'sound/items/equip/equipping_med_generic.ogg' +#define UNEQUIP_SOUND_MED_GENERIC 'sound/items/equip/unequipping_med_generic.ogg' + +#define EQUIP_SOUND_LONG_GENERIC 'sound/items/equip/equipping_long_generic.ogg' +#define UNEQUIP_SOUND_LONG_GENERIC 'sound/items/equip/unequipping_long_generic.ogg' diff --git a/code/__DEFINES/timed_action.dm b/code/__DEFINES/timed_action.dm index 90572cdc5416..92710e0f7ce5 100644 --- a/code/__DEFINES/timed_action.dm +++ b/code/__DEFINES/timed_action.dm @@ -8,3 +8,5 @@ #define IGNORE_HELD_ITEM (1<<2) /// Can do the action even if the mob is incapacitated #define IGNORE_INCAPACITATED (1<<3) +/// Can do the action even if the mob changes active hand +#define IGNORE_HAND_CHANGE (1<<4) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 10c919d64ea9..ddd2bc5b0df6 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -307,6 +307,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_WIELDED "wielded" //The item is currently being wielded #define TRAIT_FORCE_SUIT_STORAGE "force_suit_storage" // the item can be worn in suit storage without an outerclothing +/// Equipping or unequipping an item +#define TRAIT_EQUIPPING_OR_UNEQUIPPING "equipping_or_unequipping" + //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" #define TRAIT_AGEUSIA "ageusia" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 31ce8dceee49..c03b5961c29e 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -308,6 +308,7 @@ GLOBAL_LIST_EMPTY(species_list) drifting = TRUE var/holding = user.get_active_held_item() + var/whichhand = user.active_hand_index delay *= user.do_after_coefficent() @@ -337,6 +338,7 @@ GLOBAL_LIST_EMPTY(species_list) // Check flags if(QDELETED(user) \ || (!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \ + || (!(timed_action_flags & IGNORE_HAND_CHANGE) && user.active_hand_index != whichhand) \ || (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_held_item() != holding) \ || (!(timed_action_flags & IGNORE_INCAPACITATED) && HAS_TRAIT(user, TRAIT_INCAPACITATED)) \ || (extra_checks && !extra_checks.Invoke())) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index f0805e0d06be..21494ea94ad1 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -184,7 +184,7 @@ var/image/item_overlay = image(holding) item_overlay.alpha = 92 - if(!user.can_equip(holding, slot_id, TRUE)) + if(!user.can_equip(holding, slot_id, TRUE, TRUE)) item_overlay.color = "#FF0000" else item_overlay.color = "#00ff00" diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index fab8ffdf3a2c..6350d737d31b 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -518,7 +518,7 @@ playsound(A, "rustle", 50, TRUE, -5) if(istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(A, H.held_index) + M.putItemFromInventoryInHandIfPossible(A, H.held_index, FALSE, TRUE) return A.add_fingerprint(M) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 65ff09df9c6f..c4358a71714d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -78,12 +78,20 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/usesound ///Used when yate into a mob var/mob_throw_hit_sound - ///Sound used when equipping the item into a valid slot + ///Sound used when an item has been equipped into a valid slot var/equip_sound ///Sound uses when picking the item up (into your hands) var/pickup_sound ///Sound uses when dropping the item, or when its thrown. var/drop_sound + ///Sound used when an item is being equipped with equip_delay + var/equipping_sound + ///Sound used when an item is being unequipped with equip_delay + var/unequipping_sound + + ///flags used for equip_delay + var/equip_self_flags = NONE + ///Whether or not we use stealthy audio levels for this item's attack sounds var/stealthy_audio = FALSE @@ -462,7 +470,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(throwing) throwing.finalize(FALSE) if(loc == user) - if(!allow_attack_hand_drop(user) || !user.temporarilyRemoveItemFromInventory(src)) + if(!allow_attack_hand_drop(user) || !user.temporarilyRemoveItemFromInventory(src, use_unequip_delay = TRUE)) return remove_outline() diff --git a/code/game/objects/items/gear_packs.dm b/code/game/objects/items/gear_packs.dm index 65db4ffa28c9..0e80c407261c 100644 --- a/code/game/objects/items/gear_packs.dm +++ b/code/game/objects/items/gear_packs.dm @@ -24,6 +24,13 @@ var/obj/item/gear_handle/gear_handle_type = /obj/item/gear_handle var/obj/item/gear_handle/gear_handle + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BACK + equip_delay_other = EQUIP_DELAY_BACK * 1.5 + strip_delay = EQUIP_DELAY_BACK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/gear_pack/get_cell() return cell @@ -106,7 +113,7 @@ var/mob/M = loc if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) + M.putItemFromInventoryInHandIfPossible(src, H.held_index, FALSE, TRUE) /obj/item/gear_pack/attackby(obj/item/W, mob/user, params) if(W == gear_handle) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 34eba9a25191..d785eacd9c87 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -32,6 +32,13 @@ supports_variations = VOX_VARIATION | KEPORI_VARIATION kepori_override_icon = 'icons/mob/clothing/back/backpacks_kepori.dmi' + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_BACK + equip_delay_other = EQUIP_DELAY_BACK * 1.5 + strip_delay = EQUIP_DELAY_BACK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + /obj/item/storage/backpack/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) @@ -44,11 +51,6 @@ * Backpack Types */ -/obj/item/storage/backpack/old/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 12 - /obj/item/storage/backpack/holding name = "bag of holding" desc = "A backpack that opens into a localized pocket of bluespace." @@ -181,6 +183,12 @@ greyscale_icon_state = "satchel" greyscale_colors = list(list(11, 12), list(17, 18), list(10, 11)) + equipping_sound = null + unequipping_sound = null + equip_delay_self = null + equip_delay_other = EQUIP_DELAY_BACK + strip_delay = EQUIP_DELAY_BACK + /obj/item/storage/backpack/satchel/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 3247ceb443cd..966fc8899276 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -16,6 +16,13 @@ greyscale_icon_state = "belt" greyscale_colors = list(list(16, 12), list(15, 11), list(13, 12)) + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_BELT + equip_delay_other = EQUIP_DELAY_BELT * 1.5 + strip_delay = EQUIP_DELAY_BELT * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/storage/belt/update_overlays() . = ..() if(!content_overlays) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c07c52a57e84..35df35d5ee23 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -3,6 +3,11 @@ resistance_flags = FLAMMABLE max_integrity = 200 integrity_failure = 0.4 + + equip_sound = 'sound/items/equip/cloth_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var ///What level of bright light protection item has. var/flash_protect = FLASH_PROTECTION_NONE @@ -11,7 +16,8 @@ var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv var/visor_flags_cover = 0 //same as above, but for flags_cover -//what to toggle when toggled with weldingvisortoggle() + + //what to toggle when toggled with weldingvisortoggle() var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' @@ -67,7 +73,7 @@ if(!M.incapacitated() && loc == M && istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object - if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) + if(M.putItemFromInventoryInHandIfPossible(src, H.held_index, FALSE, TRUE)) add_fingerprint(usr) /obj/item/reagent_containers/food/snacks/clothing diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 5e5f11e0ba77..1c37e3e1fe87 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -8,13 +8,20 @@ w_class = WEIGHT_CLASS_SMALL flags_cover = GLASSESCOVERSEYES slot_flags = ITEM_SLOT_EYES - strip_delay = 20 - equip_delay_other = 25 resistance_flags = NONE custom_materials = list(/datum/material/glass = 250) supports_variations = VOX_VARIATION greyscale_colors = list(list(14, 26), list(17, 26)) greyscale_icon_state = "glasses" + + equip_sound = 'sound/items/equip/straps_equip.ogg' + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_EYEWEAR + equip_delay_other = EQUIP_DELAY_EYEWEAR * 1.5 + strip_delay = EQUIP_DELAY_EYEWEAR * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + var/vision_flags = 0 var/darkness_view = 2//Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING //admin only for now diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index ea0062359c9a..5de024a9c42d 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -11,8 +11,14 @@ slot_flags = ITEM_SLOT_GLOVES attack_verb = list("challenged") var/transfer_prints = FALSE - strip_delay = 20 - equip_delay_other = 40 + + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_GLOVES + equip_delay_other = EQUIP_DELAY_GLOVES + (3 SECONDS) + strip_delay = EQUIP_DELAY_GLOVES + (3 SECONDS) + equip_self_flags = EQUIP_ALLOW_MOVEMENT + cuttable = TRUE clothamnt = 2 greyscale_colors = list(list(10, 13), list(11, 14), list(9, 12)) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index e74c788faa99..8b3a29f017ab 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -14,6 +14,13 @@ supports_variations = VOX_VARIATION blood_overlay_type = "helmet" + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_HAT + equip_delay_other = EQUIP_DELAY_HAT * 1.5 + strip_delay = EQUIP_DELAY_HAT * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + ///Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them. /obj/item/clothing/head/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing) . = ..() @@ -44,7 +51,7 @@ ///if the hat manages to knock something off if(H.dropItemToGround(WH)) H.visible_message("[src] knocks [WH] off [H]'s head!", "[WH] is suddenly knocked off your head by [src]!") - if(H.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD, 0, 1, 1)) + if(H.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD, 0, 1, 1, TRUE)) H.visible_message("[src] lands neatly on [H]'s head!", "[src] lands perfectly onto your head!") return if(iscyborg(hit_atom)) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 4247405d873e..e479b4aaebbe 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -7,6 +7,13 @@ clothing_flags = SNUG_FIT resistance_flags = FIRE_PROOF + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_HELMET + equip_delay_other = EQUIP_DELAY_HELMET * 1.5 + strip_delay = EQUIP_DELAY_HELMET * 1.5 + /obj/item/clothing/head/hardhat name = "hard hat" desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." @@ -24,6 +31,13 @@ light_on = FALSE dog_fashion = /datum/dog_fashion/head + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_HELMET + equip_delay_other = EQUIP_DELAY_HELMET * 1.5 + strip_delay = EQUIP_DELAY_HELMET * 1.5 + ///Determines used sprites: hardhat[on]_[hat_type] and hardhat[on]_[hat_type]2 (lying down sprite) var/hat_type = "yellow" ///Whether the headlamp is on or off. diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 75103c5f524a..8e89f35d806b 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -16,6 +16,13 @@ flags_cover = HEADCOVERSEYES //flags_inv = HIDEHAIR // nah + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_HELMET + equip_delay_other = EQUIP_DELAY_HELMET * 1.5 + strip_delay = EQUIP_DELAY_HELMET * 1.5 + dog_fashion = /datum/dog_fashion/head/helmet //if a flashlight can be mounted. if it has a flashlight and this is false, it is permanently attached. diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 0c638fb75e2c..865e391abad5 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -42,6 +42,13 @@ clothing_flags = SNUG_FIT flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_HELMET + equip_delay_other = EQUIP_DELAY_HELMET * 1.5 + strip_delay = EQUIP_DELAY_HELMET * 1.5 + /obj/item/clothing/head/snowman name = "Snowman Head" desc = "A ball of white styrofoam. So festive." diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 3cd7c022887c..de54afa17b0d 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -30,6 +30,13 @@ resistance_flags = FIRE_PROOF clothing_flags = SNUG_FIT + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_HELMET + equip_delay_other = EQUIP_DELAY_HELMET * 1.5 + strip_delay = EQUIP_DELAY_HELMET * 1.5 + /obj/item/clothing/head/welding/attack_self(mob/user) weldingvisortoggle(user) diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index a1ddb98a3474..d8713138ba97 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -16,6 +16,13 @@ resistance_flags = NONE supports_variations = SNOUTED_VARIATION | SNOUTED_SMALL_VARIATION | VOX_VARIATION + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/balaclava/attack_self(mob/user) adjustmask(user) @@ -71,6 +78,13 @@ w_class = WEIGHT_CLASS_SMALL modifies_speech = TRUE + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/luchador/handle_speech(datum/source, list/speech_args) var/message = speech_args[SPEECH_MESSAGE] if(message[1] != "*") diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index ea6719e1fb63..d24e4efb2640 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -14,6 +14,14 @@ visor_flags_cover = MASKCOVERSMOUTH resistance_flags = NONE + equip_sound = 'sound/items/equip/straps_equip.ogg' + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + /obj/item/clothing/mask/breath/attack_self(mob/user) adjustmask(user) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 4fd1df88f0bc..021fad6c01e2 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -11,6 +11,14 @@ flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF | SEALS_EYES resistance_flags = NONE + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + /obj/item/clothing/mask/gas/atmos name = "atmospheric gas mask" desc = "Improved gas mask utilized by atmospheric technicians. Still not very good at blocking gas flow, but it's flameproof!" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index d2b573711051..0374c15b8caa 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -8,6 +8,13 @@ gas_transfer_coefficient = 0.9 equip_delay_other = 20 + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + /obj/item/clothing/mask/muzzle/attack_paw(mob/user) if(iscarbon(user)) var/mob/living/carbon/C = user @@ -31,6 +38,13 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0) actions_types = list(/datum/action/item_action/adjust) + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/surgical/attack_self(mob/user) adjustmask(user) @@ -154,6 +168,13 @@ clothing_flags = VOICEBOX_TOGGLABLE modifies_speech = TRUE + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/frog/cursed clothing_flags = NONE @@ -176,6 +197,13 @@ w_class = WEIGHT_CLASS_SMALL modifies_speech = TRUE + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/cowmask/handle_speech(datum/source, list/speech_args) if(!(clothing_flags & VOICEBOX_DISABLED)) speech_args[SPEECH_MESSAGE] = pick("Moooooooo!","Moo!","Moooo!") @@ -200,6 +228,13 @@ w_class = WEIGHT_CLASS_SMALL clothing_flags = VOICEBOX_TOGGLABLE + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/horsehead/handle_speech(datum/source, list/speech_args) if(!(clothing_flags & VOICEBOX_DISABLED)) speech_args[SPEECH_MESSAGE] = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") @@ -223,6 +258,13 @@ flags_inv = HIDEFACE flags_cover = MASKCOVERSMOUTH + equipping_sound = EQUIP_SOUND_VFAST_GENERIC + unequipping_sound = UNEQUIP_SOUND_VFAST_GENERIC + equip_delay_self = EQUIP_DELAY_MASK + equip_delay_other = EQUIP_DELAY_MASK * 1.5 + strip_delay = EQUIP_DELAY_MASK * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT + /obj/item/clothing/mask/rat/fox name = "fox mask" desc = "A mask made of soft vinyl and latex, representing the head of a fox." diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 687bf7bf7e72..710922a4f5f8 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -14,8 +14,12 @@ supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION permeability_coefficient = 0.5 - slowdown = SHOES_SLOWDOWN - strip_delay = 1 SECONDS + + equip_delay_self = EQUIP_DELAY_SHOES + equip_delay_other = EQUIP_DELAY_SHOES * 1.5 + strip_delay = EQUIP_DELAY_SHOES * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + blood_overlay_type = "shoe" var/offset = 0 diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 6bb64c2caebb..e0e084af0207 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -13,6 +13,13 @@ supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION greyscale_icon_state = "boots" + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/magboots/verb/toggle() set name = "Toggle Magboots" set category = "Object" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 839dd3565ada..93c6bf562f5a 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -16,6 +16,13 @@ lace_time = 12 SECONDS greyscale_icon_state = "boots" + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/combat/swat //overpowered boots for death squads name = "\improper SWAT boots" desc = "High speed, no drag combat boots." @@ -67,6 +74,12 @@ can_be_tied = FALSE greyscale_icon_state = "boots" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/jackboots name = "jackboots" desc = "Ankle-high combat boots for combat scenarios or combat situations. All combat, all the time." @@ -82,6 +95,13 @@ can_be_tied = FALSE greyscale_icon_state = "boots" + equip_sound = 'sound/items/equip/straps_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/jackboots/fast slowdown = -1 @@ -99,6 +119,13 @@ lace_time = 8 SECONDS greyscale_icon_state = "boots" + equip_sound = 'sound/items/equip/straps_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/workboots name = "work boots" desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar." @@ -113,6 +140,12 @@ lace_time = 8 SECONDS greyscale_icon_state = "boots" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/winterboots/ice_boots name = "ice hiking boots" desc = "A pair of winter boots with special grips on the bottom, designed to prevent slipping on frozen surfaces." @@ -151,6 +184,13 @@ var/recharging_time = 0 //time until next dash greyscale_icon_state = "boots" + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/bhop/ui_action_click(mob/user, action) if(!isliving(user)) return @@ -211,6 +251,13 @@ can_be_tied = FALSE greyscale_icon_state = "boots" + equip_sound = 'sound/items/equip/straps_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_BOOTS + equip_delay_other = EQUIP_DELAY_BOOTS * 1.5 + strip_delay = EQUIP_DELAY_BOOTS * 1.5 + /obj/item/clothing/shoes/cowboy/Initialize() . = ..() if(prob(2)) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index f96ad54adb88..f540c175df5a 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -23,6 +23,7 @@ dog_fashion = null content_overlays = FALSE pocket_storage_component_path = null + equip_self_flags = null /obj/item/clothing/suit/space name = "space suit" @@ -49,3 +50,4 @@ resistance_flags = NONE greyscale_colors = list(list(17, 16), list(9, 17), list(13, 13)) greyscale_icon_state = "spacesuit" + equip_self_flags = null diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 00e527a3161a..6542baf36c16 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -23,6 +23,11 @@ var/grace_count = 0 var/datum/looping_sound/geiger/soundloop + //fuck you 15 year old hardsuit code + equip_delay_self = null + equip_delay_other = null + strip_delay = null + /obj/item/clothing/head/helmet/space/hardsuit/Initialize() . = ..() soundloop = new(list(), FALSE, TRUE) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 6f8269357eb2..0fff8b84f592 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -61,6 +61,9 @@ flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF | SEALS_EYES visor_flags_inv = HIDEEYES|HIDEFACE + //remove when phorids suck less + equip_delay_self = null + // WS Begin - plasmeme command helmets buff - used for RD bomb scanner /obj/item/clothing/head/helmet/space/plasmaman/proc/display_visor_message(msg) var/mob/wearer = loc diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index cd8a24e20ae0..75497fca5a7b 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -18,6 +18,14 @@ supports_variations = VOX_VARIATION mob_overlay_icon = 'icons/mob/clothing/suit.dmi' + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_LONG_GENERIC + unequipping_sound = UNEQUIP_SOUND_LONG_GENERIC + equip_delay_self = EQUIP_DELAY_OVERSUIT + equip_delay_other = EQUIP_DELAY_OVERSUIT * 1.5 + strip_delay = EQUIP_DELAY_OVERSUIT * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + /obj/item/clothing/suit/worn_overlays(isinhands = FALSE) . = ..() if(!isinhands) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index f3fd5dc403a9..92a9556008f2 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -17,6 +17,13 @@ supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION + equipping_sound = EQUIP_SOUND_MED_GENERIC + unequipping_sound = UNEQUIP_SOUND_MED_GENERIC + equip_delay_self = EQUIP_DELAY_SUIT + equip_delay_other = EQUIP_DELAY_SUIT * 1.5 + strip_delay = EQUIP_DELAY_SUIT * 1.5 + equip_self_flags = null + /obj/item/clothing/suit/armor/Initialize() . = ..() if(!allowed) diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index c62d0e92b8c0..fbba6443faf7 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -9,6 +9,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE resistance_flags = ACID_PROOF flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES + equip_sound = 'sound/items/equip/straps_equip.ogg' /obj/item/clothing/suit/bio_suit name = "bio suit" @@ -29,6 +30,8 @@ strip_delay = 70 equip_delay_other = 70 resistance_flags = ACID_PROOF + equip_sound = 'sound/items/equip/straps_equip.ogg' + equip_self_flags = null //Standard biosuit, orange stripe /obj/item/clothing/head/bio_hood/general diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 1524a4aa6466..1ab2f26c7df7 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -11,6 +11,12 @@ greyscale_colors = list(list(11, 15), list(12, 22), list(12, 22)) greyscale_icon_state = "cloak" + equip_sound = 'sound/items/equip/straps_equip.ogg' + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + equip_self_flags = EQUIP_ALLOW_MOVEMENT | EQUIP_SLOWDOWN + /obj/item/clothing/neck/cloak/hos name = "head of security's cloak" desc = "Worn by Securistan, ruling their watch with an iron fist." diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 03822d3f7a11..9b20dd2395c1 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -14,6 +14,13 @@ body_parts_covered = CHEST|GROIN allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants) + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + + /obj/item/clothing/suit/apron/waders name = "horticultural waders" desc = "A pair of heavy duty leather waders, perfect for insulating your soft flesh from spills, soil and thorns." diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 83ec8abff93c..e51da946cbc6 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -198,6 +198,14 @@ icon_state = "cybersun_suit" item_state = "cybersun_suit" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + + equip_sound = 'sound/items/equip/cloth_equip.ogg' + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/straight_jacket name = "straight jacket" desc = "A suit that completely restrains the wearer. Manufactured by Antyphun Corp." //Straight jacket is antifun @@ -219,12 +227,24 @@ icon_state = "ianshirt" item_state = "ianshirt" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/nerdshirt name = "gamer shirt" desc = "A baggy shirt with vintage game character Super Weasel Kid. Why would anyone wear this?" icon_state = "nerdshirt" item_state = "nerdshirt" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/jacket name = "bomber jacket" desc = "Aviators not included." @@ -235,6 +255,12 @@ cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/jacket/leather name = "leather jacket" desc = "This makes you feel like the coolest guy in town!" @@ -312,6 +338,12 @@ icon_state = "gothcoat" item_state = "gothcoat" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/caution name = "wet floor sign" desc = "No running." @@ -328,6 +360,12 @@ attack_verb = list("warned", "cautioned", "smashed") armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/head/hooded/ablative name = "ablative hood" desc = "Hood hopefully belonging to an ablative trenchcoat. Includes a visor for cool-o-vision." diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 0eb5a90676c6..8166af12d301 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -8,6 +8,13 @@ var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this pocket_storage_component_path = FALSE + equip_sound = 'sound/items/equip/cloth_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/hooded/Initialize() . = ..() MakeHood() @@ -98,6 +105,13 @@ icon = 'icons/obj/clothing/suits/toggle.dmi' mob_overlay_icon = 'icons/mob/clothing/suits/toggle.dmi' + equip_sound = 'sound/items/equip/cloth_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_COAT + equip_delay_other = EQUIP_DELAY_COAT * 1.5 + strip_delay = EQUIP_DELAY_COAT * 1.5 + /obj/item/clothing/suit/toggle/AltClick(mob/user) ..() if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user))) diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 88661d6b835c..d0d49a7619c6 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -29,9 +29,8 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - strip_delay = 60 - equip_delay_other = 60 resistance_flags = FIRE_PROOF + equip_self_flags = null /obj/item/clothing/suit/fire/firefighter icon_state = "firesuit" @@ -70,6 +69,12 @@ flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES resistance_flags = NONE + equip_sound = 'sound/items/equip/armor_equip.ogg' + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_HELMET + equip_delay_other = EQUIP_DELAY_HELMET * 1.5 + strip_delay = EQUIP_DELAY_HELMET * 1.5 /obj/item/clothing/suit/bomb_suit name = "bomb suit" @@ -93,7 +98,7 @@ strip_delay = 70 equip_delay_other = 70 resistance_flags = NONE - + equip_self_flags = null /obj/item/clothing/head/bomb_hood/security icon_state = "bombsuit_sec" @@ -130,6 +135,7 @@ resistance_flags = NONE flags_1 = RAD_PROTECT_CONTENTS_1 supports_variations = VOX_VARIATION + equip_sound = 'sound/items/equip/straps_equip.ogg' /obj/item/clothing/suit/radiation name = "radiation suit" @@ -152,6 +158,8 @@ resistance_flags = NONE flags_1 = RAD_PROTECT_CONTENTS_1 supports_variations = VOX_VARIATION + equip_sound = 'sound/items/equip/straps_equip.ogg' + equip_self_flags = null /obj/item/clothing/head/radiation/space name = "low-pressure radiation helmet" @@ -166,6 +174,8 @@ flash_protect = FLASH_PROTECTION_WELDER strip_delay = 50 equip_delay_other = 50 + equip_sound = 'sound/items/equip/armor_equip.ogg' + equip_self_flags = null /obj/item/clothing/suit/radiation/space name = "low-pressure radiation suit" @@ -182,4 +192,5 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT strip_delay = 80 equip_delay_other = 80 - + equip_sound = 'sound/items/equip/armor_equip.ogg' + equip_self_flags = null diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 7445eb2ad55a..2b1a6eb76572 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -16,6 +16,12 @@ greyscale_colors = list(list(15, 17), list(10, 19), list(15, 10)) greyscale_icon_state = "under" + equipping_sound = EQUIP_SOUND_SHORT_GENERIC + unequipping_sound = UNEQUIP_SOUND_SHORT_GENERIC + equip_delay_self = EQUIP_DELAY_UNDERSUIT + equip_delay_other = EQUIP_DELAY_UNDERSUIT * 1.5 + strip_delay = EQUIP_DELAY_UNDERSUIT * 1.5 + var/has_sensor = HAS_SENSORS // For the crew computer var/random_sensor = TRUE var/sensor_mode = NO_SENSORS diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 019d731a2708..d1d950e5779e 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -63,6 +63,9 @@ var/extinguishes_left = 5 cuttable = FALSE + //remove when phorids suck less + equip_delay_self = null + /obj/item/clothing/under/plasmaman/skirt //WS edit plasmaman customization name = "plasma enviroskirt" icon_state = "plasmaskirt" diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 0d9dab7a035f..54b7fe483a13 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -254,10 +254,10 @@ return FALSE return TRUE -/mob/proc/putItemFromInventoryInHandIfPossible(obj/item/I, hand_index, force_removal = FALSE) +/mob/proc/putItemFromInventoryInHandIfPossible(obj/item/I, hand_index, force_removal = FALSE, use_unequip_delay = FALSE) if(!can_put_in_hand(I, hand_index)) return FALSE - if(!temporarilyRemoveItemFromInventory(I, force_removal)) + if(!temporarilyRemoveItemFromInventory(I, force_removal, use_unequip_delay = use_unequip_delay)) return FALSE I.remove_item_from_storage(src) if(!put_in_hand(I, hand_index)) @@ -273,8 +273,8 @@ * * Will pass FALSE if the item can not be dropped due to TRAIT_NODROP via doUnEquip() * If the item can be dropped, it will be forceMove()'d to the ground and the turf's Entered() will be called. */ -/mob/proc/dropItemToGround(obj/item/I, force = FALSE, silent = FALSE) - . = doUnEquip(I, force, drop_location(), FALSE, silent = silent) +/mob/proc/dropItemToGround(obj/item/I, force = FALSE, silent = FALSE, use_unequip_delay = FALSE) + . = doUnEquip(I, force, drop_location(), FALSE, silent = silent, use_unequip_delay = use_unequip_delay) if(. && I && !(I.item_flags & NO_PIXEL_RANDOM_DROP)) //ensure the item exists and that it was dropped properly. I.pixel_x = rand(-6,6) I.pixel_y = rand(-6,6) @@ -285,13 +285,13 @@ //visibly unequips I but it is NOT MOVED AND REMAINS IN SRC //item MUST BE FORCEMOVE'D OR QDEL'D -/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE) - return doUnEquip(I, force, null, TRUE, idrop, silent = TRUE) +/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE, use_unequip_delay = FALSE) + return doUnEquip(I, force, null, TRUE, idrop, silent = TRUE, use_unequip_delay = use_unequip_delay) //DO NOT CALL THIS PROC //use one of the above 3 helper procs //you may override it, but do not modify the args -/mob/proc/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) //Force overrides TRAIT_NODROP for things like wizarditis and admin undress. +/mob/proc/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) //Force overrides TRAIT_NODROP for things like wizarditis and admin undress. //Use no_move if the item is just gonna be immediately moved afterward //Invdrop is used to prevent stuff in pockets dropping. only set to false if it's going to immediately be replaced PROTECTED_PROC(TRUE) @@ -301,6 +301,14 @@ if(HAS_TRAIT(I, TRAIT_NODROP) && !force) return FALSE + if(HAS_TRAIT(src, TRAIT_EQUIPPING_OR_UNEQUIPPING))//shim because our do_after is less neat than daedalus's + to_chat(src, span_warning("You're already unequipping something!")) + return FALSE + + var/static/list/exclude_from_unequip_delay = list(null, ITEM_SLOT_RPOCKET, ITEM_SLOT_LPOCKET, ITEM_SLOT_SUITSTORE, ITEM_SLOT_HANDS) + if(use_unequip_delay && !(get_slot_by_item(I) in exclude_from_unequip_delay) && !unequip_delay_self_check(I)) + return FALSE + var/hand_index = get_held_index_of_item(I) if(hand_index) held_items[hand_index] = null @@ -500,3 +508,84 @@ add_bodypart(BP) hand_bodyparts[i] = BP ..() //Don't redraw hands until we have organs for them + + +/// Called when a mob is equipping an item to itself. +/mob/proc/equip_delay_self_check(obj/item/equipped, bypass_delay) + return TRUE + +/// Called when a mob is unequipping an item from itself. +/mob/proc/unequip_delay_self_check(obj/item/unequipped, bypass_delay) + return TRUE + +#define EQUIPPING_INTERACTION_KEY(item) "equipping_item_[ref(item)]" + +/mob/living/carbon/human/equip_delay_self_check(obj/item/equipped, bypass_delay) + if(!equipped.equip_delay_self || bypass_delay) + return TRUE + + if(DOING_INTERACTION(src, EQUIPPING_INTERACTION_KEY(equipped))) + return FALSE + + visible_message( + span_notice("[src] starts to put on [equipped]..."), + span_notice("You start to put on [equipped]...") + ) + + . = equipped.do_equip_wait(src, equipped.equipping_sound) + + if(.) + visible_message( + span_notice("[src] puts on [equipped]."), + span_notice("You put on [equipped].") + ) + +/mob/living/carbon/human/unequip_delay_self_check(obj/item/unequipped) + if(!unequipped.equip_delay_self || is_holding(unequipped)) + return TRUE + + if(DOING_INTERACTION(src, EQUIPPING_INTERACTION_KEY(unequipped))) + return FALSE + + visible_message( + span_notice("[src] starts to take off [unequipped]..."), + span_notice("You start to take off [unequipped]...") + ) + + . = unequipped.do_equip_wait(src, unequipped.unequipping_sound) + + if(.) + visible_message( + span_notice("[src] takes off [unequipped]."), + span_notice("You takes off [unequipped].") + ) + + +/// Called by equip_delay_self and unequip_delay_self. +/obj/item/proc/do_equip_wait(mob/living/equipping, soundtoplay) + + var/flags = NONE + if(equip_self_flags & EQUIP_ALLOW_MOVEMENT) + flags |= IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE + + if(equip_self_flags & EQUIP_SLOWDOWN) + equipping.add_movespeed_modifier(/datum/movespeed_modifier/equipping) + + var/ourchannel + if(soundtoplay) + ourchannel = SSsounds.random_available_channel() + playsound(equipping.loc, soundtoplay, 35, channel = ourchannel) + + ADD_TRAIT(equipping, TRAIT_EQUIPPING_OR_UNEQUIPPING, ref(src)) + + . = do_after(equipping, equip_delay_self, equipping, flags, interaction_key = EQUIPPING_INTERACTION_KEY(src)) + + if(ourchannel) + playsound(equipping.loc, null, 35, channel = ourchannel) + + REMOVE_TRAIT(equipping, TRAIT_EQUIPPING_OR_UNEQUIPPING, ref(src)) + + if(!HAS_TRAIT(equipping, TRAIT_EQUIPPING_OR_UNEQUIPPING)) + equipping.remove_movespeed_modifier(/datum/movespeed_modifier/equipping) + +#undef EQUIPPING_INTERACTION_KEY diff --git a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm index 9628545b3cce..227dcc78f45c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/humanoid/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/carbon/alien/humanoid/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) . = ..() if(!. || !I) return diff --git a/code/modules/mob/living/carbon/alien/larva/inventory.dm b/code/modules/mob/living/carbon/alien/larva/inventory.dm index 23c461aa83c8..6212dd4b4b8f 100644 --- a/code/modules/mob/living/carbon/alien/larva/inventory.dm +++ b/code/modules/mob/living/carbon/alien/larva/inventory.dm @@ -1,3 +1,3 @@ //can't unequip since it can't equip anything -/mob/living/carbon/alien/larva/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/carbon/alien/larva/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) return diff --git a/code/modules/mob/living/carbon/hologram/hologram_inventory.dm b/code/modules/mob/living/carbon/hologram/hologram_inventory.dm index f7f98bf5ebbe..7d6650b4d539 100644 --- a/code/modules/mob/living/carbon/hologram/hologram_inventory.dm +++ b/code/modules/mob/living/carbon/hologram/hologram_inventory.dm @@ -5,7 +5,7 @@ //Drone hands -/mob/living/simple_animal/hologram/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/simple_animal/hologram/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) if(..()) update_inv_hands() if(I == internal_storage) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 12e152c0f3d9..d0c323797eac 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -228,7 +228,7 @@ var/obj/item/thing = sloties . += thing?.slowdown -/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) var/index = get_held_index_of_item(I) . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should. if(!. || !I) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 43e764561272..53de44fcd934 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1105,7 +1105,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_NECK) if(H.wear_neck && !swap) return FALSE @@ -1117,13 +1117,13 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(!(I.slot_flags & ITEM_SLOT_BACK)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_OCLOTHING) if(H.wear_suit && !swap) return FALSE if(!(I.slot_flags & ITEM_SLOT_OCLOTHING)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_GLOVES) if(H.gloves && !swap) return FALSE @@ -1131,7 +1131,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(H.num_hands < 2) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_FEET) if(H.shoes && !swap) return FALSE @@ -1143,7 +1143,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!disable_warning) to_chat(H, "This footwear isn't compatible with your feet!") return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_BELT) if(H.belt && !swap) return FALSE @@ -1156,7 +1156,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(!(I.slot_flags & ITEM_SLOT_BELT)) return - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_EYES) if(H.glasses && !swap) return FALSE @@ -1167,7 +1167,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/organ/eyes/E = H.getorganslot(ORGAN_SLOT_EYES) if(E?.no_glasses) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_HEAD) if(H.head && !swap) return FALSE @@ -1175,7 +1175,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_EARS) if(H.ears && !swap) return FALSE @@ -1183,13 +1183,13 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_ICLOTHING) if(H.w_uniform && !swap) return FALSE if(!(I.slot_flags & ITEM_SLOT_ICLOTHING)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_ID) if(H.wear_id) if(SEND_SIGNAL(H.wear_id, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) @@ -1203,7 +1203,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE if(!(I.slot_flags & ITEM_SLOT_ID)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) if(ITEM_SLOT_LPOCKET) if(HAS_TRAIT(I, TRAIT_NODROP)) //Pockets aren't visible, so you can't move TRAIT_NODROP items into them. return FALSE @@ -1278,11 +1278,22 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE return FALSE //Unsupported slot -/datum/species/proc/equip_delay_self_check(obj/item/I, mob/living/carbon/human/H, bypass_equip_delay_self) - if(!I.equip_delay_self || bypass_equip_delay_self) +/datum/species/proc/equip_delay_self_check(obj/item/to_equip, mob/living/carbon/human/ourhuman, bypass_equip_delay_self) + if(!to_equip.equip_delay_self || bypass_equip_delay_self) return TRUE - H.visible_message("[H] start putting on [I]...", "You start putting on [I]...") - return do_after(H, I.equip_delay_self, target = H) + + ourhuman.visible_message( + span_notice("[ourhuman] start putting on [to_equip]..."), + span_notice("You start putting on [to_equip]...") + ) + + . = to_equip.do_equip_wait(ourhuman, to_equip.equipping_sound) + + if(.) + ourhuman.visible_message( + span_notice("[src] puts on [to_equip]."), + span_notice("You puts on [to_equip].") + ) /datum/species/proc/before_equip_job(datum/job/J, mob/living/carbon/human/H) return diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 501f0b357515..c79ac3aaf68e 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -145,7 +145,7 @@ //ya ain't got no biters to put it in sir if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE - return equip_delay_self_check(I, H, bypass_equip_delay_self) + return H.equip_delay_self_check(I, bypass_equip_delay_self) /datum/species/kepori/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) . = ..() diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 9525ebd6ec9b..f1cbd3156723 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -129,7 +129,7 @@ /mob/living/carbon/proc/has_equipped(obj/item/item, slot, initial = FALSE) return item.equipped(src, slot, initial) -/mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) . = ..() //Sets the default return value to what the parent returns. if(!. || !I) //We don't want to set anything to null if the parent returned 0. return diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm index f560043a0df8..5f83b3675319 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm @@ -6,7 +6,7 @@ //Drone hands -/mob/living/simple_animal/drone/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/simple_animal/drone/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) if(..()) update_inv_hands() if(I == head) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 56478ebc7853..ed502837dc9a 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -237,7 +237,7 @@ Feedon(Food) return ..() -/mob/living/simple_animal/slime/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) +/mob/living/simple_animal/slime/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE, use_unequip_delay = FALSE) return /mob/living/simple_animal/slime/start_pulling(atom/movable/AM, state, force = move_force, supress_message = FALSE) diff --git a/code/modules/mod/mod_clothes.dm b/code/modules/mod/mod_clothes.dm index 7a9e710c9382..77bfcab43aca 100644 --- a/code/modules/mod/mod_clothes.dm +++ b/code/modules/mod/mod_clothes.dm @@ -12,6 +12,12 @@ obj_flags = IMMUTABLE_SLOW visor_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|ALLOWINTERNALS + equipping_sound = null + unequipping_sound = null + equip_delay_self = null + strip_delay = null + equip_self_flags = null + /obj/item/clothing/suit/mod name = "MOD chestplate" desc = "A chestplate for a MODsuit." @@ -26,6 +32,12 @@ cold_protection = CHEST|GROIN obj_flags = IMMUTABLE_SLOW + equipping_sound = null + unequipping_sound = null + equip_delay_self = null + strip_delay = null + equip_self_flags = null + /obj/item/clothing/gloves/mod name = "MOD gauntlets" desc = "A pair of gauntlets for a MODsuit." @@ -39,6 +51,12 @@ cold_protection = HANDS|ARMS obj_flags = IMMUTABLE_SLOW + equipping_sound = null + unequipping_sound = null + equip_delay_self = null + strip_delay = null + equip_self_flags = null + /obj/item/clothing/shoes/mod name = "MOD boots" desc = "A pair of boots for a MODsuit." @@ -54,3 +72,9 @@ supports_variations = DIGITIGRADE_VARIATION can_be_tied = FALSE visor_flags_inv = HIDESHOES + + equipping_sound = null + unequipping_sound = null + equip_delay_self = null + strip_delay = null + equip_self_flags = null diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 37b9cf6e2ac7..5f6cfc4465e8 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -278,7 +278,7 @@ return if(!wearer.incapacitated()) var/atom/movable/screen/inventory/hand/ui_hand = over_object - if(wearer.putItemFromInventoryInHandIfPossible(src, ui_hand.held_index)) + if(wearer.putItemFromInventoryInHandIfPossible(src, ui_hand.held_index, FALSE, TRUE)) add_fingerprint(usr) return ..() diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index 4c967a58a7ec..6759b8a47f46 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -20,3 +20,6 @@ /datum/movespeed_modifier/sphere multiplicative_slowdown = -0.5 + +/datum/movespeed_modifier/equipping + multiplicative_slowdown = 1.5 diff --git a/sound/items/equip/armor_equip.ogg b/sound/items/equip/armor_equip.ogg new file mode 100644 index 000000000000..d023d726a03f Binary files /dev/null and b/sound/items/equip/armor_equip.ogg differ diff --git a/sound/items/equip/cloth_equip.ogg b/sound/items/equip/cloth_equip.ogg new file mode 100644 index 000000000000..f989b7d383dd Binary files /dev/null and b/sound/items/equip/cloth_equip.ogg differ diff --git a/sound/items/equip/equipping_long_generic.ogg b/sound/items/equip/equipping_long_generic.ogg new file mode 100644 index 000000000000..57bcabf02e32 Binary files /dev/null and b/sound/items/equip/equipping_long_generic.ogg differ diff --git a/sound/items/equip/equipping_med_generic.ogg b/sound/items/equip/equipping_med_generic.ogg new file mode 100644 index 000000000000..3c51be8d8a05 Binary files /dev/null and b/sound/items/equip/equipping_med_generic.ogg differ diff --git a/sound/items/equip/equipping_short_generic.ogg b/sound/items/equip/equipping_short_generic.ogg new file mode 100644 index 000000000000..5f100eb4b313 Binary files /dev/null and b/sound/items/equip/equipping_short_generic.ogg differ diff --git a/sound/items/equip/equipping_vfast_generic.ogg b/sound/items/equip/equipping_vfast_generic.ogg new file mode 100644 index 000000000000..76bec9532106 Binary files /dev/null and b/sound/items/equip/equipping_vfast_generic.ogg differ diff --git a/sound/items/equip/latex_equip.ogg b/sound/items/equip/latex_equip.ogg new file mode 100644 index 000000000000..33f025a17775 Binary files /dev/null and b/sound/items/equip/latex_equip.ogg differ diff --git a/sound/items/equip/straps_equip.ogg b/sound/items/equip/straps_equip.ogg new file mode 100644 index 000000000000..f9e86cea3e8e Binary files /dev/null and b/sound/items/equip/straps_equip.ogg differ diff --git a/sound/items/equip/unequipping_long_generic.ogg b/sound/items/equip/unequipping_long_generic.ogg new file mode 100644 index 000000000000..135eb3d64339 Binary files /dev/null and b/sound/items/equip/unequipping_long_generic.ogg differ diff --git a/sound/items/equip/unequipping_med_generic.ogg b/sound/items/equip/unequipping_med_generic.ogg new file mode 100644 index 000000000000..fb8231389758 Binary files /dev/null and b/sound/items/equip/unequipping_med_generic.ogg differ diff --git a/sound/items/equip/unequipping_short_generic.ogg b/sound/items/equip/unequipping_short_generic.ogg new file mode 100644 index 000000000000..bebe9d2bf7d5 Binary files /dev/null and b/sound/items/equip/unequipping_short_generic.ogg differ diff --git a/sound/items/equip/unequipping_vfast_generic.ogg b/sound/items/equip/unequipping_vfast_generic.ogg new file mode 100644 index 000000000000..4d63e1aec624 Binary files /dev/null and b/sound/items/equip/unequipping_vfast_generic.ogg differ