mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Ports TG's instrument system and guitar (#11204)
* Code related changes for porting instrument system
* guitar icon
* fixes object pathing on other maps and such
* Reorganizes sound files for the new system(removes all sharps and reduntant notes), adds guitar notes
* Changelog
* whoops need to include the file too
* removes thing I had for testing purposes
* Adds inhands and suicide_acts, removes redundant notes, fixes everything
* Adds inhands for real this time I think
* Adds inhands for real this time I think (reverted from commit 2367d0ae3d)
* ayo what kinda commit history you want
* Copy and paste was a mistake
* ctrl+f is hard
This commit is contained in:
@@ -283,8 +283,9 @@ var/list/all_supply_groups = list("Supplies","Clothing","Security","Hospitality"
|
||||
/obj/item/mounted/poster,
|
||||
/obj/item/stack/package_wrap/gift,
|
||||
/obj/item/stack/package_wrap/gift,
|
||||
/obj/item/stack/package_wrap/gift)
|
||||
cost = 10
|
||||
/obj/item/stack/package_wrap/gift,
|
||||
/obj/item/device/instrument/guitar)
|
||||
cost = 30
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Arts and Crafts crate"
|
||||
group = "Supplies"
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
|
||||
/obj/structure/closet/crate/meteor_panic/New()
|
||||
|
||||
new /obj/item/device/violin(src) //My tune will go on
|
||||
new /obj/item/device/instrument/violin(src) //My tune will go on
|
||||
new /obj/item/weapon/phone(src)
|
||||
new /obj/item/weapon/storage/fancy/flares(src)
|
||||
new /obj/item/weapon/storage/fancy/flares(src)
|
||||
|
||||
61
code/game/objects/items/devices/instruments.dm
Normal file
61
code/game/objects/items/devices/instruments.dm
Normal file
@@ -0,0 +1,61 @@
|
||||
//copy pasta of the space piano, don't hurt me -Pete
|
||||
/obj/item/device/instrument
|
||||
name = "generic instrument"
|
||||
var/datum/song/handheld/song
|
||||
var/instrumentId = "generic"
|
||||
var/instrumentExt = "ogg"
|
||||
|
||||
/obj/item/device/instrument/New()
|
||||
song = new(instrumentId, src)
|
||||
song.instrumentExt = instrumentExt
|
||||
|
||||
/obj/item/device/instrument/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/initialize()
|
||||
song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/attack_self(mob/user as mob)
|
||||
if(!user.dexterity_check())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/instrument/interact(mob/user as mob)
|
||||
if(!user)
|
||||
return
|
||||
|
||||
if(user.incapacitated() || user.lying)
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
song.interact(user)
|
||||
|
||||
/obj/item/device/instrument/suicide_act(mob/user)
|
||||
user.visible_message("<span class='danger'>[user] begins trying to play Faerie's Aire and Death Waltz with \the [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
playsound(loc, 'sound/effects/applause.ogg', 50, 1, -1)
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/device/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 = 'icons/obj/musician.dmi'
|
||||
icon_state = "violin"
|
||||
item_state = "violin"
|
||||
force = 10
|
||||
attack_verb = list("smashed")
|
||||
instrumentId = "violin"
|
||||
instrumentExt= "mid"
|
||||
|
||||
/obj/item/device/instrument/guitar
|
||||
name = "guitar"
|
||||
desc = "It's made of wood and has bronze strings."
|
||||
icon = 'icons/obj/musician.dmi'
|
||||
icon_state = "guitar"
|
||||
item_state = "guitar"
|
||||
force = 10
|
||||
attack_verb = list("played metal on", "serenaded", "crashed", "smashed")
|
||||
instrumentId = "guitar"
|
||||
@@ -1,396 +0,0 @@
|
||||
//copy pasta of the space piano, don't hurt me -Pete
|
||||
|
||||
/obj/item/device/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 = 'icons/obj/musician.dmi'
|
||||
icon_state = "violin"
|
||||
item_state = "violin"
|
||||
force = 10
|
||||
var/datum/song/song
|
||||
var/playing = 0
|
||||
var/help = 0
|
||||
var/edit = 1
|
||||
var/repeat = 0
|
||||
|
||||
/obj/item/device/violin/proc/playnote(var/note as text)
|
||||
// to_chat(world, "Note: [note]")
|
||||
var/soundfile
|
||||
/*BYOND loads resource files at compile time if they are ''. This means you can't really manipulate them dynamically.
|
||||
Tried doing it dynamically at first but its more trouble than its worth. Would have saved many lines tho.*/
|
||||
switch(note)
|
||||
if("Cn1") soundfile = 'sound/violin/Cn1.mid'
|
||||
if("C#1") soundfile = 'sound/violin/C#1.mid'
|
||||
if("Db1") soundfile = 'sound/violin/Db1.mid'
|
||||
if("Dn1") soundfile = 'sound/violin/Dn1.mid'
|
||||
if("D#1") soundfile = 'sound/violin/D#1.mid'
|
||||
if("Eb1") soundfile = 'sound/violin/Eb1.mid'
|
||||
if("En1") soundfile = 'sound/violin/En1.mid'
|
||||
if("E#1") soundfile = 'sound/violin/E#1.mid'
|
||||
if("Fb1") soundfile = 'sound/violin/Fb1.mid'
|
||||
if("Fn1") soundfile = 'sound/violin/Fn1.mid'
|
||||
if("F#1") soundfile = 'sound/violin/F#1.mid'
|
||||
if("Gb1") soundfile = 'sound/violin/Gb1.mid'
|
||||
if("Gn1") soundfile = 'sound/violin/Gn1.mid'
|
||||
if("G#1") soundfile = 'sound/violin/G#1.mid'
|
||||
if("Ab1") soundfile = 'sound/violin/Ab1.mid'
|
||||
if("An1") soundfile = 'sound/violin/An1.mid'
|
||||
if("A#1") soundfile = 'sound/violin/A#1.mid'
|
||||
if("Bb1") soundfile = 'sound/violin/Bb1.mid'
|
||||
if("Bn1") soundfile = 'sound/violin/Bn1.mid'
|
||||
if("B#1") soundfile = 'sound/violin/B#1.mid'
|
||||
if("Cb2") soundfile = 'sound/violin/Cb2.mid'
|
||||
if("Cn2") soundfile = 'sound/violin/Cn2.mid'
|
||||
if("C#2") soundfile = 'sound/violin/C#2.mid'
|
||||
if("Db2") soundfile = 'sound/violin/Db2.mid'
|
||||
if("Dn2") soundfile = 'sound/violin/Dn2.mid'
|
||||
if("D#2") soundfile = 'sound/violin/D#2.mid'
|
||||
if("Eb2") soundfile = 'sound/violin/Eb2.mid'
|
||||
if("En2") soundfile = 'sound/violin/En2.mid'
|
||||
if("E#2") soundfile = 'sound/violin/E#2.mid'
|
||||
if("Fb2") soundfile = 'sound/violin/Fb2.mid'
|
||||
if("Fn2") soundfile = 'sound/violin/Fn2.mid'
|
||||
if("F#2") soundfile = 'sound/violin/F#2.mid'
|
||||
if("Gb2") soundfile = 'sound/violin/Gb2.mid'
|
||||
if("Gn2") soundfile = 'sound/violin/Gn2.mid'
|
||||
if("G#2") soundfile = 'sound/violin/G#2.mid'
|
||||
if("Ab2") soundfile = 'sound/violin/Ab2.mid'
|
||||
if("An2") soundfile = 'sound/violin/An2.mid'
|
||||
if("A#2") soundfile = 'sound/violin/A#2.mid'
|
||||
if("Bb2") soundfile = 'sound/violin/Bb2.mid'
|
||||
if("Bn2") soundfile = 'sound/violin/Bn2.mid'
|
||||
if("B#2") soundfile = 'sound/violin/B#2.mid'
|
||||
if("Cb3") soundfile = 'sound/violin/Cb3.mid'
|
||||
if("Cn3") soundfile = 'sound/violin/Cn3.mid'
|
||||
if("C#3") soundfile = 'sound/violin/C#3.mid'
|
||||
if("Db3") soundfile = 'sound/violin/Db3.mid'
|
||||
if("Dn3") soundfile = 'sound/violin/Dn3.mid'
|
||||
if("D#3") soundfile = 'sound/violin/D#3.mid'
|
||||
if("Eb3") soundfile = 'sound/violin/Eb3.mid'
|
||||
if("En3") soundfile = 'sound/violin/En3.mid'
|
||||
if("E#3") soundfile = 'sound/violin/E#3.mid'
|
||||
if("Fb3") soundfile = 'sound/violin/Fb3.mid'
|
||||
if("Fn3") soundfile = 'sound/violin/Fn3.mid'
|
||||
if("F#3") soundfile = 'sound/violin/F#3.mid'
|
||||
if("Gb3") soundfile = 'sound/violin/Gb3.mid'
|
||||
if("Gn3") soundfile = 'sound/violin/Gn3.mid'
|
||||
if("G#3") soundfile = 'sound/violin/G#3.mid'
|
||||
if("Ab3") soundfile = 'sound/violin/Ab3.mid'
|
||||
if("An3") soundfile = 'sound/violin/An3.mid'
|
||||
if("A#3") soundfile = 'sound/violin/A#3.mid'
|
||||
if("Bb3") soundfile = 'sound/violin/Bb3.mid'
|
||||
if("Bn3") soundfile = 'sound/violin/Bn3.mid'
|
||||
if("B#3") soundfile = 'sound/violin/B#3.mid'
|
||||
if("Cb4") soundfile = 'sound/violin/Cb4.mid'
|
||||
if("Cn4") soundfile = 'sound/violin/Cn4.mid'
|
||||
if("C#4") soundfile = 'sound/violin/C#4.mid'
|
||||
if("Db4") soundfile = 'sound/violin/Db4.mid'
|
||||
if("Dn4") soundfile = 'sound/violin/Dn4.mid'
|
||||
if("D#4") soundfile = 'sound/violin/D#4.mid'
|
||||
if("Eb4") soundfile = 'sound/violin/Eb4.mid'
|
||||
if("En4") soundfile = 'sound/violin/En4.mid'
|
||||
if("E#4") soundfile = 'sound/violin/E#4.mid'
|
||||
if("Fb4") soundfile = 'sound/violin/Fb4.mid'
|
||||
if("Fn4") soundfile = 'sound/violin/Fn4.mid'
|
||||
if("F#4") soundfile = 'sound/violin/F#4.mid'
|
||||
if("Gb4") soundfile = 'sound/violin/Gb4.mid'
|
||||
if("Gn4") soundfile = 'sound/violin/Gn4.mid'
|
||||
if("G#4") soundfile = 'sound/violin/G#4.mid'
|
||||
if("Ab4") soundfile = 'sound/violin/Ab4.mid'
|
||||
if("An4") soundfile = 'sound/violin/An4.mid'
|
||||
if("A#4") soundfile = 'sound/violin/A#4.mid'
|
||||
if("Bb4") soundfile = 'sound/violin/Bb4.mid'
|
||||
if("Bn4") soundfile = 'sound/violin/Bn4.mid'
|
||||
if("B#4") soundfile = 'sound/violin/B#4.mid'
|
||||
if("Cb5") soundfile = 'sound/violin/Cb5.mid'
|
||||
if("Cn5") soundfile = 'sound/violin/Cn5.mid'
|
||||
if("C#5") soundfile = 'sound/violin/C#5.mid'
|
||||
if("Db5") soundfile = 'sound/violin/Db5.mid'
|
||||
if("Dn5") soundfile = 'sound/violin/Dn5.mid'
|
||||
if("D#5") soundfile = 'sound/violin/D#5.mid'
|
||||
if("Eb5") soundfile = 'sound/violin/Eb5.mid'
|
||||
if("En5") soundfile = 'sound/violin/En5.mid'
|
||||
if("E#5") soundfile = 'sound/violin/E#5.mid'
|
||||
if("Fb5") soundfile = 'sound/violin/Fb5.mid'
|
||||
if("Fn5") soundfile = 'sound/violin/Fn5.mid'
|
||||
if("F#5") soundfile = 'sound/violin/F#5.mid'
|
||||
if("Gb5") soundfile = 'sound/violin/Gb5.mid'
|
||||
if("Gn5") soundfile = 'sound/violin/Gn5.mid'
|
||||
if("G#5") soundfile = 'sound/violin/G#5.mid'
|
||||
if("Ab5") soundfile = 'sound/violin/Ab5.mid'
|
||||
if("An5") soundfile = 'sound/violin/An5.mid'
|
||||
if("A#5") soundfile = 'sound/violin/A#5.mid'
|
||||
if("Bb5") soundfile = 'sound/violin/Bb5.mid'
|
||||
if("Bn5") soundfile = 'sound/violin/Bn5.mid'
|
||||
if("B#5") soundfile = 'sound/violin/B#5.mid'
|
||||
if("Cb6") soundfile = 'sound/violin/Cb6.mid'
|
||||
if("Cn6") soundfile = 'sound/violin/Cn6.mid'
|
||||
if("C#6") soundfile = 'sound/violin/C#6.mid'
|
||||
if("Db6") soundfile = 'sound/violin/Db6.mid'
|
||||
if("Dn6") soundfile = 'sound/violin/Dn6.mid'
|
||||
if("D#6") soundfile = 'sound/violin/D#6.mid'
|
||||
if("Eb6") soundfile = 'sound/violin/Eb6.mid'
|
||||
if("En6") soundfile = 'sound/violin/En6.mid'
|
||||
if("E#6") soundfile = 'sound/violin/E#6.mid'
|
||||
if("Fb6") soundfile = 'sound/violin/Fb6.mid'
|
||||
if("Fn6") soundfile = 'sound/violin/Fn6.mid'
|
||||
if("F#6") soundfile = 'sound/violin/F#6.mid'
|
||||
if("Gb6") soundfile = 'sound/violin/Gb6.mid'
|
||||
if("Gn6") soundfile = 'sound/violin/Gn6.mid'
|
||||
if("G#6") soundfile = 'sound/violin/G#6.mid'
|
||||
if("Ab6") soundfile = 'sound/violin/Ab6.mid'
|
||||
if("An6") soundfile = 'sound/violin/An6.mid'
|
||||
if("A#6") soundfile = 'sound/violin/A#6.mid'
|
||||
if("Bb6") soundfile = 'sound/violin/Bb6.mid'
|
||||
if("Bn6") soundfile = 'sound/violin/Bn6.mid'
|
||||
if("B#6") soundfile = 'sound/violin/B#6.mid'
|
||||
if("Cb7") soundfile = 'sound/violin/Cb7.mid'
|
||||
if("Cn7") soundfile = 'sound/violin/Cn7.mid'
|
||||
if("C#7") soundfile = 'sound/violin/C#7.mid'
|
||||
if("Db7") soundfile = 'sound/violin/Db7.mid'
|
||||
if("Dn7") soundfile = 'sound/violin/Dn7.mid'
|
||||
if("D#7") soundfile = 'sound/violin/D#7.mid'
|
||||
if("Eb7") soundfile = 'sound/violin/Eb7.mid'
|
||||
if("En7") soundfile = 'sound/violin/En7.mid'
|
||||
if("E#7") soundfile = 'sound/violin/E#7.mid'
|
||||
if("Fb7") soundfile = 'sound/violin/Fb7.mid'
|
||||
if("Fn7") soundfile = 'sound/violin/Fn7.mid'
|
||||
if("F#7") soundfile = 'sound/violin/F#7.mid'
|
||||
if("Gb7") soundfile = 'sound/violin/Gb7.mid'
|
||||
if("Gn7") soundfile = 'sound/violin/Gn7.mid'
|
||||
if("G#7") soundfile = 'sound/violin/G#7.mid'
|
||||
if("Ab7") soundfile = 'sound/violin/Ab7.mid'
|
||||
if("An7") soundfile = 'sound/violin/An7.mid'
|
||||
if("A#7") soundfile = 'sound/violin/A#7.mid'
|
||||
if("Bb7") soundfile = 'sound/violin/Bb7.mid'
|
||||
if("Bn7") soundfile = 'sound/violin/Bn7.mid'
|
||||
if("B#7") soundfile = 'sound/violin/B#7.mid'
|
||||
if("Cb8") soundfile = 'sound/violin/Cb8.mid'
|
||||
if("Cn8") soundfile = 'sound/violin/Cn8.mid'
|
||||
if("C#8") soundfile = 'sound/violin/C#8.mid'
|
||||
if("Db8") soundfile = 'sound/violin/Db8.mid'
|
||||
if("Dn8") soundfile = 'sound/violin/Dn8.mid'
|
||||
if("D#8") soundfile = 'sound/violin/D#8.mid'
|
||||
if("Eb8") soundfile = 'sound/violin/Eb8.mid'
|
||||
if("En8") soundfile = 'sound/violin/En8.mid'
|
||||
if("E#8") soundfile = 'sound/violin/E#8.mid'
|
||||
if("Fb8") soundfile = 'sound/violin/Fb8.mid'
|
||||
if("Fn8") soundfile = 'sound/violin/Fn8.mid'
|
||||
if("F#8") soundfile = 'sound/violin/F#8.mid'
|
||||
if("Gb8") soundfile = 'sound/violin/Gb8.mid'
|
||||
if("Gn8") soundfile = 'sound/violin/Gn8.mid'
|
||||
if("G#8") soundfile = 'sound/violin/G#8.mid'
|
||||
if("Ab8") soundfile = 'sound/violin/Ab8.mid'
|
||||
if("An8") soundfile = 'sound/violin/An8.mid'
|
||||
if("A#8") soundfile = 'sound/violin/A#8.mid'
|
||||
if("Bb8") soundfile = 'sound/violin/Bb8.mid'
|
||||
if("Bn8") soundfile = 'sound/violin/Bn8.mid'
|
||||
if("B#8") soundfile = 'sound/violin/B#8.mid'
|
||||
if("Cb9") soundfile = 'sound/violin/Cb9.mid'
|
||||
if("Cn9") soundfile = 'sound/violin/Cn9.mid'
|
||||
else return
|
||||
|
||||
hearers(15, get_turf(src)) << sound(soundfile)
|
||||
|
||||
/obj/item/device/violin/proc/playsong()
|
||||
do
|
||||
var/cur_oct[7]
|
||||
var/cur_acc[7]
|
||||
for(var/i = 1 to 7)
|
||||
cur_oct[i] = "3"
|
||||
cur_acc[i] = "n"
|
||||
|
||||
for(var/line in song.lines)
|
||||
// to_chat(world, line)
|
||||
for(var/beat in splittext(lowertext(line), ","))
|
||||
// to_chat(world, "beat: [beat]")
|
||||
var/list/notes = splittext(beat, "/")
|
||||
for(var/note in splittext(notes[1], "-"))
|
||||
// to_chat(world, "note: [note]")
|
||||
if(!playing || !isliving(loc))//If the violin is playing, or isn't held by a person
|
||||
playing = 0
|
||||
return
|
||||
if(length(note) == 0)
|
||||
continue
|
||||
// to_chat(world, "Parse: [copytext(note,1,2)]")
|
||||
var/cur_note = text2ascii(note) - 96
|
||||
if(cur_note < 1 || cur_note > 7)
|
||||
continue
|
||||
for(var/i=2 to length(note))
|
||||
var/ni = copytext(note,i,i+1)
|
||||
if(!text2num(ni))
|
||||
if(ni == "#" || ni == "b" || ni == "n")
|
||||
cur_acc[cur_note] = ni
|
||||
else if(ni == "s")
|
||||
cur_acc[cur_note] = "#" // so shift is never required
|
||||
else
|
||||
cur_oct[cur_note] = ni
|
||||
playnote(uppertext(copytext(note,1,2)) + cur_acc[cur_note] + cur_oct[cur_note])
|
||||
if(notes.len >= 2 && text2num(notes[2]))
|
||||
sleep(song.tempo / text2num(notes[2]))
|
||||
else
|
||||
sleep(song.tempo)
|
||||
if(repeat > 0)
|
||||
repeat-- //Infinite loops are baaaad.
|
||||
while(repeat > 0)
|
||||
playing = 0
|
||||
|
||||
/obj/item/device/violin/attack_self(mob/user as mob)
|
||||
if(!isliving(user) || user.stat || user.restrained() || user.lying) return
|
||||
user.set_machine(src)
|
||||
|
||||
var/dat = "<HEAD><TITLE>Violin</TITLE></HEAD><BODY>"
|
||||
|
||||
if(song)
|
||||
if(song.lines.len > 0 && !(playing))
|
||||
|
||||
dat += {"<A href='?src=\ref[src];play=1'>Play Song</A><BR><BR>
|
||||
<A href='?src=\ref[src];repeat=1'>Repeat Song: [repeat] times.</A><BR><BR>"}
|
||||
if(playing)
|
||||
|
||||
dat += {"<A href='?src=\ref[src];stop=1'>Stop Playing</A><BR>
|
||||
Repeats left: [repeat].<BR><BR>"}
|
||||
if(!edit)
|
||||
dat += "<A href='?src=\ref[src];edit=2'>Show Editor</A><BR><BR>"
|
||||
else
|
||||
|
||||
dat += {"<A href='?src=\ref[src];edit=1'>Hide Editor</A><BR>
|
||||
<A href='?src=\ref[src];newsong=1'>Start a New Song</A><BR>
|
||||
<A href='?src=\ref[src];import=1'>Import a Song</A><BR><BR>"}
|
||||
if(song)
|
||||
var/calctempo = (10/song.tempo)*60
|
||||
dat += "Tempo : <A href='?src=\ref[src];tempo=10'>-</A><A href='?src=\ref[src];tempo=1'>-</A> [calctempo] BPM <A href='?src=\ref[src];tempo=-1'>+</A><A href='?src=\ref[src];tempo=-10'>+</A><BR><BR>"
|
||||
var/linecount = 0
|
||||
for(var/line in song.lines)
|
||||
linecount += 1
|
||||
dat += "Line [linecount]: [line] <A href='?src=\ref[src];deleteline=[linecount]'>Delete Line</A> <A href='?src=\ref[src];modifyline=[linecount]'>Modify Line</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];newline=1'>Add Line</A><BR><BR>"
|
||||
if(help)
|
||||
dat += "<A href='?src=\ref[src];help=1'>Hide Help</A><BR>"
|
||||
dat += {"
|
||||
Lines are a series of chords, separated by commas (,), each with notes seperated by hyphens (-).<br>
|
||||
Every note in a chord will play together, with chord timed by the tempo.<br>
|
||||
<br>
|
||||
Notes are played by the names of the note, and optionally, the accidental, and/or the octave number.<br>
|
||||
By default, every note is natural and in octave 3. Defining otherwise is remembered for each note.<br>
|
||||
Example: <i>C,D,E,F,G,A,B</i> will play a C major scale.<br>
|
||||
After a note has an accidental placed, it will be remembered: <i>C,C4,C,C3</i> is C3,C4,C4,C3</i><br>
|
||||
Chords can be played simply by seperating each note with a hyphon: <i>A-C#,Cn-E,E-G#,Gn-B</i><br>
|
||||
A pause may be denoted by an empty chord: <i>C,E,,C,G</i><br>
|
||||
To make a chord be a different time, end it with /x, where the chord length will be length<br>
|
||||
defined by tempo / x: <i>C,G/2,E/4</i><br>
|
||||
Combined, an example is: <i>E-E4/4,/2,G#/8,B/8,E3-E4/4</i>
|
||||
<br>
|
||||
Lines may be up to 50 characters.<br>
|
||||
A song may only contain up to 50 lines.<br>
|
||||
"}
|
||||
else
|
||||
dat += "<A href='?src=\ref[src];help=2'>Show Help</A><BR>"
|
||||
dat += "</BODY></HTML>"
|
||||
user << browse(dat, "window=violin;size=700x300")
|
||||
onclose(user, "violin")
|
||||
|
||||
/obj/item/device/violin/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["newsong"])
|
||||
song = new()
|
||||
else if(song)
|
||||
if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops.
|
||||
if(playing) return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing.
|
||||
var/tempnum = input("How many times do you want to repeat this piece? (max:10)") as num|null
|
||||
if(tempnum > 10)
|
||||
tempnum = 10
|
||||
if(tempnum < 0)
|
||||
tempnum = 0
|
||||
repeat = round(tempnum)
|
||||
|
||||
else if(href_list["tempo"])
|
||||
song.tempo += round(text2num(href_list["tempo"]))
|
||||
if(song.tempo < 1)
|
||||
song.tempo = 1
|
||||
|
||||
else if(href_list["play"])
|
||||
if(song)
|
||||
playing = 1
|
||||
spawn() playsong()
|
||||
|
||||
else if(href_list["newline"])
|
||||
var/newline = html_encode(input("Enter your line: ", "violin") as text|null)
|
||||
if(!newline)
|
||||
return
|
||||
if(song.lines.len > 50)
|
||||
return
|
||||
if(length(newline) > 50)
|
||||
newline = copytext(newline, 1, 50)
|
||||
song.lines.Add(newline)
|
||||
|
||||
else if(href_list["deleteline"])
|
||||
var/num = round(text2num(href_list["deleteline"]))
|
||||
if(num > song.lines.len || num < 1)
|
||||
return
|
||||
song.lines.Cut(num, num+1)
|
||||
|
||||
else if(href_list["modifyline"])
|
||||
var/num = round(text2num(href_list["modifyline"]),1)
|
||||
var/content = html_encode(input("Enter your line: ", "violin", song.lines[num]) as text|null)
|
||||
if(!content)
|
||||
return
|
||||
if(length(content) > 50)
|
||||
content = copytext(content, 1, 50)
|
||||
if(num > song.lines.len || num < 1)
|
||||
return
|
||||
song.lines[num] = content
|
||||
|
||||
else if(href_list["stop"])
|
||||
playing = 0
|
||||
|
||||
else if(href_list["help"])
|
||||
help = text2num(href_list["help"]) - 1
|
||||
|
||||
else if(href_list["edit"])
|
||||
edit = text2num(href_list["edit"]) - 1
|
||||
|
||||
else if(href_list["import"])
|
||||
var/t = ""
|
||||
do
|
||||
t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message)
|
||||
if(!in_range(src, usr))
|
||||
return
|
||||
|
||||
if(length(t) >= 3072)
|
||||
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
|
||||
if(cont == "no")
|
||||
break
|
||||
while(length(t) > 3072)
|
||||
|
||||
//split into lines
|
||||
spawn()
|
||||
var/list/lines = splittext(t, "\n")
|
||||
var/tempo = 5
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = 600 / text2num(copytext(lines[1],6))
|
||||
lines.Cut(1,2)
|
||||
if(lines.len > 50)
|
||||
to_chat(usr, "Too many lines!")
|
||||
lines.Cut(51)
|
||||
var/linenum = 1
|
||||
for(var/l in lines)
|
||||
if(length(l) > 50)
|
||||
to_chat(usr, "Line [linenum] too long!")
|
||||
lines.Remove(l)
|
||||
else
|
||||
linenum++
|
||||
song = new()
|
||||
song.lines = lines
|
||||
song.tempo = tempo
|
||||
|
||||
add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
//for(var/mob/M in viewers(1, loc))
|
||||
// if((M.client && M.machine == src))
|
||||
// attack_self(M)
|
||||
return
|
||||
@@ -145,7 +145,7 @@
|
||||
/obj/item/clothing/mask/cigarette/blunt/deus,
|
||||
/obj/item/clothing/mask/cigarette/blunt/cruciatus,
|
||||
/obj/item/device/paicard,
|
||||
/obj/item/device/violin,
|
||||
/obj/item/device/instrument/violin,
|
||||
/obj/item/weapon/storage/belt/utility/complete,
|
||||
/obj/item/clothing/accessory/tie/horrible,
|
||||
/obj/item/device/maracas,
|
||||
|
||||
@@ -3,239 +3,102 @@
|
||||
/datum/song
|
||||
var/name = "Untitled"
|
||||
var/list/lines = new()
|
||||
var/tempo = 5
|
||||
var/tempo = 5 // delay between notes
|
||||
|
||||
/obj/structure/device/piano
|
||||
name = "space minimoog"
|
||||
icon = 'icons/obj/musician.dmi'
|
||||
icon_state = "minimoog"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/datum/song/song
|
||||
var/playing = 0
|
||||
var/help = 0
|
||||
var/edit = 1
|
||||
var/repeat = 0
|
||||
var/playing = 0 // if we're playing
|
||||
var/help = 0 // if help is open
|
||||
var/edit = 1 // if we're in editing mode
|
||||
var/repeat = 0 // number of times remaining to repeat
|
||||
var/max_repeats = 10 // maximum times we can repeat
|
||||
|
||||
/obj/structure/device/piano/New()
|
||||
var/instrumentDir = "piano" // the folder with the sounds
|
||||
var/instrumentExt = "ogg" // the file extension
|
||||
var/obj/instrumentObj = null // the associated obj playing the sound
|
||||
|
||||
/datum/song/New(dir, obj)
|
||||
tempo = sanitize_tempo(tempo)
|
||||
instrumentDir = dir
|
||||
instrumentObj = obj
|
||||
|
||||
/datum/song/Destroy()
|
||||
instrumentObj = null
|
||||
..()
|
||||
if(prob(50))
|
||||
name = "space minimoog"
|
||||
desc = "This is a minimoog, like a space piano, but more spacey!"
|
||||
icon_state = "minimoog"
|
||||
|
||||
// note is a number from 1-7 for A-G
|
||||
// acc is either "b", "n", or "#"
|
||||
// oct is 1-8 (or 9 for C)
|
||||
/datum/song/proc/playnote(note, acc as text, oct)
|
||||
// handle accidental -> B<>C of E<>F
|
||||
if(acc == "b" && (note == 3 || note == 6)) // C or F
|
||||
if(note == 3)
|
||||
oct--
|
||||
note--
|
||||
acc = "n"
|
||||
else if(acc == "#" && (note == 2 || note == 5)) // B or E
|
||||
if(note == 2)
|
||||
oct++
|
||||
note++
|
||||
acc = "n"
|
||||
else if(acc == "#" && (note == 7)) //G#
|
||||
note = 1
|
||||
acc = "b"
|
||||
else if(acc == "#") // mass convert all sharps to flats, octave jump already handled
|
||||
acc = "b"
|
||||
note++
|
||||
|
||||
// check octave, C is allowed to go to 9
|
||||
if(oct < 1 || (note == 3 ? oct > 9 : oct > 8))
|
||||
return
|
||||
|
||||
// now generate name
|
||||
var/soundfile = "sound/[instrumentDir]/[ascii2text(note+64)][acc][oct].[instrumentExt]"
|
||||
soundfile = file(soundfile)
|
||||
// make sure the note exists
|
||||
if(!fexists(soundfile))
|
||||
return
|
||||
// and play
|
||||
var/turf/source = get_turf(instrumentObj)
|
||||
for(var/mob/M in get_hearers_in_view(15, source))
|
||||
if(!M.client)
|
||||
continue
|
||||
M.playsound_local(source, soundfile, 100, falloff = 5)
|
||||
|
||||
/datum/song/proc/updateDialog(mob/user)
|
||||
instrumentObj.updateDialog() // assumes it's an object in world, override if otherwise
|
||||
|
||||
/datum/song/proc/shouldStopPlaying(mob/user)
|
||||
if(instrumentObj)
|
||||
if(!instrumentObj.Adjacent(user) || user.stat)
|
||||
return 1
|
||||
return !instrumentObj.anchored // add special cases to stop in subclasses
|
||||
else
|
||||
name = "space piano"
|
||||
desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
|
||||
icon_state = "piano"
|
||||
return 1
|
||||
|
||||
/obj/structure/device/piano/proc/playnote(var/note as text)
|
||||
// to_chat(world, "Note: [note]")
|
||||
var/soundfile
|
||||
/*BYOND loads resource files at compile time if they are ''. This means you can't really manipulate them dynamically.
|
||||
Tried doing it dynamically at first but its more trouble than its worth. Would have saved many lines tho.*/
|
||||
switch(note)
|
||||
if("Cn1") soundfile = 'sound/piano/Cn1.ogg'
|
||||
if("C#1") soundfile = 'sound/piano/C#1.ogg'
|
||||
if("Db1") soundfile = 'sound/piano/Db1.ogg'
|
||||
if("Dn1") soundfile = 'sound/piano/Dn1.ogg'
|
||||
if("D#1") soundfile = 'sound/piano/D#1.ogg'
|
||||
if("Eb1") soundfile = 'sound/piano/Eb1.ogg'
|
||||
if("En1") soundfile = 'sound/piano/En1.ogg'
|
||||
if("E#1") soundfile = 'sound/piano/E#1.ogg'
|
||||
if("Fb1") soundfile = 'sound/piano/Fb1.ogg'
|
||||
if("Fn1") soundfile = 'sound/piano/Fn1.ogg'
|
||||
if("F#1") soundfile = 'sound/piano/F#1.ogg'
|
||||
if("Gb1") soundfile = 'sound/piano/Gb1.ogg'
|
||||
if("Gn1") soundfile = 'sound/piano/Gn1.ogg'
|
||||
if("G#1") soundfile = 'sound/piano/G#1.ogg'
|
||||
if("Ab1") soundfile = 'sound/piano/Ab1.ogg'
|
||||
if("An1") soundfile = 'sound/piano/An1.ogg'
|
||||
if("A#1") soundfile = 'sound/piano/A#1.ogg'
|
||||
if("Bb1") soundfile = 'sound/piano/Bb1.ogg'
|
||||
if("Bn1") soundfile = 'sound/piano/Bn1.ogg'
|
||||
if("B#1") soundfile = 'sound/piano/B#1.ogg'
|
||||
if("Cb2") soundfile = 'sound/piano/Cb2.ogg'
|
||||
if("Cn2") soundfile = 'sound/piano/Cn2.ogg'
|
||||
if("C#2") soundfile = 'sound/piano/C#2.ogg'
|
||||
if("Db2") soundfile = 'sound/piano/Db2.ogg'
|
||||
if("Dn2") soundfile = 'sound/piano/Dn2.ogg'
|
||||
if("D#2") soundfile = 'sound/piano/D#2.ogg'
|
||||
if("Eb2") soundfile = 'sound/piano/Eb2.ogg'
|
||||
if("En2") soundfile = 'sound/piano/En2.ogg'
|
||||
if("E#2") soundfile = 'sound/piano/E#2.ogg'
|
||||
if("Fb2") soundfile = 'sound/piano/Fb2.ogg'
|
||||
if("Fn2") soundfile = 'sound/piano/Fn2.ogg'
|
||||
if("F#2") soundfile = 'sound/piano/F#2.ogg'
|
||||
if("Gb2") soundfile = 'sound/piano/Gb2.ogg'
|
||||
if("Gn2") soundfile = 'sound/piano/Gn2.ogg'
|
||||
if("G#2") soundfile = 'sound/piano/G#2.ogg'
|
||||
if("Ab2") soundfile = 'sound/piano/Ab2.ogg'
|
||||
if("An2") soundfile = 'sound/piano/An2.ogg'
|
||||
if("A#2") soundfile = 'sound/piano/A#2.ogg'
|
||||
if("Bb2") soundfile = 'sound/piano/Bb2.ogg'
|
||||
if("Bn2") soundfile = 'sound/piano/Bn2.ogg'
|
||||
if("B#2") soundfile = 'sound/piano/B#2.ogg'
|
||||
if("Cb3") soundfile = 'sound/piano/Cb3.ogg'
|
||||
if("Cn3") soundfile = 'sound/piano/Cn3.ogg'
|
||||
if("C#3") soundfile = 'sound/piano/C#3.ogg'
|
||||
if("Db3") soundfile = 'sound/piano/Db3.ogg'
|
||||
if("Dn3") soundfile = 'sound/piano/Dn3.ogg'
|
||||
if("D#3") soundfile = 'sound/piano/D#3.ogg'
|
||||
if("Eb3") soundfile = 'sound/piano/Eb3.ogg'
|
||||
if("En3") soundfile = 'sound/piano/En3.ogg'
|
||||
if("E#3") soundfile = 'sound/piano/E#3.ogg'
|
||||
if("Fb3") soundfile = 'sound/piano/Fb3.ogg'
|
||||
if("Fn3") soundfile = 'sound/piano/Fn3.ogg'
|
||||
if("F#3") soundfile = 'sound/piano/F#3.ogg'
|
||||
if("Gb3") soundfile = 'sound/piano/Gb3.ogg'
|
||||
if("Gn3") soundfile = 'sound/piano/Gn3.ogg'
|
||||
if("G#3") soundfile = 'sound/piano/G#3.ogg'
|
||||
if("Ab3") soundfile = 'sound/piano/Ab3.ogg'
|
||||
if("An3") soundfile = 'sound/piano/An3.ogg'
|
||||
if("A#3") soundfile = 'sound/piano/A#3.ogg'
|
||||
if("Bb3") soundfile = 'sound/piano/Bb3.ogg'
|
||||
if("Bn3") soundfile = 'sound/piano/Bn3.ogg'
|
||||
if("B#3") soundfile = 'sound/piano/B#3.ogg'
|
||||
if("Cb4") soundfile = 'sound/piano/Cb4.ogg'
|
||||
if("Cn4") soundfile = 'sound/piano/Cn4.ogg'
|
||||
if("C#4") soundfile = 'sound/piano/C#4.ogg'
|
||||
if("Db4") soundfile = 'sound/piano/Db4.ogg'
|
||||
if("Dn4") soundfile = 'sound/piano/Dn4.ogg'
|
||||
if("D#4") soundfile = 'sound/piano/D#4.ogg'
|
||||
if("Eb4") soundfile = 'sound/piano/Eb4.ogg'
|
||||
if("En4") soundfile = 'sound/piano/En4.ogg'
|
||||
if("E#4") soundfile = 'sound/piano/E#4.ogg'
|
||||
if("Fb4") soundfile = 'sound/piano/Fb4.ogg'
|
||||
if("Fn4") soundfile = 'sound/piano/Fn4.ogg'
|
||||
if("F#4") soundfile = 'sound/piano/F#4.ogg'
|
||||
if("Gb4") soundfile = 'sound/piano/Gb4.ogg'
|
||||
if("Gn4") soundfile = 'sound/piano/Gn4.ogg'
|
||||
if("G#4") soundfile = 'sound/piano/G#4.ogg'
|
||||
if("Ab4") soundfile = 'sound/piano/Ab4.ogg'
|
||||
if("An4") soundfile = 'sound/piano/An4.ogg'
|
||||
if("A#4") soundfile = 'sound/piano/A#4.ogg'
|
||||
if("Bb4") soundfile = 'sound/piano/Bb4.ogg'
|
||||
if("Bn4") soundfile = 'sound/piano/Bn4.ogg'
|
||||
if("B#4") soundfile = 'sound/piano/B#4.ogg'
|
||||
if("Cb5") soundfile = 'sound/piano/Cb5.ogg'
|
||||
if("Cn5") soundfile = 'sound/piano/Cn5.ogg'
|
||||
if("C#5") soundfile = 'sound/piano/C#5.ogg'
|
||||
if("Db5") soundfile = 'sound/piano/Db5.ogg'
|
||||
if("Dn5") soundfile = 'sound/piano/Dn5.ogg'
|
||||
if("D#5") soundfile = 'sound/piano/D#5.ogg'
|
||||
if("Eb5") soundfile = 'sound/piano/Eb5.ogg'
|
||||
if("En5") soundfile = 'sound/piano/En5.ogg'
|
||||
if("E#5") soundfile = 'sound/piano/E#5.ogg'
|
||||
if("Fb5") soundfile = 'sound/piano/Fb5.ogg'
|
||||
if("Fn5") soundfile = 'sound/piano/Fn5.ogg'
|
||||
if("F#5") soundfile = 'sound/piano/F#5.ogg'
|
||||
if("Gb5") soundfile = 'sound/piano/Gb5.ogg'
|
||||
if("Gn5") soundfile = 'sound/piano/Gn5.ogg'
|
||||
if("G#5") soundfile = 'sound/piano/G#5.ogg'
|
||||
if("Ab5") soundfile = 'sound/piano/Ab5.ogg'
|
||||
if("An5") soundfile = 'sound/piano/An5.ogg'
|
||||
if("A#5") soundfile = 'sound/piano/A#5.ogg'
|
||||
if("Bb5") soundfile = 'sound/piano/Bb5.ogg'
|
||||
if("Bn5") soundfile = 'sound/piano/Bn5.ogg'
|
||||
if("B#5") soundfile = 'sound/piano/B#5.ogg'
|
||||
if("Cb6") soundfile = 'sound/piano/Cb6.ogg'
|
||||
if("Cn6") soundfile = 'sound/piano/Cn6.ogg'
|
||||
if("C#6") soundfile = 'sound/piano/C#6.ogg'
|
||||
if("Db6") soundfile = 'sound/piano/Db6.ogg'
|
||||
if("Dn6") soundfile = 'sound/piano/Dn6.ogg'
|
||||
if("D#6") soundfile = 'sound/piano/D#6.ogg'
|
||||
if("Eb6") soundfile = 'sound/piano/Eb6.ogg'
|
||||
if("En6") soundfile = 'sound/piano/En6.ogg'
|
||||
if("E#6") soundfile = 'sound/piano/E#6.ogg'
|
||||
if("Fb6") soundfile = 'sound/piano/Fb6.ogg'
|
||||
if("Fn6") soundfile = 'sound/piano/Fn6.ogg'
|
||||
if("F#6") soundfile = 'sound/piano/F#6.ogg'
|
||||
if("Gb6") soundfile = 'sound/piano/Gb6.ogg'
|
||||
if("Gn6") soundfile = 'sound/piano/Gn6.ogg'
|
||||
if("G#6") soundfile = 'sound/piano/G#6.ogg'
|
||||
if("Ab6") soundfile = 'sound/piano/Ab6.ogg'
|
||||
if("An6") soundfile = 'sound/piano/An6.ogg'
|
||||
if("A#6") soundfile = 'sound/piano/A#6.ogg'
|
||||
if("Bb6") soundfile = 'sound/piano/Bb6.ogg'
|
||||
if("Bn6") soundfile = 'sound/piano/Bn6.ogg'
|
||||
if("B#6") soundfile = 'sound/piano/B#6.ogg'
|
||||
if("Cb7") soundfile = 'sound/piano/Cb7.ogg'
|
||||
if("Cn7") soundfile = 'sound/piano/Cn7.ogg'
|
||||
if("C#7") soundfile = 'sound/piano/C#7.ogg'
|
||||
if("Db7") soundfile = 'sound/piano/Db7.ogg'
|
||||
if("Dn7") soundfile = 'sound/piano/Dn7.ogg'
|
||||
if("D#7") soundfile = 'sound/piano/D#7.ogg'
|
||||
if("Eb7") soundfile = 'sound/piano/Eb7.ogg'
|
||||
if("En7") soundfile = 'sound/piano/En7.ogg'
|
||||
if("E#7") soundfile = 'sound/piano/E#7.ogg'
|
||||
if("Fb7") soundfile = 'sound/piano/Fb7.ogg'
|
||||
if("Fn7") soundfile = 'sound/piano/Fn7.ogg'
|
||||
if("F#7") soundfile = 'sound/piano/F#7.ogg'
|
||||
if("Gb7") soundfile = 'sound/piano/Gb7.ogg'
|
||||
if("Gn7") soundfile = 'sound/piano/Gn7.ogg'
|
||||
if("G#7") soundfile = 'sound/piano/G#7.ogg'
|
||||
if("Ab7") soundfile = 'sound/piano/Ab7.ogg'
|
||||
if("An7") soundfile = 'sound/piano/An7.ogg'
|
||||
if("A#7") soundfile = 'sound/piano/A#7.ogg'
|
||||
if("Bb7") soundfile = 'sound/piano/Bb7.ogg'
|
||||
if("Bn7") soundfile = 'sound/piano/Bn7.ogg'
|
||||
if("B#7") soundfile = 'sound/piano/B#7.ogg'
|
||||
if("Cb8") soundfile = 'sound/piano/Cb8.ogg'
|
||||
if("Cn8") soundfile = 'sound/piano/Cn8.ogg'
|
||||
if("C#8") soundfile = 'sound/piano/C#8.ogg'
|
||||
if("Db8") soundfile = 'sound/piano/Db8.ogg'
|
||||
if("Dn8") soundfile = 'sound/piano/Dn8.ogg'
|
||||
if("D#8") soundfile = 'sound/piano/D#8.ogg'
|
||||
if("Eb8") soundfile = 'sound/piano/Eb8.ogg'
|
||||
if("En8") soundfile = 'sound/piano/En8.ogg'
|
||||
if("E#8") soundfile = 'sound/piano/E#8.ogg'
|
||||
if("Fb8") soundfile = 'sound/piano/Fb8.ogg'
|
||||
if("Fn8") soundfile = 'sound/piano/Fn8.ogg'
|
||||
if("F#8") soundfile = 'sound/piano/F#8.ogg'
|
||||
if("Gb8") soundfile = 'sound/piano/Gb8.ogg'
|
||||
if("Gn8") soundfile = 'sound/piano/Gn8.ogg'
|
||||
if("G#8") soundfile = 'sound/piano/G#8.ogg'
|
||||
if("Ab8") soundfile = 'sound/piano/Ab8.ogg'
|
||||
if("An8") soundfile = 'sound/piano/An8.ogg'
|
||||
if("A#8") soundfile = 'sound/piano/A#8.ogg'
|
||||
if("Bb8") soundfile = 'sound/piano/Bb8.ogg'
|
||||
if("Bn8") soundfile = 'sound/piano/Bn8.ogg'
|
||||
if("B#8") soundfile = 'sound/piano/B#8.ogg'
|
||||
if("Cb9") soundfile = 'sound/piano/Cb9.ogg'
|
||||
if("Cn9") soundfile = 'sound/piano/Cn9.ogg'
|
||||
else return
|
||||
|
||||
// hearers(15, src) << sound(soundfile)
|
||||
var/turf/source = get_turf(src)
|
||||
for(var/mob/M in hearers(15, source))
|
||||
M.playsound_local(source, file(soundfile), 100, falloff = 5)
|
||||
|
||||
|
||||
/obj/structure/device/piano/proc/playsong()
|
||||
do
|
||||
/datum/song/proc/playsong(mob/user)
|
||||
while(repeat >= 0)
|
||||
var/cur_oct[7]
|
||||
var/cur_acc[7]
|
||||
for(var/i = 1 to 7)
|
||||
cur_oct[i] = "3"
|
||||
cur_oct[i] = 3
|
||||
cur_acc[i] = "n"
|
||||
|
||||
for(var/line in song.lines)
|
||||
// to_chat(world, line)
|
||||
for(var/line in lines)
|
||||
//world << line
|
||||
for(var/beat in splittext(lowertext(line), ","))
|
||||
// to_chat(world, "beat: [beat]")
|
||||
//world << "beat: [beat]"
|
||||
var/list/notes = splittext(beat, "/")
|
||||
for(var/note in splittext(notes[1], "-"))
|
||||
// to_chat(world, "note: [note]")
|
||||
if(!playing || !anchored)//If the piano is playing, or is loose
|
||||
//world << "note: [note]"
|
||||
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
|
||||
playing = 0
|
||||
return
|
||||
if(length(note) == 0)
|
||||
if(lentext(note) == 0)
|
||||
continue
|
||||
// to_chat(world, "Parse: [copytext(note,1,2)]")
|
||||
//world << "Parse: [copytext(note,1,2)]"
|
||||
var/cur_note = text2ascii(note) - 96
|
||||
if(cur_note < 1 || cur_note > 7)
|
||||
continue
|
||||
for(var/i=2 to length(note))
|
||||
for(var/i=2 to lentext(note))
|
||||
var/ni = copytext(note,i,i+1)
|
||||
if(!text2num(ni))
|
||||
if(ni == "#" || ni == "b" || ni == "n")
|
||||
@@ -243,58 +106,48 @@
|
||||
else if(ni == "s")
|
||||
cur_acc[cur_note] = "#" // so shift is never required
|
||||
else
|
||||
cur_oct[cur_note] = ni
|
||||
playnote(uppertext(copytext(note,1,2)) + cur_acc[cur_note] + cur_oct[cur_note])
|
||||
cur_oct[cur_note] = text2num(ni)
|
||||
playnote(cur_note, cur_acc[cur_note], cur_oct[cur_note])
|
||||
if(notes.len >= 2 && text2num(notes[2]))
|
||||
sleep(song.tempo / text2num(notes[2]))
|
||||
sleep(sanitize_tempo(tempo / text2num(notes[2])))
|
||||
else
|
||||
sleep(song.tempo)
|
||||
if(repeat > 0)
|
||||
repeat-- //Infinite loops are baaaad.
|
||||
while(repeat > 0)
|
||||
sleep(tempo)
|
||||
repeat--
|
||||
if(repeat >= 0) // don't show the last -1 repeat
|
||||
updateDialog(user)
|
||||
playing = 0
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/structure/device/piano/attack_paw(var/mob/user)
|
||||
if (!user.dexterity_check())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/device/piano/attack_hand(var/mob/user as mob)
|
||||
if(!anchored)
|
||||
return
|
||||
|
||||
usr.machine = src
|
||||
var/dat = "<HEAD><TITLE>Piano</TITLE></HEAD><BODY>"
|
||||
|
||||
if(song)
|
||||
if(song.lines.len > 0 && !(playing))
|
||||
|
||||
dat += {"<A href='?src=\ref[src];play=1'>Play Song</A><BR><BR>
|
||||
<A href='?src=\ref[src];repeat=1'>Repeat Song: [repeat] times.</A><BR><BR>"}
|
||||
if(playing)
|
||||
|
||||
dat += {"<A href='?src=\ref[src];stop=1'>Stop Playing</A><BR>
|
||||
Repeats left: [repeat].<BR><BR>"}
|
||||
repeat = 0
|
||||
updateDialog(user)
|
||||
/datum/song/proc/interact(mob/user)
|
||||
var/dat = ""
|
||||
if(lines.len > 0)
|
||||
dat += "<H3>Playback</H3>"
|
||||
if(!playing)
|
||||
dat += {"<A href='?src=\ref[src];play=1'>Play</A> <SPAN CLASS='linkOn'>Stop</SPAN><BR><BR>
|
||||
Repeat Song:
|
||||
[repeat > 0 ? "<A href='?src=\ref[src];repeat=-10'>-</A><A href='?src=\ref[src];repeat=-1'>-</A>" : "<SPAN CLASS='linkOff'>-</SPAN><SPAN CLASS='linkOff'>-</SPAN>"]
|
||||
[repeat] times
|
||||
[repeat < max_repeats ? "<A href='?src=\ref[src];repeat=1'>+</A><A href='?src=\ref[src];repeat=10'>+</A>" : "<SPAN CLASS='linkOff'>+</SPAN><SPAN CLASS='linkOff'>+</SPAN>"]
|
||||
<BR>"}
|
||||
else
|
||||
dat += {"<SPAN CLASS='linkOn'>Play</SPAN> <A href='?src=\ref[src];stop=1'>Stop</A><BR>
|
||||
Repeats left: <B>[repeat]</B><BR>"}
|
||||
if(!edit)
|
||||
dat += "<A href='?src=\ref[src];edit=2'>Show Editor</A><BR><BR>"
|
||||
dat += "<BR><B><A href='?src=\ref[src];edit=2'>Show Editor</A></B><BR>"
|
||||
else
|
||||
|
||||
dat += {"<A href='?src=\ref[src];edit=1'>Hide Editor</A><BR>
|
||||
<A href='?src=\ref[src];newsong=1'>Start a New Song</A><BR>
|
||||
<A href='?src=\ref[src];import=1'>Import a Song</A><BR><BR>"}
|
||||
if(song)
|
||||
var/calctempo = (10/song.tempo)*60
|
||||
dat += "Tempo : <A href='?src=\ref[src];tempo=10'>-</A><A href='?src=\ref[src];tempo=1'>-</A> [calctempo] BPM <A href='?src=\ref[src];tempo=-1'>+</A><A href='?src=\ref[src];tempo=-10'>+</A><BR><BR>"
|
||||
var/linecount = 0
|
||||
for(var/line in song.lines)
|
||||
linecount += 1
|
||||
dat += "Line [linecount]: [line] <A href='?src=\ref[src];deleteline=[linecount]'>Delete Line</A> <A href='?src=\ref[src];modifyline=[linecount]'>Modify Line</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];newline=1'>Add Line</A><BR><BR>"
|
||||
var/bpm = round(600 / tempo)
|
||||
dat += {"<H3>Editing</H3>
|
||||
<B><A href='?src=\ref[src];edit=1'>Hide Editor</A></B>
|
||||
<A href='?src=\ref[src];newsong=1'>Start a New Song</A>
|
||||
<A href='?src=\ref[src];import=1'>Import a Song</A><BR><BR>
|
||||
Tempo: <A href='?src=\ref[src];tempo=[world.tick_lag]'>-</A> [bpm] BPM <A href='?src=\ref[src];tempo=-[world.tick_lag]'>+</A><BR><BR>"}
|
||||
var/linecount = 0
|
||||
for(var/line in lines)
|
||||
linecount += 1
|
||||
dat += "Line [linecount]: <A href='?src=\ref[src];modifyline=[linecount]'>Edit</A> <A href='?src=\ref[src];deleteline=[linecount]'>X</A> [line]<BR>"
|
||||
dat += "<A href='?src=\ref[src];newline=1'>Add Line</A><BR><BR>"
|
||||
if(help)
|
||||
dat += "<A href='?src=\ref[src];help=1'>Hide Help</A><BR>"
|
||||
dat += {"
|
||||
dat += {"<B><A href='?src=\ref[src];help=1'>Hide Help</A></B><BR>
|
||||
Lines are a series of chords, separated by commas (,), each with notes seperated by hyphens (-).<br>
|
||||
Every note in a chord will play together, with chord timed by the tempo.<br>
|
||||
<br>
|
||||
@@ -306,141 +159,176 @@
|
||||
A pause may be denoted by an empty chord: <i>C,E,,C,G</i><br>
|
||||
To make a chord be a different time, end it with /x, where the chord length will be length<br>
|
||||
defined by tempo / x: <i>C,G/2,E/4</i><br>
|
||||
Combined, an example is: <i>E-E4/4,/2,G#/8,B/8,E3-E4/4</i>
|
||||
Combined, an example is: <i>E-E4/4,F#/2,G#/8,B/8,E3-E4/4</i>
|
||||
<br>
|
||||
Lines may be up to 50 characters.<br>
|
||||
A song may only contain up to 50 lines.<br>
|
||||
"}
|
||||
else
|
||||
dat += "<A href='?src=\ref[src];help=2'>Show Help</A><BR>"
|
||||
dat += "</BODY></HTML>"
|
||||
user << browse(dat, "window=piano;size=700x300")
|
||||
onclose(user, "piano")
|
||||
|
||||
/obj/structure/device/piano/Topic(href, href_list)
|
||||
if(..())
|
||||
dat += "<B><A href='?src=\ref[src];help=2'>Show Help</A></B><BR>"
|
||||
var/datum/browser/popup = new(user, "instrument", instrumentObj.name, 700, 500)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(instrumentObj.icon, instrumentObj.icon_state))
|
||||
popup.open()
|
||||
/datum/song/Topic(href, href_list)
|
||||
if(!instrumentObj.Adjacent(usr) || usr.stat)
|
||||
usr << browse(null, "window=instrument")
|
||||
usr.unset_machine()
|
||||
return
|
||||
if(issilicon(usr) || !anchored || !usr.canmove)
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
|
||||
instrumentObj.add_fingerprint(usr)
|
||||
if(href_list["newsong"])
|
||||
song = new()
|
||||
else if(song)
|
||||
if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops.
|
||||
if(playing) return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing.
|
||||
var/tempnum = input("How many times do you want to repeat this piece? (max:10)") as num|null
|
||||
if(tempnum > 10)
|
||||
tempnum = 10
|
||||
if(tempnum < 0)
|
||||
tempnum = 0
|
||||
repeat = round(tempnum)
|
||||
|
||||
else if(href_list["tempo"])
|
||||
song.tempo += round(text2num(href_list["tempo"]))
|
||||
if(song.tempo < 1)
|
||||
song.tempo = 1
|
||||
|
||||
else if(href_list["play"])
|
||||
if(song)
|
||||
playing = 1
|
||||
spawn() playsong()
|
||||
|
||||
else if(href_list["newline"])
|
||||
var/newline = html_encode(input("Enter your line: ", "Piano") as text|null)
|
||||
if(!newline)
|
||||
lines = new()
|
||||
tempo = sanitize_tempo(5) // default 120 BPM
|
||||
name = ""
|
||||
else if(href_list["import"])
|
||||
var/t = ""
|
||||
do
|
||||
t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message)
|
||||
if(!in_range(instrumentObj, usr))
|
||||
return
|
||||
if(song.lines.len > 50)
|
||||
return
|
||||
if(length(newline) > 50)
|
||||
newline = copytext(newline, 1, 50)
|
||||
song.lines.Add(newline)
|
||||
|
||||
else if(href_list["deleteline"])
|
||||
var/num = round(text2num(href_list["deleteline"]))
|
||||
if(num > song.lines.len || num < 1)
|
||||
return
|
||||
song.lines.Cut(num, num+1)
|
||||
|
||||
else if(href_list["modifyline"])
|
||||
var/num = round(text2num(href_list["modifyline"]),1)
|
||||
var/content = html_encode(input("Enter your line: ", "Piano", song.lines[num]) as text|null)
|
||||
if(!content)
|
||||
return
|
||||
if(length(content) > 50)
|
||||
content = copytext(content, 1, 50)
|
||||
if(num > song.lines.len || num < 1)
|
||||
return
|
||||
song.lines[num] = content
|
||||
|
||||
else if(href_list["stop"])
|
||||
playing = 0
|
||||
|
||||
else if(href_list["help"])
|
||||
help = text2num(href_list["help"]) - 1
|
||||
|
||||
else if(href_list["edit"])
|
||||
edit = text2num(href_list["edit"]) - 1
|
||||
|
||||
else if(href_list["import"])
|
||||
var/t = ""
|
||||
do
|
||||
t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", src.name), t) as message)
|
||||
if (!in_range(src, usr))
|
||||
return
|
||||
|
||||
if(length(t) >= 3072)
|
||||
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
|
||||
if(cont == "no")
|
||||
break
|
||||
while(length(t) > 3072)
|
||||
|
||||
//split into lines
|
||||
spawn()
|
||||
var/list/lines = splittext(t, "\n")
|
||||
var/tempo = 5
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = 600 / text2num(copytext(lines[1],6))
|
||||
lines.Cut(1,2)
|
||||
if(lines.len > 50)
|
||||
to_chat(usr, "Too many lines!")
|
||||
lines.Cut(51)
|
||||
var/linenum = 1
|
||||
for(var/l in lines)
|
||||
if(length(l) > 50)
|
||||
to_chat(usr, "Line [linenum] too long!")
|
||||
lines.Remove(l)
|
||||
else
|
||||
linenum++
|
||||
song = new()
|
||||
song.lines = lines
|
||||
song.tempo = tempo
|
||||
src.updateUsrDialog()
|
||||
|
||||
add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
if(lentext(t) >= 3072)
|
||||
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
|
||||
if(cont == "no")
|
||||
break
|
||||
while(lentext(t) > 3072)
|
||||
//split into lines
|
||||
spawn()
|
||||
lines = splittext(t, "\n")
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
|
||||
lines.Cut(1,2)
|
||||
else
|
||||
tempo = sanitize_tempo(5) // default 120 BPM
|
||||
if(lines.len > 50)
|
||||
usr << "Too many lines!"
|
||||
lines.Cut(51)
|
||||
var/linenum = 1
|
||||
for(var/l in lines)
|
||||
if(lentext(l) > 50)
|
||||
usr << "Line [linenum] too long!"
|
||||
lines.Remove(l)
|
||||
else
|
||||
linenum++
|
||||
updateDialog(usr) // make sure updates when complete
|
||||
else if(href_list["help"])
|
||||
help = text2num(href_list["help"]) - 1
|
||||
else if(href_list["edit"])
|
||||
edit = text2num(href_list["edit"]) - 1
|
||||
if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops.
|
||||
if(playing)
|
||||
return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing.
|
||||
repeat += round(text2num(href_list["repeat"]))
|
||||
if(repeat < 0)
|
||||
repeat = 0
|
||||
if(repeat > max_repeats)
|
||||
repeat = max_repeats
|
||||
else if(href_list["tempo"])
|
||||
tempo = sanitize_tempo(tempo + text2num(href_list["tempo"]))
|
||||
else if(href_list["play"])
|
||||
playing = 1
|
||||
spawn()
|
||||
playsong(usr)
|
||||
else if(href_list["newline"])
|
||||
var/newline = html_encode(input("Enter your line: ", instrumentObj.name) as text|null)
|
||||
if(!newline || !in_range(instrumentObj, usr))
|
||||
return
|
||||
if(lines.len > 50)
|
||||
return
|
||||
if(lentext(newline) > 50)
|
||||
newline = copytext(newline, 1, 50)
|
||||
lines.Add(newline)
|
||||
else if(href_list["deleteline"])
|
||||
var/num = round(text2num(href_list["deleteline"]))
|
||||
if(num > lines.len || num < 1)
|
||||
return
|
||||
lines.Cut(num, num+1)
|
||||
else if(href_list["modifyline"])
|
||||
var/num = round(text2num(href_list["modifyline"]),1)
|
||||
var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
|
||||
if(!content || !in_range(instrumentObj, usr))
|
||||
return
|
||||
if(lentext(content) > 50)
|
||||
content = copytext(content, 1, 50)
|
||||
if(num > lines.len || num < 1)
|
||||
return
|
||||
lines[num] = content
|
||||
else if(href_list["stop"])
|
||||
playing = 0
|
||||
updateDialog(usr)
|
||||
return
|
||||
/datum/song/proc/sanitize_tempo(new_tempo)
|
||||
new_tempo = abs(new_tempo)
|
||||
return max(round(new_tempo, world.tick_lag), world.tick_lag)
|
||||
// subclass for handheld instruments, like violin
|
||||
/datum/song/handheld
|
||||
/datum/song/handheld/updateDialog(mob/user)
|
||||
instrumentObj.interact(user)
|
||||
/datum/song/handheld/shouldStopPlaying()
|
||||
if(instrumentObj)
|
||||
return !isliving(instrumentObj.loc)
|
||||
else
|
||||
return 1
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/obj/structure/piano
|
||||
name = "space minimoog"
|
||||
icon = 'icons/obj/musician.dmi'
|
||||
icon_state = "minimoog"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/datum/song/song
|
||||
/obj/structure/piano/New()
|
||||
song = new("piano", src)
|
||||
if(prob(50))
|
||||
name = "space minimoog"
|
||||
desc = "This is a minimoog, like a space piano, but more spacey!"
|
||||
icon_state = "minimoog"
|
||||
else
|
||||
name = "space piano"
|
||||
desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
|
||||
icon_state = "piano"
|
||||
/obj/structure/piano/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
..()
|
||||
/obj/structure/piano/initialize()
|
||||
song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
|
||||
..()
|
||||
|
||||
/obj/structure/device/piano/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if (iswrench(O))
|
||||
if (anchored)
|
||||
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
|
||||
to_chat(user, "<span class='notice'>You begin to loosen \the [src]'s casters...</span>")
|
||||
if (do_after(user, src, 40))
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
"<span class='notice'>You have loosened \the [src]. Now it can be pulled somewhere else.</span>", \
|
||||
"You hear ratchet.")
|
||||
src.anchored = 0
|
||||
else
|
||||
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
|
||||
to_chat(user, "<span class='notice'>You begin to tighten \the [src] to the floor...</span>")
|
||||
if (do_after(user, src, 20))
|
||||
/obj/structure/piano/attack_hand(mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
interact(user)
|
||||
|
||||
/obj/structure/piano/attack_paw(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/structure/piano/interact(mob/user)
|
||||
if(!user || !anchored)
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
song.interact(user)
|
||||
|
||||
/obj/structure/piano/attackby(obj/item/O, mob/user, params)
|
||||
if (istype(O, /obj/item/weapon/wrench))
|
||||
if (!anchored && !istype(get_turf(src),/turf/space))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'> You begin to tighten \the [src] to the floor...</span>"
|
||||
if (do_after(user, 20, target = src))
|
||||
user.visible_message( \
|
||||
"[user] tightens \the [src]'s casters.", \
|
||||
"<span class='notice'>You have tightened \the [src]'s casters. Now it can be played again.</span>", \
|
||||
"You hear ratchet.")
|
||||
src.anchored = 1
|
||||
"<span class='notice'>You tighten \the [src]'s casters. Now it can be played again.</span>", \
|
||||
"<span class='italics'>You hear a ratchet.</span>")
|
||||
anchored = 1
|
||||
else if(anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'> You begin to loosen \the [src]'s casters...</span>"
|
||||
if (do_after(user, 40, target = src))
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
"<span class='notice'>You loosen \the [src]. Now it can be pulled somewhere else.</span>", \
|
||||
"<span class='italics'>You hear a ratchet.</span>")
|
||||
anchored = 0
|
||||
else
|
||||
..()
|
||||
..()
|
||||
@@ -201,7 +201,7 @@
|
||||
/obj/machinery/vending/robotics,
|
||||
/obj/machinery/vending/sovietsoda,
|
||||
/obj/structure/AIcore,
|
||||
/obj/structure/device/piano,
|
||||
/obj/structure/piano,
|
||||
/obj/structure/displaycase_frame,
|
||||
/obj/structure/particle_accelerator/fuel_chamber,
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
|
||||
@@ -350,7 +350,7 @@ var/global/list/item_mimic_disguises = list(
|
||||
/obj/item/device/aicard, /obj/item/device/analyzer, /obj/item/device/assembly/igniter, /obj/item/device/camera, /obj/item/device/codebreaker, /obj/item/device/device_analyser,\
|
||||
/obj/item/device/flash, /obj/item/device/flashlight, /obj/item/device/hailer, /obj/item/device/material_synth, /obj/item/device/megaphone, /obj/item/device/paicard,\
|
||||
/obj/item/device/pda/clown, /obj/item/device/rcd/matter/engineering, /obj/item/device/radio, /obj/item/device/robotanalyzer, /obj/item/device/soulstone,\
|
||||
/obj/item/device/soundsynth, /obj/item/device/violin, /obj/item/device/wormhole_jaunter, /obj/item/weapon/gun/portalgun, /obj/item/target), //Common items
|
||||
/obj/item/device/soundsynth, /obj/item/device/instrument/violin, /obj/item/device/wormhole_jaunter, /obj/item/weapon/gun/portalgun, /obj/item/target), //Common items
|
||||
|
||||
"medbay" = list(/obj/item/weapon/circular_saw, /obj/item/weapon/melee/defibrillator, /obj/item/weapon/surgicaldrill, /obj/item/weapon/hemostat, /obj/item/weapon/dnainjector/nofail/hulkmut,\
|
||||
/obj/item/weapon/bonesetter, /obj/item/weapon/autopsy_scanner, /obj/item/weapon/FixOVein, /obj/item/stack/medical/ointment, /obj/item/weapon/storage/firstaid,\
|
||||
|
||||
37
html/changelogs/JustSumMusic.yml
Normal file
37
html/changelogs/JustSumMusic.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscdel (general deleting of nice things)
|
||||
# rscadd (general adding of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
# tgs (TG-ported fixes?)
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: JustSumGuy
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# There needs to be a space after the - and before the prefix. Don't use tabs anywhere in this file.
|
||||
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
|
||||
# If you're using characters such as # ' : - or the like in your changelog, surround the entire change with quotes as shown in the second example. These quotes don't show up on the changelog once it's merged and prevent errors.
|
||||
# SCREW ANY OF THIS UP AND IT WON'T WORK.
|
||||
changes:
|
||||
- rscadd: "Added(ported) a new instrument: the guitar! Orderable from cargo through the arts and crafts crate."
|
||||
- tweak: "Retuned the musical instrument interface to be a little neater."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 145 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 143 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 2.5 KiB |
@@ -396,7 +396,7 @@
|
||||
"hF" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
|
||||
"hG" = (/mob/living/simple_animal/hostile/syndicate/melee,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
|
||||
"hH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
|
||||
"hI" = (/obj/structure/table/woodentable,/obj/item/device/violin,/turf/simulated/floor/wood,/area/awaymission/spacebattle/cruiser)
|
||||
"hI" = (/obj/structure/table/woodentable,/obj/item/device/instrument/violin,/turf/simulated/floor/wood,/area/awaymission/spacebattle/cruiser)
|
||||
"hJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/awaymission/spacebattle/cruiser)
|
||||
"hK" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate7)
|
||||
"hL" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/awaymission/spacebattle/cruiser)
|
||||
|
||||
@@ -519,7 +519,7 @@
|
||||
"jY" = (/obj/machinery/turretcover,/turf/unsimulated/desert,/area/awaymission/desert{dynamic_lighting = 1; luminosity = 1; name = "Desert"})
|
||||
"jZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
|
||||
"ka" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -2; pixel_y = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
|
||||
"kb" = (/obj/item/device/violin,/turf/simulated/floor,/area/awaymission/labs/militarydivision)
|
||||
"kb" = (/obj/item/device/instrument/violin,/turf/simulated/floor,/area/awaymission/labs/militarydivision)
|
||||
"kc" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light,/turf/simulated/floor{temperature = 393.15},/area/awaymission/labs/researchdivision)
|
||||
"kd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "delivery"; name = "floor"; temperature = 393.15},/area/awaymission/labs/researchdivision)
|
||||
"ke" = (/obj/machinery/bot/mulebot,/turf/simulated/floor{temperature = 393.15},/area/awaymission/labs/researchdivision)
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
"bP" = (/obj/structure/bed/chair/wood{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
|
||||
"bQ" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/example)
|
||||
"bR" = (/obj/structure/table,/obj/machinery/light/small,/obj/item/weapon/paper{info = "X X O<br>X O X<br>O X"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
|
||||
"bS" = (/obj/structure/device/piano,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
|
||||
"bS" = (/obj/structure/piano,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
|
||||
"bT" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
|
||||
"bU" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/validsalad,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
|
||||
"bV" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/example)
|
||||
|
||||
@@ -2815,7 +2815,7 @@
|
||||
"bcg" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/r_n_d/fabricator/mechanic_fab/autolathe,/turf/simulated/floor,/area/supply/office)
|
||||
"bch" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/hallway/primary/aft{name = "\improper Central Civillian Hallway"})
|
||||
"bci" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bcj" = (/obj/structure/device/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor{icon_state = "cult"},/area/crew_quarters/bar)
|
||||
"bcj" = (/obj/structure/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor{icon_state = "cult"},/area/crew_quarters/bar)
|
||||
"bck" = (/obj/structure/rack,/obj/item/stack/package_wrap,/obj/item/stack/package_wrap,/turf/simulated/floor/plating,/area/maintenance/port)
|
||||
"bcl" = (/obj/structure/window/reinforced{dir = 8; layer = 2.9},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bcm" = (/obj/machinery/cooking/candy,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
|
||||
@@ -5723,7 +5723,7 @@
|
||||
"cgc" = (/turf/simulated/floor{dir = 5; icon_state = "dark vault stripe"},/area/derelict/singularity_engine{icon_state = "showroom"; name = "\improper Derelict Marketplace"})
|
||||
"cgd" = (/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"cge" = (/obj/structure/table,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"cgf" = (/obj/structure/table,/obj/item/device/violin,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"cgf" = (/obj/structure/table,/obj/item/device/instrument/violin,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"cgg" = (/obj/machinery/vending/suitdispenser,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"cgh" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"cgi" = (/obj/structure/table,/obj/map/spawner/set_spawner/theater,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
@@ -5819,7 +5819,7 @@
|
||||
"chU" = (/obj/machinery/door/airlock/glass{name = "Door"},/turf/simulated/floor{dir = 10; icon_state = "caution"},/area/derelict/singularity_engine{icon_state = "showroom"; name = "\improper Derelict Marketplace"})
|
||||
"chV" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/derelict/hallway/primary)
|
||||
"chW" = (/obj/structure/window/barricade/full,/turf/simulated/floor{icon_state = "bar"},/area/maintenance/ghettobar)
|
||||
"chX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/device/piano,/turf/simulated/floor{icon_state = "cult"},/area/maintenance/ghettobar)
|
||||
"chX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/piano,/turf/simulated/floor{icon_state = "cult"},/area/maintenance/ghettobar)
|
||||
"chY" = (/turf/simulated/floor{icon_state = "cult"},/area/maintenance/ghettobar)
|
||||
"chZ" = (/turf/simulated/floor/carpet,/area/maintenance/ghettobar)
|
||||
"cia" = (/turf/simulated/floor/plating,/area/maintenance/ghettobar)
|
||||
|
||||
@@ -4880,7 +4880,7 @@
|
||||
"bPR" = (/obj/machinery/door/airlock{id_tag = "RDorm3"; name = "Dorm 3"},/turf/simulated/floor,/area/crew_quarters/sleep)
|
||||
"bPS" = (/obj/effect/decal/warning_stripes/unshielded_area,/turf/simulated/wall,/area/derelictparts/apderelict)
|
||||
"bPT" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep)
|
||||
"bPU" = (/obj/structure/table/woodentable,/obj/item/device/violin,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"bPU" = (/obj/structure/table/woodentable,/obj/item/device/instrument/violin,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"bPV" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"bPW" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"bPX" = (/obj/item/weapon/stool{pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
@@ -5133,7 +5133,7 @@
|
||||
"bUK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/screwdriver,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/derelictparts/port)
|
||||
"bUL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/derelictparts/port)
|
||||
"bUM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/effect/decal/cleanable/dirt,/obj/structure/reagent_dispensers/silicate,/turf/simulated/floor/plating,/area/derelictparts/port)
|
||||
"bUN" = (/obj/structure/rack,/obj/item/device/violin,/obj/item/device/camera,/turf/simulated/floor{icon_state = "dark vault full"},/area/crew_quarters/theatre)
|
||||
"bUN" = (/obj/structure/rack,/obj/item/device/instrument/violin,/obj/item/device/camera,/turf/simulated/floor{icon_state = "dark vault full"},/area/crew_quarters/theatre)
|
||||
"bUO" = (/obj/structure/rack,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/item/weapon/reagent_containers/food/snacks/pie,/turf/simulated/floor{icon_state = "dark vault full"},/area/crew_quarters/theatre)
|
||||
"bUP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep)
|
||||
"bUQ" = (/obj/item/weapon/stool/piano{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
@@ -6260,7 +6260,7 @@
|
||||
"cqt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/security/prison)
|
||||
"cqu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/security/brig)
|
||||
"cqv" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/security/brig)
|
||||
"cqw" = (/obj/structure/device/piano,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"cqw" = (/obj/structure/piano,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"cqx" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/brig)
|
||||
"cqy" = (/turf/simulated/floor{icon_state = "bar"},/area/security/prison)
|
||||
"cqz" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-out"; icon_state = "out"; dir = 2},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/security/brig)
|
||||
@@ -7829,7 +7829,7 @@
|
||||
"cUC" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"cUD" = (/obj/machinery/cloning/clonepod/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"cUE" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"cUF" = (/obj/structure/device/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"cUF" = (/obj/structure/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"cUG" = (/obj/item/weapon/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"cUH" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/living)
|
||||
"cUI" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/living)
|
||||
|
||||
@@ -3572,7 +3572,7 @@
|
||||
"bqJ" = (/obj/structure/stool{pixel_y = 5},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqK" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqL" = (/obj/structure/window/reinforced/tinted,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqM" = (/obj/structure/device/piano{dir = 4},/obj/structure/window/reinforced/tinted,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqM" = (/obj/structure/piano{dir = 4},/obj/structure/window/reinforced/tinted,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqN" = (/obj/structure/stool{pixel_y = 5},/obj/structure/window/reinforced/tinted,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqO" = (/obj/effect/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = 28; pixel_y = 4},/obj/structure/window/reinforced/tinted,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
"bqP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
|
||||
@@ -6735,7 +6735,7 @@
|
||||
"czA" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"czB" = (/obj/machinery/clonepod,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"czC" = (/obj/machinery/scan_consolenew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"czD" = (/obj/structure/device/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"czD" = (/obj/structure/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"czE" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"czF" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
|
||||
"czG" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
|
||||
@@ -7401,7 +7401,7 @@
|
||||
"cMq" = (/obj/structure/table/reinforced,/turf/unsimulated/floor,/area)
|
||||
"cMr" = (/obj/liquid_fuel/flamethrower_fuel,/turf/unsimulated/floor,/area)
|
||||
"cMs" = (/turf/unsimulated/floor{icon_state = "platingdmg1"},/area)
|
||||
"cMt" = (/obj/structure/device/piano{dir = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area)
|
||||
"cMt" = (/obj/structure/piano{dir = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area)
|
||||
"cMu" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "grimy"},/area)
|
||||
"cMv" = (/obj/structure/rack,/obj/item/weapon/secstorage/sbriefcase,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter/zippo,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{icon_state = "grimy"},/area)
|
||||
"cMw" = (/obj/structure/closet/acloset,/turf/unsimulated/floor,/area)
|
||||
|
||||
@@ -87,7 +87,7 @@ TYPE: /obj/structure/table/glass > /obj/structure/table
|
||||
TYPE: /obj/structure/closet/wardrobe/white/medical > /obj/structure/closet/wardrobe/medic_white
|
||||
TYPE: /obj/structure/bodycontainer/morgue > /obj/structure/morgue
|
||||
TYPE: /obj/structure/janitorialcart > /obj/structure/stool/bed/chair/vehicle/janicart
|
||||
TYPE: /obj/structure/piano > /obj/structure/device/piano
|
||||
TYPE: /obj/structure/piano > /obj/structure/piano
|
||||
TYPE: /obj/structure/closet/secure_closet/security/sec > /obj/structure/closet/secure_closet/security
|
||||
TYPE: /obj/structure/closet/secure_closet/atmospherics > /obj/structure/closet/secure_closet/engineering_atmos
|
||||
TYPE: /obj/structure/bodycontainer/crematorium > /obj/structure/crematorium
|
||||
|
||||
@@ -2341,7 +2341,7 @@
|
||||
"aTa" = (/obj/machinery/conveyor{dir = 4; id_tag = "QMLoad"},/obj/structure/plasticflaps,/turf/simulated/floor/plating,/area/quartermaster/qm)
|
||||
"aTb" = (/obj/machinery/conveyor{dir = 4; id_tag = "QMLoad"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/qm)
|
||||
"aTc" = (/obj/machinery/conveyor{dir = 1; id_tag = "QMLoad"; pixel_x = -4; pixel_y = 2},/obj/structure/cable{icon_state = "1-2"; pixel_y = 0; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/quartermaster/qm)
|
||||
"aTd" = (/obj/structure/device/piano,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "loungefloor"},/area/research_outpost/iso3)
|
||||
"aTd" = (/obj/structure/piano,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "loungefloor"},/area/research_outpost/iso3)
|
||||
"aTe" = (/obj/structure/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/general/hidden,/obj/structure/stool,/turf/simulated/floor{icon_state = "loungefloor"},/area/research_outpost/iso3)
|
||||
"aTf" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "dark"},/area/research_outpost/iso3)
|
||||
"aTg" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/item/device/eftpos{dir = 2; pixel_y = 35},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/cafeteria)
|
||||
@@ -2746,7 +2746,7 @@
|
||||
"baP" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall,/area/crew_quarters/bar)
|
||||
"baQ" = (/obj/structure/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/obj/machinery/door/airlock{name = "Bar"; req_access_txt = "25"},/turf/simulated/floor,/area/crew_quarters/cafeteria)
|
||||
"baR" = (/turf/simulated/wall,/area/crew_quarters/bar)
|
||||
"baS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/device/piano,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/cafeteria)
|
||||
"baS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/piano,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/cafeteria)
|
||||
"baT" = (/obj/structure/disposalpipe/segment,/obj/structure/stool,/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/cafeteria)
|
||||
"baU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{icon_state = "1-2"; d1 = 1; d2 = 2},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/cafeteria)
|
||||
"baV" = (/obj/structure/cable{icon_state = "4-8"; pixel_y = 0; d1 = 4; d2 = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"},/area/crew_quarters/cafeteria)
|
||||
@@ -4320,7 +4320,7 @@
|
||||
"bFd" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor{tag = "icon-warnwhite (SOUTHEAST)"; icon_state = "warnwhite"; dir = 6},/area/atmos)
|
||||
"bFe" = (/obj/machinery/door/window{dir = 4; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"bFf" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"bFg" = (/obj/structure/device/piano,/turf/simulated/floor{icon_state = "engine"},/area/shuttle/escape/centcom)
|
||||
"bFg" = (/obj/structure/piano,/turf/simulated/floor{icon_state = "engine"},/area/shuttle/escape/centcom)
|
||||
"bFh" = (/obj/structure/stool,/obj/machinery/status_display{pixel_x = -32; pixel_y = -32; pixel_z = 0},/turf/simulated/floor{icon_state = "engine"},/area/shuttle/escape/centcom)
|
||||
"bFi" = (/obj/structure/shuttle/engine/propulsion{dir = 1},/turf/space,/area/supply/dock)
|
||||
"bFj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/greengrid,/area/turret_protected/ai_upload)
|
||||
|
||||
@@ -4283,7 +4283,7 @@
|
||||
"bEs" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEt" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/obj/machinery/computer/slot_machine,/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEu" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/computer/slot_machine,/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEv" = (/obj/structure/device/piano{pixel_x = 6},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEv" = (/obj/structure/piano{pixel_x = 6},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEw" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/stool/piano{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEx" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bEy" = (/obj/structure/table/woodentable,/obj/item/weapon/staff/broom,/obj/item/weapon/wrench,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
@@ -4830,7 +4830,7 @@
|
||||
"bOT" = (/obj/machinery/door/window{base_state = "right"; dir = 8; name = "Cabaret Stage"; req_access_txt = "0"},/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bOU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/light/small,/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bOV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bOW" = (/obj/structure/table/woodentable,/obj/item/device/violin{pixel_y = 6},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bOW" = (/obj/structure/table/woodentable,/obj/item/device/instrument/violin{pixel_y = 6},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bOX" = (/obj/structure/table,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/starboard)
|
||||
"bOY" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/starboard)
|
||||
"bOZ" = (/turf/simulated/wall/r_wall,/area/maintenance/starboard)
|
||||
@@ -8611,7 +8611,7 @@
|
||||
"djE" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"djF" = (/obj/machinery/cloning/clonepod/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"djG" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"djH" = (/obj/structure/device/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"djH" = (/obj/structure/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"djI" = (/obj/item/weapon/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"djJ" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/living)
|
||||
"djK" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/living)
|
||||
|
||||
@@ -1143,7 +1143,7 @@
|
||||
"vY" = (/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "right"; dir = 2; name = "Chemistry Desk"; req_access_txt = "33"},/obj/item/clothing/glasses/science,/obj/machinery/door/firedoor/border_only{layer = 2.5; name = "Firelock South"},/turf/simulated/floor/plating,/area/medical/medbay)
|
||||
"vZ" = (/turf/simulated/wall,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"wa" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet,/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"wb" = (/obj/structure/device/piano,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"wb" = (/obj/structure/piano,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"wc" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/machinery/light,/obj/effect/landmark/start{name = "Clown"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"wd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"we" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
|
||||
@@ -1474,7 +1474,7 @@
|
||||
"aCr" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/kitchenspike,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
"aCs" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
"aCt" = (/obj/machinery/alarm{dir = 8; pixel_x = 22},/obj/machinery/processor,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
"aCu" = (/obj/structure/rack,/obj/item/device/violin,/obj/item/device/camera,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/item/device/soundsynth,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aCu" = (/obj/structure/rack,/obj/item/device/instrument/violin,/obj/item/device/camera,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/item/device/soundsynth,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aCv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aCw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/decal/cleanable/blood/oil{dir = 4; icon_state = "floor6"},/obj/item/weapon/bananapeel/traitorpeel,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aCx" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/machinery/light{dir = 4},/obj/item/mounted/poster,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
@@ -1791,7 +1791,7 @@
|
||||
"aIw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2{name = "Clinic"})
|
||||
"aIx" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 4; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/medical/medbay2{name = "Clinic"})
|
||||
"aIy" = (/obj/structure/bed/chair/wood/normal,/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aIz" = (/obj/structure/device/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aIz" = (/obj/structure/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aIA" = (/obj/item/weapon/stool/piano{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aIB" = (/obj/structure/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aIC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/bar)
|
||||
@@ -5557,7 +5557,7 @@
|
||||
"ccS" = (/turf/simulated/floor{dir = 5; icon_state = "dark vault stripe"},/area/derelict/singularity_engine{icon_state = "showroom"; name = "\improper Derelict Marketplace"})
|
||||
"ccT" = (/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"ccU" = (/obj/structure/table,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"ccV" = (/obj/structure/table,/obj/item/device/violin,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"ccV" = (/obj/structure/table,/obj/item/device/instrument/violin,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"ccW" = (/obj/machinery/vending/suitdispenser,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"ccX" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
"ccY" = (/obj/structure/table,/obj/map/spawner/set_spawner/theater,/turf/simulated/floor/wood,/area/derelict/hallway{name = "\improper Derelict Theatre"})
|
||||
@@ -5653,7 +5653,7 @@
|
||||
"ceK" = (/obj/machinery/door/airlock/glass{name = "Door"},/turf/simulated/floor{dir = 10; icon_state = "caution"},/area/derelict/singularity_engine{icon_state = "showroom"; name = "\improper Derelict Marketplace"})
|
||||
"ceL" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/derelict/hallway/primary)
|
||||
"ceM" = (/obj/structure/window/barricade/full,/turf/simulated/floor{icon_state = "bar"},/area/maintenance/ghettobar)
|
||||
"ceN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/device/piano,/turf/simulated/floor{icon_state = "cult"},/area/maintenance/ghettobar)
|
||||
"ceN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/piano,/turf/simulated/floor{icon_state = "cult"},/area/maintenance/ghettobar)
|
||||
"ceO" = (/turf/simulated/floor{icon_state = "cult"},/area/maintenance/ghettobar)
|
||||
"ceP" = (/turf/simulated/floor/carpet,/area/maintenance/ghettobar)
|
||||
"ceQ" = (/turf/simulated/floor/plating,/area/maintenance/ghettobar)
|
||||
|
||||
@@ -1630,12 +1630,12 @@
|
||||
"aFr" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"aFs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||
"aFt" = (/obj/machinery/computer/HolodeckControl,/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"aFu" = (/obj/structure/device/piano{icon_state = "piano"; name = "space piano"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFu" = (/obj/structure/piano{icon_state = "piano"; name = "space piano"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFv" = (/obj/item/weapon/stool/piano{dir = 8},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/carpet,/area/maintenance/ghettotheatre)
|
||||
"aFw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/carpet,/area/maintenance/ghettotheatre)
|
||||
"aFx" = (/obj/effect/decal/cleanable/soot,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/maintenance/ghettotheatre)
|
||||
"aFy" = (/obj/effect/decal/cleanable/soot,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/machinery/light{dir = 4},/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFz" = (/obj/structure/table/woodentable,/obj/item/device/violin,/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFz" = (/obj/structure/table/woodentable,/obj/item/device/instrument/violin,/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFA" = (/obj/structure/table/woodentable,/obj/item/clothing/under/owl,/obj/item/clothing/mask/gas/owl_mask,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken4"},/area/maintenance/ghettotheatre)
|
||||
"aFB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_construct/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
"aFC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
@@ -2419,7 +2419,7 @@
|
||||
"aUA" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUB" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUC" = (/obj/machinery/camera{c_tag = "Theatre"},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken6"},/area/crew_quarters/theatre)
|
||||
"aUD" = (/obj/structure/rack,/obj/item/device/violin,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUD" = (/obj/structure/rack,/obj/item/device/instrument/violin,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUE" = (/obj/machinery/door/window{dir = 2; base_state = "left"; name = "Kitchen Delivery"; req_access_txt = "28"},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/warning_stripes{icon_state = "unloading"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/kitchen)
|
||||
"aUF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
"aUG" = (/obj/machinery/camera{c_tag = "Kitchen Cold Room"},/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
@@ -2698,7 +2698,7 @@
|
||||
"aZT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"aZU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"aZV" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA2"; location = "Dorm"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"aZW" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/device/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZW" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/stool/piano{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZY" = (/obj/structure/bed/chair/wood/wings{dir = 1},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
|
||||
|
||||
@@ -1620,12 +1620,12 @@
|
||||
"aFh" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"aFi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||
"aFj" = (/obj/machinery/computer/HolodeckControl,/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||
"aFk" = (/obj/structure/device/piano{icon_state = "piano"; name = "space piano"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFk" = (/obj/structure/piano{icon_state = "piano"; name = "space piano"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFl" = (/obj/item/weapon/stool/piano{dir = 8},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/carpet,/area/maintenance/ghettotheatre)
|
||||
"aFm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/carpet,/area/maintenance/ghettotheatre)
|
||||
"aFn" = (/obj/effect/decal/cleanable/soot,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/maintenance/ghettotheatre)
|
||||
"aFo" = (/obj/effect/decal/cleanable/soot,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/machinery/light{dir = 4},/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFp" = (/obj/structure/table/woodentable,/obj/item/device/violin,/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFp" = (/obj/structure/table/woodentable,/obj/item/device/instrument/violin,/turf/simulated/floor/plating,/area/maintenance/ghettotheatre)
|
||||
"aFq" = (/obj/structure/table/woodentable,/obj/item/clothing/under/owl,/obj/item/clothing/mask/gas/owl_mask,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken4"},/area/maintenance/ghettotheatre)
|
||||
"aFr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_construct/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
"aFs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
@@ -2399,7 +2399,7 @@
|
||||
"aUg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUh" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUi" = (/obj/machinery/camera{c_tag = "Theatre"},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken6"},/area/crew_quarters/theatre)
|
||||
"aUj" = (/obj/structure/rack,/obj/item/device/violin,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUj" = (/obj/structure/rack,/obj/item/device/instrument/violin,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||
"aUk" = (/obj/machinery/door/window{dir = 2; base_state = "left"; name = "Kitchen Delivery"; req_access_txt = "28"},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/warning_stripes{icon_state = "unloading"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/kitchen)
|
||||
"aUl" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
"aUm" = (/obj/machinery/camera{c_tag = "Kitchen Cold Room"},/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||
@@ -2678,7 +2678,7 @@
|
||||
"aZz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"aZA" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"aZB" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA2"; location = "Dorm"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"aZC" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/device/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZC" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/piano{icon_state = "piano"; name = "space piano"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/stool/piano{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZE" = (/obj/structure/bed/chair/wood/wings{dir = 1},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"aZF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
|
||||
@@ -8419,7 +8419,7 @@
|
||||
"dfU" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"dfV" = (/obj/machinery/cloning/clonepod/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"dfW" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
|
||||
"dfX" = (/obj/structure/device/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"dfX" = (/obj/structure/piano{dir = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"dfY" = (/obj/item/weapon/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
|
||||
"dfZ" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/living)
|
||||
"dga" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/living)
|
||||
|
||||
BIN
sound/guitar/Ab3.ogg
Normal file
BIN
sound/guitar/Ab3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Ab4.ogg
Normal file
BIN
sound/guitar/Ab4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Ab5.ogg
Normal file
BIN
sound/guitar/Ab5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Ab6.ogg
Normal file
BIN
sound/guitar/Ab6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/An3.ogg
Normal file
BIN
sound/guitar/An3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/An4.ogg
Normal file
BIN
sound/guitar/An4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/An5.ogg
Normal file
BIN
sound/guitar/An5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/An6.ogg
Normal file
BIN
sound/guitar/An6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bb3.ogg
Normal file
BIN
sound/guitar/Bb3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bb4.ogg
Normal file
BIN
sound/guitar/Bb4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bb5.ogg
Normal file
BIN
sound/guitar/Bb5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bb6.ogg
Normal file
BIN
sound/guitar/Bb6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bn3.ogg
Normal file
BIN
sound/guitar/Bn3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bn4.ogg
Normal file
BIN
sound/guitar/Bn4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bn5.ogg
Normal file
BIN
sound/guitar/Bn5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Bn6.ogg
Normal file
BIN
sound/guitar/Bn6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Cn4.ogg
Normal file
BIN
sound/guitar/Cn4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Cn5.ogg
Normal file
BIN
sound/guitar/Cn5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Cn6.ogg
Normal file
BIN
sound/guitar/Cn6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Db4.ogg
Normal file
BIN
sound/guitar/Db4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Db5.ogg
Normal file
BIN
sound/guitar/Db5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Db6.ogg
Normal file
BIN
sound/guitar/Db6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Dn4.ogg
Normal file
BIN
sound/guitar/Dn4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Dn5.ogg
Normal file
BIN
sound/guitar/Dn5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Dn6.ogg
Normal file
BIN
sound/guitar/Dn6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Eb4.ogg
Normal file
BIN
sound/guitar/Eb4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Eb5.ogg
Normal file
BIN
sound/guitar/Eb5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Eb6.ogg
Normal file
BIN
sound/guitar/Eb6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/En3.ogg
Normal file
BIN
sound/guitar/En3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/En4.ogg
Normal file
BIN
sound/guitar/En4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/En5.ogg
Normal file
BIN
sound/guitar/En5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/En6.ogg
Normal file
BIN
sound/guitar/En6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Fn3.ogg
Normal file
BIN
sound/guitar/Fn3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Fn4.ogg
Normal file
BIN
sound/guitar/Fn4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Fn5.ogg
Normal file
BIN
sound/guitar/Fn5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Fn6.ogg
Normal file
BIN
sound/guitar/Fn6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gb3.ogg
Normal file
BIN
sound/guitar/Gb3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gb4.ogg
Normal file
BIN
sound/guitar/Gb4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gb5.ogg
Normal file
BIN
sound/guitar/Gb5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gb6.ogg
Normal file
BIN
sound/guitar/Gb6.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gn3.ogg
Normal file
BIN
sound/guitar/Gn3.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gn4.ogg
Normal file
BIN
sound/guitar/Gn4.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gn5.ogg
Normal file
BIN
sound/guitar/Gn5.ogg
Normal file
Binary file not shown.
BIN
sound/guitar/Gn6.ogg
Normal file
BIN
sound/guitar/Gn6.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user