diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 1069dd6b2d6..9bfc6fa90b0 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -140,6 +140,25 @@ CREATE TABLE `death` ( ) ENGINE=MyISAM AUTO_INCREMENT=166546 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `donators` +-- + +DROP TABLE IF EXISTS `donators`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `donators` ( + `patreon_name` varchar(32) NOT NULL, + `tier` int(2), + `ckey` varchar(32) COMMENT 'Manual Field', + `start_date` datetime, + `end_date` datetime, + `active` boolean, + PRIMARY KEY (`patreon_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + + -- -- Table structure for table `admin` -- diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 55e71aa2aab..c0cc8c86d6b 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -140,6 +140,24 @@ CREATE TABLE `SS13_death` ( ) ENGINE=MyISAM AUTO_INCREMENT=166546 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `donators` +-- + +DROP TABLE IF EXISTS `SS13_donators`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `donators` ( + `patreon_name` varchar(32) NOT NULL, + `tier` int(2), + `ckey` varchar(32) COMMENT 'Manual Field', + `start_date` datetime, + `end_date` datetime, + `active` boolean, + PRIMARY KEY (`patreon_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `SS13_admin` -- diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 3eae1797f35..318b751606d 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3753,7 +3753,7 @@ "bui" = (/turf/simulated/wall,/area/medical/morgue) "buj" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/medical/exam_room) "buk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall,/area/security/permabrig) -"bul" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"bul" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "bum" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/hallway/primary/starboard/east) "bun" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "buo" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/starboard/east) @@ -3842,7 +3842,7 @@ "bvT" = (/obj/structure/cable,/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "south bump Important Area"; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bvU" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/medical/morgue) "bvV" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor/plasteel,/area/medical/morgue) -"bvW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"bvW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "bvX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/assembly/chargebay) "bvY" = (/turf/simulated/wall/r_wall,/area/assembly/chargebay) "bvZ" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) @@ -3925,7 +3925,7 @@ "bxy" = (/obj/machinery/door/firedoor{dir = 1; name = "hazard door north"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_research{name = "Research and Development"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bxz" = (/obj/structure/morgue,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel,/area/medical/morgue) "bxA" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel,/area/medical/morgue) -"bxB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"bxB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "bxC" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bxD" = (/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bxE" = (/obj/machinery/door_control{dir = 2; id = "mechbay"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24; req_access_txt = "29"},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/assembly/chargebay) @@ -6012,7 +6012,7 @@ "clF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clG" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/medical/sleeper) "clH" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"clI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"clI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clJ" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clK" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "clL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1; on = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) @@ -6149,7 +6149,7 @@ "com" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "con" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "coo" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"cop" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) +"cop" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "coq" = (/obj/structure/stool/bed/chair/comfy/black,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "cor" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/wall,/area/engine/break_room) "cos" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -6217,14 +6217,14 @@ "cpC" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/plasteel,/area/engine/controlroom) "cpD" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "cpE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) -"cpF" = (/turf/simulated/wall,/area/medical/surgery) -"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/medical/surgery) -"cpH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/obj/machinery/holosign/surgery{id = "surgery1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cpI" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery) -"cpJ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery) -"cpK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/obj/machinery/holosign/surgery{id = "surgery2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cpF" = (/turf/simulated/wall,/area/medical/surgery1) +"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/medical/surgery1) +"cpH" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery1) +"cpI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/obj/machinery/holosign/surgery{id = "surgery1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cpJ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgery1) +"cpK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgery2) "cpL" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Genetics Maintenance"; req_access_txt = "9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/maintenance/genetics) -"cpM" = (/turf/simulated/wall/r_wall,/area/medical/surgery) +"cpM" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/medical/surgery1) "cpN" = (/turf/simulated/floor/plasteel,/area/medical/biostorage) "cpO" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/medical/biostorage) "cpP" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/medical,/obj/item/clothing/mask/gas,/obj/item/clothing/head/helmet/space/rig/medical,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/medical/biostorage) @@ -6271,15 +6271,15 @@ "cqE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "cqF" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "cqG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) -"cqH" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/light_switch{pixel_x = -5; pixel_y = 27},/obj/machinery/holosign_switch{id = "surgery1"; pixel_x = 5; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cqH" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgery2) "cqI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/door/window/westright{dir = 8; icon_state = "left"; name = "Witness Stand"},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/wood,/area/crew_quarters/courtroom) -"cqJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cqK" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cqL" = (/obj/machinery/bodyscanner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cqM" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cqN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cqJ" = (/turf/simulated/wall,/area/medical/surgery2) +"cqK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/obj/machinery/holosign/surgery{id = "surgery2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cqL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/medical/surgery2) +"cqM" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 1 North"; network = list("SS13")},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cqN" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/light_switch{pixel_x = -5; pixel_y = 27},/obj/machinery/holosign_switch{id = "surgery1"; pixel_x = 5; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cqO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cqP" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = 5; pixel_y = 27},/obj/machinery/holosign_switch{id = "surgery2"; pixel_x = -5; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cqP" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cqQ" = (/obj/machinery/light{dir = 8},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitered"},/area/medical/medbay2) "cqR" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cqS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6311,7 +6311,7 @@ "crs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/drone_fabricator,/turf/simulated/floor/plasteel,/area/engine/controlroom) "crt" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/engine/controlroom) "cru" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/computer/drone_control,/turf/simulated/floor/plasteel,/area/engine/controlroom) -"crv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall,/area/medical/surgery) +"crv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "crw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical{pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "crx" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "cry" = (/obj/structure/table,/obj/item/device/multitool,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) @@ -6319,9 +6319,9 @@ "crA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction) "crB" = (/turf/simulated/wall/r_wall/coated,/area/maintenance/turbine) "crC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Medbay Recovery Ward East"; dir = 8; network = list("SS13"); pixel_y = -22},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) -"crD" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs1"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgery) -"crE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "surgeryobs2"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgery) -"crF" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 1 North"; network = list("SS13")},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"crD" = (/obj/machinery/body_scanconsole,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"crE" = (/obj/machinery/bodyscanner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"crF" = (/obj/machinery/bodyscanner,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "crG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "crH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "crI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6372,7 +6372,7 @@ "csB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csC" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "csD" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/scrubber,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/hallway/primary/aft) -"csE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall,/area/medical/surgery) +"csE" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "csF" = (/obj/machinery/door/firedoor{dir = 1; name = "Firelock North"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plasteel,/area/engine/controlroom) "csG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/maintenance/asmaint2) "csH" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (NORTH)"; icon_state = "propulsion_l"; dir = 1},/turf/space,/area/shuttle/syndicate_sit) @@ -6383,16 +6383,16 @@ "csM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/wall/r_wall,/area/atmos/control) "csN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/atmos/control) "csO" = (/turf/simulated/wall/r_wall,/area/atmos/control) -"csP" = (/obj/machinery/body_scanconsole,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csT" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csU" = (/obj/machinery/bodyscanner,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 2 North"; network = list("SS13")},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"csY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"csP" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"csQ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/camera{c_tag = "Medbay Surgery 2 North"; network = list("SS13")},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"csR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"csS" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = 5; pixel_y = 27},/obj/machinery/holosign_switch{id = "surgery2"; pixel_x = -5; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"csT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"csU" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"csV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"csW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"csX" = (/obj/machinery/door_control{id = "surgeryobs1"; name = "Privacy Shutters Control"; pixel_x = 25; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"csY" = (/obj/machinery/door_control{id = "surgeryobs2"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "csZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Isolation A"; req_access_txt = "5"},/turf/simulated/floor/plasteel,/area/medical/patient_a) "cta" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "ctb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitered"},/area/medical/patient_a) @@ -6448,16 +6448,16 @@ "ctZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop")},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/atmos/control) "cua" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/atmos/control) "cub" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cuc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/medical/surgery) -"cud" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cue" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cuf" = (/obj/machinery/computer/operating,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cug" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cuh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cui" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cuj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cuk" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cul" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cuc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cud" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cue" = (/turf/simulated/wall/r_wall,/area/medical/surgery2) +"cuf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cug" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cuh" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cui" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cuj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cuk" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cul" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cum" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cun" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cuo" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/patients_rooms) @@ -6510,10 +6510,10 @@ "cvj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel,/area/atmos/control) "cvk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/atmos_alert,/turf/simulated/floor/plasteel,/area/atmos/control) "cvl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/wall,/area/medical/surgery) -"cvn" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cvp" = (/obj/machinery/door_control{id = "surgeryobs1"; name = "Privacy Shutters Control"; pixel_x = 25; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cvm" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cvn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cvo" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cvp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "cvq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cvr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cvs" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -6554,20 +6554,20 @@ "cwb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/atmos/control) "cwc" = (/turf/simulated/floor/plasteel,/area/atmos/control) "cwd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/computer/security/engineering,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmospherics Requests Console"; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel,/area/atmos/control) -"cwe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/surgery) -"cwf" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cwf" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/surgery2) "cwg" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/consarea) -"cwh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwi" = (/obj/machinery/door_control{id = "surgeryobs2"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwl" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"cwm" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwh" = (/obj/machinery/iv_drip,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cwi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/medical/surgery1) +"cwj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cwk" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cwl" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"cwm" = (/obj/machinery/computer/operating,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cwn" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwo" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cwo" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cwp" = (/turf/space,/area/maintenance/asmaint) "cwq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) -"cwr" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/surgery) +"cwr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cws" = (/obj/machinery/iv_drip,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/medical/patient_a) "cwt" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cwu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) @@ -6633,7 +6633,7 @@ "cxC" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit) "cxD" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit) "cxE" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Cell Door"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_sit) -"cxF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cxF" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "cxG" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "55"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access_txt = "55"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cxH" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cxI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/patients_rooms) @@ -6685,8 +6685,8 @@ "cyC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cyD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cyE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cyF" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/medical/surgery) -"cyG" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cyF" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"cyG" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "cyH" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cyI" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cyJ" = (/turf/simulated/wall,/area/maintenance/asmaint2) @@ -6783,7 +6783,7 @@ "cAw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/wall,/area/engine/break_room) "cAx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel,/area/engine/break_room) "cAy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/break_room) -"cAz" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cAz" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "cAA" = (/obj/effect/landmark/start{name = "Station Engineer"},/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/plasteel,/area/engine/break_room) "cAB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/engine/break_room) "cAC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/wall/r_wall,/area/atmos/control) @@ -6851,7 +6851,7 @@ "cBM" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cBN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cBO" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10; initialize_directions = 10; level = 2},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel,/area/atmos/distribution) -"cBP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cBP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/wall,/area/medical/surgery1) "cBQ" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cBR" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cBS" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -7004,7 +7004,7 @@ "cEJ" = (/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cEK" = (/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cEL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage) -"cEM" = (/obj/structure/table/glass,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"cEM" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "cEN" = (/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/portable_atmospherics/canister/air,/obj/effect/decal/warning_stripes/white/hollow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cEO" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/decal/warning_stripes/white/hollow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cEP" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{level = 2},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/atmos/distribution) @@ -8325,7 +8325,7 @@ "dee" = (/obj/structure/stool/bed/roller,/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0; req_access_txt = "0"},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "def" = (/obj/machinery/status_display{pixel_x = -30; pixel_y = 0},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape) "deg" = (/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/shuttle/floor4,/area/shuttle/escape) -"deh" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"deh" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) "dei" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dej" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "dek" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape) @@ -8713,7 +8713,7 @@ "dlC" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/space,/area/shuttle/constructionsite) "dlD" = (/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Escape Pod Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/pod_4) "dlE" = (/obj/structure/table,/obj/structure/bedsheetbin{pixel_x = -1; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/crew_quarters/locker) -"dlF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dlF" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "dlG" = (/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dlH" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/hydroponics) "dlI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/hydroponics) @@ -8989,16 +8989,16 @@ "dqS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/permabrig) "dqT" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig) "dqU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel,/area/security/permabrig) -"dqV" = (/obj/machinery/iv_drip,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"dqW" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"dqX" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"dqY" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"dqZ" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"dra" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/camera{c_tag = "Medbay Surgery 1 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"drb" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"drc" = (/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"drd" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) -"dre" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/camera{c_tag = "Medbay Surgery 2 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) +"dqV" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"dqW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/surgery1) +"dqX" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"dqY" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"dqZ" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/camera{c_tag = "Medbay Surgery 1 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"dra" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"drb" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"drc" = (/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery1) +"drd" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"dre" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/camera{c_tag = "Medbay Surgery 2 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) "drf" = (/obj/item/device/radio/intercom{pixel_x = 28},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A) "drg" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/aisat/maintenance{name = "\improper AI Satellite Service"}) "drh" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -22},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence) @@ -9040,6 +9040,16 @@ "drR" = (/obj/machinery/requests_console{department = "Engineering"; departmentType = 3; name = "Engineering Requests Console"; pixel_y = 30},/obj/structure/table,/obj/item/weapon/book/manual/engineering_guide,/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_y = 6},/obj/item/weapon/book/manual/engineering_singularity_safety,/obj/machinery/camera{c_tag = "Engineering North-West"; network = list("SS13")},/turf/simulated/floor/plasteel,/area/engine/engineering) "drS" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "AI Satellite Exterior East"; dir = 4; network = list("SS13","MiniSat")},/turf/space,/area/aisat) "drT" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "AI Satellite Exterior South East"; dir = 4; network = list("SS13","MiniSat")},/turf/space,/area/turret_protected/ai) +"drU" = (/obj/structure/table/glass,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"drV" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"drW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"drX" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery2) +"drY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/medical/surgery2) +"drZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall,/area/medical/surgery2) +"dsa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"dsb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall,/area/medical/surgery2) +"dsc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"dsd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) "YDt" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/tank/emergency_oxygen/nitrogen{pixel_x = 6; pixel_y = 5},/obj/item/weapon/tank/emergency_oxygen/nitrogen{pixel_x = 4; pixel_y = 3},/obj/item/weapon/tank/emergency_oxygen/plasma{pixel_x = -4; pixel_y = 5},/obj/item/weapon/tank/emergency_oxygen/plasma{pixel_x = -6; pixel_y = 3},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/biostorage) (1,1,1) = {" @@ -9200,18 +9210,18 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaabaaccjMdnrdnqdnscqscqsdoxcqscqsdnobUTbUTbUTbUTbUTbUTcekbUTbUTbUTbUTdntdntdntdntdntdntdntdntdntbUTcfScejbikbikbikbikciEbaTciGckiciIciJciKciLciMciNcmPciPciQciRciSciSciTbPSceDceCceCceCceCceEceCbGybGybPlciYciZcjaclGcjccjdchScjecmDbBccjhcjicjjcjkcjlcfdcnicxVcxVcxVcxVckNclSckUcnjcjqcjrcjscjtcbAcwncjvcdCcjwcmScjycjzcjAcfrcjBcdCcdCbxOcgfbxObxObxOcjDcjEcjFbxObxXciicjGcjHcyJcyJcyJbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikbWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbUTcjKcjKcjKcjKcjKcjKcjLcjKdnodnubUTcqsdoydnwdnycqsdnydnvdnzdnwdntdnAdnAdntdnBdntdnDdnCdntcqscelcjMbikcjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhceDcngckjckjckjckkceCbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktckscglaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccdCcdCciVcdCckHcdCciXciWcjpcgnckLckMckvckOcwAcjCckRcxTcwAbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnEclbclbclbclbclbclbclccldcleclfclgclhclicjLdnocnRbUTcqsdozdnwcqscqscqsdnvcwNdnwdntdnAdnFdnCdnCdnGdnCdnHdntcljcelcjMbikclkcllclmclnclocjSclpdhpclrclsciLcltcgdcoaciPcluchyclvchyclwclxclyclzclAclAclAclBceCbGybGycklclCbzsclEclDcoyclHclHclFclJclKclMclLclNclOcotcfhcpwckGcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcmwcmxcmxcmxcmxcmycmzcmAcmBcmCcmCcoKcjKdnocqscekcqscqscqscqscqscqscqscqscqsdntdntdnCdnIdnCdntdnCdnIdntcmEcfScjMbikclkcmFcmGcmHcmIcmJcmKcmLcmIcmIcmMcmNcmOcpxckIckIcmRcpuchycmTcmUclyclAclAclAclAcmVceCbGybGycklcmWcmXcmYcmZcnacnbcnbclIbvWbulbxBclHconcklcqQcfdcrLcxVcwscvxcwEcwCcxNcxIckDcnmcnnYDtckDbJGcumctecnqcnqcnqcnqcnqcnrcnscntcnucnvcnvcnwcnwcnvcnxcnycnzcnAcnCcnCcnDcnEcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcuncnFcnGcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcaUbWhbWhchlchlbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcmwcmxcmxcmxcmxcmycmzcmAcmBcmCcmCcoKcjKdnocqscekcqscqscqscqscqscqscqscqscqsdntdntdnCdnIdnCdntdnCdnIdntcmEcfScjMbikclkcmFcmGcmHcmIcmJcmKcmLcmIcmIcmMcmNcmOcpxckIckIcmRcpuchycmTcmUclyclAclAclAclAcmVceCbGybGycklcmWcmXcmYcmZcnacnbcnbbulbxBbvWclIclHconcklcqQcfdcrLcxVcwscvxcwEcwCcxNcxIckDcnmcnnYDtckDbJGcumctecnqcnqcnqcnqcnqcnrcnscntcnucnvcnvcnwcnwcnvcnxcnycnzcnAcnCcnCcnDcnEcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcuncnFcnGcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcaUbWhbWhchlchlbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKdnobUTbUTdnJcjMcjMcjMcjMcjMcjMcjMdnKdntdnCdnCdnCdnCdnLdnCdnCdntcnRcelcjMbikclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkchqcodcoccodciPciPciPckJcofclAclAcogcohceCbGycoicklcoocokcolcomcomcoqcojcnhcomcomcopclHcrCcklcrNcfdcupcxVcxVcxUcxVcxVcxNcEickDcowcoxcqjckDcozcuscoicoAcoAcoAcoAcoAcoDcoDcoDcoAcoAbikbikbikbikckPctdcoFckKcnCcoHcoIcoJcrecoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkdnMchobUTcqscjMbikbikbikbikbikcjMcqsdnldnAdnOdnCdnCdnCdnCdnPdnNcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcslcpvcwqchqcodcpycpzcpAcpBcpCceDcpDclAclAclAcpEceCbGybGycpFcpFcpGcpHcpIcpIcrDcyFcrEcpJcpJcpKcpFcpGcpFcqQcfdcrLdbAbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqictYbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKdoAcwNbUTcfQcejbikbikbikbikbikcejdnRdntdnSdnSdnAdnUdnTdnCcwgdntcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqyckQcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGceCbGybGycpFcqHcrFcqJcqKcqLcsPcpFcsUcqMcqKcqNcsVcqPcpFczecyWczgdbAdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikctUctUctUctUctUcjKdnWcrjcrjcrjcrjcrjdnQcwUcwUcwUcrjcrjcrjcrjcrjcrjcrjcwUcwUcwUdntdntdntdntdntdntdntcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcroclZcrqcrrcrscrtcrucmpcrwcrxcrycrzcrAceCbGybGycpFcuicsYcvocujcujcvpcpFcwicujcujcwjcujcwkcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaSecsdctvdnZctvdoBcsdcsecsfcsgcsgcshcsicspcskcyrcsmcsncsocsrcsqcsqcsscsqcstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcmQcsFcnBcodcoeckIcoEcorcsKcsLcsMcsNcsObGybGycpFcwlcsQcsRcsScsTcwmcpFdehcsTcsWcsXdlFdqVcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDcoGcwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctvctvctvdoBcsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEctEctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNcqzctPctQcyqctSctTbEbctVctWctXcAvctZcuacnqcubcuccudcuecufcugcuhdqWcpFdqXcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLcrpdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKdqYcpFdqZcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWcoGbGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwcwAcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdogdofcrjcrjcrjcrjdnQcwUcwUcwUcwUdnXcwUcvFcvGcvGcvHctBdlXcwUcCmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcAzcwhdradrcdrbcpFdrdcEMdrecqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRcoGcyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDcwAcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxaabagiaabaqZbikaqZaqZdoidoCdojdojdojdoldokcwUcwOcwPcwQcwRcwScwTcwUcwVcwWcvOcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpFcpFcxBcpFcpFcwecrvcuccuccuccxFcuccsEcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgcBbcoGbGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTcwAcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcwUcwUcwUcwUcwUcwUcwUcwUdoicwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcDucxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTceJceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjcoGdclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcFRcwAcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycvOcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbcwAcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkdnMchobUTcqscjMbikbikbikbikbikcjMcqsdnldnAdnOdnCdnCdnCdnCdnPdnNcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcslcpvcwqchqcodcpycpzcpAcpBcpCceDcpDclAclAclAcpEceCbGybGycpFcpFcpGcpIcpHcpHcpJcpMcpKcqHcqHcqKcqJcqLcqJcqQcfdcrLdbAbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqictYbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKdoAcwNbUTcfQcejbikbikbikbikbikcejdnRdntdnSdnSdnAdnUdnTdnCcwgdntcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqyckQcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGceCbGybGycpFcqNcqMcrvcqPcrEcrDcpFcrFcsPcsEcsRcsQcsScqJczecyWczgdbAdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikctUctUctUctUctUcjKdnWcrjcrjcrjcrjcrjdnQcwUcwUcwUcrjcrjcrjcrjcrjcrjcrjcwUcwUcwUdntdntdntdntdntdntdntcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcroclZcrqcrrcrscrtcrucmpcrwcrxcrycrzcrAceCbGybGycpFcsUcsTcsWcsVcsVcsXcpFcsYcuccuccudcuccufcuebGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaSecsdctvdnZctvdoBcsdcsecsfcsgcsgcshcsicspcskcyrcsmcsncsocsrcsqcsqcsscsqcstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcmQcsFcnBcodcoeckIcoEcorcsKcsLcsMcsNcsObGybGycpFcuhcugcujcuiculcukcpFcvmcvocvncwecvpcwhcwfbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDcoGcwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctvctvctvdoBcsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEctEctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNcqzctPctQcyqctSctTbEbctVctWctXcAvctZcuacnqcubcwicwkcwjcwmcwlcwrcwocqJcxFcsEcyFcyGcsEcAzcwfbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLcrpdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcBPcEMcqPcrvcqPcqPdehcqJdlFcsEcsEcsRcsEdqVcwfbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWcoGbGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwcwAcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdogdofcrjcrjcrjcrjdnQcwUcwUcwUcwUdnXcwUcvFcvGcvGcvHctBdlXcwUcCmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrdqWdqYdqXdradqZdrcdrbcqJdrddrUdredrWdrVdrXcuebikbikbikdbFdbZdbYdcadbIdccdcbdbUczRcoGcyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDcwAcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxaabagiaabaqZbikaqZaqZdoidoCdojdojdojdoldokcwUcwOcwPcwQcwRcwScwTcwUcwVcwWcvOcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrdqWcpFcpFcxBcpFcpFdqWdrZdrYdrYdrYdsadrYdsbcuebikbikbikdbFdbFdbFdbFdbFdbydcedcgcBbcoGbGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTcwAcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcwUcwUcwUcwUcwUcwUcwUcwUdoicwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcDucxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTceJceJdscbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjcoGdclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcFRcwAcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycvOcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBcdsdcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbcwAcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqbikaqZdoicfRcfRcfRdoidoidorczsdoidoiczsczsdoidoiczsczscwWcvOcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUcoGcgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcGIcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaqZaabczocAkczqbikczocAkczqaabczocAkczqbikaabdoidondosdoqdoibikaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcFbcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcALcBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUclUclUclUclUcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikdoidoiczsdoidoibikaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcIUcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctaclUciUckucjoclUcBXcCPcBYcCRcCQclUcusbGycoAbikbikckPcxOcxOcxOckycCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dad6165400f..049019a32d2 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -287,3 +287,11 @@ #define SHELTER_DEPLOY_BAD_TURFS "bad turfs" #define SHELTER_DEPLOY_BAD_AREA "bad area" #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" + +// Client donator levels +#define DONATOR_LEVEL_NONE 0 +#define DONATOR_LEVEL_ONE 1 +#define DONATOR_LEVEL_TWO 2 + +// The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps +#define OOC_COOLDOWN 5 diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 703b3e6b205..d39cc600221 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -24,5 +24,6 @@ #define DISABLE_KARMA_REMINDER 4096 #define MEMBER_PUBLIC 8192 #define CHAT_NO_ADMINLOGS 16384 +#define DONATOR_PUBLIC 32768 -#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC) +#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index c7edd88803a..dbd9f92f533 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -150,7 +150,10 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(temp, ICON_OVERLAY) //Tail - if(H.species.tail && H.species.flags & HAS_TAIL) + if(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/tail)) + temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state) + preview_icon.Blend(temp, ICON_OVERLAY) + else if(H.species.tail && H.species.bodyflags & HAS_TAIL) temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) @@ -173,6 +176,17 @@ proc/get_id_photo(var/mob/living/carbon/human/H) if(H.species.bodyflags & HAS_SKIN_COLOR) preview_icon.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD) + //Tail Markings + var/icon/t_marking_s + if(H.species.bodyflags & HAS_TAIL_MARKINGS) + var/tail_marking = H.m_styles["tail"] + var/datum/sprite_accessory/tail_marking_style = marking_styles_list[tail_marking] + if(tail_marking_style && tail_marking_style.species_allowed) + t_marking_s = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]_s") + t_marking_s.Blend(H.m_colours["tail"], ICON_ADD) + if(!(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/body))) + preview_icon.Blend(t_marking_s, ICON_OVERLAY) + var/icon/face_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "bald_s") if(!(H.species.bodyflags & NO_EYES)) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s") @@ -190,7 +204,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) // I'll want to make a species-specific proc for this sooner or later // But this'll do for now if(head_organ.species.name == "Slime People") - hair_s.Blend(rgb(H.r_skin, H.g_skin, H.b_skin, 160), ICON_ADD) + hair_s.Blend(rgb(H.r_skin, H.g_skin, H.b_skin, 160), ICON_AND) else hair_s.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD) @@ -378,9 +392,22 @@ proc/get_id_photo(var/mob/living/carbon/human/H) else clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + preview_icon.Blend(face_s, ICON_OVERLAY) // Why do we do this twice if(clothes_s) preview_icon.Blend(clothes_s, ICON_OVERLAY) + //Bus body accessories that go over clothes. + if(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/body)) + temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state) + if(H.body_accessory.pixel_x_offset) + temp.Shift(EAST, H.body_accessory.pixel_x_offset) + if(H.body_accessory.pixel_y_offset) + temp.Shift(NORTH, H.body_accessory.pixel_y_offset) + if(H.species.bodyflags & HAS_SKIN_COLOR) + temp.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), H.body_accessory.blend_mode) + if(t_marking_s) + temp.Blend(t_marking_s, ICON_OVERLAY) + preview_icon.Blend(temp, ICON_OVERLAY) qdel(face_s) qdel(clothes_s) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 59ca735f843..1bcc5bad5ef 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1554,6 +1554,14 @@ var/list/ghostteleportlocs = list() name = "\improper Surgery" icon_state = "surgery" +/area/medical/surgery1 + name = "\improper Surgery 1" + icon_state = "surgery1" + +/area/medical/surgery2 + name = "\improper Surgery 2" + icon_state = "surgery2" + /area/medical/surgeryobs name = "\improper Surgery Observation" icon_state = "surgery" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 0dd6c109170..7f4b0574450 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -179,7 +179,7 @@ if(has_gravity(src)) return 1 - if(pulledby) + if(pulledby && !pulledby.pulling) return 1 if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 2c5fdbbb5b1..e5af89c3d25 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -149,38 +149,20 @@ else H.change_gender(MALE, 0) - var/number_head_marks = 0 - var/number_body_marks = 0 - var/number_tail_marks = 0 - for(var/m in marking_styles_list) - var/datum/sprite_accessory/body_markings/marking = marking_styles_list[m] - if(marking.marking_location == "head") - number_head_marks++ - else if(marking.marking_location == "body") - number_body_marks++ - else if(marking.marking_location == "tail") - number_tail_marks++ - //Head Markings var/head_marks = dna.GetUIValueRange(DNA_UI_HEAD_MARK_STYLE, marking_styles_list.len) - if((head_marks > 0) && (head_marks <= number_head_marks)) + if((head_marks > 0) && (head_marks <= marking_styles_list.len)) H.m_styles["head"] = marking_styles_list[head_marks] //Body Markings var/body_marks = dna.GetUIValueRange(DNA_UI_BODY_MARK_STYLE, marking_styles_list.len) - if((body_marks > 0) && (body_marks <= number_body_marks)) + if((body_marks > 0) && (body_marks <= marking_styles_list.len)) H.m_styles["body"] = marking_styles_list[body_marks] //Tail Markings var/tail_marks = dna.GetUIValueRange(DNA_UI_TAIL_MARK_STYLE, marking_styles_list.len) - if((tail_marks > 0) && (tail_marks <= number_tail_marks)) + if((tail_marks > 0) && (tail_marks <= marking_styles_list.len)) H.m_styles["tail"] = marking_styles_list[tail_marks] - H.force_update_limbs() - H.update_eyes() - H.update_hair() - H.update_fhair() - H.update_markings() - H.update_tail_layer() - H.update_head_accessory() + H.regenerate_icons() return 1 else diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 69d87a37b7f..b3319c34ecb 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -629,7 +629,8 @@ spawn(600) if(src) stored_obj.loc = get_turf(src.loc) - to_chat(spawner, "Failure! Your trap on \the [stored_obj] didn't catch anyone this time.") + if(spawner) + to_chat(spawner, "Failure! Your trap on \the [stored_obj] didn't catch anyone this time.") qdel(src) /obj/item/weapon/guardian_bomb/proc/detonate(var/mob/living/user) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 33b1d79cb19..99ff973ca76 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -385,8 +385,11 @@ var/heal_fire = occupant.getFireLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getFireLoss()) : 0 occupant.heal_organ_damage(heal_brute,heal_fire) if(beaker && next_trans == 0) + var/proportion = 10 * min(1/beaker.volume, 1) + // Yes, this means you can get more bang for your buck with a beaker of SF vs a patch + // But it also means a giant beaker of SF won't heal people ridiculously fast 4 cheap + beaker.reagents.reaction(occupant, TOUCH, proportion) beaker.reagents.trans_to(occupant, 1, 10) - beaker.reagents.reaction(occupant) next_trans++ if(next_trans == 10) next_trans = 0 @@ -446,7 +449,7 @@ set name = "Eject occupant" set category = "Object" set src in oview(1) - + if(usr == occupant)//If the user is inside the tube... if(usr.stat == DEAD) return @@ -466,18 +469,18 @@ set name = "Move Inside" set category = "Object" set src in oview(1) - + for(var/mob/living/carbon/slime/M in range(1,usr)) if(M.Victim == usr) to_chat(usr, "You're too busy getting your life sucked out of you.") return - + if(stat & (NOPOWER|BROKEN)) return - + if(usr.incapacitated()) //are you cuffed, dying, lying, stunned or other return - + put_mob(usr) return diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index f7e78ffad2e..1d8d9a1e22e 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -981,7 +981,7 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob, pa /obj/machinery/newscaster/proc/newsAlert(var/news_call) //This isn't Agouri's work, for it is ugly and vile. if(news_call) - atom_say("Breaking news from [news_call]!") + atom_say("[news_call]!") src.alert = 1 src.update_icon() spawn(300) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index a0dcdaec042..8eb92562b7f 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -207,9 +207,9 @@ RCD var/obj/machinery/door/airlock/T = new door_type(A) T.autoclose = 1 if(one_access) - T.req_one_access = door_accesses + T.req_one_access = door_accesses.Copy() else - T.req_access = door_accesses + T.req_access = door_accesses.Copy() return 1 return 0 return 0 diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 6399a11c291..5714f5e4310 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -147,6 +147,7 @@ triggered = 1 visible_message("You hear a quiet click.") spawn(40) + var/cap = 0 if(result > MAX_EX_LIGHT_RANGE && result != 20) cap = 1 @@ -156,6 +157,13 @@ var/turf/epicenter = get_turf(src) explosion(epicenter, round(result*0.25), round(result*0.5), round(result), round(result*1.5), 1, cap) + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + bombers += "E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]" + message_admins("E20 detonated at [A.name] (JMP) with a roll of [result]. Triggered by: [key_name_admin(user)]") + log_game("E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]") + + /obj/item/weapon/dice/update_icon() overlays.Cut() overlays += "[src.icon_state][src.result]" diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index 6badf7a6535..ffaff75288d 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -25,21 +25,12 @@ for(var/i = 1, i <= amount, i++) new content_mob(loc) already_opened = 1 - ..() + . = ..() /obj/structure/closet/critter/close() ..() return 1 -/obj/structure/closet/critter/attack_hand(mob/user as mob) - src.add_fingerprint(user) - - if(src.loc == user.loc) - to_chat(user, "It won't budge!") - toggle() - else - toggle() - /obj/structure/closet/critter/corgi name = "corgi crate" content_mob = /mob/living/simple_animal/pet/corgi diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 2c896f3dbdf..38abe4b5fd0 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -32,7 +32,7 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use OOC (muted).") return - if(handle_spam_prevention(msg, MUTE_OOC)) + if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN)) return if(findtext(msg, "byond://")) to_chat(src, "Advertising other servers is not allowed.") @@ -61,16 +61,24 @@ var/global/admin_ooc_colour = "#b82e00" for(var/client/C in clients) if(C.prefs.toggles & CHAT_OOC) var/display_name = src.key + if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) var/icon/byond = icon('icons/member_content.dmi', "blag") display_name = "[bicon(byond)][display_name]" + + if(donator_level >= DONATOR_LEVEL_ONE) + if((prefs.toggles & DONATOR_PUBLIC)) + var/icon/donator = icon('icons/ooc_tag_16x.dmi', "donator") + display_name = "[bicon(donator)][display_name]" + if(holder) if(holder.fakekey) if(C.holder) display_name = "[holder.fakekey]/([src.key])" else display_name = holder.fakekey + to_chat(C, "OOC: [display_name]: [msg]") /proc/toggle_ooc() @@ -168,7 +176,7 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use LOOC (muted).") return - if(handle_spam_prevention(msg,MUTE_OOC)) + if(handle_spam_prevention(msg, MUTE_OOC, OOC_COOLDOWN)) return if(findtext(msg, "byond://")) to_chat(src, "Advertising other servers is not allowed.") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index d78ef5dcde3..c17671995ff 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -24,7 +24,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!msg) return - if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN)) return msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index d711a3f5910..63241ce43c5 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -99,7 +99,7 @@ adminhelp(msg) //admin we are replying to has vanished, adminhelp instead return - if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN)) return //clean the message if it's not sent by a high-rank admin diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 03365b38385..486b95f5a1b 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -9,7 +9,7 @@ if(usr.client.prefs.muted & MUTE_PRAY) to_chat(usr, "\red You cannot pray (muted).") return - if(src.client.handle_spam_prevention(msg,MUTE_PRAY)) + if(client.handle_spam_prevention(msg, MUTE_PRAY, OOC_COOLDOWN)) return var/image/cross = image('icons/obj/storage.dmi',"bible") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index c1cbd07daee..bb243c3e6aa 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -4,8 +4,9 @@ //////////////// var/datum/admins/holder = null - var/last_message = "" //Contains the last message sent by this client - used to protect against copy-paste spamming. - var/last_message_count = 0 //contins a number of how many times a message identical to last_message was sent. + var/last_message = "" //contains the last message sent by this client - used to protect against copy-paste spamming. + var/last_message_count = 0 //contains a number of how many times a message identical to last_message was sent. + var/last_message_time = 0 //holds the last time (based on world.time) a message was sent ///////// //OTHER// @@ -88,4 +89,7 @@ // Their chat window, sort of important. // See /goon/code/datums/browserOutput.dm - var/datum/chatOutput/chatOutput \ No newline at end of file + var/datum/chatOutput/chatOutput + + // Donator stuff. + var/donator_level = DONATOR_LEVEL_NONE \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 7a668e375fc..0cf9b0a0915 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -233,19 +233,25 @@ return 0 return 1 -/client/proc/handle_spam_prevention(var/message, var/mute_type) - if(config.automute_on && !holder && src.last_message == message) - src.last_message_count++ - if(src.last_message_count >= SPAM_TRIGGER_AUTOMUTE) - to_chat(src, "\red You have exceeded the spam filter limit for identical messages. An auto-mute was applied.") - cmd_admin_mute(src.mob, mute_type, 1) +/client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0) + if(throttle) + if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0)) + var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1) + to_chat(src, "You are sending messages to quickly. Please wait [wait_time] [wait_time == 1 ? "second" : "seconds"] before sending another message.") + return 1 + last_message_time = world.time + if(config.automute_on && !check_rights(R_ADMIN, 0) && last_message == message) + last_message_count++ + if(last_message_count >= SPAM_TRIGGER_AUTOMUTE) + to_chat(src, "You have exceeded the spam filter limit for identical messages. An auto-mute was applied.") + cmd_admin_mute(mob, mute_type, 1) return 1 - if(src.last_message_count >= SPAM_TRIGGER_WARNING) - to_chat(src, "\red You are nearing the spam filter limit for identical messages.") + if(last_message_count >= SPAM_TRIGGER_WARNING) + to_chat(src, "You are nearing the spam filter limit for identical messages.") return 0 else last_message = message - src.last_message_count = 0 + last_message_count = 0 return 0 //This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc. @@ -299,6 +305,8 @@ admins += src holder.owner = src + donator_check() + //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) prefs = preferences_datums[ckey] if(!prefs) @@ -372,10 +380,27 @@ return ..() +/client/proc/donator_check() + if(IsGuestKey(key)) + return + + establish_db_connection() + if(!dbcon.IsConnected()) + return + + //Donator stuff. + var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'") + query_donor_select.Execute() + while(query_donor_select.NextRow()) + if(!text2num(query_donor_select.item[3])) + // Inactive donator. + donator_level = DONATOR_LEVEL_NONE + return + donator_level = text2num(query_donor_select.item[2]) + break /client/proc/log_client_to_db() - - if( IsGuestKey(src.key) ) + if(IsGuestKey(key)) return establish_db_connection() diff --git a/code/modules/client/preference/loadout/loadout.dm b/code/modules/client/preference/loadout/loadout.dm index 010fc54564c..b42c5d5abf1 100644 --- a/code/modules/client/preference/loadout/loadout.dm +++ b/code/modules/client/preference/loadout/loadout.dm @@ -4,6 +4,7 @@ var/list/gear_datums = list() /datum/loadout_category var/category = "" var/list/gear = list() + var/donor_only = FALSE /datum/loadout_category/New(cat) category = cat @@ -33,6 +34,8 @@ var/list/gear_datums = list() if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] + if(initial(G.donor_only)) + LC.donor_only = TRUE gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] @@ -54,6 +57,7 @@ var/list/gear_datums = list() var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. var/subtype_path = /datum/gear //for skipping organizational subtypes (optional) var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time + var/donor_only = FALSE // if it's only available to donors /datum/gear/New() ..() @@ -76,4 +80,4 @@ var/list/gear_datums = list() var/item = new gd.path(gd.location) for(var/datum/gear_tweak/gt in gear_tweaks) gt.tweak_item(item, metadata["[gt]"]) - return item \ No newline at end of file + return item diff --git a/code/modules/client/preference/loadout/loadout_donor.dm b/code/modules/client/preference/loadout/loadout_donor.dm new file mode 100644 index 00000000000..edf7e173730 --- /dev/null +++ b/code/modules/client/preference/loadout/loadout_donor.dm @@ -0,0 +1,90 @@ +/datum/gear/donor + donor_only = TRUE + sort_category = "Donor" + subtype_path = /datum/gear/donor + +/datum/gear/donor/furgloves + display_name = "Fur Gloves" + path = /obj/item/clothing/gloves/furgloves + +/datum/gear/donor/furboots + display_name = "Fur Boots" + path = /obj/item/clothing/shoes/furboots + +/datum/gear/donor/noble_boot + display_name = "Noble Boots" + path = /obj/item/clothing/shoes/fluff/noble_boot + +/datum/gear/donor/furcape + display_name = "Fur Cape" + path = /obj/item/clothing/suit/furcape + cost = 2 + +/datum/gear/donor/furcoat + display_name = "Fur Coat" + path = /obj/item/clothing/suit/furcoat + cost = 2 + +/datum/gear/donor/lord_admiral + display_name = "Lord Admiral Coat" + path = /obj/item/clothing/suit/lordadmiral + +/datum/gear/donor/lord_admiral_hat + display_name = "Lord Admiral Hat" + path = /obj/item/clothing/head/lordadmiralhat + +/datum/gear/donor/kamina + display_name = "Spiky Orange-tinted Shades" + path = /obj/item/clothing/glasses/fluff/kamina + +/datum/gear/donor/green + display_name = "Spiky Green-tinted Shades" + path = /obj/item/clothing/glasses/fluff/kamina/green + +/datum/gear/donor/hipster + display_name = "Hipster Glasses" + path = /obj/item/clothing/glasses/regular/hipster + +/datum/gear/donor/threedglasses + display_name = "Threed Glasses" + path = /obj/item/clothing/glasses/threedglasses + +/datum/gear/donor/blacksombrero + display_name = "Black Sombrero" + path = /obj/item/clothing/head/fluff/blacksombrero + +/datum/gear/donor/guardhelm + display_name = "Plastic Guard helm" + path = /obj/item/clothing/head/fluff/guardhelm + +/datum/gear/donor/goldtophat + display_name = "Gold-trimmed Top Hat" + path = /obj/item/clothing/head/fluff/goldtophat + +/datum/gear/donor/goldtophat/red + display_name = "Red Gold-trimmed Top Hat" + path = /obj/item/clothing/head/fluff/goldtophat/red + +/datum/gear/donor/goldtophat/blue + display_name = "Blue Gold-trimmed Top Hat" + path = /obj/item/clothing/head/fluff/goldtophat/blue + +/datum/gear/donor/mushhat + display_name = "Mushroom Hat" + path = /obj/item/clothing/head/fluff/mushhat + +/datum/gear/donor/furcap + display_name = "Fur Cap" + path = /obj/item/clothing/head/furcap + +/datum/gear/donor/mouse + display_name = "Mouse Headband" + path = /obj/item/clothing/head/kitty/mouse + +/datum/gear/donor/fawkes + display_name = "Guy Fawkes mask" + path = /obj/item/clothing/mask/fawkes + +/datum/gear/donor/noble_clothes + display_name = "Noble Clothes" + path = /obj/item/clothing/under/noble_clothes diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 72ec8f101d2..6414cdde907 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -61,7 +61,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts #define MAX_SAVE_SLOTS 20 // Save slots for regular players #define MAX_SAVE_SLOTS_MEMBER 20 // Save slots for BYOND members -#define MAX_GEAR_COST config.max_loadout_points #define TAB_CHAR 0 #define TAB_GAME 1 @@ -73,6 +72,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used // var/savefile_version = 0 var/max_save_slots = MAX_SAVE_SLOTS + var/max_gear_slots = 0 //non-preference stuff var/warns = 0 @@ -212,11 +212,17 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts /datum/preferences/New(client/C) b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") + if(istype(C)) if(!IsGuestKey(C.key)) unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = MAX_SAVE_SLOTS_MEMBER + + max_gear_slots = config.max_loadout_points + if(C.donator_level >= DONATOR_LEVEL_ONE) + max_gear_slots += 5 + var/loaded_preferences_successfully = load_preferences(C) if(loaded_preferences_successfully) if(load_character(C)) @@ -249,7 +255,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts switch(current_tab) if(TAB_CHAR) // Character Settings - dat += "
" + dat += "
" dat += "
" dat += "Name: " dat += "[real_name]" @@ -428,6 +434,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "OOC notes: Edit
" if(unlock_content) dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
" + if(user.client.donator_level >= DONATOR_LEVEL_ONE) + dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Randomized character slot: [randomslot ? "Yes" : "No"]
" dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" @@ -464,14 +472,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts total_cost += G.cost var/fcolor = "#3366CC" - if(total_cost < MAX_GEAR_COST) + if(total_cost < max_gear_slots) fcolor = "#E67300" dat += "" - dat += "" + dat += "" dat += "
[total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
[total_cost]/[max_gear_slots] loadout points spent. \[Clear Loadout\]
" var/firstcat = 1 for(var/category in loadout_categories) + var/datum/loadout_category/LC = loadout_categories[category] + if(LC.donor_only) + if(user.client.donator_level < DONATOR_LEVEL_TWO) // level two donators get the donator loadout, so don't show it to anyone with less than that + continue if(firstcat) firstcat = 0 else @@ -1097,6 +1109,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(TG.display_name in gear) gear -= TG.display_name else + if(TG.donor_only) + if(user.client.donator_level < DONATOR_LEVEL_TWO) // donator items are locked to > tier 2 + //they normally can't even get this far- but just in case of href exploits, we check them here + return var/total_cost = 0 var/list/type_blacklist = list() for(var/gear_name in gear) @@ -1108,7 +1124,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts type_blacklist += G.subtype_path total_cost += G.cost - if((total_cost + TG.cost) <= MAX_GEAR_COST) + if((total_cost + TG.cost) <= max_gear_slots) gear += TG.display_name else if(href_list["gear"] && href_list["tweak"]) @@ -1875,6 +1891,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(unlock_content) toggles ^= MEMBER_PUBLIC + if("donor_public") + if(user.client.donator_level >= DONATOR_LEVEL_ONE) + toggles ^= DONATOR_PUBLIC + if("gender") if(gender == MALE) gender = FEMALE diff --git a/code/modules/clothing/patreon/glasses.dm b/code/modules/clothing/patreon/glasses.dm new file mode 100644 index 00000000000..8f795b212a2 --- /dev/null +++ b/code/modules/clothing/patreon/glasses.dm @@ -0,0 +1,21 @@ +/* + Donator Glasses Loadout for Patreon +*/ +//Kamina shades +/obj/item/clothing/glasses/fluff/kamina + name = "Spiky Orange-tinted Shades" + desc = "Row row!" + icon_state = "gar" + item_state = "gar" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi' + ) + + +//Green Kamina shades +/obj/item/clothing/glasses/fluff/kamina/green + name = "Spiky Green-tinted Shades" + desc = "Fight the power!" + icon_state = "garm" + item_state = "garm" \ No newline at end of file diff --git a/code/modules/clothing/patreon/hats.dm b/code/modules/clothing/patreon/hats.dm new file mode 100644 index 00000000000..bfcc69972e4 --- /dev/null +++ b/code/modules/clothing/patreon/hats.dm @@ -0,0 +1,63 @@ +/* + Donator Loadout for Patreon +*/ + +//mushroom hat +/obj/item/clothing/head/fluff/mushhat + name = "Mushroom Hat" + desc = "A horrifying display of Nanotrasen's ruthless pursuit in being the forefront of fashion. Or genocide." + icon_state = "mushhat" + item_state = "mushhat" + flags = BLOCKHAIR + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi' + ) + +//gold top hat and recolours +/obj/item/clothing/head/fluff/goldtophat + name = "Gold-trimmed Top Hat" + desc = "Poshness incarnate." + icon_state = "goldtophat" + item_state = "goldtophat" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi' + ) + + +/obj/item/clothing/head/fluff/goldtophat/blue + name = "Gold-trimmed Blue Top Hat" + desc = "Poshness incarnate. With blue." + icon_state = "goldtophatblue" + item_state = "goldtophatblue" + +/obj/item/clothing/head/fluff/goldtophat/red + name = "Gold-trimmed Red Top Hat" + desc = "Poshness incarnate. With red." + icon_state = "goldtophatred" + item_state = "goldtophatred" + +//medieval guard helm +/obj/item/clothing/head/fluff/guardhelm + name = "Plastic Guard helm" + desc = "A plastic re-creation of a medieval-era headwear worn by extremely bored recruits of the local army. Kintergarden only." + icon_state = "guardhelm" + item_state = "guardhelm" + flags = BLOCKHAIR + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi' + ) + +//black sombrero +/obj/item/clothing/head/fluff/blacksombrero + name = "Black sombrero" + desc = "A rare identifying hat of the infamous ancient renegade gang known as 'El Loco Pocos'" + icon_state = "blacksombrero" + item_state = "blacksombrero" + flags = BLOCKHAIR + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi' + ) \ No newline at end of file diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index a5c1e69b847..3ced404f91b 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -446,6 +446,11 @@ /obj/item/clothing/head/hood/fluff/linda //Epic_Charger: Linda Clark icon_state = "greenhood" +/obj/item/clothing/suit/armor/shodanscoat // RazekPraxis: SHODAN + name = "SHODAN's Captain's Coat" + desc = "A black coat with gold trim and an old US Chevron printed on the back. Edgy." + icon_state = "shodancoat" + //////////// Uniforms //////////// /obj/item/clothing/under/fluff/kharshai // Kharshai: Athena Castile name = "Castile formal outfit" diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index bd0c3538462..37826ae0a10 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -378,7 +378,7 @@ message = "[src] faints." if(src.sleeping) return //Can't faint while asleep - AdjustSleeping(1) + AdjustSleeping(2) m_type = 1 if("cough", "coughs") diff --git a/code/modules/mob/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm index b21c3110b1d..6a18da90aaa 100644 --- a/code/modules/mob/living/simple_animal/tribbles.dm +++ b/code/modules/mob/living/simple_animal/tribbles.dm @@ -212,9 +212,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, //||Fur and Fur Products || -/obj - var/f_amt = 0 // registers fur amount as an object variable - /obj/item/stack/sheet/fur //basic fur sheets (very lumpy furry piles of sheets) name = "pile of fur" @@ -223,38 +220,40 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, icon = 'icons/mob/tribbles.dmi' icon_state = "sheet-fur" origin_tech = "materials=2" - f_amt = 1000 max_amount = 50 + /obj/item/clothing/ears/earmuffs/tribblemuffs //earmuffs but with tribbles name = "earmuffs" desc = "Protects your hearing from loud noises, and quiet ones as well." icon = 'icons/mob/tribbles.dmi' icon_state = "tribblemuffs" item_state = "tribblemuffs" - f_amt = 2000 +/* The advanced cold protection of the non-coat items has been removed, so as not + to give patreon donors an unfair advantage - the winter coat provides equivalent + cold protection +*/ /obj/item/clothing/gloves/furgloves desc = "These gloves are warm and furry." name = "fur gloves" icon = 'icons/mob/tribbles.dmi' icon_state = "furglovesico" item_state = "furgloves" - f_amt = 3000 - - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + transfer_prints = TRUE + transfer_blood = TRUE + siemens_coefficient = 0 +// Equivalent to a winter coat's hood /obj/item/clothing/head/furcap name = "fur cap" desc = "A warm furry cap." icon = 'icons/mob/tribbles.dmi' icon_state = "furcap" item_state = "furcap" - f_amt = 5000 cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT /obj/item/clothing/shoes/furboots name = "fur boots" @@ -262,11 +261,8 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, icon = 'icons/mob/tribbles.dmi' icon_state = "furboots" item_state = "furboots" - f_amt = 4000 - - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT +// As a donator piece of clothing, this is now in line with the winter coat /obj/item/clothing/suit/furcoat name = "fur coat" desc = "A trenchcoat made from fur. You could put an oxygen tank in one of the pockets." @@ -274,11 +270,10 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, icon_state = "furcoat" item_state = "furcoat" blood_overlay_type = "armor" - f_amt = 15000 - body_parts_covered = UPPER_TORSO|LEGS|ARMS|LOWER_TORSO + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO allowed = list (/obj/item/weapon/tank/emergency_oxygen) - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + cold_protection = UPPER_TORSO | LOWER_TORSO | ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT /obj/item/clothing/suit/furcape name = "fur cape" @@ -287,7 +282,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles, icon_state = "furcape" item_state = "furcape" blood_overlay_type = "armor" - f_amt = 10000 - body_parts_covered = UPPER_TORSO|LEGS|ARMS - cold_protection = UPPER_TORSO | LEGS | ARMS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + body_parts_covered = UPPER_TORSO|ARMS + cold_protection = UPPER_TORSO | ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index f0bcbfe0312..efaf84798d1 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -291,11 +291,20 @@ if(current_species && (current_species.bodyflags & HAS_TAIL)) var/tail_icon var/tail_icon_state + var/tail_shift_x + var/tail_shift_y + var/blend_mode = ICON_ADD if(body_accessory) var/datum/body_accessory/accessory = body_accessory_by_name[body_accessory] tail_icon = accessory.icon tail_icon_state = accessory.icon_state + if(accessory.blend_mode) + blend_mode = accessory.blend_mode + if(accessory.pixel_x_offset) + tail_shift_x = accessory.pixel_x_offset + if(accessory.pixel_y_offset) + tail_shift_y = accessory.pixel_y_offset else tail_icon = "icons/effects/species.dmi" if(coloured_tail) @@ -303,10 +312,14 @@ else tail_icon_state = "[current_species.tail]_s" - var/icon/temp = new /icon("icon" = tail_icon, "icon_state" = tail_icon_state) + var/icon/temp = new/icon("icon" = tail_icon, "icon_state" = tail_icon_state) + if(tail_shift_x) + temp.Shift(EAST, tail_shift_x) + if(tail_shift_y) + temp.Shift(NORTH, tail_shift_y) if(current_species && (current_species.bodyflags & HAS_SKIN_COLOR)) - temp.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + temp.Blend(rgb(r_skin, g_skin, b_skin), blend_mode) if(current_species && (current_species.bodyflags & HAS_TAIL_MARKINGS)) var/tail_marking = m_styles["tail"] diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm index 097f5fb4a58..d36ad1dd2c6 100644 --- a/code/modules/projectiles/guns/projectile/saw.dm +++ b/code/modules/projectiles/guns/projectile/saw.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw name = "\improper L6 SAW" - desc = "A heavily modified 7.62 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the reciever below the designation." + desc = "A heavily modified 5.56 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the reciever below the designation." icon_state = "l6closed100" item_state = "l6closedmag" w_class = 5 diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 8b575be41a5..3b59ff8e0b7 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -326,9 +326,9 @@ /datum/reagent/beer2/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 50) - M.AdjustSleeping(1) + M.Sleeping(2) if(51 to INFINITY) - M.AdjustSleeping(1) + M.Sleeping(2) M.adjustToxLoss((current_cycle - 50)*REAGENTS_EFFECT_MULTIPLIER) ..() diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 2a36ba585df..1e56d9d6d57 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -300,7 +300,7 @@ /obj/machinery/conveyor_switch/multitool_menu(var/mob/user, var/obj/item/device/multitool/P) return {" "} diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 5a01cd5b09f..1c71f8837ee 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -141,6 +141,9 @@ qdel(ion_trail) ion_trail = null occupant_sanity_check() + if(pilot) + pilot.forceMove(get_turf(src)) + pilot = null if(passengers) for(var/mob/M in passengers) M.forceMove(get_turf(src)) @@ -226,29 +229,15 @@ health = max(0, health - damage) var/percentage = (health / initial(health)) * 100 occupant_sanity_check() - if(passengers && oldhealth > health && percentage <= 25 && percentage > 0) - var/sound/S = sound('sound/effects/engine_alert2.ogg') - S.wait = 0 //No queue - S.channel = 0 //Any channel - S.volume = 50 - for(var/mob/M in passengers) - M << S - if(passengers && oldhealth > health && !health) - var/sound/S = sound('sound/effects/engine_alert1.ogg') - S.wait = 0 - S.channel = 0 - S.volume = 50 - for(var/mob/M in passengers) - M << S + if(oldhealth > health && percentage <= 25 && percentage > 0) + play_sound_to_riders('sound/effects/engine_alert2.ogg') + if(oldhealth > health && !health) + play_sound_to_riders('sound/effects/engine_alert1.ogg') if(!health) spawn(0) - if(passengers) - for(var/mob/M in passengers) - to_chat(M, "Critical damage to the vessel detected, core explosion imminent!") + message_to_riders("Critical damage to the vessel detected, core explosion imminent!") for(var/i = 10, i >= 0; --i) - if(passengers) - for(var/mob/M in passengers) - to_chat(M, "[i]") + message_to_riders("[i]") if(i == 0) explosion(loc, 2, 4, 8) qdel(src) @@ -266,12 +255,13 @@ occupant_sanity_check() switch(severity) if(1) - for(var/mob/M in passengers) - var/mob/living/carbon/human/H = M - if(H) - H.forceMove(get_turf(src)) - H.ex_act(severity + 1) - to_chat(H, "You are forcefully thrown from \the [src]!") + if(passengers || pilot) + for(var/mob/M in passengers | pilot) + var/mob/living/carbon/human/H = M + if(H) + H.forceMove(get_turf(src)) + H.ex_act(severity + 1) + to_chat(H, "You are forcefully thrown from \the [src]!") qdel(ion_trail) qdel(src) if(2) @@ -283,27 +273,35 @@ /obj/spacepod/emp_act(severity) occupant_sanity_check() cargo_hold.emp_act(severity) - + if(battery && battery.charge > 0) battery.use((battery.charge / 2) / severity) deal_damage(80 / severity) if(empcounter < (40 / severity)) empcounter = 40 / severity - processing_objects.Add(src) - + processing_objects.Add(src) + switch(severity) if(1) - if(pilot) - to_chat(pilot, "The pod console flashes 'Heavy EMP WAVE DETECTED'.") - if(passengers) - for(var/mob/M in passengers) - to_chat(M, "The pod console flashes 'Heavy EMP WAVE DETECTED'.") + message_to_riders("The pod console flashes 'Heavy EMP WAVE DETECTED'.") if(2) - if(pilot) - to_chat(pilot, "The pod console flashes 'EMP WAVE DETECTED'.") - if(passengers) - for(var/mob/M in passengers) - to_chat(M, "The pod console flashes 'EMP WAVE DETECTED'.") + message_to_riders("The pod console flashes 'EMP WAVE DETECTED'.") + +/obj/spacepod/proc/play_sound_to_riders(mysound) + if(length(passengers | pilot) == 0) + return + var/sound/S = sound(mysound) + S.wait = 0 //No queue + S.channel = 0 //Any channel + S.volume = 50 + for(var/mob/M in passengers | pilot) + M << S + +/obj/spacepod/proc/message_to_riders(mymessage) + if(length(passengers | pilot) == 0) + return + for(var/mob/M in passengers | pilot) + to_chat(M, mymessage) /obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params) if(user.a_intent == I_HARM) diff --git a/html/browser/common.css b/html/browser/common.css index 8c0a0253599..23b675f7fa2 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -339,4 +339,10 @@ div.notice { width: 100%; clear: both; +} +.charPreview +{ + -ms-interpolation-mode: nearest-neighbor; + width: 64px; + height:64px; } \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 5582979afc5..46d21c4293a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,66 @@ -->
+

01 December 2016

+

Crazylemon64 updated:

+
    +
  • Cryo tubes no longer let you excessively multiply the efficiency of touch chems
  • +
+

KasparoVy updated:

+
    +
  • The character preview icon in character creation is now more detailed and less blurry.
  • +
  • ID cards now show tails, body accessories and tail markings correctly.
  • +
+

Twinmold93 updated:

+
    +
  • Pilots of spacepods will no longer be sent to the void when the space pod is destroyed in any method.
  • +
  • Pilots of spacepods will now get the same warnings for damage/core destruction that passengers get.
  • +
+ +

29 November 2016

+

KasparoVy updated:

+
    +
  • Head, body and tail markings are now loaded correctly from genes (UI).
  • +
  • Changes to a person's skin-tone gene are now immediately apparent.
  • +
+ +

28 November 2016

+

Allfd updated:

+
    +
  • Fixes an issue with the processing of GitHub changelog emoji in the php webhook.
  • +
+

Crazylemon64 updated:

+
    +
  • The RCD no longer shall work as a remote permissions control
  • +
+

KasparoVy updated:

+
    +
  • Pressing the light switch in one OR will no longer turn off the lights for both.
  • +
  • The fire alarms in each OR now work independently of each-other.
  • +
  • The second operating room now has its own APC and wiring.
  • +
+ +

26 November 2016

+

Fox McCloud updated:

+
    +
  • Fixes faint emote doing nothing
  • +
  • Fixes Mickey Finn's Special Brew not functioning properly/not making you fall asleep
  • +
+ +

23 November 2016

+

Fethas updated:

+
    +
  • Fixes human jetpacks..maybe...
  • +
+

FlattestNerd updated:

+
    +
  • the e20 will now get logged when it goes BEWM, as it should.
  • +
+

Fox McCloud updated:

+
    +
  • Fixes double-breaking news newscaster
  • +
+

22 November 2016

KasparoVy updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 6278c7a98e8..da0a01e1120 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3087,3 +3087,43 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. disability as you used to. Twinmold93: - bugfix: Runtime caused by lack of settlers in the Orion arcade game. +2016-11-23: + Fethas: + - bugfix: Fixes human jetpacks..maybe... + FlattestNerd: + - tweak: the e20 will now get logged when it goes BEWM, as it should. + Fox McCloud: + - bugfix: Fixes double-breaking news newscaster +2016-11-26: + Fox McCloud: + - bugfix: Fixes faint emote doing nothing + - bugfix: Fixes Mickey Finn's Special Brew not functioning properly/not making you + fall asleep +2016-11-28: + Allfd: + - bugfix: Fixes an issue with the processing of GitHub changelog emoji in the php + webhook. + Crazylemon64: + - bugfix: The RCD no longer shall work as a remote permissions control + KasparoVy: + - bugfix: Pressing the light switch in one OR will no longer turn off the lights + for both. + - tweak: The fire alarms in each OR now work independently of each-other. + - rscadd: The second operating room now has its own APC and wiring. +2016-11-29: + KasparoVy: + - bugfix: Head, body and tail markings are now loaded correctly from genes (UI). + - bugfix: Changes to a person's skin-tone gene are now immediately apparent. +2016-12-01: + Crazylemon64: + - bugfix: Cryo tubes no longer let you excessively multiply the efficiency of touch + chems + KasparoVy: + - tweak: The character preview icon in character creation is now more detailed and + less blurry. + - bugfix: ID cards now show tails, body accessories and tail markings correctly. + Twinmold93: + - bugfix: Pilots of spacepods will no longer be sent to the void when the space + pod is destroyed in any method. + - bugfix: Pilots of spacepods will now get the same warnings for damage/core destruction + that passengers get. diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 02bbf79ad76..9d8462c03c5 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index e0cc9a7e997..b3af414cde5 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 9aed5172330..34e2a6ce696 100644 Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index c0c5dbd8678..2753f52dfee 100644 Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ diff --git a/icons/mob/species/vox/head.dmi b/icons/mob/species/vox/head.dmi index ae10eaa4b5c..21ed6e38001 100644 Binary files a/icons/mob/species/vox/head.dmi and b/icons/mob/species/vox/head.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index a3d78f0a1c9..63af8386202 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 5a198ee1e64..4380c3a34bb 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/ooc_tag_16x.dmi b/icons/ooc_tag_16x.dmi new file mode 100644 index 00000000000..2165a593220 Binary files /dev/null and b/icons/ooc_tag_16x.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 4baa2b25ae6..baf07678ed8 100755 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/paradise.dme b/paradise.dme index f80831a5b2c..aef488fba42 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1120,6 +1120,7 @@ #include "code\modules\client\preference\loadout\loadout.dm" #include "code\modules\client\preference\loadout\loadout_accessories.dm" #include "code\modules\client\preference\loadout\loadout_cosmetics.dm" +#include "code\modules\client\preference\loadout\loadout_donor.dm" #include "code\modules\client\preference\loadout\loadout_general.dm" #include "code\modules\client\preference\loadout\loadout_hat.dm" #include "code\modules\client\preference\loadout\loadout_shoes.dm" @@ -1145,6 +1146,8 @@ #include "code\modules\clothing\masks\gasmask.dm" #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\masks\voice.dm" +#include "code\modules\clothing\patreon\glasses.dm" +#include "code\modules\clothing\patreon\hats.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php index 26a08418d69..c27a7eb4c5b 100644 --- a/tools/github_webhook_processor.php +++ b/tools/github_webhook_processor.php @@ -20,7 +20,7 @@ //Github lets you have it sign the message with a secret that you can validate. This prevents people from faking events. //This var should match the secret you configured for this webhook on github. -//set to NULL (no quotes) to disable validation. +//This is required as otherwise somebody could trick the script into leaking the api key. $hookSecret = '08ajh0qj93209qj90jfq932j32r'; //Api key for pushing changelogs. @@ -49,27 +49,36 @@ set_exception_handler(function($e) { die(); }); $rawPost = NULL; -if ($hookSecret !== NULL) { - if (!isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) { - throw new \Exception("HTTP header 'X-Hub-Signature' is missing."); - } elseif (!extension_loaded('hash')) { - throw new \Exception("Missing 'hash' extension to check the secret code validity."); - } - list($algo, $hash) = explode('=', $_SERVER['HTTP_X_HUB_SIGNATURE'], 2) + array('', ''); - if (!in_array($algo, hash_algos(), TRUE)) { - throw new \Exception("Hash algorithm '$algo' is not supported."); - } - $rawPost = file_get_contents('php://input'); - if ($hash !== hash_hmac($algo, $rawPost, $hookSecret)) { - throw new \Exception('Hook secret does not match.'); - } +if (!$hookSecret || $hookSecret == '08ajh0qj93209qj90jfq932j32r') + throw new \Exception("Hook secret is required and can not be default"); +if (!isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) { + throw new \Exception("HTTP header 'X-Hub-Signature' is missing."); +} elseif (!extension_loaded('hash')) { + throw new \Exception("Missing 'hash' extension to check the secret code validity."); } +list($algo, $hash) = explode('=', $_SERVER['HTTP_X_HUB_SIGNATURE'], 2) + array('', ''); +if (!in_array($algo, hash_algos(), TRUE)) { + throw new \Exception("Hash algorithm '$algo' is not supported."); +} +$rawPost = file_get_contents('php://input'); +if ($hash !== hash_hmac($algo, $rawPost, $hookSecret)) { + throw new \Exception('Hook secret does not match.'); +} + +$contenttype = null; +//apache and nginx/fastcgi/phpfpm call this two different things. if (!isset($_SERVER['HTTP_CONTENT_TYPE'])) { - throw new \Exception("Missing HTTP 'Content-Type' header."); -} elseif (!isset($_SERVER['HTTP_X_GITHUB_EVENT'])) { + if (!isset($_SERVER['CONTENT_TYPE'])) + throw new \Exception("Missing HTTP 'Content-Type' header."); + else + $contenttype = $_SERVER['CONTENT_TYPE']; +} else { + $contenttype = $_SERVER['HTTP_CONTENT_TYPE']; +} +if (!isset($_SERVER['HTTP_X_GITHUB_EVENT'])) { throw new \Exception("Missing HTTP 'X-Github-Event' header."); } -switch ($_SERVER['HTTP_CONTENT_TYPE']) { +switch ($contenttype) { case 'application/json': $json = $rawPost ?: file_get_contents('php://input'); break; @@ -77,7 +86,7 @@ switch ($_SERVER['HTTP_CONTENT_TYPE']) { $json = $_POST['payload']; break; default: - throw new \Exception("Unsupported content type: $_SERVER[HTTP_CONTENT_TYPE]"); + throw new \Exception("Unsupported content type: $contenttype"); } # Payload structure depends on triggered event # https://developer.github.com/v3/activity/events/types/ @@ -146,14 +155,14 @@ function checkchangelog($payload, $merge = false) { $foundcltag = false; foreach ($body as $line) { $line = trim($line); - if (substr($line,0,4) == ':cl:') { + if (substr($line,0,4) == ':cl:' || substr($line,0,4) == '🆑') { $incltag = true; $foundcltag = true; $pos = strpos($line, " "); if ($pos) $username = substr($line, $pos+1); continue; - } else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:') { + } else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:' || substr($line,0,5) == '/🆑' || substr($line,0,6) == '/ 🆑' ) { $incltag = false; $changelogbody = array_merge($changelogbody, $currentchangelogblock); continue; @@ -242,7 +251,7 @@ function checkchangelog($payload, $merge = false) { if (!count($changelogbody)) return; - $file = 'author: '.$username."\n"; + $file = 'author: "'.trim(str_replace(array("\\", '"'), array("\\\\", "\\\""), $username)).'"'."\n"; $file .= "delete-after: True\n"; $file .= "changes: \n"; foreach ($changelogbody as $changelogitem) { @@ -252,8 +261,9 @@ function checkchangelog($payload, $merge = false) { $file .= "\n"; } $content = array ( - 'message' => 'Automatic changelog generation for PR #'.$payload['pull_request']['number'], - 'content' => base64_encode($file) + 'branch' => $payload['pull_request']['base']['ref'], + 'message' => 'Automatic changelog generation for PR #'.$payload['pull_request']['number'].' [ci skip]', + 'content' => base64_encode($file) ); $scontext = array('http' => array( 'method' => 'PUT', @@ -342,4 +352,4 @@ function export($addr, $port, $str) { $error = true; return "ERROR"; } -?> +?> \ No newline at end of file