mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 14:08:31 +01:00
Merge branch 'master' of github.com:tgstation/-tg-station into DB_cleanup
This commit is contained in:
+20
-1
@@ -4,6 +4,25 @@ Website: http://nanotrasen.com
|
||||
Code: https://github.com/tgstation/-tg-station
|
||||
IRC: irc://irc.rizon.net/tgstation13
|
||||
|
||||
================================================================================
|
||||
DOWNLOADING
|
||||
================================================================================
|
||||
There are a number of ways to download tgstation13. I've listed 3 here (easiest first).
|
||||
|
||||
Option 1: Download the source code as a zip by clicking the ZIP button in the code tab of https://github.com/tgstation/-tg-station
|
||||
(note: this will use a lot of bandwidth if you wish to update andis alot of hassle if you want to make any changes at all, so I don't recommend it)
|
||||
|
||||
(Option 2 & 3): Install Git-scm from here first: http://git-scm.com/download/win
|
||||
Option 2:
|
||||
Install GitHub::windows from http://windows.github.com/
|
||||
It handles most of the setup/configuraton of Git for you.
|
||||
Then you simply search for tgstation repository and click the big clone button.
|
||||
|
||||
Option 3:
|
||||
Follow this guide linked in Giacom's post thread here: http://forums.nanotrasen.com/viewtopic.php?f=16&t=12552
|
||||
(I recommend usng git-scm rather than the git CLI suggested by the guide linked to in that thread)
|
||||
|
||||
|
||||
================================================================================
|
||||
INSTALLATION
|
||||
================================================================================
|
||||
@@ -73,4 +92,4 @@ IRC Bot Setup
|
||||
================================================================================
|
||||
|
||||
Included in the SVN is an IRC bot capable of relaying adminhelps to a specified IRC channel/server (thanks to Skibiliano)
|
||||
Instructions for bot setup are included in the /bot/ folder along with the bot/relay script itself
|
||||
Instructions for bot setup are included in the /bot/ folder along with the bot/relay script itself
|
||||
|
||||
@@ -173,13 +173,13 @@
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
if(signal.data["power"] != null)
|
||||
if("power" in signal.data)
|
||||
on = text2num(signal.data["power"])
|
||||
if(signal.data["power_toggle"] != null)
|
||||
if("power_toggle" in signal.data)
|
||||
on = !on
|
||||
|
||||
if(signal.data["panic_siphon"]) //must be before if("scrubbing" thing
|
||||
panic = text2num(signal.data["panic_siphon"] != null)
|
||||
if("panic_siphon" in signal.data) //must be before if("scrubbing" thing
|
||||
panic = text2num(signal.data["panic_siphon"])
|
||||
if(panic)
|
||||
on = 1
|
||||
scrubbing = 0
|
||||
@@ -187,7 +187,7 @@
|
||||
else
|
||||
scrubbing = 1
|
||||
volume_rate = initial(volume_rate)
|
||||
if(signal.data["toggle_panic_siphon"] != null)
|
||||
if("toggle_panic_siphon" in signal.data)
|
||||
panic = !panic
|
||||
if(panic)
|
||||
on = 1
|
||||
@@ -197,31 +197,31 @@
|
||||
scrubbing = 1
|
||||
volume_rate = initial(volume_rate)
|
||||
|
||||
if(signal.data["scrubbing"] != null)
|
||||
if("scrubbing" in signal.data)
|
||||
scrubbing = text2num(signal.data["scrubbing"])
|
||||
if(signal.data["toggle_scrubbing"])
|
||||
if("toggle_scrubbing" in signal.data)
|
||||
scrubbing = !scrubbing
|
||||
|
||||
if(signal.data["co2_scrub"] != null)
|
||||
if("co2_scrub" in signal.data)
|
||||
scrub_CO2 = text2num(signal.data["co2_scrub"])
|
||||
if(signal.data["toggle_co2_scrub"])
|
||||
if("toggle_co2_scrub" in signal.data)
|
||||
scrub_CO2 = !scrub_CO2
|
||||
|
||||
if(signal.data["tox_scrub"] != null)
|
||||
if("tox_scrub" in signal.data)
|
||||
scrub_Toxins = text2num(signal.data["tox_scrub"])
|
||||
if(signal.data["toggle_tox_scrub"])
|
||||
if("toggle_tox_scrub" in signal.data)
|
||||
scrub_Toxins = !scrub_Toxins
|
||||
|
||||
if(signal.data["n2o_scrub"] != null)
|
||||
if("n2o_scrub" in signal.data)
|
||||
scrub_N2O = text2num(signal.data["n2o_scrub"])
|
||||
if(signal.data["toggle_n2o_scrub"])
|
||||
if("toggle_n2o_scrub" in signal.data)
|
||||
scrub_N2O = !scrub_N2O
|
||||
|
||||
if(signal.data["init"] != null)
|
||||
if("init" in signal.data)
|
||||
name = signal.data["init"]
|
||||
return
|
||||
|
||||
if(signal.data["status"] != null)
|
||||
if("status" in signal.data)
|
||||
spawn(2)
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
@@ -28,8 +28,8 @@ var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessor
|
||||
var/global/list/facial_hair_styles_male_list = list()
|
||||
var/global/list/facial_hair_styles_female_list = list()
|
||||
//Underwear
|
||||
var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "Love-Hearts", "Black2", "Grey2", "Stripey", "Kinky", "None") //Curse whoever made male/female underwear diffrent colours
|
||||
var/global/list/underwear_f = list("Red", "White", "Yellow", "Blue", "Black", "Thong", "Babydoll", "Baby-Blue", "Green", "Pink", "Kinky", "None")
|
||||
var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "Love-Hearts", "Black2", "Grey2", "Stripey", "Kinky", "Red", "None") //Curse whoever made male/female underwear diffrent colours
|
||||
var/global/list/underwear_f = list("Red", "White", "Yellow", "Blue", "Black", "Thong", "Babydoll", "Baby-Blue", "Green", "Pink", "Kinky", "Tankini", "None")
|
||||
//Backpacks
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel")
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ datum/controller/game_controller/proc/setup_objects()
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
|
||||
T.broadcast_status()
|
||||
|
||||
world << "\ref \b Making a mess..."
|
||||
world << "\red \b Making a mess..."
|
||||
sleep(-1)
|
||||
for(var/turf/simulated/floor/F in world)
|
||||
F.MakeDirty()
|
||||
|
||||
@@ -142,13 +142,6 @@
|
||||
return ..() //check for shuttle and nuke
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/Topic(href, href_list)
|
||||
..()
|
||||
if (href_list["ai_win"])
|
||||
ai_win()
|
||||
return
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/proc/takeover()
|
||||
set category = "Malfunction"
|
||||
set name = "System Override"
|
||||
|
||||
@@ -842,15 +842,16 @@ table tr:first-child th:first-child { border: none;}
|
||||
send_signal(device_id, list(
|
||||
"power"= 0
|
||||
))
|
||||
/*if(AALARM_MODE_OFF) Commented out cause the "turn off panic" uses scrubbing mode now instead.
|
||||
if(AALARM_MODE_OFF)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"panic_siphon" = 0
|
||||
"panic_siphon"= 0,
|
||||
"power"= 0
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power"= 1
|
||||
))*/
|
||||
"power"= 0
|
||||
))
|
||||
|
||||
/obj/machinery/alarm/update_icon()
|
||||
if(wiresexposed)
|
||||
|
||||
@@ -26,12 +26,13 @@
|
||||
/obj/effect/decal/cleanable/dirt
|
||||
name = "dirt"
|
||||
desc = "Someone should clean that up."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "dirt"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 2
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "dirt"
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/decal/cleanable/flour
|
||||
name = "flour"
|
||||
|
||||
@@ -7,387 +7,21 @@
|
||||
icon_state = "violin"
|
||||
item_state = "violin"
|
||||
force = 10
|
||||
var/datum/song/song
|
||||
var/playing = 0
|
||||
var/help = 0
|
||||
var/edit = 1
|
||||
var/repeat = 0
|
||||
var/datum/song/handheld/song
|
||||
|
||||
/obj/item/device/violin/proc/playnote(var/note as text)
|
||||
//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)
|
||||
//world << line
|
||||
for(var/beat in text2list(lowertext(line), ","))
|
||||
//world << "beat: [beat]"
|
||||
var/list/notes = text2list(beat, "/")
|
||||
for(var/note in text2list(notes[1], "-"))
|
||||
//world << "note: [note]"
|
||||
if(!playing || !isliving(loc))//If the violin is playing, or isn't held by a person
|
||||
playing = 0
|
||||
return
|
||||
if(lentext(note) == 0)
|
||||
continue
|
||||
//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 lentext(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/New()
|
||||
song = new("violin", src)
|
||||
song.instrumentExt = "mid"
|
||||
|
||||
/obj/item/device/violin/attack_self(mob/user as mob)
|
||||
if(!isliving(user) || user.stat || user.restrained() || user.lying) return
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
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>"
|
||||
dat += "<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>"
|
||||
dat += "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>"
|
||||
dat += "<A href='?src=\ref[src];newsong=1'>Start a New Song</A><BR>"
|
||||
dat += "<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(!in_range(src, usr) || issilicon(usr) || !isliving(usr) || !usr.canmove || usr.restrained())
|
||||
usr << browse(null, "window=violin;size=700x300")
|
||||
onclose(usr, "violin")
|
||||
/obj/item/device/violin/interact(mob/user as mob)
|
||||
if(!user)
|
||||
return
|
||||
|
||||
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)
|
||||
if(!isliving(user) || user.stat || user.restrained() || user.lying)
|
||||
return
|
||||
|
||||
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(lentext(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(lentext(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(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()
|
||||
var/list/lines = text2list(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)
|
||||
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++
|
||||
song = new()
|
||||
song.lines = lines
|
||||
song.tempo = tempo
|
||||
|
||||
add_fingerprint(usr)
|
||||
for(var/mob/M in viewers(1, loc))
|
||||
if((M.client && M.machine == src))
|
||||
attack_self(M)
|
||||
return
|
||||
user.set_machine(src)
|
||||
song.interact(user)
|
||||
|
||||
@@ -89,17 +89,20 @@
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/twohanded/offhand
|
||||
w_class = 5.0
|
||||
icon_state = "offhand"
|
||||
name = "offhand"
|
||||
icon_state = "offhand"
|
||||
w_class = 5.0
|
||||
abstract = 1
|
||||
|
||||
unwield()
|
||||
del(src)
|
||||
/obj/item/weapon/twohanded/offhand/unwield()
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/twohanded/offhand/wield()
|
||||
del(src)
|
||||
|
||||
wield()
|
||||
del(src)
|
||||
|
||||
/*
|
||||
* Fireaxe
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/obj/structure/dresser
|
||||
name = "dresser"
|
||||
desc = "A nicely-crafted wooden dresser. It's filled with lots of undies."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "dresser"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/dresser/attack_hand(mob/user as mob)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(H.gender == MALE)
|
||||
var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in underwear_m
|
||||
if(!in_range(src, usr))//no tele-grooming
|
||||
return
|
||||
if(new_undies)
|
||||
H.underwear = underwear_m.Find(new_undies)
|
||||
else
|
||||
var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in underwear_f
|
||||
if(!in_range(src, usr))
|
||||
return
|
||||
if(new_undies)
|
||||
H.underwear = underwear_f.Find(new_undies)
|
||||
|
||||
add_fingerprint(H)
|
||||
H.update_body()
|
||||
@@ -5,223 +5,221 @@
|
||||
var/list/lines = new()
|
||||
var/tempo = 5
|
||||
|
||||
/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()
|
||||
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"
|
||||
var/instrumentDir = "piano" // the folder with the sounds
|
||||
var/instrumentExt = "ogg" // the file extension
|
||||
var/obj/instrumentObj = null // the associated obj playing the sound
|
||||
|
||||
/obj/structure/device/piano/proc/playnote(var/note as text)
|
||||
/datum/song/New(dir, obj)
|
||||
instrumentDir = dir
|
||||
instrumentObj = obj
|
||||
|
||||
/datum/song/proc/playnote(var/note as text)
|
||||
//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'
|
||||
if("Cn1") soundfile = "sound/[instrumentDir]/Cn1.[instrumentExt]"
|
||||
if("C#1") soundfile = "sound/[instrumentDir]/C#1.[instrumentExt]"
|
||||
if("Db1") soundfile = "sound/[instrumentDir]/Db1.[instrumentExt]"
|
||||
if("Dn1") soundfile = "sound/[instrumentDir]/Dn1.[instrumentExt]"
|
||||
if("D#1") soundfile = "sound/[instrumentDir]/D#1.[instrumentExt]"
|
||||
if("Eb1") soundfile = "sound/[instrumentDir]/Eb1.[instrumentExt]"
|
||||
if("En1") soundfile = "sound/[instrumentDir]/En1.[instrumentExt]"
|
||||
if("E#1") soundfile = "sound/[instrumentDir]/E#1.[instrumentExt]"
|
||||
if("Fb1") soundfile = "sound/[instrumentDir]/Fb1.[instrumentExt]"
|
||||
if("Fn1") soundfile = "sound/[instrumentDir]/Fn1.[instrumentExt]"
|
||||
if("F#1") soundfile = "sound/[instrumentDir]/F#1.[instrumentExt]"
|
||||
if("Gb1") soundfile = "sound/[instrumentDir]/Gb1.[instrumentExt]"
|
||||
if("Gn1") soundfile = "sound/[instrumentDir]/Gn1.[instrumentExt]"
|
||||
if("G#1") soundfile = "sound/[instrumentDir]/G#1.[instrumentExt]"
|
||||
if("Ab1") soundfile = "sound/[instrumentDir]/Ab1.[instrumentExt]"
|
||||
if("An1") soundfile = "sound/[instrumentDir]/An1.[instrumentExt]"
|
||||
if("A#1") soundfile = "sound/[instrumentDir]/A#1.[instrumentExt]"
|
||||
if("Bb1") soundfile = "sound/[instrumentDir]/Bb1.[instrumentExt]"
|
||||
if("Bn1") soundfile = "sound/[instrumentDir]/Bn1.[instrumentExt]"
|
||||
if("B#1") soundfile = "sound/[instrumentDir]/B#1.[instrumentExt]"
|
||||
if("Cb2") soundfile = "sound/[instrumentDir]/Cb2.[instrumentExt]"
|
||||
if("Cn2") soundfile = "sound/[instrumentDir]/Cn2.[instrumentExt]"
|
||||
if("C#2") soundfile = "sound/[instrumentDir]/C#2.[instrumentExt]"
|
||||
if("Db2") soundfile = "sound/[instrumentDir]/Db2.[instrumentExt]"
|
||||
if("Dn2") soundfile = "sound/[instrumentDir]/Dn2.[instrumentExt]"
|
||||
if("D#2") soundfile = "sound/[instrumentDir]/D#2.[instrumentExt]"
|
||||
if("Eb2") soundfile = "sound/[instrumentDir]/Eb2.[instrumentExt]"
|
||||
if("En2") soundfile = "sound/[instrumentDir]/En2.[instrumentExt]"
|
||||
if("E#2") soundfile = "sound/[instrumentDir]/E#2.[instrumentExt]"
|
||||
if("Fb2") soundfile = "sound/[instrumentDir]/Fb2.[instrumentExt]"
|
||||
if("Fn2") soundfile = "sound/[instrumentDir]/Fn2.[instrumentExt]"
|
||||
if("F#2") soundfile = "sound/[instrumentDir]/F#2.[instrumentExt]"
|
||||
if("Gb2") soundfile = "sound/[instrumentDir]/Gb2.[instrumentExt]"
|
||||
if("Gn2") soundfile = "sound/[instrumentDir]/Gn2.[instrumentExt]"
|
||||
if("G#2") soundfile = "sound/[instrumentDir]/G#2.[instrumentExt]"
|
||||
if("Ab2") soundfile = "sound/[instrumentDir]/Ab2.[instrumentExt]"
|
||||
if("An2") soundfile = "sound/[instrumentDir]/An2.[instrumentExt]"
|
||||
if("A#2") soundfile = "sound/[instrumentDir]/A#2.[instrumentExt]"
|
||||
if("Bb2") soundfile = "sound/[instrumentDir]/Bb2.[instrumentExt]"
|
||||
if("Bn2") soundfile = "sound/[instrumentDir]/Bn2.[instrumentExt]"
|
||||
if("B#2") soundfile = "sound/[instrumentDir]/B#2.[instrumentExt]"
|
||||
if("Cb3") soundfile = "sound/[instrumentDir]/Cb3.[instrumentExt]"
|
||||
if("Cn3") soundfile = "sound/[instrumentDir]/Cn3.[instrumentExt]"
|
||||
if("C#3") soundfile = "sound/[instrumentDir]/C#3.[instrumentExt]"
|
||||
if("Db3") soundfile = "sound/[instrumentDir]/Db3.[instrumentExt]"
|
||||
if("Dn3") soundfile = "sound/[instrumentDir]/Dn3.[instrumentExt]"
|
||||
if("D#3") soundfile = "sound/[instrumentDir]/D#3.[instrumentExt]"
|
||||
if("Eb3") soundfile = "sound/[instrumentDir]/Eb3.[instrumentExt]"
|
||||
if("En3") soundfile = "sound/[instrumentDir]/En3.[instrumentExt]"
|
||||
if("E#3") soundfile = "sound/[instrumentDir]/E#3.[instrumentExt]"
|
||||
if("Fb3") soundfile = "sound/[instrumentDir]/Fb3.[instrumentExt]"
|
||||
if("Fn3") soundfile = "sound/[instrumentDir]/Fn3.[instrumentExt]"
|
||||
if("F#3") soundfile = "sound/[instrumentDir]/F#3.[instrumentExt]"
|
||||
if("Gb3") soundfile = "sound/[instrumentDir]/Gb3.[instrumentExt]"
|
||||
if("Gn3") soundfile = "sound/[instrumentDir]/Gn3.[instrumentExt]"
|
||||
if("G#3") soundfile = "sound/[instrumentDir]/G#3.[instrumentExt]"
|
||||
if("Ab3") soundfile = "sound/[instrumentDir]/Ab3.[instrumentExt]"
|
||||
if("An3") soundfile = "sound/[instrumentDir]/An3.[instrumentExt]"
|
||||
if("A#3") soundfile = "sound/[instrumentDir]/A#3.[instrumentExt]"
|
||||
if("Bb3") soundfile = "sound/[instrumentDir]/Bb3.[instrumentExt]"
|
||||
if("Bn3") soundfile = "sound/[instrumentDir]/Bn3.[instrumentExt]"
|
||||
if("B#3") soundfile = "sound/[instrumentDir]/B#3.[instrumentExt]"
|
||||
if("Cb4") soundfile = "sound/[instrumentDir]/Cb4.[instrumentExt]"
|
||||
if("Cn4") soundfile = "sound/[instrumentDir]/Cn4.[instrumentExt]"
|
||||
if("C#4") soundfile = "sound/[instrumentDir]/C#4.[instrumentExt]"
|
||||
if("Db4") soundfile = "sound/[instrumentDir]/Db4.[instrumentExt]"
|
||||
if("Dn4") soundfile = "sound/[instrumentDir]/Dn4.[instrumentExt]"
|
||||
if("D#4") soundfile = "sound/[instrumentDir]/D#4.[instrumentExt]"
|
||||
if("Eb4") soundfile = "sound/[instrumentDir]/Eb4.[instrumentExt]"
|
||||
if("En4") soundfile = "sound/[instrumentDir]/En4.[instrumentExt]"
|
||||
if("E#4") soundfile = "sound/[instrumentDir]/E#4.[instrumentExt]"
|
||||
if("Fb4") soundfile = "sound/[instrumentDir]/Fb4.[instrumentExt]"
|
||||
if("Fn4") soundfile = "sound/[instrumentDir]/Fn4.[instrumentExt]"
|
||||
if("F#4") soundfile = "sound/[instrumentDir]/F#4.[instrumentExt]"
|
||||
if("Gb4") soundfile = "sound/[instrumentDir]/Gb4.[instrumentExt]"
|
||||
if("Gn4") soundfile = "sound/[instrumentDir]/Gn4.[instrumentExt]"
|
||||
if("G#4") soundfile = "sound/[instrumentDir]/G#4.[instrumentExt]"
|
||||
if("Ab4") soundfile = "sound/[instrumentDir]/Ab4.[instrumentExt]"
|
||||
if("An4") soundfile = "sound/[instrumentDir]/An4.[instrumentExt]"
|
||||
if("A#4") soundfile = "sound/[instrumentDir]/A#4.[instrumentExt]"
|
||||
if("Bb4") soundfile = "sound/[instrumentDir]/Bb4.[instrumentExt]"
|
||||
if("Bn4") soundfile = "sound/[instrumentDir]/Bn4.[instrumentExt]"
|
||||
if("B#4") soundfile = "sound/[instrumentDir]/B#4.[instrumentExt]"
|
||||
if("Cb5") soundfile = "sound/[instrumentDir]/Cb5.[instrumentExt]"
|
||||
if("Cn5") soundfile = "sound/[instrumentDir]/Cn5.[instrumentExt]"
|
||||
if("C#5") soundfile = "sound/[instrumentDir]/C#5.[instrumentExt]"
|
||||
if("Db5") soundfile = "sound/[instrumentDir]/Db5.[instrumentExt]"
|
||||
if("Dn5") soundfile = "sound/[instrumentDir]/Dn5.[instrumentExt]"
|
||||
if("D#5") soundfile = "sound/[instrumentDir]/D#5.[instrumentExt]"
|
||||
if("Eb5") soundfile = "sound/[instrumentDir]/Eb5.[instrumentExt]"
|
||||
if("En5") soundfile = "sound/[instrumentDir]/En5.[instrumentExt]"
|
||||
if("E#5") soundfile = "sound/[instrumentDir]/E#5.[instrumentExt]"
|
||||
if("Fb5") soundfile = "sound/[instrumentDir]/Fb5.[instrumentExt]"
|
||||
if("Fn5") soundfile = "sound/[instrumentDir]/Fn5.[instrumentExt]"
|
||||
if("F#5") soundfile = "sound/[instrumentDir]/F#5.[instrumentExt]"
|
||||
if("Gb5") soundfile = "sound/[instrumentDir]/Gb5.[instrumentExt]"
|
||||
if("Gn5") soundfile = "sound/[instrumentDir]/Gn5.[instrumentExt]"
|
||||
if("G#5") soundfile = "sound/[instrumentDir]/G#5.[instrumentExt]"
|
||||
if("Ab5") soundfile = "sound/[instrumentDir]/Ab5.[instrumentExt]"
|
||||
if("An5") soundfile = "sound/[instrumentDir]/An5.[instrumentExt]"
|
||||
if("A#5") soundfile = "sound/[instrumentDir]/A#5.[instrumentExt]"
|
||||
if("Bb5") soundfile = "sound/[instrumentDir]/Bb5.[instrumentExt]"
|
||||
if("Bn5") soundfile = "sound/[instrumentDir]/Bn5.[instrumentExt]"
|
||||
if("B#5") soundfile = "sound/[instrumentDir]/B#5.[instrumentExt]"
|
||||
if("Cb6") soundfile = "sound/[instrumentDir]/Cb6.[instrumentExt]"
|
||||
if("Cn6") soundfile = "sound/[instrumentDir]/Cn6.[instrumentExt]"
|
||||
if("C#6") soundfile = "sound/[instrumentDir]/C#6.[instrumentExt]"
|
||||
if("Db6") soundfile = "sound/[instrumentDir]/Db6.[instrumentExt]"
|
||||
if("Dn6") soundfile = "sound/[instrumentDir]/Dn6.[instrumentExt]"
|
||||
if("D#6") soundfile = "sound/[instrumentDir]/D#6.[instrumentExt]"
|
||||
if("Eb6") soundfile = "sound/[instrumentDir]/Eb6.[instrumentExt]"
|
||||
if("En6") soundfile = "sound/[instrumentDir]/En6.[instrumentExt]"
|
||||
if("E#6") soundfile = "sound/[instrumentDir]/E#6.[instrumentExt]"
|
||||
if("Fb6") soundfile = "sound/[instrumentDir]/Fb6.[instrumentExt]"
|
||||
if("Fn6") soundfile = "sound/[instrumentDir]/Fn6.[instrumentExt]"
|
||||
if("F#6") soundfile = "sound/[instrumentDir]/F#6.[instrumentExt]"
|
||||
if("Gb6") soundfile = "sound/[instrumentDir]/Gb6.[instrumentExt]"
|
||||
if("Gn6") soundfile = "sound/[instrumentDir]/Gn6.[instrumentExt]"
|
||||
if("G#6") soundfile = "sound/[instrumentDir]/G#6.[instrumentExt]"
|
||||
if("Ab6") soundfile = "sound/[instrumentDir]/Ab6.[instrumentExt]"
|
||||
if("An6") soundfile = "sound/[instrumentDir]/An6.[instrumentExt]"
|
||||
if("A#6") soundfile = "sound/[instrumentDir]/A#6.[instrumentExt]"
|
||||
if("Bb6") soundfile = "sound/[instrumentDir]/Bb6.[instrumentExt]"
|
||||
if("Bn6") soundfile = "sound/[instrumentDir]/Bn6.[instrumentExt]"
|
||||
if("B#6") soundfile = "sound/[instrumentDir]/B#6.[instrumentExt]"
|
||||
if("Cb7") soundfile = "sound/[instrumentDir]/Cb7.[instrumentExt]"
|
||||
if("Cn7") soundfile = "sound/[instrumentDir]/Cn7.[instrumentExt]"
|
||||
if("C#7") soundfile = "sound/[instrumentDir]/C#7.[instrumentExt]"
|
||||
if("Db7") soundfile = "sound/[instrumentDir]/Db7.[instrumentExt]"
|
||||
if("Dn7") soundfile = "sound/[instrumentDir]/Dn7.[instrumentExt]"
|
||||
if("D#7") soundfile = "sound/[instrumentDir]/D#7.[instrumentExt]"
|
||||
if("Eb7") soundfile = "sound/[instrumentDir]/Eb7.[instrumentExt]"
|
||||
if("En7") soundfile = "sound/[instrumentDir]/En7.[instrumentExt]"
|
||||
if("E#7") soundfile = "sound/[instrumentDir]/E#7.[instrumentExt]"
|
||||
if("Fb7") soundfile = "sound/[instrumentDir]/Fb7.[instrumentExt]"
|
||||
if("Fn7") soundfile = "sound/[instrumentDir]/Fn7.[instrumentExt]"
|
||||
if("F#7") soundfile = "sound/[instrumentDir]/F#7.[instrumentExt]"
|
||||
if("Gb7") soundfile = "sound/[instrumentDir]/Gb7.[instrumentExt]"
|
||||
if("Gn7") soundfile = "sound/[instrumentDir]/Gn7.[instrumentExt]"
|
||||
if("G#7") soundfile = "sound/[instrumentDir]/G#7.[instrumentExt]"
|
||||
if("Ab7") soundfile = "sound/[instrumentDir]/Ab7.[instrumentExt]"
|
||||
if("An7") soundfile = "sound/[instrumentDir]/An7.[instrumentExt]"
|
||||
if("A#7") soundfile = "sound/[instrumentDir]/A#7.[instrumentExt]"
|
||||
if("Bb7") soundfile = "sound/[instrumentDir]/Bb7.[instrumentExt]"
|
||||
if("Bn7") soundfile = "sound/[instrumentDir]/Bn7.[instrumentExt]"
|
||||
if("B#7") soundfile = "sound/[instrumentDir]/B#7.[instrumentExt]"
|
||||
if("Cb8") soundfile = "sound/[instrumentDir]/Cb8.[instrumentExt]"
|
||||
if("Cn8") soundfile = "sound/[instrumentDir]/Cn8.[instrumentExt]"
|
||||
if("C#8") soundfile = "sound/[instrumentDir]/C#8.[instrumentExt]"
|
||||
if("Db8") soundfile = "sound/[instrumentDir]/Db8.[instrumentExt]"
|
||||
if("Dn8") soundfile = "sound/[instrumentDir]/Dn8.[instrumentExt]"
|
||||
if("D#8") soundfile = "sound/[instrumentDir]/D#8.[instrumentExt]"
|
||||
if("Eb8") soundfile = "sound/[instrumentDir]/Eb8.[instrumentExt]"
|
||||
if("En8") soundfile = "sound/[instrumentDir]/En8.[instrumentExt]"
|
||||
if("E#8") soundfile = "sound/[instrumentDir]/E#8.[instrumentExt]"
|
||||
if("Fb8") soundfile = "sound/[instrumentDir]/Fb8.[instrumentExt]"
|
||||
if("Fn8") soundfile = "sound/[instrumentDir]/Fn8.[instrumentExt]"
|
||||
if("F#8") soundfile = "sound/[instrumentDir]/F#8.[instrumentExt]"
|
||||
if("Gb8") soundfile = "sound/[instrumentDir]/Gb8.[instrumentExt]"
|
||||
if("Gn8") soundfile = "sound/[instrumentDir]/Gn8.[instrumentExt]"
|
||||
if("G#8") soundfile = "sound/[instrumentDir]/G#8.[instrumentExt]"
|
||||
if("Ab8") soundfile = "sound/[instrumentDir]/Ab8.[instrumentExt]"
|
||||
if("An8") soundfile = "sound/[instrumentDir]/An8.[instrumentExt]"
|
||||
if("A#8") soundfile = "sound/[instrumentDir]/A#8.[instrumentExt]"
|
||||
if("Bb8") soundfile = "sound/[instrumentDir]/Bb8.[instrumentExt]"
|
||||
if("Bn8") soundfile = "sound/[instrumentDir]/Bn8.[instrumentExt]"
|
||||
if("B#8") soundfile = "sound/[instrumentDir]/B#8.[instrumentExt]"
|
||||
if("Cb9") soundfile = "sound/[instrumentDir]/Cb9.[instrumentExt]"
|
||||
if("Cn9") soundfile = "sound/[instrumentDir]/Cn9.[instrumentExt]"
|
||||
else return
|
||||
|
||||
hearers(15, src) << sound(soundfile)
|
||||
hearers(15, get_turf(instrumentObj)) << sound(soundfile)
|
||||
|
||||
/obj/structure/device/piano/proc/playsong()
|
||||
do
|
||||
/datum/song/proc/updateDialog(mob/user as mob)
|
||||
instrumentObj.updateDialog() // assumes it's an object in world, override if otherwise
|
||||
|
||||
/datum/song/proc/shouldStopPlaying()
|
||||
return !instrumentObj.anchored // add special cases to stop in subclasses
|
||||
|
||||
/datum/song/proc/playsong(mob/user as mob)
|
||||
while(repeat >= 0)
|
||||
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)
|
||||
for(var/line in lines)
|
||||
//world << line
|
||||
for(var/beat in text2list(lowertext(line), ","))
|
||||
//world << "beat: [beat]"
|
||||
var/list/notes = text2list(beat, "/")
|
||||
for(var/note in text2list(notes[1], "-"))
|
||||
//world << "note: [note]"
|
||||
if(!playing || !anchored)//If the piano is playing, or is loose
|
||||
if(!playing || shouldStopPlaying())//If the instrument is playing, or special case
|
||||
playing = 0
|
||||
return
|
||||
if(lentext(note) == 0)
|
||||
@@ -241,45 +239,49 @@
|
||||
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]))
|
||||
sleep(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()
|
||||
repeat = 0
|
||||
updateDialog(user)
|
||||
|
||||
/obj/structure/device/piano/attack_hand(var/mob/user as mob)
|
||||
if(!anchored)
|
||||
return
|
||||
/datum/song/proc/interact(mob/user as mob)
|
||||
var/dat = ""
|
||||
|
||||
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>"
|
||||
dat += "<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>"
|
||||
dat += "Repeats left: [repeat].<BR><BR>"
|
||||
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>"
|
||||
dat += "Repeat Song: "
|
||||
dat += 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>"
|
||||
dat += " [repeat] times "
|
||||
dat += 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>"
|
||||
dat += "<BR>"
|
||||
else
|
||||
dat += "<SPAN CLASS='linkOn'>Play</SPAN> <A href='?src=\ref[src];stop=1'>Stop</A><BR>"
|
||||
dat += "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>"
|
||||
dat += "<A href='?src=\ref[src];newsong=1'>Start a New Song</A><BR>"
|
||||
dat += "<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>"
|
||||
dat += "<H3>Editing</H3>"
|
||||
dat += "<B><A href='?src=\ref[src];edit=1'>Hide Editor</A></B>"
|
||||
dat += " <A href='?src=\ref[src];newsong=1'>Start a New Song</A>"
|
||||
dat += " <A href='?src=\ref[src];import=1'>Import a Song</A><BR><BR>"
|
||||
var/calctempo = round(600 / tempo)
|
||||
var/calcstep = tempo - 600 / (calctempo+1)
|
||||
var/calcstep_b = tempo - 600 / (calctempo+10)
|
||||
dat += "Tempo: <A href='?src=\ref[src];tempo=[calcstep_b]'>-</A><A href='?src=\ref[src];tempo=[calcstep]'>-</A> [calctempo] BPM <A href='?src=\ref[src];tempo=-[calcstep]'>+</A><A href='?src=\ref[src];tempo=-[calcstep_b]'>+</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 += "<B><A href='?src=\ref[src];help=1'>Hide Help</A></B><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>
|
||||
@@ -292,121 +294,171 @@
|
||||
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")
|
||||
dat += "<B><A href='?src=\ref[src];help=2'>Show Help</A></B><BR>"
|
||||
|
||||
/obj/structure/device/piano/Topic(href, href_list)
|
||||
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()
|
||||
|
||||
if(!in_range(src, usr) || issilicon(usr) || !anchored || !usr.canmove || usr.restrained())
|
||||
usr << browse(null, "window=piano;size=700x300")
|
||||
onclose(usr, "piano")
|
||||
|
||||
/datum/song/Topic(href, href_list)
|
||||
if(!in_range(instrumentObj, usr) || issilicon(usr) || !isliving(usr) || !usr.canmove || usr.restrained())
|
||||
usr << browse(null, "window=instrument")
|
||||
usr.unset_machine()
|
||||
return
|
||||
|
||||
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)
|
||||
lines = new()
|
||||
tempo = 5 // default 120 BPM
|
||||
name = ""
|
||||
|
||||
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)
|
||||
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(lentext(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)
|
||||
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)
|
||||
|
||||
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(lentext(content) > 50)
|
||||
content = copytext(content, 1, 50)
|
||||
if(num > song.lines.len || num < 1)
|
||||
return
|
||||
song.lines[num] = content
|
||||
//split into lines
|
||||
spawn()
|
||||
lines = text2list(t, "\n")
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = 600 / text2num(copytext(lines[1],6))
|
||||
lines.Cut(1,2)
|
||||
else
|
||||
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["stop"])
|
||||
playing = 0
|
||||
else if(href_list["help"])
|
||||
help = text2num(href_list["help"]) - 1
|
||||
|
||||
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["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["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
|
||||
else if(href_list["tempo"])
|
||||
tempo += text2num(href_list["tempo"])
|
||||
if(tempo < 1)
|
||||
tempo = 1
|
||||
if(tempo > 600)
|
||||
tempo = 600
|
||||
|
||||
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)
|
||||
else if(href_list["play"])
|
||||
playing = 1
|
||||
spawn()
|
||||
playsong(usr)
|
||||
|
||||
//split into lines
|
||||
spawn()
|
||||
var/list/lines = text2list(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)
|
||||
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++
|
||||
song = new()
|
||||
song.lines = lines
|
||||
song.tempo = tempo
|
||||
updateUsrDialog()
|
||||
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)
|
||||
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
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
|
||||
|
||||
|
||||
// subclass for handheld instruments, like violin
|
||||
/datum/song/handheld
|
||||
|
||||
updateDialog(mob/user as mob)
|
||||
instrumentObj.interact(user)
|
||||
|
||||
shouldStopPlaying()
|
||||
return !isliving(instrumentObj.loc)
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/structure/device/piano
|
||||
name = "space minimoog"
|
||||
icon = 'icons/obj/musician.dmi'
|
||||
icon_state = "minimoog"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/datum/song/song
|
||||
|
||||
|
||||
/obj/structure/device/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/device/piano/attack_hand(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
/obj/structure/device/piano/interact(mob/user as mob)
|
||||
if(!user || !anchored)
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
song.interact(user)
|
||||
|
||||
/obj/structure/device/piano/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if (istype(O, /obj/item/weapon/wrench))
|
||||
if (anchored)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//Janitors! Janitors, janitors, janitors! -Sayu
|
||||
|
||||
|
||||
// Conspicuously not-recent versions of suspicious cleanables
|
||||
//Conspicuously not-recent versions of suspicious cleanables
|
||||
|
||||
/obj/effect/decal/cleanable/blood/old
|
||||
name = "dried blood"
|
||||
@@ -30,117 +30,112 @@
|
||||
desc = "Looks like nobody has touched this in a while."
|
||||
|
||||
|
||||
// Making the station dirty, one tile at a time. Called by master controller's setup_objects
|
||||
//Making the station dirty, one tile at a time. Called by master controller's setup_objects
|
||||
|
||||
/turf/simulated/floor/proc/MakeDirty()
|
||||
if(prob(66)) // fastest possible exit 2/3 of the time
|
||||
if(prob(66)) //fastest possible exit 2/3 of the time
|
||||
return
|
||||
|
||||
// These look weird if you make them dirty
|
||||
if(istype(src,/turf/simulated/floor/carpet) || istype(src,/turf/simulated/floor/grass) || istype(src,/turf/simulated/floor/beach) || istype(src,/turf/simulated/floor/holofloor) || istype(src,/turf/simulated/floor/plating/snow) || istype(src,/turf/simulated/floor/plating/ironsand))
|
||||
if(istype(src, /turf/simulated/floor/carpet) || istype(src, /turf/simulated/floor/grass) || istype(src, /turf/simulated/floor/beach) || istype(src, /turf/simulated/floor/holofloor) || istype(src, /turf/simulated/floor/plating/snow) || istype(src, /turf/simulated/floor/plating/ironsand))
|
||||
return
|
||||
|
||||
var/area/A = loc
|
||||
|
||||
// zero dirt
|
||||
if(!istype(A) || istype(A,/area/centcom) || istype(A,/area/holodeck) || istype(A,/area/library) || istype(A,/area/janitor) || istype(A,/area/chapel) || istype(A,/area/mine/explored) || istype(A,/area/mine/unexplored) || istype(A,/area/solar) || istype(A,/area/atmos))
|
||||
//zero dirt
|
||||
if(!istype(A) || istype(A, /area/centcom) || istype(A, /area/holodeck) || istype(A, /area/library) || istype(A, /area/janitor) || istype(A, /area/chapel) || istype(A, /area/mine/explored) || istype(A, /area/mine/unexplored) || istype(A, /area/solar) || istype(A, /area/atmos) || istype(A, /area/medical/virology))
|
||||
return
|
||||
|
||||
// high dirt - 1/3
|
||||
if(istype(A,/area/toxins/test_area) || istype(A,/area/mine/production) || istype(A,/area/mine/living_quarters) || istype(A,/area/mine/north_outpost) || istype(A,/area/mine/west_outpost) || istype(A,/area/wreck) || istype(A,/area/derelict) || istype(A,/area/djstation))
|
||||
new/obj/effect/decal/cleanable/dirt(src) // vanilla, but it works
|
||||
//high dirt - 1/3
|
||||
if(istype(A, /area/toxins/test_area) || istype(A, /area/mine/production) || istype(A, /area/mine/living_quarters) || istype(A, /area/mine/north_outpost) || istype(A, /area/mine/west_outpost) || istype(A, /area/wreck) || istype(A, /area/derelict) || istype(A, /area/djstation))
|
||||
new /obj/effect/decal/cleanable/dirt(src) //vanilla, but it works
|
||||
return
|
||||
|
||||
|
||||
if(prob(80))// mid dirt - 1/15
|
||||
if(prob(80)) //mid dirt - 1/15
|
||||
return
|
||||
|
||||
|
||||
if(istype(A,/area/engine) || istype(A,/area/assembly) || istype(A,/area/maintenance) || istype(A,/area/construction))
|
||||
// Blood, sweat, and oil. Oh, and dirt.
|
||||
if(prob(5))
|
||||
new/obj/effect/decal/cleanable/blood/old(src)
|
||||
if(istype(A, /area/engine) || istype(A,/area/assembly) || istype(A,/area/maintenance) || istype(A,/area/construction))
|
||||
//Blood, sweat, and oil. Oh, and dirt.
|
||||
if(prob(3))
|
||||
new /obj/effect/decal/cleanable/blood/old(src)
|
||||
else
|
||||
if(prob(55))
|
||||
if(prob(5))
|
||||
new/obj/effect/decal/cleanable/robot_debris/old(src)
|
||||
if(prob(35))
|
||||
if(prob(4))
|
||||
new /obj/effect/decal/cleanable/robot_debris/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/oil(src)
|
||||
new /obj/effect/decal/cleanable/oil(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
return
|
||||
|
||||
if(istype(A,/area/crew_quarters/toilet) || istype(A,/area/crew_quarters/locker/locker_toilet) || istype(A,/area/crew_quarters/bar))
|
||||
if(prob(60))
|
||||
if(prob(70))
|
||||
new/obj/effect/decal/cleanable/vomit/old(src)
|
||||
if(istype(A, /area/crew_quarters/toilet) || istype(A, /area/crew_quarters/locker/locker_toilet) || istype(A, /area/crew_quarters/bar))
|
||||
if(prob(40))
|
||||
if(prob(90))
|
||||
new /obj/effect/decal/cleanable/vomit/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/blood/old(src)
|
||||
new /obj/effect/decal/cleanable/blood/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
return
|
||||
|
||||
if(istype(A,/area/quartermaster))
|
||||
if(istype(A, /area/quartermaster))
|
||||
if(prob(75))
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/oil(src)
|
||||
new /obj/effect/decal/cleanable/oil(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
if(prob(75))// low dirt - 1/60
|
||||
if(prob(75)) //low dirt - 1/60
|
||||
return
|
||||
|
||||
|
||||
|
||||
if(istype(A,/area/turret_protected) || istype(A,/area/security)) // chance of incident
|
||||
if(prob(25))
|
||||
if(prob(10))
|
||||
new/obj/effect/decal/cleanable/blood/gibs/old(src)
|
||||
if(istype(A, /area/turret_protected) || istype(A, /area/security)) //chance of incident
|
||||
if(prob(20))
|
||||
if(prob(5))
|
||||
new /obj/effect/decal/cleanable/blood/gibs/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/blood/old(src)
|
||||
new /obj/effect/decal/cleanable/blood/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
return
|
||||
|
||||
|
||||
if(istype(A,/area/crew_quarters/kitchen)) // Kitchen messes
|
||||
if(istype(A, /area/crew_quarters/kitchen)) //Kitchen messes
|
||||
if(prob(60))
|
||||
if(prob(50))
|
||||
new/obj/effect/decal/cleanable/egg_smudge(src)
|
||||
new /obj/effect/decal/cleanable/egg_smudge(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/flour(src)
|
||||
else
|
||||
if(prob(33))
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/blood/old(src)
|
||||
new /obj/effect/decal/cleanable/flour(src)
|
||||
else if(prob(33))
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
return
|
||||
|
||||
if(istype(A,/area/medical)) // Kept clean, but chance of blood
|
||||
if(istype(A, /area/medical)) //Kept clean, but chance of blood
|
||||
if(prob(66))
|
||||
if(prob(10))
|
||||
new/obj/effect/decal/cleanable/blood/gibs/old(src)
|
||||
if(prob(5))
|
||||
new /obj/effect/decal/cleanable/blood/gibs/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/blood/old(src)
|
||||
new /obj/effect/decal/cleanable/blood/old(src)
|
||||
else
|
||||
if(prob(40))
|
||||
if(istype(A,/area/medical/morgue))
|
||||
new/obj/item/weapon/ectoplasm(src)
|
||||
if(prob(30))
|
||||
if(istype(A, /area/medical/morgue))
|
||||
new /obj/item/weapon/ectoplasm(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/vomit/old(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
new /obj/effect/decal/cleanable/vomit/old(src)
|
||||
return
|
||||
if(istype(A,/area/toxins))
|
||||
|
||||
if(istype(A, /area/toxins))
|
||||
if(prob(80))
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/greenglow(src) // this cleans itself up but it might startle you when you see it.
|
||||
new /obj/effect/decal/cleanable/greenglow(src) //this cleans itself up but it might startle you when you see it.
|
||||
return
|
||||
|
||||
//default
|
||||
new/obj/effect/decal/cleanable/dirt(src)
|
||||
return
|
||||
|
||||
new /obj/effect/decal/cleanable/dirt(src)
|
||||
return
|
||||
@@ -104,14 +104,14 @@
|
||||
msg += "[t_He] [t_has] \icon[back] \a [back] on [t_his] back.\n"
|
||||
|
||||
//left hand
|
||||
if(l_hand)
|
||||
if(l_hand && !l_hand.abstract)
|
||||
if(l_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[t_He] [t_is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] blood-stained [l_hand.name] in [t_his] left hand!</span>\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] holding \icon[l_hand] \a [l_hand] in [t_his] left hand.\n"
|
||||
|
||||
//right hand
|
||||
if(r_hand)
|
||||
if(r_hand && !r_hand.abstract)
|
||||
if(r_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[t_He] [t_is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] blood-stained [r_hand.name] in [t_his] right hand!</span>\n"
|
||||
else
|
||||
|
||||
@@ -233,7 +233,7 @@ Please contact me on #coderbus IRC. ~Carn x
|
||||
lying_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY)
|
||||
|
||||
//Underwear
|
||||
if(underwear >0 && underwear < 12)
|
||||
if(underwear >0 && underwear < underwear_m.len)
|
||||
if(!fat && !skeleton)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/last_upgrade = 0
|
||||
|
||||
layer = 21
|
||||
abstract = 1.0
|
||||
abstract = 1
|
||||
item_state = "nothing"
|
||||
w_class = 5.0
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ datum/preferences
|
||||
else
|
||||
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
|
||||
if (underwear < 12)
|
||||
if (underwear < underwear_m.len)
|
||||
preview_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
|
||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
||||
|
||||
@@ -183,6 +183,9 @@
|
||||
M.powernet = PN
|
||||
P = M.get_connections()
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
if(P.len == 0) return
|
||||
|
||||
O = P[1]
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 26 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 74 KiB |
@@ -529,6 +529,7 @@
|
||||
#include "code\game\objects\structures\bedsheet_bin.dm"
|
||||
#include "code\game\objects\structures\displaycase.dm"
|
||||
#include "code\game\objects\structures\door_assembly.dm"
|
||||
#include "code\game\objects\structures\dresser.dm"
|
||||
#include "code\game\objects\structures\electricchair.dm"
|
||||
#include "code\game\objects\structures\extinguisher.dm"
|
||||
#include "code\game\objects\structures\false_walls.dm"
|
||||
|
||||
Reference in New Issue
Block a user