From 8a8011acbfc25addb873600d9453ac6b6717b3e8 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Fri, 10 Jul 2015 09:46:30 -0400 Subject: [PATCH 01/15] Kitchen Machine Refactor and Max Item fix Refactors the code for Microwaves, Ovens, Grills, and Candy Makers to utilize a shared parent which holds the common procs. - This means any new additions or fixes will only need to be implemented in one place, rather than 4, to affect them all. - Also reduces file sizes on the individual machines' files by removing a lot of the duplicate code Updated the code for the kitchen machines to be more modular and fixed some issues. - Replaced color macros with span classes - Replaced hardcoded names with src references - Each machine has a cook_verbs list which is used to create the in use message (Microwaving in progress) - Each machine has variables to define the icon states for the different states of the machine (on, off, broken, dirty, open). - Changed a few formerly global variables to not be global, as this would cause issues with the shared code (microwave with candy maker recipes for example) Fixed a bug where the microwave would be considered "full" before having all of the ingredients for a recipe - Created a new proc to count the number of items and fruits in a recipe to determine the max_n_items value Map Edits to Cyberiad and associated Z-levels for pathing changes (map-merged) - MetaStation will need to be updated as well, I'll do this in another PR unless someone else beats me to it. --- _maps/map_files/cyberiad/cyberiad.dmm | 12 +- _maps/map_files/cyberiad/z2.dmm | 20 +- _maps/map_files/cyberiad/z4.dmm | 8 +- _maps/map_files/cyberiad/z5.dmm | 6 +- _maps/map_files/cyberiad/z6.dmm | 4 +- _maps/map_files/cyberiad/z8.dmm | 4 +- code/_globalvars/unused.dm | 2 +- code/datums/recipe.dm | 9 + code/game/machinery/constructable_frame.dm | 8 +- .../game/machinery/kitchen/kitchen_machine.dm | 386 +++++++++++++++++ code/game/machinery/kitchen/microwave.dm | 388 +---------------- code/modules/food/candy_maker.dm | 391 +----------------- code/modules/food/grill_new.dm | 387 +---------------- code/modules/food/oven_new.dm | 387 +---------------- paradise.dme | 1 + 15 files changed, 477 insertions(+), 1536 deletions(-) create mode 100644 code/game/machinery/kitchen/kitchen_machine.dm diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 44a7bb9f455..a6748ac7718 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -2820,13 +2820,13 @@ "bcl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcm" = (/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bcn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bco" = (/obj/machinery/camera{c_tag = "Kitchen"; network = list("SS13")},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/candy_maker,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bcp" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/grill,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bco" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bcp" = (/obj/machinery/camera{c_tag = "Kitchen"; network = list("SS13")},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/kitchen_machine/candy_maker,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bcq" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bcr" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bcs" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bcr" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/kitchen_machine/grill,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bcs" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/kitchen_machine/oven,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bct" = (/obj/machinery/cooker/deepfryer,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"bcu" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/oven,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"bcu" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bcv" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "bcw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics) "bcx" = (/turf/simulated/floor,/area/hydroponics) @@ -8079,7 +8079,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaWraBmaBmaBmaBmaBmaBmaWraAvaJnazEaWuaWvaAvaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUbdkaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaFSaXGaFSaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaAvaCzaBmaXWaXXaXYaXZaBmaCzaAvaAvazEaYcaSPaAvaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYsaYvaVTaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaAvaWraBmaGTaFzaFzaGUaBmaWraBmaZDaZEaZFaZGaAvaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaJaaGCaKiaJaaJaaZUaZVaZWaSUaZXaZXaZYaZYaZYaGEaGEaGEaGEaGEaGEaGEaGEbacaGFaGFaGGaGFaGRaGRaGRaGRaHeaGZaGRbacaHgaHgaHgaHgaHgaHgaHgaHgbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCaHhaHoaHhaHhaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQaHEbbSbbQbbQbbQbbTaUZaVeaGEaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaaaHgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaFTaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQaHEbbSbbQbbQbbQbbTaUZaVeaGEaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaaaHgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcpbcrbcqbcobcubctbcsaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaFTaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbbMbeFaJaaZTaZSaZRaJabdlbdmbdnbdobdpaHEbbTaUZaVeaGEaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaaaHgbchaVyaVyaHFbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbeaFTaHPaFTaFTaFTaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEaAvaAvaAvaAvaAvaAvaAvaAvaAvazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbqwbbPaJabeEcePcZXaJabeGbeHbeIbeJbnEaHEbeMbeNaVeaGEaGEbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQaHgaHgbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabaAvaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaJabeEbeDbhSaJabglbeJbgmbeJbgnaHEbbTbgoaVeaVfaVfbgpaHQbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFaHQbgGbgHbgIbchaVyaVyaHFbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpaFTaHPaFTaFTaHPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 2227af646e6..3ba8c564e04 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -281,7 +281,7 @@ "fu" = (/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost) "fv" = (/obj/structure/ninjatele{pixel_y = 25},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost) "fw" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost) -"fx" = (/obj/structure/table,/obj/machinery/microwave/upgraded,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) +"fx" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fy" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fz" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fA" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) @@ -311,7 +311,7 @@ "fY" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/escape_pod3/transit) "fZ" = (/turf/space/transit/east/shuttlespace_ew1,/area/shuttle/escape_pod3/transit) "ga" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; stopper = 0; tiles = 0},/turf/space/transit/east/shuttlespace_ew10,/area/space) -"gb" = (/obj/structure/table,/obj/machinery/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) +"gb" = (/obj/structure/table,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "gc" = (/obj/structure/table,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "gd" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "ge" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) @@ -748,7 +748,7 @@ "ot" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "ou" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_station/start) "ov" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/syndicate_station/start) -"ow" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) +"ow" = (/obj/structure/table,/obj/item/weapon/circuitboard/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "ox" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "oy" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "oz" = (/obj/machinery/computer/shuttle_control/multi/syndicate{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) @@ -1005,7 +1005,7 @@ "tq" = (/obj/structure/table,/obj/item/weapon/card/id/centcom,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/control) "tr" = (/obj/machinery/vending/dinnerware{req_access_txt = "102"},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) "ts" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) -"tt" = (/obj/structure/table,/obj/machinery/microwave/upgraded,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) +"tt" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) "tu" = (/obj/machinery/mech_bay_recharge_port/upgraded,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops) "tv" = (/obj/machinery/camera{c_tag = "CentCom Special Ops. Assault Armor North"; dir = 2; network = list("ERT","CentCom")},/obj/mecha/combat/marauder/seraph/loaded,/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom/specops) "tw" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/specops) @@ -1067,12 +1067,14 @@ "uA" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/centcom/specops) "uB" = (/turf/unsimulated/floor{icon_state = "asteroid6"; name = "sand"},/area/centcom/specops) "uC" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "thunderdomeaxe"; name = "Specialist Supply"; pixel_x = 0; pixel_y = 5; req_access_txt = "104"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin) +"uD" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "uE" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/hypospray/combat/nanites{pixel_x = 3; pixel_y = -3},/obj/item/weapon/reagent_containers/hypospray/combat/nanites,/obj/item/weapon/reagent_containers/hypospray/combat/nanites{pixel_x = -3; pixel_y = 3},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uF" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/item/bodybag/cryobag{pixel_y = 5},/obj/item/bodybag/cryobag{pixel_y = 5},/obj/item/bodybag/cryobag{pixel_y = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uG" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(109); req_one_access_txt = "109"},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uH" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "uI" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "uJ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"uK" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "uL" = (/obj/machinery/computer/message_monitor,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "uM" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "uO" = (/mob/living/silicon/decoy{name = "A.L.I.C.E."},/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control) @@ -1445,7 +1447,6 @@ "Cl" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cm" = (/obj/item/stack/sheet/metal,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cn" = (/obj/item/stack/sheet/glass,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) -"Co" = (/obj/machinery/microwave/upgraded,/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cp" = (/obj/machinery/door/window/northright{name = "bar"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cq" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cr" = (/obj/item/ashtray/glass,/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1759,7 +1760,6 @@ "It" = (/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "Iu" = (/obj/machinery/door/window{dir = 1; name = "Cell A"; req_access_txt = "101"},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "Iv" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/tdome) -"Iw" = (/obj/structure/table,/obj/machinery/microwave/upgraded,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Ix" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Iy" = (/obj/item/device/camera,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Iz" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) @@ -1836,8 +1836,8 @@ afbeaSbcaUaYdYdgddemdgddemcldXcldXdWdxdwdnbdaTaUbfaVamaqarasatauavbhaxbjbkboblbm anaUaVaZbdaXdndWdxdydWdxdydecDdecDemcmdHdFbgbabdbcaYadauavbhbibjbkboaBbmbnapaqarasatauarbjbkboblbhblbmbnapaqarasatauaKaLaMaUaVaZbdaXcjdmdmdmdmdmdmdmdmdmcPbebfaVaZbgaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCcpcpcpdadacpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeDeqeqeqbsereEeFeGerbseHeHeIeJeJbseveKeveLevbseMeNeNeNeObsePeQeQeQeRbD akbdaYbbbgaTdFemcmdwemcmdwdgckdgckdydfdXeSaSaWbgaZaXalbkboblbmbnapaqaGasatauavbhbibjbkeacGeTdZeUcJarasatauavbhbibjbkaAaLaMbdaYbbbgaTcMdmdmdmdmdmdmdmdmdmdvaUbcaYbbaSaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCeVcpeWdadacpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqeqeqeXeqbsereYeYeYerbseHeZeZeZeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD aabgaXbeaSbaeSdydfdHdydfdHdWdddWdddwclcDcEaVbfaSbbaTaoblbmbnapaqarasaIauavbhbibjbkboblcJfafbfcfdfeatauavbhbibjbkboblaCaLaMbgaXbeaSbacPdmdmdmdmdmdmdmdmdmcObdaZaXbeaVaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffgfgfhfififjfgfgfgfgfgfgfgfgfgfkfgfgfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCeCcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeqbserererererbseHeIeIeIeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD -ajaSaTaUaVaWcEdwcldXdwcldXemdxemdxdHdeckcFaYbcaVbebaabavbhbibjbkboblaCbnapaqarasatauavfnfofpfqfrfsbmbnapaqarasatauavawaLaMaSaTaUaVaWdvdmdmdmdmdmdmdmdmdmdYbgbbaTaUaYaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeVeCfLcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD -amaVbabdaYbfcFdHdecDdHdecDdycmdycmdXdgddcBaXaZaYaUaWaeboblbmbnapaqaraHatauavbhbibjbkboebfXfYfZfogaasatauavbhbibjbkboaBaLaMaVbabdaYbfcOdmdmdmdmdmdmdmdmdmdnaSbebabdaXaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffggbfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpggeCghcpgidrgjcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD +ajaSaTaUaVaWcEdwcldXdwcldXemdxemdxdHdeckcFaYbcaVbebaabavbhbibjbkboblaCbnapaqarasatauavfnfofpfqfrfsbmbnapaqarasatauavawaLaMaSaTaUaVaWdvdmdmdmdmdmdmdmdmdmdYbgbbaTaUaYaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffggbfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeVeCfLcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD +amaVbabdaYbfcFdHdecDdHdecDdycmdycmdXdgddcBaXaZaYaUaWaeboblbmbnapaqaraHatauavbhbibjbkboebfXfYfZfogaasatauavbhbibjbkboaBaLaMaVbabdaYbfcOdmdmdmdmdmdmdmdmdmdnaSbebabdaXaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffgfxfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpggeCghcpgidrgjcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD adaYaWbgaXbccBdXdgckdXdgckdwdfdwdfcDdWdxdcaTbbaXbdbfaharasatauavbhbiaybkboblbmbnapaqarcKfngxcGeTdZbjbkboblbmbnapaqaraHaLaMaYaWbgaXbcdYdmdmdmdmdmdmdmdmdmdFaVaUaWbgaTaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgygzgAfufufufffggBfygCgDgEgFgGgdgdgdgdfHfHgHfHgIfIfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCeCcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeDbserglgmgnerbsgJeIgKeIgLbsevevevevevbsgMeNeNeNgNbsgveQeQeQgwbD alaXbfaSaTaZdccDdWddcDdWdddHcldHclckemcmcQbabeaTbgbcagbjbkboblbmbnapaFarasatauavbhbibjbkboblbmbnapaqarasatauavbhbibjazaLaMaXbfaSaTaZdndmdmdmdmdmdmdmdmdmeSaYbdbfaSbaaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgOgPgQfufufufffggRgdgegegegegegdgdgdgdfHfHfHgSfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpfLeCeVcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbsgTeqeqeqeqbserglgmgnerbsgJgUgUgUgLbsgVgVgVgVgVbsgMeNeNeNgNbsgveQeQeQgwbD aoaTbcaVbabbcQckemdxckemdxdXdedXdedddydfcNaWaUbaaSaZacatauavbhbibjbkaAblbmbnapaqarasatauavbhbibjbkboblbmbnapaqarasataJaLaMaTbcaVbabbdFdmdmdmdmdmdmdmdmdmcEaXbgbcaVaWaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffffffggWgdgdgdgdgdgdgdgdgdgdgXfHfHfHfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpcpcpcpcpcpcpcpcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqfMeqgkeqbsergYgZhaerbsgJgJeIgLgLbshbhbhbhbhbbsgMeNeNeNgNbsgveQeQeQgwbD @@ -1995,7 +1995,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVAVAVAVAVAVAVAVAVxcyNyNyNBLBMBMBMBMBNBNBMBMBMBMBOyNyNyNxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNznBPBQBQBQBRzpaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVBSBTBTBTBTBTBUAVxcyNyNBLBVBWBXBYBZCaCbBZCcCdCeBMBMBOyNxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgChCgCgCfAVxcyNBLBMCiCiCiCjBZCkCkBZClCiCiCmCnBMBOxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCfAVxcBLBMCoCpCqCrCsBZCtCiCuCiCiCiCiCiCjBZxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCfAVxcBLBMuDCpCqCrCsBZCtCiCuCiCiCiCiCiCjBZxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCvAVxcCwCxCiCiCyCyCyBZCiCiBZCzCACBCCCDCEBZxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCFAVxcCGCxCiCiCiCiCiCHCiCiBZBMBMBMBMBMBMCIxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCJCgCgCgCKCfAVxcCLBMCMCNCOCPCiBZCiCiBZCiCQCRCSyNyNyNxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -2057,7 +2057,7 @@ aNaNaNaNaNHEHEHEHEHFHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEHSHTHTHTHTHUHEHEHEHEHEHEHEHEHFHEHEHEHEHEHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNHVFSFSFSHWFSFSFSFSHXFSFSFSFSHXEjEjEjDZaNaNFkDVDVHZDVDVEMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEHSHTHTHTHTHUHEIbIcIdIcIeIfIhIhIhIfIeIhIeIhIiHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkDZIjIkIlDZHqFSFSHrDZImInIoHrDVFgEjEjDZaNaNaNFkaNaNaNEMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEIpHTHTHTHTIqHEIhIrIrIrIrIrIhIhIhIrIrIrIrIrIsHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkDVDVDVDVHuItIuDZDVDVDVDVEMaNEhEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNHEIpIvIwIwHTHTIxIhIhIhIyIhIhIhIhIhIhIhIyIhIhIhHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkaNaNFkDZHsIzDZEMaNaNaNaNaNEEEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNHEIpIvuKuKHTHTIxIhIhIhIyIhIhIhIhIhIhIhIyIhIhIhHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkaNaNFkDZHsIzDZEMaNaNaNaNaNEEEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEHEHEHEHEHEHEHEIhIrIrIrIrIrIhIhIhIrIrIrIrIrIhHEHEHEHEHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkDVDVEMaNDSDWDXDXDYGxEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNHEtDtDtDtDtDHEIBICICICICICICICICICICICICICIDHEtEtEtEtEtEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEhEjEjEjEjEjEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHEHEHEIFIFIFIFIFjbjcjdjdjdjdjdjdjdjdjdjdjdjdjdjcjbIFIFIFIFIFHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEEEjEjEjEjEjEjFHDZEMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index b99f5a3ab8f..9fa62f5aeb2 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -67,6 +67,7 @@ "bo" = (/turf/simulated/wall,/area/engiestation) "bp" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bq" = (/turf/simulated/wall/r_wall,/area/space) +"br" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) "bs" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bu" = (/obj/machinery/telecomms/relay/preset/ruskie,/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/engiestation) @@ -80,6 +81,7 @@ "bC" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk4"; icon_state = "catwalk4"},/area/engiestation/solars) "bD" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars) "bE" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars) +"bF" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/turf/simulated/floor/plating,/area/exploration/methlab) "bG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/engiestation) "bH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/engiestation) "bI" = (/obj/machinery/power/terminal,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engiestation) @@ -131,7 +133,6 @@ "cE" = (/obj/machinery/door/poddoor{id_tag = "constructiondriver2"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/engiestation) "cF" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) "cH" = (/obj/structure/table,/obj/item/weapon/lighter/random,/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich,/obj/item/clothing/head/chefhat,/obj/item/weapon/storage/box/donkpockets,/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/engiestation) -"cI" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) "cJ" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) "cK" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/structure/sign/singulo{pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engiestation) "cL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/meatballsoup,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/engiestation) @@ -330,7 +331,6 @@ "gF" = (/obj/machinery/chem_heater,/turf/simulated/floor/plating,/area/exploration/methlab) "gG" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/exploration/methlab) "gH" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access"; req_access_txt = "11"},/turf/simulated/floor/plating/airless,/area/constructionsite/engineering) -"gI" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plating,/area/exploration/methlab) "gJ" = (/obj/machinery/power/smes,/turf/simulated/floor/plating/airless,/area/constructionsite/engineering) "gK" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating/airless,/area/constructionsite/engineering) "gL" = (/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating/airless,/area/constructionsite/engineering) @@ -439,7 +439,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaaM aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaMcbcccccdblbvcfcgchciblcjckckclbncmbybybPcnbRcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalabalalalalalalalalalalalalalaeaeaeaeaeaeaeaeaeaeaeaeapaoaoauauauauauauaoauauapaZaZaZaYbTbTaZbaaZbTbTaYaZaZaZapauauaoauauauauaoauauaoapaeaealalalalalalalalalalalalaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavaLabaMaNaNaNaNbkcqcrcsbfctbkaNaNaNaNbncubybycvboboaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcwaecwaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauaucxbababacyaZaZaZbaaZaZaZczbababacAaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavaIbhaSbobobobobobobobobocBbobobobobobobocCbybybPcDbRcEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababalalalalalalalabalabalalalalalaeaeaecwaeaeaeaeaeaeaeaeapaoaoauaoaoaoaoaoaoaoaoapaZaZaZaYbTbTaZbaaZbTbTaYcFcFcFapauauaoauauauauauauaoaoapaeaealalalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLabaUcHcIcJcKcLaUcMcNcObycPcQcRbybycScQcTcUcVcWaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavabababababavavavavavavavavavavavacacacacacacacacacacacacapaoaoapcXapapapcYaucYauapaYaYaYaYaZbTaZaZaZbTaZaYaYaYaYapauauaoauapapapaqapauaoapacacavavavavavababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaLabaUcHbrcJcKcLaUcMcNcObycPcQcRbybycScQcTcUcVcWaSaSaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavabababababavavavavavavavavavavavacacacacacacacacacacacacapaoaoapcXapapapcYaucYauapaYaYaYaYaZbTaZaZaZbTaZaYaYaYaYapauauaoauapapapaqapauaoapacacavavavavavababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaUdabybydbdcaUdddddebydfboboboboboaSaSaSaSaSbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaccwdgdhdhdgaeaeaedgdididididgdgababaYaYbTbTaZbTbTaYaYababdgdgdididididgaeaeaedgdhdhdiaeacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaUdjbybydbdkaUdldldmbybyaUdndodpdqaUabdsdsavabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdhdgacacaedgdgdidtdidtdgabababaYaYaYbBaYaYaYabababdgdididhdidgdgaeacacdgdhdhdgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLabaUdubybybydvaUdxdxdybybyaUdAdBdCdCaUabaaaadEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababaccwdgdhdhdFabacaeaedgdididididgdgabababaYaZbaaZaYabababdgdgdididhdidgaeaeacabdFdhdhdgaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -530,7 +530,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagk aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkgAgsgBgCgkgrgsgkgkgkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagjgfgfgfgfgfgfgjghgdgfgdghgjgfgfgfgfgfgfgjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkgDgEgsgkgkgsgsgkgkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagdgdgfgfgfgfgfgdgdgdgegdgdgdgfgfgfgfgfgdgdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkgFgsgsgkgkgGgGgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagigdgdgdgHgdgdgdgfgfgfgfgfgdgdgdgegdgdgdgiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkgIgkgkgkgkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagigigjgfgfgfgjgfgfgfgfgfgfgfgjgfgfgfgjgigiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkbFgkgkgkgkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagigigjgfgfgfgjgfgfgfgfgfgfgfgjgfgfgfgjgigiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagigigjgfgfgfgjgJgKgfgfgfgLgJgjgfgfgfgjgigiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagigigjgfgfgfgjgJgKgfgfgfgLgJgjgfgfgfgjgigiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagkgkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagigigjgfgfgfgjgfgfgfgfgfgfgfgjgfgfgfgjgigiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index e011a78faa9..84460732cd1 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -1132,6 +1132,7 @@ "vN" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/mine/north_outpost) "vO" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "vP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mine/production) +"vQ" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "vR" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "54"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) "vS" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) "vT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/mine/explored) @@ -1146,6 +1147,7 @@ "wc" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light/small{dir = 1},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/mine/maintenance) "wd" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "dark"},/area/mine/maintenance) "we" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/bluegrid,/area/mine/maintenance) +"wf" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/obj/machinery/light_switch{pixel_y = 23},/turf/simulated/floor,/area/mine/west_outpost) "wg" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) "wh" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored) "wi" = (/obj/structure/lattice,/turf/space,/area/mine/explored) @@ -1200,7 +1202,6 @@ "xo" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) "xp" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/simulated/floor,/area/mine/west_outpost) "xq" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/mine/west_outpost) -"xr" = (/obj/structure/table,/obj/machinery/microwave,/obj/machinery/light_switch{pixel_y = 23},/turf/simulated/floor,/area/mine/west_outpost) "xt" = (/obj/machinery/recharge_station,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/mine/west_outpost) "xu" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/mine/west_outpost) "xv" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor,/area/mine/west_outpost) @@ -1208,7 +1209,6 @@ "xx" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/mine/west_outpost) "xz" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "xA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "outpost_west_pump"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/mine/west_outpost) -"xC" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "xD" = (/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "xE" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "xF" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) @@ -1653,7 +1653,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodododorkrkrkdodododododododododo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdodododododododododorkrkrkrkrkdododododododododolvlvlvlvoFoFoFoFwJwJwJlvlvlvkIacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkwEbkbkwqwywzwKwwoKlvlvlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaaaacacacacacacnLwMwNwOwOwPlvlvrhlvlvlvlvlvlvlvlvaekIkIacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadorkrkrkrkrkrkrkrkdododododododorkrkrkrkrkrkdododododododododolvlvlvlvlvlvlvlvwQwRwSlvlvlvkIacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacackIkIkIkIkIkIkIacacacacacacacacbkbkbkbkbkbkbkbkbkbkwqwTwqwqwqwqwqwqwwoKlvlvlvlvlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaacacacacacnLwVwWwXwXwYlvsCqXqYlvlvlvlvlvlvlvaeaekIacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdododododododorkrkrkrkrkrkdodododolvlvwZwZwZwZwZwZoMoMoMwZwZwZwZwZlvlvlvkIacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacackIkIlvlvlvlvlvkIkIkIkIkIacacacacacacacbkbkbkbkwqwqwqwqxdxexfwqwuxgwqxhwqwqwqoKoKoKwqlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaacacackInLxlxmxnxnxolvqTrdqVlvlvlvlvlvlvlvlvlvkIkIacacacbkbkbkbkbkbkbkbkbkbkbkacbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdododododododorkrkrkrkrkdodokIlvlvlvwZxpxqxroNxtxuxvxwxxoPxzxAoNqYlvlvkIkIkIkIacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacackIkIlvlvlvlvlvlvlvlvlvlvkIkIkIkIkIacacacacbkbkbkwqxCxDxExFxDxDwqwywzxGwwwqxHxIxJxJxJoKlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaakIkIkIlvlvlvlvlvlvlvlvxKxLpepexLxLlvlvlvlvlvlvkIacacacbkbkbkbkbkbkbkbkbkbkbkacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdododododododorkrkrkrkrkdodokIlvlvlvwZxpxqwfoNxtxuxvxwxxoPxzxAoNqYlvlvkIkIkIkIacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacackIkIlvlvlvlvlvlvlvlvlvlvkIkIkIkIkIacacacacbkbkbkwqvQxDxExFxDxDwqwywzxGwwwqxHxIxJxJxJoKlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaakIkIkIlvlvlvlvlvlvlvlvxKxLpepexLxLlvlvlvlvlvlvkIacacacbkbkbkbkbkbkbkbkbkbkbkacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadododorkrkrkdodododododododorkrkrkdodoackIlvlvlvwZxOxPxQoNxPxSxPxPxTxUxVxAxWxXlvlvlvlvlvkIkIkIacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkacackIkInLlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvkIkIacacacacacacwqxYxDxZyaybycwqwqwqwqwwwqxHydydydyeoKlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaalvlvlvlvlvlvlvlvlvlvlvxKyfygygyhxLlvyilvlvlvoxnLkIacacbkbkbkbkbkbkbkbkbkbkacacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkdododododododododododododoackIlvlvlvwZyjxPxPykxPxSylxPxPoNynyooNqVlvlvlvlvlvlvlvkIkIkIkIacacacacacacbkbkbkbkbkbkbkbkbkacackIkIlvwIlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvkIkIkIkIacacacwqypyqyrxDysytyuyeyvywyxwqyyydyzyAyBoKlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaaaaaaalvlvlvlvlvyCyCpfpfxKyFyGyHyIxLxLxLxLlvlvlvlvkIkIacacbkbkbkbkbkbkbkbkbkacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadododododododododododododododobkbkkIkIlvlvwZyJxPyKoPyMyNyOxPwZwZwZwZwZwZsCqYlvlvlvlvlvlvlvlvkIkIkIacacacacacbkbkbkbkbkbkbkacacackIlvlvlvlvlvlvlvlvlvlvlvsCqYlvlvlvlvlvlvlvlvlvkIkIacacwqwqwqwqyPwqwqpHpIySpHpIwqwqwqwqwqyTwqwqoKoKlvlvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvlvpfpfyXyYyZpJzbzczczdqrzfzgrSqYlvlvlvnMkIacacbkbkbkbkbkbkbkacacacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index 8be2571bced..29886ded2b3 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -5,6 +5,7 @@ "ae" = (/obj/structure/lattice,/turf/space,/area/space) "af" = (/turf/simulated/wall,/area/djstation) "ag" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/djstation) +"ah" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_y = 8},/turf/simulated/floor{icon_state = "bar"},/area/djstation) "aj" = (/turf/simulated/floor/plating,/area/djstation) "ak" = (/obj/machinery/light{dir = 1},/obj/machinery/telecomms/relay/preset/ruskie,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/djstation) "am" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/djstation) @@ -33,7 +34,6 @@ "aL" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "grimy"},/area/djstation) "aM" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor{icon_state = "grimy"},/area/djstation) "aN" = (/obj/structure/table,/obj/structure/safe/floor,/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor{icon_state = "grimy"},/area/djstation) -"aQ" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 8},/turf/simulated/floor{icon_state = "bar"},/area/djstation) "aR" = (/obj/machinery/door/airlock/glass{name = "Kitchen"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/djstation) "aS" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; freerange = 1; listening = 1; name = "Pirate Radio Listening Channel"; pixel_x = 0},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/djstation) "aT" = (/obj/structure/stool/bed/chair/office/light,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/djstation) @@ -740,7 +740,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaxafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayayaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafazaAaAaAaBafafafafafafaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeayaCayaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaFaGaHaIagaAaAaAaAaAagaKaLaMaNagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaeayayaCaCaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaQaHaHaHaRaAaSaTaSaAaUaVaVaVaVagaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaayayayaCaCayaXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahaHaHaHaRaAaSaTaSaAaUaVaVaVaVagaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaayayayaCaCayaXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaZbabbaHagaAbcbdbeaAagbfbgbhbiagaeaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayayayayaCaCaCayayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbjafafbkafaAaAaAaAblafafafafafafaeaeaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDbmbmbnbmbmbmaDaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboaeafbpafafbqaAbrbsafaaaeaeaebtaaaeaeaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubvbvbwbvbuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z8.dmm b/_maps/map_files/cyberiad/z8.dmm index 5a4bb1d9e7b..c705cab7733 100644 --- a/_maps/map_files/cyberiad/z8.dmm +++ b/_maps/map_files/cyberiad/z8.dmm @@ -29,6 +29,7 @@ "aC" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; pixel_y = 24},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/empty) "aD" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/empty) "aE" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/traitor/radio) +"aF" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor,/area/traitor/kitchen) "aG" = (/obj/structure/table,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/chem) "aH" = (/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/chem) "aI" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/chem) @@ -84,7 +85,6 @@ "bK" = (/obj/machinery/vending/dinnerware,/obj/machinery/light_switch{pixel_x = -24; pixel_y = 0},/turf/simulated/floor,/area/traitor/kitchen) "bL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/simulated/floor,/area/traitor/kitchen) "bM" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor,/area/traitor/kitchen) -"bN" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor,/area/traitor/kitchen) "bO" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/traitor/kitchen) "bP" = (/obj/structure/computerframe,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/empty) "bQ" = (/obj/machinery/teleport/station,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/empty) @@ -472,7 +472,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanaGaHaIaJaKaLaMaNaOaPaQaRaSaTazaUajaVaDaDaDaDamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanaWaXaYaZbababbbcbdbebfbgbhbibjbkblbmaDaDaDaDamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanbnbobpbqbrbsbtbubvbwbxbybzbAazbBajbCaDaDaDaDamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaananananavavavavbHbIbJajbKbLbMbNbOajaDbPbQbRaDaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaananananavavavavbHbIbJajbKbLbMaFbOajaDbPbQbRaDaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbHbIbSajajalalalajajaoamamamaoaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapapapbXbXbXbHbYbZcacbcccccccccdcccccccecfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapchchchchcicjckbXclcmcncacccococpcpcccqcrcsctcuaqcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/_globalvars/unused.dm b/code/_globalvars/unused.dm index 81fb2c6d4bd..d3945b68eab 100644 --- a/code/_globalvars/unused.dm +++ b/code/_globalvars/unused.dm @@ -12,7 +12,7 @@ var/list/liftable_structures = list(\ /obj/machinery/optable, \ /obj/structure/dispenser, \ /obj/machinery/gibber, \ - /obj/machinery/microwave, \ + /obj/machinery/kitchen_machine/microwave, \ /obj/machinery/vending, \ /obj/machinery/seed_extractor, \ /obj/machinery/space_heater, \ diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index aa21efd793e..dcd444a3a0b 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -142,3 +142,12 @@ return byproduct else return null + +/datum/recipe/proc/count_n_items() + var/count = 0 + if(items && items.len) + count += items.len + if(fruit && fruit.len) + for(var/ktag in fruit) + count += fruit[ktag] + return count diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 59a784233c1..1d6d07d724f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -274,7 +274,7 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/circuitboard/microwave name = "circuit board (Microwave)" - build_path = /obj/machinery/microwave + build_path = /obj/machinery/kitchen_machine/microwave board_type = "machine" origin_tech = "programming=1" frame_desc = "Requires 1 Micro Laser, 2 pieces of cable and 1 Console Screen." @@ -285,7 +285,7 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/circuitboard/oven name = "circuit board (Oven)" - build_path = /obj/machinery/oven + build_path = /obj/machinery/kitchen_machine/oven board_type = "machine" origin_tech = "programming=1;plasmatech=1" frame_desc = "Requires 2 Micro Lasers, 5 pieces of cable and 1 Console Screen." @@ -296,7 +296,7 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/circuitboard/grill name = "circuit board (Grill)" - build_path = /obj/machinery/grill + build_path = /obj/machinery/kitchen_machine/grill board_type = "machine" origin_tech = "programming=1;plasmatech=1" frame_desc = "Requires 2 Micro Lasers, 5 pieces of cable and 1 Console Screen." @@ -307,7 +307,7 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/circuitboard/candy_maker name = "circuit board (Candy Maker)" - build_path = /obj/machinery/candy_maker + build_path = /obj/machinery/kitchen_machine/candy_maker board_type = "machine" origin_tech = "programming=2" frame_desc = "Requires 1 Manipulator, 5 pieces of cable and 1 Console Screen." diff --git a/code/game/machinery/kitchen/kitchen_machine.dm b/code/game/machinery/kitchen/kitchen_machine.dm new file mode 100644 index 00000000000..2e1ea05c24b --- /dev/null +++ b/code/game/machinery/kitchen/kitchen_machine.dm @@ -0,0 +1,386 @@ + +/obj/machinery/kitchen_machine + name = "Base Kitchen Machine" + desc = "If you are seeing this, a coder/mapper messed up. Please report it." + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 + flags = OPENCONTAINER | NOREACT + var/operating = 0 // Is it on? + var/dirty = 0 // = {0..100} Does it need cleaning? + var/broken = 0 // ={0,1,2} How broken is it??? + var/efficiency = 0 + var/list/cook_verbs = list("Cooking") + //Recipe & Item vars + var/list/datum/recipe/available_recipes // List of the recipes you can use + var/list/acceptable_items // List of the items you can put in + var/list/acceptable_reagents // List of the reagents you can put in + var/max_n_of_items = 0 + //Icon states + var/off_icon + var/on_icon + var/broken_icon + var/dirty_icon + var/open_icon + +/******************* +* Initialising +********************/ + +/obj/machinery/kitchen_machine/New() + //..() //do not need this + reagents = new/datum/reagents(100) + reagents.my_atom = src + +/******************* +* Item Adding +********************/ + +/obj/machinery/kitchen_machine/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + if(operating) + return + if(!broken && dirty < 100) + if(default_deconstruction_screwdriver(user, open_icon, off_icon, O)) + return + if(exchange_parts(user, O)) + return + if(!broken && istype(O, /obj/item/weapon/wrench)) + playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + if(anchored) + anchored = 0 + user << "\The [src] can now be moved." + return + else if(!anchored) + anchored = 1 + user << "\The [src] is now secured." + return + + default_deconstruction_crowbar(O) + + if(src.broken > 0) + if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver + user.visible_message( \ + "[user] starts to fix part of \the [src].", \ + "You start to fix part of \the [src]." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "[user] fixes part of \the [src].", \ + "You have fixed part of \the [src]." \ + ) + src.broken = 1 // Fix it a bit + else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench + user.visible_message( \ + "[user] starts to fix part of \the [src].", \ + "You start to fix part of \the [src]." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "[user] fixes \the [src].", \ + "You have fixed \the [src]." \ + ) + src.icon_state = off_icon + src.broken = 0 // Fix it! + src.dirty = 0 // just to be sure + src.flags = OPENCONTAINER + else + user << "It's broken!" + return 1 + else if(src.dirty==100) // The machine is all dirty so can't be used! + if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them + user.visible_message( \ + "[user] starts to clean \the [src].", \ + "You start to clean \the [src]." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "[user] has cleaned \the [src].", \ + "You have cleaned \the [src]." \ + ) + src.dirty = 0 // It's clean! + src.broken = 0 // just to be sure + src.icon_state = off_icon + src.flags = OPENCONTAINER + else //Otherwise bad luck!! + user << "It's dirty!" + return 1 + else if(is_type_in_list(O,acceptable_items)) + if (contents.len>=max_n_of_items) + user << "This [src] is full of ingredients, you cannot put more." + return 1 + if (istype(O,/obj/item/stack) && O:amount>1) + new O.type (src) + O:use(1) + user.visible_message( \ + "[user] has added one of [O] to \the [src].", \ + "You add one of [O] to \the [src].") + else + // user.unEquip(O) //This just causes problems so far as I can tell. -Pete + if(!user.drop_item()) + user << "\The [O] is stuck to your hand, you cannot put it in \the [src]" + return 0 + O.loc = src + user.visible_message( \ + "[user] has added \the [O] to \the [src].", \ + "You add \the [O] to \the [src].") + else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ + istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ + ) + if (!O.reagents) + return 1 + for (var/datum/reagent/R in O.reagents.reagent_list) + if (!(R.id in acceptable_reagents)) + user << "Your [O] contains components unsuitable for cookery." + return 1 + //G.reagents.trans_to(src,G.amount_per_transfer_from_this) + else if(istype(O,/obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = O + user << "This is ridiculous. You can not fit \the [G.affecting] in this [src]." + return 1 + else + user << "You have no idea what you can cook with this [O]." + return 1 + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/attack_ai(mob/user as mob) + return 0 + +/obj/machinery/kitchen_machine/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/******************** +* Machine Menu * +********************/ + +/obj/machinery/kitchen_machine/interact(mob/user as mob) // The microwave Menu + if(panel_open || !anchored) + return + var/dat = "" + if(src.broken > 0) + dat = {"Bzzzzttttt"} + else if(src.operating) + dat = {"[pick(src.cook_verbs)] in progress!
Please wait...!
"} + else if(src.dirty==100) + dat = {"This [src] is dirty!
Please clean it before use!
"} + else + var/list/items_counts = new + var/list/items_measures = new + var/list/items_measures_p = new + for (var/obj/O in contents) + var/display_name = O.name + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + for (var/O in items_counts) + var/N = items_counts[O] + if (!(O in items_measures)) + dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} + else + if (N==1) + dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} + else + dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} + + for (var/datum/reagent/R in reagents.reagent_list) + var/display_name = R.name + if (R.id == "capsaicin") + display_name = "Hotsauce" + if (R.id == "frostoil") + display_name = "Coldsauce" + dat += {"[display_name]: [R.volume] unit\s
"} + + if (items_counts.len==0 && reagents.reagent_list.len==0) + dat = {"The [src] is empty
"} + else + dat = {"Ingredients:
[dat]"} + dat += {"

\ +Turn on!
\ +
Eject ingredients!
\ +"} + + user << browse("[src] Controls[dat]", "window=[src.name]") + onclose(user, "[src.name]") + return + + + +/************************************ +* Machine Menu Handling/Cooking * +************************************/ + +/obj/machinery/kitchen_machine/proc/cook() + if(stat & (NOPOWER|BROKEN)) + return + start() + if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run + if (!wzhzhzh(10)) + abort() + return + stop() + return + + var/datum/recipe/recipe = select_recipe(available_recipes,src) + var/obj/cooked + var/obj/byproduct + if (!recipe) + dirty += 1 + if (prob(max(10,dirty*5))) + if (!wzhzhzh(4)) + abort() + return + muck_start() + wzhzhzh(4) + muck_finish() + fail() + return + else if (has_extra_item()) + if (!wzhzhzh(4)) + abort() + return + broke() + fail() + return + else + if (!wzhzhzh(10)) + abort() + return + stop() + fail() + return + else + var/halftime = round(recipe.time/10/2) + if (!wzhzhzh(halftime)) + abort() + return + if (!wzhzhzh(halftime)) + abort() + fail() + return + cooked = recipe.make_food(src) + byproduct = recipe.get_byproduct() + stop() + if(cooked) + cooked.loc = src.loc + for(var/i=1,i\The [src] turns on.", "You hear \a [src].") + src.operating = 1 + src.icon_state = on_icon + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/proc/abort() + src.operating = 0 // Turn it off again aferwards + src.icon_state = off_icon + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/proc/stop() + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + src.operating = 0 // Turn it off again aferwards + src.icon_state = off_icon + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/proc/dispose() + for (var/obj/O in contents) + O.loc = src.loc + if (src.reagents.total_volume) + src.dirty++ + src.reagents.clear_reagents() + usr << "You dispose of \the [src]'s contents." + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/proc/muck_start() + playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound + src.icon_state = dirty_icon // Make it look dirty!! + +/obj/machinery/kitchen_machine/proc/muck_finish() + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + src.visible_message("\The [src] gets covered in muck!") + src.dirty = 100 // Make it dirty so it can't be used util cleaned + src.flags = null //So you can't add condiments + src.icon_state = dirty_icon // Make it look dirty too + src.operating = 0 // Turn it off again aferwards + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/proc/broke() + var/datum/effect/effect/system/spark_spread/s = new + s.set_up(2, 1, src) + s.start() + src.icon_state = broken_icon // Make it look all busted up and shit + src.visible_message("The [src] breaks!") //Let them know they're stupid + src.broken = 2 // Make it broken so it can't be used util fixed + src.flags = null //So you can't add condiments + src.operating = 0 // Turn it off again aferwards + src.updateUsrDialog() + +/obj/machinery/kitchen_machine/proc/fail() + var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) + var/amount = 0 + for (var/obj/O in contents-ffuu) + amount++ + if (O.reagents) + var/id = O.reagents.get_master_reagent_id() + if (id) + amount+=O.reagents.get_reagent_amount(id) + qdel(O) + src.reagents.clear_reagents() + ffuu.reagents.add_reagent("carbon", amount) + ffuu.reagents.add_reagent("????", amount/10) + ffuu.loc = get_turf(src) + +/obj/machinery/kitchen_machine/Topic(href, href_list) + if(..() || panel_open) + return + + usr.set_machine(src) + if(src.operating) + src.updateUsrDialog() + return + + switch(href_list["action"]) + if ("cook") + cook() + + if ("dispose") + dispose() + return \ No newline at end of file diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 258757adaee..67b53ad0883 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -1,24 +1,15 @@ -/obj/machinery/microwave +/obj/machinery/kitchen_machine/microwave name = "Microwave" + desc = "A microwave, perfect for reheating things with radiation." icon = 'icons/obj/kitchen.dmi' icon_state = "mw" - layer = 2.9 - density = 1 - anchored = 1 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 100 - flags = OPENCONTAINER | NOREACT - var/operating = 0 // Is it on? - var/dirty = 0 // = {0..100} Does it need cleaning? - var/broken = 0 // ={0,1,2} How broken is it??? - var/global/list/datum/recipe/available_recipes // List of the recipes you can use - var/global/list/acceptable_items // List of the items you can put in - var/global/list/acceptable_reagents // List of the reagents you can put in - var/global/max_n_of_items = 0 - var/efficiency - + cook_verbs = list("Microwaving", "Reheating", "Heating") + off_icon = "mw" + on_icon = "mw1" + broken_icon = "mwb" + dirty_icon = "mwbloody" + open_icon = "mw-o" // see code/modules/food/recipes_microwave.dm for recipes @@ -26,10 +17,8 @@ * Initialising ********************/ -/obj/machinery/microwave/New() - //..() //do not need this - reagents = new/datum/reagents(100) - reagents.my_atom = src +/obj/machinery/kitchen_machine/microwave/New() + ..() if (!available_recipes) available_recipes = new for (var/type in (typesof(/datum/recipe/microwave)-/datum/recipe/microwave)) @@ -46,7 +35,7 @@ for (var/reagent in recipe.reagents) acceptable_reagents |= reagent if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.items.len) + max_n_of_items = max(max_n_of_items,recipe.count_n_items()) acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown component_parts = list() @@ -56,8 +45,7 @@ component_parts += new /obj/item/stack/cable_coil(null, 2) RefreshParts() - -/obj/machinery/microwave/upgraded/New() +/obj/machinery/kitchen_machine/microwave/upgraded/New() ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/microwave(null) @@ -66,358 +54,8 @@ component_parts += new /obj/item/stack/cable_coil(null, 2) RefreshParts() -/obj/machinery/microwave/RefreshParts() +/obj/machinery/kitchen_machine/microwave/RefreshParts() var/E for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts) E += M.rating efficiency = E - -/******************* -* Item Adding -********************/ - -/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(operating) - return - if(!broken && dirty < 100) - if(default_deconstruction_screwdriver(user, "mw-o", "mw", O)) - return - if(exchange_parts(user, O)) - return - if(!broken && istype(O, /obj/item/weapon/wrench)) - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) - if(anchored) - anchored = 0 - user << "The [src] can now be moved." - return - else if(!anchored) - anchored = 1 - user << "The [src] is now secured." - return - - default_deconstruction_crowbar(O) - - if(src.broken > 0) - if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver - user.visible_message( \ - "\blue [user] starts to fix part of the microwave.", \ - "\blue You start to fix part of the microwave." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes part of the microwave.", \ - "\blue You have fixed part of the microwave." \ - ) - src.broken = 1 // Fix it a bit - else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench - user.visible_message( \ - "\blue [user] starts to fix part of the microwave.", \ - "\blue You start to fix part of the microwave." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes the microwave.", \ - "\blue You have fixed the microwave." \ - ) - src.icon_state = "mw" - src.broken = 0 // Fix it! - src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER - else - user << "\red It's broken!" - return 1 - else if(src.dirty==100) // The microwave is all dirty so can't be used! - if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them - user.visible_message( \ - "\blue [user] starts to clean the microwave.", \ - "\blue You start to clean the microwave." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] has cleaned the microwave.", \ - "\blue You have cleaned the microwave." \ - ) - src.dirty = 0 // It's clean! - src.broken = 0 // just to be sure - src.icon_state = "mw" - src.flags = OPENCONTAINER - else //Otherwise bad luck!! - user << "\red It's dirty!" - return 1 - else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=max_n_of_items) - user << "\red This [src] is full of ingredients, you cannot put more." - return 1 - if (istype(O,/obj/item/stack) && O:amount>1) - new O.type (src) - O:use(1) - user.visible_message( \ - "\blue [user] has added one of [O] to \the [src].", \ - "\blue You add one of [O] to \the [src].") - else - // user.unEquip(O) //This just causes problems so far as I can tell. -Pete - if(!user.drop_item()) - user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" - return 0 - O.loc = src - user.visible_message( \ - "\blue [user] has added \the [O] to \the [src].", \ - "\blue You add \the [O] to \the [src].") - else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ - istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ - ) - if (!O.reagents) - return 1 - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.id in acceptable_reagents)) - user << "\red Your [O] contains components unsuitable for cookery." - return 1 - //G.reagents.trans_to(src,G.amount_per_transfer_from_this) - else if(istype(O,/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = O - user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." - return 1 - else - user << "\red You have no idea what you can cook with this [O]." - return 1 - src.updateUsrDialog() - -/obj/machinery/microwave/attack_ai(mob/user as mob) - return 0 - -/obj/machinery/microwave/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/******************* -* Microwave Menu -********************/ - -/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu - if(panel_open || !anchored) - return - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"Microwaving in progress!
Please wait...!
"} - else if(src.dirty==100) - dat = {"This microwave is dirty!
Please clean it before use!
"} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in contents) - var/display_name = O.name - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "capsaicin") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
"} - - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The microwave is empty
"} - else - dat = {"Ingredients:
[dat]"} - dat += {"

\ -
Turn on!
\ -
Eject ingredients!
\ -"} - - user << browse("Microwave Controls[dat]", "window=microwave") - onclose(user, "microwave") - return - - - -/*********************************** -* Microwave Menu Handling/Cooking -************************************/ - -/obj/machinery/microwave/proc/cook() - if(stat & (NOPOWER|BROKEN)) - return - start() - if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run - if (!wzhzhzh(10)) - abort() - return - stop() - return - - var/datum/recipe/recipe = select_recipe(available_recipes,src) - var/obj/cooked - if (!recipe) - dirty += 1 - if (prob(max(10,dirty*5))) - if (!wzhzhzh(4)) - abort() - return - muck_start() - wzhzhzh(4) - muck_finish() - cooked = fail() - cooked.loc = src.loc - return - else if (has_extra_item()) - if (!wzhzhzh(4)) - abort() - return - broke() - cooked = fail() - cooked.loc = src.loc - return - else - if (!wzhzhzh(10)) - abort() - return - stop() - cooked = fail() - cooked.loc = src.loc - return - else - var/halftime = round(recipe.time/10/2) - if (!wzhzhzh(halftime)) - abort() - return - if (!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.loc = src.loc - return - cooked = recipe.make_food(src) - stop() - if(cooked) - cooked.loc = src.loc - for(var/i=1,iThe [src] can now be moved." - return - else if(!anchored) - anchored = 1 - user << "The [src] is now secured." - return - - default_deconstruction_crowbar(O) - - if(src.broken > 0) - if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver - user.visible_message( \ - "\blue [user] starts to fix part of the candy maker.", \ - "\blue You start to fix part of the candy maker." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes part of the candy maker.", \ - "\blue You have fixed part of the candy maker." \ - ) - src.broken = 1 // Fix it a bit - else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench - user.visible_message( \ - "\blue [user] starts to fix part of the candy maker.", \ - "\blue You start to fix part of the candy maker." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes the candy maker.", \ - "\blue You have fixed the candy maker." \ - ) - src.icon_state = "candymaker_off" - src.broken = 0 // Fix it! - src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER - else - user << "\red It's broken!" - return 1 - else if(src.dirty==100) // The candy_maker is all dirty so can't be used! - if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them - user.visible_message( \ - "\blue [user] starts to clean the candy maker.", \ - "\blue You start to clean the candy maker." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] has cleaned the candy maker.", \ - "\blue You have cleaned the candy maker." \ - ) - src.dirty = 0 // It's clean! - src.broken = 0 // just to be sure - src.icon_state = "candymaker_off" - src.flags = OPENCONTAINER - else //Otherwise bad luck!! - user << "\red It's dirty!" - return 1 - else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=max_n_of_items) - user << "\red This [src] is full of ingredients, you cannot put more." - return 1 - if (istype(O,/obj/item/stack) && O:amount>1) - new O.type (src) - O:use(1) - user.visible_message( \ - "\blue [user] has added one of [O] to \the [src].", \ - "\blue You add one of [O] to \the [src].") - else - // user.unEquip(O) //This just causes problems so far as I can tell. -Pete - if(!user.drop_item()) - user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" - return 0 - O.loc = src - user.visible_message( \ - "\blue [user] has added \the [O] to \the [src].", \ - "\blue You add \the [O] to \the [src].") - else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ - istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ - ) - if (!O.reagents) - return 1 - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.id in acceptable_reagents)) - user << "\red Your [O] contains components unsuitable for cookery." - return 1 - //G.reagents.trans_to(src,G.amount_per_transfer_from_this) - else if(istype(O,/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = O - user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." - return 1 - else - user << "\red You have no idea what you can cook with this [O]." - return 1 - src.updateUsrDialog() - -/obj/machinery/candy_maker/attack_ai(mob/user as mob) - return 0 - -/obj/machinery/candy_maker/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/******************* -* candy_maker Menu -********************/ - -/obj/machinery/candy_maker/interact(mob/user as mob) // The Candy Maker Menu - if(panel_open || !anchored) - return - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - var/whimsy_word = pick("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction") - dat = {"[whimsy_word] in progress!
Please wait...!
"} - else if(src.dirty==100) - dat = {"This candy maker is dirty!
Please clean it before use!
"} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in contents) - var/display_name = O.name - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "capsaicin") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
"} - - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The candy maker is empty
"} - else - dat = {"Ingredients:
[dat]"} - dat += {"

\ -
Turn on!
\ -
Eject ingredients!
\ -"} - - user << browse("Candy Maker Controls[dat]", "window=candy_maker") - onclose(user, "candy_maker") - return - - - -/*********************************** -* candy_maker Menu Handling/Cooking -************************************/ - -/obj/machinery/candy_maker/proc/cook() - if(stat & (NOPOWER|BROKEN)) - return - start() - if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run - if (!wzhzhzh(10)) - abort() - return - stop() - return - - var/datum/recipe/recipe = select_recipe(available_recipes,src) - var/obj/cooked - var/obj/byproduct - if (!recipe) - dirty += 1 - if (prob(max(10,dirty*5))) - if (!wzhzhzh(4)) - abort() - return - muck_start() - wzhzhzh(4) - muck_finish() - cooked = fail() - cooked.loc = src.loc - return - else if (has_extra_item()) - if (!wzhzhzh(4)) - abort() - return - broke() - cooked = fail() - cooked.loc = src.loc - return - else - if (!wzhzhzh(10)) - abort() - return - stop() - cooked = fail() - cooked.loc = src.loc - return - else - var/halftime = round(recipe.time/10/2) - if (!wzhzhzh(halftime)) - abort() - return - if (!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.loc = src.loc - return - cooked = recipe.make_food(src) - byproduct = recipe.get_byproduct() - stop() - if(cooked) - cooked.loc = src.loc - for(var/i=1,iThe [src] can now be moved." - return - else if(!anchored) - anchored = 1 - user << "The [src] is now secured." - return - - default_deconstruction_crowbar(O) - - if(src.broken > 0) - if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver - user.visible_message( \ - "\blue [user] starts to fix part of the grill.", \ - "\blue You start to fix part of the grill." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes part of the grill.", \ - "\blue You have fixed part of the grill." \ - ) - src.broken = 1 // Fix it a bit - else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench - user.visible_message( \ - "\blue [user] starts to fix part of the grill.", \ - "\blue You start to fix part of the grill." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes the grill.", \ - "\blue You have fixed the grill." \ - ) - src.icon_state = "grill_off" - src.broken = 0 // Fix it! - src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER - else - user << "\red It's broken!" - return 1 - else if(src.dirty==100) // The grill is all dirty so can't be used! - if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them - user.visible_message( \ - "\blue [user] starts to clean the grill.", \ - "\blue You start to clean the grill." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] has cleaned the grill.", \ - "\blue You have cleaned the grill." \ - ) - src.dirty = 0 // It's clean! - src.broken = 0 // just to be sure - src.icon_state = "grill_off" - src.flags = OPENCONTAINER - else //Otherwise bad luck!! - user << "\red It's dirty!" - return 1 - else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=max_n_of_items) - user << "\red This [src] is full of ingredients, you cannot put more." - return 1 - if (istype(O,/obj/item/stack) && O:amount>1) - new O.type (src) - O:use(1) - user.visible_message( \ - "\blue [user] has added one of [O] to \the [src].", \ - "\blue You add one of [O] to \the [src].") - else - // user.unEquip(O) //This just causes problems so far as I can tell. -Pete - if(!user.drop_item()) - user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" - return 0 - O.loc = src - user.visible_message( \ - "\blue [user] has added \the [O] to \the [src].", \ - "\blue You add \the [O] to \the [src].") - else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ - istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ - ) - if (!O.reagents) - return 1 - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.id in acceptable_reagents)) - user << "\red Your [O] contains components unsuitable for cookery." - return 1 - //G.reagents.trans_to(src,G.amount_per_transfer_from_this) - else if(istype(O,/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = O - user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." - return 1 - else - user << "\red You have no idea what you can cook with this [O]." - return 1 - src.updateUsrDialog() - -/obj/machinery/grill/attack_ai(mob/user as mob) - return 0 - -/obj/machinery/grill/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/******************* -* grill Menu -********************/ - -/obj/machinery/grill/interact(mob/user as mob) // The grill Menu - if(panel_open || !anchored) - return - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"Grilling in progress!
Please wait...!
"} - else if(src.dirty==100) - dat = {"This grill is dirty!
Please clean it before use!
"} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in contents) - var/display_name = O.name - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "capsaicin") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
"} - - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The grill is empty
"} - else - dat = {"Ingredients:
[dat]"} - dat += {"

\ -
Turn on!
\ -
Eject ingredients!
\ -"} - - user << browse("grill Controls[dat]", "window=grill") - onclose(user, "grill") - return - - - -/*********************************** -* grill Menu Handling/Cooking -************************************/ - -/obj/machinery/grill/proc/cook() - if(stat & (NOPOWER|BROKEN)) - return - start() - if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run - if (!wzhzhzh(10)) - abort() - return - stop() - return - - var/datum/recipe/recipe = select_recipe(available_recipes,src) - var/obj/cooked - if (!recipe) - dirty += 1 - if (prob(max(10,dirty*5))) - if (!wzhzhzh(4)) - abort() - return - muck_start() - wzhzhzh(4) - muck_finish() - cooked = fail() - cooked.loc = src.loc - return - else if (has_extra_item()) - if (!wzhzhzh(4)) - abort() - return - broke() - cooked = fail() - cooked.loc = src.loc - return - else - if (!wzhzhzh(10)) - abort() - return - stop() - cooked = fail() - cooked.loc = src.loc - return - else - var/halftime = round(recipe.time/10/2) - if (!wzhzhzh(halftime)) - abort() - return - if (!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.loc = src.loc - return - cooked = recipe.make_food(src) - stop() - if(cooked) - cooked.loc = src.loc - for(var/i=1,iThe [src] can now be moved." - return - else if(!anchored) - anchored = 1 - user << "The [src] is now secured." - return - - default_deconstruction_crowbar(O) - - if(src.broken > 0) - if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver - user.visible_message( \ - "\blue [user] starts to fix part of the oven.", \ - "\blue You start to fix part of the oven." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes part of the oven.", \ - "\blue You have fixed part of the oven." \ - ) - src.broken = 1 // Fix it a bit - else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench - user.visible_message( \ - "\blue [user] starts to fix part of the oven.", \ - "\blue You start to fix part of the oven." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] fixes the oven.", \ - "\blue You have fixed the oven." \ - ) - src.icon_state = "oven_off" - src.broken = 0 // Fix it! - src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER - else - user << "\red It's broken!" - return 1 - else if(src.dirty==100) // The oven is all dirty so can't be used! - if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them - user.visible_message( \ - "\blue [user] starts to clean the oven.", \ - "\blue You start to clean the oven." \ - ) - if (do_after(user,20)) - user.visible_message( \ - "\blue [user] has cleaned the oven.", \ - "\blue You have cleaned the oven." \ - ) - src.dirty = 0 // It's clean! - src.broken = 0 // just to be sure - src.icon_state = "oven_off" - src.flags = OPENCONTAINER - else //Otherwise bad luck!! - user << "\red It's dirty!" - return 1 - else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=max_n_of_items) - user << "\red This [src] is full of ingredients, you cannot put more." - return 1 - if (istype(O,/obj/item/stack) && O:amount>1) - new O.type (src) - O:use(1) - user.visible_message( \ - "\blue [user] has added one of [O] to \the [src].", \ - "\blue You add one of [O] to \the [src].") - else - // user.unEquip(O) //This just causes problems so far as I can tell. -Pete - if(!user.drop_item()) - user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" - return 0 - O.loc = src - user.visible_message( \ - "\blue [user] has added \the [O] to \the [src].", \ - "\blue You add \the [O] to \the [src].") - else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ - istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ - istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ - ) - if (!O.reagents) - return 1 - for (var/datum/reagent/R in O.reagents.reagent_list) - if (!(R.id in acceptable_reagents)) - user << "\red Your [O] contains components unsuitable for cookery." - return 1 - //G.reagents.trans_to(src,G.amount_per_transfer_from_this) - else if(istype(O,/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = O - user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." - return 1 - else - user << "\red You have no idea what you can cook with this [O]." - return 1 - src.updateUsrDialog() - -/obj/machinery/oven/attack_ai(mob/user as mob) - return 0 - -/obj/machinery/oven/attack_hand(mob/user as mob) - user.set_machine(src) - interact(user) - -/******************* -* oven Menu -********************/ - -/obj/machinery/oven/interact(mob/user as mob) // The oven Menu - if(panel_open || !anchored) - return - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"Baking in progress!
Please wait...!
"} - else if(src.dirty==100) - dat = {"This oven is dirty!
Please clean it before use!
"} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in contents) - var/display_name = O.name - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "capsaicin") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
"} - - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The oven is empty
"} - else - dat = {"Ingredients:
[dat]"} - dat += {"

\ -
Turn on!
\ -
Eject ingredients!
\ -"} - - user << browse("oven Controls[dat]", "window=oven") - onclose(user, "oven") - return - - - -/*********************************** -* oven Menu Handling/Cooking -************************************/ - -/obj/machinery/oven/proc/cook() - if(stat & (NOPOWER|BROKEN)) - return - start() - if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run - if (!wzhzhzh(10)) - abort() - return - stop() - return - - var/datum/recipe/recipe = select_recipe(available_recipes,src) - var/obj/cooked - if (!recipe) - dirty += 1 - if (prob(max(10,dirty*5))) - if (!wzhzhzh(4)) - abort() - return - muck_start() - wzhzhzh(4) - muck_finish() - cooked = fail() - cooked.loc = src.loc - return - else if (has_extra_item()) - if (!wzhzhzh(4)) - abort() - return - broke() - cooked = fail() - cooked.loc = src.loc - return - else - if (!wzhzhzh(10)) - abort() - return - stop() - cooked = fail() - cooked.loc = src.loc - return - else - var/halftime = round(recipe.time/10/2) - if (!wzhzhzh(halftime)) - abort() - return - if (!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.loc = src.loc - return - cooked = recipe.make_food(src) - stop() - if(cooked) - cooked.loc = src.loc - for(var/i=1,i Date: Fri, 10 Jul 2015 20:20:54 -0700 Subject: [PATCH 02/15] Un-relative-path human life.dm --- code/modules/mob/living/carbon/human/life.dm | 2533 +++++++++--------- 1 file changed, 1267 insertions(+), 1266 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 1f153a2e4be..ab58c30a623 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -64,8 +64,11 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc life_tick++ var/datum/gas_mixture/environment = loc.return_air() - in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0 - if(in_stasis) loc:used++ + if(istype(loc, /obj/structure/closet/body_bag/cryobag)) + var/obj/structure/closet/body_bag/cryobag/loc_as_cryobag = loc + if(!loc_as_cryobag.opened) + loc_as_cryobag.used++ + in_stasis = 1 if(life_tick%30==15) hud_updateflag = 1022 @@ -74,7 +77,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //No need to update all of these procs if the guy is dead. if(stat != DEAD && !in_stasis) - if(mob_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath + if(mob_master.current_cycle % 4==2 || failed_last_breath) //First, resolve location and get a breath breathe() //Only try to take a breath every 4 ticks, unless suffocating else //Still give containing object the chance to interact @@ -174,845 +177,851 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return ONE_ATMOSPHERE - pressure_difference -/mob/living/carbon/human +/mob/living/carbon/human/proc/handle_disabilities() + if (disabilities & EPILEPSY) + if ((prob(1) && paralysis < 1)) + src << "\red You have a seizure!" + for(var/mob/O in viewers(src, null)) + if(O == src) + continue + O.show_message(text("\red [src] starts having a seizure!"), 1) + Paralyse(10) + Jitter(1000) - proc/handle_disabilities() - if (disabilities & EPILEPSY) - if ((prob(1) && paralysis < 1)) - src << "\red You have a seizure!" - for(var/mob/O in viewers(src, null)) - if(O == src) - continue - O.show_message(text("\red [src] starts having a seizure!"), 1) - Paralyse(10) - Jitter(1000) + // If we have the gene for being crazy, have random events. + if(dna.GetSEState(HALLUCINATIONBLOCK)) + if(prob(1) && hallucination < 1) + hallucination += 20 - // If we have the gene for being crazy, have random events. - if(dna.GetSEState(HALLUCINATIONBLOCK)) - if(prob(1) && hallucination < 1) - hallucination += 20 + if (disabilities & COUGHING) + if ((prob(5) && paralysis <= 1)) + drop_item() + emote("cough") + if (disabilities & TOURETTES) + speech_problem_flag = 1 + if ((prob(10) && paralysis <= 1)) + Stun(10) + switch(rand(1, 3)) + if(1) + emote("twitch") + if(2 to 3) + var/tourettes = pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS") + say("[prob(50) ? ";" : ""][tourettes]") + var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point. + var/y_offset = pixel_y + rand(-1,1) + animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1) + animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1) + if (disabilities & NERVOUS) + speech_problem_flag = 1 + if (prob(10)) + stuttering = max(10, stuttering) - if (disabilities & COUGHING) - if ((prob(5) && paralysis <= 1)) - drop_item() - emote("cough") - if (disabilities & TOURETTES) + if (getBrainLoss() >= 60 && stat != 2) + speech_problem_flag = 1 + if (prob(3)) + switch(pick(1,2,3)) + if(1) + say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that damn traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#")) + if(2) + say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!")) + if(3) + emote("drool") + + if(getBrainLoss() >= 100 && stat != 2) //you lapse into a coma and die without immediate aid; RIP. -Fox + Weaken(20) + losebreath += 10 + silent += 2 + + if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox + visible_message("[src] goes limp, their facial expression utterly blank.") + death() + +/mob/living/carbon/human/proc/handle_stasis_bag() + // Handle side effects from stasis bag + if(in_stasis) + // First off, there's no oxygen supply, so the mob will slowly take brain damage + adjustBrainLoss(0.1) + + // Next, the method to induce stasis has some adverse side-effects, manifesting + // as cloneloss + adjustCloneLoss(0.1) + +/mob/living/carbon/human/proc/handle_mutations_and_radiation() + + if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss. + return + + if(getFireLoss()) + if((RESIST_HEAT in mutations) || (prob(1))) + heal_organ_damage(0,1) + + + for(var/datum/dna/gene/gene in dna_genes) + if(!gene.block) + continue + if(gene.is_active(src)) + /* if (prob(10) && prob(gene.instability)) + adjustCloneLoss(1) */ speech_problem_flag = 1 - if ((prob(10) && paralysis <= 1)) - Stun(10) - switch(rand(1, 3)) - if(1) - emote("twitch") - if(2 to 3) - var/tourettes = pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS") - say("[prob(50) ? ";" : ""][tourettes]") - var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point. - var/y_offset = pixel_y + rand(-1,1) - animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1) - animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1) - if (disabilities & NERVOUS) - speech_problem_flag = 1 - if (prob(10)) - stuttering = max(10, stuttering) + gene.OnMobLife(src) - if (getBrainLoss() >= 60 && stat != 2) - speech_problem_flag = 1 - if (prob(3)) - switch(pick(1,2,3)) - if(1) - say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that damn traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#")) - if(2) - say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!")) - if(3) - emote("drool") + if (radiation) - if(getBrainLoss() >= 100 && stat != 2) //you lapse into a coma and die without immediate aid; RIP. -Fox - Weaken(20) - losebreath += 10 - silent += 2 - - if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox - visible_message("[src] goes limp, their facial expression utterly blank.") - death() - - proc/handle_stasis_bag() - // Handle side effects from stasis bag - if(in_stasis) - // First off, there's no oxygen supply, so the mob will slowly take brain damage - adjustBrainLoss(0.1) - - // Next, the method to induce stasis has some adverse side-effects, manifesting - // as cloneloss - adjustCloneLoss(0.1) - - proc/handle_mutations_and_radiation() - - if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss. + if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs)) + var/rads = radiation/25 + radiation -= rads + radiation -= 0.1 + reagents.add_reagent("radium", rads/10) + if( prob(10) ) + src << "\blue You feel relaxed." return - if(getFireLoss()) - if((RESIST_HEAT in mutations) || (prob(1))) - heal_organ_damage(0,1) + if (radiation > 100) + radiation = 100 + if(!(species.flags & RAD_ABSORB)) + Weaken(10) + if(!lying) + src << "\red You feel weak." + emote("collapse") + if (radiation < 0) + radiation = 0 - for(var/datum/dna/gene/gene in dna_genes) - if(!gene.block) - continue - if(gene.is_active(src)) - /* if (prob(10) && prob(gene.instability)) - adjustCloneLoss(1) */ - speech_problem_flag = 1 - gene.OnMobLife(src) - - if (radiation) - - if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs)) + else + if(species.flags & RAD_ABSORB) var/rads = radiation/25 radiation -= rads - radiation -= 0.1 - reagents.add_reagent("radium", rads/10) - if( prob(10) ) - src << "\blue You feel relaxed." + nutrition += rads + adjustBruteLoss(-(rads)) + adjustOxyLoss(-(rads)) + adjustToxLoss(-(rads)) + updatehealth() return - if (radiation > 100) - radiation = 100 - if(!(species.flags & RAD_ABSORB)) - Weaken(10) - if(!lying) - src << "\red You feel weak." - emote("collapse") - - if (radiation < 0) - radiation = 0 - - else - if(species.flags & RAD_ABSORB) - var/rads = radiation/25 - radiation -= rads - nutrition += rads - adjustBruteLoss(-(rads)) - adjustOxyLoss(-(rads)) - adjustToxLoss(-(rads)) - updatehealth() - return - - var/damage = 0 - switch(radiation) - if(0 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - damage = 1 - updatehealth() - - if(50 to 74) - radiation -= 2 - damage = 1 + var/damage = 0 + switch(radiation) + if(0 to 49) + radiation-- + if(prob(25)) adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - Weaken(3) - if(!lying) - src << "\red You feel weak." - emote("collapse") + damage = 1 updatehealth() - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - damage = 3 - if(prob(1)) - src << "\red You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() - - else + if(50 to 74) + radiation -= 2 + damage = 1 + adjustToxLoss(1) + if(prob(5)) radiation -= 5 - adjustToxLoss(5) - damage = 5 - if(prob(1)) - src << "\red You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() + Weaken(3) + if(!lying) + src << "\red You feel weak." + emote("collapse") + updatehealth() - if(damage && organs.len) - var/obj/item/organ/external/O = pick(organs) - if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + damage = 3 + if(prob(1)) + src << "\red You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() - proc/breathe() - if(reagents.has_reagent("lexorin")) return - if(NO_BREATH in mutations) return // No breath mutation means no breathing. - if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - if(species && (species.flags & NO_BREATHE)) return + else + radiation -= 5 + adjustToxLoss(5) + damage = 5 + if(prob(1)) + src << "\red You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() - var/datum/gas_mixture/environment = loc.return_air() - var/datum/gas_mixture/breath + if(damage && organs.len) + var/obj/item/organ/external/O = pick(organs) + if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage) - // HACK NEED CHANGING LATER - if(health <= config.health_threshold_crit) - losebreath++ +/mob/living/carbon/human/proc/breathe() + if(reagents.has_reagent("lexorin")) return + if(NO_BREATH in mutations) return // No breath mutation means no breathing. + if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return + if(species && (species.flags & NO_BREATHE)) return - if(losebreath>0) //Suffocating so do not take a breath - losebreath-- - if (prob(10)) //Gasp per 10 ticks? Sounds about right. - spawn emote("gasp") + var/datum/gas_mixture/environment = loc.return_air() + var/datum/gas_mixture/breath + + // HACK NEED CHANGING LATER + if(health <= config.health_threshold_crit) + losebreath++ + + if(losebreath>0) //Suffocating so do not take a breath + losebreath-- + if (prob(10)) //Gasp per 10 ticks? Sounds about right. + spawn emote("gasp") + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = get_breath_from_internal(BREATH_VOLUME) // Super hacky -- TLE + //breath = get_breath_from_internal(0.5) // Manually setting to old BREATH_VOLUME amount -- TLE + + //No breath from internal atmosphere so get breath from location + if(!breath) + if(isobj(loc)) + var/obj/location_as_object = loc + breath = location_as_object.handle_internal_lifeform(src, BREATH_MOLES) + else if(isturf(loc)) + var/breath_moles = 0 + /*if(environment.return_pressure() > ONE_ATMOSPHERE) + // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) + breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) + else*/ + // Not enough air around, take a percentage of what's there to model this properly + breath_moles = environment.total_moles()*BREATH_PERCENTAGE + + breath = loc.remove_air(breath_moles) + + if(!is_lung_ruptured()) + if(!breath || breath.total_moles() < BREATH_MOLES / 5 || breath.total_moles() > BREATH_MOLES * 5) + if(prob(5)) + rupture_lung() + + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = get_breath_from_internal(BREATH_VOLUME) // Super hacky -- TLE - //breath = get_breath_from_internal(0.5) // Manually setting to old BREATH_VOLUME amount -- TLE + handle_breath(breath) - //No breath from internal atmosphere so get breath from location - if(!breath) - if(isobj(loc)) - var/obj/location_as_object = loc - breath = location_as_object.handle_internal_lifeform(src, BREATH_MOLES) - else if(isturf(loc)) - var/breath_moles = 0 - /*if(environment.return_pressure() > ONE_ATMOSPHERE) - // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) - breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) - else*/ - // Not enough air around, take a percentage of what's there to model this properly - breath_moles = environment.total_moles()*BREATH_PERCENTAGE + if(species.name=="Plasmaman") //this is stupid as fuck + // Check if we're wearing our biosuit and mask. + if (!istype(wear_suit,/obj/item/clothing/suit/space/eva/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/eva/plasmaman)) + //testing("Plasmaman [src] leakin'. coverflags=[cover_flags]") + // OH FUCK HE LEAKIN'. + // This was OP. + //environment.adjust(tx = environment.total_moles()*BREATH_PERCENTAGE) // About one breath's worth. (I know we aren't breathing it out, but this should be about the right amount) + src << "Your body reacts with the atmosphere and bursts into flame!" + adjust_fire_stacks(0.5) + IgniteMob() - breath = loc.remove_air(breath_moles) + if(breath) + loc.assume_air(breath) - if(!is_lung_ruptured()) - if(!breath || breath.total_moles() < BREATH_MOLES / 5 || breath.total_moles() > BREATH_MOLES * 5) - if(prob(5)) - rupture_lung() - - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - handle_breath(breath) - - if(species.name=="Plasmaman") //this is stupid as fuck - // Check if we're wearing our biosuit and mask. - if (!istype(wear_suit,/obj/item/clothing/suit/space/eva/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/eva/plasmaman)) - //testing("Plasmaman [src] leakin'. coverflags=[cover_flags]") - // OH FUCK HE LEAKIN'. - // This was OP. - //environment.adjust(tx = environment.total_moles()*BREATH_PERCENTAGE) // About one breath's worth. (I know we aren't breathing it out, but this should be about the right amount) - src << "Your body reacts with the atmosphere and bursts into flame!" - adjust_fire_stacks(0.5) - IgniteMob() - - if(breath) - loc.assume_air(breath) - - //spread some viruses while we are at it - if (virus2.len > 0) - if (prob(10) && get_infection_chance(src)) + //spread some viruses while we are at it + if (virus2.len > 0) + if (prob(10) && get_infection_chance(src)) // log_debug("[src] : Exhaling some viruses") - for(var/mob/living/carbon/M in view(1,src)) - src.spread_disease_to(M) + for(var/mob/living/carbon/M in view(1,src)) + src.spread_disease_to(M) // USED IN DEATHWHISPERS - proc/isInCrit() - // Health is in deep shit and we're not already dead - return health <= 0 && stat != 2 +/mob/living/carbon/human/proc/isInCrit() + // Health is in deep shit and we're not already dead + return health <= 0 && stat != 2 - proc/handle_breath(var/datum/gas_mixture/breath) - if(status_flags & GODMODE) - return 0 - - if(!breath || (breath.total_moles() == 0) || suiciding) - var/oxyloss = 0 - if(suiciding) - oxyloss = 2 - adjustOxyLoss(oxyloss)//If you are suiciding, you should die a little bit faster - failed_last_breath = 1 - oxygen_alert = max(oxygen_alert, 1) - return 0 - if(health > 0) - oxyloss = HUMAN_MAX_OXYLOSS - adjustOxyLoss(oxyloss) - failed_last_breath = 1 - else - oxyloss = HUMAN_CRIT_MAX_OXYLOSS - adjustOxyLoss(oxyloss) - failed_last_breath = 1 - - var/obj/item/organ/external/affected = get_organ("chest") - affected.add_autopsy_data("Suffocation", oxyloss) +/mob/living/carbon/human/proc/handle_breath(var/datum/gas_mixture/breath) + if(status_flags & GODMODE) + return 0 + if(!breath || (breath.total_moles() == 0) || suiciding) + var/oxyloss = 0 + if(suiciding) + oxyloss = 2 + adjustOxyLoss(oxyloss)//If you are suiciding, you should die a little bit faster + failed_last_breath = 1 oxygen_alert = max(oxygen_alert, 1) - return 0 + if(health > 0) + oxyloss = HUMAN_MAX_OXYLOSS + adjustOxyLoss(oxyloss) + failed_last_breath = 1 + else + oxyloss = HUMAN_CRIT_MAX_OXYLOSS + adjustOxyLoss(oxyloss) + failed_last_breath = 1 - return species.handle_breath(breath, src) + var/obj/item/organ/external/affected = get_organ("chest") + affected.add_autopsy_data("Suffocation", oxyloss) - proc/handle_environment(datum/gas_mixture/environment) - if(!environment) - return + oxygen_alert = max(oxygen_alert, 1) - var/loc_temp = get_temperature(environment) - //world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]" + return 0 - //Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit. - if(stat != 2) - stabilize_temperature_from_calories() + return species.handle_breath(breath, src) - //After then, it reacts to the surrounding atmosphere based on your thermal protection - if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases - if(loc_temp < bodytemperature) - //Place is colder than we are - var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR), BODYTEMP_COOLING_MAX) - else - //Place is hotter than we are - var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) +/mob/living/carbon/human/proc/handle_environment(datum/gas_mixture/environment) + if(!environment) + return - // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. - if(bodytemperature > species.heat_level_1) - //Body temperature is too hot. - fire_alert = max(fire_alert, 1) - if(status_flags & GODMODE) return 1 //godmode + var/loc_temp = get_temperature(environment) + //world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]" - if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) - if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) - if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY) - if(on_fire) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire") - fire_alert = max(fire_alert, 2) - else - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) + //Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit. + if(stat != 2) + stabilize_temperature_from_calories() - else if(bodytemperature < species.cold_level_1) - fire_alert = max(fire_alert, 1) - if(status_flags & GODMODE) return 1 //godmode + //After then, it reacts to the surrounding atmosphere based on your thermal protection + if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases + if(loc_temp < bodytemperature) + //Place is colder than we are + var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR), BODYTEMP_COOLING_MAX) + else + //Place is hotter than we are + var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) - if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead - - if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature") - fire_alert = max(fire_alert, 1) - if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature") - fire_alert = max(fire_alert, 1) - if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature") - fire_alert = max(fire_alert, 1) - - // Account for massive pressure differences. Done by Polymorph - // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! - - var/pressure = environment.return_pressure() - var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. + // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. + if(bodytemperature > species.heat_level_1) + //Body temperature is too hot. + fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode - if(adjusted_pressure >= species.hazard_high_pressure) - var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) - take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") - pressure_alert = 2 - else if(adjusted_pressure >= species.warning_high_pressure) - pressure_alert = 1 - else if(adjusted_pressure >= species.warning_low_pressure) - pressure_alert = 0 - else if(adjusted_pressure >= species.hazard_low_pressure) + if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2) + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") + fire_alert = max(fire_alert, 2) + if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3) + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") + fire_alert = max(fire_alert, 2) + if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY) + if(on_fire) + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire") + fire_alert = max(fire_alert, 2) + else + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") + fire_alert = max(fire_alert, 2) + + else if(bodytemperature < species.cold_level_1) + fire_alert = max(fire_alert, 1) + if(status_flags & GODMODE) return 1 //godmode + + if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead + + if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) + if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1) + take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature") + fire_alert = max(fire_alert, 1) + if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2) + take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature") + fire_alert = max(fire_alert, 1) + if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3) + take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature") + fire_alert = max(fire_alert, 1) + + // Account for massive pressure differences. Done by Polymorph + // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! + + var/pressure = environment.return_pressure() + var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. + if(status_flags & GODMODE) return 1 //godmode + + if(adjusted_pressure >= species.hazard_high_pressure) + var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) + take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") + pressure_alert = 2 + else if(adjusted_pressure >= species.warning_high_pressure) + pressure_alert = 1 + else if(adjusted_pressure >= species.warning_low_pressure) + pressure_alert = 0 + else if(adjusted_pressure >= species.hazard_low_pressure) + pressure_alert = -1 + else + if(RESIST_COLD in mutations) pressure_alert = -1 else - if(RESIST_COLD in mutations) - pressure_alert = -1 - else - take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") - pressure_alert = -2 + take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + pressure_alert = -2 - return + return - ///FIRE CODE - handle_fire() - if(..()) - return - var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures - if(wear_suit) - if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) - thermal_protection += (wear_suit.max_heat_protection_temperature*0.7) - if(head) - if(head.max_heat_protection_temperature >= FIRE_HELM_MAX_TEMP_PROTECT) - thermal_protection += (head.max_heat_protection_temperature*THERMAL_PROTECTION_HEAD) - thermal_protection = round(thermal_protection) - if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) - return - if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT) - bodytemperature += 11 - return - else - bodytemperature += BODYTEMP_HEATING_MAX +///FIRE CODE +/mob/living/carbon/human/handle_fire() + if(..()) return - //END FIRE CODE + var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures + if(wear_suit) + if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) + thermal_protection += (wear_suit.max_heat_protection_temperature*0.7) + if(head) + if(head.max_heat_protection_temperature >= FIRE_HELM_MAX_TEMP_PROTECT) + thermal_protection += (head.max_heat_protection_temperature*THERMAL_PROTECTION_HEAD) + thermal_protection = round(thermal_protection) + if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) + return + if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT) + bodytemperature += 11 + return + else + bodytemperature += BODYTEMP_HEATING_MAX + return +//END FIRE CODE - proc/handle_wetness() - if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so - wetlevel = max(wetlevel - 1,0) - return +/mob/living/carbon/human/proc/handle_wetness() + if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so + wetlevel = max(wetlevel - 1,0) + return /* - proc/adjust_body_temperature(current, loc_temp, boost) - var/temperature = current - var/difference = abs(current-loc_temp) //get difference - var/increments// = difference/10 //find how many increments apart they are - if(difference > 50) - increments = difference/5 - else - increments = difference/10 - var/change = increments*boost // Get the amount to change by (x per increment) - var/temp_change - if(current < loc_temp) - temperature = min(loc_temp, temperature+change) - else if(current > loc_temp) - temperature = max(loc_temp, temperature-change) - temp_change = (temperature - current) - return temp_change +/mob/living/carbon/human/proc/adjust_body_temperature(current, loc_temp, boost) + var/temperature = current + var/difference = abs(current-loc_temp) //get difference + var/increments// = difference/10 //find how many increments apart they are + if(difference > 50) + increments = difference/5 + else + increments = difference/10 + var/change = increments*boost // Get the amount to change by (x per increment) + var/temp_change + if(current < loc_temp) + temperature = min(loc_temp, temperature+change) + else if(current > loc_temp) + temperature = max(loc_temp, temperature-change) + temp_change = (temperature - current) + return temp_change */ - proc/stabilize_temperature_from_calories() - if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. - if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. - nutrition -= 2 - var/body_temperature_difference = species.body_temperature - bodytemperature - bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1) - var/body_temperature_difference = species.body_temperature - bodytemperature - bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR - if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. - //We totally need a sweat system cause it totally makes sense...~ - var/body_temperature_difference = species.body_temperature - bodytemperature - bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers +/mob/living/carbon/human/proc/stabilize_temperature_from_calories() + if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. + if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. + nutrition -= 2 + var/body_temperature_difference = species.body_temperature - bodytemperature + bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) + if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1) + var/body_temperature_difference = species.body_temperature - bodytemperature + bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR + if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. + //We totally need a sweat system cause it totally makes sense...~ + var/body_temperature_difference = species.body_temperature - bodytemperature + bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list) - proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = 0 - //Handle normal clothing - if(head) - if(head.max_heat_protection_temperature && head.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= head.heat_protection - if(wear_suit) - if(wear_suit.max_heat_protection_temperature && wear_suit.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_suit.heat_protection - if(w_uniform) - if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_uniform.heat_protection - if(shoes) - if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= shoes.heat_protection - if(gloves) - if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= gloves.heat_protection - if(wear_mask) - if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_mask.heat_protection +/mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. + var/thermal_protection_flags = 0 + //Handle normal clothing + if(head) + if(head.max_heat_protection_temperature && head.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= head.heat_protection + if(wear_suit) + if(wear_suit.max_heat_protection_temperature && wear_suit.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= wear_suit.heat_protection + if(w_uniform) + if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= w_uniform.heat_protection + if(shoes) + if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= shoes.heat_protection + if(gloves) + if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= gloves.heat_protection + if(wear_mask) + if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature) + thermal_protection_flags |= wear_mask.heat_protection - return thermal_protection_flags + return thermal_protection_flags - proc/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = get_heat_protection_flags(temperature) +/mob/living/carbon/human/proc/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. + var/thermal_protection_flags = get_heat_protection_flags(temperature) - var/thermal_protection = 0.0 - if(RESIST_HEAT in mutations) - return 1 - if(thermal_protection_flags) - if(thermal_protection_flags & HEAD) - thermal_protection += THERMAL_PROTECTION_HEAD - if(thermal_protection_flags & UPPER_TORSO) - thermal_protection += THERMAL_PROTECTION_UPPER_TORSO - if(thermal_protection_flags & LOWER_TORSO) - thermal_protection += THERMAL_PROTECTION_LOWER_TORSO - if(thermal_protection_flags & LEG_LEFT) - thermal_protection += THERMAL_PROTECTION_LEG_LEFT - if(thermal_protection_flags & LEG_RIGHT) - thermal_protection += THERMAL_PROTECTION_LEG_RIGHT - if(thermal_protection_flags & FOOT_LEFT) - thermal_protection += THERMAL_PROTECTION_FOOT_LEFT - if(thermal_protection_flags & FOOT_RIGHT) - thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT - if(thermal_protection_flags & ARM_LEFT) - thermal_protection += THERMAL_PROTECTION_ARM_LEFT - if(thermal_protection_flags & ARM_RIGHT) - thermal_protection += THERMAL_PROTECTION_ARM_RIGHT - if(thermal_protection_flags & HAND_LEFT) - thermal_protection += THERMAL_PROTECTION_HAND_LEFT - if(thermal_protection_flags & HAND_RIGHT) - thermal_protection += THERMAL_PROTECTION_HAND_RIGHT + var/thermal_protection = 0.0 + if(RESIST_HEAT in mutations) + return 1 + if(thermal_protection_flags) + if(thermal_protection_flags & HEAD) + thermal_protection += THERMAL_PROTECTION_HEAD + if(thermal_protection_flags & UPPER_TORSO) + thermal_protection += THERMAL_PROTECTION_UPPER_TORSO + if(thermal_protection_flags & LOWER_TORSO) + thermal_protection += THERMAL_PROTECTION_LOWER_TORSO + if(thermal_protection_flags & LEG_LEFT) + thermal_protection += THERMAL_PROTECTION_LEG_LEFT + if(thermal_protection_flags & LEG_RIGHT) + thermal_protection += THERMAL_PROTECTION_LEG_RIGHT + if(thermal_protection_flags & FOOT_LEFT) + thermal_protection += THERMAL_PROTECTION_FOOT_LEFT + if(thermal_protection_flags & FOOT_RIGHT) + thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT + if(thermal_protection_flags & ARM_LEFT) + thermal_protection += THERMAL_PROTECTION_ARM_LEFT + if(thermal_protection_flags & ARM_RIGHT) + thermal_protection += THERMAL_PROTECTION_ARM_RIGHT + if(thermal_protection_flags & HAND_LEFT) + thermal_protection += THERMAL_PROTECTION_HAND_LEFT + if(thermal_protection_flags & HAND_RIGHT) + thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1,thermal_protection) + return min(1,thermal_protection) //See proc/get_heat_protection_flags(temperature) for the description of this proc. - proc/get_cold_protection_flags(temperature) - var/thermal_protection_flags = 0 - //Handle normal clothing +/mob/living/carbon/human/proc/get_cold_protection_flags(temperature) + var/thermal_protection_flags = 0 + //Handle normal clothing - if(head) - if(head.min_cold_protection_temperature && head.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= head.cold_protection - if(wear_suit) - if(wear_suit.min_cold_protection_temperature && wear_suit.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_suit.cold_protection - if(w_uniform) - if(w_uniform.min_cold_protection_temperature && w_uniform.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= w_uniform.cold_protection - if(shoes) - if(shoes.min_cold_protection_temperature && shoes.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= shoes.cold_protection - if(gloves) - if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= gloves.cold_protection - if(wear_mask) - if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_mask.cold_protection + if(head) + if(head.min_cold_protection_temperature && head.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= head.cold_protection + if(wear_suit) + if(wear_suit.min_cold_protection_temperature && wear_suit.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= wear_suit.cold_protection + if(w_uniform) + if(w_uniform.min_cold_protection_temperature && w_uniform.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= w_uniform.cold_protection + if(shoes) + if(shoes.min_cold_protection_temperature && shoes.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= shoes.cold_protection + if(gloves) + if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= gloves.cold_protection + if(wear_mask) + if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature) + thermal_protection_flags |= wear_mask.cold_protection - return thermal_protection_flags + return thermal_protection_flags - proc/get_cold_protection(temperature) +/mob/living/carbon/human/proc/get_cold_protection(temperature) - if(RESIST_COLD in mutations) - return 1 //Fully protected from the cold. + if(RESIST_COLD in mutations) + return 1 //Fully protected from the cold. - temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. - var/thermal_protection_flags = get_cold_protection_flags(temperature) + temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. + var/thermal_protection_flags = get_cold_protection_flags(temperature) - var/thermal_protection = 0.0 - if(thermal_protection_flags) - if(thermal_protection_flags & HEAD) - thermal_protection += THERMAL_PROTECTION_HEAD - if(thermal_protection_flags & UPPER_TORSO) - thermal_protection += THERMAL_PROTECTION_UPPER_TORSO - if(thermal_protection_flags & LOWER_TORSO) - thermal_protection += THERMAL_PROTECTION_LOWER_TORSO - if(thermal_protection_flags & LEG_LEFT) - thermal_protection += THERMAL_PROTECTION_LEG_LEFT - if(thermal_protection_flags & LEG_RIGHT) - thermal_protection += THERMAL_PROTECTION_LEG_RIGHT - if(thermal_protection_flags & FOOT_LEFT) - thermal_protection += THERMAL_PROTECTION_FOOT_LEFT - if(thermal_protection_flags & FOOT_RIGHT) - thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT - if(thermal_protection_flags & ARM_LEFT) - thermal_protection += THERMAL_PROTECTION_ARM_LEFT - if(thermal_protection_flags & ARM_RIGHT) - thermal_protection += THERMAL_PROTECTION_ARM_RIGHT - if(thermal_protection_flags & HAND_LEFT) - thermal_protection += THERMAL_PROTECTION_HAND_LEFT - if(thermal_protection_flags & HAND_RIGHT) - thermal_protection += THERMAL_PROTECTION_HAND_RIGHT + var/thermal_protection = 0.0 + if(thermal_protection_flags) + if(thermal_protection_flags & HEAD) + thermal_protection += THERMAL_PROTECTION_HEAD + if(thermal_protection_flags & UPPER_TORSO) + thermal_protection += THERMAL_PROTECTION_UPPER_TORSO + if(thermal_protection_flags & LOWER_TORSO) + thermal_protection += THERMAL_PROTECTION_LOWER_TORSO + if(thermal_protection_flags & LEG_LEFT) + thermal_protection += THERMAL_PROTECTION_LEG_LEFT + if(thermal_protection_flags & LEG_RIGHT) + thermal_protection += THERMAL_PROTECTION_LEG_RIGHT + if(thermal_protection_flags & FOOT_LEFT) + thermal_protection += THERMAL_PROTECTION_FOOT_LEFT + if(thermal_protection_flags & FOOT_RIGHT) + thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT + if(thermal_protection_flags & ARM_LEFT) + thermal_protection += THERMAL_PROTECTION_ARM_LEFT + if(thermal_protection_flags & ARM_RIGHT) + thermal_protection += THERMAL_PROTECTION_ARM_RIGHT + if(thermal_protection_flags & HAND_LEFT) + thermal_protection += THERMAL_PROTECTION_HAND_LEFT + if(thermal_protection_flags & HAND_RIGHT) + thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1,thermal_protection) + return min(1,thermal_protection) - proc/get_covered_bodyparts() - var/covered = 0 +/mob/living/carbon/human/proc/get_covered_bodyparts() + var/covered = 0 - if(head) - covered |= head.body_parts_covered - if(wear_suit) - covered |= wear_suit.body_parts_covered - if(w_uniform) - covered |= w_uniform.body_parts_covered - if(shoes) - covered |= shoes.body_parts_covered - if(gloves) - covered |= gloves.body_parts_covered - if(wear_mask) - covered |= wear_mask.body_parts_covered + if(head) + covered |= head.body_parts_covered + if(wear_suit) + covered |= wear_suit.body_parts_covered + if(w_uniform) + covered |= w_uniform.body_parts_covered + if(shoes) + covered |= shoes.body_parts_covered + if(gloves) + covered |= gloves.body_parts_covered + if(wear_mask) + covered |= wear_mask.body_parts_covered - return covered + return covered - proc/handle_chemicals_in_body() +/mob/living/carbon/human/proc/handle_chemicals_in_body() - if(reagents) - reagents.metabolize(src) + if(reagents) + reagents.metabolize(src) - if(status_flags & GODMODE) return 0 //godmode + if(status_flags & GODMODE) return 0 //godmode - if(species.flags & REQUIRE_LIGHT) - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(loc)) //else, there's considered to be no light - var/turf/T = loc - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - if(L) - light_amount = (L.get_clamped_lum()*10) - 5 //hardcapped so it's not abused by having a ton of flashlights - else - light_amount = 5 - nutrition += light_amount - traumatic_shock -= light_amount - - if(species.flags & IS_PLANT) - if(nutrition > 450) - nutrition = 450 - if((light_amount >= 5) && !suiciding) //if there's enough light, heal - adjustBruteLoss(-(light_amount/2)) - adjustFireLoss(-(light_amount/4)) - //adjustToxLoss(-(light_amount)) - adjustOxyLoss(-(light_amount)) - //TODO: heal wounds, heal broken limbs. - - if(species.light_dam) - var/light_amount = 0 - if(isturf(loc)) - var/turf/T = loc - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - if(L) - light_amount = L.get_clamped_lum()*10 - else - light_amount = 10 - if(light_amount > species.light_dam) //if there's enough light, start dying - if(species.light_effect_amp) - adjustFireLoss(5) //This gets doubled by Shadowling's innate fire weakness, so it ends up being 10. - else - adjustFireLoss(1) - adjustBruteLoss(1) - src << "The light burns you!" - src << 'sound/weapons/sear.ogg' - else //heal in the dark - if(species.light_effect_amp) - adjustFireLoss(-5) - adjustBruteLoss(-5) - adjustBrainLoss(-25) //gibbering shadowlings are hilarious but also bad to have - adjustCloneLoss(-1) - SetWeakened(0) - SetStunned(0) - else - adjustFireLoss(-1) - adjustBruteLoss(-1) - - - //The fucking FAT mutation is the greatest shit ever. It makes everyone so hot and bothered. - if(species.flags & CAN_BE_FAT) - if(FAT in mutations) - if(overeatduration < 100) - src << "\blue You feel fit again!" - mutations.Remove(FAT) - update_mutantrace(0) - update_mutations(0) - update_inv_w_uniform(0) - update_inv_wear_suit() + if(species.flags & REQUIRE_LIGHT) + var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing + if(isturf(loc)) //else, there's considered to be no light + var/turf/T = loc + var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T + if(L) + light_amount = (L.get_clamped_lum()*10) - 5 //hardcapped so it's not abused by having a ton of flashlights else - if(overeatduration > 500) - src << "\red You suddenly feel blubbery!" - mutations.Add(FAT) - update_mutantrace(0) - update_mutations(0) - update_inv_w_uniform(0) - update_inv_wear_suit() + light_amount = 5 + nutrition += light_amount + traumatic_shock -= light_amount - // nutrition decrease - if (nutrition > 0 && stat != 2) - nutrition = max (0, nutrition - HUNGER_FACTOR) + if(species.flags & IS_PLANT) + if(nutrition > 450) + nutrition = 450 + if((light_amount >= 5) && !suiciding) //if there's enough light, heal + adjustBruteLoss(-(light_amount/2)) + adjustFireLoss(-(light_amount/4)) + //adjustToxLoss(-(light_amount)) + adjustOxyLoss(-(light_amount)) + //TODO: heal wounds, heal broken limbs. - if (nutrition > 450) - if(overeatduration < 800) //capped so people don't take forever to unfat - overeatduration++ + if(species.light_dam) + var/light_amount = 0 + if(isturf(loc)) + var/turf/T = loc + var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T + if(L) + light_amount = L.get_clamped_lum()*10 + else + light_amount = 10 + if(light_amount > species.light_dam) //if there's enough light, start dying + if(species.light_effect_amp) + adjustFireLoss(5) //This gets doubled by Shadowling's innate fire weakness, so it ends up being 10. + else + adjustFireLoss(1) + adjustBruteLoss(1) + src << "The light burns you!" + src << 'sound/weapons/sear.ogg' + else //heal in the dark + if(species.light_effect_amp) + adjustFireLoss(-5) + adjustBruteLoss(-5) + adjustBrainLoss(-25) //gibbering shadowlings are hilarious but also bad to have + adjustCloneLoss(-1) + SetWeakened(0) + SetStunned(0) + else + adjustFireLoss(-1) + adjustBruteLoss(-1) + + //The fucking FAT mutation is the greatest shit ever. It makes everyone so hot and bothered. + if(species.flags & CAN_BE_FAT) + if(FAT in mutations) + if(overeatduration < 100) + src << "\blue You feel fit again!" + mutations.Remove(FAT) + update_mutantrace(0) + update_mutations(0) + update_inv_w_uniform(0) + update_inv_wear_suit() else - if(overeatduration > 1) - if(OBESITY in mutations) - overeatduration -= 1 // Those with obesity gene take twice as long to unfat - else - overeatduration -= 2 + if(overeatduration > 500) + src << "\red You suddenly feel blubbery!" + mutations.Add(FAT) + update_mutantrace(0) + update_mutations(0) + update_inv_w_uniform(0) + update_inv_wear_suit() - if(species.flags & REQUIRE_LIGHT) - if(nutrition < 200) - take_overall_damage(10,0) - traumatic_shock++ + // nutrition decrease + if (nutrition > 0 && stat != 2) + nutrition = max (0, nutrition - HUNGER_FACTOR) - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) + if (nutrition > 450) + if(overeatduration < 800) //capped so people don't take forever to unfat + overeatduration++ - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 15) - jitteriness = max(0, jitteriness - 15) - else - dizziness = max(0, dizziness - 3) - jitteriness = max(0, jitteriness - 3) + else + if(overeatduration > 1) + if(OBESITY in mutations) + overeatduration -= 1 // Those with obesity gene take twice as long to unfat + else + overeatduration -= 2 - if(species && species.flags & NO_INTORGANS) return + if(species.flags & REQUIRE_LIGHT) + if(nutrition < 200) + take_overall_damage(10,0) + traumatic_shock++ - if(!(species.flags & IS_SYNTHETIC)) handle_trace_chems() + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) - updatehealth() + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 15) + jitteriness = max(0, jitteriness - 15) + else + dizziness = max(0, dizziness - 3) + jitteriness = max(0, jitteriness - 3) - return //TODO: DEFERRED + if(species && species.flags & NO_INTORGANS) return - proc/handle_regular_status_updates() + if(!(species.flags & IS_SYNTHETIC)) handle_trace_chems() - if(status_flags & GODMODE) return 0 + updatehealth() - //SSD check, if a logged player is awake put them back to sleep! - if(player_logged && sleeping < 2) - sleeping = 2 + return //TODO: DEFERRED - if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP - blinded = 1 - silent = 0 - else //ALIVE. LIGHTS ARE ON +/mob/living/carbon/human/proc/handle_regular_status_updates() - if(REGEN in mutations) - if(nutrition) - if(prob(10)) - var/randumb = rand(1,5) - nutrition -= randumb - heal_overall_damage(randumb,randumb) - if(nutrition < 0) - nutrition = 0 + if(status_flags & GODMODE) return 0 - // Sobering multiplier. - // Sober block grants quadruple the alcohol metabolism. + //SSD check, if a logged player is awake put them back to sleep! + if(player_logged && sleeping < 2) + sleeping = 2 + + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + + if(REGEN in mutations) + if(nutrition) + if(prob(10)) + var/randumb = rand(1,5) + nutrition -= randumb + heal_overall_damage(randumb,randumb) + if(nutrition < 0) + nutrition = 0 + + // Sobering multiplier. + // Sober block grants quadruple the alcohol metabolism. // var/sober_str=!(SOBER in mutations)?1:4 - updatehealth() //TODO - if(!in_stasis) - handle_organs() //Optimized. - handle_blood() + updatehealth() //TODO + if(!in_stasis) + handle_organs() //Optimized. + handle_blood() - if(health <= config.health_threshold_dead || brain_op_stage == 4.0) - death() - blinded = 1 - silent = 0 - return 1 + if(health <= config.health_threshold_dead || brain_op_stage == 4.0) + death() + blinded = 1 + silent = 0 + return 1 - // the analgesic effect wears off slowly - analgesic = max(0, analgesic - 1) + // the analgesic effect wears off slowly + analgesic = max(0, analgesic - 1) - //UNCONSCIOUS. NO-ONE IS HOME - if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) - Paralyse(3) + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) ) + Paralyse(3) - /* Done by handle_breath() - if( health <= 20 && prob(1) ) - spawn(0) - emote("gasp") - if(!reagents.has_reagent("epinephrine")) - adjustOxyLoss(1)*/ + /* Done by handle_breath() + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("epinephrine")) + adjustOxyLoss(1)*/ - if(hallucination && !(species.flags & IS_SYNTHETIC)) - spawn handle_hallucinations() + if(hallucination && !(species.flags & IS_SYNTHETIC)) + spawn handle_hallucinations() - if(hallucination<=2) - hallucination = 0 - halloss = 0 - else - hallucination -= 2 - - - if(halloss > 100) - src << "You're in too much pain to keep going..." - for(var/mob/O in oviewers(src, null)) - O.show_message("[src] slumps to the ground, too weak to continue fighting.", 1) - Paralyse(10) - setHalLoss(99) - - if(paralysis) - AdjustParalysis(-1) - blinded = 1 - stat = UNCONSCIOUS - if(halloss > 0) - adjustHalLoss(-3) - else if(sleeping) - speech_problem_flag = 1 - handle_dreams() - adjustStaminaLoss(-10) - adjustHalLoss(-3) - if (mind) - //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of ether or similar. - if(player_logged) - sleeping = max(sleeping-1, 2) - else - sleeping = max(sleeping-1, 0) - blinded = 1 - stat = UNCONSCIOUS - if( prob(2) && health && !hal_crit ) - spawn(0) - emote("snore") - if(mind) - if(mind.vampire) - if(istype(loc, /obj/structure/closet/coffin)) - adjustBruteLoss(-1) - adjustFireLoss(-1) - adjustToxLoss(-1) - else if(status_flags & FAKEDEATH) - blinded = 1 - stat = UNCONSCIOUS - else if(resting) - if(halloss > 0) - adjustHalLoss(-3) - //CONSCIOUS + if(hallucination<=2) + hallucination = 0 + halloss = 0 else - stat = CONSCIOUS - if(halloss > 0) - adjustHalLoss(-1) - - if(embedded_flag && !(life_tick % 10)) - var/list/E - E = get_visible_implants(0) - if(!E.len) - embedded_flag = 0 + hallucination -= 2 - //Eyes - if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own - blinded = 1 - else if(eye_blind) //blindness, heals slowly over time - eye_blind = max(eye_blind-1,0) - blinded = 1 - else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster - eye_blurry = max(eye_blurry-3, 0) - // blinded = 1 //now handled under /handle_regular_hud_updates() - else if(eye_blurry) //blurry eyes heal slowly - eye_blurry = max(eye_blurry-1, 0) + if(halloss > 100) + src << "You're in too much pain to keep going..." + for(var/mob/O in oviewers(src, null)) + O.show_message("[src] slumps to the ground, too weak to continue fighting.", 1) + Paralyse(10) + setHalLoss(99) - //Ears - if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own - ear_deaf = max(ear_deaf, 1) - else if(ear_deaf) //deafness, heals slowly over time - ear_deaf = max(ear_deaf-1, 0) - else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster - ear_damage = max(ear_damage-0.15, 0) - ear_deaf = max(ear_deaf, 1) - else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs - ear_damage = max(ear_damage-0.05, 0) + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + if(halloss > 0) + adjustHalLoss(-3) + else if(sleeping) + speech_problem_flag = 1 + handle_dreams() + adjustStaminaLoss(-10) + adjustHalLoss(-3) + if (mind) + //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of ether or similar. + if(player_logged) + sleeping = max(sleeping-1, 2) + else + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(2) && health && !hal_crit ) + spawn(0) + emote("snore") + if(mind) + if(mind.vampire) + if(istype(loc, /obj/structure/closet/coffin)) + adjustBruteLoss(-1) + adjustFireLoss(-1) + adjustToxLoss(-1) + else if(status_flags & FAKEDEATH) + blinded = 1 + stat = UNCONSCIOUS + else if(resting) + if(halloss > 0) + adjustHalLoss(-3) + //CONSCIOUS + else + stat = CONSCIOUS + if(halloss > 0) + adjustHalLoss(-1) - //Dizziness - if(dizziness) - var/client/C = client - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/temp - var/saved_dizz = dizziness - dizziness = max(dizziness-1, 0) - if(C) - var/oldsrc = src - var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength - src = null - spawn(0) + if(embedded_flag && !(life_tick % 10)) + var/list/E + E = get_visible_implants(0) + if(!E.len) + embedded_flag = 0 + + + //Eyes + if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster + eye_blurry = max(eye_blurry-3, 0) + // blinded = 1 //now handled under /handle_regular_hud_updates() + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster + ear_damage = max(ear_damage-0.15, 0) + ear_deaf = max(ear_deaf, 1) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) + + //Dizziness + if(dizziness) + var/client/C = client + var/pixel_x_diff = 0 + var/pixel_y_diff = 0 + var/temp + var/saved_dizz = dizziness + dizziness = max(dizziness-1, 0) + if(C) + var/oldsrc = src + var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength + src = null + spawn(0) + if(C) + temp = amplitude * sin(0.008 * saved_dizz * world.time) + pixel_x_diff += temp + C.pixel_x += temp + temp = amplitude * cos(0.008 * saved_dizz * world.time) + pixel_y_diff += temp + C.pixel_y += temp + sleep(3) if(C) temp = amplitude * sin(0.008 * saved_dizz * world.time) pixel_x_diff += temp @@ -1020,641 +1029,633 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc temp = amplitude * cos(0.008 * saved_dizz * world.time) pixel_y_diff += temp C.pixel_y += temp - sleep(3) - if(C) - temp = amplitude * sin(0.008 * saved_dizz * world.time) - pixel_x_diff += temp - C.pixel_x += temp - temp = amplitude * cos(0.008 * saved_dizz * world.time) - pixel_y_diff += temp - C.pixel_y += temp - sleep(3) - if(C) - C.pixel_x -= pixel_x_diff - C.pixel_y -= pixel_y_diff - src = oldsrc + sleep(3) + if(C) + C.pixel_x -= pixel_x_diff + C.pixel_y -= pixel_y_diff + src = oldsrc - //Jitteryness - if(jitteriness) - do_jitter_animation(jitteriness) + //Jitteryness + if(jitteriness) + do_jitter_animation(jitteriness) - //Flying - if(flying) - spawn() - animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING) - spawn(10) - if(flying) - animate(src, pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING) + //Flying + if(flying) + spawn() + animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING) + spawn(10) + if(flying) + animate(src, pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING) - //Other - handle_statuses() + //Other + handle_statuses() - // If you're dirty, your gloves will become dirty, too. - if(gloves && germ_level > gloves.germ_level && prob(10)) - gloves.germ_level += 1 + // If you're dirty, your gloves will become dirty, too. + if(gloves && germ_level > gloves.germ_level && prob(10)) + gloves.germ_level += 1 - CheckStamina() + CheckStamina() - return 1 + return 1 - proc/handle_regular_hud_updates() - if(hud_updateflag) - handle_hud_list() +/mob/living/carbon/human/proc/handle_regular_hud_updates() + if(hud_updateflag) + handle_hud_list() - if(!client) return 0 + if(!client) return 0 - if(hud_updateflag) - handle_hud_list() + if(hud_updateflag) + handle_hud_list() - update_action_buttons() + update_action_buttons() - for(var/image/hud in client.images) - if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe - client.images.Remove(hud) + for(var/image/hud in client.images) + if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe + client.images.Remove(hud) - client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask,/* global_hud.nvg*/) + client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask,/* global_hud.nvg*/) - if(damageoverlay.overlays) - damageoverlay.overlays = list() + if(damageoverlay.overlays) + damageoverlay.overlays = list() - if(stat == UNCONSCIOUS) - //Critical damage passage overlay - if(health <= 0) - //var/image/I - switch(health) - if(-20 to -10) - damageoverlay.overlays += unconscious_overlays["1"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage1") - if(-30 to -20) - damageoverlay.overlays += unconscious_overlays["2"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage2") - if(-40 to -30) - damageoverlay.overlays += unconscious_overlays["3"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage3") - if(-50 to -40) - damageoverlay.overlays += unconscious_overlays["4"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage4") - if(-60 to -50) - damageoverlay.overlays += unconscious_overlays["5"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage5") - if(-70 to -60) - damageoverlay.overlays += unconscious_overlays["6"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage6") - if(-80 to -70) - damageoverlay.overlays += unconscious_overlays["7"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage7") - if(-90 to -80) - damageoverlay.overlays += unconscious_overlays["8"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage8") - if(-95 to -90) - damageoverlay.overlays += unconscious_overlays["9"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage9") - if(-INFINITY to -95) - damageoverlay.overlays += unconscious_overlays["10"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage10") - //damageoverlay.overlays += I - else - //Oxygen damage overlay - if(oxyloss) - //var/image/I - switch(oxyloss) - if(10 to 20) - damageoverlay.overlays += oxyloss_overlays["1"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay1") - if(20 to 25) - damageoverlay.overlays += oxyloss_overlays["2"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay2") - if(25 to 30) - damageoverlay.overlays += oxyloss_overlays["3"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay3") - if(30 to 35) - damageoverlay.overlays += oxyloss_overlays["4"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay4") - if(35 to 40) - damageoverlay.overlays += oxyloss_overlays["5"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay5") - if(40 to 45) - damageoverlay.overlays += oxyloss_overlays["6"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay6") - if(45 to INFINITY) - damageoverlay.overlays += oxyloss_overlays["7"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay7") - //damageoverlay.overlays += I + if(stat == UNCONSCIOUS) + //Critical damage passage overlay + if(health <= 0) + //var/image/I + switch(health) + if(-20 to -10) + damageoverlay.overlays += unconscious_overlays["1"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage1") + if(-30 to -20) + damageoverlay.overlays += unconscious_overlays["2"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage2") + if(-40 to -30) + damageoverlay.overlays += unconscious_overlays["3"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage3") + if(-50 to -40) + damageoverlay.overlays += unconscious_overlays["4"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage4") + if(-60 to -50) + damageoverlay.overlays += unconscious_overlays["5"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage5") + if(-70 to -60) + damageoverlay.overlays += unconscious_overlays["6"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage6") + if(-80 to -70) + damageoverlay.overlays += unconscious_overlays["7"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage7") + if(-90 to -80) + damageoverlay.overlays += unconscious_overlays["8"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage8") + if(-95 to -90) + damageoverlay.overlays += unconscious_overlays["9"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage9") + if(-INFINITY to -95) + damageoverlay.overlays += unconscious_overlays["10"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "passage10") + //damageoverlay.overlays += I + else + //Oxygen damage overlay + if(oxyloss) + //var/image/I + switch(oxyloss) + if(10 to 20) + damageoverlay.overlays += oxyloss_overlays["1"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay1") + if(20 to 25) + damageoverlay.overlays += oxyloss_overlays["2"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay2") + if(25 to 30) + damageoverlay.overlays += oxyloss_overlays["3"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay3") + if(30 to 35) + damageoverlay.overlays += oxyloss_overlays["4"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay4") + if(35 to 40) + damageoverlay.overlays += oxyloss_overlays["5"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay5") + if(40 to 45) + damageoverlay.overlays += oxyloss_overlays["6"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay6") + if(45 to INFINITY) + damageoverlay.overlays += oxyloss_overlays["7"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "oxydamageoverlay7") + //damageoverlay.overlays += I - //Fire and Brute damage overlay (BSSR) - var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp - damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not. - if(hurtdamage) - //var/image/I - switch(hurtdamage) - if(10 to 25) - damageoverlay.overlays += brutefireloss_overlays["1"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay1") - if(25 to 40) - damageoverlay.overlays += brutefireloss_overlays["2"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay2") - if(40 to 55) - damageoverlay.overlays += brutefireloss_overlays["3"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay3") - if(55 to 70) - damageoverlay.overlays += brutefireloss_overlays["4"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay4") - if(70 to 85) - damageoverlay.overlays += brutefireloss_overlays["5"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay5") - if(85 to INFINITY) - damageoverlay.overlays += brutefireloss_overlays["6"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay6") - //damageoverlay.overlays += I + //Fire and Brute damage overlay (BSSR) + var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp + damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not. + if(hurtdamage) + //var/image/I + switch(hurtdamage) + if(10 to 25) + damageoverlay.overlays += brutefireloss_overlays["1"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay1") + if(25 to 40) + damageoverlay.overlays += brutefireloss_overlays["2"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay2") + if(40 to 55) + damageoverlay.overlays += brutefireloss_overlays["3"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay3") + if(55 to 70) + damageoverlay.overlays += brutefireloss_overlays["4"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay4") + if(70 to 85) + damageoverlay.overlays += brutefireloss_overlays["5"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay5") + if(85 to INFINITY) + damageoverlay.overlays += brutefireloss_overlays["6"]//image("icon" = 'icons/mob/screen1_full.dmi', "icon_state" = "brutedamageoverlay6") + //damageoverlay.overlays += I - see_invisible = SEE_INVISIBLE_LIVING - if( stat == DEAD ) - sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_in_dark = 8 - if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(healths) healths.icon_state = "health7" //DEAD healthmeter - else - sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_invisible = SEE_INVISIBLE_LIVING + if( stat == DEAD ) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_in_dark = 8 + if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO + if(healths) healths.icon_state = "health7" //DEAD healthmeter + else + sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) - if(mind && mind.vampire) - if((VAMP_VISION in mind.vampire.powers) && !(VAMP_FULL in mind.vampire.powers)) - sight |= SEE_MOBS - if((VAMP_FULL in mind.vampire.powers)) - sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS - see_in_dark = 8 - if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(XRAY in mutations) + if(mind && mind.vampire) + if((VAMP_VISION in mind.vampire.powers) && !(VAMP_FULL in mind.vampire.powers)) + sight |= SEE_MOBS + if((VAMP_FULL in mind.vampire.powers)) sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS see_in_dark = 8 if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO + if(XRAY in mutations) + sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS + see_in_dark = 8 + if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(seer==1) - var/obj/effect/rune/R = locate() in loc - if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"]) - see_invisible = SEE_INVISIBLE_OBSERVER - else - see_invisible = SEE_INVISIBLE_LIVING - seer = 0 - - if(glasses || head) - if(glasses) - var/obj/item/clothing/glasses/G = glasses - if(istype(G)) - see_in_dark = (G.darkness_view ? see_in_dark + G.darkness_view : species.darksight) // Otherwise we keep our darkness view with togglable nightvision. - if(G.vision_flags) // MESONS - sight |= G.vision_flags - if(!druggy) - see_invisible = SEE_INVISIBLE_MINIMUM - if(!G.see_darkness) - see_invisible = SEE_INVISIBLE_MINIMUM - /* HUD shit goes here, as long as it doesn't modify sight flags */ - // The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl - - switch(G.HUDType) - if(SECHUD) - process_sec_hud(src,1) - if(MEDHUD) - process_med_hud(src,1) - if(ANTAGHUD) - process_antag_hud(src) - - if(head) - var/obj/item/clothing/head/H = head - if(istype(H)) - if(H.vision_flags) // MESONS - sight |= H.vision_flags - if(!druggy) - see_invisible = SEE_INVISIBLE_MINIMUM - if(!H.see_darkness) - see_invisible = SEE_INVISIBLE_MINIMUM - /* HUD shit goes here, as long as it doesn't modify sight flags */ - // The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl - - switch(H.HUDType) - if(SECHUD) - process_sec_hud(src,1) - if(MEDHUD) - process_med_hud(src,1) - if(ANTAGHUD) - process_antag_hud(src) - - - - - else if(!seer) - see_in_dark = species.darksight + if(seer==1) + var/obj/effect/rune/R = locate() in loc + if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"]) + see_invisible = SEE_INVISIBLE_OBSERVER + else see_invisible = SEE_INVISIBLE_LIVING + seer = 0 - if(ticker && ticker.mode.name == "nations") - process_nations() + if(glasses || head) + if(glasses) + var/obj/item/clothing/glasses/G = glasses + if(istype(G)) + see_in_dark = (G.darkness_view ? see_in_dark + G.darkness_view : species.darksight) // Otherwise we keep our darkness view with togglable nightvision. + if(G.vision_flags) // MESONS + sight |= G.vision_flags + if(!druggy) + see_invisible = SEE_INVISIBLE_MINIMUM + if(!G.see_darkness) + see_invisible = SEE_INVISIBLE_MINIMUM + /* HUD shit goes here, as long as it doesn't modify sight flags */ + // The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl - if(healths) - if (analgesic) - healths.icon_state = "health_health_numb" - else - switch(hal_screwyhud) - if(1) healths.icon_state = "health6" - if(2) healths.icon_state = "health7" - else - //switch(health - halloss) - switch(100 - ((species && species.flags & NO_PAIN) ? 0 : traumatic_shock) - staminaloss) - if(100 to INFINITY) healths.icon_state = "health0" - if(80 to 100) healths.icon_state = "health1" - if(60 to 80) healths.icon_state = "health2" - if(40 to 60) healths.icon_state = "health3" - if(20 to 40) healths.icon_state = "health4" - if(0 to 20) healths.icon_state = "health5" - else healths.icon_state = "health6" + switch(G.HUDType) + if(SECHUD) + process_sec_hud(src,1) + if(MEDHUD) + process_med_hud(src,1) + if(ANTAGHUD) + process_antag_hud(src) - if(healthdoll) - healthdoll.overlays.Cut() - if(stat == DEAD) - healthdoll.icon_state = "healthdoll_DEAD" - else - healthdoll.icon_state = "healthdoll_OVERLAY" - for(var/obj/item/organ/external/O in organs) - var/damage = O.burn_dam + O.brute_dam - var/comparison = (O.max_damage/5) - var/icon_num = 0 - if(damage) - icon_num = 1 - if(damage > (comparison)) - icon_num = 2 - if(damage > (comparison*2)) - icon_num = 3 - if(damage > (comparison*3)) - icon_num = 4 - if(damage > (comparison*4)) - icon_num = 5 - if(icon_num) - healthdoll.overlays += image('icons/mob/screen_gen.dmi',"[O.limb_name][icon_num]") + if(head) + var/obj/item/clothing/head/H = head + if(istype(H)) + if(H.vision_flags) // MESONS + sight |= H.vision_flags + if(!druggy) + see_invisible = SEE_INVISIBLE_MINIMUM + if(!H.see_darkness) + see_invisible = SEE_INVISIBLE_MINIMUM + /* HUD shit goes here, as long as it doesn't modify sight flags */ + // The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl - if(nutrition_icon) - switch(nutrition) - if(450 to INFINITY) nutrition_icon.icon_state = "nutrition0" - if(350 to 450) nutrition_icon.icon_state = "nutrition1" - if(250 to 350) nutrition_icon.icon_state = "nutrition2" - if(150 to 250) nutrition_icon.icon_state = "nutrition3" - else nutrition_icon.icon_state = "nutrition4" + switch(H.HUDType) + if(SECHUD) + process_sec_hud(src,1) + if(MEDHUD) + process_med_hud(src,1) + if(ANTAGHUD) + process_antag_hud(src) - if(pressure) - pressure.icon_state = "pressure[pressure_alert]" - if(pullin) - if(pulling) pullin.icon_state = "pull1" - else pullin.icon_state = "pull0" + + + else if(!seer) + see_in_dark = species.darksight + see_invisible = SEE_INVISIBLE_LIVING + + if(ticker && ticker.mode.name == "nations") + process_nations() + + if(healths) + if (analgesic) + healths.icon_state = "health_health_numb" + else + switch(hal_screwyhud) + if(1) healths.icon_state = "health6" + if(2) healths.icon_state = "health7" + else + //switch(health - halloss) + switch(100 - ((species && species.flags & NO_PAIN) ? 0 : traumatic_shock) - staminaloss) + if(100 to INFINITY) healths.icon_state = "health0" + if(80 to 100) healths.icon_state = "health1" + if(60 to 80) healths.icon_state = "health2" + if(40 to 60) healths.icon_state = "health3" + if(20 to 40) healths.icon_state = "health4" + if(0 to 20) healths.icon_state = "health5" + else healths.icon_state = "health6" + + if(healthdoll) + healthdoll.overlays.Cut() + if(stat == DEAD) + healthdoll.icon_state = "healthdoll_DEAD" + else + healthdoll.icon_state = "healthdoll_OVERLAY" + for(var/obj/item/organ/external/O in organs) + var/damage = O.burn_dam + O.brute_dam + var/comparison = (O.max_damage/5) + var/icon_num = 0 + if(damage) + icon_num = 1 + if(damage > (comparison)) + icon_num = 2 + if(damage > (comparison*2)) + icon_num = 3 + if(damage > (comparison*3)) + icon_num = 4 + if(damage > (comparison*4)) + icon_num = 5 + if(icon_num) + healthdoll.overlays += image('icons/mob/screen_gen.dmi',"[O.limb_name][icon_num]") + + if(nutrition_icon) + switch(nutrition) + if(450 to INFINITY) nutrition_icon.icon_state = "nutrition0" + if(350 to 450) nutrition_icon.icon_state = "nutrition1" + if(250 to 350) nutrition_icon.icon_state = "nutrition2" + if(150 to 250) nutrition_icon.icon_state = "nutrition3" + else nutrition_icon.icon_state = "nutrition4" + + if(pressure) + pressure.icon_state = "pressure[pressure_alert]" + + if(pullin) + if(pulling) pullin.icon_state = "pull1" + else pullin.icon_state = "pull0" // if(rest) //Not used with new UI // if(resting || lying || sleeping) rest.icon_state = "rest1" // else rest.icon_state = "rest0" - if(toxin) - if(hal_screwyhud == 4 || toxins_alert) toxin.icon_state = "tox1" - else toxin.icon_state = "tox0" - if(oxygen) - if(hal_screwyhud == 3 || oxygen_alert) oxygen.icon_state = "oxy1" - else oxygen.icon_state = "oxy0" - if(fire) - if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. - else fire.icon_state = "fire0" + if(toxin) + if(hal_screwyhud == 4 || toxins_alert) toxin.icon_state = "tox1" + else toxin.icon_state = "tox0" + if(oxygen) + if(hal_screwyhud == 3 || oxygen_alert) oxygen.icon_state = "oxy1" + else oxygen.icon_state = "oxy0" + if(fire) + if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. + else fire.icon_state = "fire0" - if(bodytemp) - if (!species) - switch(bodytemperature) //310.055 optimal body temp - if(370 to INFINITY) bodytemp.icon_state = "temp4" - if(350 to 370) bodytemp.icon_state = "temp3" - if(335 to 350) bodytemp.icon_state = "temp2" - if(320 to 335) bodytemp.icon_state = "temp1" - if(300 to 320) bodytemp.icon_state = "temp0" - if(295 to 300) bodytemp.icon_state = "temp-1" - if(280 to 295) bodytemp.icon_state = "temp-2" - if(260 to 280) bodytemp.icon_state = "temp-3" - else bodytemp.icon_state = "temp-4" - else - var/temp_step - if (bodytemperature >= species.body_temperature) - temp_step = (species.heat_level_1 - species.body_temperature)/4 + if(bodytemp) + if (!species) + switch(bodytemperature) //310.055 optimal body temp + if(370 to INFINITY) bodytemp.icon_state = "temp4" + if(350 to 370) bodytemp.icon_state = "temp3" + if(335 to 350) bodytemp.icon_state = "temp2" + if(320 to 335) bodytemp.icon_state = "temp1" + if(300 to 320) bodytemp.icon_state = "temp0" + if(295 to 300) bodytemp.icon_state = "temp-1" + if(280 to 295) bodytemp.icon_state = "temp-2" + if(260 to 280) bodytemp.icon_state = "temp-3" + else bodytemp.icon_state = "temp-4" + else + var/temp_step + if (bodytemperature >= species.body_temperature) + temp_step = (species.heat_level_1 - species.body_temperature)/4 - if (bodytemperature >= species.heat_level_1) - bodytemp.icon_state = "temp4" - else if (bodytemperature >= species.body_temperature + temp_step*3) - bodytemp.icon_state = "temp3" - else if (bodytemperature >= species.body_temperature + temp_step*2) - bodytemp.icon_state = "temp2" - else if (bodytemperature >= species.body_temperature + temp_step*1) - bodytemp.icon_state = "temp1" - else - bodytemp.icon_state = "temp0" + if (bodytemperature >= species.heat_level_1) + bodytemp.icon_state = "temp4" + else if (bodytemperature >= species.body_temperature + temp_step*3) + bodytemp.icon_state = "temp3" + else if (bodytemperature >= species.body_temperature + temp_step*2) + bodytemp.icon_state = "temp2" + else if (bodytemperature >= species.body_temperature + temp_step*1) + bodytemp.icon_state = "temp1" + else + bodytemp.icon_state = "temp0" - else if (bodytemperature < species.body_temperature) - temp_step = (species.body_temperature - species.cold_level_1)/4 + else if (bodytemperature < species.body_temperature) + temp_step = (species.body_temperature - species.cold_level_1)/4 - if (bodytemperature <= species.cold_level_1) - bodytemp.icon_state = "temp-4" - else if (bodytemperature <= species.body_temperature - temp_step*3) - bodytemp.icon_state = "temp-3" - else if (bodytemperature <= species.body_temperature - temp_step*2) - bodytemp.icon_state = "temp-2" - else if (bodytemperature <= species.body_temperature - temp_step*1) - bodytemp.icon_state = "temp-1" - else - bodytemp.icon_state = "temp0" + if (bodytemperature <= species.cold_level_1) + bodytemp.icon_state = "temp-4" + else if (bodytemperature <= species.body_temperature - temp_step*3) + bodytemp.icon_state = "temp-3" + else if (bodytemperature <= species.body_temperature - temp_step*2) + bodytemp.icon_state = "temp-2" + else if (bodytemperature <= species.body_temperature - temp_step*1) + bodytemp.icon_state = "temp-1" + else + bodytemp.icon_state = "temp0" // This checks how much the mob's eyewear impairs their vision - if(tinttotal >= TINT_IMPAIR) - if(tinted_weldhelh) - if(tinttotal >= TINT_BLIND) - blinded = 1 // You get the sudden urge to learn to play keyboard - client.screen += global_hud.darkMask - else - client.screen += global_hud.darkMask - - if(blind) - if(blinded) blind.layer = 18 - else blind.layer = 0 - - if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription - if(glasses) //to every /obj/item - var/obj/item/clothing/glasses/G = glasses - if(!G.prescription) - client.screen += global_hud.vimpaired + if(tinttotal >= TINT_IMPAIR) + if(tinted_weldhelh) + if(tinttotal >= TINT_BLIND) + blinded = 1 // You get the sudden urge to learn to play keyboard + client.screen += global_hud.darkMask else + client.screen += global_hud.darkMask + + if(blind) + if(blinded) blind.layer = 18 + else blind.layer = 0 + + if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription + if(glasses) //to every /obj/item + var/obj/item/clothing/glasses/G = glasses + if(!G.prescription) client.screen += global_hud.vimpaired - - if(eye_blurry) client.screen += global_hud.blurry - if(druggy) client.screen += global_hud.druggy - - if(machine) - if(!machine.check_eye(src)) reset_view(null) else - var/isRemoteObserve = 0 - if((REMOTE_VIEW in mutations) && remoteview_target) - isRemoteObserve = 1 - // Is he unconscious or dead? - if(remoteview_target.stat!=CONSCIOUS) - src << "\red Your psy-connection grows too faint to maintain!" - isRemoteObserve = 0 + client.screen += global_hud.vimpaired - // Does he have psy resist? - if(PSY_RESIST in remoteview_target.mutations) - src << "\red Your mind is shut out!" - isRemoteObserve = 0 + if(eye_blurry) client.screen += global_hud.blurry + if(druggy) client.screen += global_hud.druggy - // Not on the station or mining? - var/turf/temp_turf = get_turf(remoteview_target) - if((!(temp_turf.z in config.contact_levels)) || remoteview_target.stat!=CONSCIOUS) - src << "\red Your psy-connection grows too faint to maintain!" - isRemoteObserve = 0 - if(!isRemoteObserve && client && !client.adminobs) - remoteview_target = null - reset_view(null) - return 1 + if(machine) + if(!machine.check_eye(src)) reset_view(null) + else + var/isRemoteObserve = 0 + if((REMOTE_VIEW in mutations) && remoteview_target) + isRemoteObserve = 1 + // Is he unconscious or dead? + if(remoteview_target.stat!=CONSCIOUS) + src << "\red Your psy-connection grows too faint to maintain!" + isRemoteObserve = 0 - proc/handle_random_events() - // Puke if toxloss is too high - if(!stat) - if (getToxLoss() >= 45 && nutrition > 20) - vomit() + // Does he have psy resist? + if(PSY_RESIST in remoteview_target.mutations) + src << "\red Your mind is shut out!" + isRemoteObserve = 0 - //0.1% chance of playing a scary sound to someone who's in complete darkness - if(isturf(loc) && rand(1,1000) == 1) - var/turf/currentTurf = loc - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in currentTurf - if(L && L.lum_r + L.lum_g + L.lum_b == 0) - playsound_local(src,pick(scarySounds),50, 1, -1) + // Not on the station or mining? + var/turf/temp_turf = get_turf(remoteview_target) + if((!(temp_turf.z in config.contact_levels)) || remoteview_target.stat!=CONSCIOUS) + src << "\red Your psy-connection grows too faint to maintain!" + isRemoteObserve = 0 + if(!isRemoteObserve && client && !client.adminobs) + remoteview_target = null + reset_view(null) + return 1 + +/mob/living/carbon/human/proc/handle_random_events() + // Puke if toxloss is too high + if(!stat) + if (getToxLoss() >= 45 && nutrition > 20) + vomit() + + //0.1% chance of playing a scary sound to someone who's in complete darkness + if(isturf(loc) && rand(1,1000) == 1) + var/turf/currentTurf = loc + var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in currentTurf + if(L && L.lum_r + L.lum_g + L.lum_b == 0) + playsound_local(src,pick(scarySounds),50, 1, -1) // Separate proc so we can jump out of it when we've succeeded in spreading disease. - proc/findAirborneVirii() - for(var/obj/effect/decal/cleanable/blood/B in get_turf(src)) - if(B.virus2.len) - for (var/ID in B.virus2) - var/datum/disease2/disease/V = B.virus2[ID] - if (infect_virus2(src,V)) - return 1 +/mob/living/carbon/human/proc/findAirborneVirii() + for(var/obj/effect/decal/cleanable/blood/B in get_turf(src)) + if(B.virus2.len) + for (var/ID in B.virus2) + var/datum/disease2/disease/V = B.virus2[ID] + if (infect_virus2(src,V)) + return 1 - for(var/obj/effect/decal/cleanable/mucus/M in get_turf(src)) - if(M.virus2.len) - for (var/ID in M.virus2) - var/datum/disease2/disease/V = M.virus2[ID] - if (infect_virus2(src,V)) - return 1 + for(var/obj/effect/decal/cleanable/mucus/M in get_turf(src)) + if(M.virus2.len) + for (var/ID in M.virus2) + var/datum/disease2/disease/V = M.virus2[ID] + if (infect_virus2(src,V)) + return 1 - for(var/obj/effect/decal/cleanable/poop/P in get_turf(src)) - if(P.virus2.len) - for (var/ID in P.virus2) - var/datum/disease2/disease/V = P.virus2[ID] - if (infect_virus2(src,V)) - return 1 + for(var/obj/effect/decal/cleanable/poop/P in get_turf(src)) + if(P.virus2.len) + for (var/ID in P.virus2) + var/datum/disease2/disease/V = P.virus2[ID] + if (infect_virus2(src,V)) + return 1 - return 0 - - proc/handle_virus_updates() - if(status_flags & GODMODE) return 0 //godmode - if(bodytemperature > 406) - for (var/ID in virus2) - var/datum/disease2/disease/V = virus2[ID] - V.cure(src) - if(life_tick % 3) //don't spam checks over all objects in view every tick. - for(var/obj/effect/decal/cleanable/O in view(1,src)) - if(istype(O,/obj/effect/decal/cleanable/blood)) - var/obj/effect/decal/cleanable/blood/B = O - if(B.virus2.len) - for (var/ID in B.virus2) - var/datum/disease2/disease/V = B.virus2[ID] - infect_virus2(src,V.getcopy()) - - else if(istype(O,/obj/effect/decal/cleanable/mucus)) - var/obj/effect/decal/cleanable/mucus/M = O - if(M.virus2.len) - for (var/ID in M.virus2) - var/datum/disease2/disease/V = M.virus2[ID] - infect_virus2(src,V.getcopy()) - + return 0 +/mob/living/carbon/human/proc/handle_virus_updates() + if(status_flags & GODMODE) return 0 //godmode + if(bodytemperature > 406) for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] - if(isnull(V)) // Trying to figure out a runtime error that keeps repeating - CRASH("virus2 nulled before calling activate()") - else - V.activate(src) - // activate may have deleted the virus - if(!V) continue + V.cure(src) + if(life_tick % 3) //don't spam checks over all objects in view every tick. + for(var/obj/effect/decal/cleanable/O in view(1,src)) + if(istype(O,/obj/effect/decal/cleanable/blood)) + var/obj/effect/decal/cleanable/blood/B = O + if(B.virus2.len) + for (var/ID in B.virus2) + var/datum/disease2/disease/V = B.virus2[ID] + infect_virus2(src,V.getcopy()) - // check if we're immune - if(V.antigen & src.antibodies) - V.dead = 1 + else if(istype(O,/obj/effect/decal/cleanable/mucus)) + var/obj/effect/decal/cleanable/mucus/M = O + if(M.virus2.len) + for (var/ID in M.virus2) + var/datum/disease2/disease/V = M.virus2[ID] + infect_virus2(src,V.getcopy()) + + + for (var/ID in virus2) + var/datum/disease2/disease/V = virus2[ID] + if(isnull(V)) // Trying to figure out a runtime error that keeps repeating + CRASH("virus2 nulled before calling activate()") + else + V.activate(src) + // activate may have deleted the virus + if(!V) continue + + // check if we're immune + if(V.antigen & src.antibodies) + V.dead = 1 + return + +/mob/living/carbon/human/proc/handle_stomach() + spawn(0) + for(var/mob/living/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(isliving(M) && stat != 2) + if(M.stat == 2) + M.death(1) + stomach_contents.Remove(M) + qdel(M) + continue + if(mob_master.current_cycle%3==1) + if(!(M.status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 + +/mob/living/carbon/human/proc/handle_changeling() + if(mind && mind.changeling) + mind.changeling.regenerate() + +/mob/living/carbon/human/handle_shock() + ..() + if(status_flags & GODMODE) return 0 //godmode + if(analgesic || (species && species.flags & NO_PAIN)) return // analgesic avoids all traumatic shock temporarily + + if(health <= config.health_threshold_softcrit)// health 0 makes you immediately collapse + shock_stage = max(shock_stage, 61) + + if(traumatic_shock >= 100) + shock_stage += 1 + else + shock_stage = min(shock_stage, 160) + shock_stage = max(shock_stage-1, 0) return - proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) - stomach_contents.Remove(M) - continue - if(isliving(M) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(mob_master.current_cycle%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 + if(shock_stage == 10) + src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!") - proc/handle_changeling() - if(mind && mind.changeling) - mind.changeling.regenerate() + if(shock_stage >= 30) + if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") + eye_blurry = max(2, eye_blurry) + stuttering = max(stuttering, 5) - handle_shock() - ..() - if(status_flags & GODMODE) return 0 //godmode - if(analgesic || (species && species.flags & NO_PAIN)) return // analgesic avoids all traumatic shock temporarily + if(shock_stage == 40) + src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") - if(health <= config.health_threshold_softcrit)// health 0 makes you immediately collapse - shock_stage = max(shock_stage, 61) - - if(traumatic_shock >= 100) - shock_stage += 1 - else - shock_stage = min(shock_stage, 160) - shock_stage = max(shock_stage-1, 0) - return - - if(shock_stage == 10) - src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!") - - if(shock_stage >= 30) - if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") - eye_blurry = max(2, eye_blurry) - stuttering = max(stuttering, 5) - - if(shock_stage == 40) + if(shock_stage >=60) + if(shock_stage == 60) emote("me",1,"'s body becomes limp.") + if (prob(2)) src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") - - if(shock_stage >=60) - if(shock_stage == 60) emote("me",1,"'s body becomes limp.") - if (prob(2)) - src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") - Weaken(20) - - if(shock_stage >= 80) - if (prob(5)) - src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") - Weaken(20) - - if(shock_stage >= 120) - if (prob(2)) - src << ""+pick("You black out!", "You feel like you could die any moment now.", "You're about to lose consciousness.") - Paralyse(5) - - if(shock_stage == 150) - emote("me",1,"can no longer stand, collapsing!") Weaken(20) - if(shock_stage >= 150) + if(shock_stage >= 80) + if (prob(5)) + src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") Weaken(20) + if(shock_stage >= 120) + if (prob(2)) + src << ""+pick("You black out!", "You feel like you could die any moment now.", "You're about to lose consciousness.") + Paralyse(5) - proc/handle_pulse() + if(shock_stage == 150) + emote("me",1,"can no longer stand, collapsing!") + Weaken(20) - if(life_tick % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) + if(shock_stage >= 150) + Weaken(20) - if(species && species.flags & NO_BLOOD) return PULSE_NONE //No blood, no pulse. - if(stat == DEAD) - return PULSE_NONE //that's it, you're dead, nothing can influence your pulse +/mob/living/carbon/human/proc/handle_pulse() - if(heart_attack) - return PULSE_NONE + if(life_tick % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) - var/temp = PULSE_NORM + if(species && species.flags & NO_BLOOD) return PULSE_NONE //No blood, no pulse. - if(round(vessel.get_reagent_amount("blood")) <= BLOOD_VOLUME_BAD) //how much blood do we have - temp = PULSE_THREADY //not enough :( + if(stat == DEAD) + return PULSE_NONE //that's it, you're dead, nothing can influence your pulse - if(status_flags & FAKEDEATH) - temp = PULSE_NONE //pretend that we're dead. unlike actual death, can be inflienced by meds + if(heart_attack) + return PULSE_NONE - for(var/datum/reagent/R in reagents.reagent_list) - if(R.id in bradycardics) - if(temp <= PULSE_THREADY && temp >= PULSE_NORM) - temp-- - break //one reagent is enough - //comment out the breaks to make med effects stack - for(var/datum/reagent/R in reagents.reagent_list) //handles different chems' influence on pulse - if(R.id in tachycardics) - if(temp <= PULSE_FAST && temp >= PULSE_NONE) - temp++ - break - for(var/datum/reagent/R in reagents.reagent_list) //To avoid using fakedeath - if(R.id in heartstopper) + var/temp = PULSE_NORM + + if(round(vessel.get_reagent_amount("blood")) <= BLOOD_VOLUME_BAD) //how much blood do we have + temp = PULSE_THREADY //not enough :( + + if(status_flags & FAKEDEATH) + temp = PULSE_NONE //pretend that we're dead. unlike actual death, can be inflienced by meds + + for(var/datum/reagent/R in reagents.reagent_list) + if(R.id in bradycardics) + if(temp <= PULSE_THREADY && temp >= PULSE_NORM) + temp-- + break //one reagent is enough + //comment out the breaks to make med effects stack + for(var/datum/reagent/R in reagents.reagent_list) //handles different chems' influence on pulse + if(R.id in tachycardics) + if(temp <= PULSE_FAST && temp >= PULSE_NONE) + temp++ + break + for(var/datum/reagent/R in reagents.reagent_list) //To avoid using fakedeath + if(R.id in heartstopper) + temp = PULSE_NONE + break + for(var/datum/reagent/R in reagents.reagent_list) //Conditional heart-stoppage + if(R.id in cheartstopper) + if(R.volume >= R.overdose_threshold) temp = PULSE_NONE break - for(var/datum/reagent/R in reagents.reagent_list) //Conditional heart-stoppage - if(R.id in cheartstopper) - if(R.volume >= R.overdose_threshold) - temp = PULSE_NONE - break - return temp + return temp - proc/handle_decay() - var/decaytime = world.time - timeofdeath +/mob/living/carbon/human/proc/handle_decay() + var/decaytime = world.time - timeofdeath - if(species.flags & IS_SYNTHETIC) - return + if(species.flags & IS_SYNTHETIC) + return - if(reagents.has_reagent("formaldehyde")) //embalming fluid stops decay - return + if(reagents.has_reagent("formaldehyde")) //embalming fluid stops decay + return - if(decaytime <= 6000) //10 minutes for decaylevel1 -- stinky - return + if(decaytime <= 6000) //10 minutes for decaylevel1 -- stinky + return - if(decaytime > 6000 && decaytime <= 12000)//20 minutes for decaylevel2 -- bloated and very stinky - decaylevel = 1 + if(decaytime > 6000 && decaytime <= 12000)//20 minutes for decaylevel2 -- bloated and very stinky + decaylevel = 1 - if(decaytime > 12000 && decaytime <= 18000)//30 minutes for decaylevel3 -- rotting and gross - decaylevel = 2 + if(decaytime > 12000 && decaytime <= 18000)//30 minutes for decaylevel3 -- rotting and gross + decaylevel = 2 - if(decaytime > 18000 && decaytime <= 27000)//45 minutes for decaylevel4 -- skeleton - decaylevel = 3 + if(decaytime > 18000 && decaytime <= 27000)//45 minutes for decaylevel4 -- skeleton + decaylevel = 3 - if(decaytime > 27000) - decaylevel = 4 - makeSkeleton() - return //No puking over skeletons, they don't smell at all! + if(decaytime > 27000) + decaylevel = 4 + makeSkeleton() + return //No puking over skeletons, they don't smell at all! - for(var/mob/living/carbon/human/H in range(decaylevel, src)) - if(prob(5)) - if(airborne_can_reach(get_turf(src), get_turf(H))) - if(istype(loc,/obj/item/bodybag)) - return - var/obj/item/clothing/mask/M = H.wear_mask - if(M && (M.flags & MASKCOVERSMOUTH)) - return - if(H.species && H.species.flags & NO_BREATHE) - return //no puking if you can't smell! - H << "You smell something foul..." - H.fakevomit() - - proc/handle_heartbeat() - var/client/C = src.client - if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref - var/obj/item/organ/heart/H = internal_organs_by_name["heart"] - - if(!H) //H.status will runtime if there is no H (obviously) - return - - if(H.status & ORGAN_ROBOT) //Handle robotic hearts specially with a wuuuubb. This also applies to machine-people. - if(shock_stage >= 10 || istype(get_turf(src), /turf/space)) - //PULSE_THREADY - maximum value for pulse, currently it 5. - //High pulse value corresponds to a fast rate of heartbeat. - //Divided by 2, otherwise it is too slow. - var/rate = (PULSE_THREADY - 2)/2 //machine people (main target) have no pulse, manually subtract standard human pulse (2). Mechanic-heart humans probably have a pulse, but 'advanced neural systems' keep the heart rate steady, or something - - if(heartbeat >= rate) - heartbeat = 0 - src << sound('sound/effects/electheart.ogg',0,0,0,30) //Credit to GhostHack (www.ghosthack.de) for sound. - else - heartbeat++ + for(var/mob/living/carbon/human/H in range(decaylevel, src)) + if(prob(5)) + if(airborne_can_reach(get_turf(src), get_turf(H))) + if(istype(loc,/obj/item/bodybag)) return - return + var/obj/item/clothing/mask/M = H.wear_mask + if(M && (M.flags & MASKCOVERSMOUTH)) + return + if(H.species && H.species.flags & NO_BREATHE) + return //no puking if you can't smell! + H << "You smell something foul..." + H.fakevomit() - if(pulse == PULSE_NONE) - return +/mob/living/carbon/human/proc/handle_heartbeat() + var/client/C = src.client + if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref + var/obj/item/organ/heart/H = internal_organs_by_name["heart"] - if(pulse >= PULSE_2FAST || shock_stage >= 10 || istype(get_turf(src), /turf/space)) + if(!H) //H.status will runtime if there is no H (obviously) + return + + if(H.status & ORGAN_ROBOT) //Handle robotic hearts specially with a wuuuubb. This also applies to machine-people. + if(shock_stage >= 10 || istype(get_turf(src), /turf/space)) //PULSE_THREADY - maximum value for pulse, currently it 5. //High pulse value corresponds to a fast rate of heartbeat. //Divided by 2, otherwise it is too slow. - var/rate = (PULSE_THREADY - pulse)/2 + var/rate = (PULSE_THREADY - 2)/2 //machine people (main target) have no pulse, manually subtract standard human pulse (2). Mechanic-heart humans probably have a pulse, but 'advanced neural systems' keep the heart rate steady, or something if(heartbeat >= rate) heartbeat = 0 - if(H.status & ORGAN_ASSISTED) - src << sound('sound/effects/pacemakebeat.ogg',0,0,0,50) - else - src << sound('sound/effects/singlebeat.ogg',0,0,0,50) + src << sound('sound/effects/electheart.ogg',0,0,0,30) //Credit to GhostHack (www.ghosthack.de) for sound. else heartbeat++ + return + return + + if(pulse == PULSE_NONE) + return + + if(pulse >= PULSE_2FAST || shock_stage >= 10 || istype(get_turf(src), /turf/space)) + //PULSE_THREADY - maximum value for pulse, currently it 5. + //High pulse value corresponds to a fast rate of heartbeat. + //Divided by 2, otherwise it is too slow. + var/rate = (PULSE_THREADY - pulse)/2 + + if(heartbeat >= rate) + heartbeat = 0 + if(H.status & ORGAN_ASSISTED) + src << sound('sound/effects/pacemakebeat.ogg',0,0,0,50) + else + src << sound('sound/effects/singlebeat.ogg',0,0,0,50) + else + heartbeat++ /* Called by life(), instead of having the individual hud items update icons each tick and check for status changes From e4d6acb538174e99a86d7be3c307ea69a370f9c9 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 10 Jul 2015 23:28:08 -0400 Subject: [PATCH 03/15] Changes a few del to del() --- code/__HELPERS/timed_alerts.dm | 2 +- code/game/gamemodes/borer/borer.dm | 2 +- .../objects/items/weapons/storage/bags.dm | 4 ++-- code/modules/admin/player_notes.dm | 6 ++--- code/modules/flufftext/Hallucination.dm | 8 +++---- code/modules/mob/living/living_defense.dm | 24 ------------------- 6 files changed, 11 insertions(+), 35 deletions(-) diff --git a/code/__HELPERS/timed_alerts.dm b/code/__HELPERS/timed_alerts.dm index 6e115a7d0c6..929341c3fc0 100644 --- a/code/__HELPERS/timed_alerts.dm +++ b/code/__HELPERS/timed_alerts.dm @@ -27,7 +27,7 @@ /timed_alert/proc/timed_alert(client/ref_client, question, title, time, choice1, choice2, choice3) if (!ref_client) return - spawn (time) del src // When src is deleted, the proc ends immediately. The alert itself closes. + spawn (time) del(src) // When src is deleted, the proc ends immediately. The alert itself closes. var/ref_answer ref_answer = alert(ref_client, question, title, choice1, choice2, choice3) diff --git a/code/game/gamemodes/borer/borer.dm b/code/game/gamemodes/borer/borer.dm index f5948f3a683..6ec8a9f7888 100644 --- a/code/game/gamemodes/borer/borer.dm +++ b/code/game/gamemodes/borer/borer.dm @@ -94,7 +94,7 @@ M.perform_infestation(first_host.current) forge_borer_objectives(borer, first_host) - del original + del(original) log_admin("Created [borers.len] borers.") diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index bbf73054abb..7a6c2a708d4 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -233,7 +233,7 @@ usr.client.screen -= S S.dropped(usr) if(!S.amount) - del S + del(S) else S.loc = src @@ -278,7 +278,7 @@ N.amount = stacksize S.amount -= stacksize if(!S.amount) - del S // todo: there's probably something missing here + del(S) // todo: there's probably something missing here orient2hud(usr) if(usr.s_active) usr.s_active.show_to(usr) diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm index 3a74da5fca6..8b439ea6fe9 100644 --- a/code/modules/admin/player_notes.dm +++ b/code/modules/admin/player_notes.dm @@ -126,7 +126,7 @@ datum/admins/proc/notes_gethtml(var/ckey) message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.") log_admin("[key_name(usr)] has edited [key]'s notes.") - del info + del(info) //Updating list of keys with notes on them var/savefile/note_list = new("data/player_notes.sav") @@ -135,7 +135,7 @@ datum/admins/proc/notes_gethtml(var/ckey) if(!note_keys) note_keys = list() if(!note_keys.Find(key)) note_keys += key note_list << note_keys - del note_list + del(note_list) /proc/notes_del(var/key, var/index) @@ -151,7 +151,7 @@ datum/admins/proc/notes_gethtml(var/ckey) message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.") log_admin("[key_name(usr)] deleted one of [key]'s notes.") - del info + del(info) /proc/show_player_info_irc(var/key as text) var/dat = " Info on [key]%0D%0A" diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 24a1cb6cc16..a0c9ddef418 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -443,16 +443,16 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/fake_attacker/proc/updateimage() // del src.currentimage if(src.dir == NORTH) - del src.currentimage + del(src.currentimage) src.currentimage = new /image(up,src) else if(src.dir == SOUTH) - del src.currentimage + del(src.currentimage) src.currentimage = new /image(down,src) else if(src.dir == EAST) - del src.currentimage + del(src.currentimage) src.currentimage = new /image(right,src) else if(src.dir == WEST) - del src.currentimage + del(src.currentimage) src.currentimage = new /image(left,src) my_target << currentimage diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 6d30904ec36..6a5cf755e91 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -41,30 +41,6 @@ src << "\blue Your [C.name] was disrupted!" Stun(2) -/* - //Being hit while using a deadman switch - if(istype(equipped(),/obj/item/device/assembly/signaler)) - var/obj/item/device/assembly/signaler/signaler = equipped() - if(signaler.deadman && prob(80)) - src.visible_message("\red [src] triggers their deadman's switch!") - signaler.signal() -*/ - -/* - //Stun Beams -- These were commented out, making appropriate changes here. - Dave - if(istype(P, /obj/item/projectile/beam/stun) || istype(P, /obj/item/projectile/bullet/stunshot)) - stun_effect_act(0, P.agony, def_zone, P) - src <<"\red You have been hit by [P]!" - del P - return - - if(istype(P, /obj/item/projectile/energy/electrode) || istype(P, /obj/item/projectile/bullet/stunshot)) - stun_effect_act(0, P.agony, def_zone, P) - src <<"\red You have been hit by [P]!" - del P - return -*/ - //Armor var/armor = run_armor_check(def_zone, P.flag) var/proj_sharp = is_sharp(P) From c4494116a1f7b1119fc0eda3103640ae2776f178 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 10 Jul 2015 20:30:37 -0700 Subject: [PATCH 04/15] Fix a few color macros, one obsolete message, and some bad formatting --- code/modules/mob/living/carbon/human/life.dm | 28 +++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ab58c30a623..550a7e8eba2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -180,11 +180,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/proc/handle_disabilities() if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 1)) - src << "\red You have a seizure!" - for(var/mob/O in viewers(src, null)) - if(O == src) - continue - O.show_message(text("\red [src] starts having a seizure!"), 1) + visible_message("[src] starts having a seizure!","You have a seizure!") Paralyse(10) Jitter(1000) @@ -233,7 +229,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc silent += 2 if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox - visible_message("[src] goes limp, their facial expression utterly blank.") + visible_message("[src] goes limp, their facial expression utterly blank.") death() /mob/living/carbon/human/proc/handle_stasis_bag() @@ -273,7 +269,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc radiation -= 0.1 reagents.add_reagent("radium", rads/10) if( prob(10) ) - src << "\blue You feel relaxed." + src << "You feel relaxed." return if (radiation > 100) @@ -281,7 +277,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(!(species.flags & RAD_ABSORB)) Weaken(10) if(!lying) - src << "\red You feel weak." + src << "You feel weak." emote("collapse") if (radiation < 0) @@ -315,7 +311,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc radiation -= 5 Weaken(3) if(!lying) - src << "\red You feel weak." + src << "You feel weak." emote("collapse") updatehealth() @@ -324,7 +320,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc adjustToxLoss(3) damage = 3 if(prob(1)) - src << "\red You mutate!" + src << "You mutate!" randmutb(src) domutcheck(src,null) emote("gasp") @@ -335,7 +331,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc adjustToxLoss(5) damage = 5 if(prob(1)) - src << "\red You mutate!" + src << "You mutate!" randmutb(src) domutcheck(src,null) emote("gasp") @@ -804,7 +800,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(species.flags & CAN_BE_FAT) if(FAT in mutations) if(overeatduration < 100) - src << "\blue You feel fit again!" + src << "You feel fit again!" mutations.Remove(FAT) update_mutantrace(0) update_mutations(0) @@ -812,7 +808,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc update_inv_wear_suit() else if(overeatduration > 500) - src << "\red You suddenly feel blubbery!" + src << "You suddenly feel blubbery!" mutations.Add(FAT) update_mutantrace(0) update_mutations(0) @@ -1368,18 +1364,18 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc isRemoteObserve = 1 // Is he unconscious or dead? if(remoteview_target.stat!=CONSCIOUS) - src << "\red Your psy-connection grows too faint to maintain!" + src << "Your psy-connection grows too faint to maintain!" isRemoteObserve = 0 // Does he have psy resist? if(PSY_RESIST in remoteview_target.mutations) - src << "\red Your mind is shut out!" + src << "Your mind is shut out!" isRemoteObserve = 0 // Not on the station or mining? var/turf/temp_turf = get_turf(remoteview_target) if((!(temp_turf.z in config.contact_levels)) || remoteview_target.stat!=CONSCIOUS) - src << "\red Your psy-connection grows too faint to maintain!" + src << "Your psy-connection grows too faint to maintain!" isRemoteObserve = 0 if(!isRemoteObserve && client && !client.adminobs) remoteview_target = null From b295590cad6e817a163d076c00d9a53296fe91ed Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 10 Jul 2015 20:34:07 -0700 Subject: [PATCH 05/15] Fix a few horrible mashed-together-operators in human Life() --- code/modules/mob/living/carbon/human/life.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 550a7e8eba2..613f0ad99b3 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -70,14 +70,14 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc loc_as_cryobag.used++ in_stasis = 1 - if(life_tick%30==15) + if(life_tick % 30 == 15) hud_updateflag = 1022 voice = GetVoice() //No need to update all of these procs if the guy is dead. if(stat != DEAD && !in_stasis) - if(mob_master.current_cycle % 4==2 || failed_last_breath) //First, resolve location and get a breath + if(mob_master.current_cycle % 4 == 2 || failed_last_breath) //First, resolve location and get a breath breathe() //Only try to take a breath every 4 ticks, unless suffocating else //Still give containing object the chance to interact From f5ce957f33206ebb0c80bbe871bf94b0674751e1 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 11 Jul 2015 02:10:31 -0400 Subject: [PATCH 06/15] qdel pass II --- code/controllers/master_controller.dm | 2 +- code/datums/datacore.dm | 4 ++-- code/datums/mind.dm | 6 +++--- code/game/gamemodes/gameticker.dm | 2 +- code/game/machinery/computer/medical.dm | 2 +- code/game/machinery/overview.dm | 8 ++++---- code/game/machinery/telecomms/logbrowser.dm | 2 +- code/game/objects/effects/effect_system.dm | 2 +- code/modules/admin/verbs/one_click_antag.dm | 4 ++-- code/modules/hydroponics/seed_controller.dm | 2 +- code/modules/mob/living/carbon/brain/death.dm | 2 +- code/modules/mob/living/carbon/human/update_icons.dm | 4 ++-- code/modules/mob/living/silicon/ai/latejoin.dm | 4 ++-- code/modules/mob/living/silicon/pai/death.dm | 4 ++-- code/modules/mob/new_player/logout.dm | 2 +- code/modules/mob/new_player/new_player.dm | 8 ++++---- code/modules/power/lighting.dm | 2 +- 17 files changed, 30 insertions(+), 30 deletions(-) diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 9a9072bb0d4..99d8931ef3a 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -49,7 +49,7 @@ datum/controller/game_controller/New() if(master_controller != src) if(istype(master_controller)) Recover() - qdel(master_controller) + del(master_controller) master_controller = src if(!job_master) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index d99a17e7ab5..a17a2b6e560 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -316,7 +316,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(eyes_s, ICON_OVERLAY) if(clothes_s) preview_icon.Blend(clothes_s, ICON_OVERLAY) - del(eyes_s) - del(clothes_s) + qdel(eyes_s) + qdel(clothes_s) return preview_icon diff --git a/code/datums/mind.dm b/code/datums/mind.dm index d8221483127..9799cd2caf5 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -825,7 +825,7 @@ datum/mind ticker.mode.changelings -= src special_role = null current.remove_changeling_powers() - if(changeling) del(changeling) + if(changeling) qdel(changeling) current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" log_admin("[key_name_admin(usr)] has de-changeling'ed [current].") if("changeling") @@ -855,7 +855,7 @@ datum/mind ticker.mode.vampires -= src special_role = null current.remove_vampire_powers() - if(vampire) del(vampire) + if(vampire) qdel(vampire) current << "You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!" log_admin("[key_name_admin(usr)] has de-vampired [current].") if("vampire") @@ -1021,7 +1021,7 @@ datum/mind A.malf_picker.remove_verbs(A) A.make_laws() - del(A.malf_picker) + qdel(A.malf_picker) A.show_laws() A.icon_state = "ai" diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 26c88144d78..0c9aec27196 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -355,7 +355,7 @@ var/global/datum/controller/gameticker/ticker continue else player.create_character() - del(player) + qdel(player) proc/collect_minds() diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index f63748d81e2..0680cb330f4 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -219,7 +219,7 @@ if (href_list["del_all2"]) for(var/datum/data/record/R in data_core.medical) //R = null - del(R) + qdel(R) //Foreach goto(494) src.temp = "All records deleted." diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 35954c0c8b6..1f1395431d9 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -180,8 +180,8 @@ HI.Insert(I, frame=1, delay = 5) HI.Insert(J, frame=2, delay = 5) - del(I) - del(J) + qdel(I) + qdel(J) H.icon = HI H.layer = 25 usr.mapobjs += H @@ -306,7 +306,7 @@ var/icon/I = imap[i+1] H.icon = I - del(I) + qdel(I) H.layer = 25 usr.mapobjs += H @@ -353,7 +353,7 @@ proc/getb(col) /mob/proc/clearmap() src.client.screen -= src.mapobjs for(var/obj/screen/O in mapobjs) - del(O) + qdel(O) mapobjs = null src.unset_machine() diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index dc721495245..824dc21db76 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -101,7 +101,7 @@ race = "Unidentifiable" language = race - del(M) + qdel(M) // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 7790be53bed..1d25b822d9b 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -427,7 +427,7 @@ steam.start() -- spawns the effect if(seed_name && plant_controller) seed = plant_controller.seeds[seed_name] if(!seed) - del(src) + qdel(src) ..() diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index a31e9b38242..6bb2f96ba06 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -367,7 +367,7 @@ client/proc/one_click_antag() candidates.Remove(theghost) if(!theghost) - del(new_syndicate_commando) + qdel(new_syndicate_commando) break new_syndicate_commando.key = theghost.key @@ -487,7 +487,7 @@ client/proc/one_click_antag() candidates.Remove(theghost) if(!theghost) - del(new_vox) + qdel(new_vox) break new_vox.key = theghost.key diff --git a/code/modules/hydroponics/seed_controller.dm b/code/modules/hydroponics/seed_controller.dm index 9a0db47790c..6a2da055319 100644 --- a/code/modules/hydroponics/seed_controller.dm +++ b/code/modules/hydroponics/seed_controller.dm @@ -37,7 +37,7 @@ var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants/New() if(plant_controller && plant_controller != src) log_debug("Rebuilding plant controller.") - qdel(plant_controller) + del(plant_controller) plant_controller = src setup() process() diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index 0c4c8d96c45..17bf26de838 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -37,7 +37,7 @@ qdel(container)//Gets rid of the MMI if there is one if(loc) if(istype(loc,/obj/item/organ/brain)) - del(loc)//Gets rid of the brain item + qdel(loc)//Gets rid of the brain item spawn(15) if(animation) qdel(animation) if(src) qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index ac83f3115d4..c2d10e26143 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -243,7 +243,7 @@ var/global/list/damage_icon_parts = list() //0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic. //Create a new, blank icon for our mob to use. if(stand_icon) - del(stand_icon) + qdel(stand_icon) stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank") var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]" var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"] @@ -447,7 +447,7 @@ var/global/list/damage_icon_parts = list() if (targeted_by && target_locked) overlays_standing[TARGETED_LAYER] = target_locked else if (!targeted_by && target_locked) - del(target_locked) + qdel(target_locked) if (!targeted_by) overlays_standing[TARGETED_LAYER] = null if(update_icons) update_icons() diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index 8c966d636c7..2da08205836 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -34,11 +34,11 @@ var/global/list/empty_playable_ai_cores = list() job_master.FreeRole(job) if(mind.objectives.len) - del(mind.objectives) + qdel(mind.objectives) mind.special_role = null else if(ticker.mode.name == "AutoTraitor") var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode current_mode.possible_traitors.Remove(src) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index fea081ddfff..08ec0e706d3 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -22,8 +22,8 @@ //New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here. //Read as: I have no idea what I'm doing but asking for help got me nowhere so this is what you get. - Nodrak - if(mind) del(mind) + if(mind) qdel(mind) living_mob_list -= src ghostize() if(icon_state != "[chassis]_dead") - del(src) + qdel(src) diff --git a/code/modules/mob/new_player/logout.dm b/code/modules/mob/new_player/logout.dm index 9f064a99cd5..ad1c9b3098d 100644 --- a/code/modules/mob/new_player/logout.dm +++ b/code/modules/mob/new_player/logout.dm @@ -3,5 +3,5 @@ ..() if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to. key = null//We null their key before deleting the mob, so they are properly kicked out. - del(src) + qdel(src) return \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f9965b9275c..15456b3fa7c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -138,7 +138,7 @@ observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing! observer.key = key respawnable_list += observer - del(src) + qdel(src) return 1 if(href_list["late_join"]) @@ -325,8 +325,8 @@ AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]") ticker.mode.latespawn(character) - del(C) - del(src) + qdel(C) + qdel(src) return //Find our spawning point. @@ -364,7 +364,7 @@ else AnnounceCyborg(character, rank, join_message) callHook("latespawn", list(character)) - del(src) + qdel(src) proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 74d633a8fbe..d8769065d32 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -591,7 +591,7 @@ sleep(2) explosion(T, 0, 0, 2, 2) sleep(1) - del(src) + qdel(src) // the light item // can be tube or bulb subtypes From ec2aab62efefa648a58aa7819c83dd4941955262 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Sat, 11 Jul 2015 03:28:07 -0400 Subject: [PATCH 07/15] Z5 revert / compatibility, --- _maps/map_files/cyberiad/z2.dmm | 18 +++++------ _maps/map_files/cyberiad/z5.dmm | 6 ++-- .../game/machinery/kitchen/kitchen_machine.dm | 19 ++++++++++- code/game/machinery/kitchen/microwave.dm | 32 ++++++++----------- code/modules/food/candy_maker.dm | 20 +----------- code/modules/food/grill_new.dm | 20 +----------- code/modules/food/oven_new.dm | 20 +----------- 7 files changed, 46 insertions(+), 89 deletions(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 3ba8c564e04..8c044214861 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -281,7 +281,7 @@ "fu" = (/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost) "fv" = (/obj/structure/ninjatele{pixel_y = 25},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost) "fw" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja/outpost) -"fx" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) +"fx" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fy" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fz" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "fA" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) @@ -311,7 +311,7 @@ "fY" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/escape_pod3/transit) "fZ" = (/turf/space/transit/east/shuttlespace_ew1,/area/shuttle/escape_pod3/transit) "ga" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; stopper = 0; tiles = 0},/turf/space/transit/east/shuttlespace_ew10,/area/space) -"gb" = (/obj/structure/table,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) +"gb" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "gc" = (/obj/structure/table,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "gd" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) "ge" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/ninja/holding) @@ -748,7 +748,7 @@ "ot" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{tag = "icon-window5_end (NORTH)"; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "ou" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_station/start) "ov" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/syndicate_station/start) -"ow" = (/obj/structure/table,/obj/item/weapon/circuitboard/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) +"ow" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "ox" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "oy" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "oz" = (/obj/machinery/computer/shuttle_control/multi/syndicate{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) @@ -1067,14 +1067,12 @@ "uA" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/centcom/specops) "uB" = (/turf/unsimulated/floor{icon_state = "asteroid6"; name = "sand"},/area/centcom/specops) "uC" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "thunderdomeaxe"; name = "Specialist Supply"; pixel_x = 0; pixel_y = 5; req_access_txt = "104"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeadmin) -"uD" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "uE" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/hypospray/combat/nanites{pixel_x = 3; pixel_y = -3},/obj/item/weapon/reagent_containers/hypospray/combat/nanites,/obj/item/weapon/reagent_containers/hypospray/combat/nanites{pixel_x = -3; pixel_y = 3},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uF" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/item/bodybag/cryobag{pixel_y = 5},/obj/item/bodybag/cryobag{pixel_y = 5},/obj/item/bodybag/cryobag{pixel_y = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uG" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(109); req_one_access_txt = "109"},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "uH" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "uI" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) "uJ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"uK" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "uL" = (/obj/machinery/computer/message_monitor,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "uM" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "uO" = (/mob/living/silicon/decoy{name = "A.L.I.C.E."},/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control) @@ -1447,6 +1445,7 @@ "Cl" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cm" = (/obj/item/stack/sheet/metal,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cn" = (/obj/item/stack/sheet/glass,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"Co" = (/obj/machinery/kitchen_machine/microwave/upgraded,/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cp" = (/obj/machinery/door/window/northright{name = "bar"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cq" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "Cr" = (/obj/item/ashtray/glass,/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1760,6 +1759,7 @@ "It" = (/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "Iu" = (/obj/machinery/door/window{dir = 1; name = "Cell A"; req_access_txt = "101"},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) "Iv" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"Iw" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Ix" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Iy" = (/obj/item/device/camera,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Iz" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin) @@ -1836,8 +1836,8 @@ afbeaSbcaUaYdYdgddemdgddemcldXcldXdWdxdwdnbdaTaUbfaVamaqarasatauavbhaxbjbkboblbm anaUaVaZbdaXdndWdxdydWdxdydecDdecDemcmdHdFbgbabdbcaYadauavbhbibjbkboaBbmbnapaqarasatauarbjbkboblbhblbmbnapaqarasatauaKaLaMaUaVaZbdaXcjdmdmdmdmdmdmdmdmdmcPbebfaVaZbgaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCcpcpcpdadacpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeDeqeqeqbsereEeFeGerbseHeHeIeJeJbseveKeveLevbseMeNeNeNeObsePeQeQeQeRbD akbdaYbbbgaTdFemcmdwemcmdwdgckdgckdydfdXeSaSaWbgaZaXalbkboblbmbnapaqaGasatauavbhbibjbkeacGeTdZeUcJarasatauavbhbibjbkaAaLaMbdaYbbbgaTcMdmdmdmdmdmdmdmdmdmdvaUbcaYbbaSaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCeVcpeWdadacpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqeqeqeXeqbsereYeYeYerbseHeZeZeZeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD aabgaXbeaSbaeSdydfdHdydfdHdWdddWdddwclcDcEaVbfaSbbaTaoblbmbnapaqarasaIauavbhbibjbkboblcJfafbfcfdfeatauavbhbibjbkboblaCaLaMbgaXbeaSbacPdmdmdmdmdmdmdmdmdmcObdaZaXbeaVaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffgfgfhfififjfgfgfgfgfgfgfgfgfgfkfgfgfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCeCcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeqbserererererbseHeIeIeIeJbsevevevevevbseMeNeNeNeObsePeQeQeQeRbD -ajaSaTaUaVaWcEdwcldXdwcldXemdxemdxdHdeckcFaYbcaVbebaabavbhbibjbkboblaCbnapaqarasatauavfnfofpfqfrfsbmbnapaqarasatauavawaLaMaSaTaUaVaWdvdmdmdmdmdmdmdmdmdmdYbgbbaTaUaYaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffggbfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeVeCfLcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD -amaVbabdaYbfcFdHdecDdHdecDdycmdycmdXdgddcBaXaZaYaUaWaeboblbmbnapaqaraHatauavbhbibjbkboebfXfYfZfogaasatauavbhbibjbkboaBaLaMaVbabdaYbfcOdmdmdmdmdmdmdmdmdmdnaSbebabdaXaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffgfxfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpggeCghcpgidrgjcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD +ajaSaTaUaVaWcEdwcldXdwcldXemdxemdxdHdeckcFaYbcaVbebaabavbhbibjbkboblaCbnapaqarasatauavfnfofpfqfrfsbmbnapaqarasatauavawaLaMaSaTaUaVaWdvdmdmdmdmdmdmdmdmdmdYbgbbaTaUaYaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNftfufvfwfffgfxfyfzfAfAfBfCfDfEfFfGfHfIfHfHfJfKfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeVeCfLcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbseqeqeqfMeqbserfNfOfPerbsfQfRfRfRfSbsevfTevevevbsfUfVfVfVfWbsePeQeQeQeRbD +amaVbabdaYbfcFdHdecDdHdecDdycmdycmdXdgddcBaXaZaYaUaWaeboblbmbnapaqaraHatauavbhbibjbkboebfXfYfZfogaasatauavbhbibjbkboaBaLaMaVbabdaYbfcOdmdmdmdmdmdmdmdmdmdnaSbebabdaXaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffufufufffggbfyfyfyfyfygcgdgdgdgefHfHfHgffHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpggeCghcpgidrgjcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqgkeqeqeqbserglgmgnerbsgogpgpgpgqbsevevevgrevbsgsgtgtgtgubsgveQeQeQgwbD adaYaWbgaXbccBdXdgckdXdgckdwdfdwdfcDdWdxdcaTbbaXbdbfaharasatauavbhbiaybkboblbmbnapaqarcKfngxcGeTdZbjbkboblbmbnapaqaraHaLaMaYaWbgaXbcdYdmdmdmdmdmdmdmdmdmdFaVaUaWbgaTaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgygzgAfufufufffggBfygCgDgEgFgGgdgdgdgdfHfHgHfHgIfIfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpeCeCeCcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeneoepeneobseqeqeqeqeDbserglgmgnerbsgJeIgKeIgLbsevevevevevbsgMeNeNeNgNbsgveQeQeQgwbD alaXbfaSaTaZdccDdWddcDdWdddHcldHclckemcmcQbabeaTbgbcagbjbkboblbmbnapaFarasatauavbhbibjbkboblbmbnapaqarasatauavbhbibjazaLaMaXbfaSaTaZdndmdmdmdmdmdmdmdmdmeSaYbdbfaSbaaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgOgPgQfufufufffggRgdgegegegegegdgdgdgdfHfHfHgSfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpfLeCeVcpfldrfmcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpeoepeneoepbsgTeqeqeqeqbserglgmgnerbsgJgUgUgUgLbsgVgVgVgVgVbsgMeNeNeNgNbsgveQeQeQgwbD aoaTbcaVbabbcQckemdxckemdxdXdedXdedddydfcNaWaUbaaSaZacatauavbhbibjbkaAblbmbnapaqarasatauavbhbibjbkboblbmbnapaqarasataJaLaMaTbcaVbabbdFdmdmdmdmdmdmdmdmdmcEaXbgbcaVaWaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfffffffffffffffggWgdgdgdgdgdgdgdgdgdgdgXfHfHfHfHfHfgaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbZcpcpcpcpcpcpcpcpcpbZaNaNaNaNaNaNaNaNaNaNaNaNaNbpepeneoepenbseqfMeqgkeqbsergYgZhaerbsgJgJeIgLgLbshbhbhbhbhbbsgMeNeNeNgNbsgveQeQeQgwbD @@ -1995,7 +1995,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVAVAVAVAVAVAVAVAVxcyNyNyNBLBMBMBMBMBNBNBMBMBMBMBOyNyNyNxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNznBPBQBQBQBRzpaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVBSBTBTBTBTBTBUAVxcyNyNBLBVBWBXBYBZCaCbBZCcCdCeBMBMBOyNxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgChCgCgCfAVxcyNBLBMCiCiCiCjBZCkCkBZClCiCiCmCnBMBOxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCfAVxcBLBMuDCpCqCrCsBZCtCiCuCiCiCiCiCiCjBZxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCfAVxcBLBMCoCpCqCrCsBZCtCiCuCiCiCiCiCiCjBZxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCvAVxcCwCxCiCiCyCyCyBZCiCiBZCzCACBCCCDCEBZxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCgCgCgCgCgCFAVxcCGCxCiCiCiCiCiCHCiCiBZBMBMBMBMBMBMCIxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAVCfCJCgCgCgCKCfAVxcCLBMCMCNCOCPCiBZCiCiBZCiCQCRCSyNyNyNxcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -2057,7 +2057,7 @@ aNaNaNaNaNHEHEHEHEHFHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEHSHTHTHTHTHUHEHEHEHEHEHEHEHEHFHEHEHEHEHEHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNHVFSFSFSHWFSFSFSFSHXFSFSFSFSHXEjEjEjDZaNaNFkDVDVHZDVDVEMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEHSHTHTHTHTHUHEIbIcIdIcIeIfIhIhIhIfIeIhIeIhIiHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkDZIjIkIlDZHqFSFSHrDZImInIoHrDVFgEjEjDZaNaNaNFkaNaNaNEMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEIpHTHTHTHTIqHEIhIrIrIrIrIrIhIhIhIrIrIrIrIrIsHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkDVDVDVDVHuItIuDZDVDVDVDVEMaNEhEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNHEIpIvuKuKHTHTIxIhIhIhIyIhIhIhIhIhIhIhIyIhIhIhHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkaNaNFkDZHsIzDZEMaNaNaNaNaNEEEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNHEIpIvIwIwHTHTIxIhIhIhIyIhIhIhIhIhIhIhIyIhIhIhHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkaNaNFkDZHsIzDZEMaNaNaNaNaNEEEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNHEHEHEHEHEHEHEHEIhIrIrIrIrIrIhIhIhIrIrIrIrIrIhHEHEHEHEHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFkDVDVEMaNDSDWDXDXDYGxEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNHEtDtDtDtDtDHEIBICICICICICICICICICICICICICIDHEtEtEtEtEtEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEhEjEjEjEjEjEjEjDZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHEHEHEIFIFIFIFIFjbjcjdjdjdjdjdjdjdjdjdjdjdjdjdjcjbIFIFIFIFIFHEHEHEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNGiGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGwGiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEEEjEjEjEjEjEjFHDZEMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index 84460732cd1..e011a78faa9 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -1132,7 +1132,6 @@ "vN" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/mine/north_outpost) "vO" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "vP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mine/production) -"vQ" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "vR" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "54"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/explored) "vS" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) "vT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/mine/explored) @@ -1147,7 +1146,6 @@ "wc" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light/small{dir = 1},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/mine/maintenance) "wd" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "dark"},/area/mine/maintenance) "we" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/bluegrid,/area/mine/maintenance) -"wf" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/obj/machinery/light_switch{pixel_y = 23},/turf/simulated/floor,/area/mine/west_outpost) "wg" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored) "wh" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored) "wi" = (/obj/structure/lattice,/turf/space,/area/mine/explored) @@ -1202,6 +1200,7 @@ "xo" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) "xp" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/simulated/floor,/area/mine/west_outpost) "xq" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/mine/west_outpost) +"xr" = (/obj/structure/table,/obj/machinery/microwave,/obj/machinery/light_switch{pixel_y = 23},/turf/simulated/floor,/area/mine/west_outpost) "xt" = (/obj/machinery/recharge_station,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/mine/west_outpost) "xu" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/mine/west_outpost) "xv" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor,/area/mine/west_outpost) @@ -1209,6 +1208,7 @@ "xx" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/mine/west_outpost) "xz" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "xA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "outpost_west_pump"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/mine/west_outpost) +"xC" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "xD" = (/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "xE" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "xF" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) @@ -1653,7 +1653,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodododorkrkrkdodododododododododo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdodododododododododorkrkrkrkrkdododododododododolvlvlvlvoFoFoFoFwJwJwJlvlvlvkIacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkwEbkbkwqwywzwKwwoKlvlvlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaaaacacacacacacnLwMwNwOwOwPlvlvrhlvlvlvlvlvlvlvlvaekIkIacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadorkrkrkrkrkrkrkrkdododododododorkrkrkrkrkrkdododododododododolvlvlvlvlvlvlvlvwQwRwSlvlvlvkIacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacackIkIkIkIkIkIkIacacacacacacacacbkbkbkbkbkbkbkbkbkbkwqwTwqwqwqwqwqwqwwoKlvlvlvlvlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaacacacacacnLwVwWwXwXwYlvsCqXqYlvlvlvlvlvlvlvaeaekIacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdododododododorkrkrkrkrkrkdodododolvlvwZwZwZwZwZwZoMoMoMwZwZwZwZwZlvlvlvkIacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacackIkIlvlvlvlvlvkIkIkIkIkIacacacacacacacbkbkbkbkwqwqwqwqxdxexfwqwuxgwqxhwqwqwqoKoKoKwqlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaacacackInLxlxmxnxnxolvqTrdqVlvlvlvlvlvlvlvlvlvkIkIacacacbkbkbkbkbkbkbkbkbkbkbkacbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdododododododorkrkrkrkrkdodokIlvlvlvwZxpxqwfoNxtxuxvxwxxoPxzxAoNqYlvlvkIkIkIkIacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacackIkIlvlvlvlvlvlvlvlvlvlvkIkIkIkIkIacacacacbkbkbkwqvQxDxExFxDxDwqwywzxGwwwqxHxIxJxJxJoKlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaakIkIkIlvlvlvlvlvlvlvlvxKxLpepexLxLlvlvlvlvlvlvkIacacacbkbkbkbkbkbkbkbkbkbkbkacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkrkrkrkdododododododorkrkrkrkrkdodokIlvlvlvwZxpxqxroNxtxuxvxwxxoPxzxAoNqYlvlvkIkIkIkIacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacackIkIlvlvlvlvlvlvlvlvlvlvkIkIkIkIkIacacacacbkbkbkwqxCxDxExFxDxDwqwywzxGwwwqxHxIxJxJxJoKlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaakIkIkIlvlvlvlvlvlvlvlvxKxLpepexLxLlvlvlvlvlvlvkIacacacbkbkbkbkbkbkbkbkbkbkbkacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadododorkrkrkdodododododododorkrkrkdodoackIlvlvlvwZxOxPxQoNxPxSxPxPxTxUxVxAxWxXlvlvlvlvlvkIkIkIacacacacacacacbkbkbkbkbkbkbkbkbkbkbkbkacackIkInLlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvkIkIacacacacacacwqxYxDxZyaybycwqwqwqwqwwwqxHydydydyeoKlvlvlvlvlvlvlvaaaaaaaaaaaaaaaaaalvlvlvlvlvlvlvlvlvlvlvxKyfygygyhxLlvyilvlvlvoxnLkIacacbkbkbkbkbkbkbkbkbkbkacacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodorkrkrkdododododododododododododoackIlvlvlvwZyjxPxPykxPxSylxPxPoNynyooNqVlvlvlvlvlvlvlvkIkIkIkIacacacacacacbkbkbkbkbkbkbkbkbkacackIkIlvwIlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvlvkIkIkIkIacacacwqypyqyrxDysytyuyeyvywyxwqyyydyzyAyBoKlvlvlvlvlvlvaaaaaaaaaaaaaaaaaaaaaaaalvlvlvlvlvyCyCpfpfxKyFyGyHyIxLxLxLxLlvlvlvlvkIkIacacbkbkbkbkbkbkbkbkbkacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadododododododododododododododobkbkkIkIlvlvwZyJxPyKoPyMyNyOxPwZwZwZwZwZwZsCqYlvlvlvlvlvlvlvlvkIkIkIacacacacacbkbkbkbkbkbkbkacacackIlvlvlvlvlvlvlvlvlvlvlvsCqYlvlvlvlvlvlvlvlvlvkIkIacacwqwqwqwqyPwqwqpHpIySpHpIwqwqwqwqwqyTwqwqoKoKlvlvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalvlvpfpfyXyYyZpJzbzczczdqrzfzgrSqYlvlvlvnMkIacacbkbkbkbkbkbkbkacacacbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/machinery/kitchen/kitchen_machine.dm b/code/game/machinery/kitchen/kitchen_machine.dm index 2e1ea05c24b..ad6ecb3f27b 100644 --- a/code/game/machinery/kitchen/kitchen_machine.dm +++ b/code/game/machinery/kitchen/kitchen_machine.dm @@ -15,6 +15,7 @@ var/efficiency = 0 var/list/cook_verbs = list("Cooking") //Recipe & Item vars + var/recipe_type //Make sure to set this on the machine definition, or else you're gonna runtime on New() var/list/datum/recipe/available_recipes // List of the recipes you can use var/list/acceptable_items // List of the items you can put in var/list/acceptable_reagents // List of the reagents you can put in @@ -31,9 +32,25 @@ ********************/ /obj/machinery/kitchen_machine/New() - //..() //do not need this reagents = new/datum/reagents(100) reagents.my_atom = src + if (!available_recipes) + available_recipes = new + acceptable_items = new + acceptable_reagents = new + for (var/type in (typesof(recipe_type)-recipe_type)) + var/datum/recipe/recipe = new type + if(recipe.result) // Ignore recipe subtypes that lack a result + available_recipes += recipe + for (var/item in recipe.items) + acceptable_items |= item + for (var/reagent in recipe.reagents) + acceptable_reagents |= reagent + if (recipe.items || recipe.fruit) + max_n_of_items = max(max_n_of_items,recipe.count_n_items()) + else + qdel(recipe) + acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown /******************* * Item Adding diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 67b53ad0883..988edaf8580 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/kitchen.dmi' icon_state = "mw" cook_verbs = list("Microwaving", "Reheating", "Heating") + recipe_type = /datum/recipe/microwave off_icon = "mw" on_icon = "mw1" broken_icon = "mwb" @@ -19,25 +20,6 @@ /obj/machinery/kitchen_machine/microwave/New() ..() - if (!available_recipes) - available_recipes = new - for (var/type in (typesof(/datum/recipe/microwave)-/datum/recipe/microwave)) - var/datum/recipe/recipe = new type - if(recipe.result) // Ignore recipe subtypes that lack a result - available_recipes += recipe - else - qdel(recipe) - acceptable_items = new - acceptable_reagents = new - for (var/datum/recipe/microwave/recipe in available_recipes) - for (var/item in recipe.items) - acceptable_items |= item - for (var/reagent in recipe.reagents) - acceptable_reagents |= reagent - if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.count_n_items()) - acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown - component_parts = list() component_parts += new /obj/item/weapon/circuitboard/microwave(null) component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) @@ -59,3 +41,15 @@ for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts) E += M.rating efficiency = E + +// The following code is present as temporary assurance for compatibility and to avoid merge conflicts for the TG mining port +// Please delete this portion once all maps are updated to use the new object path: /obj/machinery/kitchen_machine/microwave + +/obj/machinery/microwave + name = "Microwave spawner" + icon = 'icons/obj/kitchen.dmi' + icon_state = "mw" + +/obj/machinery/microwave/New() + new /obj/machinery/kitchen_machine/microwave(get_turf(src)) + qdel(src) \ No newline at end of file diff --git a/code/modules/food/candy_maker.dm b/code/modules/food/candy_maker.dm index d53a5acb691..1452df3ea70 100644 --- a/code/modules/food/candy_maker.dm +++ b/code/modules/food/candy_maker.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/cooking_machines.dmi' icon_state = "candymaker_off" cook_verbs = list("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction") + recipe_type = /datum/recipe/candy off_icon = "candymaker_off" on_icon = "candymaker_on" broken_icon = "candymaker_broke" @@ -19,25 +20,6 @@ /obj/machinery/kitchen_machine/candy_maker/New() ..() - if (!available_recipes) - available_recipes = new - for (var/type in (typesof(/datum/recipe/candy)-/datum/recipe/candy)) - var/datum/recipe/recipe = new type - if(recipe.result) // Ignore recipe subtypes that lack a result - available_recipes += recipe - else - qdel(recipe) - acceptable_items = new - acceptable_reagents = new - for (var/datum/recipe/candy/recipe in available_recipes) - for (var/item in recipe.items) - acceptable_items |= item - for (var/reagent in recipe.reagents) - acceptable_reagents |= reagent - if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.count_n_items()) - acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown - component_parts = list() component_parts += new /obj/item/weapon/circuitboard/candy_maker(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) diff --git a/code/modules/food/grill_new.dm b/code/modules/food/grill_new.dm index 2e8b1a393bb..8b9ac0cd27c 100644 --- a/code/modules/food/grill_new.dm +++ b/code/modules/food/grill_new.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/cooking_machines.dmi' icon_state = "grill_off" cook_verbs = list("Grilling", "Searing", "Frying") + recipe_type = /datum/recipe/grill off_icon = "grill_off" on_icon = "grill_on" broken_icon = "grill_broke" @@ -19,25 +20,6 @@ /obj/machinery/kitchen_machine/grill/New() ..() - if (!available_recipes) - available_recipes = new - for (var/type in (typesof(/datum/recipe/grill)-/datum/recipe/grill)) - var/datum/recipe/recipe = new type - if(recipe.result) // Ignore recipe subtypes that lack a result - available_recipes += recipe - else - qdel(recipe) - acceptable_items = new - acceptable_reagents = new - for (var/datum/recipe/grill/recipe in available_recipes) - for (var/item in recipe.items) - acceptable_items |= item - for (var/reagent in recipe.reagents) - acceptable_reagents |= reagent - if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.count_n_items()) - acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown - component_parts = list() component_parts += new /obj/item/weapon/circuitboard/grill(null) component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) diff --git a/code/modules/food/oven_new.dm b/code/modules/food/oven_new.dm index 7c5316e5705..c709fdf0b5e 100644 --- a/code/modules/food/oven_new.dm +++ b/code/modules/food/oven_new.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/cooking_machines.dmi' icon_state = "oven_off" cook_verbs = list("Baking", "Roasting", "Broiling") + recipe_type = /datum/recipe/oven off_icon = "oven_off" on_icon = "oven_on" broken_icon = "oven_broke" @@ -19,25 +20,6 @@ /obj/machinery/kitchen_machine/oven/New() ..() - if (!available_recipes) - available_recipes = new - for (var/type in (typesof(/datum/recipe/oven)-/datum/recipe/oven)) - var/datum/recipe/recipe = new type - if(recipe.result) // Ignore recipe subtypes that lack a result - available_recipes += recipe - else - qdel(recipe) - acceptable_items = new - acceptable_reagents = new - for (var/datum/recipe/oven/recipe in available_recipes) - for (var/item in recipe.items) - acceptable_items |= item - for (var/reagent in recipe.reagents) - acceptable_reagents |= reagent - if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.count_n_items()) - acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown - component_parts = list() component_parts += new /obj/item/weapon/circuitboard/oven(null) component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) From 99bf49504ae490c2365143f51e0ac9dcd2955422 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 11 Jul 2015 06:28:03 -0400 Subject: [PATCH 08/15] LINDA Pressure Changes --- code/LINDA/LINDA_turf_tile.dm | 6 +----- code/game/machinery/machinery.dm | 1 + code/game/objects/items.dm | 2 +- code/game/objects/structures.dm | 1 + code/game/objects/structures/mop_bucket.dm | 3 +-- .../structures/stool_bed_chair_nest/stools.dm | 1 - .../mob/living/carbon/human/human_defense.dm | 1 + code/modules/mob/mob_defines.dm | 1 + code/modules/paperwork/paper.dm | 2 +- code/modules/paperwork/paperbin.dm | 2 +- sound/effects/space_wind.ogg | Bin 0 -> 40939 bytes 11 files changed, 9 insertions(+), 11 deletions(-) create mode 100644 sound/effects/space_wind.ogg diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index eb43d2d5bca..1a0b785d69c 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -270,14 +270,10 @@ turf/simulated/proc/share_temperature_mutual_solid(turf/simulated/sharer, conduc atom/movable/var/pressure_resistance = 5 -atom/movable/var/last_forced_movement = 0 atom/movable/proc/experience_pressure_difference(pressure_difference, direction) - if(last_forced_movement >= air_master.current_cycle) - return 0 - else if(!anchored) + if(!anchored) if(pressure_difference > pressure_resistance) - last_forced_movement = air_master.current_cycle spawn step(src, direction) return 1 diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 85a8557b2d3..d3b26ba0f05 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -96,6 +96,7 @@ Class Procs: /obj/machinery name = "machinery" icon = 'icons/obj/stationobjs.dmi' + pressure_resistance = 10 var/stat = 0 var/emagged = 0 var/use_power = 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4f52fe3dd86..0914bc7b855 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -12,7 +12,7 @@ var/w_class = 3.0 var/slot_flags = 0 //This is used to determine on which slots an item can fit. pass_flags = PASSTABLE - pressure_resistance = 5 + pressure_resistance = 3 // causeerrorheresoifixthis var/obj/item/master = null diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 97b9b42019e..ef365fdd059 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,5 +1,6 @@ /obj/structure icon = 'icons/obj/structures.dmi' + pressure_resistance = 8 var/climbable var/mob/climber diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 424f7aba13f..fd3372692e6 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/janitor.dmi' icon_state = "mopbucket" density = 1 - pressure_resistance = 5 flags = OPENCONTAINER var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite @@ -12,7 +11,7 @@ var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src - + /obj/structure/mopbucket/full/New() ..() reagents.add_reagent("water", 100) diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index 726964e7ef3..00e267a48f5 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/objects.dmi' icon_state = "stool" anchored = 1.0 - pressure_resistance = 15 /obj/structure/stool/ex_act(severity) switch(severity) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 33aa4df7abe..bccf63c73de 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -505,6 +505,7 @@ emp_act return /mob/living/carbon/human/experience_pressure_difference(pressure_difference, direction) + playsound(src, 'sound/effects/space_wind.ogg', 50, 1) if(shoes) if(istype(shoes,/obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP)) //TODO: Make a not-shit shoe var system to negate airflow. return 0 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 394d098fdc8..5dd92388daf 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -3,6 +3,7 @@ layer = 4.0 animate_movement = 2 // flags = NOREACT + pressure_resistance = 8 var/datum/mind/mind var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 50309dd859b..211cc4cfc34 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -13,7 +13,7 @@ throw_range = 1 throw_speed = 1 layer = 4 - pressure_resistance = 1 + pressure_resistance = 0 slot_flags = SLOT_HEAD body_parts_covered = HEAD attack_verb = list("bapped") diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 6c567772b99..bc90e229f20 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -7,7 +7,7 @@ w_class = 3 throw_speed = 3 throw_range = 7 - pressure_resistance = 10 + pressure_resistance = 8 var/amount = 30 //How much paper is in the bin. var/list/papers = new/list() //List of papers put in the bin for reference. /* diff --git a/sound/effects/space_wind.ogg b/sound/effects/space_wind.ogg new file mode 100644 index 0000000000000000000000000000000000000000..397086a1a296d4bd807eeecc569c68bd71021955 GIT binary patch literal 40939 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 Date: Sat, 11 Jul 2015 09:38:20 -0400 Subject: [PATCH 09/15] Auto-Toggling OOC --- code/controllers/configuration.dm | 5 +++++ code/game/gamemodes/gameticker.dm | 4 +++- code/game/verbs/ooc.dm | 11 +++++++++++ code/modules/admin/admin.dm | 6 +----- config/example/game_options.txt | 3 +++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 658d255aa64..7094f72c9bc 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -100,6 +100,9 @@ var/revival_cloning = 1 var/revival_brain_life = -1 + + var/ooc_during_round = 0 + //Used for modifying movement speed for mobs. //Unversal modifiers var/run_speed = 0 @@ -534,6 +537,8 @@ config.revival_cloning = value if("revival_brain_life") config.revival_brain_life = value + if("ooc_during_round") + config.ooc_during_round = 1 if("run_speed") config.run_speed = value if("walk_speed") diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 26c88144d78..bd6bae72d6f 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -219,6 +219,7 @@ var/global/datum/controller/gameticker/ticker admins_number++ if(admins_number == 0) send2adminirc("Round has started with no admins online.") + auto_toggle_ooc(0) // Turn it off /* DONE THROUGH PROCESS SCHEDULER supply_controller.process() //Start the supply shuttle regenerating points -- TLE @@ -250,6 +251,7 @@ var/global/datum/controller/gameticker/ticker proc/station_explosion_cinematic(var/station_missed=0, var/override = null) if( cinematic ) return //already a cinematic in progress! + auto_toggle_ooc(1) // Turn it on //initialise our cinematic screen object cinematic = new(src) cinematic.icon = 'icons/effects/station_explosion.dmi' @@ -400,7 +402,7 @@ var/global/datum/controller/gameticker/ticker if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game)) current_state = GAME_STATE_FINISHED - + auto_toggle_ooc(1) // Turn it on spawn declare_completion() diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 2f8249c8401..c8a1d058592 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -75,6 +75,17 @@ var/global/normal_ooc_colour = "#002eb8" C << "OOC: [src.key]: [msg]" */ +/proc/toggle_ooc() + ooc_allowed = !( ooc_allowed ) + if (ooc_allowed) + world << "The OOC channel has been globally enabled!" + else + world << "The OOC channel has been globally disabled!" + +/proc/auto_toggle_ooc(var/on) + if(!config.ooc_during_round && ooc_allowed != on) + toggle_ooc() + /client/proc/set_ooc(newColor as color) set name = "Set Player OOC Colour" set desc = "Set to yellow for eye burning goodness." diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 9cd97ddcb42..39304707b44 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -629,11 +629,7 @@ var/global/nologevent = 0 set category = "Server" set desc="Globally Toggles OOC" set name="Toggle OOC" - ooc_allowed = !( ooc_allowed ) - if (ooc_allowed) - world << "The OOC channel has been globally enabled!" - else - world << "The OOC channel has been globally disabled!" + toggle_ooc() log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled OOC.", 1) feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/config/example/game_options.txt b/config/example/game_options.txt index 3f282e5a6ce..0d4b371ae59 100644 --- a/config/example/game_options.txt +++ b/config/example/game_options.txt @@ -33,6 +33,9 @@ REVIVAL_CLONING 1 REVIVAL_BRAIN_LIFE -1 +### OOC DURING ROUND ### +#Comment this out if you want OOC to be automatically disabled during the round, it will be enabled during the lobby and after the round end results. +OOC_DURING_ROUND ### MOB MOVEMENT ### From 057c15982e3139b79c3c16a391c82442779f5e9d Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 11 Jul 2015 10:10:57 -0400 Subject: [PATCH 10/15] Re-adds Security Helmets to Officer's Lockers --- .../objects/structures/crates_lockers/closets/secure/security.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 863be182e04..ff4f66c9bae 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -188,6 +188,7 @@ new /obj/item/weapon/storage/belt/security/sec(src) new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/clothing/glasses/sunglasses/sechud(src) + new /obj/item/clothing/head/helmet(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/taperoll/police(src) return From d8adcca1cfe9ebfb1f2c528ffcb45bd8aae13d94 Mon Sep 17 00:00:00 2001 From: DZD Date: Sun, 12 Jul 2015 12:27:45 -0400 Subject: [PATCH 11/15] Makes log viewing use ftp() instead of run() Carbon copy of tgstation/-tg-station#10467. This should fix not being able to retrieve logs, because BYOND 508 broke run() again. The main difference is that instead of directly opening a log, a prompt will come up asking to save the file to a location. --- code/modules/admin/verbs/getlogs.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index eac11fcac0a..cf939c0ae9f 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -52,7 +52,7 @@ return message_admins("[key_name_admin(src)] accessed file: [path]") - src << run( file(path) ) + src << ftp( file(path) ) src << "Attempting to send file, this may take a fair few minutes if the file is very large." return @@ -72,7 +72,7 @@ return message_admins("[key_name_admin(src)] accessed file: [path]") - src << run( file(path) ) + src << ftp( file(path) ) src << "Attempting to send file, this may take a fair few minutes if the file is very large." return @@ -87,7 +87,7 @@ var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")].log" if( fexists(path) ) - src << run( file(path) ) + src << ftp( file(path) ) else src << "Error: view_txt_log(): File not found/Invalid path([path])." return @@ -102,7 +102,7 @@ var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log" if( fexists(path) ) - src << run( file(path) ) + src << ftp( file(path) ) else src << "Error: view_atk_log(): File not found/Invalid path([path])." return From 0eeed994604e16a1a5cee21bc96fb3080ab70fed Mon Sep 17 00:00:00 2001 From: DZD Date: Sun, 12 Jul 2015 13:08:56 -0400 Subject: [PATCH 12/15] Changeling sting nerfs/changes/tweaks - Prevents transform sting from working on species with NO_BLOOD. - Prevents DNA extraction sting from working on species with NO_BLOOD. - Prevents Plasma Men from being changelings, largely for the same reason Slime People can't be changelings, horribly mutilating people with transform sting. (Alternative way to do this would be for a species check in the DNA sting's Click() proc, which is horrendous because DNA does not contain a species datum, just a string with the species' name.) - Ported some nerfs from tgstation/-tg-station#10482, transform stinging somebody is no longer silent. It won't point you out specifically, but it will create a visible message for everyone in view range, and will make the person jittery. Also forces a cooldown on the use of all changeling powers. - Re-enables cryo sting. This should now be working since mob temperatures were fixed a while ago. --- code/game/gamemodes/changeling/changeling.dm | 6 ++- .../gamemodes/changeling/powers/tiny_prick.dm | 37 ++++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 00c199d7332..0b18cbcdde8 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -9,7 +9,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" config_tag = "changeling" restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent") - protected_species = list("Machine", "Slime People") + protected_species = list("Machine", "Slime People", "Plasmaman") required_players = 2 required_players_secret = 10 required_enemies = 1 @@ -304,6 +304,10 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" user << "We do not know how to parse this creature's DNA!" return + if(T.species.flags & NO_BLOOD) + user << "We are not able to use the DNA of a creature without a circulatory system." + return + if(has_dna(target.dna)) user << "We already have this DNA in storage!" diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 0490b00d820..b772cfca49a 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -62,10 +62,11 @@ /obj/effect/proc_holder/changeling/sting/transformation name = "Transformation Sting" desc = "We silently sting a human, injecting a retrovirus that forces them to transform." - helptext = "Does not provide a warning to others. The victim will transform much like a changeling would." + helptext = "The victim will transform much like a changeling would. The effects will be obvious to the victim, and the process will damage our genomes." sting_icon = "sting_transform" chemical_cost = 40 dna_cost = 2 + genetic_damage = 100 var/datum/dna/selected_dna = null /obj/effect/proc_holder/changeling/sting/transformation/Click() @@ -77,12 +78,11 @@ selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") if(!selected_dna) return - ..() /obj/effect/proc_holder/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target) if(!..()) return - if((HUSK in target.mutations) || (!ishuman(target)) ) + if((HUSK in target.mutations) || (!ishuman(target))) user << "Our sting appears ineffective against its DNA." return 0 if(ishuman(target)) @@ -90,20 +90,31 @@ if(H.species.flags & NO_SCAN) //Prevents transforming slimes and killing them instantly user << "This won't work on a creature with abnormal genetic material." return 0 + if(H.species.flags & NO_BLOOD) + user << "This won't work on a creature without a circulatory system." + return 0 return 1 /obj/effect/proc_holder/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target) add_logs(target, user, "stung", object="transformation sting", addition=" new identity is [selected_dna.real_name]") var/datum/dna/NewDNA = selected_dna if(issmall(target)) - user << "We stealthily sting [target.name]." - target.dna = NewDNA.Clone() - target.real_name = NewDNA.real_name - var/mob/living/carbon/human/H = target - if(istype(H)) - H.set_species() - target.UpdateAppearance() - domutcheck(target, null) + user << "Our genes cry out as we sting [target.name]!" + + if(iscarbon(target) && (target.status_flags & CANWEAKEN)) + var/mob/living/carbon/C = target + C.do_jitter_animation(500) + + target.visible_message("[target] begins to violenty convulse!","You feel a tiny prick and a begin to uncontrollably convulse!") + + spawn(10) + target.dna = NewDNA.Clone() + target.real_name = NewDNA.real_name + var/mob/living/carbon/human/H = target + if(istype(H)) + H.set_species() + target.UpdateAppearance() + domutcheck(target, null) feedback_add_details("changeling_powers","TS") return 1 @@ -172,7 +183,7 @@ obj/effect/proc_holder/changeling/sting/LSD target.hallucination = max(400, target.hallucination) feedback_add_details("changeling_powers","HS") return 1 -/* + obj/effect/proc_holder/changeling/sting/cryo //Enable when mob cooling is fixed so that frostoil actually makes you cold, instead of mostly just hungry. name = "Cryogenic Sting" desc = "We silently sting a human with a cocktail of chemicals that freeze them." @@ -188,4 +199,4 @@ obj/effect/proc_holder/changeling/sting/cryo //Enable when mob cooling is fixed target.reagents.add_reagent("ice", 30) feedback_add_details("changeling_powers","CS") return 1 -*/ + From a1b56cd4a0ad84cac2ccddf93bf93c311824a4dd Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 12 Jul 2015 18:46:13 -0400 Subject: [PATCH 13/15] adjustments --- code/controllers/configuration.dm | 6 +++--- code/game/verbs/ooc.dm | 2 +- config/example/game_options.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 7094f72c9bc..f2fbfd5d730 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -101,7 +101,7 @@ var/revival_brain_life = -1 - var/ooc_during_round = 0 + var/auto_toggle_ooc_during_round = 0 //Used for modifying movement speed for mobs. //Unversal modifiers @@ -537,8 +537,8 @@ config.revival_cloning = value if("revival_brain_life") config.revival_brain_life = value - if("ooc_during_round") - config.ooc_during_round = 1 + if("auto_toggle_ooc_during_round") + config.auto_toggle_ooc_during_round = 1 if("run_speed") config.run_speed = value if("walk_speed") diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index c8a1d058592..1cf5e73bc19 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -83,7 +83,7 @@ var/global/normal_ooc_colour = "#002eb8" world << "The OOC channel has been globally disabled!" /proc/auto_toggle_ooc(var/on) - if(!config.ooc_during_round && ooc_allowed != on) + if(config.auto_toggle_ooc_during_round && ooc_allowed != on) toggle_ooc() /client/proc/set_ooc(newColor as color) diff --git a/config/example/game_options.txt b/config/example/game_options.txt index 0d4b371ae59..31d2bf1d9c8 100644 --- a/config/example/game_options.txt +++ b/config/example/game_options.txt @@ -33,9 +33,9 @@ REVIVAL_CLONING 1 REVIVAL_BRAIN_LIFE -1 -### OOC DURING ROUND ### -#Comment this out if you want OOC to be automatically disabled during the round, it will be enabled during the lobby and after the round end results. -OOC_DURING_ROUND +### AUTO TOGGLE OOC DURING ROUND ### +#Uncomment this if you want OOC to be automatically disabled during the round, it will be enabled during the lobby and after the round end results. +#AUTO_TOGGLE_OOC_DURING_ROUND ### MOB MOVEMENT ### From 98603b8441f003d023558019bf8b57f284c3eb04 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 12 Jul 2015 19:09:05 -0400 Subject: [PATCH 14/15] bleh --- code/LINDA/LINDA_turf_tile.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 1a0b785d69c..eb43d2d5bca 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -270,10 +270,14 @@ turf/simulated/proc/share_temperature_mutual_solid(turf/simulated/sharer, conduc atom/movable/var/pressure_resistance = 5 +atom/movable/var/last_forced_movement = 0 atom/movable/proc/experience_pressure_difference(pressure_difference, direction) - if(!anchored) + if(last_forced_movement >= air_master.current_cycle) + return 0 + else if(!anchored) if(pressure_difference > pressure_resistance) + last_forced_movement = air_master.current_cycle spawn step(src, direction) return 1 From 5d342baffbd6d4288a0d432910293b05eeeb7336 Mon Sep 17 00:00:00 2001 From: Krausus Date: Mon, 13 Jul 2015 07:31:48 -0400 Subject: [PATCH 15/15] Fixes morgues and crematoriums (includes resisting) Fixes their trays breaking for 30 seconds, not logging cremations, not being able to resist out of them, and all these damn uses of src. --- code/game/objects/structures/morgue.dm | 260 +++++++++++++------------ code/modules/mob/living/living.dm | 15 ++ 2 files changed, 150 insertions(+), 125 deletions(-) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 9b22f0e2dd5..80792c53f96 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -21,10 +21,10 @@ anchored = 1.0 /obj/structure/morgue/proc/update() - if(src.connected) - src.icon_state = "morgue0" + if(connected) + icon_state = "morgue0" else - if(src.contents.len) + if(contents.len) var/mob/living/M = locate() in contents @@ -35,14 +35,14 @@ var/mob/dead/observer/G = M.get_ghost() if(M.client) - src.icon_state = "morgue3" + icon_state = "morgue3" else if(G && G.client) //There is a ghost and it is connected to the server - src.icon_state = "morgue5" + icon_state = "morgue5" else - src.icon_state = "morgue2" + icon_state = "morgue2" - else src.icon_state = "morgue4" - else src.icon_state = "morgue1" + else icon_state = "morgue4" + else icon_state = "morgue1" return @@ -50,94 +50,99 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.loc = loc ex_act(severity) qdel(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.loc = loc ex_act(severity) qdel(src) return if(3.0) if (prob(5)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.loc = loc ex_act(severity) qdel(src) return return /obj/structure/morgue/alter_health() - return src.loc + return loc /obj/structure/morgue/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.connected.loc) + if (connected) + for(var/atom/movable/A as mob|obj in connected.loc) if (!( A.anchored )) A.loc = src - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - //src.connected = null - qdel(src.connected) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + qdel(connected) + connected = null else - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - src.connected = new /obj/structure/m_tray( src.loc ) - step(src.connected, src.dir) - src.connected.layer = OBJ_LAYER - var/turf/T = get_step(src, src.dir) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "morgue0" + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + connected = new /obj/structure/m_tray( loc ) + step(connected, dir) + connected.layer = OBJ_LAYER + var/turf/T = get_step(src, dir) + if (T.contents.Find(connected)) + connected.connected = src + icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc - src.connected.icon_state = "morguet" - src.connected.dir = src.dir + A.loc = connected.loc + connected.icon_state = "morguet" + connected.dir = dir else - //src.connected = null - qdel(src.connected) - src.add_fingerprint(user) + qdel(connected) + connected = null + add_fingerprint(user) update() return /obj/structure/morgue/attackby(P as obj, mob/user as mob, params) if (istype(P, /obj/item/weapon/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + var/t = input(user, "What would you like the label to be?", text("[]", name), null) as text if (user.get_active_hand() != P) return - if ((!in_range(src, usr) && src.loc != user)) + if ((!in_range(src, usr) && loc != user)) return t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) if (t) - src.name = text("Morgue- '[]'", t) - src.overlays += image(src.icon, "morgue_label") + name = text("Morgue- '[]'", t) + overlays += image(icon, "morgue_label") else - src.name = "Morgue" - src.overlays.Cut() - src.add_fingerprint(user) + name = "Morgue" + overlays.Cut() + add_fingerprint(user) return /obj/structure/morgue/relaymove(mob/user as mob) if (user.stat) return - src.connected = new /obj/structure/m_tray( src.loc ) - step(src.connected, EAST) - src.connected.layer = OBJ_LAYER + connected = new /obj/structure/m_tray( loc ) + step(connected, EAST) + connected.layer = OBJ_LAYER var/turf/T = get_step(src, EAST) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "morgue0" + if (T.contents.Find(connected)) + connected.connected = src + icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc - //Foreach goto(106) - src.connected.icon_state = "morguet" + A.loc = connected.loc + connected.icon_state = "morguet" else - //src.connected = null - qdel(src.connected) + qdel(connected) + connected = null return +/obj/structure/morgue/Destroy() + if(connected) + qdel(connected) + connected = null + return ..() + /* * Morgue tray @@ -155,15 +160,13 @@ /obj/structure/m_tray/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.loc) + if (connected) + for(var/atom/movable/A as mob|obj in loc) if (!( A.anchored )) - A.loc = src.connected - //Foreach goto(26) - src.connected.connected = null - src.connected.update() + A.loc = connected + connected.connected = null + connected.update() add_fingerprint(user) - //SN src = null qdel(src) return return @@ -175,13 +178,19 @@ return if (!ismob(user) || user.stat || user.lying || user.stunned) return - O.loc = src.loc + O.loc = loc if (user != O) for(var/mob/B in viewers(user, 3)) if ((B.client && !( B.blinded ))) B << text("\red [] stuffs [] into []!", user, O, src) return +/obj/structure/m_tray/Destroy() + if(connected && connected.connected == src) + connected.connected = null + connected = null + return ..() + /* * Crematorium @@ -200,116 +209,106 @@ var/locked = 0 /obj/structure/crematorium/proc/update() - if (src.connected) - src.icon_state = "crema0" + if (connected) + icon_state = "crema0" else - if (src.contents.len) - src.icon_state = "crema2" + if (contents.len) + icon_state = "crema2" else - src.icon_state = "crema1" + icon_state = "crema1" return /obj/structure/crematorium/ex_act(severity) switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.loc = loc ex_act(severity) qdel(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.loc = loc ex_act(severity) qdel(src) return if(3.0) if (prob(5)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.loc = loc ex_act(severity) qdel(src) return return /obj/structure/crematorium/alter_health() - return src.loc + return loc /obj/structure/crematorium/attack_hand(mob/user as mob) -// if (cremating) AWW MAN! THIS WOULD BE SO MUCH MORE FUN ... TO WATCH -// user.show_message("\red Uh-oh, that was a bad idea.", 1) -// //usr << "Uh-oh, that was a bad idea." -// src:loc:poison += 20000000 -// src:loc:firelevel = src:loc:poison -// return if (cremating) usr << "\red It's locked." return - if ((src.connected) && (src.locked == 0)) - for(var/atom/movable/A as mob|obj in src.connected.loc) + if ((connected) && (locked == 0)) + for(var/atom/movable/A as mob|obj in connected.loc) if (!( A.anchored )) A.loc = src - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - //src.connected = null - qdel(src.connected) - else if (src.locked == 0) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - src.connected = new /obj/structure/c_tray( src.loc ) - step(src.connected, SOUTH) - src.connected.layer = OBJ_LAYER + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + qdel(connected) + connected = null + else if (locked == 0) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + connected = new /obj/structure/c_tray( loc ) + step(connected, SOUTH) + connected.layer = OBJ_LAYER var/turf/T = get_step(src, SOUTH) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "crema0" + if (T.contents.Find(connected)) + connected.connected = src + icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc - src.connected.icon_state = "cremat" + A.loc = connected.loc + connected.icon_state = "cremat" else - //src.connected = null - qdel(src.connected) - src.add_fingerprint(user) + qdel(connected) + connected = null + add_fingerprint(user) update() /obj/structure/crematorium/attackby(P as obj, mob/user as mob, params) if (istype(P, /obj/item/weapon/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text + var/t = input(user, "What would you like the label to be?", text("[]", name), null) as text if (user.get_active_hand() != P) return - if ((!in_range(src, usr) > 1 && src.loc != user)) + if ((!in_range(src, usr) > 1 && loc != user)) return t = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) if (t) - src.name = text("Crematorium- '[]'", t) + name = text("Crematorium- '[]'", t) else - src.name = "Crematorium" - src.add_fingerprint(user) + name = "Crematorium" + add_fingerprint(user) return /obj/structure/crematorium/relaymove(mob/user as mob) if (user.stat || locked) return - src.connected = new /obj/structure/c_tray( src.loc ) - step(src.connected, SOUTH) - src.connected.layer = OBJ_LAYER + connected = new /obj/structure/c_tray( loc ) + step(connected, SOUTH) + connected.layer = OBJ_LAYER var/turf/T = get_step(src, SOUTH) - if (T.contents.Find(src.connected)) - src.connected.connected = src - src.icon_state = "crema0" + if (T.contents.Find(connected)) + connected.connected = src + icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) - A.loc = src.connected.loc - //Foreach goto(106) - src.connected.icon_state = "cremat" + A.loc = connected.loc + connected.icon_state = "cremat" else - //src.connected = null - qdel(src.connected) + qdel(connected) + connected = null return -/obj/structure/crematorium/proc/cremate(atom/A, mob/user as mob) -// for(var/obj/machinery/crema_switch/O in src) //trying to figure a way to call the switch, too drunk to sort it out atm -// if(var/on == 1) -// return +/obj/structure/crematorium/proc/cremate(mob/user as mob) if(cremating) return //don't let you cremate something twice or w/e @@ -319,10 +318,10 @@ return else - if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear))) + if(!isemptylist(search_contents_for(/obj/item/weapon/disk/nuclear))) usr << "You get the feeling that you shouldn't cremate one of the items in the cremator." return - if(!isemptylist(src.search_contents_for(/obj/item/flag/nation))) + if(!isemptylist(search_contents_for(/obj/item/flag/nation))) usr << "You get the feeling that you shouldn't cremate one of the items in the cremator." return for (var/mob/M in viewers(src)) @@ -335,10 +334,10 @@ for(var/mob/living/M in contents) if (M.stat!=2) M.emote("scream") - //Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out. - //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point in this when the mob's about to be deleted - //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" - //log_attack("\[[time_stamp()]\] [user]/[user.ckey] cremated [M]/[M.ckey]") + if(istype(user)) + M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" + user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" + log_attack("\[[time_stamp()]\] [user]/[user.ckey] cremated [M]/[M.ckey]") M.death(1) M.ghostize() qdel(M) @@ -351,9 +350,15 @@ cremating = 0 locked = 0 update() - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + playsound(loc, 'sound/machines/ding.ogg', 50, 1) return +/obj/structure/crematorium/Destroy() + if(connected) + qdel(connected) + connected = null + return ..() + /* * Crematorium tray @@ -370,15 +375,14 @@ throwpass = 1 /obj/structure/c_tray/attack_hand(mob/user as mob) - if (src.connected) - for(var/atom/movable/A as mob|obj in src.loc) + if (connected) + for(var/atom/movable/A as mob|obj in loc) if (!( A.anchored )) - A.loc = src.connected + A.loc = connected //Foreach goto(26) - src.connected.connected = null - src.connected.update() + connected.connected = null + connected.update() add_fingerprint(user) - //SN src = null qdel(src) return return @@ -390,7 +394,7 @@ return if (!ismob(user) || user.stat || user.lying || user.stunned) return - O.loc = src.loc + O.loc = loc if (user != O) for(var/mob/B in viewers(user, 3)) if ((B.client && !( B.blinded ))) @@ -398,8 +402,14 @@ //Foreach goto(99) return +/obj/structure/m_tray/Destroy() + if(connected && connected.connected == src) + connected.connected = null + connected = null + return ..() + /obj/machinery/crema_switch/attack_hand(mob/user as mob) - if(src.allowed(usr)) + if(allowed(usr)) for (var/obj/structure/crematorium/C in world) if (C.id == id) if (!C.cremating) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 1c1067cb240..65864f5d912 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -485,6 +485,10 @@ if ((!(L.stat) && !(L.restrained()))) resist_grab(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src' + // Sliding out of a morgue/crematorium + if(loc && (istype(loc, /obj/structure/morgue) || istype(loc, /obj/structure/crematorium))) + resist_tray(L) + //unbuckling yourself if(L.buckled && (L.last_special <= world.time) ) resist_buckle(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src' @@ -687,6 +691,17 @@ BD.attack_hand(usr) C.open() +// resist_tray allows a mob to slide themselves out of a morgue or crematorium +/mob/living/proc/resist_tray(var/mob/living/carbon/CM) + if(!istype(CM)) + return + if (usr.stat || usr.restrained()) + return + + usr << "You attempt to slide yourself out of \the [loc]..." + var/obj/structure/S = loc + S.attack_hand(src) + /* resist_stop_drop_roll allows a mob to stop, drop, and roll in order to put out a fire burning on them. *///// /mob/living/proc/resist_stop_drop_roll(var/mob/living/carbon/CM)