diff --git a/_maps/map_files/tgstation.2.1.3.dmm b/_maps/map_files/tgstation.2.1.3.dmm
index f6cb304b217..de268ca2db9 100644
--- a/_maps/map_files/tgstation.2.1.3.dmm
+++ b/_maps/map_files/tgstation.2.1.3.dmm
@@ -2927,7 +2927,7 @@
"beo" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bep" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"beq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
-"ber" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/light_switch{pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/wood,/area/security/vacantoffice)
+"ber" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/light_switch{pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/wood,/area/security/vacantoffice)
"bes" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor{icon_state = "bot"},/area/atmos)
"bet" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/atmos)
"beu" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/atmos)
@@ -3277,7 +3277,7 @@
"bla" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"blb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"},/area/medical/sleeper)
"blc" = (/obj/machinery/power/apc{dir = 8; name = "Medbay Security APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/checkpoint/medical)
-"bld" = (/obj/structure/closet/l3closet/general,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
+"bld" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/closet/wardrobe/white/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"ble" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/checkpoint/medical)
"blf" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/morgue)
"blg" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/assembly/chargebay)
@@ -3312,7 +3312,7 @@
"blJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage)
"blK" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"blL" = (/obj/structure/closet/emcloset,/obj/machinery/alarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/quartermaster/storage)
-"blM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plating/airless,/area/space)
+"blM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos)
"blN" = (/obj/structure/closet/secure_closet/security,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint2)
"blO" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint2)
"blP" = (/obj/machinery/computer/security,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint2)
@@ -3643,7 +3643,7 @@
"bsc" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bsd" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bse" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bot"},/area/toxins/storage)
-"bsf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
+"bsf" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/space,/area/space)
"bsg" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/hallway/primary/aft)
"bsh" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"bsi" = (/obj/structure/table,/obj/item/weapon/storage/box/disks{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
@@ -3847,7 +3847,7 @@
"bvY" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/medical/sleeper)
"bvZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/turf/simulated/floor,/area/medical/sleeper)
"bwa" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor,/area/medical/sleeper)
-"bwb" = (/obj/structure/table,/turf/simulated/floor,/area/medical/sleeper)
+"bwb" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bwc" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Medbay Cryogenics"; dir = 2; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/turf/simulated/floor,/area/medical/sleeper)
"bwd" = (/obj/machinery/camera{c_tag = "Genetics Cloning"; dir = 4; network = list("SS13")},/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/storage/box/rxglasses{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bwe" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -4049,7 +4049,7 @@
"bzS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bzT" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
"bzU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bzV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/central)
+"bzV" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor,/area/medical/sleeper)
"bzW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bzX" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=HOP"; location = "CHE"},/turf/simulated/floor,/area/hallway/primary/central)
"bzY" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/central)
@@ -4484,7 +4484,7 @@
"bIl" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/obj/machinery/light,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bIm" = (/obj/structure/table/woodentable,/obj/item/weapon/pinpointer,/obj/item/weapon/disk/nuclear,/obj/item/weapon/storage/secure/safe{pixel_x = 35; pixel_y = 5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bIn" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain)
-"bIo" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
+"bIo" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/britcup{desc = "Kingston's personal cup."},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bIp" = (/obj/structure/table/woodentable,/obj/item/weapon/hand_tele,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bIq" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bIr" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
@@ -4691,7 +4691,7 @@
"bMk" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "bot"},/area/atmos)
"bMl" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "bot"},/area/atmos)
"bMm" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "bot"},/area/atmos)
-"bMn" = (/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Medbay Foyer"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/food/drinks/britcup{desc = "Kingston's personal cup."},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"bMn" = (/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Medbay Foyer"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/cell_charger,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bMo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/atmos)
"bMp" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
"bMq" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
@@ -4872,9 +4872,9 @@
"bPJ" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = 15},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"bPK" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/simulated/floor,/area/atmos)
"bPL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/atmos)
-"bPM" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor,/area/atmos)
+"bPM" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Mix to Incinerator"; on = 0},/turf/simulated/floor,/area/atmos)
"bPN" = (/obj/machinery/atmospherics/binary/pump{dir = 0; name = "Air to Mix"; on = 0},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor,/area/atmos)
-"bPO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix Outlet Pump"; on = 0},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos)
+"bPO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos)
"bPP" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"bPQ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/space,/area/space)
"bPR" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
@@ -4983,7 +4983,7 @@
"bRQ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/quartermaster/office)
"bRR" = (/obj/machinery/computer/supplycomp,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/quartermaster/office)
"bRS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor,/area/quartermaster/office)
-"bRT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor,/area/hallway/primary/central)
+"bRT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/central)
"bRU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/medical/chemistry)
"bRV" = (/obj/structure/closet/wardrobe/chemistry_white,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bRW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
@@ -5003,7 +5003,7 @@
"bSk" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 5; initialize_directions = 12},/turf/simulated/floor,/area/atmos)
"bSl" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Unfiltered to Mix"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/turf/simulated/floor,/area/atmos)
"bSm" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 6},/area/atmos)
-"bSn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bSn" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix Outlet Pump"; on = 0},/turf/simulated/floor,/area/atmos)
"bSo" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/space,/area/space)
"bSp" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bSq" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5091,8 +5091,8 @@
"bTU" = (/obj/structure/table,/obj/item/device/assembly/igniter{pixel_x = -5; pixel_y = 3},/obj/item/device/assembly/igniter{pixel_x = 5; pixel_y = -4},/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = 6},/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = -1},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = 3},/turf/simulated/floor/engine,/area/toxins/misc_lab)
"bTV" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/toxins/misc_lab)
"bTW" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/toxins/misc_lab)
-"bTX" = (/obj/machinery/atmospherics/pipe/vent{dir = 2},/turf/simulated/floor/plating/airless,/area/space)
-"bTY" = (/turf/simulated/wall,/area/maintenance/incinerator)
+"bTX" = (/obj/machinery/atmospherics/valve{name = "Mix to Space"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bTY" = (/obj/machinery/power/turbine{luminosity = 2},/obj/structure/cable/yellow,/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"bTZ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/aft)
"bUa" = (/obj/effect/landmark/start{name = "Cargo Technician"},/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor,/area/quartermaster/office)
"bUb" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk"; req_access_txt = "50"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/quartermaster/office)
@@ -5134,19 +5134,19 @@
"bUL" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor/engine,/area/toxins/misc_lab)
"bUM" = (/turf/simulated/floor/plating,/area/toxins/misc_lab)
"bUN" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bUO" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
+"bUO" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bUP" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
-"bUQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bUR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bUS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Gas Pump"; on = 1},/turf/simulated/floor/plating/airless,/area/space)
-"bUT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bUU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
-"bUV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bUW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/sign/deathsposal{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bUX" = (/obj/machinery/atmospherics/pipe/tank/toxins{volume = 3200},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bUY" = (/obj/machinery/atmospherics/pipe/tank/oxygen{volume = 3200},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bUZ" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bVa" = (/obj/machinery/power/apc{dir = 8; name = "Incinerator APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bUQ" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
+"bUR" = (/obj/structure/sign/fire{pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
+"bUS" = (/obj/machinery/door/poddoor{id = "turbinevent"; name = "Turbine Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bUT" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bUU" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bUV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bUW" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bUX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bUY" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Incinerator to Output"; on = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bUZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint)
+"bVa" = (/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Waste Out"; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bVb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
"bVc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor,/area/quartermaster/miningdock)
"bVd" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5202,11 +5202,11 @@
"bWb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/toxins/misc_lab)
"bWc" = (/obj/machinery/camera{c_tag = "Testing Firing Range"; dir = 8; network = list("SS13","RD"); pixel_y = -22},/turf/simulated/floor/plating,/area/toxins/misc_lab)
"bWd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint2)
-"bWe" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
-"bWf" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bWg" = (/obj/machinery/embedded_controller/radio/access_controller{exterior_door_tag = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; interior_door_tag = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = -26; pixel_y = 6; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -24; pixel_y = -6},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWh" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWi" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWe" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"bWf" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/incinerator)
+"bWh" = (/turf/simulated/wall,/area/maintenance/incinerator)
+"bWi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bWj" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft)
"bWk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft)
"bWl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
@@ -5252,15 +5252,15 @@
"bWZ" = (/obj/structure/stool/bed/chair/office/light,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab)
"bXa" = (/obj/structure/stool{pixel_y = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bXb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/asmaint)
-"bXc" = (/obj/machinery/door/poddoor{id = "disvent"; name = "Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bXd" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 4; frequency = 1443; id = "air_in"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bXc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/asmaint)
+"bXd" = (/obj/machinery/power/apc{dir = 8; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"bXe" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor{icon_state = "arrival"; dir = 10},/area/atmos)
-"bXf" = (/obj/machinery/atmospherics/binary/pump{dir = 8; on = 1},/obj/machinery/access_button{command = "cycle_exterior"; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -22; pixel_y = -10},/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bXg" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bXh" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/valve{dir = 4; name = "Incinerator to Space"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bXi" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/atmos)
"bXj" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor,/area/atmos)
-"bXk" = (/obj/machinery/atmospherics/portables_connector/visible{dir = 8},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXk" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bXl" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/aft)
"bXm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft)
"bXn" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
@@ -5311,13 +5311,13 @@
"bYg" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 8; icon_state = "rightsecure"; name = "Armory Desk"; req_access_txt = "3"},/obj/machinery/door/window/eastleft{name = "Reception Desk"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/ai_monitored/security/armory)
"bYh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"bYi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bYj" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; on = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bYk" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access_txt = "12"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bYl" = (/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bYm" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bYn" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bYo" = (/obj/effect/landmark{name = "blobstart"},/mob/living/simple_animal/mouse,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bYp" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bYj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bYk" = (/obj/machinery/atmospherics/pipe/simple/insulated,/obj/machinery/embedded_controller/radio/access_controller{exterior_door_tag = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; interior_door_tag = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bYl" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bYm" = (/obj/machinery/door_control{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "12"},/obj/machinery/door_control{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bYn" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bYo" = (/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bYp" = (/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bYq" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bYr" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bYs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
@@ -5366,15 +5366,15 @@
"bZj" = (/obj/machinery/door/airlock/glass_research{name = "Firing Range"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/toxins/misc_lab)
"bZk" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/toxins/misc_lab)
"bZl" = (/obj/structure/closet/crate,/obj/item/clothing/under/color/lightpurple,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bZm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bZn" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bZo" = (/obj/machinery/atmospherics/binary/pump{dir = 4; on = 1},/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 24; pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bZp" = (/obj/machinery/door_control{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "12"},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bZm" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
+"bZn" = (/obj/structure/lattice,/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Incinerator Output Pump"; on = 1},/turf/space,/area/space)
+"bZo" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Incinerator Interior Airlock"; req_access_txt = "12"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator)
+"bZp" = (/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
"bZq" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/space,/area/space)
-"bZr" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bZr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"bZs" = (/obj/machinery/atmospherics/valve/open{tag = "icon-mvalve_map (EAST)"; icon_state = "mvalve_map"; dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/medical/virology)
"bZt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bZu" = (/obj/machinery/atmospherics/portables_connector/visible{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bZu" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/space,/area/space)
"bZv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft)
"bZw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft)
"bZx" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
@@ -5397,7 +5397,7 @@
"bZO" = (/obj/structure/target_stake,/turf/simulated/floor/plating,/area/toxins/misc_lab)
"bZP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/toxins/misc_lab)
"bZQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bZR" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"bZR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bZS" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bZT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/disposal)
"bZU" = (/obj/structure/closet/firecloset,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/atmos)
@@ -5498,7 +5498,7 @@
"cbL" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor,/area/atmos)
"cbM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cbN" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft)
-"cbO" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cbO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator)
"cbP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab)
"cbQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor,/area/toxins/misc_lab)
"cbR" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 3; pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod4/station)
@@ -5599,7 +5599,7 @@
"cdI" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"cdJ" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"cdK" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cdL" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cdL" = (/obj/machinery/atmospherics/binary/pump{dir = 1; on = 1},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine,/area/maintenance/incinerator)
"cdM" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/toxins/misc_lab)
"cdN" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/misc_lab)
"cdO" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engine/break_room)
@@ -5699,9 +5699,9 @@
"cfE" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"cfF" = (/obj/machinery/atmospherics/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor,/area/atmos)
"cfG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plating,/area/atmos)
-"cfH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cfI" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cfJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 0},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cfH" = (/obj/machinery/atmospherics/binary/pump{dir = 2; on = 1},/obj/machinery/access_button{command = "cycle_exterior"; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 8; pixel_y = -24},/obj/machinery/light/small{dir = 8},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/engine,/area/maintenance/incinerator)
+"cfI" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Incinerator Exterior Airlock"; req_access_txt = "12"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator)
+"cfJ" = (/obj/machinery/door/poddoor{id = "auxincineratorvent"; name = "Auxiliary Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"cfK" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/maintenance/asmaint)
"cfL" = (/obj/structure/shuttle/engine/heater{color = "#FFFF00"; dir = 4; icon_state = "heater"},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 8},/turf/simulated/floor/plating/airless{color = "#FFFF00"},/area/space)
"cfM" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5785,7 +5785,7 @@
"chm" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chn" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/turf/simulated/floor{icon_state = "arrival"},/area/atmos)
"cho" = (/obj/machinery/camera{c_tag = "Atmospherics South East"; dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Air Outlet Pump"; on = 1},/turf/simulated/floor{icon_state = "arrival"; dir = 6},/area/atmos)
-"chp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"chp" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; luminosity = 2; on = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"chq" = (/obj/machinery/atmospherics/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"chr" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
"chs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/port)
@@ -5954,7 +5954,7 @@
"ckz" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"ckA" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/turf/simulated/wall/r_wall,/area/atmos)
"ckB" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/turf/simulated/wall/r_wall,/area/atmos)
-"ckC" = (/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Waste Out"; on = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"ckC" = (/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ckD" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
"ckE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ckF" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/mineral/bananium/airless,/area/space)
@@ -7070,7 +7070,7 @@
"cFX" = (/obj/structure/sign/map/left{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_left"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership)
"cFY" = (/obj/structure/sign/map/right{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_right"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership)
"cFZ" = (/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor,/area/hallway/secondary/construction{name = "\improper Garden"})
-"cGa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/atmos)
+"cGa" = (/obj/structure/stool,/obj/effect/decal/cleanable/cobweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cGb" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cGc" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 10},/area/syndicate_mothership)
"cGd" = (/turf/unsimulated/wall,/area/wizard_station)
@@ -7343,7 +7343,7 @@
"cLk" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating/airless,/area/tcommsat/chamber)
"cLl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
"cLm" = (/turf/simulated/floor/airless,/area/tcommsat/chamber)
-"cLn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/structure/table,/obj/item/weapon/paper,/turf/simulated/floor/airless,/area/tcommsat/chamber)
+"cLn" = (/obj/structure/table,/obj/item/weapon/paper,/turf/simulated/floor/airless,/area/tcommsat/chamber)
"cLo" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/tcommsat/chamber)
"cLp" = (/obj/structure/computerframe,/turf/simulated/floor/airless,/area/tcommsat/chamber)
"cLq" = (/obj/structure/table,/turf/simulated/floor/airless,/area/tcommsat/chamber)
@@ -8919,7 +8919,7 @@
"dpA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/atmos)
"dpB" = (/obj/machinery/atmospherics/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/medical/virology)
"dpC" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/medical/virology)
-"dpD" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"dpD" = (/obj/structure/sign/fire{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"dpE" = (/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/atmos)
"dpF" = (/obj/structure/table,/obj/item/clothing/glasses/meson,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/engine/break_room)
"dpG" = (/obj/machinery/bot/secbot/pingsky,/turf/simulated/floor/carpet,/area/turret_protected/aisat_interior)
@@ -9198,6 +9198,66 @@
"duT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"duU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"duV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating/airless,/area/space)
+"duW" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"duX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"duY" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"duZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 0; pressure_checks = 2; pump_direction = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"dva" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"dvb" = (/obj/machinery/power/compressor{comp_id = "incineratorturbine"; dir = 1; luminosity = 2},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"dvc" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall,/area/maintenance/incinerator)
+"dvd" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/wall,/area/maintenance/incinerator)
+"dve" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"dvf" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "atmospherics mix pump"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"dvh" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvi" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"dvj" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/trunk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"dvk" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvl" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvm" = (/obj/effect/landmark{name = "blobstart"},/mob/living/simple_animal/mouse,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvn" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/incinerator)
+"dvo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvp" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/portables_connector/visible{dir = 4; name = "input gas connector port"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvq" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"dvr" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvs" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvt" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvu" = (/obj/machinery/atmospherics/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvv" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
+"dvy" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
+"dvB" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
+"dvC" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvD" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/sign/deathsposal{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvE" = (/obj/machinery/atmospherics/portables_connector/visible,/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvF" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/portables_connector/visible,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvG" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/plating/airless,/area/space)
+"dvH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/aft)
+"dvI" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/aft)
+"dvJ" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/aft)
+"dvK" = (/obj/machinery/atmospherics/pipe/manifold4w/general,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvL" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvM" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvN" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvP" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvQ" = (/obj/machinery/atmospherics/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvR" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Port"; on = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvS" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "12"},/obj/structure/barricade/wooden{name = "wooden barricade (CLOSED)"},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvT" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/aft)
+"dvU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/aft)
+"dvV" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Space"; on = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/aft)
+"dvW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plating,/area/maintenance/aft)
+"dvX" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvY" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "plasma tank pump"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dvZ" = (/obj/machinery/atmospherics/pipe/tank/toxins{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dwa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Space"; on = 1},/turf/simulated/floor/plating/airless,/area/space)
+"dwb" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dwc" = (/obj/machinery/atmospherics/pipe/manifold4w/general{level = 2},/obj/machinery/meter,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"dwd" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
(1,1,1) = {"
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
@@ -9313,7 +9373,7 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGdaCFaCFaGeaCFaEbaCFaEbaGfaEbaCFaEbaCFaEcaEdazdaxZbdiaAfaAfaVFbnobnpaVCaAfayeayeayeayeaVDazrazraVSayebnAaVRaBGaBGaBGaGtaBGaBGaBGaGuaAlahlazzazzaEyaVNaEyazzazzahlaxbaGyaxgaVLaVMaVIaVJaVKaxgapsaVHawhaVGaTDaDmaDmaDmaBUaGKawhaGLaGMawhaCaawhaGNaGOaGPabIamrabIabIabIabIabIbnqaGSayFaGTazSayFaGUayFaGVayFaGWayFaWvaWwaUNaAKaWxaWyaWJaWLaWlaWlaWmaWlaWlaWnaWlaWoaWpaBaaBaaBaaBaaWqaWsaWraWuaWtalvaIRaIRaIRaIRapBaDOaHvaHwaHxaHyaHzaHAaDOaHBaWkaDRaHDaVVaVUaVZaFTaHHaFXawaaWjaDVaDVaDVahjahjahjahjahjahjahjahjahjahlaGbaGbaGbaGbaGbaGbaGbaGbaGbdsiahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaCLaHJaDZaEaaCFaEbaCFaEbaCFaEbaCFaEbaCFaEcaEdazdaHKaCwaBAaBtaBtaBwauZawNavbavdavcavaayeaukazrazraqCayeaBsaBzaBGaHXaHYaHZaIaaIbaIcaIdaAlahlahjahlaIfauYaIfahlahjahlaxbaGyaxgaDeaIiaIjaIkaIlaxgapsapqawhaImaInaDmaDmaDmaIoaIpawhahlahlaIqaIraIsaItaIuaIvaIwaIxaIqahlahlaTkaIzaAoaIBayFaICazSazSazSaCeazSazSazSayFaAKauXauVaAKaAKayfauUaIIaIIauTaMZaILaIIaIMaIIaINauRaINauQaINaIQaIRaIRauPaIRaIRaIRaIRaCkaKwaIRapBaDOaHwaIVaIWaIXaIYaIZaDOauLauAauiaumaupausaueaufaugauhaucaudaJhaJiaJjahlahlahlahlahlahlahjahlahjahlaGbaGbaGbaGbaGbaGbaGbaGbaGbahjahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaJkaJlaBjaCEaCFaCFaCFaJmaCFaCFaJnaCFaCFaCLaJoawLaxZawNaJpaJqaJqaJqaJqaJqaJqaJqaJrawNayeapraubaprayeayeaBqaJvaJwaAkaAkaAkaAkaJuaJxaJyaAlaJzaJBaJBaJCatWaJEaJBaJBaJFaxbaBraxgatZaxgaJIaJJaJKaxgazGavWawhawhawhaJLaJMaJLawhawhawhaJOaJPaJQaJRaIuaIuaIuaIuaIuaJSaJTaJPaJUaTkaJVaAoaJWayFayFayFayFayFayFayFayFayFayFaFjatQatBatAatCaPuatjaKeaIIatuaMZaKjatVaKjaINaKkatUaINatSaINaKnaKoaKpatRasXasXasXasVasTaMaaIRapBaDOasSaIVaKAaIXaIYaKBaDOaKCasRathatiatfatgatdateaVlatcasZatbaKIaKJaKKahlahjahlahlahlahlahjahlahjahlaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaJkaBjaBkaBjaBjaKLaBmaBjaBjaBkaJlaKMaqfaKNawNavJaKOaKOaKPaKOaKQarkaKRaKSawNaGgaMzaKYaKYaKXaKYaEpaKZaKYaKYaKYaKYaKYaKYaKYaLaaLbawCawDaLeaLeawBaLgaLeaLeaLeaLhaEnaLjawBaLeaLeaLeaLkaLlaLmaIuaLnaLoaIvaIwaIwaIwaItaIuaIuaLpaIuaLqaLraLsaLtaLuaLvaLwaLxaIuaIuaLybzVaEqaEWaLAaLCaLDaLEaLFaIuaLGaIuaAKaLHawraJYatQawpawoawnawmaqFdrhaIIawqaLLawjaLMaLNaINawlatUaLQaqAaINaIRaLSbgAawiaPSaLWawyawxawzaDCaIRapBaDOawAawtawsawwaMcaMfaDOaMgaMhaDRaHGaHGaHGaHGaDRaMiaMjasZatbaDVaDVaDVaMlaMlaMlaMmaMnaMoahjahlahjaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaJkaBjaBkaBjaBjaKLaBmaBjaBjaBkaJlaKMaqfaKNawNavJaKOaKOaKPaKOaKQarkaKRaKSawNaGgaMzaKYaKYaKXaKYaEpaKZaKYaKYaKYaKYaKYaKYaKYaLaaLbawCawDaLeaLeawBaLgaLeaLeaLeaLhaEnaLjawBaLeaLeaLeaLkaLlaLmaIuaLnaLoaIvaIwaIwaIwaItaIuaIuaLpaIuaLqaLraLsaLtaLuaLvaLwaLxaIuaIuaLybRTaEqaEWaLAaLCaLDaLEaLFaIuaLGaIuaAKaLHawraJYatQawpawoawnawmaqFdrhaIIawqaLLawjaLMaLNaINawlatUaLQaqAaINaIRaLSbgAawiaPSaLWawyawxawzaDCaIRapBaDOawAawtawsawwaMcaMfaDOaMgaMhaDRaHGaHGaHGaHGaDRaMiaMjasZatbaDVaDVaDVaMlaMlaMlaMmaMnaMoahjahlahjaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlavJaxYaMpaAbaAbaAbaAbaMqaxYavJaAdaqfaAeaMrazdaMsaMtaMuaMuaMvarkaMwaKSawgaMyaMzaweaMBaMCaMDaMEaMFaKYaKYaKYaKYaKYaKYaKYaLaaKYaMzaKYaKYaKYaDgaDfaCxaCxaCxaCxaDlaCxaEhaCxaCxaDkaMLaLlaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaLpaIuaMMaMNaMOaMPaMQaMRaMSaMTaIuaIuaLyaIuaIuaIuaIuaIuaIuaIuaIuaIuaMUaIuaAKaJYaJYaJYavGavfaveavkavgavoaQSaIIavtaMZavQaIIaIIaINaNbatUaNcaqAaNdaINaIRaIRaIRaIRaIRaIRavZaNgaNfaIRapBaDOaNhaHwavYavXaHwaNjaDOaDRaDRaDRaDRaDRaDRaNkaDRaFXaFXawaatbaNlaNmaDVaNnaNoafJaNqaNraNsahjahlahjaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjazbaqfazdatwazdaNtaNuaNvaNwazdatwaNxaNyaqfaxZawNazdaNzaNAaMuaMuaMvarkaNBaKSawNaMyaMzaKYaNDaNEaNEaNEaNFaNGaNHaNEaNIaNEaNEaNEaNJaNEaqSaNEaNEaNEaqQaqPatKasaasaaqRaqOaqMaqKaNUaKYanLaMLaLlaIuaNVaIuaNWaNWaNWaNWaNWaNWaNWaNWaNXaNWaNWaNWaNWaNWaNWaNWaNWaNWaNWaNWaNYaNWaNWaNWaNWaNWaNWaNWaNWaIuaIuaIuaAKaNZaNZaNZaNZaNZaqIaqGaPuaqFaqdaIIaqEaOeaqyaIIaOfaINaqtaqpaqqaqAaOjaINaIRaOkaqzaOmaOnaOmaqnaOoaOpaIRapBaDOaOqaOqapHapFaOtaOtaOuaDOaOvaOwaOxaDVaOyaOzaOAaFXaFXaqjaqmaDVaOCaDVaODaqhaOFaOFaOGaOHaMnaMnaOIaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlarkawLaxYawLaxZawNawNayaawLaxYawLaOJaOKaOLawNawLaOMaOMaKPaOMaKQarkaONaKSawNaOOaOOaOOaOQaOOaORaORaORaORaORaOSaOTaORaOUaORaORaORaOYaOWaOXaOWaqJapRaPaaKYaKYaPbapPaPdanjaKZaKYanLaPeaPeaIuaIuaIvaPfaJPaJPaPgaPgaPgaPgaPhaPiaPjaPkaPlaPmaPnaPmaPoaPmaPpaPkaPqaPiaPraPgaPgaPgaPgaJPaJPaPsaItaIuaIuaIIaoXaMXaKcaKcaKcaKcaKcaPuaQUaKcaIIapKaPzapNaINaINaINapLapMaINaINaINaINaIRaOmapOaPEaPEaPEapEaPFaOmaIRapBaDOaPHaHwapHapFaHwaHwaPIaDOaPJaPKaPLaDVaFXaPMaPNaPOaPOapIapJaPQaPRaDVafsaSEaOFaOEaOFaPWaPXaPXaPWaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
@@ -9332,7 +9392,7 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjazbaqfazcatwazdazeazfbfvbfwazdatwaziazjaqfazbarkbcRbfxbfybfybfybfzcdBcdxcdycaocaocczccCaXhaYvbfDaYybfEaXhbHpbHpaRCaRCceNceAcfzcfrcfzcfzcenaYHceqbHlaZWaZWcetbHmbHiaYNcdRbaZbaZcdSbfWbfXbeGaIubfYaYQbfZaYRbgbdtQbgcbGMaynbgfaYQahjbxycltcltcltboXbHgbHhahjaYWbgjbHcbHdbgmbaxbgnbaxbHfaYWaXVaIubgpbeVbgqbgrbgsbgtbgubeVbgvcGZbgwcfEbgybgybgybgzboLbjpbgCbfbbgDbgEbMfbgEbgEbgFbHsbfcbfgbHtbfgbfgbfgccNbgMbgMbgNbgMbgObgObflbgPbgQbgRbfldombgTdombflcmCbpOcmCbfqdolbgVdolbfqbgWbgXbfqbHrbLEaMmaMnbhaahjahlahjaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbaGbahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjawLbdYaAaaAbaAbaAbaAbaAcbdZawLahjahjahjahlbcRbhbbcRbhcbfybhdbZKbZTbiQbZGbZHbZIbZJcaAcaAcaAcaAcaAcaAcaKcaJcazcaocajcaiaYHaYHaYHaYHaYHaYHcbiaYHaYHaYHcbCbhobGPbGQcaYbaZbaZbQRbhtbeFbeGaIubhuaYQbhvaYRaYRaYRaYRbGMaynbhxaYQahjbxycltboTboUboWcltbxmahjaYWaLTbbubGNbhDbaxbeRbaxbaxaYWaXVaIuaIubeVbhKbAIbGXbhNbhObhPbgybhSbgybhRbgybgybhQbhTbhVbhUbhWbfbbhXbgEccybgEbhXbhYbgEbfcbhZcGObiabibbfgbGVbgMbidbiebifbigbigbflbihbiibijbikbilbimbinbflbGWblsbltbfqbiqbirbiqbisbitbitbfqbBBbLEahlahjahlahjahlahjahlaGbaGbaGbaGbaGbaGbaGbaGbaGbahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahjahjahlahlahlahlahlahjahjahlbcRbivbiwbixbiybiybizbiAbbZbhgaOOcjkcjlcjccjccjccjacjacjacjacjacjacjacjjcbCbiHbiIbMvbiKbiLbiMbRmbiOaYHbiPciKciLciNciNciWbaZbaZbQRbaZaYNbeGaIuaXDblZbMDbMCbMBbMAaYRbMEaynaYQaYQahjbxycltboUcltboUcltbxmahjaYWaYWbMybhBbjnbaxbjobMxbMwaYWaXVaIubmucjwcjBcjGcjNbjubjvbjwbgybMKbMLcjmbjAbjAbMIbMHbMJbhUbjFbfbbhXbgEccyblfbhXbMGbjGbfcbjHbjIbjJbjKbfgccNbgMbOvbOabOabNObNYbjQbNNbjSbjSbjSbNZbNxbNwbflbNpblsbNGbfqbNBbNgbNcbMWbkdbkebfqbBBbLEbgZbgZbgZbgZahjahjahjahjahjahjahjahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlahlahlahlahjahjahlahlahlahlahlahjahjahlbcRbkfbcRbkgbkhbkhbkibcRbkjbkkaOObklbkmbklbklbklbkmbklaOOaOOaYHaYHaYHcilcbCbiNbiNcikbiNbiNbiNbRmbiNbkpbkqcimcitcixbRhbRhbRhbRhciwciucivciBciyciEbLCbLnbLmbLpbLoaYRbGMaynaYQahjahjbxycltboWcmWboTbLXbxmahjahjaYWaYYbMdaYWaYWaYWaYWbMcaYWbkTaIuaIubeVbkUbAIbAJbhNbhObkWbgybqLbLfbkYbkZblabMnbfbblcbMhblebfbbhXbgEciJciHbhXbMebgEbfcbfgbfgbfgbfgbfgccNbgMdqNblhblibljblkblldsVblnblobloblpbxEbmTbflbMpblsbMqbfqblublvblwbKOblydtabfqbBBbPqceYblBblCblBahlahlahlahlahlahlahjahjahjahjahjahjahjdsiahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlahlahlahlahjahjahlahlahlahlahlahjahjahlbcRbkfbcRbkgbkhbkhbkibcRbkjbkkaOObklbkmbklbklbklbkmbklaOOaOOaYHaYHaYHcilcbCbiNbiNcikbiNbiNbiNbRmbiNbkpbkqcimcitcixbRhbRhbRhbRhciwciucivciBciyciEbLCbLnbLmbLpbLoaYRbGMaynaYQahjahjbxycltboWcmWboTbLXbxmahjahjaYWaYYbMdaYWaYWaYWaYWbMcaYWbkTaIuaIubeVbkUbAIbAJbhNbhObkWbgybqLbLfbkYbIoblabMnbfbblcbMhblebfbbhXbgEciJciHbhXbMebgEbfcbfgbfgbfgbfgbfgccNbgMdqNblhblibljblkblldsVblnblobloblpbxEbmTbflbMpblsbMqbfqblublvblwbKOblydtabfqbBBbPqceYblBblCblBahlahlahlahlahlahlahjahjahjahjahjahjahjdsiahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahjahjahlahlahlahlahlahjahlahlahlahlahlahlahlahjahlbcRblDblEblFbkhblGblHbcRahlahjdsiblIblIblIblIblIblIblIahlahlblJblKblLcihcigchJchJcijchJchJchJchVchJchWchXcibcidblQblRblSblTbKKaYNblVaYNbKFblXbqFblZbmabmdbmdbmdbmdbmcbKHbmbahjahlbKJbKIbzTcltcltbJXbxmahlahjbmsbKgbKibJYbKdbKDbmsbBVbmsbmtaIuaIubeVbLgbAIbAJbmybmzbeVbmAbqLbLfbkZbmBbgybLcbfbbYFbLebLabfbbmGbLbbKXbKWbKZbKYbKUbKTbKRbKVbKRbKRbKRbKSbgMbmQbiedqCdqobmRbmScjJbmUbmVbmVbmWbKQbmYbflbpPbpObKPbfqbnbbncbndbKObitbnebfqbBBbKNbKLchEchEchEchEchEchEbKMahlahlahjahlahlahjahlahjahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahjahlahlahlahlahlahlahlahjahlbcRbnfbngbnhbnibcRbcRbcRahlahldsiblIblIblIblIblIblIblIahlahlbnjbnkbiNchAchzchBchzchzchzchzchzchCchzchHchIchDchFbnrbnsbntbnubaZbJBbnwbnxbeGbnzchyblZblZbmbbnBbJvbnDbJwbumbmbahlahlbxybJxbvJbmhbyDbJybxmahlahlbmsbJzbJAbnNbmsbnObmsbBVbmsbmtaIuaIubeVbnQbAIbAJbnRbnSbeVbnTbJJbnUcHhbnXbgybJPbfbbJObJNbJMbfbbfcbodbfcbJLbJKboeboeboeboeboeboeboeboeccNbgMblgblhblibofbogbohboibojbojbojbmWbxEdsUbrebJIbrfbJHbrhbonboobonbJGbitboqbfqbJEbJCbJCbJCbJCbJCbJCbJCbJDbLEbgZbgZbgZahlahlahjahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlbRJahlahlahjblIblIblIblIblIblIblIboubovbowboxbiNbiNbiNbRrboyboyboybiNbiNbiNbiNbkpbozbQRbUgbTQbUabUbbUcbTIbTPbaZboGbBNboIboJboKbNoaNpboNbBMboPbBLbBKbmbahjahlbxybBDcoCcoCcoCbCcbxmahlahjbmsbCabCbbpdbmsbpebmsbBVbmsbpfaIubRTbRUbRVbRWbTybTHbpibeVbpjbqLbhRcGAbplbpmbnTbnTbpobAKbAWbprbpsbptbgybAZbBgbpwbpxbpybBibBhbBjbslboeccNbgMbpGbpFbBkbBtbBvbflbpJbojbojbpKbpLbxEbpMbsAbBwbxSbBybrhbpQbLzbitbBzbpUbpVbfqbpWbpXbpXbpXbpXbpXbpXbpXbBBbLEbpYbfGbgZbgZahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
@@ -9340,7 +9400,7 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldsiahlahlahjblIblIblIblIblIblIblIbrubrvbrubrwbiNbiNbiNbRrboyboyboybiNbiNbrxbryaYHbrzbaZbaZbRsbRDbRIbRLbaZbaZbaZbqlbmtbrBaIuaQQbqpbrCbrDbRqbRobRnbyHbmbahjahjbyNbyLbzxbbqbzubzvbzLahjahjbxnbyXbzobyQbyRbzqbztbzpbqCbrRaIuaIubrSbrTbxLbxMbxPbxTbrYbrZbxVbxQbxRbxRbxRbxRbxRbyxbywbytbymbyvbyubyEbyCbyFbqObsibyAbyBbsjbskbslboeccNbgMbjYbsnbxzbspbspbflbsqbsrbssbrebstbxEbnabrebmZbxDbxCbxBbxAbxKbokbxGbsDbsEbFPbsGbxFbsIbsJbsJbsJbsKbsLbyGbLEbsNblAbgZbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbRJahlahlahjblIblIblIblIblIblIblIbsObovbsPbsQbiNbiNbiNbRmbiNbiNbiNbiNbiNbrxbsRaYHbsSbQUbRhbQSbQTbsTbQRbaZbaZcGzbnxbnZbrBaIuaQQbqpbmbbsWbQQbsYbsXbxxbmbahlahlahjbxyckNbhyckNbxmahjahlahlbxnbtcbxibtebkKbtgbtgbxkbtibtjaIuaIubtkbtlbgybwBbwXbtnbtobtnbxfbxcbpqbwYbpqbpqbpqbttbwvbgybhRbwubtvbtvbwybwxbtybtzbwwbtAbtBbqTbslboebwnbgMbtCbtCbtCbtCbtCbflbrebrebrebrebBAbQPbtEbreboMbwlbscdtndtndtndtnbwmbtLbtMbtNbtObtPbtQbtRbtRbtSbtTbpXbNhbLEbsNblAbgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbRJahjahjahjblIblIblIblIblIblIblIbrubrvbrubnkbtVbiNbiNbXLbiNbtVbiNbiNbiNbrxbGDaYHbGCbXMbTIbXNbYSbeFbRSbRhbuebufboGbnZbrBaXDbugbuhbmbbuibZibukbulbumbmbahlahlahjbGFbGIcoCbGGbGHahjahlahlbxnbGJbGLbutbuubuvbuwbEYbqCbuyaIuaIubnTbnTbFnbFqbLhbFbbsUbFcbFdbFlbuGbuCbuDbuCbuDbuCbuDbuCbFAbFBbtvbuHbFsbFubFtbFxbFwbuKbuLbuMbuNboebFIbFObpNbFMbFNblsblsbFDblsblsbFGbFEbFFbGubGkdtnbGhbGxbtmbvabvbbFUbvdbvdbvdbvdbvdbvfbvgbvhbvibvhbvjbvhbpXbNhbLEbsNaBRbgZbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlblIblIblIblIblIblIblIbvlbvmbvlbvnbvobvnbvnbvnbvnbvnbvpbvqbiNbrxbvraYHbvsbaZbvtbWLbWMbvwbEDbvybvzbvwbvwbEZbrBaJSbvBbqpbmbbvDbWObvFbsZbFabmbahlahlahjbdsbEObbqbEWbEXahjahlahlbxnbvKbvLbvMbvNbuvbuwbEYbqCbvOaIuaIubvPbvQbDSbqMbDRbvTbuCbvUbDTboZbvXbvYbvZbwabwbbwabwcbuCbhRbqLbtvbwdbDMbDLbDKbDQbDPbDObDNbDNbEnbEzbEAbEBbwobwpbwqbwrbwsbwrbwrbwtbwrbwrbEmbEabDXbDXbEbbEkbepbwzbwAbDUbwCbDWbwEbwFbvdbwGbwHbwIbwJbwKbwHbwLbpXbNhbLEbwMbrsbWubgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlblIblIblIblIblIblIblIbvlbvmbvlbvnbvobvnbvnbvnbvnbvnbvpbvqbiNbrxbvraYHbvsbaZbvtbWLbWMbvwbEDbvybvzbvwbvwbEZbrBaJSbvBbqpbmbbvDbWObvFbsZbFabmbahlahlahjbdsbEObbqbEWbEXahjahlahlbxnbvKbvLbvMbvNbuvbuwbEYbqCbvOaIuaIubvPbvQbDSbqMbDRbvTbuCbvUbDTboZbvXbvYbvZbwabzVbwabwcbuCbhRbqLbtvbwdbDMbDLbDKbDQbDPbDObDNbDNbEnbEzbEAbEBbwobwpbwqbwrbwsbwrbwrbwtbwrbwrbEmbEabDXbDXbEbbEkbepbwzbwAbDUbwCbDWbwEbwFbvdbwGbwHbwIbwJbwKbwHbwLbpXbNhbLEbwMbrsbWubgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlblIblIblIblIblIblIblIbwObwPbovbwQaYHbwRbovbwQbwSbwSbwSbwSbwTbwUbwVbwSbwSbwWbwWbWmbWtbvwbDJbwZbxabxbbvwbnZbrBaIvaTkaTkbmbbmbbVNbmbbmbbDDbmbaJOaJPaJUbDEbDHbhybDFbDGaJOaJPaJUbqCbqCbqCbqCbqCbqCbqCbqCbqCbvOaIubxhbuCbuCbuCbxjbuCbuCbuCbxlbDTbDrbFybxpbxqbxrbxsbUkbxubxvbhRbqLbtvbxwbDzbDCbDAbDtbDsbsjbsjbsjbDhbzbbDgbDfbxHbxHbxHbxHbxIbxHbxHbxHbxJbxJbDebDqbxNbxObDpbDobepbwzbLAbDnbxUbDmbxWbxXbxYbpXbpXbxZbyabybbpXbycbpXbNhbLEbsNblAbgZbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlblIblIblIblIblIblIblIahlahjahlahlahjahlahlahjahlbwSbydbyebyfbygbyhbyibyjbykbylbVcbVMbUubUvbyqbyrbysbvwbnZbrBaIuaIuaIubCXaLFbUhbbAbyzbCZbCYaWEaWEaWEbDabCTbyIbCUbyJaIuaIuaIuaIuaLFaIuaLpaIuaIuaIubCXaIubvOaIubyMbuCbCNbCObyPbCLbCKbuCbySblrbCHbCIbxpbxqbxqbyUbyVbyWbxvbhRbCFbtvbsjbyYbyZbzabzbbzcbzdbzebzfboeboebwnbCDbxHbzhbzibzjbzkbzlbzmbxHbAVbCubCybCtbzrbzsbribCgbCfbCrbChbCdbzwbCebzybzzbxYbzAbzAbzAbzAbzAbzAbzAbpXbNhbLEbsNblAbgZahlahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahjahlblIblIblIblIblIblIblIahlahjahlahlahjahlahlahjahlbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbMtbMgbMFbMubLqbyrbzPbvwbnZbzRaIuaIuaIuaIuaIuaIubbAaIubrBaIuaIuaIuaIuaIubnYbeKbnVaIuaIuaIuaIuaIuaIuaIuaLpbLjaIuaIuaIuaIubvObzXbzYbsUbMMboObAcboOboRbuCboYbDTboZbAjbuCbAkbAlbAmbAnbAobuCbhRbqLbtvbtvbtvbtvbtvboeboeboeboeboeboebXKccNbotbxHbAsbAtbAubAvbAwbAxbxHbAyboHbAAbobbocbzsbribopborbolbombosbosbosbALbAMbxYbzAbANbzAbAObzAbzAbzAbpXbNhbLEbsNblAbgZbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
@@ -9349,43 +9409,43 @@ ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlah
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlbDjahlahlahlahjahlahlbwWbDkbDlbHjbGObGEbGlbIdbHvbHnbHkbIhbIvahlahlahjahlbCwcjKbDvbDwbDxbDybmnbmobmpbmqbmHbmFbmIbCAbmKbmJbmLbFhbmvbFhbFhbIIbmCbmxbmEbCDbCDbCDbCDbuCbmMbxobyTbxobnybuCbDVbDTbnvbmXbmPbmObmPbmPbnFbDYbDZbnEbnCbnCbnCbnJbnHbqMbEcbEdbEebEfbEgbBFbXKccNbDcbEhbEhbEhbEibEhbEhbEhbDcbEjbEjbElbEjbEjbDdbnLbnKbepaKtbEobEpbEqbErbEsbEtbEubEvbEwbExbEyaQebnMciIciIciObnPbEobEobgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbEEbEFbEGbEFbEHahlahjahlbwWbwWbEIbylbQcbQbbQtbQebPGbPGbPPbPJbPzbppahjbEPbEQbERbESbETbDBbEUbDBbEVbDBbDBbDBbCwbQLbQMbtxbCAbtwbtubFebFfbFgbFhbFibqxbCAbFjbFkbtDbFmbuJbFobFpbuObxobFrbxoblrbuxbuEbuzbuFbuCbFvbuIbxobxobusbFzbnTbnTbnTbnTbnTbudbuobLhbupburbFCbCVbucbBFbXKccNbDcbEhbEhbEhbEhbEhbEhbEhbDcbFHbubbFJbFKbFLbDdbtUbtZbuabtXbtYbHqbtKbFQbFQbFQbFQbFRbTubFTbEybgZbLFbtIbQxbQxbtJbFVbFWahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbFXbFYbFXahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbFZbGabGbbGabFZbGcbGdbGebwWbGfbylbGgbQCbQvbGibwWbCvbGjbCvbCvboEbqNahlbGmbGnbGobGpbDBbDBbGqbDBdnRbGsbGtbDBbCwbQLbuQbuRbCAbuPbGybGzbGAbGBbFhbuUbqxbXKbuScdQbuTcdQbwebGKbuCbwgbmPbwfbmPbvVbsUbvSbmObvWbuCbGRbxobxobxobGSbGTbnTbGUbwjbwkbwibggbwhbqMbGYbCVbCVbGZbHabHbccPbvcbDcbEhbEhbEhbEhbEhbEhbEhbDcbHebuZbuYbvubvxbvAbvHbvIbscbvRbHobFQbvebFQbFQbFQbFQbFQbFQbFQbEybuXbuWbuVbHwbHxbHybHzbHAahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbHBbFXbHCbFXbHBahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahjahlbEGbHDbHEbHDbEGbHFbHGbHHbwWbHIbylbHJbylbylbGibwWbHKbHLbELbCvboEboFahjbGmbHNbHObHPbHQbHRbHQbHQbHSbHTbHQbHQbHUbqubeLbHXbCAbCBbCAbCAbCAbCAbHYbPxbPmbHZbIabIbbIcbrObIcbIfbuCbrMbrLbIibrNbrGbuCbrKbrJbrpbuCbIobrEbIqbrgbIsbItbnTbgdbrbbrcbqWbqYbrabIxbIybIzbCVbCVbIAbBFbXKccNbDcbDcbICbEhbEhbIDbICbDcbDcbIEbIFbIGbsebIHbDdbsdbhibscbsabsbbrVbrVbrWbrXbrUbrVbrPbrQbqGbqDbqIbqHbqVbPybIWbIXbIYbIZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbJabJbbJcbJdbJebJbbJaahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahjahlbEGbHDbHEbHDbEGbHFbHGbHHbwWbHIbylbHJbylbylbGibwWbHKbHLbELbCvboEboFahjbGmbHNbHObHPbHQbHRbHQbHQbHSbHTbHQbHQbHUbqubeLbHXbCAbCBbCAbCAbCAbCAbHYbPxbPmbHZbIabIbbIcbrObIcbIfbuCbrMbrLbIibrNbrGbuCbrKbrJbrpbuCbwbbrEbIqbrgbIsbItbnTbgdbrbbrcbqWbqYbrabIxbIybIzbCVbCVbIAbBFbXKccNbDcbDcbICbEhbEhbIDbICbDcbDcbIEbIFbIGbsebIHbDdbsdbhibscbsabsbbrVbrVbrWbrXbrUbrVbrPbrQbqGbqDbqIbqHbqVbPybIWbIXbIYbIZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbJabJbbJcbJdbJebJbbJaahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbFZbHDbHDbHDbJfbJgbylbylbJhbHIbylbylbylbylbGibwWbfFbELbccbCvboEbtFahlbGmbJmbJnbJobDBbDBbJpbDBbJqbJrbJsbJtbCwbshbsgbsobsmbsxbsvbsvbsvbsvbsvbsybsvbsBbszbsFbsCbsVcePchtbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbsUbtbbnTbnTbnTbnTbnTbtabuAbhSbBFbBFbBFbBFbBFbBFbXKccNbDcbJQbJRbJSbJTbJUbJVbJQbJWbIEbIFbIGbtpbtqbtrbtsbthbtmaKvbEobKabKabKbcGybtdbKebFQbFQbKfbEybsHbKhbsMbEobKjbKkbKlbEoahjahlahlahjahlahlahlahlahjahlahlahlahlahjahlahlahlahlahjahlahjahjbKmbKnbKobKpbKpbKpbKqbKmbKnahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbEGbHEbHEbHEbEGbKrbKsbKtbKubKvbylbylbKwbEKbKxbwWbCvbCvbCvbCvboEbppahjbKybEQbKzbKAbKBbDBbKCbDBbDBbDBbDBbDBbCwbQLbhhbgYbgLbgKbgKbgKbgKbgKbgKbgJbgIbgHbfLbgGbgBbfRbfQbfSbmNbfTbmNbmNbmNbmNbmNbmNbmNbmNbmNbmNbmNbmNbmNbfVbgabnTbgdbLdbMzbgebggbgibgkbglbgobgobgxbfMbfLbfKbfJbDcbLrbLsbLtbLubLvbLwbLxbJWbJWbJWbJWbJWbJWbLybfNbfObfPbLBbEobEybEybEybEybEybEybLDbFQbFQbEybgZbLFbLEbEobLGbLHbLIbLJdsidsiahjahjahjahjahjahjahjahjahjahjahjahjahjahjahjahjahjahjahjahjbLKbLLbLKbKpbLMbKpbLNbLObFXahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbFZbLPbLQbLRbFZbLSbGdbGebwWbwWbLTbLUbLVbwWbwWbwWahlahlahlbLWbqhbqNahlahlahjahlbCwbLYbLZbMabDBbMbbiEbiJbiSbKGbiDbiCbfIbMibMjbMkbMlbMmbesbMjbMjbMjbMjbMjbMobiBbMjbMjbxtbMjbFSbMjbMjbMjbMjbMjbCDbCDbCDbCDbCDbCDbCDbCDbNIbXIbnTbhHbhFbhGbhMbicbhIbqgbipbhpbhpbiobhpbhpbhsbhqbDcbhwbMNbhCbMNbhEbMNbMObMPbMQbMRbMSbMTbMUbgUbribhibepbMXahjbMYbMZbNabNbbhmbNbbNdbNebNfbEyckEbNhbiubEobEobEobEobEoahjahlahlahjahlahlahlahlahjahlahlahlahlahjahlahlahlahlahjahlahjahjbKmbKnbNjbKpbKpbKpbNkbKmbKnahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbNlbEFbNmbEFbNnahlahjahlahjdsiahjahlahjdsiahjahlahlahlahjbHMboEboFahjahjahjahjbCwbCwbCwbCwbCwbCwbCwbCwbCwbCwbeybexbewbevbMjbMkbMlbMmbesbNrbNrbNtbNubNvbeubetbNybNzbNAbdWbNCbNDbNEbNFbOGcGaahjahlahlahlahlahlahjbCDbNIbSubNJbNJbNJbNJbNJbNKbNLboDbNJbNJbNJbNJbNJbNJbSubencGubNQbNRbNSbNRbNTbNUbNVbNWbNWbNWbNWbNWbNWbNXbeqbeobepbObahjbMYbOcbOcbOdbOebOfbOgbOhbOibEycoxbNhbPqbgZbOkayRbgZahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahjahjbJabHBbOmbOnbOobOpbJaahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahjahlahjdsiahjahlahjdsiahjahlahlahlahlbHMboEboFahlahlahlahjbOqbOrbOrbOsbOtbOubOubOwbOwbOqbQLbfHbfIbOzbMjbOAbOBbOBbfibODbNrbOEbOFbfrbfCbfsbeMbeHbmgbeBbOGbOLbOGbOMbONbOOahjbOPbOPbOPbOPbOPahjbCDbNIbpaboQbezbOSbOTbNJbpnbpgbphbNJbOXbOYbOZbOYbOXbSubeTbDcbMNbMNbMNbeZbMNbMNbfhbeUbPcbPcbPgbPcbPcbgSbePbeNbeObPkahjbMYbOcbPlbNbbeSbNbbPnbPobPpbEyblAbNhbPqbgZblAblAbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbJbbFXbPrbFXbPsahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahjahjahjahjahjahjbCvbCvbPtbPubPvbCvbCvahlahlahlahlbHMboEboFahlahlahlahjbOqbPwbOsbOsbOsbOsbOubCsbzObBqbDIbiCbjWbPBbPCbjVbjUbjTbkabkcbkbbjUbjUbjUbkabjZbjEbjDbjMbPHbPKbTqbPMbPNbPObTnbPQbPRbPSbPTbPUbOPahjbjRbNIbSubPWbOXbOXbOXbNJbjNbeAbjPbNJbOYbQdbOYbzNbzMbyObjLbDcbQfbQgbQhbQibQjbQkbQlbQmbQnbQobQpbQqbQrbJWbSSbjBbjCbQubQubEybEybEybEybEybEybEobEobEobEyblAbNhbjyblAblAbQzbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbFXbFYbFXahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlbCvbQAbELbQBbELaClbCvahlahlahlahlbHMbqhboFahlahjbQDbQEbOqbQFbQGbQHbOsbOsbQIbQJbOubQKbQLbfHcerbQNbQObkubkwbkvbkBbkAbkCbkvbkxbkvbkzbkybPIbQVbQWbQXbQYbQZbRabRbbRcbTsahjbRebRfbPUbRgbOPahjcbMbNIbSubRibRjbOXbRkbNJbRlbEJbktbNJbOXbvEbRpbOXbOXbSubNIbDcbJWbJWbJWbJWbLybRtbRubRvbLybJWbJWbJWbJWbJWbRwcfbbUIbRzbRAbRBbRCcbGbRCbREbQubRFbRybRGbRHcjSbNhbPqbgZbgZbgZbgZbRJahjahjahjdsidsidsidsidsidsiahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahjbCvazvbELbELbELaBdbCvahlahlahlahlbHMboEbtFahlahjbTabRNbRObRPbtWbtHbtHbtHbtHbtHbujbvkbvvbfHcerbNqbjdbjcbjbbOGbjebRZbQVbSbbScbSdbSebSfbSfbSgbShbPKbSibSjbSkbSlbSmbMrbSobPRbSpbPUbPUbOPahjbiXbNIbSubdobOXbSsbNKbNJbNJbrFbNJbNJbSvbrAbStbSvbSzbSubNIbDcbSDbSEbSEbSFbSGbMNbSHbSIbSJbSKbEhbEhbEhbJWbSLbiYbiZbSMbSNbRBbSObSPbMsbSRbSSbRybSTbRybRHaDGbiUbiVbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbCvazvbELbELbSYaBgbCvahlahjahlahlbJlboEbppbCvbCvbCvbTbbOqbTcbOsbOsbOsbTdbTebTfbTgbOqbQLbfHcerbNqbQObjtbjxbOGbOGbTjbNrbTkbTlbTmbSQbOGbOGbTobTpbRdbTrbPLbTtbOJbTtbTvahjbOPbOPbOPbOPbOPahjbCDbNIbSubTwbyybyybyKbynbypbwNbjibjgbOXbvEbOXbOXbOXbSubNIbDcbEhbEhbEhbTJbTKbMNbTLbMNbTMbTNbEhbEhbEhbJWbTObjmbjqbYbbjsbTRbTSbTTbTRbTUbQubTVbRybTWbRHbgZcgFbjfbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbTXahlahjahjbTYbTYbTYbTYbTYbTYbTYbTYbCvbCvbTZbCvbCvbCvbPtbPubPvducduddujduidukdrBdudduhbvkbvkbvkbvkbvkbvkbvkbvkbvkdugduedufcerbUdbMjbNscaGbUebUfbUebNrbOGbOGbOGbSQbUibONbONbUjchfbUlbTqbUmbUpbUobTnbPQbPRbUqbUrbUrbOPahjbCDbNIcaVbPZbPZbPZcbhbUsbOXdulbOXbOXbOXbvEbOXbOXbOXbSubNIbDcbEhbEhbEhbUAbUBbSIbUCbMNbUDbUEbSEbSEbUFbJWbUGbUHbUIcbzcbjbRBbMsbUKbTRbULbQubUMbUMbUMbRHcaUbZPbjfbgZahjahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbUObUPblMbsfbUSbsfbSnbURbUQbUWbUXbUYbUZbTYbVabVbbVbbVbbVbbVbbVbbVbbVbdsHdtidtJdrldrldrldrldtHdtpdtpdtpdtxdtpdtmbPGbPGdtkbppbQLbfHcerbVobVpbZNbZMbONbONbZLbVsbONbONbVtcgqbVvbOGbVwbVxbVybVzbOGcgrbUnbVCbTsahjbRebVDbVEbVFbOPahjcaSbZRbZQbZQbZQbZSbSubVKbTwdtRdtOdtVdtSdtYdtXduadubbSubNIbDcbJWbJWbJWbJWbVRbVSbTLbVTbVRbJWbJWbJWbJWbJWbVUbVVbVWcaCcaBbVZbVZbVZbVZcaFbSSbUMbUMbWcbRHbZObZPbjfbgZbgZbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbWebWebWebWebWebWfbUTbWhbWibWibWhbTYbELbWjbWkbWkbWkbWkbWkbWkbWlbppdcdbWnbWnbWnbWnbWnbWnbWnbWnbWobWobWobWobWocbNdumbppbQLbfHcerbVobWscceccfbWvbSfcbVbWxbSfbSfbWybWzbWAbWBbWCbWDciobWFbOGcgrbWGbWHbMrbSobPRbWJbUrbUrbOPahjcbMbXKbCDbCDbCDbjLbSubWNbOXbOXbWPduwbUtbWTcbUbWTbUtbSubNIbDcbSDbSEbSEbWUbSGbMNbSHbSIbWVbWWbEhbEhbEhbJWbWXbWYbWZbRxbjmbYbccuccwccvccibQubUMbUMbUMbRHbZObZPbjfblAblAbgZahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbXcbXdbUUbXfbUUbWgbUVbXhbXgbXgbXkbTYbXlbXmahlahlahjahlahlahjahlbppdcdbWnbXnbXobXpbXqbXrbXsbXnbXtbXubXvbXwbWobWodumbppdunbfHcerbXybXzcbDcbDbXCbMjbMjbMjbMjbMjbXDchjbNrbNrbNrbXFbOGbVybOGcgrbUnbXGbTsahjbOPbOPbOPbOPbOPahjbXHbXKbCDcbobXKbjLbpadusdurduvdutduqdupbXPcbUbXPbXQbSubNIbDcbEhbXRbEhbXSbTKbMNbTLbMNbTMbXTbEhbXRbEhbJWbXUbXVbXWbXXbXYbXZbYacbQcbPcbFbSSbCxbYfchUbRHbUMbZPbUwbgZblAbgZbgZbgZdsidsiahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjbXcbYjbYkbYlbYmbWhbYnbWhbYobWhbWhbYpbELbXmahlahlahjahlahlahjahlbppdcdbWnbXnbYqbYrbYsbYtbYubXnbYvbYwbYxbYybYzbWodumbppbQLbfHcerbYAbYBbMjcdvbYDbMjcdwcuLbYGbMjbYHbSQbZUbNrbYJbWFbOGbWDbYKbYLbUpbYMbTnbPQbPRbYNbYObYPbOPahjbCDbXKbCDbYQbXKbjLbSubYRduzbYTbYUduAduzcdHcdAcdHbzNbyObNIbDcbEhbEhbEhbYZbZabSIbUCbMNbUDbZbbSEbSEbUFbDcbRHbZcbZdbZebRHbRHbZfbZgcdMcdNbZjbVYbVZbZkbUMbUMbZPbjfbgZbrqbgZbZlbgZahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjbXcbZmbUUbZobUUbZpbZnbZrbXhbXhbZubTYbZvbZwahlahlahlahlahlahlahlbppdcdbWnbZxbZybZzbYsbZAbZxbZxbYvbZBbZCbYyccAbWodumbppbQLbfHbGwcbAcbAccWccBccQcdbcdlccXduxbMjbOGbSQdjybZVbYJbZWbOGbWDbYKcgrbUnbZXbTsahjbReclkbZZcaabOPahjbCDbXKbCDcabcacbjLbSubNJcadcaebNJduybNJbNJbNJbNJbNJbSubNIbDcbJWbJWbJWbJWbVRcafbTLcagbVRbJWbJWbJWbJWbDcbTRcahbTRbTRbTRbRHbZfbZgcdtcducakcalbRxbCzbRHbUMbZPbjfbgZblAblAblAcanahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahjahjahjahjahjahjahjbWebWebWebWebWebTYbTYbYpbTYbTYbTYbTYahjahlahlaPYahlahlahlahlahlduNdcdbWnbZxbZxcarcasbXnbZxcatcaucavcawcaxcaybWodumduMduJduKcexcbAcaDcaEcaEceJcaHcaIceKduLbMjcaLcjIbZUbNrbYJcaNbOGcaObYKcgrcaPcaQbMrbSobPRcaRbYObYObOPahjcaSbXKbCDcaTbXKbjLceQbPZbPZceObNJduObZsdpCbNKcaZccmbXIbNIbDcbSDbSEbSEcbbbSGbMNbSHbSIcbccbdbEhbEhbEhbDccbebTRbTRbTRbTRbRHcbfcbgceMceLbQubQubRxbQubRHbQubZPbjfbgZcbkcblcbmcbnahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHaaHdpXdpXaaHdpXdpXdpXaaRdpXdpXdpXaaHdpXahjahjbCvbELbELbELbELbELbELbELbELbJjcbpahjahlahlahjdsiaFFahlahlahldotdcdbWncbscbtcascbubXnbXncbvcbwcbvcbxbYycbybWoduCduBduDduEbHXcbAdpFcaEcdOcdzcbEduGcdPduFduHbPHcirbNrbNrbNrcbJbOGcbKcbLcgrbUnbOGbTsahjbOPbOPbOPbOPbOPahjcbMbXKbCDcchcbObZRbZQbZQceocepbNKduIcuYdpBbNKceabhpcdTcbWbDcbEhbEhbEhcbXbTKbMNbTLbMNbTMcbYbEhbEhbEhbDccbZbTRccabTRbTRccbcccccdcemcebbQubRxbRxccgbRHaDGbPdbWdbgZccjcckblAcclahjahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahlahjahjahlahjahjahlahlahjahjahjahldpXahlahlbCvbRKbELbCvbCvbCvbTZbCvbCvbCvbCvahlahlahldsiaDIauKdsidsiahjdotdcdbWnccpbZxbXnbXnbXnbZxcatccqccrbYyccscctbWobCvbCvbTzbTAbTBcbAcbAccxcaEdoZdoKdoMdoNdoQbMjbOGbVAccDccEccFbQWccGbVuccIbYLbUpccJbTnbPQbPRccKccLccLbOPahjbXHbXKbCDbCDbCDbXKbCDbCDccMbDbbCDbCDcuBbCDbCDbDbbSWbSXbThbDcbEhbEhbEhccRccSbSIccTbMNbUDccUbSEbSEbUFbDcbTRbTRccVbTRbTRbRHcbfcbgbTibTxbQuccYccZcdabRHbfGbPdbjfbgZbgZbgZblAbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlcdccddcdeahlcdccddcdeahlcdccddcdeahjdpXahlahlbCvcdfcdgbCvcdhbELbELbOlaClcdkbCvahlahlahlatIdsidsiahjahlahldbVdcdbWnbZxcdncdobXncdpbZxbZxbYvcdqbYybYycdrbWocdsbSVbSCbSUbSBdoidnZdcNdctdcNdctdcvdctdcubMjcdCcdDcdEbSfbSfbShbUicdFbUmbSibUncdGbTsahjbReclhcdIcdJbOPahjbCDbXKbXKcdKbXKbXKcdLbCDccMbSabRYbSqbZtbSwbRYbSAccMbLEcdVbDcbDcbDcbDcbDcbDccdWcdXcdYbDcbDcbDcbDcbDcbDcbRHbRHbRHbRHbRHbRHcdZcdZbSxbSybRHbRHbRHbRHbRHbgZcgFbjfbgZbNibOjblAbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlcdcceecdeahlcdcceecdeahlcdcceecdeahjahjahlahlbCvbPtbPvbCvbCvcefcegaClbELbSYbCvahlahlahlahlahjahlahlahlahlbppdcdbWnbXncehceibXncejcekbXnbYvcelbYxbYybYybVebVfbfIcercHqbVgceucevcewbVhceycezdpYcaEdqsbMjceBbOGbVAbUibONceCbWEceEceFbNFceGceHbMrbSobPRceIccLccLbOPahjbCDbXKbXKbXKbXKbXKbUzbCDbVdbUxbUNbJFcgAbJFbUJbUxbUybLEbTEbgZahlahlahlahjahlahlceVahlahjahlahlahlahlbgZceWayRceYceZceZbRHcfacfabSxbiZcfccfdblAblAblAaDGcgFbUwbgZcffblAblAbgZbgZbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjcdcceecdeahlcdcceecdeahjcdcceecdeahjahjahlahlahlahlahjahjbCvbCvbCvbCvbTZbCvbCvahlahlahlahlahjahlahlahjahlbppdcdbWnbXncfgcfhcficfjcfkbXncflcfmcfncfocfpbWocfqdpVdpPdpQdpNdpOdpTdpUdpRdpSdpsdpzdpadprdpAdpEbQZcfFbVBbOGbOGbOGbOMbVvbVBbUnbXGbTsahjbOPbOPbOPbOPbOPahjbCDcabcfHcfIcfJcacbCDbCDbCDcfKbTGcdUbXIcfMbTFbCDbCDbLEbTEbgZahlahlahlahjahlahlceVahlahjahlahlahlahlbgZblAchmbrscOnciqbRHcfScfSbTDbiZbRHbQubgZcfUcfVaDGcgFbTCbECbECbECcfYcfZcgacfZcgbdsiahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlcdcceecdeahjcdcceecdeahlcdcceecdeahlahjahlahlahlahlahlahlbCvaOlbCvbELbELbCvahjahlahjahlahlahjahlahlahjahlbppdcdbWnbWnbWnbWnbWnbWnbWnbWnbWobWobWobWobWobWobCvbWpbCvcggcghcghcghcgicgjcgkcghbWrdqEdqRbMjchebXEbSkbXjcgscgtcgsbXjcgubXjcgvbUicgwahjahjahjahjahjahjahjahlahjcbMbXKcbMahjahlbCDcgxbCDcgzcgzdpdcgzcgzbCDbYQbzgbTEbgZcgCcgDcgEbgZcgCcgDcuncgEbgZcgCcgDcgDcgEbgZbgZcgFcgGbgZbgZbRHbRHbRHbWabWbbRHaDGbgZcbmblAbpYcgFbWdbgZbgZcgLbgZbgZbgZbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHdpXahjahlcdcceecdeahjcdcceecdeahlcdcceecdeahjahjahjahjcgMcgNcgNcgNcgNbCvbCvcgObELbCvcgPbWkbWkbWkbWkbWkbWkbWkbWlbCvbppdcdbCvcgQbVPbVObVObVObVObVObVObVObVObVObVXbVXbVObVQcefcggcnjcgWcgXcgYcgZchacghdoBcmIdqxbMjchebXichgchhchibWIchkchlbOGbXechnchobOIahjahjahlahlahlahlahjahlahjchpcfIchpahjahlbCDchqdpkbVichtdpDcdUcdUbXKbXKbzgbJEbVHbVHbVHbVHbVHbVHbVHbVIbVqbVqbVqbVqbVqbVqbVrbVqduQbVqbVqbVGciFbVlbVkbVjbVnbgZbgZbVmciFbVJciFbVLbjfbgZchLblAblAbgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahjahlahjahjchMahjahjahjchMahjahlahjchMahjahlahjchNchOchPchQchRchSchTcgebELchYchZciachZchZchZchZchZchZchZchZchZchZdsrdsydrBdrAbiTcicciccicciccicciccicciccicciccicciccicciccggcghciecifdsbbZDbZEbZFckUckbdspciccincfGcipceDcipcfGcipceDcipccHcipccHcisahjahjahlahlahlahlahjahlahjahlahlahlahjahlbCDchqduRcdUduSbYWbYVceTbFobXabXbbWQbWQbWQbWQbWQbWQbWQbWRbWSbWQbWQbWQbWQbWQbWQbYIbYEbYhchEbYCbYibYcbYcbYcbYdbXAbXxbXObXBbYYbYcbYcbYXbZhbgZbOjblAcbabgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjciRciSciSciTciUciUciUciUciUciUciUciUciUciUciUciVciXciYciXciZdrvcjbcbHchZcjdcjeaClbCvcjgcjhcjhcjhcjhcjhcjhcjhcjibCvbCvdrqdrldrjdrgciccjncjncjociccjpcpFcpEcpCcpOcpNcjvcmvcjxcjycghcjzcjAdracjCcjDcjEcjHdrbdrdcicahjcbIahjcaMahjcbIahjcaMahjbZqahjbZqahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbCDbXKcjLcjMduTcjObXJbFobSZbWqbCDbgZcgCcgDcgDcgEbgZcgCcgDcgDcgEbgZcgCcgDcgDcgEbgZcpGblAbgZbWKbWwbgZbgZcgCcgEbgZbgZcjTbPdbPbbgZcjUcjVbpWbgZbgZbgZbgZbgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahjahlahjahjcjWahjahlahjcjWahjahlahjcjWahjahlahlchNchOcjXcjYcjZckacgNbELbELbELbELbCvahlahlahjahlahlahjahlahlahjahlbCvckdbCvcmacmhcicckfckgckhckickjbhAckUckUckUbOHbOKbORckrbhAcghbvCckuclScjCckwcghaJbclRclMcicbOPckzbReckzbOPckzbReckzbOPckAbReckBbOPahlahlahlahlahlahlahlahlahlahlahlahlahjahlbCDbCDbCDbXKckCcjMccPcnCbCDbCDbCDahlahlahjahlahjahjahlahlahlahlahlahlahlahlahlbgZcnyckEbgZbPbbPdbgZahlahlahlahlbgZblAbPdbPackGckGckHckIckGahlahjahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHdpXahjahjcdcckJcdeahlcdcckJcdeahlcdcckJcdeahjahjahjahjckKcgNcgNcgNcgNbJibJjbELbELbCvahjahjcjtcjtcjtcjtcjtcjtcjtahjbCvbCvbCvcmBcmxcicckPckhckhckickQckxckxcmwcmjcmqcmicmiciickUcghckWcmQcmJckZclacghclbcmIcmDcicbOPcldcnDclfbOPclgcnXclibOPcljcnYcllbOPahlahlahlahlahlahlahlahlahlahlahlahlahjahlbRJahlbCDcfKduUcnZcacbCDbCDahlbRJahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlbgZcnUbgZbgZbPibPdbgZbgZcgCcgEbgZbgZblAbPjbPfckGclqclrclsckGahlahlahjahjahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcdcckJcdeahjcdcckJcdeahlcdcckJcdeahlahlahlahlahlahlahlahlbCvbCvbCvbXlbELbCvahlahlcjtclFclzclEclzclucjtahlbCvbSYbELcnzcmxcicclAclAclBcicclCclDcmmcnpckbcmFbPAcksckockocghclKcnmcncclNclOclPclQcmScmRcicbOPclTclUclTbOPclVclWclVbOPclXclYclZbOPahlahlahlahlahlahlahlahlahlahlahlahlahlahlbRJahlahlahjduVahlahlahjahlahlbRJahlahlahlahlahjahjahlahlahlahlahlahlcmccmdcmebgZbJkaDGbgZbPEbPFciCciFciCciCciCciCciGcfRbPDckGcnBcnAcmkckGahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjcdcckJcdeahlcdcckJcdeahlcdcckJcdeahjahlahlahlahlahlahlahlcgccgdcgcbELbELbCvahlahlcjtcmscmocmncmrcmpcjtahlbCvcegbELcnzcmxcicclAclAclBciccmucmvcmtcnFcnHckVcmAcmvcmzcmAcmvdtocnOcnMcmFcmGcmHcmEckbcnIcicbOPclTcmKclTbOPclVcmLclVbOPclZcmMclZbOPahlahlahlahlahlahlaaeahlahlahlahlahlahlahlbRJahlahlahjcmNahlahlahlahlahlbRJahlahlahlahlahjahjahlahlahlahlahlahjcbnblAcmObgZcphblAbgZbPVbKLbKLbQabKLchEchEchEbPXbPYchKckGcnQcnPcmTckGahlahlahjahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjcdcckJcdeahlcdcckJcdeahjcdcckJcdeahjahjahjahjahjahjahjahjbCvbCvbCvbCvbELbCvahjahjcjtcmPcoZcoUcoPcmPcjtahjbCvciccnbclecoccicclAclBclBciccndcnecmycodckbclHclGclJclGclGcnkcnlcnScnRcnocnncnncnncobcoacicbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlbRJahlahlahlahlahjahjahlahlahlahlahjdsicbncnrblAbrqcpGblAbgZbgZbgZbgZbgZblAbgZahlahjahlahjahlcnscntcnucnvcnwahjahjahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaRahjcdccnxcdeahlcdccnxcdeahlcdccnxcdeahjdpXahjahlahlahlahlahlahlahlahlbLWbELcaqahlahlcjtcmZcnfcpkcnqcngcjtcjtcjtciccnEclecoeciccicciccicciccnGckUcofcnpckbckUckUckUbQybQwccOckbckbcnpckUcopckUckUcohcogcicahjahlahlahlahjahjahlahlahjahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlaaeahlahlahlahlahlahlahlbRJahlahlahlahlahlahjahlahlahlahlahldsicbnblAaBRbgZbLkblAblAblAblAblAblAblAbgZahlahjahlahjahlahjcnVcnWcnVahjahlahlahjahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahlahjahlahlahlahjahjahjahlahlahjahjahldpXahjahjahlahlahlahlahlahlahlbRMbELbRMahlahlcjtcoicppcpocpmcojcokcomcolcokcoFcoHcoIcoJcoKcoOcoQcoRcoSckxcoTcoVcoWcoXcoYclyconclyconcoocoscoqckxckxcotckxcoEcoDciccicciccicciccmvcmvcmvcmvcicahlahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlcoucmdcmebgZcnUbgZbgZbLlcowckEcoxbgZbgZahlahjahlahlahlahjcoycnucoyahjahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHdpXaaHaaHaaRdpXdpXdpXdpXaaHdpXdpXaaHcozahlahjahjahlahlahlahlahlahjbRMbELbRMahjahjcjtcpecpicpfcpicpjcprcpqcptcprcpwcmicpucpvcpPcpzcpxcpzcqNcuocqCcqMcuGcBIcupcuwcEUcEVcEUcELcFDcFzcmicqMcGwcmicGvcFRcmidbyckUbRXcicdsWdsXcpacpbcpbcpcahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjcmbahlbgZbgZcgCcgEbgZbgZahjahjahlahlahlahlahjahlcpdahlahlahlahlahlahlahlahjahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlahlahlahlcdmbELcdmahlahlcjtcjscjrcnhcnacmYcmUcmXcmVcmUcaWcamcaXckeckbcplcqDcpncmFbYecambGvbGvbGvbHWbSrcjqcpsckSckkcbTcbScbSccOckUcopcmFckOcktckqckxckvboSckhckhcpAcpBcbRcpDahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlbqzahlahlahjahlahjahlahlahjahjahjahlahlahlahjahlcpdahlahjahlahlahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlahlbCvbCvbTZbCvbCvahlcjtcknckmcklcjtcjtcjtcjtcjtciccpHckUcjucnicjFcpIcpJcpKcmFcpLcpMcoAcnNcorciccpQcnLcpScopcpTciccnKcnJcnJcpMcpLcmFcpWckRckbckUbOxcicbxeckhcpZcpbcpbcqaahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlahlcqbcqbcqbcqcahjahjahjahjcpdahjahjahjahjahjaaRcqbcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
-ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlbCvckdbELcqdbCvahjcjtcjtcjtcjtcjtahjahlahlahjciccqeckUckpcoNcoNckycmvcmvcqgciccqhcoBcoBcoBciccqjcqkcqlcqmcpyciccoBcoBcoBcqhciccqgcmvckTckbckUcicciccmvcmvcmvcmvcicahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlahlcqbahlahjahlahjahlahlahlcqoahlahjahjahlahlahlahlcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlbNlbEFbNmbEFbNnahlahjahlahjdsiahjahlahjdsiahjahlahlahlahjbHMboEboFahjahjahjahjbCwbCwbCwbCwbCwbCwbCwbCwbCwbCwbeybexbewbevbMjbMkbMlbMmbesbNrbNrbNtbNubNvbeubetbNybNzbNAbdWbNCbNDbNEbNFbPKblMbPQbPQbPQbPQbPQbPQbsfbCDbNIbSubNJbNJbNJbNJbNJbNKbNLboDbNJbNJbNJbNJbNJbNJbSubencGubNQbNRbNSbNRbNTbNUbNVbNWbNWbNWbNWbNWbNWbNXbeqbeobepbObahjbMYbOcbOcbOdbOebOfbOgbOhbOibEycoxbNhbPqbgZbOkayRbgZahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahjahjbJabHBbOmbOnbOobOpbJaahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahjahlahjdsiahjahlahjdsiahjahlahlahlahlbHMboEboFahlahlahlahjbOqbOrbOrbOsbOtbOubOubOwbOwbOqbQLbfHbfIbOzbMjbOAbOBbOBbfibODbNrbOEbOFbfrbfCbfsbeMbeHbmgbeBbOGbOLbOGbOMbPMbOOahjbOPbOPbOPbOPbOPcaMbCDbNIbpaboQbezbOSbOTbNJbpnbpgbphbNJbOXbOYbOZbOYbOXbSubeTbDcbMNbMNbMNbeZbMNbMNbfhbeUbPcbPcbPgbPcbPcbgSbePbeNbeObPkahjbMYbOcbPlbNbbeSbNbbPnbPobPpbEyblAbNhbPqbgZblAblAbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbJbbFXbPrbFXbPsahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahjahjahjahjahjahjahjbCvbCvbPtbPubPvbCvbCvahlahlahlahlbHMboEboFahlahlahlahjbOqbPwbOsbOsbOsbOsbOubCsbzObBqbDIbiCbjWbPBbPCbjVbjUbjTbkabkcbkbbjUbjUbjUbkabjZbjEbjDbjMbPHbPKbTqbSnbPNbPObTnbPQbPRbPSbPTbPUbOPcaMbjRbNIbSubPWbOXbOXbOXbNJbjNbeAbjPbNJbOYbQdbOYbzNbzMbyObjLbDcbQfbQgbQhbQibQjbQkbQlbQmbQnbQobQpbQqbQrbJWbSSbjBbjCbQubQubEybEybEybEybEybEybEobEobEobEyblAbNhbjyblAblAbQzbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbFXbFYbFXahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlbCvbQAbELbQBbELaClbCvahlahlahlahlbHMbqhboFahlahjbQDbQEbOqbQFbQGbQHbOsbOsbQIbQJbOubQKbQLbfHcerbQNbQObkubkwbkvbkBbkAbkCbkvbkxbkvbkzbkybPIbQVbQWbQXbQYbQZbRabRbbRcbTsahjbRebRfbPUbRgbOPcaMcbMbNIbSubRibRjbOXbRkbNJbRlbEJbktbNJbOXbvEbRpbOXbOXbSubNIbDcbJWbJWbJWbJWbLybRtbRubRvbLybJWbJWbJWbJWbJWbRwcfbbUIbRzbRAbRBbRCcbGbRCbREbQubRFbRybRGbRHcjSbNhbPqbgZbgZbgZbgZbRJahjahjahjdsidsidsidsidsidsiahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahjbCvazvbELbELbELaBdbCvahlahlahlahlbHMboEbtFahlahjbTabRNbRObRPbtWbtHbtHbtHbtHbtHbujbvkbvvbfHcerbNqbjdbjcbjbbOGbjebRZbQVbSbbScbSdbSebSfbSfbSgbShbPKbSibSjbSkbSlbSmbMrbSobPRbSpbPUbPUbOPcaMbiXbNIbSubdobOXbSsbNKbNJbNJbrFbNJbNJbSvbrAbStbSvbSzbSubNIbDcbSDbSEbSEbSFbSGbMNbSHbSIbSJbSKbEhbEhbEhbJWbSLbiYbiZbSMbSNbRBbSObSPbMsbSRbSSbRybSTbRybRHaDGbiUbiVbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlbCvazvbELbELbSYaBgbCvahlahjahlahlbJlboEbppbCvbCvbCvbTbbOqbTcbOsbOsbOsbTdbTebTfbTgbOqbQLbfHcerbNqbQObjtbjxbOGbOGbTjbNrbTkbTlbTmbSQbOGbOGbTobTpbRdbTrbPLbTtbOJbTtbTvahjbOPbOPbOPbOPbOPcaMbCDbNIbSubTwbyybyybyKbynbypbwNbjibjgbOXbvEbOXbOXbOXbSubNIbDcbEhbEhbEhbTJbTKbMNbTLbMNbTMbTNbEhbEhbEhbJWbTObjmbjqbYbbjsbTRbTSbTTbTRbTUbQubTVbRybTWbRHbgZcgFbjfbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjdvGahjahjahjbCvbCvbCvbCvbCvbCvbCvbCvbCvbCvbTZbCvbCvbCvbPtbPubPvducduddujduidukdrBdudduhbvkbvkbvkbvkbvkbvkbvkbvkbvkdugduedufcerbUdbMjbNscaGbUebUfbUebNrbOGbOGbOGbSQbUibONbONbUjchfbUlbTqbUmbUpbUobTnbPQbPRbUqbUrbUrbOPcaMbCDbNIcaVbPZbPZbPZcbhbUsbOXdulbOXbOXbOXbvEbOXbOXbOXbSubNIbDcbEhbEhbEhbUAbUBbSIbUCbMNbUDbUEbSEbSEbUFbJWbUGbUHbUIcbzcbjbRBbMsbUKbTRbULbQubUMbUMbUMbRHcaUbZPbjfbgZahjahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldvBbUPdvAdvxdvxdwadvwdvzdvydvDdvEdvEdvFbCvbELbELbELbELbELbELbELdvCbVbdsHdtidtJdrldrldrldrldtHdtpdtpdtpdtxdtpdtmbPGbPGdtkbppbQLbfHcerbVobVpbZNbZMbONbONbZLbVsbONbONbVtcgqbVvbOGbVwbVxbVybVzbOGcgrbUnbVCbTsahjbRebVDbVEbVFbOPcaMcaSdwdbZQbZQbZQbZSbSubVKbTwdtRdtOdtVdtSdtYdtXduadubbSubNIbDcbJWbJWbJWbJWbVRbVSbTLbVTbVRbJWbJWbJWbJWbJWbVUbVVbVWcaCcaBbVZbVZbVZbVZcaFbSSbUMbUMbWcbRHbZObZPbjfbgZbgZbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjbCvbELdvOdvIdvMdvKdvLbCvdvNbWjbWkbWkbWkbWkbWkbWkbWlbppdcdbWnbWnbWnbWnbWnbWnbWnbWnbWobWobWobWobWocbNdumbppbQLbfHcerbVobWscceccfbWvbSfcbVbWxbSfbSfbWybWzbWAbWBbWCbWDciobWFbOGcgrbWGbWHbMrbSobPRbWJbUrbUrbOPcaMcbMbWibCDbCDbCDbjLbSubWNbOXbOXbWPduwbUtbWTcbUbWTbUtbSubNIbDcbSDbSEbSEbWUbSGbMNbSHbSIbWVbWWbEhbEhbEhbJWbWXbWYbWZbRxbjmbYbccuccwccvccibQubUMbUMbUMbRHbZObZPbjfblAblAbgZahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjbCvbXldvHdvIdvIdvJcqrbCvbELbXmahlahlahjahlahlahjahlbppdcdbWnbXnbXobXpbXqbXrbXsbXnbXtbXubXvbXwbWobWodumbppdunbfHcerbXybXzcbDcbDbXCbMjbMjbMjbMjbMjbXDchjbNrbNrbNrbXFbOGbVybOGcgrbUnbXGbTsahjbOPbOPbOPbOPbOPcaMbXHbWibCDcbobXKbjLbpadusdurduvdutduqdupbXPcbUbXPbXQbSubNIbDcbEhbXRbEhbXSbTKbMNbTLbMNbTMbXTbEhbXRbEhbJWbXUbXVbXWbXXbXYbXZbYacbQcbPcbFbSSbCxbYfchUbRHbUMbZPbUwbgZblAbgZbgZbgZdsidsiahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjbCvdvNdvWdvUdvVdvTbELdvSbELbXmahlahlahjahlahlahjahlbppdcdbWnbXnbYqbYrbYsbYtbYubXnbYvbYwbYxbYybYzbWodumbppbQLbfHcerbYAbYBbMjcdvbYDbMjcdwcuLbYGbMjbYHbSQbZUbNrbYJbWFbOGbWDbYKbYLbUpbYMbTnbPQbPRbYNbYObYPbOPcaMbCDbWibCDbYQbXKbjLbSubYRduzbYTbYUduAduzcdHcdAcdHbzNbyObNIbDcbEhbEhbEhbYZbZabSIbUCbMNbUDbZbbSEbSEbUFbDcbRHbZcbZdbZebRHbRHbZfbZgcdMcdNbZjbVYbVZbZkbUMbUMbZPbjfbgZbrqbgZbZlbgZahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjbCvdvQdvPdvPdvRdvLbJjbCvbZvbZwahlahlahlahlahlahlahlbppdcdbWnbZxbZybZzbYsbZAbZxbZxbYvbZBbZCbYyccAbWodumbppbQLbfHbGwcbAcbAccWccBccQcdbcdlccXduxbMjbOGbSQdjybZVbYJbZWbOGbWDbYKcgrbUnbZXbTsahjbReclkbZZcaabOPcaMbCDbWibCDcabcacbjLbSubNJcadcaebNJduybNJbNJbNJbNJbNJbSubNIbDcbJWbJWbJWbJWbVRcafbTLcagbVRbJWbJWbJWbJWbDcbTRcahbTRbTRbTRbRHbZfbZgcdtcducakcalbRxbCzbRHbUMbZPbjfbgZblAblAblAcanahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahjahjahjahjahjahjahjahjahjahjahjbRJbRJbRJbCvbCvbCvdvSbCvbCvbCvbCvahjahlahlaPYahlahlahlahlahlduNdcdbWnbZxbZxcarcasbXnbZxcatcaucavcawcaxcaybWodumduMduJduKcexcbAcaDcaEcaEceJcaHcaIceKduLbMjcaLcjIbZUbNrbYJcaNbOGcaObYKcgrcaPcaQbMrbSobPRcaRbYObYObOPcaMcaSbWibCDcaTbXKbjLceQbPZbPZceObNJduObZsdpCbNKcaZccmbXIbNIbDcbSDbSEbSEcbbbSGbMNbSHbSIcbccbdbEhbEhbEhbDccbebTRbTRbTRbTRbRHcbfcbgceMceLbQubQubRxbQubRHbQubZPbjfbgZcbkcblcbmcbnahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHaaHdpXdpXaaHdpXdpXdpXaaRdpXdpXdpXaaHdpXahjahjbCvbELbELbELbELbELbELbELbELbJjcbpahjahlahlahjdsiaFFahlahlahldotdcdbWncbscbtcascbubXnbXncbvcbwcbvcbxbYycbybWoduCduBduDduEbHXcbAdpFcaEcdOcdzcbEduGcdPduFduHbPHcirbNrbNrbNrcbJbOGcbKcbLcgrbUnbOGbTsahjbOPbOPbOPbOPbOPcaMcbMbWibCDcchbXKdwdbZQbZQceocepbNKduIcuYdpBbNKceabhpcdTcbWbDcbEhbEhbEhcbXbTKbMNbTLbMNbTMcbYbEhbEhbEhbDccbZbTRccabTRbTRccbcccccdcemcebbQubRxbRxccgbRHaDGbPdbWdbgZccjcckblAcclahjahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahlahjahjahlahjahjahlahlahjahjahjahldpXahlahlbCvbRKbELbCvbCvbCvbTZbCvbCvbCvbCvahlahlahldsiaDIauKdsidsiahjdotdcdbWnccpbZxbXnbXnbXnbZxcatccqccrbYyccscctbWobCvbCvbTzbTAbTBcbAcbAccxcaEdoZdoKdoMdoNdoQbMjbOGbVAccDccEccFbQWccGbVuccIbYLbUpccJbTnbPQbPRccKccLccLbOPcaMbXHbWibCDbCDbCDbWibCDbCDccMbDbbCDbCDcuBbCDbCDbDbbSWbSXbThbDcbEhbEhbEhccRccSbSIccTbMNbUDccUbSEbSEbUFbDcbTRbTRccVbTRbTRbRHcbfcbgbTibTxbQuccYccZcdabRHbfGbPdbjfbgZbgZbgZblAbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlcdccddcdeahlcdccddcdeahlcdccddcdeahjdpXahlahlbCvcdfcdgbCvcdhbELbELbOlaClcdkbCvahlahlahlatIdsidsiahjahlahldbVdcdbWnbZxcdncdobXncdpbZxbZxbYvcdqbYybYycdrbWocdsbSVbSCbSUbSBdoidnZdcNdctdcNdctdcvdctdcubMjcdCcdDcdEbSfbSfbShbUicdFbUmbSibUncdGbTsahjbReclhcdIcdJbOPcaMbCDbWibXKcdKckCbWicGabCDccMbSabRYbSqbZtbSwbRYbSAccMbLEcdVbDcbDcbDcbDcbDcbDccdWcdXcdYbDcbDcbDcbDcbDcbDcbRHbRHbRHbRHbRHbRHcdZcdZbSxbSybRHbRHbRHbRHbRHbgZcgFbjfbgZbNibOjblAbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlcdcceecdeahlcdcceecdeahlcdcceecdeahjahjahlahlbCvbPtbPvbCvbCvcefcegaClbELbSYbCvahlahlahlahlahjahlahlahlahlbppdcdbWnbXncehceibXncejcekbXnbYvcelbYxbYybYybVebVfbfIcercHqbVgceucevcewbVhceycezdpYcaEdqsbMjceBbOGbVAbUibONceCbWEceEceFbNFceGceHbMrbSobPRceIccLccLbOPcaMbCDdvgdvecdQdvebZRduWbCDbVdbUxbUNbJFcgAbJFbUJbUxbUybLEbTEbgZahlahlahlahjahlahlceVahlahjahlahlahlahlbgZceWayRceYceZceZbRHcfacfabSxbiZcfccfdblAblAblAaDGcgFbUwbgZcffblAblAbgZbgZbgZahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjcdcceecdeahlcdcceecdeahjcdcceecdeahjahjahlahlahlahlahjahjbCvbCvbCvbCvbTZbCvbCvahlahlahlahlahjahlahlahjahlbppdcdbWnbXncfgcfhcficfjcfkbXncflcfmcfncfocfpbWocfqdpVdpPdpQdpNdpOdpTdpUdpRdpSdpsdpzdpadprdpAdpEbQZcfFbVBbOGbOGbOGbOMbVvbVBbUnbXGbTsahjbOPbOPbOPbOPbOPcaMbCDcchbXddpDbXcbXKbUzbCDbCDcfKbTGcdUbXIcfMbTFbCDbCDbLEbTEbgZahlahlahlahjahlahlceVahlahjahlahlahlahlbgZblAchmbrscOnciqbRHcfScfSbTDbiZbRHbQubgZcfUcfVaDGcgFbTCbECbECbECcfYcfZcgacfZcgbdsiahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlcdcceecdeahjcdcceecdeahlcdcceecdeahlahjahlahlahlahlahlahlbCvaOlbCvbELbELbCvahjahlahjahlahlahjahlahlahjahlbppdcdbWnbWnbWnbWnbWnbWnbWnbWnbWobWobWobWobWobWobCvbWpbCvcggcghcghcghcgicgjcgkcghbWrdqEdqRbMjchebXEbSkbXjcgscgtcgsbXjcgubXjcgvbUicgwahjahjahjahjahjahjcaMbWhbWhbWhbWhdvqbWhbWhbWhcgxbCDcgzcgzdpdcgzcgzbCDbYQbzgbTEbgZcgCcgDcgEbgZcgCcgDcuncgEbgZcgCcgDcgDcgEbgZbgZcgFcgGbgZbgZbRHbRHbRHbWabWbbRHaDGbgZcbmblAbpYcgFbWdbgZbgZcgLbgZbgZbgZbgZahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHdpXahjahlcdcceecdeahjcdcceecdeahlcdcceecdeahjahjahjahjcgMcgNcgNcgNcgNbCvbCvcgObELbCvcgPbWkbWkbWkbWkbWkbWkbWkbWlbCvbppdcdbCvcgQbVPbVObVObVObVObVObVObVObVObVObVXbVXbVObVQcefcggcnjcgWcgXcgYcgZchacghdoBcmIdqxbMjchebXichgchhchibWIchkchlbOGbXechnchobOIahjahjahlahlahlahldvddvcdvfdvkdvhdvndvjdvibWhchqdpkbViduYduXcdUcdUbXKbXKbzgbJEbVHbVHbVHbVHbVHbVHbVHbVIbVqbVqbVqbVqbVqbVqbVrbVqduQbVqbVqbVGciFbVlbVkbVjbVnbgZbgZbVmciFbVJciFbVLbjfbgZchLblAblAbgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahjahlahjahjchMahjahjahjchMahjahlahjchMahjahlahjchNchOchPchQchRchSchTcgebELchYchZciachZchZchZchZchZchZchZchZchZchZdsrdsydrBdrAbiTcicciccicciccicciccicciccicciccicciccicciccggcghciecifdsbbZDbZEbZFckUckbdspciccincfGcipceDcipcfGcipceDcipccHcipccHcisahjahjahlahlahlahlbWhdvZdvYdwcdwbdvXdvtdvsbWhchqduRcdUduSbYWbYVceTbFobXabXbbWQbWQbWQbWQbWQbWQbWQbWRbWSbWQbWQbWQbWQbWQbWQbYIbYEbYhchEbYCbYibYcbYcbYcbYdbXAbXxbXObXBbYYbYcbYcbYXbZhbgZbOjblAcbabgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjciRciSciSciTciUciUciUciUciUciUciUciUciUciUciUciVciXciYciXciZdrvcjbcbHchZcjdcjeaClbCvcjgcjhcjhcjhcjhcjhcjhcjhcjibCvbCvdrqdrldrjdrgciccjncjncjociccjpcpFcpEcpCcpOcpNcjvcmvcjxcjycghcjzcjAdracjCcjDcjEcjHdrbdrdcicahjcbIahjcaMahjcbIahjcaMahjbZqahjbZqahlahlahlahlahlahlahlbWhdvpdvrdvvdvmdvldvodvubWhbXKcjLcjMduTcjObXJbFobSZbWqbCDbgZcgCcgDcgDcgEbgZcgCcgDcgDcgEbgZcgCcgDcgDcgEbgZcpGblAbgZbWKbWwbgZbgZcgCcgEbgZbgZcjTbPdbPbbgZcjUcjVbpWbgZbgZbgZbgZbgZahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHahlahjahlahjahjcjWahjahlahjcjWahjahlahjcjWahjahlahlchNchOcjXcjYcjZckacgNbELbELbELbELbCvahlahlahjahlahlahjahlahlahjahlbCvckdbCvcmacmhcicckfckgckhckickjbhAckUckUckUbOHbOKbORckrbhAcghbvCckuclScjCckwcghaJbclRclMcicbOPckzbReckzbOPckzbReckzbOPckAbReckBbOPahlahlahlahlahlahlbWhbUWbUTbTXbUTbWfbUXbUYbWgbUZbUZccPbVabWeccPcnCbCDbCDbCDahlahlahjahlahjahjahlahlahlahlahlahlahlahlahlbgZcnyckEbgZbPbbPdbgZahlahlahlahlbgZblAbPdbPackGckGckHckIckGahlahjahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHdpXahjahjcdcckJcdeahlcdcckJcdeahlcdcckJcdeahjahjahjahjckKcgNcgNcgNcgNbJibJjbELbELbCvahjahjcjtcjtcjtcjtcjtcjtcjtahjbCvbCvbCvcmBcmxcicckPckhckhckickQckxckxcmwcmjcmqcmicmiciickUcghckWcmQcmJckZclacghclbcmIcmDcicbOPcldcnDclfbOPclgcnXclibOPcljcnYcllbOPahlahlahlahlahlahlbUVbUObUTbUUbXfbXgbXhbXkbWhahjbCDcfKduUcnZcacbCDbCDahlbRJahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlbgZcnUbgZbgZbPibPdbgZbgZcgCcgEbgZbgZblAbPjbPfckGclqclrclsckGahlahlahjahjahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlcdcckJcdeahjcdcckJcdeahlcdcckJcdeahlahlahlahlahlahlahlahlbCvbCvbCvbXlbELbCvahlahlcjtclFclzclEclzclucjtahlbCvbSYbELcnzcmxcicclAclAclBcicclCclDcmmcnpckbcmFbPAcksckockocghclKcnmcncclNclOclPclQcmScmRcicbOPclTclUclTbOPclVclWclVbOPclXclYclZbOPahlahlahlahlahlahlbWhbYpbYnbYobYlbYmbYjbYkbWhahjahlahjduVahlahlahjahlahlbRJahlahlahlahlahjahjahlahlahlahlahlahlcmccmdcmebgZbJkaDGbgZbPEbPFciCciFciCciCciCciCciGcfRbPDckGcnBcnAcmkckGahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaGcahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjcdcckJcdeahlcdcckJcdeahlcdcckJcdeahjahlahlahlahlahlahlahlcgccgdcgcbELbELbCvahlahlcjtcmscmocmncmrcmpcjtahlbCvcegbELcnzcmxcicclAclAclBciccmucmvcmtcnFcnHckVcmAcmvcmzcmAcmvdtocnOcnMcmFcmGcmHcmEckbcnIcicbOPclTcmKclTbOPclVcmLclVbOPclZcmMclZbOPahlahlahlahlahlahlbWhbWhbWhbZrbUQbZmbZobZpbUQahjahlahjcmNahlahlahlahlahlbRJahlahlahlahlahjahjahlahlahlahlahlahjcbnblAcmObgZcphblAbgZbPVbKLbKLbQabKLchEchEchEbPXbPYchKckGcnQcnPcmTckGahlahlahjahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahjcdcckJcdeahlcdcckJcdeahjcdcckJcdeahjahjahjahjahjahjahjahjbCvbCvbCvbCvbELbCvahjahjcjtcmPcoZcoUcoPcmPcjtahjbCvciccnbclecoccicclAclBclBciccndcnecmycodckbclHclGclJclGclGcnkcnlcnScnRcnocnncnncnncobcoacicbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPbOPahlahlahlahlahlahlahlahlahlbZnbUQcfHcbOcdLbUQahjahlahlahlahlahlahlahlahlbRJahlahlahlahlahjahjahlahlahlahlahjdsicbncnrblAbrqcpGblAbgZbgZbgZbgZbgZblAbgZahlahjahlahjahlcnscntcnucnvcnwahjahjahjahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaRahjcdccnxcdeahlcdccnxcdeahlcdccnxcdeahjdpXahjahlahlahlahlahlahlahlahlbLWbELcaqahlahlcjtcmZcnfcpkcnqcngcjtcjtcjtciccnEclecoeciccicciccicciccnGckUcofcnpckbckUckUckUbQybQwccOckbckbcnpckUcopckUckUcohcogcicahjahlahlahlahjahjahlahlahjahlahlahlahjahlahlahlahlahlahlahlahlahlbZubUQbZmcfIbZpbUQahjahlahlahlahlahlahlahlahlbRJahlahlahlahlahlahjahlahlahlahlahldsicbnblAaBRbgZbLkblAblAblAblAblAblAblAbgZahlahjahlahjahlahjcnVcnWcnVahjahlahlahjahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahldpXahlahjahlahlahlahjahjahjahlahlahjahjahldpXahjahjahlahlahlahlahlahlahlbRMbELbRMahlahlcjtcoicppcpocpmcojcokcomcolcokcoFcoHcoIcoJcoKcoOcoQcoRcoSckxcoTcoVcoWcoXcoYclyconclyconcoocoscoqckxckxcotckxcoEcoDciccicciccicciccmvcmvcmvcmvcicahlahjahjahjahlahlahlahlahlahlahlahlahlbZubUQdvachpduZcfJahjahlahlahlahlaaeahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlcoucmdcmebgZcnUbgZbgZbLlcowckEcoxbgZbgZahlahjahlahlahlahjcoycnucoyahjahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaHaaHdpXaaHaaHaaRdpXdpXdpXdpXaaHdpXdpXaaHcozahlahjahjahlahlahlahlahlahjbRMbELbRMahjahjcjtcpecpicpfcpicpjcprcpqcptcprcpwcmicpucpvcpPcpzcpxcpzcqNcuocqCcqMcuGcBIcupcuwcEUcEVcEUcELcFDcFzcmicqMcGwcmicGvcFRcmidbyckUbRXcicdsWdsXcpacpbcpbcpcahlahlahlahlahlahlahlahlahlahlahlahlbZubUQbUQdvbbUQbUQahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjcmbahlbgZbgZcgCcgEbgZbgZahjahjahlahlahlahlahjahlcpdahlahlahlahlahlahlahlahjahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlahlahlahlcdmbELcdmahlahlcjtcjscjrcnhcnacmYcmUcmXcmVcmUcaWcamcaXckeckbcplcqDcpncmFbYecambGvbGvbGvbHWbSrcjqcpsckSckkcbTcbScbSccOckUcopcmFckOcktckqckxckvboSckhckhcpAcpBcbRcpDahlahlahlahlahlahlahlahlahlahlahlahlbZudsibUQbTYbUQcrVahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlbqzahlahlahjahlahjahlahlahjahjahjahlahlahlahjahlcpdahlahjahlahlahjahjahjahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlaaeahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlahlbCvbCvbTZbCvbCvahlcjtcknckmcklcjtcjtcjtcjtcjtciccpHckUcjucnicjFcpIcpJcpKcmFcpLcpMcoAcnNcorciccpQcnLcpScopcpTciccnKcnJcnJcpMcpLcmFcpWckRckbckUbOxcicbxeckhcpZcpbcpbcqaahlahlahlahlahlahlahlaaeahlahlahlahlcmNdsibURbUSbURdsiahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlahlcqbcqbcqbcqcahjahjahjahjcpdahjahjahjahjahjaaRcqbcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
+ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlahlbCvckdbELcqdbCvahjcjtcjtcjtcjtcjtahjahlahlahjciccqeckUckpcoNcoNckycmvcmvcqgciccqhcoBcoBcoBciccqjcqkcqlcqmcpyciccoBcoBcoBcqhciccqgcmvckTckbckUcicciccmvcmvcmvcmvcicahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlahlahlahlahjahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlahlcqbahlahjahlahjahlahlahlcqoahlahjahjahlahlahlahlcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjahlbLWbDicqqcqrbCvahjahlahlahjahlahlahjahlahlahjciccqscqtcmFcqucqvcqwcmvcqxcqyciccqzcoLcoMcoLcqDcqEcqFcqGcqHcpycqIcoLcoLcoLcqJciccqKcqLcleckbckYclbckXckUbZYcqIahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahjahlahlcqbahlcqOcqOcqOcqOcqOahjcqPahjcqOcqOcqOcqOcqOahlcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahjbRMcqQcqRbfFbCvbCvcqTcqUcqUcqUcqUcqUcqUcqVcmvciccqWcqXcqYcqZcqWciccicciccqgcicciccmzcracrbcrccrdcpMcrecpMcrfcrgcrbcracrhcicciccqgciccleclpclwclvclmckUciAcizahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlcqbahjcrjcrkcrkcrkcrkcrlcqPcrmcrncrncrncrncroahjcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
ahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjcrpcrqcrqcrrbCvahjahlahlahjahlahlahjahlahlahjdsidsidsiahjahlahjdsiciccrscrtcruahlahlahlcrvcrwcracracracracracrwcrxahlahlahlcrycrzcrAclLclIclyclyclxcpXciDcjQahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahjahlahlcqbahjcrBcrBcrBcrBcrBahlcqPahlcrBcrBcrBcrBcrBahjcqbahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahlahl
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 5a048c562bb..41f2276b61f 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -19,6 +19,7 @@ Pipelines + Other Objects -> Pipe network
var/can_unwrench = 0
var/initialize_directions = 0
var/pipe_color
+ var/obj/item/pipe/stored
var/global/list/iconsetids = list()
var/global/list/pipeimages = list()
@@ -27,6 +28,12 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/process()
//build_network()
*/
+
+/obj/machinery/atmospherics/New()
+ ..()
+ if(can_unwrench)
+ stored = new(src, make_from=src)
+
/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
// Check to see if should be added to network. Add self if so and adjust variables appropriately.
// Note don't forget to have neighbors look as well!
@@ -90,17 +97,22 @@ Pipelines + Other Objects -> Pipe network
"[user] unfastens \the [src].", \
"You have unfastened \the [src].", \
"You hear ratchet.")
- var/obj/item/pipe/newpipe = new(loc, make_from=src)
- transfer_fingerprints_to(newpipe)
- if(istype(src, /obj/machinery/atmospherics/pipe))
- for(var/obj/machinery/meter/meter in T)
- if(meter.target == src)
- new /obj/item/pipe_meter(T)
- qdel(meter)
- qdel(src)
+ Deconstruct()
else
return ..()
+/obj/machinery/atmospherics/Deconstruct()
+ if(can_unwrench)
+ var/turf/T = loc
+ stored.loc = T
+ transfer_fingerprints_to(stored)
+ if(istype(src, /obj/machinery/atmospherics/pipe))
+ for(var/obj/machinery/meter/meter in T)
+ if(meter.target == src)
+ new /obj/item/pipe_meter(T)
+ qdel(meter)
+ qdel(src)
+
/obj/machinery/atmospherics/proc/nullifyPipenetwork()
return
@@ -125,3 +137,6 @@ Pipelines + Other Objects -> Pipe network
return img
+/obj/machinery/atmospherics/singularity_pull(S, current_size)
+ if(current_size >= STAGE_FIVE)
+ Deconstruct()
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm
index da4756b3d74..a4cac57ca48 100644
--- a/code/ATMOSPHERICS/pipes.dm
+++ b/code/ATMOSPHERICS/pipes.dm
@@ -2,7 +2,6 @@
var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke
var/datum/pipeline/parent
var/volume = 0
- force = 20
layer = 2.4 //under wires with their 2.44
use_power = 0
can_unwrench = 1
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 512768419be..2991fe66569 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -44,3 +44,10 @@
#define BE_CLOSE 1 //in the case of a silicon, to select if they need to be next to the atom
#define NO_DEXTERY 1 //if other mobs (monkeys, aliens, etc) can use this
//used by canUseTopic()
+
+//singularity defines
+#define STAGE_ONE 1
+#define STAGE_TWO 3
+#define STAGE_THREE 5
+#define STAGE_FOUR 7
+#define STAGE_FIVE 9
\ No newline at end of file
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 03265398796..c253e1e02e6 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -70,4 +70,14 @@
/proc/log_pda(text)
if (config.log_pda)
- diary << "\[[time_stamp()]]PDA: [text]"
\ No newline at end of file
+ diary << "\[[time_stamp()]]PDA: [text]"
+
+/proc/log_chat(text)
+ if (config.log_pda) //reusing this for now, can change if needed
+ diary << "\[[time_stamp()]]CHAT: [text]"
+
+/proc/log_comment(text)
+ if (config.log_pda)
+ //reusing the PDA option because I really don't think news comments are worth a config option
+ diary << "\[[time_stamp()]]COMMENT: [text]"
+
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 433bfc66de3..067bfcac67f 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -454,3 +454,59 @@ for(var/t in test_times)
return "SW"
else
return
+
+
+
+
+//Turns a Body_parts_covered bitfield into a list of organ/limb names.
+//(I challenge you to find a use for this)
+/proc/body_parts_covered2organ_names(var/bpc)
+ var/list/covered_parts = list()
+
+ if(!bpc)
+ return 0
+
+ if(bpc & FULL_BODY)
+ covered_parts |= list("l_arm","r_arm","head","chest","l_leg","r_leg")
+
+ else
+ if(bpc & HEAD)
+ covered_parts |= list("head")
+ if(bpc & CHEST)
+ covered_parts |= list("chest")
+ if(bpc & GROIN)
+ covered_parts |= list("chest")
+
+ if(bpc & ARMS)
+ covered_parts |= list("l_arm","r_arm")
+ else
+ if(bpc & ARM_LEFT)
+ covered_parts |= list("l_arm")
+ if(bpc & ARM_RIGHT)
+ covered_parts |= list("r_arm")
+
+ if(bpc & HANDS)
+ covered_parts |= list("l_arm","r_arm")
+ else
+ if(bpc & HAND_LEFT)
+ covered_parts |= list("l_arm")
+ if(bpc & HAND_RIGHT)
+ covered_parts |= list("r_arm")
+
+ if(bpc & LEGS)
+ covered_parts |= list("l_leg","r_leg")
+ else
+ if(bpc & LEG_LEFT)
+ covered_parts |= list("l_leg")
+ if(bpc & LEG_RIGHT)
+ covered_parts |= list("r_leg")
+
+ if(bpc & FEET)
+ covered_parts |= list("l_leg","r_leg")
+ else
+ if(bpc & FOOT_LEFT)
+ covered_parts |= list("l_leg")
+ if(bpc & FOOT_RIGHT)
+ covered_parts |= list("r_leg")
+
+ return covered_parts
\ No newline at end of file
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index a799dd0ee1c..e50f6555116 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -8,6 +8,7 @@ var/global/list/shuttle_caller_list = list() //list of all communication cons
var/global/list/machines = list()
var/global/list/processing_objects = list()
var/global/list/active_diseases = list()
+var/global/list/aibots = list()
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm
index b2d288b25e1..f8d0610d410 100644
--- a/code/_onclick/hud/ai.dm
+++ b/code/_onclick/hud/ai.dm
@@ -1,3 +1,137 @@
+/obj/screen/ai
+ icon = 'icons/mob/screen_ai.dmi'
+
+/obj/screen/ai/aicore
+ name = "AI core"
+ icon_state = "ai_core"
+
+/obj/screen/ai/aicore/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.view_core()
+
+/obj/screen/ai/camera_list
+ name = "Show Camera List"
+ icon_state = "camera"
+
+/obj/screen/ai/camera_list/Click()
+ var/mob/living/silicon/ai/AI = usr
+ var/camera = input(AI, "Choose which camera you want to view", "Cameras") as null|anything in AI.get_camera_list()
+ AI.ai_camera_list(camera)
+
+/obj/screen/ai/camera_track
+ name = "Track With Camera"
+ icon_state = "track"
+
+/obj/screen/ai/camera_track/Click()
+ var/mob/living/silicon/ai/AI = usr
+ var/target_name = input(AI, "Choose who you want to track", "Tracking") as null|anything in AI.trackable_mobs()
+ AI.ai_camera_track(target_name)
+
+/obj/screen/ai/camera_light
+ name = "Toggle Camera Light"
+ icon_state = "camera_light"
+
+/obj/screen/ai/camera_light/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.toggle_camera_light()
+
+/obj/screen/ai/crew_monitor
+ name = "Crew Monitoring Console"
+ icon_state = "crew_monitor"
+
+/obj/screen/ai/crew_monitor/Click()
+ var/mob/living/silicon/ai/AI = usr
+ crewmonitor(AI,AI)
+
+/obj/screen/ai/crew_manifest
+ name = "Crew Manifest"
+ icon_state = "manifest"
+
+/obj/screen/ai/crew_manifest/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.ai_roster()
+
+/obj/screen/ai/alerts
+ name = "Show Alerts"
+ icon_state = "alerts"
+
+/obj/screen/ai/alerts/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.ai_alerts()
+
+/obj/screen/ai/announcement
+ name = "Make Announcement"
+ icon_state = "announcement"
+
+/obj/screen/ai/announcement/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.announcement()
+
+/obj/screen/ai/call_shuttle
+ name = "Call Emergency Shuttle"
+ icon_state = "call_shuttle"
+
+/obj/screen/ai/call_shuttle/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.ai_call_shuttle()
+
+/obj/screen/ai/state_laws
+ name = "State Laws"
+ icon_state = "state_laws"
+
+/obj/screen/ai/state_laws/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.checklaws()
+
+/obj/screen/ai/pda_msg_send
+ name = "PDA - Send Message"
+ icon_state = "pda_send"
+
+/obj/screen/ai/pda_msg_send/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.cmd_send_pdamesg(usr)
+
+/obj/screen/ai/pda_msg_show
+ name = "PDA - Show Message Log"
+ icon_state = "pda_receive"
+
+/obj/screen/ai/pda_msg_show/Click()
+ var/mob/living/silicon/ai/AI = usr
+ AI.cmd_show_message_log(usr)
+
+/obj/screen/ai/image_take
+ name = "Take Image"
+ icon_state = "take_picture"
+
+/obj/screen/ai/image_take/Click()
+ if(isAI(usr))
+ var/mob/living/silicon/ai/AI = usr
+ AI.aicamera.toggle_camera_mode()
+ else if(isrobot(usr))
+ var/mob/living/silicon/robot/R = usr
+ R.aicamera.toggle_camera_mode()
+
+/obj/screen/ai/image_view
+ name = "View Images"
+ icon_state = "view_images"
+
+/obj/screen/ai/image_view/Click()
+ if(isAI(usr))
+ var/mob/living/silicon/ai/AI = usr
+ AI.aicamera.viewpictures()
+ else if(isrobot(usr))
+ var/mob/living/silicon/robot/R = usr
+ R.aicamera.viewpictures()
+
+/obj/screen/ai/sensors
+ name = "Sensor Augmentation"
+ icon_state = "ai_sensor"
+
+/obj/screen/ai/sensors/Click()
+ var/mob/living/silicon/S = usr
+ S.sensor_mode()
+
+
/datum/hud/proc/ai_hud()
adding = list()
other = list()
@@ -5,139 +139,79 @@
var/obj/screen/using
//AI core
- using = new /obj/screen()
- using.name = "AI Core"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "ai_core"
+ using = new /obj/screen/ai/aicore()
using.screen_loc = ui_ai_core
- using.layer = 20
adding += using
//Camera list
- using = new /obj/screen()
- using.name = "Show Camera List"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "camera"
+ using = new /obj/screen/ai/camera_list()
using.screen_loc = ui_ai_camera_list
- using.layer = 20
adding += using
//Track
- using = new /obj/screen()
- using.name = "Track With Camera"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "track"
+ using = new /obj/screen/ai/camera_track()
using.screen_loc = ui_ai_track_with_camera
- using.layer = 20
adding += using
//Camera light
- using = new /obj/screen()
- using.name = "Toggle Camera Light"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "camera_light"
+ using = new /obj/screen/ai/camera_light()
using.screen_loc = ui_ai_camera_light
- using.layer = 20
adding += using
-//Crew Monitorting
- using = new /obj/screen()
- using.name = "Crew Monitorting"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "crew_monitor"
+//Crew Monitoring
+ using = new /obj/screen/ai/crew_monitor()
using.screen_loc = ui_ai_crew_monitor
- using.layer = 20
adding += using
//Crew Manifest
- using = new /obj/screen()
- using.name = "Show Crew Manifest"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "manifest"
+ using = new /obj/screen/ai/crew_manifest()
using.screen_loc = ui_ai_crew_manifest
- using.layer = 20
adding += using
//Alerts
- using = new /obj/screen()
- using.name = "Show Alerts"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "alerts"
+ using = new /obj/screen/ai/alerts()
using.screen_loc = ui_ai_alerts
- using.layer = 20
adding += using
//Announcement
- using = new /obj/screen()
- using.name = "Announcement"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "announcement"
+ using = new /obj/screen/ai/announcement()
using.screen_loc = ui_ai_announcement
- using.layer = 20
adding += using
//Shuttle
- using = new /obj/screen()
- using.name = "Call Emergency Shuttle"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "call_shuttle"
+ using = new /obj/screen/ai/call_shuttle()
using.screen_loc = ui_ai_shuttle
- using.layer = 20
adding += using
//Laws
- using = new /obj/screen()
- using.name = "State Laws"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "state_laws"
+ using = new /obj/screen/ai/state_laws()
using.screen_loc = ui_ai_state_laws
- using.layer = 20
adding += using
//PDA message
- using = new /obj/screen()
- using.name = "PDA - Send Message"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "pda_send"
+ using = new /obj/screen/ai/pda_msg_send()
using.screen_loc = ui_ai_pda_send
- using.layer = 20
adding += using
//PDA log
- using = new /obj/screen()
- using.name = "PDA - Show Message Log"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "pda_receive"
+ using = new /obj/screen/ai/pda_msg_show()
using.screen_loc = ui_ai_pda_log
- using.layer = 20
adding += using
//Take image
- using = new /obj/screen()
- using.name = "Take Image"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "take_picture"
+ using = new /obj/screen/ai/image_take()
using.screen_loc = ui_ai_take_picture
- using.layer = 20
adding += using
//View images
- using = new /obj/screen()
- using.name = "View Images"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "view_images"
+ using = new /obj/screen/ai/image_view()
using.screen_loc = ui_ai_view_images
- using.layer = 20
adding += using
//Medical/Security sensors
- using = new /obj/screen()
- using.name = "Sensor Augmentation"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "ai_sensor"
+ using = new /obj/screen/ai/sensors()
using.screen_loc = ui_ai_sensor
- using.layer = 20
adding += using
mymob.client.screen += adding + other
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index ff3c1405301..7b183381253 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -1,3 +1,24 @@
+/obj/screen/alien
+ icon = 'icons/mob/screen_alien.dmi'
+
+/obj/screen/alien/leap
+ name = "toggle leap"
+ icon_state = "leap_off"
+
+/obj/screen/alien/leap/Click()
+ if(istype(usr, /mob/living/carbon/alien/humanoid))
+ var/mob/living/carbon/alien/humanoid/hunter/AH = usr
+ AH.toggle_leap()
+
+/obj/screen/alien/nightvision
+ name = "toggle night-vision"
+ icon_state = "nightvision1"
+
+/obj/screen/alien/nightvision/Click()
+ var/mob/living/carbon/alien/humanoid/A = usr
+ A.nightvisiontoggle()
+
+
/datum/hud/proc/alien_hud()
adding = list()
other = list()
@@ -50,59 +71,42 @@
using.layer = 19
adding += using
- using = new /obj/screen()
- using.name = "act_intent"
+ using = new /obj/screen/act_intent()
using.icon = 'icons/mob/screen_alien.dmi'
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
- using.layer = 20
adding += using
action_intent = using
if(istype(mymob, /mob/living/carbon/alien/humanoid/hunter))
- mymob.leap_icon = new /obj/screen()
- mymob.leap_icon.name = "leap"
- mymob.leap_icon.icon = 'icons/mob/screen_alien.dmi'
- mymob.leap_icon.icon_state = "leap_off"
+ mymob.leap_icon = new /obj/screen/alien/leap()
mymob.leap_icon.screen_loc = ui_alien_storage_r
- mymob.leap_icon.layer = 20
adding += mymob.leap_icon
- using = new /obj/screen()
- using.name = "mov_intent"
+ using = new /obj/screen/mov_intent()
using.icon = 'icons/mob/screen_alien.dmi'
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi
- using.layer = 20
adding += using
move_intent = using
- using = new /obj/screen()
- using.name = "drop"
+ using = new /obj/screen/drop()
using.icon = 'icons/mob/screen_alien.dmi'
- using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw
- using.layer = 19
adding += using
- using = new /obj/screen()
- using.name = "resist"
+ using = new /obj/screen/resist()
using.icon = 'icons/mob/screen_alien.dmi'
- using.icon_state = "act_resist"
using.screen_loc = ui_pull_resist
- using.layer = 19
adding += using
- mymob.throw_icon = new /obj/screen()
+ mymob.throw_icon = new /obj/screen/throw_catch()
mymob.throw_icon.icon = 'icons/mob/screen_alien.dmi'
- mymob.throw_icon.icon_state = "act_throw_off"
- mymob.throw_icon.name = "throw/catch"
mymob.throw_icon.screen_loc = ui_drop_throw
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen_alien.dmi'
mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist
//begin indicators
@@ -131,10 +135,7 @@
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_alien_health
- nightvisionicon = new /obj/screen()
- nightvisionicon.icon ='icons/mob/screen_alien.dmi'
- nightvisionicon.icon_state = "nightvision1"
- nightvisionicon.name = "nightvision"
+ nightvisionicon = new /obj/screen/alien/nightvision()
nightvisionicon.screen_loc = ui_alien_nightvision
alien_plasma_display = new /obj/screen()
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index 2775f546c6f..716947a1245 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -4,21 +4,17 @@
var/obj/screen/using
- using = new /obj/screen()
- using.name = "act_intent"
+ using = new /obj/screen/act_intent()
using.icon = 'icons/mob/screen_alien.dmi'
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
- using.layer = 20
adding += using
action_intent = using
- using = new /obj/screen()
- using.name = "mov_intent"
+ using = new /obj/screen/mov_intent()
using.icon = 'icons/mob/screen_alien.dmi'
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi
- using.layer = 20
adding += using
move_intent = using
@@ -48,16 +44,12 @@
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_alien_health
- nightvisionicon = new /obj/screen()
- nightvisionicon.icon ='icons/mob/screen_alien.dmi'
- nightvisionicon.icon_state = "nightvision1"
- nightvisionicon.name = "nightvision"
+ nightvisionicon = new /obj/screen/alien/nightvision()
nightvisionicon.screen_loc = ui_alien_nightvision
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen_alien.dmi'
mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist
mymob.blind = new /obj/screen()
diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm
index 26b803f830d..086dc39c95a 100644
--- a/code/_onclick/hud/drones.dm
+++ b/code/_onclick/hud/drones.dm
@@ -4,18 +4,14 @@
var/obj/screen/using
var/obj/screen/inventory/inv_box
- using = new /obj/screen()
- using.name = "drop"
+ using = new /obj/screen/drop()
using.icon = ui_style
- using.icon_state = "act_drop"
using.screen_loc = ui_drone_drop
- using.layer = 19
adding += using
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = ui_style
mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_drone_pull
adding += mymob.pullin
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 87b3aaa984a..5b4b2c7fc09 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -1,3 +1,45 @@
+/obj/screen/human
+ icon = 'icons/mob/screen_midnight.dmi'
+
+/obj/screen/human/toggle
+ name = "toggle"
+ icon_state = "toggle"
+
+/obj/screen/human/toggle/Click()
+ if(usr.hud_used.inventory_shown)
+ usr.hud_used.inventory_shown = 0
+ usr.client.screen -= usr.hud_used.other
+ else
+ usr.hud_used.inventory_shown = 1
+ usr.client.screen += usr.hud_used.other
+
+ usr.hud_used.hidden_inventory_update()
+
+/obj/screen/human/equip
+ name = "equip"
+ icon_state = "act_equip"
+
+/obj/screen/human/equip/Click()
+ if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
+ return 1
+ var/mob/living/carbon/human/H = usr
+ H.quick_equip()
+
+/obj/screen/ling
+ invisibility = 101
+
+/obj/screen/ling/sting
+ name = "current sting"
+
+/obj/screen/ling/sting/Click()
+ var/mob/living/carbon/U = usr
+ U.unset_sting()
+
+/obj/screen/ling/chems
+ name = "chemical storage"
+ icon_state = "power_display"
+
+
/datum/hud/proc/human_hud(ui_style = 'icons/mob/screen_midnight.dmi')
adding = list()
other = list()
@@ -6,29 +48,22 @@
var/obj/screen/using
var/obj/screen/inventory/inv_box
- using = new /obj/screen()
- using.name = "act_intent"
+ using = new /obj/screen/act_intent()
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
- using.layer = 20
adding += using
action_intent = using
- using = new /obj/screen()
- using.name = "mov_intent"
+ using = new /obj/screen/mov_intent()
using.icon = ui_style
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi
- using.layer = 20
adding += using
move_intent = using
- using = new /obj/screen()
- using.name = "drop"
+ using = new /obj/screen/drop()
using.icon = ui_style
- using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw
- using.layer = 19
hotkeybuttons += using
inv_box = new /obj/screen/inventory()
@@ -143,28 +178,19 @@
inv_box.layer = 19
adding += inv_box
- using = new /obj/screen()
- using.name = "resist"
+ using = new /obj/screen/resist()
using.icon = ui_style
- using.icon_state = "act_resist"
using.screen_loc = ui_pull_resist
- using.layer = 19
hotkeybuttons += using
- using = new /obj/screen()
- using.name = "toggle"
+ using = new /obj/screen/human/toggle()
using.icon = ui_style
- using.icon_state = "toggle"
using.screen_loc = ui_inventory
- using.layer = 20
adding += using
- using = new /obj/screen()
- using.name = "equip"
+ using = new /obj/screen/human/equip()
using.icon = ui_style
- using.icon_state = "act_equip"
using.screen_loc = ui_equip
- using.layer = 20
adding += using
inv_box = new /obj/screen/inventory()
@@ -221,10 +247,8 @@
inv_box.layer = 19
adding += inv_box
- mymob.throw_icon = new /obj/screen()
+ mymob.throw_icon = new /obj/screen/throw_catch()
mymob.throw_icon.icon = ui_style
- mymob.throw_icon.icon_state = "act_throw_off"
- mymob.throw_icon.name = "throw/catch"
mymob.throw_icon.screen_loc = ui_drop_throw
hotkeybuttons += mymob.throw_icon
@@ -243,9 +267,7 @@
mymob.toxin.name = "toxin"
mymob.toxin.screen_loc = ui_toxin
- mymob.internals = new /obj/screen()
- mymob.internals.icon_state = "internal0"
- mymob.internals.name = "internal"
+ mymob.internals = new /obj/screen/internals()
mymob.internals.screen_loc = ui_internal
mymob.fire = new /obj/screen()
@@ -268,25 +290,17 @@
mymob.nutrition_icon.name = "nutrition"
mymob.nutrition_icon.screen_loc = ui_nutrition
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = ui_style
mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist
hotkeybuttons += mymob.pullin
- lingchemdisplay = new /obj/screen()
- lingchemdisplay.name = "chemical storage"
- lingchemdisplay.icon_state = "power_display"
+ lingchemdisplay = new /obj/screen/ling/chems()
lingchemdisplay.screen_loc = ui_lingchemdisplay
- lingchemdisplay.layer = 20
- lingchemdisplay.invisibility = 101
- lingstingdisplay = new /obj/screen()
- lingstingdisplay.name = "current sting"
+ lingstingdisplay = new /obj/screen/ling/sting()
lingstingdisplay.screen_loc = ui_lingstingdisplay
- lingstingdisplay.layer = 20
- lingstingdisplay.invisibility = 101
mymob.blind = new /obj/screen()
mymob.blind.icon = 'icons/mob/screen_full.dmi'
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index fecbfb5c513..8b2227e1009 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -5,30 +5,23 @@
var/obj/screen/using
var/obj/screen/inventory/inv_box
- using = new /obj/screen()
- using.name = "act_intent"
+ using = new /obj/screen/act_intent()
using.icon = ui_style
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
- using.layer = 20
adding += using
action_intent = using
- using = new /obj/screen()
- using.name = "mov_intent"
+ using = new /obj/screen/mov_intent()
using.icon = ui_style
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi
- using.layer = 20
adding += using
move_intent = using
- using = new /obj/screen()
- using.name = "drop"
+ using = new /obj/screen/drop()
using.icon = ui_style
- using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw
- using.layer = 19
adding += using
inv_box = new /obj/screen/inventory()
@@ -89,10 +82,8 @@
inv_box.layer = 19
adding += inv_box
- mymob.throw_icon = new /obj/screen()
+ mymob.throw_icon = new /obj/screen/throw_catch()
mymob.throw_icon.icon = ui_style
- mymob.throw_icon.icon_state = "act_throw_off"
- mymob.throw_icon.name = "throw/catch"
mymob.throw_icon.screen_loc = ui_drop_throw
mymob.oxygen = new /obj/screen()
@@ -110,9 +101,7 @@
mymob.toxin.name = "toxin"
mymob.toxin.screen_loc = ui_toxin
- mymob.internals = new /obj/screen()
- mymob.internals.icon_state = "internal0"
- mymob.internals.name = "internal"
+ mymob.internals = new /obj/screen/internals()
mymob.internals.screen_loc = ui_internal
mymob.fire = new /obj/screen()
@@ -130,24 +119,16 @@
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_health
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = ui_style
mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist
- lingchemdisplay = new /obj/screen()
- lingchemdisplay.name = "chemical storage"
- lingchemdisplay.icon_state = "power_display"
+ lingchemdisplay = new /obj/screen/ling/chems()
lingchemdisplay.screen_loc = ui_lingchemdisplay
- lingchemdisplay.layer = 20
- lingchemdisplay.invisibility = 101
- lingstingdisplay = new /obj/screen()
- lingstingdisplay.name = "current sting"
+ lingstingdisplay = new /obj/screen/ling/sting()
lingstingdisplay.screen_loc = ui_lingstingdisplay
- lingstingdisplay.layer = 20
- lingstingdisplay.invisibility = 101
mymob.blind = new /obj/screen()
mymob.blind.icon = 'icons/mob/screen_full.dmi'
@@ -169,12 +150,9 @@
mymob.client.screen = null
- using = new /obj/screen()
- using.name = "resist"
+ using = new /obj/screen/resist()
using.icon = ui_style
- using.icon_state = "act_resist"
using.screen_loc = ui_pull_resist
- using.layer = 19
adding += using
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index f81d908e36a..7e3efee803b 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -1,3 +1,59 @@
+/obj/screen/robot
+ icon = 'icons/mob/screen_cyborg.dmi'
+
+/obj/screen/robot/module
+ name = "cyborg module"
+ icon_state = "nomod"
+
+/obj/screen/robot/module/Click()
+ var/mob/living/silicon/robot/R = usr
+ if(R.module)
+ R.hud_used.toggle_show_robot_modules()
+ return 1
+ R.pick_module()
+
+/obj/screen/robot/module1
+ name = "module1"
+ icon_state = "inv1"
+
+/obj/screen/robot/module1/Click()
+ var/mob/living/silicon/robot/R = usr
+ R.toggle_module(1)
+
+/obj/screen/robot/module2
+ name = "module2"
+ icon_state = "inv2"
+
+/obj/screen/robot/module2/Click()
+ var/mob/living/silicon/robot/R = usr
+ R.toggle_module(2)
+
+/obj/screen/robot/module3
+ name = "module3"
+ icon_state = "inv3"
+
+/obj/screen/robot/module3/Click()
+ var/mob/living/silicon/robot/R = usr
+ R.toggle_module(3)
+
+
+/obj/screen/robot/radio
+ name = "radio"
+ icon_state = "radio"
+
+/obj/screen/robot/radio/Click()
+ var/mob/living/silicon/robot/R = usr
+ R.radio_menu()
+
+/obj/screen/robot/store
+ name = "store"
+ icon_state = "store"
+
+/obj/screen/robot/store/Click()
+ var/mob/living/silicon/robot/R = usr
+ R.uneq_active()
+
+
/datum/hud/proc/robot_hud()
adding = list()
other = list()
@@ -6,88 +62,60 @@
//Radio
- using = new /obj/screen()
- using.name = "radio"
- using.icon = 'icons/mob/screen_cyborg.dmi'
- using.icon_state = "radio"
+ using = new /obj/screen/robot/radio()
using.screen_loc = ui_borg_radio
- using.layer = 20
adding += using
//Module select
- using = new /obj/screen()
- using.name = "module1"
- using.icon = 'icons/mob/screen_cyborg.dmi'
- using.icon_state = "inv1"
+ var/mob/living/silicon/robot/mymobR = mymob
+
+ using = new /obj/screen/robot/module1()
using.screen_loc = ui_inv1
- using.layer = 20
adding += using
- mymob:inv1 = using
+ mymobR.inv1 = using
- using = new /obj/screen()
- using.name = "module2"
- using.icon = 'icons/mob/screen_cyborg.dmi'
- using.icon_state = "inv2"
+ using = new /obj/screen/robot/module2()
using.screen_loc = ui_inv2
- using.layer = 20
adding += using
- mymob:inv2 = using
+ mymobR.inv2 = using
- using = new /obj/screen()
- using.name = "module3"
- using.icon = 'icons/mob/screen_cyborg.dmi'
- using.icon_state = "inv3"
+ using = new /obj/screen/robot/module3()
using.screen_loc = ui_inv3
- using.layer = 20
adding += using
- mymob:inv3 = using
+ mymobR.inv3 = using
//End of module select
//Photography stuff
- using = new /obj/screen()
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "take_picture"
- using.name = "Take Image"
+ using = new /obj/screen/ai/image_take()
using.screen_loc = ui_borg_camera
- using.layer = 20
adding += using
- using = new /obj/screen()
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "view_images"
- using.name = "View Images"
+ using = new /obj/screen/ai/image_view()
using.screen_loc = ui_borg_album
- using.layer = 20
adding += using
//Sec/Med HUDs
- using = new /obj/screen()
- using.name = "Sensor Augmentation"
- using.icon = 'icons/mob/screen_ai.dmi'
- using.icon_state = "ai_sensor"
+ using = new /obj/screen/ai/sensors()
using.screen_loc = ui_borg_sensor
- using.layer = 20
adding += using
//Intent
- using = new /obj/screen()
- using.name = "act_intent"
+ using = new /obj/screen/act_intent()
using.icon = 'icons/mob/screen_cyborg.dmi'
using.icon_state = mymob.a_intent
using.screen_loc = ui_borg_intents
- using.layer = 20
adding += using
action_intent = using
//Cell
- mymob:cells = new /obj/screen()
- mymob:cells.icon = 'icons/mob/screen_cyborg.dmi'
- mymob:cells.icon_state = "charge-empty"
- mymob:cells.name = "cell"
- mymob:cells.screen_loc = ui_toxin
+ mymobR.cells = new /obj/screen()
+ mymobR.cells.icon = 'icons/mob/screen_cyborg.dmi'
+ mymobR.cells.icon_state = "charge-empty"
+ mymobR.cells.name = "cell"
+ mymobR.cells.screen_loc = ui_toxin
//Health
mymob.healths = new /obj/screen()
@@ -97,17 +125,11 @@
mymob.healths.screen_loc = ui_borg_health
//Installed Module
- mymob.hands = new /obj/screen()
- mymob.hands.icon = 'icons/mob/screen_cyborg.dmi'
- mymob.hands.icon_state = "nomod"
- mymob.hands.name = "module"
+ mymob.hands = new /obj/screen/robot/module()
mymob.hands.screen_loc = ui_borg_module
//Store
- mymob.throw_icon = new /obj/screen()
- mymob.throw_icon.icon = 'icons/mob/screen_cyborg.dmi'
- mymob.throw_icon.icon_state = "store"
- mymob.throw_icon.name = "store"
+ mymob.throw_icon = new /obj/screen/robot/store()
mymob.throw_icon.screen_loc = ui_borg_store
//Temp
@@ -155,7 +177,7 @@
mymob.client.screen = null
- mymob.client.screen += list(mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list(mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymobR.cells, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += adding + other
return
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index b64cf1cdb41..82d894dba43 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -68,6 +68,15 @@
return
+/obj/screen/drop
+ name = "drop"
+ icon = 'icons/mob/screen_midnight.dmi'
+ icon_state = "act_drop"
+ layer = 19
+
+/obj/screen/drop/Click()
+ usr.drop_item_v()
+
/obj/screen/grab
name = "grab"
@@ -82,6 +91,112 @@
/obj/screen/grab/attackby()
return
+/obj/screen/act_intent
+ name = "intent"
+ icon_state = "help"
+
+/obj/screen/act_intent/Click(location, control, params)
+ if(ishuman(usr) && (usr.client.prefs.toggles & INTENT_STYLE))
+
+ var/_x = text2num(params2list(params)["icon-x"])
+ var/_y = text2num(params2list(params)["icon-y"])
+
+ if(_x<=16 && _y<=16)
+ usr.a_intent_change("harm")
+
+ else if(_x<=16 && _y>=17)
+ usr.a_intent_change("help")
+
+ else if(_x>=17 && _y<=16)
+ usr.a_intent_change("grab")
+
+ else if(_x>=17 && _y>=17)
+ usr.a_intent_change("disarm")
+
+ else
+ usr.a_intent_change("right")
+
+/obj/screen/internals
+ name = "toggle internals"
+ icon_state = "internal0"
+
+/obj/screen/internals/Click()
+ if(iscarbon(usr))
+ var/mob/living/carbon/C = usr
+ if(!C.stat && !C.stunned && !C.paralysis && !C.restrained())
+ if(C.internal)
+ C.internal = null
+ C << "No longer running on internals."
+ icon_state = "internal0"
+ else
+ if(!istype(C.wear_mask, /obj/item/clothing/mask))
+ C << "You are not wearing a mask."
+ return 1
+ else
+ if(istype(C.l_hand, /obj/item/weapon/tank))
+ C << "You are now running on internals from the [C.l_hand] on your left hand."
+ C.internal = C.l_hand
+ else if(istype(C.r_hand, /obj/item/weapon/tank))
+ C << "You are now running on internals from the [C.r_hand] on your right hand."
+ C.internal = C.r_hand
+ else if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ if(istype(H.s_store, /obj/item/weapon/tank))
+ H << "You are now running on internals from the [H.s_store] on your [H.wear_suit]."
+ H.internal = H.s_store
+ else if(istype(H.belt, /obj/item/weapon/tank))
+ H << "You are now running on internals from the [H.belt] on your belt."
+ H.internal = H.belt
+ else if(istype(H.l_store, /obj/item/weapon/tank))
+ H << "You are now running on internals from the [H.l_store] in your left pocket."
+ H.internal = H.l_store
+ else if(istype(H.r_store, /obj/item/weapon/tank))
+ H << "You are now running on internals from the [H.r_store] in your right pocket."
+ H.internal = H.r_store
+
+ //Seperate so CO2 jetpacks are a little less cumbersome.
+ if(!C.internal && istype(C.back, /obj/item/weapon/tank))
+ C << "You are now running on internals from the [C.back] on your back."
+ C.internal = C.back
+
+ if(C.internal)
+ icon_state = "internal1"
+ else
+ C << "You don't have an oxygen tank."
+
+/obj/screen/mov_intent
+ name = "run/walk toggle"
+ icon = 'icons/mob/screen_midnight.dmi'
+ icon_state = "running"
+
+/obj/screen/mov_intent/Click()
+ switch(usr.m_intent)
+ if("run")
+ usr.m_intent = "walk"
+ icon_state = "walking"
+ if("walk")
+ usr.m_intent = "run"
+ icon_state = "running"
+ usr.update_icons()
+
+/obj/screen/pull
+ name = "stop pulling"
+ icon = 'icons/mob/screen_midnight.dmi'
+ icon_state = "pull"
+
+/obj/screen/pull/Click()
+ usr.stop_pulling()
+
+/obj/screen/resist
+ name = "resist"
+ icon = 'icons/mob/screen_midnight.dmi'
+ icon_state = "act_resist"
+ layer = 19
+
+/obj/screen/resist/Click()
+ if(isliving(usr))
+ var/mob/living/L = usr
+ L.resist()
/obj/screen/storage
name = "storage"
@@ -99,6 +214,16 @@
master.attackby(I, usr)
return 1
+/obj/screen/throw_catch
+ name = "throw/catch"
+ icon = 'icons/mob/screen_midnight.dmi'
+ icon_state = "act_throw_off"
+
+/obj/screen/throw_catch/Click()
+ if(iscarbon(usr) && !usr.stat && isturf(usr.loc) && !usr.restrained())
+ var/mob/living/carbon/C = usr
+ C.toggle_throw_mode()
+
/obj/screen/zone_sel
name = "damage zone"
icon_state = "zone_sel"
@@ -166,243 +291,11 @@
/obj/screen/Click(location, control, params)
if(!usr) return 1
- switch(name)
- if("toggle")
- if(usr.hud_used.inventory_shown)
- usr.hud_used.inventory_shown = 0
- usr.client.screen -= usr.hud_used.other
- else
- usr.hud_used.inventory_shown = 1
- usr.client.screen += usr.hud_used.other
+ if(name == "Reset Machine") //I don't know what this is, CTRL+F has the only entry right here in this file, so I'm going to leave it in case it is something important
+ usr.unset_machine()
+ else
+ return 0
- usr.hud_used.hidden_inventory_update()
-
- if("equip")
- if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
- return 1
- if(ishuman(usr))
- var/mob/living/carbon/human/H = usr
- H.quick_equip()
-
- if("current sting")
- var/mob/living/carbon/U = usr
- U.unset_sting()
-
- if("resist")
- if(isliving(usr))
- var/mob/living/L = usr
- L.resist()
-
- if("mov_intent")
- switch(usr.m_intent)
- if("run")
- usr.m_intent = "walk"
- usr.hud_used.move_intent.icon_state = "walking"
- if("walk")
- usr.m_intent = "run"
- usr.hud_used.move_intent.icon_state = "running"
- if(istype(usr,/mob/living/carbon/alien/humanoid))
- usr.update_icons()
- if("Reset Machine")
- usr.unset_machine()
- if("internal")
- if(iscarbon(usr))
- var/mob/living/carbon/C = usr
- if(!C.stat && !C.stunned && !C.paralysis && !C.restrained())
- if(C.internal)
- C.internal = null
- C << "No longer running on internals."
- if(C.internals)
- C.internals.icon_state = "internal0"
- else
- if(!istype(C.wear_mask, /obj/item/clothing/mask))
- C << "You are not wearing a mask."
- return 1
- else
- if(istype(C.l_hand, /obj/item/weapon/tank))
- C << "You are now running on internals from the [C.l_hand] on your left hand."
- C.internal = C.l_hand
- else if(istype(C.r_hand, /obj/item/weapon/tank))
- C << "You are now running on internals from the [C.r_hand] on your right hand."
- C.internal = C.r_hand
- else if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(istype(H.s_store, /obj/item/weapon/tank))
- H << "You are now running on internals from the [H.s_store] on your [H.wear_suit]."
- H.internal = H.s_store
- else if(istype(H.belt, /obj/item/weapon/tank))
- H << "You are now running on internals from the [H.belt] on your belt."
- H.internal = H.belt
- else if(istype(H.l_store, /obj/item/weapon/tank))
- H << "You are now running on internals from the [H.l_store] in your left pocket."
- H.internal = H.l_store
- else if(istype(H.r_store, /obj/item/weapon/tank))
- H << "You are now running on internals from the [H.r_store] in your right pocket."
- H.internal = H.r_store
-
- //Seperate so CO2 jetpacks are a little less cumbersome.
- if(!C.internal && istype(C.back, /obj/item/weapon/tank))
- C << "You are now running on internals from the [C.back] on your back."
- C.internal = C.back
-
- if(C.internal)
- if(C.internals)
- C.internals.icon_state = "internal1"
- else
- C << "You don't have an oxygen tank."
-
- if("act_intent")
- if(ishuman(usr) && (usr.client.prefs.toggles & INTENT_STYLE))
-
- var/_x = text2num(params2list(params)["icon-x"])
- var/_y = text2num(params2list(params)["icon-y"])
-
- if(_x<=16 && _y<=16)
- usr.a_intent_change("harm")
-
- else if(_x<=16 && _y>=17)
- usr.a_intent_change("help")
-
- else if(_x>=17 && _y<=16)
- usr.a_intent_change("grab")
-
- else if(_x>=17 && _y>=17)
- usr.a_intent_change("disarm")
-
- else
- usr.a_intent_change("right")
-
- if("pull")
- usr.stop_pulling()
- if("throw/catch")
- if(!usr.stat && isturf(usr.loc) && !usr.restrained())
- usr:toggle_throw_mode()
- if("drop")
- usr.drop_item_v()
-
- if("module")
- if(isrobot(usr))
- var/mob/living/silicon/robot/R = usr
- if(R.module)
- R.hud_used.toggle_show_robot_modules()
- return 1
- R.pick_module()
-
- if("radio")
- if(issilicon(usr))
- usr:radio_menu()
- if("panel")
- if(issilicon(usr))
- usr:installed_modules()
-
- if("store")
- if(isrobot(usr))
- var/mob/living/silicon/robot/R = usr
- R.uneq_active()
-
- if("module1")
- if(istype(usr, /mob/living/silicon/robot))
- usr:toggle_module(1)
-
- if("module2")
- if(istype(usr, /mob/living/silicon/robot))
- usr:toggle_module(2)
-
- if("module3")
- if(istype(usr, /mob/living/silicon/robot))
- usr:toggle_module(3)
-
- if("AI Core")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.view_core()
-
- if("Show Camera List")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- var/camera = input(AI, "Choose which camera you want to view", "Cameras") as null|anything in AI.get_camera_list()
- AI.ai_camera_list(camera)
-
- if("Track With Camera")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- var/target_name = input(AI, "Choose who you want to track", "Tracking") as null|anything in AI.trackable_mobs()
- AI.ai_camera_track(target_name)
-
- if("Toggle Camera Light")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.toggle_camera_light()
-
- if("Crew Monitorting")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- crewmonitor(AI,AI)
-
- if("Show Crew Manifest")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.ai_roster()
-
- if("Show Alerts")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.ai_alerts()
-
- if("Announcement")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.announcement()
-
- if("Call Emergency Shuttle")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.ai_call_shuttle()
-
- if("State Laws")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.checklaws()
-
- if("PDA - Send Message")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.cmd_send_pdamesg(usr)
-
- if("PDA - Show Message Log")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.cmd_show_message_log(usr)
-
- if("Take Image")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.aicamera.toggle_camera_mode()
- else if(isrobot(usr))
- var/mob/living/silicon/robot/R = usr
- R.aicamera.toggle_camera_mode()
-
- if("View Images")
- if(isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.aicamera.viewpictures()
- else if(isrobot(usr))
- var/mob/living/silicon/robot/R = usr
- R.aicamera.viewpictures()
- if("nightvision")
- if(isalien(usr))
- var/mob/living/carbon/alien/humanoid/A = usr
- A.nightvisiontoggle()
- if("Sensor Augmentation")
- if(issilicon(usr))
- var/mob/living/silicon/S = usr
- S.sensor_mode()
- if("leap")
- if(istype(usr, /mob/living/carbon/alien/humanoid))
- var/mob/living/carbon/alien/humanoid/hunter/AH = usr
- AH.toggle_leap()
- else
- return 0
return 1
/obj/screen/inventory/Click()
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index acf02a77bc8..b9f35a0ffb6 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -26,6 +26,7 @@ var/global/pipe_processing_killed = 0
var/mobs_cost = 0
var/diseases_cost = 0
var/machines_cost = 0
+ var/aibots_cost = 0
var/objects_cost = 0
var/networks_cost = 0
var/powernets_cost = 0
@@ -166,6 +167,13 @@ var/global/pipe_processing_killed = 0
sleep(breather_ticks)
+ //BOTS
+ timer = world.timeofday
+ process_bots()
+ aibots_cost = (world.timeofday - timer) / 10
+
+ sleep(breather_ticks)
+
//OBJECTS
timer = world.timeofday
process_objects()
@@ -212,7 +220,7 @@ var/global/pipe_processing_killed = 0
gc_cost = (world.timeofday - timer) / 10
//TIMING
- total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost + gc_cost
+ total_cost = air_cost + sun_cost + mobs_cost + diseases_cost + machines_cost + aibots_cost + objects_cost + networks_cost + powernets_cost + nano_cost + events_cost + ticker_cost + gc_cost
var/end_time = world.timeofday
if(end_time < start_time)
@@ -258,6 +266,15 @@ var/global/pipe_processing_killed = 0
continue
machines -= Machine
+/datum/controller/game_controller/proc/process_bots()
+ for(var/obj/machinery/bot/Bot in aibots)
+ if(!Bot.gc_destroyed)
+ last_thing_processed = Bot.type
+ spawn(0)
+ Bot.bot_process()
+ continue
+ aibots -= Bot
+
/datum/controller/game_controller/proc/process_objects()
for(var/obj/Object in processing_objects)
if(!Object.gc_destroyed)
diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm
index defa56ba515..e27cccf4921 100644
--- a/code/controllers/supply_shuttle.dm
+++ b/code/controllers/supply_shuttle.dm
@@ -32,7 +32,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
layer = 4
explosion_resistance = 5
-/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
+/obj/structure/plasticflaps/CanPass(atom/movable/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
return prob(60)
@@ -141,6 +141,8 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
var/eta
//shuttle loan
var/datum/round_event/shuttle_loan/shuttle_loan
+ //for logging
+ var/sold_atoms = ""
/datum/controller/supply_shuttle/New()
ordernum = rand(1,9000)
@@ -235,17 +237,20 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
centcom_message = ""
for(var/atom/movable/MA in shuttle)
+ sold_atoms += " [MA.name]"
if(MA.anchored) continue
// Must be in a crate (or a critter crate)!
if(istype(MA,/obj/structure/closet/crate) || istype(MA,/obj/structure/closet/critter))
+ sold_atoms += ":"
crate_count++
var/find_slip = 1
for(var/atom in MA)
// Sell manifests
var/atom/A = atom
+ sold_atoms += " [A.name]"
if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
var/obj/item/weapon/paper/manifest/slip = A
// TODO: Check for a signature, too.
@@ -310,6 +315,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
centcom_message += "+[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
"
points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later
qdel(MA)
+ sold_atoms += "."
if(plasma_count)
centcom_message += "+[round(plasma_count/plasma_per_point)]: Received [plasma_count] unit(s) of exotic material.
"
@@ -613,7 +619,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
supply_shuttle.moving = -1
supply_shuttle.sell()
supply_shuttle.send()
-
+ investigate_log("[usr.key] has sent the supply shuttle away. Remaining points: [supply_shuttle.points]. Shuttle contents:[supply_shuttle.sold_atoms].", "cargo")
else
if(href_list["loan"] && supply_shuttle.shuttle_loan)
if(!supply_shuttle.shuttle_loan.dispatched)
@@ -727,6 +733,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
supply_shuttle.points -= P.cost
supply_shuttle.shoppinglist += O
temp = "Thanks for your order."
+ investigate_log("[usr.key] has authorized an order for [P.name]. Remaining points: [supply_shuttle.points].", "cargo")
else
temp = "Not enough supply points."
break
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index d3088c624a6..13fb01776d7 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -914,6 +914,19 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containertype = /obj/structure/largecrate/mule
containername = "\improper MULEbot Crate"
+/datum/supply_packs/misc/conveyor
+ name = "Conveyor Assembly Crate"
+ contains = list(/obj/item/conveyor_construct,
+ /obj/item/conveyor_construct,
+ /obj/item/conveyor_construct,
+ /obj/item/conveyor_construct,
+ /obj/item/conveyor_construct,
+ /obj/item/conveyor_construct,
+ /obj/item/conveyor_switch_construct,
+ /obj/item/weapon/paper/conveyor)
+ cost = 15
+ containername = "conveyor assembly crate"
+
/datum/supply_packs/misc/watertank
name = "Water tank crate"
contains = list(/obj/structure/reagent_dispensers/watertank)
@@ -1005,7 +1018,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/item/weapon/mop,
- /obj/item/weapon/holosign_creator,
+ /obj/item/weapon/caution,
+ /obj/item/weapon/caution,
+ /obj/item/weapon/caution,
/obj/item/weapon/storage/bag/trash,
/obj/item/weapon/reagent_containers/spray/cleaner,
/obj/item/weapon/reagent_containers/glass/rag,
@@ -1039,6 +1054,13 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
cost = 10
containername = "replacement lights"
+/datum/supply_packs/misc/noslipfloor
+ name = "High-traction floor tiles"
+ contains = list(/obj/item/stack/tile/noslip)
+ amount = 20
+ cost = 20
+ containername = "high-traction floor tiles"
+
///////////// Costumes
@@ -1105,7 +1127,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/misc/randomised/contraband
num_contained = 5
contains = list(/obj/item/weapon/contraband/poster,
- /obj/item/weapon/storage/fancy/cigarettes/dromedaryco)
+ /obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
+ /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims)
name = "Contraband crate"
cost = 30
containername = "crate" //let's keep it subtle, eh?
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index a877b468e96..63350c96e14 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -381,6 +381,12 @@ var/list/uplink_items = list()
cost = 9
gamemodes = list(/datum/game_mode/nuclear)
+/datum/uplink_item/badass/syndiecigs
+ name = "Syndicate Smokes"
+ desc = "Strong flavor, dense smoke, infused with Doctor's Delight."
+ item = /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate
+ cost = 4
+
/datum/uplink_item/device_tools/space_suit
name = "Syndicate Space Suit"
desc = "The red and black syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings."
@@ -399,7 +405,14 @@ var/list/uplink_items = list()
name = "Binary Translator Key"
desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary. "
item = /obj/item/device/encryptionkey/binary
- cost = 6
+ cost = 5
+ surplus = 75
+
+/datum/uplink_item/device_tools/encryptionkey
+ name = "Syndicate Encryption Key"
+ desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel."
+ item = /obj/item/device/encryptionkey/syndicate
+ cost = 5
surplus = 75
/datum/uplink_item/device_tools/ai_detector
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 02a96c56f2e..2f1b1f6e074 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -7,7 +7,6 @@
var/fingerprintslast = null
var/list/blood_DNA
var/last_bumped = 0
- var/pass_flags = 0
var/throwpass = 0
///Chemistry.
@@ -366,9 +365,6 @@ var/list/blood_splatter_icons = list()
else
return 0
-/atom/proc/checkpass(passflag)
- return pass_flags&passflag
-
/atom/proc/isinspace()
if(istype(get_turf(src), /turf/space))
return 1
@@ -382,5 +378,9 @@ var/list/blood_splatter_icons = list()
return
/atom/proc/singularity_act()
return
+
/atom/proc/singularity_pull()
return
+
+/atom/proc/acid_act(var/acidpwr, var/toxpwr, var/acid_volume)
+ return
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 660a2f2be2f..0c5b5edfb19 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -10,6 +10,7 @@
var/mob/pulledby = null
var/languages = 0 //For say() and Hear()
var/inertia_dir = 0
+ var/pass_flags = 0
glide_size = 8
/atom/movable/Move(atom/newloc, direct = 0)
@@ -136,6 +137,8 @@
. = step(src, direction)
dir = old_dir
+/atom/movable/proc/checkpass(passflag)
+ return pass_flags&passflag
/atom/movable/proc/hit_check() // todo: this is partly obsolete due to passflags already, add throwing stuff to mob CanPass and finish it
if(src.throwing)
diff --git a/code/game/dna.dm b/code/game/dna.dm
index e6650118e31..f3e79618e99 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -340,6 +340,7 @@
var/locked = 0
var/open = 0
anchored = 1
+ interact_offline = 1
use_power = 1
idle_power_usage = 50
active_power_usage = 300
@@ -371,6 +372,29 @@
for(var/obj/item/weapon/stock_parts/micro_laser/P in component_parts)
damage_coeff = P.rating
+/obj/machinery/dna_scannernew/update_icon()
+
+ //no power or maintenance
+ if(stat & (NOPOWER|BROKEN))
+ icon_state = initial(icon_state)+ (open ? "_open" : "") + "_unpowered"
+ return
+
+ if((stat & MAINT) || panel_open)
+ icon_state = initial(icon_state)+ (open ? "_open" : "") + "_maintenance"
+ return
+
+ //running and someone in there
+ if(occupant)
+ icon_state = initial(icon_state)+ "_occupied"
+ return
+
+ //running
+ icon_state = initial(icon_state)+ (open ? "_open" : "")
+
+/obj/machinery/dna_scannernew/power_change()
+ ..()
+ update_icon()
+
/obj/machinery/dna_scannernew/proc/toggle_open(mob/user=usr)
if(!user)
return
@@ -414,7 +438,7 @@
C.loc = src
C.stop_pulling()
break
- icon_state = initial(icon_state) + (occupant ? "_occupied" : "")
+ update_icon()
// search for ghosts, if the corpse is empty and the scanner is connected to a cloner
if(occupant)
@@ -451,7 +475,7 @@
occupant.client.eye = occupant
occupant.client.perspective = MOB_PERSPECTIVE
occupant = null
- icon_state = "[initial(icon_state)]_open"
+ update_icon()
return 1
/obj/machinery/dna_scannernew/relaymove(mob/user as mob)
@@ -462,7 +486,8 @@
/obj/machinery/dna_scannernew/attackby(obj/item/weapon/grab/G, mob/user)
- if(!occupant && default_deconstruction_screwdriver(user, "[initial(icon_state)]_open", "[initial(icon_state)]", G))
+ if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, G))//sent icon_state is irrelevant...
+ update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed
return
if(exchange_parts(user, G))
@@ -486,6 +511,8 @@
qdel(G)
/obj/machinery/dna_scannernew/attack_hand(mob/user)
+ if(..())
+ return
toggle_open(user)
add_fingerprint(user)
@@ -578,7 +605,7 @@
var/occupant_status = "
| X | Channel | Nick | Message |
|---|---|---|---|
| [msg.channel] | [msg.sender] | [msg.message] |


Eject [cartridge]"
- if (mode)
+ if (mode && !noreturn)
dat += " |
Return"
dat += " |
Refresh"
@@ -283,7 +291,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "
Notekeeper
Messenger
Nanotrasen Relay Chat
Nanotrasen Relay Chat
Nanotrasen Relay Chat
Detected Channels
"
- dat += "
SS13 Nanotrasen Relay Chat Network
| "
@@ -270,7 +272,7 @@ datum/preferences
dat += ""
//user << browse(dat, "window=preferences;size=560x560")
- var/datum/browser/popup = new(user, "preferences", " Character Setup ", 580, 600)
+ var/datum/browser/popup = new(user, "preferences", "Character Setup ", 580, 620)
popup.set_content(dat)
popup.open(0)
@@ -744,6 +746,9 @@ datum/preferences
if("name")
be_random_name = !be_random_name
+ if("all")
+ be_random_body = !be_random_body
+
if("hear_midis")
toggles ^= SOUND_MIDI
@@ -791,6 +796,9 @@ datum/preferences
if(be_random_name)
real_name = random_name(gender)
+ if(be_random_body)
+ random_character(gender)
+
if(config.humans_need_surnames)
var/firstspace = findtext(real_name, " ")
var/name_length = length(real_name)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index ffd49d228d0..74562dc81e5 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -169,6 +169,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["OOC_Notes"] >> metadata
S["real_name"] >> real_name
S["name_is_always_random"] >> be_random_name
+ S["body_is_always_random"] >> be_random_body
S["gender"] >> gender
S["age"] >> age
S["hair_color"] >> hair_color
@@ -205,6 +206,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
mutant_color = "#FFF"
if(!real_name) real_name = random_name(gender)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
+ be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
gender = sanitize_gender(gender)
if(gender == MALE)
hair_style = sanitize_inlist(hair_style, hair_styles_male_list)
@@ -250,6 +252,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["OOC_Notes"] << metadata
S["real_name"] << real_name
S["name_is_always_random"] << be_random_name
+ S["body_is_always_random"] << be_random_body
S["gender"] << gender
S["age"] << age
S["hair_color"] << hair_color
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 1308e85cc05..3de1b0b4916 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -3,8 +3,8 @@
var/flash_protect = 0 //Malk: What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
var/tint = 0 //Malk: Sets the item's level of visual impairment tint, normally set to the same as flash_protect
var/up = 0 // but seperated to allow items to protect but not impair vision, like space helmets
- var/visor_flags = null
- var/visor_flags_inv = null
+ var/visor_flags = 0 // flags that are added/removed when an item is adjusted up/down
+ var/visor_flags_inv = 0 // same as visor_flags, but for flags_inv
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
@@ -102,8 +102,8 @@ BLIND // can't see anything
src.icon_state = initial(icon_state)
gas_transfer_coefficient = initial(gas_transfer_coefficient)
permeability_coefficient = initial(permeability_coefficient)
- flags = initial(flags)
- flags_inv = initial(flags_inv)
+ flags |= visor_flags
+ flags_inv |= visor_flags_inv
usr << "You push \the [src] back into place."
src.mask_adjusted = 0
else
@@ -111,8 +111,8 @@ BLIND // can't see anything
usr << "You push \the [src] out of the way."
gas_transfer_coefficient = null
permeability_coefficient = null
- flags = null
- flags_inv = null
+ flags &= ~visor_flags
+ flags_inv &= ~visor_flags_inv
src.mask_adjusted = 1
usr.update_inv_wear_mask()
@@ -266,8 +266,10 @@ atom/proc/generate_female_clothing(index,t_color,icon)
set category = "Object"
set src in usr
var/mob/M = usr
- if (istype(M, /mob/dead/)) return
- if (usr.stat) return
+ if (istype(M, /mob/dead/))
+ return
+ if (!can_use(usr))
+ return
if(src.has_sensor >= 2)
usr << "The controls are locked."
return 0
@@ -292,7 +294,7 @@ atom/proc/generate_female_clothing(index,t_color,icon)
set name = "Adjust Jumpsuit Style"
set category = "Object"
set src in usr
- if(usr.stat)
+ if(!can_use(usr))
return
if(!can_adjust)
usr << "You cannot wear this suit any differently."
@@ -313,8 +315,10 @@ atom/proc/generate_female_clothing(index,t_color,icon)
set name = "Remove Accessory"
set category = "Object"
set src in usr
- if(!istype(usr, /mob/living)) return
- if(usr.stat) return
+ if(!istype(usr, /mob/living))
+ return
+ if(!can_use(usr))
+ return
if(hastie)
hastie.transform *= 2
@@ -336,7 +340,7 @@ atom/proc/generate_female_clothing(index,t_color,icon)
..()
/obj/item/clothing/proc/weldingvisortoggle() //Malk: proc to toggle welding visors on helmets, masks, goggles, etc.
- if(usr.canmove && !usr.stat && !usr.restrained())
+ if(can_use(usr))
if(up)
up = !up
flags |= (visor_flags)
@@ -360,3 +364,9 @@ atom/proc/generate_female_clothing(index,t_color,icon)
usr.update_inv_glasses(0)
if(istype(src, /obj/item/clothing/mask))
usr.update_inv_wear_mask(0)
+
+/obj/item/clothing/proc/can_use(mob/user)
+ if(user && ismob(user))
+ if(!user.stat && user.canmove && !user.restrained())
+ return 1
+ return 0
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index b17e41c0ef1..78f76f8d971 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -5,6 +5,7 @@
item_state = "balaclava"
flags = BLOCKHAIR
flags_inv = HIDEFACE
+ visor_flags_inv = HIDEFACE
w_class = 2
action_button_name = "Adjust Balaclava"
ignore_maskadjust = 0
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index 32c6702102b..739dc16581a 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -5,6 +5,7 @@
item_state = "m_mask"
body_parts_covered = 0
flags = MASKCOVERSMOUTH | MASKINTERNALS
+ visor_flags = MASKCOVERSMOUTH | MASKINTERNALS
w_class = 2
gas_transfer_coefficient = 0.10
permeability_coefficient = 0.50
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 4fa595fdc2c..295298df882 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -87,8 +87,10 @@
set category = "Object"
set name = "HALT"
set src in usr
- if(!istype(usr, /mob/living)) return
- if(usr.stat) return
+ if(!istype(usr, /mob/living))
+ return
+ if(!can_use(usr))
+ return
var/phrase = 0 //selects which phrase to use
var/phrase_text = null
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 4e459567d7a..59acfbd631d 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -24,6 +24,8 @@
w_class = 1
flags = MASKCOVERSMOUTH
flags_inv = HIDEFACE
+ visor_flags = MASKCOVERSMOUTH
+ visor_flags_inv = HIDEFACE
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index efe04465a36..d7d2414ff68 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -14,6 +14,8 @@
set name = "Toggle Magboots"
set category = "Object"
set src in usr
+ if(!can_use(usr))
+ return
attack_self(usr)
@@ -49,4 +51,4 @@
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
name = "blood-red magboots"
icon_state = "syndiemag0"
- magboot_state = "syndiemag"
+ magboot_state = "syndiemag"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 496fd90507f..bdf0b2ed3ba 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -52,6 +52,7 @@
icon_state = "wizard"
strip_delay = 50
put_on_delay = 50
+ unacidable = 1
/obj/item/clothing/shoes/sandal/marisa
desc = "A pair of magic black shoes."
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 8fe70226fa3..f3fc2721928 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -138,6 +138,7 @@
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
+ unacidable = 1
/obj/item/clothing/suit/space/hardsuit/wizard
icon_state = "hardsuit-wiz"
@@ -151,6 +152,7 @@
allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/emergency_oxygen)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
+ unacidable = 1
//Medical hardsuit
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 4fac7f71965..32d90013168 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -120,6 +120,7 @@
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
action_button_name = "Toggle Armor"
+ unacidable = 1
/obj/item/clothing/suit/armor/reactive/IsShield()
if(active)
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index e3b75febb8b..076dc6cc927 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -14,7 +14,7 @@
set category = "Object"
set src in usr
- if(!usr.canmove || usr.stat || usr.restrained())
+ if(!can_use(usr))
return 0
open = !open
@@ -28,6 +28,12 @@
icon_state = "labcoat_cmo"
item_state = "labcoat_cmo"
+/obj/item/clothing/suit/labcoat/emt
+ name = "EMT's jacket"
+ desc = "A dark blue jacket with reflective strips for emergency medical technicians."
+ icon_state = "labcoat_emt"
+ item_state = "labcoat_cmo"
+
/obj/item/clothing/suit/labcoat/mad
name = "\improper The Mad's labcoat"
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index c2373675872..b0ec44c0d58 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -228,7 +228,7 @@
set category = "Object"
set src in usr
- if(!usr.canmove || usr.stat || usr.restrained())
+ if(!can_use(usr))
return 0
if(src.icon_state == "suitjacket_blue_open") //no god no
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index de249c00557..df88c830561 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -7,6 +7,7 @@
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20)
strip_delay = 50
put_on_delay = 50
+ unacidable = 1
/obj/item/clothing/head/wizard/red
name = "red wizard hat"
@@ -51,6 +52,7 @@
flags_inv = HIDEJUMPSUIT
strip_delay = 50
put_on_delay = 50
+ unacidable = 1
/obj/item/clothing/suit/wizrobe/red
@@ -92,6 +94,7 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ unacidable = 0
/obj/item/clothing/head/wizard/marisa/fake
name = "witch hat"
@@ -100,6 +103,7 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ unacidable = 0
/obj/item/clothing/suit/wizrobe/marisa/fake
name = "witch robe"
@@ -109,3 +113,4 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ unacidable = 0
\ No newline at end of file
diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm
index d56b94e60bb..351a97b5ee1 100644
--- a/code/modules/clothing/under/jobs/medsci.dm
+++ b/code/modules/clothing/under/jobs/medsci.dm
@@ -3,20 +3,29 @@
*/
/obj/item/clothing/under/rank/research_director
desc = "It's a suit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
- name = "research director's suit"
+ name = "research director's vest suit"
icon_state = "director"
item_state = "g_suit"
item_color = "director"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 10, rad = 0)
can_adjust = 0
/obj/item/clothing/under/rank/research_director/alt
desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
- name = "research director's suit"
+ name = "research director's tan suit"
icon_state = "rdwhimsy"
item_state = "rdwhimsy"
item_color = "rdwhimsy"
- armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0)
+ can_adjust = 1
+
+/obj/item/clothing/under/rank/research_director/turtleneck
+ desc = "A dark purple turtleneck and tan khakis, for a director with a superior sense of style."
+ name = "research director's turtleneck"
+ icon_state = "rdturtle"
+ item_state = "p_suit"
+ item_color = "rdturtle"
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0)
can_adjust = 1
/obj/item/clothing/under/rank/scientist
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index 7781afff461..779a9800be2 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -43,7 +43,7 @@
if(ismob(target) && target.reagents && reagents.total_volume)
user.visible_message("\The [target] has been smothered with \the [src] by \the [user]!", "You smother \the [target] with \the [src]!", "You hear some struggling and muffled cries of surprise")
src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
+ src.reagents.clear_reagents()
return
else
..()
diff --git a/code/modules/food&drinks/food/condiment.dm b/code/modules/food&drinks/food/condiment.dm
index 21ec47ce544..7ef596d303a 100644
--- a/code/modules/food&drinks/food/condiment.dm
+++ b/code/modules/food&drinks/food/condiment.dm
@@ -6,7 +6,7 @@
//Food items that aren't eaten normally and leave an empty container behind.
/obj/item/weapon/reagent_containers/food/condiment
- name = "Condiment Container"
+ name = "condiment container"
desc = "Just your average condiment container."
icon = 'icons/obj/food.dmi'
icon_state = "emptycondiment"
@@ -14,7 +14,16 @@
possible_transfer_amounts = list(1,5,10)
volume = 50
//Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites.
- var/list/possible_states = list("ketchup" = list("ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "enzyme" = list("enzyme", "Universal Enzyme", "Used in cooking various dishes"), "soysauce" = list("soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("coldsauce", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("saltshaker", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("pepermillsmall", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("oliveoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("emptycondiment", "Sugar", "Tasty spacey sugar!"))
+ var/list/possible_states = list(
+ "ketchup" = list("ketchup", "ketchup bottle", "You feel more American already."),
+ "capsaicin" = list("hotsauce", "hotsauce bottle", "You can almost TASTE the stomach ulcers now!"),
+ "enzyme" = list("enzyme", "universal enzyme bottle", "Used in cooking various dishes"),
+ "soysauce" = list("soysauce", "soy sauce bottle", "A salty soy-based flavoring"),
+ "frostoil" = list("coldsauce", "coldsauce bottle", "Leaves the tongue numb in it's passage"),
+ "sodiumchloride" = list("saltshaker", "salt shaker", "Salt. From space oceans, presumably"),
+ "blackpepper" = list("pepermillsmall", "pepper mill", "Often used to flavor food or make people sneeze"),
+ "cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"),
+ "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"))
/obj/item/weapon/reagent_containers/food/condiment/attackby(obj/item/weapon/W as obj, mob/user as mob)
return
@@ -41,10 +50,10 @@
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
return 1
- else if( istype(M, /mob/living/carbon/human) )
- visible_message("[user] attempts to feed [M] [src].")
+ else
+ user.visible_message("[user] attempts to feed [M] from [src].")
if(!do_mob(user, M)) return
- visible_message("[user] feeds [M] [src].")
+ user.visible_message("[user] feeds [M] from [src].")
add_logs(user, M, "fed", object="[reagentlist(src)]")
@@ -98,7 +107,7 @@
desc = temp_list[3]
else
- name = "misc Condiment Bottle"
+ name = "condiment bottle"
main_reagent = reagents.get_master_reagent_name()
if (reagents.reagent_list.len==1)
desc = "Looks like it is [lowertext(main_reagent)], but you are not sure."
@@ -107,12 +116,12 @@
icon_state = "mixedcondiments"
else
icon_state = "emptycondiment"
- name = "condiment Bottle"
+ name = "condiment bottle"
desc = "An empty condiment bottle."
return
/obj/item/weapon/reagent_containers/food/condiment/enzyme
- name = "Universal Enzyme"
+ name = "universal enzyme"
desc = "Used in cooking various dishes."
icon_state = "enzyme"
@@ -127,7 +136,7 @@
reagents.add_reagent("sugar", 50)
/obj/item/weapon/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then
- name = "Salt Shaker" // a large one.
+ name = "salt shaker" // a large one.
desc = "Salt. From space oceans, presumably."
icon_state = "saltshakersmall"
possible_transfer_amounts = list(1,20) //for clown turning the lid off
@@ -139,7 +148,7 @@
reagents.add_reagent("sodiumchloride", 20)
/obj/item/weapon/reagent_containers/food/condiment/peppermill
- name = "Pepper Mill"
+ name = "pepper mill"
desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall"
possible_transfer_amounts = list(1,20) //for clown turning the lid off
diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm
index 27f81278994..3cdea87cb8e 100644
--- a/code/modules/food&drinks/food/snacks.dm
+++ b/code/modules/food&drinks/food/snacks.dm
@@ -218,1020 +218,7 @@
// reagents.add_reagent("nutriment", 2) // this line of code for all the contents.
// bitesize = 3 //This is the amount each bite consumes.
-
-////////////////////////////////////////////SALAD////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/aesirsalad
- name = "\improper Aesir salad"
- desc = "Probably too incredible for mortal men to fully enjoy."
- icon_state = "aesirsalad"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New()
- ..()
- eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp")
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("tricordrazine", 8)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/herbsalad
- name = "herb salad"
- desc = "A tasty salad with apples on top."
- icon_state = "herbsalad"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/herbsalad/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/validsalad
- name = "valid salad"
- desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it."
- icon_state = "validsalad"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/validsalad/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("doctorsdelight", 5)
- bitesize = 3
-
-////////////////////////////////////////////DONUTS////////////////////////////////////////////
-
-
-/obj/item/weapon/reagent_containers/food/snacks/donut
- name = "donut"
- icon_state = "donut1"
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/normal
- desc = "Goes great with Robust Coffee."
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- src.bitesize = 3
- if(prob(30))
- src.icon_state = "donut2"
- src.name = "frosted donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
- name = "chaos donut"
- desc = "Like life, it never quite tastes the same."
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("sprinkles", 1)
- bitesize = 10
- switch(rand(1,10))
- if(1)
- reagents.add_reagent("nutriment", 3)
- if(2)
- reagents.add_reagent("capsaicin", 3)
- if(3)
- reagents.add_reagent("frostoil", 3)
- if(4)
- reagents.add_reagent("sprinkles", 3)
- if(5)
- reagents.add_reagent("plasma", 3)
- if(6)
- reagents.add_reagent("coco", 3)
- if(7)
- reagents.add_reagent("slimejelly", 3)
- if(8)
- reagents.add_reagent("banana", 3)
- if(9)
- reagents.add_reagent("berryjuice", 3)
- if(10)
- reagents.add_reagent("tricordrazine", 3)
- if(prob(30))
- icon_state = "donut2"
- name = "frosted chaos donut"
- reagents.add_reagent("sprinkles", 2)
-
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
- name = "jelly donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("berryjuice", 5)
- if(prob(30))
- icon_state = "jdonut2"
- name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
- name = "jelly donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("slimejelly", 5)
- bitesize = 5
- if(prob(30))
- icon_state = "jdonut2"
- name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
- name = "jelly donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("cherryjelly", 5)
- if(prob(30))
- icon_state = "jdonut2"
- name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
-
-////////////////////////////////////////////WAFFLES////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/waffles
- name = "waffles"
- desc = "Mmm, waffles."
- icon_state = "waffles"
- trash = /obj/item/trash/waffles
-
-/obj/item/weapon/reagent_containers/food/snacks/waffles/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
- name = "\improper Soylent Green"
- desc = "Not made of people. Honest." //Totally people.
- icon_state = "soylent_green"
- trash = /obj/item/trash/waffles
-
-/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
- name = "\improper Soylent Virdians"
- desc = "Not made of people. Honest." //Actually honest for once.
- icon_state = "soylent_yellow"
- trash = /obj/item/trash/waffles
-
-/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
- name = "roffle waffles"
- desc = "Waffles from Roffle. Co."
- icon_state = "rofflewaffles"
- trash = /obj/item/trash/waffles
-
-/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("mushroomhallucinogen", 8)
- bitesize = 4
-
-////////////////////////////////////////////FISH////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/cubancarp
- name = "\improper Cuban carp"
- desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!"
- icon_state = "cubancarp"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("carpotoxin", 3)
- reagents.add_reagent("capsaicin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat
- name = "carp fillet"
- desc = "A fillet of spess carp meat."
- icon_state = "fishfillet"
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New()
- ..()
- eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp")
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation
- name = "imitation carp fillet"
- desc = "Almost just like the real thing, kinda."
-
-/obj/item/weapon/reagent_containers/food/snacks/fishfingers
- name = "fish fingers"
- desc = "A finger of fish."
- icon_state = "fishfingers"
-
-/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/fishandchips
- name = "fish and chips"
- desc = "I do say so myself chap."
- icon_state = "fishandchips"
-
-/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
-
-////////////////////////////////////////////EGGS////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
- name = "chocolate egg"
- desc = "Such, sweet, fattening food."
- icon_state = "chocolateegg"
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("sugar", 2)
- reagents.add_reagent("coco", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/egg
- name = "egg"
- desc = "An egg!"
- icon_state = "egg"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/New()
- ..()
- reagents.add_reagent("nutriment", 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
- ..()
- new/obj/effect/decal/cleanable/egg_smudge(src.loc)
- reagents.reaction(hit_atom, TOUCH)
- del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes.
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype( W, /obj/item/toy/crayon ))
- var/obj/item/toy/crayon/C = W
- var/clr = C.colourName
-
- if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow")))
- usr << "[src] refuses to take on this colour!"
- return
-
- usr << "You colour [src] [clr]."
- icon_state = "egg-[clr]"
- item_color = clr
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/blue
- icon_state = "egg-blue"
- item_color = "blue"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/green
- icon_state = "egg-green"
- item_color = "green"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/mime
- icon_state = "egg-mime"
- item_color = "mime"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/orange
- icon_state = "egg-orange"
- item_color = "orange"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/purple
- icon_state = "egg-purple"
- item_color = "purple"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow
- icon_state = "egg-rainbow"
- item_color = "rainbow"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/red
- icon_state = "egg-red"
- item_color = "red"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/yellow
- icon_state = "egg-yellow"
- item_color = "yellow"
-
-/obj/item/weapon/reagent_containers/food/snacks/friedegg
- name = "fried egg"
- desc = "A fried egg, with a touch of salt and pepper."
- icon_state = "friedegg"
-
-/obj/item/weapon/reagent_containers/food/snacks/friedegg/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("blackpepper", 1)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledegg
- name = "boiled egg"
- desc = "A hard boiled egg."
- icon_state = "egg"
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New()
- ..()
- reagents.add_reagent("nutriment", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/omelette //FUCK THIS
- name = "omelette du fromage"
- desc = "That's all you can say!"
- icon_state = "omelette"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/omelette/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user)
- if(istype(W,/obj/item/weapon/kitchen/utensil/fork))
- if(W.icon_state == "forkloaded")
- user << "You already have omelette on your fork."
- return
- W.icon_state = "forkloaded"
- user.visible_message( \
- "[user] takes a piece of omelette with their fork!", \
- "You take a piece of omelette with your fork!" \
- )
- reagents.remove_reagent("nutriment", 1)
- if(reagents.total_volume <= 0)
- qdel(src)
-
-/obj/item/weapon/reagent_containers/food/snacks/benedict
- name = "eggs benedict"
- desc = "There is only one egg on this, how rude."
- icon_state = "benedict"
-
-/obj/item/weapon/reagent_containers/food/snacks/benedict/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 3
-
-////////////////////////////////////////////MUFFINS////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/muffin
- name = "muffin"
- desc = "A delicious and spongy little cake."
- icon_state = "muffin"
-
-/obj/item/weapon/reagent_containers/food/snacks/muffin/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/muffin/berry
- name = "berry muffin"
- icon_state = "berrymuffin"
- desc = "A delicious and spongy little cake, with berries."
-
-/obj/item/weapon/reagent_containers/food/snacks/muffin/booberry
- name = "booberry muffin"
- icon_state = "berrymuffin"
- alpha = 125
- desc = "My stomach is a graveyard! No living being can quench my bloodthirst!"
-
-////////////////////////////////////////////OTHER////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/candy
- name = "candy"
- desc = "Nougat love it or hate it."
- icon_state = "candy"
- trash = /obj/item/trash/candy
-
-/obj/item/weapon/reagent_containers/food/snacks/candy/New()
- ..()
- reagents.add_reagent("nutriment", 1)
- reagents.add_reagent("sugar", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/candy_corn
- name = "candy corn"
- desc = "It's a handful of candy corn. Can be stored in a detective's hat."
- icon_state = "candy_corn"
-
-/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("sugar", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chips
- name = "chips"
- desc = "Commander Riker's What-The-Crisps"
- icon_state = "chips"
- trash = /obj/item/trash/chips
-
-/obj/item/weapon/reagent_containers/food/snacks/chips/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/cookie
- name = "cookie"
- desc = "COOKIE!!!"
- icon_state = "COOKIE!!!"
-
-/obj/item/weapon/reagent_containers/food/snacks/cookie/New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
- name = "chocolate bar"
- desc = "Such, sweet, fattening food."
- icon_state = "chocolatebarunwrapped"
- wrapped = 0
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sugar", 2)
- reagents.add_reagent("coco", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/attack_self(mob/user)
- if(wrapped)
- Unwrap(user)
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/proc/Unwrap(mob/user)
- icon_state = "chocolatebarunwrapped"
- desc = "It won't make you all sticky."
- user << "You remove the foil."
- wrapped = 0
-
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/wrapped
- desc = "It's wrapped in some foil."
- icon_state = "chocolatebar"
- wrapped = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/tofu
- name = "tofu"
- desc = "We all love tofu."
- icon_state = "tofu"
-
-/obj/item/weapon/reagent_containers/food/snacks/tofu/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
- name = "huge mushroom slice"
- desc = "A slice from a huge mushroom."
- icon_state = "hugemushroomslice"
-
-/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/tomatomeat
- name = "tomato slice"
- desc = "A slice from a huge tomato."
- icon_state = "tomatomeat"
-
-/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/bearmeat
- name = "bear meat"
- desc = "A very manly slab of meat."
- icon_state = "bearmeat"
-
-/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New()
- ..()
- reagents.add_reagent("nutriment", 12)
- reagents.add_reagent("hyperzine", 5)
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/xenomeat
- name = "meat"
- desc = "A slab of meat"
- icon_state = "xenomeat"
-
-/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/spidermeat
- name = "spider meat"
- desc = "A slab of spider meat."
- icon_state = "spidermeat"
-
-/obj/item/weapon/reagent_containers/food/snacks/spidermeat/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("toxin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/spiderleg
- name = "spider leg"
- desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?"
- icon_state = "spiderleg"
-
-/obj/item/weapon/reagent_containers/food/snacks/spiderleg/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("toxin", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cornedbeef
- name = "corned beef and cabbage"
- desc = "Now you can feel like a real tourist vacationing in Ireland."
- icon_state = "cornedbeef"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/cornedbeef/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/faggot
- name = "faggot"
- desc = "A great meal all round. Not a cord of wood."
- icon_state = "faggot"
-
-/obj/item/weapon/reagent_containers/food/snacks/faggot/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/sausage
- name = "sausage"
- desc = "A piece of mixed, long meat."
- icon_state = "sausage"
-
-/obj/item/weapon/reagent_containers/food/snacks/sausage/New()
- ..()
- eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp")
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket
- name = "\improper Donk-pocket"
- desc = "The food of choice for the seasoned traitor."
- icon_state = "donkpocket"
- var/warm = 0
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New()
- ..()
- reagents.add_reagent("nutriment", 4)
-
-
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() //Not working, derp?
- if(warm)
- spawn(4200) //ew
- warm = 0
- reagents.del_reagent("tricordrazine")
- name = initial(name)
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
- name = "wing fang chu"
- desc = "A savory dish of alien wing wang in soy."
- icon_state = "wingfangchu"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/human/kebab
- name = "-kebab"
- icon_state = "kebab"
- desc = "A human meat, on a stick."
- trash = /obj/item/stack/rods
-
-/obj/item/weapon/reagent_containers/food/snacks/human/kebab/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeykebab
- name = "meat-kebab"
- icon_state = "kebab"
- desc = "Delicious meat, on a stick."
- trash = /obj/item/stack/rods
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeykebab/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/tofukebab
- name = "tofu-kebab"
- icon_state = "kebab"
- desc = "Vegan meat, on a stick."
- trash = /obj/item/stack/rods
-
-/obj/item/weapon/reagent_containers/food/snacks/tofukebab/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/popcorn
- name = "popcorn"
- desc = "Now let's find some cinema."
- icon_state = "popcorn"
- trash = /obj/item/trash/popcorn
- var/unpopped = 0
-
-/obj/item/weapon/reagent_containers/food/snacks/popcorn/New()
- ..()
- eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp")
- unpopped = rand(1,10)
- reagents.add_reagent("nutriment", 2)
- bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
-
-/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume()
- if(prob(unpopped)) //lol ...what's the point? << AINT SO POINTLESS NO MORE
- usr << "You bite down on an un-popped kernel, and it hurts your teeth!"
- unpopped = max(0, unpopped-1)
- reagents.add_reagent("sacid",0.1) //only a little tingle.
- ..()
-
-
-/obj/item/weapon/reagent_containers/food/snacks/sosjerky
- name = "\improper Scaredy's Private Reserve Beef Jerky"
- icon_state = "sosjerky"
- desc = "Beef jerky made from the finest space cows."
- trash = /obj/item/trash/sosjerky
-
-/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/no_raisin
- name = "4no raisins"
- icon_state = "4no_raisins"
- desc = "Best raisins in the universe. Not sure why."
- trash = /obj/item/trash/raisins
-
-/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New()
- ..()
- reagents.add_reagent("nutriment", 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
- name = "space twinkie"
- icon_state = "space_twinkie"
- desc = "Guaranteed to survive longer than you will."
-
-/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New()
- ..()
- reagents.add_reagent("sugar", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
- name = "cheesie honkers"
- desc = "Bite sized cheesie snacks that will honk all over your mouth."
- icon_state = "cheesie_honkers"
- trash = /obj/item/trash/cheesie
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/syndicake
- name = "syndi-cakes"
- icon_state = "syndi_cakes"
- desc = "An extremely moist snack cake that tastes just as good after being nuked."
- trash = /obj/item/trash/syndi_cakes
-
-/obj/item/weapon/reagent_containers/food/snacks/syndicake/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("doctorsdelight", 5)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
- name = "loaded baked potato"
- desc = "Totally baked."
- icon_state = "loadedbakedpotato"
-
-/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fries
- name = "space fries"
- desc = "AKA: French Fries, Freedom Fries, etc."
- icon_state = "fries"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/fries/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/soydope
- name = "soy dope"
- desc = "Dope from a soy."
- icon_state = "soydope"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/soydope/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
- name = "cheesy fries"
- desc = "Fries. Covered in cheese. Duh."
- icon_state = "cheesyfries"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
- name = "fortune cookie"
- desc = "A true prophecy in each cookie!"
- icon_state = "fortune_cookie"
-
-/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/badrecipe
- name = "burned mess"
- desc = "Someone should be demoted from chef for this."
- icon_state = "badrecipe"
-
-/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New()
- ..()
- eatverb = pick("choke down","nibble","gnaw","chomp")
- reagents.add_reagent("toxin", 1)
- reagents.add_reagent("carbon", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/meatsteak
- name = "meat steak"
- desc = "A piece of hot spicy meat."
- icon_state = "meatsteak"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("blackpepper", 1)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
- name = "spacy liberty duff"
- desc = "Jello gelatin, from Alfred Hubbard's cookbook."
- icon_state = "spacylibertyduff"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("mushroomhallucinogen", 6)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/amanitajelly
- name = "amanita jelly"
- desc = "Looks curiously toxic."
- icon_state = "amanitajelly"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("amatoxin", 6)
- reagents.add_reagent("mushroomhallucinogen", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
- name = "poppy pretzel"
- desc = "It's all twisted up!"
- icon_state = "poppypretzel"
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
-
-/* No more of this
-/obj/item/weapon/reagent_containers/food/snacks/telebacon
- name = "tele bacon"
- desc = "It tastes a little odd but it is still delicious."
- icon_state = "bacon"
- var/obj/item/device/radio/beacon/bacon/baconbeacon
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/telebacon/New()
- ..()
- reagents.add_reagent("nutriment", 4)
- baconbeacon = new /obj/item/device/radio/beacon/bacon(src)
-/obj/item/weapon/reagent_containers/food/snacks/telebacon/On_Consume()
- if(!reagents.total_volume)
- baconbeacon.loc = usr
- baconbeacon.digest_delay()
-*/
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube
- name = "monkey cube"
- desc = "Just add water!"
- icon_state = "monkeycube"
- bitesize = 12
- wrapped = 0
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
- ..()
- reagents.add_reagent("nutriment",10)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity)
- if(!proximity) return
- if(istype(O,/obj/structure/sink) && !wrapped)
- user << "You place [src] under a stream of water..."
- user.drop_item()
- loc = get_turf(O)
- return Expand()
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user)
- if(wrapped)
- Unwrap(user)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
- visible_message("[src] expands!")
- new /mob/living/carbon/monkey(get_turf(src))
- qdel(src)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user)
- icon_state = "monkeycube"
- desc = "Just add water!"
- user << "You unwrap the cube."
- wrapped = 0
-
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
- desc = "Still wrapped in some paper."
- icon_state = "monkeycubewrap"
- wrapped = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/enchiladas
- name = "enchiladas"
- desc = "Viva La Mexico!"
- icon_state = "enchiladas"
-
-/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New()
- ..()
- reagents.add_reagent("nutriment",8)
- reagents.add_reagent("capsaicin", 6)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/stew
- name = "stew"
- desc = "A nice and warm stew. Healthy and strong."
- icon_state = "stew"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/stew/New()
- ..()
- eatverb = pick("slurp","sip","suck","inhale","drink")
- reagents.add_reagent("nutriment", 10)
- reagents.add_reagent("tomatojuice", 5)
- reagents.add_reagent("imidazoline", 5)
- reagents.add_reagent("water", 5)
- bitesize = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
- name = "stewed soy meat"
- desc = "Even non-vegetarians will LOVE this!"
- icon_state = "stewedsoymeat"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New()
- ..()
- eatverb = pick("slurp","sip","suck","inhale","drink")
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/carrotfries
- name = "carrot fries"
- desc = "Tasty fries from fresh Carrots."
- icon_state = "carrotfries"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("imidazoline", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/candiedapple
- name = "candied apple"
- desc = "An apple coated in sugary sweetness."
- icon_state = "candiedapple"
-
-/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 3
-
-/*
-/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore
- name = "Boiled slime Core"
- desc = "A boiled red thing."
- icon_state = "boiledslimecore"
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New()
- ..()
- reagents.add_reagent("slimejelly", 5)
- bitesize = 3
-*/
-/obj/item/weapon/reagent_containers/food/snacks/mint
- name = "mint"
- desc = "it is only wafer thin."
- icon_state = "mint"
-
-/obj/item/weapon/reagent_containers/food/snacks/mint/New()
- ..()
- reagents.add_reagent("minttoxin", 1)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
- name = "plump helmet biscuit"
- desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
- icon_state = "phelmbiscuit"
-
-/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New()
- ..()
- if(prob(10))
- name = "exceptional plump helmet biscuit"
- desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("tricordrazine", 5)
- bitesize = 2
- else
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
- name = "chawanmushi"
- desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
- icon_state = "chawanmushi"
- trash = /obj/item/trash/snack_bowl
-
-/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/appletart
- name = "golden apple streusel tart"
- desc = "A tasty dessert that won't make it through a metal detector."
- icon_state = "gappletart"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/appletart/New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("gold", 5)
- bitesize = 3
+//All foods (except slicable, since they have unique procs) are distributed among various categories. Use common sense.
/////////////////////////////////////////////////Sliceable////////////////////////////////////////
// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
@@ -1278,115 +265,4 @@
name = "watermelon slice"
desc = "A slice of watery goodness."
icon_state = "watermelonslice"
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cracker
- name = "cracker"
- desc = "It's a salted cracker."
- icon_state = "cracker"
-
-/obj/item/weapon/reagent_containers/food/snacks/cracker/New()
- ..()
- reagents.add_reagent("nutriment", 1)
-
-
-////////////////////////////////FOOD ADDITIONS////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/wrap
- name = "egg wrap"
- desc = "The precursor to Pigs in a Blanket."
- icon_state = "wrap"
-
-/obj/item/weapon/reagent_containers/food/snacks/wrap/New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/beans
- name = "tin of beans"
- desc = "Musical fruit in a slightly less musical container."
- icon_state = "beans"
-
-/obj/item/weapon/reagent_containers/food/snacks/beans/New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/hotdog
- name = "hotdog"
- desc = "Fresh footlong ready to go down on."
- icon_state = "hotdog"
-
-/obj/item/weapon/reagent_containers/food/snacks/hotdog/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("ketchup", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/meatbun
- name = "meat bun"
- desc = "Has the potential to not be Dog."
- icon_state = "meatbun"
-
-/obj/item/weapon/reagent_containers/food/snacks/meatbun/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
- name = "sugar cookie"
- desc = "Just like your little sister used to make."
- icon_state = "sugarcookie"
-
-/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("sugar", 5)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg
- name = "boiled spider leg"
- desc = "A giant spider's leg that's still twitching after being cooked. Gross!"
- icon_state = "spiderlegcooked"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("toxin", 2)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/spidereggs
- name = "spider eggs"
- desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health."
- icon_state = "spidereggs"
-
-/obj/item/weapon/reagent_containers/food/snacks/spidereggs/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("toxin", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/spidereggsham
- name = "green eggs and ham"
- desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?"
- icon_state = "spidereggsham"
- trash = /obj/item/trash/plate
-
-/obj/item/weapon/reagent_containers/food/snacks/spidereggsham/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("toxin", 3)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/sashimi
- name = "carp sashimi"
- desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself."
- icon_state = "sashimi"
-
-/obj/item/weapon/reagent_containers/food/snacks/sashimi/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("toxin", 5)
- bitesize = 3
+ bitesize = 2
\ No newline at end of file
diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm
new file mode 100644
index 00000000000..fccf13f8e11
--- /dev/null
+++ b/code/modules/food&drinks/food/snacks_egg.dm
@@ -0,0 +1,132 @@
+
+////////////////////////////////////////////EGGS////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
+ name = "chocolate egg"
+ desc = "Such, sweet, fattening food."
+ icon_state = "chocolateegg"
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/egg
+ name = "egg"
+ desc = "An egg!"
+ icon_state = "egg"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/egg_smudge(src.loc)
+ reagents.reaction(hit_atom, TOUCH)
+ del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes.
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype( W, /obj/item/toy/crayon ))
+ var/obj/item/toy/crayon/C = W
+ var/clr = C.colourName
+
+ if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow")))
+ usr << "[src] refuses to take on this colour!"
+ return
+
+ usr << "You colour [src] [clr]."
+ icon_state = "egg-[clr]"
+ item_color = clr
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/blue
+ icon_state = "egg-blue"
+ item_color = "blue"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/green
+ icon_state = "egg-green"
+ item_color = "green"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/mime
+ icon_state = "egg-mime"
+ item_color = "mime"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/orange
+ icon_state = "egg-orange"
+ item_color = "orange"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/purple
+ icon_state = "egg-purple"
+ item_color = "purple"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow
+ icon_state = "egg-rainbow"
+ item_color = "rainbow"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/red
+ icon_state = "egg-red"
+ item_color = "red"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/yellow
+ icon_state = "egg-yellow"
+ item_color = "yellow"
+
+/obj/item/weapon/reagent_containers/food/snacks/friedegg
+ name = "fried egg"
+ desc = "A fried egg, with a touch of salt and pepper."
+ icon_state = "friedegg"
+
+/obj/item/weapon/reagent_containers/food/snacks/friedegg/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledegg
+ name = "boiled egg"
+ desc = "A hard boiled egg."
+ icon_state = "egg"
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/omelette //FUCK THIS
+ name = "omelette du fromage"
+ desc = "That's all you can say!"
+ icon_state = "omelette"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/omelette/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user)
+ if(istype(W,/obj/item/weapon/kitchen/utensil/fork))
+ if(W.icon_state == "forkloaded")
+ user << "You already have omelette on your fork."
+ return
+ W.icon_state = "forkloaded"
+ user.visible_message( \
+ "[user] takes a piece of omelette with their fork!", \
+ "You take a piece of omelette with your fork!" \
+ )
+ reagents.remove_reagent("nutriment", 1)
+ if(reagents.total_volume <= 0)
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/benedict
+ name = "eggs benedict"
+ desc = "There is only one egg on this, how rude."
+ icon_state = "benedict"
+
+/obj/item/weapon/reagent_containers/food/snacks/benedict/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 3
diff --git a/code/modules/food&drinks/food/snacks_meat.dm b/code/modules/food&drinks/food/snacks_meat.dm
new file mode 100644
index 00000000000..2402a138050
--- /dev/null
+++ b/code/modules/food&drinks/food/snacks_meat.dm
@@ -0,0 +1,346 @@
+//Not only meat, actually, but also snacks that are almost meat, such as fish meat or tofu
+
+
+////////////////////////////////////////////FISH////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/cubancarp
+ name = "\improper Cuban carp"
+ desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!"
+ icon_state = "cubancarp"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ reagents.add_reagent("capsaicin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat
+ name = "carp fillet"
+ desc = "A fillet of spess carp meat."
+ icon_state = "fishfillet"
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New()
+ ..()
+ eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp")
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation
+ name = "imitation carp fillet"
+ desc = "Almost just like the real thing, kinda."
+
+/obj/item/weapon/reagent_containers/food/snacks/fishfingers
+ name = "fish fingers"
+ desc = "A finger of fish."
+ icon_state = "fishfingers"
+
+/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/fishandchips
+ name = "fish and chips"
+ desc = "I do say so myself chap."
+ icon_state = "fishandchips"
+
+/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+////////////////////////////////////////////MEATS AND ALIKE////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/tofu
+ name = "tofu"
+ desc = "We all love tofu."
+ icon_state = "tofu"
+
+/obj/item/weapon/reagent_containers/food/snacks/tofu/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 3
+
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatomeat
+ name = "tomato slice"
+ desc = "A slice from a huge tomato."
+ icon_state = "tomatomeat"
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/bearmeat
+ name = "bear meat"
+ desc = "A very manly slab of meat."
+ icon_state = "bearmeat"
+
+/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New()
+ ..()
+ reagents.add_reagent("nutriment", 12)
+ reagents.add_reagent("hyperzine", 5)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat
+ name = "meat"
+ desc = "A slab of meat"
+ icon_state = "xenomeat"
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/spidermeat
+ name = "spider meat"
+ desc = "A slab of spider meat."
+ icon_state = "spidermeat"
+
+/obj/item/weapon/reagent_containers/food/snacks/spidermeat/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("toxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/spiderleg
+ name = "spider leg"
+ desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?"
+ icon_state = "spiderleg"
+
+/obj/item/weapon/reagent_containers/food/snacks/spiderleg/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("toxin", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cornedbeef
+ name = "corned beef and cabbage"
+ desc = "Now you can feel like a real tourist vacationing in Ireland."
+ icon_state = "cornedbeef"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/cornedbeef/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/faggot
+ name = "faggot"
+ desc = "A great meal all round. Not a cord of wood."
+ icon_state = "faggot"
+
+/obj/item/weapon/reagent_containers/food/snacks/faggot/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sausage
+ name = "sausage"
+ desc = "A piece of mixed, long meat."
+ icon_state = "sausage"
+
+/obj/item/weapon/reagent_containers/food/snacks/sausage/New()
+ ..()
+ eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp")
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
+ name = "wing fang chu"
+ desc = "A savory dish of alien wing wang in soy."
+ icon_state = "wingfangchu"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/human/kebab
+ name = "-kebab"
+ icon_state = "kebab"
+ desc = "A human meat, on a stick."
+ trash = /obj/item/stack/rods
+
+/obj/item/weapon/reagent_containers/food/snacks/human/kebab/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeykebab
+ name = "meat-kebab"
+ icon_state = "kebab"
+ desc = "Delicious meat, on a stick."
+ trash = /obj/item/stack/rods
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeykebab/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tofukebab
+ name = "tofu-kebab"
+ icon_state = "kebab"
+ desc = "Vegan meat, on a stick."
+ trash = /obj/item/stack/rods
+
+/obj/item/weapon/reagent_containers/food/snacks/tofukebab/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak
+ name = "meat steak"
+ desc = "A piece of hot spicy meat."
+ icon_state = "meatsteak"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ name = "monkey cube"
+ desc = "Just add water!"
+ icon_state = "monkeycube"
+ bitesize = 12
+ wrapped = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
+ ..()
+ reagents.add_reagent("nutriment",10)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity)
+ if(!proximity) return
+ if(istype(O,/obj/structure/sink) && !wrapped)
+ user << "You place [src] under a stream of water..."
+ user.drop_item()
+ loc = get_turf(O)
+ return Expand()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user)
+ if(wrapped)
+ Unwrap(user)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
+ visible_message("[src] expands!")
+ new /mob/living/carbon/monkey(get_turf(src))
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user)
+ icon_state = "monkeycube"
+ desc = "Just add water!"
+ user << "You unwrap the cube."
+ wrapped = 0
+
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
+ desc = "Still wrapped in some paper."
+ icon_state = "monkeycubewrap"
+ wrapped = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas
+ name = "enchiladas"
+ desc = "Viva La Mexico!"
+ icon_state = "enchiladas"
+
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New()
+ ..()
+ reagents.add_reagent("nutriment",8)
+ reagents.add_reagent("capsaicin", 6)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/stew
+ name = "stew"
+ desc = "A nice and warm stew. Healthy and strong."
+ icon_state = "stew"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/stew/New()
+ ..()
+ eatverb = pick("slurp","sip","suck","inhale","drink")
+ reagents.add_reagent("nutriment", 10)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ reagents.add_reagent("water", 5)
+ bitesize = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
+ name = "stewed soy meat"
+ desc = "Even non-vegetarians will LOVE this!"
+ icon_state = "stewedsoymeat"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New()
+ ..()
+ eatverb = pick("slurp","sip","suck","inhale","drink")
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+
+/* No more of this
+/obj/item/weapon/reagent_containers/food/snacks/telebacon
+ name = "tele bacon"
+ desc = "It tastes a little odd but it is still delicious."
+ icon_state = "bacon"
+ var/obj/item/device/radio/beacon/bacon/baconbeacon
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/telebacon/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ baconbeacon = new /obj/item/device/radio/beacon/bacon(src)
+/obj/item/weapon/reagent_containers/food/snacks/telebacon/On_Consume()
+ if(!reagents.total_volume)
+ baconbeacon.loc = usr
+ baconbeacon.digest_delay()
+*/
+
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg
+ name = "boiled spider leg"
+ desc = "A giant spider's leg that's still twitching after being cooked. Gross!"
+ icon_state = "spiderlegcooked"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("toxin", 2)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/spidereggsham
+ name = "green eggs and ham"
+ desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?"
+ icon_state = "spidereggsham"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/spidereggsham/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("toxin", 3)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/sashimi
+ name = "carp sashimi"
+ desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself."
+ icon_state = "sashimi"
+
+/obj/item/weapon/reagent_containers/food/snacks/sashimi/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("toxin", 5)
+ bitesize = 3
diff --git a/code/modules/food&drinks/food/snacks_other.dm b/code/modules/food&drinks/food/snacks_other.dm
new file mode 100644
index 00000000000..4a4380cfeea
--- /dev/null
+++ b/code/modules/food&drinks/food/snacks_other.dm
@@ -0,0 +1,232 @@
+
+////////////////////////////////////////////OTHER////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/candy_corn
+ name = "candy corn"
+ desc = "It's a handful of candy corn. Can be stored in a detective's hat."
+ icon_state = "candy_corn"
+
+/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sugar", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
+ name = "chocolate bar"
+ desc = "Such, sweet, fattening food."
+ icon_state = "chocolatebarunwrapped"
+ wrapped = 0
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/attack_self(mob/user)
+ if(wrapped)
+ Unwrap(user)
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/proc/Unwrap(mob/user)
+ icon_state = "chocolatebarunwrapped"
+ desc = "It won't make you all sticky."
+ user << "You remove the foil."
+ wrapped = 0
+
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/wrapped
+ desc = "It's wrapped in some foil."
+ icon_state = "chocolatebar"
+ wrapped = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
+ name = "huge mushroom slice"
+ desc = "A slice from a huge mushroom."
+ icon_state = "hugemushroomslice"
+
+/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
+
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn
+ name = "popcorn"
+ desc = "Now let's find some cinema."
+ icon_state = "popcorn"
+ trash = /obj/item/trash/popcorn
+ var/unpopped = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn/New()
+ ..()
+ eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp")
+ unpopped = rand(1,10)
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume()
+ if(prob(unpopped)) //lol ...what's the point? << AINT SO POINTLESS NO MORE
+ usr << "You bite down on an un-popped kernel, and it hurts your teeth!"
+ unpopped = max(0, unpopped-1)
+ reagents.add_reagent("sacid",0.1) //only a little tingle.
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
+ name = "loaded baked potato"
+ desc = "Totally baked."
+ icon_state = "loadedbakedpotato"
+
+/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fries
+ name = "space fries"
+ desc = "AKA: French Fries, Freedom Fries, etc."
+ icon_state = "fries"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/fries/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soydope
+ name = "soy dope"
+ desc = "Dope from a soy."
+ icon_state = "soydope"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/soydope/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
+ name = "cheesy fries"
+ desc = "Fries. Covered in cheese. Duh."
+ icon_state = "cheesyfries"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/badrecipe
+ name = "burned mess"
+ desc = "Someone should be demoted from chef for this."
+ icon_state = "badrecipe"
+
+/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New()
+ ..()
+ eatverb = pick("choke down","nibble","gnaw","chomp")
+ reagents.add_reagent("toxin", 1)
+ reagents.add_reagent("carbon", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
+ name = "spacy liberty duff"
+ desc = "Jello gelatin, from Alfred Hubbard's cookbook."
+ icon_state = "spacylibertyduff"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("mushroomhallucinogen", 6)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly
+ name = "amanita jelly"
+ desc = "Looks curiously toxic."
+ icon_state = "amanitajelly"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("amatoxin", 6)
+ reagents.add_reagent("mushroomhallucinogen", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/carrotfries
+ name = "carrot fries"
+ desc = "Tasty fries from fresh Carrots."
+ icon_state = "carrotfries"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("imidazoline", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/candiedapple
+ name = "candied apple"
+ desc = "An apple coated in sugary sweetness."
+ icon_state = "candiedapple"
+
+/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 3
+
+/*
+/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore
+ name = "Boiled slime Core"
+ desc = "A boiled red thing."
+ icon_state = "boiledslimecore"
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+ bitesize = 3
+*/
+/obj/item/weapon/reagent_containers/food/snacks/mint
+ name = "mint"
+ desc = "it is only wafer thin."
+ icon_state = "mint"
+
+/obj/item/weapon/reagent_containers/food/snacks/mint/New()
+ ..()
+ reagents.add_reagent("minttoxin", 1)
+ bitesize = 1
+
+////////////////////////////////FOOD ADDITIONS////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/wrap
+ name = "egg wrap"
+ desc = "The precursor to Pigs in a Blanket."
+ icon_state = "wrap"
+
+/obj/item/weapon/reagent_containers/food/snacks/wrap/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/beans
+ name = "tin of beans"
+ desc = "Musical fruit in a slightly less musical container."
+ icon_state = "beans"
+
+/obj/item/weapon/reagent_containers/food/snacks/beans/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/spidereggs
+ name = "spider eggs"
+ desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health."
+ icon_state = "spidereggs"
+
+/obj/item/weapon/reagent_containers/food/snacks/spidereggs/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("toxin", 3)
+ bitesize = 2
diff --git a/code/modules/food&drinks/food/snacks_pastry.dm b/code/modules/food&drinks/food/snacks_pastry.dm
new file mode 100644
index 00000000000..1c55584b00b
--- /dev/null
+++ b/code/modules/food&drinks/food/snacks_pastry.dm
@@ -0,0 +1,309 @@
+//Pastry is a food that is made from dough which is made from wheat or rye flour.
+//This file contains pastries that don't fit any existing categories.
+
+////////////////////////////////////////////DONUTS////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/donut
+ name = "donut"
+ icon_state = "donut1"
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal
+ desc = "Goes great with Robust Coffee."
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ src.bitesize = 3
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.name = "frosted donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
+ name = "chaos donut"
+ desc = "Like life, it never quite tastes the same."
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sprinkles", 1)
+ bitesize = 10
+ switch(rand(1,10))
+ if(1)
+ reagents.add_reagent("nutriment", 3)
+ if(2)
+ reagents.add_reagent("capsaicin", 3)
+ if(3)
+ reagents.add_reagent("frostoil", 3)
+ if(4)
+ reagents.add_reagent("sprinkles", 3)
+ if(5)
+ reagents.add_reagent("plasma", 3)
+ if(6)
+ reagents.add_reagent("coco", 3)
+ if(7)
+ reagents.add_reagent("slimejelly", 3)
+ if(8)
+ reagents.add_reagent("banana", 3)
+ if(9)
+ reagents.add_reagent("berryjuice", 3)
+ if(10)
+ reagents.add_reagent("tricordrazine", 3)
+ if(prob(30))
+ icon_state = "donut2"
+ name = "frosted chaos donut"
+ reagents.add_reagent("sprinkles", 2)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
+ name = "jelly donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("berryjuice", 5)
+ if(prob(30))
+ icon_state = "jdonut2"
+ name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
+ name = "jelly donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("slimejelly", 5)
+ bitesize = 5
+ if(prob(30))
+ icon_state = "jdonut2"
+ name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
+ name = "jelly donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("cherryjelly", 5)
+ if(prob(30))
+ icon_state = "jdonut2"
+ name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+
+////////////////////////////////////////////MUFFINS////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin
+ name = "muffin"
+ desc = "A delicious and spongy little cake."
+ icon_state = "muffin"
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin/berry
+ name = "berry muffin"
+ icon_state = "berrymuffin"
+ desc = "A delicious and spongy little cake, with berries."
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin/booberry
+ name = "booberry muffin"
+ icon_state = "berrymuffin"
+ alpha = 125
+ desc = "My stomach is a graveyard! No living being can quench my bloodthirst!"
+
+/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
+ name = "chawanmushi"
+ desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
+ icon_state = "chawanmushi"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 1
+////////////////////////////////////////////WAFFLES////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/waffles
+ name = "waffles"
+ desc = "Mmm, waffles."
+ icon_state = "waffles"
+ trash = /obj/item/trash/waffles
+
+/obj/item/weapon/reagent_containers/food/snacks/waffles/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
+ name = "\improper Soylent Green"
+ desc = "Not made of people. Honest." //Totally people.
+ icon_state = "soylent_green"
+ trash = /obj/item/trash/waffles
+
+/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
+ name = "\improper Soylent Virdians"
+ desc = "Not made of people. Honest." //Actually honest for once.
+ icon_state = "soylent_yellow"
+ trash = /obj/item/trash/waffles
+
+/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
+ name = "roffle waffles"
+ desc = "Waffles from Roffle. Co."
+ icon_state = "rofflewaffles"
+ trash = /obj/item/trash/waffles
+
+/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("mushroomhallucinogen", 8)
+ bitesize = 4
+
+////////////////////////////////////////////OTHER////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/cookie
+ name = "cookie"
+ desc = "COOKIE!!!"
+ icon_state = "COOKIE!!!"
+
+/obj/item/weapon/reagent_containers/food/snacks/cookie/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket
+ name = "\improper Donk-pocket"
+ desc = "The food of choice for the seasoned traitor."
+ icon_state = "donkpocket"
+ var/warm = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() //Not working, derp?
+ if(warm)
+ spawn(4200) //ew
+ warm = 0
+ reagents.del_reagent("tricordrazine")
+ name = initial(name)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
+ name = "fortune cookie"
+ desc = "A true prophecy in each cookie!"
+ icon_state = "fortune_cookie"
+
+/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
+ name = "poppy pretzel"
+ desc = "It's all twisted up!"
+ icon_state = "poppypretzel"
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
+ name = "plump helmet biscuit"
+ desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
+ icon_state = "phelmbiscuit"
+
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump helmet biscuit"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/appletart
+ name = "golden apple streusel tart"
+ desc = "A tasty dessert that won't make it through a metal detector."
+ icon_state = "gappletart"
+ trash = /obj/item/trash/plate
+
+/obj/item/weapon/reagent_containers/food/snacks/appletart/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("gold", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cracker
+ name = "cracker"
+ desc = "It's a salted cracker."
+ icon_state = "cracker"
+
+/obj/item/weapon/reagent_containers/food/snacks/cracker/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/hotdog
+ name = "hotdog"
+ desc = "Fresh footlong ready to go down on."
+ icon_state = "hotdog"
+
+/obj/item/weapon/reagent_containers/food/snacks/hotdog/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("ketchup", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/meatbun
+ name = "meat bun"
+ desc = "Has the potential to not be Dog."
+ icon_state = "meatbun"
+
+/obj/item/weapon/reagent_containers/food/snacks/meatbun/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
+ name = "sugar cookie"
+ desc = "Just like your little sister used to make."
+ icon_state = "sugarcookie"
+
+/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sugar", 5)
+ bitesize = 2
\ No newline at end of file
diff --git a/code/modules/food&drinks/food/snacks_pies.dm b/code/modules/food&drinks/food/snacks_pie.dm
similarity index 100%
rename from code/modules/food&drinks/food/snacks_pies.dm
rename to code/modules/food&drinks/food/snacks_pie.dm
diff --git a/code/modules/food&drinks/food/snacks_salad.dm b/code/modules/food&drinks/food/snacks_salad.dm
new file mode 100644
index 00000000000..8b8cb86b799
--- /dev/null
+++ b/code/modules/food&drinks/food/snacks_salad.dm
@@ -0,0 +1,38 @@
+//this category is very little but I think that it has great potential to grow
+////////////////////////////////////////////SALAD////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/aesirsalad
+ name = "\improper Aesir salad"
+ desc = "Probably too incredible for mortal men to fully enjoy."
+ icon_state = "aesirsalad"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New()
+ ..()
+ eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp")
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 8)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/herbsalad
+ name = "herb salad"
+ desc = "A tasty salad with apples on top."
+ icon_state = "herbsalad"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/herbsalad/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/validsalad
+ name = "valid salad"
+ desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it."
+ icon_state = "validsalad"
+ trash = /obj/item/trash/snack_bowl
+
+/obj/item/weapon/reagent_containers/food/snacks/validsalad/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("doctorsdelight", 5)
+ bitesize = 3
\ No newline at end of file
diff --git a/code/modules/food&drinks/food/snacks_vend.dm b/code/modules/food&drinks/food/snacks_vend.dm
new file mode 100644
index 00000000000..465c33d925e
--- /dev/null
+++ b/code/modules/food&drinks/food/snacks_vend.dm
@@ -0,0 +1,81 @@
+////////////////////////////////////////////SNACKS FROM VENDING MACHINES////////////////////////////////////////////
+//in other words: junk food
+//don't even bother looking for recipes for these
+
+/obj/item/weapon/reagent_containers/food/snacks/candy
+ name = "candy"
+ desc = "Nougat love it or hate it."
+ icon_state = "candy"
+ trash = /obj/item/trash/candy
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("sugar", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sosjerky
+ name = "\improper Scaredy's Private Reserve Beef Jerky"
+ icon_state = "sosjerky"
+ desc = "Beef jerky made from the finest space cows."
+ trash = /obj/item/trash/sosjerky
+
+/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chips
+ name = "chips"
+ desc = "Commander Riker's What-The-Crisps"
+ icon_state = "chips"
+ trash = /obj/item/trash/chips
+
+/obj/item/weapon/reagent_containers/food/snacks/chips/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/no_raisin
+ name = "4no raisins"
+ icon_state = "4no_raisins"
+ desc = "Best raisins in the universe. Not sure why."
+ trash = /obj/item/trash/raisins
+
+/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
+ name = "space twinkie"
+ icon_state = "space_twinkie"
+ desc = "Guaranteed to survive longer than you will."
+
+/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New()
+ ..()
+ reagents.add_reagent("sugar", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
+ name = "cheesie honkers"
+ desc = "Bite sized cheesie snacks that will honk all over your mouth."
+ icon_state = "cheesie_honkers"
+ trash = /obj/item/trash/cheesie
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/syndicake
+ name = "syndi-cakes"
+ icon_state = "syndi_cakes"
+ desc = "An extremely moist snack cake that tastes just as good after being nuked."
+ trash = /obj/item/trash/syndi_cakes
+
+/obj/item/weapon/reagent_containers/food/snacks/syndicake/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("doctorsdelight", 5)
+ bitesize = 3
+
diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm
index c43c4bec814..654b4c9c7d9 100644
--- a/code/modules/food&drinks/kitchen machinery/gibber.dm
+++ b/code/modules/food&drinks/kitchen machinery/gibber.dm
@@ -110,7 +110,7 @@
set name = "empty gibber"
set src in oview(1)
- if (usr.stat != 0)
+ if(usr.stat || !usr.canmove || usr.restrained())
return
src.go_out()
add_fingerprint(usr)
diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food&drinks/kitchen machinery/juicer.dm
index 80ba39354a3..94696028027 100644
--- a/code/modules/food&drinks/kitchen machinery/juicer.dm
+++ b/code/modules/food&drinks/kitchen machinery/juicer.dm
@@ -126,7 +126,7 @@
set category = "Object"
set name = "Detach Beaker from the juicer"
set src in oview(1)
- if (usr.stat != 0)
+ if(usr.stat || !usr.canmove || usr.restrained())
return
if (!beaker)
return
diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food&drinks/kitchen machinery/microwave.dm
index 247b6721383..b44170fd2da 100644
--- a/code/modules/food&drinks/kitchen machinery/microwave.dm
+++ b/code/modules/food&drinks/kitchen machinery/microwave.dm
@@ -122,11 +122,12 @@
return 1
else if(istype(O, /obj/item/weapon/soap/)) // If they're trying to clean it then let them
+ var/obj/item/weapon/soap/P = O
user.visible_message( \
"[user] starts to clean the microwave.", \
"You start to clean the microwave." \
)
- if (do_after(user,20))
+ if (do_after(user, P.cleanspeed))
user.visible_message( \
"[user] has cleaned the microwave.", \
"You have cleaned the microwave." \
diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm
index 7ec3d44356e..8ef77de2a02 100644
--- a/code/modules/food&drinks/kitchen machinery/processor.dm
+++ b/code/modules/food&drinks/kitchen machinery/processor.dm
@@ -157,7 +157,7 @@
set name = "Eject Contents"
set src in oview(1)
- if (usr.stat != 0)
+ if(usr.stat || !usr.canmove || usr.restrained())
return
src.empty()
add_fingerprint(usr)
diff --git a/code/modules/food&drinks/recipes/microwave/recipes.dm b/code/modules/food&drinks/recipes/microwave/recipes.dm
index 17c76c10d25..4bf797f5bf7 100644
--- a/code/modules/food&drinks/recipes/microwave/recipes.dm
+++ b/code/modules/food&drinks/recipes/microwave/recipes.dm
@@ -1,334 +1,6 @@
// see code/datums/recipe.dm
-////////////////////////////////////////////////EGG RECIPE's////////////////////////////////////////////////
-
-/datum/recipe/egg/fried
- reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/friedegg
-
-/datum/recipe/egg/boiled
- reagents = list("water" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg
-
-/datum/recipe/egg/omelette
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/omelette
-
-/datum/recipe/egg/chocolate
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg
-
-/datum/recipe/egg/benedict
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/friedegg,
- /obj/item/weapon/reagent_containers/food/snacks/meatsteak,
- /obj/item/weapon/reagent_containers/food/snacks/breadslice,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/benedict
-
-////////////////////////////////////////////////DONUTS////////////////////////////////////////////////
-
-/datum/recipe/donut
- reagents = list("flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
-
-/datum/recipe/donut/jelly
- reagents = list("berryjuice" = 5, "flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly
-
-/datum/recipe/donut/jelly/slime
- reagents = list("slimejelly" = 5, "flour" = 5)
- result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
-
-/datum/recipe/donut/jelly/cherry
- reagents = list("cherryjelly" = 5, "flour" = 5)
- result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
-
-/datum/recipe/chaosdonut
- reagents = list("frostoil" = 5, "capsaicin" = 5, "flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos
-
-
-////////////////////////////////////////////////WAFFLES////////////////////////////////////////////////
-
-/datum/recipe/waffles
- reagents = list("flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/waffles
-
-
-/datum/recipe/waffles/soylenviridians
- reagents = list("flour" = 15)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians
-
-/datum/recipe/waffles/soylentgreen
- reagents = list("flour" = 15)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/meat/human,
- /obj/item/weapon/reagent_containers/food/snacks/meat/human,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen
-
-
-/datum/recipe/waffles/roffle
- reagents = list("mushroomhallucinogen" = 5, "flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
-
-
-////////////////////////////////////////////////DONKPOCCKETS////////////////////////////////////////////////
-
-/datum/recipe/donkpocket
- reagents = list("flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/faggot,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
- proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked)
- being_cooked.warm = 1
- being_cooked.reagents.add_reagent("tricordrazine", 5)
- being_cooked.bitesize = 6
- being_cooked.name = "Warm " + being_cooked.name
- being_cooked.cooltime()
- make_food(var/obj/container as obj)
- var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container)
- warm_up(being_cooked)
- return being_cooked
-
-/datum/recipe/donkpocket/warm
- reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/donkpocket
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
- make_food(var/obj/container as obj)
- var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = locate() in container
- if(being_cooked && !being_cooked.warm)
- warm_up(being_cooked)
- return being_cooked
-
-
-////////////////////////////////////////////////MUFFINS////////////////////////////////////////////////
-
-/datum/recipe/muffin
- reagents = list("milk" = 5, "flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/muffin
-
-/datum/recipe/muffin/berry
- reagents = list("milk" = 5, "flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/grown/berries
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/muffin/berry
-
-/datum/recipe/muffin/booberry
- reagents = list("milk" = 5, "flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/grown/berries,
- /obj/item/weapon/ectoplasm
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/muffin/booberry
-
-/datum/recipe/muffin/chawanmushi
- reagents = list("water" = 5, "soysauce" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi
-
-
-
-////////////////////////////////////////////////KEBABS NO REMOVE////////////////////////////////////////////////
-
-/datum/recipe/kebab/human
- items = list(
- /obj/item/stack/rods,
- /obj/item/weapon/reagent_containers/food/snacks/meat/human,
- /obj/item/weapon/reagent_containers/food/snacks/meat/human,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/human/kebab
-
-/datum/recipe/kebab/monkey
- items = list(
- /obj/item/stack/rods,
- /obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
- /obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/monkeykebab
-
-/datum/recipe/kebab/tofu
- items = list(
- /obj/item/stack/rods,
- /obj/item/weapon/reagent_containers/food/snacks/tofu,
- /obj/item/weapon/reagent_containers/food/snacks/tofu,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/tofukebab
-
-////////////////////////////////////////////////FISH////////////////////////////////////////////////
-
-/datum/recipe/carpmeat
- reagents = list("carpotoxin" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/tofu
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation
-
-/datum/recipe/cubancarp
- reagents = list("flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/chili,
- /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp
-
-/datum/recipe/fishandchips
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/fries,
- /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips
-
-/datum/recipe/fishfingers
- reagents = list("flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers
-
-/datum/recipe/sashimi
- reagents = list("soysauce" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/spidereggs,
- /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sashimi
-
-////////////////////////////////////////////////PIZZA!!!////////////////////////////////////////////////
-
-/datum/recipe/pizza/margherita
- reagents = list("flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
-
-/datum/recipe/pizza/meat
- reagents = list("flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
- /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
-
-/datum/recipe/pizza/mushroom
- reagents = list("flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
-
-/datum/recipe/pizza/vegetable
- reagents = list("flour" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant,
- /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
- /obj/item/weapon/reagent_containers/food/snacks/grown/corn,
- /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
-
-
-
-////////////////////////////////////////////////SALADS////////////////////////////////////////////////
-
-/datum/recipe/salad/herb
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
- /obj/item/weapon/reagent_containers/food/snacks/grown/apple,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad
- make_food(var/obj/container as obj)
- var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container)
- being_cooked.reagents.del_reagent("toxin")
- return being_cooked
-
-/datum/recipe/salad/aesir
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
- /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad
-
-/datum/recipe/salad/valid
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
- /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
- /obj/item/weapon/reagent_containers/food/snacks/grown/potato,
- /obj/item/weapon/reagent_containers/food/snacks/faggot,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/validsalad
- make_food(var/obj/container as obj)
- var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container)
- being_cooked.reagents.del_reagent("toxin")
- return being_cooked
-
////////////////////////////////////////////////FOOD ADDITTIONS////////////////////////////////////////////////
/datum/recipe/wrap
@@ -347,62 +19,8 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/beans
-/datum/recipe/hotdog
- reagents = list("ketchup" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/breadslice,
- /obj/item/weapon/reagent_containers/food/snacks/sausage,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/hotdog
-
-/datum/recipe/meatbun
- reagents = list("soysauce" = 5, "flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/faggot,
- /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
-
-/datum/recipe/sugarcookie
- reagents = list("flour" = 5, "sugar" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie
-
-/datum/recipe/boiledspiderleg
- reagents = list("water" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/spiderleg,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg
-
-/datum/recipe/spidereggsham
- reagents = list("sodiumchloride" = 1)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/spidereggs,
- /obj/item/weapon/reagent_containers/food/snacks/spidermeat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/spidereggsham
-
////////////////////////////////////////////////MISC RECIPE's////////////////////////////////////////////////
-/datum/recipe/cornedbeef
- reagents = list("sodiumchloride" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
- /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/cornedbeef
-
-/datum/recipe/wingfangchu
- reagents = list("soysauce" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/xenomeat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/wingfangchu
-
/datum/recipe/loadedbakedpotato
items = list(
/obj/item/weapon/reagent_containers/food/snacks/grown/potato,
@@ -423,28 +41,6 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/popcorn
-/datum/recipe/fortunecookie
- reagents = list("flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/paper,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie
-/datum/recipe/fortunecookie/make_food(var/obj/container as obj)
- var/obj/item/weapon/paper/paper = locate() in container
- paper.loc = null //prevent deletion
- var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container)
- paper.loc = being_cooked
- being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn
- return being_cooked
-
-/datum/recipe/meatsteak
- reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/meat
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
-
/datum/recipe/spacylibertyduff
reagents = list("water" = 5, "vodka" = 5)
items = list(
@@ -467,73 +63,9 @@
being_cooked.reagents.del_reagent("amatoxin")
return being_cooked
-/datum/recipe/enchiladas
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- /obj/item/weapon/reagent_containers/food/snacks/grown/chili,
- /obj/item/weapon/reagent_containers/food/snacks/grown/chili,
- /obj/item/weapon/reagent_containers/food/snacks/grown/corn,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
-
-/datum/recipe/stew
- reagents = list("water" = 10)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- /obj/item/weapon/reagent_containers/food/snacks/grown/potato,
- /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
- /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/stew
-
-/datum/recipe/stewedsoymeat
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/soydope,
- /obj/item/weapon/reagent_containers/food/snacks/soydope,
- /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
- /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
-
-/datum/recipe/poppypretzel
- reagents = list("flour" = 5)
- items = list(
- /obj/item/seeds/poppyseed,
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel
-
/datum/recipe/candiedapple
reagents = list("water" = 5, "sugar" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/grown/apple
)
result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple
-
-/datum/recipe/sausage
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/faggot,
- /obj/item/weapon/reagent_containers/food/snacks/meat,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/sausage
-
-/datum/recipe/plumphelmetbiscuit
- reagents = list("flour" = 5)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
-
-/datum/recipe/appletart
- reagents = list("sugar" = 5, "milk" = 5, "flour" = 15)
- items = list(
- /obj/item/weapon/reagent_containers/food/snacks/egg,
- /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold,
- )
- result = /obj/item/weapon/reagent_containers/food/snacks/appletart
-
-/datum/recipe/cracker
- reagents = list("flour" = 5, "sodiumchloride" = 1)
- result = /obj/item/weapon/reagent_containers/food/snacks/cracker
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_burgers.dm b/code/modules/food&drinks/recipes/microwave/recipes_burger.dm
similarity index 100%
rename from code/modules/food&drinks/recipes/microwave/recipes_burgers.dm
rename to code/modules/food&drinks/recipes/microwave/recipes_burger.dm
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_cakes.dm b/code/modules/food&drinks/recipes/microwave/recipes_cake.dm
similarity index 100%
rename from code/modules/food&drinks/recipes/microwave/recipes_cakes.dm
rename to code/modules/food&drinks/recipes/microwave/recipes_cake.dm
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_egg.dm b/code/modules/food&drinks/recipes/microwave/recipes_egg.dm
new file mode 100644
index 00000000000..7797053ffbf
--- /dev/null
+++ b/code/modules/food&drinks/recipes/microwave/recipes_egg.dm
@@ -0,0 +1,40 @@
+
+////////////////////////////////////////////////EGG RECIPE's////////////////////////////////////////////////
+
+/datum/recipe/egg/fried
+ reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/friedegg
+
+/datum/recipe/egg/boiled
+ reagents = list("water" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg
+
+/datum/recipe/egg/omelette
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/omelette
+
+/datum/recipe/egg/chocolate
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg
+
+/datum/recipe/egg/benedict
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/friedegg,
+ /obj/item/weapon/reagent_containers/food/snacks/meatsteak,
+ /obj/item/weapon/reagent_containers/food/snacks/breadslice,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/benedict
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_meat.dm b/code/modules/food&drinks/recipes/microwave/recipes_meat.dm
new file mode 100644
index 00000000000..81506429ae0
--- /dev/null
+++ b/code/modules/food&drinks/recipes/microwave/recipes_meat.dm
@@ -0,0 +1,145 @@
+
+////////////////////////////////////////////////KEBABS NO REMOVE////////////////////////////////////////////////
+
+/datum/recipe/kebab/human
+ items = list(
+ /obj/item/stack/rods,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/human,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/human,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/human/kebab
+
+/datum/recipe/kebab/monkey
+ items = list(
+ /obj/item/stack/rods,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/monkeykebab
+
+/datum/recipe/kebab/tofu
+ items = list(
+ /obj/item/stack/rods,
+ /obj/item/weapon/reagent_containers/food/snacks/tofu,
+ /obj/item/weapon/reagent_containers/food/snacks/tofu,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/tofukebab
+
+////////////////////////////////////////////////FISH////////////////////////////////////////////////
+
+/datum/recipe/carpmeat
+ reagents = list("carpotoxin" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/tofu
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation
+
+/datum/recipe/cubancarp
+ reagents = list("flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/chili,
+ /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp
+
+/datum/recipe/fishandchips
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/fries,
+ /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips
+
+/datum/recipe/fishfingers
+ reagents = list("flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers
+
+/datum/recipe/sashimi
+ reagents = list("soysauce" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/spidereggs,
+ /obj/item/weapon/reagent_containers/food/snacks/carpmeat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sashimi
+
+////////////////////////////////////////////////MR SPIDER////////////////////////////////////////////////
+
+/datum/recipe/boiledspiderleg
+ reagents = list("water" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/spiderleg,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg
+
+/datum/recipe/spidereggsham
+ reagents = list("sodiumchloride" = 1)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/spidereggs,
+ /obj/item/weapon/reagent_containers/food/snacks/spidermeat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/spidereggsham
+
+////////////////////////////////////////////////MISC RECIPE's////////////////////////////////////////////////
+
+/datum/recipe/cornedbeef
+ reagents = list("sodiumchloride" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/cornedbeef
+
+/datum/recipe/wingfangchu
+ reagents = list("soysauce" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/xenomeat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/wingfangchu
+
+/datum/recipe/meatsteak
+ reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
+
+/datum/recipe/enchiladas
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/chili,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/chili,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/corn,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
+
+/datum/recipe/stew
+ reagents = list("water" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/potato,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/stew
+
+/datum/recipe/stewedsoymeat
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/soydope,
+ /obj/item/weapon/reagent_containers/food/snacks/soydope,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
+
+/datum/recipe/sausage
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/faggot,
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sausage
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm b/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm
new file mode 100644
index 00000000000..f4a37c243bb
--- /dev/null
+++ b/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm
@@ -0,0 +1,200 @@
+
+////////////////////////////////////////////////DONUTS////////////////////////////////////////////////
+
+/datum/recipe/donut
+ reagents = list("flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
+
+/datum/recipe/donut/jelly
+ reagents = list("berryjuice" = 5, "flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly
+
+/datum/recipe/donut/jelly/slime
+ reagents = list("slimejelly" = 5, "flour" = 5)
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
+
+/datum/recipe/donut/jelly/cherry
+ reagents = list("cherryjelly" = 5, "flour" = 5)
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
+
+/datum/recipe/chaosdonut
+ reagents = list("frostoil" = 5, "capsaicin" = 5, "flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos
+
+
+////////////////////////////////////////////////WAFFLES////////////////////////////////////////////////
+
+/datum/recipe/waffles
+ reagents = list("flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/waffles
+
+
+/datum/recipe/waffles/soylenviridians
+ reagents = list("flour" = 15)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians
+
+/datum/recipe/waffles/soylentgreen
+ reagents = list("flour" = 15)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/human,
+ /obj/item/weapon/reagent_containers/food/snacks/meat/human,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen
+
+
+/datum/recipe/waffles/roffle
+ reagents = list("mushroomhallucinogen" = 5, "flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
+
+////////////////////////////////////////////////DONKPOCCKETS////////////////////////////////////////////////
+
+/datum/recipe/donkpocket
+ reagents = list("flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/faggot,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
+ proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked)
+ being_cooked.warm = 1
+ being_cooked.reagents.add_reagent("tricordrazine", 5)
+ being_cooked.bitesize = 6
+ being_cooked.name = "Warm " + being_cooked.name
+ being_cooked.cooltime()
+ make_food(var/obj/container as obj)
+ var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container)
+ warm_up(being_cooked)
+ return being_cooked
+
+/datum/recipe/donkpocket/warm
+ reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/donkpocket
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
+ make_food(var/obj/container as obj)
+ var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = locate() in container
+ if(being_cooked && !being_cooked.warm)
+ warm_up(being_cooked)
+ return being_cooked
+
+////////////////////////////////////////////////MUFFINS////////////////////////////////////////////////
+
+/datum/recipe/muffin
+ reagents = list("milk" = 5, "flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/muffin
+
+/datum/recipe/muffin/berry
+ reagents = list("milk" = 5, "flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/berries
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/muffin/berry
+
+/datum/recipe/muffin/booberry
+ reagents = list("milk" = 5, "flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/berries,
+ /obj/item/weapon/ectoplasm
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/muffin/booberry
+
+/datum/recipe/muffin/chawanmushi
+ reagents = list("water" = 5, "soysauce" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi
+
+////////////////////////////////////////////OTHER////////////////////////////////////////////
+
+/datum/recipe/hotdog
+ reagents = list("ketchup" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/breadslice,
+ /obj/item/weapon/reagent_containers/food/snacks/sausage,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/hotdog
+
+/datum/recipe/meatbun
+ reagents = list("soysauce" = 5, "flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/faggot,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
+
+/datum/recipe/sugarcookie
+ reagents = list("flour" = 5, "sugar" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie
+
+/datum/recipe/fortunecookie
+ reagents = list("flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/paper,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie
+/datum/recipe/fortunecookie/make_food(var/obj/container as obj)
+ var/obj/item/weapon/paper/paper = locate() in container
+ paper.loc = null //prevent deletion
+ var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container)
+ paper.loc = being_cooked
+ being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn
+ return being_cooked
+
+/datum/recipe/poppypretzel
+ reagents = list("flour" = 5)
+ items = list(
+ /obj/item/seeds/poppyseed,
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel
+
+/datum/recipe/plumphelmetbiscuit
+ reagents = list("flour" = 5)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
+
+/datum/recipe/appletart
+ reagents = list("sugar" = 5, "milk" = 5, "flour" = 15)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/egg,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/appletart
+
+/datum/recipe/cracker
+ reagents = list("flour" = 5, "sodiumchloride" = 1)
+ result = /obj/item/weapon/reagent_containers/food/snacks/cracker
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pies.dm b/code/modules/food&drinks/recipes/microwave/recipes_pie.dm
similarity index 100%
rename from code/modules/food&drinks/recipes/microwave/recipes_pies.dm
rename to code/modules/food&drinks/recipes/microwave/recipes_pie.dm
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pizza.dm b/code/modules/food&drinks/recipes/microwave/recipes_pizza.dm
new file mode 100644
index 00000000000..6aee67ae111
--- /dev/null
+++ b/code/modules/food&drinks/recipes/microwave/recipes_pizza.dm
@@ -0,0 +1,47 @@
+
+////////////////////////////////////////////////PIZZA!!!////////////////////////////////////////////////
+
+/datum/recipe/pizza/margherita
+ reagents = list("flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
+
+/datum/recipe/pizza/meat
+ reagents = list("flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ /obj/item/weapon/reagent_containers/food/snacks/meat,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
+
+/datum/recipe/pizza/mushroom
+ reagents = list("flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
+
+/datum/recipe/pizza/vegetable
+ reagents = list("flour" = 10)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/corn,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
+
+
diff --git a/code/modules/food&drinks/recipes/microwave/recipes_salad.dm b/code/modules/food&drinks/recipes/microwave/recipes_salad.dm
new file mode 100644
index 00000000000..2ad41f702e8
--- /dev/null
+++ b/code/modules/food&drinks/recipes/microwave/recipes_salad.dm
@@ -0,0 +1,37 @@
+////////////////////////////////////////////////SALADS////////////////////////////////////////////////
+
+/datum/recipe/salad/herb
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/apple,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad
+ make_food(var/obj/container as obj)
+ var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container)
+ being_cooked.reagents.del_reagent("toxin")
+ return being_cooked
+
+/datum/recipe/salad/aesir
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad
+
+/datum/recipe/salad/valid
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/potato,
+ /obj/item/weapon/reagent_containers/food/snacks/faggot,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/validsalad
+ make_food(var/obj/container as obj)
+ var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container)
+ being_cooked.reagents.del_reagent("toxin")
+ return being_cooked
\ No newline at end of file
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index dce78028dd3..511c5807572 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -127,6 +127,9 @@
if("void")
dat += "Error: No growns inside. "
menustat = "menu"
+ if("nobeakerspace")
+ dat += "Please, put growns into reactor. Not enough space left in container. Unable to create product. "
+ menustat = "menu"
if(beaker)
dat += "Biomass: [points] units. " dat += "ActivateDetach Container" @@ -203,13 +206,20 @@ updateUsrDialog() return 0 +/obj/machinery/biogenerator/proc/check_container_volume(var/reagent_amount) + if(beaker.reagents.total_volume + reagent_amount > beaker.reagents.maximum_volume) + menustat = "nobeakerspace" + return 1 + /obj/machinery/biogenerator/proc/create_product(var/create) switch(create) if("milk") - if (check_cost(20/efficiency)) return 0 + if(check_container_volume(10)) return 0 + else if (check_cost(20/efficiency)) return 0 else beaker.reagents.add_reagent("milk",10) if("cream") - if (check_cost(30/efficiency)) return 0 + if(check_container_volume(10)) return 0 + else if (check_cost(30/efficiency)) return 0 else beaker.reagents.add_reagent("cream",10) if("meat") if (check_cost(250/efficiency)) return 0 @@ -278,12 +288,11 @@ else if(href_list["create"]) var/amount = (text2num(href_list["amount"])) var/i = amount - var/cost = (text2num(href_list["cost"])) var/C = href_list["create"] if(i <= 0) return while(i >= 1) - create_product(C, cost, i) + create_product(C) i-- updateUsrDialog() diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 7cad50f8d9d..0919fe955ac 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -461,14 +461,20 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f icon_state = "binder" anchored = 1 density = 1 + var/busy = 0 /obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob) if(istype(O, /obj/item/weapon/paper)) + if(busy) + user << "The book binder is busy. Please wait for completion of previous operation." + return user.drop_item() O.loc = src user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") src.visible_message("[src] begins to hum as it warms up its printing drums.") + busy = 1 sleep(rand(200,400)) + busy = 0 src.visible_message("[src] whirs as it prints and binds a new book.") var/obj/item/weapon/book/b = new(src.loc) b.dat = O:info diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index fbc21838808..9ee25e2f3db 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -232,17 +232,18 @@ var/list/prize_list = list( new /datum/data/mining_equipment("Stimpack MediPen", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 50), new /datum/data/mining_equipment("Leporazine MediPen", /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine, 50), + new /datum/data/mining_equipment("MediPen Bundle", /obj/item/weapon/storage/box/medipens/utility, 200), new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100), new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150), new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200), new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 250), - new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 400), + new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 300), new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 400), new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 450), new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone/, 500), + new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 650), + new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 650), new /datum/data/mining_equipment("Sonic Jackhammer", /obj/item/weapon/pickaxe/jackhammer, 800), - new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 1000), - new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 1000), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide/mining, 2000), new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 5000), @@ -470,7 +471,7 @@ icon = 'icons/obj/items.dmi' icon_state = "resonator" item_state = "resonator" - desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vaccuum." + desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vacuum." w_class = 3 force = 10 throwforce = 10 diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 82ec0a9e4fa..c39d03f38ac 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -99,7 +99,7 @@ new/turf/simulated/floor/plating/asteroid/airless/cave(src) if("Gibtonite") M = new/turf/simulated/mineral/gibtonite(src) - if("Clown") + if("Bananium") M = new/turf/simulated/mineral/clown(src) /*if("Adamantine") M = new/turf/simulated/mineral/adamantine(src)*/ @@ -178,7 +178,7 @@ /turf/simulated/mineral/clown name = "bananium deposit" icon_state = "rock_Clown" - mineralName = "Clown" + mineralName = "Bananium" mineralAmt = 3 spreadChance = 0 spread = 0 @@ -416,7 +416,7 @@ new /obj/item/weapon/ore/plasma(src) if (src.mineralName == "Diamond") new /obj/item/weapon/ore/diamond(src) - if (src.mineralName == "Clown") + if (src.mineralName == "Bananium") new /obj/item/weapon/ore/bananium(src) var/turf/simulated/floor/plating/asteroid/airless/N = ChangeTurf(/turf/simulated/floor/plating/asteroid/airless) N.fullUpdateMineralOverlays() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9274b09145d..f7da665c052 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -293,3 +293,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 1 +//this is a mob verb instead of atom for performance reasons +//see /mob/verb/examinate() in mob.dm for more info +//overriden here and in /mob/living for different point span classes and sanity checks +/mob/dead/observer/pointed(atom/A as mob|obj|turf in view()) + if(!..()) + return 0 + usr.visible_message("[src] points to [A]") + return 1 diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index bc11bcd2490..aa64f72e5b1 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -229,6 +229,9 @@ var/const/MAX_ACTIVE_TIME = 400 /proc/CanHug(var/mob/M) + if(M.stat == DEAD) + return 0 + if(iscorgi(M) || ismonkey(M)) return 1 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index beea8cfa2e3..b98ad128879 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -499,6 +499,7 @@ if(R) if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses)) if(setcriminal != "Cancel") + investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records") R.fields["criminal"] = setcriminal spawn() @@ -721,7 +722,7 @@ return(gain) /mob/living/carbon/human/singularity_pull(S, current_size) - if(current_size >= 5) + if(current_size >= STAGE_THREE) var/list/handlist = list(l_hand, r_hand) for(var/obj/item/hand in handlist) if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 80cfc7010cb..a54e388c7f6 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -229,3 +229,95 @@ emp_act L.take_damage(0,5) src.Stun(5) ..() + + +/mob/living/carbon/human/acid_act(var/acidpwr, var/toxpwr, var/acid_volume) + var/list/damaged = list() + + if(head) + if(!head.unacidable) + head.acid_act(acidpwr) + update_inv_head() + else + src << "Your [head.name] protects your head from the acid!" + else + if(wear_mask) + if(!wear_mask.unacidable) + wear_mask.acid_act(acidpwr) + update_inv_wear_mask() + else + src << "Your [wear_mask.name] protects your head from the acid!" + else + if(glasses) + if(!glasses.unacidable) + glasses.acid_act(acidpwr) + update_inv_glasses() + else + src << "Your [glasses.name] protects your head from the acid!" + else + . = get_organ("head") + if(.) + damaged += . + + if(wear_suit) + if(!wear_suit.unacidable) + wear_suit.acid_act(acidpwr) + update_inv_wear_suit() + else + src << "Your [wear_suit.name] protects your body from the acid!" + else + if(w_uniform) + if(!w_uniform.unacidable) + w_uniform.acid_act(acidpwr) + update_inv_w_uniform() + else + src << "Your [w_uniform.name] protects your body from the acid!" + else + . = get_organ("chest") + if(.) + damaged += . + + if(gloves) + if(!gloves.unacidable) + gloves.acid_act(acidpwr) + update_inv_gloves() + else + src << "Your [gloves.name] protects your arms from the acid!" + else + . = get_organ("r_arm") + if(.) + damaged += . + . = get_organ("l_arm") + if(.) + damaged += . + + + if(shoes) + if(!shoes.unacidable) + shoes.acid_act(acidpwr) + update_inv_shoes() + else + src << "Your [shoes.name] protects your legs from the acid!" + else + . = get_organ("r_leg") + if(.) + damaged += . + . = get_organ("l_leg") + if(.) + damaged += . + + + for(var/obj/item/organ/limb/affecting in damaged) + affecting.take_damage(4*toxpwr, 2*toxpwr) + + if(affecting.name == "head") + affecting.take_damage(4*toxpwr, 2*toxpwr) + if(prob(2*acidpwr)) //Applies disfigurement + emote("scream") + facial_hair_style = "Shaved" + hair_style = "Bald" + update_hair() + status_flags |= DISFIGURED + + update_damage_overlays() + diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 9a7dea0277d..82628f186a9 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -410,3 +410,16 @@ /mob/living/carbon/monkey/SpeciesCanConsume() return 1 // Monkeys can eat, drink, and be forced to do so + + +/mob/living/carbon/monkey/acid_act(var/acidpwr, var/toxpwr, var/acid_volume) + if(wear_mask) + if(!wear_mask.unacidable) + wear_mask.acid_act(acidpwr) + update_inv_wear_mask() + else + src << "Your mask protects you from the acid." + return + + if(!unacidable) + take_organ_damage(min(6*toxpwr, acid_volume * toxpwr)) diff --git a/code/modules/mob/living/carbon/slime/emote.dm b/code/modules/mob/living/carbon/slime/emote.dm index d6b41afbee2..0693aaba88f 100644 --- a/code/modules/mob/living/carbon/slime/emote.dm +++ b/code/modules/mob/living/carbon/slime/emote.dm @@ -51,6 +51,8 @@ else src << "Unusable emote '[act]'. Say *help for a list." if ((message && src.stat == 0)) + if(client) + log_emote("[name]/[key] : [message]") if (m_type & 1) visible_message(message) else diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index e805dd595ea..5982e83a054 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -236,6 +236,9 @@ /mob/living/carbon/slime/unEquip(obj/item/W as obj) return +/mob/living/carbon/slime/start_pulling(var/atom/movable/AM) + return + /mob/living/carbon/slime/attack_ui(slot) return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ada80a01043..a566eeea566 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -10,6 +10,27 @@ ..() del(src) +//mob verbs are a lot faster than object verbs +//for more info on why this is not atom/pull, see examinate() in mob.dm +/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) + set name = "Pull" + set category = "Object" + + if(AM.Adjacent(src)) + src.start_pulling(AM) + return + +//same as above +/mob/living/pointed(atom/A as mob|obj|turf in view()) + if(src.stat || !src.canmove || src.restrained()) + return 0 + if(src.status_flags & FAKEDEATH) + return 0 + if(!..()) + return 0 + usr.visible_message("[src] points to [A]") + return 1 + /mob/living/verb/succumb(var/whispered as null) set hidden = 1 if (InCritical()) @@ -640,7 +661,7 @@ /mob/living/singularity_pull(S) step_towards(src,S) -mob/living/proc/do_attack_animation() +/mob/living/proc/do_attack_animation() var/pixel_x_diff = 0 var/pixel_y_diff = 0 switch(src.dir) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e903b7cef30..b063e139c50 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -106,4 +106,9 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I) adjust_fire_stacks(0.5) IgniteMob() -//Mobs on Fire end \ No newline at end of file +//Mobs on Fire end + + +/mob/living/acid_act(var/acidpwr, var/toxpwr, var/acid_volume) + if(!unacidable) + take_organ_damage(min(6*toxpwr, acid_volume * toxpwr)) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f4f1e8f1761..b70d03a9f31 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -364,7 +364,7 @@ var/list/ai_list = list() return if (href_list["callbot"]) //Command a bot to move to a selected location. - Bot = locate(href_list["callbot"]) in machines + Bot = locate(href_list["callbot"]) in aibots if(!Bot || Bot.remote_disabled || src.control_disabled) return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off. waypoint_mode = 1 @@ -372,7 +372,7 @@ var/list/ai_list = list() return if (href_list["interface"]) //Remotely connect to a bot! - Bot = locate(href_list["interface"]) in machines + Bot = locate(href_list["interface"]) in aibots if(!Bot || Bot.remote_disabled || src.control_disabled) return Bot.attack_ai(src) @@ -492,7 +492,7 @@ var/list/ai_list = list() d += "Query network status " d += "
|