diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 1c08add6097..49e205fbb14 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -207,7 +207,7 @@ /area/ruin/unpowered) "F" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/store/cake/birthday, +/obj/item/food/cake/birthday, /turf/open/floor/wood{ initial_gas_mix = "LAVALAND_ATMOS" }, diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 10e2869fd54..5a620d04096 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -499,7 +499,7 @@ /obj/structure/table, /obj/item/kitchen/knife/butcher, /obj/item/reagent_containers/food/drinks/beer, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat/slab/human, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -1508,7 +1508,7 @@ /area/awaymission/bmpship/fore) "fO" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat/slab/human, /turf/open/floor/plasteel/showroomfloor, /area/awaymission/bmpship/aft) "fP" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 12a5f73435b..fc5ca15ee37 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -2699,6 +2699,21 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) +"ait" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/plasteel/dark/telecomms, +/area/tcommsat/server) "aiz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -56371,25 +56386,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"ccF" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - external_pressure_bound = 140; - name = "server vent"; - pressure_checks = 0 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/tcommsat/server) "ccH" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -56404,30 +56400,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"ccI" = ( -/obj/structure/table/glass, -/obj/item/folder/yellow, -/obj/structure/cable, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/tcommsat/server) -"ccJ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/tcommsat/server) "ccM" = ( /obj/structure/table/wood, /obj/item/pinpointer/nuke, @@ -57345,57 +57317,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"cev" = ( -/obj/machinery/telecomms/broadcaster/preset_left, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 5 - }, -/turf/open/floor/circuit/telecomms/mainframe, -/area/tcommsat/server) -"cex" = ( -/obj/machinery/telecomms/message_server/preset, -/obj/machinery/atmospherics/pipe/manifold/general/hidden{ - dir = 1 - }, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/tcommsat/server) -"cey" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/tcommsat/server) -"cez" = ( -/obj/machinery/telecomms/hub/preset, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 4 - }, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/tcommsat/server) -"ceA" = ( -/obj/machinery/blackbox_recorder, -/obj/machinery/atmospherics/pipe/manifold/general/hidden{ - dir = 1 - }, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/tcommsat/server) -"ceB" = ( -/obj/machinery/telecomms/broadcaster/preset_right, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 9 - }, -/turf/open/floor/circuit/telecomms/mainframe, -/area/tcommsat/server) "ceD" = ( /obj/machinery/power/smes{ charge = 5e+006 @@ -58217,20 +58138,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) -"cgk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/general/hidden, -/turf/open/floor/plasteel/dark/telecomms, -/area/tcommsat/server) "cgm" = ( /obj/machinery/ntnet_relay, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -61222,11 +61129,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/tcommsat/server) -"cmE" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/general/hidden, -/turf/open/floor/plating, -/area/tcommsat/server) "cmF" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -62077,13 +61979,6 @@ "coe" = ( /turf/closed/wall, /area/tcommsat/server) -"cof" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/tcommsat/server) "cog" = ( /obj/machinery/holopad, /obj/effect/turf_decal/stripes/line{ @@ -89984,6 +89879,23 @@ }, /turf/open/floor/plasteel/dark, /area/science/genetics) +"dtf" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/tcommsat/server) "dtg" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -108452,6 +108364,10 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"fZt" = ( +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/tcommsat/server) "gaK" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -108761,6 +108677,13 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmospherics_engine) +"had" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 1 + }, +/turf/open/floor/plating, +/area/tcommsat/server) "hdH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ @@ -109270,21 +109193,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"iDI" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/general/hidden, -/turf/open/floor/plasteel/dark/telecomms, -/area/tcommsat/server) "iFA" = ( /turf/open/floor/plasteel/white, /area/maintenance/department/science) @@ -109351,6 +109259,23 @@ /obj/item/storage/crayons, /turf/open/floor/plasteel, /area/security/prison) +"iOJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/tcommsat/server) "iQh" = ( /obj/structure/bodycontainer/morgue{ dir = 1 @@ -110152,6 +110077,11 @@ }, /turf/open/floor/plating, /area/security/prison) +"lia" = ( +/obj/machinery/telecomms/message_server/preset, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/tcommsat/server) "ljP" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -110512,6 +110442,11 @@ /obj/structure/grille, /turf/closed/wall/r_wall, /area/space) +"mcn" = ( +/obj/machinery/blackbox_recorder, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/tcommsat/server) "mdG" = ( /obj/machinery/light/small{ dir = 1 @@ -111787,6 +111722,14 @@ "pxG" = ( /turf/closed/wall, /area/medical/pharmacy) +"pzj" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/tcommsat/server) "pAL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random{ @@ -111862,6 +111805,15 @@ }, /turf/closed/wall, /area/security/checkpoint/science/research) +"pHV" = ( +/obj/structure/table/glass, +/obj/item/folder/yellow, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/tcommsat/server) "pJb" = ( /obj/item/kirbyplants/random, /turf/open/floor/plasteel, @@ -112722,6 +112674,10 @@ /obj/structure/bed/roller, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"rWL" = ( +/obj/machinery/telecomms/broadcaster/preset_left, +/turf/open/floor/circuit/telecomms/mainframe, +/area/tcommsat/server) "rYU" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -112737,6 +112693,20 @@ }, /turf/open/floor/plasteel, /area/medical/medbay/central) +"rZb" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/plasteel/dark/telecomms, +/area/tcommsat/server) "saw" = ( /turf/closed/wall/r_wall, /area/science/misc_lab/range) @@ -112963,6 +112933,23 @@ }, /turf/open/floor/plating, /area/security/prison) +"sUc" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/tcommsat/server) "sUE" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -114343,6 +114330,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/security/prison) +"wRg" = ( +/obj/machinery/telecomms/broadcaster/preset_right, +/turf/open/floor/circuit/telecomms/mainframe, +/area/tcommsat/server) "wTa" = ( /obj/machinery/computer/nanite_cloud_controller, /obj/effect/turf_decal/bot, @@ -152674,8 +152665,8 @@ bUH bWX bZf caT -ccF -cev +ccH +rWL bUF cid cjE @@ -152932,7 +152923,7 @@ bWX bZg caU ccH -cey +bUF bUF cie cjF @@ -153188,14 +153179,14 @@ bUI bWY bUF bUF -ccH -cex -cgk -iDI -iDI -iDI -cmE -cof +dtf +lia +rZb +ait +ait +ait +had +pzj cpI cqY csw @@ -153445,8 +153436,8 @@ bUI bUI bUI caY -ccH -cey +sUc +bUF bUF cig bUI @@ -153702,8 +153693,8 @@ bUK bWZ bZi bUF -ccI -cez +pHV +fZt cgm ccH cjG @@ -153959,8 +153950,8 @@ bUI bUI bUI caY -ccH -cey +sUc +bUF bUF cig bUI @@ -154216,13 +154207,13 @@ bUI bXa bUF bUF -ccH -ceA -iDI -iDI -iDI -iDI -cmE +iOJ +mcn +ait +ait +ait +ait +had coj cpM cqY @@ -154474,7 +154465,7 @@ bWX bZj caZ ccH -cey +bUF ccH cih cjH @@ -154730,8 +154721,8 @@ bUG bWX bZk cba -ccJ -ceB +ccH +wRg ccH cii cjI diff --git a/_maps/shuttles/emergency_arena.dmm b/_maps/shuttles/emergency_arena.dmm index 1314b8a7325..14f0c918e46 100644 --- a/_maps/shuttles/emergency_arena.dmm +++ b/_maps/shuttles/emergency_arena.dmm @@ -1,21 +1,4 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/indestructible/necropolis, -/area/shuttle_arena) -"b" = ( -/turf/open/indestructible/necropolis/air, -/area/shuttle_arena) -"c" = ( -/obj/effect/forcefield/arena_shuttle, -/turf/open/indestructible/necropolis/air, -/area/shuttle_arena) -"d" = ( -/turf/open/lava/smooth, -/area/shuttle_arena) -"e" = ( -/obj/effect/landmark/shuttle_arena_entrance, -/turf/open/indestructible/necropolis/air, -/area/shuttle_arena) "f" = ( /turf/template_noop, /area/template_noop) @@ -71,34 +54,6 @@ /area/shuttle/escape/arena) (1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f g g g @@ -123,34 +78,6 @@ g f "} (2,1,1) = {" -a -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -f g g g @@ -175,34 +102,6 @@ g g "} (3,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -f g h j @@ -227,34 +126,6 @@ p g "} (4,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -b -b -b -e -b -a -f g h k @@ -279,34 +150,6 @@ p g "} (5,1,1) = {" -a -b -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -a -f g i h @@ -331,34 +174,6 @@ p g "} (6,1,1) = {" -a -a -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -a -f g i i @@ -383,34 +198,6 @@ p g "} (7,1,1) = {" -a -b -b -b -b -b -b -b -b -a -b -d -d -d -b -b -b -a -a -b -b -e -b -b -b -b -a -f g i i @@ -435,34 +222,6 @@ p g "} (8,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -a -f g i h @@ -487,34 +246,6 @@ p g "} (9,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -a -f g h k @@ -539,34 +270,6 @@ p g "} (10,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -f g h j @@ -591,34 +294,6 @@ g g "} (11,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -f g g g @@ -642,2031 +317,3 @@ g g f "} -(12,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -"} -(13,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -b -b -b -b -b -a -b -b -b -e -b -b -a -b -b -b -b -b -b -b -b -b -b -d -d -d -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(15,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -d -d -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(16,1,1) = {" -a -b -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -b -b -a -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -b -b -a -"} -(17,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -d -d -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(18,1,1) = {" -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(19,1,1) = {" -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(20,1,1) = {" -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -a -a -b -b -b -a -"} -(21,1,1) = {" -a -c -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -b -b -b -b -a -b -b -b -a -b -b -b -a -"} -(22,1,1) = {" -a -c -b -b -b -b -b -b -b -b -d -d -b -b -b -b -b -b -b -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -b -b -b -b -b -a -b -b -b -a -b -b -b -a -"} -(23,1,1) = {" -a -c -b -b -b -b -b -b -b -b -d -d -d -b -b -b -b -b -b -d -d -b -b -b -b -b -b -b -e -b -b -b -b -b -d -b -b -b -b -b -b -a -b -e -b -a -b -b -b -a -"} -(24,1,1) = {" -a -c -b -b -b -b -b -b -b -b -b -b -d -d -b -b -b -b -b -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -d -b -b -b -b -b -b -a -b -b -b -a -b -b -b -a -"} -(25,1,1) = {" -a -a -a -a -a -b -b -b -b -b -b -b -b -d -b -b -b -b -b -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -d -b -b -b -b -b -b -a -a -a -a -a -b -b -b -a -"} -(26,1,1) = {" -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -e -a -"} -(27,1,1) = {" -a -a -a -a -b -b -b -b -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -b -b -b -b -b -b -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(28,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -b -b -b -b -b -b -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(29,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(30,1,1) = {" -a -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(31,1,1) = {" -a -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(32,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -a -"} -(33,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(34,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(35,1,1) = {" -a -b -b -e -b -b -b -b -b -b -b -b -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -b -b -b -a -"} -(36,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -a -"} -(37,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -a -b -b -b -b -b -b -b -b -a -"} -(38,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -e -a -b -b -b -b -b -b -b -b -a -"} -(39,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -b -b -b -b -b -b -b -b -a -"} -(40,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -a -"} -(41,1,1) = {" -a -b -b -b -a -a -a -a -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -b -b -b -b -b -a -b -b -b -b -b -b -b -e -a -"} -(42,1,1) = {" -a -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(43,1,1) = {" -a -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(44,1,1) = {" -a -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -e -b -b -b -b -b -b -b -b -b -a -a -a -a -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -a -b -b -a -"} -(45,1,1) = {" -a -b -b -b -b -e -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -e -b -b -d -d -d -d -d -b -b -b -b -b -b -b -b -b -b -b -a -b -b -a -"} -(46,1,1) = {" -a -b -b -b -b -b -b -b -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -a -b -b -a -"} -(47,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -b -b -b -b -e -b -b -b -b -b -a -"} -(48,1,1) = {" -a -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -a -"} -(49,1,1) = {" -a -d -d -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -d -b -b -b -b -b -b -b -b -b -a -"} -(50,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index 16596547877..af81ca87d29 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -810,7 +810,7 @@ /area/shuttle/escape) "Aq" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/snacks/cakeslice/chocolate{ +/obj/item/food/cakeslice/chocolate{ pixel_x = 16; pixel_y = -8 }, diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm index 27f3f1b198c..8f9369c8341 100644 --- a/_maps/shuttles/emergency_imfedupwiththisworld.dmm +++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm @@ -78,7 +78,7 @@ /area/shuttle/escape) "o" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/store/cake/birthday, +/obj/item/food/cake/birthday, /turf/open/floor/carpet, /area/shuttle/escape) "p" = ( @@ -143,7 +143,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/cakeslice/birthday, +/obj/item/food/cakeslice/birthday, /turf/open/floor/carpet, /area/shuttle/escape) "x" = ( diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 5cf7597bec8..2c9e2ed5936 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -176,7 +176,7 @@ /turf/open/floor/carpet/red, /area/shuttle/escape/luxury) "aF" = ( -/obj/item/reagent_containers/food/snacks/cakeslice/chocolate{ +/obj/item/food/cakeslice/chocolate{ pixel_y = 1 }, /obj/structure/table/wood/fancy/black, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 1cc371124df..7515ea76a55 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -244,13 +244,13 @@ dir = 1 }, /obj/item/food/butterdog, -/obj/item/reagent_containers/food/snacks/cakeslice/apple, -/obj/item/reagent_containers/food/snacks/cakeslice/brioche, -/obj/item/reagent_containers/food/snacks/cakeslice/cheese, -/obj/item/reagent_containers/food/snacks/cakeslice/chocolate, -/obj/item/reagent_containers/food/snacks/cakeslice/lemon, -/obj/item/reagent_containers/food/snacks/cakeslice/lime, -/obj/item/reagent_containers/food/snacks/cakeslice/orange, +/obj/item/food/cakeslice/apple, +/obj/item/food/cakeslice/brioche, +/obj/item/food/cakeslice/cheese, +/obj/item/food/cakeslice/chocolate, +/obj/item/food/cakeslice/lemon, +/obj/item/food/cakeslice/lime, +/obj/item/food/cakeslice/orange, /turf/open/floor/plasteel/cafeteria, /area/shuttle/escape) "aH" = ( diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index 4cdaf8380f9..62c481011b9 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -277,7 +277,7 @@ "aW" = ( /obj/docking_port/mobile/emergency{ height = 15; - name = "Box emergency shuttle" + name = "Mother Russia Bleeds" }, /obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Airlock" diff --git a/_maps/templates/the_arena.dmm b/_maps/templates/the_arena.dmm new file mode 100644 index 00000000000..acf086c041f --- /dev/null +++ b/_maps/templates/the_arena.dmm @@ -0,0 +1,2622 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/necropolis, +/area/shuttle_arena) +"b" = ( +/turf/open/indestructible/necropolis/air, +/area/shuttle_arena) +"c" = ( +/obj/effect/forcefield/arena_shuttle, +/turf/open/indestructible/necropolis/air, +/area/shuttle_arena) +"d" = ( +/turf/open/lava/smooth, +/area/shuttle_arena) +"e" = ( +/obj/effect/landmark/shuttle_arena_entrance, +/turf/open/indestructible/necropolis/air, +/area/shuttle_arena) +"f" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(2,1,1) = {" +a +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(3,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(4,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +b +b +b +e +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(5,1,1) = {" +a +b +e +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(6,1,1) = {" +a +a +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(7,1,1) = {" +a +b +b +b +b +b +b +b +b +a +b +d +d +d +b +b +b +a +a +b +b +e +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(8,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +d +d +d +d +b +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(9,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(10,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(11,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(12,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +f +"} +(13,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(14,1,1) = {" +a +b +b +b +b +b +a +b +b +b +e +b +b +a +b +b +b +b +b +b +b +b +b +b +d +d +d +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(15,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +d +d +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(16,1,1) = {" +a +b +e +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +b +b +a +b +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +b +b +a +"} +(17,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +e +b +b +b +b +b +d +d +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(18,1,1) = {" +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(19,1,1) = {" +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(20,1,1) = {" +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +a +a +b +b +b +a +"} +(21,1,1) = {" +a +c +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +b +b +b +b +a +b +b +b +a +b +b +b +a +"} +(22,1,1) = {" +a +c +b +b +b +b +b +b +b +b +d +d +b +b +b +b +b +b +b +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +b +b +b +b +b +a +b +b +b +a +b +b +b +a +"} +(23,1,1) = {" +a +c +b +b +b +b +b +b +b +b +d +d +d +b +b +b +b +b +b +d +d +b +b +b +b +b +b +b +e +b +b +b +b +b +d +b +b +b +b +b +b +a +b +e +b +a +b +b +b +a +"} +(24,1,1) = {" +a +c +b +b +b +b +b +b +b +b +b +b +d +d +b +b +b +b +b +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +d +b +b +b +b +b +b +a +b +b +b +a +b +b +b +a +"} +(25,1,1) = {" +a +a +a +a +a +b +b +b +b +b +b +b +b +d +b +b +b +b +b +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +d +b +b +b +b +b +b +a +a +a +a +a +b +b +b +a +"} +(26,1,1) = {" +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +b +b +b +b +b +b +b +b +b +b +b +b +e +a +"} +(27,1,1) = {" +a +a +a +a +b +b +b +b +e +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +a +b +b +b +b +b +b +d +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(28,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +a +b +b +b +b +b +b +d +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(29,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(30,1,1) = {" +a +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +a +a +a +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(31,1,1) = {" +a +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(32,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +a +"} +(33,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(34,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(35,1,1) = {" +a +b +b +e +b +b +b +b +b +b +b +b +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +a +a +a +a +a +a +a +b +b +b +b +b +b +a +"} +(36,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +a +"} +(37,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +a +b +b +b +b +b +b +b +b +a +"} +(38,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +e +a +b +b +b +b +b +b +b +b +a +"} +(39,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +a +a +a +b +b +b +b +b +b +b +b +a +"} +(40,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +a +"} +(41,1,1) = {" +a +b +b +b +a +a +a +a +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +b +b +b +b +b +a +b +b +b +b +b +b +b +e +a +"} +(42,1,1) = {" +a +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(43,1,1) = {" +a +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(44,1,1) = {" +a +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +e +b +b +b +b +b +b +b +b +b +a +a +a +a +d +d +d +d +d +b +b +b +b +b +b +b +b +b +b +b +a +b +b +a +"} +(45,1,1) = {" +a +b +b +b +b +e +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +a +e +b +b +d +d +d +d +d +b +b +b +b +b +b +b +b +b +b +b +a +b +b +a +"} +(46,1,1) = {" +a +b +b +b +b +b +b +b +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +d +d +d +b +b +b +b +b +b +b +b +a +b +b +a +"} +(47,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +b +b +b +b +b +e +b +b +b +b +b +a +"} +(48,1,1) = {" +a +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +b +b +b +b +b +b +b +b +b +a +"} +(49,1,1) = {" +a +d +d +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +d +b +b +b +b +b +b +b +b +b +a +"} +(50,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 41753303a69..255df74d7f3 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -350,6 +350,7 @@ //MULTIPIPES //IF YOU EVER CHANGE THESE CHANGE SPRITES TO MATCH. +//layer = initial(layer) + piping_layer / 1000 in atmospherics/update_icon() to determine order of pipe overlap #define PIPING_LAYER_MIN 1 #define PIPING_LAYER_MAX 5 #define PIPING_LAYER_DEFAULT 3 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index c605f5ea3d2..2e260a8b5f5 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -96,6 +96,8 @@ #define COMSIG_ATOM_FIRE_ACT "atom_fire_act" ///from base of atom/bullet_act(): (/obj/projectile, def_zone) #define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" +///from base of atom/CheckParts(): (list/parts_list, datum/crafting_recipe/R) +#define COMSIG_ATOM_CHECKPARTS "atom_checkparts" ///from base of atom/blob_act(): (/obj/structure/blob) #define COMSIG_ATOM_BLOB_ACT "atom_blob_act" ///from base of atom/acid_act(): (acidpwr, acid_volume) @@ -136,6 +138,8 @@ ///for any tool behaviors: (mob/living/user, obj/item/I, list/recipes) #define COMSIG_ATOM_TOOL_ACT(tooltype) "tool_recipe_discovery_[tooltype]" #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0) +///for when an atom has been created through processing (atom/original_atom, list/chosen_processing_option) +#define COMSIG_ATOM_CREATEDBY_PROCESSING "atom_createdby_processing" ///called when teleporting into a protected turf: (channel, turf/origin) #define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" #define COMPONENT_BLOCK_TELEPORT (1<<0) @@ -510,6 +514,8 @@ #define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" ///called on item when microwaved (): (obj/machinery/microwave/M) #define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" +///called on item when created through microwaving (): (obj/machinery/microwave/M, cooking_efficiency) +#define COMSIG_ITEM_MICROWAVE_COOKED "microwave_cooked" ///from base of item/sharpener/attackby(): (amount, max) #define COMSIG_ITEM_SHARPEN_ACT "sharpen_act" #define COMPONENT_BLOCK_SHARPEN_APPLIED (1<<0) diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 5572dec40bc..8631ceb78e1 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -38,5 +38,9 @@ #define FOOD_MEAT_MUTANT 100 #define FOOD_MEAT_MUTANT_RARE 200 +///Amount of reagents you start with on crafted food excluding the used parts +#define CRAFTED_FOOD_BASE_REAGENT_MODIFIER 0.7 +///Modifier of reagents you get when crafting food from the parts used +#define CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER 0.5 #define IS_EDIBLE(O) (istype(O, /obj/item/reagent_containers/food/snacks) || O.GetComponent(/datum/component/edible)) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 46e8032e055..6beb1828b6d 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -33,12 +33,12 @@ #define ABOVE_NORMAL_TURF_LAYER 2.08 #define LATTICE_LAYER 2.2 #define DISPOSAL_PIPE_LAYER 2.3 -#define GAS_PIPE_HIDDEN_LAYER 2.35 +#define GAS_PIPE_HIDDEN_LAYER 2.35 //layer = initial(layer) + piping_layer / 1000 in atmospherics/update_icon() to determine order of pipe overlap #define WIRE_LAYER 2.4 #define WIRE_BRIDGE_LAYER 2.44 #define WIRE_TERMINAL_LAYER 2.45 -#define GAS_SCRUBBER_LAYER 2.46 -#define GAS_PIPE_VISIBLE_LAYER 2.47 +#define GAS_SCRUBBER_LAYER 2.46 +#define GAS_PIPE_VISIBLE_LAYER 2.47 //layer = initial(layer) + piping_layer / 1000 in atmospherics/update_icon() to determine order of pipe overlap #define GAS_FILTER_LAYER 2.48 #define GAS_PUMP_LAYER 2.49 #define LOW_OBJ_LAYER 2.5 diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm index bf62e6b67ba..f5fad9cdf68 100644 --- a/code/__DEFINES/mecha.dm +++ b/code/__DEFINES/mecha.dm @@ -4,6 +4,14 @@ #define MECHA_INT_TANK_BREACH (1<<3) #define MECHA_INT_CONTROL_LOST (1<<4) +#define ADDING_ACCESS_POSSIBLE (1<<0) +#define ADDING_MAINT_ACCESS_POSSIBLE (1<<1) +#define CANSTRAFE (1<<2) +#define LIGHTS_ON (1<<3) +#define SILICON_PILOT (1<<4) +#define IS_ENCLOSED (1<<5) +#define HAS_LIGHTS (1<<6) + #define MECHA_MELEE (1 << 0) #define MECHA_RANGED (1 << 1) diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm index 4b59e585aa3..a15c211d877 100644 --- a/code/__DEFINES/vehicles.dm +++ b/code/__DEFINES/vehicles.dm @@ -4,15 +4,5 @@ #define VEHICLE_CONTROL_DRIVE 2 #define VEHICLE_CONTROL_KIDNAPPED 4 //Can't leave vehicle voluntarily, has to resist. -//Mech flags -#define ADDING_ACCESS_POSSIBLE (1<<0) -#define ADDING_MAINT_ACCESS_POSSIBLE (1<<1) -#define CANSTRAFE (1<<2) -#define LIGHTS_ON (1<<3) -#define SILICON_PILOT (1<<4) -#define IS_ENCLOSED (1<<5) -#define HAS_LIGHTS (1<<6) - - //Car trait flags #define CAN_KIDNAP 1 diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 6fc48ded6a6..b4c8fecf54a 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -73,3 +73,18 @@ /proc/pathflatten(path) return replacetext(path, "/", "_") + +/// Returns the md5 of a file at a given path. +/proc/md5filepath(path) + . = md5(file(path)) + +/// Save file as an external file then md5 it. +/// Used because md5ing files stored in the rsc sometimes gives incorrect md5 results. +/proc/md5asfile(file) + var/static/notch = 0 + // its importaint this code can handle md5filepath sleeping instead of hard blocking, if it's converted to use rust_g. + var/filename = "tmp/md5asfile.[world.realtime].[world.timeofday].[world.time].[world.tick_usage].[notch]" + notch = WRAP(notch+1, 0, 2^15) + fcopy(file, filename) + . = md5filepath(filename) + fdel(filename) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index cc90ccc5dbf..0c7b5ea1de6 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1124,12 +1124,13 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico var/list/partial = splittext(iconData, "{") return replacetext(copytext_char(partial[2], 3, -5), "\n", "") -/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE, sourceonly = FALSE) +/proc/icon2html(thing, target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE) if (!thing) return var/key var/icon/I = thing + if (!target) return if (target == world) @@ -1153,11 +1154,18 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico return SSassets.transport.get_asset_url(name) return "" var/atom/A = thing - if (isnull(dir)) - dir = A.dir + + I = A.icon if (isnull(icon_state)) icon_state = A.icon_state - I = A.icon + if (!(icon_state in icon_states(I, 1))) + icon_state = initial(A.icon_state) + if (isnull(dir)) + dir = initial(A.dir) + + if (isnull(dir)) + dir = A.dir + if (ishuman(thing)) // Shitty workaround for a BYOND issue. var/icon/temp = I I = icon() diff --git a/code/__HELPERS/string_assoc_lists.dm b/code/__HELPERS/string_assoc_lists.dm new file mode 100644 index 00000000000..e269da7da5e --- /dev/null +++ b/code/__HELPERS/string_assoc_lists.dm @@ -0,0 +1,18 @@ +GLOBAL_LIST_EMPTY(string_assoc_lists) + + +/** + * Caches associative lists with non-numeric stringify-able index keys and stringify-able values (text/typepath -> text/path/number). + */ +/datum/proc/string_assoc_list(list/values) + var/list/string_id = list() + for(var/val in values) + string_id += "[val]_[values[val]]" + string_id.Join("-") + + . = GLOB.string_assoc_lists[string_id] + + if(.) + return + + return GLOB.string_assoc_lists[string_id] = values diff --git a/code/__HELPERS/string_lists.dm b/code/__HELPERS/string_lists.dm new file mode 100644 index 00000000000..069f9b6dc41 --- /dev/null +++ b/code/__HELPERS/string_lists.dm @@ -0,0 +1,14 @@ +GLOBAL_LIST_EMPTY(string_lists) + +/** + * Caches lists with non-numeric stringify-able values (text or typepath). + */ +/datum/proc/string_list(list/values) + var/string_id = values.Join("-") + + . = GLOB.string_lists[string_id] + + if(.) + return + + return GLOB.string_lists[string_id] = values diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9b1f6ec3c8c..08ca90cfac9 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1381,8 +1381,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /proc/get_random_food() var/list/blocked = list(/obj/item/food/bread, /obj/item/food/breadslice, - /obj/item/reagent_containers/food/snacks/store/cake, - /obj/item/reagent_containers/food/snacks/cakeslice, + /obj/item/food/cake, + /obj/item/food/cakeslice, /obj/item/reagent_containers/food/snacks/store, /obj/item/reagent_containers/food/snacks/pie, /obj/item/reagent_containers/food/snacks/kebab, diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 00b1c54bedc..239e4bd14c8 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -166,6 +166,23 @@ DEFINE_BITFIELD(machine_stat, list( "NOPOWER" = NOPOWER, )) +DEFINE_BITFIELD(internal_damage, list( + "MECHA_INT_FIRE" = MECHA_INT_FIRE, + "MECHA_INT_TEMP_CONTROL" = MECHA_INT_TEMP_CONTROL, + "MECHA_INT_TANK_BREACH" = MECHA_INT_TANK_BREACH, + "MECHA_INT_CONTROL_LOST" = MECHA_INT_CONTROL_LOST, +)) + +DEFINE_BITFIELD(mecha_flags, list( + "ADDING_ACCESS_POSSIBLE" = ADDING_ACCESS_POSSIBLE, + "ADDING_MAINT_ACCESS_POSSIBLE" = ADDING_MAINT_ACCESS_POSSIBLE, + "CANSTRAFE" = CANSTRAFE, + "LIGHTS_ON" = LIGHTS_ON, + "SILICON_PILOT" = SILICON_PILOT, + "IS_ENCLOSED" = IS_ENCLOSED, + "HAS_LIGHTS" = HAS_LIGHTS, +)) + DEFINE_BITFIELD(mob_biotypes, list( "MOB_BEAST" = MOB_BEAST, "MOB_BUG" = MOB_BUG, diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 460591b1192..807ae7fe923 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -35,6 +35,14 @@ Behavior that's still missing from this component that original food items had t var/datum/callback/on_consume ///Last time we checked for food likes var/last_check_time + ///The initial reagents of this food when it is made + var/list/initial_reagents + ///The initial volume of the foods reagents + var/volume + ///The flavortext for taste (haha get it flavor text) + var/list/tastes + ///The type of atom this creates when the object is microwaved. + var/microwaved_type /datum/component/edible/Initialize(list/initial_reagents, food_flags = NONE, @@ -44,6 +52,7 @@ Behavior that's still missing from this component that original food items had t list/tastes, list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), bite_consumption = 2, + microwaved_type, datum/callback/after_eat, datum/callback/on_consume) @@ -52,9 +61,15 @@ Behavior that's still missing from this component that original food items had t RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, .proc/UseByAnimal) + RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, .proc/OnCraft) + RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, .proc/OnProcessed) + RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_COOKED, .proc/OnMicrowaveCooked) + if(isitem(parent)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/UseFromHand) RegisterSignal(parent, COMSIG_ITEM_FRIED, .proc/OnFried) + RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_ACT, .proc/OnMicrowaved) + var/obj/item/item = parent item.grind_results = list() //Cursed but this is how snacks did it, grinding needs a refactor in the future. @@ -65,22 +80,24 @@ Behavior that's still missing from this component that original food items had t src.food_flags = food_flags src.foodtypes = foodtypes src.eat_time = eat_time - src.eatverbs = eatverbs + src.eatverbs = string_list(eatverbs) src.junkiness = junkiness src.after_eat = after_eat src.on_consume = on_consume + src.initial_reagents = string_assoc_list(initial_reagents) + src.tastes = string_assoc_list(tastes) + src.microwaved_type = microwaved_type var/atom/owner = parent owner.create_reagents(volume, INJECTABLE) - if(initial_reagents) - for(var/rid in initial_reagents) - var/amount = initial_reagents[rid] - if(tastes && tastes.len && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) - owner.reagents.add_reagent(rid, amount, tastes.Copy()) - else - owner.reagents.add_reagent(rid, amount) + for(var/rid in initial_reagents) + var/amount = initial_reagents[rid] + if(length(tastes) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) + owner.reagents.add_reagent(rid, amount, tastes.Copy()) + else + owner.reagents.add_reagent(rid, amount) /datum/component/edible/InheritComponent(datum/component/C, i_am_original, @@ -142,6 +159,95 @@ Behavior that's still missing from this component that original food items had t qdel(our_atom) return COMSIG_FRYING_HANDLED +///Called when food is created through processing (Usually this means it was sliced). We use this to pass the OG items reagents. +/datum/component/edible/proc/OnProcessed(datum/source, atom/original_atom, list/chosen_processing_option) + SIGNAL_HANDLER + + if(!original_atom.reagents) + return + + var/atom/this_food = parent + var/reagents_for_slice = chosen_processing_option[TOOL_PROCESSING_AMOUNT] + + this_food.create_reagents(volume) //Make sure we have a reagent container + + original_atom.reagents.trans_to(this_food, reagents_for_slice) + + if(original_atom.name != initial(original_atom.name)) + this_food.name = "slice of [original_atom.name]" + if(original_atom.desc != initial(original_atom.desc)) + this_food.desc = "[original_atom.desc]" + +///Called when food is crafted through a crafting recipe datum. +/datum/component/edible/proc/OnCraft(datum/source, list/parts_list, datum/crafting_recipe/food/recipe) + SIGNAL_HANDLER + + var/atom/this_food = parent + + this_food.reagents.clear_reagents() + + for(var/obj/item/crafted_part in this_food.contents) + crafted_part.reagents?.trans_to(this_food.reagents, crafted_part.reagents.maximum_volume, CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER) + + var/list/objects_to_delete = list() + + // Remove all non recipe objects from the contents + for(var/content_object in this_food.contents) + for(var/recipe_object in recipe.real_parts) + if(istype(content_object, recipe_object)) + continue + objects_to_delete += content_object + + QDEL_LIST(objects_to_delete) + + for(var/r_id in initial_reagents) + var/amount = initial_reagents[r_id] * CRAFTED_FOOD_BASE_REAGENT_MODIFIER + if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin || r_id == /datum/reagent/consumable/nutriment/protein) + this_food.reagents.add_reagent(r_id, amount, tastes) + else + this_food.reagents.add_reagent(r_id, amount) + + SSblackbox.record_feedback("tally", "food_made", 1, type) + +/datum/component/edible/proc/OnMicrowaved(datum/source, obj/machinery/microwave/used_microwave) + SIGNAL_HANDLER + + var/turf/parent_turf = get_turf(parent) + + if(!microwaved_type) + new /obj/item/reagent_containers/food/snacks/badrecipe(parent_turf) + qdel(src) + return + + + var/obj/item/result + + result = new microwaved_type(parent_turf) + + var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1 + + SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, parent, efficiency) + + SSblackbox.record_feedback("tally", "food_made", 1, result.type) + +///Corrects the reagents on the newly cooked food +/datum/component/edible/proc/OnMicrowaveCooked(datum/source, obj/item/source_item, cooking_efficiency = 1) + SIGNAL_HANDLER + + var/atom/this_food = parent + + this_food.reagents.clear_reagents() + + source_item.reagents?.trans_to(this_food, source_item.reagents.total_volume) + + for(var/r_id in initial_reagents) + var/amount = initial_reagents[r_id] * cooking_efficiency * CRAFTED_FOOD_BASE_REAGENT_MODIFIER + if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin || r_id == /datum/reagent/consumable/nutriment/protein) + this_food.reagents.add_reagent(r_id, amount, tastes) + else + this_food.reagents.add_reagent(r_id, amount) + + ///All the checks for the act of eating itself and /datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder) diff --git a/code/datums/components/storage/food_storage.dm b/code/datums/components/storage/food_storage.dm index 63c86bdc9dd..cfabe5c3773 100644 --- a/code/datums/components/storage/food_storage.dm +++ b/code/datums/components/storage/food_storage.dm @@ -176,7 +176,7 @@ return FALSE for(var/obj/item/i in food.contents) //search the food's contents for a replacement item - if(istype(i, /obj/item/reagent_containers/food/snacks)) + if(IS_EDIBLE(i)) continue if(QDELETED(i)) continue diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 198dad7c469..f3210dbc820 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -244,12 +244,25 @@ description = "The crew must pass through an otherworldy arena to board this shuttle. Expect massive casualties. The source of the Bloody Signal must be tracked down and eliminated to unlock this shuttle." admin_notes = "RIP AND TEAR." credit_cost = 10000 + /// Whether the arena z-level has been created + var/arena_loaded = FALSE /datum/map_template/shuttle/emergency/arena/prerequisites_met() if(SHUTTLE_UNLOCK_BUBBLEGUM in SSshuttle.shuttle_purchase_requirements_met) return TRUE return FALSE +/datum/map_template/shuttle/emergency/arena/post_load(obj/docking_port/mobile/M) + . = ..() + if(!arena_loaded) + arena_loaded = TRUE + var/datum/map_template/arena/arena_template = new() + arena_template.load_new_z() + +/datum/map_template/arena + name = "The Arena" + mappath = "_maps/templates/the_arena.dmm" + /datum/map_template/shuttle/emergency/birdboat suffix = "birdboat" name = "Birdboat Station Emergency Shuttle" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f31bd028cb5..ea3e3309f0d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -410,7 +410,8 @@ * * Otherwise it simply forceMoves the atom into this atom */ -/atom/proc/CheckParts(list/parts_list) +/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/R) + SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, R) if(parts_list) for(var/A in parts_list) if(istype(A, /datum/reagent)) @@ -492,7 +493,8 @@ * - show_message: Whether to display anything to mobs when they are exposed. */ /atom/proc/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - if((. = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message)) & COMPONENT_NO_EXPOSE_REAGENTS) + . = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) + if(. & COMPONENT_NO_EXPOSE_REAGENTS) return for(var/reagent in reagents) @@ -1217,7 +1219,8 @@ if(I.use_tool(src, user, chosen_option[TOOL_PROCESSING_TIME], volume=50)) var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT] for(var/i = 1 to chosen_option[TOOL_PROCESSING_AMOUNT]) - new atom_to_create(loc) + var/atom/created_atom = new atom_to_create(loc) + SEND_SIGNAL(created_atom, COMSIG_ATOM_CREATEDBY_PROCESSING, src, chosen_option) to_chat(user, "You manage to create [chosen_option[TOOL_PROCESSING_AMOUNT]] [initial(atom_to_create.name)] from [src]") qdel(src) return diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index a9b4e335aa8..78b0b4c89d1 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -173,7 +173,6 @@ if(points_to_check >= S.credit_cost) SSshuttle.shuttle_purchased = SHUTTLEPURCHASE_PURCHASED SSshuttle.unload_preview() - SSshuttle.load_template(S) SSshuttle.existing_shuttle = SSshuttle.emergency SSshuttle.action_load(S) D.adjust_money(-S.credit_cost) diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index 6851bf0123a..bb413dbf344 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -2,6 +2,8 @@ /obj/item/food name = "food" desc = "you eat this" + resistance_flags = FLAMMABLE + w_class = WEIGHT_CLASS_NORMAL ///List of reagents this food gets on creation var/list/food_reagents ///Extra flags for things such as if the food is in a container or not @@ -19,10 +21,16 @@ ///How much reagents per bite var/bite_consumption - /obj/item/food/Initialize() . = ..() + if(food_reagents) + food_reagents = string_assoc_list(food_reagents) + if(tastes) + tastes = string_assoc_list(tastes) + if(eatverbs) + eatverbs = string_list(eatverbs) MakeEdible() + MakeProcessable() ///This proc adds the edible component, overwrite this if you for some reason want to change some specific args like callbacks. /obj/item/food/proc/MakeEdible() @@ -37,5 +45,6 @@ bite_consumption = bite_consumption) - - +///This proc handles processable elements, overwrite this if you want to add behavior such as slicing, forking, spooning, whatever, to turn the item into something else +/obj/item/food/proc/MakeProcessable() + return diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm index 3e8c947d5fc..da97bf0a61b 100644 --- a/code/game/objects/items/food/bread.dm +++ b/code/game/objects/items/food/bread.dm @@ -13,7 +13,6 @@ /obj/item/food/breadslice icon = 'icons/obj/food/burgerbread.dmi' - food_reagents = list(/datum/reagent/consumable/nutriment = 2) slot_flags = ITEM_SLOT_HEAD foodtypes = GRAIN eat_time = 0.5 SECONDS @@ -26,12 +25,11 @@ name = "bread" desc = "Some plain old earthen bread." icon_state = "bread" - food_reagents = list(/datum/reagent/consumable/nutriment = 17) + food_reagents = list(/datum/reagent/consumable/nutriment = 10) tastes = list("bread" = 10) foodtypes = GRAIN -/obj/item/food/bread/plain/Initialize() - . = ..() +/obj/item/food/bread/plain/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/plain, 5, 30) /obj/item/food/breadslice/plain @@ -39,6 +37,7 @@ desc = "A slice of home." icon_state = "breadslice" foodtypes = GRAIN + food_reagents = list(/datum/reagent/consumable/nutriment = 2) /obj/item/food/breadslice/moldy name = "moldy bread slice" @@ -52,12 +51,11 @@ name = "meatbread loaf" desc = "The culinary base of every self-respecting eloquen/tg/entleman." icon_state = "meatbread" - food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/nutriment/vitamin = 15, /datum/reagent/consumable/nutriment/protein = 17) + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10, /datum/reagent/consumable/nutriment/protein = 12) tastes = list("bread" = 10, "meat" = 10) foodtypes = GRAIN | MEAT -/obj/item/food/bread/meat/Initialize() - . = ..() +/obj/item/food/bread/meat/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/meat, 5, 30) /obj/item/food/breadslice/meat @@ -65,36 +63,35 @@ desc = "A slice of delicious meatbread." icon_state = "meatbreadslice" foodtypes = GRAIN | MEAT + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/nutriment/protein = 2.4) /obj/item/food/bread/xenomeat name = "xenomeatbread loaf" desc = "The culinary base of every self-respecting eloquen/tg/entleman. Extra Heretical." icon_state = "xenomeatbread" - food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/nutriment/vitamin = 15, /datum/reagent/consumable/nutriment/protein = 24) + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10, /datum/reagent/consumable/nutriment/protein = 15) tastes = list("bread" = 10, "acid" = 10) foodtypes = GRAIN | MEAT -/obj/item/food/bread/xenomeat/Initialize() - . = ..() +/obj/item/food/bread/xenomeat/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/xenomeat, 5, 30) /obj/item/food/breadslice/xenomeat name = "xenomeatbread slice" desc = "A slice of delicious meatbread. Extra Heretical." icon_state = "xenobreadslice" - food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/nutriment/protein = 5) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/nutriment/protein = 3) foodtypes = GRAIN | MEAT /obj/item/food/bread/spidermeat name = "spider meat loaf" desc = "Reassuringly green meatloaf made from spider meat." icon_state = "spidermeatbread" - food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/toxin = 15, /datum/reagent/consumable/nutriment/vitamin = 15, /datum/reagent/consumable/nutriment/protein = 17) + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/toxin = 15, /datum/reagent/consumable/nutriment/vitamin = 10, /datum/reagent/consumable/nutriment/protein = 12) tastes = list("bread" = 10, "cobwebs" = 5) foodtypes = GRAIN | MEAT | TOXIC -/obj/item/food/bread/spidermeat/Initialize() - . = ..() +/obj/item/food/bread/spidermeat/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/spidermeat, 5, 30) /obj/item/food/breadslice/spidermeat @@ -108,12 +105,11 @@ name = "banana-nut bread" desc = "A heavenly and filling treat." icon_state = "bananabread" - food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/banana = 40) + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/banana = 20) tastes = list("bread" = 10) // bananjuice will also flavour foodtypes = GRAIN | FRUIT -/obj/item/food/bread/banana/Initialize() - . = ..() +/obj/item/food/bread/banana/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/banana, 5, 30) /obj/item/food/breadslice/banana @@ -127,19 +123,18 @@ name = "Tofubread" desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers." icon_state = "tofubread" - food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 15, /datum/reagent/consumable/nutriment/protein = 13) + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10, /datum/reagent/consumable/nutriment/protein = 10) tastes = list("bread" = 10, "tofu" = 10) foodtypes = GRAIN | VEGETABLES -/obj/item/food/bread/tofu/Initialize() - . = ..() +/obj/item/food/bread/tofu/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/tofu, 5, 30) /obj/item/food/breadslice/tofu name = "tofubread slice" desc = "A slice of delicious tofubread." icon_state = "tofubreadslice" - food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 1) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 2) foodtypes = GRAIN | VEGETABLES /obj/item/food/bread/creamcheese @@ -150,33 +145,31 @@ tastes = list("bread" = 10, "cheese" = 10) foodtypes = GRAIN | DAIRY -/obj/item/food/bread/creamcheese/Initialize() - . = ..() +/obj/item/food/bread/creamcheese/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/creamcheese, 5, 30) /obj/item/food/breadslice/creamcheese name = "cream cheese bread slice" desc = "A slice of yum!" icon_state = "creamcheesebreadslice" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 1) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 2) /obj/item/food/bread/mimana name = "mimana bread" desc = "Best eaten in silence." icon_state = "mimanabread" - food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/consumable/nothing = 5, /datum/reagent/consumable/nutriment/vitamin = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/consumable/nothing = 5, /datum/reagent/consumable/nutriment/vitamin = 10) tastes = list("bread" = 10, "silence" = 10) foodtypes = GRAIN | FRUIT -/obj/item/food/bread/mimana/Initialize() - . = ..() +/obj/item/food/bread/mimana/MakeProcessable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/breadslice/mimana, 5, 30) /obj/item/food/breadslice/mimana name = "mimana bread slice" desc = "A slice of silence!" icon_state = "mimanabreadslice" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/toxin/mutetoxin = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nutriment/vitamin = 1) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/toxin/mutetoxin = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nutriment/vitamin = 2) foodtypes = GRAIN | FRUIT /obj/item/food/breadslice/custom diff --git a/code/game/objects/items/food/burgers.dm b/code/game/objects/items/food/burgers.dm index 3a68ccd05db..bbbf160e9ab 100644 --- a/code/game/objects/items/food/burgers.dm +++ b/code/game/objects/items/food/burgers.dm @@ -56,7 +56,7 @@ /obj/item/food/burger/appendix name = "appendix burger" desc = "Tastes like appendicitis." - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 7) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 6) icon_state = "appendixburger" tastes = list("bun" = 4, "grass" = 2) foodtypes = GRAIN | MEAT | GROSS @@ -65,7 +65,7 @@ name = "fillet -o- carp sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon_state = "fishburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 4) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 4) tastes = list("bun" = 4, "fish" = 4) foodtypes = GRAIN | MEAT @@ -81,7 +81,7 @@ name = "roburger" desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/nanomachines = 7, /datum/reagent/consumable/nutriment/vitamin = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/nanomachines = 6, /datum/reagent/consumable/nutriment/vitamin = 6) tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) foodtypes = GRAIN | TOXIC @@ -90,7 +90,7 @@ desc = "This massive patty looks like poison. Beep." icon_state = "roburger" max_volume = 120 - food_reagents = list(/datum/reagent/consumable/nutriment = 11, /datum/reagent/nanomachines = 140, /datum/reagent/consumable/nutriment/vitamin = 15) + food_reagents = list(/datum/reagent/consumable/nutriment = 11, /datum/reagent/nanomachines = 80, /datum/reagent/consumable/nutriment/vitamin = 15) tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) foodtypes = GRAIN | TOXIC @@ -98,7 +98,7 @@ name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 7) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 5) tastes = list("bun" = 4, "acid" = 4) foodtypes = GRAIN | MEAT @@ -106,28 +106,28 @@ name = "bearger" desc = "Best served rawr." icon_state = "bearger" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 8, /datum/reagent/consumable/nutriment/vitamin = 7) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 5) foodtypes = GRAIN | MEAT /obj/item/food/burger/clown name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 12, /datum/reagent/medicine/mannitol = 11, /datum/reagent/consumable/nutriment/vitamin = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/medicine/mannitol = 6, /datum/reagent/consumable/nutriment/vitamin = 6) foodtypes = GRAIN | FRUIT /obj/item/food/burger/mime name = "mime burger" desc = "Its taste defies language." icon_state = "mimeburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 7, /datum/reagent/consumable/nothing = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/nothing = 6) foodtypes = GRAIN /obj/item/food/burger/brain name = "brainburger" desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/medicine/mannitol = 11, /datum/reagent/consumable/nutriment/vitamin = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/medicine/mannitol = 6, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/nutriment/protein = 6) tastes = list("bun" = 4, "brains" = 2) foodtypes = GRAIN | MEAT | GROSS @@ -135,7 +135,7 @@ name = "ghost burger" desc = "Too Spooky!" icon_state = "ghostburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 13, /datum/reagent/consumable/sodiumchloride = 5) + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 12, /datum/reagent/consumable/sodiumchloride = 5) tastes = list("bun" = 2, "ectoplasm" = 4) foodtypes = GRAIN alpha = 170 @@ -182,63 +182,63 @@ name = "red burger" desc = "Perfect for hiding the fact it's burnt to a crisp." icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/red = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/red = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/orange name = "orange burger" desc = "Contains 0% juice." icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/orange = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/orange = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/yellow name = "yellow burger" desc = "Bright to the last bite." icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/yellow = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/yellow = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/green name = "green burger" desc = "It's not tainted meat, it's painted meat!" icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/green = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/green = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/blue name = "blue burger" desc = "Is this blue rare?" icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/blue = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/blue = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/purple name = "purple burger" desc = "Regal and low class at the same time." icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/purple = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/purple = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/black name = "black burger" desc = "This is overcooked." icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/black = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/black = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/white name = "white burger" desc = "Delicous Titanium!" icon_state = "cburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/white = 10) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/colorful_reagent/powder/white = 10) foodtypes = GRAIN | MEAT /obj/item/food/burger/spell name = "spell burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 11) + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 10) tastes = list("bun" = 4, "magic" = 2) foodtypes = GRAIN | MEAT @@ -246,7 +246,7 @@ name = "big bite burger" desc = "Forget the Big Mac. THIS is the future!" icon_state = "bigbiteburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 7) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 10, /datum/reagent/consumable/nutriment/vitamin = 5) w_class = WEIGHT_CLASS_NORMAL foodtypes = GRAIN | MEAT | DAIRY @@ -258,18 +258,18 @@ foodtypes = GRAIN | MEAT /obj/item/food/burger/jelly/slime - food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/toxin/slimejelly = 10, /datum/reagent/consumable/nutriment/vitamin = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/toxin/slimejelly = 6, /datum/reagent/consumable/nutriment/vitamin = 6) foodtypes = GRAIN | TOXIC /obj/item/food/burger/jelly/cherry - food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/cherryjelly = 10, /datum/reagent/consumable/nutriment/vitamin = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/cherryjelly = 6, /datum/reagent/consumable/nutriment/vitamin = 6) foodtypes = GRAIN | FRUIT /obj/item/food/burger/superbite name = "super bite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/nutriment/protein = 42, /datum/reagent/consumable/nutriment/vitamin = 15) + food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/nutriment/protein = 40, /datum/reagent/consumable/nutriment/vitamin = 12) w_class = WEIGHT_CLASS_NORMAL bite_consumption = 7 max_volume = 100 @@ -280,14 +280,14 @@ name = "five alarm burger" desc = "HOT! HOT!" icon_state = "fivealarmburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/capsaicin = 5, /datum/reagent/consumable/condensedcapsaicin = 5, /datum/reagent/consumable/nutriment/vitamin = 6) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/capsaicin = 5, /datum/reagent/consumable/condensedcapsaicin = 5, /datum/reagent/consumable/nutriment/vitamin = 6) foodtypes = GRAIN | MEAT /obj/item/food/burger/rat name = "rat burger" desc = "Pretty much what you'd expect..." icon_state = "ratburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 2) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 2) foodtypes = GRAIN | MEAT | GROSS /obj/item/food/burger/baseball @@ -301,7 +301,7 @@ name = "bacon burger" desc = "The perfect combination of all things American." icon_state = "baconburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 2) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 2) tastes = list("bacon" = 4, "bun" = 2) foodtypes = GRAIN | MEAT @@ -309,7 +309,7 @@ name = "empowered burger" desc = "It's shockingly good, if you live off of electricity that is." icon_state = "empoweredburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/liquidelectricity = 5) + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/liquidelectricity = 5) tastes = list("bun" = 2, "pure electricity" = 4) foodtypes = GRAIN | TOXIC @@ -317,7 +317,7 @@ name = "crab burger" desc = "A delicious patty of the crabby kind, slapped in between a bun." icon_state = "crabburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 4) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 4) tastes = list("bun" = 2, "crab meat" = 4) foodtypes = GRAIN | MEAT @@ -325,7 +325,7 @@ name = "soylent burger" desc = "An eco-friendly burger made using upcycled low value biomass." icon_state = "soylentburger" - food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 4) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 4) tastes = list("bun" = 2, "assistant" = 4) foodtypes = GRAIN | MEAT | DAIRY diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm new file mode 100644 index 00000000000..cefad027f62 --- /dev/null +++ b/code/game/objects/items/food/cake.dm @@ -0,0 +1,453 @@ +/obj/item/food/cake + icon = 'icons/obj/food/piecake.dmi' + bite_consumption = 3 + max_volume = 80 + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 1) + foodtypes = GRAIN | DAIRY + +/obj/item/food/cake/Initialize() + . = ..() + AddComponent(/datum/component/food_storage) + +/obj/item/food/cakeslice + icon = 'icons/obj/food/piecake.dmi' + //uncomment me when trash is merged trash = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("cake" = 1) + foodtypes = GRAIN | DAIRY + +/obj/item/food/cake/plain + name = "plain cake" + desc = "A plain cake, not a lie." + icon_state = "plaincake" + food_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 7) + tastes = list("sweetness" = 2, "cake" = 5) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/plain/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/plain, 5, 30) + +/obj/item/food/cakeslice/plain + name = "plain cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "plaincake_slice" + tastes = list("sweetness" = 2,"cake" = 5) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/carrot + name = "carrot cake" + desc = "A favorite desert of a certain wascally wabbit. Not a lie." + icon_state = "carrotcake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/medicine/oculine = 10, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/food/cake/carrot/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/carrot, 5, 30) + +/obj/item/food/cakeslice/carrot + name = "carrot cake slice" + desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." + icon_state = "carrotcake_slice" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/oculine = 2, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/food/cake/brain + name = "brain cake" + desc = "A squishy cake-thing." + icon_state = "braincake" + food_reagents = list(/datum/reagent/consumable/nutriment = 15, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) + foodtypes = GRAIN | DAIRY | MEAT | GROSS | SUGAR + +/obj/item/food/cake/brain/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/brain, 5, 30) + +/obj/item/food/cakeslice/brain + name = "brain cake slice" + desc = "Lemme tell you something about prions. THEY'RE DELICIOUS." + icon_state = "braincakeslice" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/medicine/mannitol = 2, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) + foodtypes = GRAIN | DAIRY | MEAT | GROSS | SUGAR + +/obj/item/food/cake/cheese + name = "cheese cake" + desc = "DANGEROUSLY cheesy." + icon_state = "cheesecake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 8, /datum/reagent/consumable/nutriment/protein = 5) + tastes = list("cake" = 4, "cream cheese" = 3) + foodtypes = GRAIN | DAIRY + +/obj/item/food/cake/cheese/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/cheese, 5, 30) + +/obj/item/food/cakeslice/cheese + name = "cheese cake slice" + desc = "Slice of pure cheestisfaction." + icon_state = "cheesecake_slice" + tastes = list("cake" = 4, "cream cheese" = 3) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 1.3) + foodtypes = GRAIN | DAIRY + +/obj/item/food/cake/orange + name = "orange cake" + desc = "A cake with added orange." + icon_state = "orangecake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10) + tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/orange/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/orange, 5, 30) + +/obj/item/food/cakeslice/orange + name = "orange cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "orangecake_slice" + tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/lime + name = "lime cake" + desc = "A cake with added lime." + icon_state = "limecake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10) + tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/lime/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/lime, 5, 30) + +/obj/item/food/cakeslice/lime + name = "lime cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "limecake_slice" + tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/lemon + name = "lemon cake" + desc = "A cake with added lemon." + icon_state = "lemoncake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10) + tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/lemon/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/lemon, 5, 30) + +/obj/item/food/cakeslice/lemon + name = "lemon cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "lemoncake_slice" + tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/chocolate + name = "chocolate cake" + desc = "A cake with added chocolate." + icon_state = "chocolatecake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10) + tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + +/obj/item/food/cake/chocolate/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/chocolate, 5, 30) + +/obj/item/food/cakeslice/chocolate + name = "chocolate cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "chocolatecake_slice" + tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + +/obj/item/food/cake/birthday + name = "birthday cake" + desc = "Happy Birthday little clown..." + icon_state = "birthdaycake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 5, "sweetness" = 1) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + +/obj/item/food/cake/birthday/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/birthday, 5, 30) + +/obj/item/food/cake/birthday/microwave_act(obj/machinery/microwave/M) //super sekrit club + new /obj/item/clothing/head/hardhat/cakehat(get_turf(src)) + qdel(src) + +/obj/item/food/cakeslice/birthday + name = "birthday cake slice" + desc = "A slice of your birthday." + icon_state = "birthdaycakeslice" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("cake" = 5, "sweetness" = 1) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + +/obj/item/food/cake/birthday/energy + name = "energy cake" + desc = "Just enough calories for a whole nuclear operative squad." + icon_state = "energycake" + force = 5 + hitsound = 'sound/weapons/blade1.ogg' + food_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/pwr_game = 10, /datum/reagent/consumable/liquidelectricity = 10) + tastes = list("cake" = 3, "a Vlad's Salad" = 1) + +/obj/item/food/cake/birthday/energy/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/birthday/energy, 5, 30) + +/obj/item/food/cake/birthday/energy/proc/energy_bite(mob/living/user) + to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!") + user.apply_damage(30,BRUTE,BODY_ZONE_HEAD) + playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) + +/obj/item/food/cake/birthday/energy/attack(mob/living/M, mob/living/user) + . = ..() + if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly + return + energy_bite(M, user) + +/obj/item/food/cake/birthday/energy/microwave_act(obj/machinery/microwave/M) //super sekriter club + new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src)) + qdel(src) + +/obj/item/food/cakeslice/birthday/energy + name = "energy cake slice" + desc = "For the traitor on the go." + icon_state = "energycakeslice" + force = 2 + hitsound = 'sound/weapons/blade1.ogg' + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/pwr_game = 2, /datum/reagent/consumable/liquidelectricity = 2) + tastes = list("cake" = 3, "a Vlad's Salad" = 1) + +/obj/item/food/cakeslice/birthday/energy/proc/energy_bite(mob/living/user) + to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") + user.apply_damage(18,BRUTE,BODY_ZONE_HEAD) + playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) + +/obj/item/food/cakeslice/birthday/energy/attack(mob/living/M, mob/living/user) + . = ..() + if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly + return + energy_bite(M, user) + +/obj/item/food/cake/apple + name = "apple cake" + desc = "A cake centred with Apple." + icon_state = "applecake" + + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 10) + tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/apple/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/apple, 5, 30) + +/obj/item/food/cakeslice/apple + name = "apple cake slice" + desc = "A slice of heavenly cake." + icon_state = "applecakeslice" + tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/slimecake + name = "Slime cake" + desc = "A cake made of slimes. Probably not electrified." + icon_state = "slimecake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/apple/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/slimecake, 5, 30) + +/obj/item/food/cakeslice/slimecake + name = "slime cake slice" + desc = "A slice of slime cake." + icon_state = "slimecake_slice" + tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/pumpkinspice + name = "pumpkin spice cake" + desc = "A hollow cake with real pumpkin." + icon_state = "pumpkinspicecake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/food/cake/pumpkinspice/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/pumpkinspice, 5, 30) + +/obj/item/food/cakeslice/pumpkinspice + name = "pumpkin spice cake slice" + desc = "A spicy slice of pumpkin goodness." + icon_state = "pumpkinspicecakeslice" + tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/food/cake/bsvc // blackberry strawberries vanilla cake + name = "blackberry and strawberry vanilla cake" + desc = "A plain cake, filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_vanilla_cake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/bsvc/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/bsvc, 5, 30) + +/obj/item/food/cakeslice/bsvc + name = "blackberry and strawberry vanilla cake slice" + desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_vanilla_slice" + tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/bscc // blackbarry strawberries chocolate cake + name = "blackberry and strawberry chocolate cake" + desc = "A chocolate cake, filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_coco_cake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/coco = 5) + tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/bscc/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/bscc, 5, 30) + +/obj/item/food/cakeslice/bscc + name = "blackberry and strawberry chocolate cake slice" + desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_coco_slice" + tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/holy_cake + name = "angel food cake" + desc = "A cake made for angels and chaplains alike! Contains holy water." + icon_state = "holy_cake" + food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3, /datum/reagent/water/holywater = 10) + tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/holy_cake/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/holy_cake_slice, 5, 30) + +/obj/item/food/cakeslice/holy_cake_slice + name = "angel food cake slice" + desc = "A slice of heavenly cake." + icon_state = "holy_cake_slice" + tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/pound_cake + name = "pound cake" + desc = "A condensed cake made for filling people up quickly." + icon_state = "pound_cake" + food_reagents = list(/datum/reagent/consumable/nutriment = 60, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1) + foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD + +/obj/item/food/cake/pound_cake/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/pound_cake_slice, 7, 30) + +/obj/item/food/cakeslice/pound_cake_slice + name = "pound cake slice" + desc = "A slice of condensed cake made for filling people up quickly." + icon_state = "pound_cake_slice" + tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) + food_reagents = list(/datum/reagent/consumable/nutriment = 9, /datum/reagent/consumable/nutriment/vitamin = 0.5) + foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD + +/obj/item/food/cake/hardware_cake + name = "hardware cake" + desc = "A quote on quote cake that is made with electronic boards and leaks acid..." + icon_state = "hardware_cake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/toxin/acid = 15, /datum/reagent/fuel/oil = 15) + tastes = list("acid" = 3, "metal" = 4, "glass" = 5) + foodtypes = GRAIN | GROSS + +/obj/item/food/cake/hardware_cake/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/hardware_cake_slice, 5, 30) + +/obj/item/food/cakeslice/hardware_cake_slice + name = "hardware cake slice" + desc = "A slice of electronic boards and some acid." + icon_state = "hardware_cake_slice" + tastes = list("acid" = 3, "metal" = 4, "glass" = 5) + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/toxin/acid = 3, /datum/reagent/fuel/oil = 3) + foodtypes = GRAIN | GROSS + +/obj/item/food/cake/vanilla_cake + name = "vanilla cake" + desc = "A vanilla frosted cake." + icon_state = "vanillacake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/sugar = 15, /datum/reagent/consumable/vanilla = 15) + tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/cake/vanilla_cake/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/vanilla_slice, 5, 30) + +/obj/item/food/cakeslice/vanilla_slice + name = "vanilla cake slice" + desc = "A slice of vanilla frosted cake." + icon_state = "vanillacake_slice" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/sugar = 3, /datum/reagent/consumable/vanilla = 3) + tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/cake/clown_cake + name = "clown cake" + desc = "A funny cake with a clown face on it." + icon_state = "clowncake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/sugar = 15) + tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/cake/clown_cake/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/clown_slice, 5, 30) + +/obj/item/food/cakeslice/clown_slice + name = "clown cake slice" + desc = "A slice of bad jokes, and silly props." + icon_state = "clowncake_slice" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/sugar = 3) + tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/cake/trumpet + name = "spaceman's cake" + desc = "A spaceman's trumpet frosted cake." + icon_state = "trumpetcake" + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/medicine/polypyr = 15, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/berryjuice = 5) + tastes = list("cake" = 4, "violets" = 2, "jam" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/trumpet/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/trumpet, 5, 30) + +/obj/item/food/cakeslice/trumpet + name = "spaceman's cake" + desc = "A spaceman's trumpet frosted cake." + icon_state = "trumpetcakeslice" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/medicine/polypyr = 3, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/berryjuice = 1) + tastes = list("cake" = 4, "violets" = 2, "jam" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/brioche + name = "brioche cake" + desc = "A ring of sweet, glazed buns." + food_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) + +/obj/item/food/cake/brioche/MakeProcessable() + AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/cakeslice/brioche, 6, 30) + +/obj/item/food/cakeslice/brioche + name = "brioche cake slice" + desc = "Delicious sweet-bread. Who needs anything else?" + icon_state = "briochecake_slice" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 1) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2b26cf1bb41..7bd84c0fc8c 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -358,7 +358,8 @@ /// Handles exposing an object to reagents. /obj/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - if((. = ..()) & COMPONENT_NO_EXPOSE_REAGENTS) + . = ..() + if(. & COMPONENT_NO_EXPOSE_REAGENTS) return for(var/reagent in reagents) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index ad5b05bd1ec..07748bbdabe 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -583,7 +583,8 @@ GLOBAL_LIST_EMPTY(station_turfs) /// Handles exposing a turf to reagents. /turf/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - if((. = ..()) & COMPONENT_NO_EXPOSE_REAGENTS) + . = ..() + if(. & COMPONENT_NO_EXPOSE_REAGENTS) return for(var/reagent in reagents) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 76e9a07cd9d..6722e2a6560 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -98,7 +98,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) for(var/I in active_tickets) var/datum/admin_help/AH = I if(AH.initiator) - L[++L.len] = list("#[AH.id]. [AH.initiator_key_name]:", "[AH.statclick.update()]", REF(AH)) + var/obj/effect/statclick/updated = AH.statclick.update() + L[++L.len] = list("#[AH.id]. [AH.initiator_key_name]:", "[updated.name]", REF(AH)) else ++num_disconnected if(num_disconnected) diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index 5b7522c8d31..8e253932890 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -27,9 +27,13 @@ can_synth = FALSE penetrates_skin = NONE - -/datum/reagent/blob/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - ..() +/// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. +/datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || istype(exposed_mob, /mob/living/simple_animal/hostile/blob)) return 0 //the dead, and blob mobs, don't cause reactions return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. + +/// Exists to earmark the new overmind arg used by blob reagents. +/datum/reagent/blob/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) + return ..() diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index 2383dccf87f..e9d8b6aef2a 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -32,7 +32,8 @@ color = "#B68D00" /datum/reagent/blob/blazing_oil/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.adjust_fire_stacks(round(reac_volume/10)) exposed_mob.IgniteMob() if(exposed_mob) diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm index 8dea4c1ab5b..78b6c804cac 100644 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -17,7 +17,8 @@ taste_description = "brain freeze" /datum/reagent/blob/cryogenic_poison/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) if(exposed_mob.reagents) exposed_mob.reagents.add_reagent(/datum/reagent/consumable/frostoil, 0.3*reac_volume) exposed_mob.reagents.add_reagent(/datum/reagent/consumable/ice, 0.3*reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index 59b14d611b7..dd029f65365 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -25,7 +25,8 @@ color = "#E88D5D" /datum/reagent/blob/distributed_neurons/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.6*reac_volume, TOX) if(overmind && ishuman(exposed_mob)) if(exposed_mob.stat == UNCONSCIOUS || exposed_mob.stat == HARD_CRIT) diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm index f92f71c5388..427e0f839a3 100644 --- a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm +++ b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm @@ -30,7 +30,8 @@ color = "#83ECEC" /datum/reagent/blob/electromagnetic_web/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) if(prob(reac_volume*2)) exposed_mob.emp_act(EMP_LIGHT) if(exposed_mob) diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index 305d22d540f..6b225400df0 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -27,7 +27,8 @@ color = "#EFD65A" /datum/reagent/blob/energized_jelly/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.losebreath += round(0.2*reac_volume) exposed_mob.adjustStaminaLoss(reac_volume * 1.2) if(exposed_mob) diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm index c49a103f6d6..98847f37501 100644 --- a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm +++ b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm @@ -32,8 +32,9 @@ color = "#8B2500" /datum/reagent/blob/explosive_lattice/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() var/initial_volume = reac_volume - reac_volume = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) if(reac_volume >= 10) //if it's not a spore cloud, bad time incoming var/obj/effect/temp_visual/explosion/fast/ex_effect = new /obj/effect/temp_visual/explosion/fast(get_turf(exposed_mob)) ex_effect.alpha = 150 diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm index f559e722f40..6c6a244d654 100644 --- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm +++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm @@ -37,7 +37,8 @@ color = "#4F4441" /datum/reagent/blob/networked_fibers/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) if(!QDELETED(exposed_mob)) exposed_mob.apply_damage(0.6*reac_volume, BURN, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm index a8fd6c45b6b..76f4f811509 100644 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -40,7 +40,8 @@ color = "#AAAABB" /datum/reagent/blob/pressurized_slime/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) var/turf/open/location_turf = get_turf(exposed_mob) if(istype(location_turf) && prob(reac_volume)) location_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm index 24d344e328b..4ca4d513844 100644 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -24,8 +24,12 @@ taste_description = "rock" color = "#9ACD32" -/datum/reagent/blob/reactive_spines/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - ..() +/datum/reagent/blob/reactive_spines/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || istype(exposed_mob, /mob/living/simple_animal/hostile/blob)) return 0 //the dead, and blob mobs, don't cause reactions + return reac_volume + +/datum/reagent/blob/reactive_spines/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.adjustBruteLoss(reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index 0df84417c6d..6b7aa557ef3 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -16,7 +16,8 @@ color = "#A88FB7" /datum/reagent/blob/regenerative_materia/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.adjust_drugginess(reac_volume) if(exposed_mob.reagents) exposed_mob.reagents.add_reagent(/datum/reagent/blob/regenerative_materia, 0.2*reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm index 236d7dea737..16670ce1158 100644 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm @@ -31,5 +31,6 @@ color = "#7B5A57" /datum/reagent/blob/replicating_foam/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm index 95be6543526..1a7b92c99de 100644 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm @@ -32,5 +32,6 @@ color = "#C8963C" /datum/reagent/blob/shifting_fragments/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm index c39728ad1dc..1c57edea1c3 100644 --- a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm +++ b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm @@ -30,7 +30,8 @@ color = "#65ADA2" /datum/reagent/blob/synchronous_mesh/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) - reac_volume = ..() + . = ..() + reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) exposed_mob.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND) if(exposed_mob && reac_volume) for(var/obj/structure/blob/nearby_blob in range(1, exposed_mob)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm index 41cee06db1e..059ebaebca8 100644 --- a/code/modules/asset_cache/asset_cache_item.dm +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -24,12 +24,10 @@ /datum/asset_cache_item/New(name, file) if (!isfile(file)) file = fcopy_rsc(file) - hash = md5(file) + + hash = md5asfile(file) //icons sent to the rsc sometimes md5 incorrectly if (!hash) - hash = md5(fcopy_rsc(file)) - if (!hash) - CRASH("invalid asset sent to asset cache") - debug_world_log("asset cache unexpected success of second fcopy_rsc") + CRASH("invalid asset sent to asset cache") src.name = name var/extstart = findlasttext(name, ".") if (extstart) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 6135931cdfe..3b0ed272f3b 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -126,6 +126,10 @@ piping_layer = (pipe_flags & PIPING_DEFAULT_LAYER_ONLY) ? PIPING_LAYER_DEFAULT : new_layer update_icon() +/obj/machinery/atmospherics/update_icon() + layer = initial(layer) + piping_layer / 1000 + return ..() + /obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target, iteration) return connection_check(target, piping_layer) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 139253644df..a2b22738b7d 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -3,6 +3,7 @@ Passive gate is similar to the regular pump except: * It doesn't require power * Can not transfer low pressure to higher pressure (so it's more like a valve where you can control the flow) +* Passes gas when output pressure lower than target pressure */ @@ -10,7 +11,7 @@ Passive gate is similar to the regular pump except: icon_state = "passgate_map-3" name = "passive gate" - desc = "A one-way air valve that does not require power." + desc = "A one-way air valve that does not require power. Passes gas when the output pressure is lower than the target pressure." can_unwrench = TRUE shift_underlay_only = FALSE @@ -112,7 +113,7 @@ Passive gate is similar to the regular pump except: pressure = text2num(pressure) . = TRUE if(.) - target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, ONE_ATMOSPHERE*100) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -134,7 +135,7 @@ Passive gate is similar to the regular pump except: on = !on if("set_output_pressure" in signal.data) - target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*100) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 951638d378d..c9b8c06eb20 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -45,7 +45,7 @@ plane = showpipe ? GAME_PLANE : FLOOR_PLANE if(!showpipe) - return + return ..() var/connected = 0 //Direction bitset @@ -62,6 +62,7 @@ if(!shift_underlay_only) PIPING_LAYER_SHIFT(src, piping_layer) + return ..() /obj/machinery/atmospherics/components/proc/get_pipe_underlay(state, dir, color = null) if(color) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index c7717b9711d..db3196ee4a2 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -243,7 +243,7 @@ mob_occupant.Unconscious((mob_occupant.bodytemperature * unconscious_factor) * 2000) if(beaker) if(reagent_transfer == 0) // Magically transfer reagents. Because cryo magic. - beaker.reagents.trans_to(occupant, 1, efficiency * 0.25, methods = VAPOR) // Transfer reagents. + beaker.reagents.trans_to(occupant, 1, efficiency * 25, methods = VAPOR) // Transfer reagents. air1.gases[/datum/gas/oxygen][MOLES] -= max(0,air1.gases[/datum/gas/oxygen][MOLES] - 2 / efficiency) //Let's use gas for this air1.garbage_collect() if(++reagent_transfer >= 10 * efficiency) // Throttle reagent transfer (higher efficiency will transfer the same amount but consume less from the beaker). @@ -302,6 +302,7 @@ L.update_mobility() occupant = null flick("pod-open-anim", src) + reagent_transfer = efficiency * 10 - 5 // wait before injecting the next occupant ..() /obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user) diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm index e31d816aa6c..6bbee6133e9 100644 --- a/code/modules/cargo/bounties/chef.dm +++ b/code/modules/cargo/bounties/chef.dm @@ -2,7 +2,7 @@ name = "Birthday Cake" description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!" reward = 4000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday) + wanted_types = list(/obj/item/food/cake/birthday, /obj/item/food/cakeslice/birthday) /datum/bounty/item/chef/soup name = "Soup" diff --git a/code/modules/cargo/bounties/mech.dm b/code/modules/cargo/bounties/mech.dm index 3651be1af4e..b3dd8d580d1 100644 --- a/code/modules/cargo/bounties/mech.dm +++ b/code/modules/cargo/bounties/mech.dm @@ -13,10 +13,10 @@ /datum/bounty/item/mech/mark_high_priority(scale_reward) return ..(max(scale_reward * 0.7, 1.2)) -/datum/bounty/item/mech/ripleymkii +/datum/bounty/item/mech/ripleymk2 name = "APLU MK-II \"Ripley\"" reward = 13000 - wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley/mkii) + wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley/mk2) /datum/bounty/item/mech/clarke name = "Clarke" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 48d88ab7b32..203b6326728 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -421,4 +421,4 @@ l_pocket = /obj/item/kitchen/knife backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/storage/box/fireworks=3,\ - /obj/item/reagent_containers/food/snacks/store/cake/birthday=1) + /obj/item/food/cake/birthday=1) diff --git a/code/modules/discord/accountlink.dm b/code/modules/discord/accountlink.dm index d19e6959c59..0ea776a0111 100644 --- a/code/modules/discord/accountlink.dm +++ b/code/modules/discord/accountlink.dm @@ -22,7 +22,7 @@ // Will generate one if an expired one doesn't exist already, otherwise will grab existing token var/one_time_token = SSdiscord.get_or_generate_one_time_token_for_ckey(ckey) SSdiscord.reverify_cache[usr.ckey] = one_time_token - message = "Your one time token is: [one_time_token], Assuming you have the required living minutes in game, you can now verify yourself in discord by using the command \".verify [one_time_token]\"" + message = "Your one time token is: [one_time_token], Assuming you have the required living minutes in game, you can now verify yourself in discord by using the command \" .verify [one_time_token] \"" //Now give them a browse window so they can't miss whatever we told them var/datum/browser/window = new/datum/browser(usr, "discordverification", "Discord verification") diff --git a/code/modules/events/crystal_event.dm b/code/modules/events/crystal_event.dm index 999a4d5637a..6cbd4262304 100644 --- a/code/modules/events/crystal_event.dm +++ b/code/modules/events/crystal_event.dm @@ -1,3 +1,4 @@ +///Global list that stores the 4 kinds of waves the crystal invasion can have and the portals each one can spawn GLOBAL_LIST_INIT(crystal_invasion_waves, list( "small wave" = list( /obj/structure/crystal_portal/small=4, @@ -11,17 +12,18 @@ GLOBAL_LIST_INIT(crystal_invasion_waves, list( "big wave" = list( /obj/structure/crystal_portal/small=5, /obj/structure/crystal_portal/medium=3, - /obj/structure/crystal_portal/big=2, - /obj/structure/crystal_portal/huge=1 + /obj/structure/crystal_portal/big=2 ), "huge wave" = list( /obj/structure/crystal_portal/small=7, /obj/structure/crystal_portal/medium=5, - /obj/structure/crystal_portal/big=3, - /obj/structure/crystal_portal/huge=2 + /obj/structure/crystal_portal/big=3 ), )) +///Global list that stores the all the instantiated portals around the station, used when stabilizing the crystal GLOBAL_LIST_EMPTY(crystal_portals) +///Global list that store the huge portals that spawn at the start of the event +GLOBAL_LIST_EMPTY(huge_crystal_portals) /* This section is for the event controller @@ -48,12 +50,120 @@ This section is for the event controller var/obj/machinery/destabilized_crystal/dest_crystal ///Check if the event will end badly var/is_zk_scenario = TRUE + ///Ticks that have to pass before second wave + var/second_wave = 310 + ///Store the areas where the huge portals appears + var/list/center_areas = list() /datum/round_event/crystal_invasion/start() + destabilize_supermatter_crystal() choose_wave_type() + addtimer(CALLBACK(src, .proc/create_random_portals), 2 SECONDS) + +///Destabilize the Supermatter crystal and spawn 6 portals around it +/datum/round_event/crystal_invasion/proc/destabilize_supermatter_crystal() + var/list/sm_crystal = list() + for(var/obj/machinery/power/supermatter_crystal/temp in GLOB.machines) + if(istype(temp, /obj/machinery/power/supermatter_crystal/shard)) + continue + sm_crystal += temp + if(!length(sm_crystal)) + log_game("No engine found, killing the crystal invasion event.") + kill() + return + + var/obj/machinery/power/supermatter_crystal/crystal = pick(sm_crystal) + dest_crystal = crystal.destabilize(portal_numbers) + RegisterSignal(dest_crystal, COMSIG_PARENT_QDELETING, .proc/on_dest_crystal_qdel) + + for(var/t in RANGE_TURFS(8, dest_crystal.loc)) + var/turf/turf_loc = t + var/distance_from_center = get_dist(turf_loc, dest_crystal.loc) + switch(distance_from_center) + if(0) + distance_from_center = 1 //Same tile, let's avoid a division by zero. + if(-1) + kill() + CRASH("Negative distance measurement from the center turf detected, this should never happen") + if(prob(325 / distance_from_center)) + if(isopenturf(turf_loc) || isspaceturf(turf_loc)) + turf_loc.ChangeTurf(/turf/open/indestructible/crystal_floor, flags = CHANGETURF_INHERIT_AIR) + else + turf_loc.ChangeTurf(/turf/closed/indestructible/crystal_wall) + + var/list/crystal_spawner_turfs = list() + for(var/range_turf in RANGE_TURFS(6, dest_crystal.loc)) + if(!isopenturf(range_turf) || isspaceturf(range_turf)) + continue + crystal_spawner_turfs += range_turf + + for(var/i in 1 to 6) + var/pick_portal = pickweight(GLOB.crystal_invasion_waves["big wave"]) + var/turf/portal_spawner_turf = pick(crystal_spawner_turfs) + new pick_portal(portal_spawner_turf) + +///Chooses random areas where to put the main huge portals and then spawn around them 6 more portals +/datum/round_event/crystal_invasion/proc/create_random_portals() + var/list/center_finder = list() + for(var/es in GLOB.generic_event_spawns) + var/obj/effect/landmark/event_spawn/temp = es + if(is_station_level(temp.z)) + center_finder += temp + if(!center_finder.len) + kill() + CRASH("No landmarks on the station map, aborting") + for(var/j in 1 to portal_numbers) + if(!length(center_finder)) + kill() + CRASH("center_finder had less entries than portal_numbers ([j]/[portal_numbers])") + var/obj/center = pick_n_take(center_finder) + var/turf/center_turf = center.loc + var/area/center_area = get_area(center_turf) + center_areas += center_area + + explosion(center_turf,0,0,5,7,7) + + new /obj/structure/crystal_portal/huge(center_turf) + + for(var/t in RANGE_TURFS(5, center_turf)) + var/turf/turf_loc = t + var/distance_from_center = get_dist(turf_loc, center_turf) + switch(distance_from_center) + if(0) + distance_from_center = 1 //Same tile, let's avoid a division by zero. + if(-1) + kill() + CRASH("Negative distance error here") + if(prob(250 / distance_from_center)) + if(isopenturf(turf_loc) || isspaceturf(turf_loc)) + turf_loc.ChangeTurf(/turf/open/indestructible/crystal_floor, flags = CHANGETURF_INHERIT_AIR) + else + turf_loc.ChangeTurf(/turf/closed/indestructible/crystal_wall) + + var/list/portal_spawner_turfs = list() + for(var/range_turf in RANGE_TURFS(6, center_turf)) + if(!isopenturf(range_turf) || isspaceturf(range_turf)) + continue + portal_spawner_turfs += range_turf + + for(var/i in 1 to 6) + if(!length(portal_spawner_turfs)) + break + var/pick_portal = pickweight(GLOB.crystal_invasion_waves[wave_name]) + var/turf/portal_spawner_turf = pick_n_take(portal_spawner_turfs) + new pick_portal(portal_spawner_turf) + dest_crystal.icon_state = "psy_shielded" + dest_crystal.changed_icon = FALSE + addtimer(CALLBACK(src, .proc/announce_locations), 8 SECONDS) + +///After 8 seconds from the initial explosions centcom will announce the location of the huge portals +/datum/round_event/crystal_invasion/proc/announce_locations() + priority_announce("WARNING - After tracking the powerspikes from your station we have determined that huge portals have appeared at the following locations:[center_areas.Join(", ")]. \ + Please close those before attempting to stabilize the crystal.", "Alert") + sound_to_playing_players('sound/misc/notice1.ogg') /datum/round_event/crystal_invasion/announce(fake) - priority_announce("WARNING - Destabilization of the Supermatter Crystal Matrix detected, please stand by waiting further instructions", "Alert") + priority_announce("WARNING - Destabilization of the Supermatter Crystal Matrix detected, please stand by and await further instructions.", "Alert") sound_to_playing_players('sound/misc/notice1.ogg') ///Choose the type of the wave @@ -66,70 +176,22 @@ This section is for the event controller "huge wave" = 5)) switch(wave_name) if("small wave") - portal_numbers = rand(9, 11) + portal_numbers = 2 if("medium wave") - portal_numbers = rand(8, 12) + portal_numbers = rand(2, 3) if("big wave") - portal_numbers = rand(9, 13) + portal_numbers = rand(3, 4) if("huge wave") - portal_numbers = rand(11, 15) + portal_numbers = rand(4, 5) else kill() CRASH("Wave name of [wave_name] not recognised.") - var/list/sm_crystal = list() - for(var/obj/machinery/power/supermatter_crystal/temp in GLOB.machines) - if(istype(temp, /obj/machinery/power/supermatter_crystal/shard)) - continue - sm_crystal += temp - if(sm_crystal == null) - log_game("No engine found, killing the crystal invasion event.") - kill() - return - var/obj/machinery/power/supermatter_crystal/crystal = pick(sm_crystal) - dest_crystal = crystal.destabilize(portal_numbers) - RegisterSignal(dest_crystal, COMSIG_PARENT_QDELETING, .proc/on_dest_crystal_qdel) - priority_announce("WARNING - Numerous energy fluctuations have been detected from your Supermatter; we estimate a [wave_name] of crystalline creatures \ - coming from \[REDACTED]; there will be [portal_numbers] portals spread around the station that you must close. Harvest a \[REDACTED] \ - anomaly from a portal by using the anomaly neutralizer, place it inside a crystal stabilizer, and inject it into your Supermatter to stop a ZK-Lambda-Class Cosmic Fragmentation Scenario from occurring.", "Alert") + coming from \[REDACTED]; there will be [portal_numbers] main portals spread around the station that you must close. Harvest a \[REDACTED] \ + crystal from a portal by using the anomaly neutralizer, place it inside a crystal stabilizer, and inject it into your Supermatter to stop a ZK-Lambda-Class Cosmic Fragmentation Scenario from occurring.", "Alert") sound_to_playing_players('sound/misc/notice1.ogg') - addtimer(CALLBACK(src, .proc/spawn_portals), 3 SECONDS) - -///Pick a location from the generic_event_spawns list that are present on the maps and call the spawn anomaly and portal procs -/datum/round_event/crystal_invasion/proc/spawn_portals() - var/list/spawners = list() - for(var/es in GLOB.generic_event_spawns) - var/obj/effect/landmark/event_spawn/temp = es - if(is_station_level(temp.z)) - spawners += temp - for(var/i in 1 to portal_numbers) - spawn_portal(GLOB.crystal_invasion_waves[wave_name], spawners) - for(var/i in 1 to 6) - spawn_anomaly(spawners) - - var/list/crystal_spawner_turfs = list() - for(var/range_turf in RANGE_TURFS(6, dest_crystal.loc)) - if(!isopenturf(range_turf) || isspaceturf(range_turf)) - continue - crystal_spawner_turfs += range_turf - for(var/i in 1 to 6) - if(!length(crystal_spawner_turfs)) - break - var/pick_portal = pickweight(GLOB.crystal_invasion_waves["big wave"]) - var/turf/crystal_spawner_turf = pick_n_take(crystal_spawner_turfs) - new pick_portal(crystal_spawner_turf) - - addtimer(CALLBACK(src, .proc/more_portals, GLOB.crystal_invasion_waves[wave_name]), 10 MINUTES) - -///Spawn an anomaly randomly in a different location than spawn_portal() -/datum/round_event/crystal_invasion/proc/spawn_anomaly(list/spawners) - if(!spawners.len) - CRASH("No landmarks on the station map, aborting") - var/obj/spawner = pick(spawners) - new/obj/effect/anomaly/flux(spawner.loc, 30 SECONDS, FALSE, FALSE) - ///Spawn one portal in a random location choosen from the generic_event_spawns list /datum/round_event/crystal_invasion/proc/spawn_portal(list/wave_type, list/spawners) if(!spawners.len) @@ -149,9 +211,11 @@ This section is for the event controller if(is_station_level(temp.z)) spawners += temp for(var/i in 1 to rand(10, 15)) - spawn_portal(GLOB.crystal_invasion_waves["small wave"], spawners) + spawn_portal(GLOB.crystal_invasion_waves["medium wave"], spawners) /datum/round_event/crystal_invasion/tick() + if(activeFor == second_wave) + more_portals() if(dest_crystal.is_stabilized == TRUE) processing = FALSE is_zk_scenario = FALSE @@ -208,6 +272,49 @@ This section is for the event controller dest_crystal = null kill() +/turf/open/indestructible/crystal_floor + name = "Crystal floor" + desc = "A crystallized floor" + icon_state = "noslip-damaged1" + baseturfs = /turf/open/space + +/turf/open/indestructible/crystal_floor/examine(mob/user) + . += ..() + . += "The floor is made of sturdy crystals." + +/turf/open/indestructible/crystal_floor/welder_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + to_chat(user, "You begin heating up the crystal...") + if(I.use_tool(src, user, 2.5 SECONDS, volume=100)) + to_chat(user, "The crystal crumbles into dust.") + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + return TRUE + return FALSE + +/turf/closed/indestructible/crystal_wall + name = "Crystal wall" + desc = "A crystallized wall" + icon = 'icons/turf/mining.dmi' + icon_state = "rock_highchance" + baseturfs = /turf/open/space + +/turf/closed/indestructible/crystal_wall/examine(mob/user) + . += ..() + . += "The wall is made of sturdy crystals." + +/turf/open/indestructible/crystal_floor/welder_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + to_chat(user, "You begin heating up the crystal...") + if(I.use_tool(src, user, 2.5 SECONDS, volume=100)) + to_chat(user, "The crystal crumbles into dust.") + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + return TRUE + return FALSE + /* This section is for the destabilized SM */ @@ -228,6 +335,8 @@ This section is for the destabilized SM ///Our sound loop var/datum/looping_sound/destabilized_crystal/soundloop + var/changed_icon = TRUE + /obj/machinery/destabilized_crystal/Initialize() . = ..() soundloop = new(list(src), TRUE) @@ -245,12 +354,18 @@ This section is for the destabilized SM playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) if(prob(15)) fire_nuclear_particle() + if(length(GLOB.huge_crystal_portals) == 0 && !changed_icon) + icon_state = "psy" + changed_icon = TRUE + var/turf/loc_turf = loc var/datum/gas_mixture/env = loc_turf.return_air() var/datum/gas_mixture/removed var/gasefficency = 0.5 removed = env.remove(gasefficency * env.total_moles()) removed.assert_gases(/datum/gas/bz, /datum/gas/miasma) + if(!removed || !removed.total_moles() || isspaceturf(loc_turf)) + removed.gases[/datum/gas/bz][MOLES] += 0.5 removed.gases[/datum/gas/bz][MOLES] += 15.5 removed.gases[/datum/gas/miasma][MOLES] += 5.5 env.merge(removed) @@ -260,21 +375,24 @@ This section is for the destabilized SM if(!istype(user)) return if(istype(W, /obj/item/crystal_stabilizer)) + if(length(GLOB.huge_crystal_portals) > 0) + to_chat(user, "The shield protecting the crystal is still up! Close all the main portals before attempting this again!") + return var/obj/item/crystal_stabilizer/injector = W if(!injector.filled) to_chat(user, "\The [W] is empty!") return - to_chat(user, "You carefully begin injecting \the [src] with \the [W]... take care not to move untill all the steps are finished!") - if(!W.use_tool(src, user, 5 SECONDS, volume = 100)) + to_chat(user, "You carefully begin injecting \the [src] with \the [W]... take care not to move until all the steps are finished!") + if(!W.use_tool(src, user, 1 SECONDS, volume = 100)) return to_chat(user, "Seems that \the [src] internal resonance is fading with the fluid!") playsound(get_turf(src), 'sound/effects/supermatter.ogg', 35, TRUE) - if(!W.use_tool(src, user, 6.5 SECONDS, volume = 100)) + if(!W.use_tool(src, user, 1.5 SECONDS, volume = 100)) return to_chat(user, "The [src] is reacting violently with the fluid!") fire_nuclear_particle() - radiation_pulse(src, 2500, 6) - if(!W.use_tool(src, user, 7.5 SECONDS, volume = 100)) + radiation_pulse(src, 1000, 6) + if(!W.use_tool(src, user, 2 SECONDS, volume = 100)) return to_chat(user, "The [src] has been restored and restabilized!") playsound(get_turf(src), 'sound/effects/supermatter.ogg', 35, TRUE) @@ -285,6 +403,10 @@ This section is for the destabilized SM /obj/machinery/destabilized_crystal/examine(mob/user) . = ..() . += "The Crystal appears to be heavily destabilized. Maybe it can be fixed by injecting it with something from another world." + if(length(GLOB.huge_crystal_portals) > 0) + . += "The Destabilized Crystal appears to be protected by some kind of shield." + else + . += "The shield that was protecting the Crystal is gone, it's time to restore it." /obj/machinery/destabilized_crystal/Bumped(atom/movable/movable_atom) if(!isliving(movable_atom)) @@ -309,7 +431,7 @@ This section is for the destabilized SM for(var/find_portal in GLOB.crystal_portals) var/obj/structure/crystal_portal/portal = find_portal portal.modify_component() - priority_announce("The sacrifice of a member of the station (we hope was the clown) has weakened the portals and the monsters generation is slowing down!") + priority_announce("The sacrifice of a crewmember (hopefully the clown) appears to have weakened the portals and slowed down the number of monsters coming through!") sound_to_playing_players('sound/misc/notice2.ogg') /* @@ -461,7 +583,7 @@ This section is for the crystal portals variations name = "Small Portal" desc = "A small portal to an unkown dimension!" color = COLOR_BRIGHT_BLUE - max_mobs = 3 + max_mobs = 2 spawn_time = 5 SECONDS mob_types = list( /mob/living/simple_animal/hostile/crystal_monster/minion, @@ -472,8 +594,8 @@ This section is for the crystal portals variations name = "Medium Portal" desc = "A medium portal to an unkown dimension!" color = COLOR_GREEN - max_mobs = 4 - spawn_time = 10 SECONDS + max_mobs = 3 + spawn_time = 15 SECONDS mob_types = list( /mob/living/simple_animal/hostile/crystal_monster/minion, /mob/living/simple_animal/hostile/crystal_monster/thug, @@ -484,8 +606,8 @@ This section is for the crystal portals variations name = "Big Portal" desc = "A big portal to an unkown dimension!" color = COLOR_RED - max_mobs = 5 - spawn_time = 10 SECONDS + max_mobs = 4 + spawn_time = 15 SECONDS mob_types = list( /mob/living/simple_animal/hostile/crystal_monster/minion, /mob/living/simple_animal/hostile/crystal_monster/thug, @@ -497,16 +619,22 @@ This section is for the crystal portals variations name = "Huge Portal" desc = "A huge portal to an unkown dimension!" color = COLOR_BLACK - max_mobs = 6 - spawn_time = 15 SECONDS + max_mobs = 5 + spawn_time = 20 SECONDS mob_types = list( - /mob/living/simple_animal/hostile/crystal_monster/minion, - /mob/living/simple_animal/hostile/crystal_monster/thug, /mob/living/simple_animal/hostile/crystal_monster/recruit, /mob/living/simple_animal/hostile/crystal_monster/killer, /mob/living/simple_animal/hostile/crystal_monster/boss, ) +/obj/structure/crystal_portal/huge/Initialize() + . = ..() + GLOB.huge_crystal_portals += src + +/obj/structure/crystal_portal/huge/Destroy() + GLOB.huge_crystal_portals -= src + return ..() + /* This section is for the crystal monsters variations */ @@ -543,6 +671,10 @@ This section is for the crystal monsters variations stop_automated_movement_when_pulled = FALSE wander = TRUE +/mob/living/simple_animal/hostile/crystal_monster/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_TESLA_SHOCKIMMUNE, INNATE_TRAIT) + /mob/living/simple_animal/hostile/crystal_monster/minion name = "crystal minion" desc = "A monster made of crystals similar to the Supermatter ones." @@ -553,9 +685,9 @@ This section is for the crystal monsters variations maxHealth = 20 health = 20 speed = 0.8 - harm_intent_damage = 11 - melee_damage_lower = 20 - melee_damage_upper = 35 + harm_intent_damage = 7 + melee_damage_lower = 10 + melee_damage_upper = 15 move_force = MOVE_FORCE_WEAK move_resist = MOVE_FORCE_WEAK pull_force = MOVE_FORCE_WEAK @@ -582,8 +714,8 @@ This section is for the crystal monsters variations health = 20 speed = 0.9 harm_intent_damage = 11 - melee_damage_lower = 20 - melee_damage_upper = 35 + melee_damage_lower = 10 + melee_damage_upper = 15 move_force = MOVE_FORCE_NORMAL move_resist = MOVE_FORCE_NORMAL pull_force = MOVE_FORCE_NORMAL @@ -614,8 +746,8 @@ This section is for the crystal monsters variations health = 20 speed = 1.2 harm_intent_damage = 11 - melee_damage_lower = 20 - melee_damage_upper = 35 + melee_damage_lower = 15 + melee_damage_upper = 20 move_force = MOVE_FORCE_STRONG move_resist = MOVE_FORCE_STRONG pull_force = MOVE_FORCE_STRONG @@ -639,9 +771,9 @@ This section is for the crystal monsters variations maxHealth = 35 health = 35 speed = 0.75 - harm_intent_damage = 20 - melee_damage_lower = 25 - melee_damage_upper = 45 + harm_intent_damage = 15 + melee_damage_lower = 30 + melee_damage_upper = 35 move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_VERY_STRONG pull_force = MOVE_FORCE_VERY_STRONG @@ -652,7 +784,7 @@ This section is for the crystal monsters variations projectilesound = 'sound/weapons/pierce.ogg' ranged = 1 ranged_message = "throws" - ranged_cooldown_time = 25 + ranged_cooldown_time = 3.5 SECONDS /obj/projectile/temp/crystal_killer name = "freezing blast" @@ -688,11 +820,11 @@ This section is for the crystal monsters variations move_resist = MOVE_FORCE_EXTREMELY_STRONG pull_force = MOVE_FORCE_EXTREMELY_STRONG environment_smash = ENVIRONMENT_SMASH_RWALLS - projectiletype = /obj/projectile/magic/aoe/lightning + projectiletype = /obj/projectile/magic/aoe/lightning/no_zap projectilesound = 'sound/weapons/pierce.ogg' ranged = 1 ranged_message = "throws" - ranged_cooldown_time = 45 + ranged_cooldown_time = 5.5 SECONDS /mob/living/simple_animal/hostile/crystal_monster/boss/Bump(atom/clong) . = ..() diff --git a/code/modules/events/shuttle_catastrophe.dm b/code/modules/events/shuttle_catastrophe.dm index 5bb61f559e3..e9587c76d8d 100644 --- a/code/modules/events/shuttle_catastrophe.dm +++ b/code/modules/events/shuttle_catastrophe.dm @@ -33,7 +33,6 @@ /datum/round_event/shuttle_catastrophe/start() SSshuttle.shuttle_purchased = SHUTTLEPURCHASE_FORCED SSshuttle.unload_preview() - SSshuttle.load_template(new_shuttle) SSshuttle.existing_shuttle = SSshuttle.emergency SSshuttle.action_load(new_shuttle) log_shuttle("Shuttle Catastrophe set a new shuttle, [new_shuttle.name].") diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 63304214127..399e32c12e7 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -42,7 +42,7 @@ to_chat(user, "The ingredient is too big for [src]!") else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume)) to_chat(user, "You can't add more ingredients to [src]!") - else if(istype(I, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(I, /obj/item/reagent_containers/food/snacks/cakeslice/custom)) + else if(istype(I, /obj/item/reagent_containers/food/snacks/pizzaslice/custom)) to_chat(user, "Adding [I.name] to [src] would make a mess.") else if(!user.transferItemToLoc(I, src)) @@ -161,17 +161,6 @@ icon_state = "custburg" foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/customizable/cake - name = "cake" - ingMax = 6 - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/custom - slices_num = 5 - icon = 'icons/obj/food/piecake.dmi' - icon_state = "plaincake" - foodtype = GRAIN | DAIRY - - /obj/item/reagent_containers/food/snacks/customizable/kebab name = "kebab" desc = "Delicious food on a stick." diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 370b911b91d..055af1ca8d0 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -185,7 +185,7 @@ All foods are distributed among various categories. Use common sense. if(S.w_class > WEIGHT_CLASS_SMALL) to_chat(user, "[S] is too big for [src]!") return FALSE - if(!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(W, /obj/item/reagent_containers/food/snacks/cakeslice/custom)) + if(!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom)) to_chat(user, "[src] can't be filled with [S]!") return FALSE if(contents.len >= 20) diff --git a/code/modules/food_and_drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm index 2f511fa6578..5a72edfd583 100644 --- a/code/modules/food_and_drinks/food/snacks/dough.dm +++ b/code/modules/food_and_drinks/food/snacks/dough.dm @@ -80,7 +80,7 @@ desc = "Cook it to get a cake." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "cakebatter" - cooked_type = /obj/item/reagent_containers/food/snacks/store/cake/plain + cooked_type = /obj/item/food/cake/plain list_reagents = list(/datum/reagent/consumable/nutriment = 9) w_class = WEIGHT_CLASS_NORMAL tastes = list("batter" = 1) diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm deleted file mode 100644 index 721a72ec80b..00000000000 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ /dev/null @@ -1,455 +0,0 @@ -/obj/item/reagent_containers/food/snacks/store/cake - icon = 'icons/obj/food/piecake.dmi' - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/plain - slices_num = 5 - bitesize = 3 - volume = 80 - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 1) - foodtype = GRAIN | DAIRY - - -/obj/item/reagent_containers/food/snacks/cakeslice - icon = 'icons/obj/food/piecake.dmi' - trash = /obj/item/trash/plate - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1) - customfoodfilling = 0 //to avoid infinite cake-ception - tastes = list("cake" = 1) - foodtype = GRAIN | DAIRY - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/store/cake/plain - name = "plain cake" - desc = "A plain cake, not a lie." - icon_state = "plaincake" - custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/cake - bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2) - tastes = list("sweetness" = 2,"cake" = 5) - foodtype = GRAIN | DAIRY | SUGAR - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/cakeslice/plain - name = "plain cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "plaincake_slice" - filling_color = "#FFD700" - customfoodfilling = 1 - tastes = list("sweetness" = 2,"cake" = 5) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/carrot - name = "carrot cake" - desc = "A favorite desert of a certain wascally wabbit. Not a lie." - icon_state = "carrotcake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/carrot - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/medicine/oculine = 5, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/medicine/oculine = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/carrot - name = "carrot cake slice" - desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." - icon_state = "carrotcake_slice" - filling_color = "#FFA500" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/oculine = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/brain - name = "brain cake" - desc = "A squishy cake-thing." - icon_state = "braincake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brain - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 16, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) - foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/cakeslice/brain - name = "brain cake slice" - desc = "Lemme tell you something about prions. THEY'RE DELICIOUS." - icon_state = "braincakeslice" - filling_color = "#FF69B4" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/medicine/mannitol = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) - foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/cheese - name = "cheese cake" - desc = "DANGEROUSLY cheesy." - icon_state = "cheesecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/cheese - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment/vitamin = 8, /datum/reagent/consumable/nutriment/protein = 5) - tastes = list("cake" = 4, "cream cheese" = 3) - foodtype = GRAIN | DAIRY - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/cheese - name = "cheese cake slice" - desc = "Slice of pure cheestisfaction." - icon_state = "cheesecake_slice" - filling_color = "#FFFACD" - tastes = list("cake" = 4, "cream cheese" = 3) - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 1,, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/orange - name = "orange cake" - desc = "A cake with added orange." - icon_state = "orangecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/orange - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/orange - name = "orange cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "orangecake_slice" - filling_color = "#FFA500" - tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/lime - name = "lime cake" - desc = "A cake with added lime." - icon_state = "limecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/lime - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/lime - name = "lime cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "limecake_slice" - filling_color = "#00FF00" - tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/lemon - name = "lemon cake" - desc = "A cake with added lemon." - icon_state = "lemoncake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/lemon - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/lemon - name = "lemon cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "lemoncake_slice" - filling_color = "#FFEE00" - tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/chocolate - name = "chocolate cake" - desc = "A cake with added chocolate." - icon_state = "chocolatecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/chocolate - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/chocolate - name = "chocolate cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "chocolatecake_slice" - filling_color = "#A0522D" - tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/birthday - name = "birthday cake" - desc = "Happy Birthday little clown..." - icon_state = "birthdaycake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/birthday - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 1) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/microwave_act(obj/machinery/microwave/M) //super sekrit club - new /obj/item/clothing/head/hardhat/cakehat(get_turf(src)) - qdel(src) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday - name = "birthday cake slice" - desc = "A slice of your birthday." - icon_state = "birthdaycakeslice" - filling_color = "#DC143C" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("cake" = 5, "sweetness" = 1) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy - name = "energy cake" - desc = "Just enough calories for a whole nuclear operative squad." - icon_state = "energycake" - force = 5 - hitsound = 'sound/weapons/blade1.ogg' - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy - list_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/pwr_game = 10, /datum/reagent/consumable/liquidelectricity = 10) - tastes = list("cake" = 3, "a Vlad's Salad" = 1) - value = FOOD_ILLEGAL - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/proc/energy_bite(mob/living/user) - to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!") - user.apply_damage(30,BRUTE,BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/attack(mob/living/M, mob/living/user) - . = ..() - if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly - return - energy_bite(M, user) - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/microwave_act(obj/machinery/microwave/M) //super sekriter club - new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src)) - qdel(src) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy - name = "energy cake slice" - desc = "For the traitor on the go." - icon_state = "energycakeslice" - force = 2 - hitsound = 'sound/weapons/blade1.ogg' - filling_color = "#00FF00" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/pwr_game = 2, /datum/reagent/consumable/liquidelectricity = 2) - tastes = list("cake" = 3, "a Vlad's Salad" = 1) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy/proc/energy_bite(mob/living/user) - to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") - user.apply_damage(18,BRUTE,BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy/attack(mob/living/M, mob/living/user) - . = ..() - if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly - return - energy_bite(M, user) - -/obj/item/reagent_containers/food/snacks/store/cake/apple - name = "apple cake" - desc = "A cake centred with Apple." - icon_state = "applecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/apple - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/apple - name = "apple cake slice" - desc = "A slice of heavenly cake." - icon_state = "applecakeslice" - filling_color = "#FF4500" - tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/custom - name = "cake slice" - icon_state = "plaincake_slice" - filling_color = "#FFFFFF" - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/slimecake - name = "Slime cake" - desc = "A cake made of slimes. Probably not electrified." - icon_state = "slimecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/slimecake - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) - foodtype = GRAIN | DAIRY | SUGAR - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/slimecake - name = "slime cake slice" - desc = "A slice of slime cake." - icon_state = "slimecake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice - name = "pumpkin spice cake" - desc = "A hollow cake with real pumpkin." - icon_state = "pumpkinspicecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pumpkinspice - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/cakeslice/pumpkinspice - name = "pumpkin spice cake slice" - desc = "A spicy slice of pumpkin goodness." - icon_state = "pumpkinspicecakeslice" - filling_color = "#FFD700" - tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake - name = "blackberry and strawberry vanilla cake" - desc = "A plain cake, filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_vanilla_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc - bonus_reagents = list(/datum/reagent/consumable/nutriment = 14, /datum/reagent/consumable/nutriment/vitamin = 4) - tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/bsvc - name = "blackberry and strawberry vanilla cake slice" - desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_vanilla_slice" - filling_color = "#FFD700" - tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake - name = "blackberry and strawberry chocolate cake" - desc = "A chocolate cake, filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_coco_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc - bonus_reagents = list(/datum/reagent/consumable/nutriment = 14, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/coco = 5) - tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/bscc - name = "blackberry and strawberry chocolate cake slice" - desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_coco_slice" - filling_color = "#FFD700" - tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/holy_cake - name = "angel food cake" - desc = "A cake made for angels and chaplains alike! Contains holy water." - icon_state = "holy_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3, /datum/reagent/water/holywater = 10) - tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) - foodtype = GRAIN | DAIRY | SUGAR - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice - name = "angel food cake slice" - desc = "A slice of heavenly cake." - icon_state = "holy_cake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/pound_cake - name = "pound cake" - desc = "A condensed cake made for filling people up quickly." - icon_state = "pound_cake" - slices_num = 7 //Its ment to feed the party - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice - bonus_reagents = list(/datum/reagent/consumable/nutriment = 60) - tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1) - foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice - name = "pound cake slice" - desc = "A slice of condensed cake made for filling people up quickly." - icon_state = "pound_cake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) - foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/snacks/store/cake/hardware_cake - name = "hardware cake" - desc = "A quote on quote cake that is made with electronic boards and leaks acid..." - icon_state = "hardware_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice - bonus_reagents = list(/datum/reagent/toxin/acid = 15, /datum/reagent/fuel/oil = 15) - tastes = list("acid" = 3, "metal" = 4, "glass" = 5) - foodtype = GRAIN | GROSS - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice - name = "hardware cake slice" - desc = "A slice of electronic boards and some acid." - icon_state = "hardware_cake_slice" - filling_color = "#00FFFF" - tastes = list("acid" = 3, "metal" = 4, "glass" = 5) - foodtype = GRAIN | GROSS - -/obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake - name = "vanilla cake" - desc = "A vanilla frosted cake." - icon_state = "vanillacake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice - bonus_reagents = list(/datum/reagent/consumable/sugar = 15, /datum/reagent/consumable/vanilla = 15) - tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) - foodtype = GRAIN | SUGAR | DAIRY - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice - name = "vanilla cake slice" - desc = "A slice of vanilla frosted cake." - icon_state = "vanillacake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) - foodtype = GRAIN | SUGAR | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/clown_cake - name = "clown cake" - desc = "A funny cake with a clown face on it." - icon_state = "clowncake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/clown_slice - bonus_reagents = list(/datum/reagent/consumable/sugar = 15) - tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) - foodtype = GRAIN | SUGAR | DAIRY - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice - name = "clown cake slice" - desc = "A slice of bad jokes, and silly props." - icon_state = "clowncake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) - foodtype = GRAIN | SUGAR | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/trumpet - name = "spaceman's cake" - desc = "A spaceman's trumpet frosted cake." - icon_state = "trumpetcake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/trumpet - bonus_reagents = list(/datum/reagent/medicine/polypyr = 15, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/berryjuice = 5) - filling_color = "#7A3D80" - tastes = list("cake" = 4, "violets" = 2, "jam" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/cakeslice/trumpet - name = "spaceman's cake" - desc = "A spaceman's trumpet frosted cake." - icon_state = "trumpetcakeslice" - filling_color = "#7A3D80" - tastes = list("cake" = 4, "violets" = 2, "jam" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index e1440eec255..95c9613eabb 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -6,190 +6,190 @@ /datum/crafting_recipe/food/carrotcake name = "Carrot cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/carrot = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/carrot + result = /obj/item/food/cake/carrot subcategory = CAT_CAKE /datum/crafting_recipe/food/cheesecake name = "Cheese cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/cheesewedge = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/cheese + result = /obj/item/food/cake/cheese subcategory = CAT_CAKE /datum/crafting_recipe/food/applecake name = "Apple cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/apple = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/apple + result = /obj/item/food/cake/apple subcategory = CAT_CAKE /datum/crafting_recipe/food/orangecake name = "Orange cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/citrus/orange = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/orange + result = /obj/item/food/cake/orange subcategory = CAT_CAKE /datum/crafting_recipe/food/limecake name = "Lime cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/lime + result = /obj/item/food/cake/lime subcategory = CAT_CAKE /datum/crafting_recipe/food/lemoncake name = "Lemon cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/lemon + result = /obj/item/food/cake/lemon subcategory = CAT_CAKE /datum/crafting_recipe/food/chocolatecake name = "Chocolate cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/chocolatebar = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/chocolate + result = /obj/item/food/cake/chocolate subcategory = CAT_CAKE /datum/crafting_recipe/food/birthdaycake name = "Birthday cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/candle = 1, /datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/caramel = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/birthday + result = /obj/item/food/cake/birthday subcategory = CAT_CAKE /datum/crafting_recipe/food/energycake name = "Energy cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/birthday = 1, + /obj/item/food/cake/birthday = 1, /obj/item/melee/transforming/energy/sword = 1, ) - blacklist = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy) - result = /obj/item/reagent_containers/food/snacks/store/cake/birthday/energy + blacklist = list(/obj/item/food/cake/birthday/energy) + result = /obj/item/food/cake/birthday/energy subcategory = CAT_CAKE /datum/crafting_recipe/food/braincake name = "Brain cake" reqs = list( /obj/item/organ/brain = 1, - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 + /obj/item/food/cake/plain = 1 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/brain + result = /obj/item/food/cake/brain subcategory = CAT_CAKE /datum/crafting_recipe/food/slimecake name = "Slime cake" reqs = list( /obj/item/slime_extract = 1, - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 + /obj/item/food/cake/plain = 1 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/slimecake + result = /obj/item/food/cake/slimecake subcategory = CAT_CAKE /datum/crafting_recipe/food/pumpkinspicecake name = "Pumpkin spice cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/pumpkin = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice + result = /obj/item/food/cake/pumpkinspice subcategory = CAT_CAKE /datum/crafting_recipe/food/holycake name = "Angel food cake" reqs = list( /datum/reagent/water/holywater = 15, - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 + /obj/item/food/cake/plain = 1 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/holy_cake + result = /obj/item/food/cake/holy_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/poundcake name = "Pound cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 4 + /obj/item/food/cake/plain = 4 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake + result = /obj/item/food/cake/pound_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/hardwarecake name = "Hardware cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/circuitboard = 2, /datum/reagent/toxin/acid = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake + result = /obj/item/food/cake/hardware_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/bscccake name = "blackberry and strawberry chocolate cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/chocolatebar = 2, /obj/item/reagent_containers/food/snacks/grown/berries = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/bscc + result = /obj/item/food/cake/bscc subcategory = CAT_CAKE /datum/crafting_recipe/food/bscvcake name = "blackberry and strawberry vanilla cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/berries = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc + result = /obj/item/food/cake/bsvc subcategory = CAT_CAKE /datum/crafting_recipe/food/clowncake name = "clown cake" always_available = FALSE reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/sundae = 2, /obj/item/reagent_containers/food/snacks/grown/banana = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake + result = /obj/item/food/cake/clown_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/vanillacake name = "vanilla cake" always_available = FALSE reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/vanillapod = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake + result = /obj/item/food/cake/vanilla_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/trumpetcake name = "Spaceman's Cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/trumpet = 2, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/berryjuice = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/trumpet + result = /obj/item/food/cake/trumpet subcategory = CAT_CAKE @@ -198,7 +198,7 @@ reqs = list( /obj/item/organ/brain = 1, /obj/item/organ/heart = 1, - /obj/item/reagent_containers/food/snacks/store/cake/birthday = 1, + /obj/item/food/cake/birthday = 1, /obj/item/reagent_containers/food/snacks/meat/slab = 3, /datum/reagent/blood = 30, /datum/reagent/consumable/sprinkles = 5, diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index d1148986ec4..2167d8e2294 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -180,28 +180,13 @@ result = /obj/item/reagent_containers/food/snacks/hotcrossbun subcategory = CAT_MISCFOOD - -/obj/item/reagent_containers/food/snacks/store/cake/brioche - name = "brioche cake" - desc = "A ring of sweet, glazed buns." - icon_state = "briochecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brioche - slices_num = 6 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2) - -/obj/item/reagent_containers/food/snacks/cakeslice/brioche - name = "brioche cake slice" - desc = "Delicious sweet-bread. Who needs anything else?" - icon_state = "briochecake_slice" - filling_color = "#FFD700" - /datum/crafting_recipe/food/briochecake name = "Brioche cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /datum/reagent/consumable/sugar = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/brioche + result = /obj/item/food/cake/brioche subcategory = CAT_MISCFOOD /obj/item/reagent_containers/food/snacks/scotchegg diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 5dba56e15b6..5a20bd34d76 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -275,7 +275,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) //cake + knife to cut it! var/turf/food_turf = get_turf(pick(table)) new /obj/item/kitchen/knife(food_turf) - var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf) + var/obj/item/food/cake/birthday/iancake = new(food_turf) iancake.desc = "Happy birthday, Ian!" //some balloons! this picks an open turf and pops a few balloons in and around that turf, yay. for(var/i in 1 to balloon_clusters) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index d5df01524bf..41bc32c042c 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -411,7 +411,8 @@ * If the methods include VAPOR it incorporates permiability protection. */ /mob/living/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - if((. = ..()) & COMPONENT_NO_EXPOSE_REAGENTS) + . = ..() + if(. & COMPONENT_NO_EXPOSE_REAGENTS) return if(methods & INGEST) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index b9cad100f66..d0ae301b4cf 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -258,7 +258,7 @@ maxHealth = 50 gender = FEMALE harm_intent_damage = 10 - butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/reagent_containers/food/snacks/cakeslice/birthday = 3, \ + butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/food/cakeslice/birthday = 3, \ /obj/item/reagent_containers/food/snacks/meat/slab = 2) response_harm_continuous = "takes a bite out of" response_harm_simple = "take a bite out of" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 2629569f32b..1a2445187b5 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -10,7 +10,7 @@ eyeblur = 2 impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser light_system = MOVABLE_LIGHT - light_range = 2 + light_range = 1 light_power = 1 light_color = COLOR_SOFT_RED ricochets_max = 50 //Honk! diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index c93d94c2f48..e6ac1f33b91 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -651,6 +651,11 @@ tesla_zap(src, zap_range, zap_power, zap_flags) qdel(src) +/obj/projectile/magic/aoe/lightning/no_zap + zap_power = 10000 + zap_range = 4 + zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE + /obj/projectile/magic/aoe/lightning/Destroy() qdel(chain) . = ..() diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 0003b3cc12d..6b207982353 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -95,34 +95,31 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /datum/reagent/proc/expose_atom(atom/exposed_atom, reac_volume) SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_ATOM, exposed_atom, reac_volume) - SEND_SIGNAL(exposed_atom, COMSIG_ATOM_EXPOSE_REAGENT, src, reac_volume) - return TRUE + . = 0 + . |= SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_ATOM, exposed_atom, reac_volume) + . |= SEND_SIGNAL(exposed_atom, COMSIG_ATOM_EXPOSE_REAGENT, src, reac_volume) /// Applies this reagent to a [/mob/living] /datum/reagent/proc/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0) SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_MOB, exposed_mob, methods, reac_volume, show_message, touch_protection) + . = SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_MOB, exposed_mob, methods, reac_volume, show_message, touch_protection) if((methods & penetrates_skin) && exposed_mob.reagents) //smoke, foam, spray var/amount = round(reac_volume*clamp((1 - touch_protection), 0, 1), 0.1) if(amount >= 0.5) exposed_mob.reagents.add_reagent(type, amount) - return TRUE /// Applies this reagent to an [/obj] /datum/reagent/proc/expose_obj(obj/exposed_obj, reac_volume) SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_OBJ, exposed_obj, reac_volume) - return TRUE + return SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_OBJ, exposed_obj, reac_volume) /// Applies this reagent to a [/turf] /datum/reagent/proc/expose_turf(turf/exposed_turf, reac_volume) SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_TURF, exposed_turf, reac_volume) - return TRUE + return SEND_SIGNAL(src, COMSIG_REAGENT_EXPOSE_TURF, exposed_turf, reac_volume) /// Called from [/datum/reagents/proc/metabolize] /datum/reagent/proc/on_mob_life(mob/living/carbon/M) diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index d574e489eb2..d6344f0387f 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -414,12 +414,12 @@ /datum/reagent/medicine/c2/synthflesh/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE) . = ..() if(!iscarbon(exposed_mob)) - return TRUE + return var/mob/living/carbon/carbies = exposed_mob if(carbies.stat == DEAD) show_message = 0 if(!(methods & (PATCH|TOUCH|VAPOR))) - return TRUE + return var/harmies = min(carbies.getBruteLoss(),carbies.adjustBruteLoss(-1.25 * reac_volume)*-1) var/burnies = min(carbies.getFireLoss(),carbies.adjustFireLoss(-1.25 * reac_volume)*-1) for(var/i in carbies.all_wounds) @@ -432,7 +432,6 @@ if(HAS_TRAIT_FROM(exposed_mob, TRAIT_HUSK, "burn") && carbies.getFireLoss() < THRESHOLD_UNHUSK && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/c2/synthflesh) + reac_volume >= 100)) carbies.cure_husk("burn") carbies.visible_message("A rubbery liquid coats [carbies]'s burns. [carbies] looks a lot healthier!") //we're avoiding using the phrases "burnt flesh" and "burnt skin" here because carbies could be a skeleton or a golem or something - return TRUE /******ORGAN HEALING******/ /*Suffix: -rite*/ diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index cc580905886..bb1c0ce5eb2 100755 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -158,7 +158,6 @@ addtimer(CALLBACK(exposed_mob, /mob/living/proc/unfry_mob), 3) if(FryLoss) exposed_mob.adjustFireLoss(FryLoss) - return TRUE /datum/reagent/consumable/cooking_oil/expose_turf(turf/open/exposed_turf, reac_volume) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index a97c0b0b2df..05b353e3027 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -723,6 +723,15 @@ color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 // oderless and tasteless +<<<<<<< HEAD +======= +/datum/reagent/oxygen/expose_obj(obj/exposed_obj, reac_volume) + . = ..() + if((!exposed_obj) || (!reac_volume)) + return + var/temp = holder ? holder.chem_temp : T20C + exposed_obj.atmos_spawn_air("o2=[reac_volume/2];TEMP=[temp]") +>>>>>>> upstream/master /datum/reagent/oxygen/expose_turf(turf/open/exposed_turf, reac_volume) . = ..() @@ -755,6 +764,16 @@ color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 +<<<<<<< HEAD +======= +/datum/reagent/nitrogen/expose_obj(obj/exposed_obj, reac_volume) + . = ..() + if((!exposed_obj) || (!reac_volume)) + return + var/temp = holder ? holder.chem_temp : T20C + exposed_obj.atmos_spawn_air("n2=[reac_volume/2];TEMP=[temp]") + +>>>>>>> upstream/master /datum/reagent/nitrogen/expose_turf(turf/open/exposed_turf, reac_volume) if(istype(exposed_turf)) var/temp = holder ? holder.chem_temp : T20C @@ -1255,6 +1274,16 @@ color = "#B0B0B0" // rgb : 192, 192, 192 taste_description = "something unknowable" +<<<<<<< HEAD +======= +/datum/reagent/carbondioxide/expose_obj(obj/exposed_obj, reac_volume) + . = ..() + if((!exposed_obj) || (!reac_volume)) + return + var/temp = holder ? holder.chem_temp : T20C + exposed_obj.atmos_spawn_air("co2=[reac_volume/5];TEMP=[temp]") + +>>>>>>> upstream/master /datum/reagent/carbondioxide/expose_turf(turf/open/exposed_turf, reac_volume) if(istype(exposed_turf)) var/temp = holder ? holder.chem_temp : T20C @@ -1269,6 +1298,15 @@ color = "#808080" taste_description = "sweetness" +<<<<<<< HEAD +======= +/datum/reagent/nitrous_oxide/expose_obj(obj/exposed_obj, reac_volume) + . = ..() + if((!exposed_obj) || (!reac_volume)) + return + var/temp = holder ? holder.chem_temp : T20C + exposed_obj.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]") +>>>>>>> upstream/master /datum/reagent/nitrous_oxide/expose_turf(turf/open/exposed_turf, reac_volume) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 34aae23aa07..03116997e43 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -87,6 +87,17 @@ A.atmos_spawn_air("plasma=[volume];TEMP=[holder.chem_temp]") holder.del_reagent(type) +<<<<<<< HEAD +======= +/datum/reagent/toxin/plasma/expose_obj(obj/exposed_obj, reac_volume) + . = ..() + if((!exposed_obj) || (!reac_volume)) + return + var/temp = holder ? holder.chem_temp : T20C + if(temp >= LIQUID_PLASMA_BP) + exposed_obj.atmos_spawn_air("plasma=[reac_volume];TEMP=[temp]") + +>>>>>>> upstream/master /datum/reagent/toxin/plasma/expose_turf(turf/open/exposed_turf, reac_volume) if(!istype(exposed_turf)) return diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 6b699521588..858fa6a8d3e 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -107,7 +107,7 @@ Charged extracts: effect_desc = "Creates a slime cake and some drinks." /obj/item/slimecross/charged/silver/do_effect(mob/user) - new /obj/item/reagent_containers/food/snacks/store/cake/slimecake(get_turf(user)) + new /obj/item/food/cake/slimecake(get_turf(user)) for(var/i in 1 to 10) var/drink_type = get_random_drink() new drink_type(get_turf(user)) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 9fe8ceb9bc1..7be1eccf148 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -31,6 +31,7 @@ COOLDOWN_DECLARE(mecha_bump_smash) light_system = MOVABLE_LIGHT light_on = FALSE + light_range = 4 ///What direction will the mech face when entered/powered on? Defaults to South. var/dir_in = SOUTH ///How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain. @@ -257,7 +258,7 @@ mob_occupant.update_mouse_pointer() /obj/vehicle/sealed/mecha/CheckParts(list/parts_list) - ..() + . = ..() cell = locate(/obj/item/stock_parts/cell) in contents scanmod = locate(/obj/item/stock_parts/scanning_module) in contents capacitor = locate(/obj/item/stock_parts/capacitor) in contents @@ -650,8 +651,16 @@ if(!allow_diagonal_movement && ISDIAGONALDIR(direction)) return TRUE + var/keyheld = FALSE + if(strafe) + for(var/D in return_drivers()) + var/mob/driver = D + if(driver.client?.keys_held["Alt"]) + keyheld = TRUE + break + //if we're not facing the way we're going rotate us - if(dir != direction && !strafe || forcerotate) + if(dir != direction && !strafe || forcerotate || keyheld) setDir(direction) if(turnsound) playsound(src,turnsound,40,TRUE) @@ -662,10 +671,6 @@ . = step(src,direction, dir) if(strafe) - for(var/D in return_drivers()) - var/mob/driver = D - if(driver.client?.keys_held["Alt"]) - return setDir(olddir) @@ -771,7 +776,8 @@ to_chat(user, "Take control of exosuit?
") /obj/vehicle/sealed/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) - if(!..()) + . = ..() + if(!.) return //Transfer from core or card to mech. Proc is called by mech. @@ -796,15 +802,15 @@ AI.remote_control = null to_chat(AI, "You have been downloaded to a mobile storage device. Wireless connection offline.") to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.") + return if(AI_MECH_HACK) //Called by AIs on the mech AI.linked_core = new /obj/structure/ai_core/deactivated(AI.loc) - if(AI.can_dominate_mechs) - if(LAZYLEN(occupants)) //Oh, I am sorry, were you using that? - to_chat(AI, "Occupants detected! Forced ejection initiated!") - to_chat(occupants, "You have been forcibly ejected!") - ejectall() //IT IS MINE, NOW. SUCK IT, RD! - ai_enter_mech(AI, interaction) + if(AI.can_dominate_mechs && LAZYLEN(occupants)) //Oh, I am sorry, were you using that? + to_chat(AI, "Occupants detected! Forced ejection initiated!") + to_chat(occupants, "You have been forcibly ejected!") + ejectall() //IT IS MINE, NOW. SUCK IT, RD! + AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES. if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech. AI = card.AI @@ -823,10 +829,10 @@ AI.radio_enabled = TRUE to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") card.AI = null - ai_enter_mech(AI, interaction) + ai_enter_mech(AI) //Hack and From Card interactions share some code, so leave that here for both to use. -/obj/vehicle/sealed/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction) +/obj/vehicle/sealed/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI) AI.ai_restore_power() mecha_flags |= SILICON_PILOT moved_inside(AI) @@ -834,8 +840,6 @@ AI.controlled_mech = src AI.remote_control = src AI.mobility_flags = ALL //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow. - if(interaction == AI_MECH_HACK) - AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES. to_chat(AI, AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" :\ "You have been uploaded to a mech's onboard computer.") to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.") @@ -939,21 +943,20 @@ initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats) initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/strafe) -/obj/vehicle/sealed/mecha/proc/moved_inside(mob/living/H) - . = FALSE - if(!(H?.client)) - return - if(ishuman(H) && !Adjacent(H)) - return - add_occupant(H) - H.forceMove(src) - H.update_mouse_pointer() - add_fingerprint(H) - log_message("[H] moved in as pilot.", LOG_MECHA) +/obj/vehicle/sealed/mecha/proc/moved_inside(mob/living/newoccupant) + if(!(newoccupant?.client)) + return FALSE + if(ishuman(newoccupant) && !Adjacent(newoccupant)) + return FALSE + add_occupant(newoccupant) + newoccupant.forceMove(src) + newoccupant.update_mouse_pointer() + add_fingerprint(newoccupant) + log_message("[newoccupant] moved in as pilot.", LOG_MECHA) setDir(dir_in) playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE) if(!internal_damage) - SEND_SOUND(H, sound('sound/mecha/nominal.ogg',volume=50)) + SEND_SOUND(newoccupant, sound('sound/mecha/nominal.ogg',volume=50)) return TRUE /obj/vehicle/sealed/mecha/proc/mmi_move_inside(obj/item/mmi/M, mob/user) @@ -997,7 +1000,6 @@ B.remote_control = src B.update_mobility() B.update_mouse_pointer() - update_icon() setDir(dir_in) log_message("[M] moved in as pilot.", LOG_MECHA) if(!internal_damage) @@ -1067,7 +1069,6 @@ mmi.mecha = null mmi.update_icon() L.mobility_flags = NONE - update_icon() setDir(dir_in) return ..() @@ -1076,21 +1077,21 @@ RegisterSignal(M, COMSIG_MOB_DEATH, .proc/mob_exit) RegisterSignal(M, COMSIG_MOB_CLICKON, .proc/on_mouseclick) RegisterSignal(M, COMSIG_MOB_SAY, .proc/display_speech_bubble) + . = ..() update_icon() - return ..() /obj/vehicle/sealed/mecha/remove_occupant(mob/M) UnregisterSignal(M, COMSIG_MOB_DEATH) UnregisterSignal(M, COMSIG_MOB_CLICKON) UnregisterSignal(M, COMSIG_MOB_SAY) - update_icon() M.clear_alert("charge") M.clear_alert("mech damage") if(M.client) M.update_mouse_pointer() M.client.view_size.resetToDefault() zoom_mode = 0 - return ..() + . = ..() + update_icon() ///////////////////////// ////// Access stuff ///// diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index 361106a31a5..ad911ba7dd0 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -373,7 +373,7 @@ return TRUE /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/vehicle/sealed/mecha/M) - var/obj/vehicle/sealed/mecha/working/ripley/mkii/N = new /obj/vehicle/sealed/mecha/working/ripley/mkii(get_turf(M),1) + var/obj/vehicle/sealed/mecha/working/ripley/mk2/N = new (get_turf(M),1) if(!N) return QDEL_NULL(N.cell) diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index f9e2933a75a..846b768b96f 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -49,7 +49,7 @@ if(kickback) chassis.newtonian_move(newtonian_target) chassis.log_message("Fired from [src.name], targeting [target].", LOG_MECHA) - return ..() + return //Base energy weapon type /obj/item/mecha_parts/mecha_equipment/weapon/energy diff --git a/code/modules/vehicles/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm index c70d711560f..8fd45616fac 100644 --- a/code/modules/vehicles/mecha/mecha_wreckage.dm +++ b/code/modules/vehicles/mecha/mecha_wreckage.dm @@ -154,7 +154,7 @@ /obj/item/mecha_parts/part/ripley_left_leg, /obj/item/mecha_parts/part/ripley_right_leg) -/obj/structure/mecha_wreckage/ripley/mkii +/obj/structure/mecha_wreckage/ripley/mk2 name = "\improper Ripley MK-II wreckage" icon_state = "ripleymkii-broken" diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index 3cc13ab6883..3ef07ff3c71 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -30,13 +30,12 @@ . = ..() update_pressure() -/obj/vehicle/sealed/mecha/working/ripley/mob_exit(mob/M, silent, forced) - ..() - update_icon() - -/obj/vehicle/sealed/mecha/working/ripley/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() +/obj/vehicle/sealed/mecha/working/ripley/generate_actions() //isnt allowed to have internal air + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_cycle_equip) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/strafe) /obj/vehicle/sealed/mecha/working/ripley/check_for_internal_damage(list/possible_int_damage, ignore_threshold = FALSE) if (!enclosed) @@ -55,7 +54,7 @@ cargo.Cut() return ..() -/obj/vehicle/sealed/mecha/working/ripley/mkii +/obj/vehicle/sealed/mecha/working/ripley/mk2 desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection and armor." name = "\improper APLU MK-II \"Ripley\"" icon_state = "ripleymkii" @@ -65,11 +64,18 @@ max_temperature = 30000 max_integrity = 250 armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100) - wreckage = /obj/structure/mecha_wreckage/ripley/mkii + wreckage = /obj/structure/mecha_wreckage/ripley/mk2 enclosed = TRUE enter_delay = 40 silicon_icon_state = null +/obj/vehicle/sealed/mecha/working/ripley/mk2/generate_actions() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_cycle_equip) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/strafe) /obj/vehicle/sealed/mecha/working/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index e3a019427bf..de8be112025 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -91,9 +91,12 @@ user.put_in_hands(inserted_key) inserted_key = null +/obj/vehicle/sealed/obj_destruction(damage_flag) + explosion(loc, 0, 1, 2, 3, 0) + return ..() + /obj/vehicle/sealed/Destroy() DumpMobs() - explosion(loc, 0, 1, 2, 3, 0) return ..() /obj/vehicle/sealed/proc/DumpMobs(randomstep = TRUE) diff --git a/config/game_options.txt b/config/game_options.txt index e4c458a5a7e..03a18aed8cb 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -50,7 +50,7 @@ MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 0 ## NAMES ### ## If uncommented this adds a random surname to a player's name if they only specify one name. -#HUMANS_NEED_SURNAMES +HUMANS_NEED_SURNAMES ## If uncommented, this forces all players to use random names !and appearances!. #FORCE_RANDOM_NAMES diff --git a/html/changelog.html b/html/changelog.html index d0a0bf48bfc..9e7e4db93a9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,6 +51,29 @@ -->
+

07 September 2020

+

CRITAWAKETS updated:

+ +

Dennok updated:

+ +

Maurukas updated:

+ +

Timberpoes updated:

+ +

06 September 2020

Bumtickley00 updated:

GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 61ba650bf81..dfad367dc25 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -42719,3 +42719,25 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. tralezab: - bugfix: You can no longer earn achievements in debug mafia games. - refactor: And the achievement code is much nicer :) +2020-09-07: + CRITAWAKETS: + - tweak: Nanotrasen has updated the cooling setup of telecommunications rooms in + Delta-Pattern Stations. It now makes the simulation faster. + Dennok: + - tweak: passive gate max out limit pressure settings increased + - tweak: passive gate description more precise + Maurukas: + - bugfix: Cryo cells work again and are no longer permanent icy prisons + Timberpoes: + - rscdel: Reduced Diagnostics nanite program has been removed. + - rscadd: Nanite Debugging nanite program has been added. This program causes your + nanites to display their program list when scanned, but comes with a 0.1/s nanite + cost. + - tweak: Reduced Diagnostics nanite program functionality is now default behaviour. + The nanite program list is hidden from nanite scanners by default. You now now + to include the Nanite Debugging program to show the program list on scan. + - tweak: Researching Harmonic Nanite Programming now confers a passive boost of + 0.1 regen rate to all nanite clouds. This boost takes effects as soon as the + node is researched. + - tweak: Harmonic Nanite Programming research node now requires 3000 General and + 3000 Nanite research, an increase of 1000 each. diff --git a/html/changelogs/AutoChangeLog-pr-53157.yml b/html/changelogs/AutoChangeLog-pr-53157.yml deleted file mode 100644 index 14aff58ee3f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53157.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Timberpoes" -delete-after: True -changes: - - rscdel: "Reduced Diagnostics nanite program has been removed." - - rscadd: "Nanite Debugging nanite program has been added. This program causes your nanites to display their program list when scanned, but comes with a 0.1/s nanite cost." - - tweak: "Reduced Diagnostics nanite program functionality is now default behaviour. The nanite program list is hidden from nanite scanners by default. You now now to include the Nanite Debugging program to show the program list on scan." - - tweak: "Researching Harmonic Nanite Programming now confers a passive boost of 0.1 regen rate to all nanite clouds. This boost takes effects as soon as the node is researched." - - tweak: "Harmonic Nanite Programming research node now requires 3000 General and 3000 Nanite research, an increase of 1000 each." diff --git a/html/changelogs/AutoChangeLog-pr-53316.yml b/html/changelogs/AutoChangeLog-pr-53316.yml new file mode 100644 index 00000000000..2e25a76ba5a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53316.yml @@ -0,0 +1,6 @@ +author: "floyd" +delete-after: True +changes: + - code_imp: "moved cakes to newfood code" + - balance: "i fucked up some food lists because i misunderstood them, thats now fixed." + - code_imp: "edible component now properly handles transfering reagents on processing, microwaving and crafting" diff --git a/html/changelogs/AutoChangeLog-pr-53328.yml b/html/changelogs/AutoChangeLog-pr-53328.yml new file mode 100644 index 00000000000..926371f684f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53328.yml @@ -0,0 +1,5 @@ +author: "Shirbu" +delete-after: True +changes: + - balance: "nightmares can now dodge beam projectiles on dark tiles" + - tweak: "lasers', emitters', and disablers' projectiles, now emit light only on their own tile, instead of a 3x3 square" diff --git a/html/changelogs/AutoChangeLog-pr-53397.yml b/html/changelogs/AutoChangeLog-pr-53397.yml new file mode 100644 index 00000000000..a5fc8db2490 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53397.yml @@ -0,0 +1,4 @@ +author: "Dennok" +delete-after: True +changes: + - tweak: "pipes should be displayed in a fixed order" diff --git a/html/changelogs/AutoChangeLog-pr-53399.yml b/html/changelogs/AutoChangeLog-pr-53399.yml new file mode 100644 index 00000000000..f611d447d5d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53399.yml @@ -0,0 +1,11 @@ +author: "Ghilker" +delete-after: True +changes: + - rscadd: "Ligthing aoe projectile now have a no_stun version for the boss rank" + - rscadd: "Crystal mobs have TRAIT_TESLA_SHOCKIMMUNE to prevent boss from hurting himself and the other crystal mobs" + - rscadd: "Revamped mode, announced main portals with location, close them to be able to stabilize the SM" + - balance: "Balanced mobs spawn from portal and how much damage they deal" + - bugfix: "Fixed grammar stuff on crystal consume announcement" + - tweak: "Lowered time needed to use the crystal stabilizer to 7 second total" + - refactor: "Refractored code so that the more_portals() proc gets called by the event instead of a CALLBACK" + - code_imp: "Added check at start of event for presence of the supermatter crystal" diff --git a/html/changelogs/AutoChangeLog-pr-53458.yml b/html/changelogs/AutoChangeLog-pr-53458.yml new file mode 100644 index 00000000000..dd647087479 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53458.yml @@ -0,0 +1,4 @@ +author: "YPOQ" +delete-after: True +changes: + - bugfix: "The arena shuttle no longer teleports people into space." diff --git a/html/changelogs/AutoChangeLog-pr-53470.yml b/html/changelogs/AutoChangeLog-pr-53470.yml new file mode 100644 index 00000000000..43ac442de90 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53470.yml @@ -0,0 +1,8 @@ +author: "TiviPlus" +delete-after: True +changes: + - bugfix: "fixed mech icons and lights" + - bugfix: "Made strafe behavior better" + - bugfix: "fixed mechs exploding" + - bugfix: "fixed mech weapon cooldowns being inconsistent" + - code_imp: "cleaned up mech code some more" diff --git a/html/changelogs/AutoChangeLog-pr-53474.yml b/html/changelogs/AutoChangeLog-pr-53474.yml new file mode 100644 index 00000000000..f6b3a1f2fb6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53474.yml @@ -0,0 +1,4 @@ +author: "CoffeeDragon16" +delete-after: True +changes: + - bugfix: "Announcements now correctly read Mother Russia Bleeds" diff --git a/html/changelogs/AutoChangeLog-pr-53475.yml b/html/changelogs/AutoChangeLog-pr-53475.yml new file mode 100644 index 00000000000..57430ee3988 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53475.yml @@ -0,0 +1,4 @@ +author: "Jared-Fogle" +delete-after: True +changes: + - bugfix: "The crashed ship ruin now has proper meat." diff --git a/html/changelogs/AutoChangeLog-pr-53491.yml b/html/changelogs/AutoChangeLog-pr-53491.yml new file mode 100644 index 00000000000..c8220311da1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53491.yml @@ -0,0 +1,4 @@ +author: "TemporalOroboros" +delete-after: True +changes: + - bugfix: "Chemicals now properly acknowledge exposure. Water is wet again, synthflesh will now apply properly, space lube will now properly make floors slippery again, etc." diff --git a/icons/obj/supermatter.dmi b/icons/obj/supermatter.dmi index 6d4429a9d9f..4fd64bb4fc0 100644 Binary files a/icons/obj/supermatter.dmi and b/icons/obj/supermatter.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 8f44e450acd..5174fc621f7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -164,6 +164,8 @@ #include "code\__HELPERS\sanitize_values.dm" #include "code\__HELPERS\shell.dm" #include "code\__HELPERS\stat_tracking.dm" +#include "code\__HELPERS\string_assoc_lists.dm" +#include "code\__HELPERS\string_lists.dm" #include "code\__HELPERS\text.dm" #include "code\__HELPERS\time.dm" #include "code\__HELPERS\type2type.dm" @@ -1082,6 +1084,7 @@ #include "code\game\objects\items\food\_food.dm" #include "code\game\objects\items\food\bread.dm" #include "code\game\objects\items\food\burgers.dm" +#include "code\game\objects\items\food\cake.dm" #include "code\game\objects\items\grenades\antigravity.dm" #include "code\game\objects\items\grenades\chem_grenade.dm" #include "code\game\objects\items\grenades\clusterbuster.dm" @@ -1927,7 +1930,6 @@ #include "code\modules\food_and_drinks\food\condiment.dm" #include "code\modules\food_and_drinks\food\customizables.dm" #include "code\modules\food_and_drinks\food\snacks.dm" -#include "code\modules\food_and_drinks\food\snacks_cake.dm" #include "code\modules\food_and_drinks\food\snacks_egg.dm" #include "code\modules\food_and_drinks\food\snacks_frozen.dm" #include "code\modules\food_and_drinks\food\snacks_meat.dm"