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