From 00c81bb6750f98ba1fdbf30d8bcce2d9ccc199d4 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 15:26:34 +0930 Subject: [PATCH 01/10] Moved engineering, research and mining shuttles to a generalized system with its own directory structure. --- baystation12.dme | 4 +- .../game/machinery/computer/buildandrepair.dm | 14 +- code/modules/admin/topic.dm | 6 +- code/modules/mining/mine_items.dm | 126 ------------------ code/modules/research/research_shuttle.dm | 108 --------------- code/modules/shuttles/engineering.dm | 109 +-------------- code/modules/shuttles/mining.dm | 12 ++ code/modules/shuttles/research.dm | 12 ++ code/modules/shuttles/shuttle.dm | 126 ++++++++++++++++++ 9 files changed, 168 insertions(+), 349 deletions(-) delete mode 100644 code/modules/research/research_shuttle.dm create mode 100644 code/modules/shuttles/mining.dm create mode 100644 code/modules/shuttles/research.dm create mode 100644 code/modules/shuttles/shuttle.dm diff --git a/baystation12.dme b/baystation12.dme index 92c011b43ad..25531cc7f52 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1197,7 +1197,6 @@ #include "code\modules\research\rdconsole.dm" #include "code\modules\research\rdmachines.dm" #include "code\modules\research\research.dm" -#include "code\modules\research\research_shuttle.dm" #include "code\modules\research\server.dm" #include "code\modules\research\xenoarchaeology\areas.dm" #include "code\modules\research\xenoarchaeology\chemistry.dm" @@ -1278,6 +1277,9 @@ #include "code\modules\security levels\keycard authentication.dm" #include "code\modules\security levels\security levels.dm" #include "code\modules\shuttles\engineering.dm" +#include "code\modules\shuttles\mining.dm" +#include "code\modules\shuttles\research.dm" +#include "code\modules\shuttles\shuttle.dm" #include "code\modules\supermatter\supermatter.dm" #include "code\modules\surgery\appendix.dm" #include "code\modules\surgery\bones.dm" diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 3eb86ebaf6f..03ae77614f8 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -169,10 +169,7 @@ build_path = "/obj/machinery/computer/supplycomp" origin_tech = "programming=3" var/contraband_enabled = 0 -/obj/item/weapon/circuitboard/research_shuttle - name = "Circuit board (Research Shuttle)" - build_path = "/obj/machinery/computer/research_shuttle" - origin_tech = "programming=2" + /obj/item/weapon/circuitboard/operating name = "Circuit board (Operating Computer)" build_path = "/obj/machinery/computer/operating" @@ -196,20 +193,17 @@ /obj/item/weapon/circuitboard/splicer name = "Circuit board (Disease Splicer)" build_path = "/obj/machinery/computer/diseasesplicer" - /obj/item/weapon/circuitboard/mining_shuttle name = "Circuit board (Mining Shuttle)" - build_path = "/obj/machinery/computer/mining_shuttle" + build_path = "/obj/machinery/computer/shuttle_control/mining" origin_tech = "programming=2" - /obj/item/weapon/circuitboard/engineering_shuttle name = "Circuit board (Engineering Shuttle)" - build_path = "/obj/machinery/computer/engineering_shuttle" + build_path = "/obj/machinery/computer/shuttle_control/engineering" origin_tech = "programming=2" - /obj/item/weapon/circuitboard/research_shuttle name = "Circuit board (Research Shuttle)" - build_path = "/obj/machinery/computer/research_shuttle" + build_path = "/obj/machinery/computer/shuttle_control/research" origin_tech = "programming=2" /obj/item/weapon/circuitboard/HolodeckControl // Not going to let people get this, but it's just here for future name = "Circuit board (Holodeck Control)" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5129bba4a0c..d2458f7d4a6 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1920,12 +1920,14 @@ ticker.mode.finalize_traitor(A.mind) message_admins("\blue [key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1) log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]") + + //TODO: Generalize admin shuttles, make 'Move Shuttle' adminverb. if("moveminingshuttle") - if(mining_shuttle_moving) + if(shuttle_moving["Mining"] || shuttle_moving["Mining"] == null) return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","ShM") - move_mining_shuttle() + move_shuttle("Mining",locate(/area/shuttle/mining/outpost),locate(/area/shuttle/mining/station)) message_admins("\blue [key_name_admin(usr)] moved mining shuttle", 1) log_admin("[key_name(usr)] moved the mining shuttle") if("moveadminshuttle") diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 288546872c2..cc1cbc556b0 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -38,132 +38,6 @@ new /obj/item/clothing/glasses/meson(src) -/**********************Shuttle Computer**************************/ - -var/mining_shuttle_tickstomove = 10 -var/mining_shuttle_moving = 0 -var/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station - -proc/move_mining_shuttle() - if(mining_shuttle_moving) return - mining_shuttle_moving = 1 - spawn(mining_shuttle_tickstomove*10) - var/area/fromArea - var/area/toArea - if (mining_shuttle_location == 1) - fromArea = locate(/area/shuttle/mining/outpost) - toArea = locate(/area/shuttle/mining/station) - - else - fromArea = locate(/area/shuttle/mining/station) - toArea = locate(/area/shuttle/mining/outpost) - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in toArea) - 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) - // NOTE: Commenting this out to avoid recreating mass driver glitch - /* - spawn(0) - AM.throw_at(E, 1, 1) - return - */ - - if(istype(T, /turf/simulated)) - del(T) - - for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area... - bug.gib() - - for(var/mob/living/simple_animal/pest in toArea) // And for the other kind of bug... - pest.gib() - - fromArea.move_contents_to(toArea) - if (mining_shuttle_location) - mining_shuttle_location = 0 - else - mining_shuttle_location = 1 - - for(var/mob/M in toArea) - if(M.client) - spawn(0) - if(M.buckled) - shake_camera(M, 3, 1) // buckled, not a lot of shaking - else - shake_camera(M, 10, 1) // unbuckled, HOLY SHIT SHAKE THE ROOM - if(istype(M, /mob/living/carbon)) - if(!M.buckled) - M.Weaken(3) - - mining_shuttle_moving = 0 - return - -/obj/machinery/computer/mining_shuttle - name = "mining shuttle console" - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" - req_access = list(access_mining) - circuit = "/obj/item/weapon/circuitboard/mining_shuttle" - var/hacked = 0 - var/location = 0 //0 = station, 1 = mining base - -/obj/machinery/computer/mining_shuttle/attack_hand(user as mob) - if(..(user)) - return - src.add_fingerprint(usr) - var/dat - - dat = "
Mining Shuttle Control
" - - if(mining_shuttle_moving) - dat += "Location: Moving
" - else - dat += "Location: [mining_shuttle_location ? "Outpost" : "Station"]
" - - dat += "Send
" - - - user << browse("[dat]", "window=miningshuttle;size=200x150") - -/obj/machinery/computer/mining_shuttle/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - src.add_fingerprint(usr) - if(href_list["move"]) - //if(ticker.mode.name == "blob") - // if(ticker.mode:declared) - // usr << "Under directive 7-10, [station_name()] is quarantined until further notice." - // return - - if (!mining_shuttle_moving) - usr << "\blue Shuttle recieved message and will be sent shortly." - move_mining_shuttle() - else - usr << "\blue Shuttle is already moving." - - updateUsrDialog() - -/obj/machinery/computer/mining_shuttle/attackby(obj/item/weapon/W as obj, mob/user as mob) - - if (istype(W, /obj/item/weapon/card/emag)) - src.req_access = list() - hacked = 1 - usr << "You fried the consoles ID checking system. It's now available to everyone!" - else - ..() - /******************************Lantern*******************************/ /obj/item/device/flashlight/lantern diff --git a/code/modules/research/research_shuttle.dm b/code/modules/research/research_shuttle.dm deleted file mode 100644 index b0119b42aad..00000000000 --- a/code/modules/research/research_shuttle.dm +++ /dev/null @@ -1,108 +0,0 @@ - -/**********************Shuttle Computer**************************/ - -//copy paste from the mining shuttle - -var/research_shuttle_tickstomove = 10 -var/research_shuttle_moving = 0 -var/research_shuttle_location = 0 // 0 = station 13, 1 = research station - -proc/move_research_shuttle() - if(research_shuttle_moving) return - research_shuttle_moving = 1 - spawn(research_shuttle_tickstomove*10) - var/area/fromArea - var/area/toArea - if (research_shuttle_location == 1) - fromArea = locate(/area/shuttle/research/outpost) - toArea = locate(/area/shuttle/research/station) - else - fromArea = locate(/area/shuttle/research/station) - toArea = locate(/area/shuttle/research/outpost) - - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in toArea) - 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) - // NOTE: Commenting this out to avoid recreating mass driver glitch - /* - spawn(0) - AM.throw_at(E, 1, 1) - return - */ - - if(istype(T, /turf/simulated)) - del(T) - - for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area... - bug.gib() - - for(var/mob/living/simple_animal/pest in toArea) // And for the other kind of bug... - pest.gib() - - fromArea.move_contents_to(toArea) - if (research_shuttle_location) - research_shuttle_location = 0 - else - research_shuttle_location = 1 - research_shuttle_moving = 0 - return - -/obj/machinery/computer/research_shuttle - name = "Research Shuttle Console" - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" - req_access = list(access_research) - circuit = "/obj/item/weapon/circuitboard/research_shuttle" - var/hacked = 0 - var/location = 0 //0 = station, 1 = research base - -/obj/machinery/computer/research_shuttle/attack_hand(user as mob) - src.add_fingerprint(usr) - var/dat = "
Research shuttle: Send

" - - user << browse("[dat]", "window=researchshuttle;size=200x100") - -/obj/machinery/computer/research_shuttle/Topic(href, href_list) - if(..()) - return - usr.machine = src - src.add_fingerprint(usr) - if(href_list["move"]) - //if(ticker.mode.name == "blob") - // if(ticker.mode:declared) - // usr << "Under directive 7-10, [station_name()] is quarantined until further notice." - // return - - if (!research_shuttle_moving) - usr << "\blue Shuttle recieved message and will be sent shortly." - move_research_shuttle() - else - usr << "\blue Shuttle is already moving." - -/obj/machinery/computer/research_shuttle/attackby(obj/item/weapon/W as obj, mob/user as mob) - - if (istype(W, /obj/item/weapon/card/emag)) - var/obj/item/weapon/card/emag/E = W - if(E.uses) - E.uses-- - else - return - src.req_access = list() - hacked = 1 - usr << "You fried the consoles ID checking system. It's now available to everyone!" - - else - ..() diff --git a/code/modules/shuttles/engineering.dm b/code/modules/shuttles/engineering.dm index 1fa7165011f..2de57d8118f 100644 --- a/code/modules/shuttles/engineering.dm +++ b/code/modules/shuttles/engineering.dm @@ -1,108 +1,13 @@ -var/engineering_shuttle_tickstomove = 10 -var/engineering_shuttle_moving = 0 -var/engineering_shuttle_location = 1 //Starts at the construction site. - -proc/move_engineering_shuttle() - if(engineering_shuttle_moving) return - engineering_shuttle_moving = 1 - spawn(engineering_shuttle_tickstomove*10) - var/area/fromArea - var/area/toArea - if (engineering_shuttle_location == 1) - fromArea = locate(/area/shuttle/constructionsite/site) - toArea = locate(/area/shuttle/constructionsite/station) - - else - fromArea = locate(/area/shuttle/constructionsite/station) - toArea = locate(/area/shuttle/constructionsite/site) - - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in toArea) - dstturfs += T - if(T.y < throwy) - throwy = T.y - - for(var/turf/T in dstturfs) - var/turf/D = locate(T.x, throwy - 1, 1) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - if(istype(T, /turf/simulated)) - del(T) - - for(var/mob/living/carbon/bug in toArea) - bug.gib() - - for(var/mob/living/simple_animal/pest in toArea) - pest.gib() - - fromArea.move_contents_to(toArea) - if (engineering_shuttle_location) - engineering_shuttle_location = 0 - else - engineering_shuttle_location = 1 - - for(var/mob/M in toArea) - if(M.client) - spawn(0) - if(M.buckled) - shake_camera(M, 3, 1) - else - shake_camera(M, 10, 1) - if(istype(M, /mob/living/carbon)) - if(!M.buckled) - M.Weaken(3) - - engineering_shuttle_moving = 0 - return - -/obj/machinery/computer/engineering_shuttle +/obj/machinery/computer/shuttle_control/engineering name = "engineering shuttle console" icon = 'icons/obj/computer.dmi' icon_state = "shuttle" + shuttle_tag = "Engineering" req_access = list(access_engine) circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" - var/hacked = 0 - var/location = 0 + location = 1 -/obj/machinery/computer/engineering_shuttle/attack_hand(user as mob) - if(..(user)) - return - src.add_fingerprint(usr) - var/dat - - dat = "
Engineering Shuttle Control
" - - if(engineering_shuttle_moving) - dat += "Location: Moving
" - else - dat += "Location: [engineering_shuttle_location ? "Outpost" : "Station"]
" - - dat += "Send
" - - - user << browse("[dat]", "window=engineeringshuttle;size=200x150") - -/obj/machinery/computer/engineering_shuttle/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - src.add_fingerprint(usr) - if(href_list["move"]) - if (!engineering_shuttle_moving) - usr << "\blue Shuttle recieved message and will be sent shortly." - move_engineering_shuttle() - else - usr << "\blue Shuttle is already moving." - - updateUsrDialog() - -/obj/machinery/computer/engineering_shuttle/attackby(obj/item/weapon/W as obj, mob/user as mob) - - if (istype(W, /obj/item/weapon/card/emag)) - src.req_access = list() - hacked = 1 - usr << "You fried the consoles ID checking system. It's now available to everyone!" - else - ..() \ No newline at end of file +/obj/machinery/computer/shuttle_control/engineering/New() + offsite = locate(/area/shuttle/constructionsite/site) + station = locate(/area/shuttle/constructionsite/station) + ..() \ No newline at end of file diff --git a/code/modules/shuttles/mining.dm b/code/modules/shuttles/mining.dm new file mode 100644 index 00000000000..f0c8551b537 --- /dev/null +++ b/code/modules/shuttles/mining.dm @@ -0,0 +1,12 @@ +/obj/machinery/computer/shuttle_control/mining + name = "mining shuttle console" + icon = 'icons/obj/computer.dmi' + icon_state = "shuttle" + shuttle_tag = "Mining" + req_access = list(access_mining) + circuit = "/obj/item/weapon/circuitboard/mining_shuttle" + +/obj/machinery/computer/shuttle_control/mining/New() + offsite = locate(/area/shuttle/mining/outpost) + station = locate(/area/shuttle/mining/station) + ..() \ No newline at end of file diff --git a/code/modules/shuttles/research.dm b/code/modules/shuttles/research.dm new file mode 100644 index 00000000000..b75dd35fe6d --- /dev/null +++ b/code/modules/shuttles/research.dm @@ -0,0 +1,12 @@ +/obj/machinery/computer/shuttle_control/research + name = "research shuttle console" + icon = 'icons/obj/computer.dmi' + icon_state = "shuttle" + shuttle_tag = "Research" + req_access = list(access_research) + circuit = "/obj/item/weapon/circuitboard/research_shuttle" + +/obj/machinery/computer/shuttle_control/research/New() + offsite = locate(/area/shuttle/research/outpost) + station = locate(/area/shuttle/research/station) + ..() \ No newline at end of file diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm new file mode 100644 index 00000000000..e1b8a000019 --- /dev/null +++ b/code/modules/shuttles/shuttle.dm @@ -0,0 +1,126 @@ +//These lists are populated in /obj/machinery/computer/shuttle_control/New() +//TODO: Integrate these into a shuttle controller. +var/list/global/shuttle_locations = list() +var/list/global/shuttle_delays = list() +var/list/global/shuttle_moving = list() + +/obj/machinery/computer/shuttle_control + name = "shuttle console" + icon = 'icons/obj/computer.dmi' + icon_state = "shuttle" + req_access = list(access_engine) + circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" + + var/shuttle_tag // Used to coordinate data in global lists. + var/area/offsite // Off-station destination. + var/area/station // Station destination. + var/hacked = 0 // Has been emagged, no access restrictions. + var/location = 0 // The location that the shuttle begins the game at. + var/delay = 10 // The number of seconds of delay on each shuttle movement. + +/obj/machinery/computer/shuttle_control/New() + ..() + + if(!shuttle_tag) + del(src) + return + + if(isnull(shuttle_locations[shuttle_tag])) shuttle_locations[shuttle_tag] = location + if(isnull(shuttle_delays[shuttle_tag])) shuttle_delays[shuttle_tag] = delay + if(isnull(shuttle_moving[shuttle_tag])) shuttle_moving[shuttle_tag] = 0 + +/obj/machinery/computer/shuttle_control/attack_hand(user as mob) + + + if(..(user)) + return + src.add_fingerprint(user) + var/dat + + dat = "
[shuttle_tag] Shuttle Control
" + + if(shuttle_moving[shuttle_tag]) + dat += "Location: Moving
" + else + dat += "Location: [shuttle_locations[shuttle_tag] ? "Offsite" : "Station"]
" + + dat += "Send
" + + + user << browse("[dat]", "window=[shuttle_tag]shuttlecontrol;size=200x150") + +/obj/machinery/computer/shuttle_control/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + src.add_fingerprint(usr) + if(href_list["move"]) + if (!shuttle_moving[shuttle_tag]) + usr << "\blue [shuttle_tag] Shuttle recieved message and will be sent shortly." + move_shuttle(shuttle_tag,offsite,station) + else + usr << "\blue [shuttle_tag] Shuttle is already moving." + + updateUsrDialog() + +/obj/machinery/computer/shuttle_control/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (istype(W, /obj/item/weapon/card/emag)) + src.req_access = list() + hacked = 1 + usr << "You short out the console's ID checking system. It's now available to everyone!" + else + ..() + +proc/move_shuttle(var/shuttle_tag,var/area/offsite,var/area/station) + + if(!shuttle_tag || isnull(shuttle_locations[shuttle_tag])) + return + + if(shuttle_moving[shuttle_tag] == 1) return + shuttle_moving[shuttle_tag] = 1 + + spawn(shuttle_delays[shuttle_tag]*10) + + var/list/dstturfs = list() + var/throwy = world.maxy + + var/area/area_going_to = (shuttle_locations[shuttle_tag] == 1 ? station : offsite) + var/area/area_coming_from = (shuttle_locations[shuttle_tag] == 1 ? offsite : station) + + for(var/turf/T in area_going_to) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + for(var/turf/T in dstturfs) + var/turf/D = locate(T.x, throwy - 1, 1) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + del(T) + + for(var/mob/living/carbon/bug in area_going_to) + bug.gib() + + for(var/mob/living/simple_animal/pest in area_going_to) + pest.gib() + + area_coming_from.move_contents_to(area_going_to) + + shuttle_locations[shuttle_tag] = !shuttle_locations[shuttle_tag] + + for(var/mob/M in area_going_to) + if(M.client) + spawn(0) + if(M.buckled) + shake_camera(M, 3, 1) + else + shake_camera(M, 10, 1) + if(istype(M, /mob/living/carbon)) + if(!M.buckled) + M.Weaken(3) + + shuttle_moving[shuttle_tag] = 0 + + return \ No newline at end of file From 2e9041cd9fa7b761f55793f5306b5175b78634ed Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 15:26:51 +0930 Subject: [PATCH 02/10] Updated consoles on the map for new shuttle console path. --- maps/tgstation2.dmm | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index c8fc45884da..a3777191253 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -2338,7 +2338,7 @@ "aSX" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) "aSY" = (/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge) "aSZ" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/bridge) -"aTa" = (/obj/machinery/computer/mining_shuttle,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/bridge) +"aTa" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/bridge) "aTb" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/bridge) "aTc" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/bridge) "aTd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/bridge) @@ -3682,7 +3682,7 @@ "bsP" = (/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating,/area/storage/emergency) "bsQ" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/space,/area/shuttle/research/station) "bsR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/shuttle/research/station) -"bsS" = (/obj/machinery/computer/research_shuttle,/turf/simulated/shuttle/floor,/area/shuttle/research/station) +"bsS" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor{dir = 9; icon_state = "brown"},/area/quartermaster/miningdock) "bsT" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor2"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/quartermaster/storage) "bsU" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/floor/plating,/area/quartermaster/storage) "bsV" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/quartermaster/storage) @@ -4163,7 +4163,7 @@ "bCc" = (/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/crew_quarters/hor) "bCd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bCe" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bCf" = (/obj/machinery/computer/research_shuttle,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"}) +"bCf" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bCg" = (/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 32},/turf/space,/area) "bCh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor,/area/quartermaster/miningdock) "bCi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_b) @@ -4383,11 +4383,11 @@ "bGo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bGp" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining/station) "bGq" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) -"bGr" = (/obj/machinery/computer/mining_shuttle,/turf/simulated/shuttle/floor,/area/shuttle/mining/station) +"bGr" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/shuttle/floor,/area/shuttle/research/station) "bGs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock) "bGt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock) "bGu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock) -"bGv" = (/obj/machinery/computer/mining_shuttle,/turf/simulated/floor{dir = 9; icon_state = "brown"},/area/quartermaster/miningdock) +"bGv" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"}) "bGw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/quartermaster/miningdock) "bGx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/rnd/mixing) "bGy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/quartermaster/miningdock) @@ -8408,7 +8408,7 @@ "dfJ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small,/turf/simulated/floor{icon_state = "freezerfloor"},/area/djstation) "dfK" = (/obj/structure/toilet{pixel_y = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/djstation) "dfL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) -"dfM" = (/obj/machinery/computer/engineering_shuttle,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Engineering Shuttle Access"}) +"dfM" = (/obj/machinery/computer/shuttle_control/engineering,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Engineering Shuttle Access"}) "dfN" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Engineering Shuttle Access"}) "dfO" = (/turf/simulated/floor/airless,/area) "dfP" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Engineering Shuttle Access"}) @@ -8464,7 +8464,7 @@ "dgN" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) "dgO" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/wall,/area/constructionsite/hallway/aft) "dgP" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload Access"; req_access_txt = "16"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) -"dgQ" = (/obj/machinery/computer/engineering_shuttle,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) +"dgQ" = (/obj/machinery/computer/shuttle_control/engineering,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) "dgR" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/djstation) "dgS" = (/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/djstation) "dgT" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload"; req_access_txt = "16"},/turf/simulated/floor/plating/airless,/area/constructionsite/ai) @@ -8536,7 +8536,7 @@ "dih" = (/turf/simulated/shuttle/wall{tag = "icon-swall2"; icon_state = "swall2"; dir = 2},/area/shuttle/constructionsite/site) "dii" = (/turf/simulated/shuttle/wall,/area/shuttle/constructionsite/site) "dij" = (/turf/simulated/shuttle/wall{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/area/shuttle/constructionsite/site) -"dik" = (/obj/machinery/computer/engineering_shuttle,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/site) +"dik" = (/obj/machinery/computer/shuttle_control/engineering,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/site) "dil" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/shuttle/constructionsite/site) "dim" = (/turf/simulated/shuttle/wall{icon_state = "swall1"; dir = 2},/area/shuttle/constructionsite/site) "din" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/site) @@ -8591,6 +8591,8 @@ "djk" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite) "djl" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating/airless,/area/constructionsite/engineering) "djm" = (/obj/structure/lattice,/turf/space,/area/constructionsite/engineering) +"djn" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/floor{icon_state = "bot"},/area/research_outpost/entry) +"djo" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor,/area/mine/production) "djC" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) "dqx" = (/turf/simulated/floor/plating/airless/asteroid,/area) "dqT" = (/turf/simulated/mineral,/area/mine/unexplored) @@ -8996,7 +8998,6 @@ "dyH" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) "dyI" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating,/area/mine/abandoned) "dyJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry) -"dyK" = (/obj/machinery/computer/research_shuttle,/turf/simulated/floor{icon_state = "bot"},/area/research_outpost/entry) "dyL" = (/turf/simulated/floor,/area/research_outpost/entry) "dyM" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/research_outpost/hallway) "dyN" = (/turf/simulated/floor,/area/medical/virologyaccess) @@ -9839,7 +9840,6 @@ "dOS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/mine/living_quarters) "dOT" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/mine/production) "dOU" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) -"dOV" = (/obj/machinery/computer/mining_shuttle,/turf/simulated/floor,/area/mine/production) "dOW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate,/turf/simulated/floor,/area/mine/production) "dOX" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dOY" = (/turf/simulated/wall/r_wall,/area/mine/production) @@ -10640,17 +10640,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQbmRavtaYnawYawYawYaPyaxTaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbncbndbnebWebWdbWdbWdbWabWcbVYbUYbVcbWibWnbVgbWfbWfbWhbWgbWqbWpbVobWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbWmbaDdUZaIObDbcgQcglcgPdVadVbdUUbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVcdAIdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbNdbVXbVzbVsbUGbVAbVVbNdbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarbVGbVHbaraUnboHboIbVEaUnboLboMboMbNsboMbVFbUEboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbUDbnFbpcaIObDbbgUcqlcqndUQdURdUNbixdUOdUPdUJdUKdULbVWdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbNdbUPbUJbUIbUGbNEbUFbNdbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObMdbpObMdbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaYnaYnbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfbqgbqhbqibarbqjbPhbqkbqlbtfbffbqnbqoaUnaUnboMbqpbVdbqrbXdbTrboMbTtbVfbVhbqxbqybqzbqybqAbVibVjbTxbVkbqEbfubqFbaDbqGbnFbTubnFbpcaIObDbbgUdUjdUkdUhdUidUgbixdUedUfdUcdUddUadUbbZzdUsdUrdUqdUpbPZdUodUnbPZbPZbPZbPZdUmdUlbPZbPZbktdTZbktcggbiSdTXbnYdTYbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbVlbNdbUAbUwbUvbUzbNEbTwbNdbTIbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbNMbrLbPPbrNbPObNLboMaafbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbNNaUnbpcbNxcoNbNybNzbNAbNCbPKbIibixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbIrbQIbQHbQSbQJbQVbPZbJqbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbrhbsIbsIbPHbrhbNDbNJbNIbNHbNEbNKbNdbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbsSbMdaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbNMbrLbPPbrNbPObNLboMaafbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbNNaUnbpcbNxcoNbNybNzbNAbNCbPKbIibixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbIrbQIbQHbQSbQJbQVbPZbJqbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbrhbsIbsIbPHbrhbNDbNJbNIbNHbNEbNKbNdbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbGrbMdaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbsTbsUbsTbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbcSbsZbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbNwboMaafbrUbrUbIgbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvbNubMkbOJbOHbOHbMkbOMbONbOKbOLbPfbixbOUbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbNtbPAbPAbPBbPCbPDbPDbPDbtZbHWbkBbubbkCbkCbucbPgbkCbuebkIbufbugbORbkIbMsbMvbMucnUbCYbrhbNdbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbMeboMbzCbOpbOobOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbMfawGbvcaIOaIOawGbMmbMnbMrbMBbMSbMTbMUbMVbMLbMPcawbMRbNabMZbNcbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbWzbvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJcarbXucfDcjwclmclmclmcnsbvWbvXbpObMdbvYbMdbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbMbboMbwnbHhbwpbNBbNgbNjbNmbNnbwubGIbwwbNqbGCbwybwzbwAbwBbwBbMabINbLSbLUaIObgUbRqbLRbLNbLPbMcbixbLYbLZbLDbLXcbObLWbFNbLDbLAbLzbPZbPZbPZbDcbDcbHfbIIbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbkIbkIbkIbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobMpbMpbMqbxmbojbxnbxobxpbMQbMNbTibTGbMpbSibMpbUcbkIbupbuqburbxtbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbSWbTbbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbRJbRzbRHbRGbRFbREbSsbStbSkbSrbSebShbRUbSdbybbycbycbydbyebyfbQwbtvcbPbDNbSHbgUbixcbQcciccjcsXcsZcaWcbabPucbccbebLWcdabPucdkbWubRSceEceJceFbDccckccFccEbAqbSCbTsbQObRtbAybAqbRsbRwbRxbRubRvbRibRibQTbRebRibRrbRmbRpbRCbRBbRibRybRDbSPbyPbyQbSLbySbrhbrhbrhbyScuRctebyVbupburbkIbojbvVbyWbyXbyYbyZbzabzbaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbzcbzdbzcbzebzfbzgbzgbzgbzgbzgbzhbPLblpbuvbzjbalbzkbOXbzmbSbbzoboEbRZbzqbzrbarbarbzsaIObztbzubtgboMbzvbzwbzxbwjbQEboMbzzbSfbQDbzCbQubzEbQvbuTbQtbzIbzJbNqbzKbzLbzMbzNbyebyfbQwbtvbpcbDNaIObXvbXJbXLbLTbXwbEpbXtbXrbXsbLDbLDbLDcsocrobPZbWybWubXqbXpbXobOSbDcbNvbVRbVQbWtbRcbQUbQKbRjbQabYcbQsbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbQnbQnbQnbQqbQobQrbAvbAwbAxbRTbAzbAAbABbACbySbDTcpvbAFaafaafbkIbAGbvVbyXbyXbvWbAHbAIbAJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIObAZbBaaUnboMawGawGawGawGbQjboMbzCbQkbzCbRAbQlbQmbQlbuTbuTbuTbuTbNqawGawGawGawGawGbtvbPobtvbpcbVabuDbVbbUSbUTbUUbUZbUdbUfbUgbUqbTFcpzbUbcqPbVKbVJbVMbVLbVxbVwbVIbVCbQcbVpbVvbVtbVmbPTbQbbQabOQbPEbAqbSKbSJbzCbrhbrhbrhbzCbQibzCbzCbEzbQfbQhblzblzbBUbKjbOlbBWbAwbBXbQZbBZbCabCbbCcbySbDTcpvbCdaaaaaabkIbCebCfbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIObAZbBaaUnboMawGawGawGawGbQjboMbzCbQkbzCbRAbQlbQmbQlbuTbuTbuTbuTbNqawGawGawGawGawGbtvbPobtvbpcbVabuDbVbbUSbUTbUUbUZbUdbUfbUgbUqbTFcpzbUbcqPbVKbVJbVMbVLbVxbVwbVIbVCbQcbVpbVvbVtbVmbPTbQbbQabOQbPEbAqbSKbSJbzCbrhbrhbrhbzCbQibzCbzCbEzbQfbQhblzblzbBUbKjbOlbBWbAwbBXbQZbBZbCabCbbCcbySbDTcpvbCdaaaaaabkIbCebGvbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbNpbQRbCkbAUbQQbCmbCnbCobAUbffaIObQMbQLbQNbQLbPebPdbPFbPzbPJbPIbPNbQPaXNbCzbCAbCBbCCbCDbCEaIOaMibDbaMjaNsbCubCGbCHaCzbPcaIObpcbDNbSHbymbymbSBbSBbSBbymbymbSmbSxbRXbRYbScbSgbRYbRXbRWbRVbRSbRRbRQbRPbDcbRObRNbRMbRIbOtbOrbAybAgbNrbAqbRkbCTbzCbPabPbbFRbOTbOWbOZbOqbEzbOObOPbIXblzblzbQdbOlbBWbDubDvbPXbDxbDybDzbDAbySbDTcoObyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDmbDFbDGbDnbDIbDlbDKbAUbffbDLbDiaIOaIOaIObDbaNsbCubCGbDNaIOaIObDdaIOaIObDPbDQbDRaIOaIOaIOaIObDbaIOaNsbCubCGbDSaXNbDVaXNbFrbELbDZbymbEbbBxbBxbBxbEebEdbEgbEfbEibEhbzGbEjbEJbEKbCZbDabDcbDebDfbDgbDcbDhbDkbDwbDEbAgbCQbCRbAgbAgbAqbksbCTbzCbEnbEmbEsbErbEqbEobEBbEzbEybEtbDXbDXblzbDqbDYbECbEDbEEbEFbDzbDtbDBbEIbySbDTbEHbFMbEQbFZbFSbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObEObEPbtrbtrbjmbjmbjmbjmbEMaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESbBRbESbEUaaaaaaaaabASbASbEVbEWbDmbEWbEXbEYbEZbFdbFbbAUbFcbffbEwbFebuDbFfbFgbFsbFhbFibuEaIObFjbEubEvbEvbFaaIObDSaXNaXNaXNaXNbDWbFnbFobFpbFqbFrbFybFCbFAbuDbuEaIObymbFmbBxbFlbETbBxbEdbFubFtbFzbFxbFwbFvbFEbFFbFBbFDbFKbFQbFGbDcbDcbHfbHfbHfbAqbEGbExbEAbElbEkbAqbksbCTbzCbFJbFHbFRbFPbFUbFTbFVbEzbFWbEtbDXbDXbkIbFIbFXbFLbGebyHbFObFYbGfbGRbGWbySbHabxAbxAbxAbHFbHjbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGbbmLbGabmLbtrbjmbjmbjubmybjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbGrbGqbGpbGsbGtbGubASbGvbEWbGwbBbbGybGzbGAbGAbBcbuSbAUbGDbGDbBibGDaUnaUnaUnaUnaUnaUnaUnbGFbGFbGFbGFaUnbBgbBfbBeaUnbGHbGHbGHbBhbzWaUnaUnaUnaUnbAfbAdbGKaIUaKtbzYbymbzXbBxbBxbBxbAebAcbApbAobzGbzZbAbbAabvxbzGbzObzPbyzbyAbyCbvwbzTbzUbEcbAgbAgbAgbAtbAybATbAgbAqbksbhJbhJbhJbhJbhJbhJbhJbhJbhJbhJbBPbBObAVbAVbkIbBnbAubHqbrhbjcbjcbjcbBdbBqbADbjcbjcbjcbjcbjcbgqbgpbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbxVbmLbmLbtlbjmbjmbjubjubBQbjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbCfbGqbGpbGsbGtbGubASbsSbEWbGwbBbbGybGzbGAbGAbBcbuSbAUbGDbGDbBibGDaUnaUnaUnaUnaUnaUnaUnbGFbGFbGFbGFaUnbBgbBfbBeaUnbGHbGHbGHbBhbzWaUnaUnaUnaUnbAfbAdbGKaIUaKtbzYbymbzXbBxbBxbBxbAebAcbApbAobzGbzZbAbbAabvxbzGbzObzPbyzbyAbyCbvwbzTbzUbEcbAgbAgbAgbAtbAybATbAgbAqbksbhJbhJbhJbhJbhJbhJbhJbhJbhJbhJbBPbBObAVbAVbkIbBnbAubHqbrhbjcbjcbjcbBdbBqbADbjcbjcbjcbjcbjcbgqbgpbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbxVbmLbmLbtlbjmbjmbjubjubBQbjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBRbHBbHCbHBbBRbHDbHEbBNbASbHGbHHbEWbHIbHJbAUbHKbHLbBrbHNbAUbHObHObBBbGDaaaaaaaaaaaabGFbBvbHRbvAbHTbHUbHVbBSbBVbHXbBYbBSbHZbCjbCpbClbBGbBDbBKbBJbBMbBTbCtbzlbBobGKbGKbymbBmbBlbBlbBkbymbBCbBybBwbBubBtbBsbBpbCsbCybCqbCrbBHbBIbBEbBFbCNbCObFkbCIbBLbCFbBjbAgbAgbCJbAqbksbhJbCvbCvbCvbCLbCKbCvbCvbCvbhJbCxbCwbCXbCXbkIbwxbCMbBWbCYbCVbDHbDJbDMbDObDjbDpbDrbDsbDUbjcbIhbCWbyVbmNbmNbmNbmNbmNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabxWbjmbxVbjmbjmbjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbJdbJebEWbEWbJfbJgbEWbEWbJhbJibAUbAUbAUbJRbAUbAUbJbbJlbJDbJnaaabJCbJpbJBbJrbJsbHVbJtbJubJPbJKbIYbJybJxbJwbIYbCSbJobJEbJFbJGbJHbJIbGHbGHbJJbIZbDobJQbJNbJUbJSbJZbJWbJWbJWbIDbICbJabIFbzGbJjbJMbJLbIxbzGbIybIzbEcbIAbIBbIBbIubIvbEcbAqbIwbAqbAqbAqbAqbAqbAqbksbhJbKubKtbCvbCvbCvbCvbCvbKsbhJbKqbEtbKibKiblzbKjbKpbKrbKobKdbKdbKdbKdbKfbIWbIWbKgbKhbJVbjcbMtbJXbJAbJzbJTbJObJvbJcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtrbjmbprbpsbpsbjubjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBRbHCbHCbHCbBRbKKbKLbKMbKNbKObEWbKPbLsbLkbLibKVbKVbKZbKWbKVbKDbKEbKQbKYaaabGLbLabLbbLcbLdbHVbLebLfbLgbLhbBSbKFbKvbKRbBSbLlbLmbLnbLobLpbLqbLrbKUboNbKSbKGbGKbPybPybKnbymbFmbBxbFlbETbBxbHcbKcbFtbKmbKlbKkbKebKBbKCbGXbGYbLxbIAbIBbIBbIubKxbEcbKwbKzbKAbmobKybKbbKabkybksbhJbCvbLBbCvbCvbCvbCvbCvbCvbhJbLwbEtbHzbHzblzbLObojbBWbLMbIWbIWbLCbLFbLHbLIbIWbLKbLLbLvbLubLtbMCbKXbKTbKJbKIbJvbKHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjmbjmbkNbjubjubjubjubjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11596,7 +11596,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdwQdwRdwSdvcdwTdwUdvcdvcdvcdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadrIdvddvddvddvddvddvddvddwVdwqdwrdwsdymdwWdwXdwvdwYdwZdrDdyldxNdrDdxcdtJdtJdtJdtJdxddtJdxMdxLdvzdDwdxhdxidxjdxkdxldxmdxndxnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdxodxpdxqdxrdxsdxtdszduBdxudvcdxvdxwdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadrIdvddvddvddvddvddvddvddrTdwqdwrdwsdymdxxdxydwvdxzdxAdrDdzkdZxdZAdxEdxFdxGdxHdrDdxIdxJdyZdDCdzgdzadxOdxPdxQdxRdxldwPdwPdwPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdxSdxTdxpdxUdxVdxWdxXdxYdxudxZdxwdyadxvdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadybdycdyddyedyfdycdyddygdyhdyidyjdykdyMdykdrDdrDdrDdrDdrDdySdYXdZwdxEdrEdxGdzQdrDdyqdyrdyQdyPdYVdYxdywdyxdyydyzdyAdyBdrDdyCdtYdrsdrsdrsdrsdrsdrsdrtdyDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyEdxSdyFdxSdxqdxqdwTdyGdxVdvcdwodyHdvcdxwdyIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadyJdyKdyLdyLdAUdATdATdARdASdAXdATeakdAWdyTdyUdyVdyWdyXdAGeaidZYdzbdzcdzddzedzfdrDdzhdzidAQdAMdrDdvzdzldvzdrDdrDdzmdzndzodzpdzqdzrdzrdzsdzrdzrdzrdztdrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyEdxSdyFdxSdxqdxqdwTdyGdxVdvcdwodyHdvcdxwdyIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadyJdjndyLdyLdAUdATdATdARdASdAXdATeakdAWdyTdyUdyVdyWdyXdAGeaidZYdzbdzcdzddzedzfdrDdzhdzidAQdAMdrDdvzdzldvzdrDdrDdzmdzndzodzpdzqdzrdzrdzsdzrdzrdzrdztdrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdzudzvdxqdzwdzxdxqdvIdzydxWdzzdzAdzBdvcdvcdvcdvcdvcdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaadzCdzDdyLdyLdzEdyLdzFdzGdAjdzIdzJdZXdzLdzMdyUdAkdAldAcdAbdAadzZdzYdzXdzWdzPdAidAhdAgdzPdAfdAedZIdAddzRdzSdzOdZCdzWdzPdzHdzNdzUdDHdzTdAmdAndAodApdzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdAqdArdAsdxqdzxdAtdxUdAudxVdAvdvcdAwdAxdvcdAydxudAzdAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaadABdACdyLdyLdADdyLdAEdAFdBDdAHdBFeaBdAKdDXdyUdBfdANdAOdAPdBHdBGdBQdBPdBTdBSdBWdBVdBZdBYdBWdCpdBVdCrdBWdBVdCseaCeaGdCBdCCdCEdCFdCIdDfdBldBmdBmdBndzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafdsadsadvcdxtdBodBpdBqdAsdBrdBsdxWdBtdszduBdBudvcdAydwodxudAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdBvdBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdBwdBxaaaaaaaaadBydBzdyLdBAdAYdAZdDTdBbdBcdBddBeealdBJdBKdyUeamdyVdBLdBMdBMdrDdrDeatdBOdBidBkdBOdBRdBjdBCdBRdBUdBBdBgdBUdrDeaoeapdvZdCadzrdCbdCcdzrdCddBmdBmdCedzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11726,7 +11726,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadBvdBvdBvdBvdCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdBvdBvdBvdCidHUdCidCidIadIcdIcdIkdIldIcdIcdIidCidCidCidCidCidCidCidBvdqTdqTdqTdsadsadsadsadsadqTdqTdqTdBvdBvdBvdBvdCidCidCidCidCidCidCidCidCidIadIcdIcdIbdCidCidCidCidCidCidIPdIPdIPdIPdIPdIPdIPdFpdOrdOsdOtdCidCidCidCidCiaaaaaaaaaaafaaaaaaaaaaafdOadOadOadOadOadOudLIdOvdOwdLadOxdNGdOydOzdOAdOBdOCdODdOEdOqdKFdCidCidCidCidBvdBvdqTdqTdsadsadqTdqTdqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadqTdBvdBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadqTdqTdqTdqTdqTdBvdBvdDQdBvdCidCidCidCidHEdHGdCidCidCidCidHUdCidBvdBvdBvdBvdBvdqTdqTdsadsadsadsadsadsadsadqTdqTdqTdqTdqTdBvdBvdBvdBvdBvdBvdBvdBvdCidCidCidCidCidHSdCidCidCidCidCidCidCidCidHEdYwdOGdOGdOGdOGdOHdHGdCidCidCidCidCidCiaafaafaafaafaafaafaafaafdOadOadOadOadOadOIdLadOJdLadLadOxdNGdLadLadOKdLadLadQPdOMdONdKFdCidCidCidCidBvdqTdqTdqTdsadsadqTdqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdBvdBvdCidCidCidCidCidCidCidCidCidDQdBvdBvdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdBvdBvdCidCidCidCidHSdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaafdOadOadOadOadOadKGdLIdOOdOPdLadOxdRodQbdQbdRldQbdQbdRkdOTdOUdKFdCidCidCidIddDQdqTdqTdqTdsadqTdqTdqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadqTdsadsadqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdBvdBvdBvdCidCidCidBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdBvdCidCidCidCidIadIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIbdCidCidCidCidCidCiaaaaaaaaaaaaaaaaafdOadOadOadOadOaaafaaadNpdKHdOVdOxdNGdLadLadOWdOzdLadLadOpdOXdKFdCidCidCidCidBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadqTdsadsadqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdBvdBvdBvdCidCidCidBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdBvdCidCidCidCidIadIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIcdIbdCidCidCidCidCidCiaaaaaaaaaaaaaaaaafdOadOadOadOadOaaafaaadNpdKHdjodOxdNGdLadLadOWdOzdLadLadOpdOXdKFdCidCidCidCidBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdBvdBvdBvdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidHSdCidIedHJdCidCidCidGTdGTaaaaaaaaaaafdOadOadOadOadOaaafaaaaaadOYdOYdOZdRpdQbdPbdPcdPddPedPfdOMdOqdKFdCidCidCidCidBvdqTdqTdqTdqTdsadqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdBvdBvdBvdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidIadIcdIkdIldIcdIcdIcdPgdPhdPidPidPidPidPidPidPidPidPidPidPidPidPjdPkdPldLadLadLadPmdPndPodPpdPqdPrdKFdCidCidBvdBvdBvdqTdqTdsadsadsadqTdsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdBvdBvdBvdCidCidCidCidCidCidCidBvdBvdCidCidCidCidCidCidCidCidCidHEdHGdCidCidCidGTdGTaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadOYdOYdKFdKGdKHdKFdKFdKFdKFdKFdKFdKFdKFdCidCidBvdqTdqTdqTdsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 405055eda8f8d357ba38fa52b8229a6f58a83eda Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 15:40:40 +0930 Subject: [PATCH 03/10] Some cleanup stuff for prior commits. --- code/modules/admin/topic.dm | 2 +- code/modules/shuttles/engineering.dm | 4 +--- code/modules/shuttles/mining.dm | 2 -- code/modules/shuttles/research.dm | 2 -- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d2458f7d4a6..352ad23e899 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1923,7 +1923,7 @@ //TODO: Generalize admin shuttles, make 'Move Shuttle' adminverb. if("moveminingshuttle") - if(shuttle_moving["Mining"] || shuttle_moving["Mining"] == null) + if(shuttle_moving["Mining"] || isnull(shuttle_moving["Mining"])) return feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","ShM") diff --git a/code/modules/shuttles/engineering.dm b/code/modules/shuttles/engineering.dm index 2de57d8118f..570229afc15 100644 --- a/code/modules/shuttles/engineering.dm +++ b/code/modules/shuttles/engineering.dm @@ -1,11 +1,9 @@ /obj/machinery/computer/shuttle_control/engineering name = "engineering shuttle console" - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" shuttle_tag = "Engineering" req_access = list(access_engine) circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" - location = 1 + location = 1 //Starts offstation. /obj/machinery/computer/shuttle_control/engineering/New() offsite = locate(/area/shuttle/constructionsite/site) diff --git a/code/modules/shuttles/mining.dm b/code/modules/shuttles/mining.dm index f0c8551b537..ecd3e40ac89 100644 --- a/code/modules/shuttles/mining.dm +++ b/code/modules/shuttles/mining.dm @@ -1,7 +1,5 @@ /obj/machinery/computer/shuttle_control/mining name = "mining shuttle console" - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" shuttle_tag = "Mining" req_access = list(access_mining) circuit = "/obj/item/weapon/circuitboard/mining_shuttle" diff --git a/code/modules/shuttles/research.dm b/code/modules/shuttles/research.dm index b75dd35fe6d..fa5ebe749f9 100644 --- a/code/modules/shuttles/research.dm +++ b/code/modules/shuttles/research.dm @@ -1,7 +1,5 @@ /obj/machinery/computer/shuttle_control/research name = "research shuttle console" - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" shuttle_tag = "Research" req_access = list(access_research) circuit = "/obj/item/weapon/circuitboard/research_shuttle" From c01b124ac700eaa3faeeb7a6802e4d902e702b7d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 18:06:05 +0930 Subject: [PATCH 04/10] Added a 'controller' for shuttles (really just a data container), fixed up the admin shuttle verbs into one general verb, changed shuttles to use controller instead of populating lists at spawn. --- code/controllers/master_controller.dm | 6 +- code/global.dm | 1 - code/modules/admin/admin.dm | 70 +------------------ code/modules/admin/topic.dm | 37 ++++------ code/modules/shuttles/engineering.dm | 8 +-- code/modules/shuttles/mining.dm | 7 +- code/modules/shuttles/research.dm | 7 +- code/modules/shuttles/shuttle.dm | 98 ++++++++++++++++++--------- 8 files changed, 86 insertions(+), 148 deletions(-) diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 34b4a045f79..eff3a8d62e2 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -65,6 +65,8 @@ datum/controller/game_controller/proc/setup() if(!ticker) ticker = new /datum/controller/gameticker() + if(!shuttles) shuttles = new /datum/shuttle_controller() + setup_objects() setupgenetics() setupfactions() @@ -280,7 +282,7 @@ datum/controller/game_controller/proc/process_machines_power() if(M) if(M.use_power) M.auto_use_power() - + if(A.apc.len && A.master == A) i++ continue @@ -295,7 +297,7 @@ datum/controller/game_controller/proc/process_machines_rebuild() A.powerupdate += 1 active_areas |= A rebuild_active_areas = 0 - + datum/controller/game_controller/proc/process_objects() var/i = 1 diff --git a/code/global.dm b/code/global.dm index 12de02408dd..0bfc9e5890b 100644 --- a/code/global.dm +++ b/code/global.dm @@ -109,7 +109,6 @@ var/list/bombers = list( ) var/list/admin_log = list ( ) var/list/lastsignalers = list( ) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" var/list/lawchanges = list( ) //Stores who uploaded laws to which silicon-based lifeform, and what the law was -var/list/shuttles = list( ) var/list/reg_dna = list( ) // list/traitobj = list( ) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 54b4c2c2fbf..23815ad44a9 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -637,10 +637,7 @@ var/global/floorIsLava = 0 Make all items look like guns
Japanese Animes Mode
Egalitarian Station Mode
- Move Administration Shuttle
- Move Ferry
- Move Alien Dinghy
- Move Mining Shuttle
+ Move a shuttle
Break all lights
Fix all lights
Best Friend AI
@@ -1127,67 +1124,4 @@ proc/get_options_bar(whom, detail = 2, name = 0, link = 1) // //ALL DONE //********************************************************************************************************* -//TO-DO: -// -// - - -/**********************Administration Shuttle**************************/ - -var/admin_shuttle_location = 0 // 0 = centcom 13, 1 = station - -proc/move_admin_shuttle() - var/area/fromArea - var/area/toArea - if (admin_shuttle_location == 1) - fromArea = locate(/area/shuttle/administration/station) - toArea = locate(/area/shuttle/administration/centcom) - else - fromArea = locate(/area/shuttle/administration/centcom) - toArea = locate(/area/shuttle/administration/station) - fromArea.move_contents_to(toArea) - if (admin_shuttle_location) - admin_shuttle_location = 0 - else - admin_shuttle_location = 1 - return - -/**********************Centcom Ferry**************************/ - -var/ferry_location = 0 // 0 = centcom , 1 = station - -proc/move_ferry() - var/area/fromArea - var/area/toArea - if (ferry_location == 1) - fromArea = locate(/area/shuttle/transport1/station) - toArea = locate(/area/shuttle/transport1/centcom) - else - fromArea = locate(/area/shuttle/transport1/centcom) - toArea = locate(/area/shuttle/transport1/station) - fromArea.move_contents_to(toArea) - if (ferry_location) - ferry_location = 0 - else - ferry_location = 1 - return - -/**********************Alien ship**************************/ - -var/alien_ship_location = 1 // 0 = base , 1 = mine - -proc/move_alien_ship() - var/area/fromArea - var/area/toArea - if (alien_ship_location == 1) - fromArea = locate(/area/shuttle/alien/mine) - toArea = locate(/area/shuttle/alien/base) - else - fromArea = locate(/area/shuttle/alien/base) - toArea = locate(/area/shuttle/alien/mine) - fromArea.move_contents_to(toArea) - if (alien_ship_location) - alien_ship_location = 0 - else - alien_ship_location = 1 - return +// \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 352ad23e899..2108faca763 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1921,33 +1921,20 @@ message_admins("\blue [key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1) log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]") - //TODO: Generalize admin shuttles, make 'Move Shuttle' adminverb. - if("moveminingshuttle") - if(shuttle_moving["Mining"] || isnull(shuttle_moving["Mining"])) - return - feedback_inc("admin_secrets_fun_used",1) - feedback_add_details("admin_secrets_fun_used","ShM") - move_shuttle("Mining",locate(/area/shuttle/mining/outpost),locate(/area/shuttle/mining/station)) - message_admins("\blue [key_name_admin(usr)] moved mining shuttle", 1) - log_admin("[key_name(usr)] moved the mining shuttle") - if("moveadminshuttle") + if("moveshuttle") + + if(!shuttles) return // Something is very wrong, the shuttle controller has not been created. + feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","ShA") - move_admin_shuttle() - message_admins("\blue [key_name_admin(usr)] moved the centcom administration shuttle", 1) - log_admin("[key_name(usr)] moved the centcom administration shuttle") - if("moveferry") - feedback_inc("admin_secrets_fun_used",1) - feedback_add_details("admin_secrets_fun_used","ShF") - move_ferry() - message_admins("\blue [key_name_admin(usr)] moved the centcom ferry", 1) - log_admin("[key_name(usr)] moved the centcom ferry") - if("movealienship") - feedback_inc("admin_secrets_fun_used",1) - feedback_add_details("admin_secrets_fun_used","ShX") - move_alien_ship() - message_admins("\blue [key_name_admin(usr)] moved the alien dinghy", 1) - log_admin("[key_name(usr)] moved the alien dinghy") + + var/shuttle_tag = input("Which shuttle do you want to call?") as null|anything in shuttles.locations + + if(shuttle_tag && !shuttles.moving[shuttle_tag]) + move_shuttle(shuttle_tag) + message_admins("\blue [key_name_admin(usr)] moved the [shuttle_tag] shuttle", 1) + log_admin("[key_name(usr)] moved the [shuttle_tag] shuttle") + if("togglebombcap") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","BC") diff --git a/code/modules/shuttles/engineering.dm b/code/modules/shuttles/engineering.dm index 570229afc15..9a4158c5bb2 100644 --- a/code/modules/shuttles/engineering.dm +++ b/code/modules/shuttles/engineering.dm @@ -2,10 +2,4 @@ name = "engineering shuttle console" shuttle_tag = "Engineering" req_access = list(access_engine) - circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" - location = 1 //Starts offstation. - -/obj/machinery/computer/shuttle_control/engineering/New() - offsite = locate(/area/shuttle/constructionsite/site) - station = locate(/area/shuttle/constructionsite/station) - ..() \ No newline at end of file + circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/mining.dm b/code/modules/shuttles/mining.dm index ecd3e40ac89..bb25028e78c 100644 --- a/code/modules/shuttles/mining.dm +++ b/code/modules/shuttles/mining.dm @@ -2,9 +2,4 @@ name = "mining shuttle console" shuttle_tag = "Mining" req_access = list(access_mining) - circuit = "/obj/item/weapon/circuitboard/mining_shuttle" - -/obj/machinery/computer/shuttle_control/mining/New() - offsite = locate(/area/shuttle/mining/outpost) - station = locate(/area/shuttle/mining/station) - ..() \ No newline at end of file + circuit = "/obj/item/weapon/circuitboard/mining_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/research.dm b/code/modules/shuttles/research.dm index fa5ebe749f9..729c10f0906 100644 --- a/code/modules/shuttles/research.dm +++ b/code/modules/shuttles/research.dm @@ -2,9 +2,4 @@ name = "research shuttle console" shuttle_tag = "Research" req_access = list(access_research) - circuit = "/obj/item/weapon/circuitboard/research_shuttle" - -/obj/machinery/computer/shuttle_control/research/New() - offsite = locate(/area/shuttle/research/outpost) - station = locate(/area/shuttle/research/station) - ..() \ No newline at end of file + circuit = "/obj/item/weapon/circuitboard/research_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index e1b8a000019..17d71b47016 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -1,8 +1,56 @@ //These lists are populated in /obj/machinery/computer/shuttle_control/New() -//TODO: Integrate these into a shuttle controller. -var/list/global/shuttle_locations = list() -var/list/global/shuttle_delays = list() -var/list/global/shuttle_moving = list() +//Shuttle controller is instantiated in master_controller.dm. + +var/global/datum/shuttle_controller/shuttles + +/datum/shuttle_controller //This isn't really a controller... + var/list/locations = list() + var/list/delays = list() + var/list/moving = list() + var/list/areas_offsite = list() + var/list/areas_station = list() + +/datum/shuttle_controller/New() + + ..() + + // Admin shuttles. + locations["Centcom"] = 1 + delays["Centcom"] = 0 + moving["Centcom"] = 0 + areas_offsite["Centcom"] = locate(/area/shuttle/transport1/centcom) + areas_station["Centcom"] = locate(/area/shuttle/transport1/station) + + locations["Administration"] = 1 + delays["Administration"] = 0 + moving["Administration"] = 0 + areas_offsite["Administration"] = locate(/area/shuttle/administration/centcom) + areas_station["Administration"] = locate(/area/shuttle/administration/station) + + locations["Alien"] = 0 + delays["Alien"] = 0 + moving["Alien"] = 0 + areas_offsite["Alien"] = locate(/area/shuttle/alien/base) + areas_station["Alien"] = locate(/area/shuttle/alien/mine) + + // Public shuttles. + locations["Engineering"] = 1 + delays["Engineering"] = 10 + moving["Engineering"] = 0 + areas_offsite["Engineering"] = locate(/area/shuttle/constructionsite/site) + areas_station["Engineering"] = locate(/area/shuttle/constructionsite/station) + + locations["Mining"] = 0 + delays["Mining"] = 10 + moving["Mining"] = 0 + areas_offsite["Mining"] = locate(/area/shuttle/mining/outpost) + areas_station["Mining"] = locate(/area/shuttle/mining/station) + + locations["Research"] = 0 + delays["Research"] = 10 + moving["Research"] = 0 + areas_offsite["Research"] = locate(/area/shuttle/research/outpost) + areas_station["Research"] = locate(/area/shuttle/research/station) /obj/machinery/computer/shuttle_control name = "shuttle console" @@ -11,27 +59,11 @@ var/list/global/shuttle_moving = list() req_access = list(access_engine) circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" - var/shuttle_tag // Used to coordinate data in global lists. - var/area/offsite // Off-station destination. - var/area/station // Station destination. + var/shuttle_tag // Used to coordinate data in shuttle controller. var/hacked = 0 // Has been emagged, no access restrictions. - var/location = 0 // The location that the shuttle begins the game at. - var/delay = 10 // The number of seconds of delay on each shuttle movement. - -/obj/machinery/computer/shuttle_control/New() - ..() - - if(!shuttle_tag) - del(src) - return - - if(isnull(shuttle_locations[shuttle_tag])) shuttle_locations[shuttle_tag] = location - if(isnull(shuttle_delays[shuttle_tag])) shuttle_delays[shuttle_tag] = delay - if(isnull(shuttle_moving[shuttle_tag])) shuttle_moving[shuttle_tag] = 0 /obj/machinery/computer/shuttle_control/attack_hand(user as mob) - if(..(user)) return src.add_fingerprint(user) @@ -39,10 +71,10 @@ var/list/global/shuttle_moving = list() dat = "
[shuttle_tag] Shuttle Control
" - if(shuttle_moving[shuttle_tag]) + if(shuttles.moving[shuttle_tag]) dat += "Location: Moving
" else - dat += "Location: [shuttle_locations[shuttle_tag] ? "Offsite" : "Station"]
" + dat += "Location: [shuttles.locations[shuttle_tag] ? "Offsite" : "Station"]
" dat += "Send
" @@ -55,9 +87,9 @@ var/list/global/shuttle_moving = list() usr.set_machine(src) src.add_fingerprint(usr) if(href_list["move"]) - if (!shuttle_moving[shuttle_tag]) + if (!shuttles.moving[shuttle_tag]) usr << "\blue [shuttle_tag] Shuttle recieved message and will be sent shortly." - move_shuttle(shuttle_tag,offsite,station) + move_shuttle(shuttle_tag) else usr << "\blue [shuttle_tag] Shuttle is already moving." @@ -74,19 +106,19 @@ var/list/global/shuttle_moving = list() proc/move_shuttle(var/shuttle_tag,var/area/offsite,var/area/station) - if(!shuttle_tag || isnull(shuttle_locations[shuttle_tag])) + if(!shuttle_tag || isnull(shuttles.locations[shuttle_tag])) return - if(shuttle_moving[shuttle_tag] == 1) return - shuttle_moving[shuttle_tag] = 1 + if(shuttles.moving[shuttle_tag] == 1) return + shuttles.moving[shuttle_tag] = 1 - spawn(shuttle_delays[shuttle_tag]*10) + spawn(shuttles.delays[shuttle_tag]*10) var/list/dstturfs = list() var/throwy = world.maxy - var/area/area_going_to = (shuttle_locations[shuttle_tag] == 1 ? station : offsite) - var/area/area_coming_from = (shuttle_locations[shuttle_tag] == 1 ? offsite : station) + var/area/area_going_to = (shuttles.locations[shuttle_tag] == 1 ? shuttles.areas_station[shuttle_tag] : shuttles.areas_offsite[shuttle_tag]) + var/area/area_coming_from = (shuttles.locations[shuttle_tag] == 1 ? shuttles.areas_offsite[shuttle_tag] : shuttles.areas_station[shuttle_tag]) for(var/turf/T in area_going_to) dstturfs += T @@ -108,7 +140,7 @@ proc/move_shuttle(var/shuttle_tag,var/area/offsite,var/area/station) area_coming_from.move_contents_to(area_going_to) - shuttle_locations[shuttle_tag] = !shuttle_locations[shuttle_tag] + shuttles.locations[shuttle_tag] = !shuttles.locations[shuttle_tag] for(var/mob/M in area_going_to) if(M.client) @@ -121,6 +153,6 @@ proc/move_shuttle(var/shuttle_tag,var/area/offsite,var/area/station) if(!M.buckled) M.Weaken(3) - shuttle_moving[shuttle_tag] = 0 + shuttles.moving[shuttle_tag] = 0 return \ No newline at end of file From ca48504bf518c61cb4b03b5c5c4d1b5a2c09dbd5 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 18:08:35 +0930 Subject: [PATCH 05/10] Update shuttle.dm Corrected a mistake. --- code/modules/shuttles/shuttle.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 17d71b47016..773d4140c0b 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -1,4 +1,4 @@ -//These lists are populated in /obj/machinery/computer/shuttle_control/New() +//These lists are populated in /datum/shuttle_controller/New() //Shuttle controller is instantiated in master_controller.dm. var/global/datum/shuttle_controller/shuttles @@ -155,4 +155,4 @@ proc/move_shuttle(var/shuttle_tag,var/area/offsite,var/area/station) shuttles.moving[shuttle_tag] = 0 - return \ No newline at end of file + return From 54b08ff55abdf64e0f3a6f1f00716e092f83dca0 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 23:21:10 +0930 Subject: [PATCH 06/10] Moved the Vox skipjack console over to a multi-destination shuttle datum setup. --- baystation12.dme | 7 +- code/game/gamemodes/heist/heist.dm | 5 +- code/game/machinery/computer/vox_shuttle.dm | 141 -------------- code/modules/admin/topic.dm | 2 +- code/modules/shuttles/antagonist.dm | 9 + code/modules/shuttles/departmental.dm | 17 ++ code/modules/shuttles/engineering.dm | 5 - code/modules/shuttles/mining.dm | 5 - code/modules/shuttles/research.dm | 5 - code/modules/shuttles/shuttle.dm | 194 ++++++++++++++------ code/modules/shuttles/shuttles_multi.dm | 124 +++++++++++++ 11 files changed, 295 insertions(+), 219 deletions(-) delete mode 100644 code/game/machinery/computer/vox_shuttle.dm create mode 100644 code/modules/shuttles/antagonist.dm create mode 100644 code/modules/shuttles/departmental.dm delete mode 100644 code/modules/shuttles/engineering.dm delete mode 100644 code/modules/shuttles/mining.dm delete mode 100644 code/modules/shuttles/research.dm create mode 100644 code/modules/shuttles/shuttles_multi.dm diff --git a/baystation12.dme b/baystation12.dme index 25531cc7f52..b201b78fb76 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -374,7 +374,6 @@ #include "code\game\machinery\computer\station_alert.dm" #include "code\game\machinery\computer\syndicate_shuttle.dm" #include "code\game\machinery\computer\syndicate_specops_shuttle.dm" -#include "code\game\machinery\computer\vox_shuttle.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_electronics.dm" #include "code\game\machinery\doors\alarmlock.dm" @@ -1276,10 +1275,10 @@ #include "code\modules\scripting\Scanner\Tokens.dm" #include "code\modules\security levels\keycard authentication.dm" #include "code\modules\security levels\security levels.dm" -#include "code\modules\shuttles\engineering.dm" -#include "code\modules\shuttles\mining.dm" -#include "code\modules\shuttles\research.dm" +#include "code\modules\shuttles\antagonist.dm" +#include "code\modules\shuttles\departmental.dm" #include "code\modules\shuttles\shuttle.dm" +#include "code\modules\shuttles\shuttles_multi.dm" #include "code\modules\supermatter\supermatter.dm" #include "code\modules\surgery\appendix.dm" #include "code\modules\surgery\bones.dm" diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index ba093e3c381..63953b4a697 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -272,8 +272,9 @@ datum/game_mode/proc/auto_declare_completion_heist() return 1 /datum/game_mode/heist/check_finished() - if (!(is_raider_crew_alive()) || (vox_shuttle_location && (vox_shuttle_location == "start"))) - return 1 + // DO NOT FORGET TO FIX THIS. + //if (!(is_raider_crew_alive()) || (vox_shuttle_location && (vox_shuttle_location == "start"))) + // return 1 return ..() /datum/game_mode/heist/cleanup() diff --git a/code/game/machinery/computer/vox_shuttle.dm b/code/game/machinery/computer/vox_shuttle.dm deleted file mode 100644 index ea7888ae938..00000000000 --- a/code/game/machinery/computer/vox_shuttle.dm +++ /dev/null @@ -1,141 +0,0 @@ -#define VOX_SHUTTLE_MOVE_TIME 400 -#define VOX_SHUTTLE_COOLDOWN 1200 - -//Copied from Syndicate shuttle. -var/global/vox_shuttle_location -var/global/announce_vox_departure = 1 //Stealth systems - give an announcement or not. - -/obj/machinery/computer/vox_stealth - name = "skipjack cloaking field terminal" - icon = 'icons/obj/computer.dmi' - icon_state = "syndishuttle" - req_access = list(access_syndicate) - -/obj/machinery/computer/vox_stealth/attackby(obj/item/I as obj, mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/vox_stealth/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/vox_stealth/attack_paw(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/vox_stealth/attack_hand(mob/user as mob) - if(!allowed(user)) - user << "\red Access Denied" - return - - if(announce_vox_departure) - user << "\red Shuttle stealth systems have been activated. The Exodus will not be warned of our arrival." - announce_vox_departure = 0 - else - user << "\red Shuttle stealth systems have been deactivated. The Exodus will be warned of our arrival." - announce_vox_departure = 1 - - -/obj/machinery/computer/vox_station - name = "vox skipjack terminal" - icon = 'icons/obj/computer.dmi' - icon_state = "syndishuttle" - req_access = list(access_syndicate) - var/area/curr_location - var/moving = 0 - var/lastMove = 0 - var/warning //Warning about the end of the round. - -/obj/machinery/computer/vox_station/New() - curr_location= locate(/area/shuttle/vox/station) - - -/obj/machinery/computer/vox_station/proc/vox_move_to(area/destination as area) - if(moving) return - if(lastMove + VOX_SHUTTLE_COOLDOWN > world.time) return - var/area/dest_location = locate(destination) - if(curr_location == dest_location) return - - if(announce_vox_departure) - if(curr_location == locate(/area/shuttle/vox/station)) - command_alert("Attention, Exodus, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not.", "NSV Icarus") - else if(dest_location == locate(/area/shuttle/vox/station)) - command_alert("Your guests are pulling away, Exodus - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip.", "NSV Icarus") - - moving = 1 - lastMove = world.time - - if(curr_location.z != dest_location.z) - var/area/transit_location = locate(/area/vox_station/transit) - curr_location.move_contents_to(transit_location) - curr_location = transit_location - sleep(VOX_SHUTTLE_MOVE_TIME) - - curr_location.move_contents_to(dest_location) - curr_location = dest_location - moving = 0 - - return 1 - - -/obj/machinery/computer/vox_station/attackby(obj/item/I as obj, mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/vox_station/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/vox_station/attack_paw(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/vox_station/attack_hand(mob/user as mob) - if(!allowed(user)) - user << "\red Access Denied" - return - - user.set_machine(src) - - var/dat = {"Location: [curr_location]
- Ready to move[max(lastMove + VOX_SHUTTLE_COOLDOWN - world.time, 0) ? " in [max(round((lastMove + VOX_SHUTTLE_COOLDOWN - world.time) * 0.1), 0)] seconds" : ": now"]
- Return to dark space
- Fore port solar | - Aft port solar | - Fore starboard solar
- Aft starboard solar | - Mining Asteroid
- Close"} - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - - -/obj/machinery/computer/vox_station/Topic(href, href_list) - if(!isliving(usr)) return - var/mob/living/user = usr - - if(in_range(src, user) || istype(user, /mob/living/silicon)) - user.set_machine(src) - - vox_shuttle_location = "station" - if(href_list["start"]) - if(ticker && (istype(ticker.mode,/datum/game_mode/heist))) - if(!warning) - user << "\red Returning to dark space will end your raid and report your success or failure. If you are sure, press the button again." - warning = 1 - return - vox_move_to(/area/shuttle/vox/station) - vox_shuttle_location = "start" - else if(href_list["solars_fore_starboard"]) - vox_move_to(/area/vox_station/northeast_solars) - else if(href_list["solars_fore_port"]) - vox_move_to(/area/vox_station/northwest_solars) - else if(href_list["solars_aft_starboard"]) - vox_move_to(/area/vox_station/southeast_solars) - else if(href_list["solars_aft_port"]) - vox_move_to(/area/vox_station/southwest_solars) - else if(href_list["mining"]) - vox_move_to(/area/vox_station/mining) - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/vox_station/bullet_act(var/obj/item/projectile/Proj) - visible_message("[Proj] ricochets off [src]!") \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2108faca763..732318094f7 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1931,7 +1931,7 @@ var/shuttle_tag = input("Which shuttle do you want to call?") as null|anything in shuttles.locations if(shuttle_tag && !shuttles.moving[shuttle_tag]) - move_shuttle(shuttle_tag) + shuttles.move_shuttle(shuttle_tag) message_admins("\blue [key_name_admin(usr)] moved the [shuttle_tag] shuttle", 1) log_admin("[key_name(usr)] moved the [shuttle_tag] shuttle") diff --git a/code/modules/shuttles/antagonist.dm b/code/modules/shuttles/antagonist.dm new file mode 100644 index 00000000000..c49c099026c --- /dev/null +++ b/code/modules/shuttles/antagonist.dm @@ -0,0 +1,9 @@ +/obj/machinery/computer/shuttle_control/multi/vox + name = "skipjack control console" + req_access = list(access_syndicate) + shuttle_tag = "Vox Skipjack" + +/obj/machinery/computer/shuttle_control/multi/syndicate + name = "Syndicate control console" + req_access = list(access_syndicate) + shuttle_tag = "Syndicate" \ No newline at end of file diff --git a/code/modules/shuttles/departmental.dm b/code/modules/shuttles/departmental.dm new file mode 100644 index 00000000000..b0f257dfeaf --- /dev/null +++ b/code/modules/shuttles/departmental.dm @@ -0,0 +1,17 @@ +/obj/machinery/computer/shuttle_control/mining + name = "mining shuttle console" + shuttle_tag = "Mining" + req_access = list(access_mining) + circuit = "/obj/item/weapon/circuitboard/mining_shuttle" + +/obj/machinery/computer/shuttle_control/engineering + name = "engineering shuttle console" + shuttle_tag = "Engineering" + req_access = list(access_engine) + circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" + +/obj/machinery/computer/shuttle_control/research + name = "research shuttle console" + shuttle_tag = "Research" + req_access = list(access_research) + circuit = "/obj/item/weapon/circuitboard/research_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/engineering.dm b/code/modules/shuttles/engineering.dm deleted file mode 100644 index 9a4158c5bb2..00000000000 --- a/code/modules/shuttles/engineering.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/computer/shuttle_control/engineering - name = "engineering shuttle console" - shuttle_tag = "Engineering" - req_access = list(access_engine) - circuit = "/obj/item/weapon/circuitboard/engineering_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/mining.dm b/code/modules/shuttles/mining.dm deleted file mode 100644 index bb25028e78c..00000000000 --- a/code/modules/shuttles/mining.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/computer/shuttle_control/mining - name = "mining shuttle console" - shuttle_tag = "Mining" - req_access = list(access_mining) - circuit = "/obj/item/weapon/circuitboard/mining_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/research.dm b/code/modules/shuttles/research.dm deleted file mode 100644 index 729c10f0906..00000000000 --- a/code/modules/shuttles/research.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/machinery/computer/shuttle_control/research - name = "research shuttle console" - shuttle_tag = "Research" - req_access = list(access_research) - circuit = "/obj/item/weapon/circuitboard/research_shuttle" \ No newline at end of file diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 773d4140c0b..9bc6ac7ddeb 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -10,6 +10,9 @@ var/global/datum/shuttle_controller/shuttles var/list/areas_offsite = list() var/list/areas_station = list() + //Shuttles with multiple destinations don't quite behave in the same way as ferries. + var/list/multi_shuttles = list() + /datum/shuttle_controller/New() ..() @@ -52,6 +55,138 @@ var/global/datum/shuttle_controller/shuttles areas_offsite["Research"] = locate(/area/shuttle/research/outpost) areas_station["Research"] = locate(/area/shuttle/research/station) + //Vox Shuttle. + var/datum/multi_shuttle/VS = new + VS.origin = /area/shuttle/vox/station + + VS.destinations = list( + "Fore Starboard Solars" = /area/vox_station/northeast_solars, + "Fore Port Solars" = /area/vox_station/northwest_solars, + "Aft Starboard Solars" = /area/vox_station/southeast_solars, + "Aft Port Solars" = /area/vox_station/southwest_solars, + "Mining asteroid" = /area/vox_station/mining + ) + + VS.announcer = "NSV Icarus" + VS.arrival_message = "Attention, Exodus, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not." + VS.departure_message = "Your guests are pulling away, Exodus - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip." + VS.interim = /area/vox_station/transit + + multi_shuttles["Vox Skipjack"] = VS + locations["Vox Skipjack"] = 1 + delays["Vox Skipjack"] = 10 + moving["Vox Skipjack"] = 0 + + //Nuke Ops shuttle. + var/datum/multi_shuttle/MS = new + MS.origin = /area/syndicate_station/start + + MS.destinations = list( + "NW" = /area/syndicate_station/northwest, + "N" = /area/syndicate_station/north, + "NE" = /area/syndicate_station/northeast, + "SW" = /area/syndicate_station/southwest, + "S" = /area/syndicate_station/south, + "SE" = /area/syndicate_station/southeast, + "Telecomms" = /area/syndicate_station/commssat, + "Mining" = /area/syndicate_station/mining + ) + + multi_shuttles["Syndicate"] = MS + locations["Syndicate"] = 1 + delays["Syndicate"] = 10 + moving["Syndicate"] = 0 + +/datum/shuttle_controller/proc/move_shuttle(var/shuttle_tag,var/area/origin,var/area/destination) + + world << "move_shuttle() called for [shuttle_tag] leaving [origin] en route to [destination]." + if(!shuttle_tag || isnull(locations[shuttle_tag])) + return + + if(moving[shuttle_tag] == 1) return + moving[shuttle_tag] = 1 + + spawn(delays[shuttle_tag]*10) + + var/area/area_going_to + if(destination) + world << "Using supplied destination [destination]." + area_going_to = destination + else + world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag])]." + area_going_to = (locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag]) + + var/area/area_coming_from + if(origin) + world << "Using supplied origin [origin]." + area_coming_from = origin + else + world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag])]." + area_coming_from = (locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag]) + + world << "area_coming_from: [area_coming_from]" + world << "area_going_to: [area_going_to]" + + if(area_coming_from == area_going_to) + world << "cancelling move, shuttle will overlap." + moving[shuttle_tag] = 0 + return + + var/list/dstturfs = list() + var/throwy = world.maxy + + for(var/turf/T in area_going_to) + dstturfs += T + if(T.y < throwy) + throwy = T.y + + for(var/turf/T in dstturfs) + var/turf/D = locate(T.x, throwy - 1, 1) + for(var/atom/movable/AM as mob|obj in T) + AM.Move(D) + if(istype(T, /turf/simulated)) + del(T) + + for(var/mob/living/carbon/bug in area_going_to) + bug.gib() + + for(var/mob/living/simple_animal/pest in area_going_to) + pest.gib() + + area_coming_from.move_contents_to(area_going_to) + + locations[shuttle_tag] = !locations[shuttle_tag] + + for(var/mob/M in area_going_to) + if(M.client) + M << "\red The ship lurches beneath you!" + spawn(0) + if(M.buckled) + shake_camera(M, 3, 1) + else + shake_camera(M, 10, 1) + if(istype(M, /mob/living/carbon)) + if(!M.buckled) + M.Weaken(3) + + moving[shuttle_tag] = 0 + return + +//This is for shuttles with a timer before arrival such as the vox skipjack and the escape shuttle. +/datum/shuttle_controller/proc/move_shuttle_long(var/shuttle_tag,var/area/departing,var/area/destination,var/area/interim,var/delay) + + move_shuttle(shuttle_tag,locate(departing),locate(interim)) + + spawn(1) + moving[shuttle_tag] = 1 //So they can't jump out by messing with the console. + + sleep(delay) + + moving[shuttle_tag] = 0 + move_shuttle(shuttle_tag,locate(interim),locate(destination)) + + return + /obj/machinery/computer/shuttle_control name = "shuttle console" icon = 'icons/obj/computer.dmi' @@ -86,14 +221,14 @@ var/global/datum/shuttle_controller/shuttles return usr.set_machine(src) src.add_fingerprint(usr) + if(href_list["move"]) if (!shuttles.moving[shuttle_tag]) usr << "\blue [shuttle_tag] Shuttle recieved message and will be sent shortly." - move_shuttle(shuttle_tag) + shuttles.move_shuttle(shuttle_tag) else usr << "\blue [shuttle_tag] Shuttle is already moving." - updateUsrDialog() /obj/machinery/computer/shuttle_control/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -102,57 +237,4 @@ var/global/datum/shuttle_controller/shuttles hacked = 1 usr << "You short out the console's ID checking system. It's now available to everyone!" else - ..() - -proc/move_shuttle(var/shuttle_tag,var/area/offsite,var/area/station) - - if(!shuttle_tag || isnull(shuttles.locations[shuttle_tag])) - return - - if(shuttles.moving[shuttle_tag] == 1) return - shuttles.moving[shuttle_tag] = 1 - - spawn(shuttles.delays[shuttle_tag]*10) - - var/list/dstturfs = list() - var/throwy = world.maxy - - var/area/area_going_to = (shuttles.locations[shuttle_tag] == 1 ? shuttles.areas_station[shuttle_tag] : shuttles.areas_offsite[shuttle_tag]) - var/area/area_coming_from = (shuttles.locations[shuttle_tag] == 1 ? shuttles.areas_offsite[shuttle_tag] : shuttles.areas_station[shuttle_tag]) - - for(var/turf/T in area_going_to) - dstturfs += T - if(T.y < throwy) - throwy = T.y - - for(var/turf/T in dstturfs) - var/turf/D = locate(T.x, throwy - 1, 1) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - if(istype(T, /turf/simulated)) - del(T) - - for(var/mob/living/carbon/bug in area_going_to) - bug.gib() - - for(var/mob/living/simple_animal/pest in area_going_to) - pest.gib() - - area_coming_from.move_contents_to(area_going_to) - - shuttles.locations[shuttle_tag] = !shuttles.locations[shuttle_tag] - - for(var/mob/M in area_going_to) - if(M.client) - spawn(0) - if(M.buckled) - shake_camera(M, 3, 1) - else - shake_camera(M, 10, 1) - if(istype(M, /mob/living/carbon)) - if(!M.buckled) - M.Weaken(3) - - shuttles.moving[shuttle_tag] = 0 - - return + ..() \ No newline at end of file diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm new file mode 100644 index 00000000000..63a9a99cfc1 --- /dev/null +++ b/code/modules/shuttles/shuttles_multi.dm @@ -0,0 +1,124 @@ +//This is a holder for things like the Vox and Nuke shuttle. +/datum/multi_shuttle + + var/cloaked = 1 + var/at_origin = 1 + var/move_time = 240 + var/cooldown = 200 + + var/announcer + var/arrival_message + var/departure_message + + var/area/interim + var/area/last_departed + var/list/destinations + var/area/origin + var/return_warning = 0 + +/datum/multi_shuttle/New() + ..() + if(origin) last_departed = origin + +/datum/multi_shuttle/proc/announce_departure() + + if(cloaked || isnull(departure_message)) + return + + command_alert(departure_message,(announcer ? announcer : "Central Command")) + +/datum/multi_shuttle/proc/announce_arrival() + + if(cloaked || isnull(arrival_message)) + return + + command_alert(arrival_message,(announcer ? announcer : "Central Command")) + +/obj/machinery/computer/shuttle_control/multi + icon_state = "syndishuttle" + +/obj/machinery/computer/shuttle_control/multi/attack_hand(user as mob) + + if(..(user)) + return + src.add_fingerprint(user) + var/dat + + dat = "
[shuttle_tag] Ship Control
" + + if(shuttles.moving[shuttle_tag]) + dat += "Location: Moving
" + else + var/area/areacheck = get_area(src) + dat += "Location: [areacheck.name]
" + + dat += "Toggle cloaking field
" + dat += "Move ship
" + dat += "Return to base
" + + user << browse("[dat]", "window=[shuttle_tag]shuttlecontrol;size=220x220") + +/obj/machinery/computer/shuttle_control/multi/Topic(href, href_list) + + if(..()) + return + + usr.set_machine(src) + src.add_fingerprint(usr) + + var/datum/multi_shuttle/MS = shuttles.multi_shuttles[shuttle_tag] + if(!istype(MS)) return + + if (shuttles.moving[shuttle_tag]) + usr << "\blue [shuttle_tag] vessel is moving." + return + + if(href_list["start"]) + + if(MS.at_origin) + usr << "\red You are already at your home base." + return + + if(!MS.return_warning) + usr << "\red Returning to your home base will end your mission. If you are sure, press the button again." + //TODO: Actually end the mission. + MS.return_warning = 1 + return + + shuttles.move_shuttle_long(shuttle_tag,MS.last_departed,MS.origin,MS.interim,MS.move_time) + MS.last_departed = MS.origin + MS.at_origin = 1 + + if(href_list["toggle_cloak"]) + + if(!shuttles.multi_shuttles) return + + MS.cloaked = !MS.cloaked + usr << "\red Ship stealth systems have been [(MS.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival." + + if(href_list["move_multi"]) + + if(!shuttles.multi_shuttles) return + + var/choice = input("Select a destination.") as null|anything in MS.destinations + if(!choice) return + + usr << "\blue [shuttle_tag] main computer recieved message." + + if(MS.at_origin) + MS.announce_arrival() + MS.last_departed = MS.origin + MS.at_origin = 0 + + shuttles.move_shuttle_long(shuttle_tag,MS.last_departed,MS.destinations[choice],MS.interim,MS.move_time) + MS.last_departed = MS.destinations[choice] + return + + else if(choice == MS.origin) + + MS.announce_departure() + + shuttles.move_shuttle(shuttle_tag,locate(MS.last_departed),locate(MS.destinations[choice])) + MS.last_departed = MS.destinations[choice] + + updateUsrDialog() From 3bb5aa78182d5a820dd71e5225502a106c5eacdc Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 3 Jun 2014 23:22:17 +0930 Subject: [PATCH 07/10] Remapped vox shuttle console to new path. --- maps/tgstation2.dmm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 68727b65dc9..112646c822b 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -7871,8 +7871,7 @@ "cVs" = (/turf/unsimulated/floor{dir = 5; heat_capacity = 1; icon_state = "warning"},/area/centcom/evac) "cVt" = (/obj/structure/table,/obj/effect/spawner/newbomb/timer/syndicate,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_station/start) "cVu" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) -"cVv" = (/obj/machinery/computer/vox_station,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) -"cVw" = (/obj/machinery/computer/vox_stealth,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) +"cVv" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) "cVx" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/control) "cVy" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "cVz" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/wizard_station) @@ -11010,7 +11009,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvdSccU aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUMcUMcUvcUvcUvcUxcUscULcULcULdSacULcULcULdSbcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUScUTcUUaaacUScUTcUUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvdSKcUsdSIdSHdSJcUsdSFdSGdSEdSfcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVacVbcVccVccVccVdcVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvdSkcUscUscUscUscUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUScUTcVecUTcVfcVgcVhcVicVjcVgcVkcUTcVecUTcUUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSrdSvdSwdStcUvdSxdSzdSydSxcVzdSCdSDdSAdSBcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVbcVccVccVdcVaaaacVbcVgcVucVvcVwcVgcVdaaacVacVbcVccVccVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSrdSvdSwdStcUvdSxdSzdSydSxcVzdSCdSDdSAdSBcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVbcVccVccVdcVaaaacVbcVgcVucVvcVJcVgcVdaaacVacVbcVccVccVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSrdSqdSudStcUvdSsdSsdSsdSscVXcVAcVDcVAcVDcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcVEcVFcVgcVacVbcVgcVGcVHcVIcVHcVJcVgcVdcVacVgcVKcVLcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSrdSWdSVdStcUvdSsdSsdSsdSsdSsdSsdSsdSsdSscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcVPcVQcVgcVccVRcVScVJcVHcVTcVHcVJcVScVRcVccVgcVUcVVcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSrdSXcUWdStcUvdSsdSsdSsdSsdSsdSsdSYdTadSZcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgdaXdbacVgcVccWecVScVJcVHcVJcVHcVJcVScWecVccVgdbddaXcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 7a56a174dc3908e2400a8e4ce3f3140aaca8dfd1 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 4 Jun 2014 00:08:10 +0930 Subject: [PATCH 08/10] Converted Syndicate shuttle over to multi-shuttle setup. --- baystation12.dme | 1 - code/game/gamemodes/nuclear/nuclearbomb.dm | 2 +- code/game/gamemodes/nuclear/pinpointer.dm | 3 +- .../machinery/computer/syndicate_shuttle.dm | 104 ------------------ code/modules/shuttles/shuttle.dm | 29 +++-- code/modules/shuttles/shuttles_multi.dm | 22 +++- 6 files changed, 39 insertions(+), 122 deletions(-) delete mode 100644 code/game/machinery/computer/syndicate_shuttle.dm diff --git a/baystation12.dme b/baystation12.dme index b201b78fb76..555902d5bb4 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -372,7 +372,6 @@ #include "code\game\machinery\computer\skills.dm" #include "code\game\machinery\computer\specops_shuttle.dm" #include "code\game\machinery\computer\station_alert.dm" -#include "code\game\machinery\computer\syndicate_shuttle.dm" #include "code\game\machinery\computer\syndicate_specops_shuttle.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_electronics.dm" diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index a58e8b553ff..f060697b364 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -404,7 +404,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob) if(ticker) if(ticker.mode && ticker.mode.name == "nuclear emergency") - var/obj/machinery/computer/syndicate_station/syndie_location = locate(/obj/machinery/computer/syndicate_station) + var/obj/machinery/computer/shuttle_control/multi/syndicate/syndie_location = locate(/obj/machinery/computer/shuttle_control/multi/syndicate) if(syndie_location) ticker.mode:syndies_didnt_escape = (syndie_location.z > 1 ? 0 : 1) //muskets will make me change this, but it will do for now ticker.mode:nuke_off_station = off_station diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 24f2353b8ed..51a5c888d73 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -179,8 +179,7 @@ /obj/item/weapon/pinpointer/nukeop var/mode = 0 //Mode 0 locates disk, mode 1 locates the shuttle - var/obj/machinery/computer/syndicate_station/home = null - + var/obj/machinery/computer/shuttle_control/multi/syndicate/home = null /obj/item/weapon/pinpointer/nukeop/attack_self(mob/user as mob) if(!active) diff --git a/code/game/machinery/computer/syndicate_shuttle.dm b/code/game/machinery/computer/syndicate_shuttle.dm deleted file mode 100644 index 681fc65fe97..00000000000 --- a/code/game/machinery/computer/syndicate_shuttle.dm +++ /dev/null @@ -1,104 +0,0 @@ -#define SYNDICATE_SHUTTLE_MOVE_TIME 240 -#define SYNDICATE_SHUTTLE_COOLDOWN 200 - -/obj/machinery/computer/syndicate_station - name = "syndicate shuttle terminal" - icon = 'icons/obj/computer.dmi' - icon_state = "syndishuttle" - req_access = list(access_syndicate) - var/area/curr_location - var/moving = 0 - var/lastMove = 0 - - -/obj/machinery/computer/syndicate_station/New() - curr_location= locate(/area/syndicate_station/start) - - -/obj/machinery/computer/syndicate_station/proc/syndicate_move_to(area/destination as area) - if(moving) return - if(lastMove + SYNDICATE_SHUTTLE_COOLDOWN > world.time) return - var/area/dest_location = locate(destination) - if(curr_location == dest_location) return - - moving = 1 - lastMove = world.time - - if(curr_location.z != dest_location.z) - var/area/transit_location = locate(/area/syndicate_station/transit) - curr_location.move_contents_to(transit_location) - curr_location = transit_location - sleep(SYNDICATE_SHUTTLE_MOVE_TIME) - - curr_location.move_contents_to(dest_location) - curr_location = dest_location - moving = 0 - return 1 - - -/obj/machinery/computer/syndicate_station/attackby(obj/item/I as obj, mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/syndicate_station/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/syndicate_station/attack_paw(mob/user as mob) - return attack_hand(user) - -/obj/machinery/computer/syndicate_station/attack_hand(mob/user as mob) - if(!allowed(user)) - user << "\red Access Denied" - return - - user.set_machine(src) - - var/dat = {"Location: [curr_location]
- Ready to move[max(lastMove + SYNDICATE_SHUTTLE_COOLDOWN - world.time, 0) ? " in [max(round((lastMove + SYNDICATE_SHUTTLE_COOLDOWN - world.time) * 0.1), 0)] seconds" : ": now"]
- Syndicate Space
- North West of SS13 | - North of SS13 | - North East of SS13
- South West of SS13 | - South of SS13 | - South East of SS13
- South of the Communication Satellite | - North East of the Mining Asteroid
- Close"} - - user << browse(dat, "window=computer;size=575x450") - onclose(user, "computer") - return - - -/obj/machinery/computer/syndicate_station/Topic(href, href_list) - if(!isliving(usr)) return - var/mob/living/user = usr - - if(in_range(src, user) || istype(user, /mob/living/silicon)) - user.set_machine(src) - - if(href_list["syndicate"]) - syndicate_move_to(/area/syndicate_station/start) - else if(href_list["station_nw"]) - syndicate_move_to(/area/syndicate_station/northwest) - else if(href_list["station_n"]) - syndicate_move_to(/area/syndicate_station/north) - else if(href_list["station_ne"]) - syndicate_move_to(/area/syndicate_station/northeast) - else if(href_list["station_sw"]) - syndicate_move_to(/area/syndicate_station/southwest) - else if(href_list["station_s"]) - syndicate_move_to(/area/syndicate_station/south) - else if(href_list["station_se"]) - syndicate_move_to(/area/syndicate_station/southeast) - else if(href_list["commssat"]) - syndicate_move_to(/area/syndicate_station/commssat) - else if(href_list["mining"]) - syndicate_move_to(/area/syndicate_station/mining) - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/syndicate_station/bullet_act(var/obj/item/projectile/Proj) - visible_message("[Proj] ricochets off [src]!") //let's not let them fuck themselves in the rear \ No newline at end of file diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 9bc6ac7ddeb..6dd4186d34c 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -82,16 +82,21 @@ var/global/datum/shuttle_controller/shuttles MS.origin = /area/syndicate_station/start MS.destinations = list( - "NW" = /area/syndicate_station/northwest, - "N" = /area/syndicate_station/north, - "NE" = /area/syndicate_station/northeast, - "SW" = /area/syndicate_station/southwest, - "S" = /area/syndicate_station/south, - "SE" = /area/syndicate_station/southeast, - "Telecomms" = /area/syndicate_station/commssat, - "Mining" = /area/syndicate_station/mining + "Northwest of the station" = /area/syndicate_station/northwest, + "North of the station" = /area/syndicate_station/north, + "Northeast of the station" = /area/syndicate_station/northeast, + "Southwest of the station" = /area/syndicate_station/southwest, + "South of the station" = /area/syndicate_station/south, + "Southeast of the station" = /area/syndicate_station/southeast, + "Telecomms Satellite" = /area/syndicate_station/commssat, + "Mining Asteroid" = /area/syndicate_station/mining ) + MS.announcer = "NSV Icarus" + MS.arrival_message = "Attention, Exodus, you have a large signature approaching the station - looks unarmed to surface scans. We're too far out to intercept - brace for visitors." + MS.departure_message = "Your visitors are on their way out of the system, Exodus, burning delta-v like it's nothing. Good riddance." + MS.interim = /area/syndicate_station/transit + multi_shuttles["Syndicate"] = MS locations["Syndicate"] = 1 delays["Syndicate"] = 10 @@ -159,11 +164,12 @@ var/global/datum/shuttle_controller/shuttles for(var/mob/M in area_going_to) if(M.client) - M << "\red The ship lurches beneath you!" spawn(0) if(M.buckled) + M << "\red Sudden acceleration presses you into your chair!" shake_camera(M, 3, 1) else + M << "\red The ship lurches beneath you!" shake_camera(M, 10, 1) if(istype(M, /mob/living/carbon)) if(!M.buckled) @@ -237,4 +243,7 @@ var/global/datum/shuttle_controller/shuttles hacked = 1 usr << "You short out the console's ID checking system. It's now available to everyone!" else - ..() \ No newline at end of file + ..() + +/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj) + visible_message("[Proj] ricochets off [src]!") \ No newline at end of file diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm index 63a9a99cfc1..597458fc676 100644 --- a/code/modules/shuttles/shuttles_multi.dm +++ b/code/modules/shuttles/shuttles_multi.dm @@ -5,6 +5,7 @@ var/at_origin = 1 var/move_time = 240 var/cooldown = 200 + var/last_move = 0 var/announcer var/arrival_message @@ -42,21 +43,30 @@ if(..(user)) return src.add_fingerprint(user) - var/dat + var/datum/multi_shuttle/MS = shuttles.multi_shuttles[shuttle_tag] + if(!istype(MS)) return + + var/dat dat = "
[shuttle_tag] Ship Control
" + if(shuttles.moving[shuttle_tag]) dat += "Location: Moving
" else var/area/areacheck = get_area(src) dat += "Location: [areacheck.name]
" - dat += "Toggle cloaking field
" + if((MS.last_move + MS.cooldown) > world.time) + dat += "Engines charging.
" + else + dat += "Engines ready.
" + + dat += "
Toggle cloaking field
" dat += "Move ship
" dat += "Return to base
" - user << browse("[dat]", "window=[shuttle_tag]shuttlecontrol;size=220x220") + user << browse("[dat]", "window=[shuttle_tag]shuttlecontrol;size=300x600") /obj/machinery/computer/shuttle_control/multi/Topic(href, href_list) @@ -73,6 +83,10 @@ usr << "\blue [shuttle_tag] vessel is moving." return + if((MS.last_move + MS.cooldown) > world.time) + usr << "\red The ship is inoperable while the engines are charging." + return + if(href_list["start"]) if(MS.at_origin) @@ -121,4 +135,4 @@ shuttles.move_shuttle(shuttle_tag,locate(MS.last_departed),locate(MS.destinations[choice])) MS.last_departed = MS.destinations[choice] - updateUsrDialog() + updateUsrDialog() \ No newline at end of file From f5f6b4b66908966ab005292a2a3365d5e06ca034 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 4 Jun 2014 00:08:39 +0930 Subject: [PATCH 09/10] Updated Syndicate shuttle console paths. --- maps/tgstation2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 112646c822b..7c0046527cd 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -6907,7 +6907,7 @@ "cCQ" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCR" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCS" = (/obj/structure/table,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{dir = 6; icon_state = "whitegreen"},/area/centcom/holding) -"cCT" = (/obj/machinery/computer/syndicate_station{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) +"cCT" = (/obj/machinery/computer/shuttle_control/multi/syndicate{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCU" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCV" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCW" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) From 99ffd06285802b720ff74308ca5124193874ad54 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 4 Jun 2014 00:58:03 +0930 Subject: [PATCH 10/10] Moved the supply shuttle arrival/departure over to the shuttle datum. Needs testing, probably going to break. --- code/game/supplyshuttle.dm | 34 ++++++++------------------------ code/modules/shuttles/shuttle.dm | 25 ++++++++++++++--------- 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 1d2faa89a57..0ebc3cc6c52 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -169,34 +169,12 @@ var/list/mechtoys = list( eta = round(ticksleft/600,1) else eta = 0 - send() - + shuttles.move_shuttle("Supply") + moving = 0 + at_station = !at_station sleep(processing_interval) - proc/send() - var/area/from - var/area/dest - var/area/the_shuttles_way - switch(at_station) - if(1) - from = locate(SUPPLY_STATION_AREATYPE) - dest = locate(SUPPLY_DOCK_AREATYPE) - the_shuttles_way = from - at_station = 0 - if(0) - from = locate(SUPPLY_DOCK_AREATYPE) - dest = locate(SUPPLY_STATION_AREATYPE) - the_shuttles_way = dest - at_station = 1 - moving = 0 - - //Do I really need to explain this loop? - for(var/mob/living/unlucky_person in the_shuttles_way) - unlucky_person.gib() - - from.move_contents_to(dest) - //Check whether the shuttle is allowed to move proc/can_move() if(moving) return 0 @@ -521,7 +499,11 @@ var/list/mechtoys = list( else if(supply_shuttle.at_station) supply_shuttle.moving = -1 supply_shuttle.sell() - supply_shuttle.send() + supply_shuttle.moving = 0 + supply_shuttle.at_station = !supply_shuttle.at_station + + shuttles.move_shuttle("Supply") + temp = "The supply shuttle has departed.

OK" else supply_shuttle.moving = 1 diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 6dd4186d34c..dd7ad6645e7 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -17,6 +17,13 @@ var/global/datum/shuttle_controller/shuttles ..() + //Supply and escape shuttles. + locations["Supply"] = 1 + delays["Supply"] = 0 + moving["Supply"] = 0 + areas_offsite["Supply"] = locate(/area/supply/dock) + areas_station["Supply"] = locate(/area/supply/station) + // Admin shuttles. locations["Centcom"] = 1 delays["Centcom"] = 0 @@ -104,7 +111,7 @@ var/global/datum/shuttle_controller/shuttles /datum/shuttle_controller/proc/move_shuttle(var/shuttle_tag,var/area/origin,var/area/destination) - world << "move_shuttle() called for [shuttle_tag] leaving [origin] en route to [destination]." + //world << "move_shuttle() called for [shuttle_tag] leaving [origin] en route to [destination]." if(!shuttle_tag || isnull(locations[shuttle_tag])) return @@ -115,25 +122,25 @@ var/global/datum/shuttle_controller/shuttles var/area/area_going_to if(destination) - world << "Using supplied destination [destination]." + //world << "Using supplied destination [destination]." area_going_to = destination else - world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag])]." + //world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag])]." area_going_to = (locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag]) var/area/area_coming_from if(origin) - world << "Using supplied origin [origin]." + //world << "Using supplied origin [origin]." area_coming_from = origin else - world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag])]." + //world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag])]." area_coming_from = (locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag]) - world << "area_coming_from: [area_coming_from]" - world << "area_going_to: [area_going_to]" + //world << "area_coming_from: [area_coming_from]" + //world << "area_going_to: [area_going_to]" if(area_coming_from == area_going_to) - world << "cancelling move, shuttle will overlap." + //world << "cancelling move, shuttle will overlap." moving[shuttle_tag] = 0 return @@ -169,7 +176,7 @@ var/global/datum/shuttle_controller/shuttles M << "\red Sudden acceleration presses you into your chair!" shake_camera(M, 3, 1) else - M << "\red The ship lurches beneath you!" + M << "\red The floor lurches beneath you!" shake_camera(M, 10, 1) if(istype(M, /mob/living/carbon)) if(!M.buckled)