diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 5bc3a711a1b03..c60ba12150276 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -82,6 +82,12 @@ /obj/item/clothing/glasses/meson, /turf/open/floor/iron/dark, /area/mine/storage/public) +"as" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "av" = ( /obj/machinery/computer/arcade/orion_trail{ dir = 4 @@ -93,6 +99,16 @@ /obj/structure/cable, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"aF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) +"aH" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "aM" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "lavaland_living_east_maint" @@ -137,6 +153,20 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/maintenance/service) +"aX" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) +"ba" = ( +/obj/structure/chair/sofa/middle{ + dir = 1; + color = "#AA4A44" + }, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "bb" = ( /obj/structure/closet/crate/internals, /obj/item/tank/internals/emergency_oxygen, @@ -154,6 +184,13 @@ dir = 4 }, /area/mine/laborcamp/production) +"be" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Raptor Ranch External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lobby/raptor) "bf" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, @@ -197,6 +234,10 @@ }, /turf/open/floor/plating, /area/mine/maintenance/production) +"bE" = ( +/obj/structure/table/wood, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "bH" = ( /obj/structure/table, /obj/item/book/manual/chef_recipes{ @@ -344,11 +385,10 @@ /turf/open/floor/plating, /area/mine/maintenance/service) "ct" = ( -/obj/structure/railing/wooden_fence{ - dir = 6 - }, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/marker_beacon/purple, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "cw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -506,6 +546,13 @@ }, /turf/open/floor/iron/white, /area/mine/cafeteria) +"de" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "dh" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -581,6 +628,19 @@ /obj/structure/lattice/catwalk/mining, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) +"dF" = ( +/obj/structure/table/wood, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) +"dI" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lobby/raptor) "dJ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -628,6 +688,12 @@ /obj/item/soap/homemade, /turf/open/floor/iron/freezer, /area/mine/laborcamp) +"ej" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "eo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -713,6 +779,18 @@ dir = 8 }, /area/mine/cafeteria) +"eL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) +"eN" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "eP" = ( /obj/structure/chair/sofa/left/brown, /obj/effect/turf_decal/tile/bar/opposingcorners{ @@ -754,6 +832,9 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) +"fa" = ( +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "fb" = ( /obj/structure/railing/corner{ dir = 4 @@ -855,6 +936,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/service) +"fK" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/railing, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "fL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1197,6 +1283,10 @@ /obj/structure/sign/poster/official/cleanliness/directional/north, /turf/open/floor/iron/freezer, /area/mine/living_quarters) +"hl" = ( +/obj/structure/tank_holder/extinguisher, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "hn" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 9 @@ -1315,8 +1405,12 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "hM" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/lavaland/surface) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "hR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1418,7 +1512,7 @@ "il" = ( /obj/item/flashlight/lantern/on, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "io" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1523,6 +1617,13 @@ dir = 1 }, /area/mine/living_quarters) +"jb" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "jc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -1598,6 +1699,10 @@ }, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) +"jt" = ( +/obj/structure/fireplace, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "jw" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -1642,6 +1747,11 @@ }, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) +"jJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "jL" = ( /obj/structure/stone_tile/surrounding_tile, /obj/structure/stone_tile/surrounding_tile{ @@ -1692,11 +1802,12 @@ }, /area/mine/production) "jX" = ( -/obj/structure/railing/wooden_fence{ +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "ka" = ( /obj/structure/table, /obj/machinery/newscaster/directional/north, @@ -1707,9 +1818,19 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) +"kf" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "kg" = ( /turf/closed/wall/r_wall, /area/mine/laborcamp) +"ki" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lobby/raptor) "kk" = ( /obj/structure/stone_tile/block{ dir = 8 @@ -1959,10 +2080,7 @@ /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) "lt" = ( -/obj/structure/railing/wooden_fence{ - dir = 5 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, +/turf/open/misc/hay/lavaland, /area/lavaland/surface/outdoors) "lv" = ( /obj/structure/stone_tile/block/cracked{ @@ -2100,6 +2218,10 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/mine/lounge) +"lP" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "lQ" = ( /obj/structure/stone_tile/surrounding/cracked{ dir = 6 @@ -2200,7 +2322,7 @@ }, /obj/item/raptor_dex, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "ml" = ( /obj/structure/stone_tile/block/cracked{ dir = 8 @@ -2613,6 +2735,12 @@ /obj/effect/spawner/random/trash/food_packaging, /turf/open/floor/iron/checker, /area/mine/laborcamp) +"nO" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "nP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/portable_atmospherics/scrubber, @@ -2789,6 +2917,15 @@ /obj/effect/turf_decal/trimline/green/filled/line, /turf/open/floor/iron/dark, /area/mine/laborcamp) +"oO" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Mining External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lobby/raptor) "oS" = ( /obj/machinery/door/airlock/external/glass{ name = "Mining External Airlock" @@ -2935,6 +3072,12 @@ }, /turf/open/floor/plating, /area/mine/laborcamp) +"pF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "pH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2960,6 +3103,10 @@ /obj/structure/sign/poster/official/cleanliness/directional/north, /turf/open/floor/iron/freezer, /area/mine/laborcamp/quarters) +"pM" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood, +/area/mine/lobby/raptor) "pO" = ( /obj/machinery/shower/directional/south, /obj/machinery/door/window/left/directional/south, @@ -3051,12 +3198,6 @@ dir = 4 }, /area/mine/laborcamp/quarters) -"qi" = ( -/obj/structure/railing/wooden_fence{ - dir = 4 - }, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) "qo" = ( /obj/machinery/door/airlock/glass{ name = "Equipment Storage" @@ -3125,6 +3266,11 @@ }, /turf/open/floor/iron/dark, /area/mine/laborcamp/security) +"qB" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/item/food/cheese/firm_cheese, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "qH" = ( /obj/machinery/door/airlock{ id_tag = "miningbathroomprivate"; @@ -3184,6 +3330,35 @@ }, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) +"rf" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) +"rj" = ( +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = -1; + pixel_x = 5 + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = 9; + pixel_x = 8 + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = 9; + pixel_x = 2 + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?" + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "rm" = ( /obj/structure/sign/warning/gas_mask/directional/west, /obj/effect/decal/cleanable/dirt, @@ -3225,6 +3400,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/service) +"rB" = ( +/obj/structure/chair/sofa/corner{ + dir = 1; + color = "#AA4A44" + }, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "rF" = ( /turf/closed/wall/r_wall, /area/mine/maintenance/labor) @@ -3299,7 +3481,7 @@ /obj/structure/table/wood, /obj/item/flashlight/lantern/on, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "se" = ( /turf/open/floor/iron/dark/textured_large, /area/mine/eva) @@ -3399,7 +3581,7 @@ "sQ" = ( /obj/structure/ore_container/food_trough/raptor_trough, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "sR" = ( /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, @@ -3473,6 +3655,13 @@ dir = 4 }, /area/mine/cafeteria) +"tf" = ( +/obj/structure/chair/sofa/corner{ + dir = 8; + color = "#AA4A44" + }, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "tg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance{ @@ -3628,6 +3817,12 @@ /obj/item/crowbar/large/emergency, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"up" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "uq" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -3654,7 +3849,7 @@ "uw" = ( /obj/effect/spawner/random/lavaland_mob/raptor, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "ux" = ( /obj/machinery/door/airlock{ id_tag = "miningdorm1"; @@ -3817,6 +4012,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/hydroponics) +"vr" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "vu" = ( /obj/structure/bed/medical/emergency, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3885,6 +4086,14 @@ /obj/item/cigbutt, /turf/open/floor/iron/smooth, /area/mine/laborcamp) +"vM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "vN" = ( /obj/machinery/computer/records/security, /obj/structure/cable, @@ -3936,6 +4145,12 @@ /obj/effect/turf_decal/siding/wideplating_new, /turf/open/floor/iron/checker, /area/mine/laborcamp) +"wa" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("mine") + }, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "wb" = ( /obj/structure/chair{ dir = 8 @@ -4225,6 +4440,12 @@ dir = 1 }, /area/mine/storage/public) +"xW" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "yc" = ( /obj/docking_port/stationary{ dir = 2; @@ -4399,8 +4620,7 @@ /turf/open/floor/plating, /area/mine/maintenance/service) "ze" = ( -/obj/effect/spawner/random/lavaland_mob/raptor, -/turf/open/misc/asteroid/basalt/lava_land_surface, +/turf/open/misc/ashplanet/rocky, /area/lavaland/surface/outdoors) "zf" = ( /obj/machinery/door/airlock{ @@ -4459,9 +4679,12 @@ /turf/open/floor/iron/smooth, /area/mine/laborcamp) "zs" = ( -/obj/structure/railing/wooden_fence, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "zw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4552,6 +4775,13 @@ /obj/structure/cable, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"zX" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "Ae" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4567,6 +4797,13 @@ }, /turf/open/floor/plating, /area/mine/laborcamp/production) +"Ah" = ( +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "Ai" = ( /obj/structure/stone_tile/cracked{ dir = 1 @@ -4602,11 +4839,21 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/open/floor/iron/dark/textured_large, /area/mine/production) +"Av" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "Ax" = ( /obj/item/pickaxe, /obj/effect/mob_spawn/corpse/human/miner, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Az" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "AA" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, @@ -4620,6 +4867,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/mine/laborcamp) +"AF" = ( +/obj/structure/lattice/catwalk/mining, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "AI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4797,12 +5051,31 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) -"Cv" = ( -/obj/structure/railing/wooden_fence{ - dir = 5 +"Cn" = ( +/obj/structure/table/wood, +/obj/item/plate{ + pixel_x = 6; + pixel_y = 7 }, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/obj/item/plate{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/reagent_containers/cup/glass/mug/tea{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) +"Cv" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "Cz" = ( /obj/machinery/door/airlock/medical/glass{ name = "Infirmary" @@ -4901,6 +5174,9 @@ /obj/structure/curtain, /turf/open/floor/iron/freezer, /area/mine/living_quarters) +"CV" = ( +/turf/closed/wall/mineral/iron, +/area/mine/lobby/raptor) "CX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4978,10 +5254,9 @@ /turf/closed/wall, /area/mine/medical) "DB" = ( -/obj/structure/railing/wooden_fence{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) "DF" = ( /obj/structure/cable, @@ -5149,6 +5424,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/maintenance/service) +"EL" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lounge) "EM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -5162,6 +5441,12 @@ dir = 1 }, /area/mine/production) +"EP" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "EQ" = ( /turf/open/floor/iron/smooth_edge{ dir = 8 @@ -5216,6 +5501,12 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Fo" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "Fp" = ( /obj/structure/table, /obj/machinery/recharger, @@ -5224,6 +5515,13 @@ }, /turf/open/floor/iron/dark, /area/mine/laborcamp/security) +"Fr" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Mining Shuttle Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/turf/open/floor/iron/dark/textured_large, +/area/mine/production) "Fs" = ( /obj/effect/turf_decal/sand/plating/volcanic, /obj/effect/spawner/random/maintenance/two, @@ -5267,6 +5565,10 @@ "FH" = ( /turf/closed/wall, /area/lavaland/surface/outdoors) +"FI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "FL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/directional/west, @@ -5388,11 +5690,8 @@ }, /area/mine/production) "GG" = ( -/obj/structure/railing/wooden_fence{ - dir = 9 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "GH" = ( /obj/machinery/door/airlock/glass{ name = "Arrival Lounge" @@ -5402,6 +5701,12 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, /area/mine/lounge) +"GI" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/lighter, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "GL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5464,6 +5769,18 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/mine/maintenance/public/north) +"Hj" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Mining External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lounge) +"Hl" = ( +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lounge) "Hp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -5781,6 +6098,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/mine/laborcamp) +"Jg" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "Jh" = ( /obj/structure/cable, /obj/machinery/light/small/directional/east, @@ -5950,6 +6274,13 @@ dir = 1 }, /area/mine/living_quarters) +"JQ" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Raptor Ranch External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lounge) "JR" = ( /obj/structure/stone_tile, /obj/structure/stone_tile{ @@ -6031,6 +6362,41 @@ /obj/structure/girder, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Km" = ( +/obj/structure/rack, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?" + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = 9 + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = 9; + pixel_x = 2 + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = 6 + }, +/obj/item/food/grown/grass/fairy{ + name = "weird hay"; + desc = "Somehow, somewhere, this tells you it should increase your friendship level with your animals. Too bad that doesn't work, right?"; + pixel_y = 6; + pixel_x = 9 + }, +/obj/item/crowbar/large, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "Kn" = ( /obj/machinery/telecomms/relay/preset/mining, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6123,6 +6489,12 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) +"KO" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "KV" = ( /obj/structure/table, /obj/machinery/light/directional/east, @@ -6243,6 +6615,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/storage) +"Lv" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "Lw" = ( /obj/effect/turf_decal/sand/plating/volcanic, /obj/effect/turf_decal/stripes/line{ @@ -6348,6 +6729,13 @@ }, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) +"LV" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "LY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -6392,6 +6780,10 @@ dir = 8 }, /area/mine/lounge) +"Mf" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "Mr" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -6574,6 +6966,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/mine/laborcamp/production) +"Ns" = ( +/obj/structure/flora/ash/fireblossom, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "Nt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/west, @@ -6627,11 +7023,8 @@ /turf/open/floor/iron/dark, /area/mine/production) "NK" = ( -/obj/structure/railing/wooden_fence{ - dir = 1 - }, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/turf/open/misc/ashplanet/ash, +/area/lavaland/surface/outdoors) "NL" = ( /obj/structure/railing, /obj/structure/lattice/catwalk/mining, @@ -6641,6 +7034,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) +"NP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/lobby/raptor) "NR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -6652,7 +7052,7 @@ /area/mine/laborcamp/production) "NS" = ( /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "NT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6747,6 +7147,13 @@ }, /turf/open/floor/iron, /area/mine/lounge) +"Oo" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/item/reagent_containers/cup/bucket/wooden, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "Op" = ( /obj/structure/stone_tile/slab, /turf/open/misc/asteroid/basalt/lava_land_surface, @@ -6768,6 +7175,16 @@ dir = 4 }, /area/mine/laborcamp/security) +"OE" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "OH" = ( /obj/item/storage/fancy/cigarettes/cigpack_robust{ pixel_x = -8; @@ -6824,7 +7241,7 @@ }, /obj/item/soap/deluxe, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "OZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6834,6 +7251,10 @@ dir = 1 }, /area/mine/mechbay) +"Pb" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "Pc" = ( /obj/structure/closet/crate/grave, /turf/open/misc/asteroid/basalt/lava_land_surface, @@ -6844,6 +7265,13 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) +"Pe" = ( +/obj/structure/lattice/catwalk/mining, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "Pi" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/trimline/red/filled/line, @@ -6881,6 +7309,12 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/mine/cafeteria) +"Pn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "Po" = ( /obj/structure/table, /obj/item/paper/guides/jobs/security/labor_camp, @@ -7187,6 +7621,28 @@ }, /turf/open/floor/iron/dark, /area/mine/production) +"Ri" = ( +/obj/item/canvas/twentythree_nineteen, +/obj/structure/easel, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) +"Rj" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/mine/eva) +"Rm" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "Ro" = ( /obj/effect/turf_decal/loading_area, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -7271,6 +7727,13 @@ /obj/structure/lattice/catwalk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"RO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/mine/eva) "RV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -7332,6 +7795,11 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Sj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "Sm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/siding/yellow, @@ -7345,6 +7813,14 @@ }, /turf/open/floor/iron/dark, /area/mine/hydroponics) +"Sp" = ( +/obj/structure/easel, +/obj/item/canvas/fortyfive_twentyseven, +/obj/item/canvas/thirtysix_twentyfour, +/obj/item/canvas/twentythree_nineteen, +/obj/item/paint_palette, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "Sq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, @@ -7517,17 +7993,22 @@ }, /area/mine/production) "Tt" = ( -/obj/structure/railing/wooden_fence{ - dir = 10 +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 }, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "Tu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/mine/laborcamp) +"Tw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "Tx" = ( /obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/dirt, @@ -7706,6 +8187,10 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Uz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "UD" = ( /obj/structure/toilet{ dir = 8 @@ -7713,9 +8198,7 @@ /turf/open/floor/iron/freezer, /area/mine/living_quarters) "UI" = ( -/obj/structure/railing/wooden_fence{ - dir = 4 - }, +/obj/structure/flora/ash/stem_shroom, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "UK" = ( @@ -7796,11 +8279,9 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Vd" = ( -/obj/structure/railing/wooden_fence{ - dir = 9 - }, +/obj/structure/railing, /turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/area/mine/lobby/raptor) "Ve" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, @@ -7922,6 +8403,15 @@ }, /turf/open/floor/iron/checker, /area/mine/laborcamp) +"VI" = ( +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/mine/lobby/raptor) "VJ" = ( /obj/structure/closet/crate, /obj/item/food/mint, @@ -7945,11 +8435,11 @@ /turf/open/floor/plating, /area/mine/maintenance/labor) "VP" = ( -/obj/structure/railing/wooden_fence{ +/obj/effect/turf_decal/siding/wood/end{ dir = 8 }, -/turf/open/misc/hay/lavaland, -/area/lavaland/surface) +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "VS" = ( /obj/machinery/hydroponics/constructable, /obj/effect/decal/cleanable/dirt, @@ -7959,6 +8449,12 @@ /obj/item/seeds/potato, /turf/open/floor/iron/dark, /area/mine/laborcamp) +"VU" = ( +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "VX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -7989,6 +8485,18 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/mine/lounge) +"Wh" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Wk" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "Wl" = ( /obj/machinery/door/airlock/external/glass{ name = "Mining External Airlock" @@ -8008,6 +8516,12 @@ dir = 1 }, /area/mine/laborcamp/security) +"Wq" = ( +/obj/structure/railing{ + dir = 5 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) "Wt" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/disposalpipe/segment, @@ -8174,6 +8688,10 @@ dir = 4 }, /area/mine/production) +"Xk" = ( +/obj/effect/spawner/random/lavaland_mob/raptor, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface/outdoors) "Xp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8265,7 +8783,7 @@ /area/mine/laborcamp) "XM" = ( /obj/structure/sign/directions/evac/directional/south{ - pixel_x = 32; + pixel_x = -32; pixel_y = 0 }, /turf/open/floor/iron/dark/textured_large, @@ -8360,6 +8878,8 @@ /area/mine/lounge) "Yg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron/dark/textured_large, /area/mine/eva) "Yk" = ( @@ -8438,6 +8958,14 @@ /obj/structure/barricade/wooden, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"YP" = ( +/obj/structure/bookcase/random/reference, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) "YR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8520,6 +9048,10 @@ }, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) +"Zs" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "Zt" = ( /turf/closed/wall, /area/mine/laborcamp) @@ -8559,6 +9091,18 @@ dir = 8 }, /area/mine/lounge) +"ZB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/mine/lobby/raptor) +"ZF" = ( +/obj/effect/turf_decal/sand/plating/volcanic, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/lavaland_atmos, +/area/lavaland/surface/outdoors) "ZH" = ( /obj/structure/closet/secure_closet/labor_camp_security, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -8567,6 +9111,13 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/mine/laborcamp/security) +"ZL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "ZM" = ( /obj/structure/railing{ dir = 8 @@ -8597,6 +9148,17 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/mine/maintenance/public/north) +"ZU" = ( +/obj/structure/railing{ + dir = 6 + }, +/turf/open/misc/hay/lavaland, +/area/mine/lobby/raptor) +"ZX" = ( +/obj/structure/table/wood, +/obj/item/knife, +/turf/open/floor/wood/parquet, +/area/mine/lobby/raptor) "ZY" = ( /turf/closed/mineral/random/volcanic, /area/lavaland/surface/outdoors/unexplored) @@ -41748,8 +42310,8 @@ eA eA pU pU -aj -aj +pU +pU aj aj aj @@ -41998,16 +42560,16 @@ MS QP LE os -SP +JQ +Hl +Hj +pU +BP +pU +NK +ze pU -ai -ai -ai pU -aj -aj -aj -aj aj aj "} @@ -42255,16 +42817,16 @@ JZ PR ib os -SP +EL +EL +EL pU pU -ai -ai +ze +BP +ze +pU pU -aj -aj -aj -aj aj aj "} @@ -42515,12 +43077,12 @@ Jt Zq pU pU -ai pU -aj -aj -aj -aj +pU +ze +ze +pU +pU aj aj aj @@ -42773,11 +43335,11 @@ Zq pU pU aj -aj -aj pU -aj -aj +pU +DB +BP +DB aj aj aj @@ -43030,11 +43592,11 @@ pU pU aj aj -pU -pU -aj aj aj +LV +tF +jb aj aj aj @@ -43289,9 +43851,9 @@ aj aj aj aj -aj -aj -pU +zs +tF +de aj aj aj @@ -43546,9 +44108,9 @@ aj aj aj pU -aj -pU -pU +DB +BP +DB aj aj aj @@ -43803,9 +44365,9 @@ aj aj aj pU -ad -ad -ai +pU +pU +pU aj aj aj @@ -44059,11 +44621,11 @@ aj aj aj pU -ai -ad -ad -ai -aj +pU +pU +BP +pU +pU aj aj "} @@ -44315,14 +44877,14 @@ aj aj aj aj -pU -ad -ad -ad -ad +aj +aj +NK +NK pU aj aj +aj "} (140,1,1) = {" aa @@ -44573,13 +45135,13 @@ aj aj aj aj -ad -ad -ad -ad +pU +pU +ze pU aj aj +aj "} (141,1,1) = {" aa @@ -44831,10 +45393,10 @@ aj aj aj pU -ad -ad -ad -ai +BP +ze +pU +pU aj aj "} @@ -45088,11 +45650,11 @@ aj aj aj pU -ai -ad -ad -ad -aj +NK +pU +pU +pU +pU aj "} (143,1,1) = {" @@ -45344,10 +45906,10 @@ aj aj aj aj +aj +pU pU pU -ai -ai pU aj aj @@ -45603,9 +46165,9 @@ aj aj aj aj -pU -pU -aj +DB +BP +DB aj aj "} @@ -45860,9 +46422,9 @@ aj aj aj aj -aj -aj -aj +LV +tF +jb aj aj "} @@ -46116,10 +46678,10 @@ aj aj aj aj -pU -aj -aj aj +zs +tF +de aj aj "} @@ -46372,11 +46934,11 @@ pU aj aj aj -aj pU -ai -aj -aj +pU +DB +BP +DB aj aj "} @@ -46628,12 +47190,12 @@ pU pU aj aj -aj pU -ad -ad pU -aj +pU +pU +pU +pU aj aj "} @@ -46882,16 +47444,16 @@ BP BP Lw pU -pU -aj -aj -aj -aj -ai -ad aj aj aj +pU +pU +NK +BP +ze +pU +pU aj "} (150,1,1) = {" @@ -47139,14 +47701,14 @@ BP BP Lw pU -pU -aj -aj aj aj aj pU -aj +ze +ze +ze +ze aj aj aj @@ -47381,7 +47943,7 @@ lb Yl Le Le -NU +Fr Le Le BP @@ -47396,14 +47958,14 @@ BP BP Lw pU -pU -aj -aj aj aj aj pU -aj +BP +ze +NK +pU aj aj aj @@ -47637,9 +48199,9 @@ Ra oh pK NU -pU -aj -aj +BP +BP +BP JD BP BP @@ -47656,11 +48218,11 @@ pU pU aj aj -aj -aj -aj -aj -aj +pU +NK +NK +pU +pU aj aj aj @@ -47894,9 +48456,9 @@ Kc mT pK pU -aj -aj -pU +BP +ZF +BP JD BP BP @@ -47913,12 +48475,12 @@ pU pU aj aj -aj -aj pU pU -aj -aj +pU +pU +pU +pU aj aj "} @@ -48151,9 +48713,9 @@ Yg li dK pU -aj -aj -pU +Cv +BP +Cv zk mc mc @@ -48170,14 +48732,14 @@ pU pU aj aj -aj pU +DB +BP +DB pU aj aj aj -aj -aj "} (155,1,1) = {" aa @@ -48408,9 +48970,9 @@ Yg TQ dK pU -aj -aj -pU +aX +BP +Jg pU pU pU @@ -48428,9 +48990,9 @@ pU aj aj aj -pU -aj -aj +LV +tF +jb aj aj aj @@ -48661,13 +49223,13 @@ lb pK Ob IL -IL +Rj KV pK aj -aj -aj -aj +yV +BP +fK pU pU pU @@ -48685,9 +49247,9 @@ aj aj aj aj -aj -aj -aj +yV +tF +NL aj aj aj @@ -48918,13 +49480,13 @@ NU pK pK dK -dK +RO pK pK aj -aj -aj -aj +yV +tF +NL aj aj pU @@ -48942,9 +49504,9 @@ aj aj aj aj -aj -aj -aj +zs +tF +de aj aj aj @@ -49175,13 +49737,13 @@ NU ai pU pU +Pn pU aj aj -aj -pU -pU -aj +yV +tF +NL aj aj aj @@ -49197,11 +49759,11 @@ aj aj pU pU -pU -pU -pU -pU -pU +aj +aj +DB +BP +DB pU pU aj @@ -49432,37 +49994,37 @@ pU pU pU pU -aj +AF aj aj pU -ad -ad +yV +tF +NL +aj +aj pU aj aj aj aj +pU +aj +aj aj aj pU pU +pU +pU aj +pU +pU +pU +pU aj aj aj -GG -DB -DB -hM -hM -hM -hM -hM -hM -hM -hM -hM "} (160,1,1) = {" aa @@ -49689,16 +50251,16 @@ pU aj aj aj +AF aj -aj -pU -pU -pU pU aj +yV +tF +NL aj pU -aj +pU aj aj aj @@ -49708,18 +50270,18 @@ aj aj aj pU -jX pU pU -NK -sQ -NS -zs -NS -NS -sQ -NS -hM +pU +ze +ze +ze +pU +pU +pU +aj +aj +aj "} (161,1,1) = {" aa @@ -49946,37 +50508,37 @@ aj aj aj aj +AF aj aj aj -pU -aj -aj -aj -aj +zs +tF +de aj aj aj aj aj +pU aj aj aj aj aj pU -jX pU pU +ze NK -il -NS -zs -NS -NS -il -NS -hM +ze +BP +pU +pU +pU +aj +aj +pU "} (162,1,1) = {" aa @@ -50203,13 +50765,13 @@ aj aj aj aj +AF aj aj aj -aj -aj -aj -aj +ct +BP +ct pU aj aj @@ -50220,20 +50782,20 @@ aj aj aj aj -aj pU -jX pU pU +ze +BP NK -NS -NS -zs -NS -NS -NS -NS -hM +ze +pU +pU +pU +aj +aj +pU +pU "} (163,1,1) = {" aa @@ -50460,37 +51022,37 @@ ai ai pU pU -pU -pU -aj +AF aj aj aj +BP +BP +BP pU pU aj aj -aj -aj -aj -aj +pU +pU +pU pU aj pU pU pU -jX +ze +ze +NK +ze +lP +pU +pU +pU +aj +aj pU pU -Cv -qi -NS -ct -NS -NS -qi -qi -hM "} (164,1,1) = {" aa @@ -50717,37 +51279,37 @@ ai ai ai ai +Pn +AF +AF +AF +Pe +BP +BP +BP +BP pU pU pU pU -aj -aj pU -aj -aj -aj -pU -aj -aj -aj pU pU +lt +Ri +eN pU +ze +ze +ze +ze pU pU +aj +aj +aj pU -ze pU -NS -NS -NS -NS -NS -uw -NS -NS -hM "} (165,1,1) = {" aa @@ -50978,33 +51540,33 @@ ai pU pU pU +AF +BP +BP +BP +BP +ct pU -aj -aj -aj -aj pU pU -aj -aj pU pU +lt +Ns +lt pU pU pU pU +ze pU pU +aj +aj +aj +aj +pU pU -NS -mk -sa -NS -NS -NS -OW -sa -hM "} (166,1,1) = {" aa @@ -51232,36 +51794,36 @@ aj aj ai ai -pU -pU -pU -pU -aj -aj -aj -aj -pU +CV +CV +ki +NP +ki +CV +CV +CV +lt pU pU pU pU pU pU +lt pU +lP pU +BP pU pU pU +aj +aj +aj +aj +aj +aj pU -NS -NS -uw -NS -NS -NS -NS -NS -hM "} (167,1,1) = {" aa @@ -51488,14 +52050,19 @@ aj aj aj aj -aj -pU -pU -pU -pU +CV +CV +Km +qB +eL +Ah +VI +ZX +ki +Ns +lt pU -aj -aj +BP pU pU pU @@ -51506,19 +52073,14 @@ pU pU pU pU +aj +aj +aj pU -jX pU +aj +aj pU -Vd -VP -NS -Tt -NS -NS -VP -VP -hM "} (168,1,1) = {" aa @@ -51745,37 +52307,37 @@ aj aj aj aj -aj -aj -pU -pU -pU -pU -pU -aj -pU -pU -pU -pU +CV +GG +jX +Tw +eL +aF +pF +dF +ki +lt +lt +lt pU pU pU +BP +NK +NK +ze pU pU pU +aj +aj +aj pU -jX pU pU -NK -NS -NS -zs -NS -NS -NS -NS -hM +aj +aj +aj "} (169,1,1) = {" aa @@ -52002,296 +52564,39 @@ ai pU aj aj -aj -aj -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU +CV +Sp +OE +as +ZL +Cn +zX +CV +CV pU +lt pU pU -jX pU pU +ze NK -il -NS -zs -NS -NS -il -NS -hM -"} -(170,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pU -pU -pU -ad -ad -ai -ai -ai -ai -ad +ze +BP pU pU pU aj aj aj -aj -aj -aj -aj -pU -pU -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -fQ -fQ -ZY -ZY -ZY -ZY -ZY -ZY -ZY -pU -pU -pU -pU -pU -pU -pU pU pU -pU -ai -ai -ai -ai -pU aj aj -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -jX -pU -pU -NK -sQ -NS -zs -NS -NS -sQ -NS -hM +aj +aj "} -(171,1,1) = {" +(170,1,1) = {" aa aa aa @@ -52306,14 +52611,14 @@ aa pU pU pU -pU +ad ad ai ai ai ai ad -ad +pU pU pU aj @@ -52482,162 +52787,152 @@ fQ fQ fQ fQ -fQ -fQ -fQ -ZY -ZY -ZY -ZY -fQ -fQ -fQ -fQ -fQ -fQ -ZY -ZY -ZY -ZY -ZY -ZY -ZY -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -ai -ai -ai -ai -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -lt -UI -UI -hM -hM -hM -hM -hM -hM -hM -hM -hM -"} -(172,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pU -pU -pU -pU -ad -ai -ai -ai -ai -ad -ad -pU -pU -aj -aj -aj -aj -aj -aj -aj -pU -pU -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +fQ +fQ +ZY +ZY +ZY +ZY +ZY +ZY +ZY +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +ai +ai +ai +ai +pU +CV +GG +Tt +fa +eL +ZB +GG +CV +pU +pU +pU +lP +pU +BP +pU +ze +NK +pU +UI +pU +pU +pU +pU +aj +aj +aj +aj +aj +aj +aj +aj +"} +(171,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +pU +pU +pU +pU +ad +ai +ai +ai +ai +ad +ad +pU +pU +aj +aj +aj +aj +aj +aj +aj +pU +pU +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ fQ fQ fQ @@ -52756,6 +53051,16 @@ ZY ZY ZY ZY +fQ +fQ +fQ +fQ +fQ +fQ +ZY +ZY +ZY +ZY ZY ZY ZY @@ -52770,42 +53075,42 @@ aj aj aj aj -aj -pU ai ai +ai +CV +wa +rB +fa +eL +Lv +CV +CV +CV +ct pU pU pU pU pU +ze pU pU +lt +lt +lt +UI pU +aj pU pU +aj pU pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj aj aj "} -(173,1,1) = {" +(172,1,1) = {" aa aa aa @@ -52817,7 +53122,7 @@ aa aa aa aa -ok +pU pU pU pU @@ -52827,7 +53132,7 @@ ai ai ai ad -pU +ad pU pU aj @@ -53009,7 +53314,6 @@ fQ fQ fQ fQ -fQ ZY ZY ZY @@ -53022,47 +53326,48 @@ pU pU pU pU +pU +pU aj aj aj aj aj -aj -aj -aj -pU -pU -pU -pU -pU -pU -pU -pU -pU pU +ai +CV +jt +ba +fa +jJ +ZB +be +dI +oO +BP pU +BP pU pU pU +ct +BP +lt +lt +Ns +lt +lt pU pU pU pU pU -aj -aj -aj -aj -aj -aj -aj pU -aj pU aj aj "} -(174,1,1) = {" +(173,1,1) = {" aa aa aa @@ -53074,7 +53379,7 @@ aa aa aa aa -ad +ok pU pU pU @@ -53274,8 +53579,8 @@ ZY ZY ZY ZY -ZY -ZY +pU +pU pU pU pU @@ -53287,39 +53592,39 @@ aj aj aj aj -aj -aj -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU +CV +GG +tf +fa +Sj +ZB +CV +CV +CV +ct pU pU pU pU pU +BP +Av +Wh +Wh +CV +ki +ki +CV +CV +ki +ki +CV +CV pU pU aj -aj -aj -aj -aj -aj -aj "} -(175,1,1) = {" +(174,1,1) = {" aa aa aa @@ -53332,15 +53637,15 @@ aa aa aa ad -ad pU pU -Si +pU +ad ai ai ai ai -yy +ad pU pU pU @@ -53524,7 +53829,6 @@ fQ fQ fQ fQ -fQ ZY ZY ZY @@ -53545,41 +53849,39 @@ aj aj aj aj -aj -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU +CV +rf +VP +fa +Sj +ZB +Mf +CV +hl pU +lt +lt pU pU +lt +lt +up +lt pU -aj -aj +vr +sQ +NS +Vd +NS +NS +sQ +NS +CV pU pU aj -aj -aj "} -(176,1,1) = {" -aa -aa -aa +(175,1,1) = {" aa aa aa @@ -53591,12 +53893,16 @@ aa aa aa aa -ok +ad +ad +pU pU +Si ai ai ai ai +yy pU pU pU @@ -53607,7 +53913,6 @@ aj aj aj aj -aj pU pU fQ @@ -53782,8 +54087,6 @@ fQ fQ fQ fQ -fQ -ZY ZY ZY ZY @@ -53802,38 +54105,40 @@ aj aj aj aj +aj +CV +GI +vM +FI +jJ +Fo +hM +CV +CV +Ns +lt pU pU +lt +lt +lt +up pU pU +vr +il +NS +Vd +NS +NS +il +NS +ki pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -pU -aj -aj -aj -aj aj aj "} -(177,1,1) = {" +(176,1,1) = {" aa aa aa @@ -53848,12 +54153,12 @@ aa aa aa aa +ok pU -pU -pU -ad -ad -pU +ai +ai +ai +ai pU pU pU @@ -54040,8 +54345,7 @@ fQ fQ fQ fQ -fQ -fQ +ZY ZY ZY ZY @@ -54054,43 +54358,44 @@ ZY pU pU pU +aj +aj +aj +aj +aj +CV +pM +YP +GG +Uz +Uz +Uz +Zs +ki +lt +lt pU pU pU +lt pU +Wk +UI +ct +vr +NS +NS +Vd +NS +NS +NS +NS +ki pU pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj -aj -aj -aj aj "} -(178,1,1) = {" +(177,1,1) = {" aa aa aa @@ -54108,8 +54413,8 @@ aa pU pU pU -pU -pU +ad +ad pU pU pU @@ -54299,111 +54604,110 @@ fQ fQ fQ fQ -fQ -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -"} -(179,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj -aj -pU -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +pU +pU +pU +pU +pU +aj +aj +CV +CV +YP +GG +fa +fa +Rm +bE +ki +lt +pU +pU +pU +pU +pU +pU +Wk +pU +lt +Wq +EP +NS +ZU +NS +NS +EP +EP +CV +CV +pU +aj +"} +(178,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +pU +pU +pU +pU +pU +pU +pU +pU +pU +aj +aj +aj +aj +aj +aj +aj +aj +pU +pU +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ fQ fQ fQ @@ -54567,44 +54871,48 @@ ZY ZY ZY ZY -ZY -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU pU pU pU pU pU +aj +aj +CV +CV +ki +ki +ki +CV +CV +CV +lt pU pU +lt pU pU pU -aj -aj -aj -aj -aj +VU +Xk +lt +NS +NS +NS +NS +NS +uw +NS +NS +NS +ki pU aj -aj -aj "} -(180,1,1) = {" +(179,1,1) = {" +aa +aa +aa aa aa aa @@ -54616,8 +54924,6 @@ aa aa aa aa -HX -pU ad pU pU @@ -54628,10 +54934,9 @@ pU pU pU pU -pU -pU -pU -pU +aj +aj +aj aj aj aj @@ -54815,8 +55120,7 @@ fQ fQ fQ fQ -fQ -fQ +ZY ZY ZY ZY @@ -54830,6 +55134,9 @@ pU pU pU pU +aj +aj +aj pU pU pU @@ -54839,29 +55146,27 @@ pU pU pU pU +Ns +Az pU pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj +lt +lt +lt +NS +mk +sa +NS +NS +NS +OW +sa +NS +ki aj -pU aj "} -(181,1,1) = {" +(180,1,1) = {" aa aa aa @@ -54873,7 +55178,9 @@ aa aa aa aa +HX pU +ad pU pU pU @@ -54887,10 +55194,8 @@ pU pU pU pU -pU -pU -pU -pU +aj +aj aj aj pU @@ -55098,27 +55403,27 @@ pU pU pU pU +lt +lt pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -pU -pU -pU -aj -aj +xW +lt +lt +lt +NS +NS +uw +NS +NS +NS +NS +NS +NS +ki pU aj "} -(182,1,1) = {" +(181,1,1) = {" aa aa aa @@ -55143,11 +55448,11 @@ pU pU pU pU -aj -aj -aj -aj -aj +pU +pU +pU +pU +pU aj aj pU @@ -55340,12 +55645,6 @@ ZY ZY ZY ZY -ZY -pU -pU -pU -pU -pU pU pU pU @@ -55362,20 +55661,26 @@ pU pU pU pU +lt pU pU -aj -aj -pU -pU -pU -pU +Wk +lt +lt +kf +KO +NS +aH +NS +NS +KO +KO +CV +CV pU aj -aj -aj "} -(183,1,1) = {" +(182,1,1) = {" aa aa aa @@ -55399,7 +55704,7 @@ pU pU pU pU -aj +pU aj aj aj @@ -55616,23 +55921,23 @@ pU pU pU pU +Wk pU +ct +vr +NS +rj +Vd +NS +NS +NS +NS +ki pU -pU -pU -pU -pU -pU -pU -pU -aj -aj aj aj -aj -pU "} -(184,1,1) = {" +(183,1,1) = {" aa aa aa @@ -55645,8 +55950,8 @@ aa aa aa pU -ad -ai +pU +pU pU pU pU @@ -55871,25 +56176,25 @@ pU pU pU pU +lt +lt +Wk pU pU +vr +il +NS +Vd +NS +NS +il +NS +ki pU pU pU -pU -pU -pU -pU -pU -pU -aj -aj -pU -pU -aj -aj "} -(185,1,1) = {" +(184,1,1) = {" aa aa aa @@ -55901,10 +56206,10 @@ aa aa aa aa -ad +pU ad ai -wv +pU pU pU pU @@ -55922,7 +56227,6 @@ aj aj aj pU -pU fQ fQ fQ @@ -56112,6 +56416,7 @@ ZY ZY ZY ZY +ZY pU pU pU @@ -56127,26 +56432,26 @@ pU pU pU pU +lt +Ns +lt +up +Pb pU +vr +sQ +NS +Vd +NS +NS +sQ +NS +CV pU pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -pU -aj -aj -aj aj "} -(186,1,1) = {" +(185,1,1) = {" aa aa aa @@ -56161,7 +56466,7 @@ aa ad ad ai -ad +wv pU pU pU @@ -56360,225 +56665,155 @@ fQ fQ fQ fQ -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj -aj -"} -(187,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ai -ad -pU -pU -pU -pU -pU -pU -pU -pU -aj -aj -aj -aj -aj -aj -aj -aj -pU -pU -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +lt +lt +BP +Oo +ej +nO +CV +ki +ki +CV +CV +ki +ki +CV +CV +pU +aj +aj +"} +(186,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ai +ad +pU +pU +pU +pU +pU +pU +pU +pU +aj +aj +aj +aj +aj +aj +aj +aj +pU +pU +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ fQ fQ fQ @@ -56618,6 +56853,77 @@ fQ fQ fQ fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +ZY +ZY ZY ZY ZY @@ -56642,9 +56948,14 @@ pU pU pU pU +ct +BP pU pU pU +lt +pU +pU pU pU pU @@ -56652,15 +56963,9 @@ pU pU pU pU -aj -aj -aj -aj -aj -aj aj "} -(188,1,1) = {" +(187,1,1) = {" aa aa aa @@ -56675,6 +56980,7 @@ aa ad ad ai +ad pU pU pU @@ -56691,7 +56997,6 @@ aj aj aj aj -aj pU pU fQ @@ -56884,7 +57189,6 @@ ZY pU pU pU -yc pU pU pU @@ -56902,22 +57206,23 @@ pU pU pU pU +lt pU pU +lt +Ns +lt +lt +pU pU pU pU pU pU -aj -aj -aj -aj -aj aj aj "} -(189,1,1) = {" +(188,1,1) = {" aa aa aa @@ -56930,8 +57235,8 @@ aa aa aa ad -HX -pU +ad +ai pU pU pU @@ -57157,24 +57462,24 @@ pU pU pU pU +lt +lt +lt pU +lt +lt +lt +lt +lt pU pU -pU -pU -pU -pU -pU -pU -aj -aj aj aj aj aj aj "} -(190,1,1) = {" +(189,1,1) = {" aa aa aa @@ -57186,6 +57491,7 @@ aa aa aa aa +ad HX pU pU @@ -57196,19 +57502,17 @@ pU pU pU pU -pU -pU -pU aj -pU +aj +aj +aj +aj +aj +aj aj aj pU pU -pU -pU -pU -fQ fQ fQ fQ @@ -57395,10 +57699,266 @@ ZY ZY ZY ZY +ZY +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +Ns +pU +pU +UI +lt +lt +Ns +lt +pU +aj +aj +aj +aj +aj +aj +"} +(190,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +HX +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +pU +aj +pU +aj +aj +pU pU pU pU pU +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +fQ +ZY +ZY +ZY +ZY +ZY +pU +pU pU pU pU @@ -57422,6 +57982,8 @@ pU pU pU pU +lt +lt pU aj aj @@ -58430,7 +58992,7 @@ pU pU pU pU -pU +yc pU pU pU diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 2250cc17d409b..17a558b4f5efc 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -55250,6 +55250,7 @@ "tvQ" = ( /obj/structure/chair/sofa/bench, /obj/effect/landmark/start/prisoner, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) "twf" = ( diff --git a/_maps/virtual_domains/island_brawl.dmm b/_maps/virtual_domains/island_brawl.dmm index 2c8a12c6c5793..6648b51f55dfc 100644 --- a/_maps/virtual_domains/island_brawl.dmm +++ b/_maps/virtual_domains/island_brawl.dmm @@ -3466,12 +3466,7 @@ /area/virtual_domain/fullbright) "Rk" = ( /obj/structure/table/glass, -/obj/machinery/fax{ - fax_name = "Beach Hotel Fax"; - name = "Beach Hotel's Fax Machine"; - pixel_y = 8; - visible_to_network = 0 - }, +/obj/item/storage/box/donkpockets, /turf/open/floor/iron/dark/diagonal, /area/virtual_domain) "Rs" = ( diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 5db7227521a3f..eacdd868a9556 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -76,7 +76,7 @@ #define SPAN_SINGING "singing" #define SPAN_TAPE_RECORDER "tape_recorder" #define SPAN_SMALL_VOICE "small" - +#define SPAN_SOAPBOX "soapbox" //bitflag #defines for return value of the radio() proc. /// Makes the message use italics #define ITALICS (1<<0) diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 0447e87f532fe..fadd00053156d 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -120,6 +120,7 @@ #define span_small(str) ("" + str + "") #define span_smallnotice(str) ("" + str + "") #define span_smallnoticeital(str) ("" + str + "") +#define span_soapbox(str) ("" + str + "") #define span_spiderbroodmother(str) ("" + str + "") #define span_spiderscout(str) ("" + str + "") #define span_spiderbreacher(str) ("" + str + "") diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 8d460c3aecb6f..5e9f2b35ef04d 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -298,9 +298,12 @@ #define SSEXPLOSIONS_THROWS 3 // Machines subsystem subtasks. -#define SSMACHINES_APCS_EARLY 1 -#define SSMACHINES_MACHINES 2 -#define SSMACHINES_APCS_LATE 3 +#define SSMACHINES_MACHINES 1 +#define SSMACHINES_APCS_EARLY 2 +#define SSMACHINES_APCS_ENVIRONMENT 3 +#define SSMACHINES_APCS_LIGHTS 4 +#define SSMACHINES_APCS_EQUIPMENT 5 +#define SSMACHINES_APCS_LATE 6 // Wardrobe subsystem tasks #define SSWARDROBE_STOCK 1 diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index a2925ee2e5b68..6c2fc4be7a02f 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -72,7 +72,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai // Trait added to the user of a hippocratic oath status effect #define TRAIT_HIPPOCRATIC_OATH "hippocratic_oath" #define TRAIT_IGNORESLOWDOWN "ignoreslow" -#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" /// Makes it so the mob can use guns regardless of tool user status #define TRAIT_GUN_NATURAL "gunnatural" /// Causes death-like unconsciousness @@ -234,6 +233,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_EXAMINE_FITNESS "reveal_power_level" /// These mobs have particularly hygienic tongues #define TRAIT_WOUND_LICKER "wound_licker" +/// Mobs with this trait are allowed to use silicon emotes +#define TRAIT_SILICON_EMOTES_ALLOWED "silicon_emotes_allowed" /// This trait designate that the mob was originally a monkey #define TRAIT_BORN_MONKEY "born_as_a_monkey" @@ -972,6 +973,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// changelings with this trait can no longer talk over the hivemind #define TRAIT_CHANGELING_HIVEMIND_MUTE "ling_mute" +/// This guy is a hulk! (Bulky and green, lacks tact) #define TRAIT_HULK "hulk" /// Isn't attacked harmfully by blob structures #define TRAIT_BLOB_ALLY "blob_ally" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 759101dc2abd5..47887ede45ebf 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -225,8 +225,6 @@ #define SPEED_TRAIT "speed_trait" /// Trait given to mobs that have been autopsied #define AUTOPSY_TRAIT "autopsy_trait" -/// Trait given by [/datum/status_effect/blessing_of_insanity] -#define MAD_WIZARD_TRAIT "mad_wizard_trait" ///From the market_crash event #define MARKET_CRASH_EVENT_TRAIT "crashed_market_event" diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 76c69425bf54b..e44516d2f2873 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -312,7 +312,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items list(//equipment /obj/item/clothing/glasses/hud/security = 1, /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/clothing/gloves/color/black = 1, + /obj/item/clothing/gloves/color/black/security = 1, /obj/item/clothing/gloves/color/yellow = 1, /obj/item/clothing/gloves/tackler/combat = 1, /obj/item/clothing/head/helmet/toggleable/justice = 1, diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index d098e1c11fb82..df177e568609e 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -273,7 +273,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_HUSK" = TRAIT_HUSK, "TRAIT_ID_APPRAISER" = TRAIT_ID_APPRAISER, "TRAIT_IGNORE_ELEVATION" = TRAIT_IGNORE_ELEVATION, - "TRAIT_IGNOREDAMAGESLOWDOWN" = TRAIT_IGNOREDAMAGESLOWDOWN, "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, "TRAIT_IGNORING_GRAVITY" = TRAIT_IGNORING_GRAVITY, "TRAIT_ILLITERATE" = TRAIT_ILLITERATE, @@ -439,6 +438,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, + "TRAIT_SILICON_EMOTES_ALLOWED" = TRAIT_SILICON_EMOTES_ALLOWED, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index a0ec998701541..4cb03eedba8eb 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -101,7 +101,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_HOLY" = TRAIT_HOLY, "TRAIT_HUSK" = TRAIT_HUSK, "TRAIT_IGNORE_ELEVATION" = TRAIT_IGNORE_ELEVATION, - "TRAIT_IGNOREDAMAGESLOWDOWN" = TRAIT_IGNOREDAMAGESLOWDOWN, "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, "TRAIT_ILLITERATE" = TRAIT_ILLITERATE, "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, @@ -200,6 +199,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, + "TRAIT_SILICON_EMOTES_ALLOWED" = TRAIT_SILICON_EMOTES_ALLOWED, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index c3b91173a45f5..476140acb1edd 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -79,6 +79,7 @@ using = new /atom/movable/screen/resist(null, src) using.icon = ui_style using.screen_loc = ui_above_movement + using.update_appearance() hotkeybuttons += using throw_icon = new /atom/movable/screen/throw_catch(null, src) diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 5fa44b7f0542b..371341aec0bf5 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -63,8 +63,7 @@ ///Set the HUD in New, as lobby screens are made before Atoms are Initialized. /atom/movable/screen/lobby/New(loc, datum/hud/our_hud, ...) - if(our_hud) - hud = our_hud + set_new_hud(our_hud) return ..() ///Run sleeping actions after initialize diff --git a/code/_onclick/hud/parallax/parallax.dm b/code/_onclick/hud/parallax/parallax.dm index bcdcd0e74fed1..0a3732e134fc4 100644 --- a/code/_onclick/hud/parallax/parallax.dm +++ b/code/_onclick/hud/parallax/parallax.dm @@ -275,7 +275,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) . = ..() // Parallax layers are independant of hud, they care about client // Not doing this will just create a bunch of hard deletes - hud = null + set_new_hud(hud_owner = null) if(template) return diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 8cc29740870ca..315efe4877810 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -45,8 +45,9 @@ /atom/movable/screen/Initialize(mapload, datum/hud/hud_owner) . = ..() - if(hud_owner && istype(hud_owner)) - hud = hud_owner + if(isnull(hud_owner)) //some screens set their hud owners on /new, this prevents overriding them with null post atoms init + return + set_new_hud(hud_owner) /atom/movable/screen/Destroy() master_ref = null @@ -72,10 +73,25 @@ /atom/movable/screen/proc/component_click(atom/movable/screen/component_button/component, params) return +///setter used to set our new hud +/atom/movable/screen/proc/set_new_hud(datum/hud/hud_owner) + if(hud) + UnregisterSignal(hud, COMSIG_QDELETING) + if(isnull(hud_owner)) + hud = null + return + hud = hud_owner + RegisterSignal(hud, COMSIG_QDELETING, PROC_REF(on_hud_delete)) + /// Returns the mob this is being displayed to, if any /atom/movable/screen/proc/get_mob() return hud?.mymob +/atom/movable/screen/proc/on_hud_delete(datum/source) + SIGNAL_HANDLER + + set_new_hud(hud_owner = null) + /atom/movable/screen/text icon = null icon_state = null diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index 3e07eca8a2e87..25c2b3365fbe6 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -11,10 +11,17 @@ SUBSYSTEM_DEF(machines) VAR_PRIVATE/list/all_machines = list() var/list/processing = list() + var/list/processing_apcs = list() + var/list/currentrun = list() - var/list/apc_early_processing = list() - var/list/apc_late_processing = list() - var/current_part = SSMACHINES_APCS_EARLY + var/current_part = SSMACHINES_MACHINES + var/list/apc_steps = list( + SSMACHINES_APCS_ENVIRONMENT, + SSMACHINES_APCS_LIGHTS, + SSMACHINES_APCS_EQUIPMENT, + SSMACHINES_APCS_EARLY, + SSMACHINES_APCS_LATE + ) ///List of all powernets on the server. var/list/datum/powernet/powernets = list() @@ -82,25 +89,10 @@ SUBSYSTEM_DEF(machines) if (!resumed) for(var/datum/powernet/powernet as anything in powernets) powernet.reset() //reset the power state. - current_part = SSMACHINES_APCS_EARLY - src.currentrun = apc_early_processing.Copy() - - //APC early processing. Draws static power usages from their grids. - if(current_part == SSMACHINES_APCS_EARLY) - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/machinery/power/apc/apc = currentrun[currentrun.len] - currentrun.len-- - if(QDELETED(apc) || apc.early_process(wait * 0.1) == PROCESS_KILL) - apc_early_processing -= apc - apc.datum_flags &= ~DF_ISPROCESSING - if(MC_TICK_CHECK) - return current_part = SSMACHINES_MACHINES src.currentrun = processing.Copy() - //General machine processing. Their power usage can be dynamic and based on surplus power, so they come after static power usage have been applied. + //Processing all machines if(current_part == SSMACHINES_MACHINES) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun @@ -112,22 +104,34 @@ SUBSYSTEM_DEF(machines) thing.datum_flags &= ~DF_ISPROCESSING if (MC_TICK_CHECK) return - current_part = SSMACHINES_APCS_LATE - src.currentrun = apc_late_processing.Copy() + current_part = apc_steps[1] + src.currentrun = processing_apcs.Copy() - //APC late processing. APCs will use the remaining power on the grid to charge their cells if needed. - //This is applied at the end so charging APCs don't cause others to discharge by taking all the power from the grid before machines use power. - if(current_part == SSMACHINES_APCS_LATE) + //Processing APCs + while(current_part in apc_steps) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun while(currentrun.len) var/obj/machinery/power/apc/apc = currentrun[currentrun.len] currentrun.len-- - if(QDELETED(apc) || apc.late_process(wait * 0.1) == PROCESS_KILL) - apc_late_processing -= apc + if(QDELETED(apc)) + processing_apcs -= apc apc.datum_flags &= ~DF_ISPROCESSING + switch(current_part) + if(SSMACHINES_APCS_EARLY) + apc.early_process(wait * 0.1) + if(SSMACHINES_APCS_LATE) + apc.charge_channel(null, wait * 0.1) + apc.late_process(wait * 0.1) + else + apc.charge_channel(current_part, wait * 0.1) if(MC_TICK_CHECK) return + var/next_index = apc_steps.Find(current_part) + 1 + if (next_index > apc_steps.len) + return + current_part = apc_steps[next_index] + src.currentrun = processing_apcs.Copy() /datum/controller/subsystem/machines/proc/setup_template_powernets(list/cables) var/obj/structure/cable/PC diff --git a/code/datums/components/soapbox.dm b/code/datums/components/soapbox.dm new file mode 100644 index 0000000000000..61132bf68faa9 --- /dev/null +++ b/code/datums/components/soapbox.dm @@ -0,0 +1,42 @@ +/datum/component/soapbox + /// List of our current soapboxxer(s) who are gaining loud speech + var/list/soapboxers = list() + /// Gives atoms moving over us the soapbox speech and takes it away when they leave + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_loc_entered), + COMSIG_ATOM_EXITED = PROC_REF(on_loc_exited) + ) + +/datum/component/soapbox/Initialize(...) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + add_connect_loc_behalf_to_parent() + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(parent_moved)) + +///Applies loud speech to our movable when entering the turf our parent is on +/datum/component/soapbox/proc/on_loc_entered(datum/source, atom/movable/soapbox_arrive) + SIGNAL_HANDLER + RegisterSignal(soapbox_arrive, COMSIG_MOB_SAY, PROC_REF(soapbox_speech)) + soapboxers += soapbox_arrive + +///Takes away loud speech from our movable when it leaves the turf our parent is on +/datum/component/soapbox/proc/on_loc_exited(datum/source, atom/movable/soapbox_leave) + SIGNAL_HANDLER + if(soapbox_leave in soapboxers) + UnregisterSignal(soapbox_leave, COMSIG_MOB_SAY) + soapboxers -= soapbox_leave + +///We don't want our soapboxxer to keep their loud say if the parent is moved out from under them +/datum/component/soapbox/proc/parent_moved(datum/source) + SIGNAL_HANDLER + for(var/atom/movable/loud as anything in soapboxers) + UnregisterSignal(loud, COMSIG_MOB_SAY) + soapboxers = list() + +///Gives a mob a unique say span +/datum/component/soapbox/proc/soapbox_speech(datum/source, list/speech_args) + SIGNAL_HANDLER + speech_args[SPEECH_SPANS] |= SPAN_SOAPBOX + +/datum/component/soapbox/proc/add_connect_loc_behalf_to_parent() + AddComponent(/datum/component/connect_loc_behalf, parent, loc_connections) diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm index f39379d636783..fcf62dead1a59 100644 --- a/code/datums/components/style/style.dm +++ b/code/datums/components/style/style.dm @@ -219,7 +219,7 @@ rank = rank_changed meter.maptext = "[format_rank_string(rank)][generate_multiplier()][generate_actions()]" - meter.maptext_y = 100 - 9 * length(actions) + meter.maptext_y = 94 - 12 * length(actions) update_meter(point_to_rank(), go_back) /datum/component/style/proc/update_meter(new_rank, go_back) @@ -270,19 +270,15 @@ return "SPACED!" /datum/component/style/proc/format_rank_string(new_rank) - var/rank_string = rank_to_string(new_rank) - var/final_string = "" - final_string += "[rank_string[1]]" - final_string += "[copytext(rank_string, 2)]" - return final_string + return MAPTEXT_PIXELLARI("[rank_to_string(new_rank)]") /datum/component/style/proc/generate_multiplier() - return "
MULTIPLIER: [point_multiplier]X" + return "
" + MAPTEXT_GRAND9K("MULTIPLIER: [point_multiplier]X") /datum/component/style/proc/generate_actions() var/action_string = "" for(var/action in actions) - action_string += "
+ [actions[action]]" + action_string += "
" + MAPTEXT_GRAND9K("+ [actions[action]]") return action_string /datum/component/style/proc/action_to_color(action) diff --git a/code/datums/components/style/style_meter.dm b/code/datums/components/style/style_meter.dm index 94263700dda21..cc02baec1d5e0 100644 --- a/code/datums/components/style/style_meter.dm +++ b/code/datums/components/style/style_meter.dm @@ -132,7 +132,7 @@ maptext_height = 120 maptext_width = 105 maptext_x = 5 - maptext_y = 100 + maptext_y = 94 maptext = "" layer = SCREENTIP_LAYER diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index b8621d382f6fb..8e902ced2fdbf 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -43,7 +43,7 @@ src.min_distance = min_distance var/mob/P = parent - to_chat(P, span_notice("You are now able to launch tackles! You can do so by activating throw mode, and clicking on your target with an empty hand.")) + to_chat(P, span_notice("You are now able to launch tackles! You can do so by activating throw mode, and ") + span_boldnotice("RIGHT-CLICKING on your target with an empty hand.")) addtimer(CALLBACK(src, PROC_REF(resetTackle)), base_knockdown, TIMER_STOPPABLE) @@ -74,6 +74,9 @@ if(modifiers[ALT_CLICK] || modifiers[SHIFT_CLICK] || modifiers[CTRL_CLICK] || modifiers[MIDDLE_CLICK]) return + if(!modifiers[RIGHT_CLICK]) + return + if(!user.throw_mode || user.get_active_held_item() || user.pulling || user.buckled || user.incapacitated()) return diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 5a3ff4b4cb070..dcb8d63a3c43e 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -217,10 +217,11 @@ if(SEND_SIGNAL(parent, COMSIG_TWOHANDED_WIELD, user) & COMPONENT_TWOHANDED_BLOCK_WIELD) user.dropItemToGround(parent, force = TRUE) return COMPONENT_EQUIPPED_FAILED // blocked wield from item + if (wield_callback?.Invoke(parent, user) & COMPONENT_TWOHANDED_BLOCK_WIELD) + return wielded = TRUE ADD_TRAIT(parent, TRAIT_WIELDED, REF(src)) RegisterSignal(user, COMSIG_MOB_SWAPPING_HANDS, PROC_REF(on_swapping_hands)) - wield_callback?.Invoke(parent, user) // update item stats and name var/obj/item/parent_item = parent diff --git a/code/datums/elements/simple_flying.dm b/code/datums/elements/simple_flying.dm index 49b8771687bd9..e6d8f42db838b 100644 --- a/code/datums/elements/simple_flying.dm +++ b/code/datums/elements/simple_flying.dm @@ -17,6 +17,7 @@ /datum/element/simple_flying/Detach(datum/target) . = ..() UnregisterSignal(target, COMSIG_MOB_STATCHANGE) + REMOVE_TRAIT(target, TRAIT_MOVE_FLYING, ELEMENT_TRAIT(type)) ///signal called by the stat of the target changing /datum/element/simple_flying/proc/on_stat_change(mob/living/target, new_stat) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 7006d6d6daa71..71631de2d9887 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -44,6 +44,8 @@ var/list/mob_type_blacklist_typecache /// Types that can use this emote regardless of their state. var/list/mob_type_ignore_stat_typecache + /// Trait that is required to use this emote. + var/trait_required /// In which state can you use this emote? (Check stat.dm for a full list of them) var/stat_allowed = CONSCIOUS /// Sound to play when emote is called. @@ -297,6 +299,8 @@ * Returns a bool about whether or not the user can run the emote. */ /datum/emote/proc/can_run_emote(mob/user, status_check = TRUE, intentional = FALSE) + if(trait_required && !HAS_TRAIT(user, trait_required)) + return FALSE if(!is_type_in_typecache(user, mob_type_allowed_typecache)) return FALSE if(is_type_in_typecache(user, mob_type_blacklist_typecache)) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index cd8065a72a3a8..330c224070c3e 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -188,8 +188,7 @@ return FALSE if(!(carp_user.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE return FALSE - var/datum/dna/dna = carp_user.has_dna() - if(dna?.check_mutation(/datum/mutation/human/hulk)) //NO HULK + if(HAS_TRAIT(carp_user, TRAIT_HULK)) //NO HULK return FALSE if(!isturf(carp_user.loc)) //NO MOTHERFLIPPIN MECHS! return FALSE diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index dbe91091ab89c..4bc6c77a9fe81 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -17,7 +17,6 @@ mutation_traits = list( TRAIT_CHUNKYFINGERS, TRAIT_HULK, - TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE, ) @@ -38,6 +37,7 @@ owner.add_mood_event("hulk", /datum/mood_event/hulk) RegisterSignal(owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(on_attack_hand)) RegisterSignal(owner, COMSIG_MOB_CLICKON, PROC_REF(check_swing)) + owner.add_movespeed_mod_immunities("hulk", /datum/movespeed_modifier/damage_slowdown) /datum/mutation/human/hulk/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, modifiers) SIGNAL_HANDLER @@ -99,6 +99,7 @@ owner.clear_mood_event("hulk") UnregisterSignal(owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK) UnregisterSignal(owner, COMSIG_MOB_CLICKON) + owner.remove_movespeed_mod_immunities("hulk", /datum/movespeed_modifier/damage_slowdown) /// How many steps it takes to throw the mob #define HULK_TAILTHROW_STEPS 28 @@ -257,6 +258,7 @@ log_combat(the_hulk, yeeted_person, "has thrown by tail") /datum/mutation/human/hulk/wizardly + name = "Hulk (Magical)" species_allowed = null //yes skeleton/lizard hulk - note that species that dont have skintone changing (like skellies) get custom handling health_req = 0 instability = 0 @@ -264,19 +266,18 @@ /// List of traits to add/remove when someone gets this mutation. mutation_traits = list( TRAIT_HULK, - TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE, ) // no chunk /datum/mutation/human/hulk/superhuman + name = "Hulk (Super)" health_req = 0 instability = 0 /// List of traits to add/remove when someone gets this mutation. mutation_traits = list( TRAIT_CHUNKYFINGERS, TRAIT_HULK, - TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_PUSHIMMUNE, diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 04ab2ee8f1783..2a66475c6e2fc 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -84,7 +84,7 @@ icon_state = "blooddrunk" /datum/status_effect/blooddrunk/on_apply() - ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, BLOODDRUNK_TRAIT) + owner.add_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) if(ishuman(owner)) var/mob/living/carbon/human/human_owner = owner human_owner.physiology.brute_mod *= 0.1 @@ -104,7 +104,7 @@ human_owner.physiology.tox_mod *= 10 human_owner.physiology.oxy_mod *= 10 human_owner.physiology.stamina_mod *= 10 - REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, BLOODDRUNK_TRAIT) + owner.remove_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) owner.remove_stun_absorption(id) //Used by changelings to rapidly heal @@ -383,7 +383,7 @@ show_duration = TRUE /datum/status_effect/regenerative_core/on_apply() - ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) + owner.add_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) owner.adjustBruteLoss(-25) owner.adjustFireLoss(-25) owner.fully_heal(HEAL_CC_STATUS) @@ -394,7 +394,7 @@ return TRUE /datum/status_effect/regenerative_core/on_remove() - REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) + owner.remove_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) /datum/status_effect/lightningorb id = "Lightning Orb" @@ -570,7 +570,8 @@ owner.AddElement(/datum/element/forced_gravity, 0) owner.AddElement(/datum/element/simple_flying) owner.add_stun_absorption(source = id, priority = 4) - owner.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) + owner.add_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) + ADD_TRAIT(owner, TRAIT_FREE_HYPERSPACE_MOVEMENT, id) owner.playsound_local(get_turf(owner), 'sound/chemistry/ahaha.ogg', vol = 100, vary = TRUE, use_reverb = TRUE) return TRUE @@ -587,7 +588,8 @@ owner.RemoveElement(/datum/element/forced_gravity, 0) owner.RemoveElement(/datum/element/simple_flying) owner.remove_stun_absorption(id) - owner.remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) + owner.remove_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) + REMOVE_TRAIT(owner, TRAIT_FREE_HYPERSPACE_MOVEMENT, id) /// Gives you a brief period of anti-gravity /datum/status_effect/jump_jet diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index ff8e22b17b8fa..031a6dd5039d7 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -18,6 +18,10 @@ name = "Mining Station Public Storage" icon_state = "mining_storage" +/area/mine/lobby/raptor + name = "Nanotrasen Raptor Farm" + icon_state = "mining_storage" + /area/mine/production name = "Mining Station Production Wing" icon_state = "mining_production" diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 1c69dbecb7ea0..af6221d89219d 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -2,7 +2,7 @@ #define HEATER_MODE_HEAT "heat" #define HEATER_MODE_COOL "cool" #define HEATER_MODE_AUTO "auto" -#define BASE_HEATING_ENERGY (STANDARD_CELL_RATE * 4) +#define BASE_HEATING_ENERGY (40 KILO JOULES) /obj/machinery/space_heater anchored = FALSE @@ -32,7 +32,7 @@ ///How much heat/cold we can deliver var/heating_energy = BASE_HEATING_ENERGY ///How efficiently we can deliver that heat/cold (higher indicates less cell consumption) - var/efficiency = 200 + var/efficiency = 20 MEGA JOULES / STANDARD_CELL_CHARGE ///The amount of degrees above and below the target temperature for us to change mode to heater or cooler var/temperature_tolerance = 1 ///What's the middle point of our settable temperature (30 °C) @@ -176,7 +176,7 @@ for(var/datum/stock_part/capacitor/capacitor in component_parts) cap += capacitor.tier - heating_energy = laser * BASE_HEATING_ENERGY + heating_energy = laser * initial(heating_energy) settable_temperature_range = cap * initial(settable_temperature_range) efficiency = (cap + 1) * initial(efficiency) * 0.5 @@ -295,7 +295,14 @@ on = !on mode = HEATER_MODE_STANDBY if(!isnull(user)) - balloon_alert(user, "turned [on ? "on" : "off"]") + if(QDELETED(cell)) + balloon_alert(user, "no cell!") + else if(!cell.charge()) + balloon_alert(user, "no charge!") + else if(!is_operational) + balloon_alert(user, "not operational!") + else + balloon_alert(user, "turned [on ? "on" : "off"]") update_appearance() if(on) SSair.start_processing_machine(src) @@ -310,11 +317,18 @@ //We inherit the cell from the heater prior cell = null interaction_flags_click = FORBID_TELEKINESIS_REACH + display_panel = FALSE + settable_temperature_range = 50 ///The beaker within the heater var/obj/item/reagent_containers/beaker = null - ///How powerful the heating is, upgrades with parts. (ala chem_heater.dm's method, basically the same level of heating, but this is restricted) - var/chem_heating_power = 1 - display_panel = FALSE + /// How quickly it delivers heat to the reagents. In watts per joule of the thermal energy difference of the reagent from the temperature difference of the current and target temperatures. + var/beaker_conduction_power = 0.1 + /// The subsystem we're being processed by. + var/datum/controller/subsystem/processing/our_subsystem + +/obj/machinery/space_heater/improvised_chem_heater/Initialize(mapload) + our_subsystem = locate(subsystem_type) in Master.subsystems + . = ..() /obj/machinery/space_heater/improvised_chem_heater/Destroy() . = ..() @@ -322,11 +336,10 @@ /obj/machinery/space_heater/improvised_chem_heater/heating_examine() . = ..() - - var/power_mod = 0.1 * chem_heating_power - if(set_mode == HEATER_MODE_AUTO) - power_mod *= 0.5 - . += span_notice("Heating power for beaker: [display_power(heating_energy * power_mod, convert = TRUE)]") + // Conducted energy per joule of thermal energy difference in a tick. + var/conduction_energy = beaker_conduction_power * (set_mode == HEATER_MODE_AUTO ? 0.5 : 1) * our_subsystem.wait / (1 SECONDS) + // This accounts for the timestep inaccuracy. + . += span_notice("Reagent conduction power: [conduction_energy < 1 ? display_power(-log(1 - conduction_energy) SECONDS / our_subsystem.wait, convert = FALSE) : "∞W"]/J") /obj/machinery/space_heater/improvised_chem_heater/toggle_power(user) . = ..() @@ -341,10 +354,10 @@ return PROCESS_KILL if(beaker.reagents.total_volume) - var/power_mod = 0.1 * chem_heating_power + var/conduction_modifier = beaker_conduction_power switch(set_mode) if(HEATER_MODE_AUTO) - power_mod *= 0.5 + conduction_modifier *= 0.5 if(HEATER_MODE_HEAT) if(target_temperature < beaker.reagents.chem_temp) return @@ -352,7 +365,7 @@ if(target_temperature > beaker.reagents.chem_temp) return - var/required_energy = abs(target_temperature - beaker.reagents.chem_temp) * power_mod * seconds_per_tick * beaker.reagents.heat_capacity() + var/required_energy = abs(target_temperature - beaker.reagents.chem_temp) * conduction_modifier * seconds_per_tick * beaker.reagents.heat_capacity() required_energy = min(required_energy, heating_energy, cell.charge * efficiency) if(required_energy < 1) return @@ -468,16 +481,17 @@ for(var/datum/stock_part/capacitor/capacitor in component_parts) capacitors_rating += capacitor.tier - heating_energy = lasers_rating * BASE_HEATING_ENERGY + heating_energy = lasers_rating * initial(heating_energy) - settable_temperature_range = capacitors_rating * 50 //-20 - 80 at base - efficiency = (capacitors_rating + 1) * 10 + settable_temperature_range = capacitors_rating * initial(settable_temperature_range) //-20 - 80 at base + efficiency = (capacitors_rating + 1) * initial(efficiency) * 0.5 target_temperature = clamp(target_temperature, max(settable_temperature_median - settable_temperature_range, TCMB), settable_temperature_median + settable_temperature_range) - chem_heating_power = efficiency / 20 + // No time integration is used, so we should clamp this to prevent being able to overshoot if there was a subtype with a high initial value. + beaker_conduction_power = min((capacitors_rating + 1) * 0.5 * initial(beaker_conduction_power), 1 SECONDS / our_subsystem.wait) #undef HEATER_MODE_STANDBY #undef HEATER_MODE_HEAT diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 4c53cc5e4189d..5887c77667506 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -13,6 +13,10 @@ /// If this list contains `0`, then it will be receivable on every single /// z-level. var/list/levels + /// Blacklisted spans we don't want being put into comms by anything, ever - a place to put any new spans we want to make without letting them annoy people on comms + var/list/blacklisted_spans = list( + SPAN_SOAPBOX, + ) /datum/signal/subspace/New(data) src.data = data || list() @@ -175,7 +179,7 @@ if(!hearer) stack_trace("null found in the hearers list returned by the spatial grid. this is bad") continue - + spans -= blacklisted_spans hearer.Hear(rendered, virt, language, message, frequency, spans, message_mods, message_range = INFINITY) // This following recording is intended for research and feedback in the use of department radio channels diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 21804def7e361..b3aba350c3368 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(dye_registry, list( DYE_QM = /obj/item/clothing/gloves/color/brown, DYE_CAPTAIN = /obj/item/clothing/gloves/captain, DYE_HOP = /obj/item/clothing/gloves/color/grey, - DYE_HOS = /obj/item/clothing/gloves/color/black, + DYE_HOS = /obj/item/clothing/gloves/color/black/security, DYE_CE = /obj/item/clothing/gloves/chief_engineer, DYE_RD = /obj/item/clothing/gloves/color/grey, DYE_CMO = /obj/item/clothing/gloves/latex/nitrile, diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 912e1d66b0929..7f28724e68b12 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -397,7 +397,6 @@ // left hands are odd slots if (idx && (idx % 2) == (message_mods[RADIO_EXTENSION] == MODE_L_HAND)) return - talk_into(speaker, raw_message, , spans, language=message_language, message_mods=filtered_mods) /// Checks if this radio can receive on the given frequency. diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index c8c76c583e103..bebafbdab83b7 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -320,7 +320,7 @@ // Hulk and body temperature var/datum/species/targetspecies = humantarget.dna.species - var/mutant = humantarget.dna.check_mutation(/datum/mutation/human/hulk) + var/mutant = HAS_TRAIT(humantarget, TRAIT_HULK) render_list += "Species: [targetspecies.name][mutant ? "-derived mutant" : ""]\n" var/core_temperature_message = "Core temperature: [round(humantarget.coretemperature-T0C, 0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)" diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 8f838c0c0412f..86b99e8c47e4e 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -56,10 +56,9 @@ /// Triggered on wield of two handed item /// Specific hulk checks due to reflection chance for balance issues and switches hitsounds. /obj/item/dualsaber/proc/on_wield(obj/item/source, mob/living/carbon/user) - if(user?.has_dna()) - if(user.dna.check_mutation(/datum/mutation/human/hulk)) - to_chat(user, span_warning("You lack the grace to wield this!")) - return COMPONENT_TWOHANDED_BLOCK_WIELD + if(user && HAS_TRAIT(user, TRAIT_HULK)) + to_chat(user, span_warning("You lack the grace to wield this!")) + return COMPONENT_TWOHANDED_BLOCK_WIELD update_weight_class(w_class_on) hitsound = 'sound/weapons/blade1.ogg' START_PROCESSING(SSobj, src) @@ -123,12 +122,11 @@ . = ..() /obj/item/dualsaber/attack(mob/target, mob/living/carbon/human/user) - if(user.has_dna()) - if(user.dna.check_mutation(/datum/mutation/human/hulk)) - to_chat(user, span_warning("You grip the blade too hard and accidentally drop it!")) - if(HAS_TRAIT(src, TRAIT_WIELDED)) - user.dropItemToGround(src, force=TRUE) - return + if(HAS_TRAIT(user, TRAIT_HULK)) + to_chat(user, span_warning("You grip the blade too hard and accidentally drop it!")) + if(HAS_TRAIT(src, TRAIT_WIELDED)) + user.dropItemToGround(src, force=TRUE) + return ..() if(!HAS_TRAIT(src, TRAIT_WIELDED)) return diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 537c7688d2dd4..c03470ff416b3 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -34,6 +34,7 @@ foodtypes = SEAFOOD eatverbs = list("bite", "chew", "gnaw", "swallow", "chomp") w_class = WEIGHT_CLASS_SMALL + starting_reagent_purity = 1.0 /obj/item/food/fishmeat/carp name = "carp fillet" @@ -88,6 +89,7 @@ name = "donkfillet" desc = "The dreaded donkfish fillet. No sane spaceman would eat this, and it does not get better when cooked." icon_state = "donkfillet" + starting_reagent_purity = 0.3 /obj/item/food/fishmeat/octopus name = "octopus tentacle" diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 371ecee6ff803..23fa5f2ad40c9 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -143,7 +143,7 @@ affix_desc = "on [target.p_their()] sensitive antennae" affix_desc_target = "on your highly sensitive antennae" brutal_noogie = TRUE - if(user.dna?.check_mutation(/datum/mutation/human/hulk)) + if(HAS_TRAIT(user, TRAIT_HULK)) prefix_desc = "sickeningly brutal" brutal_noogie = TRUE @@ -178,7 +178,7 @@ var/damage = rand(1, 5) if(HAS_TRAIT(target, TRAIT_ANTENNAE)) damage += rand(3,7) - if(user.dna?.check_mutation(/datum/mutation/human/hulk)) + if(HAS_TRAIT(user, TRAIT_HULK)) damage += rand(3,7) if(damage >= 5) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index d3e41b21a986b..eacd0b4b630d0 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -267,7 +267,7 @@ if(KIT_MR_FREEZE) new /obj/item/clothing/glasses/cold(src) - new /obj/item/clothing/gloves/color/black(src) + new /obj/item/clothing/gloves/color/black/security/blu(src) new /obj/item/clothing/mask/chameleon(src) new /obj/item/clothing/suit/hooded/wintercoat(src) new /obj/item/clothing/shoes/winterboots(src) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 5384a11cf3bbe..fbe11fe933d1b 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -162,7 +162,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/claymore/carrot name = "carrot sword" - desc = "A full-sized carrot sword. Definitely \not\ good for the eyes, not anymore." + desc = "A full-sized carrot sword. Definitely not good for the eyes, not anymore." icon_state = "carrot_sword" inhand_icon_state = "carrot_sword" worn_icon_state = "carrot_sword" diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 1783d4b236a63..e1581422d0570 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -264,15 +264,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool, 0) return /obj/structure/chair/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) - if(over_object == user) - if(!item_chair || has_buckled_mobs()) - return - user.visible_message(span_notice("[user] grabs \the [src.name]."), span_notice("You grab \the [src.name].")) - var/obj/item/C = new item_chair(loc) - C.set_custom_materials(custom_materials) - TransferComponents(C) - user.put_in_hands(C) - qdel(src) + if(!isliving(user) || over_object != user) + return + if(!item_chair || has_buckled_mobs()) + return + user.visible_message(span_notice("[user] grabs \the [src.name]."), span_notice("You grab \the [src.name].")) + var/obj/item/C = new item_chair(loc) + C.set_custom_materials(custom_materials) + TransferComponents(C) + user.put_in_hands(C) + qdel(src) /obj/structure/chair/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) return ..() @@ -282,6 +283,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool, 0) desc = "It has some unsavory stains on it..." icon_state = "bar" item_chair = /obj/item/chair/stool/bar + can_buckle = TRUE + +/obj/structure/chair/stool/bar/post_buckle_mob(mob/living/M) + M.pixel_y += 4 + +/obj/structure/chair/stool/bar/post_unbuckle_mob(mob/living/M) + M.pixel_y -= 4 MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index baf239284ac2f..7b64b6569d6cc 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -62,6 +62,7 @@ ) if(paint_jobs) paint_jobs = crate_paint_jobs + AddComponent(/datum/component/soapbox) /obj/structure/closet/crate/Destroy() QDEL_NULL(manifest) diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm index 3b6a550b18b0f..72bf91f1919f2 100644 --- a/code/modules/antagonists/changeling/powers/adrenaline.dm +++ b/code/modules/antagonists/changeling/powers/adrenaline.dm @@ -14,7 +14,7 @@ if(!.) return FALSE - if(HAS_TRAIT_FROM(user, TRAIT_IGNOREDAMAGESLOWDOWN, CHANGELING_TRAIT)) + if(HAS_TRAIT_FROM(user, TRAIT_PARALYSIS_L_ARM, CHANGELING_TRAIT) || HAS_TRAIT_FROM(user, TRAIT_PARALYSIS_R_ARM, CHANGELING_TRAIT)) user.balloon_alert(user, "already boosted!") return FALSE @@ -40,7 +40,8 @@ var/our_leg_zones = (GLOB.all_body_zones - GLOB.leg_zones) user.regenerate_limbs(excluded_zones = our_leg_zones) // why is this exclusive rather than inclusive - user.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + user.add_traits(list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + user.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) // Revert above mob changes. addtimer(CALLBACK(src, PROC_REF(unsting_action), user), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) @@ -57,4 +58,5 @@ /datum/action/changeling/adrenaline/proc/unsting_action(mob/living/user) to_chat(user, span_changeling("The muscles in our limbs shift back to their usual places.")) - user.remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + user.remove_traits(list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + user.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index 5e96119135f71..fe0d03ec18f50 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -220,7 +220,6 @@ /// A static list of traits we give to the heretic when on rust. var/static/list/conditional_immunities = list( TRAIT_BOMBIMMUNE, - TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_IGNORESLOWDOWN, TRAIT_NO_SLIP_ALL, TRAIT_NOBREATH, @@ -306,7 +305,7 @@ * * Gives our heretic ([source]) buffs if they stand on rust. */ -/datum/heretic_knowledge/ultimate/rust_final/proc/on_move(mob/source, atom/old_loc, dir, forced, list/old_locs) +/datum/heretic_knowledge/ultimate/rust_final/proc/on_move(mob/living/source, atom/old_loc, dir, forced, list/old_locs) SIGNAL_HANDLER // If we're on a rusty turf, and haven't given out our traits, buff our guy @@ -314,12 +313,14 @@ if(HAS_TRAIT(our_turf, TRAIT_RUSTY)) if(!immunities_active) source.add_traits(conditional_immunities, type) + source.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) immunities_active = TRUE // If we're not on a rust turf, and we have given out our traits, nerf our guy else if(immunities_active) source.remove_traits(conditional_immunities, type) + source.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) immunities_active = FALSE /** diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index 35a6ab9268784..c72e6bfdef113 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -53,11 +53,11 @@ alert_type = /atom/movable/screen/alert/status_effect/marshal /datum/status_effect/marshal/on_apply() - ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) + owner.add_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) return TRUE /datum/status_effect/marshal/on_remove() - REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) + owner.remove_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) /datum/status_effect/marshal/tick(seconds_between_ticks) if(!iscarbon(owner)) diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index a80ccec73bf37..57e6ec444196e 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -1044,14 +1044,14 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) owner.speech_span = say_span to_chat(usr, span_notice("Voice set to [selection].")) if("verb") - say_verb = params["verb"] + say_verb = strip_html(params["verb"], MAX_NAME_LEN) if(changing_voice) owner.verb_say = say_verb owner.verb_ask = say_verb owner.verb_exclaim = say_verb owner.verb_yell = say_verb if("name") - say_name = params["name"] + say_name = strip_html(params["name"], MAX_NAME_LEN) /datum/ai_module/utility/emag name = "Targeted Safeties Override" diff --git a/code/modules/antagonists/nightmare/nightmare_equipment.dm b/code/modules/antagonists/nightmare/nightmare_equipment.dm index ec07639cb449c..6fbe6c6097bec 100644 --- a/code/modules/antagonists/nightmare/nightmare_equipment.dm +++ b/code/modules/antagonists/nightmare/nightmare_equipment.dm @@ -52,10 +52,9 @@ if(!has_crit) return playsound(target, 'sound/effects/wounds/crackandbleed.ogg', 100, TRUE) - var/datum/dna/target_dna = target.has_dna() if(target.stat == DEAD) user.visible_message(span_warning("[user] gores [target] with [src]!"), span_warning("You gore [target] with [src], which doesn't accomplish much, but it does make you feel a little better.")) - else if(!target_dna?.check_mutation(/datum/mutation/human/hulk) && (iscarbon(target) || issilicon(target))) + else if(!HAS_TRAIT(target, TRAIT_HULK) && (iscarbon(target) || issilicon(target))) user.visible_message(span_boldwarning("[user] gores [target] with [src], bringing them to a halt!"), span_userdanger("You gore [target] with [src], bringing them to a halt!")) target.Paralyze(issilicon(target) ? 2 SECONDS : 1 SECONDS) else diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index bb0e12809955e..82b1eb8f37954 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,7 +9,6 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE cut_type = /obj/item/clothing/gloves/fingerless - clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/color/black/Initialize(mapload) . = ..() @@ -20,6 +19,15 @@ slapcraft_recipes = slapcraft_recipe_list,\ ) +/obj/item/clothing/gloves/color/black/security + name = "security gloves" + desc = "These security gloves come with microchips that help the user quickly restrain suspects." + icon_state = "sec" + clothing_traits = list(TRAIT_FAST_CUFFING) + +/obj/item/clothing/gloves/color/black/security/blu + icon_state = "sec_blu" + /obj/item/clothing/gloves/fingerless name = "fingerless gloves" desc = "Plain black gloves without fingertips for the hard-working." diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 4adb374d92bd7..bbe7f5dba18b4 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -59,9 +59,8 @@ /obj/item/clothing/gloves/tackler/combat name = "gorilla gloves" desc = "Premium quality combative gloves, heavily reinforced to give the user an edge in close combat tackles, though they are more taxing to use than normal gripper gloves. Fireproof to boot!" - icon_state = "black" - inhand_icon_state = "greyscale_gloves" - greyscale_colors = "#2f2e31" + icon_state = "gorilla" + inhand_icon_state = null tackle_stam_cost = 30 base_knockdown = 1.25 SECONDS @@ -77,6 +76,7 @@ /obj/item/clothing/gloves/tackler/combat/insulated name = "guerrilla gloves" desc = "Superior quality combative gloves, good for performing tackle takedowns as well as absorbing electrical shocks." + icon_state = "guerrilla" siemens_coefficient = 0 armor_type = /datum/armor/combat_insulated @@ -101,7 +101,7 @@ desc = "Ratty looking fingerless gloves wrapped with sticky tape. Beware anyone wearing these, for they clearly have no shame and nothing to lose." icon_state = "fingerless" inhand_icon_state = null - + clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) tackle_stam_cost = 30 base_knockdown = 1.75 SECONDS min_distance = 2 diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index ef75de8db8672..446782d00cbf4 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -1469,6 +1469,20 @@ /datum/reagent/water = 5, ) +//Fresh Jellyfish fillet soup! +/datum/chemical_reaction/food/soup/jellyfish_stew_two + required_reagents = list(/datum/reagent/water = 50) + required_ingredients = list( + /obj/item/food/fishmeat/gunner_jellyfish = 1, + /obj/item/food/grown/soybeans = 1, + /obj/item/food/grown/redbeet = 1, + /obj/item/food/grown/potato = 1 + ) + results = list( + /datum/reagent/consumable/nutriment/soup/jellyfish = 50, + ) + + // Rootbread Soup /datum/reagent/consumable/nutriment/soup/rootbread name = "Rootbread Soup" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm index 100e74fd91682..71716a1ee7c2a 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm @@ -480,6 +480,10 @@ reaction = /datum/chemical_reaction/food/soup/jellyfish_stew category = CAT_LIZARD +/datum/crafting_recipe/food/reaction/soup/jellyfish_stew_two + reaction = /datum/chemical_reaction/food/soup/jellyfish_stew_two + category = CAT_LIZARD + /datum/crafting_recipe/food/reaction/soup/rootbread_soup reaction = /datum/chemical_reaction/food/soup/rootbread_soup category = CAT_LIZARD diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index fb82737711404..974b19889ecba 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -44,12 +44,22 @@ /obj/item/food/grown/koibeans seed = /obj/item/seeds/soya/koi name = "koibean" - desc = "Something about these seems fishy." + desc = "Something about these seems fishy, they seem really soft, almost squeezable!" icon_state = "koibeans" foodtypes = VEGETABLES tastes = list("koi" = 1) wine_power = 40 +//Now squeezable for imitation carpmeat +/obj/item/food/grown/koibeans/attack_self(mob/living/user) + user.visible_message(span_notice("[user] crushes [src] into a slab of carplike meat."), span_notice("You crush [src] into something that resembles a slab of carplike meat.")) + playsound(user, 'sound/effects/blobattack.ogg', 50, TRUE) + var/obj/item/food/fishmeat/carp/imitation/fishie = new(null) + fishie.reagents.set_all_reagents_purity(seed.get_reagent_purity()) + qdel(src) + user.put_in_hands(fishie) + return TRUE + //Butterbeans, the beans wid da butta! // Butterbeans! - Squeeze for a single butter slice! /obj/item/seeds/soya/butter diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 999117dc1be15..f3627c3c2a257 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -59,7 +59,7 @@ belt = /obj/item/modular_computer/pda/heads/hos ears = /obj/item/radio/headset/heads/hos/alt glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security head = /obj/item/clothing/head/hats/hos/beret shoes = /obj/item/clothing/shoes/jackboots/sec l_pocket = /obj/item/restraints/handcuffs diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 4fb52ec77a026..9b2dc91137cd5 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -218,7 +218,7 @@ GLOBAL_LIST_EMPTY(security_officer_distribution) ) belt = /obj/item/modular_computer/pda/security ears = /obj/item/radio/headset/headset_sec/alt - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security head = /obj/item/clothing/head/helmet/sec shoes = /obj/item/clothing/shoes/jackboots/sec l_pocket = /obj/item/restraints/handcuffs diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm index 0768505b66553..032ad08af5a60 100644 --- a/code/modules/jobs/job_types/station_trait/human_ai.dm +++ b/code/modules/jobs/job_types/station_trait/human_ai.dm @@ -98,9 +98,7 @@ /obj/item/door_remote/omni = 1, /obj/item/machine_remote = 1, /obj/item/secure_camera_console_pod = 1, - ) - implants = list( - /obj/item/implant/teleport_blocker, + /obj/item/sensor_device = 1, ) uniform = /obj/item/clothing/under/rank/station_trait/human_ai @@ -108,9 +106,6 @@ ears = /obj/item/radio/headset/silicon/human_ai glasses = /obj/item/clothing/glasses/hud/diagnostic - suit = /obj/item/clothing/suit/costume/cardborg - head = /obj/item/clothing/head/costume/cardborg - l_pocket = /obj/item/laser_pointer/infinite_range //to punish borgs, this works through the camera console. r_pocket = /obj/item/assembly/flash/handheld diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 643611201c8c1..c1d2c032901f7 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -56,7 +56,7 @@ belt = /obj/item/modular_computer/pda/warden ears = /obj/item/radio/headset/headset_sec/alt glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security head = /obj/item/clothing/head/hats/warden/red shoes = /obj/item/clothing/shoes/jackboots/sec l_pocket = /obj/item/restraints/handcuffs diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm index 16925dd5138e7..004db281c75c3 100644 --- a/code/modules/library/bookcase.dm +++ b/code/modules/library/bookcase.dm @@ -94,63 +94,81 @@ I.forceMove(Tsec) update_appearance() -/obj/structure/bookcase/attackby(obj/item/I, mob/user, params) - switch(state) - if(BOOKCASE_UNANCHORED) - if(I.tool_behaviour == TOOL_WRENCH) - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, span_notice("You wrench the frame into place.")) - set_anchored(TRUE) - else if(I.tool_behaviour == TOOL_CROWBAR) - if(I.use_tool(src, user, 20, volume=50)) - to_chat(user, span_notice("You pry the frame apart.")) - deconstruct(TRUE) +/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, params) + if(state == BOOKCASE_UNANCHORED) + if(attacking_item.tool_behaviour == TOOL_WRENCH) + if(attacking_item.use_tool(src, user, 20, volume=50)) + balloon_alert(user, "wrenched in place") + set_anchored(TRUE) + return + + if(attacking_item.tool_behaviour == TOOL_CROWBAR) + if(attacking_item.use_tool(src, user, 20, volume=50)) + balloon_alert(user, "pried apart") + deconstruct(TRUE) + return + return ..() - if(BOOKCASE_ANCHORED) - if(istype(I, /obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/sheet/mineral/wood/W = I - if(W.get_amount() >= 2) - W.use(2) - to_chat(user, span_notice("You add a shelf.")) - state = BOOKCASE_FINISHED - update_appearance() - else if(I.tool_behaviour == TOOL_WRENCH) - I.play_tool_sound(src, 100) - to_chat(user, span_notice("You unwrench the frame.")) - set_anchored(FALSE) + if(state == BOOKCASE_ANCHORED) + if(istype(attacking_item, /obj/item/stack/sheet/mineral/wood)) + var/obj/item/stack/sheet/mineral/wood/W = attacking_item + if(W.get_amount() < 2) + balloon_alert(user, "not enough wood") + return + W.use(2) + balloon_alert(user, "shelf added") + state = BOOKCASE_FINISHED + update_appearance() + return + + if(attacking_item.tool_behaviour == TOOL_WRENCH) + attacking_item.play_tool_sound(src, 100) + balloon_alert(user, "unwrenched the frame") + set_anchored(FALSE) + return + return ..() - if(BOOKCASE_FINISHED) - if(isbook(I)) - if(!user.transferItemToLoc(I, src)) - return - update_appearance() - else if(atom_storage) - for(var/obj/item/T in I.contents) - if(istype(T, /obj/item/book) || istype(T, /obj/item/spellbook)) - atom_storage.attempt_remove(T, src) - to_chat(user, span_notice("You empty \the [I] into \the [src].")) - update_appearance() - else if(IS_WRITING_UTENSIL(I)) - if(!user.can_perform_action(src) || !user.can_write(I)) - return - var/newname = tgui_input_text(user, "What would you like to title this bookshelf?", "Bookshelf Renaming", max_length = MAX_NAME_LEN) - if(!user.can_perform_action(src) || !user.can_write(I)) - return - if(!newname) - return - else - name = "bookcase ([sanitize(newname)])" - else if(I.tool_behaviour == TOOL_CROWBAR) - if(length(contents)) - to_chat(user, span_warning("You need to remove the books first!")) - else - I.play_tool_sound(src, 100) - to_chat(user, span_notice("You pry the shelf out.")) - new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) - state = BOOKCASE_ANCHORED - update_appearance() - else - return ..() + if(isbook(attacking_item)) + if(!user.transferItemToLoc(attacking_item, src)) + return ..() + update_appearance() + return + + if(atom_storage) + var/found_anything = FALSE + for(var/obj/item/T in attacking_item.contents) + if(istype(T, /obj/item/book) || istype(T, /obj/item/spellbook)) + atom_storage.attempt_remove(T, src) + found_anything = TRUE + + if (found_anything) + balloon_alert(user, "emptied into [src]") + update_appearance() + return + + if(IS_WRITING_UTENSIL(attacking_item)) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) + return ..() + var/newname = tgui_input_text(user, "What would you like to title this bookshelf?", "Bookshelf Renaming", max_length = MAX_NAME_LEN) + if(!user.can_perform_action(src) || !user.can_write(attacking_item)) + return ..() + if(!newname) + return + name = "bookcase ([sanitize(newname)])" + return + + if(attacking_item.tool_behaviour == TOOL_CROWBAR) + if(length(contents)) + balloon_alert(user, "remove the books first") + return + attacking_item.play_tool_sound(src, 100) + balloon_alert(user, "pried the shelf out") + new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) + state = BOOKCASE_ANCHORED + update_appearance() + return + + return ..() /obj/structure/bookcase/attack_hand(mob/living/user, list/modifiers) . = ..() diff --git a/code/modules/mafia/outfits.dm b/code/modules/mafia/outfits.dm index 3b805bd92f9c0..0fdc90c2f3213 100644 --- a/code/modules/mafia/outfits.dm +++ b/code/modules/mafia/outfits.dm @@ -89,7 +89,7 @@ name = "Mafia Security Officer" uniform = /obj/item/clothing/under/rank/security/officer - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security head = /obj/item/clothing/head/helmet/sec suit = /obj/item/clothing/suit/armor/vest/alt shoes = /obj/item/clothing/shoes/jackboots @@ -116,7 +116,7 @@ uniform = /obj/item/clothing/under/rank/security/head_of_security shoes = /obj/item/clothing/shoes/jackboots suit = /obj/item/clothing/suit/armor/hos/trenchcoat - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security head = /obj/item/clothing/head/hats/hos/beret glasses = /obj/item/clothing/glasses/hud/security/sunglasses @@ -126,7 +126,7 @@ uniform = /obj/item/clothing/under/rank/security/warden shoes = /obj/item/clothing/shoes/jackboots suit = /obj/item/clothing/suit/armor/vest/warden/alt - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/security head = /obj/item/clothing/head/hats/warden/red glasses = /obj/item/clothing/glasses/hud/security/sunglasses diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c1a81b9d33847..070189a1ff399 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -506,6 +506,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp . = ..() //restart our floating animation after orbit is done. pixel_y = base_pixel_y + // if we were autoobserving, reset perspective + if (!isnull(client) && !isnull(client.eye)) + reset_perspective(null) /mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index 86fe0b5cf5704..aad840aa18548 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -113,7 +113,7 @@ GLOBAL_LIST_INIT(command_strings, list( RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement)) RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked)) RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) - ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) + add_traits(list(TRAIT_NO_GLIDE, TRAIT_SILICON_EMOTES_ALLOWED), INNATE_TRAIT) GLOB.bots_list += src // Give bots a fancy new ID card that can hold any access. diff --git a/code/modules/mob/living/basic/pets/orbie/orbie.dm b/code/modules/mob/living/basic/pets/orbie/orbie.dm index 735f63977d362..c0c6dd7b023fc 100644 --- a/code/modules/mob/living/basic/pets/orbie/orbie.dm +++ b/code/modules/mob/living/basic/pets/orbie/orbie.dm @@ -50,6 +50,7 @@ var/static/list/food_types = list(/obj/item/food/virtual_chocolate) AddComponent(/datum/component/obeys_commands, pet_commands) AddElement(/datum/element/basic_eating, food_types = food_types) + ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT) RegisterSignal(src, COMSIG_ATOM_CAN_BE_PULLED, PROC_REF(on_pulled)) RegisterSignal(src, COMSIG_VIRTUAL_PET_LEVEL_UP, PROC_REF(on_level_up)) RegisterSignal(src, COMSIG_MOB_CLICKON, PROC_REF(on_click)) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 1bacc08a8b6ff..17f5be02a91cf 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -16,6 +16,7 @@ forceMove(OB) if(!container?.mecha && (!container || container.immobilize)) //Unless inside a mecha, brains are rather helpless. add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED) + ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT) /mob/living/brain/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) var/obj/item/organ/internal/brain/brain_loc = loc diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 612801695fd2c..9816012218225 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -516,7 +516,7 @@ #undef CPR_PANIC_SPEED /mob/living/carbon/human/cuff_resist(obj/item/I) - if(dna?.check_mutation(/datum/mutation/human/hulk)) + if(HAS_TRAIT(src, TRAIT_HULK)) say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") if(..(I, cuff_break = FAST_CUFFBREAK)) dropItemToGround(I) @@ -980,10 +980,6 @@ /mob/living/carbon/human/updatehealth() . = ..() - if(HAS_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN)) - remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown) - remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying) - return var/health_deficiency = max((maxHealth - health), staminaloss) if(health_deficiency >= 40) add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown, TRUE, multiplicative_slowdown = health_deficiency / 75) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 9ccc26eec6cc2..ae79d87627243 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -715,15 +715,6 @@ /datum/emote/living/custom/replace_pronoun(mob/user, message) return message -/datum/emote/living/beep - key = "beep" - key_third_person = "beeps" - message = "beeps." - message_param = "beeps at %t." - sound = 'sound/machines/twobeep.ogg' - mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/basic/orbie) - emote_type = EMOTE_AUDIBLE - /datum/emote/living/inhale key = "inhale" key_third_person = "inhales" diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index fb7857d458541..2215864782325 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,5 +1,5 @@ /datum/emote/silicon - mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/simple_animal/bot, /mob/living/basic/bot) + trait_required = TRAIT_SILICON_EMOTES_ALLOWED emote_type = EMOTE_AUDIBLE /datum/emote/silicon/boop @@ -7,6 +7,14 @@ key_third_person = "boops" message = "boops." +/datum/emote/silicon/beep + key = "beep" + key_third_person = "beeps" + message = "beeps." + message_param = "beeps at %t." + emote_type = EMOTE_AUDIBLE + sound = 'sound/machines/twobeep.ogg' + /datum/emote/silicon/buzz key = "buzz" key_third_person = "buzzes" @@ -15,7 +23,6 @@ emote_type = EMOTE_AUDIBLE sound = 'sound/machines/buzz-sigh.ogg' - /datum/emote/silicon/buzz2 key = "buzz2" message = "buzzes twice." diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0c26e7c57e278..4813d97d12d38 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -11,7 +11,7 @@ post_tipped_callback = CALLBACK(src, PROC_REF(after_tip_over)), \ post_untipped_callback = CALLBACK(src, PROC_REF(after_righted)), \ roleplay_friendly = TRUE, \ - roleplay_emotes = list(/datum/emote/silicon/buzz, /datum/emote/silicon/buzz2, /datum/emote/living/beep), \ + roleplay_emotes = list(/datum/emote/silicon/buzz, /datum/emote/silicon/buzz2, /datum/emote/silicon/beep), \ roleplay_callback = CALLBACK(src, PROC_REF(untip_roleplay))) set_wires(new /datum/wires/robot(src)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 9ca655740cd08..6916c01f4d394 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -80,6 +80,7 @@ ) add_traits(traits_to_apply, ROUNDSTART_TRAIT) + ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT) RegisterSignal(src, COMSIG_LIVING_ELECTROCUTE_ACT, PROC_REF(on_silicon_shocked)) /mob/living/silicon/Destroy() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 49b44122ac0e7..50b30b09aa88c 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -202,6 +202,7 @@ pa_system = new(src, automated_announcements = automated_announcements) pa_system.Grant(src) RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) + ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT) /mob/living/simple_animal/bot/Destroy() GLOB.bots_list -= src diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 0e2bffd0aa6a7..18c1ac6926763 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -499,6 +499,7 @@ mod.wearer.add_traits(user_traits, MOD_TRAIT) mod.wearer.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 1, -6) mod.wearer.AddElement(/datum/element/footstep, FOOTSTEP_OBJ_ROBOT, 1, -6, sound_vary = TRUE) + mod.wearer.add_movespeed_mod_immunities(MOD_TRAIT, /datum/movespeed_modifier/damage_slowdown) mod.wearer.add_movespeed_modifier(/datum/movespeed_modifier/sphere) RegisterSignal(mod.wearer, COMSIG_MOB_STATCHANGE, PROC_REF(on_statchange)) @@ -560,6 +561,7 @@ light_power = 1 light_color = COLOR_LIGHT_ORANGE embed_type = null + can_hit_turfs = TRUE /obj/projectile/bullet/mining_bomb/Initialize(mapload) . = ..() diff --git a/code/modules/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index 7a0adba3cce6d..78a9148b013fe 100644 --- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm +++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm @@ -432,7 +432,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) /datum/emote/living/jump, /datum/emote/living/shiver, /datum/emote/spin, - /datum/emote/living/beep, + /datum/emote/silicon/beep, ) data["possible_emotes"] = list("none") for(var/datum/emote/target_emote as anything in possible_emotes) diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 329f77ab7186d..ca765ac0514a4 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -7,6 +7,12 @@ ///Cap for how fast cells charge, as a percentage per second (.01 means cellcharge is capped to 1% per second) #define CHARGELEVEL 0.01 +///Charge percentage at which the lights channel stops working +#define APC_CHANNEL_LIGHT_TRESHOLD 15 +///Charge percentage at which the equipment channel stops working +#define APC_CHANNEL_EQUIP_TRESHOLD 30 +///Charge percentage at which the APC icon indicates discharging +#define APC_CHANNEL_ALARM_TRESHOLD 75 /obj/machinery/power/apc name = "area power controller" @@ -49,6 +55,8 @@ var/operating = TRUE ///State of the apc charging (not charging, charging, fully charged) var/charging = APC_NOT_CHARGING + ///Previous state of charging, to detect the change + var/last_charging ///Can the APC charge? var/chargemode = TRUE ///Is the apc interface locked? @@ -67,6 +75,8 @@ var/lastused_environ = 0 ///Total amount of power used by the three channels var/lastused_total = 0 + ///Total amount of power put into the battery + var/lastused_charge = 0 ///State of the apc external power (no power, low power, has power) var/main_status = APC_NO_POWER powernet = FALSE // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( @@ -146,8 +156,7 @@ //APCs get added to their own processing tasks for the machines subsystem. if (!(datum_flags & DF_ISPROCESSING)) datum_flags |= DF_ISPROCESSING - SSmachines.apc_early_processing += src - SSmachines.apc_late_processing += src + SSmachines.processing_apcs += src //Pixel offset its appearance based on its direction dir = ndir @@ -516,11 +525,13 @@ disconnect_remote_access() /** - * APC early processing. This gets processed before any other machine does. + * APC early processing. This gets processed after any other machine on the powernet does. * This adds up the total static power usage for the apc's area, then draw that power usage from the grid or APC cell. - * This is done early so machines that use dynamic power get a more truthful surplus when accessing available energy. */ /obj/machinery/power/apc/proc/early_process() + if(isnull(area)) + return + var/total_static_energy_usage = 0 total_static_energy_usage += APC_CHANNEL_IS_ON(lighting) * area.energy_usage[AREA_USAGE_STATIC_LIGHT] total_static_energy_usage += APC_CHANNEL_IS_ON(equipment) * area.energy_usage[AREA_USAGE_STATIC_EQUIP] @@ -551,15 +562,12 @@ lastused_environ = APC_CHANNEL_IS_ON(environ) ? area.energy_usage[AREA_USAGE_ENVIRON] + area.energy_usage[AREA_USAGE_STATIC_ENVIRON] : 0 area.clear_usage() - lastused_total = lastused_light + lastused_equip + lastused_environ - + lastused_total = lastused_light + lastused_equip + lastused_environ + lastused_charge //store states to update icon if any change var/last_lt = lighting var/last_eq = equipment var/last_en = environ - var/last_ch = charging - var/excess = surplus() if(!avail()) @@ -579,7 +587,7 @@ if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights)) low_power_nightshift_lights = TRUE INVOKE_ASYNC(src, PROC_REF(set_nightshift), TRUE) - else if(cell.percent() < 15) // <15%, turn off lighting & equipment + else if(cell.percent() < APC_CHANNEL_LIGHT_TRESHOLD) // turn off lighting & equipment equipment = autoset(equipment, AUTOSET_OFF) lighting = autoset(lighting, AUTOSET_OFF) environ = autoset(environ, AUTOSET_ON) @@ -587,7 +595,7 @@ if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights)) low_power_nightshift_lights = TRUE INVOKE_ASYNC(src, PROC_REF(set_nightshift), TRUE) - else if(cell.percent() < 30) // <30%, turn off equipment + else if(cell.percent() < APC_CHANNEL_EQUIP_TRESHOLD) // turn off equipment equipment = autoset(equipment, AUTOSET_OFF) lighting = autoset(lighting, AUTOSET_ON) environ = autoset(environ, AUTOSET_ON) @@ -603,21 +611,9 @@ low_power_nightshift_lights = FALSE if(!SSnightshift.nightshift_active) INVOKE_ASYNC(src, PROC_REF(set_nightshift), FALSE) - if(cell.percent() > 75) + if(cell.percent() > APC_CHANNEL_ALARM_TRESHOLD) alarm_manager.clear_alarm(ALARM_POWER) - charging = APC_NOT_CHARGING - // now trickle-charge the cell - if(chargemode && operating && excess && cell.used_charge()) - // Max charge is capped to % per second constant. - lastused_total += charge_cell(min(cell.chargerate, cell.maxcharge * CHARGELEVEL) * seconds_per_tick, cell = cell, grid_only = TRUE, channel = AREA_USAGE_APC_CHARGE) - charging = APC_CHARGING - - // show cell as fully charged if so - if(cell.charge >= cell.maxcharge) - cell.charge = cell.maxcharge - charging = APC_FULLY_CHARGED - else // no cell, switch everything off charging = APC_NOT_CHARGING equipment = autoset(equipment, AUTOSET_FORCE_OFF) @@ -626,13 +622,47 @@ alarm_manager.send_alarm(ALARM_POWER) // update icon & area power if anything changed - if(last_lt != lighting || last_eq != equipment || last_en != environ || force_update) force_update = FALSE queue_icon_update() update() - else if(last_ch != charging) + if(charging != last_charging) queue_icon_update() + // show cell as fully charged if so + if(cell.charge >= cell.maxcharge) + cell.charge = cell.maxcharge + charging = APC_FULLY_CHARGED + +// charge until the battery is full or to the treshold of the provided channel +/obj/machinery/power/apc/proc/charge_channel(channel = null, seconds_per_tick) + if(channel == SSMACHINES_APCS_ENVIRONMENT) + lastused_charge = 0 + last_charging = charging + charging = APC_NOT_CHARGING + + if(!cell || shorted || !operating || !chargemode || !surplus() || !cell.used_charge()) + return + + // no overcharge past the next treshold + var/need_charge_for_channel + switch(channel) + if(SSMACHINES_APCS_ENVIRONMENT) + need_charge_for_channel = (cell.maxcharge * 0.05) - cell.charge + if(SSMACHINES_APCS_LIGHTS) + need_charge_for_channel = (cell.maxcharge * (APC_CHANNEL_LIGHT_TRESHOLD + 5) * 0.01) - cell.charge + if(SSMACHINES_APCS_EQUIPMENT) + need_charge_for_channel = (cell.maxcharge * (APC_CHANNEL_EQUIP_TRESHOLD + 5) * 0.01) - cell.charge + else + need_charge_for_channel = cell.used_charge() + + var/remaining_charge_rate = min(cell.chargerate, cell.maxcharge * CHARGELEVEL) - lastused_charge + var/need_charge = min(need_charge_for_channel, remaining_charge_rate) * seconds_per_tick + //check if we can charge the battery + if(need_charge < 0) + return + + lastused_charge += charge_cell(need_charge, cell = cell, grid_only = TRUE, channel = AREA_USAGE_APC_CHARGE) + charging = APC_CHARGING /obj/machinery/power/apc/proc/reset(wire) switch(wire) @@ -752,3 +782,6 @@ return null #undef CHARGELEVEL +#undef APC_CHANNEL_LIGHT_TRESHOLD +#undef APC_CHANNEL_EQUIP_TRESHOLD +#undef APC_CHANNEL_ALARM_TRESHOLD diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index ab023d38b55ef..b6a960e05ad98 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -84,6 +84,9 @@ else to_chat(user, span_notice("There are no modifications currently installed.")) +/obj/item/gun/energy/recharge/kinetic_accelerator/try_fire_gun(atom/target, mob/living/user, params) + return fire_gun(target, user, user.Adjacent(target) && !isturf(target), params) + /obj/item/gun/energy/recharge/kinetic_accelerator/attack_hand_secondary(mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) @@ -192,6 +195,7 @@ var/pressure_decrease = 0.25 var/obj/item/gun/energy/recharge/kinetic_accelerator/kinetic_gun + /obj/projectile/kinetic/Destroy() kinetic_gun = null return ..() diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 961d32c96ee8b..d06a36056d1c0 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -169,6 +169,9 @@ else . = ..(amount=1) +/obj/item/gun/energy/plasmacutter/try_fire_gun(atom/target, mob/living/user, params) + return fire_gun(target, user, user.Adjacent(target) && !isturf(target), params) + #undef PLASMA_CUTTER_CHARGE_WELD /obj/item/gun/energy/plasmacutter/adv diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index 66ea4d2c86593..b393dc3415fe5 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/C = target C.add_mood_event("tased", /datum/mood_event/tased) SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) - if(C.dna && C.dna.check_mutation(/datum/mutation/human/hulk)) + if(HAS_TRAIT(C, TRAIT_HULK)) C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") else if(!C.check_stun_immunity(CANKNOCKDOWN)) addtimer(CALLBACK(C, TYPE_PROC_REF(/mob/living/carbon, do_jitter_animation), 20), 0.5 SECONDS) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index a4fa10cb88c63..3b0272240b0df 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -204,7 +204,11 @@ if(weapon.w_class + total_weight > maximum_weight) to_chat(user, span_warning("[weapon] is too big to fit into [src].")) continue - weapon.forceMove(src) + + //try to remove the right way + if(!user.transferItemToLoc(weapon, src)) + continue + total_weight += weapon.w_class items_transfered += 1 to_chat(user, span_notice("[weapon] was loaded into [src].")) @@ -212,8 +216,8 @@ return items_transfered /obj/machinery/reagentgrinder/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - if(user.combat_mode || (tool.item_flags & ABSTRACT) || (tool.flags_1 & HOLOGRAM_1) || !can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH)) - return NONE + if(user.combat_mode || (tool.item_flags & ABSTRACT) || (tool.flags_1 & HOLOGRAM_1)) + return ITEM_INTERACT_SKIP_TO_ATTACK //add the beaker if (is_reagent_container(tool) && tool.is_open_container()) diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index 324b2c538b840..5632688cb476b 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -423,8 +423,7 @@ return NONE if(!isliving(target)) return NONE - var/datum/dna/dna = source.has_dna() - if(dna?.check_mutation(/datum/mutation/human/hulk)) //NO HULK + if(HAS_TRAIT(source, TRAIT_HULK)) //NO HULK return NONE if(!source.can_unarmed_attack()) return COMPONENT_SKIP_ATTACK diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm index a50912416ef87..f36c6cfe838b8 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm @@ -120,6 +120,7 @@ . = ..() UnregisterSignal(implant_owner, signalCache) UnregisterSignal(implant_owner, COMSIG_LIVING_ENTER_STAMCRIT) + remove_stun_buffs(implant_owner) /obj/item/organ/internal/cyberimp/brain/anti_stun/on_mob_insert(mob/living/carbon/receiver) . = ..() @@ -151,10 +152,8 @@ sparks.set_up(5, 1, src) sparks.start() - owner.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_BATON_RESISTANCE, TRAIT_STUNIMMUNE), REF(src)) - addtimer(TRAIT_CALLBACK_REMOVE(owner, TRAIT_IGNOREDAMAGESLOWDOWN, REF(src)), stun_resistance_time) - addtimer(TRAIT_CALLBACK_REMOVE(owner, TRAIT_BATON_RESISTANCE, REF(src)), stun_resistance_time) - addtimer(TRAIT_CALLBACK_REMOVE(owner, TRAIT_STUNIMMUNE, REF(src)), stun_resistance_time) + give_stun_buffs(owner) + addtimer(CALLBACK(src, PROC_REF(remove_stun_buffs), owner), stun_resistance_time) COOLDOWN_START(src, implant_cooldown, 60 SECONDS) addtimer(CALLBACK(src, PROC_REF(implant_ready)),60 SECONDS) @@ -163,6 +162,14 @@ if(owner) to_chat(owner, span_purple("Your rebooter implant is ready.")) +/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/give_stun_buffs(mob/living/give_to = owner) + give_to.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_BATON_RESISTANCE), REF(src)) + give_to.add_movespeed_mod_immunities(REF(src), /datum/movespeed_modifier/damage_slowdown) + +/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/remove_stun_buffs(mob/living/remove_from = owner) + remove_from.remove_traits(list(TRAIT_STUNIMMUNE, TRAIT_BATON_RESISTANCE), REF(src)) + remove_from.remove_movespeed_mod_immunities(REF(src), /datum/movespeed_modifier/damage_slowdown) + /obj/item/organ/internal/cyberimp/brain/anti_stun/emp_act(severity) . = ..() if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 7904c4bea91cc..fa034acf22bd7 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -546,6 +546,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) attack_verb_simple = list("beep", "boop") modifies_speech = TRUE taste_sensitivity = 25 // not as good as an organic tongue + organ_traits = list(TRAIT_SILICON_EMOTES_ALLOWED) voice_filter = "alimiter=0.9,acompressor=threshold=0.2:ratio=20:attack=10:release=50:makeup=2,highpass=f=1000" /obj/item/organ/internal/tongue/robot/could_speak_language(datum/language/language_path) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 8a869071c7c48..911887cc8b900 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -139,6 +139,7 @@ #include "dummy_spawn.dm" #include "dynamic_ruleset_sanity.dm" #include "egg_glands.dm" +#include "embedding.dm" #include "emoting.dm" #include "ensure_subtree_operational_datum.dm" #include "explosion_action.dm" diff --git a/code/modules/unit_tests/embedding.dm b/code/modules/unit_tests/embedding.dm new file mode 100644 index 0000000000000..05e8cc8b8aa27 --- /dev/null +++ b/code/modules/unit_tests/embedding.dm @@ -0,0 +1,14 @@ +/datum/unit_test/embedding + +/datum/unit_test/embedding/Run() + var/mob/living/carbon/human/victim = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/firer = allocate(/mob/living/carbon/human/consistent) + var/obj/projectile/bullet/c38/bullet = new(get_turf(firer)) + bullet.set_embed(bullet.get_embed().generate_with_values(embed_chance = 100)) + TEST_ASSERT_EQUAL(bullet.get_embed().embed_chance, 100, "embed_chance failed to modify") + bullet.preparePixelProjectile(victim, firer) + bullet.fire(get_angle(firer, victim), victim) + var/list/components = victim.GetComponents(/datum/component/embedded) + TEST_ASSERT_EQUAL(components.len, 1, "Projectile with 100% embed chance didn't embed, or embedded multiple times") + var/datum/component/embedded/comp = components[1] + TEST_ASSERT_EQUAL(comp.weapon.get_embed().embed_chance, 100, "embed_chance modification did not transfer to shrapnel") diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index ebecb03e1302c..32ef86a302b26 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -26,6 +26,7 @@ /obj/item/storage/belt/security/webbing = 5, /obj/item/coin/antagtoken = 1, /obj/item/clothing/head/helmet/blueshirt = 1, + /obj/item/clothing/gloves/color/black/security/blu = 1, /obj/item/clothing/suit/armor/vest/blueshirt = 1, /obj/item/grenade/stingbang = 1, /obj/item/watertank/pepperspray = 2, diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 3f82a219e56c9..ef2eff9d991ec 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -50,10 +50,11 @@ GLOBAL_VAR_INIT(roaches_deployed, FALSE) /obj/item/clothing/under/rank/security/officer/grey = 3, /obj/item/clothing/under/pants/slacks = 3, /obj/item/clothing/under/rank/security/officer/blueshirt = 3, + /obj/item/clothing/gloves/color/black/security/blu = 3, /obj/item/clothing/suit/armor/vest/secjacket = 3, /obj/item/clothing/suit/hooded/wintercoat/security = 3, /obj/item/clothing/suit/armor/vest = 3, - /obj/item/clothing/gloves/color/black = 3, + /obj/item/clothing/gloves/color/black/security = 3, /obj/item/clothing/shoes/jackboots/sec = 3, /obj/item/storage/backpack/security = 3, /obj/item/storage/backpack/satchel/sec = 3, diff --git a/html/changelogs/AutoChangeLog-pr-83262.yml b/html/changelogs/AutoChangeLog-pr-83262.yml deleted file mode 100644 index 0635b7956c837..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83262.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Xackii" -delete-after: True -changes: - - rscadd: "new wizard spells category - perks." - - rscadd: "adds 9 wizard perks." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84646.yml b/html/changelogs/AutoChangeLog-pr-84646.yml deleted file mode 100644 index d0054cb8f14b3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84646.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - rscadd: "Examining high-value paintings now can give a positive moodlet." - - qol: "Observers can now zoom paintings in and out in the UI." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84731.yml b/html/changelogs/AutoChangeLog-pr-84731.yml deleted file mode 100644 index 2d3b87db1f818..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84731.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - qol: "Research nodes can be queued, one per player. RDs can place their node at the beginning of the queue." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84779.yml b/html/changelogs/AutoChangeLog-pr-84779.yml deleted file mode 100644 index ca8c222b88b4d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84779.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - balance: "tweaked the Linked Closets station trait." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84790.yml b/html/changelogs/AutoChangeLog-pr-84790.yml deleted file mode 100644 index fd4e76d0d67d8..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84790.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "ACTUALLY fixed hoverboards being able to be used in space." - - balance: "However, you can soar space with the holy skateboard. at a slower speed." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84827.yml b/html/changelogs/AutoChangeLog-pr-84827.yml deleted file mode 100644 index 2fd1418dda2d1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84827.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "paganiy" -delete-after: True -changes: - - rscadd: "If you can't shoot a gun, then... JUST TOSS IT AT THEM (for 0.5 seconds of knockdown and 10-20 an additional brute damage)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84840.yml b/html/changelogs/AutoChangeLog-pr-84840.yml deleted file mode 100644 index a0db9885bb229..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84840.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - rscadd: "Love is now stored in the heart." - - balance: "Characters with the Friendly quirk now have physically bigger hearts." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84843.yml b/html/changelogs/AutoChangeLog-pr-84843.yml deleted file mode 100644 index 6235c182c1a1b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84843.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - rscadd: "Megaphones now affect text-to-speech." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84860.yml b/html/changelogs/AutoChangeLog-pr-84860.yml deleted file mode 100644 index 9081bdbc3226b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84860.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Sadboysuss" -delete-after: True -changes: - - sound: "all materials now have a sound for picking up and dropping" - - code_imp: "items now have pitch vary sound support for dropping and picking up items" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84861.yml b/html/changelogs/AutoChangeLog-pr-84861.yml deleted file mode 100644 index e9203c51f338d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84861.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Hardly3D" -delete-after: True -changes: - - bugfix: "Added a preview assistant outfit, allowing assistant jumpskirts to be previewed again on character preferences." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84865.yml b/html/changelogs/AutoChangeLog-pr-84865.yml deleted file mode 100644 index 4686b3104da41..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84865.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - qol: "removed a redundant, annoying reach check that prevents casting a fishing rod before the projectile is generated." - - qol: "You can now unhook the currently hooked item of a fishing rod with right-click." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84881.yml b/html/changelogs/AutoChangeLog-pr-84881.yml deleted file mode 100644 index 1ec13a1734f8a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84881.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Sadboysuss" -delete-after: True -changes: - - bugfix: "Wawastation xenobio is no longer filled with BZ" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84891.yml b/html/changelogs/AutoChangeLog-pr-84891.yml deleted file mode 100644 index d3a4abccc1837..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84891.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixes overwatch glasses not adding HUDs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84895.yml b/html/changelogs/AutoChangeLog-pr-84895.yml deleted file mode 100644 index 079ace6685d4e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84895.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - balance: "reduced the prices of some blackmarket items across the board." - - balance: "the thermite bottle (from the contraband spawner and the blackmarket), now spawns with 50u of thermite vs 30, enough to melt one reinforced wall." - - rscadd: "Replaced the science googles from the blackmarket with a security + health scanner HUD." - - rscadd: "Replaced the single shotgun dart from the blackmarket with a box of XL shotgun darts." - - rscadd: "The donk pocket box from the blackmarket now comes in different flavors." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84905.yml b/html/changelogs/AutoChangeLog-pr-84905.yml deleted file mode 100644 index aa77c54a6ec47..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84905.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "itseasytosee" -delete-after: True -changes: - - image: "Changed some default options in the character creator." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84917.yml b/html/changelogs/AutoChangeLog-pr-84917.yml deleted file mode 100644 index 0bfb0cadab199..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84917.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - qol: "Lattices now make the same footstep sound as catwalks" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84918.yml b/html/changelogs/AutoChangeLog-pr-84918.yml deleted file mode 100644 index c3882e601572b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84918.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MrDas" -delete-after: True -changes: - - bugfix: "Clown operative reinforcements' uplink no longer break the syndicates' economy by creating TC from nothingness." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84921.yml b/html/changelogs/AutoChangeLog-pr-84921.yml deleted file mode 100644 index 873f3660780c7..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84921.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - bugfix: "mothroaches will no longer be crawling out of bags every minute" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84924.yml b/html/changelogs/AutoChangeLog-pr-84924.yml deleted file mode 100644 index 55e9c85e8cbf2..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84924.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheBoondock" -delete-after: True -changes: - - sound: "added pickup, dropping and opening sound for pill bottle" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84925.yml b/html/changelogs/AutoChangeLog-pr-84925.yml deleted file mode 100644 index 5e47956edec24..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84925.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "GPeckman" -delete-after: True -changes: - - bugfix: "You can't attach guns/drills/etc. to the Justice traitor mech anymore." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84927.yml b/html/changelogs/AutoChangeLog-pr-84927.yml deleted file mode 100644 index 697c145aaab01..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84927.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - qol: "Pathfinder MODule can now be triggered while wearing the MODsuit to implant yourself without having to pull it out of the suit." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84930.yml b/html/changelogs/AutoChangeLog-pr-84930.yml deleted file mode 100644 index f20fe9a2998df..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84930.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - admin: "Outfit manager UI no longer harddels after closing and thus is usable more than once" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84933.yml b/html/changelogs/AutoChangeLog-pr-84933.yml deleted file mode 100644 index ea174ad4a6375..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84933.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "r3dj4ck0424" -delete-after: True -changes: - - bugfix: "Destroying the jungle grass tiles in Tramstation's science wing should no longer open a chasm." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84936.yml b/html/changelogs/AutoChangeLog-pr-84936.yml deleted file mode 100644 index 72ff6982d3c67..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84936.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lizardqueenlexi" -delete-after: True -changes: - - bugfix: "You can no longer cause a bluescreen by attempting to recolor non-recolorable loadout items." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84940.yml b/html/changelogs/AutoChangeLog-pr-84940.yml deleted file mode 100644 index 30ed28bce2a25..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84940.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - admin: "Ghosts can no longer create deathmatch lobbies or join existing ones when admins disable minigames" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84941.yml b/html/changelogs/AutoChangeLog-pr-84941.yml deleted file mode 100644 index 3120b917ad7e3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84941.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Accelerator cannon projectiles no longer grow to absurd sizes after a bit of travel." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84942.yml b/html/changelogs/AutoChangeLog-pr-84942.yml new file mode 100644 index 0000000000000..0feec6261f532 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84942.yml @@ -0,0 +1,4 @@ +author: "imedial" +delete-after: True +changes: + - rscadd: "standing on a closed crate now gives loud mode" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84943.yml b/html/changelogs/AutoChangeLog-pr-84943.yml deleted file mode 100644 index 7c7df08159daa..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84943.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "larentoun" -delete-after: True -changes: - - bugfix: "Correct emote plays when a human scream. Should have sound now." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84945.yml b/html/changelogs/AutoChangeLog-pr-84945.yml deleted file mode 100644 index b878f33ebec15..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84945.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FlufflesTheDog" -delete-after: True -changes: - - bugfix: "Attachment points on toolset implants have been improved, to prevent against recycler related decouplings." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84946.yml b/html/changelogs/AutoChangeLog-pr-84946.yml deleted file mode 100644 index b20f28982b2a9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84946.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - qol: "If you're in oxycrit (>50 oxy damage) or otherwise made unconscious through other means, blood loss will only kill you if you're *actually* missing a lethal amount of blood." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84947.yml b/html/changelogs/AutoChangeLog-pr-84947.yml deleted file mode 100644 index 6c2d183cfb5e9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84947.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - spellcheck: "Firelocks no longer output their full name in their balloon alert." - - spellcheck: "Failure message when a xenomorph tries to force open a welded firelock is now a balloon alert." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84949.yml b/html/changelogs/AutoChangeLog-pr-84949.yml deleted file mode 100644 index 3bca324862bee..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84949.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - balance: "Grinding fish no longer gives you uselessly high amount of blood and gibs (unless they're very big)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84952.yml b/html/changelogs/AutoChangeLog-pr-84952.yml deleted file mode 100644 index 23e21d669ee35..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84952.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FearfulFurnishing" -delete-after: True -changes: - - bugfix: "fixing speech modifiers being applied to a tongue's native languages." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84956.yml b/html/changelogs/AutoChangeLog-pr-84956.yml deleted file mode 100644 index b5cb51610cafa..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84956.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "You can no longer fit an infinite amount of drivers into a clown car - making spy-acquired clown cars usable!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84957.yml b/html/changelogs/AutoChangeLog-pr-84957.yml deleted file mode 100644 index 00bab247c1aba..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84957.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "lizardqueenlexi" -delete-after: True -changes: - - bugfix: "The Icebox ordnance lab is now once again a habitable temperature." - - bugfix: "Icebox cytology now has cameras in it." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84958.yml b/html/changelogs/AutoChangeLog-pr-84958.yml deleted file mode 100644 index e29af268d4d42..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84958.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lizardqueenlexi" -delete-after: True -changes: - - bugfix: "Atmosphere can no longer flow through closed necropolis gates." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84959.yml b/html/changelogs/AutoChangeLog-pr-84959.yml deleted file mode 100644 index 97ce8febaaa9e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84959.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Profakos" -delete-after: True -changes: - - bugfix: "Fixes dead raptors getting excited when petted or groomed" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84960.yml b/html/changelogs/AutoChangeLog-pr-84960.yml deleted file mode 100644 index e2c2ce470aee7..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84960.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "necromanceranne" -delete-after: True -changes: - - rscadd: "Pipe pistols now magdump their entire magazine when fired." - - rscadd: "Pipeguns and their subtypes have a knockback effect." - - bugfix: "Pipe pistols cannot be bayoneted, as intended." - - bugfix: "Junk rounds now actually do their extra damage effects against certain mob types. Borgs across the Spinward tremble at the knowledge that these junk weapons can obliterate them with ease." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84962.yml b/html/changelogs/AutoChangeLog-pr-84962.yml new file mode 100644 index 0000000000000..0bdc3cca7923e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84962.yml @@ -0,0 +1,7 @@ +author: "Pickle-Coding" +delete-after: True +changes: + - bugfix: "Fixes space heater cell relative consumption inadvertently being changed from the introduction of megacells." + - qol: "The improvised chemical heater gives a more accurate description of its heating power on examine." + - qol: "Improved feedback when attempting to turn on a space heater that is lacking a cell, has no charge or is broken." + - code_imp: "Space heater relative cell consumption is consistent regardless of the cell charge scale." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84978.yml b/html/changelogs/AutoChangeLog-pr-84978.yml new file mode 100644 index 0000000000000..e49418a569618 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84978.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - rscadd: "You can now buckle to bar stools" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84983.yml b/html/changelogs/AutoChangeLog-pr-84983.yml new file mode 100644 index 0000000000000..aff73f61b86bf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84983.yml @@ -0,0 +1,5 @@ +author: "MTandi" +delete-after: True +changes: + - bugfix: "Fixed emitters, shield gens and other wired machinery having lower power consumption priority than APCs" + - qol: "Made APCs charge more evenly to ensure that environment and lights are working everywhere before giving the power for equipment" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84986.yml b/html/changelogs/AutoChangeLog-pr-84986.yml new file mode 100644 index 0000000000000..91e9981c3bc8b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84986.yml @@ -0,0 +1,4 @@ +author: "Sadboysuss" +delete-after: True +changes: + - bugfix: "added a missing cable to Wawastation perma" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84987.yml b/html/changelogs/AutoChangeLog-pr-84987.yml new file mode 100644 index 0000000000000..941b6d80d9ba5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84987.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - qol: "Stopping orbiting now automatically breaks you out of autoobserve" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84989.yml b/html/changelogs/AutoChangeLog-pr-84989.yml new file mode 100644 index 0000000000000..89e1e0e4a744e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84989.yml @@ -0,0 +1,4 @@ +author: "grungususs" +delete-after: True +changes: + - spellcheck: "fixed a typo for carrot sword description" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84991.yml b/html/changelogs/AutoChangeLog-pr-84991.yml new file mode 100644 index 0000000000000..cc34488a039f6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84991.yml @@ -0,0 +1,4 @@ +author: "afonamos2" +delete-after: True +changes: + - bugfix: "malf ai voice changer no longer accepts dangerous inputs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84995.yml b/html/changelogs/AutoChangeLog-pr-84995.yml new file mode 100644 index 0000000000000..83a9ec235465b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84995.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Xenos have a \"resist\" ui element now. Cool!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84996.yml b/html/changelogs/AutoChangeLog-pr-84996.yml new file mode 100644 index 0000000000000..654d0b1da31c7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84996.yml @@ -0,0 +1,4 @@ +author: "xXPawnStarrXx" +delete-after: True +changes: + - qol: "made fish better quality when butchered, smushy koibeans and useable gunner jellyfish." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85000.yml b/html/changelogs/AutoChangeLog-pr-85000.yml new file mode 100644 index 0000000000000..9cda6ec758a07 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85000.yml @@ -0,0 +1,4 @@ +author: "Yobrocharlie" +delete-after: True +changes: + - bugfix: "Removed bitrunning beach brawl fax machine" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85005.yml b/html/changelogs/AutoChangeLog-pr-85005.yml new file mode 100644 index 0000000000000..e554b62ccdbb0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85005.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Fixes hulks being able to activate dualsabers despite not being able to actually do anything with them" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85006.yml b/html/changelogs/AutoChangeLog-pr-85006.yml new file mode 100644 index 0000000000000..83c9c3ec18857 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85006.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - qol: "You can properly aim mining bombs at turfs now" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85009.yml b/html/changelogs/AutoChangeLog-pr-85009.yml new file mode 100644 index 0000000000000..ad8ce9011b4f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85009.yml @@ -0,0 +1,4 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "borgs can't put their integrated tools into the reagent grinder" \ No newline at end of file diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml index f1020236ab78b..bfaf0581737c7 100644 --- a/html/changelogs/archive/2024-07.yml +++ b/html/changelogs/archive/2024-07.yml @@ -798,3 +798,127 @@ 2024-07-15: Thedragmeme: - bugfix: Fixes the Plague hat having what the Plague mask should have +2024-07-16: + 00-Steven: + - rscadd: Love is now stored in the heart. + - balance: Characters with the Friendly quirk now have physically bigger hearts. + Ben10Omintrix: + - bugfix: mothroaches will no longer be crawling out of bags every minute + FearfulFurnishing: + - bugfix: fixing speech modifiers being applied to a tongue's native languages. + FlufflesTheDog: + - bugfix: Attachment points on toolset implants have been improved, to prevent against + recycler related decouplings. + GPeckman: + - bugfix: You can't attach guns/drills/etc. to the Justice traitor mech anymore. + Ghommie: + - balance: Grinding fish no longer gives you uselessly high amount of blood and + gibs (unless they're very big) + - balance: tweaked the Linked Closets station trait. + - rscadd: Megaphones now affect text-to-speech. + - rscadd: Examining high-value paintings now can give a positive moodlet. + - qol: Observers can now zoom paintings in and out in the UI. + - bugfix: ACTUALLY fixed hoverboards being able to be used in space. + - balance: However, you can soar space with the holy skateboard. at a slower speed. + - qol: removed a redundant, annoying reach check that prevents casting a fishing + rod before the projectile is generated. + - qol: You can now unhook the currently hooked item of a fishing rod with right-click. + - balance: reduced the prices of some blackmarket items across the board. + - balance: the thermite bottle (from the contraband spawner and the blackmarket), + now spawns with 50u of thermite vs 30, enough to melt one reinforced wall. + - rscadd: Replaced the science googles from the blackmarket with a security + health + scanner HUD. + - rscadd: Replaced the single shotgun dart from the blackmarket with a box of XL + shotgun darts. + - rscadd: The donk pocket box from the blackmarket now comes in different flavors. + Hardly3D: + - bugfix: Added a preview assistant outfit, allowing assistant jumpskirts to be + previewed again on character preferences. + MTandi: + - qol: Research nodes can be queued, one per player. RDs can place their node at + the beginning of the queue. + Melbert: + - qol: Lattices now make the same footstep sound as catwalks + - qol: If you're in oxycrit (>50 oxy damage) or otherwise made unconscious through + other means, blood loss will only kill you if you're *actually* missing a lethal + amount of blood. + MrDas: + - bugfix: Clown operative reinforcements' uplink no longer break the syndicates' + economy by creating TC from nothingness. + Profakos: + - bugfix: Fixes dead raptors getting excited when petted or groomed + Sadboysuss: + - sound: all materials now have a sound for picking up and dropping + - code_imp: items now have pitch vary sound support for dropping and picking up + items + - bugfix: Wawastation xenobio is no longer filled with BZ + SmArtKar: + - admin: Ghosts can no longer create deathmatch lobbies or join existing ones when + admins disable minigames + - admin: Outfit manager UI no longer harddels after closing and thus is usable more + than once + - qol: Pathfinder MODule can now be triggered while wearing the MODsuit to implant + yourself without having to pull it out of the suit. + - spellcheck: Firelocks no longer output their full name in their balloon alert. + - spellcheck: Failure message when a xenomorph tries to force open a welded firelock + is now a balloon alert. + - bugfix: You can no longer fit an infinite amount of drivers into a clown car - + making spy-acquired clown cars usable! + - bugfix: Accelerator cannon projectiles no longer grow to absurd sizes after a + bit of travel. + - bugfix: Fixes overwatch glasses not adding HUDs + TheBoondock: + - sound: added pickup, dropping and opening sound for pill bottle + Xackii: + - rscadd: new wizard spells category - perks. + - rscadd: adds 9 wizard perks. + itseasytosee: + - image: Changed some default options in the character creator. + larentoun: + - bugfix: Correct emote plays when a human scream. Should have sound now. + lizardqueenlexi: + - bugfix: The Icebox ordnance lab is now once again a habitable temperature. + - bugfix: Icebox cytology now has cameras in it. + - bugfix: Atmosphere can no longer flow through closed necropolis gates. + - bugfix: You can no longer cause a bluescreen by attempting to recolor non-recolorable + loadout items. + necromanceranne: + - rscadd: Pipe pistols now magdump their entire magazine when fired. + - rscadd: Pipeguns and their subtypes have a knockback effect. + - bugfix: Pipe pistols cannot be bayoneted, as intended. + - bugfix: Junk rounds now actually do their extra damage effects against certain + mob types. Borgs across the Spinward tremble at the knowledge that these junk + weapons can obliterate them with ease. + paganiy: + - rscadd: If you can't shoot a gun, then... JUST TOSS IT AT THEM (for 0.5 seconds + of knockdown and 10-20 an additional brute damage) + r3dj4ck0424: + - bugfix: Destroying the jungle grass tiles in Tramstation's science wing should + no longer open a chasm. +2024-07-17: + 00-Steven: + - rscadd: Having a robotic voicebox installed now lets you use silicon emotes. + - balance: MMI'd brains/posibrains can now use silicon emotes. + - balance: Simple and basic bots can actually beep. + - bugfix: MMI'd brains/posibrains are no longer both allowed AND blocked from beeping, + now just being allowed to beep. + JohnFulpWillard: + - balance: Human AIs no longer have a teleport blocking implant or borg costume, + but now has a portable crew monitor. + Melbert: + - bugfix: Using hulk (and a myriad of similar effects) now properly updates your + movespeed to ignore the damage movespeed penalty + - bugfix: Some things which temporarily make you fly don't make you fly forever + - bugfix: MODsuit ball module now properly makes you immune to damage movespeed + penalty when in ball form + - bugfix: Adding Hulk via VV dropdown doesn't default to adding the strongest hulk + available (that which is used by the medieval pirates) + SmArtKar: + - bugfix: Ghosts can no longer move chairs + - bugfix: You can attack bookshelves in a variety of states once more + - bugfix: Style meter text is no longer blurry and doesnt overlap with UI anymore. + - qol: You can fire PKAs/plasma cutters point blank at turfs. + Thedragmeme: + - qol: re-maps the raptor barn to not stick out like a sore thumb + - bugfix: Miners and the public both can access the raptor barn without having to + make a bridge themselves diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index ded01542e31b6..b62b6a0a8ee58 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 465340870dd48..4739498c16426 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 36c85642ad23c..1ee06ed48550d 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -133,6 +133,7 @@ h1.alert, h2.alert {color: #000000;} .robot {font-family: "Courier New", cursive, sans-serif;} .command_headset {font-weight: bold; font-size: 3;} +.soapbox {font-weight: bold; font-size: 3;} .small {font-size: 1;} .big {font-size: 3;} .reallybig {font-size: 4;} diff --git a/tgstation.dme b/tgstation.dme index e0fb60d58cf9b..f340a6efd2c93 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1207,6 +1207,7 @@ #include "code\datums\components\slime_friends.dm" #include "code\datums\components\slippery.dm" #include "code\datums\components\smooth_tunes.dm" +#include "code\datums\components\soapbox.dm" #include "code\datums\components\soul_stealer.dm" #include "code\datums\components\soulstoned.dm" #include "code\datums\components\sound_player.dm" diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 22a725e71da73..8f3fddc9469ff 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -747,6 +747,11 @@ em { font-size: 160%; } +.soapbox { + font-weight: bold; + font-size: 135%; +} + .small { font-size: 60%; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 7e8908545ed2f..e15e8aa3a5ac2 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -774,6 +774,11 @@ h2.alert { font-size: 160%; } +.soapbox { + font-weight: bold; + font-size: 135%; +} + .small { font-size: 60%; }