diff --git a/code/__defines/sound.dm b/code/__defines/sound.dm
index a9b7ed75ce5..7866b21779f 100644
--- a/code/__defines/sound.dm
+++ b/code/__defines/sound.dm
@@ -35,3 +35,8 @@
#define SMALL_SOFTFLOOR ROOM
#define ASTEROID CAVE
#define SPACE UNDERWATER
+
+#define EQUIP_SOUND_VOLUME 30
+#define PICKUP_SOUND_VOLUME 15
+// Multiplied by item's weight class
+#define INITIAL_THROW_IMPACT_SOUND_VOLUME 15
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 59e4f9cfe5b..9e6668a97d9 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -219,7 +219,7 @@
L.source_atom.update_light()
//called when src is thrown into hit_atom
-/atom/movable/proc/throw_impact(atom/hit_atom, var/datum/thrownthing/TT)
+/atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/TT)
if(istype(hit_atom,/mob/living))
var/mob/living/M = hit_atom
M.hitby(src,TT)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index ad86d6c6d95..52e3ee12d86 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -10,6 +10,14 @@
var/burn_point = null
var/burning = null
var/hitsound = "swing_hit"
+ /// Sound that is played on throw impact with a living mob
+ var/mob_throw_hit_sound = null
+ /// Sound that is played on throw impact with anything other than a living mob
+ var/throw_impact_sound = null
+ /// Sound that is played whenever the item is equipped in hands
+ var/pickup_sound = null
+ /// Sound that is played whenever the item is equipped in its defined slot
+ var/equip_sound = null
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
var/no_attack_log = FALSE //If it's an item we don't want to log attack_logs with, set this to 1
pass_flags = PASS_FLAG_TABLE
@@ -325,12 +333,14 @@
// slot uses the slot_X defines found in setup.dm
// for items that can be placed in multiple slots
// note this isn't called during the initial dressing of a player
-/obj/item/proc/equipped(var/mob/user, var/slot)
+/obj/item/proc/equipped(mob/user, slot)
hud_layerise()
- if(user.client) user.client.screen |= src
- if(user.pulling == src) user.stop_pulling()
+ if(user.client)
+ user.client.screen |= src
+ if(user.pulling == src)
+ user.stop_pulling()
- //Update two-handing status
+ // Update two-handing status
var/mob/M = loc
if(!istype(M))
return
@@ -339,6 +349,14 @@
if(M.r_hand)
M.r_hand.update_twohanding()
+ // Sounds
+ if(equip_sound && ("[slot]" in slot_flags_enumeration))
+ var/req_flags = slot_flags_enumeration["[slot]"]
+ if((req_flags & slot_flags))
+ playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE)
+ else if(slot == slot_l_hand || slot == slot_r_hand)
+ playsound(src, pickup_sound, PICKUP_SOUND_VOLUME, ignore_walls = FALSE)
+
//Defines which slots correspond to which slot flags
var/list/global/slot_flags_enumeration = list(
"[slot_wear_mask]" = SLOT_MASK,
@@ -362,10 +380,13 @@ var/list/global/slot_flags_enumeration = list(
//Should probably move the bulk of this into mob code some time, as most of it is related to the definition of slots and not item-specific
//set force to ignore blocking overwear and occupied slots
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = 0, force = 0)
- if(!slot) return 0
- if(!M) return 0
+ if(!slot)
+ return FALSE
+ if(!M)
+ return FALSE
- if(!ishuman(M)) return 0
+ if(!ishuman(M))
+ return FALSE
var/mob/living/carbon/human/H = M
var/list/mob_equip = list()
@@ -373,13 +394,13 @@ var/list/global/slot_flags_enumeration = list(
mob_equip = H.species.hud.equip_slots
if(H.species && !(slot in mob_equip))
- return 0
+ return FALSE
//First check if the item can be equipped to the desired slot.
if("[slot]" in slot_flags_enumeration)
var/req_flags = slot_flags_enumeration["[slot]"]
if(!(req_flags & slot_flags))
- return 0
+ return FALSE
if(!force)
//Next check that the slot is free
@@ -892,6 +913,30 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
attack_self(user)
return TRUE
+/obj/item/throw_impact(atom/hit_atom, datum/thrownthing/TT)
+ if(QDELETED(hit_atom))
+ return
+
+ . = ..()
+ var/volume = GetThrownSoundVolume()
+ var/turf/sound_turf = get_turf(src)
+ //Living mobs handle thrown sounds differently.
+ if(istype(hit_atom, /mob/living))
+ sound_turf = get_turf(hit_atom)
+ if(throwforce > 0)
+ if(mob_throw_hit_sound)
+ playsound(sound_turf, mob_throw_hit_sound, volume, FALSE, -1)
+ else if(hitsound)
+ playsound(sound_turf, hitsound, volume, FALSE, -1)
+ else if(throw_impact_sound)
+ playsound(sound_turf, throw_impact_sound, volume, FALSE, -1)
+
+ else if(throw_impact_sound)
+ playsound(sound_turf, throw_impact_sound, volume, FALSE, -1)
+
+/obj/item/proc/GetThrownSoundVolume()
+ return min(INITIAL_THROW_IMPACT_SOUND_VOLUME * w_class, 100)
+
/obj/item/proc/inherit_custom_item_data(var/datum/custom_item/citem)
. = src
if(citem.item_name)
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index bbd95204ac4..5e70f0b848f 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -10,6 +10,9 @@
obj_flags = OBJ_FLAG_CONDUCTIBLE
origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1)
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/component_drop.ogg'
+
var/times_used = 0 //Number of times it's been used.
var/broken = 0 //Is the flash burnt out?
var/last_used = 0 //last world.time it was used.
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index a2b781e5e92..7549408fa3c 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -18,6 +18,9 @@
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
+ pickup_sound = 'sound/items/handling/multitool_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/multitool_drop.ogg'
+
var/buffer_name
var/atom/buffer_object
diff --git a/code/game/objects/items/devices/scanners/_scanner.dm b/code/game/objects/items/devices/scanners/_scanner.dm
index 7414fb8dc63..38067ad7ebb 100644
--- a/code/game/objects/items/devices/scanners/_scanner.dm
+++ b/code/game/objects/items/devices/scanners/_scanner.dm
@@ -8,6 +8,10 @@
slot_flags = SLOT_BELT
item_flags = ITEM_FLAG_NO_BLUDGEON
matter = list(MATERIAL_ALUMINIUM = 30,MATERIAL_GLASS = 20)
+
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/component_drop.ogg'
+
var/scan_title
var/scan_data
//For displaying scans
diff --git a/code/game/objects/items/weapons/material/coins.dm b/code/game/objects/items/weapons/material/coins.dm
index 712348cc3f0..ea6dfa245db 100644
--- a/code/game/objects/items/weapons/material/coins.dm
+++ b/code/game/objects/items/weapons/material/coins.dm
@@ -11,11 +11,11 @@
thrown_force_multiplier = 0.1
w_class = 1
slot_flags = SLOT_EARS
+
+ throw_impact_sound = 'sound/effects/coin_flip2.ogg'
var/string_colour
// Sound played when used in hand to "flip" it
var/flip_sound = 'sound/effects/coin_flip1.ogg'
- // Sound played on thrown impact
- var/fall_sound = 'sound/effects/coin_flip2.ogg'
// How loud are the sounds produced by it
var/sound_volume = 35
@@ -38,27 +38,22 @@
var/obj/item/stack/cable_coil/CC = W
if(CC.use(1))
string_colour = CC.color
- to_chat(user, "You attach a string to the coin.")
+ to_chat(user, SPAN_NOTICE("You attach a string to the coin."))
update_icon()
return
else if(isWirecutter(W) && !isnull(string_colour))
new /obj/item/stack/cable_coil/single(get_turf(user))
string_colour = null
- to_chat(user, "You detach the string from the coin.")
+ to_chat(user, SPAN_NOTICE("You detach the string from the coin."))
update_icon()
else ..()
/obj/item/material/coin/attack_self(mob/user)
- user.visible_message("\The [user] has thrown \the [src]. It lands on [rand(1, 2) == 1 ? "tails" : "heads"]!")
+ user.visible_message(SPAN_NOTICE("\The [user] has thrown \the [src]. It lands on [rand(1, 2) == 1 ? "tails" : "heads"]!"))
playsound(user, flip_sound, sound_volume, TRUE)
-/obj/item/material/coin/throw_impact(atom/hit_atom, datum/thrownthing/TT)
- . = ..()
- var/turf/T = get_turf(hit_atom)
- if(!istype(T))
- return
-
- playsound(T, fall_sound, sound_volume, TRUE)
+/obj/item/material/coin/GetThrownSoundVolume()
+ return sound_volume
// Subtypes.
/obj/item/material/coin/gold
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index d63f2054f72..e05ae153ddf 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -13,6 +13,8 @@
slot_flags = SLOT_BELT
var/overlay_flags
attack_verb = list("whipped", "lashed", "disciplined")
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
+ throw_impact_sound = 'sound/items/handling/toolbelt_drop.ogg'
/obj/item/storage/belt/verb/toggle_layer()
set name = "Switch Belt Layer"
@@ -131,8 +133,9 @@
/obj/item/clothing/gloves,
/obj/item/tape_roll,
/obj/item/clothing/head/beret,
- /obj/item/material/knife/folding/
+ /obj/item/material/knife/folding,
)
+ pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/utility/full/New()
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 7038cd2e7cd..c51e06b8641 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -26,6 +26,9 @@
item_state = "syringe_kit"
max_storage_space = DEFAULT_BOX_STORAGE
use_sound = 'sound/effects/storage/box.ogg'
+ pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/cardboardbox_drop.ogg'
+
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
/obj/item/storage/box/large
@@ -190,6 +193,8 @@
icon_state = "ammo"
desc = "A sturdy metal box with several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death."
use_sound = 'sound/effects/closet_open.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/ammobox_drop.ogg'
/obj/item/storage/box/ammo/blanks
name = "box of blank shells"
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 34cefa29cd5..3929142f004 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -17,6 +17,8 @@
origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("robusted")
use_sound = 'sound/effects/storage/toolbox.ogg'
+ throw_impact_sound = 'sound/items/handling/toolbox_drop.ogg'
+ pickup_sound = 'sound/items/handling/toolbox_pickup.ogg'
matter = list(MATERIAL_STEEL = 5000)
/obj/item/storage/toolbox/emergency
diff --git a/code/game/objects/items/weapons/tools/crowbar.dm b/code/game/objects/items/weapons/tools/crowbar.dm
index fc27ea63ac0..164b625b1f9 100644
--- a/code/game/objects/items/weapons/tools/crowbar.dm
+++ b/code/game/objects/items/weapons/tools/crowbar.dm
@@ -16,6 +16,8 @@
matter = list(MATERIAL_STEEL = 140)
center_of_mass = "x=16;y=20"
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
+ throw_impact_sound = 'sound/items/handling/crowbar_drop.ogg'
+ pickup_sound = 'sound/items/handling/crowbar_pickup.ogg'
/obj/item/crowbar/red
icon_state = "red_crowbar"
diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm
index 9a361a3f7db..c7be757a4fb 100644
--- a/code/game/objects/items/weapons/tools/screwdriver.dm
+++ b/code/game/objects/items/weapons/tools/screwdriver.dm
@@ -16,6 +16,8 @@
attack_verb = list("stabbed")
lock_picking_level = 5
sharp = TRUE
+ throw_impact_sound = 'sound/items/handling/screwdriver_drop.ogg'
+ pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg'
var/build_from_parts = TRUE
var/valid_colours = list(COLOR_RED, COLOR_CYAN_BLUE, COLOR_PURPLE, COLOR_CHESTNUT, COLOR_GREEN, COLOR_TEAL, COLOR_ASSEMBLY_YELLOW, COLOR_BOTTLE_GREEN, COLOR_VIOLET, COLOR_GRAY80, COLOR_GRAY20)
diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm
index 192a562adb8..d7e436e7ae4 100644
--- a/code/game/objects/items/weapons/tools/weldingtool.dm
+++ b/code/game/objects/items/weapons/tools/weldingtool.dm
@@ -15,6 +15,8 @@
w_class = ITEM_SIZE_SMALL
matter = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 30)
origin_tech = list(TECH_ENGINEERING = 1)
+ throw_impact_sound = 'sound/items/handling/weldingtool_drop.ogg'
+ pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg'
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
diff --git a/code/game/objects/items/weapons/tools/wirecutter.dm b/code/game/objects/items/weapons/tools/wirecutter.dm
index 0388fef02c3..f1d5122cfcc 100644
--- a/code/game/objects/items/weapons/tools/wirecutter.dm
+++ b/code/game/objects/items/weapons/tools/wirecutter.dm
@@ -16,6 +16,8 @@
attack_verb = list("pinched", "nipped")
sharp = TRUE
edge = TRUE
+ throw_impact_sound = 'sound/items/handling/wirecutter_drop.ogg'
+ pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg'
var/build_from_parts = TRUE
var/handle_icon = "cutters_handle"
diff --git a/code/game/objects/items/weapons/tools/wrench.dm b/code/game/objects/items/weapons/tools/wrench.dm
index 30329152820..f550841e0d4 100644
--- a/code/game/objects/items/weapons/tools/wrench.dm
+++ b/code/game/objects/items/weapons/tools/wrench.dm
@@ -13,6 +13,8 @@
matter = list(MATERIAL_STEEL = 150)
center_of_mass = "x=17;y=16"
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
+ throw_impact_sound = 'sound/items/handling/wrench_drop.ogg'
+ pickup_sound = 'sound/items/handling/wrench_pickup.ogg'
/obj/item/wrench/Initialize()
icon_state = "wrench[pick("","_red","_black","_green","_blue")]"
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index bac28e99242..cbd12cb6a0b 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -11,6 +11,9 @@
throw_range = 10
origin_tech = list(TECH_MAGNET = 1)
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/component_drop.ogg'
+
var/secured = 1
var/list/attached_overlays = null
var/obj/item/device/assembly_holder/holder = null
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 1c5b91911f2..42532335b02 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,6 +1,7 @@
/obj/item/clothing
name = "clothing"
siemens_coefficient = 0.9
+
var/flash_protection = FLASH_PROTECTION_NONE // Sets the item's level of flash protection.
var/tint = TINT_NONE // Sets the item's level of visual impairment tint.
var/list/species_restricted = list(
@@ -801,6 +802,10 @@ BLIND // can't see anything
slot_flags = SLOT_ICLOTHING
w_class = ITEM_SIZE_NORMAL
force = 0
+ equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
+ pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/cloth_drop.ogg'
+
var/has_sensor = SUIT_HAS_SENSORS //For the crew computer 2 = unable to change mode
var/sensor_mode = SUIT_SENSOR_OFF
/*
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 9bdde9ca726..feda89782a3 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -142,6 +142,9 @@
throw_range = 5
w_class = ITEM_SIZE_NORMAL //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
attack_verb = list("bashed", "whacked", "educated")
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/book_drop.ogg'
+
var/dat // Actual page content
var/author // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
var/unique = 0 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 7a4d636dc77..a851c342a86 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -27,6 +27,8 @@
slot_flags = SLOT_HEAD
body_parts_covered = HEAD
attack_verb = list("bapped")
+ throw_impact_sound = 'sound/items/handling/paper_drop.ogg'
+ pickup_sound = 'sound/items/handling/paper_pickup.ogg'
var/info //What's actually written on the paper.
var/info_links //A different version of the paper which includes html links at fields and EOF
@@ -216,6 +218,8 @@
info = stars(info,85)
user.visible_message("\The [user] crumples \the [src] into a ball!")
icon_state = "scrap"
+ throw_range = 10
+ throw_speed = 3
return
user.examinate(src)
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index f848c25caad..7961612b41c 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -110,6 +110,8 @@ var/global/photo_count = 0
w_class = ITEM_SIZE_NORMAL //same as book
storage_slots = DEFAULT_BOX_STORAGE //yes, that's storage_slots. Photos are w_class 1 so this has as many slots equal to the number of photos you could put in a box
can_hold = list(/obj/item/photo)
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/book_drop.ogg'
/obj/item/storage/photo_album/MouseDrop(obj/over_object as obj)
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index a3808cbed19..3ca6e6904d7 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -121,6 +121,8 @@
/obj/item/ammo_magazine/box
w_class = ITEM_SIZE_NORMAL
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/ammobox_drop.ogg'
/obj/item/ammo_magazine/Initialize()
. = ..()
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 12f6ec229ad..55d1012f688 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -13,10 +13,10 @@
/obj/item/reagent_containers/proc/cannot_interact(mob/user)
if(!CanPhysicallyInteract(user))
- to_chat(usr, "You're in no condition to do that!'")
+ to_chat(usr, SPAN_NOTICE("You're in no condition to do that!'"))
return TRUE
if(ismob(loc) && loc != user)
- to_chat(usr, "You can't set transfer amounts while [src] is being held by someone else.")
+ to_chat(usr, SPAN_NOTICE("You can't set transfer amounts while [src] is being held by someone else."))
return TRUE
return FALSE
@@ -58,9 +58,9 @@
if(istype(W, /obj/item/pen) || istype(W, /obj/item/device/flashlight/pen))
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
if(length(tmp_label) > 10)
- to_chat(user, "The label can be at most 10 characters long.")
+ to_chat(user, SPAN_NOTICE("The label can be at most 10 characters long."))
else
- to_chat(user, "You set the label to \"[tmp_label]\".")
+ to_chat(user, SPAN_NOTICE("You set the label to \"[tmp_label]\"."))
label_text = tmp_label
update_name_label()
else
@@ -77,40 +77,41 @@
return 0
if(!target.reagents || !target.reagents.total_volume)
- to_chat(user, "[target] is empty.")
+ to_chat(user, SPAN_NOTICE("[target] is empty."))
return 1
if(reagents && !reagents.get_free_space())
- to_chat(user, "[src] is full.")
+ to_chat(user, SPAN_NOTICE("[src] is full."))
return 1
var/trans = target.reagents.trans_to_obj(src, target:amount_per_transfer_from_this)
- to_chat(user, "You fill [src] with [trans] units of the contents of [target].")
+ to_chat(user, SPAN_NOTICE("You fill [src] with [trans] units of the contents of [target]."))
return 1
-/obj/item/reagent_containers/proc/standard_splash_mob(var/mob/user, var/mob/target) // This goes into afterattack
+/obj/item/reagent_containers/proc/standard_splash_mob(mob/user, mob/target) // This goes into afterattack
if(!istype(target))
- return
+ return FALSE
if(user.a_intent == I_HELP)
- to_chat(user, "You can't splash people on help intent.")
- return 1
+ to_chat(user, SPAN_NOTICE("You can't splash people on help intent."))
+ return TRUE
if(!reagents || !reagents.total_volume)
- to_chat(user, "[src] is empty.")
- return 1
+ to_chat(user, SPAN_NOTICE("[src] is empty."))
+ return TRUE
if(target.reagents && !target.reagents.get_free_space())
- to_chat(user, "[target] is full.")
- return 1
+ to_chat(user, SPAN_NOTICE("[target] is full."))
+ return TRUE
var/contained = reagentlist()
if (reagents.should_admin_log())
admin_attack_log(user, target, "Used \the [name] containing [contained] to splash the victim.", "Was splashed by \the [name] containing [contained].", "used \the [name] containing [contained] to splash")
- user.visible_message("[target] has been splashed with something by [user]!", "You splash the solution onto [target].")
+ playsound(target, pick('sound/effects/splash1.ogg', 'sound/effects/splash2.ogg'), 50, TRUE)
+ user.visible_message(SPAN_DANGER("[target] has been splashed with something by [user]!"), SPAN_NOTICE("You splash the solution onto [target]."))
reagents.splash(target, reagents.total_volume)
- return 1
+ return TRUE
/obj/item/reagent_containers/proc/splashtarget(obj/target, mob/user)
if (user.a_intent == I_HURT)
@@ -126,13 +127,13 @@
return TRUE
/obj/item/reagent_containers/proc/self_feed_message(var/mob/user)
- to_chat(user, "You eat \the [src]")
+ to_chat(user, SPAN_NOTICE("You eat \the [src]"))
/obj/item/reagent_containers/proc/other_feed_message_start(var/mob/user, var/mob/target)
- user.visible_message("[user] is trying to feed [target] \the [src]!")
+ user.visible_message(SPAN_WARNING("[user] is trying to feed [target] \the [src]!"))
/obj/item/reagent_containers/proc/other_feed_message_finish(var/mob/user, var/mob/target)
- user.visible_message("[user] has fed [target] \the [src]!")
+ user.visible_message(SPAN_WARNING("[user] has fed [target] \the [src]!"))
/obj/item/reagent_containers/proc/feed_sound(var/mob/user)
return
@@ -142,7 +143,7 @@
return 0
if(!reagents || !reagents.total_volume)
- to_chat(user, "\The [src] is empty.")
+ to_chat(user, SPAN_NOTICE("\The [src] is empty."))
return 1
// only carbons can eat
@@ -157,7 +158,7 @@
return
var/obj/item/blocked = H.check_mouth_coverage()
if (blocked)
- to_chat(user, "\The [blocked] is in the way!")
+ to_chat(user, SPAN_WARNING("\The [blocked] is in the way!"))
return
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things
@@ -177,7 +178,7 @@
return
var/obj/item/blocked = H.check_mouth_coverage()
if (blocked)
- to_chat(user, "\The [blocked] is in the way!")
+ to_chat(user, SPAN_WARNING("\The [blocked] is in the way!"))
return
other_feed_message_start(user, target)
@@ -204,23 +205,23 @@
// Ensure we don't splash beakers and similar containers.
if(!target.is_open_container() && istype(target, /obj/item/reagent_containers))
- to_chat(user, "\The [target] is closed.")
+ to_chat(user, SPAN_NOTICE("\The [target] is closed."))
return 1
// Otherwise don't care about splashing.
else if(!target.is_open_container())
return 0
if(!reagents || !reagents.total_volume)
- to_chat(user, "[src] is empty.")
+ to_chat(user, SPAN_NOTICE("[src] is empty."))
return 1
if(!target.reagents.get_free_space())
- to_chat(user, "[target] is full.")
+ to_chat(user, SPAN_NOTICE("[target] is full."))
return 1
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
playsound(src, 'sound/effects/pour.ogg', 25, 1)
- to_chat(user, "You transfer [trans] unit\s of the solution to \the [target]. \The [src] now contains [src.reagents.total_volume] units.")
+ to_chat(user, SPAN_NOTICE("You transfer [trans] unit\s of the solution to \the [target]. \The [src] now contains [src.reagents.total_volume] units."))
return 1
/obj/item/reagent_containers/do_surgery(mob/living/carbon/M, mob/living/user)
diff --git a/code/modules/spellbook/_spellbook.dm b/code/modules/spellbook/_spellbook.dm
index ef960d7f3c9..e1a16ba2593 100644
--- a/code/modules/spellbook/_spellbook.dm
+++ b/code/modules/spellbook/_spellbook.dm
@@ -16,6 +16,9 @@ GLOBAL_LIST_EMPTY(spells_by_categories)
throw_speed = 1
throw_range = 3
w_class = ITEM_SIZE_NORMAL
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ throw_impact_sound = 'sound/items/handling/book_drop.ogg'
+
var/temp = null
var/book_flags = 0
/// Current owner of the book, none other than them can use it; Can be dispelled to remove that and other locks.
diff --git a/sound/effects/splash1.ogg b/sound/effects/splash1.ogg
new file mode 100644
index 00000000000..2b7b68cccbd
Binary files /dev/null and b/sound/effects/splash1.ogg differ
diff --git a/sound/effects/splash2.ogg b/sound/effects/splash2.ogg
new file mode 100644
index 00000000000..1611c203f56
Binary files /dev/null and b/sound/effects/splash2.ogg differ
diff --git a/sound/items/equip/jumpsuit_equip.ogg b/sound/items/equip/jumpsuit_equip.ogg
new file mode 100644
index 00000000000..bdcc2bb3a65
Binary files /dev/null and b/sound/items/equip/jumpsuit_equip.ogg differ
diff --git a/sound/items/equip/toolbelt_equip.ogg b/sound/items/equip/toolbelt_equip.ogg
new file mode 100644
index 00000000000..0ef67a3fd6c
Binary files /dev/null and b/sound/items/equip/toolbelt_equip.ogg differ
diff --git a/sound/items/handling/ammobox_drop.ogg b/sound/items/handling/ammobox_drop.ogg
new file mode 100644
index 00000000000..13fce70fe3d
Binary files /dev/null and b/sound/items/handling/ammobox_drop.ogg differ
diff --git a/sound/items/handling/ammobox_pickup.ogg b/sound/items/handling/ammobox_pickup.ogg
new file mode 100644
index 00000000000..9532a7697b9
Binary files /dev/null and b/sound/items/handling/ammobox_pickup.ogg differ
diff --git a/sound/items/handling/book_drop.ogg b/sound/items/handling/book_drop.ogg
new file mode 100644
index 00000000000..b492b665f59
Binary files /dev/null and b/sound/items/handling/book_drop.ogg differ
diff --git a/sound/items/handling/book_pickup.ogg b/sound/items/handling/book_pickup.ogg
new file mode 100644
index 00000000000..120a4e4721a
Binary files /dev/null and b/sound/items/handling/book_pickup.ogg differ
diff --git a/sound/items/handling/cardboardbox_drop.ogg b/sound/items/handling/cardboardbox_drop.ogg
new file mode 100644
index 00000000000..7070ba1c342
Binary files /dev/null and b/sound/items/handling/cardboardbox_drop.ogg differ
diff --git a/sound/items/handling/cardboardbox_pickup.ogg b/sound/items/handling/cardboardbox_pickup.ogg
new file mode 100644
index 00000000000..aa4e72129b0
Binary files /dev/null and b/sound/items/handling/cardboardbox_pickup.ogg differ
diff --git a/sound/items/handling/cloth_drop.ogg b/sound/items/handling/cloth_drop.ogg
new file mode 100644
index 00000000000..5bf734caba0
Binary files /dev/null and b/sound/items/handling/cloth_drop.ogg differ
diff --git a/sound/items/handling/cloth_pickup.ogg b/sound/items/handling/cloth_pickup.ogg
new file mode 100644
index 00000000000..f46988887d1
Binary files /dev/null and b/sound/items/handling/cloth_pickup.ogg differ
diff --git a/sound/items/handling/component_drop.ogg b/sound/items/handling/component_drop.ogg
new file mode 100644
index 00000000000..093fde7c90c
Binary files /dev/null and b/sound/items/handling/component_drop.ogg differ
diff --git a/sound/items/handling/component_pickup.ogg b/sound/items/handling/component_pickup.ogg
new file mode 100644
index 00000000000..cfaba1dd193
Binary files /dev/null and b/sound/items/handling/component_pickup.ogg differ
diff --git a/sound/items/handling/crowbar_drop.ogg b/sound/items/handling/crowbar_drop.ogg
new file mode 100644
index 00000000000..77464110661
Binary files /dev/null and b/sound/items/handling/crowbar_drop.ogg differ
diff --git a/sound/items/handling/crowbar_pickup.ogg b/sound/items/handling/crowbar_pickup.ogg
new file mode 100644
index 00000000000..79b276f8451
Binary files /dev/null and b/sound/items/handling/crowbar_pickup.ogg differ
diff --git a/sound/items/handling/disk_drop.ogg b/sound/items/handling/disk_drop.ogg
new file mode 100644
index 00000000000..3174b88117f
Binary files /dev/null and b/sound/items/handling/disk_drop.ogg differ
diff --git a/sound/items/handling/disk_pickup.ogg b/sound/items/handling/disk_pickup.ogg
new file mode 100644
index 00000000000..8f67406a5fb
Binary files /dev/null and b/sound/items/handling/disk_pickup.ogg differ
diff --git a/sound/items/handling/multitool_drop.ogg b/sound/items/handling/multitool_drop.ogg
new file mode 100644
index 00000000000..67e0a41042c
Binary files /dev/null and b/sound/items/handling/multitool_drop.ogg differ
diff --git a/sound/items/handling/multitool_pickup.ogg b/sound/items/handling/multitool_pickup.ogg
new file mode 100644
index 00000000000..cbd598ce896
Binary files /dev/null and b/sound/items/handling/multitool_pickup.ogg differ
diff --git a/sound/items/handling/paper_drop.ogg b/sound/items/handling/paper_drop.ogg
new file mode 100644
index 00000000000..27ce2b3d1a7
Binary files /dev/null and b/sound/items/handling/paper_drop.ogg differ
diff --git a/sound/items/handling/paper_pickup.ogg b/sound/items/handling/paper_pickup.ogg
new file mode 100644
index 00000000000..55ae2b3d2db
Binary files /dev/null and b/sound/items/handling/paper_pickup.ogg differ
diff --git a/sound/items/handling/screwdriver_drop.ogg b/sound/items/handling/screwdriver_drop.ogg
new file mode 100644
index 00000000000..d460fd0aeda
Binary files /dev/null and b/sound/items/handling/screwdriver_drop.ogg differ
diff --git a/sound/items/handling/screwdriver_pickup.ogg b/sound/items/handling/screwdriver_pickup.ogg
new file mode 100644
index 00000000000..368f1bfd275
Binary files /dev/null and b/sound/items/handling/screwdriver_pickup.ogg differ
diff --git a/sound/items/handling/toolbelt_drop.ogg b/sound/items/handling/toolbelt_drop.ogg
new file mode 100644
index 00000000000..2a3c4655c49
Binary files /dev/null and b/sound/items/handling/toolbelt_drop.ogg differ
diff --git a/sound/items/handling/toolbelt_pickup.ogg b/sound/items/handling/toolbelt_pickup.ogg
new file mode 100644
index 00000000000..58e5d25979a
Binary files /dev/null and b/sound/items/handling/toolbelt_pickup.ogg differ
diff --git a/sound/items/handling/toolbox_drop.ogg b/sound/items/handling/toolbox_drop.ogg
new file mode 100644
index 00000000000..abf56946278
Binary files /dev/null and b/sound/items/handling/toolbox_drop.ogg differ
diff --git a/sound/items/handling/toolbox_pickup.ogg b/sound/items/handling/toolbox_pickup.ogg
new file mode 100644
index 00000000000..01a4ab4b3fa
Binary files /dev/null and b/sound/items/handling/toolbox_pickup.ogg differ
diff --git a/sound/items/handling/weldingtool_drop.ogg b/sound/items/handling/weldingtool_drop.ogg
new file mode 100644
index 00000000000..58b722ad7a7
Binary files /dev/null and b/sound/items/handling/weldingtool_drop.ogg differ
diff --git a/sound/items/handling/weldingtool_pickup.ogg b/sound/items/handling/weldingtool_pickup.ogg
new file mode 100644
index 00000000000..da78b06b848
Binary files /dev/null and b/sound/items/handling/weldingtool_pickup.ogg differ
diff --git a/sound/items/handling/wirecutter_drop.ogg b/sound/items/handling/wirecutter_drop.ogg
new file mode 100644
index 00000000000..e099870fc7d
Binary files /dev/null and b/sound/items/handling/wirecutter_drop.ogg differ
diff --git a/sound/items/handling/wirecutter_pickup.ogg b/sound/items/handling/wirecutter_pickup.ogg
new file mode 100644
index 00000000000..078faaf4324
Binary files /dev/null and b/sound/items/handling/wirecutter_pickup.ogg differ
diff --git a/sound/items/handling/wrench_drop.ogg b/sound/items/handling/wrench_drop.ogg
new file mode 100644
index 00000000000..86020bf822c
Binary files /dev/null and b/sound/items/handling/wrench_drop.ogg differ
diff --git a/sound/items/handling/wrench_pickup.ogg b/sound/items/handling/wrench_pickup.ogg
new file mode 100644
index 00000000000..860e0d70879
Binary files /dev/null and b/sound/items/handling/wrench_pickup.ogg differ