//copy pasta of the space piano, don't hurt me -Pete /obj/item/instrument name = "generic instrument" force = 10 health = 100 //resistance_flags = FLAMMABLE icon = 'icons/obj/musician.dmi' item_icons = list( slot_l_hand_str = 'icons/mob/items/lefthand_instruments.dmi', slot_r_hand_str = 'icons/mob/items/righthand_instruments.dmi', ) /// 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 it's used. /obj/item/instrument/Destroy() QDEL_NULL(song) return ..() /obj/item/instrument/proc/should_stop_playing(mob/user) return user.incapacitated() || !((loc == user) || (isturf(loc) && Adjacent(user))) // sorry, no more TK playing. /obj/item/instrument/suicide_act(mob/user) var/datum/gender/T = gender_datums[user.get_visible_gender()] user.visible_message("[user] begins to play 'Gloomy Sunday'! It looks like [T.hes] trying to commit suicide!") return (BRUTELOSS) /obj/item/instrument/attack_self(mob/user) if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return TRUE interact(user) /obj/item/instrument/interact(mob/living/user) if(!isliving(user) || user.incapacitated()) return user.set_machine(src) song.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" hitsound = "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" /obj/item/instrument/piano_synth name = "synthesizer" desc = "An advanced electronic synthesizer that can be used as various instruments." icon_state = "synth" allowed_instrument_ids = "piano" /obj/item/instrument/piano_synth/Initialize(mapload) . = ..() song.allowed_instrument_ids = SSinstruments.synthesizer_instrument_ids /obj/item/instrument/piano_synth/headphones name = "headphones" desc = "Unce unce unce unce. Boop!" icon_state = "headphones" slot_flags = SLOT_EARS | SLOT_HEAD force = 0 w_class = ITEMSIZE_SMALL instrument_range = 1 /obj/item/instrument/piano_synth/headphones/Initialize() . = ..() RegisterSignal(src, COMSIG_SONG_START, .proc/start_playing) RegisterSignal(src, COMSIG_SONG_END, .proc/stop_playing) /** * Called by a component signal when our song starts playing. */ /obj/item/instrument/piano_synth/headphones/proc/start_playing() SIGNAL_HANDLER icon_state = "[initial(icon_state)]_on" if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(H.l_ear == src || H.r_ear == src) H.update_inv_ears() else if(H.head == src) H.update_inv_head() /** * Called by a component signal when our song stops playing. */ /obj/item/instrument/piano_synth/headphones/proc/stop_playing() SIGNAL_HANDLER icon_state = "[initial(icon_state)]" if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(H.l_ear == src || H.r_ear == src) H.update_inv_ears() else if(H.head == src) H.update_inv_head() /obj/item/instrument/piano_synth/headphones/spacepods name = "\improper Nanotrasen space pods" desc = "Flex your money, AND ignore what everyone else says, all at once!" icon_state = "spacepods" slot_flags = SLOT_EARS //strip_delay = 100 //air pods don't fall out instrument_range = 0 //you're paying for quality here /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" attack_verb = list("scruggs-styled", "hum-diggitied", "shin-dug", "clawhammered") hitsound = 'sound/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" attack_verb = list("played metal on", "serenaded", "crashed", "smashed") hitsound = 'sound/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" force = 12 attack_verb = list("played metal on", "shreded", "crashed", "smashed") hitsound = 'sound/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") /obj/item/instrument/accordion name = "accordion" desc = "Pun-Pun not included." icon_state = "accordion" allowed_instrument_ids = list("crack", "crtango", "accordion") /obj/item/instrument/trumpet name = "trumpet" desc = "To announce the arrival of the king!" icon_state = "trumpet" allowed_instrument_ids = "crtrumpet" /obj/item/instrument/trumpet/spectral name = "spectral trumpet" desc = "Things are about to get spooky!" icon_state = "spectral_trumpet" force = 0 attack_verb = list("played", "jazzed", "trumpeted", "mourned", "dooted", "spooked") /* /obj/item/instrument/trumpet/spectral/Initialize() . = ..() AddComponent(/datum/component/spooky) */ /obj/item/instrument/trumpet/spectral/attack(mob/living/carbon/C, mob/user) playsound (src, 'sound/instruments/trombone/En4.mid', 100,1,-1) ..() /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" /obj/item/instrument/saxophone/spectral name = "spectral saxophone" desc = "This spooky sound will be sure to leave mortals in bones." icon_state = "saxophone" force = 0 attack_verb = list("played", "jazzed", "saxed", "mourned", "dooted", "spooked") /* /obj/item/instrument/saxophone/spectral/Initialize() . = ..() AddComponent(/datum/component/spooky) */ /obj/item/instrument/saxophone/spectral/attack(mob/living/carbon/C, mob/user) playsound (src, 'sound/instruments/saxophone/En4.mid', 100,1,-1) ..() /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") /obj/item/instrument/trombone/spectral name = "spectral trombone" desc = "A skeleton's favorite instrument. Apply directly on the mortals." icon_state = "trombone" force = 0 attack_verb = list("played", "jazzed", "tromboneed", "mourned", "dooted", "spooked") /* /obj/item/instrument/trombone/spectral/Initialize() . = ..() AddComponent(/datum/component/spooky) */ /obj/item/instrument/trombone/spectral/attack(mob/living/carbon/C, mob/user) playsound (src, 'sound/instruments/trombone/Cn4.mid', 100,1,-1) ..() /obj/item/instrument/recorder name = "recorder" desc = "Just like in school, playing ability and all." force = 5 icon_state = "recorder" allowed_instrument_ids = "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") slot_flags = SLOT_MASK force = 5 w_class = ITEMSIZE_SMALL /* actions_types = list(/datum/action/item_action/instrument) /obj/item/instrument/harmonica/proc/handle_speech(datum/source, list/speech_args) SIGNAL_HANDLER if(song.playing && ismob(loc)) to_chat(loc, "You stop playing the harmonica to talk...") song.playing = FALSE /obj/item/instrument/harmonica/equipped(mob/M, slot) . = ..() RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) /obj/item/instrument/harmonica/dropped(mob/M) . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) */ /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" item_icons = list( slot_l_hand_str = 'icons/mob/items/lefthand_horns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_horns.dmi', ) allowed_instrument_ids = list("bikehorn", "honk") attack_verb = list("beautifully honked") w_class = ITEMSIZE_SMALL force = 0 throw_speed = 3 throw_range = 15 hitsound = 'sound/items/bikehorn.ogg' /* /obj/item/choice_beacon/music name = "instrument delivery beacon" desc = "Summon your tool of art." icon_state = "gangtool-red" /obj/item/choice_beacon/music/generate_display_names() var/static/list/instruments if(!instruments) instruments = list() var/list/templist = list(/obj/item/instrument/violin, /obj/item/instrument/piano_synth, /obj/item/instrument/banjo, /obj/item/instrument/guitar, /obj/item/instrument/eguitar, /obj/item/instrument/glockenspiel, /obj/item/instrument/accordion, /obj/item/instrument/trumpet, /obj/item/instrument/saxophone, /obj/item/instrument/trombone, /obj/item/instrument/recorder, /obj/item/instrument/harmonica, /obj/item/instrument/piano_synth/headphones ) for(var/V in templist) var/atom/A = V instruments[initial(A.name)] = A return instruments */ /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 = list("fluttered", "flaped") w_class = ITEMSIZE_SMALL force = 0 hitsound = 'sound/voice/moth/scream_moth.ogg'