//####################################//
//###~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 = "[src.state_name]"
if(state)
dat += "
Voice | "
dat += "Say"
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 (%target%))")
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("[user] inserts the record into the record player.")
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("[user] removes the record from the record player.")
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, "You examine the record with the magnifying glass.")
sleep(20)
boutput(user, "The scratch on the record, upon close examination, is actually tiny lettering. It says, Fuck Discount Dan's. I hope more of your factories go under and you all drown in your toxic sewage.")
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, "You smash the record over your own head!")
else
M.visible_message("[user] smashes [src] over [M]'s head!")
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("[user] taps [M] over the head with [src].")
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("[user] inserts the compact tape into the tape deck.")
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("[user] removes the tape from the tape deck.")
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 = {"In tedious Exile now too long detain'd,
Daedalus languish'd for his native Land:
The Sea foreclos'd his Flight; yet thus he said;
Tho' Earth and Water in Subjection laid,
O cruel Minos, thy Dominion be,
We'll go thro' Air; for sure the Air is free.
Then to new Arts his cunning Thought applies,
And to improve the Work of Nature tries.
A Row of Quills in gradual Order plac'd,
Rise by Degrees in Length from first to last;
As on a Cliff th' ascending Thicket grows,
Or, different Reeds the rural Pipe compose.
Along the Middle runs a Twine of Flax,
The Bottom Stems are joyn'd by pliant Wax.
Thus, well compact, a hollow Bending brings
The fine Composure into real Wings.
His Boy, young Icarus, that near him stood,
Unthinking of his Fate, with Smiles pursu'd
The floating Feathers, which the moving Air
Bore loosely from the Ground, and wafted here and there.
Or with the Wax impertinently play'd,
And with his childish Tricks the great Design delay'd.
The final Master-stroke at last impos'd,
And now, the neat Machine compleatly clos'd;
Fitting his Pinions, on a Flight he tries,
And hung self-ballanc'd in the beaten Skies.
Then thus instructs his Child; My Boy, take Care
To wing your Course along the middle Air;
If low, the Surges wet your flagging Plumes,
If high, the Sun the melting Wax consumes:
Steer between both: Nor to the Northern Skies,
Nor South Orion turn your giddy Eyes;
But follow me: Let me before you lay
Rules for the Flight, and mark the pathless Way.
Then teaching, with a fond Concern, his Son,
He took the untry'd Wings, and fix'd 'em on;
But fix'd with trembling Hands; and, as he speaks,
The Tears roul gently down his aged Cheeks.
Then kiss'd, and in his Arms embrac'd him fast,
But knew not this Embrace must be the last.
And mounting upward, as he wings his Flight,
Back on his Charge he turns his aking Sight;
As Parent Birds, when first their callow Care
Leave the high Nest to tempt the liquid Air.
Then chears him on, and oft, with fatal Art,
Reminds the Stripling to perform his Part.
These, as the Angler at the silent Brook,
Or Mountain-Shepherd leaning on his Crook,
Or gaping Plowman from the Vale descries,
They stare, and view 'em with religious Eyes,
And strait conclude 'em Gods; since none, but they,
Thro' their own azure Skies cou'd find a Way.
Now Delos, Paros on the Left are seen,
And Samos, favour'd by Jove's haughty Queen;
Upon the Right, the Isle Lebynthos nam'd,
And fair Calymne for its Honey fam'd.
When now the Boy, whose childish Thoughts aspire
To loftier Aims, and make him ramble higher,
Grown wild and wanton, more embolden'd flies
Far from his Guide, and soars among the Skies.
The soft'ning Wax, that felt a nearer Sun,
Dissolv'd apace, and soon began to run.
The Youth in vain his melting Pinions shakes,
His Feathers gone, no longer Air he takes:
Oh! Father, Father, as he strove to cry,
Down to the Sea he tumbled from on high,
And found his Fate; yet still subsists by Fame,
Among those Waters that retain his Name.
The Father, now no more a Father, cries,
Ho Icarus! where are you? as he flies;
Where shall I seek my Boy? he cries again,
And saw his Feathers scatter'd on the Main.
Then curs'd his Art; and fun'ral Rites confer'd,
Naming the Country from the Youth interr'd.
A Partridge, from a neighb'ring Stump, beheld
The Sire his monumental Marble build;
Who, with peculiar Call, and flutt'ring Wing,
Chirpt joyful, and malicious seem'd to sing:
The only Bird of all its Kind, and late
Transform'd in Pity to a feather'd State:
From whence, O Daedalus, thy Guilt we date.
His Sister's Son, when now twelve Years were past,
Was, with his Uncle, as a Scholar plac'd;
The unsuspecting Mother saw his Parts,
And Genius fitted for the finest Arts.
This soon appear'd; for when the spiny Bone
In Fishes Backs was by the Stripling known,
A rare Invention thence he learnt to draw,
Fil'd Teeth in Iron, and made the grating Saw.
He was the first, that from a Knob of Brass
Made two strait Arms with widening Stretch to pass;
That, while one stood upon the Center's Place,
The other round it drew a circling Space.
Daedalus envy'd this, and from the Top
Of fair Minerva's Temple let him drop;
Feigning that, as he lean'd upon the Tow'r,
Careless he stoop'd too much, and tumbled o'er.
The Goddess, who th' Ingenious still befriends,
On this Occasion her Assistance lends;
His Arms with Feathers, as he fell, she veils,
And in the Air a new-made Bird he sails.
The Quickness of his Genius, once so fleet,
Still in his Wings remains, and in his Feet:
Still, tho' transform'd, his ancient Name he keeps,
And with low Flight the new-shorn Stubble sweeps.
Declines the lofty Trees, and thinks it best
To brood in Hedge-rows o'er it's humble Nest;
And, in Remembrance of the former Ill,
Avoids the Heights and Precipices still.
At length, fatigu'd with long laborious Flights,
On fair Sicilia's Plains the Artist lights;
Where Cocalus the King, that gave him Aid,
Was, for his Kindness, with Esteem repaid.
Athens no more her doleful Tribute sent,
That Hardship gallant Theseus did prevent;
Their Temples hung with Garlands, they adore
Each friendly God, but most Minerva's Pow'r:
To her, to Jove, to All, their Altars smoak,
They each with Victims and Perfumes invoke.
Now talking Fame, thro' every Graecian Town,
Had spread, immortal Theseus, thy Renown.
From him, the neighb'ring Nations in Distress,
In suppliant Terms implore a kind Redress.
"}
//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")