shuttlepanel

This commit is contained in:
Deity Link
2017-09-17 05:33:16 +02:00
parent c49d185127
commit ddf739a0e1
11 changed files with 362 additions and 186 deletions

View File

@@ -1,22 +1,20 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
// Controls the emergency shuttle
// these define the time taken for the shuttle to get to SS13
// these define the time taken for the shuttle to get to the station
// and the time before it leaves again
#define SHUTTLEARRIVETIME 600 // 10 minutes = 600 seconds
#define SHUTTLELEAVETIME 180 // 3 minutes = 180 seconds
#define SHUTTLETRANSITTIME 120 // 2 minutes = 120 seconds
var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
var/global/datum/emergency_shuttle/emergency_shuttle
datum/shuttle_controller
datum/emergency_shuttle
var/alert = 0 //0 = emergency, 1 = crew cycle
var/location = 0 //0 = somewhere far away (in spess), 1 = at SS13, 2 = returned from SS13
var/location = 0 //0 = in transit (or on standby), 1 = at the station, 2 = at centcom
var/online = 0
var/direction = 1 //-1 = going back to central command, 1 = going to SS13, 2 = in transit to centcom (not recalled)
var/direction = 0 //-1 = going back to centcom (recalled), 0 = on standby, 1 = going to the station, 2 = in transit to centcom (not recalled)
var/endtime // timeofday that shuttle arrives
var/timelimit //important when the shuttle gets called for more than shuttlearrivetime
@@ -33,21 +31,31 @@ datum/shuttle_controller
var/datum/shuttle/shuttle
var/list/escape_pods = list()
// call the shuttle
// if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming
datum/shuttle_controller/proc/incall(coeff = 1)
datum/emergency_shuttle/proc/init()
var/list/pods_to_test = list ("1","2","3","5")//ADD NEW PODS HERE
for (var/i in pods_to_test)
var/area/pod_test = locate(text2path("/area/shuttle/escape_pod[i]/station"))
if (area_in_map(pod_test))
escape_pods[i] = "station"
datum/emergency_shuttle/proc/incall(coeff = 1)
if(shutdown)
return
if((!universe.OnShuttleCall(null) || deny_shuttle) && alert == 1) //crew transfer shuttle does not gets recalled by gamemode
return
if(endtime)
if(direction == -1)
setdirection(1)
setdirection(1)
else
settimeleft(SHUTTLEARRIVETIME*coeff)
online = 1
setdirection(1)
if(always_fake_recall)
fake_recall = rand(300,500)
//turning on the red lights in hallways
@@ -56,19 +64,13 @@ datum/shuttle_controller/proc/incall(coeff = 1)
if(istype(A, /area/hallway))
A.readyalert()
datum/shuttle_controller/proc/shuttlealert(var/X)
datum/emergency_shuttle/proc/shuttlealert(var/X)
if(shutdown)
return
alert = X
datum/shuttle_controller/proc/force_shutdown()
online=0
shutdown=1
datum/shuttle_controller/proc/recall()
datum/emergency_shuttle/proc/recall()
if(shutdown)
return
if(!can_recall)
@@ -94,12 +96,10 @@ datum/shuttle_controller/proc/recall()
// returns the time (in seconds) before shuttle arrival
// note if direction = -1, gives a count-up to SHUTTLEARRIVETIME
datum/shuttle_controller/proc/timeleft()
datum/emergency_shuttle/proc/timeleft()
if(online)
var/timeleft = round((endtime - world.timeofday)/10 ,1)
if(direction == 1 || direction == 2)
if(direction >= 0)
return timeleft
else
return SHUTTLEARRIVETIME-timeleft
@@ -107,24 +107,23 @@ datum/shuttle_controller/proc/timeleft()
return SHUTTLEARRIVETIME
// sets the time left to a given delay (in seconds)
datum/shuttle_controller/proc/settimeleft(var/delay)
datum/emergency_shuttle/proc/settimeleft(var/delay)
endtime = world.timeofday + delay * 10
timelimit = delay
// sets the shuttle direction
// 1 = towards SS13, -1 = back to centcom
datum/shuttle_controller/proc/setdirection(var/dirn)
if(direction == dirn)
datum/emergency_shuttle/proc/setdirection(var/dirn)
if(direction == dirn || !direction || !dirn)
direction = dirn
return
direction = dirn
// if changing direction, flip the timeleft by SHUTTLEARRIVETIME
// if changing direction, flip the timeleft by SHUTTLEARRIVETIME, unless changing from/to 0
var/ticksleft = endtime - world.timeofday
endtime = world.timeofday + (SHUTTLEARRIVETIME*10 - ticksleft)
return
datum/shuttle_controller/proc/process()
datum/shuttle_controller/proc/move_pod(var/start_type,var/end_type,var/direction,var/open_doors)
/*
datum/emergency_shuttle/proc/move_pod(var/start_type,var/end_type,var/direction,var/open_doors)
var/area/start_location=locate(start_type)
var/area/end_location=locate(end_type)
@@ -152,12 +151,44 @@ datum/shuttle_controller/proc/move_pod(var/start_type,var/end_type,var/direction
if(istype(M, /mob/living/carbon))
if(!M.locked_to)
M.Knockdown(5)
*/
datum/emergency_shuttle/proc/move_pod(var/pod,var/destination)
if (!pod || !destination)
return
var/area/start_location=locate(text2path("/area/shuttle/escape_pod[pod]/[escape_pods[pod]]"))
var/area/end_location=locate(text2path("/area/shuttle/escape_pod[pod]/[destination]"))
for(var/obj/structure/shuttle/engine/propulsion/P in start_location)
spawn()
P.shoot_exhaust()
datum/shuttle_controller/emergency_shuttle
start_location.move_contents_to(end_location, null, NORTH)
escape_pods[pod] = destination
for(var/obj/machinery/door/D in all_doors)
if (get_area(D) == end_location)
spawn(0)
if(destination == "transit")
D.close()
else
D.open()
for(var/mob/M in end_location)
if (M.client)
spawn()
if (M.locked_to)
shake_camera(M, 4, 1) // locked_to, not a lot of shaking
else
shake_camera(M, 10, 2) // unlocked_to, HOLY SHIT SHAKE THE ROOM
if (istype(M, /mob/living/carbon))
if (!M.locked_to)
M.Knockdown(5)
datum/emergency_shuttle/proc/force_shutdown()
online=0
shutdown=1
datum/shuttle_controller/emergency_shuttle/force_shutdown()
..()
if(direction == 2)
location = 1
@@ -172,14 +203,93 @@ datum/shuttle_controller/emergency_shuttle/force_shutdown()
//move_pod(/area/shuttle/escape/transit,/area/shuttle/escape/station,NORTH,1)
//pods
move_pod(/area/shuttle/escape_pod1/transit,/area/shuttle/escape_pod1/station, NORTH,1)
move_pod(/area/shuttle/escape_pod2/transit,/area/shuttle/escape_pod2/station, NORTH,1)
move_pod(/area/shuttle/escape_pod3/transit,/area/shuttle/escape_pod3/station, NORTH,1)
move_pod(/area/shuttle/escape_pod5/transit,/area/shuttle/escape_pod5/station, NORTH,1)
for (var/pod in escape_pods)
move_pod(pod, "station")
online = 0
datum/shuttle_controller/emergency_shuttle/process()
datum/emergency_shuttle/proc/shuttle_phase(var/phase, var/casual = 1)
switch (phase)
if ("station")
location = 1
if(shuttle && istype(shuttle,/datum/shuttle/escape))
var/datum/shuttle/escape/E = shuttle
E.open_all_doors()
if(!E.move_to_dock(E.dock_station, 0, E.dir)) //Throw everything forward, on chance that there's anybody in the shuttle
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND THE STATION! PANIC PANIC PANIC")
if (!casual)
settimeleft(SHUTTLELEAVETIME)
send2mainirc("The Emergency Shuttle has docked with the station.")
send2maindiscord("The **Emergency Shuttle** has docked with the station.")
captain_announce("The Emergency Shuttle has docked with the station. You have [round(timeleft()/60,1)] minutes to board the Emergency Shuttle.")
world << sound('sound/AI/shuttledock.ogg')
/*
if(universe.name == "Hell Rising")
to_chat(world, "___________________________________________________________________")
to_chat(world, "<span class='sinister' style='font-size:3'> A vile force of darkness is making its way toward the escape shuttle.</span>")
*/
if ("transit")
location = 0 // in deep space
for(var/obj/machinery/door/unpowered/shuttle/D in shuttle.linked_area)
spawn(0)
D.close()
D.locked = 1
if (casual)
direction = 1
else
departed = 1 // It's going!
direction = 2 // heading to centcom
settimeleft(SHUTTLETRANSITTIME)
// Shuttle Radio
CallHook("EmergencyShuttleDeparture", list())
captain_announce("The Emergency Shuttle has left the station. Estimate [round(timeleft()/60,1)] minutes until the shuttle docks at Central Command.")
if(shuttle && istype(shuttle,/datum/shuttle/escape))
var/datum/shuttle/escape/E = shuttle
E.close_all_doors()
for(var/obj/structure/shuttle/engine/propulsion/P in E.linked_area)
spawn()
P.shoot_exhaust(backward = 3)
if(!E.move_to_dock(E.transit_port, 0, turn(E.dir,180))) //Throw everything backwards
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND TRANSIT! PANIC PANIC PANIC")
else
message_admins("WARNING: THERE IS NO EMERGENCY SHUTTLE! PANIC")
// "preload" the assets for when they're needed for the map vote.
if(config.map_voting && vote)
for(var/client/C in clients)
spawn
vote.interface.sendAssets(C)
if ("centcom")
if (casual)
location = 0
direction = 0
else
location = 2
if(shuttle && istype(shuttle,/datum/shuttle/escape))
var/datum/shuttle/escape/E = shuttle
E.open_all_doors()
if(!E.move_to_dock(E.dock_centcom, 0, E.dir)) //Throw everything forward
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND CENTCOMM! PANIC PANIC PANIC")
else
message_admins("WARNING: THERE IS NO EMERGENCY SHUTTLE! PANIC")
online = 0
datum/emergency_shuttle/proc/process()
if(!online || shutdown)
return
@@ -191,7 +301,7 @@ datum/shuttle_controller/emergency_shuttle/process()
switch(location)
if(0)
/* --- Shuttle is in transit to Central Command from SS13 --- */
/* --- Shuttle is in transit toward centcom --- */
if(direction == 2)
for(var/obj/structure/shuttle/engine/propulsion/P in shuttle.linked_area)
spawn()
@@ -199,40 +309,25 @@ datum/shuttle_controller/emergency_shuttle/process()
if(timeleft>0)
return 0
/* --- Shuttle has arrived at Centrcal Command --- */
/* --- Shuttle has arrived at centcom --- */
else
// turn off the star spawners
/*
for(var/obj/effect/starspawner/S in world)
S.spawning = 0
*/
location = 2
//main shuttle
if(shuttle && istype(shuttle,/datum/shuttle/escape))
var/datum/shuttle/escape/E = shuttle
E.open_all_doors()
if(!E.move_to_dock(E.dock_centcom, 0, E.dir)) //Throw everything forward
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND CENTCOMM! PANIC PANIC PANIC")
else
message_admins("WARNING: THERE IS NO EMERGENCY SHUTTLE! PANIC")
//move_pod(/area/shuttle/escape/transit,/area/shuttle/escape/centcom,NORTH,1)
shuttle_phase("centcom",0)
//pods
move_pod(/area/shuttle/escape_pod1/transit,/area/shuttle/escape_pod1/centcom, NORTH,1)
move_pod(/area/shuttle/escape_pod2/transit,/area/shuttle/escape_pod2/centcom, NORTH,1)
move_pod(/area/shuttle/escape_pod3/transit,/area/shuttle/escape_pod3/centcom, NORTH,1)
move_pod(/area/shuttle/escape_pod5/transit,/area/shuttle/escape_pod5/centcom, NORTH,1)
for (var/pod in escape_pods)
move_pod(pod, "centcom")
online = 0
return 1
/* --- Shuttle has docked centcom after being recalled --- */
if(timeleft>timelimit)
online = 0
direction = 1
direction = 0
endtime = null
return 0
@@ -244,24 +339,7 @@ datum/shuttle_controller/emergency_shuttle/process()
/* --- Shuttle has docked with the station - begin countdown to transit --- */
else if(timeleft <= 0)
location = 1
if(shuttle && istype(shuttle,/datum/shuttle/escape))
var/datum/shuttle/escape/E = shuttle
E.open_all_doors()
if(!E.move_to_dock(E.dock_station, 0, E.dir)) //Throw everything forward, on chance that there's anybody in the shuttle
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND THE STATION! PANIC PANIC PANIC")
settimeleft(SHUTTLELEAVETIME)
send2mainirc("The Emergency Shuttle has docked with the station.")
send2maindiscord("The **Emergency Shuttle** has docked with the station.")
captain_announce("The Emergency Shuttle has docked with the station. You have [round(timeleft()/60,1)] minutes to board the Emergency Shuttle.")
world << sound('sound/AI/shuttledock.ogg')
if(universe.name == "Hell Rising")
to_chat(world, "___________________________________________________________________")
to_chat(world, "<span class='sinister' style='font-size:3'> A vile force of darkness is making its way toward the escape shuttle.</span>")
shuttle_phase("station",0)
return 1
if(1)
@@ -282,103 +360,15 @@ datum/shuttle_controller/emergency_shuttle/process()
/* --- Shuttle leaves the station, enters transit --- */
else
// Turn on the star effects
/* // kinda buggy atm, i'll fix this later
for(var/obj/effect/starspawner/S in world)
if(!S.spawning)
spawn() S.startspawn()
*/
departed = 1 // It's going!
location = 0 // in deep space
direction = 2 // heading to centcom
settimeleft(SHUTTLETRANSITTIME)
// Shuttle Radio
CallHook("EmergencyShuttleDeparture", list())
//main shuttle
if(shuttle && istype(shuttle,/datum/shuttle/escape))
var/datum/shuttle/escape/E = shuttle
E.close_all_doors()
for(var/obj/structure/shuttle/engine/propulsion/P in E.linked_area)
spawn()
P.shoot_exhaust(backward = 3)
if(!E.move_to_dock(E.transit_port, 0, turn(E.dir,180))) //Throw everything backwards
message_admins("WARNING: THE EMERGENCY SHUTTLE FAILED TO FIND TRANSIT! PANIC PANIC PANIC")
else
message_admins("WARNING: THERE IS NO EMERGENCY SHUTTLE! PANIC")
//move_pod(/area/shuttle/escape/station,/area/shuttle/escape/transit,NORTH,0)
shuttle_phase ("transit",0)
//pods
move_pod(/area/shuttle/escape_pod1/station,/area/shuttle/escape_pod1/transit,NORTH,0)
move_pod(/area/shuttle/escape_pod2/station,/area/shuttle/escape_pod2/transit,NORTH,0)
move_pod(/area/shuttle/escape_pod3/station,/area/shuttle/escape_pod3/transit,NORTH,0)
move_pod(/area/shuttle/escape_pod5/station,/area/shuttle/escape_pod5/transit,EAST,0)
captain_announce("The Emergency Shuttle has left the station. Estimate [round(timeleft()/60,1)] minutes until the shuttle docks at Central Command.")
// "preload" the assets for when they're needed for the map vote.
if(config.map_voting && vote)
for(var/client/C in clients)
spawn
vote.interface.sendAssets(C)
for (var/pod in escape_pods)
move_pod(pod, "transit")
return 1
else
return 1
/*
Some slapped-together star effects for maximum spess immershuns. Basically consists of a
spawner, an ender, and bgstar. Spawners create bgstars, bgstars shoot off into a direction
until they reach a starender.
*/
/obj/effect/bgstar
name = "star"
var/speed
var/direction = SOUTH
layer = TURF_LAYER
/obj/effect/bgstar/New()
. = ..()
pixel_x += rand(-2, 30) * PIXEL_MULTIPLIER
pixel_y += rand(-2, 30) * PIXEL_MULTIPLIER
icon_state = "star" + pick("1", "1", "1", "2", "3", "4")
speed = rand(2, 5)
/obj/effect/bgstar/proc/startmove()
while (src)
sleep(speed)
step(src, direction)
for (var/obj/effect/starender/E in loc)
qdel(src)
/obj/effect/starender
invisibility = 101
/obj/effect/starspawner
invisibility = 101
var/spawndir = SOUTH
var/spawning = 0
West
spawndir = WEST
proc/startspawn()
spawning = 1
while(spawning)
sleep(rand(2, 30))
var/obj/effect/bgstar/S = new/obj/effect/bgstar(locate(x,y,z))
S.direction = spawndir
spawn()
S.startmove()