mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Put shuttles in their proper place, split out secure crates
This commit is contained in:
@@ -1,262 +0,0 @@
|
||||
/obj/docking_port/mobile/emergency
|
||||
name = "emergency shuttle"
|
||||
id = "emergency"
|
||||
|
||||
dwidth = 9
|
||||
width = 22
|
||||
height = 11
|
||||
dir = 4
|
||||
travelDir = -90
|
||||
roundstart_move = "emergency_away"
|
||||
var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself
|
||||
|
||||
/obj/docking_port/mobile/emergency/New()
|
||||
..()
|
||||
SSshuttle.emergency = src
|
||||
|
||||
/obj/docking_port/mobile/emergency/timeLeft(divisor)
|
||||
if(divisor <= 0)
|
||||
divisor = 10
|
||||
if(!timer)
|
||||
return round(SSshuttle.emergencyCallTime/divisor, 1)
|
||||
|
||||
var/dtime = world.time - timer
|
||||
switch(mode)
|
||||
if(SHUTTLE_ESCAPE)
|
||||
dtime = max(SSshuttle.emergencyEscapeTime - dtime, 0)
|
||||
if(SHUTTLE_DOCKED)
|
||||
dtime = max(SSshuttle.emergencyDockTime - dtime, 0)
|
||||
else
|
||||
dtime = max(SSshuttle.emergencyCallTime - dtime, 0)
|
||||
return round(dtime/divisor, 1)
|
||||
|
||||
/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, coefficient=1, area/signalOrigin, reason, redAlert)
|
||||
SSshuttle.emergencyCallTime = initial(SSshuttle.emergencyCallTime) * coefficient
|
||||
switch(mode)
|
||||
if(SHUTTLE_RECALL)
|
||||
mode = SHUTTLE_CALL
|
||||
timer = world.time - timeLeft(1)
|
||||
if(SHUTTLE_IDLE)
|
||||
mode = SHUTTLE_CALL
|
||||
timer = world.time
|
||||
if(SHUTTLE_CALL)
|
||||
if(world.time < timer) //this is just failsafe
|
||||
timer = world.time
|
||||
else
|
||||
return
|
||||
|
||||
if(prob(70))
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
else
|
||||
SSshuttle.emergencyLastCallLoc = null
|
||||
|
||||
priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
|
||||
|
||||
/obj/docking_port/mobile/emergency/cancel(area/signalOrigin)
|
||||
if(mode != SHUTTLE_CALL)
|
||||
return
|
||||
|
||||
timer = world.time - timeLeft(1)
|
||||
mode = SHUTTLE_RECALL
|
||||
|
||||
if(prob(70))
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
else
|
||||
SSshuttle.emergencyLastCallLoc = null
|
||||
priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlerecalled.ogg', "Priority")
|
||||
|
||||
/*
|
||||
/obj/docking_port/mobile/emergency/findTransitDock()
|
||||
. = SSshuttle.getDock("emergency_transit")
|
||||
if(.)
|
||||
return .
|
||||
return ..()
|
||||
*/
|
||||
|
||||
|
||||
/obj/docking_port/mobile/emergency/check()
|
||||
if(!timer)
|
||||
return
|
||||
|
||||
var/time_left = timeLeft(1)
|
||||
switch(mode)
|
||||
if(SHUTTLE_RECALL)
|
||||
if(time_left <= 0)
|
||||
mode = SHUTTLE_IDLE
|
||||
timer = 0
|
||||
if(SHUTTLE_CALL)
|
||||
if(time_left <= 0)
|
||||
//move emergency shuttle to station
|
||||
if(dock(SSshuttle.getDock("emergency_home")))
|
||||
setTimer(20)
|
||||
return
|
||||
mode = SHUTTLE_DOCKED
|
||||
timer = world.time
|
||||
send2irc("Server", "The Emergency Shuttle has docked with the station.")
|
||||
priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
|
||||
|
||||
//Gangs only have one attempt left if the shuttle has docked with the station to prevent suffering from dominator delays
|
||||
for(var/datum/gang/G in ticker.mode.gangs)
|
||||
if(isnum(G.dom_timer))
|
||||
G.dom_attempts = 0
|
||||
else
|
||||
G.dom_attempts = min(1,G.dom_attempts)
|
||||
|
||||
if(SHUTTLE_DOCKED)
|
||||
|
||||
if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch
|
||||
sound_played = 1 //Only rev them up once.
|
||||
for(var/area/shuttle/escape/E in world)
|
||||
E << 'sound/effects/hyperspace_begin.ogg'
|
||||
|
||||
if(time_left <= 0 && SSshuttle.emergencyNoEscape)
|
||||
priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority")
|
||||
sound_played = 0 //Since we didn't launch, we will need to rev up the engines again next pass.
|
||||
mode = SHUTTLE_STRANDED
|
||||
|
||||
if(time_left <= 0 && !SSshuttle.emergencyNoEscape)
|
||||
//move each escape pod (or applicable spaceship) to its corresponding transit dock
|
||||
for(var/A in SSshuttle.mobile)
|
||||
var/obj/docking_port/mobile/M = A
|
||||
if(M.launch_status == UNLAUNCHED) //Pods will not launch from the mine/planet, and other ships won't launch unless we tell them to.
|
||||
M.launch_status = ENDGAME_LAUNCHED
|
||||
M.enterTransit()
|
||||
|
||||
//now move the actual emergency shuttle to its transit dock
|
||||
for(var/area/shuttle/escape/E in world)
|
||||
E << 'sound/effects/hyperspace_progress.ogg'
|
||||
enterTransit()
|
||||
mode = SHUTTLE_ESCAPE
|
||||
launch_status = ENDGAME_LAUNCHED
|
||||
timer = world.time
|
||||
priority_announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, "Priority")
|
||||
if(SHUTTLE_ESCAPE)
|
||||
if(time_left <= 0)
|
||||
//move each escape pod to its corresponding escape dock
|
||||
for(var/A in SSshuttle.mobile)
|
||||
var/obj/docking_port/mobile/M = A
|
||||
if(M.launch_status == ENDGAME_LAUNCHED)
|
||||
if(istype(M, /obj/docking_port/mobile/pod))
|
||||
M.dock(SSshuttle.getDock("[M.id]_away")) //Escape pods dock at centcomm
|
||||
else
|
||||
continue //Mapping a new docking point for each ship mappers could potentially want docking with centcomm would take up lots of space, just let them keep flying off into the sunset for their greentext
|
||||
|
||||
//now move the actual emergency shuttle to centcomm
|
||||
for(var/area/shuttle/escape/E in world)
|
||||
E << 'sound/effects/hyperspace_end.ogg'
|
||||
dock(SSshuttle.getDock("emergency_away"))
|
||||
mode = SHUTTLE_ENDGAME
|
||||
timer = 0
|
||||
open_dock()
|
||||
|
||||
/obj/docking_port/mobile/emergency/proc/open_dock()
|
||||
for(var/obj/machinery/door/poddoor/shuttledock/D in airlocks)
|
||||
var/turf/T = get_step(D, D.checkdir)
|
||||
if(!istype(T,/turf/space))
|
||||
spawn(0)
|
||||
D.open()
|
||||
|
||||
/obj/docking_port/mobile/pod
|
||||
name = "escape pod"
|
||||
id = "pod"
|
||||
dwidth = 1
|
||||
width = 3
|
||||
height = 4
|
||||
launch_status = UNLAUNCHED
|
||||
|
||||
/obj/docking_port/mobile/pod/request()
|
||||
if((security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA) && launch_status == UNLAUNCHED)
|
||||
launch_status = EARLY_LAUNCHED
|
||||
return ..()
|
||||
|
||||
/obj/docking_port/mobile/pod/New()
|
||||
if(id == "pod")
|
||||
WARNING("[type] id has not been changed from the default. Use the id convention \"pod1\" \"pod2\" etc.")
|
||||
..()
|
||||
|
||||
/obj/docking_port/mobile/pod/cancel()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/shuttle/pod
|
||||
name = "pod control computer"
|
||||
admin_controlled = 1
|
||||
shuttleId = "pod"
|
||||
possible_destinations = "pod_asteroid"
|
||||
icon = 'icons/obj/terminals.dmi'
|
||||
icon_state = "dorm_available"
|
||||
density = 0
|
||||
|
||||
/obj/machinery/computer/shuttle/pod/update_icon()
|
||||
return
|
||||
|
||||
/obj/docking_port/stationary/random
|
||||
name = "escape pod"
|
||||
id = "pod"
|
||||
dwidth = 1
|
||||
width = 3
|
||||
height = 4
|
||||
var/target_area = /area/mine/unexplored
|
||||
|
||||
/obj/docking_port/stationary/random/initialize()
|
||||
..()
|
||||
var/list/turfs = get_area_turfs(target_area)
|
||||
var/turf/T = pick(turfs)
|
||||
src.loc = T
|
||||
|
||||
//Pod suits/pickaxes
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/space/orange
|
||||
name = "emergency space helmet"
|
||||
icon_state = "syndicate-helm-orange"
|
||||
item_state = "syndicate-helm-orange"
|
||||
|
||||
/obj/item/clothing/suit/space/orange
|
||||
name = "emergency space suit"
|
||||
icon_state = "syndicate-orange"
|
||||
item_state = "syndicate-orange"
|
||||
slowdown = 3
|
||||
|
||||
/obj/item/weapon/pickaxe/emergency
|
||||
name = "emergency disembarkation tool"
|
||||
desc = "For extracting yourself from rough landings."
|
||||
|
||||
/obj/item/weapon/storage/pod
|
||||
name = "emergency space suits"
|
||||
desc = "A wall mounted safe containing space suits. Will only open in emergencies."
|
||||
anchored = 1
|
||||
density = 0
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "safe"
|
||||
|
||||
/obj/item/weapon/storage/pod/New()
|
||||
..()
|
||||
new /obj/item/clothing/head/helmet/space/orange(src)
|
||||
new /obj/item/clothing/head/helmet/space/orange(src)
|
||||
new /obj/item/clothing/suit/space/orange(src)
|
||||
new /obj/item/clothing/suit/space/orange(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/weapon/tank/internals/oxygen/red(src)
|
||||
new /obj/item/weapon/tank/internals/oxygen/red(src)
|
||||
new /obj/item/weapon/pickaxe/emergency(src)
|
||||
new /obj/item/weapon/pickaxe/emergency(src)
|
||||
new /obj/item/weapon/survivalcapsule(src)
|
||||
|
||||
/obj/item/weapon/storage/pod/attackby(obj/item/weapon/W, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/pod/MouseDrop(over_object, src_location, over_location)
|
||||
if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA)
|
||||
return ..()
|
||||
else
|
||||
usr << "The storage unit will only unlock during a Red or Delta security alert."
|
||||
|
||||
/obj/item/weapon/storage/pod/attack_hand(mob/user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
#undef UNLAUNCHED
|
||||
#undef LAUNCHED
|
||||
#undef EARLY_LAUNCHED
|
||||
@@ -73,7 +73,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
|
||||
|
||||
/datum/supply_packs/emergency/evac
|
||||
name = "Emergency equipment"
|
||||
name = "Emergency Equipment"
|
||||
contains = list(/mob/living/simple_animal/bot/floorbot,
|
||||
/mob/living/simple_animal/bot/floorbot,
|
||||
/mob/living/simple_animal/bot/medbot,
|
||||
@@ -890,9 +890,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
containername = "butterflies crate"
|
||||
contraband = 1
|
||||
|
||||
////// hippy gear
|
||||
|
||||
/datum/supply_packs/organic/hydroponics // -- Skie
|
||||
/datum/supply_packs/organic/hydroponics
|
||||
name = "Hydroponics Supply Crate"
|
||||
contains = list(/obj/item/weapon/reagent_containers/spray/plantbgone,
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone,
|
||||
@@ -902,7 +900,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/weapon/cultivator,
|
||||
/obj/item/device/analyzer/plant_analyzer,
|
||||
/obj/item/clothing/gloves/botanic_leather,
|
||||
/obj/item/clothing/suit/apron) // Updated with new things
|
||||
/obj/item/clothing/suit/apron)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "hydroponics crate"
|
||||
|
||||
@@ -106,51 +106,6 @@
|
||||
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
|
||||
new /obj/item/weapon/cultivator(src)
|
||||
|
||||
/obj/structure/closet/crate/secure
|
||||
desc = "A secure crate."
|
||||
name = "secure crate"
|
||||
icon_crate = "securecrate"
|
||||
icon_state = "securecrate"
|
||||
var/redlight = "securecrater"
|
||||
var/greenlight = "securecrateg"
|
||||
var/sparks = "securecratesparks"
|
||||
var/emag = "securecrateemag"
|
||||
locked = 1
|
||||
health = 1000
|
||||
|
||||
/obj/structure/closet/crate/secure/weapon
|
||||
desc = "A secure weapons crate."
|
||||
name = "weapons crate"
|
||||
icon_crate = "weaponcrate"
|
||||
icon_state = "weaponcrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/plasma
|
||||
desc = "A secure plasma crate."
|
||||
name = "plasma crate"
|
||||
icon_crate = "plasmacrate"
|
||||
icon_state = "plasmacrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/gear
|
||||
desc = "A secure gear crate."
|
||||
name = "gear crate"
|
||||
icon_crate = "secgearcrate"
|
||||
icon_state = "secgearcrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/hydrosec
|
||||
desc = "A crate with a lock on it, painted in the scheme of the station's botanists."
|
||||
name = "secure hydroponics crate"
|
||||
icon_crate = "hydrosecurecrate"
|
||||
icon_state = "hydrosecurecrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/update_icon()
|
||||
..()
|
||||
if(locked)
|
||||
overlays += redlight
|
||||
else if(broken)
|
||||
overlays += emag
|
||||
else
|
||||
overlays += greenlight
|
||||
|
||||
/obj/structure/closet/crate/open()
|
||||
playsound(src.loc, sound_effect_open, 15, 1, -3)
|
||||
dump_contents()
|
||||
@@ -214,44 +169,6 @@
|
||||
open()
|
||||
return
|
||||
|
||||
/obj/structure/closet/crate/secure/attack_hand(mob/user)
|
||||
if(manifest)
|
||||
tear_manifest(user)
|
||||
return
|
||||
if(locked && !broken)
|
||||
if (allowed(user))
|
||||
user << "<span class='notice'>You unlock [src].</span>"
|
||||
src.locked = 0
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>[src] is locked.</span>"
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/card) && src.allowed(user) && !locked && !opened && !broken)
|
||||
user << "<span class='notice'>You lock \the [src].</span>"
|
||||
src.locked = 1
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/crate/secure/emag_act(mob/user)
|
||||
if(locked && !broken)
|
||||
src.locked = 0
|
||||
src.broken = 1
|
||||
update_icon()
|
||||
overlays += sparks
|
||||
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
|
||||
playsound(src.loc, "sparks", 60, 1)
|
||||
user << "<span class='notice'>You unlock \the [src].</span>"
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/closet/crate/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -293,25 +210,3 @@
|
||||
else if(!place(user, W))
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/structure/closet/crate/secure/emp_act(severity)
|
||||
for(var/obj/O in src)
|
||||
O.emp_act(severity)
|
||||
if(!broken && !opened && prob(50/severity))
|
||||
if(!locked)
|
||||
src.locked = 1
|
||||
update_icon()
|
||||
else
|
||||
src.locked = 0
|
||||
src.broken = 1
|
||||
update_icon()
|
||||
overlays += sparks
|
||||
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
if(!opened && prob(20/severity))
|
||||
if(!locked)
|
||||
open()
|
||||
else
|
||||
src.req_access = list()
|
||||
src.req_access += pick(get_all_accesses())
|
||||
..()
|
||||
|
||||
|
||||
105
code/game/objects/structures/crates_lockers/crates/secure.dm
Normal file
105
code/game/objects/structures/crates_lockers/crates/secure.dm
Normal file
@@ -0,0 +1,105 @@
|
||||
/obj/structure/closet/crate/secure
|
||||
desc = "A secure crate."
|
||||
name = "secure crate"
|
||||
icon_crate = "securecrate"
|
||||
icon_state = "securecrate"
|
||||
var/redlight = "securecrater"
|
||||
var/greenlight = "securecrateg"
|
||||
var/sparks = "securecratesparks"
|
||||
var/emag = "securecrateemag"
|
||||
locked = 1
|
||||
health = 1000
|
||||
|
||||
/obj/structure/closet/crate/secure/weapon
|
||||
desc = "A secure weapons crate."
|
||||
name = "weapons crate"
|
||||
icon_crate = "weaponcrate"
|
||||
icon_state = "weaponcrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/plasma
|
||||
desc = "A secure plasma crate."
|
||||
name = "plasma crate"
|
||||
icon_crate = "plasmacrate"
|
||||
icon_state = "plasmacrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/gear
|
||||
desc = "A secure gear crate."
|
||||
name = "gear crate"
|
||||
icon_crate = "secgearcrate"
|
||||
icon_state = "secgearcrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/hydrosec
|
||||
desc = "A crate with a lock on it, painted in the scheme of the station's botanists."
|
||||
name = "secure hydroponics crate"
|
||||
icon_crate = "hydrosecurecrate"
|
||||
icon_state = "hydrosecurecrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/update_icon()
|
||||
..()
|
||||
if(locked)
|
||||
overlays += redlight
|
||||
else if(broken)
|
||||
overlays += emag
|
||||
else
|
||||
overlays += greenlight
|
||||
|
||||
/obj/structure/closet/crate/secure/attack_hand(mob/user)
|
||||
if(manifest)
|
||||
tear_manifest(user)
|
||||
return
|
||||
if(locked && !broken)
|
||||
if (allowed(user))
|
||||
user << "<span class='notice'>You unlock [src].</span>"
|
||||
src.locked = 0
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>[src] is locked.</span>"
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/card) && src.allowed(user) && !locked && !opened && !broken)
|
||||
user << "<span class='notice'>You lock \the [src].</span>"
|
||||
src.locked = 1
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/crate/secure/emag_act(mob/user)
|
||||
if(locked && !broken)
|
||||
src.locked = 0
|
||||
src.broken = 1
|
||||
update_icon()
|
||||
overlays += sparks
|
||||
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
|
||||
playsound(src.loc, "sparks", 60, 1)
|
||||
user << "<span class='notice'>You unlock \the [src].</span>"
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/closet/crate/secure/emp_act(severity)
|
||||
for(var/obj/O in src)
|
||||
O.emp_act(severity)
|
||||
if(!broken && !opened && prob(50/severity))
|
||||
if(!locked)
|
||||
src.locked = 1
|
||||
update_icon()
|
||||
else
|
||||
src.locked = 0
|
||||
src.broken = 1
|
||||
update_icon()
|
||||
overlays += sparks
|
||||
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
if(!opened && prob(20/severity))
|
||||
if(!locked)
|
||||
open()
|
||||
else
|
||||
src.req_access = list()
|
||||
src.req_access += pick(get_all_accesses())
|
||||
..()
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/obj/item/weapon/paper/manifest
|
||||
name = "supply manifest"
|
||||
var/erroneous = 0
|
||||
var/points = 0
|
||||
var/ordernumber = 0
|
||||
|
||||
/datum/supply_order
|
||||
var/ordernum
|
||||
|
||||
@@ -74,3 +74,266 @@
|
||||
minor_announce("The emergency shuttle will launch in 10 seconds", "SYSTEM ERROR:",null,1)
|
||||
SSshuttle.emergency.setTimer(100)
|
||||
emagged = 1
|
||||
|
||||
/obj/docking_port/mobile/emergency
|
||||
name = "emergency shuttle"
|
||||
id = "emergency"
|
||||
|
||||
dwidth = 9
|
||||
width = 22
|
||||
height = 11
|
||||
dir = 4
|
||||
travelDir = -90
|
||||
roundstart_move = "emergency_away"
|
||||
var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself
|
||||
|
||||
/obj/docking_port/mobile/emergency/New()
|
||||
..()
|
||||
SSshuttle.emergency = src
|
||||
|
||||
/obj/docking_port/mobile/emergency/timeLeft(divisor)
|
||||
if(divisor <= 0)
|
||||
divisor = 10
|
||||
if(!timer)
|
||||
return round(SSshuttle.emergencyCallTime/divisor, 1)
|
||||
|
||||
var/dtime = world.time - timer
|
||||
switch(mode)
|
||||
if(SHUTTLE_ESCAPE)
|
||||
dtime = max(SSshuttle.emergencyEscapeTime - dtime, 0)
|
||||
if(SHUTTLE_DOCKED)
|
||||
dtime = max(SSshuttle.emergencyDockTime - dtime, 0)
|
||||
else
|
||||
dtime = max(SSshuttle.emergencyCallTime - dtime, 0)
|
||||
return round(dtime/divisor, 1)
|
||||
|
||||
/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, coefficient=1, area/signalOrigin, reason, redAlert)
|
||||
SSshuttle.emergencyCallTime = initial(SSshuttle.emergencyCallTime) * coefficient
|
||||
switch(mode)
|
||||
if(SHUTTLE_RECALL)
|
||||
mode = SHUTTLE_CALL
|
||||
timer = world.time - timeLeft(1)
|
||||
if(SHUTTLE_IDLE)
|
||||
mode = SHUTTLE_CALL
|
||||
timer = world.time
|
||||
if(SHUTTLE_CALL)
|
||||
if(world.time < timer) //this is just failsafe
|
||||
timer = world.time
|
||||
else
|
||||
return
|
||||
|
||||
if(prob(70))
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
else
|
||||
SSshuttle.emergencyLastCallLoc = null
|
||||
|
||||
priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
|
||||
|
||||
/obj/docking_port/mobile/emergency/cancel(area/signalOrigin)
|
||||
if(mode != SHUTTLE_CALL)
|
||||
return
|
||||
|
||||
timer = world.time - timeLeft(1)
|
||||
mode = SHUTTLE_RECALL
|
||||
|
||||
if(prob(70))
|
||||
SSshuttle.emergencyLastCallLoc = signalOrigin
|
||||
else
|
||||
SSshuttle.emergencyLastCallLoc = null
|
||||
priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlerecalled.ogg', "Priority")
|
||||
|
||||
/*
|
||||
/obj/docking_port/mobile/emergency/findTransitDock()
|
||||
. = SSshuttle.getDock("emergency_transit")
|
||||
if(.)
|
||||
return .
|
||||
return ..()
|
||||
*/
|
||||
|
||||
|
||||
/obj/docking_port/mobile/emergency/check()
|
||||
if(!timer)
|
||||
return
|
||||
|
||||
var/time_left = timeLeft(1)
|
||||
switch(mode)
|
||||
if(SHUTTLE_RECALL)
|
||||
if(time_left <= 0)
|
||||
mode = SHUTTLE_IDLE
|
||||
timer = 0
|
||||
if(SHUTTLE_CALL)
|
||||
if(time_left <= 0)
|
||||
//move emergency shuttle to station
|
||||
if(dock(SSshuttle.getDock("emergency_home")))
|
||||
setTimer(20)
|
||||
return
|
||||
mode = SHUTTLE_DOCKED
|
||||
timer = world.time
|
||||
send2irc("Server", "The Emergency Shuttle has docked with the station.")
|
||||
priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
|
||||
|
||||
//Gangs only have one attempt left if the shuttle has docked with the station to prevent suffering from dominator delays
|
||||
for(var/datum/gang/G in ticker.mode.gangs)
|
||||
if(isnum(G.dom_timer))
|
||||
G.dom_attempts = 0
|
||||
else
|
||||
G.dom_attempts = min(1,G.dom_attempts)
|
||||
|
||||
if(SHUTTLE_DOCKED)
|
||||
|
||||
if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch
|
||||
sound_played = 1 //Only rev them up once.
|
||||
for(var/area/shuttle/escape/E in world)
|
||||
E << 'sound/effects/hyperspace_begin.ogg'
|
||||
|
||||
if(time_left <= 0 && SSshuttle.emergencyNoEscape)
|
||||
priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority")
|
||||
sound_played = 0 //Since we didn't launch, we will need to rev up the engines again next pass.
|
||||
mode = SHUTTLE_STRANDED
|
||||
|
||||
if(time_left <= 0 && !SSshuttle.emergencyNoEscape)
|
||||
//move each escape pod (or applicable spaceship) to its corresponding transit dock
|
||||
for(var/A in SSshuttle.mobile)
|
||||
var/obj/docking_port/mobile/M = A
|
||||
if(M.launch_status == UNLAUNCHED) //Pods will not launch from the mine/planet, and other ships won't launch unless we tell them to.
|
||||
M.launch_status = ENDGAME_LAUNCHED
|
||||
M.enterTransit()
|
||||
|
||||
//now move the actual emergency shuttle to its transit dock
|
||||
for(var/area/shuttle/escape/E in world)
|
||||
E << 'sound/effects/hyperspace_progress.ogg'
|
||||
enterTransit()
|
||||
mode = SHUTTLE_ESCAPE
|
||||
launch_status = ENDGAME_LAUNCHED
|
||||
timer = world.time
|
||||
priority_announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, "Priority")
|
||||
if(SHUTTLE_ESCAPE)
|
||||
if(time_left <= 0)
|
||||
//move each escape pod to its corresponding escape dock
|
||||
for(var/A in SSshuttle.mobile)
|
||||
var/obj/docking_port/mobile/M = A
|
||||
if(M.launch_status == ENDGAME_LAUNCHED)
|
||||
if(istype(M, /obj/docking_port/mobile/pod))
|
||||
M.dock(SSshuttle.getDock("[M.id]_away")) //Escape pods dock at centcomm
|
||||
else
|
||||
continue //Mapping a new docking point for each ship mappers could potentially want docking with centcomm would take up lots of space, just let them keep flying off into the sunset for their greentext
|
||||
|
||||
//now move the actual emergency shuttle to centcomm
|
||||
for(var/area/shuttle/escape/E in world)
|
||||
E << 'sound/effects/hyperspace_end.ogg'
|
||||
dock(SSshuttle.getDock("emergency_away"))
|
||||
mode = SHUTTLE_ENDGAME
|
||||
timer = 0
|
||||
open_dock()
|
||||
|
||||
/obj/docking_port/mobile/emergency/proc/open_dock()
|
||||
for(var/obj/machinery/door/poddoor/shuttledock/D in airlocks)
|
||||
var/turf/T = get_step(D, D.checkdir)
|
||||
if(!istype(T,/turf/space))
|
||||
spawn(0)
|
||||
D.open()
|
||||
|
||||
/obj/docking_port/mobile/pod
|
||||
name = "escape pod"
|
||||
id = "pod"
|
||||
dwidth = 1
|
||||
width = 3
|
||||
height = 4
|
||||
launch_status = UNLAUNCHED
|
||||
|
||||
/obj/docking_port/mobile/pod/request()
|
||||
if((security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA) && launch_status == UNLAUNCHED)
|
||||
launch_status = EARLY_LAUNCHED
|
||||
return ..()
|
||||
|
||||
/obj/docking_port/mobile/pod/New()
|
||||
if(id == "pod")
|
||||
WARNING("[type] id has not been changed from the default. Use the id convention \"pod1\" \"pod2\" etc.")
|
||||
..()
|
||||
|
||||
/obj/docking_port/mobile/pod/cancel()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/shuttle/pod
|
||||
name = "pod control computer"
|
||||
admin_controlled = 1
|
||||
shuttleId = "pod"
|
||||
possible_destinations = "pod_asteroid"
|
||||
icon = 'icons/obj/terminals.dmi'
|
||||
icon_state = "dorm_available"
|
||||
density = 0
|
||||
|
||||
/obj/machinery/computer/shuttle/pod/update_icon()
|
||||
return
|
||||
|
||||
/obj/docking_port/stationary/random
|
||||
name = "escape pod"
|
||||
id = "pod"
|
||||
dwidth = 1
|
||||
width = 3
|
||||
height = 4
|
||||
var/target_area = /area/mine/unexplored
|
||||
|
||||
/obj/docking_port/stationary/random/initialize()
|
||||
..()
|
||||
var/list/turfs = get_area_turfs(target_area)
|
||||
var/turf/T = pick(turfs)
|
||||
src.loc = T
|
||||
|
||||
//Pod suits/pickaxes
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/space/orange
|
||||
name = "emergency space helmet"
|
||||
icon_state = "syndicate-helm-orange"
|
||||
item_state = "syndicate-helm-orange"
|
||||
|
||||
/obj/item/clothing/suit/space/orange
|
||||
name = "emergency space suit"
|
||||
icon_state = "syndicate-orange"
|
||||
item_state = "syndicate-orange"
|
||||
slowdown = 3
|
||||
|
||||
/obj/item/weapon/pickaxe/emergency
|
||||
name = "emergency disembarkation tool"
|
||||
desc = "For extracting yourself from rough landings."
|
||||
|
||||
/obj/item/weapon/storage/pod
|
||||
name = "emergency space suits"
|
||||
desc = "A wall mounted safe containing space suits. Will only open in emergencies."
|
||||
anchored = 1
|
||||
density = 0
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "safe"
|
||||
|
||||
/obj/item/weapon/storage/pod/New()
|
||||
..()
|
||||
new /obj/item/clothing/head/helmet/space/orange(src)
|
||||
new /obj/item/clothing/head/helmet/space/orange(src)
|
||||
new /obj/item/clothing/suit/space/orange(src)
|
||||
new /obj/item/clothing/suit/space/orange(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/weapon/tank/internals/oxygen/red(src)
|
||||
new /obj/item/weapon/tank/internals/oxygen/red(src)
|
||||
new /obj/item/weapon/pickaxe/emergency(src)
|
||||
new /obj/item/weapon/pickaxe/emergency(src)
|
||||
new /obj/item/weapon/survivalcapsule(src)
|
||||
|
||||
/obj/item/weapon/storage/pod/attackby(obj/item/weapon/W, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/pod/MouseDrop(over_object, src_location, over_location)
|
||||
if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA)
|
||||
return ..()
|
||||
else
|
||||
usr << "The storage unit will only unlock during a Red or Delta security alert."
|
||||
|
||||
/obj/item/weapon/storage/pod/attack_hand(mob/user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
#undef UNLAUNCHED
|
||||
#undef LAUNCHED
|
||||
#undef EARLY_LAUNCHED
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
/obj/item/weapon/paper/manifest
|
||||
name = "supply manifest"
|
||||
var/erroneous = 0
|
||||
var/points = 0
|
||||
var/ordernumber = 0
|
||||
|
||||
/obj/docking_port/mobile/supply
|
||||
name = "supply shuttle"
|
||||
id = "supply"
|
||||
@@ -141,9 +141,6 @@
|
||||
#include "code\controllers\subsystem\ticker.dm"
|
||||
#include "code\controllers\subsystem\timer.dm"
|
||||
#include "code\controllers\subsystem\voting.dm"
|
||||
#include "code\controllers\subsystem\shuttles\assault_pod.dm"
|
||||
#include "code\controllers\subsystem\shuttles\emergency.dm"
|
||||
#include "code\controllers\subsystem\shuttles\supply.dm"
|
||||
#include "code\datums\ai_laws.dm"
|
||||
#include "code\datums\beam.dm"
|
||||
#include "code\datums\browser.dm"
|
||||
@@ -733,6 +730,7 @@
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
|
||||
#include "code\game\objects\structures\crates_lockers\crates\secure.dm"
|
||||
#include "code\game\objects\structures\transit_tubes\station.dm"
|
||||
#include "code\game\objects\structures\transit_tubes\transit_tube.dm"
|
||||
#include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm"
|
||||
@@ -1535,10 +1533,12 @@
|
||||
#include "code\modules\ruins\ruin_areas.dm"
|
||||
#include "code\modules\security levels\keycard authentication.dm"
|
||||
#include "code\modules\security levels\security levels.dm"
|
||||
#include "code\modules\shuttle\assault_pod.dm"
|
||||
#include "code\modules\shuttle\computer.dm"
|
||||
#include "code\modules\shuttle\emergency.dm"
|
||||
#include "code\modules\shuttle\ferry.dm"
|
||||
#include "code\modules\shuttle\shuttle.dm"
|
||||
#include "code\modules\shuttle\supply.dm"
|
||||
#include "code\modules\shuttle\syndicate.dm"
|
||||
#include "code\modules\shuttle\white_ship.dm"
|
||||
#include "code\modules\space transition\space_transition.dm"
|
||||
|
||||
Reference in New Issue
Block a user