mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Added new AI/announcer sound files for when events happen, when game starts or ends, when shuttle is called/recalled/docks and when a new AI is chosen. Removed traitor.ogg and main.ogg because they weren't being used and were quite large files. Fixed flash effect and crit-state effect. But now shroom effect is a bit broken. (to-do) Added a sound effect when a robot comes to life. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@87 316c924e-a436-60f5-8080-3fe189b3f50e
449 lines
16 KiB
Plaintext
449 lines
16 KiB
Plaintext
// The communications computer
|
|
|
|
/obj/machinery/computer/communications/process()
|
|
..()
|
|
if(state != STATE_STATUSDISPLAY)
|
|
src.updateDialog()
|
|
|
|
/obj/machinery/computer/communications/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
usr.machine = src
|
|
|
|
if(!href_list["operation"])
|
|
return
|
|
switch(href_list["operation"])
|
|
// main interface
|
|
if("main")
|
|
src.state = STATE_DEFAULT
|
|
if("login")
|
|
var/mob/M = usr
|
|
var/obj/item/weapon/card/id/I = M.equipped()
|
|
if (I && istype(I))
|
|
if(src.check_access(I))
|
|
authenticated = 1
|
|
if("logout")
|
|
authenticated = 0
|
|
if("nolockdown")
|
|
disablelockdown(usr)
|
|
post_status("alert", "default")
|
|
if("call-prison")
|
|
call_prison_shuttle(usr)
|
|
if("callshuttle")
|
|
src.state = STATE_DEFAULT
|
|
if(src.authenticated)
|
|
src.state = STATE_CALLSHUTTLE
|
|
if("callshuttle2")
|
|
if(src.authenticated)
|
|
call_shuttle_proc(usr)
|
|
|
|
if(emergency_shuttle.online)
|
|
post_status("shuttle")
|
|
|
|
src.state = STATE_DEFAULT
|
|
if("cancelshuttle")
|
|
src.state = STATE_DEFAULT
|
|
if(src.authenticated)
|
|
src.state = STATE_CANCELSHUTTLE
|
|
if("cancelshuttle2")
|
|
if(src.authenticated)
|
|
cancel_call_proc(usr)
|
|
src.state = STATE_DEFAULT
|
|
if("messagelist")
|
|
src.currmsg = 0
|
|
src.state = STATE_MESSAGELIST
|
|
if("viewmessage")
|
|
src.state = STATE_VIEWMESSAGE
|
|
if (!src.currmsg)
|
|
if(href_list["message-num"])
|
|
src.currmsg = text2num(href_list["message-num"])
|
|
else
|
|
src.state = STATE_MESSAGELIST
|
|
if("delmessage")
|
|
src.state = (src.currmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST
|
|
if("delmessage2")
|
|
if(src.authenticated)
|
|
if(src.currmsg)
|
|
var/title = src.messagetitle[src.currmsg]
|
|
var/text = src.messagetext[src.currmsg]
|
|
src.messagetitle.Remove(title)
|
|
src.messagetext.Remove(text)
|
|
if(src.currmsg == src.aicurrmsg)
|
|
src.aicurrmsg = 0
|
|
src.currmsg = 0
|
|
src.state = STATE_MESSAGELIST
|
|
else
|
|
src.state = STATE_VIEWMESSAGE
|
|
if("status")
|
|
src.state = STATE_STATUSDISPLAY
|
|
|
|
// Status display stuff
|
|
if("setstat")
|
|
switch(href_list["statdisp"])
|
|
if("message")
|
|
post_status("message", stat_msg1, stat_msg2)
|
|
if("alert")
|
|
post_status("alert", href_list["alert"])
|
|
else
|
|
post_status(href_list["statdisp"])
|
|
|
|
if("setmsg1")
|
|
stat_msg1 = input("Line 1", "Enter Message Text", stat_msg1) as text|null
|
|
src.updateDialog()
|
|
if("setmsg2")
|
|
stat_msg2 = input("Line 2", "Enter Message Text", stat_msg2) as text|null
|
|
src.updateDialog()
|
|
|
|
// AI interface
|
|
if("ai-main")
|
|
src.aicurrmsg = 0
|
|
src.aistate = STATE_DEFAULT
|
|
if("ai-callshuttle")
|
|
src.aistate = STATE_CALLSHUTTLE
|
|
if("ai-callshuttle2")
|
|
call_shuttle_proc(usr)
|
|
src.aistate = STATE_DEFAULT
|
|
if("ai-messagelist")
|
|
src.aicurrmsg = 0
|
|
src.aistate = STATE_MESSAGELIST
|
|
if("ai-viewmessage")
|
|
src.aistate = STATE_VIEWMESSAGE
|
|
if (!src.aicurrmsg)
|
|
if(href_list["message-num"])
|
|
src.aicurrmsg = text2num(href_list["message-num"])
|
|
else
|
|
src.aistate = STATE_MESSAGELIST
|
|
if("ai-delmessage")
|
|
src.aistate = (src.aicurrmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST
|
|
if("ai-delmessage2")
|
|
if(src.aicurrmsg)
|
|
var/title = src.messagetitle[src.aicurrmsg]
|
|
var/text = src.messagetext[src.aicurrmsg]
|
|
src.messagetitle.Remove(title)
|
|
src.messagetext.Remove(text)
|
|
if(src.currmsg == src.aicurrmsg)
|
|
src.currmsg = 0
|
|
src.aicurrmsg = 0
|
|
src.aistate = STATE_MESSAGELIST
|
|
if("ai-status")
|
|
src.aistate = STATE_STATUSDISPLAY
|
|
src.updateUsrDialog()
|
|
|
|
/proc/disablelockdown(var/mob/usr)
|
|
world << "\red Lockdown cancelled by [usr.name]!"
|
|
|
|
for(var/obj/machinery/firealarm/FA in world) //deactivate firealarms
|
|
spawn( 0 )
|
|
if(FA.lockdownbyai == 1)
|
|
FA.lockdownbyai = 0
|
|
FA.reset()
|
|
for(var/obj/machinery/door/airlock/AL in world) //open airlocks
|
|
spawn ( 0 )
|
|
if(AL.canAIControl() && AL.lockdownbyai == 1)
|
|
AL.open()
|
|
AL.lockdownbyai = 0
|
|
|
|
/obj/machinery/computer/communications/attackby(I as obj, user as mob)
|
|
if(istype(I, /obj/item/weapon/screwdriver))
|
|
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
|
if(do_after(user, 20))
|
|
if (src.stat & BROKEN)
|
|
user << "\blue The broken glass falls out."
|
|
var/obj/computerframe/A = new /obj/computerframe( src.loc )
|
|
new /obj/item/weapon/shard( src.loc )
|
|
var/obj/item/weapon/circuitboard/communications/M = new /obj/item/weapon/circuitboard/communications( A )
|
|
for (var/obj/C in src)
|
|
C.loc = src.loc
|
|
A.circuit = M
|
|
A.state = 3
|
|
A.icon_state = "3"
|
|
A.anchored = 1
|
|
del(src)
|
|
else
|
|
user << "\blue You disconnect the monitor."
|
|
var/obj/computerframe/A = new /obj/computerframe( src.loc )
|
|
var/obj/item/weapon/circuitboard/communications/M = new /obj/item/weapon/circuitboard/communications( A )
|
|
for (var/obj/C in src)
|
|
C.loc = src.loc
|
|
A.circuit = M
|
|
A.state = 4
|
|
A.icon_state = "4"
|
|
A.anchored = 1
|
|
del(src)
|
|
else
|
|
src.attack_hand(user)
|
|
return
|
|
|
|
/obj/machinery/computer/communications/attack_ai(var/mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/communications/attack_paw(var/mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/communications/attack_hand(var/mob/user as mob)
|
|
if(..())
|
|
return
|
|
|
|
user.machine = src
|
|
var/dat = "<head><title>Communications Console</title></head><body>"
|
|
if (emergency_shuttle.online && emergency_shuttle.location==0)
|
|
var/timeleft = emergency_shuttle.timeleft()
|
|
dat += "<B>Emergency shuttle</B>\n<BR>\nETA: [timeleft / 60 % 60]:[add_zero(num2text(timeleft % 60), 2)]<BR>"
|
|
|
|
if (istype(user, /mob/living/silicon))
|
|
var/dat2 = src.interact_ai(user) // give the AI a different interact proc to limit its access
|
|
if(dat2)
|
|
dat += dat2
|
|
user << browse(dat, "window=communications;size=400x500")
|
|
onclose(user, "communications")
|
|
return
|
|
|
|
switch(src.state)
|
|
if(STATE_DEFAULT)
|
|
if (src.authenticated)
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=logout'>Log Out</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=call-prison'>Send Prison Shutle</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=nolockdown'>Disable Lockdown</A> \]"
|
|
if(emergency_shuttle.location==0)
|
|
if (emergency_shuttle.online)
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=cancelshuttle'>Cancel Shuttle Call</A> \]"
|
|
else
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=callshuttle'>Call Emergency Shuttle</A> \]"
|
|
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=status'>Set Status Display</A> \]"
|
|
else
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=login'>Log In</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=messagelist'>Message List</A> \]"
|
|
if(STATE_CALLSHUTTLE)
|
|
dat += "Are you sure you want to call the shuttle? \[ <A HREF='?src=\ref[src];operation=callshuttle2'>OK</A> | <A HREF='?src=\ref[src];operation=main'>Cancel</A> \]"
|
|
if(STATE_CANCELSHUTTLE)
|
|
dat += "Are you sure you want to cancel the shuttle? \[ <A HREF='?src=\ref[src];operation=cancelshuttle2'>OK</A> | <A HREF='?src=\ref[src];operation=main'>Cancel</A> \]"
|
|
if(STATE_MESSAGELIST)
|
|
dat += "Messages:"
|
|
for(var/i = 1; i<=src.messagetitle.len; i++)
|
|
dat += "<BR><A HREF='?src=\ref[src];operation=viewmessage;message-num=[i]'>[src.messagetitle[i]]</A>"
|
|
if(STATE_VIEWMESSAGE)
|
|
if (src.currmsg)
|
|
dat += "<B>[src.messagetitle[src.currmsg]]</B><BR><BR>[src.messagetext[src.currmsg]]"
|
|
if (src.authenticated)
|
|
dat += "<BR><BR>\[ <A HREF='?src=\ref[src];operation=delmessage'>Delete \]"
|
|
else
|
|
src.state = STATE_MESSAGELIST
|
|
src.attack_hand(user)
|
|
return
|
|
if(STATE_DELMESSAGE)
|
|
if (src.currmsg)
|
|
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=\ref[src];operation=delmessage2'>OK</A> | <A HREF='?src=\ref[src];operation=viewmessage'>Cancel</A> \]"
|
|
else
|
|
src.state = STATE_MESSAGELIST
|
|
src.attack_hand(user)
|
|
return
|
|
if(STATE_STATUSDISPLAY)
|
|
dat += "Set Status Displays<BR>"
|
|
dat += "\[ <A HREF='?src=\ref[src];operation=setstat;statdisp=blank'>Clear</A> \]<BR>"
|
|
dat += "\[ <A HREF='?src=\ref[src];operation=setstat;statdisp=shuttle'>Shuttle ETA</A> \]<BR>"
|
|
dat += "\[ <A HREF='?src=\ref[src];operation=setstat;statdisp=message'>Message</A> \]"
|
|
dat += "<ul><li> Line 1: <A HREF='?src=\ref[src];operation=setmsg1'>[ stat_msg1 ? stat_msg1 : "(none)"]</A>"
|
|
dat += "<li> Line 2: <A HREF='?src=\ref[src];operation=setmsg2'>[ stat_msg2 ? stat_msg2 : "(none)"]</A></ul><br>"
|
|
dat += "\[ Alert: <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=default'>None</A> |"
|
|
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
|
|
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
|
|
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
|
|
|
|
|
|
dat += "<BR>\[ [(src.state != STATE_DEFAULT) ? "<A HREF='?src=\ref[src];operation=main'>Main Menu</A> | " : ""]<A HREF='?src=\ref[user];mach_close=communications'>Close</A> \]"
|
|
user << browse(dat, "window=communications;size=400x500")
|
|
onclose(user, "communications")
|
|
|
|
/obj/machinery/computer/communications/proc/interact_ai(var/mob/living/silicon/ai/user as mob)
|
|
var/dat = ""
|
|
switch(src.aistate)
|
|
if(STATE_DEFAULT)
|
|
if(emergency_shuttle.location==0 && !emergency_shuttle.online)
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=ai-callshuttle'>Call Emergency Shuttle</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=call-prison'>Send Prison Shutle</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=ai-messagelist'>Message List</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=nolockdown'>Disable Lockdown</A> \]"
|
|
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=ai-status'>Set Status Display</A> \]"
|
|
if(STATE_CALLSHUTTLE)
|
|
dat += "Are you sure you want to call the shuttle? \[ <A HREF='?src=\ref[src];operation=ai-callshuttle2'>OK</A> | <A HREF='?src=\ref[src];operation=ai-main'>Cancel</A> \]"
|
|
if(STATE_MESSAGELIST)
|
|
dat += "Messages:"
|
|
for(var/i = 1; i<=src.messagetitle.len; i++)
|
|
dat += "<BR><A HREF='?src=\ref[src];operation=ai-viewmessage;message-num=[i]'>[src.messagetitle[i]]</A>"
|
|
if(STATE_VIEWMESSAGE)
|
|
if (src.aicurrmsg)
|
|
dat += "<B>[src.messagetitle[src.aicurrmsg]]</B><BR><BR>[src.messagetext[src.aicurrmsg]]"
|
|
dat += "<BR><BR>\[ <A HREF='?src=\ref[src];operation=ai-delmessage'>Delete</A> \]"
|
|
else
|
|
src.aistate = STATE_MESSAGELIST
|
|
src.attack_hand(user)
|
|
return null
|
|
if(STATE_DELMESSAGE)
|
|
if(src.aicurrmsg)
|
|
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=\ref[src];operation=ai-delmessage2'>OK</A> | <A HREF='?src=\ref[src];operation=ai-viewmessage'>Cancel</A> \]"
|
|
else
|
|
src.aistate = STATE_MESSAGELIST
|
|
src.attack_hand(user)
|
|
return
|
|
|
|
if(STATE_STATUSDISPLAY)
|
|
dat += "Set Status Displays<BR>"
|
|
dat += "\[ <A HREF='?src=\ref[src];operation=setstat;statdisp=blank'>Clear</A> \]<BR>"
|
|
dat += "\[ <A HREF='?src=\ref[src];operation=setstat;statdisp=shuttle'>Shuttle ETA</A> \]<BR>"
|
|
dat += "\[ <A HREF='?src=\ref[src];operation=setstat;statdisp=message'>Message</A> \]"
|
|
dat += "<ul><li> Line 1: <A HREF='?src=\ref[src];operation=setmsg1'>[ stat_msg1 ? stat_msg1 : "(none)"]</A>"
|
|
dat += "<li> Line 2: <A HREF='?src=\ref[src];operation=setmsg2'>[ stat_msg2 ? stat_msg2 : "(none)"]</A></ul><br>"
|
|
dat += "\[ Alert: <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=default'>None</A> |"
|
|
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
|
|
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
|
|
dat += " <A HREF='?src=\ref[src];operation=setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
|
|
|
|
|
|
dat += "<BR>\[ [(src.aistate != STATE_DEFAULT) ? "<A HREF='?src=\ref[src];operation=ai-main'>Main Menu</A> | " : ""]<A HREF='?src=\ref[user];mach_close=communications'>Close</A> \]"
|
|
return dat
|
|
|
|
/mob/living/silicon/ai/proc/ai_call_shuttle()
|
|
set category = "AI Commands"
|
|
set name = "Call Emergency Shuttle"
|
|
if(usr.stat == 2)
|
|
usr << "You can't call the shuttle because you are dead!"
|
|
return
|
|
call_shuttle_proc(src)
|
|
|
|
// hack to display shuttle timer
|
|
if(emergency_shuttle.online)
|
|
var/obj/machinery/computer/communications/C = locate() in world
|
|
if(C)
|
|
C.post_status("shuttle")
|
|
|
|
return
|
|
|
|
/proc/call_prison_shuttle(var/mob/usr)
|
|
if ((!( ticker ) || emergency_shuttle.location == 1))
|
|
return
|
|
if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox")
|
|
usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
|
return
|
|
if(ticker.mode.name == "revolution")
|
|
usr << "Centcom will not allow the shuttle to be called, due to the possibility of sabotage by revolutionaries."
|
|
return
|
|
if(ticker.mode.name == "AI malfunction")
|
|
usr << "Centcom will not allow the shuttle to be called."
|
|
return
|
|
for(var/obj/machinery/computer/prison_shuttle/PS in world)
|
|
if(!PS.allowedtocall)
|
|
usr << "\red Centcom will not allow the shuttle to be called"
|
|
return
|
|
if(PS.z == 3)
|
|
usr << "\red Already in transit! Please wait!"
|
|
return
|
|
var/A = locate(/area/shuttle/prison/)
|
|
for(var/mob/M in A)
|
|
M.show_message("\red Launch sequence initiated!")
|
|
spawn(0) shake_camera(M, 10, 1)
|
|
sleep(10)
|
|
|
|
if(PS.z == 2) //This is the laziest proc ever
|
|
for(var/atom/movable/AM as mob|obj in A)
|
|
AM.z = 3
|
|
AM.Move()
|
|
sleep(rand(600,1800))
|
|
for(var/atom/movable/AM as mob|obj in A)
|
|
AM.z = 1
|
|
AM.Move()
|
|
else
|
|
for(var/atom/movable/AM as mob|obj in A)
|
|
AM.z = 3
|
|
AM.Move()
|
|
sleep(rand(600,1800))
|
|
for(var/atom/movable/AM as mob|obj in A)
|
|
AM.z = 2
|
|
AM.Move()
|
|
for(var/mob/M in A)
|
|
M.show_message("\red Prison shuttle has arrived at destination!")
|
|
return
|
|
return
|
|
|
|
|
|
/proc/enable_prison_shuttle(var/mob/user)
|
|
for(var/obj/machinery/computer/prison_shuttle/PS in world)
|
|
PS.allowedtocall = !(PS.allowedtocall)
|
|
|
|
/proc/call_shuttle_proc(var/mob/user)
|
|
if ((!( ticker ) || emergency_shuttle.location))
|
|
return
|
|
|
|
if(world.time < 6000) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE
|
|
user << "Centcomm will not allow the shuttle to be called."
|
|
if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox")
|
|
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
|
return
|
|
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
|
|
user << "Centcom will not allow the shuttle to be called."
|
|
return
|
|
/*
|
|
if(ticker.mode.name == "nuclear emergency" && world.time < 6000)
|
|
user << "Centcom will not allow the shuttle to be called."
|
|
return
|
|
*/
|
|
|
|
emergency_shuttle.incall()
|
|
world << "\blue <B>Alert: The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.</B>"
|
|
world << sound('shuttlecalled.ogg')
|
|
|
|
return
|
|
|
|
/proc/cancel_call_proc(var/mob/user)
|
|
if ((!( ticker ) || emergency_shuttle.location || emergency_shuttle.direction == 0 || emergency_shuttle.timeleft() < 300))
|
|
return
|
|
if( ticker.mode.name == "blob" )
|
|
return
|
|
|
|
world << "\blue <B>Alert: The shuttle is going back!</B>" //marker4
|
|
world << sound('shuttlerecalled.ogg')
|
|
|
|
emergency_shuttle.recall()
|
|
|
|
return
|
|
|
|
/obj/machinery/computer/communications/proc/post_status(var/command, var/data1, var/data2)
|
|
|
|
var/datum/radio_frequency/frequency = radio_controller.return_frequency(status_display_freq)
|
|
|
|
if(!frequency) return
|
|
|
|
|
|
|
|
var/datum/signal/status_signal = new
|
|
status_signal.source = src
|
|
status_signal.transmission_method = 1
|
|
status_signal.data["command"] = command
|
|
|
|
switch(command)
|
|
if("message")
|
|
status_signal.data["msg1"] = data1
|
|
status_signal.data["msg2"] = data2
|
|
if("alert")
|
|
status_signal.data["picture_state"] = data1
|
|
|
|
frequency.post_signal(src, status_signal)
|
|
|
|
|
|
|
|
/*
|
|
receive_signal(datum/signal/signal)
|
|
|
|
switch(signal.data["command"])
|
|
if("blank")
|
|
mode = 0
|
|
|
|
if("shuttle")
|
|
mode = 1
|
|
|
|
if("message")
|
|
set_message(signal.data["msg1"], signal.data["msg2"])
|
|
|
|
if("alert")
|
|
set_picture(signal.data["picture_state"])
|
|
*/ |