diff --git a/_maps/RandomRuins/SpaceRuins/meatderelict.dmm b/_maps/RandomRuins/SpaceRuins/meatderelict.dmm index 0c4e9cd740b..3e4bece11e8 100644 --- a/_maps/RandomRuins/SpaceRuins/meatderelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/meatderelict.dmm @@ -733,7 +733,7 @@ /turf/open/indestructible/white, /area/ruin/space/has_grav/powered/biooutpost) "oQ" = ( -/obj/machinery/puzzle_button/meatderelict{ +/obj/machinery/puzzle/button/meatderelict{ pixel_y = 32; queue_size = 4 }, @@ -1669,7 +1669,7 @@ "FI" = ( /obj/item/instrument/piano_synth/headphones, /obj/structure/table, -/obj/machinery/puzzle_button/directional/north{ +/obj/machinery/puzzle/button/directional/north{ used = 1 }, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -1820,7 +1820,7 @@ /turf/open/floor/iron/dark/textured_large, /area/ruin/space/has_grav/powered/biooutpost/vault) "Jt" = ( -/obj/machinery/puzzle_button/directional/north{ +/obj/machinery/puzzle/button/directional/north{ id = "md_tosci"; name = "shield power panel" }, @@ -1889,7 +1889,7 @@ /turf/open/indestructible/white, /area/ruin/space/has_grav/powered/biooutpost) "KC" = ( -/obj/machinery/puzzle_button/directional/north{ +/obj/machinery/puzzle/button/directional/north{ id = "md_toeng"; queue_size = 4 }, @@ -2138,7 +2138,7 @@ id = "md_armory" }, /obj/effect/turf_decal/stripes/full, -/obj/machinery/puzzle_keycardpad/directional/south{ +/obj/machinery/puzzle/keycardpad/directional/south{ id = "md_armory"; name = "armory authentication pad"; queue_size = 5 diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm index f40ecc09015..64fd580b80f 100644 --- a/_maps/RandomZLevels/museum.dmm +++ b/_maps/RandomZLevels/museum.dmm @@ -9,11 +9,18 @@ /obj/machinery/computer/old{ name = "replica computer"; dir = 8; - icon_keyboard = "rd_key"; - icon_screen = "rdcomp" + icon_screen = "rdcomp"; + icon_keyboard = "rd_key" }, /turf/open/floor/iron/smooth_large, /area/awaymission/museum) +"ac" = ( +/obj/structure/sign/poster/contraband/fake_bombable/directional/west, +/obj/structure/closet/crate/bin, +/obj/machinery/light/warm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "ai" = ( /obj/structure/railing{ dir = 8 @@ -59,6 +66,11 @@ }, /turf/open/indestructible/plating, /area/awaymission/museum) +"ax" = ( +/obj/structure/sink/directional/north, +/obj/structure/mirror/directional/south, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "az" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/entertainment/musical_instrument, @@ -76,6 +88,22 @@ /obj/structure/closet/crate/preopen, /turf/open/indestructible/plating, /area/awaymission/museum) +"aO" = ( +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "museum_toilet_wontwork" + }, +/obj/effect/mob_spawn/corpse/human/skeleton/museum_chef, +/obj/structure/toilet/museum{ + dir = 4 + }, +/obj/item/keycard/cafeteria, +/obj/item/paper/fluff/museum/chefs_ultimatum, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "aR" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -147,8 +175,8 @@ }, /turf/open/mirage{ dir = 8; - target_turf_x = 11; - range = 1 + range = 1; + target_turf_x = 11 }, /area/awaymission/museum) "bC" = ( @@ -177,8 +205,8 @@ /area/awaymission/museum) "bJ" = ( /mob/living/basic/statue/mannequin{ - dir = 8; - name = "Dale Knox" + name = "Dale Knox"; + dir = 8 }, /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/holofloor/white, @@ -229,6 +257,14 @@ /obj/item/storage/box/stickers/googly, /turf/open/floor/iron/dark, /area/awaymission/museum) +"ci" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "cm" = ( /obj/machinery/door/airlock/grunge, /obj/structure/barricade/wooden/crude, @@ -255,8 +291,8 @@ /turf/open/floor/iron/smooth_half, /area/awaymission/museum) "ct" = ( -/obj/structure/chair/comfy, /mob/living/basic/mothroach, +/obj/structure/chair/comfy, /obj/effect/mapping_helpers/mob_buckler, /obj/machinery/light/dim/directional/north, /turf/open/floor/iron/dark/textured_large, @@ -313,8 +349,8 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/item/toy/balloon/corgi, /obj/machinery/status_display/random_message{ - firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS"); - pixel_x = 32 + pixel_x = 32; + firstline_to_secondline = list(NO="LITTERING", "YOU ARE"="BEING WATCHED", "DO NOT TOUCH"="THE EXHIBITS") }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -328,9 +364,9 @@ "cS" = ( /obj/effect/step_trigger/thrower{ direction = 1; - facedir = 1; + mobs_only = 1; tiles = 10; - mobs_only = 1 + facedir = 1 }, /obj/machinery/light/floor, /turf/open/floor/iron, @@ -343,6 +379,14 @@ /obj/structure/plaque/static_plaque/golden/commission/dream, /turf/closed/indestructible/reinforced, /area/awaymission/museum) +"cY" = ( +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/obj/machinery/light/warm/directional/east, +/obj/structure/fluff/fake_scrubber, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "cZ" = ( /obj/structure/fluff/divine/nexus, /turf/open/floor/cult, @@ -398,9 +442,9 @@ /area/awaymission/museum) "dK" = ( /turf/open/mirage{ + dir = 1; range = 2; - target_turf_y = -4; - dir = 1 + target_turf_y = -4 }, /area/awaymission/museum) "dL" = ( @@ -434,8 +478,8 @@ /area/awaymission/museum) "dY" = ( /mob/living/basic/statue/mannequin{ - hat = /obj/item/clothing/head/helmet/space; - dir = 1 + dir = 1; + hat = /obj/item/clothing/head/helmet/space }, /turf/open/floor/holofloor/hyperspace/ns, /area/awaymission/museum) @@ -462,7 +506,7 @@ /obj/machinery/door/poddoor/shutters/indestructible{ id = "museum_secret" }, -/obj/machinery/puzzle_keycardpad/directional/east{ +/obj/machinery/puzzle/keycardpad/directional/east{ id = "museum_secret" }, /turf/open/floor/iron/dark, @@ -521,10 +565,10 @@ /turf/open/floor/grass, /area/awaymission/museum) "ex" = ( +/mob/living/basic/mothroach, /obj/structure/chair/stool/bar/directional/west{ can_buckle = 1 }, -/mob/living/basic/mothroach, /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/wood/large, /area/awaymission/museum) @@ -596,6 +640,15 @@ /obj/structure/plaque/static_plaque/golden/commission/omega, /turf/closed/indestructible/reinforced, /area/awaymission/museum) +"eW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/structure/fluff/wallsign/directional/north{ + name = "Restrooms"; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "eX" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 4 @@ -605,11 +658,11 @@ }, /area/awaymission/museum) "fa" = ( -/obj/effect/turf_decal/sand/plating, /mob/living/basic/statue/mannequin{ held_item = /obj/item/pickaxe; hat = /obj/item/clothing/suit/hooded/explorer }, +/obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/mining, /turf/open/indestructible/plating, /area/awaymission/museum) @@ -627,6 +680,13 @@ /obj/item/kitchen/fork, /turf/open/floor/wood/tile, /area/awaymission/museum) +"fl" = ( +/obj/machinery/status_display/random_message{ + pixel_x = -32; + firstline_to_secondline = list(CAFETERIA="YUMMY", CAFETERIA="HOTDOGS", ENJOY="YOUR MEAL") + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "fn" = ( /turf/open/floor/holofloor/hyperspace/ns, /area/awaymission/museum) @@ -706,6 +766,11 @@ }, /turf/open/floor/iron, /area/awaymission/museum) +"gg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "gj" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 8 @@ -751,6 +816,10 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/indestructible/plating, /area/awaymission/museum) +"gE" = ( +/obj/item/clothing/suit/caution, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "gG" = ( /obj/effect/turf_decal/siding/dark_blue/corner{ dir = 4 @@ -814,8 +883,8 @@ "hk" = ( /obj/effect/smooths_with_walls, /turf/open/mirage{ - target_turf_y = -29; - dir = 1 + dir = 1; + target_turf_y = -29 }, /area/awaymission/museum) "hl" = ( @@ -827,6 +896,12 @@ }, /turf/open/indestructible/plating, /area/awaymission/museum) +"hm" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/condiment, +/obj/machinery/light/floor, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "hp" = ( /mob/living/basic/mothroach/bar, /turf/open/floor/wood/tile, @@ -874,10 +949,18 @@ "hM" = ( /turf/closed/wall/rock/porous, /area/awaymission/museum) +"hS" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "hT" = ( /mob/living/basic/statue/mannequin{ - dir = 8; name = "Dale Knox"; + dir = 8; held_item = /obj/item/circuitboard }, /obj/structure/sign/flag/nanotrasen/directional/south, @@ -892,8 +975,8 @@ /area/awaymission/museum) "hX" = ( /obj/item/circuitboard{ - icon_state = "flopdrive"; - name = "microprocessor" + name = "microprocessor"; + icon_state = "flopdrive" }, /obj/structure/table/reinforced, /turf/open/floor/circuit/green, @@ -983,6 +1066,15 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/awaymission/museum) +"iJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/toilet/museum{ + dir = 1 + }, +/obj/structure/curtain, +/obj/structure/broken_flooring/plating, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "iK" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/siding{ @@ -1031,9 +1123,9 @@ }, /obj/effect/step_trigger/thrower{ direction = 1; - facedir = 1; + mobs_only = 1; tiles = 10; - mobs_only = 1 + facedir = 1 }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -1067,10 +1159,20 @@ }, /turf/open/floor/cult, /area/awaymission/museum) +"ju" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/obj/structure/fluff/wallsign/directional/north{ + name = "Restrooms" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "jy" = ( /mob/living/basic/statue/mannequin{ - dir = 8; name = "Dale Knox"; + dir = 8; held_item = /obj/item/circuitboard }, /obj/effect/turf_decal/stripes{ @@ -1082,6 +1184,14 @@ /obj/effect/spawner/structure/window, /turf/open/indestructible/plating, /area/awaymission/museum) +"jC" = ( +/obj/effect/puzzle_poddoor_open{ + icon = 'icons/effects/mapping_helpers.dmi'; + id = "museum_right_wing"; + queue_id = "museum_right_wing" + }, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) "jF" = ( /obj/machinery/suit_storage_unit/open, /obj/effect/turf_decal/box, @@ -1110,6 +1220,18 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/awaymission/museum) +"jO" = ( +/obj/structure/toilet/museum, +/obj/structure/sign/poster/contraband/fake_bombable/directional/north, +/obj/machinery/button/door/directional/east{ + name = "Lock Control"; + id = "museum_toilet6"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "jP" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue/corner{ @@ -1120,13 +1242,16 @@ dir = 9 }, /obj/item/reagent_containers/cup/glass/coffee, +/obj/item/paper/fluff/scrambled_pass{ + puzzle_id = "museum_r_wing_puzzle" + }, /turf/open/floor/iron/dark, /area/awaymission/museum) "jU" = ( /obj/effect/landmark/transport/nav_beacon/tram/platform{ + name = "Exhibit Loading Bay"; specific_transport_id = "museum_cargo"; - platform_code = 2; - name = "Exhibit Loading Bay" + platform_code = 2 }, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) @@ -1193,6 +1318,12 @@ }, /turf/open/floor/iron, /area/awaymission/museum) +"kx" = ( +/obj/machinery/door/airlock/public{ + name = "Restrooms" + }, +/turf/open/floor/iron, +/area/awaymission/museum) "kA" = ( /obj/machinery/conveyor{ dir = 1 @@ -1200,6 +1331,16 @@ /obj/item/vending_refill/wardrobe/coroner_wardrobe, /turf/open/indestructible/plating, /area/awaymission/museum) +"kL" = ( +/obj/machinery/door/poddoor/shutters/window/indestructible{ + dir = 8; + id = "museum_cafeteria" + }, +/obj/machinery/puzzle/keycardpad/directional/south{ + id = "museum_cafeteria" + }, +/turf/open/floor/iron, +/area/awaymission/museum) "kO" = ( /obj/structure/railing{ dir = 8 @@ -1227,6 +1368,19 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, /area/awaymission/museum) +"kZ" = ( +/obj/structure/toilet/museum{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "museum_toilet5"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "la" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -1324,11 +1478,11 @@ /turf/open/floor/iron, /area/awaymission/museum) "lT" = ( -/obj/structure/chair/office{ - dir = 1 - }, /mob/living/basic/statue/mannequin{ - hat = /obj/item/clothing/suit/toggle/labcoat/science; + dir = 1; + hat = /obj/item/clothing/suit/toggle/labcoat/science + }, +/obj/structure/chair/office{ dir = 1 }, /obj/machinery/light/floor, @@ -1345,9 +1499,9 @@ specific_transport_id = "museum_cargo" }, /obj/effect/landmark/transport/nav_beacon/tram/platform{ + name = "Internal Loading Bay"; specific_transport_id = "museum_cargo"; - platform_code = 1; - name = "Internal Loading Bay" + platform_code = 1 }, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) @@ -1379,6 +1533,9 @@ }, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) +"ms" = ( +/turf/open/floor/iron, +/area/awaymission/museum/cafeteria) "mA" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/holofloor/beach/water, @@ -1403,9 +1560,9 @@ /area/awaymission/museum) "mS" = ( /mob/living/basic/statue/mannequin{ + dir = 1; held_item = /obj/item/wrench; - hat = /obj/item/clothing/head/utility/hardhat; - dir = 1 + hat = /obj/item/clothing/head/utility/hardhat }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood/gibs, @@ -1436,8 +1593,8 @@ /obj/structure/transport/linear/tram/slow, /obj/structure/tram, /obj/machinery/transport/tram_controller{ - configured_transport_id = "museum_cargo"; - cover_locked = 0 + cover_locked = 0; + configured_transport_id = "museum_cargo" }, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) @@ -1477,8 +1634,8 @@ /turf/open/floor/iron/white, /area/awaymission/museum) "nu" = ( -/obj/effect/decal/cleanable/glass/titanium, /mob/living/basic/mouse/rat, +/obj/effect/decal/cleanable/glass/titanium, /turf/open/floor/iron/white, /area/awaymission/museum) "nv" = ( @@ -1510,9 +1667,9 @@ "nz" = ( /obj/structure/lattice/catwalk/mining, /obj/structure/fluff{ + name = "old plasma extractor"; icon = 'icons/mob/simple/hivebot.dmi'; - icon_state = "fab_robot"; - name = "old plasma extractor" + icon_state = "fab_robot" }, /turf/open/lava/plasma/mafia, /area/awaymission/museum) @@ -1537,9 +1694,9 @@ }, /obj/effect/step_trigger/thrower{ direction = 1; - facedir = 1; + mobs_only = 1; tiles = 10; - mobs_only = 1 + facedir = 1 }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -1588,6 +1745,16 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"nY" = ( +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) +"nZ" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "od" = ( /obj/structure/fluff/fake_vent, /turf/open/floor/iron, @@ -1648,11 +1815,31 @@ /obj/structure/flora/coconuts, /turf/open/misc/beach/sand, /area/awaymission/museum/mothroachvoid) +"oD" = ( +/obj/structure/toilet/museum{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "museum_toilet4"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "oI" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/floor, /turf/open/floor/iron, /area/awaymission/museum) +"oP" = ( +/obj/effect/puzzle_poddoor_open{ + id = "museum_cafeteria"; + queue_id = "museum_cafeteria" + }, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) "oQ" = ( /turf/open/floor/holofloor/beach/coast{ dir = 1 @@ -1694,8 +1881,8 @@ /area/awaymission/museum) "pi" = ( /mob/living/basic/statue/mannequin{ - hat = /obj/item/clothing/head/costume/nursehat; - held_item = /obj/item/clothing/neck/stethoscope + held_item = /obj/item/clothing/neck/stethoscope; + hat = /obj/item/clothing/head/costume/nursehat }, /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/holofloor/white, @@ -1729,6 +1916,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/white, /area/awaymission/museum) +"pz" = ( +/obj/machinery/door/poddoor/shutters/window/indestructible{ + dir = 8; + id = "museum_cafeteria" + }, +/turf/open/floor/iron, +/area/awaymission/museum) "pD" = ( /obj/structure/broken_flooring/corner/always_floorplane/directional/west, /obj/effect/decal/cleanable/dirt/dust, @@ -1758,6 +1952,17 @@ }, /turf/open/indestructible/plating, /area/awaymission/museum) +"pN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "pX" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -1773,6 +1978,10 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/awaymission/museum) +"ql" = ( +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "qo" = ( /obj/effect/oneway{ dir = 8 @@ -1784,15 +1993,15 @@ /area/awaymission/museum) "qt" = ( /obj/effect/spawner/random/food_or_drink/booze{ - loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer=10, /obj/item/reagent_containers/cup/glass/bottle/ale=10, /obj/item/reagent_containers/cup/glass/bottle/beer/light=5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor=5, /obj/item/reagent_containers/cup/glass/bottle/whiskey=5, /obj/item/reagent_containers/cup/glass/bottle/gin=5, /obj/item/reagent_containers/cup/glass/bottle/vodka=5, /obj/item/reagent_containers/cup/glass/bottle/tequila=5, /obj/item/reagent_containers/cup/glass/bottle/rum=5, /obj/item/reagent_containers/cup/glass/bottle/vermouth=5, /obj/item/reagent_containers/cup/glass/bottle/cognac=5, /obj/item/reagent_containers/cup/glass/bottle/wine=5, /obj/item/reagent_containers/cup/glass/bottle/kahlua=5, /obj/item/reagent_containers/cup/glass/bottle/amaretto=5, /obj/item/reagent_containers/cup/glass/bottle/hcider=5, /obj/item/reagent_containers/cup/glass/bottle/absinthe=5, /obj/item/reagent_containers/cup/glass/bottle/sake=5, /obj/item/reagent_containers/cup/glass/bottle/grappa=5, /obj/item/reagent_containers/cup/glass/bottle/applejack=5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic=5, /obj/item/reagent_containers/cup/bottle/ethanol=2, /obj/item/reagent_containers/cup/glass/bottle/fernet=2, /obj/item/reagent_containers/cup/glass/bottle/champagne=2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium=2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager=2, /obj/item/reagent_containers/cup/glass/bottle/patron=1, /obj/item/reagent_containers/cup/glass/bottle/kong=1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine=1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka=1, /obj/item/reagent_containers/cup/glass/bottle/trappist=1); spawn_random_offset = 2 }, /turf/open/floor/carpet/cyan, /area/awaymission/museum/mothroachvoid) "qw" = ( /obj/item/flashlight/flare{ - start_on = 1; - icon_state = "flare-on" + icon_state = "flare-on"; + start_on = 1 }, /obj/structure/table, /obj/effect/decal/cleanable/dirt/dust, @@ -1822,6 +2031,10 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine, /area/awaymission/museum) +"qK" = ( +/obj/machinery/vending/hotdog/museum, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "qL" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -1879,8 +2092,8 @@ /area/awaymission/museum) "qY" = ( /obj/machinery/power/shuttle_engine/heater{ - dir = 4; - opacity = 1 + opacity = 1; + dir = 4 }, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/indestructible/plating, @@ -1909,22 +2122,29 @@ /turf/open/floor/carpet/executive, /area/awaymission/museum) "rq" = ( +/mob/living/basic/statue/mannequin/suspicious, /obj/effect/decal/cleanable/blood/old, /obj/effect/gibspawner/human, /obj/effect/gibspawner/human, /obj/effect/gibspawner/human, /obj/effect/gibspawner/human, -/mob/living/basic/statue/mannequin/suspicious, /turf/open/floor/iron, /area/awaymission/museum) "rr" = ( /turf/open/floor/wood/tile, /area/awaymission/museum) +"ry" = ( +/obj/machinery/door/airlock{ + name = "Restroom Cabin 6"; + id_tag = "museum_toilet6" + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "rA" = ( +/mob/living/basic/mothroach, /obj/structure/chair/comfy/beige{ dir = 8 }, -/mob/living/basic/mothroach, /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/wood/large, /area/awaymission/museum) @@ -1964,13 +2184,17 @@ dir = 1 }, /obj/structure/railing/corner/end, +/obj/structure/fluff/wallsign/directional/south{ + name = "Cafeteria"; + dir = 4 + }, /turf/open/floor/iron/dark, /area/awaymission/museum) "rU" = ( /mob/living/basic/statue/mannequin{ + name = "Michael Trasen"; dir = 4; - held_item = /obj/item/wrench; - name = "Michael Trasen" + held_item = /obj/item/wrench }, /obj/structure/sign/flag/nanotrasen/directional/south, /obj/machinery/light/small/dim/directional/west, @@ -1997,9 +2221,9 @@ /turf/open/floor/engine, /area/awaymission/museum) "rY" = ( +/mob/living/basic/mouse/rat, /obj/machinery/light/small/broken/directional/north, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/basic/mouse/rat, /turf/open/floor/iron/dark/textured_large, /area/awaymission/museum) "sd" = ( @@ -2110,13 +2334,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/awaymission/museum) +"ta" = ( +/obj/machinery/door/airlock{ + name = "Restroom Cabin 5"; + id_tag = "museum_toilet5" + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "tc" = ( +/mob/living/basic/mothroach, /obj/structure/lattice/catwalk/mining, /obj/structure/railing{ dir = 6 }, /obj/structure/chair, -/mob/living/basic/mothroach, /obj/effect/mapping_helpers/mob_buckler, /turf/open/misc/grass, /area/awaymission/museum/mothroachvoid) @@ -2136,15 +2367,15 @@ /turf/open/floor/holofloor/asteroid, /area/awaymission/museum) "tj" = ( +/mob/living/basic/statue/mannequin{ + dir = 1; + held_item = /obj/item/wrench; + hat = /obj/item/clothing/head/utility/hardhat + }, /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, -/mob/living/basic/statue/mannequin{ - dir = 1; - hat = /obj/item/clothing/head/utility/hardhat; - held_item = /obj/item/wrench - }, /turf/open/indestructible/plating, /area/awaymission/museum) "tk" = ( @@ -2185,7 +2416,7 @@ "tx" = ( /obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/booze{ - loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer=10, /obj/item/reagent_containers/cup/glass/bottle/ale=10, /obj/item/reagent_containers/cup/glass/bottle/beer/light=5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor=5, /obj/item/reagent_containers/cup/glass/bottle/whiskey=5, /obj/item/reagent_containers/cup/glass/bottle/gin=5, /obj/item/reagent_containers/cup/glass/bottle/vodka=5, /obj/item/reagent_containers/cup/glass/bottle/tequila=5, /obj/item/reagent_containers/cup/glass/bottle/rum=5, /obj/item/reagent_containers/cup/glass/bottle/vermouth=5, /obj/item/reagent_containers/cup/glass/bottle/cognac=5, /obj/item/reagent_containers/cup/glass/bottle/wine=5, /obj/item/reagent_containers/cup/glass/bottle/kahlua=5, /obj/item/reagent_containers/cup/glass/bottle/amaretto=5, /obj/item/reagent_containers/cup/glass/bottle/hcider=5, /obj/item/reagent_containers/cup/glass/bottle/absinthe=5, /obj/item/reagent_containers/cup/glass/bottle/sake=5, /obj/item/reagent_containers/cup/glass/bottle/grappa=5, /obj/item/reagent_containers/cup/glass/bottle/applejack=5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic=5, /obj/item/reagent_containers/cup/bottle/ethanol=2, /obj/item/reagent_containers/cup/glass/bottle/fernet=2, /obj/item/reagent_containers/cup/glass/bottle/champagne=2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium=2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager=2, /obj/item/reagent_containers/cup/glass/bottle/patron=1, /obj/item/reagent_containers/cup/glass/bottle/kong=1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine=1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka=1, /obj/item/reagent_containers/cup/glass/bottle/trappist=1); spawn_random_offset = 2 }, /turf/open/floor/wood/tile, @@ -2193,9 +2424,9 @@ "ty" = ( /obj/structure/table, /obj/item/clothing/gloves/color/yellow{ - siemens_coefficient = 10; name = "fake stungloves"; - desc = "A crude replica of stungloves. Essentially gloves wrapped with wire. Extremely unsafe." + desc = "A crude replica of stungloves. Essentially gloves wrapped with wire. Extremely unsafe."; + siemens_coefficient = 10 }, /obj/machinery/light/floor, /turf/open/floor/iron, @@ -2293,6 +2524,13 @@ dir = 2 }, /area/awaymission/museum/mothroachvoid) +"um" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/sign/warning/fire/directional/west, +/obj/structure/tank_holder/extinguisher/anti, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "up" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -2302,6 +2540,21 @@ }, /turf/open/floor/iron/showroomfloor, /area/awaymission/museum) +"us" = ( +/obj/machinery/door/airlock{ + name = "Restroom Cabin 2"; + id_tag = "museum_toilet2" + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"ut" = ( +/obj/machinery/light/very_dim/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_vent, +/obj/structure/mop_bucket, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "uu" = ( /obj/structure/rack, /obj/effect/spawner/random/engineering/material, @@ -2315,6 +2568,10 @@ }, /turf/open/floor/grass, /area/awaymission/museum) +"uH" = ( +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "uM" = ( /obj/structure/fluff/fake_camera{ dir = 10 @@ -2345,8 +2602,8 @@ "vc" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/painting/large{ - persistence_id = "museumgate_big"; - dir = 1 + dir = 1; + persistence_id = "museumgate_big" }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, @@ -2418,6 +2675,11 @@ /obj/structure/filingcabinet, /turf/open/floor/iron, /area/awaymission/museum) +"vG" = ( +/turf/closed/indestructible/fakedoor{ + name = "Kitchen" + }, +/area/awaymission/museum/cafeteria) "vM" = ( /mob/living/basic/statue/mannequin{ dir = 1; @@ -2448,6 +2710,16 @@ /obj/effect/turf_decal/siding/dark_blue, /turf/open/floor/mineral/titanium/blue, /area/awaymission/museum) +"wg" = ( +/obj/machinery/door/airlock{ + name = "Restroom Cabin 3" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock_note_placer{ + note_info = "I'VE WORKED HERE FOR 7 YEARS! JUST TO BE REPLACED BY A VENDING MACHINE?! YOU KNOW WHAT? FUCK YOU, I'VE LOCKED DOWN THE CAFETERIA AND WON'T BE COMING OUT 'TILL YOU GIVE ME MY JOB BACK!" + }, +/turf/open/floor/iron, +/area/awaymission/museum) "wh" = ( /obj/structure/broken_flooring/corner/always_floorplane/directional/west, /obj/structure/lattice, @@ -2456,7 +2728,7 @@ "wi" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; - id = "nothing" + id = "museum_secret" }, /turf/open/floor/iron, /area/awaymission/museum) @@ -2526,8 +2798,8 @@ "wN" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/painting/large{ - persistence_id = "museumgate_big"; - dir = 1 + dir = 1; + persistence_id = "museumgate_big" }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -2535,6 +2807,13 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood/large, /area/awaymission/museum) +"wV" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "wZ" = ( /turf/open/misc/beach/coast{ dir = 1 @@ -2558,8 +2837,8 @@ /obj/structure/table/reinforced, /obj/structure/window/spawner/directional/west, /obj/effect/spawner/random/bureaucracy/paper{ - spawn_random_offset = 7; - spawn_loot_count = 8 + spawn_loot_count = 8; + spawn_random_offset = 7 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/white, @@ -2575,8 +2854,8 @@ "xg" = ( /obj/structure/table/reinforced, /obj/item/circuitboard{ - icon_state = "bluespacearray"; - name = "fancy replica tech" + name = "fancy replica tech"; + icon_state = "bluespacearray" }, /turf/open/floor/iron/smooth_large, /area/awaymission/museum) @@ -2599,6 +2878,10 @@ }, /turf/open/misc/beach/sand, /area/awaymission/museum/mothroachvoid) +"xp" = ( +/obj/structure/table, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "xr" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/freezer/food, @@ -2668,6 +2951,11 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"xO" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/soda_cans/canned_laughter, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "xP" = ( /obj/structure/closet/crate/cardboard, /obj/item/storage/toolbox/artistic, @@ -2704,10 +2992,10 @@ /turf/open/chasm/true/no_smooth, /area/awaymission/museum) "yi" = ( +/mob/living/basic/mothroach, /obj/structure/chair/comfy/beige{ dir = 1 }, -/mob/living/basic/mothroach, /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/wood/large, /area/awaymission/museum) @@ -2731,9 +3019,9 @@ /turf/open/floor/holofloor/hyperspace/ns, /area/awaymission/museum) "yr" = ( +/mob/living/basic/mothroach, /obj/structure/chair/comfy, /obj/effect/mapping_helpers/mob_buckler, -/mob/living/basic/mothroach, /turf/open/floor/wood/large, /area/awaymission/museum) "yu" = ( @@ -2855,14 +3143,14 @@ /turf/closed/indestructible/rock, /area/awaymission/museum) "zG" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/siding/red, /mob/living/basic/statue/mannequin{ dir = 8; hat = /obj/item/clothing/head/fedora }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/siding/red, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth_half, /area/awaymission/museum) @@ -2891,13 +3179,13 @@ pixel_y = 12 }, /obj/item/stamp/granted{ - pixel_y = 12; - pixel_x = 8 + pixel_x = 8; + pixel_y = 12 }, /obj/effect/spawner/random/bureaucracy/paper{ - spawn_random_offset = 12; + spawn_loot_count = 8; spawn_scatter_radius = 1; - spawn_loot_count = 8 + spawn_random_offset = 12 }, /turf/open/floor/iron, /area/awaymission/museum) @@ -3043,8 +3331,8 @@ teleport_y_offset = -30 }, /turf/open/mirage{ - target_turf_y = -29; - dir = 1 + dir = 1; + target_turf_y = -29 }, /area/awaymission/museum) "AP" = ( @@ -3054,6 +3342,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, /area/awaymission/museum) +"AQ" = ( +/obj/machinery/door/airlock{ + name = "Restroom Cabin 4"; + id_tag = "museum_toilet4" + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "AR" = ( /obj/structure/railing{ dir = 8 @@ -3217,9 +3512,9 @@ "Cy" = ( /obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/booze{ - loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); - spawn_random_offset = 2; - spawn_loot_count = 2 + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer=10, /obj/item/reagent_containers/cup/glass/bottle/ale=10, /obj/item/reagent_containers/cup/glass/bottle/beer/light=5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor=5, /obj/item/reagent_containers/cup/glass/bottle/whiskey=5, /obj/item/reagent_containers/cup/glass/bottle/gin=5, /obj/item/reagent_containers/cup/glass/bottle/vodka=5, /obj/item/reagent_containers/cup/glass/bottle/tequila=5, /obj/item/reagent_containers/cup/glass/bottle/rum=5, /obj/item/reagent_containers/cup/glass/bottle/vermouth=5, /obj/item/reagent_containers/cup/glass/bottle/cognac=5, /obj/item/reagent_containers/cup/glass/bottle/wine=5, /obj/item/reagent_containers/cup/glass/bottle/kahlua=5, /obj/item/reagent_containers/cup/glass/bottle/amaretto=5, /obj/item/reagent_containers/cup/glass/bottle/hcider=5, /obj/item/reagent_containers/cup/glass/bottle/absinthe=5, /obj/item/reagent_containers/cup/glass/bottle/sake=5, /obj/item/reagent_containers/cup/glass/bottle/grappa=5, /obj/item/reagent_containers/cup/glass/bottle/applejack=5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic=5, /obj/item/reagent_containers/cup/bottle/ethanol=2, /obj/item/reagent_containers/cup/glass/bottle/fernet=2, /obj/item/reagent_containers/cup/glass/bottle/champagne=2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium=2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager=2, /obj/item/reagent_containers/cup/glass/bottle/patron=1, /obj/item/reagent_containers/cup/glass/bottle/kong=1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine=1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka=1, /obj/item/reagent_containers/cup/glass/bottle/trappist=1); + spawn_loot_count = 2; + spawn_random_offset = 2 }, /obj/machinery/light/warm/directional/west, /turf/open/floor/wood/large, @@ -3255,6 +3550,11 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"CG" = ( +/obj/structure/mirror/directional/east, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "CI" = ( /obj/effect/turf_decal/caution, /obj/effect/decal/cleanable/dirt/dust, @@ -3293,6 +3593,18 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"Db" = ( +/obj/item/maneki_neko{ + pixel_y = 4 + }, +/obj/structure/table, +/obj/machinery/status_display/random_message{ + pixel_y = 32; + firstline_to_secondline = list(ACCEPTING="DONATIONS") + }, +/obj/structure/fluff/fake_vent, +/turf/open/floor/iron, +/area/awaymission/museum/cafeteria) "De" = ( /obj/effect/oneway{ dir = 8 @@ -3383,6 +3695,11 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/awaymission/museum) +"DX" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "DY" = ( /turf/closed/indestructible/reinforced/titanium, /area/awaymission/museum) @@ -3400,8 +3717,8 @@ /obj/machinery/computer/old{ name = "replica computer"; dir = 4; - icon_keyboard = "rd_key"; - icon_screen = "rdcomp" + icon_screen = "rdcomp"; + icon_keyboard = "rd_key" }, /turf/open/floor/iron/smooth_large, /area/awaymission/museum) @@ -3421,8 +3738,8 @@ dir = 4 }, /obj/structure/fluff/wallsign/directional/south{ - dir = 4; - name = "Oddities" + name = "Oddities"; + dir = 4 }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -3435,12 +3752,17 @@ /turf/open/indestructible/plating, /area/awaymission/museum) "Er" = ( -/obj/structure/chair/comfy/beige, /mob/living/basic/mothroach, +/obj/structure/chair/comfy/beige, /obj/effect/mapping_helpers/mob_buckler, /obj/machinery/light/warm/directional/west, /turf/open/floor/wood/large, /area/awaymission/museum) +"Es" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "EA" = ( /obj/machinery/door/airlock/shuttle/glass, /obj/effect/turf_decal/siding/dark_blue, @@ -3460,9 +3782,9 @@ /area/awaymission/museum) "EG" = ( /obj/item/flashlight/flare{ - start_on = 1; icon_state = "flare-on"; - light_range = 4 + light_range = 4; + start_on = 1 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, @@ -3476,9 +3798,9 @@ "EM" = ( /obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/booze{ - loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); - spawn_random_offset = 2; - spawn_loot_count = 2 + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer=10, /obj/item/reagent_containers/cup/glass/bottle/ale=10, /obj/item/reagent_containers/cup/glass/bottle/beer/light=5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor=5, /obj/item/reagent_containers/cup/glass/bottle/whiskey=5, /obj/item/reagent_containers/cup/glass/bottle/gin=5, /obj/item/reagent_containers/cup/glass/bottle/vodka=5, /obj/item/reagent_containers/cup/glass/bottle/tequila=5, /obj/item/reagent_containers/cup/glass/bottle/rum=5, /obj/item/reagent_containers/cup/glass/bottle/vermouth=5, /obj/item/reagent_containers/cup/glass/bottle/cognac=5, /obj/item/reagent_containers/cup/glass/bottle/wine=5, /obj/item/reagent_containers/cup/glass/bottle/kahlua=5, /obj/item/reagent_containers/cup/glass/bottle/amaretto=5, /obj/item/reagent_containers/cup/glass/bottle/hcider=5, /obj/item/reagent_containers/cup/glass/bottle/absinthe=5, /obj/item/reagent_containers/cup/glass/bottle/sake=5, /obj/item/reagent_containers/cup/glass/bottle/grappa=5, /obj/item/reagent_containers/cup/glass/bottle/applejack=5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic=5, /obj/item/reagent_containers/cup/bottle/ethanol=2, /obj/item/reagent_containers/cup/glass/bottle/fernet=2, /obj/item/reagent_containers/cup/glass/bottle/champagne=2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium=2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager=2, /obj/item/reagent_containers/cup/glass/bottle/patron=1, /obj/item/reagent_containers/cup/glass/bottle/kong=1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine=1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka=1, /obj/item/reagent_containers/cup/glass/bottle/trappist=1); + spawn_loot_count = 2; + spawn_random_offset = 2 }, /turf/open/floor/wood/large, /area/awaymission/museum) @@ -3502,15 +3824,15 @@ /turf/open/floor/circuit/green, /area/awaymission/museum) "ET" = ( +/mob/living/basic/statue/mannequin{ + dir = 1 + }, /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/tile/green/opposingcorners, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/siding/green{ dir = 1 }, -/mob/living/basic/statue/mannequin{ - dir = 1 - }, /turf/open/floor/iron, /area/awaymission/museum) "EU" = ( @@ -3520,8 +3842,8 @@ dir = 4 }, /obj/structure/fluff/wallsign/directional/north{ - dir = 4; - name = "Oddities" + name = "Oddities"; + dir = 4 }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -3594,8 +3916,8 @@ /area/awaymission/museum) "Fw" = ( /obj/effect/decal/cleanable/blood/tracks{ - should_dry = 0; - name = "replica blood" + name = "replica blood"; + should_dry = 0 }, /obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/dirt/dust, @@ -3604,8 +3926,8 @@ "FA" = ( /obj/structure/table/reinforced, /obj/item/circuitboard{ - icon_state = "printer"; - name = "fancy replica tech" + name = "fancy replica tech"; + icon_state = "printer" }, /turf/open/floor/iron/smooth_large, /area/awaymission/museum) @@ -3642,6 +3964,32 @@ /obj/structure/sign/departments/restroom/directional/south, /turf/open/floor/wood/large, /area/awaymission/museum) +"FO" = ( +/obj/effect/decal/cleanable/crayon/puzzle/pin{ + puzzle_id = "museum_r_wing_puzzle" + }, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"FU" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/fluff/wallsign/directional/south{ + name = "Cafeteria"; + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"FY" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) +"Ga" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "Gh" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -3655,6 +4003,9 @@ /obj/structure/closet/crate/miningcar, /turf/open/floor/tram/plate, /area/awaymission/museum) +"Gn" = ( +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "Gv" = ( /obj/effect/decal/cleanable/crayon{ icon_state = "l"; @@ -3675,20 +4026,27 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/awaymission/museum) +"GB" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ + pixel_y = 7 + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "GE" = ( /obj/structure/plaque/static_plaque/golden/commission/meta, /turf/open/floor/mineral/gold, /area/awaymission/museum) "GG" = ( +/mob/living/basic/statue/mannequin{ + dir = 4 + }, /obj/structure/chair/office{ dir = 4 }, /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/mob/living/basic/statue/mannequin{ - dir = 4 - }, /turf/open/floor/wood/tile, /area/awaymission/museum) "GO" = ( @@ -3762,8 +4120,8 @@ /area/awaymission/museum) "Hn" = ( /mob/living/basic/statue/mannequin{ - hat = /obj/item/clothing/head/costume/kitty; - dir = 8 + dir = 8; + hat = /obj/item/clothing/head/costume/kitty }, /obj/effect/turf_decal/trimline/yellow, /obj/effect/turf_decal/trimline/yellow/corner{ @@ -3797,7 +4155,7 @@ /area/awaymission/museum) "HA" = ( /obj/machinery/status_display/random_message{ - firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS") + firstline_to_secondline = list(NO="LITTERING", "YOU ARE"="BEING WATCHED", "DO NOT TOUCH"="THE EXHIBITS") }, /turf/closed/indestructible/reinforced, /area/awaymission/museum) @@ -3806,7 +4164,7 @@ /obj/effect/turf_decal/siding/dark_blue, /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; - id = "nothing" + id = "museum_secret" }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -3838,6 +4196,9 @@ "HP" = ( /turf/open/floor/iron/freezer, /area/awaymission/museum) +"HQ" = ( +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "HU" = ( /obj/structure/railing{ dir = 4 @@ -3848,6 +4209,19 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, /area/awaymission/museum) +"HW" = ( +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "museum_toilet1"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/structure/toilet/museum{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "HY" = ( /obj/machinery/light/floor, /obj/effect/decal/cleanable/dirt/dust, @@ -3857,6 +4231,12 @@ /obj/machinery/light/warm/dim/directional/north, /turf/open/floor/carpet, /area/awaymission/museum) +"Id" = ( +/obj/effect/decal/cleanable/crayon/puzzle/pin{ + puzzle_id = "museum_r_wing_puzzle" + }, +/turf/closed/indestructible/wood, +/area/awaymission/museum) "Ij" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/locked, @@ -3871,6 +4251,9 @@ /obj/structure/holosign/barrier/engineering, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) +"Ir" = ( +/turf/closed/indestructible/fakedoor, +/area/awaymission/museum) "Iu" = ( /turf/open/floor/mineral/titanium/blue, /area/awaymission/museum) @@ -3898,6 +4281,12 @@ /obj/item/food/grilled_beef_gyro, /turf/open/floor/wood/tile, /area/awaymission/museum) +"IG" = ( +/obj/structure/fluff/fake_camera{ + dir = 9 + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "IH" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /obj/effect/decal/cleanable/dirt/dust, @@ -3914,11 +4303,22 @@ /obj/effect/turf_decal/stripes, /turf/open/floor/iron/smooth_large, /area/awaymission/museum) +"IX" = ( +/mob/living/basic/statue/mannequin{ + name = "cafeteria patron"; + held_item = /obj/item/knife + }, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "IZ" = ( +/mob/living/basic/mothroach, /obj/structure/chair/comfy/beige{ dir = 4 }, -/mob/living/basic/mothroach, /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/wood/large, /area/awaymission/museum) @@ -3959,6 +4359,13 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/carpet/executive, /area/awaymission/museum) +"Jl" = ( +/obj/machinery/status_display/random_message{ + pixel_x = 32; + firstline_to_secondline = list(CAFETERIA="YUMMY", CAFETERIA="HOTDOGS", ENJOY="YOUR MEAL") + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Jn" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/entertainment/toy, @@ -3967,6 +4374,13 @@ /obj/effect/turf_decal/siding/dark_blue, /turf/open/floor/mineral/titanium/blue, /area/awaymission/museum) +"Jp" = ( +/obj/machinery/door/airlock{ + name = "Restroom Cabin 1"; + id_tag = "museum_toilet1" + }, +/turf/open/floor/iron, +/area/awaymission/museum) "Js" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -4077,11 +4491,24 @@ /turf/open/floor/catwalk_floor, /area/awaymission/museum) "Kx" = ( -/obj/effect/decal/cleanable/dirt/dust, /mob/living/basic/skeleton, +/obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/random/maintenance/three, /turf/open/indestructible/plating, /area/awaymission/museum) +"Kz" = ( +/obj/structure/sign/warning/no_smoking/directional/west, +/obj/machinery/computer/terminal/museum{ + name = "extinguisher manual terminal"; + dir = 4; + content = list("Instructions; stand upright; remove safety clip; aim noozle at base of fire... the rest is up to you.") + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) +"KB" = ( +/obj/structure/sign/warning/no_smoking/circle/directional/east, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "KI" = ( /turf/open/floor/iron/dark/side{ dir = 10 @@ -4112,7 +4539,7 @@ /area/awaymission/museum) "Lp" = ( /obj/machinery/status_display/random_message{ - firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS") + firstline_to_secondline = list(NO="LITTERING", "YOU ARE"="BEING WATCHED", "DO NOT TOUCH"="THE EXHIBITS") }, /turf/closed/indestructible/reinforced/titanium/nodiagonal, /area/awaymission/museum) @@ -4162,6 +4589,12 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"LK" = ( +/obj/structure/table, +/obj/item/piggy_bank/museum, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron, +/area/awaymission/museum/cafeteria) "LN" = ( /obj/effect/decal/cleanable/glass/titanium, /turf/open/floor/iron/dark/textured_large, @@ -4197,6 +4630,11 @@ "Ma" = ( /turf/open/chasm/true/no_smooth, /area/awaymission/museum) +"Mb" = ( +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "Mg" = ( /obj/structure/plaque/static_plaque/golden/commission/tram, /turf/closed/indestructible/reinforced, @@ -4215,9 +4653,9 @@ /area/awaymission/museum) "Mv" = ( /mob/living/basic/statue/mannequin{ + name = "Michael Trasen"; dir = 4; - held_item = /obj/item/wrench; - name = "Michael Trasen" + held_item = /obj/item/wrench }, /obj/effect/turf_decal/stripes{ dir = 4 @@ -4300,10 +4738,16 @@ /obj/structure/plaque/static_plaque/golden/commission/birdboat, /turf/closed/indestructible/reinforced, /area/awaymission/museum) +"Nn" = ( +/obj/machinery/door/airlock/public{ + name = "Restrooms" + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "Ns" = ( /obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/booze{ - loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer=10, /obj/item/reagent_containers/cup/glass/bottle/ale=10, /obj/item/reagent_containers/cup/glass/bottle/beer/light=5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor=5, /obj/item/reagent_containers/cup/glass/bottle/whiskey=5, /obj/item/reagent_containers/cup/glass/bottle/gin=5, /obj/item/reagent_containers/cup/glass/bottle/vodka=5, /obj/item/reagent_containers/cup/glass/bottle/tequila=5, /obj/item/reagent_containers/cup/glass/bottle/rum=5, /obj/item/reagent_containers/cup/glass/bottle/vermouth=5, /obj/item/reagent_containers/cup/glass/bottle/cognac=5, /obj/item/reagent_containers/cup/glass/bottle/wine=5, /obj/item/reagent_containers/cup/glass/bottle/kahlua=5, /obj/item/reagent_containers/cup/glass/bottle/amaretto=5, /obj/item/reagent_containers/cup/glass/bottle/hcider=5, /obj/item/reagent_containers/cup/glass/bottle/absinthe=5, /obj/item/reagent_containers/cup/glass/bottle/sake=5, /obj/item/reagent_containers/cup/glass/bottle/grappa=5, /obj/item/reagent_containers/cup/glass/bottle/applejack=5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic=5, /obj/item/reagent_containers/cup/bottle/ethanol=2, /obj/item/reagent_containers/cup/glass/bottle/fernet=2, /obj/item/reagent_containers/cup/glass/bottle/champagne=2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium=2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager=2, /obj/item/reagent_containers/cup/glass/bottle/patron=1, /obj/item/reagent_containers/cup/glass/bottle/kong=1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine=1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka=1, /obj/item/reagent_containers/cup/glass/bottle/trappist=1); spawn_random_offset = 2 }, /turf/open/floor/wood/large, @@ -4324,8 +4768,8 @@ /obj/structure/railing, /obj/structure/table, /obj/item/clothing/mask/cigarette/cigar{ - lit = 1; - icon_state = "cigaron" + icon_state = "cigaron"; + lit = 1 }, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) @@ -4431,11 +4875,11 @@ /turf/open/floor/iron, /area/awaymission/museum) "OS" = ( +/mob/living/basic/mothroach, /obj/structure/chair/stool/bar/directional/east{ can_buckle = 1 }, /obj/effect/mapping_helpers/mob_buckler, -/mob/living/basic/mothroach, /turf/open/floor/wood/large, /area/awaymission/museum) "OT" = ( @@ -4481,6 +4925,9 @@ /obj/item/food/kebab/pineapple_skewer, /turf/open/floor/iron/freezer, /area/awaymission/museum) +"Ph" = ( +/turf/closed/indestructible/reinforced, +/area/awaymission/museum/cafeteria) "Pi" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue/corner{ @@ -4584,8 +5031,8 @@ "PZ" = ( /obj/effect/mapping_helpers/broken_floor, /obj/item/flashlight/flare{ - start_on = 1; - icon_state = "flare-on" + icon_state = "flare-on"; + start_on = 1 }, /turf/open/indestructible/plating, /area/awaymission/museum) @@ -4756,9 +5203,9 @@ }, /obj/structure/fluff{ name = "replica prototype autolathe"; + desc = "A non-functional replica of a prototype Autolathe."; icon = 'icons/obj/machines/lathes.dmi'; - icon_state = "autolathe"; - desc = "A non-functional replica of a prototype Autolathe." + icon_state = "autolathe" }, /turf/open/floor/iron/smooth_corner{ dir = 4 @@ -4803,6 +5250,18 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/white, /area/awaymission/museum) +"RQ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/fluff/fake_camera, +/obj/effect/decal/puzzle_dots{ + pixel_y = -32; + id = "museum_r_wing_puzzle" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) "RR" = ( /obj/machinery/suit_storage_unit/open, /obj/effect/turf_decal/box, @@ -4829,8 +5288,8 @@ /turf/open/floor/bluespace, /area/awaymission/museum) "Se" = ( -/obj/structure/chair/comfy/beige, /mob/living/basic/mothroach, +/obj/structure/chair/comfy/beige, /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/wood/large, /area/awaymission/museum) @@ -4839,6 +5298,11 @@ /obj/structure/railing, /turf/open/floor/holofloor/asteroid, /area/awaymission/museum) +"Sm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_scrubber, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "So" = ( /obj/machinery/shower/directional/east, /turf/open/floor/iron/white/textured_large, @@ -4849,7 +5313,7 @@ /area/awaymission/museum) "Sv" = ( /obj/machinery/status_display/random_message{ - firstline_to_secondline = list("SOUVENIR" = "SHOP") + firstline_to_secondline = list(SOUVENIR="SHOP") }, /turf/closed/indestructible/reinforced, /area/awaymission/museum) @@ -4880,7 +5344,11 @@ }, /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; - id = "nothing" + id = "museum_secret" + }, +/obj/machinery/puzzle/password/pin/directional/south{ + id = "museum_r_wing_puzzle"; + late_initialize_pop = 1 }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -4889,6 +5357,14 @@ /obj/item/stack/spacecash/c1000, /turf/open/indestructible/plating, /area/awaymission/museum) +"Ta" = ( +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/crayon/puzzle/pin{ + pixel_x = -32; + puzzle_id = "museum_r_wing_puzzle" + }, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "Tr" = ( /obj/structure/plaque/static_plaque/golden/commission/kilo, /obj/machinery/light/floor, @@ -4923,6 +5399,13 @@ }, /turf/open/indestructible/plating, /area/awaymission/museum) +"TC" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Cafeteria"; + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/museum/cafeteria) "TF" = ( /turf/open/floor/iron/stairs/right{ dir = 4 @@ -4998,8 +5481,8 @@ dir = 8 }, /obj/structure/fluff/wallsign/directional/east{ - dir = 2; - name = "Exit" + name = "Exit"; + dir = 2 }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -5037,8 +5520,8 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/structure/table, /obj/item/computer_disk{ - icon_state = "datadisk_hydro"; - name = "plant data disk" + name = "plant data disk"; + icon_state = "datadisk_hydro" }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -5066,6 +5549,12 @@ /mob/living/basic/mothroach, /turf/open/misc/beach/sand, /area/awaymission/museum/mothroachvoid) +"UH" = ( +/obj/structure/mirror/broken/directional/east, +/obj/structure/sink/directional/west, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "UI" = ( /obj/effect/turf_decal/tile/green/opposingcorners, /obj/effect/decal/cleanable/dirt/dust, @@ -5106,8 +5595,8 @@ /area/awaymission/museum) "UT" = ( /obj/machinery/status_display/random_message{ - firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS"); - pixel_x = 32 + pixel_x = 32; + firstline_to_secondline = list(NO="LITTERING", "YOU ARE"="BEING WATCHED", "DO NOT TOUCH"="THE EXHIBITS") }, /turf/open/floor/carpet, /area/awaymission/museum) @@ -5129,6 +5618,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth_half, /area/awaymission/museum) +"Vb" = ( +/obj/effect/replica_spawner{ + obvious_replica = 0; + pixel_y = 30; + target_path = /obj/structure/sign/painting/eldritch/weeping + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Vc" = ( /obj/machinery/light/warm/directional/east, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -5380,6 +5877,25 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"WY" = ( +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "museum_toilet2"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/structure/toilet/museum{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) +"WZ" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Xa" = ( /obj/structure/broken_flooring/corner/always_floorplane{ dir = 2 @@ -5402,6 +5918,10 @@ "Xh" = ( /turf/closed/indestructible/fakedoor/maintenance, /area/awaymission/museum) +"Xi" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Xo" = ( /obj/structure/lattice/catwalk/mining, /obj/structure/railing, @@ -5502,8 +6022,8 @@ /turf/closed/indestructible/reinforced/titanium/nodiagonal, /area/awaymission/museum) "Yg" = ( -/obj/effect/decal/cleanable/dirt/dust, /mob/living/basic/cockroach, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, /area/awaymission/museum) "Yk" = ( @@ -5512,6 +6032,12 @@ }, /turf/open/floor/iron, /area/awaymission/museum) +"Yn" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_camera, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "Yr" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/structure/table/reinforced, @@ -5521,13 +6047,21 @@ /obj/item/reagent_containers/cup/glass/mug/nanotrasen, /turf/open/floor/iron/dark, /area/awaymission/museum) +"Yy" = ( +/obj/machinery/computer/terminal/museum{ + name = "donation info terminal"; + dir = 8; + content = list("We're once again asking for your financial support; We love our job, but love alone can only get us so far. Please consider leaving a donation to help keep the musuem running. Thank you.") + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Yz" = ( -/obj/effect/turf_decal/siding, /mob/living/basic/statue/mannequin{ dir = 8; held_item = /obj/item/pickaxe; hat = /obj/item/clothing/suit/hooded/explorer }, +/obj/effect/turf_decal/siding, /obj/structure/railing, /turf/open/floor/holofloor/asteroid, /area/awaymission/museum) @@ -5571,8 +6105,15 @@ /obj/item/reagent_containers/cup/glass/coffee/no_lid{ pixel_x = 12 }, +/obj/item/paper/fluff/museum/numbers_on_walls, /turf/open/floor/iron, /area/awaymission/museum) +"Za" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Zf" = ( /obj/structure/plaque/static_plaque/golden/commission/donut, /turf/closed/indestructible/reinforced, @@ -5589,6 +6130,11 @@ /obj/structure/lattice, /turf/open/chasm/true/no_smooth, /area/awaymission/museum) +"Zo" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "Zp" = ( /obj/structure/plaque/static_plaque/golden/commission/icebox, /turf/closed/indestructible/reinforced, @@ -5613,6 +6159,16 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"Zx" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) +"Zz" = ( +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/cafeteria, +/area/awaymission/museum/cafeteria) "ZB" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/broken_flooring/side/always_floorplane/directional/east, @@ -5644,6 +6200,13 @@ }, /turf/open/floor/iron/dark, /area/awaymission/museum) +"ZO" = ( +/obj/structure/sink/directional/south{ + pixel_y = 6 + }, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/white/small, +/area/awaymission/museum) "ZP" = ( /obj/structure/statue/gold/ce{ anchored = 1 @@ -26150,7 +26713,7 @@ re re re re -re +Uq re re re @@ -26403,12 +26966,12 @@ re re re re -re -re -re -re -re -re +FK +FK +FK +FK +FK +Uq re re re @@ -26660,11 +27223,11 @@ re re re re -re -re -re -re -re +FK +kZ +FK +oD +FK re re re @@ -26915,13 +27478,13 @@ Wc FK re re -re -re -re -re -re -re -re +FK +FO +FK +ta +FK +AQ +FK re re re @@ -27172,13 +27735,13 @@ fy FK re re -re -re -re -re -re -re -re +FK +jO +ry +Gn +Ta +Gn +FK re re re @@ -27429,13 +27992,13 @@ tD FK re re -re -re -re -re -re -re -re +FK +FK +FO +IG +Gn +ax +FK re re re @@ -27687,12 +28250,12 @@ FK re re re -re -re -re -re -re -re +FK +ZO +Gn +Gn +Gn +FK re re re @@ -27947,7 +28510,7 @@ FK FK FK FK -FK +Nn FK FK Uq @@ -29699,7 +30262,7 @@ aW MF MF MF -MF +Id Re PZ Ma @@ -34375,7 +34938,7 @@ FK FK FK FK -FK +FO FK FK FK @@ -35113,7 +35676,7 @@ re re re re -FK +FO qw XK PP @@ -35916,7 +36479,7 @@ FK FK FK Yd -FK +FO NO dZ mn @@ -35958,6 +36521,9 @@ nu FK FK FK +FK +FK +FK Uq re re @@ -35995,9 +36561,6 @@ re re re re -re -re -re "} (119,1,1) = {" re @@ -36214,10 +36777,10 @@ qQ xI gT Qb -FK -re -re -re +Ga +gg +iJ +FO re re re @@ -36472,9 +37035,9 @@ xI xd ns FK -re -re -re +FK +FK +FK re re re @@ -36731,7 +37294,7 @@ BO FK re re -re +Uq re re re @@ -36986,7 +37549,7 @@ Nc FK FK FK -Uq +re re re re @@ -37461,7 +38024,7 @@ FK FK FK PB -FK +FO Ma Ma Ma @@ -40781,7 +41344,7 @@ FK FK FK FK -lb +eW uY rQ FK @@ -42582,7 +43145,7 @@ FK FK lb uY -qX +RQ FK FK FK @@ -43085,19 +43648,19 @@ re re re re +FK +FK +FK +FK +FK +FK +FK re -re -re -re -re -re -re -re -Uq -re -re -re -Uq +FK +aa +uY +ci +jC re re re @@ -43342,19 +43905,19 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re -re -re +FK +aO +FK +WY +FK +HW +FK +FK +FK +Mb +TM +wV +FK re re re @@ -43599,19 +44162,19 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re -re -re +FK +wg +FK +us +FK +Jp +FK +um +FK +Mb +uY +wV +FK re re re @@ -43856,19 +44419,19 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re -re -re +FK +Gn +Gn +Gn +Sm +Gn +Kz +Gn +FK +ju +uY +ci +Ir re re re @@ -44113,19 +44676,19 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re -re -re +FK +nY +Gn +Gn +Gn +Gn +Gn +Gn +kx +uY +uY +wV +FK re re re @@ -44370,19 +44933,19 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re -re -re +FK +ut +UH +gE +CG +Gn +CG +Yn +FK +RC +TM +FU +FK re re re @@ -44627,20 +45190,20 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re -re -re -re +FK +FK +FK +FK +FK +FK +FK +FK +FK +Mb +uY +wV +FK +Uq re re re @@ -44892,11 +45455,11 @@ re re re re -re -re -re -re -re +FK +pN +uY +hS +oP re re re @@ -45149,11 +45712,11 @@ re re re re -re -re -re -re -re +FK +FK +pz +kL +FK re re re @@ -45403,16 +45966,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +Ph +Ph +Ph +Ph +ms +TC +Ph +Ph +Ph re re re @@ -45660,16 +46223,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +DX +HQ +fl +Zz +HQ +HQ +HQ +ac +Ph re re re @@ -45917,16 +46480,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +qK +HQ +HQ +HQ +HQ +HQ +HQ +HQ +vG re re re @@ -46174,16 +46737,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +uH +HQ +Xi +xp +nZ +Xi +Es +nZ +Ph re re re @@ -46431,17 +46994,17 @@ re re re re -re -re -re -re -re -re -re -re -re -re -re +Ph +Vb +HQ +Zx +hm +WZ +ql +xp +WZ +Ph +Uq re re re @@ -46688,16 +47251,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +HQ +HQ +ql +Zo +WZ +ql +GB +IX +Ph re re re @@ -46945,16 +47508,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +Db +HQ +FY +xO +Za +FY +xp +Za +Ph re re re @@ -47202,16 +47765,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +LK +Yy +HQ +HQ +KB +Jl +HQ +cY +Ph re re re @@ -47459,16 +48022,16 @@ re re re re -re -re -re -re -re -re -re -re -re -re +Ph +Ph +Ph +Ph +Ph +Ph +Ph +Ph +Ph +Ph re re re diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 3654b4cfce5..e3c57b59f62 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -158,6 +158,9 @@ /// Return to prevent the default behavior (attack_selfing) from ocurring. #define COMPONENT_ITEM_ACTION_SLOT_INVALID (1<<0) +/// Sent from /obj/item/attack_atom(): (atom/attacked_atom, mob/living/user) +#define COMSIG_ITEM_POST_ATTACK_ATOM "item_post_attack_atom" + ///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) #define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" ///from base of obj/item/hit_reaction(): (owner, hitby, attack_text, final_block_chance, damage, attack_type, damage_type) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 8301a9fb107..5b0ea31dfbf 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -173,3 +173,4 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_ROCK_TAP "rock_tap" #define SFX_SEAR "sear" #define SFX_REEL "reel" +#define SFX_RATTLE "rattle" diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm index 1935c3c0aee..6a2a5152903 100644 --- a/code/__DEFINES/time.dm +++ b/code/__DEFINES/time.dm @@ -39,6 +39,7 @@ #define PRIDE_WEEK "Pride Week" #define MOTH_WEEK "Moth Week" #define IAN_HOLIDAY "Ian's Birthday" +#define HOTDOG_DAY "National Hot Dog Day" /* Days of the week to make it easier to reference them. diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index dd237bf54b7..7f4fbd92936 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -34,6 +34,8 @@ #define CULT_TRAIT "cult" #define LICH_TRAIT "lich" +#define VENDING_MACHINE_TRAIT "vending_machine" + #define ABSTRACT_ITEM_TRAIT "abstract-item" /// A trait given by any status effect #define STATUS_EFFECT_TRAIT "status-effect" diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d9a0118a06d..72ed2cabb69 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -264,6 +264,7 @@ user.changeNext_move(attack_speed) user.do_attack_animation(attacked_atom) attacked_atom.attacked_by(src, user) + SEND_SIGNAL(src, COMSIG_ITEM_POST_ATTACK_ATOM, attacked_atom, user) /// Called from [/obj/item/proc/attack_atom] and [/obj/item/proc/attack] if the attack succeeds /atom/proc/attacked_by(obj/item/attacking_item, mob/living/user) diff --git a/code/controllers/subsystem/persistence/_persistence.dm b/code/controllers/subsystem/persistence/_persistence.dm index 8f865e5d098..36679fa1d2a 100644 --- a/code/controllers/subsystem/persistence/_persistence.dm +++ b/code/controllers/subsystem/persistence/_persistence.dm @@ -37,6 +37,14 @@ SUBSYSTEM_DEF(persistence) /// Will be null'd once the persistence system initializes, and never read from again. var/list/obj/item/storage/photo_album/queued_photo_albums + /// A json_database to data/piggy banks.json + /// Schema is persistence_id => array of coins, space cash and holochips. + var/datum/json_database/piggy_banks_database + /// List of persistene ids which piggy banks. + var/list/queued_broken_piggy_ids + + var/list/broken_piggy_banks + var/rounds_since_engine_exploded = 0 var/delam_highscore = 0 var/tram_hits_this_round = 0 diff --git a/code/controllers/subsystem/persistence/piggy_banks.dm b/code/controllers/subsystem/persistence/piggy_banks.dm new file mode 100644 index 00000000000..240fd98ab0c --- /dev/null +++ b/code/controllers/subsystem/persistence/piggy_banks.dm @@ -0,0 +1,56 @@ +///This proc is used to initialize holochips, cash and coins inside our persistent piggy bank. +/datum/controller/subsystem/persistence/proc/load_piggy_bank(obj/item/piggy_bank/piggy) + if(isnull(piggy_banks_database)) + piggy_banks_database = new("data/piggy_banks.json") + + var/list/data = piggy_banks_database.get_key(piggy.persistence_id) + if(isnull(data)) + return + var/total_value = 0 + for(var/iteration in 1 to length(data)) + var/money_path = text2path(data[iteration]) + if(!money_path) //For a reason or another, it was removed. + continue + var/obj/item/spawned + if(ispath(money_path, /obj/item/holochip)) + //We want to safely access the assoc of this position and not that of last key that happened to match this one. + var/list/key_and_assoc = data.Copy(iteration, iteration + 1) + var/amount = key_and_assoc["[money_path]"] + spawned = new money_path (piggy, amount) + //the operations are identical to those of chips, but they're different items, so I'll keep them separated. + else if(ispath(money_path, /obj/item/stack/spacecash)) + var/list/key_and_assoc = data.Copy(iteration, iteration + 1) + var/amount = key_and_assoc["[money_path]"] + spawned = new money_path (piggy, amount) + else if(ispath(money_path, /obj/item/coin)) + spawned = new money_path (piggy) + else + stack_trace("Unsupported path found in the data of a persistent piggy bank. item: [money_path], id:[piggy.persistence_id]") + continue + total_value += spawned.get_item_credit_value() + if(total_value >= piggy.maximum_value) + break + +///This proc is used to save money stored inside our persistent the piggy bank for the next time it's loaded. +/datum/controller/subsystem/persistence/proc/save_piggy_bank(obj/item/piggy_bank/piggy) + if(isnull(piggy_banks_database)) + return + + if(queued_broken_piggy_ids) + for(var/broken_id in queued_broken_piggy_ids) + piggy_banks_database.remove(broken_id) + queued_broken_piggy_ids = null + + var/list/data = list() + for(var/obj/item/item as anything in piggy.contents) + var/piggy_value = 1 + if(istype(item, /obj/item/holochip)) + var/obj/item/holochip/chip = item + piggy_value = chip.credits + else if(istype(item, /obj/item/stack/spacecash)) + var/obj/item/stack/spacecash/cash = item + piggy_value = cash.amount + else if(!istype(item, /obj/item/coin)) + continue + data += list("[item.type]" = piggy_value) + piggy_banks_database.set_key(piggy.persistence_id, data) diff --git a/code/controllers/subsystem/queuelinks.dm b/code/controllers/subsystem/queuelinks.dm index 6a3b8288821..a6d56cf622e 100644 --- a/code/controllers/subsystem/queuelinks.dm +++ b/code/controllers/subsystem/queuelinks.dm @@ -18,16 +18,30 @@ SUBSYSTEM_DEF(queuelinks) if(isnull(id)) CRASH("Attempted to add to queue with no ID; [what]") - var/datum/queue_link/link - if(isnull(queues[id])) + var/datum/queue_link/link = queues[id] + if(isnull(link)) link = new /datum/queue_link(id) queues[id] = link - else - link = queues[id] if(link.add(what, queue_max)) queues -= id +/** + * Pop a queue link without waiting for it to reach its max size. + * This is useful for those links that do not have a fixed size and thus may not pop. + */ +/datum/controller/subsystem/queuelinks/proc/pop_link(id) + if(isnull(id)) + CRASH("Attempted to pop a queue with no ID") + + var/datum/queue_link/link = queues[id] + if(isnull(queues[id])) + CRASH("Attempted to pop a non-existant queue: [id]") + + link.pop() + queues -= id + + /datum/queue_link /// atoms in our queue var/list/partners = list() @@ -50,17 +64,17 @@ SUBSYSTEM_DEF(queuelinks) if(queue_max != 0 && max != 0 && max != queue_max) CRASH("Tried to change queue size to [max] from [queue_max]!") else if(!queue_max) - queue_max = max - + queue_max = max + if(!queue_max || length(partners) < queue_max) return - + pop() return TRUE /datum/queue_link/proc/pop() for(var/atom/item as anything in partners) - item.MatchedLinks(id, partners) + item.MatchedLinks(id, partners - item) qdel(src) /datum/queue_link/Destroy() diff --git a/code/datums/elements/shatters_when_thrown.dm b/code/datums/elements/can_shatter.dm similarity index 69% rename from code/datums/elements/shatters_when_thrown.dm rename to code/datums/elements/can_shatter.dm index cbb5994852c..73b025ad83c 100644 --- a/code/datums/elements/shatters_when_thrown.dm +++ b/code/datums/elements/can_shatter.dm @@ -1,7 +1,8 @@ /** * When attached to something, will make that thing shatter into shards on throw impact or z level falling + * Or even when used as a weapon if the 'shatters_as_weapon' arg is TRUE */ -/datum/element/shatters_when_thrown +/datum/element/can_shatter element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 @@ -12,7 +13,12 @@ /// What sound plays when the thing we're attached to shatters var/shattering_sound -/datum/element/shatters_when_thrown/Attach(datum/target, shard_type = /obj/item/plate_shard, number_of_shards = 5, shattering_sound = 'sound/items/ceramic_break.ogg') +/datum/element/can_shatter/Attach(datum/target, + shard_type = /obj/item/plate_shard, + number_of_shards = 5, + shattering_sound = 'sound/items/ceramic_break.ogg', + shatters_as_weapon = FALSE, + ) . = ..() if(!ismovable(target)) @@ -24,26 +30,28 @@ RegisterSignal(target, COMSIG_MOVABLE_IMPACT, PROC_REF(on_throw_impact)) RegisterSignal(target, COMSIG_ATOM_ON_Z_IMPACT, PROC_REF(on_z_impact)) + if(shatters_as_weapon) + RegisterSignal(target, COMSIG_ITEM_POST_ATTACK_ATOM, PROC_REF(on_post_attack_atom)) -/datum/element/shatters_when_thrown/Detach(datum/target) +/datum/element/can_shatter/Detach(datum/target) . = ..() UnregisterSignal(target, list(COMSIG_MOVABLE_IMPACT, COMSIG_ATOM_ON_Z_IMPACT)) /// Tells the parent to shatter if we impact a lower zlevel -/datum/element/shatters_when_thrown/proc/on_z_impact(datum/source, turf/impacted_turf, levels) +/datum/element/can_shatter/proc/on_z_impact(datum/source, turf/impacted_turf, levels) SIGNAL_HANDLER shatter(source, impacted_turf) /// Tells the parent to shatter if we are thrown and impact something -/datum/element/shatters_when_thrown/proc/on_throw_impact(datum/source, atom/hit_atom) +/datum/element/can_shatter/proc/on_throw_impact(datum/source, atom/hit_atom) SIGNAL_HANDLER shatter(source, hit_atom) /// Handles the actual shattering part, throwing shards of whatever is defined on the component everywhere -/datum/element/shatters_when_thrown/proc/shatter(atom/movable/source, atom/hit_atom) +/datum/element/can_shatter/proc/shatter(atom/movable/source, atom/hit_atom) var/generator/scatter_gen = generator(GEN_CIRCLE, 0, 48, NORMAL_RAND) var/scatter_turf = get_turf(hit_atom) @@ -64,3 +72,7 @@ return else qdel(source) + +/datum/element/can_shatter/proc/on_post_attack_atom(obj/item/source, atom/attacked_atom, mob/living/user) + SIGNAL_HANDLER + shatter(source, attacked_atom) diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm index 28433ba9064..6b9465bf46a 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm @@ -335,3 +335,8 @@ name = "Flower Worn" icon_file = 'icons/mob/clothing/head/hydroponics.dmi' json_config = 'code/datums/greyscale/json_configs/simple_flower_worn.json' + +/datum/greyscale_config/piggy_bank + name = "Piggy Bank" + icon_file = 'icons/obj/fluff/general.dmi' + json_config = 'code/datums/greyscale/json_configs/piggy_bank.json' diff --git a/code/datums/greyscale/json_configs/piggy_bank.json b/code/datums/greyscale/json_configs/piggy_bank.json new file mode 100644 index 00000000000..71876213e19 --- /dev/null +++ b/code/datums/greyscale/json_configs/piggy_bank.json @@ -0,0 +1,10 @@ +{ + "piggy_bank": [ + { + "type": "icon_state", + "icon_state": "piggy_bank", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 3c5f6ab62d0..b19db61c81e 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -47,12 +47,12 @@ /datum/material/glass/on_applied_obj(atom/source, amount, material_flags) . = ..() if(!isstack(source)) - source.AddElement(/datum/element/shatters_when_thrown, shard_type, round(amount / SHEET_MATERIAL_AMOUNT), SFX_SHATTER) + source.AddElement(/datum/element/can_shatter, shard_type, round(amount / SHEET_MATERIAL_AMOUNT), SFX_SHATTER) /datum/material/glass/on_removed(atom/source, amount, material_flags) . = ..() - source.RemoveElement(/datum/element/shatters_when_thrown, shard_type) + source.RemoveElement(/datum/element/can_shatter, shard_type) /* Color matrices are like regular colors but unlike with normal colors, you can go over 255 on a channel. diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm index 3b86f56f235..ded38af6201 100644 --- a/code/game/area/areas/away_content.dm +++ b/code/game/area/areas/away_content.dm @@ -35,6 +35,10 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" sound_environment = SOUND_ENVIRONMENT_PLAIN ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/ambiodd.ogg','sound/ambience/ambinice.ogg') +/area/awaymission/museum/cafeteria + name = "Nanotrasen Museum Cafeteria" + sound_environment = SOUND_ENVIRONMENT_ROOM + /area/awaymission/errorroom name = "Super Secret Room" static_lighting = FALSE diff --git a/code/game/objects/effects/posters/contraband.dm b/code/game/objects/effects/posters/contraband.dm index 2bb2fcce50e..52528c251b6 100644 --- a/code/game/objects/effects/posters/contraband.dm +++ b/code/game/objects/effects/posters/contraband.dm @@ -625,3 +625,35 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/blood_geometer icon_state = "singletank_bomb" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/singletank_bomb, 32) + +///a special poster meant to fool people into thinking this is a bombable wall at a glance. +/obj/structure/sign/poster/contraband/fake_bombable + name = "fake bombable poster" + desc = "We do a little trolling." + icon_state = "fake_bombable" + never_random = TRUE + +/obj/structure/sign/poster/contraband/fake_bombable/Initialize(mapload) + . = ..() + var/turf/our_wall = get_turf_pixel(src) + name = our_wall.name + +/obj/structure/sign/poster/contraband/fake_bombable/examine(mob/user) + var/turf/our_wall = get_turf_pixel(src) + . = our_wall.examine(user) + . += span_notice("It seems to be slightly cracked...") + +/obj/structure/sign/poster/contraband/fake_bombable/ex_act(severity, target) + addtimer(CALLBACK(src, PROC_REF(fall_off_wall)), 2.5 SECONDS) + return FALSE + +/obj/structure/sign/poster/contraband/fake_bombable/proc/fall_off_wall() + if(QDELETED(src) || !isturf(loc)) + return + var/turf/our_wall = get_turf_pixel(src) + our_wall.balloon_alert_to_viewers("it was a ruse!") + roll_and_drop(loc) + playsound(loc, 'sound/items/handling/paper_drop.ogg', 50, TRUE) + + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/fake_bombable, 32) diff --git a/code/game/objects/effects/spawners/random/vending.dm b/code/game/objects/effects/spawners/random/vending.dm index 74ece7f24f9..014f07d2967 100644 --- a/code/game/objects/effects/spawners/random/vending.dm +++ b/code/game/objects/effects/spawners/random/vending.dm @@ -18,6 +18,11 @@ loot_type_path = /obj/machinery/vending/snack loot = list() +/obj/effect/spawner/random/vending/snackvend/Initialize(mapload) + if(check_holidays(HOTDOG_DAY)) + loot += /obj/machinery/vending/hotdog + return ..() + /obj/effect/spawner/random/vending/colavend name = "spawn random cola vending machine" desc = "Automagically transforms into a random cola vendor. If you see this while in a shift, please create a bug report." diff --git a/code/game/objects/items/busts_and_figurines.dm b/code/game/objects/items/busts_and_figurines.dm new file mode 100644 index 00000000000..afc4a58334e --- /dev/null +++ b/code/game/objects/items/busts_and_figurines.dm @@ -0,0 +1,139 @@ +/obj/item/statuebust + name = "bust" + desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it + icon = 'icons/obj/art/statue.dmi' + icon_state = "bust" + force = 15 + throwforce = 10 + throw_speed = 5 + throw_range = 2 + attack_verb_continuous = list("busts") + attack_verb_simple = list("bust") + var/impressiveness = 45 + +/obj/item/statuebust/Initialize(mapload) + . = ..() + AddElement(/datum/element/art, impressiveness) + AddElement(/datum/element/beauty, 1000) + +/obj/item/statuebust/hippocratic + name = "hippocrates bust" + desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." + icon_state = "hippocratic" + impressiveness = 50 + // If it hits the prob(reference_chance) chance, this is set to TRUE. Adds medical HUD when wielded, but has a 10% slower attack speed and is too bloody to make an oath with. + var/reference = FALSE + // Chance for above. + var/reference_chance = 1 + // Minimum time inbetween oaths. + COOLDOWN_DECLARE(oath_cd) + +/obj/item/statuebust/hippocratic/evil + reference_chance = 100 + +/obj/item/statuebust/hippocratic/Initialize(mapload) + . = ..() + if(prob(reference_chance)) + name = "Solemn Vow" + desc = "Art lovers will cherish the bust of Hippocrates, commemorating a time when medics still thought doing no harm was a good idea." + attack_speed = CLICK_CD_SLOW + reference = TRUE + +/obj/item/statuebust/hippocratic/examine(mob/user) + . = ..() + if(reference) + . += span_notice("You could activate the bust in-hand to swear or forswear a Hippocratic Oath... but it seems like somebody decided it was more of a Hippocratic Suggestion. This thing is caked with bits of blood and gore.") + return + . += span_notice("You can activate the bust in-hand to swear or forswear a Hippocratic Oath! This has no effects except pacifism or bragging rights. Does not remove other sources of pacifism. Do not eat.") + +/obj/item/statuebust/hippocratic/equipped(mob/living/carbon/human/user, slot) + ..() + if(!(slot & ITEM_SLOT_HANDS)) + return + var/datum/atom_hud/our_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + our_hud.show_to(user) + ADD_TRAIT(user, TRAIT_MEDICAL_HUD, type) + +/obj/item/statuebust/hippocratic/dropped(mob/living/carbon/human/user) + ..() + if(HAS_TRAIT_NOT_FROM(user, TRAIT_MEDICAL_HUD, type)) + return + var/datum/atom_hud/our_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + our_hud.hide_from(user) + REMOVE_TRAIT(user, TRAIT_MEDICAL_HUD, type) + +/obj/item/statuebust/hippocratic/attack_self(mob/user) + if(!iscarbon(user)) + to_chat(user, span_warning("You remember how the Hippocratic Oath specifies 'my fellow human beings' and realize that it's completely meaningless to you.")) + return + + if(reference) + to_chat(user, span_warning("As you prepare yourself to swear the Oath, you realize that doing so on a blood-caked bust is probably not a good idea.")) + return + + if(!COOLDOWN_FINISHED(src, oath_cd)) + to_chat(user, span_warning("You've sworn or forsworn an oath too recently to undo your decisions. The bust looks at you with disgust.")) + return + + COOLDOWN_START(src, oath_cd, 5 MINUTES) + + if(HAS_TRAIT_FROM(user, TRAIT_PACIFISM, type)) + to_chat(user, span_warning("You've already sworn a vow. You start preparing to rescind it...")) + if(do_after(user, 5 SECONDS, target = user)) + user.say("Yeah this Hippopotamus thing isn't working out. I quit!", forced = "hippocratic hippocrisy") + REMOVE_TRAIT(user, TRAIT_PACIFISM, type) + + // they can still do it for rp purposes + if(HAS_TRAIT_NOT_FROM(user, TRAIT_PACIFISM, type)) + to_chat(user, span_warning("You already don't want to harm people, this isn't going to do anything!")) + + + to_chat(user, span_notice("You remind yourself of the Hippocratic Oath's contents and prepare to swear yourself to it...")) + if(do_after(user, 4 SECONDS, target = user)) + user.say("I swear to fulfill, to the best of my ability and judgment, this covenant:", forced = "hippocratic oath") + else + return fuck_it_up(user) + if(do_after(user, 2 SECONDS, target = user)) + user.say("I will apply, for the benefit of the sick, all measures that are required, avoiding those twin traps of overtreatment and therapeutic nihilism.", forced = "hippocratic oath") + else + return fuck_it_up(user) + if(do_after(user, 3 SECONDS, target = user)) + user.say("I will remember that I remain a member of society, with special obligations to all my fellow human beings, those sound of mind and body as well as the infirm.", forced = "hippocratic oath") + else + + return fuck_it_up(user) + if(do_after(user, 3 SECONDS, target = user)) + user.say("If I do not violate this oath, may I enjoy life and art, respected while I live and remembered with affection thereafter. May I always act so as to preserve the finest traditions of my calling and may I long experience the joy of healing those who seek my help.", forced = "hippocratic oath") + else + return fuck_it_up(user) + + to_chat(user, span_notice("Contentment, understanding, and purpose washes over you as you finish the oath. You consider for a second the concept of harm and shudder.")) + ADD_TRAIT(user, TRAIT_PACIFISM, type) + +// Bully the guy for fucking up. +/obj/item/statuebust/hippocratic/proc/fuck_it_up(mob/living/carbon/user) + to_chat(user, span_warning("You forget what comes next like a dumbass. The Hippocrates bust looks down on you, disappointed.")) + user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2) + COOLDOWN_RESET(src, oath_cd) + +/obj/item/maneki_neko + name = "Maneki-Neko" + desc = "A figurine of a cat holding a coin, said to bring fortune and wealth, and perpetually moving its paw in a beckoning gesture." + icon = 'icons/obj/fluff/general.dmi' + icon_state = "maneki-neko" + w_class = WEIGHT_CLASS_SMALL + force = 5 + throwforce = 5 + throw_speed = 3 + throw_range = 5 + attack_verb_continuous = list("bashes", "beckons", "hit") + attack_verb_simple = list("bash", "beckon", "hit") + +/obj/item/maneki_neko/Initialize(mapload) + . = ..() + //Not compatible with greyscale configs because it's animated. + color = pick_weight(list(COLOR_WHITE = 3, COLOR_GOLD = 2, COLOR_DARK = 1)) + var/mutable_appearance/neko_overlay = mutable_appearance(icon, "maneki-neko-overlay", appearance_flags = RESET_COLOR) + add_overlay(neko_overlay) + AddElement(/datum/element/art, GOOD_ART) + AddElement(/datum/element/beauty, 800) diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 920d074ad4a..b0189a0c4ec 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -279,13 +279,8 @@ /obj/item/extinguisher/proc/EmptyExtinguisher(mob/user) if(loc == user && reagents.total_volume) + reagents.expose(user.loc, TOUCH) reagents.clear_reagents() - - var/turf/T = get_turf(loc) - if(isopenturf(T)) - var/turf/open/theturf = T - theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - user.visible_message(span_notice("[user] empties out \the [src] onto the floor using the release valve."), span_info("You quietly empty out \the [src] using its release valve.")) //firebot assembly @@ -297,3 +292,10 @@ user.put_in_hands(new /obj/item/bot_assembly/firebot) else ..() + +/obj/item/extinguisher/anti + name = "fire extender" + desc = "A traditional red fire extinguisher. Made in Britain... wait, what?" + chem = /datum/reagent/fuel + tanktype = /obj/structure/reagent_dispensers/fueltank + cooling_power = 0 diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm index ba1845bb40d..0f95aac6d85 100644 --- a/code/game/objects/items/food/bread.dm +++ b/code/game/objects/items/food/bread.dm @@ -481,6 +481,7 @@ foodtypes = GRAIN | DAIRY w_class = WEIGHT_CLASS_SMALL crafting_complexity = FOOD_COMPLEXITY_2 + custom_price = PAYCHECK_CREW /obj/item/food/butterdog/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/food/lizard.dm b/code/game/objects/items/food/lizard.dm index 729ad4d38a9..47b5ff75109 100644 --- a/code/game/objects/items/food/lizard.dm +++ b/code/game/objects/items/food/lizard.dm @@ -34,6 +34,7 @@ foodtypes = MEAT w_class = WEIGHT_CLASS_SMALL crafting_complexity = FOOD_COMPLEXITY_2 + custom_price = PAYCHECK_CREW /obj/item/food/raw_headcheese name = "raw headcheese block" diff --git a/code/game/objects/items/food/martian.dm b/code/game/objects/items/food/martian.dm index 2441ac0f674..7ceaf187817 100644 --- a/code/game/objects/items/food/martian.dm +++ b/code/game/objects/items/food/martian.dm @@ -732,6 +732,7 @@ foodtypes = MEAT | VEGETABLES | FRUIT | PINEAPPLE w_class = WEIGHT_CLASS_SMALL crafting_complexity = FOOD_COMPLEXITY_4 + custom_price = PAYCHECK_CREW * 1.2 /obj/item/food/salt_chilli_fries name = "salt n' chilli fries" @@ -1210,6 +1211,7 @@ foodtypes = FRUIT | MEAT | PINEAPPLE | VEGETABLES | GRAIN w_class = WEIGHT_CLASS_SMALL crafting_complexity = FOOD_COMPLEXITY_4 //Uses Sambal + custom_price = PAYCHECK_CREW * 2 /obj/item/food/frickles name = "frickles" diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index b9a6c34df04..b7a4ca99916 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -554,6 +554,7 @@ w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP crafting_complexity = FOOD_COMPLEXITY_2 + custom_price = PAYCHECK_CREW * 0.6 /obj/item/food/sausage/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/salami, 6, 3 SECONDS, table_required = TRUE, screentip_verb = "Slice") @@ -734,6 +735,7 @@ foodtypes = MEAT | DAIRY | GRAIN w_class = WEIGHT_CLASS_TINY crafting_complexity = FOOD_COMPLEXITY_3 + custom_price = PAYCHECK_CREW /obj/item/food/bbqribs name = "bbq ribs" diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm index c6488f67a1e..e440a1039e6 100644 --- a/code/game/objects/items/food/sandwichtoast.dm +++ b/code/game/objects/items/food/sandwichtoast.dm @@ -152,6 +152,7 @@ w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_CHEAP crafting_complexity = FOOD_COMPLEXITY_3 + custom_price = PAYCHECK_CREW * 0.7 // Used for unit tests, do not delete /obj/item/food/hotdog/debug @@ -174,6 +175,7 @@ w_class = WEIGHT_CLASS_SMALL venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_4 + custom_price = PAYCHECK_CREW /obj/item/food/sandwich/blt name = "\improper BLT" diff --git a/code/game/objects/items/piggy_bank.dm b/code/game/objects/items/piggy_bank.dm new file mode 100644 index 00000000000..6a9ee494a22 --- /dev/null +++ b/code/game/objects/items/piggy_bank.dm @@ -0,0 +1,129 @@ +/** + * Piggy banks. They store your hard-earned money until you or someone destroys it. + * If the persistence id is set, money will be carried between rounds until broken. + */ +/obj/item/piggy_bank + name = "piggy bank" + desc = "A pig-shaped money container made of porkelain, oink. Do not throw." //pun very intended. + icon = 'icons/obj/fluff/general.dmi' + icon_state = "piggy_bank" + max_integrity = 8 + w_class = WEIGHT_CLASS_NORMAL + force = 12 + throwforce = 15 + throw_speed = 3 + throw_range = 7 + greyscale_config = /datum/greyscale_config/piggy_bank + ///Some piggy banks are persistent, meaning they carry dosh between rounds. + var/persistence_id + ///Callback to execute upon roundend to save the current amount of cash it has stored, IF persistent. + var/datum/callback/persistence_cb + ///How much dosh can this piggy bank hold. + var/maximum_value = PAYCHECK_COMMAND * 20 + ///How much dosh this piggy bank spawns with. + var/initial_value = 0 + +/obj/item/piggy_bank/Initialize(mapload) + if(!greyscale_colors) + greyscale_colors = pick(COLOR_PINK, + COLOR_LIGHT_ORANGE, + COLOR_GREEN_GRAY, + COLOR_PALE_BLUE_GRAY, + COLOR_DARK_MODERATE_LIME_GREEN, + COLOR_OFF_WHITE, + ) + + . = ..() + + AddElement(/datum/element/can_shatter, shattering_sound = SFX_SHATTER, shatters_as_weapon = TRUE) + AddElement(/datum/element/beauty, 500) + if(!persistence_id) + if(initial_value) + new /obj/item/holochip(src, initial_value) + return + + SSpersistence.load_piggy_bank(src) + persistence_cb = CALLBACK(src, PROC_REF(save_cash)) + SSticker.OnRoundend(persistence_cb) + + if(initial_value & initial_value + calculate_dosh_amount() <= maximum_value) + new /obj/item/holochip(src, initial_value) + +/obj/item/piggy_bank/proc/save_cash() + SSpersistence.save_piggy_bank(src) + +/obj/item/piggy_bank/Destroy() + if(persistence_cb) + LAZYREMOVE(SSticker.round_end_events, persistence_cb) //cleanup the callback. + persistence_cb = null + return ..() + +/obj/item/piggy_bank/deconstruct(disassembled = TRUE) + for(var/obj/item/thing as anything in contents) + thing.forceMove(loc) + //Smashing the piggy after the round is over doesn't count. + if(persistence_id && SSticker.current_state < GAME_STATE_FINISHED) + LAZYADD(SSpersistence.queued_broken_piggy_ids, persistence_id) + return ..() + +/obj/item/piggy_bank/attack_self(mob/user, modifiers) + . = ..() + if(DOING_INTERACTION_WITH_TARGET(user, src)) + return + balloon_alert(user, "rattle rattle...") + if(!do_after(user, 0.5 SECONDS, src)) + return + var/percentile = round(calculate_dosh_amount()/maximum_value * 100, 1) + if(percentile >= 10) + playsound(src, SFX_RATTLE, percentile * 0.5, FALSE, FALSE) + switch(percentile) + if(0) + balloon_alert(user, "it's empty") + if(1 to 9) + balloon_alert(user, "it's almost empty") + if(10 to 25) + balloon_alert(user, "it's some cash") + if(25 to 45) + balloon_alert(user, "it's plenty of cash") + if(45 to 70) + balloon_alert(user, "it feels almost full") + if(70 to 95) + balloon_alert(user, "it feels full") + if(95 to INFINITY) + balloon_alert(user, "brimming with cash") + +/obj/item/piggy_bank/attackby(obj/item/item, mob/user, params) + var/creds_value = item.get_item_credit_value() + if(isnull(creds_value)) + return ..() + + var/dosh_amount = calculate_dosh_amount() + + if(dosh_amount >= maximum_value) + balloon_alert(user, "it's full!") + else if(dosh_amount + creds_value > maximum_value) + balloon_alert(user, "too much cash!") + else if(!user.transferItemToLoc(item, src)) + balloon_alert(user, "stuck in your hands!") + else + balloon_alert(user, "inserted [creds_value] creds") + return TRUE + +///Returns the total amount of credits that its contents amount to. +/obj/item/piggy_bank/proc/calculate_dosh_amount() + var/total_value = 0 + for(var/obj/item/item in contents) + total_value += item.get_item_credit_value() + return total_value + +/obj/item/piggy_bank/museum + name = "Pigston Swinelord VI" + desc = "The museum's mascot piggy bank and favorite embezzler, known to carry donations between shifts without paying taxes. The space IRS hates him." + persistence_id = "museum_piggy" + greyscale_colors = COLOR_PINK + maximum_value = PAYCHECK_COMMAND * 100 + initial_value = PAYCHECK_COMMAND * 4 + +/obj/item/piggy_bank/museum/Initialize(mapload) + . = ..() + AddComponent(/datum/component/areabound) //do not steal. diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 7ac22d00897..dca3fe17215 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -289,28 +289,47 @@ // literally just buttons // -/obj/machinery/puzzle_button - name = "control panel" - desc = "A panel that controls something nearby. I'm sure it being covered in hazard stripes is fine." +/obj/machinery/puzzle + name = "abstract puzzle gizmo" icon = 'icons/obj/machines/wallmounts.dmi' - icon_state = "lockdown0" resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - base_icon_state = "lockdown" /// have we been pressed already? var/used = FALSE /// can we be pressed only once? var/single_use = TRUE /// puzzle id we send on press - var/id = "0" //null would literally open every puzzle door without an id + var/id //null would literally open every puzzle door without an id /// queue size, must match count of objects this activates! var/queue_size = 2 + /// should the puzzle machinery perform the final step of the queue link on LateInitialize? An alternative to queue size + var/late_initialize_pop = FALSE -/obj/machinery/puzzle_button/Initialize(mapload) +/obj/machinery/puzzle/Initialize(mapload) . = ..() if(!isnull(id)) - SSqueuelinks.add_to_queue(src, id, queue_size) + SSqueuelinks.add_to_queue(src, id, late_initialize_pop ? 0 : queue_size) + return late_initialize_pop ? INITIALIZE_HINT_LATELOAD : . -/obj/machinery/puzzle_button/attack_hand(mob/user, list/modifiers) +/obj/machinery/puzzle/LateInitialize() + . = ..() + if(late_initialize_pop && id && SSqueuelinks.queues[id]) + SSqueuelinks.pop_link(id) + +/obj/machinery/puzzle/proc/on_puzzle_complete() //incase someone wants to make this do something else for some reason + SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) + +/obj/machinery/puzzle/update_icon_state() + icon_state = "[base_icon_state][used]" + return ..() + +/obj/machinery/puzzle/button + name = "control panel" + desc = "A panel that controls something nearby. I'm sure it being covered in hazard stripes is fine." + icon = 'icons/obj/machines/wallmounts.dmi' + icon_state = "lockdown0" + base_icon_state = "lockdown" + +/obj/machinery/puzzle/button/attack_hand(mob/user, list/modifiers) . = ..() if(.) return @@ -320,37 +339,17 @@ update_icon_state() visible_message(span_notice("[user] presses a button on [src]."), span_notice("You press a button on [src].")) playsound(src, 'sound/machines/terminal_button07.ogg', 45, TRUE) - open_doors() + on_puzzle_complete() -/obj/machinery/puzzle_button/proc/open_doors() //incase someone wants to make this do something else for some reason - SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/button, 32) -/obj/machinery/puzzle_button/update_icon_state() - icon_state = "[base_icon_state][used]" - return ..() - -MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle_button, 32) - -/obj/machinery/puzzle_keycardpad +/obj/machinery/puzzle/keycardpad name = "keycard panel" desc = "A panel that controls something nearby. Accepts keycards." - icon = 'icons/obj/machines/wallmounts.dmi' icon_state = "keycardpad0" - resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF base_icon_state = "keycardpad" - /// were we used successfully? - var/used = FALSE - /// puzzle id we send if the correct card is swiped - var/id = "0" - /// queue size, must match count of objects this activates! - var/queue_size = 2 -/obj/machinery/puzzle_keycardpad/Initialize(mapload) - . = ..() - if(!isnull(id)) - SSqueuelinks.add_to_queue(src, id, queue_size) - -/obj/machinery/puzzle_keycardpad/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, params) . = ..() if(!istype(attacking_item, /obj/item/keycard) || used) return @@ -363,13 +362,75 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle_button, 32) used = TRUE update_icon_state() playsound(src, 'sound/machines/beep.ogg', 45, TRUE) - SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) + on_puzzle_complete() -/obj/machinery/puzzle_keycardpad/update_icon_state() - icon_state = "[base_icon_state][used]" - return ..() +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/keycardpad, 32) -MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle_keycardpad, 32) +/obj/machinery/puzzle/password + name = "password panel" + desc = "A panel that controls something nearby. This one requires a (case-sensitive) password, and it's not \"Swordfish\"." + icon_state = "passpad0" + base_icon_state = "passpad" + ///The password to this door. + var/password = "" + ///The text shown in the tgui input popup + var/tgui_text = "Please enter the password." + ///The title of the tgui input popup + var/tgui_title = "What's the password?" + ///Decides whether the max length of the input is MAX_NAME_LEN or the length of the password. + var/input_max_len_is_pass = FALSE + +/obj/machinery/puzzle/password/interact(mob/user, list/modifiers) + if(used && single_use) + return + if(!user.can_perform_action(src, ALLOW_SILICON_REACH) || !user.can_interact_with(src)) + return + var/pass_input = tgui_input_text(user, tgui_text, tgui_title, max_length = input_max_len_is_pass ? length(password) : MAX_NAME_LEN) + if(isnull(pass_input) || !user.can_perform_action(src, ALLOW_SILICON_REACH) || !user.can_interact_with(src)) + return + var/correct = pass_input == password + balloon_alert_to_viewers("[correct ? "correct" : "wrong"] password[correct ? "" : "!"]") + if(!correct) + playsound(src, 'sound/machines/buzz-sigh.ogg', 45, TRUE) + return + used = single_use + update_icon_state() + playsound(src, 'sound/machines/terminal_button07.ogg', 45, TRUE) + on_puzzle_complete() + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/password, 32) + +/obj/machinery/puzzle/password/pin + desc = "A panel that controls something nearby. This one requires a PIN password, so let's start by typing in 1234..." + tgui_text = "Please enter the PIN code." + tgui_title = "What's the PIN code?" + input_max_len_is_pass = TRUE + ///The length of the PIN. Suggestion: something between 4 and 12. + var/pin_length = 6 + ///associate a color to each digit that may be found in the password. + var/list/digit_to_color = list() + +/obj/machinery/puzzle/password/pin/Initialize(mapload) + . = ..() + + for(var/iteration in 1 to pin_length) + password += "[rand(1, 9)]" + + var/list/possible_colors = list( + "white", + "black", + "red", + "green", + "blue", + "yellow", + "orange", + "brown", + "gray", + ) + for(var/digit in 0 to 9) + digit_to_color["[digit]"] = pick_n_take(possible_colors) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/password/pin, 32) // // blockade @@ -445,7 +506,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle_keycardpad, 32) if(isnull(id) || isnull(queue_id)) log_mapping("[src] id:[id] has no id or door id and has been deleted") return INITIALIZE_HINT_QDEL - + SSqueuelinks.add_to_queue(src, queue_id) /obj/effect/puzzle_poddoor_open/MatchedLinks(id, list/partners) @@ -461,3 +522,99 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle_keycardpad, 32) if(isnull(openclose)) openclose = door.density INVOKE_ASYNC(door, openclose ? TYPE_PROC_REF(/obj/machinery/door/poddoor, open) : TYPE_PROC_REF(/obj/machinery/door/poddoor, close)) + +#define MAX_PUZZLE_DOTS_PER_ROW 4 +#define PUZZLE_DOTS_VERTICAL_OFFSET 7 +#define PUZZLE_DOTS_HORIZONTAL_OFFSET 7 + +///A dotted board that can be used as clue for PIN puzzle machinery +/obj/effect/decal/puzzle_dots + name = "dotted board" + desc = "A board filled with colored dots. What could this mean?" + icon = 'icons/obj/fluff/puzzle_small.dmi' + icon_state = "puzzle_dots" + plane = GAME_PLANE //visible over walls + resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | UNACIDABLE | LAVA_PROOF + flags_1 = UNPAINTABLE_1 + ///The id of the puzzle we're linked to. + var/id + +/obj/effect/decal/puzzle_dots/Initialize(mapload) + . = ..() + if(id) + SSqueuelinks.add_to_queue(src, id) + +/obj/effect/decal/puzzle_dots/MatchedLinks(id, partners) + var/obj/machinery/puzzle/password/pin/pad = locate() in partners + var/list/pass_digits = splittext(pad.password, "") + var/pass_len = length(pass_digits) + var/extra_rows = CEILING((pass_len/MAX_PUZZLE_DOTS_PER_ROW)-1, 1) + if(extra_rows) + pixel_y += round(extra_rows*(PUZZLE_DOTS_VERTICAL_OFFSET*0.5)) + for(var/i in 1 to extra_rows) + var/mutable_appearance/row = mutable_appearance(icon, icon_state) + row.pixel_y = -i*PUZZLE_DOTS_VERTICAL_OFFSET + add_overlay(row) + for(var/i in 1 to pass_len) + var/mutable_appearance/colored_dot = mutable_appearance(icon, "puzzle_dot_single") + colored_dot.color = pad.digit_to_color[pass_digits[i]] + colored_dot.pixel_x = PUZZLE_DOTS_HORIZONTAL_OFFSET * ((i-1)%MAX_PUZZLE_DOTS_PER_ROW) + colored_dot.pixel_y -= CEILING((i/MAX_PUZZLE_DOTS_PER_ROW)-1, 1)*PUZZLE_DOTS_VERTICAL_OFFSET + add_overlay(colored_dot) + +#undef MAX_PUZZLE_DOTS_PER_ROW +#undef PUZZLE_DOTS_VERTICAL_OFFSET +#undef PUZZLE_DOTS_HORIZONTAL_OFFSET + + +/obj/effect/decal/cleanable/crayon/puzzle + name = "Password character" + icon_state = "0" + ///The id of the puzzle we're linked to. + var/puzzle_id + +/obj/effect/decal/cleanable/crayon/puzzle/Initialize(mapload, main, type, e_name, graf_rot, alt_icon = null) + . = ..() + name = "number" + if(puzzle_id) + SSqueuelinks.add_to_queue(src, puzzle_id) + +/obj/effect/decal/cleanable/crayon/puzzle/MatchedLinks(id, partners) + var/obj/machinery/puzzle/password/pad = locate() in partners + var/list/pass_character = splittext(pad.password, "") + var/chosen_character = icon_state + if(!findtext(chosen_character, GLOB.is_alphanumeric)) + qdel(src) + return FALSE + icon_state = pick(pass_character) + if(!text2num(icon_state)) + name = "letter" + desc = "A letter vandalizing the station." + return TRUE + +/obj/effect/decal/cleanable/crayon/puzzle/pin + name = "PIN number" + +/obj/effect/decal/cleanable/crayon/puzzle/pin/MatchedLinks(id, partners) + . = ..() + var/obj/machinery/puzzle/password/pin/pad = locate() in partners + add_atom_colour(pad.digit_to_color[icon_state], FIXED_COLOUR_PRIORITY) + +/obj/item/paper/fluff/scrambled_pass + name = "gibberish note" + icon_state = "scrap" + ///The ID associated to the puzzle we're part of. + var/puzzle_id + +/obj/item/paper/fluff/scrambled_pass/Initialize(mapload) + . = ..() + if(mapload && puzzle_id) + SSqueuelinks.add_to_queue(src, puzzle_id) + +/obj/item/paper/fluff/scrambled_pass/MatchedLinks(id, partners) + var/obj/machinery/puzzle/password/pad = locate() in partners + var/scrambled_text = "" + var/list/pass_characters = splittext(pad.password, "") + for(var/i in 1 to rand(200, 300)) + scrambled_text += pick(pass_characters) + add_raw_text(scrambled_text) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 059f78b80c9..f7219921765 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -554,124 +554,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/ectoplasm/mystic icon_state = "mysticplasm" -/obj/item/statuebust - name = "bust" - desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it - icon = 'icons/obj/art/statue.dmi' - icon_state = "bust" - force = 15 - throwforce = 10 - throw_speed = 5 - throw_range = 2 - attack_verb_continuous = list("busts") - attack_verb_simple = list("bust") - var/impressiveness = 45 - -/obj/item/statuebust/Initialize(mapload) - . = ..() - AddElement(/datum/element/art, impressiveness) - AddElement(/datum/element/beauty, 1000) - -/obj/item/statuebust/hippocratic - name = "hippocrates bust" - desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." - icon_state = "hippocratic" - impressiveness = 50 - // If it hits the prob(reference_chance) chance, this is set to TRUE. Adds medical HUD when wielded, but has a 10% slower attack speed and is too bloody to make an oath with. - var/reference = FALSE - // Chance for above. - var/reference_chance = 1 - // Minimum time inbetween oaths. - COOLDOWN_DECLARE(oath_cd) - -/obj/item/statuebust/hippocratic/evil - reference_chance = 100 - -/obj/item/statuebust/hippocratic/Initialize(mapload) - . = ..() - if(prob(reference_chance)) - name = "Solemn Vow" - desc = "Art lovers will cherish the bust of Hippocrates, commemorating a time when medics still thought doing no harm was a good idea." - attack_speed = CLICK_CD_SLOW - reference = TRUE - -/obj/item/statuebust/hippocratic/examine(mob/user) - . = ..() - if(reference) - . += span_notice("You could activate the bust in-hand to swear or forswear a Hippocratic Oath... but it seems like somebody decided it was more of a Hippocratic Suggestion. This thing is caked with bits of blood and gore.") - return - . += span_notice("You can activate the bust in-hand to swear or forswear a Hippocratic Oath! This has no effects except pacifism or bragging rights. Does not remove other sources of pacifism. Do not eat.") - -/obj/item/statuebust/hippocratic/equipped(mob/living/carbon/human/user, slot) - ..() - if(!(slot & ITEM_SLOT_HANDS)) - return - var/datum/atom_hud/our_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - our_hud.show_to(user) - ADD_TRAIT(user, TRAIT_MEDICAL_HUD, type) - -/obj/item/statuebust/hippocratic/dropped(mob/living/carbon/human/user) - ..() - if(HAS_TRAIT_NOT_FROM(user, TRAIT_MEDICAL_HUD, type)) - return - var/datum/atom_hud/our_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - our_hud.hide_from(user) - REMOVE_TRAIT(user, TRAIT_MEDICAL_HUD, type) - -/obj/item/statuebust/hippocratic/attack_self(mob/user) - if(!iscarbon(user)) - to_chat(user, span_warning("You remember how the Hippocratic Oath specifies 'my fellow human beings' and realize that it's completely meaningless to you.")) - return - - if(reference) - to_chat(user, span_warning("As you prepare yourself to swear the Oath, you realize that doing so on a blood-caked bust is probably not a good idea.")) - return - - if(!COOLDOWN_FINISHED(src, oath_cd)) - to_chat(user, span_warning("You've sworn or forsworn an oath too recently to undo your decisions. The bust looks at you with disgust.")) - return - - COOLDOWN_START(src, oath_cd, 5 MINUTES) - - if(HAS_TRAIT_FROM(user, TRAIT_PACIFISM, type)) - to_chat(user, span_warning("You've already sworn a vow. You start preparing to rescind it...")) - if(do_after(user, 5 SECONDS, target = user)) - user.say("Yeah this Hippopotamus thing isn't working out. I quit!", forced = "hippocratic hippocrisy") - REMOVE_TRAIT(user, TRAIT_PACIFISM, type) - - // they can still do it for rp purposes - if(HAS_TRAIT_NOT_FROM(user, TRAIT_PACIFISM, type)) - to_chat(user, span_warning("You already don't want to harm people, this isn't going to do anything!")) - - - to_chat(user, span_notice("You remind yourself of the Hippocratic Oath's contents and prepare to swear yourself to it...")) - if(do_after(user, 4 SECONDS, target = user)) - user.say("I swear to fulfill, to the best of my ability and judgment, this covenant:", forced = "hippocratic oath") - else - return fuck_it_up(user) - if(do_after(user, 2 SECONDS, target = user)) - user.say("I will apply, for the benefit of the sick, all measures that are required, avoiding those twin traps of overtreatment and therapeutic nihilism.", forced = "hippocratic oath") - else - return fuck_it_up(user) - if(do_after(user, 3 SECONDS, target = user)) - user.say("I will remember that I remain a member of society, with special obligations to all my fellow human beings, those sound of mind and body as well as the infirm.", forced = "hippocratic oath") - else - - return fuck_it_up(user) - if(do_after(user, 3 SECONDS, target = user)) - user.say("If I do not violate this oath, may I enjoy life and art, respected while I live and remembered with affection thereafter. May I always act so as to preserve the finest traditions of my calling and may I long experience the joy of healing those who seek my help.", forced = "hippocratic oath") - else - return fuck_it_up(user) - - to_chat(user, span_notice("Contentment, understanding, and purpose washes over you as you finish the oath. You consider for a second the concept of harm and shudder.")) - ADD_TRAIT(user, TRAIT_PACIFISM, type) - -// Bully the guy for fucking up. -/obj/item/statuebust/hippocratic/proc/fuck_it_up(mob/living/carbon/user) - to_chat(user, span_warning("You forget what comes next like a dumbass. The Hippocrates bust looks down on you, disappointed.")) - user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2) - COOLDOWN_RESET(src, oath_cd) - /obj/item/tailclub name = "tail club" desc = "For the beating to death of lizards with their own tails." diff --git a/code/game/objects/structures/tank_holder.dm b/code/game/objects/structures/tank_holder.dm index 9b5b33d8417..5b7c9d2ed55 100644 --- a/code/game/objects/structures/tank_holder.dm +++ b/code/game/objects/structures/tank_holder.dm @@ -142,3 +142,7 @@ /obj/structure/tank_holder/extinguisher/advanced icon_state = "holder_foam_extinguisher" tank = /obj/item/extinguisher/advanced + +/obj/structure/tank_holder/extinguisher/anti + icon_state = "holder_extinguisher" + tank = /obj/item/extinguisher/anti diff --git a/code/game/sound.dm b/code/game/sound.dm index e575534bdae..17275f5f3a6 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -424,4 +424,10 @@ 'sound/items/reel4.ogg', 'sound/items/reel5.ogg', ) + if(SFX_RATTLE) + soundin = pick( + 'sound/items/rattle1.ogg', + 'sound/items/rattle2.ogg', + 'sound/items/rattle3.ogg', + ) return soundin diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index a0d24dec8da..1df1d7c24bb 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -22,7 +22,7 @@ . = ..() if(fragile) - AddElement(/datum/element/shatters_when_thrown) + AddElement(/datum/element/can_shatter) /obj/item/plate/attackby(obj/item/I, mob/user, params) if(!IS_EDIBLE(I)) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index f41f607dabe..24e5274f7fb 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -456,8 +456,8 @@ /datum/holiday/france/greet() return "Do you hear the people sing?" -/datum/holiday/hotdogday //I have plans for this. - name = "National Hot Dog Day" +/datum/holiday/hotdogday + name = HOTDOG_DAY begin_day = 17 begin_month = JULY diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm index 20210d56cc9..8a2949f9893 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm @@ -33,6 +33,10 @@ new_replica.name = "[appearance_object.name][obvious_replica ? " replica" : ""]" new_replica.desc = "[appearance_object.desc][obvious_replica ? " ..except this one is a replica.": ""]" + + new_replica.pixel_y = pixel_y + new_replica.pixel_x = pixel_x + qdel(appearance_object) qdel(src) return INITIALIZE_HINT_QDEL @@ -129,3 +133,68 @@
sometimes i can catch them moving

we should have never come here"} + +/obj/item/paper/fluff/museum/chefs_ultimatum + name = "old note" + default_raw_text = {"I messed it up big times. +
I broke the button and now I'm stuck. +
Anyway, I don't have the key on me. I flushed it down. +
Hell knows where it's now, shit's like all linked together here."} + +/obj/item/paper/fluff/museum/numbers_on_walls + name = "reprimanding note" + default_raw_text = "Please refraim from writing the pass all over the place. I know you've the memory of a goldfish, but, like, just put it on a piece of paper, no?" + +/obj/effect/mob_spawn/corpse/human/skeleton/museum_chef + name = "Dead Museum Cafeteria Chef" + mob_name = "Nameless Chef" + outfit = /datum/outfit/museum_chef + +/datum/outfit/museum_chef + name = "Dead Museum Cafeteria Chef" + uniform = /obj/item/clothing/under/color/green + suit = /obj/item/clothing/suit/toggle/chef + head = /obj/item/clothing/head/utility/chefhat + shoes = /obj/item/clothing/shoes/laceup + mask = /obj/item/clothing/mask/fakemoustache/italian + +/obj/machinery/vending/hotdog/museum + obj_flags = parent_type::obj_flags|NO_DECONSTRUCTION + onstation_override = TRUE + +#define CAFE_KEYCARD_TOILETS "museum_cafe_key_toilets" + +///Do not place these beyond the cafeteria shutters, or you might lock people out of reaching it. +/obj/structure/toilet/museum + +/obj/structure/toilet/museum/Initialize(mapload) + . = ..() + if(mapload) + SSqueuelinks.add_to_queue(src, CAFE_KEYCARD_TOILETS) + +/obj/item/keycard/cafeteria + name = "museum cafeteria keycard" + color = COLOR_OLIVE + puzzle_id = "museum_cafeteria" + desc = "The key to the cafeteria, as the name implies." + +/obj/item/keycard/cafeteria/Initialize(mapload) + . = ..() + if(mapload) + SSqueuelinks.add_to_queue(src, CAFE_KEYCARD_TOILETS) + return INITIALIZE_HINT_LATELOAD + +/obj/item/keycard/cafeteria/LateInitialize() + . = ..() + if(SSqueuelinks.queues[CAFE_KEYCARD_TOILETS]) + SSqueuelinks.pop_link(CAFE_KEYCARD_TOILETS) + +/obj/item/keycard/cafeteria/MatchedLinks(id, partners) + if(id != CAFE_KEYCARD_TOILETS) + return ..() + var/obj/structure/toilet/destination = pick(partners) + forceMove(destination) + destination.w_items += w_class + destination.contents += src + +#undef CAFE_KEYCARD_TOILETS diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm b/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm index 5647b5aca23..0db718e399b 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm @@ -76,12 +76,12 @@ SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) qdel(src) -/obj/machinery/puzzle_button/meatderelict +/obj/machinery/puzzle/button/meatderelict name = "lockdown panel" desc = "A panel that controls the lockdown of this outpost." id = "md_prevault" -/obj/machinery/puzzle_button/meatderelict/open_doors() +/obj/machinery/puzzle/button/meatderelict/on_puzzle_complete() . = ..() playsound(src, 'sound/effects/alert.ogg', 100, TRUE) visible_message(span_warning("[src] lets out an alarm as the lockdown is lifted!")) @@ -121,7 +121,7 @@ /obj/lightning_thrower/Initialize(mapload) . = ..() - START_PROCESSING(SSprocessing, src) + START_PROCESSING(SSprocessing, src) /obj/lightning_thrower/Destroy() . = ..() diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index bbd0a84504f..e34511e9e0d 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -424,6 +424,7 @@ /datum/reagent/consumable/bbqsauce = list("condi_bbq", "BBQ sauce", "Hand wipes not included."), /datum/reagent/consumable/peanut_butter = list("condi_peanutbutter", "Peanut Butter", "A creamy paste made from ground peanuts."), /datum/reagent/consumable/cherryjelly = list("condi_cherryjelly", "Cherry Jelly", "A jar of super-sweet cherry jelly."), + /datum/reagent/consumable/mayonnaise = list("condi_mayo", "Mayonnaise", "Not an instrument."), ) /// Can't use initial(name) for this. This stores the name set by condimasters. var/originalname = "condiment" @@ -516,3 +517,15 @@ originalname = "sugar" volume = 5 list_reagents = list(/datum/reagent/consumable/sugar = 5) + +/obj/item/reagent_containers/condiment/pack/soysauce + name = "soy sauce pack" + originalname = "soy sauce" + volume = 5 + list_reagents = list(/datum/reagent/consumable/soysauce = 5) + +/obj/item/reagent_containers/condiment/pack/mayonnaise + name = "mayonnaise pack" + originalname = "mayonnaise" + volume = 5 + list_reagents = list(/datum/reagent/consumable/mayonnaise = 5) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index f101c5b2f74..6befc413bb0 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -357,6 +357,7 @@ continue var/obj/obj_to_dump = new dump_path(loc) + on_dispense(obj_to_dump) step(obj_to_dump, pick(GLOB.alldirs)) found_anything = TRUE dump_amount++ @@ -719,7 +720,8 @@ if(!dump_path) continue if(record.amount > LAZYLEN(record.returned_products)) //always give out new stuff that costs before free returned stuff, because of the risk getting gibbed involved - new dump_path(get_turf(src)) + var/obj/item/free_stuff = new dump_path(get_turf(src)) + on_dispense(free_stuff) else var/obj/returned_obj_to_dump = LAZYACCESS(record.returned_products, LAZYLEN(record.returned_products)) //first in, last out LAZYREMOVE(record.returned_products, returned_obj_to_dump) @@ -1381,6 +1383,7 @@ var/obj/item/vended_item if(!LAZYLEN(item_record.returned_products)) //always give out free returned stuff first, e.g. to avoid walling a traitor objective in a bag behind paid items vended_item = new item_record.product_path(get_turf(src)) + on_dispense(vended_item) else vended_item = LAZYACCESS(item_record.returned_products, LAZYLEN(item_record.returned_products)) //first in, last out LAZYREMOVE(item_record.returned_products, vended_item) @@ -1395,6 +1398,10 @@ SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[item_record.product_path]")) vend_ready = TRUE +///A proc meant to perform custom behavior on newly dispensed items. +/obj/machinery/vending/proc/on_dispense(obj/item/vended_item) + return + /** * Returns the balance that the vendor will use for proceeding payment. Most vendors would want to use the user's * card's account credits balance. diff --git a/code/modules/vending/hotdog.dm b/code/modules/vending/hotdog.dm new file mode 100644 index 00000000000..094beccb413 --- /dev/null +++ b/code/modules/vending/hotdog.dm @@ -0,0 +1,56 @@ +///A special hotdog vending machine found in the cafeteria at the museum away mission, or during the hotdog holiday. +/obj/machinery/vending/hotdog + name = "\improper Hotdoggo-Vend" + desc = "An outdated hotdog vending machine, its prices stuck to those of 20 or so years ago." + icon_state = "hotdog-vendor" + icon_deny = "hotdog-vendor-deny" + panel_type = "panel17" + product_slogans = "Meatier than ever!;Now with 20% more MSG!;HOTDOGS!;Now Tirizan-friendly!" + product_ads = "Your best and only automatic hotdog dispenser!;Serving you the finest buns since 2469!;Comes in 12 different flavors!" + vend_reply = "Have a scrumptious meal!" + light_mask = "hotdog-vendor-light-mask" + default_price = PAYCHECK_LOWER + product_categories = list( + list( + "name" = "Hotdogs", + "icon" = "hotdog", + "products" = list( + /obj/item/food/hotdog = 8, + /obj/item/food/pigblanket = 4, + /obj/item/food/danish_hotdog = 4, + /obj/item/food/little_hawaii_hotdog = 4, + /obj/item/food/butterdog = 4, + /obj/item/food/plasma_dog_supreme = 2, + ), + ), + list( + name = "Sausages", + "icon" = FA_ICON_BACON, + "products" = list( + /obj/item/food/sausage = 8, + /obj/item/food/tiziran_sausage = 4, + /obj/item/food/fried_blood_sausage = 4, + ), + ), + list( + "name" = "Sauces", + "icon" = FA_ICON_BOWL_FOOD, + "products" = list( + /obj/item/reagent_containers/condiment/pack/ketchup = 4, + /obj/item/reagent_containers/condiment/pack/hotsauce = 4, + /obj/item/reagent_containers/condiment/pack/bbqsauce = 4, + /obj/item/reagent_containers/condiment/pack/soysauce = 4, + /obj/item/reagent_containers/condiment/pack/mayonnaise = 4, + ), + ), + ) + refill_canister = /obj/item/vending_refill/hotdog + +/obj/item/vending_refill/hotdog + machine_name = "\improper Hotdoggo-Vend" + icon_state = "refill_snack" + +/// Cute little thing that sets it apart from the other food vending mahicnes. I mean, you don't find this every day. +/obj/machinery/vending/hotdog/on_dispense(obj/item/vended_item) + if(istype(vended_item, /obj/item/food)) + ADD_TRAIT(vended_item, TRAIT_FOOD_CHEF_MADE, VENDING_MACHINE_TRAIT) diff --git a/icons/obj/fluff/general.dmi b/icons/obj/fluff/general.dmi index 1aa7ae5c898..f99cbaabc9a 100644 Binary files a/icons/obj/fluff/general.dmi and b/icons/obj/fluff/general.dmi differ diff --git a/icons/obj/fluff/puzzle_small.dmi b/icons/obj/fluff/puzzle_small.dmi index 1d94c0c8034..2f6ff9ebe32 100644 Binary files a/icons/obj/fluff/puzzle_small.dmi and b/icons/obj/fluff/puzzle_small.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index d7e3d73f861..aea93b956fc 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/machines/vending.dmi b/icons/obj/machines/vending.dmi index a5db6caa6e2..bf3c42bde16 100644 Binary files a/icons/obj/machines/vending.dmi and b/icons/obj/machines/vending.dmi differ diff --git a/icons/obj/machines/wallmounts.dmi b/icons/obj/machines/wallmounts.dmi index 12a9c8e418f..e849746eb0a 100644 Binary files a/icons/obj/machines/wallmounts.dmi and b/icons/obj/machines/wallmounts.dmi differ diff --git a/icons/obj/poster.dmi b/icons/obj/poster.dmi index c1120d0be0b..8193b38e1f2 100644 Binary files a/icons/obj/poster.dmi and b/icons/obj/poster.dmi differ diff --git a/sound/attributions.txt b/sound/attributions.txt index 82486a5735d..c81aa3e664b 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -117,6 +117,9 @@ https://freesound.org/people/humanoide9000/sounds/330293/ reel1.ogg, reel2.ogg, reel3.ogg, reel4.ogg and reel5.ogg adapted from pixabay. Free for use under the Pixabay Content License (https://pixabay.com/service/license-summary/): https://pixabay.com/sound-effects/reel-78063/ +rattle1.ogg, rattle2.ogg and rattle3.ogg adapted from pixabay. Free for use under the Pixabay Content License (https://pixabay.com/service/license-summary/): +https://pixabay.com/sound-effects/chain-6073/ + throw.ogg, throwhard.ogg and throwsoft.ogg (Royalty-Free and Copyright-Free) are adapted from Jam FX, SmartSound FX and Epic Stock Media in : https://uppbeat.io/sfx/whoosh-swift-cut/7727/23617 https://uppbeat.io/sfx/whoosh-air-punch/114/1168 diff --git a/sound/items/rattle1.ogg b/sound/items/rattle1.ogg new file mode 100644 index 00000000000..71c4110fafe Binary files /dev/null and b/sound/items/rattle1.ogg differ diff --git a/sound/items/rattle2.ogg b/sound/items/rattle2.ogg new file mode 100644 index 00000000000..30f0e2d85ea Binary files /dev/null and b/sound/items/rattle2.ogg differ diff --git a/sound/items/rattle3.ogg b/sound/items/rattle3.ogg new file mode 100644 index 00000000000..ef1cfc6bf6b Binary files /dev/null and b/sound/items/rattle3.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 8958f0a7710..f7d163ed20c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -725,6 +725,7 @@ #include "code\controllers\subsystem\persistence\custom_outfits.dm" #include "code\controllers\subsystem\persistence\engravings.dm" #include "code\controllers\subsystem\persistence\photo_albums.dm" +#include "code\controllers\subsystem\persistence\piggy_banks.dm" #include "code\controllers\subsystem\persistence\recipes.dm" #include "code\controllers\subsystem\persistence\scars.dm" #include "code\controllers\subsystem\persistence\tattoos.dm" @@ -1368,6 +1369,7 @@ #include "code\datums\elements\bugkiller_reagent.dm" #include "code\datums\elements\bump_click.dm" #include "code\datums\elements\can_barricade.dm" +#include "code\datums\elements\can_shatter.dm" #include "code\datums\elements\caseless.dm" #include "code\datums\elements\chemical_transfer.dm" #include "code\datums\elements\chewable.dm" @@ -1461,7 +1463,6 @@ #include "code\datums\elements\rust.dm" #include "code\datums\elements\selfknockback.dm" #include "code\datums\elements\series.dm" -#include "code\datums\elements\shatters_when_thrown.dm" #include "code\datums\elements\sideway_movement.dm" #include "code\datums\elements\simple_flying.dm" #include "code\datums\elements\skill_reward.dm" @@ -2214,6 +2215,7 @@ #include "code\game\objects\items\botpad_remote.dm" #include "code\game\objects\items\boxcutter.dm" #include "code\game\objects\items\broom.dm" +#include "code\game\objects\items\busts_and_figurines.dm" #include "code\game\objects\items\cardboard_cutouts.dm" #include "code\game\objects\items\cards_ids.dm" #include "code\game\objects\items\chainsaw.dm" @@ -2268,6 +2270,7 @@ #include "code\game\objects\items\paint.dm" #include "code\game\objects\items\paiwire.dm" #include "code\game\objects\items\pet_carrier.dm" +#include "code\game\objects\items\piggy_bank.dm" #include "code\game\objects\items\pillow.dm" #include "code\game\objects\items\pinpointer.dm" #include "code\game\objects\items\pitchfork.dm" @@ -5943,6 +5946,7 @@ #include "code\modules\vending\engineering.dm" #include "code\modules\vending\engivend.dm" #include "code\modules\vending\games.dm" +#include "code\modules\vending\hotdog.dm" #include "code\modules\vending\liberation.dm" #include "code\modules\vending\liberation_toy.dm" #include "code\modules\vending\magivend.dm" diff --git a/tools/UpdatePaths/Scripts/81465_puzzle machinery.txt b/tools/UpdatePaths/Scripts/81465_puzzle machinery.txt new file mode 100644 index 00000000000..c6514417c60 --- /dev/null +++ b/tools/UpdatePaths/Scripts/81465_puzzle machinery.txt @@ -0,0 +1,2 @@ +/obj/machinery/puzzle_button/@SUBTYPES : /obj/machinery/puzzle/button/@SUBTYPES{@OLD} +/obj/machinery/puzzle_keycardpad/@SUBTYPES : /obj/machinery/puzzle/keycardpad/@SUBTYPES{@OLD} \ No newline at end of file