mirror of
https://github.com/Skyrat-SS13/Skyrat-tg.git
synced 2026-07-16 10:24:02 +01:00
5b34cb9da3
* Material sheet sounds and Vary support for picking up/dropping items (#84860) ## About The Pull Request https://github.com/tgstation/tgstation/assets/96586172/b16ab800-8baf-4ef5-9f50-d39d5efd21f7 All materials are a subtype of `sheet` (other than rod) so I put the general pickup/drop sound on that. Materials that got their own special sound: - wood - glass - plastic ## Why It's Good For The Game Giving some heft and sound to items makes it more satisfying to use them and move them around, these sounds also play when the items are flung around so it'll make more noise during explosions which makes sense. ## Changelog 🆑 sound: all materials now have a sound for picking up and dropping code: items now have pitch vary sound support for dropping and picking up items /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com> * Material sheet sounds and Vary support for picking up/dropping items --------- Co-authored-by: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
86 lines
2.9 KiB
Plaintext
86 lines
2.9 KiB
Plaintext
/obj/item/stack/sheet
|
|
name = "sheet"
|
|
lefthand_file = 'icons/mob/inhands/items/sheets_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/items/sheets_righthand.dmi'
|
|
icon_state = "sheet-metal_3"
|
|
full_w_class = WEIGHT_CLASS_NORMAL
|
|
force = 5
|
|
throwforce = 5
|
|
max_amount = 50
|
|
throw_speed = 1
|
|
throw_range = 3
|
|
attack_verb_continuous = list("bashes", "batters", "bludgeons", "thrashes", "smashes")
|
|
attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "smash")
|
|
novariants = FALSE
|
|
material_flags = MATERIAL_EFFECTS
|
|
pickup_sound = 'sound/items/metal_pick_up.ogg'
|
|
drop_sound = 'sound/items/metal_drop.ogg'
|
|
var/sheettype = null //this is used for girders in the creation of walls/false walls
|
|
///If true, this is worth points in the gulag labour stacker
|
|
var/gulag_valid = FALSE
|
|
///Set to true if this is vended from a material storage
|
|
var/manufactured = FALSE
|
|
///What type of wall does this sheet spawn
|
|
var/walltype
|
|
/// whether this sheet can be sniffed by the material sniffer
|
|
var/sniffable = FALSE
|
|
/// this makes pickup and drop sounds vary
|
|
sound_vary = TRUE
|
|
|
|
/obj/item/stack/sheet/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
|
|
. = ..()
|
|
pixel_x = rand(-4, 4)
|
|
pixel_y = rand(-4, 4)
|
|
if(sniffable && amount >= 10 && is_station_level(z))
|
|
GLOB.sniffable_sheets |= src
|
|
|
|
/obj/item/stack/sheet/Destroy(force)
|
|
if(sniffable)
|
|
GLOB.sniffable_sheets -= src
|
|
return ..()
|
|
|
|
/obj/item/stack/sheet/examine(mob/user)
|
|
. = ..()
|
|
if (manufactured && gulag_valid)
|
|
. += "It has been embossed with a manufacturer's mark of guaranteed quality."
|
|
|
|
/obj/item/stack/sheet/add(_amount)
|
|
. = ..()
|
|
if(sniffable && amount >= 10 && is_station_level(z))
|
|
GLOB.sniffable_sheets |= src
|
|
|
|
/obj/item/stack/sheet/merge(obj/item/stack/sheet/target_stack, limit)
|
|
. = ..()
|
|
manufactured = manufactured && target_stack.manufactured
|
|
|
|
/obj/item/stack/sheet/copy_evidences(obj/item/stack/sheet/from)
|
|
. = ..()
|
|
manufactured = from.manufactured
|
|
|
|
/// removing from sniffable handled by the sniffer itself when it checks for targets
|
|
|
|
/**
|
|
* Facilitates sheets being smacked on the floor
|
|
*
|
|
* This is used for crafting by hitting the floor with items.
|
|
* The inital use case is glass sheets breaking in to shards when the floor is hit.
|
|
* Args:
|
|
* * user: The user that did the action
|
|
* * params: paramas passed in from attackby
|
|
*/
|
|
/obj/item/stack/sheet/proc/on_attack_floor(mob/user, params)
|
|
var/list/shards = list()
|
|
for(var/datum/material/mat in custom_materials)
|
|
if(mat.shard_type)
|
|
var/obj/item/new_shard = new mat.shard_type(user.loc)
|
|
new_shard.add_fingerprint(user)
|
|
shards += "\a [new_shard.name]"
|
|
if(!shards.len)
|
|
return FALSE
|
|
user.do_attack_animation(src, ATTACK_EFFECT_BOOP)
|
|
playsound(src, SFX_SHATTER, 70, TRUE)
|
|
use(1)
|
|
user.visible_message(span_notice("[user] shatters the sheet of [name] on the floor, leaving [english_list(shards)]."), \
|
|
span_notice("You shatter the sheet of [name] on the floor, leaving [english_list(shards)]."))
|
|
return TRUE
|