From 068adc1f0a1f1346d82c571d517f18ac7b328266 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 10 Jul 2015 05:44:29 -0400 Subject: [PATCH 01/32] Shard Runtime Fix --- code/game/objects/items/weapons/shards.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index e6f38335a82..bc7c6dca09a 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -67,6 +67,8 @@ if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) ) var/obj/item/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot")) + if(!affecting) + return if(affecting.status & ORGAN_ROBOT) return H.Weaken(3) From 8a8011acbfc25addb873600d9453ac6b6717b3e8 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Fri, 10 Jul 2015 09:46:30 -0400 Subject: [PATCH 02/32] 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 07:49:02 -0700 Subject: [PATCH 03/32] Update LINDA to use a real process instead of using the scheduler as a ticker --- code/LINDA/LINDA_system.dm | 129 ------------------------------ code/controllers/Processes/air.dm | 129 ++++++++++++++++++++++++++---- 2 files changed, 114 insertions(+), 144 deletions(-) diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index b107a8910eb..b07c000471f 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -1,132 +1,3 @@ -var/kill_air = 0 - -var/global/datum/controller/air_system/air_master - -datum/controller/air_system - var/list/excited_groups = list() - var/list/active_turfs = list() - var/list/hotspots = list() - var/speed = 1 - - //Special functions lists - var/list/turf/simulated/active_super_conductivity = list() - var/list/turf/simulated/high_pressure_delta = list() - - var/current_cycle = 0 - var/update_delay = 5 - var/failed_ticks = 0 - var/tick_progress = 0 - - -/datum/controller/air_system/proc/Setup() - set background = 1 - world << "\red \b Processing Geometry..." - sleep(1) - - var/start_time = world.timeofday - - setup_allturfs() - - setup_overlays() - - world << "\red \b Geometry processed in [(world.timeofday-start_time)/10] seconds!" - -/datum/controller/air_system/proc/process() - if(kill_air) - return 1 - - for(var/i=0,i 20) - EG.dismantle() - -/datum/controller/air_system/proc/setup_overlays() - plmaster = new /obj/effect/overlay() - plmaster.icon = 'icons/effects/tile_effects.dmi' - plmaster.icon_state = "plasma" - plmaster.layer = FLY_LAYER - plmaster.mouse_opacity = 0 - - slmaster = new /obj/effect/overlay() - slmaster.icon = 'icons/effects/tile_effects.dmi' - slmaster.icon_state = "sleeping_agent" - slmaster.layer = FLY_LAYER - slmaster.mouse_opacity = 0 - /turf/proc/CanAtmosPass(var/turf/T) if(!istype(T)) return 0 var/R diff --git a/code/controllers/Processes/air.dm b/code/controllers/Processes/air.dm index 3d45fa77b76..b6c0d1a0fe7 100644 --- a/code/controllers/Processes/air.dm +++ b/code/controllers/Processes/air.dm @@ -1,22 +1,121 @@ -/datum/controller/process/air/setup() +var/kill_air = 0 + +var/global/datum/controller/process/air_system/air_master + +/datum/controller/process/air_system + var/list/excited_groups = list() + var/list/active_turfs = list() + var/list/hotspots = list() + + //Special functions lists + var/list/turf/simulated/active_super_conductivity = list() + var/list/turf/simulated/high_pressure_delta = list() + + var/current_cycle = 0 + var/failed_ticks = 0 + var/tick_progress = 0 + +/datum/controller/process/air_system/setup() name = "air" schedule_interval = 20 // every 2 seconds + air_master = src - if(!air_master) - air_master = new - air_master.Setup() + world << "Processing Geometry..." + var/start_time = world.timeofday + setup_allturfs() // Get all currently active tiles that need processing each atmos tick. + setup_overlays() // Assign icons and such for gas-turf-overlays + world << "Geometry processed in [(world.timeofday-start_time)/10] seconds!" -/datum/controller/process/air/doWork() - if(!air_processing_killed) - if(!air_master.process()) //Runtimed. - air_master.failed_ticks++ +/datum/controller/process/air_system/doWork() + if(kill_air) + return 1 + current_cycle++ + process_active_turfs() + process_excited_groups() + scheck() + process_high_pressure_delta() + process_hotspots() + process_super_conductivity() + scheck() + return 1 - if(air_master.failed_ticks > 5) - world << "RUNTIMES IN ATMOS TICKER. Killing air simulation!" - world.log << "### ZAS SHUTDOWN" +/datum/controller/process/air_system/proc/process_hotspots() + for(var/obj/effect/hotspot/H in hotspots) + H.process() - message_admins("ZASALERT: Shutting down! status: [air_master.tick_progress]") - log_admin("ZASALERT: Shutting down! status: [air_master.tick_progress]") +/datum/controller/process/air_system/proc/process_super_conductivity() + for(var/turf/simulated/T in active_super_conductivity) + T.super_conduct() - air_processing_killed = TRUE - air_master.failed_ticks = 0 +/datum/controller/process/air_system/proc/process_high_pressure_delta() + for(var/turf/T in high_pressure_delta) + T.high_pressure_movements() + T.pressure_difference = 0 + high_pressure_delta.len = 0 + +/datum/controller/process/air_system/proc/process_active_turfs() + for(var/turf/simulated/T in active_turfs) + T.process_cell() + +/datum/controller/process/air_system/proc/remove_from_active(var/turf/simulated/T) + if(istype(T)) + T.excited = 0 + active_turfs -= T + if(T.excited_group) + T.excited_group.garbage_collect() + +/datum/controller/process/air_system/proc/add_to_active(var/turf/simulated/T, var/blockchanges = 1) + if(istype(T) && T.air) + T.excited = 1 + active_turfs |= T + if(blockchanges && T.excited_group) + T.excited_group.garbage_collect() + else + for(var/direction in cardinal) + if(!(T.atmos_adjacent_turfs & direction)) + continue + var/turf/simulated/S = get_step(T, direction) + if(istype(S)) + add_to_active(S) + +/datum/controller/process/air_system/proc/setup_allturfs(var/turfs_in = world) + for(var/turf/simulated/T in turfs_in) + T.CalculateAdjacentTurfs() + if(!T.blocks_air) + if(T.air.check_tile_graphic()) + T.update_visuals(T.air) + for(var/direction in cardinal) + if(!(T.atmos_adjacent_turfs & direction)) + continue + var/turf/enemy_tile = get_step(T, direction) + if(istype(enemy_tile,/turf/simulated/)) + var/turf/simulated/enemy_simulated = enemy_tile + if(!T.air.compare(enemy_simulated.air)) + T.excited = 1 + active_turfs |= T + break + else + if(!T.air.check_turf_total(enemy_tile)) + T.excited = 1 + active_turfs |= T + +/datum/controller/process/air_system/proc/process_excited_groups() + for(var/datum/excited_group/EG in excited_groups) + EG.breakdown_cooldown ++ + if(EG.breakdown_cooldown == 10) + EG.self_breakdown() + return + if(EG.breakdown_cooldown > 20) + EG.dismantle() + +/datum/controller/process/air_system/proc/setup_overlays() + plmaster = new /obj/effect/overlay() + plmaster.icon = 'icons/effects/tile_effects.dmi' + plmaster.icon_state = "plasma" + plmaster.layer = FLY_LAYER + plmaster.mouse_opacity = 0 + + slmaster = new /obj/effect/overlay() + slmaster.icon = 'icons/effects/tile_effects.dmi' + slmaster.icon_state = "sleeping_agent" + slmaster.layer = FLY_LAYER \ No newline at end of file From d83a4408b8066815e412729ffa72eca41feaebcf Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 10 Jul 2015 17:18:27 -0700 Subject: [PATCH 04/32] Fixed slmaster mouse_opacity --- code/controllers/Processes/air.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/controllers/Processes/air.dm b/code/controllers/Processes/air.dm index b6c0d1a0fe7..c251b913ce6 100644 --- a/code/controllers/Processes/air.dm +++ b/code/controllers/Processes/air.dm @@ -118,4 +118,5 @@ var/global/datum/controller/process/air_system/air_master slmaster = new /obj/effect/overlay() slmaster.icon = 'icons/effects/tile_effects.dmi' slmaster.icon_state = "sleeping_agent" - slmaster.layer = FLY_LAYER \ No newline at end of file + slmaster.layer = FLY_LAYER + slmaster.mouse_opacity = 0 \ No newline at end of file From 36f3e8b52b54071fb16981ca3f94019c18059c1d Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 10 Jul 2015 20:21:56 -0400 Subject: [PATCH 05/32] Explosion Sound and Performance Tweaks --- code/game/objects/explosion.dm | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index fd861b1e99f..9de5dec30dd 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -73,10 +73,12 @@ far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5) - - //Pause the lighting updates for a bit - var/datum/controller/process/lighting = processScheduler.getProcess("lighting") - lighting.disable() + var/close = range(world.view+round(devastation_range,1), epicenter) + // to all distanced mobs play a different sound + for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close)) + // check if the mob can hear + if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space)) + M << 'sound/effects/explosionfar.ogg' if(heavy_impact_range > 1) var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() @@ -135,7 +137,7 @@ var/throw_range = round((throw_dist + 1) * throw_mult) // Roughly 50% to 100% of throw_dist if(throw_range > 0) var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range) - I.throw_at(throw_at, throw_range, 2, no_spin = 1)//Throw it at 2 speed, this is purely visual anyway. + I.throw_at(throw_at, throw_range, 2, no_spin = 1) //Throw it at 2 speed, this is purely visual anyway; don't spin the thrown items, it's very costly. var/took = (world.timeofday-start)/10 //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare @@ -147,10 +149,6 @@ if(Array) Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range) - sleep(8) - - lighting.enable() - return 1 From 059b405ac8567b98d0bc581708f969c261065f3e Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 10 Jul 2015 20:20:54 -0700 Subject: [PATCH 06/32] 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 07/32] 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 08/32] 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 09/32] 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 10/32] 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 11/32] 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 12/32] 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 13/32] 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 14/32] 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 2c677779d02d195886c2ae82d7956f8843c53196 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 12 Jul 2015 07:58:33 -0400 Subject: [PATCH 15/32] Adds cult glows to constructs taken from VG will put in mob.dmi when i am SURE its not gonna conflict on me --- .../mob/living/simple_animal/constructs.dm | 13 +++++++++++++ icons/mob/cultglows.dmi | Bin 0 -> 5954 bytes 2 files changed, 13 insertions(+) create mode 100644 icons/mob/cultglows.dmi diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 9b579c4dadb..3a287de0d13 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -33,6 +33,7 @@ real_name = name for(var/spell in construct_spells) AddSpell(new spell(src)) + updateicon() /mob/living/simple_animal/construct/Die() ..() @@ -326,6 +327,18 @@ /mob/living/simple_animal/construct/harvester/Process_Spacemove(var/check_drift = 0) return 1 + +////////////////Glow//////////////////// +/mob/living/simple_animal/construct/proc/updateicon() + overlays = 0 + var/overlay_layer = LIGHTING_LAYER + 1 + if(layer != MOB_LAYER) + overlay_layer=TURF_LAYER+0.2 + + overlays += image('icons/mob/cultglows.dmi',"glow-[icon_state]",overlay_layer) + + + //set_light(1,2,"red") ////////////////Powers////////////////// diff --git a/icons/mob/cultglows.dmi b/icons/mob/cultglows.dmi new file mode 100644 index 0000000000000000000000000000000000000000..09455d193a906ad79ec24c55a9638138686c6fd0 GIT binary patch literal 5954 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 Bn0^2N literal 0 HcmV?d00001 From d8adcca1cfe9ebfb1f2c528ffcb45bd8aae13d94 Mon Sep 17 00:00:00 2001 From: DZD Date: Sun, 12 Jul 2015 12:27:45 -0400 Subject: [PATCH 16/32] 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 17/32] 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 18/32] 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 19/32] 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 5a0db0e3ee62afb37d2db8b6430a2446af4fa735 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 13 Jul 2015 04:32:58 -0400 Subject: [PATCH 20/32] More Explosion Optimizaitons --- code/__HELPERS/game.dm | 5 +++++ code/game/objects/explosion.dm | 16 +++++----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 58f0cf96daa..ff2ac44ffe2 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -45,6 +45,11 @@ return heard +//We used to use linear regression to approximate the answer, but Mloc realized this was actually faster. +//And lo and behold, it is, and it's more accurate to boot. +/proc/cheap_hypotenuse(Ax,Ay,Bx,By) + return sqrt(abs(Ax - Bx)**2 + abs(Ay - By)**2) //A squared + B squared = C squared + /proc/circlerange(center=usr,radius=3) var/turf/centerturf = get_turf(center) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 9de5dec30dd..71ce05beffc 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,11 +1,5 @@ //TODO: Flash range does nothing currently -//A very crude linear approximatiaon of pythagoras theorem. -/proc/cheap_pythag(var/dx, var/dy) - dx = abs(dx); dy = abs(dy); - if(dx>=dy) return dx + (0.5*dy) //The longest side add half the shortest side approximates the hypotenuse - else return dy + (0.5*dx) - /proc/trange(var/Dist=0,var/turf/Center=null)//alternative to range (ONLY processes turfs and thus less intensive) if(Center==null) return @@ -91,7 +85,7 @@ for(var/turf/T in trange(max_range, epicenter)) - var/dist = cheap_pythag(T.x - x0,T.y - y0) + var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) if(config.reactionary_explosions) var/turf/Trajectory = T @@ -105,7 +99,7 @@ dist += D.explosion_block var/flame_dist = 0 - var/throw_dist = max_range - dist +// var/throw_dist = max_range - dist if(dist < flame_range) flame_dist = 1 @@ -127,7 +121,7 @@ T.ex_act(dist) //--- THROW ITEMS AROUND --- - +/* if(throw_dist > 0) var/throw_dir = get_dir(epicenter,T) for(var/obj/item/I in T) @@ -138,7 +132,7 @@ if(throw_range > 0) var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range) I.throw_at(throw_at, throw_range, 2, no_spin = 1) //Throw it at 2 speed, this is purely visual anyway; don't spin the thrown items, it's very costly. - +*/ var/took = (world.timeofday-start)/10 //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare if(Debug2) world.log << "## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds." @@ -197,7 +191,7 @@ var/list/wipe_colours = list() for(var/turf/T in trange(max_range, epicenter)) wipe_colours += T - var/dist = cheap_pythag(T.x - x0, T.y - y0) + var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) if(newmode == "Yes") var/turf/TT = T From 5d342baffbd6d4288a0d432910293b05eeeb7336 Mon Sep 17 00:00:00 2001 From: Krausus Date: Mon, 13 Jul 2015 07:31:48 -0400 Subject: [PATCH 21/32] 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) From 6cbdad58cf646dade5af5b967243fdd253115ee7 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 13 Jul 2015 20:54:10 -0400 Subject: [PATCH 22/32] Sun Controller Scheduler Integration --- code/controllers/Processes/sun.dm | 50 +++++++++++++++++++++++-- code/datums/sun.dm | 61 ------------------------------- code/modules/mob/mob.dm | 4 +- code/modules/power/solar.dm | 8 ++-- paradise.dme | 1 - 5 files changed, 52 insertions(+), 72 deletions(-) delete mode 100644 code/datums/sun.dm diff --git a/code/controllers/Processes/sun.dm b/code/controllers/Processes/sun.dm index f09806cef53..93e626af3bb 100644 --- a/code/controllers/Processes/sun.dm +++ b/code/controllers/Processes/sun.dm @@ -1,7 +1,51 @@ +var/global/datum/controller/process/sun/sun + +/datum/controller/process/sun + var/angle + var/dx + var/dy + var/rate + var/list/solars = list() // for debugging purposes, references solars list at the constructor + /datum/controller/process/sun/setup() name = "sun" - schedule_interval = 20 // every second - sun = new + schedule_interval = 600 // every 60 seconds + sun = src + + angle = rand (0,360) // the station position to the sun is randomised at round start + rate = rand(50,200)/100 // 50% - 200% of standard rotation + if(prob(50)) // same chance to rotate clockwise than counter-clockwise + rate = -rate /datum/controller/process/sun/doWork() - sun.calc_position() + calc_position() + update_solar_machinery() + + +// calculate the sun's position given the time of day +// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute. +// a full rotation thus take a game hour in that case +/datum/controller/process/sun/proc/calc_position() + angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate + + // now calculate and cache the (dx,dy) increments for line drawing + var/s = sin(angle) + var/c = cos(angle) + + // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)" + // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions + + if(abs(s) < abs(c)) + dx = s / abs(c) + dy = c / abs(c) + else + dx = s / abs(s) + dy = c / abs(s) + +//now tell the solar control computers to update their status and linked devices +/datum/controller/process/sun/proc/update_solar_machinery() + for(var/obj/machinery/power/solar_control/SC in solars) + if(!SC.powernet) + solars.Remove(SC) + continue + SC.update() diff --git a/code/datums/sun.dm b/code/datums/sun.dm deleted file mode 100644 index eafbcd1ee0c..00000000000 --- a/code/datums/sun.dm +++ /dev/null @@ -1,61 +0,0 @@ -#define SOLAR_UPDATE_TIME 600 //duration between two updates of the whole sun/solars positions - -var/global/datum/sun/sun - -/datum/sun - var/angle - var/dx - var/dy - var/rate - var/list/solars // for debugging purposes, references solars_list at the constructor - var/solar_next_update // last time the sun position was checked and adjusted - -/datum/sun/New() - - solars = solars_list - rate = rand(50,200)/100 // 50% - 200% of standard rotation - if(prob(50)) // same chance to rotate clockwise than counter-clockwise - rate = -rate - solar_next_update = world.time // init the timer - angle = rand (0,360) // the station position to the sun is randomised at round start - -/* HANDLED IN PROCESS SCHEDULER -/hook/startup/proc/createSun() - sun = new /datum/sun() - return 1 -*/ -// calculate the sun's position given the time of day -// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute. -// a full rotation thus take a game hour in that case -/datum/sun/proc/calc_position() - - if(world.time < solar_next_update) //if less than 60 game secondes have passed, do nothing - return; - - angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate - - solar_next_update += SOLAR_UPDATE_TIME // since we updated the angle, set the proper time for the next loop - - // now calculate and cache the (dx,dy) increments for line drawing - - var/s = sin(angle) - var/c = cos(angle) - - // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)" - // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions - - if( abs(s) < abs(c)) - - dx = s / abs(c) - dy = c / abs(c) - - else - dx = s/abs(s) - dy = c / abs(s) - - //now tell the solar control computers to update their status and linked devices - for(var/obj/machinery/power/solar_control/SC in solars_list) - if(!SC.powernet) - solars_list.Remove(SC) - continue - SC.update() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5002f258cac..f8eeff8c5f1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -978,8 +978,8 @@ var/list/slot_equipment_priority = list( \ process = processScheduler.getProcess("garbage") stat(null, "GAR\t - #[process.getTicks()]\t - [process.getLastRunTime()]") - //process = processScheduler.getProcess("sun") - //stat(null, "SUN\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + process = processScheduler.getProcess("sun") + stat(null, "SUN([sun.solars.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") //process = processScheduler.getProcess("garbage") //stat(null, "GAR\t - #[process.getTicks()]\t - [process.getLastRunTime()]") diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 93c1a961073..43f0911d41c 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -1,8 +1,6 @@ #define SOLAR_MAX_DIST 40 #define SOLARGENRATE 1500 -var/list/solars_list = list() - /obj/machinery/power/solar name = "solar panel" desc = "A solar electrical generator." @@ -308,12 +306,12 @@ var/list/solars_list = list() /obj/machinery/power/solar_control/disconnect_from_network() ..() - solars_list.Remove(src) + sun.solars.Remove(src) /obj/machinery/power/solar_control/connect_to_network() var/to_return = ..() - if(powernet) //if connected and not already in solar_list... - solars_list |= src //... add it + if(powernet) //if connected and not already in solar list... + sun.solars |= src return to_return //search for unconnected panels and trackers in the computer powernet and connect them diff --git a/paradise.dme b/paradise.dme index e2b6c726137..e4f7845b468 100644 --- a/paradise.dme +++ b/paradise.dme @@ -184,7 +184,6 @@ #include "code\datums\periodic_news.dm" #include "code\datums\recipe.dm" #include "code\datums\spell.dm" -#include "code\datums\sun.dm" #include "code\datums\supplypacks.dm" #include "code\datums\uplink_item.dm" #include "code\datums\helper_datums\construction_datum.dm" From 822dc6bac12facb8702075540fbfdf518aa1b1fb Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 14 Jul 2015 00:23:58 -0400 Subject: [PATCH 23/32] solar tweaks --- code/modules/power/solar.dm | 59 ++++++++++++++++++------------------ icons/obj/computer.dmi | Bin 34032 -> 33807 bytes 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 43f0911d41c..3eb5b0dc8e3 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -3,7 +3,7 @@ /obj/machinery/power/solar name = "solar panel" - desc = "A solar electrical generator." + desc = "A solar panel. Generates electricity when in contact with sunlight." icon = 'icons/obj/power.dmi' icon_state = "sp_base" anchored = 1 @@ -59,14 +59,14 @@ if(istype(W, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] begins to take the glass off the solar panel.") + user.visible_message("[user] begins to take the glass off the solar panel.", "You begin to take the glass off the solar panel...") if(do_after(user, 50)) var/obj/item/solar_assembly/S = locate() in src if(S) S.loc = src.loc S.give_glass() playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] takes the glass off the solar panel.") + user.visible_message("[user] takes the glass off the solar panel.", "You take the glass off the solar panel.") qdel(src) return else if (W) @@ -106,8 +106,6 @@ //calculates the fraction of the sunlight that the panel recieves /obj/machinery/power/solar/proc/update_solar_exposure() - if(!sun) - return if(obscured) sunfrac = 0 return @@ -125,7 +123,7 @@ /obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY if(stat & BROKEN) return - if(!sun || !control) //if there's no sun or the panel is not linked to a solar control computer, no need to proceed + if(!control) //if there's no sun or the panel is not linked to a solar control computer, no need to proceed return if(powernet) @@ -176,10 +174,12 @@ var/ax = x // start at the solar panel var/ay = y var/turf/T = null + var/dx = sun.dx + var/dy = sun.dy for(var/i = 1 to 20) // 20 steps is enough - ax += sun.dx // do step - ay += sun.dy + ax += dx // do step + ay += dy T = locate( round(ax,0.5),round(ay,0.5),z) @@ -226,13 +226,13 @@ if(!anchored && isturf(loc)) if(istype(W, /obj/item/weapon/wrench)) anchored = 1 - user.visible_message("[user] wrenches the solar assembly into place.") + user.visible_message("[user] wrenches the solar assembly into place.", "You wrench the solar assembly into place.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 else if(istype(W, /obj/item/weapon/wrench)) anchored = 0 - user.visible_message("[user] unwrenches the solar assembly from it's place.") + user.visible_message("[user] unwrenches the solar assembly from its place.", "You unwrench the solar assembly from its place.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 @@ -241,7 +241,7 @@ if(S.use(2)) glass_type = W.type playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] places the glass on the solar assembly.") + user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.") if(tracker) new /obj/machinery/power/tracker(get_turf(src), src) else @@ -253,16 +253,17 @@ if(!tracker) if(istype(W, /obj/item/weapon/tracker_electronics)) + if(!user.drop_item()) + return tracker = 1 - user.drop_item() qdel(W) - user.visible_message("[user] inserts the electronics into the solar assembly.") + user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 else if(istype(W, /obj/item/weapon/crowbar)) new /obj/item/weapon/tracker_electronics(src.loc) tracker = 0 - user.visible_message("[user] takes out the electronics from the solar assembly.") + user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") return 1 ..() @@ -274,11 +275,13 @@ name = "solar panel control" desc = "A controller for solar panel arrays." icon = 'icons/obj/computer.dmi' - icon_state = "solar" + icon_state = "computer" anchored = 1 density = 1 use_power = 1 idle_power_usage = 250 + var/icon_screen = "solar" + var/icon_keyboard = "power_key" var/id = 0 var/cdir = 0 var/targetdir = 0 // target angle in manual tracking (since it updates every game minute) @@ -286,7 +289,7 @@ var/lastgen = 0 var/track = 0 // 0= off 1=timed 2=auto (tracker) var/trackrate = 600 // 300-900 seconds - var/nexttime = 0 // time for a panel to rotate of 1� in manual tracking + var/nexttime = 0 // time for a panel to rotate of 1° in manual tracking var/obj/machinery/power/tracker/connected_tracker = null var/list/connected_panels = list() @@ -311,7 +314,7 @@ /obj/machinery/power/solar_control/connect_to_network() var/to_return = ..() if(powernet) //if connected and not already in solar list... - sun.solars |= src + sun.solars |= src //... add it return to_return //search for unconnected panels and trackers in the computer powernet and connect them @@ -351,19 +354,17 @@ set_panels(cdir) /obj/machinery/power/solar_control/update_icon() - if(stat & BROKEN) - icon_state = "broken" - overlays.Cut() - return - if(stat & NOPOWER) - icon_state = "c_unpowered" - overlays.Cut() - return - icon_state = "solar" overlays.Cut() + if(stat & NOPOWER) + overlays += "[icon_keyboard]_off" + return + overlays += icon_keyboard + if(stat & BROKEN) + overlays += "[icon_state]_broken" + else + overlays += icon_screen if(cdir > -1) overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)) - return /obj/machinery/power/solar_control/attack_hand(mob/user) if(!..()) @@ -437,9 +438,9 @@ connected_tracker.unset_control() if(track==1 && trackrate) //manual tracking and set a rotation speed - if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1�... + if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1°... targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it - nexttime += 36000/abs(trackrate) //reset the counter for the next 1� + nexttime += 36000/abs(trackrate) //reset the counter for the next 1° /obj/machinery/power/solar_control/Topic(href, href_list) if(..()) diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index 4576c253f01f57b80775d0f7d6af1af0d178b060..c70af829c12eb56bb1ae3707092626e69938a98f 100644 GIT binary patch delta 11769 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 From 63769075601f7c81b39df9250bcf318328816faf Mon Sep 17 00:00:00 2001 From: Krausus Date: Tue, 14 Jul 2015 04:08:56 -0400 Subject: [PATCH 24/32] Further fixes to morgues and crematoriums --- code/game/objects/items/bodybag.dm | 12 ++++--- code/game/objects/structures/morgue.dm | 48 ++++++++++++++------------ 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 749a4475af1..3c36ea9dfe8 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -82,12 +82,14 @@ qdel(src) return -/obj/structure/closet/bodybag/update_icon() - if(!opened) - icon_state = icon_closed - else - icon_state = icon_opened +/obj/structure/closet/body_bag/relaymove(mob/user as mob) + if(user.stat) + return + // Make it possible to escape from bodybags in morgues and crematoriums + if(loc && (isturf(loc) || istype(loc, /obj/structure/morgue) || istype(loc, /obj/structure/crematorium))) + if(!open()) + user << "It won't budge!" /obj/item/bodybag/cryobag name = "stasis bag" diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 80792c53f96..e4a403b7750 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -50,21 +50,21 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = loc + A.forceMove(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 = loc + A.forceMove(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 = loc + A.forceMove(loc) ex_act(severity) qdel(src) return @@ -78,7 +78,7 @@ if (connected) for(var/atom/movable/A as mob|obj in connected.loc) if (!( A.anchored )) - A.loc = src + A.forceMove(src) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(connected) connected = null @@ -92,7 +92,7 @@ connected.connected = src icon_state = "morgue0" for(var/atom/movable/A as mob|obj in src) - A.loc = connected.loc + A.forceMove(connected.loc) connected.icon_state = "morguet" connected.dir = dir else @@ -123,14 +123,14 @@ if (user.stat) return connected = new /obj/structure/m_tray( loc ) - step(connected, EAST) + step(connected, dir) connected.layer = OBJ_LAYER - var/turf/T = get_step(src, EAST) + 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 = connected.loc + A.forceMove(connected.loc) connected.icon_state = "morguet" else qdel(connected) @@ -163,7 +163,7 @@ if (connected) for(var/atom/movable/A as mob|obj in loc) if (!( A.anchored )) - A.loc = connected + A.forceMove(connected) connected.connected = null connected.update() add_fingerprint(user) @@ -178,7 +178,7 @@ return if (!ismob(user) || user.stat || user.lying || user.stunned) return - O.loc = loc + O.forceMove(loc) if (user != O) for(var/mob/B in viewers(user, 3)) if ((B.client && !( B.blinded ))) @@ -222,21 +222,21 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.loc = loc + A.forceMove(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 = loc + A.forceMove(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 = loc + A.forceMove(loc) ex_act(severity) qdel(src) return @@ -253,7 +253,7 @@ if ((connected) && (locked == 0)) for(var/atom/movable/A as mob|obj in connected.loc) if (!( A.anchored )) - A.loc = src + A.forceMove(src) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(connected) connected = null @@ -267,7 +267,7 @@ connected.connected = src icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) - A.loc = connected.loc + A.forceMove(connected.loc) connected.icon_state = "cremat" else qdel(connected) @@ -301,7 +301,7 @@ connected.connected = src icon_state = "crema0" for(var/atom/movable/A as mob|obj in src) - A.loc = connected.loc + A.forceMove(connected.loc) connected.icon_state = "cremat" else qdel(connected) @@ -331,13 +331,15 @@ locked = 1 icon_state = "crema_active" - for(var/mob/living/M in contents) + for(var/mob/living/M in search_contents_for(/mob/living)) + if(!M || !isnull(M.gcDestroyed)) + continue if (M.stat!=2) M.emote("scream") 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.attack_log += "\[[time_stamp()]\] Has been cremated by [user.name] ([user.ckey])" + user.attack_log +="\[[time_stamp()]\] Cremated [M.name] ([M.ckey])" + log_attack("\[[time_stamp()]\] [user.name] ([user.ckey]) cremated [M.name] ([M.ckey])") M.death(1) M.ghostize() qdel(M) @@ -378,7 +380,7 @@ if (connected) for(var/atom/movable/A as mob|obj in loc) if (!( A.anchored )) - A.loc = connected + A.forceMove(connected) //Foreach goto(26) connected.connected = null connected.update() @@ -394,7 +396,7 @@ return if (!ismob(user) || user.stat || user.lying || user.stunned) return - O.loc = loc + O.forceMove(loc) if (user != O) for(var/mob/B in viewers(user, 3)) if ((B.client && !( B.blinded ))) @@ -402,7 +404,7 @@ //Foreach goto(99) return -/obj/structure/m_tray/Destroy() +/obj/structure/c_tray/Destroy() if(connected && connected.connected == src) connected.connected = null connected = null From 8e753ac1a623b3bfdd6028e07fc15a8c6fd247bb Mon Sep 17 00:00:00 2001 From: Krausus Date: Tue, 14 Jul 2015 04:18:35 -0400 Subject: [PATCH 25/32] Removes redundant timestamp --- code/game/objects/structures/morgue.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index e4a403b7750..88ba3e7adf3 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -339,7 +339,7 @@ if(istype(user)) M.attack_log += "\[[time_stamp()]\] Has been cremated by [user.name] ([user.ckey])" user.attack_log +="\[[time_stamp()]\] Cremated [M.name] ([M.ckey])" - log_attack("\[[time_stamp()]\] [user.name] ([user.ckey]) cremated [M.name] ([M.ckey])") + log_attack("[user.name] ([user.ckey]) cremated [M.name] ([M.ckey])") M.death(1) M.ghostize() qdel(M) From 545aaf400342bf4390e3641c1b63c2ee754c28ee Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 14 Jul 2015 04:40:56 -0400 Subject: [PATCH 26/32] Adds in Lighting Controller Debugability --- code/controllers/verbs.dm | 5 ++++- code/modules/lighting/lighting_process.dm | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 3e04e3dc8ae..3d70b903fdc 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -45,7 +45,7 @@ return -/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Scheduler")) +/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Lighting","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Scheduler")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -64,6 +64,9 @@ if("Air") debug_variables(air_master) feedback_add_details("admin_verb","DAir") + if("Lighting") + debug_variables(lighting_controller) + feedback_add_details("admin_verb","DLighting") if("Jobs") debug_variables(job_master) feedback_add_details("admin_verb","DJobs") diff --git a/code/modules/lighting/lighting_process.dm b/code/modules/lighting/lighting_process.dm index b8f777473f7..a0242f78b69 100644 --- a/code/modules/lighting/lighting_process.dm +++ b/code/modules/lighting/lighting_process.dm @@ -1,6 +1,9 @@ +var/global/datum/controller/process/lighting/lighting_controller + /datum/controller/process/lighting/setup() name = "lighting" schedule_interval = LIGHTING_INTERVAL + lighting_controller = src create_lighting_overlays() From 6f1a7605a01c5de2cde2abdbaf74960425577d86 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 14 Jul 2015 09:12:23 -0400 Subject: [PATCH 27/32] Bay Light, Sprite move added set light and moved spirtes back into mob.dmi --- .../mob/living/simple_animal/constructs.dm | 5 ++--- icons/mob/cultglows.dmi | Bin 5954 -> 0 bytes icons/mob/mob.dmi | Bin 194476 -> 201040 bytes 3 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 icons/mob/cultglows.dmi diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 3a287de0d13..007288ed7b8 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -335,10 +335,9 @@ if(layer != MOB_LAYER) overlay_layer=TURF_LAYER+0.2 - overlays += image('icons/mob/cultglows.dmi',"glow-[icon_state]",overlay_layer) + overlays += image(icon,"glow-[icon_state]",overlay_layer) + set_light(2, -2, l_color = "#FFFFFF") - - //set_light(1,2,"red") ////////////////Powers////////////////// diff --git a/icons/mob/cultglows.dmi b/icons/mob/cultglows.dmi deleted file mode 100644 index 09455d193a906ad79ec24c55a9638138686c6fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5954 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 Bn0^2N diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index a016cfae83aa8700caa899c6713bfad4cff98f88..dbdb000159298227498e044fe65704a036404e07 100644 GIT binary patch delta 12697 zcmY*=1y~ee+wLqN-5^~`iAc9Jh=8P^64EIpNJ_{o-H3F_f|PU#NbV{E(xCLxNJvNt z>`I;C`~Lr&>s%M?4m0n}yzetl-1q$qm3t(kA4rqvK_x)ZYz(KM6bTVky7*N3;LIR&1ZWQdUi(`VYHYnw{ty@AA+vIHEEovo@c-_ortH! zqZb4#aeKdK&qdd(b=XGbm^>`5v(t$+nPhm8#qDB{-ViT(gP@+LTMp~@m3_GwqlbAE zvVfi8OapYbJDp-v4u@-=#3ODx5ZC1hz7v1s=9Q4G)+O$W_%K6^FMjtE0W1APho>Uw z`r$q|cv??1u0f^vV6jtPtRi5_&*%m-zIiW*!W8gR{8TTy`E?kqw+yq!Ds?D?{i9aG zDm??bmzi$);N0t4Fi+q{u^%L!V7d*fl9z zm&h#NXKc?SWKwgq@2jXzOG>tS+RY~fHltSKjhB2xVM+#t_!n|QbeB3ZuU^Ey(phT( zdzf_QWJ6B+i`RUTOL!#(PZd9E4&*8`YB)$#r)?lWmlE->6Q7ZbQNQZT8HR9in?GwY zeRlV71Ddr_9U(VzWxD@Z7A_IrnSD-=XP(ZnTSfBnLRP=PP3ZPVqs-ArOS*SMjpIm; zS<8`Dp1ZU!NV7j`4@}l%jURe;W{(p@g4OnM4VrqrZgYN>K!1~F4}M9vLY^Q4FSAL* z=lVZSgQlNo*V4U@M&M`4HwZ4bK?@AY62DtE5hP*xJ}X5{{G?FbE6*!TwcjJ>Ui8S6 zF5Lb(za7nIV)I{|oTmOa%nB*zxPI&J3atx)g;qri#q$0qqrReY*78z~@}J(*fcPpI zjR(riz8<0lZ!N-|-ZDoJ=!*tT^yA$}7jU{5bc#kc`5B1O)qi{JM-;{+3zMY0;LbpE zR!$jpn@mlG^zNZW_T0a%=BQ{6HCwrq@R3YA$o$@>;ix0mUDWhn7A2c?D}$AV@t0Kn zG7&5z-toReU+wYz=WYf+%b{K18XIxcxvl)rO>+P768FA~pOLO?><%D|Z*-q(l{||+ z>?Us1OObA1>(=ADe0|CJt&$f>eO#UbXI%51w5*&bqNYC; zWX6_fQyVvmVrIT?Pi|Sa#XeUz8Q8t6BUznVyy8P6zv9X5NHa^!sphm|ot)Chrxl}Y zSogbClFOw21@Srw&cT8roWz3E5e^f6orHNaynM@1*bDSqCkIh`^rs7p9f987-XH7g zUU?2>OSFtU!dp6cUD=z+dPWSt1?0VZ_YSvOqJllP_x7=v*v}@4-kwmYx!0=*i_Rd% z$5&6EpJ!7%ETjsxb)r1jZ2cX#kq2%xBT0K~M7Cx3+HE_QBbg7&34ltMa+1!AGpYTv zDSS7YZzbOWfCB_HA1FVu*bBT`?K+?UZxTl^!CYbcEO7QYk0Uq5&VYmWU;;r<)28~~ zMR`fE$v)dF+tDWPwByK$0nq2?@ziojBbd}k&a0b?+44i4nRi{BE?x;)p3T0je0~}= z-1@H-mpp2<;Ar7!IKgj$sBKJG=Jg@3{FH?Bl`vax4QNwmOo)s5Zo_WcQCi1#w#=% zu`F)Cdi@BC?fO_WvgmwuWth0V!Pk3K+B4JOhzuAIXkIFOtDqvz)Qw9aS9=ygZ-FWA zw)w*92hPEAh9cYcIs^R#?SD{8hjP&RFGtXC>G1rVP2tr$(b3VVGHLUzGNi;a>kRVu z30Q=wg`1V)UHYi8!9y>WU_L!n*WP~Hy;Bn$cP4WU5ZxDPbe0TY%dG_im_2{2}|G{}*%hl!C>N^cQ zV03&u+)6l_Q$3NPwY7ESS;bAGYBLy+sm*h~sjm1#jx@0zMTJ)o>1AcLgxcAu{OKy$ z^|D#dqSc$op}`-r-<}9lLJEGEH8Bc|crB;EO^DOe)3YUH+1V~h9aD+@tp{eGhQ^qi zn;TyL3U&PbQPj1J*?#`ArMTCjVb}la>y7cr37sswa+-?3R)S?bx@*@6sIIkYy) znYJPFA$=6@&NmuL^^dx0(Jm(pH@^6*dL2=5(TUB4**V()oR=wLDY_Ql{6Q>Y`cSBdk)~$L*PCCWN^I(;xq$QS5nUKCeEH}2 zUx(#Yz{SjBNA-Y8+Qr3%p0bpFe-nEPisL znVp@5445h^8_#c44d$1X5xKd!O+yDD-&!#pC}HFHA19p5m43B?ioMC7%N~qb&NIGu zl9tAAbicQ!XIM{H_fO2j!naJMk#ESOaPh;I`43(Pfws1*3kL_U#>dBV7whe{O4;y# zja;3NY`b@2*ERc6LcPU$IJVOG_2h&`5M zM9>mUO|Fq=T-kP*0B1&(aAS8a%bx3bW|0j z7!nhQVo34d*jv))O|CJr?~fXS!K<^yslRMoxDNo}{{8zaz>V1#jXcyzzI~9uFeRkonJYHtVee-?VlML7B4Wr6As8r+Sqgh4u$$#_uH!OU)MVM|p*)3o^m+cz=WZM2 zdvswlt`DVIbT1^C5(pzyxC8O;mI=;Ks)+=j?Kbmw`mPUVeaK1r-&-B(@4#-u>1T;~2U%GEeC}f`Vm5eYZ%Uw( zMVXQ^uA74p2S8Z~7hNQF+q^((BImB0KP`IG1pgbBjrFneu|@L7)Rdo_mrr}*rn|GY zww}ts=J4|wQHDSsV70roAQe<}I)>F6+SYFD)td|3!D9u+C0xPxrM z3w?9KG(3;{6L;Wir-{e?`);Vkz+$ghD#VvOr1r+9nlww~kVDwwp8A_NHh(H+TzkgH zX?J{OFTE%3o_oAz2jkJX@Sq)_6Aa28ux;pkWnh(WJclb=kl>0V)vD_NP@*A)0u*MEQB6e znFL+7Xvu?&k;+>k&}?^h?y-;)l$4a{TUx#a%gV~0=&kB4`V&xm`m|JM^OU0xS3rOd zxAGZ%!whM<7(ydI1=dF8w8Ea01$P2UNy_hZ8x>QNGAKVG_Kms;Lw354h76UmbYWq|O_JARGP#GIu*@J!UbQXm)$ zevL@oUrR79yCDou-6X}s;e(mEW&-4RII%ui@83tvxC%P6-hM|I8KeNEcgS(M>Crna zwr*EBb#)(lf05M=IjD*=-GGm~H_XI`G%wr@kjGyL;GgIWV#TyZbS;0FDxB4b-MbIy zi5x8Y|9&SBV??H?wWDr+__;hzoPKX#U&}ki%9m+L08E36@s1;tGwUjEx8I6Z;jq?Q*D`Yo z??k!!V)u!V)xL{u{dS9_*w`AS$Ez;lRutEvs?wqKK%&-ljaoZikG^;(!j+cJbDo|U zO7%Cz<~}F2{%Rzr6jEXY)!(uSWG&6M`na5@BqU&#_l2K{OQdmi8q7MS^x;Kyy`#=A z9>gI4bW3T1k(OidEpz%{OhMPOMx2vqmVs9_d?l00KWOr-`9oRR=E3|+KQpI@RV5Ap zIvIK*N*ww>P8@lpsbiF?UZ&ZE(%qjMt=PkTos~t=Gf0>uehbV2naG3|H;XfGr>y$4;ObF=nYqrWAWe39RiI&VJ*ZK(j zgYs;8N4Ve@V6Y+-x;P;}5``MkyL?B5Po(6EHCj4eVi`(7R=s;!~xsJ!X2gP{+Z4tL}TWdvRH-NFTul zk3;h-0vE-J2X&v79fX8q%g&_tBNmIZILucEw%&m|7g=J8qPQns`a+bCxs!gEkt*yR zle2oYNT#>3r76iS$q=3I6{B>y9^!01#I=gSQITC@92Ge#;K6->WBk5b5RPryFnn8a z0L6S{z9sW_w1ovh@iCl*T)i(3CP_MGQgEj9@e<%4 zUaIG~%aBNP0^-xaJZ}LySzfUve~qc0iGv!IWip79i9B^(xcOF&RYo?EjO^YgG7RRO zhMfiLuY;K&j*gWhJRDeeo@B*Dtp1%;XE4Qpia5fcZY{M{%JbdV_4bcsEun)!!qatn zoFZKOi!vfN*)1J{y%Q{npnP~Y>;9L`ti&E~9eobHTOFfAPZg$q^2UDEU3vzKeyDn@ zK#x{kmYZ+GJMhhi7xP5oUTeAAsYR6^61oY1aFsja3P!qPtLm`Dd-;KMB_rc7(*L5rbr8);f;fq(Z3cJSmSEwdumEr4ArmN=!`r zJmIV}KLSC}#rOp4?;BdjpI{np6xbll&@@Bnmv3iW)G;XM#`Ssp%3Unx9-FXZ(2RQ% z;%&`_n3ZT2B_ZCAU~L}5tww{cUhr83{X2GN)oRahvc7&9F;gh_e`T)CNZWe%1>TV> z=g#WgPdYVw6hU{AGO``_-o_GaT(smaDHNISk5wG|`E^j`z181vA)VLW{OyC+-&=Tv z1RBU;QU=%(o7J~H&zV0rCJ{TkZiC$GeG3acfg#7i83Vo)!e28gV4O)Hg8@De@oi&( z&-Wab?-Q^)3tkeAUN9T8Q?@qwx+SD9ySJFNZIRuA;3e8Uta*f5f@@V4&f@ed!w)R3 zqs}(1=ew3N0*T-+0 zy)=bZ%FLNjD`{_eqeLioPyT*U>Equq-%#FHw#FC>)nAbem(`7qg@XJ6?x2-4BeO>Y zU!Ye1y(qh)rIOtE^_qe2lX;yYH^nQnq7^_;&ZPt`xWcv zZO&e06?B7bz7vvc3g>s@QhraHRlmuDz*yz54Lz!IKI_2lG=+@Q)(u6WcD}stF~0pYw@T z*BR5r-FQ|ZQKcKAlyAq^LeJb!;#Ttcxvj|DD<_w6I|OEG^+)v960Cm%0jft2I+)PH99 zAS<+Ea$Kc`aWl1O^OY5CrkJwQ?d=@7Bjz*fGmP!)BQF+)3DI+Hwkx%zlQXy&Abcy9 z`BUylVjG3@(QS{w&I3+(R<{()I{mj!43wFz6<;<7s*L!A;u8?Ohc-jszAIzn;Q$A# z<#95_%mcHpZKW+iXjROn*oYN7H_O$ILms*%RjDU+JN}}!bYs1vpa7WX!8k-t@6r-O z)=9O;aE8_3=1@Fb=T)qaz8V5L^UmKBMXau80o@=eWCm5%M>eSO{hc>2GcRi2sF=I; zOda12n>lzPSH1bYX0iQtDHSMNUh5g_4<2#oJg^i@5n*oI{3#%a)c=@w6il2|ShR6o zVpdaQm>kMhbE*@}?jD{xyqrLRTwFcw%-Uwj)72zqBY3EzBu!7lC8fy2kt+_!^eVn% zY3)75vkzqz!YM8LPN!Q++x2JDLP8D~H3AiiS%|%V-34QW-B?p+!h(s_&npHwfL5?x{0je{N54>d=`C*FLxK5kKWN||Lzjs zje{DRNCbC(FIa?$O+^DG`eJP7l0wxfz5Hw$Z$YZZF^cXObGx}IXYcXXHkU5vE>-9L zSf+w|ryMj#fAl(QMW6g}pS-_mj}!9EjQzy#wfo+FzmS`jo8{&3vNd))qG#Y?*$=A* z=>w()N7uV>o)kX!R~6hY<^@^1)emmx^#sV0PJOL9;0-V(?vP4|qCgT49{<@_T}f;) z8@UC(TRx0KoCY9K7LFVB1+RAfdlu#w1m$Feg(Ls`sUvzk$04PR%AI*Es;I^Fdq>`D z?N^%UXDA-p(CCq}_d@K6J=&uj`5APNxb2pPDB}1L6yKT}ExeowS(qhz!fmQ?q*H(! z@Iv*sOqgZYN4-u7HR1#xM=_?~dEiF^Qbr(z$W$J;sbBlQgF+V83Iyxx9{apDsXmo6 z3<6?RIj~bC2?#QUi_dJQvX+?XPdt=$gm)rfKZ%*0Z_(R2uW0Xn4%!eY>dv6JipACp zi7D3G9wrKD-A{@;SX$lEsfK7_Mox>0Mq5VRc6zB>4(|o`dlK)Huf}652SkKm`V?9| z(q(xvXo!N}(f+8vvKKmECwSCOw2`Sg;(5jt+N$0dt~Ow$aR{9!y!E6+Z&DkXhTr+}(H3?%H?Z?-@xaxKaveV=|8$O8x$7;L}6YYy*t~N#2FvPUn zmpC?g2l_ctw-;+{9uOyv^x{(UL@%aKm7*|C@_MELk7FhDcr!fhr@*23B#WYXt*Hc; z9~PvttdMO!`I@{E3l^m*P`AN5YD{wcd%EY?p;(9nkrP1zsYW?{G;Dy^R6aq_-dm>n zN_T+T%h*#wd7#PNk_pc_vjs+7g0GR8uZ^5}rSz5dMo6|jx>;z5yYrdx+qj^-(aWKn zv_LM;BE#el1UIZxLAN7$<(c{~PPaDh$p-Dko$nc-NUS2$tvv!z>*^vfS8=9+yKs|3 zTpqY>ov|j~e$q$=6A!k2ks@8BcG}gn;bC3X&-KEaM3Mx9FPkBikCT@83-rlCo*{Pt zRA~K2K+&DxhAIXnp+0r^*O~LtVxiTuip~zkz7{StD5T)KxwPfT7XDATk^w#jSvl|$ z`uoYi7}M3eNTF4@`=55!0XErBSI#FG*>w4n^UI2nkLiUH3hN^+L>%w3?$`zu35AyW z{7Izt!(9pt%Y+#|&-4+aCaJm0SeqM=_Lq7eo1RiQIwc=WJ=9bBBZ=(&Pe;MzueD7i zKitK@P7Bv;_fGQ8qwb&P?FW3HDm@aoT}&cNPsn?(rIp@wk~k{xLurJ$YQg!}?c<=? zHRp-@cz@_EYD!aN6{m`TKfCB&UUD|G0d2A{DJfH{jkacY_K~%AvyW*-%TVE6-T(yR zwwg6=@@u&t;r_CQ1Jo!kI87~9qB!~~A9&EU>|r{R1MzHojQFp*F6()Et7<0l>fm)R z^SwRk;9sp5IjsweFwS^oV6GOX%7W5Pw{b}B6|qqq9W!s>zd!2n8;cd*mnJH^br{)*WdZ{8Xnt4h#VCJ+S zaFyuYK%;$W7cYcPymgDxmwVvN?E!53BVntj11jS3k5ZTJ_h+Z0{Vb68JUodd?uVrTPBu;4z=cL)P79d9*1 z5~4h6Gi!p?7#Tr!aDp>%!8HNUh|{%h#zWd{@`QleZJ4f$n|NiHb82_7{$j;eQTp@0 ztTVv4ZDH}?w!2w!FW<3B?E(Rd*+o@i^{HR3-3DvxAH*L5%DLc!I(mw0n*j??;}*Bk zNc-OU-r(9R=i9-4U5WJms~@;8J1Z8qHeXJ^N`BuA?N+alJ zD+yXXm^qQ1b^zYc=PA~`F~Z*rkud-L7;-^yW54#trNJ>?nkb1`CvEnqQjO@La_0g? zQs%(Vo+>OSXzn6on&kNUXMjare;*!#u;5v8qzi1*8er^`2-0mZb|#`cEI>u9m!~+> zp4ci4}-TJ|ToNB(xQ_r|i1AmBjRB-PenVsYHeHs@T zWV}6ekW%aFp1o2iN@~o6EqNmNkZH&Bn~)LqrUgYKSVY;v6KDK))7q@xI+)=QE9WYx zSKT#}x_-kcM9(=t{FzruRj!%-Ky``VzisW0-Tl01^I`mGJYga$|K~=k=%d;VMFll+%r;xgn>b<=ecH~=qh!aWdoi2K->=YP|v72pyM3{g}J=pwHsp+ev^ zHr4)whRBK!XJ?r&tc`&f=V{w<>8&Guw5V!la7#2*E}lYKe8_74vo zJhXk`*2XnN^VM}44Kep+P1aSUVC=Er%t}#LLt!c|zCeX(P^LxIXnlJl$J) z()pLhUSUcup<`F21M!Z1K8Ts+%Yxl=plgnxM4GL+6dPcae zKMln3l)#@^VYVkp=x_E{Xmdkj9Gl%B!p4+~)npFtIX(GKrdg-4kTKq|L!)L*vi`#Z zNjR4mM|2k%IzYt(_kSb+&%%~*!CWPCtm}+pJ2@&$^?usyg_J)4kGiZz;2eb9{`iFL zap9YJDo%lxwsAyn~55 z4nY#Rx{fBKQ6PjLW#7vP3F~Ys8MrpMXM`5hEl#kpuSvn7JBu`!35Eagt!u%5P>H$+ z7>CTbFa{uqzY!Llp63GM6e9dL-Y3(_!Qz1V6USU)5rQcG0mPavs6!Ep zf;b`yy2V-Sk#l(5evamG-#Ii5Ccm!XWDX&hrk3kWtN1v7{ilsmgO3IMAZ;MV0<{ z&=WE{IJC>t&cmbD=2<~iQS0@^zp22XQ-3K#O`b>PT8*QVlg~ur+@BekUthrHmXcHL z5p=?+3E$Vk^p7;^B$?`MH(>3~Uw=QUXbIDj!rpl~;tcC6tX_E`K4(~CqL z9ANy>kJ`L7nhB!fFFb@FOhwY#a7fY~iL$JflMpS*ls^T)g>BaR>z;1+{N(S3_@a(z zmaZfLG_W~)Ne1U8CftQP0xu>ST(4L1QIc3xi3`5L0n@(60|VRJI?O+kL?!%m@Y?AM z33*XAVDjO~9S0!SMOr z-LF#fFOUA5oP>Te>s-4xj!A>KK})2JdW20kd%4Ei#Y8Ko>sVI=-hpaTWA_(b#P#b_Yz4V zjSJ9x_^dpD-T4fuGD0}b8_bG0nI=IrlnzJdshLo%I$8B?=5pEoken&6hg{Mp*yv}L*gkEAsLbPjb9Uj!FjSR*^eTS6Fp~lIu zjy*kq6FZ2w4MjzCcRaXtUkUP=i%$a+#DjX?Nqno!LW!88;N{~0PptYJZ|tOik{6!v zk&15&*ZU#gYPQ=S^=PXq>DLsNNNH%D*Td+GAr-E2V^*&6o^{$52t zb&aUGQMyGSVi|Hl#U=2Q{10@OX=uH7#tlyz^-M7^H(*l z^8p8W5L*ti!Sx#9Ku;ca+K!-J1E~<9TG#$sb zfs{^X8IFdhHv5X;D`PjymI5CrwS0W`BuZ^e3iX$4e?D2<4Z5}VX!$XI+3`OXNF8BX zd1XsT_=^S!(QxEK>oIZu9E~_6giKQ)5%j3*J&!u4gh2dy))7Tsu@BS9tL^-1{~kQn zr=FVGf^8n{f~(72HHQuv^0&;w#8i1eL zjB|B4_>LhT?B1!?WqayeZvaz zceY9-vRK1(^l+O}XL<7?$+qjfyb&&=Cw^tO?_sFkZaaTh9gnw7SdAiwlZNN_(+v& z4|f>v|MA&r$I$i+Og_hE^6UKnVY6=ZUYYii7;87z&(Al9KrM7SyOHZX=1Kah-WVyl zu?c>;F-1?O#BPdLt5KcSu5xF6plM=X=x*R*BAQ&khDw<-oJoer8=6oOpsR!<{l$g` zh1?I2ho1;3O&`RYMTNIQ|D^hQrv9A7Zulm?i{v#rZ38*P}LO zlm9(IXFn4!QOMw7&baA=$uSU$-|dfLv=ri^1ICd@dAzMbF$4>7lndZN(_xKEEH^v8 z)SrP_RmsguGgEgxg|0=1tAPx%eT(qj=X$+HzQK9%P*n^kH54Qm;Qh+~4$2L;L(||R`_-G(3x|~aZ|s+v zS3g_8gM_|3T+oAw2zDOvtFxtueh!NzT#5-Jn7Rvf>H7K7fOJLNI30jDkVenaAG0h= zyKpta=G8KtaqGo>?@e!BV&18y$+L5_B?JsPU>`PBvC#^(u?Fm!_X7qTf-^_i@kc$? zUHFBO>fdF28+|aJ2oitB*k0)EPE_Ubsn&PSh)IZo_Z@EwmTokET*QcsjE`Ct;|@hZz8p8KWR4U+U(8ul*hlv6EDZ*a1x&R2=T>Cdzez zIg>}RPjz{I%`ie_?ciK2Sw5!J5oKz2zH`bUff47eZ2 z1w|xDxfk5nLCOL}PELLw+bxup|8zE^j78wPSo>O>#hRUp;3KHhd%tRn@Z7m15zPKM=tRUwYDAl?b>`scmha4Q_1}xThgXXl`Vs1wVdhQG7FRKsM z_DMLKV{Ecfl@Q8s6iAmkz0cyljqQ%gy(V%#(hI?pHvWbSXT4kALbVp|GVl~o<1yJRczos)gAi3TQarpT zkt59AM$eZbk#%G`f-R)pKD4}eZ(TNn_xu#`jtDC5-<2Lh4QgptYLr(JkY_7Gyae@* zKU}j_pKpfO%&v3J3Z2yt{uJw^61JON$L=(_twxZNt)lbTgL{xu?20~j&Av7I89-7r z<(u>IGGQYrn8t`w>692MyuPA8D{BXhP zk-%^`8KtNjeGUWV$fqj$>k`LgSS;r&QUbx1X-|^6-r7`A(Kbe!ck!7ha}lS~^Yg6m$2dUknXc>6&bfKe3i%$6?NVOCIb z3Lbqk^9H~#97y)vrOuvg@Od-_Px!;>?XHMX2$RvE2=lL01}}fHFgM0rEQ5hYSUKNz zlRMvOjqAU??f+pl5{LLAw+4O?im1}x)_x8cOnvTKmZ3pkvAiiqZ~+GX5f1gCMtw;L%N=tSH< z`T$~6hYHA1Ot+k+mdy5fFh#IzXqn=Sar%xs8Inb%%Q9F-x2&27VqTnk?t~S_fKe{t z-E}FHGX}1Ikqew;7y?IVHLEX#R+o$#eCn0{U*uI9XK*Q(8nhF^KV|2$t^#$nv`nV#u=Z{2#j!|;j~Ns0 zQlxh3gl|u!>73(wss8Pc_%Zs~Kvi}AnsxRsuFVCpT+H2N1|Bqds}~(~LM%KYEXKa`(zD=A;HT(JQ62B`yA7sqh=s5x+I; zsZ_JusXUTH>Z_-ph0^_8grOtXyW6c6xjHJdr?;#X7ILfOq>O69bZhtDiG5|U8(2H` z5_mfKjgtrms2Hc?=EGZg+j_g_y?P3&?FMT0izR>LSZF1!|Gxa_5>qmRX$qOlJ&?F-YS)Q6>-v_|c~K0Ak{mqNrIy-EbaHxF$73we|1P zcrs{^s)k&4$MN+ukxoAMUCY}g#QC;|(^nIle~m9BsUNVVPlncb!WlTQc=G^B9+(fp zN$egsvyJkk8ouPx%Nxo!=nkY-4YuUI+|H2|S9zajf_*Z;M6QFQ{dXXcejM!bYcHYi zUV`quM8N!48;e(wahll;>*luvH=;_~y$$*SpOs-F}UW?V_vJP?AI8xp>H?<%# z%FM%^Ev8G3s%}0-sOa?QQlJ>iwWb=cnwubmaL;TcUTR-uTQk2}PngQb`n=+pDWY%e z3Oe$$zXYFy^Okn%Z+ubwnZGL2ssFK)A%k)C-0trQmYp9by)#f7T$s2_gZ)~vlVhDJ z&IB}<;UF_hT>~LE|mBQf5SS}w47Ad6M77)6*E1zDpQ1v&c?!2SEh*R_4e z*)i_08H11V!QY(pn9P&I`^=#8ZK#l^-+gXeee*C9)d!nvTY4ytzc%+_pqHb6dyAlA z;qlrL-WypF0ZkeDxRJx&DrD#326tByYf`mfGIzSQqun@mSZ77t@P;_fy2@oXtY=92 zD-Nt^&$^D_QxCE{vK$xjfd4{bk#08EI~$vi4Rv+e{sw$VvG${Hgh?YudkS&TQbha> z-QAOyLvuJ6gTK+y(cYp_kpgTBeg|kV<0hoG-#9=W5VCpsW(^DOtd90+P`XDvCo#6EzFmQ37o!3C4IOgcqP4WA`($^6Ct*~^d z_uXL-M_@J4(9U+U>=?gze#nl>2HtkA<9Gi0v|-T!p3+YE8VjbKhK)ym+FIOo#GUeQ z|NdjGliSN!qwhWm>HER11qeGj*fr+)9B?Q~=17XyA_It*CkJJ89kvXYY3 z+gZK~$H~C1j;Lu}u}~Vgt7_}KG#Sqwoth1c^f@`R|3`!woDm)v%mF^vVF7-pae`WV zW4bWj_yNSuOg(ygw$ZU=X!Vig*2&dVPS40{rUe$m3;%Euf64;4(y%7uAg3kkC{x}OaH@ANpD+Z<6 zVImP~eK`r#3vIrhy*_r&q(N>9__?1JL%ZI0Gj*tRGEbgk#ANI?&X&JHjC8XeNcbK9 z)g3J;ZyXu2tlgenPlKq@g>?t;00ETBDWO;JfSE!Y5o#H5F21#V&^SsY!jJI>aA)F` z8q48pFXIG2O0KSV;|2tLe0=OOGc#*uclvrG*vLRZJWHK{6c&)+{98_7<&Dd-ZW}); z!o$OnW1AtuA4dCJCgH(m-rUWC)>Eje83>Oe+)<16R+4meiPKa|5-r8s=vQqMoLBoG8-Eu zSEC_Y8(yLMk2wKQG?_@_elI+-Q6qmnFf`&Sj;Ar@HCw{q)9(yaQ3&40v*HXDiaL=WKCyh_-6z?n$s#&Vl-lZvDVI$CW|b8s*iX8irDH-dE6_jh$@bYbCBxl!ZbYF4@rk~-*z`C_~OoiGT%y>O2N`pyEa zJ>mC=UzC)M4p#`!EbPbl7rMXvoF$`SY;@*!dB^B`U?aAwU0j z?ki|aKbJ2G7`oH=AX~HG)vtZ8r7-S*59)le6>f3_nLJ?+bjJNL$P!FduP2iI?)#A} zg_h+BL$mT@nVM5yA`d{s1Dw8|Bz!>!o7S)uEuwp?t3&6uR_IR_XXhIn9VdyoYGfV+ z>>mP0z_F(UPqI_>x?{)AWXfMzpHurr9cw;eWv12FtEcEMB=1!OI0!`Dwle~K>23!O zi(z9=^Lp@!f{JlUPEKw`DW_=*Ps-4A(l>^li3~&?)(uF4yxL5Aemnm=JWOg0oH_>$ z&Ln3VIs&D*AzoJ6&4Ah;7>t$8&zHK@+UiC|>6T@WqPgw~>XhQbPYTM*hqsuhgLtUv zo-)Kt&=gOctUlG%D2lDF!s7Zk9N%SywT%c*m_lG@RmM8LI{F=L1#13tum{G^{qH=? zjoEhj8UqYlF1yLa>J&|s&pSN2l_#wcS|aL zJsjGN^>aQu()_=W^Sn+8AhX=8IGww1mwl(b;2iX-d|OE-*oR-f9=os>gbf*{LS0ngBD6I~}O>>g~=XPI-EJVzRVj(jv^25&(UC zgQ&irsUyG~-Yluq0lnTM|B>c(N4fOW7XL};YIme=3;kXP#rlOyz~;JOCigE zD7IQ(`&F=JtDTP(kr+oIW6AiagWhSom3CJ5#0oZq&b9=1wU#dgBnsvDoS@Fi?Cte| zLkPoWpI!tQ`uz^7&(U7mXaSH;AO3aTTW@rx8GXtorY@a65t%FAXS2DpQ@;<}_MW6X z^Qd`iQ-X$mP%ZS+F8DlV?e&0*gqI^ifNZ7?X`Mipy{h6tCvfzh=kk(nmF_9{-QM@Q z&J|6y={B<`TR13h3_;1usr-x_Ul>tXFnvw0`OBXQsfIj@2Au$jJA5Ed;Ytqmi!{KX z+iD{r1m$T_{j3|LW`C$*(rkmLDAhQwc(ddMoSMGv*3-=H^5N0sd@e%Ef&e+mWq#;= z!=!c@*0D@UYW}xJ>K|OIu!R1D^$BoFbSRFTUD?sG^3HX}A&OY)$%cksQ{O+#oc5W@ zs5U8Oclf_0u)>s&q0GT9DAd|Fy{OQ9?fvgrM)dp?^v9q*<5}dw2$YVQ;wJ$Jt*wnd=2s zW(xVLZOzG(gm{$-!b2eIxD$9Hh~jDdh$W`?svyR>DlXAHAO)Zi>RK zK3`x_5rnQ;A?6-%$hlO`d|Js0Ll>LI_>6Z1?Vr#J(nHty0r+)gCX#798+}*|B!FZb z$Whvb0vcNoV(TdDR#k({vyRG2w2%gKUw?mB!{|GQ=HTvSq<}`@@YhW&wpNgt=5gF- zM)yedeD7+FxEE{(0CMhndRLe7J3@+HVEOwK&A*waD8G%f_n&OfgJgKCx~BwMEB@UR zf6<{s4<&_`cvAe1Gshh}dF2V9v)JNUX-$J^cE_&xrl(Z_@2G3j)1QoDZpq)FCT}&Z zOruYKd5IB39tiri-&9Ce?tc4hPo)x*UUZZCq3LBXKk9L=B9@RoKWEpZC=&GaF<&f_ zhq{oBb16ddaU8g9YO5D)vg4#uX-f42jiP#cCa|~0&~nbAB#*>_Y~%pe(uIH12hmx+ zzeeU=0sPIzQr;6ydQV=N#r69jZkz2I^3Lbque=rZg>qd{=DA?lptREeiZ&R>Hq!Vr zNI#_1f@9ADa}1>|?W)dAsh<>^I48|3t1i5WnyD_3D!A7ZNu|C{eU1ZOOiQlNA}Yjb zjiMVaAfC))sZm7>qdV9x#@T zLhfXpw&-#b%DyB0i#H@G*765QGYwP7Rlx|JcY>W~5MhfUC!783U_Ix4bQ z<-jHvouB+-OEC9>K6h+lL1Epmr*}L`F?Un7Ni3(P^c~1Qfd<-U$Cq`R{Y-MI> z$HQ=rvTVoOzmUpUqTOyN3s}e5dPAs#kg9yKcz)`jleFo*86W4%iLtO{Q~6`DV2Ivw z&zU;LaESrlVQ^iL9^Tio1xNDw8!}{)|&6Nn0p_RQGdqW^DSnFCqrBR-w3BHif1~cueLYw@ba|qbk9C!R z+jm|_rL}e}Ssoaky_p57^|0!TH_?@jjI1Yvu{slfJY8tFgSEF!-M?W=F}Yi2Rcd@; zmL~o@7(mM~irvbhiX|MpeK=>-=g`6EfZF`IV_ z^C}w|St}tqLU>S2x^JRp0gpzUU^h2A;74z#2u;l%Oc6LXBU`#;VMH56_^7Rf{8wK> zMWIfTDJjY?q`aD>qGCX`w!O)$m6x{t{EQNQX4}CUC|P6fcH*V)O{}yQP=`L0gw;L$ z&uYO##gXq=yAV~yvcWvmX|@KJXC)(e1I~>yLaTFlD0k*o3mq}oY zQZa=v33i@nj%f1&>Fb+U%@OO1?F?$4aq3BZy*-$*b$c+iONY2aUnjqO^i~6z?+;S~GF~_oFad!OkY>V`St*ItAa*gTnInD-m zBUlXPP_VpIA0-;D!z6^LClk1shrq+PNW)2TVJr*6QZaRZ1(2ceAnvcChc+*jU9zJV zxcg0Mx7nzASBEe5>1>8fd#IY`hreDcb4iVKS+_C(*SLoc_Uvu1;UWnby8fQE%=K8; zXuJ()t98=-lXNRGvw(O`CEs;?`ce$1#){yn zG<)ZfKoPs);ahXg8vf~Hf{^ffJ@6;>^bH)_xjUN7H3vm)I?_7?A%-xGi6xFAKiKR( zt@I&ufVWQZ{{6)b?cc^gGh`1gEwQYmXPVzX84UQ+?vhoMaGer&4!-Q?I;eug{Fk@MTwI)DXk-Q)XNcK}kEaLqK8BsypSN|zznpHoD@H%E}J-T-0Kb((c++s_! z)jk4GX;OewvO$1W9Ju`&7xB!kh~)WKX+zE1hs&juLucwJpRWGfp7UexyrFbxB~rzH zF&>vf^BVCe|4lMujk!u?XE89=|A-Rg@_v2av{%Z1tk%^vA+zy1!Qx~4n-2@ST$yR- zBaiW0!?j$0^tI#j%yt*ERc>l!s*N;#F3PLi!wfdu2K-m(p|T1xF7H=gvZj}=gZ#cL zG?L$s@BY*M={E!P>Hl`k@Qu`Q!OjE_TZ21)odTqVD5z0WM<9t-hRzMJ@(({<=EUdk zK0rx(jO2&WSPkH1lQ#fL^R;Bj2hT^%3~~c>pZq(xY1Sd9K=+?sjVirJxTi<1O#@V2 zsX8_drCY2Cbv_LXtL_bvJ;FNZkCIvTsp-|7DcXs*D+e%FB>Ke%B&PgNX#4WM+*h)E zu0w7|Sq3H9KoW!en@}b=eUv1XIS=zqN#7uzlxH6mJOb1?R}!GS8^YwB#nY z?DAFHB>Kx`y*Rt1kXmoS-+(1fQmR?eMLk07J)+@1Mi-JzS~)!rVP5h>=^$}FX@$NJ zR$Je&Zao=$Gy;$8UglvjXS_`l-Icb|@*0Qj{9j*@H?5pWV~HjCb;dA@N(^02Q~C7U zN=#`B)cy_*C;rSVT8Re{zD!a{7ak^Yqa;iV*%Q%zDQk5g*KYvXw_~X&S&_eaBgq5Ux0vZo*B^o)7E<5o+ z>C=25ArE=)L+LMw@2n9QqAir)rv@FtfaIJDeAqYBRXL&Jq=NmrRaEAX{tYafs=WrZ zaYgqpd$jOU2c>~9E>T(Ez)cB?TF59kzi^^v*Q!fN^vh@_E#z<-T@Nz? Date: Wed, 15 Jul 2015 03:36:35 -0400 Subject: [PATCH 28/32] Merging Powernets into Machines --- code/controllers/Processes/machinery.dm | 15 +++++-- code/controllers/Processes/power_machinery.dm | 40 ------------------- code/controllers/Processes/powernet.dm | 12 ------ code/modules/mob/mob.dm | 3 -- paradise.dme | 1 - 5 files changed, 12 insertions(+), 59 deletions(-) delete mode 100644 code/controllers/Processes/power_machinery.dm delete mode 100644 code/controllers/Processes/powernet.dm diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index 940530ab713..2d8986ff2ae 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -3,10 +3,10 @@ schedule_interval = 20 // every 2 seconds /datum/controller/process/machinery/doWork() - //#ifdef PROFILE_MACHINES - //machine_profiling.len = 0 - //#endif + process_power() + process_machines() +/datum/controller/process/machinery/proc/process_machines() for(var/obj/machinery/M in machines) if(M && isnull(M.gcDestroyed)) #ifdef PROFILE_MACHINES @@ -33,3 +33,12 @@ machines -= M scheck() + +/datum/controller/process/machinery/proc/process_power() + for(var/datum/powernet/powerNetwork in powernets) + if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed)) + powerNetwork.reset() + scheck() + continue + else + powernets -= powerNetwork diff --git a/code/controllers/Processes/power_machinery.dm b/code/controllers/Processes/power_machinery.dm deleted file mode 100644 index c7710c8e5bd..00000000000 --- a/code/controllers/Processes/power_machinery.dm +++ /dev/null @@ -1,40 +0,0 @@ -var/global/list/power_machinery_profiling = list() - -/datum/controller/process/power_machinery - var/tmp/datum/updateQueue/updateQueueInstance - -/datum/controller/process/power_machinery/setup() - name = "pow_machine" - schedule_interval = 20 // every 2 seconds - -/datum/controller/process/power_machinery/doWork() - for(var/obj/machinery/M in power_machines) - if(istype(M) && isnull(M.gcDestroyed)) - #ifdef PROFILE_MACHINES - var/time_start = world.timeofday - #endif - - if(M.process() == PROCESS_KILL) - M.inMachineList = 0 - power_machines -= M - continue - - if(M && M.use_power) - M.auto_use_power() - if(istype(M)) - #ifdef PROFILE_MACHINES - var/time_end = world.timeofday - - if(!(M.type in power_machinery_profiling)) - power_machinery_profiling[M.type] = 0 - - power_machinery_profiling[M.type] += (time_end - time_start) - #endif - else - power_machines -= M - else - if(istype(M)) - M.inMachineList = 0 - power_machines -= M - - scheck() diff --git a/code/controllers/Processes/powernet.dm b/code/controllers/Processes/powernet.dm deleted file mode 100644 index 185dbcf0606..00000000000 --- a/code/controllers/Processes/powernet.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/controller/process/powernet/setup() - name = "powernet" - schedule_interval = 20 // every 2 seconds - -/datum/controller/process/powernet/doWork() - for(var/datum/powernet/powerNetwork in powernets) - if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed)) - powerNetwork.reset() - scheck() - continue - else - powernets -= powerNetwork diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f8eeff8c5f1..5042ae90996 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -966,9 +966,6 @@ var/list/slot_equipment_priority = list( \ process = processScheduler.getProcess("pipenet") stat(null, "PIP([pipe_networks.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") - process = processScheduler.getProcess("powernet") - stat(null, "POW([powernets.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") - process = processScheduler.getProcess("nanoui") stat(null, "NAN([nanomanager.processing_uis.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") diff --git a/paradise.dme b/paradise.dme index e4f7845b468..0ef0ebfd4d9 100644 --- a/paradise.dme +++ b/paradise.dme @@ -157,7 +157,6 @@ #include "code\controllers\Processes\nanoui.dm" #include "code\controllers\Processes\obj.dm" #include "code\controllers\Processes\pipenet.dm" -#include "code\controllers\Processes\powernet.dm" #include "code\controllers\Processes\shuttle.dm" #include "code\controllers\Processes\sun.dm" #include "code\controllers\Processes\supply.dm" From 409fefa4b300a5fa722226695b8417cd1a1d280b Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 15 Jul 2015 07:00:46 -0400 Subject: [PATCH 29/32] Power Computer and Computer Fixes --- .../MetaStation/MetaStation.v41A.II.dmm | 4 +- _maps/map_files/MetaStation/z4.dmm | 4 +- _maps/map_files/cyberiad/cyberiad.dmm | 26 ++--- _maps/map_files/cyberiad/z3.dmm | 4 +- _maps/map_files/cyberiad/z6.dmm | 4 +- code/game/machinery/atmo_control.dm | 4 +- code/game/machinery/computer/power.dm | 98 +++++------------- code/game/objects/items/devices/PDA/cart.dm | 12 +-- icons/obj/computer.dmi | Bin 33807 -> 33581 bytes 9 files changed, 52 insertions(+), 104 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index d92376912a4..9312306dca5 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -2226,7 +2226,7 @@ "aQP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard) "aQQ" = (/obj/machinery/computer/atmos_alert,/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) "aQR" = (/obj/machinery/computer/station_alert,/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) -"aQS" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/monitor{name = "Engineering Power Monitoring Console"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Engineering - Power Monitoring"; dir = 2; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) +"aQS" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/computer/monitor{name = "Engineering Power Monitoring Console"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Engineering - Power Monitoring"; dir = 2; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering) "aQT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor/preopen{id_tag = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/lawoffice) "aQU" = (/obj/machinery/vending/engivend,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering) "aQV" = (/obj/machinery/vending/tool,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering) @@ -3151,7 +3151,7 @@ "biE" = (/obj/machinery/computer/crew,/turf/simulated/floor{dir = 1; icon_state = "darkgreen"},/area/bridge) "biF" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/folder/yellow{pixel_y = 4},/obj/machinery/camera{c_tag = "Bridge - Central"; dir = 2; network = list("SS13")},/obj/structure/table/glass,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge) "biG" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge) -"biH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/power/monitor{name = "Bridge Power Monitoring Console"},/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge) +"biH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/monitor{name = "Bridge Power Monitoring Console"},/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge) "biI" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge) "biJ" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -1; pixel_y = 4},/obj/structure/table/glass,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge) "biK" = (/obj/machinery/computer/security,/turf/simulated/floor{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"; temperature = 273.15},/area/bridge) diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm index e9ad9ae4182..65d167d927d 100644 --- a/_maps/map_files/MetaStation/z4.dmm +++ b/_maps/map_files/MetaStation/z4.dmm @@ -105,8 +105,8 @@ "ca" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/simulated/floor/plating,/area/derelict/solar_control) "cb" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor,/area/derelict/bridge/ai_upload) "cc" = (/obj/structure/computerframe,/turf/simulated/floor,/area/derelict/bridge/ai_upload) +"cd" = (/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/derelict/solar_control) "ce" = (/turf/simulated/wall/r_wall,/area/space) -"cf" = (/obj/machinery/power/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/derelict/solar_control) "cg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor,/area/derelict/solar_control) "ch" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/derelict/solar_control) "ci" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/derelict/solar_control) @@ -839,7 +839,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbDbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbKbHbLbMbNbObyababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbPbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbRbSbTbUbUbVbybyabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbWbDbDbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbXbYbZbFbFbFbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDcbbDccbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDhchchchchchccehchchchchchccehchchchchchcbXcfcgchchbZbFcicjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDcbbDccbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDhchchchchchccehchchchchchccehchchchchchcbXcdcgchchbZbFcicjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbWbWckcbbWclcmbDbDbDcmbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbXbybybybycnbybycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbDbDbDbDbWbDbWbWbWbDbWbWbWbDbDbDbDbDbDbDcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbycqbSbFbycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbWbDbWbDbWbDbWbDbWbDbDbDcmbDcmbDbDbDbDbDcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbybycsbybyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index a6748ac7718..df2616d1593 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -1943,7 +1943,7 @@ "aLs" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/electrical) "aLt" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/maintenance/electrical) "aLu" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/maintenance/electrical) -"aLv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) +"aLv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aLw" = (/obj/machinery/camera{c_tag = "Fore Starboard Solars"; dir = 1; network = list("SS13")},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aLx" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical) "aLy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -2804,7 +2804,7 @@ "bbV" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/box/PDAs{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/ids,/turf/simulated/floor,/area/bridge) "bbW" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor{dir = 10; icon_state = "yellow"},/area/bridge) "bbX" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 0; icon_state = "yellow"},/area/bridge) -"bbY" = (/obj/machinery/power/monitor{name = "Bridge Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/bridge) +"bbY" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/computer/monitor{name = "Backup Power Monitoring Console"},/turf/simulated/floor/plating,/area/maintenance/electrical) "bbZ" = (/obj/machinery/computer/shuttle_control/labor_camp,/turf/simulated/floor{dir = 10; icon_state = "blue"},/area/bridge) "bca" = (/obj/machinery/computer/communications,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "bcb" = (/obj/machinery/computer/shuttle_control/mining{req_access_txt = "48"},/turf/simulated/floor{dir = 6; icon_state = "blue"},/area/bridge) @@ -5228,9 +5228,11 @@ "bWB" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bWC" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/air_sensor{frequency = 1222; id_tag = "burn_sensor"},/turf/simulated/floor/engine,/area/toxins/mixing) "bWD" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/turf/simulated/floor/engine,/area/toxins/mixing) +"bWE" = (/obj/machinery/computer/monitor{name = "Bridge Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/bridge) "bWF" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bWG" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bWH" = (/turf/simulated/floor/airless,/area/toxins/test_area) +"bWI" = (/obj/machinery/computer/monitor,/obj/structure/cable,/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/engine/controlroom) "bWJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bWK" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station) "bWL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_dock_outer"; locked = 1; name = "Mining Dock Airlock"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/quartermaster/miningdock) @@ -5305,6 +5307,7 @@ "bYc" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"; req_access_txt = "0"},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bYd" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bYe" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber North"; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/toxins/test_area) +"bYf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard) "bYg" = (/obj/item/weapon/ore/silver,/obj/item/weapon/ore/silver,/obj/structure/closet/crate,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "mining_dock_pump"},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/quartermaster/miningdock) "bYh" = (/obj/machinery/camera{c_tag = "Mining Dock External"; dir = 8},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/miningdock) "bYi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/wall,/area/quartermaster/miningdock) @@ -5342,9 +5345,11 @@ "bYO" = (/obj/machinery/door_control{id = "acute2"; name = "Acute 2 Shutters Control"; pixel_x = 6; pixel_y = -25},/obj/machinery/door_control{id = "scansep"; name = "Scanning Room Separation Shutters Control"; pixel_x = -6; pixel_y = -25},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bYP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2) "bYQ" = (/obj/machinery/vending/medical,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay2) +"bYR" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/computer/monitor{name = "Grid Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering) "bYS" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) "bYT" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) "bYU" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/folder/white{pixel_y = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/food/drinks/coffee,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/stamp/cmo,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) +"bYV" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/computer/monitor{name = "Engine Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering) "bYW" = (/obj/machinery/photocopier,/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay2) "bYX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2) "bYY" = (/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) @@ -5643,7 +5648,6 @@ "ceX" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/turf/simulated/floor,/area/engine/controlroom) "ceY" = (/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/turf/simulated/floor,/area/engine/controlroom) "ceZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/security/telescreen{desc = "Used for watching the singularity chamber."; dir = 8; layer = 4; name = "Singularity Engine Telescreen"; network = list("Singularity"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/engine/controlroom) -"cfa" = (/obj/machinery/power/monitor,/obj/structure/cable,/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/engine/controlroom) "cfb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/engine/controlroom) "cfc" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfd" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -6189,7 +6193,6 @@ "cql" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/misc_lab) "cqm" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "cqn" = (/obj/machinery/power/apc{dir = 8; name = "Aft Starboard Solar APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/solar/starboard) -"cqo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard) "cqp" = (/obj/machinery/power/smes{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/solar/starboard) "cqr" = (/obj/item/clothing/mask/cigarette,/turf/simulated/floor/plating/airless,/area/toxins/test_area) "cqs" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless,/area/toxins/test_area) @@ -7024,7 +7027,6 @@ "cHY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/aft) "cHZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cIa" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/aft) -"cIb" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/power/monitor{name = "Grid Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering) "cIc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cId" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cIe" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/engine/engineering) @@ -7188,7 +7190,6 @@ "cLK" = (/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cLL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cLM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cLN" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/power/monitor{name = "Engine Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering) "cLO" = (/obj/structure/table,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor,/area/engine/engineering) "cLP" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{amount = 30},/obj/item/device/pipe_painter,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering) "cLQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor,/area/engine/engineering) @@ -7896,7 +7897,6 @@ "daO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "daP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "daU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/electrical) -"daV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/monitor{name = "Backup Power Monitoring Console"},/turf/simulated/floor/plating,/area/maintenance/electrical) "daW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall,/area/maintenance/electrical) "daX" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/electrical) "daY" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; initialize_directions = 11; level = 2},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -8066,7 +8066,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEaAyaDtaDuazEaAyaDvaDuazEaABaDwaABaABaABaABaABayYaABayYcwjcwkayYayYaABaMnaABcwmaabcwmaABaItaIraABaIPcxEaABaHGaCraABaygaAHaAHaAuaAuaAuaAuaAuaAuaAuaAuaAuaCJaCJaCKaDDaDEaISaDGaDHaDIaDJaDKaDLaDLaDLaDLaDMaDLaDNaDOaDPaDLaDLaDQaDQaDRaDSaDTaDUaDVaDWaCWaDXaDYaDYazZaBbaCgaDZaEaaEbaCgaAxaEdaDeaDecxDaGAaBdaFgaFhaFhaGsaAxaQtazKazBazBazBazBazBazKaEmaDnazKaaaaaaaMUaJeaLHaLHaJYdcmaLqaNaaWacZWaAraMUaOMaAraMUcZYaLHaMUcZZaLHaMUdabdaadacaNodadaNodafdaedahdagdajdaidakaIQaIRaIRaacaacaIRaIRaIRaIRaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaEwaExaEwaEyaEwaEzaEwaEAaEBaECaECaECaECaEDaABayYaABcxHcxGcxIayYcyScwgaMnaABaABaABaABaABaABcwgaABayYcxIaDwayYayYaCJcyTcyUaEKaEJaEJaEJaEJaELaEJaEJaEMaENaEKaEOaEPaEPaEPaEPaEPaEPaEPaEQaERaERaERaERaESaETaERaEUaERaEVaESaERaERaERaERaEWaEXaEYaEZaFaaCdaFbaFcaDYaFdaBbaCgaFeaMBaCYaCgaAxaFfaHCaHCaHIaBcaBdaHJaITaITaPhaAxdamaFmazBazBazBazBazBaFnaFoaFpazKaaaaaaaMUaLHaLHaLHaLHaLHaLHdacaNoaNoaNoaNoaNoaNoaNoaEcaLHaLHaLHaLHaHNaLHaLHaHKaLHdaodandaqdapdaraOCaOCaOCdasaIQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaFyaFzaFAaFBaFCaFDaFEaFFaFDaFGaFHaFDaFDaFIaABayYaABcyVayYayYcyWczLaABaPyaKxayYayYayYayYayYayYcwgczNayYaABaRkaRkaAHczOaAHaFPaACaAwaAwaAwaAEaAwaAwaAwaAFaFPaFUaFVaFVaFVaFVaFVaFVaFVaCJaERaFWaFXaFYaFZaGaaGbaGcaGdaGeaGfaGgaFXaGhaERaGiavVaGjaxzaGkaCWaGlaGmaGmaGnaGoaGpcuNaGraGraGuaGtaDgaGuaGtaGtaGvaGwaGxaAxaAxcwlaAxaEgaBkazBazBazBazBazBaBkazzazzazzaMUaMUaMUaArdcmdcmaxBaMUaMUaHKdcmaMUdaudcmaMUaxBaMUaHKaJedcmaMUaxBaMUaLHaJeaHKaLHaLIaIQdaydaedaAdazdaBdaedaCaIQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaBmaGSaBmaGTaFzaFzaGUaBmaGSaBmaGVaGWaGXaGYaABayYcwgcwgaABaABaABczPczPaABaxFaABczPczPczPczPaCJaAHaAHaAHaAHaAHaAHaAHczOczQaFPaaaaabaaaaabaaaaabaaaaabaaaaFPaFUaFVaHiaHjaHkaHlaHmaFVaCJaERaHnaHnaBQaHpaHqaHraHsaHraHtaHuaBYaHnaHnaERaGiavVaHwaxzaGkaCWaCXazXazYazZaBbaHxaHyaHzaHAaHBaHBcxAaHDaHBaHDdaDdaFdaEaHHdaldbddaGazzaBkazBazBazBazBazBaBkaMUaDjaLHdaIdaJdcmaMUdcmaDjaLHaMUaDjaHKaMUaMjaLHaMUaPzaLHdcmdaPdaOaMUbfwaLHdcmaxBaxBaHKaxBaCxaIQdaUdaedaWdaVdaWdaedaXaIQaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaBmaGSaBmaGTaFzaFzaGUaBmaGSaBmaGVaGWaGXaGYaABayYcwgcwgaABaABaABczPczPaABaxFaABczPczPczPczPaCJaAHaAHaAHaAHaAHaAHaAHczOczQaFPaaaaabaaaaabaaaaabaaaaabaaaaFPaFUaFVaHiaHjaHkaHlaHmaFVaCJaERaHnaHnaBQaHpaHqaHraHsaHraHtaHuaBYaHnaHnaERaGiavVaHwaxzaGkaCWaCXazXazYazZaBbaHxaHyaHzaHAaHBaHBcxAaHDaHBaHDdaDdaFdaEaHHdaldbddaGazzaBkazBazBazBazBazBaBkaMUaDjaLHdaIdaJdcmaMUdcmaDjaLHaMUaDjaHKaMUaMjaLHaMUaPzaLHdcmdaPdaOaMUbfwaLHdcmaxBaxBaHKaxBaCxaIQdaUdaedaWbbYdaWdaedaXaIQaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIfazEaDkaCzaBmaIiaIjaIkaIlaBmaCzaDlaAvazEaIoaIpaABayYayYayYayYayYayYczPczRczTczScAOczUcAPczRczPbgbaIwaEJaEJaEJaEJaEJaEJcAQcARaFPaabaIAaIAaIAaIAaIAaIAaIAaabaFPaFUaFVaIBaICaIDaIEaIBaFVaCJaERaERaERaERaIFaIGaFXaIHaFXaIGaIIaERaERaERaERaGiavVaIJaxzaGkaCWaCeazXazYazZaCfaIKaILaILaILaILaILaILaILaIMaILaINaINaINaINaINaIOaMUazzaBkazBazBazBazBazBaBkaMUaMUaLHdaYdaJdcmdaZaMUaLHaLHaMUaLHaHKdcmaLHaLHaMUaLHaLHdcmaHKaKaaMUaLHaLHdcmdbaaLHaHKaLHdbcdbbdbbaIQaIQaIQaIQaIQaIQaIQaIRaIRaIRaIRaIRaabaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaGSaBmaBmaBmaBmaBmaBmaGSaAvaJnazEaJoaJpaJqaJqaJqaJqaJqaJqcASczPczRcATczScAUcATcATczRczPaJxaJyaJzaJzaJzaJzaJzaJzaJzaJzaJwaaaaIAaJAaJBaJCaJDaJEaIAaaaaFPaFUaFVaIBaJFaJGaJHaIBaFVaCJaERaJIaJIaBQaJJaJKaHraHsaHraJKaJLaDoaHnaHnaERaGiavVaGjaxzaJNazmaJOazXazYazZaBbaIKaILaJPaJQaJRaJRaILaJSaJQaJTaINaJUaJVaJWaINaJXaMUaaaaDqaDraDraDraDraDraDsaaaaMUaLHdbedbfdcmdcmaMUaMUdcmdcmdbgdbhdcmaMUaAsaMUaMUdcmdcmdbjdbiaMUaMUaMUaWadbaaLHaHKaLHdbcaNaaAraOMaMUdbldbmdblaMUaMUaMUaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKlaKmaKnaKmaKmaKoaKpaKmaKmaKnaKqaKrazEaGTaKsaJqaKtaKuaKvcBXcZjcBYczPczRcATczScZkcATcATczRczPaKDaKEaKFaKGaKHaKIaKJaKKaKLaKMaJwaabaIAaKNaKOaKPaKQaKRaIAaabaFPaFUaFVaKSaKTaKUaKVaKWaFVaCJaERaFWaFXaKXaKYaIGaFXaKZaFXaIGaLaaLbaFXaGhaERaGiavVaLcaxzaGkaAZaBaazXazYazZaLdaLeaILaLfaJQaJQaJQaLgaLhaLiaLjaINaLkaLlaLmaLnaLoaAsaaaaaaaaaaaaaaaaaaaaaaaaaaaaMUdbodbndbqdbpdbraMUaGyaLHaJeaHKaLHaMUaaaaMUaLHaLHaLHaLHaHKaLyaLzaLAaLAaLAaLAaLCaLBaLDdbtaLEaLFaLEdbvdbudbudbwdbydbxdbAdbzdbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8079,7 +8079,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaWraBmaBmaBmaBmaBmaBmaWraAvaJnazEaWuaWvaAvaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUbdkaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaFSaXGaFSaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaAvaCzaBmaXWaXXaXYaXZaBmaCzaAvaAvazEaYcaSPaAvaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYsaYvaVTaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaAvaWraBmaGTaFzaFzaGUaBmaWraBmaZDaZEaZFaZGaAvaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaJaaGCaKiaJaaJaaZUaZVaZWaSUaZXaZXaZYaZYaZYaGEaGEaGEaGEaGEaGEaGEaGEbacaGFaGFaGGaGFaGRaGRaGRaGRaHeaGZaGRbacaHgaHgaHgaHgaHgaHgaHgaHgbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCaHhaHoaHhaHhaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQaHEbbSbbQbbQbbQbbTaUZaVeaGEaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaaaHgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcpbcrbcqbcobcubctbcsaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaFTaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQaHEbbSbbQbbQbbQbbTaUZaVeaGEaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbWEbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaaaHgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcpbcrbcqbcobcubctbcsaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaFTaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbbMbeFaJaaZTaZSaZRaJabdlbdmbdnbdobdpaHEbbTaUZaVeaGEaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaaaHgbchaVyaVyaHFbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbeaFTaHPaFTaFTaFTaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEaAvaAvaAvaAvaAvaAvaAvaAvaAvazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbqwbbPaJabeEcePcZXaJabeGbeHbeIbeJbnEaHEbeMbeNaVeaGEaGEbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQaHgaHgbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabaAvaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaJabeEbeDbhSaJabglbeJbgmbeJbgnaHEbbTbgoaVeaVfaVfbgpaHQbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFaHQbgGbgHbgIbchaVyaVyaHFbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpaFTaHPaFTaFTaHPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8114,7 +8114,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbD aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaabTlbZFbZGbZHbTlbaDbaDbaDbNBbNBbZJbZJbZJbNBbNBbTCbZKbZKbZLbZNbTCcdabZObTEbYqbWVbWVbWVbZPbTIbYtbWYbWYbZQbZRbZSbZTbZUbZVbTObTObTObTObTObZWbTObTObZXbZYbTTbTTbZZbTTbTWbTTbTTbNRcaacaabNRbNRcabcaccadbemcafcagcahcaibencakcalbYYbelcancaocapcaqcarcasbUjcatcaucavcawcaxcaycazcaAcaBcaAbeobeobeocaAcaFcaAcaAcaGcaHbXUbXUbOxcaIbXVbOBcaJcaKcaLcaMcaNcaOcaPcaPcaQcaRcaScaTcaUcaVcaWcaXcaYcaZcbacbbcbccbdcbecbfcbgaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUMbUNcbhcbicbibWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjbRMcbkbRMcblcbmaabaaaaaabNBbaDbaDbaDbNBaaabTCcbqcbrcbscbtbYocbucbvbTEcbwcbxcbybWVcbzcbAcbBcbCcbDcbEcbFbTIcbGcbHcbIcbJcbKcbKcbKcbKcbLcbMcbNcbOcbOcbPcbPcbQcbRcbSbTRbNRcbTcbUcbVcbWbepbXscbYcadbeObeLccbcccbajbePcceccfccgcchcchccicchcchcchccjbUjcckcclccmccnccoccpccqcaAccrccscctccuccvccsccwccxccsccycczbQgbOxbOxccAccBccCccDccEccFccGccHccIccJccKccLccMccNccOccPccQccRccQccSccRccRccRccTccUccVccWccXaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabccZbTCbTCbTCcqvbTCbTCcdbbTEcdccddcdecdfcdgcdhcdicdjbZkcdlcdmcbAcdncdocdpcdqcdrcdrcdrcdrcdscdtcducdvcdwcdvcdxcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdTcdTcdUcdVcdWcdXcdYcdZcdZceacdZcebbffbgqbfRcaAcefcegcehceicehcejcekcelccsbOxcembOxbOxcenceobXVbzwbDbbThcepbThbThceqcercescetceuccRcevcewcexccKcexccKceyccKccKbThcezceAceBceCaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHceEbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZceFceGceHbTCceIbTEceJceKcdkbYqceMceNceObYtbVfceQceRceNceSceTceUceVceVceWceXceYceZcfacfbcfcbHTcfdbTRcfebHTbHTcffcfgcfhcficfjcdGcfkcflcfmcfncfocfpcfqcfrcfscfpcfpcftcfucfucfucfvcfucfwcfucfxcfycfzcfAcfBcfCcfDcfEcfFcaAcfGcfHcfIcfJcfIcfKcfLcehbhqcfNcfObzwcfPbzwceobXVbzwbDbcfQcfRcfSbThbThbThbThbThcfTccKcfUcfVceyccKcfWccKbXXccKcfXbThcfYcfZcgabThaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcgbcgbcgbcgbcgbcgbcgcbWHcgdcgbceEbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZceFceGceHbTCceIbTEceJceKcdkbYqceMceNceObYtbVfceQceRceNceSceTceUceVceVceWceXceYceZbWIcfbcfcbHTcfdbTRcfebHTbHTcffcfgcfhcficfjcdGcfkcflcfmcfncfocfpcfqcfrcfscfpcfpcftcfucfucfucfvcfucfwcfucfxcfycfzcfAcfBcfCcfDcfEcfFcaAcfGcfHcfIcfJcfIcfKcfLcehbhqcfNcfObzwcfPbzwceobXVbzwbDbcfQcfRcfSbThbThbThbThbThcfTccKcfUcfVceyccKcfWccKbXXccKcfXbThcfYcfZcgabThaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcgbcgbcgbcgbcgbcgbcgcbWHcgdcgbceEbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZcgfcgecggbTCceIcghcghcghcghcghcghbTIbTIbTIbTIbTIbTIbTIcgicgjcgkcglcgmcgncgocgocgpcgqcfbbHTbHTcgrcgscgtbHTbHTbHTcgucgvcgwcdEcgxcgycgzcfucgAcgBcgCbQWcgBcgDcdTcdTcdTcdTcdTcdTcgBcdTcdTcdTbQWcgEcgFcgGcgHcgIcgJcgKcgLcaAcgMcgNcehcgOcehcgPcgQcgRcgScgTcgUcgVbzwcgWceobXVcgXbDbbDicgYcgZchabumbvWbvWbThchbchcchdchechfchgchhchichjchkchlbThchmchnchochpaacaacaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaachqbWFbWFbWFbWFbWFbWFbWFchrchsbWHbWHbWHbWHchtbdqbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZccZccZccZbTCceIccZaaaaaaaaaaaachuchvchwchxchychzchAchBchCchDchEbhrchGchHchIchIchJchKchLchMchMchMchMchNchMbHTbHTbNRchOchPchQchRchSchTcgIchUchVchWchXchYchZciacdTcdTcibcicbhsciebhscicbEDcifcigcigcihciicijcakcikcilcaAcimcinciocipciqcirciscaAcaAbDbcitbDbbDbbDbciucivciwbDbbvWcgYcixciybumbumbumbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcbicbicbicbicbicbicizbWHcbhcbiciAbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBaaaaabaabciCciCciCciCciCciCciDciCbTCcdbbhtaaabhubjJbhYbjYciJciKciLciMciNciOciPciQciRciSciTciUciVciWciXciYciZchLcjacjbcjbcjbcjcchMbHTbHTcjdcjdcjdcjdcjecjdcjfcjfcjgcjdcjdcjhcjdcjicjjbkycjlbkycjmcjncjocjpcjqbuXbuXcjrcjscjtcjucjvcjwcjxcbScaAcaAcjycaAcjzcaAcjAcjBcjCcfdcjDcjFcjGcjHcjIcjJcjKcjLcjIbvWcgYcjMbvWcjNcjOcjPcjQcfQbvWbvWbvWbvWbvWbvWbvWcjRcjEaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHciAbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8122,7 +8122,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclrclsclsclsclscltcluclvclwclxclxclyclzclAceIbhtaaabmZclBclCclDclEclFclGclHclEclEclIclJclKclLclMclMclNclOcgoclPclQbneckvckvckvckvclSchMbHTbHTcjdclTclUclVclWclXclYclYclZcmacmbcmccmdcmecjdcmfcdTcmgbEDcmhckNcmickPaaaaaacjvcmjcmkcmlcjvbHUcmmcmncmncmncmncmncmnckTcmpcmqcmocmscmsbnfbnfcmscmvcmwcmxcmycmzcmAcmBcmCcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAbvWcmDcmraZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZEbUNbUNcgbcgbbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLbRSbGWclzcmNcdbbhtaaabmZcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZbhrbhrbhrcndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzbngbnkbnjcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnIcnHcnKcnJcnMcnLcnOcnNcnQcnPcoXcnRcpacmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaacmEcnZcoacobcocclwcodclwcoeclwcofcogcohcoibhtaaabnlbjJbnIbjYcomciKciKconcoocopcoqcorcoscotcouceVcovcowcoxcoycozchLcoAckvckvckvcoBchMbHTbHTcoCcoCcoDcoEboQboQboQcoCbpobpobpocoLcoMcoDcoNcmfcdTcmgbEDcoOckNckOckPaaaaaacjvcoPcoQcoRcjvbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcoTcoUcoVbqlcpbcoYcoYcoZcoYcoYcoYcoYcoYcpdcpccpfcpecphcpjcpjcpkcplcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNcpmcpncpobUNbUNbWHbWHcppbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpsbSzbSHbSEcqUcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqncqocqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgcqrcqsbYdbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpsbSzbSHbSEcqUcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqnbYfcqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgcqrcqsbYdbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcqtcqtcqucqucqucqucquciCclzclzclzclzclzclzcqvcqwcqxcqxcqxcqxcqxchuchBchBchBchBchBchBchBcqyceTbZUcqzcqAcqBcqCcqDcqEcqFcqGcqHcqIcqJcqKcqLchMbHTbHTcoCcqMcqNcpOcpPcpPcqOcoCcqPcpPcpPcpScpOcqQcoNbEDbEDbEDcqRcqSckNcqTckPczvbHTbHTbHTbHTcqVbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqXcqYcqZbricqlcqgcqecqicoYcoYcoYcoYcqmcrhcrbcsvcsucqkcpjcricrjcrkcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgbcgbcgbcgbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncrocrpcrqcrqcrrcrscrtcrucrvcrwcrxbrMcrzcrzcrzcrAcrBcrCcrDcrDcrEcrFcrGcrHcrIcrHcrHcrHcrGcrHcrHcrJcrKcrLcrMceTbZUcrNcrPcrOcrQceVcrRclMcrScrTcrUcrVcrWcrXcrYbHTbHTcoCcrZcsacsbcsccsdcsecoCcsfcsdcsgcshcsbcsicoNbHTbHTbHTcsjcoOckNcoOcskbHTbHTcFLbHTbHTbHTbHTbHTcfccGOcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacslcjIcsmcjLcslcrccrecrdcuQcrfcsocsncoYcoYcsqcspcsscsrcstcpjcsxcsycszcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncsAcsBcsCcsBcsDcsEcsFcsGcsHcsIcsHcsJcsKcsKcsKcsKceTbZVbZVbZVcsKcsLcsKcsKcsKcsKcsKcsKcsKcsKcsKcsKcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsYcsZctactbctcctdctecmnctfctgcthctictjctkcpPctlcoCctmcpPctkctncpOctocoNctpcmscmsctqctrctscttckPbnjbnjbnjbnjcnzcnzcnzbnjbnjbnjcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIctyctzctAcjIcmAcmAcmAcmAcmAcmAcuTcsncuUctBcswctCcmAcmAcpjbsyctMbsybsyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8138,10 +8138,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcEqaabaabaabcEqaabaaaaabcEqaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcEucEvcEwcExcEycEzcEAcDacDacEBcECcvecvecEDcEEcEEcEEcEEcEFcEGcEHcEGcEGcEGcDocDocEIcEJcEKcELcEMcDucENcDrcDucDucDucDucEOcBucEPcEQcCqcDAcCscDAbBGcDCcDDcEScETcEUcEVcEWbCUaabcEYcEZcDOcFacCDaaaaaaaaacDQcFbcFccFdcDRcFecFfcFgcFhcFiczEczDcFicFjcFkcFlczEczDcyJaaaaaacjIcvPcvQcvRbDrcAIcyMcFncFocFpcEmcFqcFrcFscFtcFucjIaabaabaagaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaakSaabcFvcFwcFwcFxcFycFzcFzcFzcFycFzcFzcFzcFycFzcFzcFAcFwcFwcFwcFwcFwcFBcFCcFDcFEcFFcFGcFHcFIcFJceHcwycFKcDacvecvecvecZTcEDcEEcFMcFNcFOcFPbDscFRcFScFTcFUbDtcFWcFXcFYcFZcGabDtcGccGdcDrcGecDucDucDucGfcBucGgcGgcDAcGhcGicGjcGkcGlcGmcGncGocGpcGqcGrbCycGscDLcGtcDOcDOcCDaaaaaaaabcDQcGucFccGvcDRcGwcGxcCIcGycFicGzcGAcFicGBcGCcFlcGzcGDcyJaaaaaacjIcxtbTHcxtcGEcxwcqacGFcFocGGcqacqacGHcvWcvWcvWcjIaaaaaaaaaaaaamjamjamjawTaabaabaabaabcGIaabaabaabaabaabalwamjamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcGJaabaaaaabcGJaabaaaaabcGJaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcGLcGMcGNcCYcZUceHcGPcEzcEzcEzcEzcGQcEzcFJcEEcGRcGScGTcGUbDGcGWcGXcGYcGZbEocHbcHccHdcHecHfbFlcHhcDqcDrcZicHjcDucDucHkcBucHlcHmcDAcHncCscHocHpbFvbFtbGBbFQbGEbGCbGEbGGaabcCDcCDcCDcCDcCDaabaabaabcHxcHycFccGvcDRcHzcHAcHBcHCcHDcHEcHFcHFcHGcHFcHHcHIcDRcHJaaaaaacjIcxtcxtcxtbDrcHKcHLcHMcHNcHOcCTcCTcCTcHPcHQcHRbGHaaaaaaaaaaaaamjaaaaabaaaaabaaaaaaaaacHTaaaaabaabaaaaaaaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEcIbcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEbYRcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaacyYcHUczaaabcyYcHUczaaaacyYcHUczaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJncJncJncJncJncJncJncJocJncJncEEcJpcJqcGTcGTbGIbICbGIbJhcJvcDocJwcJxcFZcJycJzcDocJAcDucDrcJBcJCcJDcIxcJEcJFcJGcJHcJIcJJcJKcJHcJLcJMcJNcJOcDAcJPcJQcJRbJCaabcEYcJUcJTcJVcCDaaaaaaaaacDQcDRcJWcJXcDRcJYcJZcKacKbcKccFccKdcKecIYbJEcKgcKhcKibIBaabaaaaaaaaaaaaaaacjIcKkcKlcKmcKncKocKpcKqcKrcKocKpcKscjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycKzaabamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJncKAcKAcKBcKCcKDcKDcKEcKFcKGcKHcIdcIecGTcGTcGTcKIcGTcGTcGTcDocKJbJVcKLbJWbJXcKOcKPcKQcKRbKhbKhbKhcKVcKWcKXcKYcKZcLacHncCscLbcLccLdcLecLfcDAcJPcLgcLhbKMcLjcDLcLkcIOcIOcCDaabaaaaaacHxcLlcLmcLncLocLpcLqcLpcLpcLrcLscLtcLucLubLscLwcLxcLybLtaabaabaaaaaaaaaaaacjIcLAcLBbLucvWbLEcLEbLUcvWbLVcLHbLWcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaaacLJcLJcLJcLJcLJaabamjaaaaaaaaaaaacJmaaaaaacJmaaaaaacJmcJmcJmcJmcJmcJmcJmaaaaaacJmaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcLMcEEcLNcLOcLPcLQcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcLMcEEbYVcLOcLPcLQcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaalwaabcyYcMIczaaaacyYcMIczaaaacyYcMIczaaabakSaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJncMJcMKcLKcLKcLKcMLcMMcMMcMNcMMcMMcMMcMMcMOcMPcMQcMRcMScMScMScMTcMUcMVcMScMScMScMUcMWcMXcMYcMdbUKbNdcMgcNbcNccNdcNecNfcNgcNhcNicLfcNjcNkcNlcNmcNncNobGVcNpcDLcNqcNrcNrcCDaaaaaaaaacDQcNscNtcNucNvcNwcNxcNycIYcNzcNAcNBcNCcNDbJEcNFcNGcNHbNqaaaaaaaaaaaaaaaaaacjIcNJbTXcxtcvWcNKbTXcxtcvWcNKbTXcxtcjIaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaakSaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJncNLcLKcLKcLKcLKcLKcMMcNMcNNcNOcNPcNQcMMcNRcNScNTcJqcGTcGTcNUcNVbNtbNucNYbNvbNvcObcEEcOccMYcMdbULbNdcMgcEEcOfcMhcOgcOhcDAcNhcNicOicDAcNkcNlcJPcJQcOjbJCcOkcEYcOlcOmcOncCDaaaaaaaaacOobNwbNwbNwbNwcOscOscOtcOubJEbJEbNxbSSbJEcOzcOzbTicOAcOzaaaaaaaaaaaaaaaaaacjIcxtcxtcxtcvWcOBcxtcxtcvWcOBcxtcxtcjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaczakSaczaczalwakSakSakSakSaczakSakSaczcODaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJncOEcLLcOFcOGcOHcOIcMMcOJcOKcOLcOMcONcOOcOPcOQcORcJqcGTcOScOTcOUcOVcOWcOXcOYcOZcPacPbcNTcJqcPccPdcMbcPecEEcPfcMhcPgcPhcDAcNhcNicLfcDAcPicNlcJPcPjcPkbKMcPlcDLcPmcNrcNrcCDaaaaaaaaacPnaaaaaaaaaaaaaaaaaacDQcPocIYcIYcPpcPqcPrcOzaacbTpbTqcPuaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcPvcPvcPvcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaabcLJcLJcLJcLJcLJaaaamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 3f993b38313..acc12c8f234 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -222,6 +222,7 @@ "en" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "eo" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ep" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"eq" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/computer/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "et" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) "eu" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) "ev" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber) @@ -330,7 +331,6 @@ "gC" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AI's from interacting with this device."; name = "Telecoms Foyer Turret Control"; pixel_y = 30; req_access = list(61)},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/entrance) "gD" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) "gE" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/tcommsat/entrance) -"gF" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) "gH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcommsat/entrance) "gI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/tcommsat/entrance) "gJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Telecomms Power Room West"; dir = 1; network = list("Telecomms")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/tcommsat/entrance) @@ -535,7 +535,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcHfXfYfYfYfYfZgagbgcgdgegfggghfYfffYfYgicMcgcfgjcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdgkcfcgcgdHdHgldHdHfNgmgngogpgqgrgsfNdHdHdHdHdHcgcgcfcgcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcgcgcgcfcggtfNfNfNgugvfNfNfNfNgtcgcgcgcgcgcgcfcgcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcfcfcfcfcfdTgxgygzgAgBgCgDgEgFdUcfcfcfcfcfcfcfcfcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcfcfcfcfcfdTgxgygzgAgBgCgDgEeqdUcfcfcfcfcfcfcfcfcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccccdcfcgcgcgcgcgcdgtgHgIgJgKgLgMgNgMgOgtcdcgcgcgcgcgcfcdccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWcccccdcdcdcdcdcdcdgtgtgtgtgPgQgRgtgtgtgtcdcdcdcdcdcdcdccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWccccccccccccccccccccccgtgSgTgUgtccccccccccccccccccccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index 29886ded2b3..5e9b69ef4e8 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -6,6 +6,7 @@ "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) +"ai" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/computer/monitor,/turf/simulated/floor,/area/derelict/solar_control) "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) @@ -94,7 +95,6 @@ "bY" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/derelict/solar_control) "bZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/derelict/solar_control) "ca" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/derelict/solar_control) -"cb" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/monitor,/turf/simulated/floor,/area/derelict/solar_control) "cc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/derelict/solar_control) "cd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/window/eastleft,/turf/simulated/floor,/area/derelict/solar_control) "ce" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/derelict/solar_control) @@ -751,7 +751,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMaaaaaaaeaeaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbLbLbLbLbLbLbubububububDbNbuaaaabObPbQaabObPbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubRbSbTbUbvbvbVaaaabObWbQaabObWbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubXbYbZcabvbvbVaaaabObWbQaabObWbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabucbbvcccdcecfcgaaaaaachaaaaaachaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuaibvcccdcecfcgaaaaaachaaaaaachaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabucicjcjckbvclcmcncocpcqcncncncrcscsabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubXbvbvbvbvbvctaaaaaachaaaaaachaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacucucucucucucucucvcucucucucwcuaaaabObWbQaabObWbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index b9005987fc3..5e0e3c5689f 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -362,8 +362,6 @@ legend { return 1 large_tank_control - icon = 'icons/obj/computer.dmi' - icon_state = "tank" circuit = "/obj/item/weapon/circuitboard/large_tank_control" req_one_access_txt = "24;10" settagwhitelist = list("input_tag", "output_tag") @@ -587,7 +585,7 @@ legend { fuel_injection icon = 'icons/obj/computer.dmi' - icon_state = "atmos" + icon_screen = "atmos" circuit = "/obj/item/weapon/circuitboard/injector_control" var/device_tag diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index 50ce7f6f98c..4710113d2fe 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -1,22 +1,19 @@ // the power monitoring computer // for the moment, just report the status of all APCs in the same powernet -/obj/machinery/power/monitor - name = "Power Monitoring Computer" +/obj/machinery/computer/monitor + name = "power monitoring console" desc = "It monitors power levels across the station." - icon = 'icons/obj/computer.dmi' - icon_state = "power" - density = 1 - anchored = 1 + icon_screen = "power" + icon_keyboard = "power_key" use_power = 2 idle_power_usage = 20 active_power_usage = 80 - - light_color = LIGHT_COLOR_ORANGE + circuit = /obj/item/weapon/circuitboard/powermonitor + var/datum/powernet/powernet = null //fix for issue 521, by QualityVan. //someone should really look into why circuits have a powernet var, it's several kinds of retarded. - -/obj/machinery/power/monitor/New() +/obj/machinery/computer/monitor/New() ..() var/obj/structure/cable/attached = null var/turf/T = loc @@ -25,53 +22,22 @@ if(attached) powernet = attached.get_powernet() -/obj/machinery/power/monitor/attack_ai(mob/user) - add_fingerprint(user) - - if(stat & (BROKEN|NOPOWER)) - return - interact(user) - -/obj/machinery/power/monitor/attack_hand(mob/user) - add_fingerprint(user) - - if(stat & (BROKEN|NOPOWER)) - return - interact(user) - -/obj/machinery/power/monitor/attackby(I as obj, user as mob, params) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - PoolOrNew(/obj/item/weapon/shard, loc) - var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - else - src.attack_hand(user) +/obj/machinery/computer/monitor/process() //oh shit, somehow we didnt end up with a powernet... lets look for one. + if(!powernet) + var/obj/structure/cable/attached = null + var/turf/T = loc + if(isturf(T)) + attached = locate() in T + if(attached) + powernet = attached.get_powernet() return -/obj/machinery/power/monitor/interact(mob/user) +/obj/machinery/computer/monitor/attack_hand(mob/user) + if(..()) + return + interact(user) +/obj/machinery/computer/monitor/interact(mob/user) if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) if (!istype(user, /mob/living/silicon)) user.unset_machine() @@ -116,7 +82,7 @@ // Each entry for(var/obj/machinery/power/apc/A in L) t += {" - [get_area_master() ] + [get_area_master(A) ] [State[A.equipment+1]] [State[A.lighting+1 ]] [State[A.environ+1 ]] @@ -130,29 +96,13 @@ user << browse(t, "window=powcomp;size=640x800") onclose(user, "powcomp") - -/obj/machinery/power/monitor/Topic(href, href_list) +/obj/machinery/computer/monitor/Topic(href, href_list) if(..()) - return 1 + return if( href_list["close"] ) usr << browse(null, "window=powcomp") usr.unset_machine() return if( href_list["update"] ) src.updateDialog() - return - - -/obj/machinery/power/monitor/power_change() - - if(stat & BROKEN) - icon_state = "broken" - else - if( powered() ) - icon_state = initial(icon_state) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - src.icon_state = "c_unpowered" - stat |= NOPOWER - + return \ No newline at end of file diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 4c6c5f34e79..4add16544fc 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -28,7 +28,7 @@ var/datum/data/record/active1 = null //General var/datum/data/record/active2 = null //Medical var/datum/data/record/active3 = null //Security - var/obj/machinery/power/monitor/powmonitor = null // Power Monitor + var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor var/list/powermonitors = list() var/message1 // used for status_displays var/message2 @@ -196,18 +196,18 @@ access_reagent_scanner = 1 access_status_display = 1 access_atmos = 1 - + /obj/item/weapon/cartridge/captain/New() ..() spawn(5) radio = new /obj/item/radio/integrated/beepsky(src) - + /obj/item/weapon/cartridge/supervisor name = "Easy-Record DELUXE" icon_state = "cart-h" access_status_display = 1 access_security = 1 - + /obj/item/weapon/cartridge/centcom name = "Value-PAK Cartridge" desc = "Now with 200% more value!" @@ -220,7 +220,7 @@ access_reagent_scanner = 1 access_status_display = 1 access_atmos = 1 - + /obj/item/weapon/cartridge/centcom/New() ..() spawn(5) @@ -294,7 +294,7 @@ /* Power Monitor (Mode: 43 / 433) */ if(mode==43 || mode==433) var/pMonData[0] - for(var/obj/machinery/power/monitor/pMon in world) + for(var/obj/machinery/computer/monitor/pMon in world) if(!(pMon.stat & (NOPOWER|BROKEN)) ) pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]") if(isnull(powmonitor)) powmonitor = pMon diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index c70af829c12eb56bb1ae3707092626e69938a98f..bfe2c56826d15be4c7195b2fe2d8c2e63969932e 100644 GIT binary patch delta 11521 zcmXxK1yq#J`#ua(i=vctOZuU^S!s|4=?+0!q!D-k>69+%ZjkO4k(OrZ?p|VHm;d_x zz3-mgbN0+U&&=HS+;v?uapBLZLZ5wSKxK(%qywHYLL7>WbgFd38)^b5d9ih(!x~@O zuKME+2Vo0k|9Sp=Bh&P2SNb{WlmEjNf~?!WL!Rmrz4{tFlbUw&aw6tWvI=T{S!~^f~{E4^G)2`cP}L3M)GB` z6SB4d#~+M~GNnR&>2|q7eXTukiEtZ>Rua=-1@`mE?OtHLd6YBHsZzcCZjE7GLCBHINf3=+%Mm>Lq+09?=glbAf z?4_>CK4OMX4+#V=`lL4Ye1!!w^olkSmd0U#B)Mv~OqKP`HG+I*PCemG+or-rQlz)o zm{Z(D2at(?jP(+HoNUP*q~G6|QHQ;F1HqxIVh&XIcVWk7oH1XWv^IJ*eD|f|TT_X6 zQc@VEnnc?ea|2g+dU>OclzOM+aG%5KIyT?iHfqJ^+a_12N*~$Qf^vU4y`6l;+y z;yQvwv+T2s<{Bs}o#)^sM~fx5r%Yb}%d;r*WdBN^ zwGrD9GU~1CxT!C2JeCK{j8Mp}r%S*1m2gDCK+5s^3PPk*aqRI(brPBL*uVELetU#ZtqI} zh(2{Q2O7}^%7B7$8KweIozq&-D|q6gj6OJ!=;#z=>bH6=dYsG|J63S*H_aKhuOK`c zztk!6>#;a=(&h#+ybjEbAf`tpR0%>yi=d;!-p;;yu>7Jru58W3n=Z_Y?YmY(@&n>J zz9;M|n&X>ub|p6A_%QA_m^5GqKpt}RR4xtx>&4?8hlS2;LH~RC(}%@1tkyXayjc7I zr|PaIX7QaOL*?aH$EZ$N%H6zO2IXA^9+&dZhaw;Ec-MCkS+;11S*bN|-m%DjS#PPmA;NIL$5DA|-F>Q^175@)_l%O8*WhOUo zZbih#TF;bfETKJ3=1IRMA(>uS_?;&mR$5h6R9C0LYl@;(qRPn59>b`V!eZFuKsNJh zz1g~+$7PgswW@k|Jf8mE#Y^ae?$t&bw=alt$m?o${)lt;sPE%})~(c*h(L!o;g1LU zhV8tYSPl*fwEm4FEnWpcjr}7$N9&v6ViY=DS^^K3QWw_QfM(|Z0d8h1eST^Bp%ZF2X;HhN0qdmRdW_-RHwUhZ;r-bQ?eNU5noY3mr>Qspra-phY^BetP z;^iH*I1E4Q>xqCylI?fqCvy~m6vJa z8$IxE>O<;7clg=UUL1J5AABD%ZQ0t|^a#1Wc5_@?;oZ|(F<&MjuDJWiu+JV&z~j zDlC+Nc-Z%JwVaBCQiD%5HaqS9Qu{AhOAq>De@hQc3I=drMchp(PPV)Xg+%N6_=vP( zC~gxkq!K+2u)Z3Jm#mcLy52#Yq<(n{WDdBk8ArPZ>+7TN@$t1BZ`>_d#-TR(9>+L$ z4u<2?qofJBys65|i;jrhU2b)qnVoknEDVNNkDf0FP=Wn_lxdaxom{{FeTjk5R1%QJ zxgkZj{|$IBaS?1i{7s>IE%Cz;UcG`?w%gkY_9r;L2$nIumIc%9GjAaB2K&Mn^u`4R zA>wG`GqbIoa>jn*CnqPtp`l+o@`FNu$r-e@wK)EYHbJY;xV*eHGWm3Wx$|eHOe-QH z!u$yVXUGv5yg!(Zh>ZMV7)UQ4yWl7&D43X-$P47Yc^))L(xocRm)De1o2jYaXxHd_ zgCU8B$rbBufY?60zaqn@ipghjSpGR!Psx=GgZUJzX1$*th{(8y!R+@4O-#Lak~_zV zIK(P-DxQ7nG@Uj1sZ#+B;-W}TPmkQHWeu1^Yiw#t(I}AP_Jg^394|=v`if~4E1M6+ zQUOTIot|5jTu>=9FxfU6aNuX%mij#+&Wq|M4x=gt$RoaNvlW-oYanjf3Z;K1O#N#v zl+K<7cLq|08KX{^00%GGKtY0~@ip=}51#&ao=SIv&i(~dkVbnF6xZER^FcJ+PY+vi zamB@=JWVyZ0o-(XzWyDNBXT#&J>q}}6LEm2$LThLQOW1P$Et^%oV;Z-a@CQXpPzrp z$IZ>HW(x|18oAGE`$A`RvwwrWMNbvT^VL|@OZ8vCC4%>ZMMMm~-U$i_ zETwb$#jW>-FWTuSYsp*qc$bdpxfckU7QdC&Xd6q_Tt4-@n$4Lv9ZjVL!GWC}n`}(l zz2xk|`stNkCb&fM_Hg3;2m`PPreFn19r$%4vPO^QF-W9)Z5QO=;DAoc z!4aF5M%p9rq9xLuIKV3r;R;13sRC&tWmF^o;#Apdd4J`R>OAS}M=2~NBZKbl?k*!Ir)g?BVMc>(TD!MsljELI+hR9cF8L(! zkl~AK(S?pQ*B7wWI5jbN!&)^31qs&mb>X~xcaI9XGF33q=fxMA{6>d=6T zu|A6b-JGEV1#f8Ia3a!y^BNnIkvqKvft;koqBYIU&l3_7_J60Nz88~3Di$v|_x#ay z;;r5FQB;3et84GGnw0;Ln&1Qb?WRi@Mi`OTPM!{zY~fN)-cX5pjGky_{VeV5%t}ci z9{T|(O8gU^7KBFCD14DP0mfR-II1Z@w4bGM`FBk3@XwppB)9Lvj)r~U?s1LFp~X#c zl*7otvgomn0%Y-E#8T$v=ReDx|5;o69qHkVS)BjdZKTYxOV_1peP_;6UCdLQ=UiCF z{Yso4UvqgJ>wT_!eZ}~1(mpd_Kx=wiZFw96yXl^`vo&`K=k5Q!kKQZnN6z&>`Otg2 zTa^1qkdh+5(UQNyNYVA!h^xr%?6iv7^Hqh5l~HI}S(P$Ekg7&EN1?@Z2(YZvOPY6< zC~(XXq1h;Ia6R>D_~FPYk8FO;ZH}Bc2+wyQ;H4QGF%b2|!MIgzp5?J$;rSC6!TzD{ zwer7t(4Xj$<6NCE!@;*VQ0xv{iT-HJmT zd;#R#4v<~y&Vf5jH{%gBr)h4Ihse-u&-K(1Bp=zMg?2&_arFDvE&C`TEM3f6aGZ^6cjM`;mC%NfZ>C zABr-PA5v{H)44XDR~D&|g!s$KhA3?n0r}K|nPUvh%nzNf{L()|TQuY+)^Y z)YO#H(ILKF1HeV^-);@XVdZ{!TlC>A#yaBR?AB)&bBY8WSO}>6*t`Xh>Qfer44C!c zn46OiaVlzZt!tV&6HJJ6ZV7cWyJ(I3w4j0hSVf$!Nv}!r6M=v~EOves)Tx;LNTxev z5hW$`?a4npbyRrTlMY<4@&wqi>aA}dCpMuK^$7MjEVQ^3Y``c4oq{!gKQP4=E-Esl zC$O-;ExOLs6c~RM?Vs>AqGMU?4l}`;8CBgtGZIR{sz{OeEFZWmJb|k5K=&~Yq21r1 zC93CDL!&d)PFEbo0mdS%+fsv>7-qK`|T~2oPKg{@UFg8a(hq z4SZ_T^wD&8*s&b#3H`cVZ4N=E!9pGfj8%_T%?ML2@d$6ZxsG~SF=@Q`y%_$ ztl2<@ue@dr{7iqsF(fl8?WlcP9aY4_C9(Adx(%0&Jn zJfiVN`B&v>g9Qb3A;BRGP!>X^Z4|qHfa~S=;Ie~mlZq#E7JuE3H zfplWNAmP~FpDIX7PR5W~!%rLz&c7zLFMw)kX}x7(+1Ix24}HmI*u-Xb>&%m`S8En{ zLsn~0RjFSeicELihqt#6du;5boML}aDTvw{b!U{iajY0d@e9W0L!`7dOVsw}k>)en zRPPQ4BnlKVlF;iXzc^7gqe&5Pjf^$*CjD0=P@k8<8Fun+KQ$#uv#ouPpOgJ<2rk+i z8ec!=rJ{BvxD#R~R`3*Yt{GQ>8~N^#HB!pSsoETN*e^&&hgzE+eFABQIC2`bOjcLo z!;nEdsdw^Aa7otBNQ|~y18-QSVu&K#z|dQiq~H z(WOcFiMY79EVYqeyjN4RS*SHf?$^H(&(6;7(dii*ag@gxzx`aTKinsU-4H1wulnl{ zGG6P?=j)O+e>Gv!l9GXdb%%-f4$;5gX~&i7&!0aVZu>zqpd24SSXg*_d;3$)Rp-}R z3xUj&H-QKSPR_UnZ^-eDY{O&QJi^;HM8fY08B7l+pTRg6b8Z(T(!SoF&d$ZWp}XMG znrO?@L{shFP3@V0d9Pv$iB`XS6e94iRc?8Y^phg#{KQ_(N~#?5Lxtw%Jj_a%8FxPU>MA($ig3sN=lI7)r>bMfcRu|WaJ1+#+R-f zTD-sA?FpogoIKw8wl~f9tAhfI%DoD8PYu`&wZ;BAyHCcQ6bT5oM+T8`ze*EnO2{}W zbbj_ldk*AB#6p5ZQnPxm$7IxtlTo{~f$d0~w|N{{364$Ho%bcQ{+ox)m#` z{<=sv>32?P=!6wdox>u}nD0j$8{~lGnp#>KuS0lk#!2&Qx{43|P8aIFA#K{S(Lm!h zM*ZR_^8K$n{r42|SIGj-nJZw^__AR3M!w zK=b&@DViEZtFy~HT|duI;1g_RpPox{>a6RjP*IU&9*(sS$MqPZ7_yd!O77iFYP}vj z!>6rPDZ^CP(fJidvy|{?J(eM>ub*z+cCGOS_-8BxXT7Vhm2)Jrq{Cj>4n?;-RaUZ9 z>ab$rQqSP*Kb&<>^nSxS`9m55WMJuh_#pHC{quQ~uk5n2vP&)nZ`8@i$Q+hi;wx&p z$YnJeTsX$8d69O-h_pU6i3{_eR-6i%%`uO+r-vVZ`^w@h(3))yL>Q!b?~bPXrPNec zW3H$1pq`(l83$&3`Ay_aafw87oCffBc`Wa1tQm)jY3S*3QIOyV&FmOhs0$c#D3il+ z!2h|qX(8Q!ETK;_NM}K>Tbx4q2xdQ(?JBLkPRq)23`hOj-Cb5z_L`VDpCvNuCJ+q^ zhkL#J=2r}bu*Wg!@bECDxX;WfZ_DQmDW|prrtU)#X_|vC(LVQfzmc`h=haGy7qj+v zak!dy&8;CQk9$6M^E)@d4r1CT0BBsrdH4GKNVOWuR&+geceeT2L@y|H#b>WS^F*O)Qyd+ zs%)&SVcLdIuySwpKpB30m_jPT&qIJMq?1pD(u!6BVHhwP*VE(<+Qw_qE3%( zNrFBD1(!;s5a8!8E-BH{(J6i@u3==PtfKNVfUf`ZK7Gugz{1|wvLo0A-J>kh(Qgok zVfid9ER*>z6ao%hqv7de)>W+F}`H!UrUCJt5aoqINl+{-m~-R&b>xIeBS}r zp|3TfqOZ>9mOQvkgSZqlXx?R~xEtk&Lj?Xivj-oT0%v@1eq%EBS%&=~t4n4(Dr6QY zQO&YIYCI_^iOc8u6Z?O~g0_fX7ImNZC+U!br{ER~2vUoI#A)3Hjj*FK>8#Qm?#4wI=;7=?B+-$_UIiJP&LvtdGoC4E#iki!)}z+-bX36gFm!fy)?+L-z!+Bnspna00Ga8n zK7O=~=ZYGXl9k0kE*zOE;fpPS8Prt@y=7rH}5x(GIt2gZIDqm@MczG4yU!Hwu zK}J&#Y=m8nygb@&8sRSI^;x%F2c;{ncB0k515IhHbFtYT8K@JvrGH}ap#hF~vj7|E zUen{5Rz*1b&lna0ZYNM&%FNa1SU(>cF~SyPBSLg4ES|(}*ktrtaUclbTKHGa{~_UL z+LgHD9h33?bGp(V!TvMhax1RkWU=1H9>4a%WPx$*tK@k=M~7Gucnw^?=rC&ZU20u; zy3DLCkNLRf2HnoVfkC8=xfg+iMj!axdK>W!UrQ+^!v`Q6IZM&{$1QZ9MNo)H(0iFB zyiQVm&zCqKT&zju-2j!?nv=(nCnQ85!A549nW?EMPss;YSP>(p!}s%BZ|@JN5KYYn zs92a_=jjp$J3%qC#WG%oXv_%@2Po*wh>&?rOR_}|4^7~maOScsjyV1pxZJv;uFhr! z+kM_c@H z5Qhjk22t_=E#PtnkQ9nKVL+z}`px`(5G^{UZ4hPdKrBU2S*aF8!u>F*$^X>otXO8& z>#e2K+dBaObEoEnWlM^T2M}VmTheQ2GWL1*ypJ}wpr9X}Wo0BFhZ7`a_D?!nJ05&~ zrlhv=S0+?nBDW&4I7U?2UdWP>Jii`?68s;YM8hS+azOcMHB8X$5%T}Hz2G+chxlkg zsB#&!{~+SVn}Jks9E`PilkY*m|JU>8f6t&;Sy_>a5J{@4#zK6T&5m9K%HpIUpZGkL z7$2WkSX4w-z3~Sf!_X8YmJrN|BecpTj|6Y)e%>n7@bhs0&ro|nYyuCi(e15vjTMO4 zpf7nj)$M;+!~uow+8lWr#(cNA*dIjM-rKv4lvzB`ZO;aF2AJX88=cpTSZpoVWT;2Z z3LlJ`CTWl(zbz#7Jn2#n*vHZ}^}AzsR;~q4KEubyqd;|M#}nlU5^tv28DXqI+27ws zk!6>$=-NBPTt6_t-#v+=g3(-&T&_x{5c z8XAJ3OasVnv@aQ`X5A5*_je5?y%oefMnDV=KxNgt%V9J;mw%PY;4phR4g;CrEiN)L zvfh<788ukEySE}9TQSosS%)b@PlJDuf)aT$;W+HFS`F{}AGLJeq*P^KyXqIW5p{VF zHEHC5F9m89nj7}!n8(p-osYP}uG%8Ps+OzL0WNd1^|^q10)k}qlJyry3Ln`qD%tdg zmu4C(k5@7EbX#5pJbT`FSyp(xq@y4IQ_6Dyfc;nP=J(fgQu}B_xtr6s4G3fGiR?=@ z5VpBJsz5ZvU_TxP7I-{lw5{)=E0AJ2@AYfdFr(qkc0{y&*AEUELSodctgPU$FiW0v zz(G73S?A{0u5~1w?NmYA{XZ#yq@|>}Q5jAB2jg^Je;HX;l}dtlTPpF{poTphC%^LM#KPUVoEQc`XJ&jt^cR3z`sWamz#BaIG(v?1>S# zp3a{ho*ud@#Sol2ao5^yzkoe$Z=2vB$0g|%UKE=o2ct<}uNuz=&6~C^Vt0Pz(Bt43 zk#lw4|CyM$Ju~lZguncR7?fk&cN_vwoC#)i+x?Habe~%{Q@{}uST71{_ZcNwh|aX0 z`>graoOa5Fu+Xk6KR;ir%}h&+@c#b(jx~L<<8c0YSvGtJy=NOcO?Rd0ZaO%9jJN$| zu8sNn-sz(ZPHvo#T=q3S?GQ-WG`0WbUaY`kQd7RzugqGXbnB3~gc47RRf^a8s`e=x8e^xYEuSGYo2@mVcST306M!@D=1o!$h<$@jdmq))q%`BDSldJ_P; zyY*2}2w#8wx!4Y?s(8fv=*rqjsdD?ylY&g3A#nR*YNj#dD%ClG`(5aW$4cWa`9`x$6?>ney328hE^-f0NC5eWW0|F;C7jkL*S+yP6xke_Uv^be zZ@JAQH9rYqMfp!E-cYm}37B`7!;&FQ-1PrNj^{~Z(}FX&Yq&x&gG7v!T;HI#%llO;$%i>Ln$ zr{yOb(wLa+Cl2p|waEnqS#M#m|24(U8TQVYqqIW!*=9;Qess6;MsIh;dW>L{xRd05 zTvt8|PTax-RM2gTh)`<(b9gqzGigz8q52=XYb;D6J}q>xh6c0eFN^9*!>gMFfHxf7 zKa{M;85rIK#k%g5`tMOG=j8=A`K;AXOnH@EGh-dMlTT#ko_Ik9+uHs7rTEpAQdcX) zzd89?#Eu2SKT>eQ$CwV!_AGiF(TgEgWw<^=j`FZXAox_(bk^Nr*qs(U!fm7%2JSc${C{8s$te#O))) z+^DT06UNHc(iHLM5Em2`y>Wc6kOZ3O=Um-471`BPr39iNyB?Z|)(Bm|AM)NxsPayO zbUM|ucK=NDH^P!m!;*wNA6RU0dHwqJc|A>5hyaKTB0D1nYOf|VFyHM^owEjhh2y`# znZj+q)@)P#vHnvw>XWEn2Dj&$%IxkK4i$goqMePS?75WvX@BPFtS{Tk;x;%NZDVLnB-bl17O!AeB|O=r3U< zoTMYU8IcOkT^^^)!{b?^XvJ{7Ljh`~m0~h(LsGA@8}oVj0rWMEt7sjMJ<@}#Se?p7 z;7-&@bkng$G9WqRtq1I|$z<9EQm2ZToHq%Rx^2}#bOG|laNy`nd1B@3dKKb?TRWOD zG=-vs`*au53M}#Io#WxN;}6I%;Gr@MExj?w$x_@p{tj4KEq6A&G=8tLcPp%SA%3G> z%;RxQ$`pHOp`bv>%j~^cFh&92+$?yU{`r1CAlRPh@KE_!l=RQt$ZKlv2C4vgwl#H) zjkd*65_r801rQ#yIy93hlKVpBz0`pn&y)$}b1FRiS0mIys`~mNbg)!T0~rlRc5^zq zw7$Mluos?`v~5-Srh_?M|JJ6^7Z_jaXy#s>L=V=PGu_cF$*>P}&}8?8gRof?$(e;q zAHnYG)KyKR=-=YqfU+mp7{m$DD)P#S-g5qf4$t&sBG4t8GFVZ?+U|y5>$(gZ5JqwI zTZ?Mck;E;Ja?VXer5BE+pVO>ci6?BJkMFRsmd|cKY4-3vzjBPHGk%{XFtUcGO z5?ueDrx6?yW9@bQ(pS?Jt7vVIM}jGd$~2l!1}rnoIJS)H7=XPBq52aF#@QjMSZcM4 ze73hS*GeUW!~U6bNeyl}Bw-#>ltGvGj+76e+RyhdkXqU0fD9U}-v~S6yo6WK!QRWD z^YdDtJ4&J!FBxP+Mt-U&f5RvC13%SR4!Y6*!NiklPg+`h4$BaI^m39=kJ=|cHSj+; z3_T==D({;T%i}R#M2qL{>$<+~&{hVUgHF{Z&8| zbS$hQ_*m8Sa-5z$b}ZfpmWWn#D8i9-&|VQ&17m%mrI)GsspPDo zBU6MdZ*ATlS&D19i9V``V#ix-jy+8Y-Yi6F0@Tm>~q zda)T17}hBLxXh8D3TwSc;W$}NyJrfW@1IPqVseWfULx;W7(2m_eRMsfXn z+6|ito`9zz{sOrvZBsRc53d=S2;~b3A|`&XXA)-1qo9^(aEi~XwQCzvBOFX~9v-BB z4^OSjV);6A?d_yrj#>}?NZo4~>KOAqc}9Hj*T~`eF|X$H5#gRYWaT9LVn4Ltb4}a{ z`|F_K4NQmPd*(l@9i|VDOcX%6)f$Po`MR(HDXGJ5g^i!CCug$x_KxDKw3^D??^0$( zc0O&*s5&BPY(tJi@YM`lx3*X%wQH(ozbVsrizgAGY3zossoSTUUDaPP>?KY{=yi46 z14%jgMP2FJX~cg%ShO>v{JYeTb$Rziw1B__gmp~Lcx`R-rLo0lj_KX7M&@cS)4)~OD($V zK5^IerN=0p)l_9ZAQ#wlG|cz&UCV3sGi(TQ)e=Uxt|%EPPg=4jgB*1Jh? z#J)K?Y(f=!f#$r_K-SjZle^INBvBL^_>uH^4i}5a>48yjK8+DP>`*|8>SpB>rMy48H}s) zP~Q!iJakYEuNq!nU2XigzqI)Px>FrSTOO53%E`fvm|hovx__N@-$0zFI@T`0KPX6< zAr}iJvV%UKH9Lq&kt`m;KkMsRmG9x<;Yn&H?ig&7(u;p~^xWLo{J$u7)3hqXX3g6C zcdTfij>?XFfIm(vZOKG$F_zqCcKo_Mo=}iiXG*>xsjgzR9Au>x_8ZBU7d>q!s^zDk zHb6;Cyn0pF90cs=HBxmd8Yd7hIr@omp`)WD*h?tm<2G@M#6cmkX zZ0`)?Vq=Tz>ZVR9-E$DP>fLH9)upAm;rU%qd5c`2i))fpOxVm+$4BQB;rR$AweNW7 z@9ghc-5T``92+ftUCFY(;$BwCi1FNUYLJNaxq`8c>0J7~fo|F#zwOo;PwOs9XpZlt z;u}-1KqF0BXF+=wD_El1W#0?Vh2)c(djfPx5Fe6Ie(&JGhGfD0GH7P^OG}4lE@OAG zYSV$7{5Qm$CdY21;Yhlnx4%&06P3nZ&?pkX+2Kjns>l~+XC@|YX`zooylKrpk7L+2 zG0H4)d!8D#qhdj=72?Rf?LK{4|As5^*?_4gZXUbfDcXPF~*524Mf=O7KfDe}9^> zF-IOXJ^P-RXh{x&S@Z-&O*1Lz?!GXRm%LUe)j}SUlj5Ln>TB!k57&%ZhhTT^@x5y5 z!V~k6?O6_y*&EMNa&h6Vru^#fFM+)5lh@Ls2Pp{^fg9NWJICijL7rf-nREdE?7^;# zFgCsbVPsEzF58S+UfHn2C#p0CDwN=PrKj$a9(-0=R+pC-_~+02W{ujnTEzn&;*!F8^!5zZ?$Nd{7~6-C&+Iy+XLBZ?^+km0K7Fvhkx^xcNT>VJ zKjH9jkTm7yCuPbUPd{+rG@<_&5URgP#Jel-X z>$sZA!H-S|C)=gx-`#*-TFS7Mi^8GqlG1t2t3s#d~nG^T$9)Pi!{d!$Z~+Cbf(*95xgVbprDy)&sUNZpPE>iv(KvUoSv`y4$v zIk|IGxAuB40D~mre|tj0AE>P0NqqktsbWfoXa5_IgpL691;-Q3?N4PiyzC!XD9DeZ Mtg1}4lv&XK1DNph-~a#s delta 11749 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 Date: Wed, 15 Jul 2015 08:17:45 -0400 Subject: [PATCH 30/32] Rename proc updateiocn now updateglow --- code/modules/mob/living/simple_animal/constructs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 007288ed7b8..df9c9171c6a 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -33,7 +33,7 @@ real_name = name for(var/spell in construct_spells) AddSpell(new spell(src)) - updateicon() + updateglow() /mob/living/simple_animal/construct/Die() ..() @@ -329,7 +329,7 @@ ////////////////Glow//////////////////// -/mob/living/simple_animal/construct/proc/updateicon() +/mob/living/simple_animal/construct/proc/updateglow() overlays = 0 var/overlay_layer = LIGHTING_LAYER + 1 if(layer != MOB_LAYER) From 2b0ea0524f32d9517eb151b586d26bc3638914d2 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Wed, 15 Jul 2015 17:22:56 +0200 Subject: [PATCH 31/32] gotta go fast! --- code/__DEFINES/lighting.dm | 1 - code/game/turfs/turf.dm | 8 ---- code/modules/lighting/light_source.dm | 49 +++++------------------ code/modules/lighting/lighting_overlay.dm | 10 +---- code/modules/lighting/lighting_system.dm | 28 +------------ code/modules/lighting/lighting_turf.dm | 27 ------------- 6 files changed, 12 insertions(+), 111 deletions(-) diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 3a33365efd4..dbb34def5b6 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -5,7 +5,6 @@ #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone #define LIGHTING_TRANSITIONS 1 // smooth, animated transitions, similar to /tg/station -#define LIGHTING_RESOLUTION 1 // resolution of the lighting overlays, powers of 2 only, max of 32 #define LIGHTING_LAYER 10 // drawing layer for lighting overlays #define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 1d212cdc7f6..5631b55820b 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -237,11 +237,7 @@ var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting var/list/old_affecting_lights = affecting_lights - #if LIGHTING_RESOLUTION == 1 var/old_lighting_overlay = lighting_overlay - #else - var/old_lighting_overlay = lighting_overlays - #endif if(air_master) air_master.remove_from_active(src) @@ -255,11 +251,7 @@ for(var/turf/space/S in range(W,1)) S.update_starlight() - #if LIGHTING_RESOLUTION == 1 lighting_overlay = old_lighting_overlay - #else - lighting_overlays = old_lighting_overlay - #endif affecting_lights = old_affecting_lights if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) diff --git a/code/modules/lighting/light_source.dm b/code/modules/lighting/light_source.dm index 854fddcc2ce..e23d53cf21f 100644 --- a/code/modules/lighting/light_source.dm +++ b/code/modules/lighting/light_source.dm @@ -116,11 +116,7 @@ /datum/light_source/proc/falloff(atom/movable/lighting_overlay/O) #if LIGHTING_FALLOFF == 1 // circular - #if LIGHTING_RESOLUTION == 1 . = (O.x - source_turf.x)**2 + (O.y - source_turf.y)**2 + LIGHTING_HEIGHT - #else - . = (O.x - source_turf.x + O.xoffset)**2 + (O.y - source_turf.y + O.yoffset)**2 + LIGHTING_HEIGHT - #endif #if LIGHTING_LAMBERTIAN == 1 . = CLAMP01((1 - CLAMP01(sqrt(.) / max(1,light_range))) * (1 / (sqrt(. + 1)))) @@ -129,11 +125,7 @@ #endif #elif LIGHTING_FALLOFF == 2 // square - #if LIGHTING_RESOLUTION == 1 . = abs(O.x - source_turf.x) + abs(O.y - source_turf.y) + LIGHTING_HEIGHT - #else - . = abs(O.x - source_turf.x + O.xoffset) + abs(O.y - source_turf.y + O.yoffset) + LIGHTING_HEIGHT - #endif #if LIGHTING_LAMBERTIAN == 1 . = CLAMP01((1 - CLAMP01(. / max(1,light_range))) * (1 / (sqrt(.)**2 + ))) @@ -145,16 +137,15 @@ /datum/light_source/proc/apply_lum() applied = 1 if(istype(source_turf)) - #if LIGHTING_RESOLUTION == 1 for(var/turf/T in dview(light_range, source_turf, INVISIBILITY_LIGHTING)) if(T.lighting_overlay) var/strength = light_power * falloff(T.lighting_overlay) if(!strength) //Don't add turfs that aren't affected to the affected turfs. continue - effect_r[T.lighting_overlay] = round(lum_r * strength, LIGHTING_ROUND_VALUE) - effect_g[T.lighting_overlay] = round(lum_g * strength, LIGHTING_ROUND_VALUE) - effect_b[T.lighting_overlay] = round(lum_b * strength, LIGHTING_ROUND_VALUE) + effect_r += round(lum_r * strength, LIGHTING_ROUND_VALUE) + effect_g += round(lum_g * strength, LIGHTING_ROUND_VALUE) + effect_b += round(lum_b * strength, LIGHTING_ROUND_VALUE) T.lighting_overlay.update_lumcount( round(lum_r * strength, LIGHTING_ROUND_VALUE), @@ -162,48 +153,28 @@ round(lum_b * strength, LIGHTING_ROUND_VALUE) ) - if(!T.affecting_lights) - T.affecting_lights = list() - - T.affecting_lights += src - effect_turf += T - - #else - for(var/turf/T in dview(light_range, source_turf, INVISIBILITY_LIGHTING)) - for(var/atom/movable/lighting_overlay/L in T.lighting_overlays) - var/strength = light_power * falloff(L) - - effect_r[L] = round(lum_r * strength, LIGHTING_ROUND_VALUE) - effect_g[L] = round(lum_g * strength, LIGHTING_ROUND_VALUE) - effect_b[L] = round(lum_b * strength, LIGHTING_ROUND_VALUE) - - L.update_lumcount( - round(lum_r * strength, LIGHTING_ROUND_VALUE), - round(lum_g * strength, LIGHTING_ROUND_VALUE), - round(lum_b * strength, LIGHTING_ROUND_VALUE) - ) + else + effect_r += 0 + effect_g += 0 + effect_b += 0 if(!T.affecting_lights) T.affecting_lights = list() T.affecting_lights += src effect_turf += T - #endif /datum/light_source/proc/remove_lum() applied = 0 + var/i = 1 for(var/turf/T in effect_turf) if(T.affecting_lights) T.affecting_lights -= src - #if LIGHTING_RESOLUTION == 1 if(T.lighting_overlay) - T.lighting_overlay.update_lumcount(-effect_r[T.lighting_overlay], -effect_g[T.lighting_overlay], -effect_b[T.lighting_overlay]) - #else - for(var/atom/movable/lighting_overlay/L in T.lighting_overlays) - L.lighting_overlay.update_lumcount(-effect_r[L], -effect_g[L], -effect_b[L]) - #endif + T.lighting_overlay.update_lumcount(-effect_r[i], -effect_g[i], -effect_b[i]) + i++ effect_r.Cut() effect_g.Cut() diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index d40997a6fcd..0a20a7977c2 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -9,16 +9,12 @@ invisibility = INVISIBILITY_LIGHTING blend_mode = BLEND_MULTIPLY color = "#000000" + icon_state = "light1" var/lum_r var/lum_g var/lum_b - #if LIGHTING_RESOLUTION != 1 - var/xoffset - var/yoffset - #endif - var/needs_update /atom/movable/lighting_overlay/New() @@ -107,11 +103,7 @@ var/turf/T = loc if(istype(T)) - #if LIGHTING_RESOLUTION == 1 T.lighting_overlay = null - #else - T.lighting_overlays -= src - #endif for(var/datum/light_source/D in T.affecting_lights) //Remove references to us on the light sources affecting us. D.effect_r -= src D.effect_g -= src diff --git a/code/modules/lighting/lighting_system.dm b/code/modules/lighting/lighting_system.dm index 6d5e1b9bbd7..418190ca7a2 100644 --- a/code/modules/lighting/lighting_system.dm +++ b/code/modules/lighting/lighting_system.dm @@ -5,28 +5,15 @@ // duplicates lots of code, but this proc needs to be as fast as possible. /proc/create_lighting_overlays(zlevel = 0) - var/state = "light[LIGHTING_RESOLUTION]" var/area/A if(zlevel == 0) // populate all zlevels for(var/turf/T in world) if(T.dynamic_lighting) A = T.loc if(A.lighting_use_dynamic) - #if LIGHTING_RESOLUTION == 1 var/atom/movable/lighting_overlay/O = new(T) - O.icon_state = state T.lighting_overlay = O - #else - for(var/i = 0; i < LIGHTING_RESOLUTION; i++) - for(var/j = 0; j < LIGHTING_RESOLUTION; j++) - var/atom/movable/lighting_overlay/O = new(T) - O.pixel_x = i * (32 / LIGHTING_RESOLUTION) - O.pixel_y = j * (32 / LIGHTING_RESOLUTION) - O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.icon_state = state - T.lighting_overlays += O - #endif + else for(var/x = 1; x <= world.maxx; x++) for(var/y = 1; y <= world.maxy; y++) @@ -34,18 +21,5 @@ if(T.dynamic_lighting) A = T.loc if(A.lighting_use_dynamic) - #if LIGHTING_RESOLUTION == 1 var/atom/movable/lighting_overlay/O = new(T) - O.icon_state = state T.lighting_overlay = O - #else - for(var/i = 0; i < LIGHTING_RESOLUTION; i++) - for(var/j = 0; j < LIGHTING_RESOLUTION; j++) - var/atom/movable/lighting_overlay/O = new(T) - O.pixel_x = i * (32 / LIGHTING_RESOLUTION) - O.pixel_y = j * (32 / LIGHTING_RESOLUTION) - O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.icon_state = state - T.lighting_overlays += O - #endif \ No newline at end of file diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 8bb30c4c707..46596bc52f4 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -1,47 +1,20 @@ /turf var/list/affecting_lights - #if LIGHTING_RESOLUTION == 1 var/atom/movable/lighting_overlay/lighting_overlay - #else - var/list/lighting_overlays[0] - #endif /turf/proc/reconsider_lights() for(var/datum/light_source/L in affecting_lights) L.force_update() /turf/proc/lighting_clear_overlays() - #if LIGHTING_RESOLUTION == 1 if(lighting_overlay) qdel(lighting_overlay) - #else - for(var/atom/movable/lighting_overlay/L in lighting_overlays) - qdel(L) - #endif /turf/proc/lighting_build_overlays() - #if LIGHTING_RESOLUTION == 1 if(lighting_overlay) - #else - if(lighting_overlays.len) - #endif return - var/state = "light[LIGHTING_RESOLUTION]" var/area/A = loc if(A.lighting_use_dynamic) - #if LIGHTING_RESOLUTION == 1 var/atom/movable/lighting_overlay/O = new(src) - O.icon_state = state lighting_overlay = O - #else - for(var/i = 0; i < LIGHTING_RESOLUTION; i++) - for(var/j = 0; j < LIGHTING_RESOLUTION; j++) - var/atom/movable/lighting_overlay/O = new(src) - O.pixel_x = i * (32 / LIGHTING_RESOLUTION) - O.pixel_y = j * (32 / LIGHTING_RESOLUTION) - O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.icon_state = state - lighting_overlays += O - #endif \ No newline at end of file From 04204c2d30ca061b353ec3a93be66b7d5f8cb702 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 15 Jul 2015 18:35:29 -0400 Subject: [PATCH 32/32] forgot a thing --- code/game/machinery/computer/power.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index 4710113d2fe..4dcdef5f4cc 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -8,6 +8,7 @@ use_power = 2 idle_power_usage = 20 active_power_usage = 80 + light_color = LIGHT_COLOR_ORANGE circuit = /obj/item/weapon/circuitboard/powermonitor var/datum/powernet/powernet = null