mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-09 00:01:52 +01:00
84b64328b9
cl coiax add: Any talented Musician can now use any instrument to lift spirits, and ease burdens. They can now also use the space piano and minimog to grant people the Good Music buffs, just like a handheld instrument. /cl A living mob with TRAIT_MUSICIAN will now apply the Good Music status effect to everyone who can hear the music. The buff will now apply even to players who have disabled instrument sounds. The Good Music status effect lasts for 6 seconds after the musician stops playing. Added STATUS_EFFECT_REFRESH that just refreshes the duration of a status effect, rather than instancing a new one.
251 lines
8.1 KiB
Plaintext
251 lines
8.1 KiB
Plaintext
//copy pasta of the space piano, don't hurt me -Pete
|
|
/obj/item/instrument
|
|
name = "generic instrument"
|
|
resistance_flags = FLAMMABLE
|
|
force = 10
|
|
max_integrity = 100
|
|
icon = 'icons/obj/musician.dmi'
|
|
lefthand_file = 'icons/mob/inhands/equipment/instruments_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/instruments_righthand.dmi'
|
|
var/datum/song/handheld/song
|
|
var/instrumentId = "generic"
|
|
var/instrumentExt = "mid"
|
|
|
|
/obj/item/instrument/Initialize()
|
|
. = ..()
|
|
song = new(instrumentId, src, instrumentExt)
|
|
|
|
/obj/item/instrument/Destroy()
|
|
QDEL_NULL(song)
|
|
. = ..()
|
|
|
|
/obj/item/instrument/suicide_act(mob/user)
|
|
user.visible_message("<span class='suicide'>[user] begins to play 'Gloomy Sunday'! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
|
return (BRUTELOSS)
|
|
|
|
/obj/item/instrument/Initialize(mapload)
|
|
. = ..()
|
|
if(mapload)
|
|
song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
|
|
|
|
/obj/item/instrument/attack_self(mob/user)
|
|
if(!user.IsAdvancedToolUser())
|
|
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
|
return 1
|
|
interact(user)
|
|
|
|
/obj/item/instrument/interact(mob/user)
|
|
ui_interact(user)
|
|
|
|
/obj/item/instrument/ui_interact(mob/living/user)
|
|
if(!isliving(user) || user.stat || user.restrained() || !(user.mobility_flags & MOBILITY_STAND))
|
|
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"
|
|
item_state = "violin"
|
|
hitsound = "swing_hit"
|
|
instrumentId = "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"
|
|
item_state = "golden_violin"
|
|
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
|
|
|
/obj/item/instrument/piano_synth
|
|
name = "synthesizer"
|
|
desc = "An advanced electronic synthesizer that can be used as various instruments."
|
|
icon_state = "synth"
|
|
item_state = "synth"
|
|
instrumentId = "piano"
|
|
instrumentExt = "ogg"
|
|
var/static/list/insTypes = list("accordion" = "mid", "bikehorn" = "ogg", "glockenspiel" = "mid", "guitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "mid", "xylophone" = "mid") //No eguitar you ear-rapey fuckers.
|
|
actions_types = list(/datum/action/item_action/synthswitch)
|
|
|
|
/obj/item/instrument/piano_synth/proc/changeInstrument(name = "piano")
|
|
song.instrumentDir = name
|
|
song.instrumentExt = insTypes[name]
|
|
|
|
/obj/item/instrument/guitar
|
|
name = "guitar"
|
|
desc = "It's made of wood and has bronze strings."
|
|
icon_state = "guitar"
|
|
item_state = "guitar"
|
|
instrumentExt = "ogg"
|
|
attack_verb = list("played metal on", "serenaded", "crashed", "smashed")
|
|
hitsound = 'sound/weapons/stringsmash.ogg'
|
|
instrumentId = "guitar"
|
|
|
|
/obj/item/instrument/eguitar
|
|
name = "electric guitar"
|
|
desc = "Makes all your shredding needs possible."
|
|
icon_state = "eguitar"
|
|
item_state = "eguitar"
|
|
force = 12
|
|
attack_verb = list("played metal on", "shredded", "crashed", "smashed")
|
|
hitsound = 'sound/weapons/stringsmash.ogg'
|
|
instrumentId = "eguitar"
|
|
instrumentExt = "ogg"
|
|
|
|
/obj/item/instrument/glockenspiel
|
|
name = "glockenspiel"
|
|
desc = "Smooth metal bars perfect for any marching band."
|
|
icon_state = "glockenspiel"
|
|
item_state = "glockenspiel"
|
|
instrumentId = "glockenspiel"
|
|
|
|
/obj/item/instrument/accordion
|
|
name = "accordion"
|
|
desc = "Pun-Pun not included."
|
|
icon_state = "accordion"
|
|
item_state = "accordion"
|
|
instrumentId = "accordion"
|
|
|
|
/obj/item/instrument/trumpet
|
|
name = "trumpet"
|
|
desc = "To announce the arrival of the king!"
|
|
icon_state = "trumpet"
|
|
item_state = "trombone"
|
|
instrumentId = "trombone"
|
|
|
|
/obj/item/instrument/trumpet/spectral
|
|
name = "spectral trumpet"
|
|
desc = "Things are about to get spooky!"
|
|
icon_state = "trumpet"
|
|
item_state = "trombone"
|
|
force = 0
|
|
instrumentId = "trombone"
|
|
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 (loc, '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"
|
|
item_state = "saxophone"
|
|
instrumentId = "saxophone"
|
|
|
|
/obj/item/instrument/saxophone/spectral
|
|
name = "spectral saxophone"
|
|
desc = "This spooky sound will be sure to leave mortals in bones."
|
|
icon_state = "saxophone"
|
|
item_state = "saxophone"
|
|
instrumentId = "saxophone"
|
|
force = 0
|
|
attack_verb = list("played","jazzed","saxxed","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 (loc, '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"
|
|
item_state = "trombone"
|
|
instrumentId = "trombone"
|
|
|
|
/obj/item/instrument/trombone/spectral
|
|
name = "spectral trombone"
|
|
desc = "A skeleton's favorite instrument. Apply directly on the mortals."
|
|
instrumentId = "trombone"
|
|
icon_state = "trombone"
|
|
item_state = "trombone"
|
|
force = 0
|
|
attack_verb = list("played","jazzed","tromboned","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 (loc, '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"
|
|
item_state = "recorder"
|
|
instrumentId = "recorder"
|
|
|
|
/obj/item/instrument/harmonica
|
|
name = "harmonica"
|
|
desc = "For when you get a bad case of the space blues."
|
|
icon_state = "harmonica"
|
|
item_state = "harmonica"
|
|
instrumentId = "harmonica"
|
|
slot_flags = ITEM_SLOT_MASK
|
|
force = 5
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
actions_types = list(/datum/action/item_action/instrument)
|
|
|
|
/obj/item/instrument/harmonica/speechModification(message)
|
|
if(song.playing && ismob(loc))
|
|
to_chat(loc, "<span class='warning'>You stop playing the harmonica to talk...</span>")
|
|
song.playing = FALSE
|
|
return message
|
|
|
|
/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_state = "bike_horn"
|
|
lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/horns_righthand.dmi'
|
|
attack_verb = list("beautifully honks")
|
|
instrumentId = "bikehorn"
|
|
instrumentExt = "ogg"
|
|
w_class = WEIGHT_CLASS_TINY
|
|
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/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
|
|
)
|
|
for(var/V in templist)
|
|
var/atom/A = V
|
|
instruments[initial(A.name)] = A
|
|
return instruments
|