mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-05 23:21:53 +00:00
For an example, let's say the phrase is: culture, wine, admit. The response is: massive, tired, doctor's delight. A traitor may begin a conversation with something like: "A man of culture always drinks wine, I must admit. What do you think?" The response to that: "When I am massively tired, I drink doctor's delight. Otherwise, I abstain." The example is best referenced in the Bar, or any place where drinks are available. With enough creativity and linguistical acumen, it may be used elsewhere. The point here is to make conversation seem as natural as possible while providing traitors a means to recognize each other. The words do no have to be exact, either. Quarter Master may be QM and the Captain may be Cap'n. Traitors should still recognize what is being communicated--or not. #Deactivated AI cores are no longer mobs. This is mostly cosmetic. You cannot gib a deactivated AI since it will be an object, not a mob. It will also not announce arrivals since it's an object, not a mob (this is an improvement, in my opinion). #Some code tweaks to AIs. They will now auto-start with a random name instead of their default-chosen name (which is still changeable). #Intelicards should no longer constantly refresh the window when they are being wiped. #Added new mech sprite. #Resin walls should no longer delete the person inside when killed in certain ways. Hulks will easily break free from resin if placed inside. #Ninjas can now download the AI onto spiderOS, provided Drain is on. SpiderOS works with AI cores, AI cards, and restoration terminals. Make sure Drain is on when you click on either the object (core/terminal) or the suit (aicard). AIs with law zero may get to have some fun, depending on circumstances. #Toggle Drain renamed to Toggle Interaction. It now serves as general trigger for special ninja interactions. #Added energy net power to ninjas. Prototype for HerpA and whatever he may want to do with it but it's pretty much finished. The energy net can be destroyed by the person trapped (or others) and will teleport them to the prison after 30 seconds. #Ninjas can now slice cameras apart per request. #Added a few more type checking procs (isliving, islarva, isobserver, ishivemainframe). #Mobs that are anchored will no longer be able to move (AIs will still move as normal). You will also not be able to grab them. #Incorporeal Move now works properly for regular mobs once more. #Marauders from CentCom can now launch directly from their bay. Start the shuttle and wait on a mass driver. On that note, mechs can now go through portals and launch through mass drivers. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1558 316c924e-a436-60f5-8080-3fe189b3f50e
214 lines
6.5 KiB
Plaintext
214 lines
6.5 KiB
Plaintext
//Config stuff
|
|
#define SPECOPS_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves.
|
|
#define SPECOPS_STATION_AREATYPE "/area/shuttle/specops/station" //Type of the spec ops shuttle area for station
|
|
#define SPECOPS_DOCK_AREATYPE "/area/shuttle/specops/centcom" //Type of the spec ops shuttle area for dock
|
|
|
|
var/specops_shuttle_moving_to_station = 0
|
|
var/specops_shuttle_moving_to_centcom = 0
|
|
var/specops_shuttle_at_station = 0
|
|
var/specops_shuttle_can_send = 1
|
|
var/specops_shuttle_time = 0
|
|
var/specops_shuttle_timeleft = 0
|
|
|
|
/obj/machinery/computer/specops_shuttle
|
|
name = "Spec. Ops. Shuttle Console"
|
|
icon = 'computer.dmi'
|
|
icon_state = "shuttle"
|
|
req_access = list()
|
|
var/temp = null
|
|
var/hacked = 0
|
|
var/allowedtocall = 0
|
|
|
|
/proc/specops_process()
|
|
while(specops_shuttle_time - world.timeofday > 0)
|
|
var/ticksleft = specops_shuttle_time - world.timeofday
|
|
|
|
if(ticksleft > 1e5)
|
|
specops_shuttle_time = world.timeofday + 10 // midnight rollover
|
|
specops_shuttle_timeleft = (ticksleft / 10)
|
|
sleep(5)
|
|
specops_shuttle_moving_to_station = 0
|
|
specops_shuttle_moving_to_centcom = 0
|
|
|
|
specops_shuttle_at_station = 1
|
|
if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
|
|
|
if (!specops_can_move())
|
|
usr << "\red The Special Operations shuttle is unable to leave."
|
|
return
|
|
|
|
//Begin Marauder launchpad.
|
|
spawn(0)//So it parallel processes it.
|
|
for(var/obj/machinery/door/poddoor/M in machines)
|
|
switch(M.id)
|
|
if("ASSAULT0")
|
|
spawn(10)//1 second delay between each.
|
|
M.open()
|
|
if("ASSAULT1")
|
|
spawn(20)
|
|
M.open()
|
|
if("ASSAULT2")
|
|
spawn(30)
|
|
M.open()
|
|
if("ASSAULT3")
|
|
spawn(40)
|
|
M.open()
|
|
|
|
sleep(10)
|
|
|
|
var/spawn_marauder[] = new()
|
|
for(var/obj/landmark/L in world)
|
|
if(L.name == "Marauder Entry")
|
|
spawn_marauder.Add(L)
|
|
for(var/obj/landmark/L in world)
|
|
if(L.name == "Marauder Exit")
|
|
var/obj/portal/P = new(L.loc)
|
|
P.invisibility = 101
|
|
P.failchance = 0
|
|
P.target = pick(spawn_marauder)
|
|
spawn_marauder.Remove(P.target)
|
|
|
|
sleep(10)
|
|
|
|
for(var/obj/machinery/mass_driver/M in machines)
|
|
switch(M.id)
|
|
if("ASSAULT0")
|
|
spawn(10)
|
|
M.drive()
|
|
if("ASSAULT1")
|
|
spawn(20)
|
|
M.drive()
|
|
if("ASSAULT2")
|
|
spawn(30)
|
|
M.drive()
|
|
if("ASSAULT3")
|
|
spawn(40)
|
|
M.drive()
|
|
|
|
sleep(50)//Doors remain open for 5 seconds.
|
|
|
|
for(var/obj/machinery/door/poddoor/M in machines)
|
|
switch(M.id)//Doors close at the same time.
|
|
if("ASSAULT0")
|
|
spawn(0)
|
|
M.close()
|
|
if("ASSAULT1")
|
|
spawn(0)
|
|
M.close()
|
|
if("ASSAULT2")
|
|
spawn(0)
|
|
M.close()
|
|
if("ASSAULT3")
|
|
spawn(0)
|
|
M.close()
|
|
//End Marauder launchpad.
|
|
|
|
var/area/start_location = locate(/area/shuttle/specops/centcom)
|
|
var/area/end_location = locate(/area/shuttle/specops/station)
|
|
|
|
var/list/dstturfs = list()
|
|
var/throwy = world.maxy
|
|
|
|
for(var/turf/T in end_location)
|
|
dstturfs += T
|
|
if(T.y < throwy)
|
|
throwy = T.y
|
|
|
|
// hey you, get out of the way!
|
|
for(var/turf/T in dstturfs)
|
|
// find the turf to move things to
|
|
var/turf/D = locate(T.x, throwy - 1, 1)
|
|
//var/turf/E = get_step(D, SOUTH)
|
|
for(var/atom/movable/AM as mob|obj in T)
|
|
AM.Move(D)
|
|
if(istype(T, /turf/simulated))
|
|
del(T)
|
|
|
|
start_location.move_contents_to(end_location)
|
|
|
|
for(var/turf/T in get_area_turfs(end_location) )
|
|
var/mob/M = locate(/mob) in T
|
|
M << "\red You have arrived to [station_name]. Commence operation!"
|
|
|
|
/proc/specops_can_move()
|
|
if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return 0
|
|
else return 1
|
|
|
|
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/specops_shuttle/attack_paw(var/mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
|
|
if(istype(I,/obj/item/weapon/card/emag))
|
|
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
|
|
else
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob)
|
|
if(!src.allowed(user))
|
|
user << "\red Access Denied."
|
|
return
|
|
|
|
if (sent_strike_team == 0)
|
|
usr << "\red The strike team has not yet deployed."
|
|
return
|
|
|
|
if(..())
|
|
return
|
|
|
|
user.machine = src
|
|
var/dat
|
|
if (src.temp)
|
|
dat = src.temp
|
|
else
|
|
dat += {"<BR><B>Special Operations Shuttle</B><HR>
|
|
\nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]<BR>
|
|
[specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*<BR>\n<BR>":specops_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle Offline</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [station_name]</A><BR>\n<BR>"]
|
|
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
|
|
|
|
user << browse(dat, "window=computer;size=575x450")
|
|
onclose(user, "computer")
|
|
return
|
|
|
|
/obj/machinery/computer/specops_shuttle/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
|
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
|
usr.machine = src
|
|
|
|
if (href_list["sendtodock"])
|
|
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
|
|
|
usr << "\blue Central Command will not allow the Special Operations shuttle to return."
|
|
return
|
|
|
|
else if (href_list["sendtostation"])
|
|
if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
|
|
|
if (!specops_can_move())
|
|
usr << "\red The Special Operations shuttle is unable to leave."
|
|
return
|
|
|
|
usr << "\blue The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds."
|
|
|
|
src.temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
|
src.updateUsrDialog()
|
|
|
|
specops_shuttle_moving_to_station = 1
|
|
|
|
specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME
|
|
spawn(0)
|
|
specops_process()
|
|
|
|
else if (href_list["mainmenu"])
|
|
src.temp = null
|
|
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
return |