Files
2020-02-16 19:40:21 -08:00

712 lines
23 KiB
Plaintext

//####################################//
//###~GANNETS' RADIO STATION STUFF~###//
//####################################//
/* --Contents:--
changed and new files
areas
objects
audio logs
fake objects
books
computers
records */
/* --Changed/used files + new files list--
code/WorkInProgress/radioship.dm
maps/radiostation2.dmm
icon/obj/radiostation.dmi
icon/obj/64x64.dmi
icon/obj/32x64.dmi
icon/obj/decoration.dmi
strings/radioship/radioship_records.txt */
// areas
/area/radiostation/
name = "Radio Station"
icon_state = "purple"
/area/radiostation/studio
name = "Radio Studio"
icon_state = "green"
/area/radiostation/bridge
name = "Radio Bridge"
icon_state = "yellow"
/area/radiostation/podbay
name = "Radio Podbay"
icon_state = "green"
/area/radiostation/bedroom
name = "Radio Bedroom"
icon_state = "red"
/area/radiostation/engineering
name = "Radio Engine"
icon_state = "blue"
/area/radiostation/hallway
name = "Radio Hallway"
icon_state = "purple"
/area/radiostation/serverroom
name = "Radio Server"
icon_state = "yellow"
sound_environment = 3
workplace = 1
//objects
// Audio log players
/obj/item/device/audio_log/radioship/large
name = "Audio log"
desc = "A bulky recording device."
icon = 'icons/obj/radiostation.dmi'
icon_state = "audiolog_newLarge"
/obj/item/device/audio_log/radioship/small
name = "Audio log"
desc = "A handheld recording device."
icon = 'icons/obj/radiostation.dmi'
icon_state = "audiolog_newSmall"
/obj/item/device/audio_log/radioship/small/radioshow
continuous = 0
audiolog_messages = list("*buzzing static*",
"*screeching and flapping*",
"Alright! You're listening to GNTS - The Bird!",
"This is your host Walt Woodward.",
"Bringing you those deep cuts you love, all night until four.",
"*whooping siren*",
"But uh-oh! Looks like we've got a word from our sponsor coming in.",
"We'll be right back after this!",
"*rising static*")
audiolog_speakers = list("???",
"???",
"Male Voice",
"Male Voice",
"Geoff",
"???",
"Geoff",
"Geoff",
"???*")
/obj/item/device/audio_log/radioship/large/distress
continuous = 0
audiolog_messages = list("GENERAL DISTRESS BEACON",
"COORDINATES:",
"*garbled noises*",
"BROADCAST RANGE: 253au",
"MESSAGE:",
"Hello? Does anyone read me?",
"*coughing*",
"This is an urgent distress call fr- *buzzing static*",
"cargo vessel, I think something's overloading our comm-",
"*high-pitch squealing*",
"can't move. Please, if there's anyone in range, we could really use th-",
"*louder squealing*",
"TIME SENT: MINUS TWO YEARS, SIX MONTHS, ONE WEEK, FOUR DAYS, TWELVE HOURS")
audiolog_speakers = list("Electronic Voice",
"Electronic Voice",
"???",
"Electronic Voice",
"Electronic Voice",
"Female Voice",
"???",
"Female Voice",
"Female Voice",
"???",
"Female Voice",
"???",
"Electronic Voice")
// Mixing desk/voice changer
/obj/submachine/mixing_desk
name = "mixing desk"
desc = "A large and complicated audio mixing desk. Complete with fancy displays, dials, knobs and automated faders."
icon = 'icons/obj/radiostation.dmi'
icon_state = "mixtable-2"
anchored = 1.0
density = 1
var/state = 0
var/state_name = "OFF"
var/voice = 0
var/last_voice = ""
/obj/submachine/mixing_desk/attack_hand(mob/user as mob)
if(..())
return
user.machine = src
var/dat = "<a href='byond://?src=\ref[src];state=1'>[src.state_name]</a>"
if(state)
dat += "<center><h4>Mixing Desk</h4></center>"
if(voice)
dat += "<br><center><h3>Voice synthesized: [src.voice]</h3></center>"
else
dat += "<br><center><h3>Error: no voice</h3></center>"
dat += "<center><b><a href='byond://?src=\ref[src];voice=1'>Voice</a> | "
dat += "<a href='byond://?src=\ref[src];say=1'>Say</a>"
user.Browse(dat, "window=mixing_desk")
onclose(user, "mixing_desk")
return
/obj/submachine/mixing_desk/Topic(href, href_list)
if(..()) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
if (href_list["state"])
if(state)
state = 0
state_name = "OFF"
else
state = 1
state_name = "ON"
else if (href_list["voice"])
voice = html_encode(input("Choose a voice to synthesize:","Voice",last_voice) as null|text)
last_voice = voice
else if (href_list["say"])
if (!voice)
return
var/message = html_encode(input("Choose something to say:","Message","") as null|text)
logTheThing("say", usr, voice, "SAY: [message] (Synthesizing the voice of <b>(%target%)</b>)")
var/original_name = usr.real_name
usr.real_name = copytext(voice, 1, 32)
usr.say(message)
usr.real_name = original_name
src.add_fingerprint(usr)
src.updateUsrDialog()
return
// Record player
/obj/submachine/record_player
name = "record player"
desc = "An old school vinyl record player sat on a set of drawers. Shame you don't have any records."
icon = 'icons/obj/radiostation.dmi'
icon_state = "mixtable-3"
anchored = 1.0
density = 1
var/has_record = 0
var/is_playing = 0
var/obj/item/record/record_inside = null
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/record))
if(has_record)
boutput(user, "The record player already has a record inside!")
else if(!is_playing)
boutput(user, "You insert the record into the record player.")
src.visible_message("<span style=\"color:blue\"><b>[user] inserts the record into the record player.</b></span>")
user.drop_item()
W.set_loc(src)
src.record_inside = W
src.has_record = 1
src.is_playing = 1
var/record_name = html_encode(input("What is the name of this record?","Record Name") as null|text)
user.client.play_music_radio(record_inside.song)
/// PDA message ///
var/datum/radio_frequency/transmit_connection = radio_controller.return_frequency("1149")
var/datum/signal/pdaSignal = get_free_signal()
if (!record_name)
record_name = pick("rad tunes","hip jams","cool music","neat sounds","magnificent melodies","fantastic farts")
pdaSignal.data = list("command"="text_message", "sender_name"="RADIO-STATION", "sender"="00000000", "message"="Now playing: [record_name].")
pdaSignal.transmission_method = TRANSMISSION_RADIO
if(transmit_connection != null)
transmit_connection.post_signal(src, pdaSignal)
//////
#ifdef UNDERWATER_MAP
sleep(5000) // mbc : underwater map has the radio on-station instead of in space. so it gets played a lot more often + is breaking my immersion
#else
sleep(3000)
#endif
is_playing = 0
attack_hand(mob/user as mob)
if(has_record)
if(!is_playing)
boutput(user, "You remove the record from the record player. It looks worse for the wear.")
src.visible_message("<span style=\"color:blue\"><b>[user] removes the record from the record player.</b></span>")
user.put_in_hand_or_drop(src.record_inside)
src.record_inside = null
src.has_record = 0
else
boutput(user, "You can feel heat emanating from the record player. You should probably wait a while before touching it. It's kinda old and you don't want to break it.")
// Records
/obj/item/record
name = "record"
desc = "A fairly large record. You imagine there are probably some rad songs on this!"
icon = 'icons/obj/radiostation.dmi'
icon_state = "record"
var/song = "sound/radio_station/everyone_is_so_alive.ogg"
var/add_overlay = 1
w_class = 3.0
throwforce = 3.0
throw_speed = 3
throw_range = 8
force = 2
New()
..()
if (add_overlay)
var/number = rand(1,10)
src.overlays += "record_[number]"
distant
song = "sound/radio_station/distant_star.ogg"
too
song = "sound/radio_station/it_feels_good_to_be_alive_too.ogg"
atmosphere
song = "sound/radio_station/atmosphere.ogg"
party
song = "sound/radio_station/after_party.ogg"
high
song = "sound/radio_station/high_technologic_beat.ogg"
anonymous
song = "sound/radio_station/anonymous.ogg"
spacebux // Many thanks to Noah Buttes!!
add_overlay = 0
icon_state = "record_red"
New()
..()
var/pick_song = rand(1,3)
switch(pick_song)
if(1)
src.song = "sound/radio_station/buttris.ogg"
if(2)
src.song = "sound/radio_station/fart_elise.ogg"
if(3)
src.song = "sound/radio_station/we_are_number_two.ogg" // poo, more like, hah.
poo
desc = "A fairly large record. It has a scratch on one side."
add_overlay = 0
icon_state = "record_blue"
song = "sound/radio_station/poo.ogg"
attackby(obj/item/P as obj, mob/user as mob)
if (istype(P, /obj/item/magnifying_glass))
boutput(user, "<span style=\"color:blue\">You examine the record with the magnifying glass.</span>")
sleep(20)
boutput(user, "The scratch on the record, upon close examination, is actually tiny lettering. It says, <i>Fuck Discount Dan's. I hope more of your factories go under and you all drown in your toxic sewage.</i>")
honey
desc = "A fairly large record. It's all sticky and coated in honey!"
add_overlay = 0
icon_state = "record_honey"
song = "sound/radio_station/bumblebee.ogg"
christmas
desc = "A truly nefarious and unholy record that has been banned in most of space."
add_overlay = 0
icon_state = "record_red"
song = "sound/radio_station/christmassong.ogg"
/obj/item/record/clown_collection
add_overlay = 0
icon_state = "record_yellow"
// By Arborinus. Honk!
honk
song = "sound/radio_station/warriors_honk.ogg"
color = "#DED347"
uguu
song = "sound/radio_station/uguu.ogg"
color = "#DEC647"
eggshell
song = "sound/radio_station/eggshell.ogg"
color = "#DEB947"
disco
song = "sound/radio_station/disco_poo.ogg"
color = "#DEAC47"
poo
song = "sound/radio_station/core_of_poo.ogg"
color = "#DE9F47"
// Record sets
/obj/item/storage/box/record
name = "record sleeve"
icon = 'icons/obj/radiostation.dmi'
icon_state = "sleeve_1"
desc = "A sturdy record sleeve, designed to hold multiple records."
max_wclass = 3
can_hold = list(/obj/item/record)
clown_collection
icon_state = "sleeve_2"
spawn_contents = list(/obj/item/record/clown_collection/honk,
/obj/item/record/clown_collection/uguu,
/obj/item/record/clown_collection/eggshell,
/obj/item/record/clown_collection/disco,
/obj/item/record/clown_collection/poo)
/obj/item/record/attack(mob/M as mob, mob/user as mob) // copied plate code
if (user.a_intent == INTENT_HARM)
if (M == user)
boutput(user, "<span style=\"color:red\"><B>You smash the record over your own head!</b></span>")
else
M.visible_message("<span style=\"color:red\"><B>[user] smashes [src] over [M]'s head!</B></span>")
logTheThing("combat", user, M, "smashes [src] over %target%'s head! ")
random_brute_damage(M, force)
M.changeStatus("weakened", 2 SECONDS)
M.updatehealth()
playsound(src, "shatter", 70, 1)
var/obj/O = unpool (/obj/item/raw_material/shard/glass)
O.set_loc(get_turf(M))
if (src.material)
O.setMaterial(copyMaterial(src.material))
qdel(src)
else
M.visible_message("<span style=\"color:red\">[user] taps [M] over the head with [src].</span>")
logTheThing("combat", user, M, "taps %target% over the head with [src].")
// Tape deck
/obj/submachine/tape_deck
name = "tape deck"
desc = "A large standalone reel-to-reel tape deck."
icon = 'icons/obj/radiostation.dmi'
icon_state = "tapedeck"
anchored = 1.0
density = 1
var/has_tape = 0
var/is_playing = 0
var/obj/item/radio_tape/tape_inside = null
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/radio_tape))
if(has_tape)
boutput(user, "The tape deck already has a tape inserted!")
else if(!is_playing)
boutput(user, "You insert the compact tape into the tape deck.")
src.visible_message("<span style=\"color:blue\"><b>[user] inserts the compact tape into the tape deck.</b></span>")
user.drop_item()
W.set_loc(src)
src.tape_inside = W
src.has_tape = 1
src.is_playing = 1
user.client.play_music_radio(tape_inside.audio)
/// PDA message ///
var/datum/radio_frequency/transmit_connection = radio_controller.return_frequency("1149")
var/datum/signal/pdaSignal = get_free_signal()
pdaSignal.data = list("command"="text_message", "sender_name"="RADIO-STATION", "sender"="00000000", "message"="Now playing: [src.tape_inside.audio_type] for [src.tape_inside.name_of_thing].")
pdaSignal.transmission_method = TRANSMISSION_RADIO
if(transmit_connection != null)
transmit_connection.post_signal(src, pdaSignal)
//////
sleep(6000)
is_playing = 0
attack_hand(mob/user as mob)
if(has_tape)
if(!is_playing)
boutput(user, "You remove the tape from the tape deck.")
src.visible_message("<span style=\"color:blue\"><b>[user] removes the tape from the tape deck.</b></span>")
user.put_in_hand_or_drop(src.tape_inside)
src.tape_inside = null
src.has_tape = 0
else
boutput(user, "It looks like the tape is still being rewinded. You should wait a bit more before taking it out.")
// Tapes
/obj/item/radio_tape
name = "compact tape"
desc = "A small audio tape. Though, it looks too big to fit in an audio log."
icon = 'icons/obj/radiostation.dmi'
icon_state = "tape"
w_class = 2.0
var/audio = null
var/audio_type = "Test"
var/name_of_thing = "Beep boop"
/obj/item/radio_tape/advertisement
audio_type = "Advertisement"
grones
name = "compact tape - 'Grones Soda'"
audio = "sound/radio_station/grones.ogg"
name_of_thing = "Grones Soda"
dans_tickets
name = "compact tape - 'Discount Dan's GTMs'"
audio = "sound/radio_station/dans_tickets.ogg"
name_of_thing = "Discount Dan's GTMs"
movie
name = "compact tape - 'Movie Ad'"
audio = "sound/radio_station/bill_movie.ogg"
name_of_thing = "some shitty movie"
/obj/item/radio_tape/audio_book
audio_type = "Audio book"
heisenbee
name = "compact tape - 'The Trial of Heisenbee'"
audio = "sound/radio_station/trial_of_heisenbee.ogg"
name_of_thing = "The Trial of Heisenbee"
/obj/item/radio_tape/owl
audio_type = "???"
name = "compact tape - 'Owls'"
audio = "sound/radio_station/owl.ogg"
name_of_thing = "Owls"
// Drawer
/obj/table/wood/auto/desk/radio
var/list/stuff = list()
New()
..()
for (var/thing in src.stuff)
new thing(src.desk_drawer)
records
stuff = list(/obj/item/record,
/obj/item/record/distant,
/obj/item/record/too,
/obj/item/record/atmosphere,
/obj/item/record/party,
/obj/item/record/high,
/obj/item/record/anonymous)
tapes
stuff = list(/obj/item/radio_tape/advertisement/grones,
/obj/item/radio_tape/advertisement/dans_tickets,
/obj/item/radio_tape/audio_book/heisenbee)
//Fake objects
/obj/decal/fakeobjects/cpucontroller
name = "central processing unit"
desc = "The computing core of the mainframe."
icon = 'icons/obj/64x64.dmi'
icon_state = "gannets_machine1"
bound_width = 64
bound_height = 64
anchored = 1
density = 1
/obj/decal/fakeobjects/vacuumtape
name = "vacuum column tape drive"
desc = "A large 9 track magnetic tape storage unit."
icon = 'icons/obj/32x64.dmi'
icon_state = "gannets_machine2"
bound_width = 32
bound_height = 64
anchored = 1
density = 1
/obj/decal/fakeobjects/operatorconsole
name = "operator's console"
desc = "The computer operating console, covered in fancy toggle swtiches and register value lamps."
icon = 'icons/obj/32x64.dmi'
icon_state = "gannets_machine1"
bound_width = 32
bound_height = 64
anchored = 1
density = 1
/obj/decal/fakeobjects/broadcastcomputer
name = "broadcast server"
icon = 'icons/obj/decoration.dmi'
icon_state = "gannets_machine11"
anchored = 1
density = 1
/obj/decal/fakeobjects/tapedeck
name = "reel to reel tape deck"
icon = 'icons/obj/decoration.dmi'
icon_state = "gannets_machine20"
anchored = 1
density = 1
//Books + documents
//this one isn't on the map, but it might be good to have.
/obj/item/paper/book/icarus_ovid
name = "Mythological Stories of the Ancient Greeks"
desc = "An old dusty book of mythology, well worn and dog-eared."
info = {"<p>In tedious Exile now too long detain'd,<br>
Daedalus languish'd for his native Land:<br>
The Sea foreclos'd his Flight; yet thus he said;<br>
Tho' Earth and Water in Subjection laid,<br>
O cruel Minos, thy Dominion be,<br>
We'll go thro' Air; for sure the Air is free.<br>
Then to new Arts his cunning Thought applies,<br>
And to improve the Work of Nature tries.<br>
A Row of Quills in gradual Order plac'd,<br>
Rise by Degrees in Length from first to last;<br>
As on a Cliff th' ascending Thicket grows,<br>
Or, different Reeds the rural Pipe compose.<br>
Along the Middle runs a Twine of Flax,<br>
The Bottom Stems are joyn'd by pliant Wax.<br>
Thus, well compact, a hollow Bending brings<br>
The fine Composure into real Wings.</p>
<p>His Boy, young Icarus, that near him stood,<br>
Unthinking of his Fate, with Smiles pursu'd<br>
The floating Feathers, which the moving Air<br>
Bore loosely from the Ground, and wafted here and there.<br>
Or with the Wax impertinently play'd,<br>
And with his childish Tricks the great Design delay'd.<br>
The final Master-stroke at last impos'd,<br>
And now, the neat Machine compleatly clos'd;<br>
Fitting his Pinions, on a Flight he tries,<br>
And hung self-ballanc'd in the beaten Skies.<br>
Then thus instructs his Child; My Boy, take Care<br>
To wing your Course along the middle Air;<br>
If low, the Surges wet your flagging Plumes,<br>
If high, the Sun the melting Wax consumes:<br>
Steer between both: Nor to the Northern Skies,<br>
Nor South Orion turn your giddy Eyes;<br>
But follow me: Let me before you lay<br>
Rules for the Flight, and mark the pathless Way.<br>
Then teaching, with a fond Concern, his Son,<br>
He took the untry'd Wings, and fix'd 'em on;<br>
But fix'd with trembling Hands; and, as he speaks,<br>
The Tears roul gently down his aged Cheeks.<br>
Then kiss'd, and in his Arms embrac'd him fast,<br>
But knew not this Embrace must be the last.<br>
And mounting upward, as he wings his Flight,<br>
Back on his Charge he turns his aking Sight;<br>
As Parent Birds, when first their callow Care<br>
Leave the high Nest to tempt the liquid Air.<br>
Then chears him on, and oft, with fatal Art,<br>
Reminds the Stripling to perform his Part.</p>
<p>These, as the Angler at the silent Brook,<br>
Or Mountain-Shepherd leaning on his Crook,<br>
Or gaping Plowman from the Vale descries,<br>
They stare, and view 'em with religious Eyes,<br>
And strait conclude 'em Gods; since none, but they,<br>
Thro' their own azure Skies cou'd find a Way.<br>
Now Delos, Paros on the Left are seen,<br>
And Samos, favour'd by Jove's haughty Queen;<br>
Upon the Right, the Isle Lebynthos nam'd,<br>
And fair Calymne for its Honey fam'd.<br>
When now the Boy, whose childish Thoughts aspire<br>
To loftier Aims, and make him ramble higher,<br>
Grown wild and wanton, more embolden'd flies<br>
Far from his Guide, and soars among the Skies.<br>
The soft'ning Wax, that felt a nearer Sun,<br>
Dissolv'd apace, and soon began to run.<br>
The Youth in vain his melting Pinions shakes,<br>
His Feathers gone, no longer Air he takes:<br>
Oh! Father, Father, as he strove to cry,<br>
Down to the Sea he tumbled from on high,<br>
And found his Fate; yet still subsists by Fame,<br>
Among those Waters that retain his Name.<br>
The Father, now no more a Father, cries,<br>
Ho Icarus! where are you? as he flies;<br>
Where shall I seek my Boy? he cries again,<br>
And saw his Feathers scatter'd on the Main.<br>
Then curs'd his Art; and fun'ral Rites confer'd,<br>
Naming the Country from the Youth interr'd.<br>
A Partridge, from a neighb'ring Stump, beheld<br>
The Sire his monumental Marble build;<br>
Who, with peculiar Call, and flutt'ring Wing,<br>
Chirpt joyful, and malicious seem'd to sing:</p>
<p>The only Bird of all its Kind, and late<br>
Transform'd in Pity to a feather'd State:<br>
From whence, O Daedalus, thy Guilt we date.<br>
His Sister's Son, when now twelve Years were past,<br>
Was, with his Uncle, as a Scholar plac'd;<br>
The unsuspecting Mother saw his Parts,<br>
And Genius fitted for the finest Arts.<br>
This soon appear'd; for when the spiny Bone<br>
In Fishes Backs was by the Stripling known,<br>
A rare Invention thence he learnt to draw,<br>
Fil'd Teeth in Iron, and made the grating Saw.<br>
He was the first, that from a Knob of Brass<br>
Made two strait Arms with widening Stretch to pass;<br>
That, while one stood upon the Center's Place,<br>
The other round it drew a circling Space.<br>
Daedalus envy'd this, and from the Top<br>
Of fair Minerva's Temple let him drop;<br>
Feigning that, as he lean'd upon the Tow'r,<br>
Careless he stoop'd too much, and tumbled o'er.<br>
The Goddess, who th' Ingenious still befriends,<br>
On this Occasion her Assistance lends;<br>
His Arms with Feathers, as he fell, she veils,<br>
And in the Air a new-made Bird he sails.<br>
The Quickness of his Genius, once so fleet,<br>
Still in his Wings remains, and in his Feet:<br>
Still, tho' transform'd, his ancient Name he keeps,<br>
And with low Flight the new-shorn Stubble sweeps.<br>
Declines the lofty Trees, and thinks it best<br>
To brood in Hedge-rows o'er it's humble Nest;<br>
And, in Remembrance of the former Ill,<br>
Avoids the Heights and Precipices still.</p>
<p>At length, fatigu'd with long laborious Flights,<br>
On fair Sicilia's Plains the Artist lights;<br>
Where Cocalus the King, that gave him Aid,<br>
Was, for his Kindness, with Esteem repaid.<br>
Athens no more her doleful Tribute sent,<br>
That Hardship gallant Theseus did prevent;<br>
Their Temples hung with Garlands, they adore<br>
Each friendly God, but most Minerva's Pow'r:<br>
To her, to Jove, to All, their Altars smoak,<br>
They each with Victims and Perfumes invoke.<br>
Now talking Fame, thro' every Graecian Town,<br>
Had spread, immortal Theseus, thy Renown.<br>
From him, the neighb'ring Nations in Distress,<br>
In suppliant Terms implore a kind Redress.</p>
"}
//Computer, disk and files.
/obj/item/disk/data/fixed_disk/radioship
New()
..()
var/datum/computer/folder/newfolder = new /datum/computer/folder( )
newfolder.name = "logs"
src.root.add_file( newfolder )
newfolder.add_file( new /datum/computer/file/record/c3help(src))
newfolder = new /datum/computer/folder
newfolder.name = "bin"
src.root.add_file( newfolder )
newfolder.add_file( new /datum/computer/file/terminal_program/writewizard(src))
newfolder = new /datum/computer/folder
newfolder.name = "doc"
src.root.add_file( newfolder )
newfolder.add_file( new /datum/computer/file/record/radioship/testlog (src))
newfolder.add_file( new /datum/computer/file/record/radioship/testlog2 (src))
/obj/machinery/computer3/generic/personal/radioship
setup_drive_type = /obj/item/disk/data/fixed_disk/radioship
/datum/computer/file/record/radioship
testlog
name = "nav_logs"
New()
fields = strings("radioship/radioship_records.txt","log_1")
testlog2
name = "inter-ship_communications"
New()
fields = strings("radioship/radioship_records.txt","log_2")