diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index a5d0cd3f66f..7f5a03e58af 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -631,6 +631,7 @@ "mg" = (/obj/item/weapon/mop,/obj/structure/mirror{pixel_x = 28},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "mh" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "mi" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "Mission Launch Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "151"},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) +"mj" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/obj/effect/landmark{name = "ERT Director"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops) "mk" = (/obj/structure/stool,/obj/effect/landmark{name = "Syndicate-Spawn"},/obj/effect/decal/warning_stripes/east,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "ml" = (/obj/structure/stool,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/syndicate_mothership) "mm" = (/obj/structure/stool,/obj/structure/sign/poster/legit{pixel_y = 32},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/control) @@ -639,6 +640,7 @@ "mp" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) "mq" = (/obj/structure/stool,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/evac) "mr" = (/turf/unsimulated/wall,/area/trader_station/sol) +"ms" = (/obj/machinery/teleport/hub/upgraded{admin_usage = 1},/turf/unsimulated/floor{tag = "icon-delivery"; icon_state = "delivery"},/area/admin) "mt" = (/turf/space,/area/syndicate_mothership/elite_squad) "mu" = (/obj/effect/landmark{name = "Syndicate-Commando"; tag = "Commando"},/obj/machinery/light/spot,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad) "mv" = (/obj/machinery/light/spot,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) @@ -934,7 +936,6 @@ "vJ" = (/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "vL" = (/obj/item/device/radio/intercom/specops{pixel_y = -28},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "vM" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_y = 16; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "ASSAULT"; name = "Assault Armor"; pixel_y = -4; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_y = 6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops) -"vN" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops) "vO" = (/obj/machinery/computer/artillerycontrol{luminosity = 255},/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/specops) "vP" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/specops) "vQ" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) @@ -1355,7 +1356,6 @@ "IF" = (/obj/structure/table,/obj/item/clothing/gloves/color/yellow,/obj/random/bomb_supply,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "IG" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "IH" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"II" = (/obj/machinery/teleport/hub/upgraded,/turf/unsimulated/floor{tag = "icon-delivery"; icon_state = "delivery"},/area/admin) "IJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "IK" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "IL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) @@ -1515,7 +1515,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXuWsXsXujuXuRuYuZvavbujvcvdvdvdvdvesXuosXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvjvkvlsXujujvauRvmuRujujvnvdvovpvqvdsXsXsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkvkvkvxujujujvyvyujujujvzvdvAvBvCbesXvEtTuEtRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXvGvHsXvIvJujujujujvLujsXvdvMvNvOvPsXvQtRtRtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXvGvHsXvIvJujujujujvLujsXvdvMmjvOvPsXvQtRtRtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXbfbfsXsXsXvSvTvUvVvdsXvWtRtRtRvXsutQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwbwcwdwbwesXiDwgwhwiwjsXwkudududwlsuwmudududududuetRucudududududwnsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwrwswtwrwesXsXsXsXsXsXsXsqsqsqsqsqsqsqsqsqsqsqsqsqwusqsqsqsqsqsqsqsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1618,7 +1618,7 @@ aNaNaNaNHjIiIjIkIrIkIrIkIlImjcjcjcjcjcjcjcjcjcjcjcjcjcInIlIoIsIoIsIoIjIpHjaNaNaN aNaNaNaNHjIiIjIkIkIvIkIkIlImjcjcjcjcjcIwIxIwjcjcjcjcjcInIlIoIoIyIoIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDKDKDKDKlKDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjIiIjIkIrIkIrIkIlImjcjcjcjcjcIwIzIwjcjcjcjcjcInIlIoIsIoIsIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVlkljlmllaNkUlikVlkljlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNIADKDKDKIBDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjIiIjIkIkIkIkIkIlImjcjcjcjcjcjcjcjcjcjcjcjcjcInIlIoIoIoIoIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfICDKDKDKIDEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNHjHjHjIEIEIEIEIEjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaIEIEIEIEIEHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwIFIGIHIIIJDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNHjHjHjIEIEIEIEIEjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaIEIEIEIEIEHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwIFIGIHmsIJDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNHjIKIKIKIKIKHjIdIeIeIeIeIeIeIeIeIeIeIeIeIeIfHjILILILILILHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDxDyDzDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNHjHjHjHjHjHjHjIMINININININIOIPIQINININININIMHjHjHjHjHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMaNaNaNEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNHjIMIMIMIRIMISISISISISIMIRIMIMIMHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/_globalvars/mapping.dm b/code/_globalvars/mapping.dm index 1810bff0b47..022e308470d 100644 --- a/code/_globalvars/mapping.dm +++ b/code/_globalvars/mapping.dm @@ -37,6 +37,7 @@ var/list/latejoin_cyborg = list() var/list/prisonwarp = list() //prisoners go to these var/list/holdingfacility = list() //captured people go here var/list/xeno_spawn = list()//Aliens spawn at these. +var/list/ertdirector = list() // list/mazewarp = list() var/list/tdome1 = list() var/list/tdome2 = list() diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index c1ab67a3f03..2483f6ed163 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -595,15 +595,16 @@ proc/get_all_job_icons() //For all existing HUD icons var/job_icons = get_all_job_icons() var/centcom = get_all_centcom_jobs() + if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job + return "Centcom" + if(I.rank in centcom) + return "Centcom" + if(I.assignment in job_icons) //Check if the job has a hud icon return I.assignment if(I.rank in job_icons) return I.rank - if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job - return "Centcom" - if(I.rank in centcom) - return "Centcom" else return diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm new file mode 100644 index 00000000000..8fdc85d2e53 --- /dev/null +++ b/code/game/jobs/job/central.dm @@ -0,0 +1,80 @@ + +// General-purpose CC official. Can hear out grievances, investigate cases, issue demotions, etc. +/datum/job/ntnavyofficer + title = "Nanotrasen Navy Officer" + flag = CENTCOM + department_flag = CENTCOM + total_positions = 5 + spawn_positions = 5 + supervisors = "the admins" + selection_color = "#ffdddd" + idtype = /obj/item/weapon/card/id/centcom + access = list() + minimal_access = list() + admin_only = 1 + +/datum/job/ntnavyofficer/equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_or_collect(new /obj/item/clothing/under/rank/centcom/officer(H), slot_w_uniform) + H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes) + H.equip_or_collect(new /obj/item/clothing/gloves/color/white(H), slot_gloves) + H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear) + H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head) + H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(H), slot_belt) + H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack) + + H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack) + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + return 1 + +/datum/job/ntnavyofficer/get_access() + return get_centcom_access(title) + + +// CC Officials who lead ERTs, Death Squads, etc. +/datum/job/ntspecops + title = "Special Operations Officer" + flag = CENTCOM + department_flag = CENTCOM + total_positions = 5 + spawn_positions = 5 + supervisors = "the admins" + selection_color = "#ffdddd" + idtype = /obj/item/weapon/card/id/centcom + access = list() + minimal_access = list() + admin_only = 1 + spawn_ert = 1 + +/datum/job/ntspecops/equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_or_collect(new /obj/item/clothing/under/syndicate/combat(H), slot_w_uniform) + H.equip_or_collect(new /obj/item/clothing/shoes/combat(H), slot_shoes) + H.equip_or_collect(new /obj/item/clothing/gloves/combat(H), slot_gloves) + H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear) + H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer/navy(H), slot_head) + H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(H), slot_belt) + H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + H.equip_or_collect(new /obj/item/clothing/suit/space/deathsquad/officer(H), slot_wear_suit) + H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack) + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + return 1 + +/datum/job/ntspecops/get_access() + return get_centcom_access(title) \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 563a469e821..b8e7f44ecb4 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -41,6 +41,9 @@ //If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) var/minimal_player_age = 0 + var/admin_only = 0 + var/spawn_ert = 0 + ///////////////////////////////// // /vg/ feature: Job Objectives! ///////////////////////////////// @@ -77,7 +80,7 @@ return 0 return max(0, minimal_player_age - C.player_age) - + /datum/job/proc/apply_fingerprints(var/mob/living/carbon/human/H) if(!istype(H)) return @@ -116,6 +119,6 @@ if(H.r_store) H.r_store.add_fingerprint(H,1) return 1 - + /datum/job/proc/is_position_available() return (current_positions < total_positions) || (total_positions == -1) \ No newline at end of file diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9f9658a9dff..851cb4d0921 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -120,6 +120,9 @@ var/global/datum/controller/occupations/job_master if(job.title in whitelisted_positions) // No random whitelisted job, sorry! continue + if(job.admin_only) // No admin positions either. + continue + if(jobban_isbanned(player, job.title)) Debug("GRJ isbanned failed, Player: [player], Job: [job.title]") continue diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 748ffcd5d85..6af69ebed9d 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -11,7 +11,7 @@ var/const/ENGINEER =(1<<6) var/const/ATMOSTECH =(1<<7) var/const/AI =(1<<8) var/const/CYBORG =(1<<9) - +var/const/CENTCOM =(1<<10) var/const/MEDSCI =(1<<1) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 9c1d90ce67a..b2ba1a01cf7 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -270,6 +270,7 @@ active_power_usage = 2000 var/obj/machinery/teleport/station/power_station var/calibrated //Calibration prevents mutation + var/admin_usage = 0 // if 1, works on z2. If 0, doesn't. Used for admin room teleport. /obj/machinery/teleport/hub/New() ..() @@ -317,7 +318,7 @@ return power_station /obj/machinery/teleport/hub/Bumped(M as mob|obj) - if(z == ZLEVEL_CENTCOMM) + if(z == ZLEVEL_CENTCOMM && !admin_usage) to_chat(M, "You can't use this here.") return if(power_station && power_station.engaged && !panel_open) @@ -379,7 +380,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 2000 - + var/target var/tele_delay = 50 @@ -414,7 +415,7 @@ else do_teleport(M, target) use_power(5000) - + if(tele_delay) recalibrating = 1 update_icon() diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index a074e269350..82b3f7235d8 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -94,6 +94,9 @@ if("voxstart") raider_spawn += loc + if("ERT Director") + ertdirector += loc + landmarks_list += src return 1 diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 0710464ecbc..69b5db12af9 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -287,6 +287,14 @@ icon_state = "com_headset_alt" item_state = "com_headset_alt" +/obj/item/device/radio/headset/centcom + name = "\proper centcom officer's bowman headset" + desc = "The headset of final authority. Protects ears from flashbangs." + flags = EARBANGPROTECT + icon_state = "com_headset_alt" + item_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/ert + /obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. name = "\improper AI subspace transceiver" desc = "Integrated AI radio transceiver." diff --git a/code/game/objects/items/weapons/implants/implant_death_alarm.dm b/code/game/objects/items/weapons/implants/implant_death_alarm.dm index 58b9de4589a..2ef9e2ce35f 100644 --- a/code/game/objects/items/weapons/implants/implant_death_alarm.dm +++ b/code/game/objects/items/weapons/implants/implant_death_alarm.dm @@ -68,4 +68,4 @@ if(..()) processing_objects.Remove(src) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index c7e0fa67ef1..23d35d59995 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -125,4 +125,46 @@ /obj/item/weapon/implanter/explosive_macro/New() imp = new /obj/item/weapon/implant/explosive/macro(src) + ..() + + +// Dust implant, for CC officers. Prevents gear theft if they die. + +/obj/item/weapon/implant/dust + name = "duster implant" + desc = "An alarm which monitors host vital signs, transmitting a radio message and dusting the corpse on death." + +/obj/item/weapon/implant/dust/get_data() + var/dat = {"Implant Specifications:
+ Name: Ultraviolet Corp XX-13 Security Implant
+ Life: Activates upon death.
+ Important Notes: Vaporizes organic matter
+
+ Implant Details:
+ Function: Contains a compact, electrically activated heat source that turns its host to ash upon activation, or their death.
+ Special Features: Vaporizes
+ "} + return dat + +/obj/item/weapon/implant/dust/trigger(emote, mob/source) + if(emote == "deathgasp") + activate("death") + +/obj/item/weapon/implant/dust/activate(cause) + if(!cause || !imp_in || cause == "emp") + return 0 + if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your dusting implant? This will turn you to ash!", "Dusting Confirmation", "Yes", "No") != "Yes") + return 0 + to_chat(imp_in, "Your dusting implant activates!") + imp_in.visible_message("[imp_in] burns up in a flash!") + imp_in.dust() + +/obj/item/weapon/implant/dust/emp_act(severity) + return + +/obj/item/weapon/implanter/dust + name = "implanter (Dust-on-death)" + +/obj/item/weapon/implanter/dust/New() + imp = new /obj/item/weapon/implant/dust(src) ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 2d7d3e0a956..2d98e0948dd 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -82,3 +82,9 @@ imp = new /obj/item/weapon/implant/traitor(src) ..() +/obj/item/weapon/implanter/death_alarm + name = "implanter (Death Alarm)" + +/obj/item/weapon/implanter/death_alarm/New() + imp = new /obj/item/weapon/implant/death_alarm(src) + ..() \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index b85d19451fe..f8358411b9f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -869,19 +869,20 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if("nanotrasen officer") + M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform) M.equip_or_collect(new /obj/item/clothing/shoes/centcom(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves) - M.equip_or_collect(new /obj/item/device/radio/headset/heads/captain/alt(M), slot_l_ear) + M.equip_or_collect(new /obj/item/device/radio/headset/ert(M), slot_l_ear) M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head) - - var/obj/item/device/pda/centcom/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Nanotrasen Navy Officer" - pda.name = "PDA-[M.real_name] ([pda.ownjob])" - - M.equip_or_collect(pda, slot_r_store) - M.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store) + M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_wear_pda) + M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt) + M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) + L.imp_in = M + L.implanted = 1 + M.sec_hud_set_implants() var/obj/item/weapon/card/id/centcom/W = new(M) W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Officer)" @@ -894,17 +895,16 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform) M.equip_or_collect(new /obj/item/clothing/shoes/centcom(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves) - M.equip_or_collect(new /obj/item/device/radio/headset/heads/captain/alt(M), slot_l_ear) + M.equip_or_collect(new /obj/item/device/radio/headset/ert(M), slot_l_ear) M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head) - - var/obj/item/device/pda/centcom/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Nanotrasen Navy Captain" - pda.name = "PDA-[M.real_name] ([pda.ownjob])" - - M.equip_or_collect(pda, slot_r_store) - M.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(M), slot_l_store) + M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_wear_pda) + M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt) + M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) + L.imp_in = M + L.implanted = 1 + M.sec_hud_set_implants() var/obj/item/weapon/card/id/centcom/W = new(M) W.name = "[M.real_name]'s ID Card (Nanotrasen Navy Captain)" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index cdc2eaf40a5..6d1240ac86d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -448,6 +448,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if (!job_master) return for(var/datum/job/job in job_master.occupations) + if (job.admin_only) + continue + index += 1 if((index >= limit) || (job.title in splitJobs)) if((index < limit) && (lastJob != null)) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 92c2c42596c..4a5fd62efe8 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -245,6 +245,8 @@ if(jobban_isbanned(src,rank)) return 0 if(!is_job_whitelisted(src, rank)) return 0 if(!job.player_old_enough(src.client)) return 0 + if(job.admin_only && !(check_rights(R_ADMIN, 0))) return 0 + if(config.assistantlimit) if(job.title == "Civilian") var/count = 0 @@ -258,6 +260,19 @@ return 0 return 1 +/mob/new_player/proc/IsAdminJob(rank) + var/datum/job/job = job_master.GetJob(rank) + if(job.admin_only) + return 1 + else + return 0 + +/mob/new_player/proc/IsERTSpawnJob(rank) + var/datum/job/job = job_master.GetJob(rank) + if(job.spawn_ert) + return 1 + else + return 0 /mob/new_player/proc/AttemptLateSpawn(rank,var/spawning_at) if (src != usr) @@ -300,20 +315,26 @@ var/join_message var/datum/spawnpoint/S - if(spawning_at) - S = spawntypes[spawning_at] - - if(S && istype(S)) - if(S.check_job_spawning(rank)) - character.loc = pick(S.turfs) - join_message = S.msg + if(IsAdminJob(rank)) + if(IsERTSpawnJob(rank)) + character.loc = pick(ertdirector) + else + character.loc = pick(aroomwarp) + join_message = "has arrived" + else + if(spawning_at) + S = spawntypes[spawning_at] + if(S && istype(S)) + if(S.check_job_spawning(rank)) + character.loc = pick(S.turfs) + join_message = S.msg + else + to_chat(character, "Your chosen spawnpoint ([S.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") + character.loc = pick(latejoin) + join_message = "has arrived on the station" else - to_chat(character, "Your chosen spawnpoint ([S.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") character.loc = pick(latejoin) join_message = "has arrived on the station" - else - character.loc = pick(latejoin) - join_message = "has arrived on the station" character.lastarea = get_area(loc) // Moving wheelchair if they have one @@ -323,14 +344,18 @@ ticker.mode.latespawn(character) - if(character.mind.assigned_role != "Cyborg") + if(character.mind.assigned_role == "Cyborg") + AnnounceCyborg(character, rank, join_message) + callHook("latespawn", list(character)) + else if(IsAdminJob(rank)) + callHook("latespawn", list(character)) + else data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn AnnounceArrival(character, rank, join_message) callHook("latespawn", list(character)) - else - AnnounceCyborg(character, rank, join_message) - callHook("latespawn", list(character)) + + qdel(src) diff --git a/paradise.dme b/paradise.dme index 873134ad574..42ebf601555 100644 --- a/paradise.dme +++ b/paradise.dme @@ -478,6 +478,7 @@ #include "code\game\jobs\job_objective.dm" #include "code\game\jobs\jobs.dm" #include "code\game\jobs\whitelist.dm" +#include "code\game\jobs\job\central.dm" #include "code\game\jobs\job\civilian.dm" #include "code\game\jobs\job\engineering.dm" #include "code\game\jobs\job\job.dm"