mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 01:34:01 +00:00
## About The Pull Request moves all implementations (im aware of) for "Im a parent type dont spawn me please" to the datum layer to standardized behavior adds a standerized proc for filtering out "bad" items that we dont want spawning. applies to it the subtype vendor, gifts, and a new spawner and mystery box for a random gun (neither playerfacing) "port" of https://github.com/shiptest-ss13/Shiptest/pull/4621 https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa small warning: I dont have EVERY abstract type defined right now but, ive done a good enough job for now. Im tired of data entry rn ## Why It's Good For The Game standardizing behavior. Might be a micro hit to performance however having this lets us not rely on icon state to determine whether something is a parent type and makes it much easier to tell something is a parent type (could be applied further to things like admin spawning menus and things like that). need feedback on if this is actually good for the game. ## Changelog 🆑 add: Soda cans show up in the silver slime drink table. add: Examine tag for items that are not mean to show up ingame. refactor: Standardizes how gifts rule out abstract types. fix: gifts no longer check if something has an inhand, massively expanding the list of potential items. /🆑
266 lines
9.4 KiB
Plaintext
266 lines
9.4 KiB
Plaintext
//copy pasta of the space piano, don't hurt me -Pete
|
|
/obj/item/instrument
|
|
name = "generic instrument"
|
|
force = 10
|
|
max_integrity = 100
|
|
resistance_flags = FLAMMABLE
|
|
icon = 'icons/obj/art/musician.dmi'
|
|
lefthand_file = 'icons/mob/inhands/equipment/instruments_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/instruments_righthand.dmi'
|
|
abstract_type = /obj/item/instrument
|
|
/// Our song datum.
|
|
var/datum/song/handheld/song
|
|
/// Our allowed list of instrument ids. This is nulled on initialize.
|
|
var/list/allowed_instrument_ids
|
|
/// How far away our song datum can be heard.
|
|
var/instrument_range = 15
|
|
|
|
/obj/item/instrument/Initialize(mapload)
|
|
. = ..()
|
|
song = new(src, allowed_instrument_ids, instrument_range)
|
|
allowed_instrument_ids = null //We don't need this clogging memory after its used.
|
|
|
|
/obj/item/instrument/Destroy()
|
|
QDEL_NULL(song)
|
|
return ..()
|
|
|
|
/obj/item/instrument/proc/can_play(atom/music_player)
|
|
if(!ismob(music_player))
|
|
return FALSE
|
|
var/mob/user = music_player
|
|
if(user.incapacitated)
|
|
return FALSE
|
|
if(!Adjacent(user))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/obj/item/instrument/suicide_act(mob/living/user)
|
|
user.visible_message(span_suicide("[user] begins to play 'Gloomy Sunday'! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
return BRUTELOSS
|
|
|
|
/obj/item/instrument/ui_interact(mob/user, datum/tgui/ui)
|
|
return song.ui_interact(user)
|
|
|
|
/obj/item/instrument/violin
|
|
name = "space violin"
|
|
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
|
icon_state = "violin"
|
|
inhand_icon_state = "violin"
|
|
hitsound = SFX_SWING_HIT
|
|
allowed_instrument_ids = "violin"
|
|
|
|
/obj/item/instrument/violin/golden
|
|
name = "golden violin"
|
|
desc = "A golden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
|
icon_state = "golden_violin"
|
|
inhand_icon_state = "golden_violin"
|
|
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
|
|
|
/obj/item/instrument/banjo
|
|
name = "banjo"
|
|
desc = "A 'Mura' brand banjo. It's pretty much just a drum with a neck and strings."
|
|
icon_state = "banjo"
|
|
inhand_icon_state = "banjo"
|
|
attack_verb_continuous = list("scruggs-styles", "hum-diggitys", "shin-digs", "clawhammers")
|
|
attack_verb_simple = list("scruggs-style", "hum-diggity", "shin-dig", "clawhammer")
|
|
hitsound = 'sound/items/weapons/banjoslap.ogg'
|
|
allowed_instrument_ids = "banjo"
|
|
|
|
/obj/item/instrument/guitar
|
|
name = "guitar"
|
|
desc = "It's made of wood and has bronze strings."
|
|
icon_state = "guitar"
|
|
inhand_icon_state = "guitar"
|
|
attack_verb_continuous = list("plays metal on", "serenades", "crashes", "smashes")
|
|
attack_verb_simple = list("play metal on", "serenade", "crash", "smash")
|
|
hitsound = 'sound/items/weapons/stringsmash.ogg'
|
|
allowed_instrument_ids = list("guitar","csteelgt","cnylongt", "ccleangt", "cmutedgt")
|
|
|
|
/obj/item/instrument/eguitar
|
|
name = "electric guitar"
|
|
desc = "Makes all your shredding needs possible."
|
|
icon_state = "eguitar"
|
|
inhand_icon_state = "eguitar"
|
|
force = 12
|
|
attack_verb_continuous = list("plays metal on", "shreds", "crashes", "smashes")
|
|
attack_verb_simple = list("play metal on", "shred", "crash", "smash")
|
|
hitsound = 'sound/items/weapons/stringsmash.ogg'
|
|
allowed_instrument_ids = "eguitar"
|
|
|
|
/obj/item/instrument/glockenspiel
|
|
name = "glockenspiel"
|
|
desc = "Smooth metal bars perfect for any marching band."
|
|
icon_state = "glockenspiel"
|
|
allowed_instrument_ids = list("glockenspiel","crvibr", "sgmmbox", "r3celeste")
|
|
inhand_icon_state = "glockenspiel"
|
|
|
|
/obj/item/instrument/accordion
|
|
name = "accordion"
|
|
desc = "Pun-Pun not included."
|
|
icon_state = "accordion"
|
|
allowed_instrument_ids = list("crack", "crtango", "accordion")
|
|
inhand_icon_state = "accordion"
|
|
|
|
/obj/item/instrument/trumpet
|
|
name = "trumpet"
|
|
desc = "To announce the arrival of the king!"
|
|
icon_state = "trumpet"
|
|
allowed_instrument_ids = "crtrumpet"
|
|
inhand_icon_state = "trumpet"
|
|
|
|
/obj/item/instrument/trumpet/spectral
|
|
name = "spectral trumpet"
|
|
desc = "Things are about to get spooky!"
|
|
icon_state = "spectral_trumpet"
|
|
inhand_icon_state = "spectral_trumpet"
|
|
force = 0
|
|
attack_verb_continuous = list("plays", "jazzes", "trumpets", "mourns", "doots", "spooks")
|
|
attack_verb_simple = list("play", "jazz", "trumpet", "mourn", "doot", "spook")
|
|
var/single_use = FALSE
|
|
|
|
/obj/item/instrument/trumpet/spectral/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/spooky, too_spooky = !single_use, single_use = single_use)
|
|
|
|
/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
|
|
playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1)
|
|
return ..()
|
|
|
|
/obj/item/instrument/trumpet/spectral/one_doot
|
|
single_use = TRUE
|
|
|
|
/obj/item/instrument/saxophone
|
|
name = "saxophone"
|
|
desc = "This soothing sound will be sure to leave your audience in tears."
|
|
icon_state = "saxophone"
|
|
allowed_instrument_ids = "saxophone"
|
|
inhand_icon_state = "saxophone"
|
|
|
|
/obj/item/instrument/saxophone/spectral
|
|
name = "spectral saxophone"
|
|
desc = "This spooky sound will be sure to leave mortals in bones."
|
|
icon_state = "saxophone"
|
|
inhand_icon_state = "saxophone"
|
|
force = 0
|
|
attack_verb_continuous = list("plays", "jazzes", "saxxes", "mourns", "doots", "spooks")
|
|
attack_verb_simple = list("play", "jazz", "sax", "mourn", "doot", "spook")
|
|
var/single_use = FALSE
|
|
|
|
/obj/item/instrument/saxophone/spectral/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/spooky, too_spooky = !single_use, single_use = single_use)
|
|
|
|
/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
|
|
playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1)
|
|
return ..()
|
|
|
|
/obj/item/instrument/saxophone/spectral/one_doot
|
|
single_use = TRUE
|
|
|
|
/obj/item/instrument/trombone
|
|
name = "trombone"
|
|
desc = "How can any pool table ever hope to compete?"
|
|
icon_state = "trombone"
|
|
allowed_instrument_ids = list("crtrombone", "crbrass", "trombone")
|
|
inhand_icon_state = "trombone"
|
|
|
|
/obj/item/instrument/trombone/spectral
|
|
name = "spectral trombone"
|
|
desc = "A skeleton's favorite instrument. Apply directly on the mortals."
|
|
icon_state = "trombone"
|
|
inhand_icon_state = "trombone"
|
|
force = 0
|
|
attack_verb_continuous = list("plays", "jazzes", "trombones", "mourns", "doots", "spooks")
|
|
attack_verb_simple = list("play", "jazz", "trombone", "mourn", "doot", "spook")
|
|
var/single_use = FALSE
|
|
|
|
/obj/item/instrument/trombone/spectral/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/spooky, too_spooky = !single_use, single_use = single_use)
|
|
|
|
/obj/item/instrument/trombone/spectral/one_doot
|
|
single_use = TRUE
|
|
|
|
/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers)
|
|
playsound(src, 'sound/runtime/instruments/trombone/Cn4.mid', 1000, 1, -1)
|
|
return ..()
|
|
|
|
/obj/item/instrument/recorder
|
|
name = "recorder"
|
|
desc = "Just like in school, playing ability and all."
|
|
force = 5
|
|
icon_state = "recorder"
|
|
allowed_instrument_ids = "recorder"
|
|
inhand_icon_state = "recorder"
|
|
|
|
/obj/item/instrument/harmonica
|
|
name = "harmonica"
|
|
desc = "For when you get a bad case of the space blues."
|
|
icon_state = "harmonica"
|
|
allowed_instrument_ids = list("crharmony", "harmonica")
|
|
inhand_icon_state = "harmonica"
|
|
slot_flags = ITEM_SLOT_MASK
|
|
force = 5
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
actions_types = list(/datum/action/item_action/instrument)
|
|
action_slots = ALL
|
|
|
|
/obj/item/instrument/harmonica/equipped(mob/user, slot, initial = FALSE)
|
|
. = ..()
|
|
if(!(slot & slot_flags))
|
|
return
|
|
RegisterSignal(user, COMSIG_MOB_SAY, PROC_REF(handle_speech))
|
|
|
|
/obj/item/instrument/harmonica/dropped(mob/user, silent = FALSE)
|
|
. = ..()
|
|
UnregisterSignal(user, COMSIG_MOB_SAY)
|
|
|
|
/obj/item/instrument/harmonica/proc/handle_speech(datum/source, list/speech_args)
|
|
SIGNAL_HANDLER
|
|
if(!song.playing)
|
|
return
|
|
if(!ismob(loc))
|
|
CRASH("[src] was still registered to listen in on [source] but was not found to be on their mob.")
|
|
to_chat(loc, span_warning("You stop playing the harmonica to talk..."))
|
|
song.playing = FALSE
|
|
|
|
/datum/action/item_action/instrument
|
|
name = "Use Instrument"
|
|
desc = "Use the instrument specified"
|
|
|
|
/datum/action/item_action/instrument/do_effect(trigger_flags)
|
|
if(!istype(target, /obj/item/instrument))
|
|
return FALSE
|
|
var/obj/item/instrument/instrument = target
|
|
instrument.interact(usr)
|
|
return TRUE
|
|
|
|
/obj/item/instrument/bikehorn
|
|
name = "gilded bike horn"
|
|
desc = "An exquisitely decorated bike horn, capable of honking in a variety of notes."
|
|
icon_state = "bike_horn"
|
|
inhand_icon_state = "bike_horn"
|
|
lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/horns_righthand.dmi'
|
|
allowed_instrument_ids = list("bikehorn", "honk")
|
|
attack_verb_continuous = list("beautifully honks")
|
|
attack_verb_simple = list("beautifully honk")
|
|
w_class = WEIGHT_CLASS_TINY
|
|
force = 0
|
|
throw_speed = 3
|
|
throw_range = 15
|
|
hitsound = 'sound/items/bikehorn.ogg'
|
|
|
|
/obj/item/instrument/musicalmoth
|
|
name = "musical moth"
|
|
desc = "Despite its popularity, this controversial musical toy was eventually banned due to its unethically sampled sounds of moths screaming in agony."
|
|
icon_state = "mothsician"
|
|
allowed_instrument_ids = "mothscream"
|
|
attack_verb_continuous = list("flutters", "flaps")
|
|
attack_verb_simple = list("flutter", "flap")
|
|
w_class = WEIGHT_CLASS_TINY
|
|
force = 0
|
|
hitsound = 'sound/mobs/humanoids/moth/scream_moth.ogg'
|
|
custom_price = PAYCHECK_COMMAND * 2.37
|
|
custom_premium_price = PAYCHECK_COMMAND * 2.37
|