diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm deleted file mode 100644 index 2890b4954b3..00000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm +++ /dev/null @@ -1,10009 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/indestructible, -/area/ruin/powered) -"c" = ( -/turf/open/floor/engine/cult, -/area/ruin/powered) -"d" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"e" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage5" - }, -/area/ruin/powered) -"f" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"g" = ( -/turf/open/floor/circuit/off, -/area/ruin/powered) -"h" = ( -/turf/closed/indestructible{ - desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick."; - icon = 'icons/turf/walls/cult_wall.dmi'; - icon_state = "cult" - }, -/area/ruin/powered) -"i" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage3" - }, -/area/ruin/powered) -"j" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage6" - }, -/area/ruin/powered) -"k" = ( -/obj/effect/gateway, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"l" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/circuit/off, -/area/ruin/powered) -"m" = ( -/obj/machinery/wish_granter_dark, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"n" = ( -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"o" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"p" = ( -/obj/structure/signpost, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"q" = ( -/obj/effect/meatgrinder, -/turf/open/floor/circuit/green/off, -/area/ruin/powered) -"r" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/circuit/off, -/area/ruin/powered) -"s" = ( -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"t" = ( -/turf/open/floor/plating{ - icon_state = "cultdamage2" - }, -/area/ruin/powered) -"u" = ( -/turf/open/floor/carpet, -/area/ruin/powered) -"v" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/carpet, -/area/ruin/powered) -"w" = ( -/obj/machinery/door/airlock/vault{ - locked = 1 - }, -/turf/open/floor/engine/cult, -/area/ruin/powered) -"x" = ( -/obj/structure/destructible/cult/pylon, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"y" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"z" = ( -/turf/template_noop, -/turf/closed/indestructible{ - desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick."; - icon = 'icons/turf/walls/cult_wall.dmi'; - icon_state = "cult" - }, -/area/ruin/powered) -"A" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/template_noop, -/area/template_noop) -"B" = ( -/obj/effect/mob_spawn/human/miner/rig, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"C" = ( -/obj/machinery/door/airlock/vault{ - locked = 1 - }, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - }, -/obj/structure/fans/tiny/invisible, -/area/ruin/powered) -"D" = ( -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) -"E" = ( -/turf/closed/indestructible, -/area/template_noop) -"F" = ( -/obj/item/weapon/paper{ - info = "meat grinder requires sacri" - }, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) -"G" = ( -/obj/effect/mob_spawn/human/syndicatecommando, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) -"H" = ( -/mob/living/simple_animal/hostile/faithless, -/turf/open/floor/engine/cult{ - baseturf = /turf/open/floor/plating/lava/smooth; - initial_gas_mix = "o2=14;n2=23;TEMP=300" - }, -/area/template_noop) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -a -a -a -a -a -a -a -a -a -b -b -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -b -b -a -a -a -a -a -a -a -a -b -s -s -h -s -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -b -b -a -a -a -a -a -a -a -b -s -h -h -h -s -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -b -b -a -a -a -a -a -a -b -s -s -h -h -s -s -s -s -s -s -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -h -h -c -c -b -b -a -a -a -a -a -b -b -s -s -h -h -h -h -h -h -c -h -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -f -c -h -c -c -c -b -b -b -b -b -b -b -b -h -s -h -h -s -s -s -s -s -h -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -h -c -c -c -c -h -s -s -s -s -h -s -y -h -s -y -h -h -h -h -h -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -f -c -d -h -c -c -f -c -h -s -s -h -s -h -y -s -h -y -h -h -s -s -s -h -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -c -h -c -c -c -h -h -c -f -f -c -h -s -s -h -s -h -s -y -h -s -s -s -s -s -s -h -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -c -c -c -h -c -c -h -h -h -h -c -c -f -h -s -s -h -s -s -s -x -h -s -x -s -s -s -s -h -s -s -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -h -h -c -h -c -c -h -c -c -c -h -h -s -h -s -s -s -s -h -s -s -s -h -s -s -h -s -s -b -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -c -c -c -c -c -c -c -h -c -h -c -f -h -h -c -c -c -h -s -h -h -h -h -h -h -s -s -s -h -s -s -h -s -s -s -s -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -h -c -c -c -h -h -c -c -h -c -h -c -c -c -h -d -c -c -h -s -c -c -c -c -c -h -h -h -h -h -s -s -h -s -x -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -h -h -c -c -c -h -c -c -h -c -h -h -c -c -h -h -c -h -h -s -h -c -c -c -c -c -d -c -h -s -s -s -h -s -s -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -c -c -c -c -c -h -c -c -c -h -d -c -h -c -c -h -c -c -c -c -c -h -s -s -h -h -h -f -f -c -c -c -h -s -s -s -h -s -s -s -s -s -s -b -a -a -a -a -a -a -D -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -h -h -c -c -h -c -c -h -c -c -h -h -h -c -c -c -h -s -s -s -s -h -h -h -c -c -c -h -s -s -y -h -s -x -s -s -s -s -b -D -D -D -a -a -a -D -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -h -d -c -c -c -h -c -c -h -c -c -h -c -c -c -c -h -h -c -c -h -h -s -s -s -s -s -h -h -c -c -h -s -y -s -w -s -s -s -s -s -s -b -a -a -D -D -D -D -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -c -c -c -h -h -c -f -c -h -c -c -h -c -c -h -d -c -c -c -c -h -h -c -c -h -h -s -s -s -s -s -h -c -c -h -s -s -s -w -s -s -s -s -s -s -b -a -a -a -D -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -h -h -c -c -h -c -c -c -h -f -c -h -c -c -h -h -c -c -h -c -c -h -c -c -c -h -h -h -x -s -s -h -c -c -h -s -s -s -h -s -x -s -s -s -s -b -D -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -h -c -c -h -f -c -c -h -c -c -h -c -c -c -h -c -c -h -c -c -h -h -c -c -c -f -h -h -s -s -h -c -c -h -h -h -h -h -s -s -s -s -s -s -b -a -D -D -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -h -c -c -h -c -c -c -h -f -c -h -c -c -c -h -c -c -h -f -c -c -h -h -c -f -c -c -h -h -s -h -c -c -c -c -s -s -h -s -s -s -s -s -s -b -D -D -D -D -a -A -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -c -c -h -c -c -c -h -c -c -h -h -c -c -h -c -c -h -h -c -c -c -h -c -s -s -s -s -h -s -h -h -c -c -c -s -s -h -s -x -B -s -s -s -b -a -D -D -D -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -c -h -c -f -h -c -c -c -h -c -c -c -h -c -c -h -c -c -c -h -c -f -c -h -h -s -s -s -s -c -s -s -h -c -c -c -s -s -h -s -s -s -s -s -s -b -D -D -D -D -D -D -D -D -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -c -f -c -c -h -c -c -h -h -c -c -c -h -c -c -h -h -c -c -h -h -h -h -h -h -s -s -s -s -c -s -h -h -h -h -h -s -s -h -s -s -y -s -s -s -b -a -a -a -a -a -a -a -a -D -D -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -h -c -c -f -h -c -c -h -d -c -c -c -h -c -c -c -h -h -c -c -c -c -c -c -h -h -s -s -s -h -h -h -s -s -s -s -s -s -h -s -x -s -s -s -s -b -a -a -a -a -a -a -a -a -D -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -d -c -c -h -c -c -h -c -c -c -c -h -h -d -c -c -h -h -h -h -c -c -c -c -h -h -h -h -h -s -s -s -s -s -s -s -s -h -s -s -s -s -s -s -b -E -E -E -E -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -h -h -h -h -h -h -c -c -c -c -c -c -c -c -h -h -c -c -c -c -c -h -h -h -c -c -c -h -s -s -s -s -s -s -s -s -x -s -s -h -s -s -s -s -s -s -C -F -G -D -D -D -D -D -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -h -c -c -c -c -c -c -h -h -h -h -c -f -c -c -c -c -d -h -c -f -c -h -s -s -s -s -s -s -h -h -h -s -s -h -s -x -s -s -s -s -C -D -D -D -H -D -D -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -h -h -c -c -h -h -h -c -c -c -h -h -c -c -c -c -c -c -c -c -c -c -h -c -c -h -h -s -s -s -s -h -h -h -s -h -s -s -h -s -s -s -s -s -s -b -E -E -E -E -a -a -D -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -h -h -c -c -c -h -h -h -c -h -c -c -h -h -h -h -h -h -h -c -c -h -c -c -h -s -s -s -s -h -h -x -s -s -h -s -s -h -s -s -s -s -s -s -b -a -a -a -a -a -a -D -D -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -c -c -c -c -d -h -h -h -c -c -h -c -f -f -c -c -h -c -c -c -c -c -h -h -s -s -s -h -s -s -y -s -h -s -s -h -s -x -s -s -s -s -b -a -a -a -a -a -a -D -D -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -h -h -c -c -c -c -c -c -h -c -c -h -f -c -f -f -c -h -h -c -c -c -c -c -h -s -s -s -s -s -s -s -s -h -s -s -h -s -s -s -s -s -s -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -c -c -c -c -c -c -h -c -c -h -h -h -h -c -f -c -h -c -c -c -c -c -h -s -s -s -s -s -s -h -h -h -s -s -h -s -s -s -s -s -s -b -D -D -a -a -a -a -a -a -a -D -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -c -c -c -c -c -c -h -c -c -c -c -d -h -c -c -c -h -h -h -h -h -h -h -h -s -s -c -s -h -h -s -s -s -s -h -s -x -s -s -s -b -b -a -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -h -h -c -c -c -c -c -h -c -c -c -c -c -h -h -c -c -c -c -c -c -c -c -c -h -h -s -h -h -h -s -s -s -s -y -h -s -s -s -b -b -b -a -a -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -h -h -c -c -c -c -h -h -c -c -c -c -c -h -h -c -c -c -c -c -c -c -c -c -h -h -h -s -s -s -s -s -s -s -h -s -s -b -a -a -a -a -a -D -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -f -f -c -c -h -h -c -c -c -c -h -c -c -c -c -c -c -h -h -h -h -h -h -d -c -c -c -c -c -c -s -s -s -s -s -s -s -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(41,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -h -h -c -c -c -c -c -c -c -h -c -c -c -c -h -h -h -h -h -c -f -c -c -c -h -c -c -c -c -c -c -c -c -c -s -s -s -s -s -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(42,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -h -c -c -c -d -h -h -c -c -h -h -c -f -c -c -c -c -h -c -c -c -c -f -h -h -c -c -c -h -h -h -h -h -c -s -s -s -s -s -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(43,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -h -h -c -c -c -h -h -c -c -c -h -h -h -c -c -f -c -h -c -c -h -h -h -h -c -c -c -c -h -f -c -c -h -h -h -h -h -h -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(44,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -h -h -c -c -h -h -c -c -c -c -d -h -c -c -c -c -h -c -c -h -c -c -c -c -c -c -c -h -c -f -c -c -c -h -h -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(45,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -h -h -c -c -h -h -h -c -c -c -h -h -h -d -c -h -c -c -h -c -c -c -h -h -h -h -h -f -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(46,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -h -h -c -c -c -h -h -h -c -c -c -h -h -c -h -c -c -h -c -c -c -h -d -c -c -c -c -h -h -h -h -h -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(47,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -h -c -c -c -c -d -h -c -c -c -c -c -c -h -c -c -h -c -c -c -c -c -c -c -c -h -h -d -h -h -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(48,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -h -c -c -c -c -c -h -h -h -c -c -c -c -h -c -c -h -h -h -c -c -c -c -h -h -h -f -c -f -c -f -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(49,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -c -c -h -h -c -c -f -f -c -c -h -h -h -h -h -h -c -c -c -f -h -h -h -h -h -h -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(50,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -h -h -h -c -c -c -c -c -c -c -c -d -h -h -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -h -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(51,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -i -c -c -c -c -c -c -h -h -h -c -c -c -c -c -c -c -c -h -h -d -c -c -f -c -c -c -c -c -c -c -h -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(52,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -f -c -c -c -d -c -c -c -c -h -c -c -c -c -c -c -c -c -c -h -h -h -h -c -c -c -c -c -c -c -h -h -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(53,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -h -h -h -c -c -c -c -c -c -c -h -h -c -c -c -h -h -h -h -f -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(54,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -c -c -c -f -f -c -h -h -h -h -h -d -c -f -c -c -h -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(55,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -c -j -c -c -c -f -c -c -c -c -c -c -c -c -c -h -h -h -c -c -c -c -c -c -c -c -c -c -c -c -c -f -h -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(56,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -d -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -h -h -h -c -c -c -c -c -c -c -c -c -h -h -h -c -f -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(57,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -e -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -h -h -c -c -c -c -c -h -h -h -h -d -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(58,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -i -c -c -j -c -c -c -c -c -c -c -c -c -h -h -h -h -h -h -h -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(59,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -k -c -c -c -c -c -c -s -s -s -c -k -c -c -c -c -c -c -c -c -c -c -c -c -h -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(60,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -e -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -h -w -w -h -h -h -h -h -h -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(61,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -f -c -c -c -c -c -c -c -j -c -c -c -c -c -i -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(62,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -d -u -u -u -u -d -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(63,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -f -c -d -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -v -u -u -u -c -c -f -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(64,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -f -c -c -c -c -c -c -u -u -u -u -c -f -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(65,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -c -e -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -v -u -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(66,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -j -c -c -f -c -c -c -c -c -e -c -c -c -c -i -c -c -c -c -c -c -f -c -u -u -u -u -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(67,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -c -c -c -c -c -c -c -c -c -c -f -c -k -c -c -d -u -u -u -u -d -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(68,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(69,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -k -c -c -f -c -c -c -c -c -c -c -c -f -c -c -c -c -c -d -c -c -c -c -c -c -c -u -u -u -v -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(70,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -k -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(71,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -c -c -i -c -c -c -c -c -c -f -c -c -u -u -u -u -c -i -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(72,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -i -c -c -c -c -c -c -c -c -e -c -c -c -c -i -c -c -c -c -c -c -c -c -c -c -c -c -d -u -u -u -u -d -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(73,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(74,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -g -g -c -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -u -v -u -u -c -c -c -c -f -c -f -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(75,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -g -g -g -c -c -c -c -c -c -c -c -f -c -c -c -f -c -c -i -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(76,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -g -c -c -i -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(77,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -g -c -c -c -c -c -l -c -c -c -c -g -g -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -d -u -u -u -u -d -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(78,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -c -c -c -c -g -c -c -c -c -g -c -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -c -c -c -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(79,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -g -k -c -c -g -c -c -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -v -u -u -u -c -c -f -c -c -c -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(80,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -c -c -c -g -c -c -c -g -c -c -c -c -c -t -c -c -c -c -c -f -c -c -c -c -c -c -u -u -u -u -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(81,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -c -g -c -c -c -f -g -c -c -d -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -u -u -u -u -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(82,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -c -g -c -g -c -c -c -g -c -c -c -c -c -f -j -c -c -c -c -c -c -c -f -c -d -u -u -u -u -d -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(83,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -c -g -c -g -c -c -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(84,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -g -c -g -c -c -g -c -g -g -c -g -g -c -c -c -c -c -g -f -c -c -k -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(85,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -l -g -g -c -c -g -c -g -c -c -g -c -c -c -c -g -g -g -c -c -c -c -c -c -c -c -c -f -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(86,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -g -d -g -c -g -c -g -g -c -f -c -c -g -c -c -c -c -c -c -c -c -j -c -c -c -c -k -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(87,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -g -c -g -g -g -g -g -k -g -c -c -c -c -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(88,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -c -g -g -g -g -c -c -g -c -c -c -g -g -c -c -f -c -c -c -c -d -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(89,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -i -c -g -f -g -c -c -c -c -g -c -c -c -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(90,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -g -c -g -g -g -g -g -c -g -g -r -c -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(91,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -i -c -g -g -g -c -g -g -g -c -g -c -g -g -c -g -g -c -c -c -f -c -c -c -c -j -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(92,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -l -g -g -g -g -g -c -g -g -g -c -g -g -c -c -g -g -c -c -c -c -c -c -c -c -f -c -c -c -c -b -b -a -a -a -a -A -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(93,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -g -g -g -g -c -g -c -g -l -g -c -g -g -c -c -g -g -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(94,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -g -c -d -g -c -g -g -c -g -g -g -g -g -g -c -c -c -c -c -c -c -c -f -c -c -c -c -d -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(95,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -g -g -g -c -c -g -g -l -g -g -g -g -g -g -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(96,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -g -g -g -c -c -g -g -g -g -g -g -f -g -c -c -c -g -c -c -c -c -c -c -c -e -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(97,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -g -g -g -c -g -g -g -g -g -c -g -g -c -g -g -g -c -c -c -g -g -g -c -c -c -c -c -c -j -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(98,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -g -g -g -g -c -g -g -g -g -g -g -g -c -g -l -g -g -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(99,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -g -g -i -b -b -g -b -b -g -g -g -g -g -g -g -l -g -c -c -c -c -c -g -c -c -c -c -k -c -c -c -c -c -c -j -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(100,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -d -g -g -b -g -g -g -b -g -g -g -g -g -c -c -g -g -g -g -g -g -g -g -c -c -c -c -c -f -c -j -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(101,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -b -b -g -b -g -b -b -g -g -g -g -l -g -g -c -c -c -c -c -f -c -c -c -c -c -c -c -c -c -c -c -f -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(102,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -c -c -b -g -c -g -g -g -b -g -g -g -g -g -g -g -g -g -g -g -c -c -c -c -c -c -d -c -c -c -c -c -c -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(103,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -b -g -g -g -g -g -b -g -g -g -c -c -c -c -d -c -c -g -g -g -c -c -c -c -c -c -c -c -c -c -c -d -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(104,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -b -c -d -g -r -c -b -c -c -g -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -j -c -c -c -c -c -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(105,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -n -b -b -b -b -b -c -d -g -g -g -g -c -c -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(106,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -p -n -n -n -n -n -n -n -n -b -c -c -c -c -c -g -c -c -c -c -c -c -f -c -f -c -c -c -c -f -c -c -j -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(107,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -n -n -n -n -n -n -n -n -b -c -c -c -f -c -c -c -c -c -k -c -c -c -c -c -c -f -c -c -c -c -c -c -c -f -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(108,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -n -n -n -n -o -n -n -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -e -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(109,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -n -n -n -n -b -b -b -b -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(110,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -n -n -n -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -c -c -c -c -d -c -c -c -c -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(111,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -n -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -c -c -c -c -c -c -c -f -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(112,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -n -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -f -c -c -c -c -f -c -c -c -c -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(113,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -q -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -c -c -c -c -c -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(114,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -b -n -o -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -c -c -c -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(115,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -o -n -n -n -n -n -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(116,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -n -n -n -n -n -n -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(117,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -n -n -n -n -n -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -A -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(118,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -m -n -n -n -n -n -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(119,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -n -n -n -o -n -n -n -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(120,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 192657641fd..b4d65c7bd9b 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -2184,7 +2184,8 @@ /turf/open/floor/plating/airless, /area/awaymission/BMPship/Fore) "ge" = ( -/turf/closed/mineral/random, +/obj/machinery/door/airlock/silver, +/turf/open/floor/plating, /area/awaymission/BMPship/Midship) "gf" = ( /obj/machinery/light{ diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index dfd7bb4e1d3..cf2c5614634 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -1862,7 +1862,7 @@ c_tag = "AI Hallway"; dir = 5; icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + tag = "" }, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -3630,6 +3630,11 @@ network = list("SS13") }, /obj/item/device/radio/beacon, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -4278,6 +4283,11 @@ "aiv" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -4415,39 +4425,28 @@ }, /area/security/prison) "aiI" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/northright{ + name = "Armory Desk"; + req_access_txt = "3" + }, +/obj/machinery/door/window/brigdoor/southleft{ + name = "Armory Desk"; + req_one_access_txt = "38;2" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/prison) +/area/ai_monitored/security/armory) "aiJ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" +/obj/machinery/door/poddoor/shutters{ + id = "armoryaccess"; + name = "Armory Shutters" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/prison) +/area/ai_monitored/security/armory) "aiK" = ( /obj/machinery/door/airlock/glass_security{ name = "Armory"; @@ -4879,11 +4878,6 @@ }, /area/security/prison) "ajD" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -5145,9 +5139,7 @@ /obj/structure/disposaloutlet{ dir = 8 }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/quartermaster/sorting) "akd" = ( @@ -5308,7 +5300,6 @@ }, /area/security/prison) "akv" = ( -/obj/structure/closet/secure_closet/brig, /obj/machinery/light{ dir = 8 }, @@ -5457,7 +5448,7 @@ }) "akL" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/disposalpipe/segment{ @@ -5526,7 +5517,7 @@ }) "akP" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/disposalpipe/segment{ @@ -5603,10 +5594,6 @@ }, /area/quartermaster/sorting) "akW" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/machinery/mineral/stacking_unit_console{ dir = 2; machinedir = 8 @@ -6486,7 +6473,7 @@ dir = 9; icon_state = "camera"; network = list("SS13"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/item/weapon/bedsheet, /turf/open/floor/plasteel/floorgrime{ @@ -6688,7 +6675,7 @@ "amY" = ( /obj/machinery/power/apc{ dir = 2; - name = "AI Asteroid APC"; + name = "AI Asteroid Maintenance APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -7154,8 +7141,8 @@ /area/space) "anT" = ( /obj/structure/disposalpipe/junction{ - icon_state = "pipe-j2"; - dir = 8 + icon_state = "pipe-j1"; + dir = 1 }, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -9294,8 +9281,6 @@ }, /area/security/warden) "asa" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 1; @@ -9315,6 +9300,15 @@ id = "prisonbreak"; name = "emergency prisoner containment blast door" }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Secure Desk"; + req_access_txt = "3" + }, +/obj/machinery/door/window/eastleft{ + name = "Secure Desk"; + req_one_access_txt = "38;2" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -11804,7 +11798,16 @@ name = "Chief Medical Officer's Private Quarters" }) "awH" = ( -/obj/structure/closet/secure_closet/CMO, +/obj/structure/closet{ + icon_door = "blue"; + name = "Chief Medical Officer's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/cmo, +/obj/item/clothing/under/rank/chief_medical_officer, +/obj/item/clothing/suit/toggle/labcoat/cmo, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/weapon/storage/belt/medical, +/obj/item/weapon/storage/backpack/medic, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -11949,7 +11952,14 @@ name = "Chief Engineer's Private Quarters" }) "awX" = ( -/obj/structure/closet/secure_closet/engineering_chief, +/obj/structure/closet{ + icon_door = "yellow"; + name = "Chief Engineer's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/ce, +/obj/item/clothing/under/rank/chief_engineer, +/obj/item/weapon/storage/backpack/industrial, +/obj/item/clothing/gloves/color/black/ce, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -12310,7 +12320,7 @@ pixel_x = 0 }, /obj/structure/window/reinforced, -/obj/machinery/computer/robotics, +/obj/machinery/computer/cargo/request, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -12747,7 +12757,7 @@ dir = 9; icon_state = "camera"; network = list("SS13"); - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/item/weapon/bedsheet, /turf/open/floor/plasteel/floorgrime{ @@ -15142,7 +15152,16 @@ name = "Research Director's Private Quarters" }) "aCS" = ( -/obj/structure/closet/secure_closet/RD, +/obj/structure/closet{ + icon_door = "pink"; + name = "Research Director's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/rd, +/obj/item/clothing/under/rank/research_director, +/obj/item/clothing/under/rank/research_director/turtleneck, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/weapon/storage/backpack/science, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -16026,8 +16045,7 @@ c_tag = "Cargo Hall East"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -18321,7 +18339,14 @@ name = "Quartermaster's Private Quarters" }) "aId" = ( -/obj/structure/closet/secure_closet/quartermaster, +/obj/structure/closet{ + icon_door = "orange"; + name = "Quartermaster's Uniform" + }, +/obj/item/clothing/shoes/sneakers/brown/qm, +/obj/item/clothing/under/rank/cargo, +/obj/item/weapon/storage/backpack, +/obj/item/clothing/gloves/color/black, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -19699,8 +19724,7 @@ c_tag = "Cargo Security Checkpoint"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -20685,8 +20709,7 @@ c_tag = "Docking Quantum Pad"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /obj/machinery/airalarm{ dir = 8; @@ -21047,8 +21070,7 @@ /obj/machinery/camera{ c_tag = "Courtroom Jury East"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -21107,8 +21129,7 @@ /obj/machinery/camera{ c_tag = "Dorm Lockers"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -22443,7 +22464,7 @@ /area/hallway/primary/fore) "aPk" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -22583,7 +22604,7 @@ }) "aPv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable/orange{ @@ -22599,7 +22620,7 @@ }) "aPw" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -22637,8 +22658,7 @@ c_tag = "Cargo Lobby"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/brown/corner{ @@ -23581,8 +23601,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -24109,8 +24128,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -25234,7 +25252,7 @@ }, /obj/machinery/door/airlock/maintenance{ id_tag = "GulagCivExit3"; - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -25395,7 +25413,7 @@ pixel_y = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -25406,7 +25424,7 @@ "aTB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plasteel{ @@ -25562,8 +25580,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -25838,8 +25855,7 @@ /obj/machinery/camera{ c_tag = "Vault Airlock"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /obj/machinery/holopad, /turf/open/floor/plasteel/black, @@ -26353,8 +26369,7 @@ /obj/machinery/camera{ c_tag = "Command Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26415,8 +26430,7 @@ /obj/machinery/camera{ c_tag = "Cargo Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26773,8 +26787,7 @@ /obj/machinery/camera{ c_tag = "Custodials"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /obj/item/key/janitor, /turf/open/floor/plasteel{ @@ -26908,8 +26921,7 @@ /obj/machinery/camera{ c_tag = "Command Asteroid Hall 10"; dir = 8; - icon_state = "camera"; - tag = "icon-camera (WEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27006,8 +27018,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -27757,7 +27768,7 @@ /area/hallway/primary/fore) "aXx" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -27794,8 +27805,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27836,8 +27846,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/girder, /obj/structure/grille, @@ -27883,8 +27892,7 @@ /obj/machinery/camera{ c_tag = "Vault"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) @@ -28386,8 +28394,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -28403,8 +28410,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -29154,8 +29160,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -29528,8 +29533,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -30065,8 +30069,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -30186,8 +30189,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -30631,8 +30633,7 @@ /obj/machinery/camera{ c_tag = "Bar Backroom"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -31082,7 +31083,7 @@ /area/hallway/primary/central) "bdv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -31139,7 +31140,7 @@ /area/hallway/primary/central) "bdz" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -31177,8 +31178,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -31687,8 +31687,7 @@ c_tag = "Medbay Asteroid Hallway 6"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -31714,8 +31713,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -32040,7 +32038,7 @@ pixel_y = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -32270,7 +32268,7 @@ /area/hallway/primary/port) "bfv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ @@ -33021,8 +33019,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -33142,7 +33139,7 @@ /area/hallway/primary/starboard) "bgY" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -33838,8 +33835,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -34130,8 +34126,7 @@ /obj/machinery/camera{ c_tag = "Bar"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 @@ -34413,8 +34408,7 @@ /obj/machinery/camera{ c_tag = "EVA Storage"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (EAST)"; @@ -34453,8 +34447,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -34649,11 +34642,6 @@ /area/crew_quarters/bar) "bjs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/button/door{ - id = "kitchen"; - name = "Privacy Shutters"; - pixel_x = -24 - }, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -35177,8 +35165,7 @@ /obj/machinery/camera{ c_tag = "Service Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -36313,9 +36300,6 @@ }, /area/engine/supermatter) "bmt" = ( -/obj/machinery/power/emitter{ - state = 2 - }, /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1; @@ -36326,6 +36310,10 @@ d2 = 4; icon_state = "2-4" }, +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -36342,9 +36330,6 @@ }, /area/engine/supermatter) "bmv" = ( -/obj/machinery/power/emitter{ - state = 2 - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -36355,18 +36340,23 @@ icon_state = "4-8"; pixel_x = 0 }, +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) "bmw" = ( -/obj/machinery/power/emitter{ - state = 2 - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -36691,7 +36681,7 @@ pixel_x = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -36724,8 +36714,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -36857,7 +36846,7 @@ pixel_x = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -36944,8 +36933,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 4 @@ -37035,7 +37023,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -37073,8 +37061,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -37091,8 +37078,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ dir = 2; @@ -37180,8 +37166,7 @@ /obj/machinery/camera{ c_tag = "Surgery Observation"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -37357,17 +37342,17 @@ /area/crew_quarters/bar) "boe" = ( /obj/machinery/vending/cola, -/obj/structure/sign/poster/random{ - name = "random official poster"; - pixel_x = 32; - random_basetype = /obj/structure/sign/poster/official - }, /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28 }, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -37377,6 +37362,11 @@ /obj/machinery/light_switch{ pixel_x = -25 }, +/obj/machinery/button/door{ + id = "kitchen"; + name = "Privacy Shutters"; + pixel_x = -24 + }, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -37496,8 +37486,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -37606,8 +37595,7 @@ /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 2"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -37777,8 +37765,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -38182,8 +38169,7 @@ c_tag = "Virology Breakroom"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "icon-camera (NORTHEAST)" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -38258,8 +38244,7 @@ /obj/machinery/camera{ c_tag = "Primary Tool Storage North"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39514,8 +39499,7 @@ c_tag = "Medbay Asteroid Hallway 3"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39823,8 +39807,7 @@ c_tag = "Virology 2"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -39848,8 +39831,7 @@ c_tag = "Virology"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "icon-camera (NORTHEAST)" + network = list("SS13","CMO") }, /obj/machinery/requests_console{ department = "Virology"; @@ -41318,8 +41300,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -41590,8 +41571,7 @@ c_tag = "Virology Airlocks"; dir = 5; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "icon-camera (NORTHEAST)" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/whitegreen/side{ tag = "icon-whitegreen (WEST)"; @@ -41895,7 +41875,7 @@ /area/space) "bvx" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -42132,8 +42112,7 @@ c_tag = "SM East"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","CE") }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -43490,8 +43469,7 @@ "bxY" = ( /obj/machinery/atmospherics/components/unary/cryo_cell{ dir = 8; - icon_state = "cell-off"; - tag = "" + icon_state = "cell-off" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44020,8 +43998,7 @@ /obj/machinery/camera{ c_tag = "Medbay Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44135,8 +44112,7 @@ /obj/machinery/camera{ c_tag = "Medbay East"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /obj/structure/noticeboard{ dir = 8; @@ -44187,8 +44163,7 @@ /obj/machinery/camera{ c_tag = "Cyrotubes"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44548,8 +44523,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; @@ -44725,8 +44699,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plasteel/yellow/corner{ tag = "icon-yellowcorner (NORTH)"; @@ -44974,8 +44947,7 @@ /obj/machinery/camera{ c_tag = "Primary Tool Storage South"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -45029,6 +45001,11 @@ /area/hydroponics) "bAG" = ( /obj/machinery/vending/hydronutrients, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, /turf/open/floor/plasteel/green/side{ tag = "icon-green (NORTH)"; icon_state = "green"; @@ -45432,8 +45409,7 @@ c_tag = "Medbay West"; dir = 5; icon_state = "camera"; - network = list("SS13"); - tag = "" + network = list("SS13") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -45568,6 +45544,11 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/camera{ + c_tag = "Hydroponics East"; + dir = 9; + icon_state = "camera" + }, /turf/open/floor/plasteel/darkgreen/side{ tag = "icon-darkgreen (NORTHEAST)"; icon_state = "darkgreen"; @@ -45580,8 +45561,7 @@ /obj/machinery/camera{ c_tag = "Hydroponics Backroom"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /obj/structure/cable/orange{ d1 = 1; @@ -45625,7 +45605,7 @@ }) "bBO" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -46255,7 +46235,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/closed/wall{ +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) @@ -46493,8 +46475,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/engine{ @@ -46618,8 +46599,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -46762,8 +46742,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /turf/open/floor/plating/airless, @@ -47161,7 +47140,7 @@ c_tag = "Hydroponics East"; dir = 9; icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + tag = "" }, /obj/structure/sink{ dir = 4; @@ -47370,8 +47349,7 @@ /obj/structure/cable/yellow{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -47485,8 +47463,7 @@ /obj/machinery/camera{ c_tag = "Engineering Security Checkpoint"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -48154,8 +48131,7 @@ c_tag = "Medbay Asteroid Hallway 2"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -48635,6 +48611,7 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -49466,6 +49443,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; icon_state = "yellow"; @@ -50337,8 +50315,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ @@ -50406,8 +50383,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -50597,8 +50573,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -51191,8 +51166,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -51212,8 +51186,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -52019,6 +51992,7 @@ icon_state = "1-2"; pixel_y = 0 }, +/obj/item/clothing/gloves/color/yellow, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -52096,8 +52070,7 @@ c_tag = "Engineering East"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","CE") }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -52522,8 +52495,7 @@ c_tag = "Atmospherics North"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","CE") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -52718,16 +52690,20 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bNV" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bNW" = ( /obj/machinery/light/small{ dir = 1 @@ -52961,7 +52937,7 @@ }) "bOq" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/disposalpipe/segment{ @@ -53268,8 +53244,7 @@ c_tag = "Atmospherics Airlock"; dir = 5; icon_state = "camera"; - network = list("SS13","CE"); - tag = "icon-camera (NORTHEAST)" + network = list("SS13","CE") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53679,7 +53654,7 @@ /area/hallway/primary/starboard) "bPv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -53722,8 +53697,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53734,7 +53708,7 @@ /area/hallway/primary/starboard) "bPz" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -53744,8 +53718,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53753,7 +53726,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bPA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -53761,8 +53736,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53773,7 +53747,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bPB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53792,7 +53768,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bPD" = ( /obj/machinery/door/airlock/maintenance{ name = "External Maintenance Access"; @@ -53932,8 +53910,7 @@ c_tag = "Medbay Storage"; dir = 10; icon_state = "camera"; - network = list("SS13","CMO"); - tag = "icon-camera (SOUTHWEST)" + network = list("SS13","CMO") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54174,8 +54151,7 @@ /obj/machinery/camera{ c_tag = "Library East"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54318,7 +54294,7 @@ }, /obj/machinery/button/door{ id = "engineeringlockdown"; - name = "Engineering SMES Blast Door Control"; + name = "Engineering Emergency Lockdown Control"; pixel_x = -24; pixel_y = 8; req_access_txt = "10;11" @@ -54418,8 +54394,7 @@ /obj/structure/cable/yellow{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ @@ -54971,6 +54946,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (NORTH)"; icon_state = "yellow"; @@ -55223,14 +55203,18 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bRS" = ( /obj/structure/table, /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bRT" = ( /obj/structure/cable/orange{ d1 = 1; @@ -55674,6 +55658,7 @@ /obj/machinery/keycard_auth{ pixel_y = -28 }, +/obj/structure/closet/secure_closet/engineering_chief, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -55727,6 +55712,12 @@ /area/engine/engine_smes) "bSP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -56201,8 +56192,7 @@ c_tag = "Atmospheric Tanks 2"; dir = 5; icon_state = "camera"; - network = list("SS13","CE"); - tag = "icon-camera (NORTHEAST)" + network = list("SS13","CE") }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -56349,6 +56339,12 @@ /area/engine/engine_smes) "bTQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -56505,7 +56501,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bUe" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -56910,6 +56908,11 @@ /area/atmos) "bUR" = ( /obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; @@ -56925,6 +56928,11 @@ icon_state = "camera"; network = list("SS13","CE") }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -57029,8 +57037,7 @@ c_tag = "Medbay Asteroid Hallway 1"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57049,7 +57056,9 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/starboard) +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) "bVf" = ( /obj/structure/cable/orange{ d1 = 2; @@ -57393,6 +57402,12 @@ name = "Central Asteroid Maintenance"; req_access_txt = "10" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -57627,8 +57642,7 @@ /obj/machinery/camera{ c_tag = "Library Explicits"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57804,6 +57818,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -58073,8 +58093,7 @@ c_tag = "Atmospherics Distro"; dir = 9; icon_state = "camera"; - network = list("SS13","CE"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","CE") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -59354,8 +59373,7 @@ /obj/machinery/camera{ c_tag = "Chapel West"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (NORTH)"; @@ -59691,6 +59709,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -59876,8 +59899,7 @@ /obj/machinery/camera{ c_tag = "Chapel East"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61345,8 +61367,7 @@ /obj/machinery/camera{ c_tag = "Chapel Office"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61505,8 +61526,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61514,7 +61534,7 @@ /area/hallway/primary/port) "cdJ" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -61524,8 +61544,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ @@ -61539,8 +61558,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -61758,8 +61776,7 @@ /obj/machinery/camera{ c_tag = "Chapel Coffins"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62414,8 +62431,7 @@ /obj/machinery/camera{ c_tag = "Crematorium"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -62762,8 +62778,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -63044,8 +63059,7 @@ /obj/machinery/camera{ c_tag = "Docking Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -63244,8 +63258,7 @@ /obj/machinery/camera{ c_tag = "Service-Research Bridge"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /obj/structure/disposalpipe/segment, /turf/open/floor/engine{ @@ -63478,8 +63491,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -63490,8 +63502,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -63502,15 +63513,14 @@ /area/hallway/primary/starboard) "chv" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -63700,8 +63710,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -63716,8 +63725,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ icon_state = "0-2"; @@ -64201,8 +64209,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -64217,8 +64224,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -64291,8 +64297,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -65727,8 +65732,7 @@ /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 1"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -65886,8 +65890,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -65899,8 +65902,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime{ @@ -66357,8 +66359,7 @@ /obj/machinery/camera{ c_tag = "Research Atmospherics Checkpoint"; dir = 5; - icon_state = "camera"; - tag = "icon-camera (NORTHEAST)" + icon_state = "camera" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67174,7 +67175,7 @@ /area/hallway/primary/aft) "cob" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; + name = "External Airlock Access"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -67219,8 +67220,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/door/airlock/atmos{ name = "Research Atmospherics Checkpoint"; @@ -67326,8 +67326,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67341,8 +67340,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67538,8 +67536,7 @@ c_tag = "Docking Quantum Pad"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /obj/machinery/airalarm{ dir = 8; @@ -69044,8 +69041,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -69076,8 +69072,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -69094,8 +69089,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/sign/map/left/ceres{ pixel_y = 32 @@ -69115,8 +69109,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 2" @@ -69136,8 +69129,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -69161,8 +69153,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -69184,8 +69175,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -69202,8 +69192,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/light{ dir = 1 @@ -69223,8 +69212,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ @@ -69244,8 +69232,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ @@ -69263,8 +69250,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 3" @@ -69281,8 +69267,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -69301,8 +69286,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; @@ -71758,8 +71742,7 @@ c_tag = "Science SMES"; dir = 8; icon_state = "camera"; - network = list("SS13","QM"); - tag = "icon-camera (WEST)" + network = list("SS13","QM") }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -73311,8 +73294,7 @@ c_tag = "Toxins Mixing"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","RD") }, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -75080,8 +75062,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 13"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75150,8 +75131,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 9"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75888,8 +75868,7 @@ c_tag = "Research Xenobiology-Testing Airlock"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","RD") }, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -77743,7 +77722,7 @@ /obj/machinery/light_switch{ pixel_y = -23 }, -/obj/item/weapon/twohanded/required/kirbyplants/dead, +/obj/machinery/computer/robotics, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -77765,6 +77744,7 @@ dir = 10 }, /obj/machinery/light, +/obj/effect/landmark/xmastree/rdrod, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) "cFl" = ( @@ -78186,8 +78166,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 12"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78229,8 +78208,7 @@ /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 8"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78309,8 +78287,7 @@ c_tag = "Testing Lab"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","RD") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78590,8 +78567,7 @@ c_tag = "Research Testing Containment"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","RD") }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -81756,8 +81732,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -85060,8 +85035,7 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_x = 0; - tag = "" + pixel_x = 0 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -85928,8 +85902,7 @@ /obj/machinery/camera{ c_tag = "Genetics Monkey Dome"; dir = 9; - icon_state = "camera"; - tag = "icon-camera (NORTHWEST)" + icon_state = "camera" }, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -89766,8 +89739,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -90118,6 +90090,14 @@ /area/hallway/primary/starboard) "dfg" = ( /obj/machinery/computer/card/minor/cmo, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Medical Officer's Desk"; + departmentType = 5; + name = "Chief Medical Officer RC"; + pixel_x = -30; + pixel_y = 0 + }, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -90967,6 +90947,11 @@ }) "dgP" = ( /obj/item/stack/rods, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -91369,8 +91354,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/glass_engineering{ name = "Chief Engineer's Office"; @@ -92423,6 +92407,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -93605,8 +93594,7 @@ c_tag = "Toxins Storage"; dir = 9; icon_state = "camera"; - network = list("SS13","RD"); - tag = "icon-camera (NORTHWEST)" + network = list("SS13","RD") }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -93992,7 +93980,6 @@ }, /area/crew_quarters/hor) "dmN" = ( -/obj/effect/landmark/xmastree/rdrod, /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -94001,6 +93988,7 @@ /obj/machinery/keycard_auth{ pixel_y = -28 }, +/obj/structure/closet/secure_closet/RD, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, @@ -94367,6 +94355,2306 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) +"dnz" = ( +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/open/floor/circuit{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/turret_protected/ai) +"dnA" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"dnB" = ( +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-j2"; + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"dnC" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) +"dnD" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnE" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"dnF" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/door/window/eastright{ + name = "Mail Chute"; + req_access_txt = "31" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/quartermaster/sorting) +"dnG" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnH" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnI" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/mine/unexplored{ + name = "Cargo Asteroid" + }) +"dnJ" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dnK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dnL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/weapon/twohanded/required/kirbyplants/dead, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/hor) +"dnM" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnN" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnO" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnP" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnQ" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnR" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnS" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnT" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnU" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnV" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnW" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnX" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnY" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dnZ" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doa" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dob" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doc" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dod" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doe" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dof" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"dog" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doh" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doi" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doj" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-20"; + light_color = "#E1E17D"; + light_range = 5; + luminosity = 2; + tag = "icon-plant-20" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dok" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dol" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dom" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"don" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doo" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dop" = ( +/obj/structure/bed, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doq" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dor" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dos" = ( +/obj/structure/sign/map/left/ceres{ + pixel_x = 32 + }, +/obj/structure/closet/crate/bin, +/obj/item/weapon/paper/crumpled{ + info = "...SOMETHING IN THE ROCKS, IT WATCHES US ALL..." + }, +/obj/item/weapon/paper/crumpled{ + info = "...THEY SENT US HERE FOR A REASON...TERRIBLE..." + }, +/obj/item/weapon/paper/crumpled{ + info = "...EMPTY HALLS...USELESS SPACE..." + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dot" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dou" = ( +/turf/closed/mineral/random/low_chance, +/area/derelict/secret{ + valid_territory = 0 + }) +"dov" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/weapon/paper/crumpled{ + info = "I can't be here for much longer, this station is too empty for its own good. Something is wrong..." + }, +/obj/item/weapon/paper{ + info = "
2XXX - 2nd Trimestor


I hide in here, away from the masses, not like it matters much considering how fucking huge this place is. "; + name = "Journal Log" + }, +/obj/item/weapon/paper{ + info = "
2XXX - 3rd Trimestor


I hear strange whispers from the halls, longing for blood. Something isn't right here. Why did they transfer us here to work in the first place? "; + name = "Journal Log 2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dow" = ( +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"dox" = ( +/obj/item/weapon/paper/crumpled/bloody{ + info = "...THE HOPLINE CALLS...IT THIRSTS FOR BLOOD...I MUST GO..." + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doy" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doz" = ( +/obj/structure/table, +/obj/item/weapon/pen, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doA" = ( +/turf/closed/mineral, +/area/derelict/secret{ + valid_territory = 0 + }) +"doB" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doC" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doD" = ( +/obj/structure/sign/map/left{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doE" = ( +/obj/structure/table, +/obj/structure/sign/map/right{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doF" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doG" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doH" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doI" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doJ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doK" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doL" = ( +/obj/structure/girder, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doM" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doN" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/derelict/secret{ + valid_territory = 0 + }) +"doO" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"doP" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/northleft{ + name = "Kitchen Pick-Up"; + req_access_txt = "28" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/cafeteria{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/kitchen) +"doQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/southleft{ + name = "Hydroponics Pick-Up"; + req_access_txt = "35" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doR" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doS" = ( +/obj/machinery/plantgenes, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doT" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"doU" = ( +/obj/machinery/recharge_station, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/assembly/robotics) +"doV" = ( +/obj/machinery/ai_status_display, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doW" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doX" = ( +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doY" = ( +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"doZ" = ( +/obj/machinery/button/door{ + id = "armoryaccess"; + name = "Armory Shutter Access"; + pixel_x = -28 + }, +/obj/structure/chair/office/light, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"dpa" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"dpb" = ( +/obj/structure/closet/secure_closet/CMO, +/turf/open/floor/plasteel/barber{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/cmo) +"dpc" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpe" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpf" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpg" = ( +/obj/structure/table, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dph" = ( +/obj/machinery/door/airlock/glass_external{ + cyclelinkeddir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/starboard{ + name = "Starboard Asteroid Maintenance" + }) +"dpi" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix To Incinerator"; + on = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpj" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + tag = "icon-manifold (NORTH)"; + icon_state = "manifold"; + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpk" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpl" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpm" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpn" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpp" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpr" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dps" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpt" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpu" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpv" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpw" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpx" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpy" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpB" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpD" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpF" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpH" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpJ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpK" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpL" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpM" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpN" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpQ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpS" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpV" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpW" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dpZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqa" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqb" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqc" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqd" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqe" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqf" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqg" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqh" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqi" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (EAST)"; + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + tag = "icon-intact (SOUTHWEST)"; + icon_state = "intact"; + dir = 10 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dql" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqm" = ( +/obj/effect/spawner/lootdrop/grille_or_trash, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqn" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqp" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqr" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqs" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqt" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqu" = ( +/obj/machinery/door/airlock/atmos{ + name = "Turbine Access"; + req_access_txt = "32" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqv" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqw" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqx" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqy" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"dqJ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqK" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4; + name = "input gas connector port" + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqL" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "plasma tank pump" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/weapon/extinguisher, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqO" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqP" = ( +/obj/machinery/power/smes{ + capacity = 9e+006; + charge = 10000 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqQ" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqR" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqS" = ( +/obj/machinery/atmospherics/components/unary/tank/toxins{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqT" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "plasma tank pump" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqU" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general{ + level = 2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqW" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqX" = ( +/obj/machinery/airalarm{ + desc = "This particular atmos control unit appears to have no access restrictions."; + dir = 8; + icon_state = "alarm0"; + locked = 0; + name = "all-access air alarm"; + pixel_x = 24; + req_access = "0"; + req_one_access = "0" + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + name = "output gas connector port" + }, +/obj/machinery/portable_atmospherics/canister, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqY" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dqZ" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dra" = ( +/obj/structure/chair/stool, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Incinerator APC"; + pixel_x = -23; + pixel_y = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drc" = ( +/obj/machinery/atmospherics/components/binary/valve{ + name = "Mix to Space" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drd" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dre" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drf" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Incinerator to Output"; + on = 0 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drg" = ( +/turf/closed/wall/rust{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drh" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dri" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drj" = ( +/obj/machinery/computer/turbine_computer{ + id = "incineratorturbine" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 6 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drk" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drl" = ( +/obj/machinery/button/door{ + id = "auxincineratorvent"; + name = "Auxiliary Vent Control"; + pixel_x = 6; + pixel_y = -24; + req_access_txt = "32" + }, +/obj/machinery/button/door{ + id = "turbinevent"; + name = "Turbine Vent Control"; + pixel_x = -6; + pixel_y = -24; + req_access_txt = "32" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/incinerator) +"drm" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "Incinerator to Space" + }, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/incinerator) +"drn" = ( +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "incinerator_airlock_exterior"; + idSelf = "incinerator_access_control"; + idInterior = "incinerator_airlock_interior"; + name = "Incinerator Access Console"; + pixel_x = 6; + pixel_y = -26; + req_access_txt = "12" + }, +/obj/machinery/button/ignition{ + id = "Incinerator"; + pixel_x = -6; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/floorgrime, +/area/maintenance/incinerator) +"dro" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drp" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drq" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drs" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drt" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 2 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dru" = ( +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1449; + heat_proof = 1; + icon_state = "door_locked"; + id_tag = "incinerator_airlock_interior"; + locked = 1; + name = "Turbine Interior Airlock"; + req_access_txt = "32" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drv" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drw" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drx" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Incinerator Output Pump"; + on = 1 + }, +/turf/open/space, +/area/maintenance/incinerator) +"dry" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drz" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + on = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "incinerator_airlock_exterior"; + idSelf = "incinerator_access_control"; + layer = 3.1; + name = "Incinerator airlock control"; + pixel_x = 8; + pixel_y = -24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/sign/fire{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drA" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drB" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + on = 1 + }, +/obj/structure/sign/fire{ + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/doorButtons/access_button{ + idSelf = "incinerator_access_control"; + idDoor = "incinerator_airlock_interior"; + name = "Incinerator airlock control"; + pixel_x = -8; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drC" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drD" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drE" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drF" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 2 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drG" = ( +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1449; + heat_proof = 1; + icon_state = "door_locked"; + id_tag = "incinerator_airlock_exterior"; + locked = 1; + name = "Turbine Exterior Airlock"; + req_access_txt = "32" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/maintenance/incinerator) +"drH" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drI" = ( +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drJ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drK" = ( +/obj/machinery/door/poddoor{ + id = "auxincineratorvent"; + name = "Auxiliary Incinerator Vent" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drL" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "inc_in" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drM" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/igniter{ + icon_state = "igniter0"; + id = "Incinerator"; + luminosity = 2; + on = 0 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + initialize_directions = 1; + internal_pressure_bound = 4000; + on = 0; + pressure_checks = 2; + pump_direction = 0 + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drO" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drP" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drQ" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drR" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drS" = ( +/obj/machinery/power/compressor{ + comp_id = "incineratorturbine"; + dir = 1; + luminosity = 2 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drT" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drU" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drV" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/space, +/area/maintenance/incinerator) +"drW" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drX" = ( +/obj/machinery/power/turbine{ + luminosity = 2 + }, +/obj/structure/cable/yellow, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"drY" = ( +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"drZ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/incinerator) +"dsa" = ( +/obj/structure/sign/fire{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) +"dsb" = ( +/obj/machinery/door/poddoor{ + id = "turbinevent"; + name = "Turbine Vent" + }, +/turf/open/floor/engine/vacuum{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/incinerator) +"dsc" = ( +/obj/structure/sign/fire{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/closed/wall/r_wall, +/area/maintenance/incinerator) (1,1,1) = {" aaa @@ -98559,12 +100847,12 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aab +aab +aab +aab +aad aaa aaa aaa @@ -98814,16 +101102,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aab +aab +aab +aab +aab +aab +aad +aab +aab aaa aaa aaa @@ -99071,17 +101359,17 @@ aaa aag aaa aaa -aaa -aaa +aab +aab +aab +aab aad -aaa -aaa -aaa -aaa -aaa aad -aaa -aaa +aad +aad +aab +aab +aad aaa aaa aaa @@ -99328,17 +101616,17 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aab +aab +aab +aab +aad +aad +aad +aad +aad +aad +aad aaa aaa aaa @@ -99584,19 +101872,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aab +aab +dnS +dnZ +dnN +dnS +dou +dnN +aac +aac +aac +aad aaa aaa aaa @@ -99841,19 +102129,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aab aad -aaa -aaa -aaa -aaa -aaa -aaa +dnM +dnS +doa +dnP +doa +dov +dnN +dnN aac +aac +aad aad aab aaa @@ -100099,19 +102387,19 @@ aaa aaa aad aad -aab -aab -aab -aaa -aaa -aaa -aaa -aaa +aad +dnN +dnS +dnZ +dnV +dop +doa +doD +dnS aac -aab -aab -aab aac +aad +aad aab aaa aaa @@ -100356,21 +102644,21 @@ aaa aac aac aad -aab -aab -aab -aab -aab -aaa -aad aad +dnM +dnV +dnP +doj +dnV +dox +doE +dnS aac -aab -aab -aab aad aad -aaa +aad +aab +aab aaa aaa aaa @@ -100614,21 +102902,21 @@ aac aac aad aad +dnP +dnV +dnV +dnP +doa +doy +doF +dnP aac -aac -aac +aad aab +aad +aad +aad aab -aac -aac -aac -aab -aab -aab -aac -aac -aaa -aaa aad aaa aaa @@ -100871,22 +103159,22 @@ aaa aad aac aac +dnN +dnX +dnV +dnV +dos +doz +doG +dnN aac -aac -aac -aab +aad aab aac -aac -aac +aad +aad +aad aab -aab -aab -aac -aac -aaa -aaa -aaa aaa aaa aaa @@ -101128,24 +103416,24 @@ aaa aad aac aac -aac -aaa -aaa -aaa -aaa -aac -aac -aac +dnN +dnN +dnM +dnS +dnS +dnM +dnN +dnS aad aad aab +aac +aac +aac +aad +aad aad aad -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -101384,26 +103672,26 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aac +aac aad +aad +aac +aac +aac aac aad aad aad +aab +aac +aac +aac aad aab aab aad -aaa -aaa -aaa -aaa -aaa -aaa +aad aaa aaa abC @@ -101644,23 +103932,23 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aab -aab -aab +aad +aac +aac +aac +aac +aad aab +aad +aad +aad +aad +aad aab aab aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad aaa aaa abC @@ -101901,19 +104189,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +aad +aad +aad +aad +aad +aad +aab +aad +aad +aad aab aab aab -aab -aab -aab -aaa -aaa -aaa aaa aaa aaa @@ -102160,13 +104448,13 @@ aaa aaa aaa aaa -aaa +aad aaa aab aab aab aab -aaa +aab aaa aaa aad @@ -107323,10 +109611,10 @@ aYP aYT aYT aYT -aZm -aZm +aZY +aZY bdQ -aZm +aZY dch bgu bgu @@ -107675,7 +109963,7 @@ crg cqo cgN cta -cuY +doU cuY cwS cLE @@ -109569,7 +111857,7 @@ acO acO acO acO -acO +doW acO acO afr @@ -109827,10 +112115,10 @@ aeB aeB aeB agr -acO -aia +doX +doZ aiI -ajB +akw akv ajB afr @@ -110084,12 +112372,12 @@ aeY afs afM ags -ahn -aib +doX +dpa aiJ -ajC akw akw +ajB afr ams anr @@ -110512,7 +112800,7 @@ czu cAn cBj cBY -cCP +dnL cCP dmB cES @@ -111208,7 +113496,7 @@ byr bCN bAI bFg -byr +doS bBL bJj bKP @@ -111382,7 +113670,7 @@ cJv aog aqf arc -arW +arX asU aub aog @@ -111703,7 +113991,7 @@ bfF bgy bhs biD -bjr +blh bkl blh bmk @@ -111876,7 +114164,7 @@ abW abW acO acO -acO +doV acO acO acO @@ -111960,7 +114248,7 @@ cKo bch bch biE -bch +doO bkm bli bli @@ -112737,18 +115025,18 @@ blj bml bjw bjw -bch +doP bqU bax btO -bBL -bwN +doQ +bAJ byt bzF bAJ bBI bCQ -bEg +bAJ bFi bGA bBL @@ -113005,9 +115293,9 @@ bzG bvm bvm bCR -bvm +doR bFj -bvm +doR bBL bJq bKT @@ -113775,7 +116063,7 @@ byw bzJ byw bBJ -bCU +byw bEh bFl bGC @@ -120973,26 +123261,26 @@ aZt bAd bAd byQ -byP -byP -byP -byO -dgD -bvU -dht -cbr -cbr -cbr -dfU -cbr -cbr -dfU -cbr -cbr -cbr -cbr -dfU -dfU +bEj +dpl +dpm +dpn +dpo +dpp +dpq +dpr +dps +dpt +dpu +dpv +dpw +dpx +dpy +dpz +dpB +dpD +dpF +dpH caf bBN bBN @@ -121230,7 +123518,7 @@ aZt bBN cMH bDb -byP +bEk bGE bGE bGE @@ -121250,8 +123538,8 @@ cbr djb diU cbr -cbr -cbr +dpJ +dpL bAd aZt aZt @@ -121487,7 +123775,7 @@ aZt bBN byS byQ -byP +bEk bGE bHH bHH @@ -121508,7 +123796,7 @@ bOM bOM bOM dgQ -djm +dpM byS bAd bBN @@ -121744,7 +124032,7 @@ aZt bAd bAd byQ -byO +dpk bGE bHI bJv @@ -121765,8 +124053,8 @@ bYp bXG bOM cbr -cbr -cbr +dpN +dpP cMH byS cbr @@ -122001,7 +124289,7 @@ aZH bAd bAd bEi -byP +bEk bGE bHJ bHJ @@ -122023,8 +124311,8 @@ bXG bOM byS dfU -cbr -cbr +dpQ +dpS byS cbr dgD @@ -122258,7 +124546,7 @@ aZH bAd cMH byQ -byP +bEk bGE bHK bHK @@ -122281,10 +124569,10 @@ bOM bAd diS djs -dgD -bvU -dht -cbr +dpT +dpW +dpY +dqa cMH cMH byS @@ -122514,8 +124802,8 @@ aZt aZH bBN bCZ -byP -byP +bEj +bEl bGE bGE bGE @@ -122541,7 +124829,7 @@ cMH byS cMH dfU -cbr +dqb byS byS aZt @@ -122771,7 +125059,7 @@ aZt bAd byS bAf -byP +bEk bAd bGE bHL @@ -122798,8 +125086,8 @@ cMV cbr byS cbr -cbr -djM +dqc +djm bAd aZt aZt @@ -123055,8 +125343,8 @@ cbr dgD cNc dht -cbr -djm +dqd +djO byS aZH aZt @@ -123285,7 +125573,7 @@ aZt bAd bAd dgC -byP +dpi bFq bGG bHN @@ -123312,8 +125600,8 @@ cMW cbr cMH bAd -cbr -djO +dqe +djP djl aZH aZt @@ -123542,7 +125830,7 @@ bal bal bal bDb -bEj +dpj bFr bGH bHO @@ -123569,12 +125857,12 @@ bOM bOM bOM byS -cbr -djP +dqf +bAe cMH aZH aZt -aaa +abC aaa aaa aaa @@ -123826,13 +126114,13 @@ cbi cbi bOM dge -cbr -bAe -byS -aZH -aZt -aZt -aaa +dqg +dqr +dqJ +dqR +dqZ +drh +drp aaa aaa aaa @@ -124083,13 +126371,13 @@ cbj cbP bOM dfU -cbr -bBN -bBN -aZH -aZt -aZt -aaa +dqh +dqs +dqK +dqS +dra +dri +drq aaa aaa aaa @@ -124340,19 +126628,19 @@ cbi cbi bOM cbr -cbr -bBN -aZH -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqi +dqt +dqL +dqT +drb +drj +drr +drx +drD +drJ +drP +drV +drZ aaa aaa aaa @@ -124597,19 +126885,19 @@ bOM bOM bOM djb -cbr -cMH -aZH -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqj +dqu +dqM +dqU +drc +drk +drs +dry +drE +drK +drQ +arw +arw aaa aaa aaa @@ -124854,19 +127142,19 @@ cbk cbk bOM cbr -djm -cMH -aZt -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqk +dqv +dqN +dqV +drd +drl +drt +drz +drF +drL +drR +drW +dsa aaa aaa aaa @@ -125111,19 +127399,19 @@ cbl cbQ bOM cbr -cbr -bAd -aZH -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dql +dqw +dqO +dqW +dre +drm +dru +drA +drG +drM +drS +drX +dsb aaa aaa aaa @@ -125368,19 +127656,19 @@ cbk cbk bOM cbr -dfU -bAd -aZH -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqm +dqx +dqP +dqX +drf +drn +drv +drB +drH +drN +drT +drY +dsc aaa aaa aaa @@ -125625,19 +127913,19 @@ bOM bOM bOM cbr -cbr -byS -bBN -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa +dqn +dqy +dqQ +dqY +drg +dro +drw +drC +drI +drO +drU +arw +arw aaa aaa aaa @@ -125882,15 +128170,15 @@ cbm cbm bOM djs -cbr +dqo dgE byS aZH aZt aZt aZt -aaa -aaa +abC +abC aaa aaa aaa @@ -126139,7 +128427,7 @@ cbn cbR bOM djF -cbr +dqp djR cMH aZH @@ -126397,7 +128685,7 @@ cbm bOM bAd dgQ -bvU +dqz bBN aZH aZt @@ -126654,7 +128942,7 @@ bOM bOM cbr diU -caf +dqA byS aZH aZt @@ -126911,7 +129199,7 @@ cbo bOM djG bAd -cbr +dqB bBN aZH aZt @@ -127168,27 +129456,27 @@ cbS bOM bAd byS -cbr +dqC byS aZH aZH aZH aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -127425,27 +129713,27 @@ cbo bOM bAd cMH -cbr +dqD byS aZH aZH aZH aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -127682,27 +129970,27 @@ bOM bOM bAd bAd -cbr +dqE bBN aZH aZH aZH aaa -aaa -aaa cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -127939,27 +130227,27 @@ byS bAd byS cbr -cbr +dqF bBN aZH aZH aZH aaa -aaa -aaa cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128196,27 +130484,27 @@ djv byS bPt byP -cbr +dqG djk aZH aZt aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aaa aaa @@ -128441,19 +130729,19 @@ bTP bUR bVQ bWD -cbr -cbr -cbr -cbr -cbr -cMV -cbr -cbr -cbr +dpA +dpC +dpE +dpG +dpI +dpK +dpO +dpR +dpU djw byP byP -cbr +dqH cMH aZH aZt @@ -128463,17 +130751,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aaa aac aad @@ -128706,11 +130994,11 @@ bAe djk cbr byP -byP -byP -byP -byP -byP +dpV +dpX +dpZ +dqq +dqI byS aZH aaa @@ -128720,17 +131008,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aab aad aad @@ -128977,17 +131265,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF aab aab aad @@ -129234,17 +131522,17 @@ cKF cKF cKF cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aad +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +cKF +aab aab aad aac @@ -129500,7 +131788,7 @@ aaa aaa aaa aaa -aaa +aab aab aab aad @@ -129676,8 +131964,8 @@ aaa aaa aaa aaa -aaa -aaa +cKF +cKF aaa aaa aZf @@ -129935,7 +132223,7 @@ aaa aaa aaa aaa -aaa +cKF aaa aZf aZt @@ -136544,7 +138832,7 @@ aca aax acv aax -aaw +dnz aal adh adx @@ -142053,11 +144341,11 @@ bIu bKa bLC bEK -bNT +dpc bPA -bex +dpd bRR -bbR +dph bUd bVe bVV @@ -142310,13 +144598,13 @@ bIv bHh bLD bEK -bey -bPB -bey -bdG -baS -baS -baS +dhy +bIO +dhy +dpf +bgs +bgs +bgs aaa aaa aaa @@ -142567,11 +144855,11 @@ bIw bHh bLE bEK -bey -bPB -bey -ber -baS +dhy +bIO +dhy +dpg +bgs bbo bbo aaa @@ -142826,9 +145114,9 @@ bLF bEK bNU bPC -bQL +dpe bRS -baS +bgs bbo bbo bbo @@ -142984,9 +145272,9 @@ aaa aaa ajj akc +anQ +dnE ajn -alx -alx aez afS afV @@ -143082,10 +145370,10 @@ bKb bLG bEK bNV -bPD -baS -baS -baS +bOq +bgs +bgs +bgs bbo bbo bbo @@ -143240,9 +145528,9 @@ aaa aaa aaa ajk +alE akd -ajn -ajn +dnF ajn ajn aUW @@ -144088,7 +146376,7 @@ bja bjS deo blC -deY +dpb bnC deY dfC @@ -145554,7 +147842,7 @@ aaa aaa ajn akj -ajl +ajn alD aml anj @@ -145811,12 +148099,12 @@ aaa aaa aaa aaa -ajm -alE -alE -alE -anQ -aoX +ajn +ajn +ajn +ajn +ajn +aoU aoU aoY arI @@ -146072,7 +148360,7 @@ aaa akR akR akR -anR +anV aoY aoY aoY @@ -146329,7 +148617,7 @@ aaa aaa aaa abC -anS +arw aoZ aoZ aoZ @@ -146586,7 +148874,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -146843,7 +149131,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147100,7 +149388,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147357,7 +149645,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147614,7 +149902,7 @@ aaa aaa aaa abC -anS +arw aoZ apR apR @@ -147871,7 +150159,7 @@ aaa aaa aaa abC -anS +arw aoZ aoZ aoZ @@ -148123,12 +150411,12 @@ aaa aaa aaa aaa -aaa +dnA aaa akR akR akR -anR +anV aoY aoY aoY @@ -148380,11 +150668,11 @@ aaa aaa aaa aaa -aaa -akR -akR -akR -alx +dnB +dnD +dnD +dnD +dnD anT aoX aoU @@ -148637,10 +150925,10 @@ aaa aaa aaa aaa -aaa +dnC +akR +akR akR -alx -alx alx anU apa @@ -148896,7 +151184,7 @@ aaa aaa aaa akR -alx +akR alx alx anV @@ -153858,9 +156146,9 @@ bjZ bjZ bjZ bqA +dnJ bjZ -bjZ -bjZ +dnK bjZ byf bjZ @@ -154113,12 +156401,12 @@ bgs deO bhd bhd -bhd -bqC -blS -dfM -bva -bhd +dfA +dfI +bgs +btp +bgs +bgs bhd bhd blS @@ -154370,11 +156658,11 @@ bgq bgr bgq bgq -dfA -dfI -bgs -btp -bgs +bpu +bqD +brZ +btq +bvb bgr bgq bgq @@ -154627,11 +156915,11 @@ bbo bbq bbq bgp -bpu -bqD -brZ -btq -bvb +dfB +bgr +bgs +btr +bgs bgr bgp bbq @@ -154884,11 +157172,11 @@ bbo bbq bbq bbq -dfB -bgr -bgs -btr +bpv bgs +bsa +bts +bsa bww bbq bbq @@ -155141,11 +157429,11 @@ aaa bbo bbo bbo -bpv +bpw bgs -bsa -bts -bsa +bsb +btt +bsb bgs bbq bbo @@ -155398,10 +157686,10 @@ aaa aaa aaa bbo -bpw +aaa bgs bsb -btt +btu bsb bgs bbq @@ -155658,7 +157946,7 @@ aaa aaa bgs bsb -btu +btv bsb bgs aaa @@ -155914,9 +158202,9 @@ aaa aaa aaa aaa -bsb -btv -bsb +aaa +btw +aaa aaa aaa aaa @@ -156169,11 +158457,11 @@ cKF cKF aaa aaa -aaa -aaa -aaa -btw -aaa +cKF +cKF +cKF +cKF +cKF aaa aaa aaa diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index a599d785f44..2e275a194f7 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -720,7 +720,7 @@ }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; - req_access_txt = "10" + req_access_txt = "10; 13" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1216,7 +1216,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/engineering{ name = "Auxiliary Construction Storage"; - req_access_txt = "32;47;48" + req_access_txt = "10;32;47;48" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -15746,8 +15746,9 @@ }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; - req_access_txt = "24"; - req_one_access = null + req_access_txt = "10"; + req_one_access = null; + req_one_access_txt = "13; 24" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -15820,8 +15821,9 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/atmos{ name = "Fore Port Solar Access"; - req_access_txt = "24"; - req_one_access = null + req_access_txt = "0"; + req_one_access = null; + req_one_access_txt = "13; 24" }, /obj/structure/cable/white{ icon_state = "4-8" @@ -38349,7 +38351,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/highsecurity, +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Tech Storage"; + req_access_txt = "19;23" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -107067,7 +107072,7 @@ }, /obj/machinery/door/airlock/external{ name = "External Solar Access"; - req_access_txt = "10" + req_access_txt = "10; 13" }, /obj/effect/turf_decal/stripes/line{ dir = 8 diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index cf8c406eb5e..1d6e417a5d1 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -2398,10 +2398,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aea" = ( /obj/machinery/conveyor{ @@ -2415,10 +2412,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aeb" = ( /obj/machinery/conveyor{ @@ -2429,10 +2423,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aec" = ( /obj/machinery/conveyor{ @@ -2448,10 +2439,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aed" = ( /obj/machinery/conveyor{ @@ -2461,10 +2449,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aee" = ( /obj/machinery/conveyor{ @@ -2483,10 +2468,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" - }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aef" = ( /obj/machinery/conveyor{ @@ -4519,9 +4501,10 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/end{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating{ tag = "icon-plating_warn_end (WEST)"; icon_state = "plating_warn_end" @@ -4537,10 +4520,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "ahp" = ( /obj/machinery/conveyor{ @@ -4551,10 +4534,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plating{ - tag = "icon-plating_warn_side (EAST)"; - icon_state = "plating_warn_side" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "ahq" = ( /obj/machinery/conveyor{ @@ -4569,6 +4552,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating{ tag = "icon-plating_warn_side (EAST)"; icon_state = "plating_warn_side" @@ -4584,6 +4570,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating{ tag = "icon-plating_warn_side (EAST)"; icon_state = "plating_warn_side" @@ -4606,6 +4595,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating{ tag = "icon-plating_warn_side (EAST)"; icon_state = "plating_warn_side" @@ -5036,6 +5028,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aif" = ( @@ -11429,9 +11424,7 @@ dir = 4 }, /turf/open/floor/plasteel/green/side{ - dir = 5; - initial_gas_mix = "n2=100;TEMP=80"; - tag = "SERVER" + dir = 5 }, /area/atmos) "arz" = ( @@ -12047,7 +12040,7 @@ layer = 2.9 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/mining) "asv" = ( /turf/open/floor/engine/n2, @@ -26169,7 +26162,7 @@ }, /obj/structure/shuttle/engine/heater, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/escape) "aPF" = ( /obj/structure/window/reinforced{ @@ -26178,7 +26171,7 @@ /obj/structure/shuttle/engine/heater, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/escape) "aPG" = ( /obj/structure/grille, @@ -26758,7 +26751,7 @@ "aQE" = ( /obj/structure/shuttle/engine/propulsion, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/escape) "aQF" = ( /obj/machinery/light{ @@ -27771,10 +27764,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (WEST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/medical/research{ name = "Research Division" }) @@ -27788,10 +27778,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (EAST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/medical/research{ name = "Research Division" }) @@ -29350,7 +29337,8 @@ }) "aVC" = ( /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/medical/research{ name = "Research Division" @@ -29802,7 +29790,8 @@ dir = 4 }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/medical/research{ name = "Research Division" @@ -37061,10 +37050,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (WEST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/toxins/xenobiology) "biD" = ( /obj/machinery/shower{ @@ -37080,10 +37066,7 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/turf/open/floor/plasteel/white{ - tag = "icon-white_warn_end (EAST)"; - icon_state = "white_warn_end" - }, +/turf/open/floor/plasteel, /area/toxins/xenobiology) "biE" = ( /obj/structure/sign/xenobio, @@ -37583,7 +37566,8 @@ "bjw" = ( /obj/machinery/atmospherics/pipe/manifold/general/hidden, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/toxins/xenobiology) "bjx" = ( @@ -37593,7 +37577,8 @@ dir = 9 }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 8; + initial_gas_mix = "n2=100;TEMP=80" }, /area/toxins/xenobiology) "bjy" = ( @@ -37757,7 +37742,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "bjO" = ( /turf/closed/wall/mineral/plastitanium, @@ -37914,7 +37899,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "bjX" = ( /obj/structure/grille, @@ -38933,14 +38918,7 @@ "bmh" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; - external_pressure_bound = 0; - frequency = 1441; - id_tag = "o2_out"; - initialize_directions = 1; - internal_pressure_bound = 4000; - on = 1; - pressure_checks = 2; - pump_direction = 0 + on = 1 }, /turf/open/floor/plasteel, /area/hallway/secondary/exit{ @@ -41743,6 +41721,197 @@ "bvf" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) +"bvg" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvi" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvm" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvn" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvo" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvp" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvq" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvr" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvt" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvu" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvv" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvx" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvy" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvA" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvB" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvC" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvD" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvF" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvH" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvI" = ( +/obj/item/weapon/pickaxe/emergency, +/turf/open/floor/plating/asteroid/airless, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvJ" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvK" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvL" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvM" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"bvN" = ( +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) (1,1,1) = {" aaa @@ -71389,7 +71558,7 @@ aad aad aad aad -aac +abj aaW aad aad @@ -71646,7 +71815,7 @@ aad aad aad abi -aac +abj abi abi aad @@ -71683,9 +71852,9 @@ aJp aRF aSP aEt -abi +bvo aad -abi +bvr aad abi aad @@ -71903,8 +72072,8 @@ aad abi aik aaW -aac -aac +abj +abj abu abP aad @@ -72158,11 +72327,11 @@ aac aad aad aad -aac -aac +abj +abj abS -aac -aac +abj +abj acD aad abi @@ -72201,11 +72370,11 @@ aUR aVL aUR aUQ -abi +bvu ahu aad aac -acD +bvI aad aac aad @@ -72415,9 +72584,9 @@ aac aad aad aaW -aac +abj abu -ajP +aaV aad abS aad @@ -72445,11 +72614,11 @@ aHl aIi aJs aKz -buX +buW aMR buZ -bva -bvb +buZ +buW aQL aRI aSS @@ -72458,10 +72627,10 @@ aUS aUU aWz aVL -abi +bvv ahu -abP -abu +bvG +bvH aad aad aad @@ -72676,7 +72845,7 @@ abu abu aad aad -aac +abj abi anx anx @@ -72706,7 +72875,7 @@ aLP aMS aMS aOC -bvc +buW aQM aRJ aST @@ -72715,8 +72884,8 @@ aUR aUU aWz aUQ -abP -abi +bvw +bvD aad aad aad @@ -72930,9 +73099,9 @@ aad aad aad abu -aac +abj aad -ajP +aaV abP amG anx @@ -72972,8 +73141,8 @@ aUS aUU aWz aVL -abu -abP +bvx +bvE aad aad aad @@ -73229,8 +73398,8 @@ aUT aUU aUU aUQ -abu -abi +bvy +bvF aad aad aad @@ -73486,7 +73655,7 @@ aUS aUU aWz aVL -abP +bvz aad aad aad @@ -73734,7 +73903,7 @@ aLT aMW aMW aOD -bve +buW aQQ aRN aSX @@ -73743,7 +73912,7 @@ aUR aUU aWz aUQ -abi +bvA aad aad aad @@ -73987,11 +74156,11 @@ aHr aIo aJw aKE -buY +buW aMX aMX aMX -bvf +buW aQR aRO aSY @@ -74000,7 +74169,7 @@ aUS aUU aWz aVL -abi +bvB aOH aZo baj @@ -74767,11 +74936,11 @@ aQT aRR aTa aEt -abi -abu -abP -abi -abi +bvp +bvq +bvs +bvt +bvC aOH aZr bam @@ -88596,9 +88765,9 @@ aaa aad aad aad -abu -abP -abP +bvg +bvh +bvj adn aec aeS @@ -88665,7 +88834,7 @@ bhj bhT aRz aad -abu +bvN aac aad aad @@ -88854,7 +89023,7 @@ aaa aac aac aac -abu +bvi aad adn aed @@ -88921,7 +89090,7 @@ bgv bhk bhU aRy -abu +bvJ aac aaa aaa @@ -89178,7 +89347,7 @@ bgw bhl bhV aRy -abu +bvK aaa aaa aaa @@ -89387,9 +89556,9 @@ acv aph aqp abt -abP -abP -abu +bvk +bvl +bvn aac aac aae @@ -89645,7 +89814,7 @@ api amD amC amC -abu +bvm aac aae aae @@ -89692,7 +89861,7 @@ bgy bhk bhX aRy -abu +bvL aaa aaa aaa @@ -89949,7 +90118,7 @@ bgz bhk bgw aRy -abu +bvM aac aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 631433a5a73..e0e721840d8 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -29590,9 +29590,7 @@ pixel_x = -32 }, /turf/open/floor/plasteel/whiteblue/side{ - dir = 9; - initial_gas_mix = "n2=100;TEMP=80"; - tag = "icon-whiteblue (NORTHWEST)" + dir = 9 }, /area/medical/medbay3) "bhO" = ( @@ -29631,9 +29629,7 @@ pixel_x = -32 }, /turf/open/floor/plasteel/whiteblue/side{ - dir = 9; - initial_gas_mix = "n2=100;TEMP=80"; - tag = "icon-whiteblue (NORTHWEST)" + dir = 9 }, /area/medical/medbay) "bhS" = ( @@ -48652,17 +48648,23 @@ pixel_y = 24 }, /obj/structure/cable, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTt" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTu" = ( -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTv" = ( /obj/machinery/telecomms/bus/preset_three, @@ -48726,20 +48728,28 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/darkred/side, +/turf/open/floor/plasteel/darkred/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTD" = ( -/turf/open/floor/plasteel/darkpurple/side, +/turf/open/floor/plasteel/darkpurple/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTE" = ( -/turf/open/floor/plasteel/darkgreen/side, +/turf/open/floor/plasteel/darkgreen/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTF" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" }, -/turf/open/floor/plasteel/darkgreen/side, +/turf/open/floor/plasteel/darkgreen/side{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bTG" = ( /turf/closed/indestructible{ @@ -48826,17 +48836,20 @@ dir = 8 }, /turf/open/floor/plasteel/darkblue/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTS" = ( /turf/open/floor/plasteel/darkblue/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTT" = ( /turf/open/floor/plasteel/darkyellow/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTU" = ( @@ -48845,7 +48858,8 @@ icon_state = "tube1" }, /turf/open/floor/plasteel/darkyellow/side{ - dir = 1 + dir = 1; + initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) "bTV" = ( @@ -48896,7 +48910,9 @@ /obj/item/weapon/stock_parts/subspace/amplifier, /obj/item/weapon/stock_parts/subspace/analyzer, /obj/item/weapon/stock_parts/subspace/analyzer, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUc" = ( /obj/structure/table, @@ -48904,7 +48920,9 @@ /obj/item/weapon/stock_parts/subspace/ansible, /obj/item/weapon/stock_parts/subspace/crystal, /obj/item/weapon/stock_parts/subspace/crystal, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUd" = ( /obj/structure/table, @@ -48912,7 +48930,9 @@ /obj/item/weapon/stock_parts/subspace/filter, /obj/item/weapon/stock_parts/subspace/transmitter, /obj/item/weapon/stock_parts/subspace/transmitter, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUe" = ( /obj/machinery/camera/motion{ @@ -48921,7 +48941,6 @@ network = list("SS13","Telecoms") }, /turf/open/floor/plasteel/black{ - name = "Mainframe Floor"; initial_gas_mix = "n2=100;TEMP=80" }, /area/tcommsat/server) @@ -48931,7 +48950,9 @@ /obj/item/weapon/stock_parts/subspace/treatment, /obj/item/weapon/stock_parts/manipulator, /obj/item/weapon/stock_parts/manipulator, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUg" = ( /obj/structure/table, @@ -48939,13 +48960,17 @@ /obj/item/weapon/stock_parts/console_screen, /obj/item/weapon/stock_parts/micro_laser, /obj/item/weapon/stock_parts/micro_laser, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUh" = ( /obj/structure/table, /obj/item/weapon/stock_parts/scanning_module, /obj/item/weapon/stock_parts/scanning_module, -/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/black{ + initial_gas_mix = "n2=100;TEMP=80" + }, /area/tcommsat/server) "bUi" = ( /obj/machinery/camera/motion{ @@ -83827,33 +83852,33 @@ bQl bQC bQN bQZ -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg -bRg -bRE -bRg -bRg -bRg +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ +aeZ +afy +aeZ +aeZ +aeZ bSp bSu bSC @@ -97895,7 +97920,7 @@ aaa aaa aGT aOx -cii +aPw aKE aPw aSs diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index c390a0cf06b..aa5e44a5210 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -13925,7 +13925,7 @@ dir = 4; icon_state = "burst_r" }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aEy" = ( /obj/structure/shuttle/engine/heater{ @@ -13935,7 +13935,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aEz" = ( /obj/machinery/power/apc{ @@ -14460,7 +14460,7 @@ dir = 4; icon_state = "propulsion" }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aFG" = ( /turf/open/floor/plasteel/arrival{ @@ -16630,7 +16630,7 @@ dir = 4; icon_state = "burst_l" }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "aKj" = ( /obj/machinery/door/firedoor, @@ -58780,7 +58780,7 @@ dir = 8; icon_state = "propulsion_l" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cxu" = ( /turf/closed/wall/mineral/titanium, @@ -58816,7 +58816,7 @@ dir = 8 }, /obj/structure/window/reinforced, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cxz" = ( /obj/machinery/computer/shuttle/ferry/request, @@ -58844,7 +58844,7 @@ dir = 4; pixel_x = 0 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cxE" = ( /obj/machinery/door/airlock/titanium, @@ -60967,7 +60967,7 @@ dir = 1; pixel_y = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/transport) "cCz" = ( /obj/machinery/door/airlock/external, @@ -63393,7 +63393,7 @@ name = "arrivals"; width = 7 }, -/turf/open/floor/plasteel/black, +/turf/open/floor/plating/airless, /area/shuttle/arrival) "cIh" = ( /obj/machinery/door/airlock/external{ diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 20b3f887453..4596c79ef1e 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -19,3 +19,26 @@ //For servers that can't do with any additional lag, set this to none in flightpacks.dm in subsystem/processing. #define FLIGHTSUIT_PROCESSING_NONE 0 #define FLIGHTSUIT_PROCESSING_FULL 1 + +// Subsystem init_order, from highest priority to lowest priority +// The numbers just define the ordering, they are meaningless otherwise. + +#define INIT_ORDER_JOBS 15 +#define INIT_ORDER_EVENTS 14 +#define INIT_ORDER_TICKER 13 +#define INIT_ORDER_MAPPING 12 +#define INIT_ORDER_ATOMS 11 +#define INIT_ORDER_MACHINES 9 +#define INIT_ORDER_SHUTTLE 3 +#define INIT_ORDER_TIMER 1 +#define INIT_ORDER_DEFAULT 0 +#define INIT_ORDER_AIR -1 +#define INIT_ORDER_MINIMAP -2 +#define INIT_ORDER_ASSETS -3 +#define INIT_ORDER_ICON_SMOOTHING -5 +#define INIT_ORDER_OVERLAY -6 +#define INIT_ORDER_XKEYSCORE -10 +#define INIT_ORDER_STICKY_BAN -10 +#define INIT_ORDER_LIGHTING -20 +#define INIT_ORDER_SQUEAK -40 +#define INIT_ORDER_PERSISTENCE -100 diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index f457278eb0f..5983f26950d 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -1,17 +1,3 @@ -//checks if a file exists and contains text -//returns text as a string if these conditions are met -/proc/return_file_text(filename) - if(fexists(filename) == 0) - throw EXCEPTION("return_file_text(): File not found") - return - - var/text = file2text(filename) - if(!text) - throw EXCEPTION("return_file_text(): File empty") - return - - return text - //Sends resource files to client cache /client/proc/getFiles() for(var/file in args) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index d890788c91d..de46e18fde2 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -1,7 +1,7 @@ //generic (by snowflake) tile smoothing code; smooth your icons with this! /* - Each tile is divided in 4 corners, each corner has an image associated to it; the tile is then overlayed by these 4 images + Each tile is divided in 4 corners, each corner has an appearance associated to it; the tile is then overlayed by these 4 appearances To use this, just set your atom's 'smooth' var to 1. If your atom can be moved/unanchored, set its 'can_be_unanchored' var to 1. If you don't want your atom's icon to smooth with anything but atoms of the same type, set the list 'canSmoothWith' to null; Otherwise, put all types you want the atom icon to smooth with in 'canSmoothWith' INCLUDING THE TYPE OF THE ATOM ITSELF. @@ -44,7 +44,6 @@ #define DEFAULT_UNDERLAY_ICON 'icons/turf/floors.dmi' #define DEFAULT_UNDERLAY_ICON_STATE "plating" -#define DEFAULT_UNDERLAY_IMAGE image(DEFAULT_UNDERLAY_ICON, DEFAULT_UNDERLAY_ICON_STATE) /atom/var/smooth = SMOOTH_FALSE /atom/var/top_left_corner @@ -157,14 +156,16 @@ /turf/closed/wall/diagonal_smooth(adjacencies) adjacencies = reverse_ndir(..()) if(adjacencies) - var/list/U = list() + var/mutable_appearance/underlay_appearance = mutable_appearance(layer = TURF_LAYER) + var/list/U = list(underlay_appearance) if(fixed_underlay) if(fixed_underlay["space"]) - var/image/I = image('icons/turf/space.dmi', SPACE_ICON_STATE, layer=TURF_LAYER) - I.plane = PLANE_SPACE - U += I + underlay_appearance.icon = 'icons/turf/space.dmi' + underlay_appearance.icon_state = SPACE_ICON_STATE + underlay_appearance.plane = PLANE_SPACE else - U += image(fixed_underlay["icon"], fixed_underlay["icon_state"], layer=TURF_LAYER) + underlay_appearance.icon = fixed_underlay["icon"] + underlay_appearance.icon_state = fixed_underlay["icon_state"] else var/turf/T = get_step(src, turn(adjacencies, 180)) if(T && (T.density || T.smooth)) @@ -173,15 +174,18 @@ T = get_step(src, turn(adjacencies, 225)) if(isspaceturf(T) && !istype(T, /turf/open/space/transit)) - var/image/I = image('icons/turf/space.dmi', SPACE_ICON_STATE, layer=TURF_LAYER) - I.plane = PLANE_SPACE - U += I + underlay_appearance.icon = 'icons/turf/space.dmi' + underlay_appearance.icon_state = SPACE_ICON_STATE + underlay_appearance.plane = PLANE_SPACE else if(T && !T.density && !T.smooth) - U += T + underlay_appearance.icon = T.icon + underlay_appearance.icon_state = T.icon_state else if(baseturf && !initial(baseturf.density) && !initial(baseturf.smooth)) - U += image(initial(baseturf.icon), initial(baseturf.icon_state), layer=TURF_LAYER) + underlay_appearance.icon = initial(baseturf.icon) + underlay_appearance.icon_state = initial(baseturf.icon_state) else - U += DEFAULT_UNDERLAY_IMAGE + underlay_appearance.icon = DEFAULT_UNDERLAY_ICON + underlay_appearance.icon_state = DEFAULT_UNDERLAY_ICON_STATE underlays = U diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index e95a61cec32..49be0a12c3b 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -55,20 +55,25 @@ GLOBAL_VAR(command_name) return capitalize(name) /proc/station_name() - if(GLOB.station_name) - return GLOB.station_name + if(!GLOB.station_name) + var/newname + if(config && config.station_name) + newname = config.station_name + else + newname = new_station_name() - if(config && config.station_name) - GLOB.station_name = config.station_name - else - GLOB.station_name = new_station_name() + set_station_name(newname) + + return GLOB.station_name + +/proc/set_station_name(newname) + GLOB.station_name = newname if(config && config.server_name) world.name = "[config.server_name][config.server_name==GLOB.station_name ? "" : ": [GLOB.station_name]"]" else world.name = GLOB.station_name - return GLOB.station_name /proc/new_station_name() var/random = rand(1,5) @@ -235,10 +240,3 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. code_phrase += ", " return code_phrase - -/proc/change_station_name(designation) - if(config && config.server_name) - world.name = "[config.server_name]: [designation]" - else - world.name = designation - GLOB.station_name = designation diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 92636ee9dc1..2444f84a6bc 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -72,9 +72,8 @@ return . //Splits the text of a file at seperator and returns them in a list. -/proc/file2list(filename, seperator="\n") - return splittext(return_file_text(filename),seperator) - +/world/proc/file2list(filename, seperator="\n") + return splittext(file2text(filename),seperator) //Turns a direction into text /proc/dir2text(direction) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 35e66d5f4b7..a7338a0c5d2 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1138,13 +1138,13 @@ B --><-- A if(location == src) return 1 -/proc/flick_overlay_static(image/I, atom/A, duration) +/proc/flick_overlay_static(O, atom/A, duration) set waitfor = 0 - if(!A || !I) + if(!A || !O) return - A.add_overlay(I) + A.add_overlay(O) sleep(duration) - A.cut_overlay(I) + A.cut_overlay(O) /proc/get_areas_in_z(zlevel) . = list() diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm new file mode 100644 index 00000000000..849c5248a05 --- /dev/null +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -0,0 +1,108 @@ +//How to balance this table +//------------------------- +//The total added weight of all the entries should be (roughly) equal to the total number of lootdrops +//(take in account those that spawn more than one object!) +// +//While this is random, probabilities tells us that item distribution will have a tendency to look like +//the content of the weighted table that created them. +//The less lootdrops, the less even the distribution. +// +//If you want to give items a weight <1 you can multiply all the weights by 10 +// +//the "" entry will spawn nothing, if you increase this value, +//ensure that you balance it with more spawn points + +//table data: +//----------- +//aft maintenance: 24 items, 18 spots 2 extra (28/08/2014) +//asmaint: 16 items, 11 spots 0 extra (08/08/2014) +//asmaint2: 36 items, 26 spots 2 extra (28/08/2014) +//fpmaint: 5 items, 4 spots 0 extra (08/08/2014) +//fpmaint2: 12 items, 11 spots 2 extra (28/08/2014) +//fsmaint: 0 items, 0 spots 0 extra (08/08/2014) +//fsmaint2: 40 items, 27 spots 5 extra (28/08/2014) +//maintcentral: 2 items, 2 spots 0 extra (08/08/2014) +//port: 5 items, 5 spots 0 extra (08/08/2014) + +GLOBAL_LIST_INIT(maintenance_loot, list( + /obj/item/bodybag = 1, + /obj/item/clothing/glasses/meson = 2, + /obj/item/clothing/glasses/sunglasses = 1, + /obj/item/clothing/gloves/color/fyellow = 1, + /obj/item/clothing/head/hardhat = 1, + /obj/item/clothing/head/hardhat/red = 1, + /obj/item/clothing/head/that = 1, + /obj/item/clothing/head/ushanka = 1, + /obj/item/clothing/head/welding = 1, + /obj/item/clothing/mask/gas = 15, + /obj/item/clothing/suit/hazardvest = 1, + /obj/item/clothing/under/rank/vice = 1, + /obj/item/device/assembly/prox_sensor = 4, + /obj/item/device/assembly/timer = 3, + /obj/item/device/flashlight = 4, + /obj/item/device/flashlight/pen = 1, + /obj/item/device/flashlight/glowstick/random = 4, + /obj/item/device/multitool = 2, + /obj/item/device/radio/off = 2, + /obj/item/device/t_scanner = 5, + /obj/item/weapon/airlock_painter = 1, + /obj/item/stack/cable_coil/random = 4, + /obj/item/stack/cable_coil/random/five = 6, + /obj/item/stack/medical/bruise_pack = 1, + /obj/item/stack/rods/ten = 9, + /obj/item/stack/rods/twentyfive = 1, + /obj/item/stack/rods/fifty = 1, + /obj/item/stack/sheet/cardboard = 2, + /obj/item/stack/sheet/metal/twenty = 1, + /obj/item/stack/sheet/mineral/plasma = 1, + /obj/item/stack/sheet/rglass = 1, + /obj/item/weapon/book/manual/wiki/engineering_construction = 1, + /obj/item/weapon/book/manual/wiki/engineering_hacking = 1, + /obj/item/clothing/head/cone = 1, + /obj/item/weapon/coin/silver = 1, + /obj/item/weapon/coin/twoheaded = 1, + /obj/item/weapon/poster/random_contraband = 1, + /obj/item/weapon/poster/random_official = 1, + /obj/item/weapon/crowbar = 1, + /obj/item/weapon/crowbar/red = 1, + /obj/item/weapon/extinguisher = 11, + //obj/item/weapon/gun/ballistic/revolver/russian = 1, //disabled until lootdrop is a proper world proc. + /obj/item/weapon/hand_labeler = 1, + /obj/item/weapon/paper/crumpled = 1, + /obj/item/weapon/pen = 1, + /obj/item/weapon/reagent_containers/spray/pestspray = 1, + /obj/item/weapon/reagent_containers/glass/rag = 3, + /obj/item/weapon/stock_parts/cell = 3, + /obj/item/weapon/storage/belt/utility = 2, + /obj/item/weapon/storage/box = 2, + /obj/item/weapon/storage/box/cups = 1, + /obj/item/weapon/storage/box/donkpockets = 1, + /obj/item/weapon/storage/box/lights/mixed = 3, + /obj/item/weapon/storage/box/hug/medical = 1, + /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 1, + /obj/item/weapon/storage/toolbox/mechanical = 1, + /obj/item/weapon/screwdriver = 3, + /obj/item/weapon/tank/internals/emergency_oxygen = 2, + /obj/item/weapon/vending_refill/cola = 1, + /obj/item/weapon/weldingtool = 3, + /obj/item/weapon/wirecutters = 1, + /obj/item/weapon/wrench = 4, + /obj/item/weapon/relic = 3, + /obj/item/weaponcrafting/receiver = 2, + /obj/item/clothing/head/cone = 2, + /obj/item/weapon/grenade/smokebomb = 2, + /obj/item/device/geiger_counter = 3, + /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 1, + /obj/item/device/radio/headset = 1, + /obj/item/device/assembly/infra = 1, + /obj/item/device/assembly/igniter = 2, + /obj/item/device/assembly/signaler = 2, + /obj/item/device/assembly/mousetrap = 2, + /obj/item/weapon/reagent_containers/syringe = 2, + /obj/item/clothing/gloves/color/random = 8, + /obj/item/clothing/shoes/laceup = 1, + /obj/item/weapon/storage/secure/briefcase = 3, + /obj/item/weapon/storage/toolbox/artistic = 2, + /obj/item/toy/eightball = 1, + "" = 3 + )) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index 7b34552e35d..0853a10aeb7 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -1,23 +1,23 @@ -GLOBAL_LIST_INIT(ai_names, file2list("config/names/ai.txt")) -GLOBAL_LIST_INIT(wizard_first, file2list("config/names/wizardfirst.txt")) -GLOBAL_LIST_INIT(wizard_second, file2list("config/names/wizardsecond.txt")) -GLOBAL_LIST_INIT(ninja_titles, file2list("config/names/ninjatitle.txt")) -GLOBAL_LIST_INIT(ninja_names, file2list("config/names/ninjaname.txt")) -GLOBAL_LIST_INIT(commando_names, file2list("config/names/death_commando.txt")) -GLOBAL_LIST_INIT(first_names_male, file2list("config/names/first_male.txt")) -GLOBAL_LIST_INIT(first_names_female, file2list("config/names/first_female.txt")) -GLOBAL_LIST_INIT(last_names, file2list("config/names/last.txt")) -GLOBAL_LIST_INIT(lizard_names_male, file2list("config/names/lizard_male.txt")) -GLOBAL_LIST_INIT(lizard_names_female, file2list("config/names/lizard_female.txt")) -GLOBAL_LIST_INIT(clown_names, file2list("config/names/clown.txt")) -GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt")) -GLOBAL_LIST_INIT(carp_names, file2list("config/names/carp.txt")) -GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt")) -GLOBAL_LIST_INIT(plasmaman_names, file2list("config/names/plasmaman.txt")) +GLOBAL_LIST_INIT(ai_names, world.file2list("config/names/ai.txt")) +GLOBAL_LIST_INIT(wizard_first, world.file2list("config/names/wizardfirst.txt")) +GLOBAL_LIST_INIT(wizard_second, world.file2list("config/names/wizardsecond.txt")) +GLOBAL_LIST_INIT(ninja_titles, world.file2list("config/names/ninjatitle.txt")) +GLOBAL_LIST_INIT(ninja_names, world.file2list("config/names/ninjaname.txt")) +GLOBAL_LIST_INIT(commando_names, world.file2list("config/names/death_commando.txt")) +GLOBAL_LIST_INIT(first_names_male, world.file2list("config/names/first_male.txt")) +GLOBAL_LIST_INIT(first_names_female, world.file2list("config/names/first_female.txt")) +GLOBAL_LIST_INIT(last_names, world.file2list("config/names/last.txt")) +GLOBAL_LIST_INIT(lizard_names_male, world.file2list("config/names/lizard_male.txt")) +GLOBAL_LIST_INIT(lizard_names_female, world.file2list("config/names/lizard_female.txt")) +GLOBAL_LIST_INIT(clown_names, world.file2list("config/names/clown.txt")) +GLOBAL_LIST_INIT(mime_names, world.file2list("config/names/mime.txt")) +GLOBAL_LIST_INIT(carp_names, world.file2list("config/names/carp.txt")) +GLOBAL_LIST_INIT(golem_names, world.file2list("config/names/golem.txt")) +GLOBAL_LIST_INIT(plasmaman_names, world.file2list("config/names/plasmaman.txt")) GLOBAL_LIST_INIT(posibrain_names, list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","JNLG","KOS","TKRG","XAL","STLP","CBOS","DUNC","FXMC","DRSD","COI")) -GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt")) -GLOBAL_LIST_INIT(adjectives, file2list("config/names/adjectives.txt")) +GLOBAL_LIST_INIT(verbs, world.file2list("config/names/verbs.txt")) +GLOBAL_LIST_INIT(adjectives, world.file2list("config/names/adjectives.txt")) //loaded on startup because of " //would include in rsc if ' was used diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 407137dfcfd..96a07bad24c 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -57,8 +57,7 @@ /obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon() cut_overlays() - var/image/img = image(hide_icon, src, hidden ? show_state : hide_state) - add_overlay(img) + add_overlay(mutable_appearance(hide_icon, hidden ? show_state : hide_state)) /obj/screen/movable/action_button/MouseEntered(location,control,params) diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index df0894403c2..4bf86f414bc 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -261,9 +261,9 @@ for(var/y in -count to count) if(x == 0 && y == 0) continue - var/image/I = image(icon, null, icon_state) - I.transform = matrix(1, 0, x*480, 0, 1, y*480) - new_overlays += I + var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state) + texture_overlay.transform = matrix(1, 0, x*480, 0, 1, y*480) + new_overlays += texture_overlay cut_overlays() add_overlay(new_overlays) view_sized = view diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 0c2871a26b0..206a9fabc1a 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -134,21 +134,16 @@ icon_state = icon_empty /obj/screen/inventory/hand - var/image/active_overlay - var/image/handcuff_overlay - var/image/blocked_overlay + var/mutable_appearance/handcuff_overlay + var/static/mutable_appearance/blocked_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "blocked") var/held_index = 0 /obj/screen/inventory/hand/update_icon() ..() - if(!active_overlay) - active_overlay = image("icon"=icon, "icon_state"="hand_active") if(!handcuff_overlay) var/state = (!(held_index % 2)) ? "markus" : "gabrielle" - handcuff_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"=state) - if(!blocked_overlay) - blocked_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"="blocked") + handcuff_overlay = mutable_appearance('icons/mob/screen_gen.dmi', state) cut_overlays() @@ -163,7 +158,7 @@ add_overlay(blocked_overlay) if(held_index == hud.mymob.active_hand_index) - add_overlay(active_overlay) + add_overlay("hand_active") /obj/screen/inventory/hand/Click(location, control, params) @@ -445,7 +440,7 @@ /obj/screen/zone_sel/update_icon(mob/user) cut_overlays() - add_overlay(image('icons/mob/screen_gen.dmi', "[selecting]")) + add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[selecting]")) user.zone_selected = selecting /obj/screen/zone_sel/alien @@ -453,7 +448,7 @@ /obj/screen/zone_sel/alien/update_icon(mob/user) cut_overlays() - add_overlay(image('icons/mob/screen_alien.dmi', "[selecting]")) + add_overlay(mutable_appearance('icons/mob/screen_alien.dmi', "[selecting]")) user.zone_selected = selecting /obj/screen/zone_sel/robot diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 35f12e4dc51..f0f39e68255 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -293,7 +293,7 @@ GLOB.abandon_allowed = respawn /datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) for(var/t in Lines) if(!t) @@ -785,7 +785,7 @@ /datum/configuration/proc/loadmaplist(filename) - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) var/datum/map_config/currentmap = null for(var/t in Lines) @@ -835,7 +835,7 @@ /datum/configuration/proc/loadsql(filename) - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) for(var/t in Lines) if(!t) continue diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index e4dc9f833e0..f37a9159efd 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -2,7 +2,7 @@ /datum/controller/subsystem // Metadata; you should define these. name = "fire coderbus" //name of the subsystem - var/init_order = 0 //order of initialization. Higher numbers are initialized first, lower numbers later. Can be decimal and negative values. + var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep @@ -145,10 +145,11 @@ /datum/controller/subsystem/proc/pause() . = 1 - if (state == SS_RUNNING) - state = SS_PAUSED - else if (state == SS_SLEEPING) - state = SS_PAUSING + switch(state) + if(SS_RUNNING) + state = SS_PAUSED + if(SS_SLEEPING) + state = SS_PAUSING //used to initialize the subsystem AFTER the map has loaded @@ -208,4 +209,4 @@ next_fire = world.time + wait if ("queued_priority") //editing this breaks things. return 0 - . = ..() \ No newline at end of file + . = ..() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 852e28077de..919b4cfce92 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -8,7 +8,7 @@ SUBSYSTEM_DEF(air) name = "Air" - init_order = -1 + init_order = INIT_ORDER_AIR priority = 20 wait = 5 flags = SS_BACKGROUND diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index ac8f51de0ed..607b142c59b 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(assets) name = "Assets" - init_order = -3 + init_order = INIT_ORDER_ASSETS flags = SS_NO_FIRE var/list/cache = list() @@ -11,4 +11,4 @@ SUBSYSTEM_DEF(assets) for(var/client/C in GLOB.clients) addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, cache, FALSE), 10) - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 7f1ee2634b4..4ca35e434d2 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(atoms) name = "Atoms" - init_order = 11 + init_order = INIT_ORDER_ATOMS flags = SS_NO_FIRE var/initialized = INITIALIZATION_INSSATOMS diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index cae880485c9..b99b71ed336 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(events) name = "Events" - init_order = 6 + init_order = INIT_ORDER_EVENTS var/list/control = list() //list of all datum/round_event_control. Used for selecting events based on weight and occurrences. var/list/running = list() //list of all existing /datum/round_event @@ -179,9 +179,13 @@ SUBSYSTEM_DEF(events) if(!holidays) holidays = list() holidays[holiday.name] = holiday + else + qdel(holiday) if(holidays) holidays = shuffle(holidays) + // regenerate station name because holiday prefixes. + set_station_name(new_station_name()) world.update_status() /datum/controller/subsystem/events/proc/toggleWizardmode() diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 83c58950185..84df089973f 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(icon_smooth) name = "Icon Smoothing" - init_order = -5 + init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 priority = 35 flags = SS_TICKER @@ -29,4 +29,4 @@ SUBSYSTEM_DEF(icon_smooth) smooth_icon(A) CHECK_TICK - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index 0f351c84631..fca394924d9 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(ipintel) name = "XKeyScore" - init_order = -10 + init_order = INIT_ORDER_XKEYSCORE flags = SS_NO_FIRE var/enabled = 0 //disable at round start to avoid checking reconnects var/throttle = 0 diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 517c72512cb..137bd2a2c10 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(job) name = "Jobs" - init_order = 14 + init_order = INIT_ORDER_JOBS flags = SS_NO_FIRE var/list/occupations = list() //List of all jobs @@ -448,7 +448,7 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/LoadJobs() - var/jobstext = return_file_text("config/jobs.txt") + var/jobstext = file2text("config/jobs.txt") for(var/datum/job/J in occupations) var/regex/jobs = new("[J.title]=(-1|\\d+),(-1|\\d+)") jobs.Find(jobstext) diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 39147714ba3..eb61e5ef394 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(lighting_update_objects) // List of lighting objects queued fo SUBSYSTEM_DEF(lighting) name = "Lighting" wait = 2 - init_order = -20 + init_order = INIT_ORDER_LIGHTING flags = SS_TICKER var/initialized = FALSE diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index 98527520817..ab941eb1c6b 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(machines) name = "Machines" - init_order = 9 + init_order = INIT_ORDER_MACHINES flags = SS_KEEP_TIMING var/list/processing = list() var/list/currentrun = list() @@ -61,4 +61,4 @@ SUBSYSTEM_DEF(machines) if (istype(SSmachines.processing)) processing = SSmachines.processing if (istype(SSmachines.powernets)) - powernets = SSmachines.powernets \ No newline at end of file + powernets = SSmachines.powernets diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index bae759ac3aa..1499bc5029f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(mapping) name = "Mapping" - init_order = 12 + init_order = INIT_ORDER_MAPPING flags = SS_NO_FIRE var/list/nuke_tiles = list() diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 6c3ce67dc23..10c6f8e5c46 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(minimap) name = "Minimap" - init_order = -2 + init_order = INIT_ORDER_MINIMAP flags = SS_NO_FIRE var/const/MINIMAP_SIZE = 2048 var/const/TILE_SIZE = 8 diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index d9b78a77adf..f87b94bac48 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,6 +1,5 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" - init_order = 4 priority = 100 flags = SS_KEEP_TIMING|SS_NO_INIT @@ -26,4 +25,4 @@ SUBSYSTEM_DEF(mobs) else GLOB.mob_list.Remove(M) if (MC_TICK_CHECK) - return \ No newline at end of file + return diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 11d819d0678..abdeb0e9d35 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(npcpool) var/list/canBeUsed = list() var/list/needsDelegate = list() var/list/needsAssistant = list() - + var/list/processing = list() var/list/currentrun = list() var/stage diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 80517d1e3a1..e1cf992e8b5 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(persistence) name = "Persistence" - init_order = -100 + init_order = INIT_ORDER_PERSISTENCE flags = SS_NO_FIRE var/savefile/secret_satchels var/list/satchel_blacklist = list() //this is a typecache diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index c28dc245fae..1aa76e6b3de 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -3,7 +3,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) flags = SS_TICKER|SS_FIRE_IN_LOBBY wait = 1 priority = 500 - init_order = -6 + init_order = INIT_ORDER_OVERLAY stat_tag = "Ov" currentrun = null @@ -55,7 +55,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) /proc/iconstate2appearance(icon, iconstate) var/static/image/stringbro = new() - var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches + var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches var/list/cached_icon = icon_states_cache[icon] if (cached_icon) var/cached_appearance = cached_icon["[iconstate]"] @@ -91,7 +91,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) new_overlays[i] = iconstate2appearance(icon, cached_overlay) else if(isicon(cached_overlay)) new_overlays[i] = icon2appearance(cached_overlay) - else //image probable + else //image/mutable_appearance probable appearance_bro.appearance = cached_overlay if(!ispath(cached_overlay)) appearance_bro.dir = cached_overlay.dir @@ -99,11 +99,11 @@ PROCESSING_SUBSYSTEM_DEF(overlays) return new_overlays #define NOT_QUEUED_ALREADY (!(flags & OVERLAY_QUEUED)) -#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src; +#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src; /atom/proc/cut_overlays(priority = FALSE) var/list/cached_overlays = our_overlays var/list/cached_priority = priority_overlays - + var/need_compile = FALSE if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays @@ -165,7 +165,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) if(cut_old) cut_overlays() return - + var/list/cached_other = other.our_overlays if(cached_other) if(cut_old || !LAZYLEN(our_overlays)) diff --git a/code/controllers/subsystem/radio.dm b/code/controllers/subsystem/radio.dm index d69575f60f1..de605cb5548 100644 --- a/code/controllers/subsystem/radio.dm +++ b/code/controllers/subsystem/radio.dm @@ -1,6 +1,5 @@ SUBSYSTEM_DEF(radio) name = "Radio" - init_order = 18 flags = SS_NO_FIRE|SS_NO_INIT var/list/datum/radio_frequency/frequencies = list() @@ -39,4 +38,4 @@ SUBSYSTEM_DEF(radio) frequency.frequency = new_frequency frequencies[f_text] = frequency - return frequency \ No newline at end of file + return frequency diff --git a/code/controllers/subsystem/religion.dm b/code/controllers/subsystem/religion.dm index df772925d40..bba7dd082e0 100644 --- a/code/controllers/subsystem/religion.dm +++ b/code/controllers/subsystem/religion.dm @@ -1,6 +1,5 @@ SUBSYSTEM_DEF(religion) name = "Religion" - init_order = 19 flags = SS_NO_FIRE|SS_NO_INIT var/religion @@ -8,4 +7,4 @@ SUBSYSTEM_DEF(religion) var/bible_name var/bible_icon_state var/bible_item_state - var/holy_weapon_type \ No newline at end of file + var/holy_weapon_type diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 4270ff7851f..bc8c14a74d1 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(shuttle) name = "Shuttle" wait = 10 - init_order = 3 + init_order = INIT_ORDER_SHUTTLE flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK var/list/mobile = list() @@ -505,4 +505,4 @@ SUBSYSTEM_DEF(shuttle) centcom_message = SSshuttle.centcom_message ordernum = SSshuttle.ordernum - points = SSshuttle.points \ No newline at end of file + points = SSshuttle.points diff --git a/code/controllers/subsystem/squeak.dm b/code/controllers/subsystem/squeak.dm index a4f0d6e52dd..d94efd0a4ac 100644 --- a/code/controllers/subsystem/squeak.dm +++ b/code/controllers/subsystem/squeak.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(squeak) name = "Squeak" - priority = 40 + init_order = INIT_ORDER_SQUEAK flags = SS_NO_FIRE var/list/exposed_wires = list() diff --git a/code/controllers/subsystem/stickyban.dm b/code/controllers/subsystem/stickyban.dm index b5702455b87..371cf22b3bf 100644 --- a/code/controllers/subsystem/stickyban.dm +++ b/code/controllers/subsystem/stickyban.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(stickyban) name = "Sticky Ban" - init_order = -10 + init_order = INIT_ORDER_STICKY_BAN flags = SS_NO_FIRE var/list/cache = list() diff --git a/code/controllers/subsystem/sun.dm b/code/controllers/subsystem/sun.dm index 7f443aadc05..7a3528cc3d9 100644 --- a/code/controllers/subsystem/sun.dm +++ b/code/controllers/subsystem/sun.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(sun) name = "Sun" wait = 600 - init_order = 2 flags = SS_NO_TICK_CHECK|SS_NO_INIT var/angle var/dx diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index edec49bcbbb..862dfb0f98d 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 - init_order = 16 flags = SS_NO_INIT|SS_FIRE_IN_LOBBY priority = 110 diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 5d572f8a07a..e23edfae658 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(ticker) name = "Ticker" - init_order = 13 + init_order = INIT_ORDER_TICKER priority = 200 flags = SS_FIRE_IN_LOBBY|SS_KEEP_TIMING @@ -60,7 +60,7 @@ SUBSYSTEM_DEF(ticker) var/list/round_start_events /datum/controller/subsystem/ticker/Initialize(timeofday) - var/list/music = file2list(ROUND_START_MUSIC_LIST, "\n") + var/list/music = world.file2list(ROUND_START_MUSIC_LIST, "\n") login_music = pick(music) if(!GLOB.syndicate_code_phrase) @@ -604,8 +604,8 @@ SUBSYSTEM_DEF(ticker) if(selected_tip) m = selected_tip else - var/list/randomtips = file2list("config/tips.txt") - var/list/memetips = file2list("config/sillytips.txt") + var/list/randomtips = world.file2list("config/tips.txt") + var/list/memetips = world.file2list("config/sillytips.txt") if(randomtips.len && prob(95)) m = pick(randomtips) else if(memetips.len) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 6a63f090e56..55ebbfa3524 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(timer) name = "Timer" wait = 1 //SS_TICKER subsystem, so wait is in ticks - init_order = 1 + init_order = INIT_ORDER_TIMER flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_NO_INIT diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 30784297109..d9f4ef99386 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -36,7 +36,8 @@ SUBSYSTEM_DEF(title) break file_path = "config/title_screens/images/[pick(title_screens)]" - icon = new(file_path) + + icon = new(fcopy_rsc(file_path)) if(splash_turf) splash_turf.icon = icon diff --git a/code/datums/action.dm b/code/datums/action.dm index bd18d646e2d..08239492f33 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -110,12 +110,8 @@ /datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button) if(icon_icon && button_icon_state && current_button.button_icon_state != button_icon_state) - var/image/img - img = image(icon_icon, current_button, button_icon_state) - img.pixel_x = 0 - img.pixel_y = 0 current_button.cut_overlays(TRUE) - current_button.add_overlay(img) + current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) current_button.button_icon_state = button_icon_state diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 576d1080bb7..30b839cef0e 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -190,7 +190,7 @@ /datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws. ..() - for(var/line in file2list("config/silicon_laws.txt")) + for(var/line in world.file2list("config/silicon_laws.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) diff --git a/code/datums/antagonists/datum_clockcult.dm b/code/datums/antagonists/datum_clockcult.dm index 89be685f761..0c39b5a9899 100644 --- a/code/datums/antagonists/datum_clockcult.dm +++ b/code/datums/antagonists/datum_clockcult.dm @@ -83,7 +83,7 @@ var/mob/living/silicon/ai/A = S A.can_be_carded = FALSE A.requires_power = POWER_REQ_CLOCKCULT - var/list/AI_frame = list(image('icons/mob/clockwork_mobs.dmi', A, "aiframe")) //make the AI's cool frame + var/list/AI_frame = list(mutable_appearance('icons/mob/clockwork_mobs.dmi', "aiframe")) //make the AI's cool frame for(var/d in GLOB.cardinal) AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow A.add_overlay(AI_frame) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 75c8379524d..c798f352189 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -31,9 +31,9 @@ if(speak_emote) D.speak_emote = speak_emote -/datum/dog_fashion/proc/get_image(var/dir) +/datum/dog_fashion/proc/get_overlay(var/dir) if(icon_file && obj_icon_state) - var/image/corgI = image(icon_file, icon_state = obj_icon_state, dir = dir) + var/image/corgI = image(icon_file, obj_icon_state, dir = dir) corgI.alpha = obj_alpha corgI.color = obj_color return corgI diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index f285effc0fb..f24cb7ab6d5 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -6,9 +6,9 @@ var/date /datum/getrev/New() - var/head_file = return_file_text(".git/logs/HEAD") + var/head_file = file2text(".git/logs/HEAD") if(SERVERTOOLS && fexists("..\\prtestjob.lk")) - var/list/tmp = file2list("..\\prtestjob.lk") + var/list/tmp = world.file2list("..\\prtestjob.lk") for(var/I in tmp) if(I) testmerge |= I diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 309006d0dfc..d1cbb90c27a 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -38,10 +38,11 @@ GLOBAL_LIST_INIT(huds, list( /datum/atom_hud/proc/remove_from_hud(atom/A) if(!A) - return + return FALSE for(var/mob/M in hudusers) remove_from_single_hud(M, A) hudatoms -= A + return TRUE /datum/atom_hud/proc/remove_from_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client if(!M || !M.client || !A) @@ -52,16 +53,17 @@ GLOBAL_LIST_INIT(huds, list( /datum/atom_hud/proc/add_hud_to(mob/M) if(!M) return - hudusers |= M + hudusers[M] = TRUE for(var/atom/A in hudatoms) add_to_single_hud(M, A) /datum/atom_hud/proc/add_to_hud(atom/A) if(!A) - return + return FALSE hudatoms |= A for(var/mob/M in hudusers) add_to_single_hud(M, A) + return TRUE /datum/atom_hud/proc/add_to_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client if(!M || !M.client || !A) @@ -77,8 +79,8 @@ GLOBAL_LIST_INIT(huds, list( for(var/datum/gang/G in SSticker.mode.gangs) gang_huds += G.ganghud - for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds)) - if(src in hud.hudusers) + for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds|GLOB.active_alternate_appearances)) + if(hud.hudusers[src]) hud.add_hud_to(src) /mob/dead/new_player/reload_huds() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b4844b32bf4..e78d996f643 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1192,14 +1192,17 @@ log_admin("[key_name(usr)] turned [current] into abductor.") SSticker.mode.update_abductor_icons_added(src) if("equip") + if(!ishuman(current)) + to_chat(usr, "This only works on humans!") + return + + var/mob/living/carbon/human/H = current var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") if(gear) - var/datum/game_mode/abduction/temp = new - temp.equip_common(current) if(gear=="Agent") - temp.equip_agent(current) + H.equipOutfit(/datum/outfit/abductor/agent) else - temp.equip_scientist(current) + H.equipOutfit(/datum/outfit/abductor/scientist) else if (href_list["monkey"]) var/mob/living/L = current @@ -1468,11 +1471,8 @@ H.set_species(/datum/species/abductor) var/datum/species/abductor/S = H.dna.species - switch(role) - if("Agent") - S.agent = 1 - if("Scientist") - S.scientist = 1 + if(role == "Scientist") + S.scientist = TRUE S.team = team var/list/obj/effect/landmark/abductor/agent_landmarks = new @@ -1489,13 +1489,10 @@ if(teleport=="Yes") switch(role) if("Agent") - S.agent = 1 L = agent_landmarks[team] - H.loc = L.loc if("Scientist") - S.scientist = 1 - L = agent_landmarks[team] - H.loc = L.loc + L = scientist_landmarks[team] + H.forceMove(L.loc) /datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) spell_list += S diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm new file mode 100644 index 00000000000..1cb3a97d9f7 --- /dev/null +++ b/code/datums/mutable_appearance.dm @@ -0,0 +1,18 @@ +// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM. +// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity. +// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug. + +// Mutable appearances are children of images, just so you know. + +/mutable_appearance/New() + ..() + plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE + // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var + +// Helper similar to image() +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER) + var/mutable_appearance/MA = new() + MA.icon = icon + MA.icon_state = icon_state + MA.layer = layer + return MA \ No newline at end of file diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 55f2b03161c..caab422e8b1 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -15,7 +15,7 @@ GLOBAL_LIST_EMPTY(mutations_list) var/lowest_value = 256 * 8 var/text_gain_indication = "" var/text_lose_indication = "" - var/list/visual_indicators = list() + var/list/mutable_appearance/visual_indicators = list() var/layer_used = MUTATIONS_LAYER //which mutation layer to use var/list/species_allowed = list() //to restrict mutation to only certain species var/health_req //minimum health required to acquire the mutation @@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/telekinesis/New() ..() - visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead", "layer"=-MUTATIONS_LAYER) + visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER) /datum/mutation/human/telekinesis/get_visual_indicator(mob/living/carbon/human/owner) return visual_indicators[1] @@ -180,7 +180,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/cold_resistance/New() ..() - visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="fire", "layer"=-MUTATIONS_LAYER) + visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER) /datum/mutation/human/cold_resistance/get_visual_indicator(mob/living/carbon/human/owner) return visual_indicators[1] @@ -618,7 +618,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/laser_eyes/New() ..() - visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes", "layer"=-FRONT_MUTATIONS_LAYER) + visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "lasereyes", -FRONT_MUTATIONS_LAYER) /datum/mutation/human/laser_eyes/get_visual_indicator(mob/living/carbon/human/owner) return visual_indicators[1] @@ -640,11 +640,11 @@ GLOBAL_LIST_EMPTY(mutations_list) var/list/mut_overlay = list() if(overlays_standing[CM.layer_used]) mut_overlay = overlays_standing[CM.layer_used] - var/image/V = CM.get_visual_indicator(src) + var/mutable_appearance/V = CM.get_visual_indicator(src) if(!mut_overlay.Find(V)) //either we lack the visual indicator or we have the wrong one remove_overlay(CM.layer_used) - for(var/image/I in CM.visual_indicators) - mut_overlay.Remove(I) + for(var/mutable_appearance/MA in CM.visual_indicators) + mut_overlay.Remove(MA) mut_overlay |= V overlays_standing[CM.layer_used] = mut_overlay apply_overlay(CM.layer_used) diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 12df20891fb..3a54db4e0a9 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -129,13 +129,6 @@ suffix = "lavaland_surface_ufo_crash.dmm" cost = 5 -/datum/map_template/ruin/lavaland/ww_vault - name = "Wishgranter Vault" - id = "ww-vault" - description = "Scrawled on the large double doors is both a message and a warning: 'meat grinder requires sacri...'. You're not so sure about this anymore." - suffix = "lavaland_surface_ww_vault.dmm" - cost = 20 - /datum/map_template/ruin/lavaland/xeno_nest name = "Xenomorph Nest" id = "xeno-nest" diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 8722789d77a..ac23d61e7fa 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -1,164 +1,108 @@ -/* - Alternate Appearances! By RemieRichards - A framework for replacing an atom (and it's overlays) with an override = 1 image, that's less shit! - Example uses: - * hallucinating all mobs looking like skeletons - * people wearing cardborg suits appearing as Standard Cyborgs to the other Silicons - * !!use your imagination!! - -*/ - - -//This datum is built on-the-fly by some of the procs below -//no need to instantiate it -/datum/alternate_appearance - var/key = "" - var/image/img - var/list/viewers = list() - var/atom/owner = null - - -/* - Displays the alternate_appearance - displayTo - a list of MOBS to show this appearance to -*/ -/datum/alternate_appearance/proc/display_to(list/displayTo) - if(!displayTo || !displayTo.len) - return - for(var/m in displayTo) - var/mob/M = m - if(!M.viewing_alternate_appearances) - M.viewing_alternate_appearances = list() - viewers |= M - var/list/AAsiblings = M.viewing_alternate_appearances[key] - if(!AAsiblings) - AAsiblings = list() - M.viewing_alternate_appearances[key] = AAsiblings - AAsiblings |= src - if(M.client) - M.client.images |= img - -/* - Hides the alternate_appearance - hideFrom - optional list of MOBS to hide it from the list's mobs specifically -*/ -/datum/alternate_appearance/proc/hide(list/hideFrom) - var/list/hiding = viewers - if(hideFrom) - hiding = hideFrom - - for(var/m in hiding) - var/mob/M = m - if(M.client) - M.client.images -= img - if(M.viewing_alternate_appearances && M.viewing_alternate_appearances.len) - var/list/AAsiblings = M.viewing_alternate_appearances[key] - if(AAsiblings) - AAsiblings -= src - if(!AAsiblings.len) - M.viewing_alternate_appearances -= key - if(!M.viewing_alternate_appearances.len) - M.viewing_alternate_appearances = null - viewers -= M - - -/* - Removes the alternate_appearance from its owner's alternate_appearances list, hiding it also -*/ -/datum/alternate_appearance/proc/remove() - hide() - if(owner && owner.alternate_appearances) - owner.alternate_appearances -= key - if(!owner.alternate_appearances.len) - owner.alternate_appearances = null - - -/datum/alternate_appearance/Destroy() - remove() - return ..() - +GLOBAL_LIST_EMPTY(active_alternate_appearances) /atom - var/list/alternate_appearances //the alternate appearances we own - var/list/viewing_alternate_appearances //this is an assoc list of lists, the keys being the AA's key - //inside these lists are the AAs themselves, this is to allow the atom to see multiple of the same type of AA - //eg: two (or more) people disguised as cardborgs, or two (or more) people disguised as plants + var/list/alternate_appearances -/* - Builds an alternate_appearance datum for the supplied args, optionally displaying it straight away - key - the key to the assoc list of key = /datum/alternate_appearances - img - the image file to be the "alternate appearance" - WORKS BEST IF: - * it has override = 1 set - * the image's loc is the atom that will use the appearance (otherwise... it's not exactly an alt appearance of this atom is it?) - displayTo - optional list of MOBS to display to immediately - - Example: - var/image/I = image(icon = 'disguise.dmi', icon_state = "disguise", loc = src) - I.override = 1 - add_alt_appearance("super_secret_disguise", I, players) - -*/ -/atom/proc/add_alt_appearance(key, img, list/displayTo = list()) - if(!key || !img) - return - if(!alternate_appearances) - alternate_appearances = list() - - var/datum/alternate_appearance/AA = new() - AA.img = img - AA.key = key - AA.owner = src - - alternate_appearances[key] = AA - if(displayTo && displayTo.len) - display_alt_appearance(key, displayTo) - - -////////////// -// WRAPPERS // -////////////// - -/* - Removes an alternate_appearance from src's alternate_appearances list - Wrapper for: alternate_appearance/remove() - key - the key to the assoc list of key = /datum/alternate_appearance -*/ /atom/proc/remove_alt_appearance(key) if(alternate_appearances) - if(alternate_appearances[key]) - var/datum/alternate_appearance/AA = alternate_appearances[key] - qdel(AA) + for(var/K in alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K] + if(AA.appearance_key == key) + AA.remove_from_hud(src) - -/* - Displays an alternate appearance from src's alternate_appearances list - Wrapper for: alternate_appearance/display_to() - key - the key to the assoc list of key = /datum/alternate_appearance - displayTo - a list of MOBS to show this appearance to -*/ -/atom/proc/display_alt_appearance(key, list/displayTo) - if(!alternate_appearances || !key) +/atom/proc/add_alt_appearance(type, key, ...) + if(!type || !key) return - var/datum/alternate_appearance/AA = alternate_appearances[key] - if(!AA || !AA.img) + if(alternate_appearances && alternate_appearances[key]) return - AA.display_to(displayTo) + var/list/arguments = args.Copy(2) + new type(arglist(arguments)) -/* - Hides an alternate appearance from src's alternate_appearances list - Wrapper for: alternate_appearance/hide() - key - the key to the assoc list of key = /datum/alternate_appearance - hideFrom - optional list of MOBS to hide it from the list's mobs specifically -*/ -/atom/proc/hide_alt_appearance(key, list/hideFrom) - if(!alternate_appearances || !key) - return - var/datum/alternate_appearance/AA = alternate_appearances[key] - if(!AA) - return - AA.hide(hideFrom) +/datum/atom_hud/alternate_appearance + var/appearance_key + +/datum/atom_hud/alternate_appearance/New(key) + ..() + GLOB.active_alternate_appearances += src + appearance_key = key + +/datum/atom_hud/alternate_appearance/Destroy() + if(!QDELETED(src)) + for(var/v in hudusers) + remove_hud_from(v) + for(var/v in hudatoms) + remove_from_hud(v) + GLOB.active_alternate_appearances -= src + return ..() + +/datum/atom_hud/alternate_appearance/proc/onNewMob(mob/M) + if(mobShouldSee(M)) + add_hud_to(M) + +/datum/atom_hud/alternate_appearance/proc/mobShouldSee(mob/M) + return FALSE + +/datum/atom_hud/alternate_appearance/add_to_hud(atom/A, image/I) + . = ..() + if(.) + LAZYINITLIST(A.alternate_appearances) + A.alternate_appearances[appearance_key] = src + +/datum/atom_hud/alternate_appearance/remove_from_hud(atom/A) + . = ..() + if(.) + LAZYREMOVE(A.alternate_appearances, appearance_key) +//an alternate appearance that attaches a single image to a single atom +/datum/atom_hud/alternate_appearance/basic + var/atom/target + var/image/theImage + +/datum/atom_hud/alternate_appearance/basic/New(key, image/I, target_sees_appearance = TRUE) + ..() + theImage = I + target = I.loc + hud_icons = list(appearance_key) + add_to_hud(target, I) + if(target_sees_appearance && ismob(target)) + add_hud_to(target) + +/datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A) + A.hud_list[appearance_key] = theImage + . = ..() + +/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A) + . = ..() + A.hud_list -= appearance_key + +/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A) + . = ..() + if(.) + qdel(src) + +/datum/atom_hud/alternate_appearance/basic/everyone + +/datum/atom_hud/alternate_appearance/basic/everyone/New() + ..() + for(var/mob in GLOB.player_list) + if(mob) + add_hud_to(mob) + +/datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M) + return TRUE + +/datum/atom_hud/alternate_appearance/basic/silicons + +/datum/atom_hud/alternate_appearance/basic/silicons/New() + ..() + for(var/mob in GLOB.silicon_mobs) + if(mob) + add_hud_to(mob) + +/datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M) + if(issilicon(M)) + return TRUE + return FALSE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f34e532fb3e..bfa51a09de7 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -79,15 +79,10 @@ /atom/Destroy() if(alternate_appearances) - for(var/aakey in alternate_appearances) - var/datum/alternate_appearance/AA = alternate_appearances[aakey] - qdel(AA) - alternate_appearances = null - if(viewing_alternate_appearances) - for(var/aakey in viewing_alternate_appearances) - for(var/aa in viewing_alternate_appearances[aakey]) - var/datum/alternate_appearance/AA = aa - AA.hide(list(src)) + for(var/K in alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K] + AA.remove_from_hud(src) + if(reagents) qdel(reagents) @@ -500,6 +495,10 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/mech_melee_attack(obj/mecha/M) return +//If a mob logouts/logins in side of an object you can use this proc +/atom/proc/on_log(login) + if(loc) + loc.on_log(login) /* diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 9c12f5d6712..f96d6eb8a23 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -125,6 +125,7 @@ var/datum/proximity_monitor/proximity_monitor = src.proximity_monitor if(proximity_monitor) proximity_monitor.HandleMove() + return 1 /atom/movable/proc/clean_on_move() @@ -175,7 +176,7 @@ if(stationloving && force) STOP_PROCESSING(SSinbounds, src) - + QDEL_NULL(proximity_monitor) . = ..() @@ -627,4 +628,4 @@ /atom/movable/proc/ConveyorMove(movedir) set waitfor = FALSE if(!anchored && has_gravity()) - step(src, movedir) \ No newline at end of file + step(src, movedir) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index af970e3bf19..1f73b474275 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -49,7 +49,7 @@ /datum/mind/proc/leave_all_antag_huds() for(var/datum/atom_hud/antag/hud in GLOB.huds) - if(current in hud.hudusers) + if(hud.hudusers[current]) hud.leave_hud(current) /datum/atom_hud/antag/gang diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 7a8bc7f517f..46853995cb3 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -179,11 +179,11 @@ remove_atom_colour(FIXED_COLOUR_PRIORITY) if(is_zombie) copy_overlays(oldguy, TRUE) - var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head") + var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head") if(overmind) - I.color = overmind.blob_reagent_datum.complementary_color + blob_head_overlay.color = overmind.blob_reagent_datum.complementary_color color = initial(color)//looks better. - add_overlay(I) + add_overlay(blob_head_overlay) /mob/living/simple_animal/hostile/blob/blobspore/weak name = "fragile blob spore" diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 7ae47f4c0e6..6ee0a56ceec 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -33,12 +33,11 @@ /obj/structure/blob/core/update_icon() cut_overlays() color = null - var/image/I = new('icons/mob/blob.dmi', "blob") + var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") if(overmind) - I.color = overmind.blob_reagent_datum.color - add_overlay(I) - var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay") - add_overlay(C) + blob_overlay.color = overmind.blob_reagent_datum.color + add_overlay(blob_overlay) + add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay")) /obj/structure/blob/core/Destroy() GLOB.blob_cores -= src diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index d778323ac23..ba92b7e03f5 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -21,12 +21,11 @@ /obj/structure/blob/node/update_icon() cut_overlays() color = null - var/image/I = new('icons/mob/blob.dmi', "blob") + var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") if(overmind) - I.color = overmind.blob_reagent_datum.color - add_overlay(I) - var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") - add_overlay(C) + blob_overlay.color = overmind.blob_reagent_datum.color + add_overlay(blob_overlay) + add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay")) /obj/structure/blob/node/Destroy() GLOB.blob_nodes -= src diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 3ae9e3e8d63..f9eb16c7a92 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -307,7 +307,7 @@ /obj/structure/blob/examine(mob/user) ..() var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - if(user.research_scanner || (user in hud_to_check.hudusers)) + if(user.research_scanner || hud_to_check.hudusers[user]) to_chat(user, "Your HUD displays an extensive report...
") chemeffectreport(user) typereport(user) diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm index 1ff0bccb7b2..838210eb586 100644 --- a/code/game/gamemodes/changeling/evolution_menu.dm +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -74,6 +74,11 @@ if(ishuman(C)) var/datum/changelingprofile/prof = mind.changeling.add_new_profile(C, src) mind.changeling.first_prof = prof + + var/obj/item/organ/brain/B = C.getorganslot("brain") + if(B) + B.vital = FALSE + B.decoy_override = TRUE return 1 /datum/changeling/proc/reset() diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/game/gamemodes/changeling/powers/regenerate.dm index 1f07b46e798..bd7308b033a 100644 --- a/code/game/gamemodes/changeling/powers/regenerate.dm +++ b/code/game/gamemodes/changeling/powers/regenerate.dm @@ -27,6 +27,9 @@ C.emote("scream") C.regenerate_limbs(1) C.regenerate_organs() + if(!user.getorganslot("brain")) + var/obj/item/organ/brain/changeling_brain/B = new() + B.Insert(C) if(ishuman(user)) var/mob/living/carbon/human/H = user H.restore_blood() diff --git a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm index 31b88010281..1203c7119a7 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm @@ -42,8 +42,7 @@ icon_state = "geisbinding" mob_layer = M.layer layer = M.layer - 0.01 - var/image/GB = new('icons/effects/clockwork_effects.dmi', src, "geisbinding_top", M.layer + 0.01) - add_overlay(GB) + add_overlay(mutable_appearance('icons/effects/clockwork_effects.dmi', "geisbinding_top", M.layer + 0.01)) for(var/obj/item/I in M.held_items) M.dropItemToGround(I) for(var/i in M.get_empty_held_indexes()) diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index ffc3d5e1a14..9b2d868730e 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -25,7 +25,7 @@ START_PROCESSING(SSobj, src) send_to_playing_players("\"[text2ratvar("ONCE AGAIN MY LIGHT SHALL SHINE ACROSS THIS PATHETIC REALM")]!!\"") send_to_playing_players('sound/effects/ratvar_reveal.ogg') - var/image/alert_overlay = image('icons/effects/clockwork_effects.dmi', "ratvar_alert") + var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert") var/area/A = get_area(src) notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay) INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0) diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm index 727f13fea4a..22ea9e2ce50 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm @@ -14,8 +14,8 @@ debris = list(/obj/item/clockwork/alloy_shards/medium = 1, \ /obj/item/clockwork/alloy_shards/small = 6, \ /obj/item/clockwork/component/replicant_alloy/replication_plate = 1) - var/image/daemon_glow - var/image/component_glow + var/static/mutable_appearance/daemon_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "tinkerglow") + var/static/mutable_appearance/component_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "t_random_component") var/component_id_to_produce var/production_time = 0 //last time we produced a component var/production_cooldown = 120 @@ -119,14 +119,9 @@ . = ..() if(active) var/component_color = get_component_color(component_id_to_produce) - if(!daemon_glow) - daemon_glow = new('icons/obj/clockwork_objects.dmi', "tinkerglow") daemon_glow.color = component_color add_overlay(daemon_glow) - if(!component_glow) - component_glow = new('icons/obj/clockwork_objects.dmi', "t_[component_id_to_produce ? component_id_to_produce :"random_component"]") - else - component_glow.icon_state = "t_[component_id_to_produce ? component_id_to_produce :"random_component"]" + component_glow.icon_state = "t_[component_id_to_produce ? component_id_to_produce :"random_component"]" component_glow.color = component_color add_overlay(component_glow) production_time = world.time + production_cooldown //don't immediately produce when turned on after being off diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 8d87eeb4fcd..a90aeb78bc2 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -201,9 +201,9 @@ return 0 /obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands) - . = list() - if(!isinhands && current_charges) - . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "shield-cult") + . = list() + if(!isinhands && current_charges) + . += mutable_appearance('icons/effects/effects.dmi', "shield-cult", MOB_LAYER + 0.01) /obj/item/clothing/suit/hooded/cultrobes/berserker name = "flagellant's robes" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 2e2ff9c46bc..296b248938f 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -775,11 +775,11 @@ structure_check() searches for nearby cultist structures required for the invoca deltimer(density_timer) air_update_turf(1) if(density) - var/image/I = image(layer = ABOVE_MOB_LAYER, icon = 'icons/effects/effects.dmi', icon_state = "barriershimmer") - I.appearance_flags = RESET_COLOR - I.alpha = 60 - I.color = "#701414" - add_overlay(I) + var/mutable_appearance/shimmer = mutable_appearance('icons/effects/effects.dmi', "barriershimmer", ABOVE_MOB_LAYER) + shimmer.appearance_flags |= RESET_COLOR + shimmer.alpha = 60 + shimmer.color = "#701414" + add_overlay(shimmer) add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY) else cut_overlays() diff --git a/code/game/gamemodes/devil/true_devil/inventory.dm b/code/game/gamemodes/devil/true_devil/inventory.dm index c474eaf1161..778c4216160 100644 --- a/code/game/gamemodes/devil/true_devil/inventory.dm +++ b/code/game/gamemodes/devil/true_devil/inventory.dm @@ -5,7 +5,7 @@ return 0 /mob/living/carbon/true_devil/update_inv_hands() - //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_image should use the down sprite when facing down, left, or right, and the up sprite when facing up. + //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_overlay should use the down sprite when facing down, left, or right, and the up sprite when facing up. remove_overlay(DEVIL_HANDS_LAYER) var/list/hands_overlays = list() var/obj/item/l_hand = get_item_for_held_index(1) //hardcoded 2-hands only, for now. @@ -17,9 +17,9 @@ if(!r_state) r_state = r_hand.icon_state - var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) - hands_overlays += r_hand_image + hands_overlays += r_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.layer = ABOVE_HUD_LAYER @@ -33,9 +33,9 @@ if(!l_state) l_state = l_hand.icon_state - var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) - hands_overlays += l_hand_image + hands_overlays += l_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.layer = ABOVE_HUD_LAYER @@ -54,6 +54,5 @@ /mob/living/carbon/true_devil/apply_overlay(cache_index) - var/image/I = devil_overlays[cache_index] - if(I) - add_overlay(I) + if((. = devil_overlays[cache_index])) + add_overlay(.) diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm new file mode 100644 index 00000000000..aa633e1ef59 --- /dev/null +++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm @@ -0,0 +1,148 @@ +/datum/objective/abductee + dangerrating = 5 + completed = 1 + +/datum/objective/abductee/steal + explanation_text = "Steal all" + +/datum/objective/abductee/steal/New() + var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) + explanation_text+=" [target]." + +/datum/objective/abductee/paint + explanation_text = "The station is hideous. You must color it all" + +/datum/objective/abductee/paint/New() + var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) + explanation_text+= " [color]!" + +/datum/objective/abductee/speech + explanation_text = "Your brain is broken... you can only communicate in" + +/datum/objective/abductee/speech/New() + var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) + explanation_text+= " [style]." + +/datum/objective/abductee/capture + explanation_text = "Capture" + +/datum/objective/abductee/capture/New() + var/list/jobs = SSjob.occupations.Copy() + for(var/datum/job/J in jobs) + if(J.current_positions < 1) + jobs -= J + if(jobs.len > 0) + var/datum/job/target = pick(jobs) + explanation_text += " a [target.title]." + else + explanation_text += " someone." + +/datum/objective/abductee/shuttle + explanation_text = "You must escape the station! Get the shuttle called!" + +/datum/objective/abductee/noclone + explanation_text = "Don't allow anyone to be cloned." + +/datum/objective/abductee/oxygen + explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station." + +/datum/objective/abductee/blazeit + explanation_text = "Your body must be improved. Ingest as many drugs as you can." + +/datum/objective/abductee/yumyum + explanation_text = "You are hungry. Eat as much food as you can find." + +/datum/objective/abductee/insane + explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL" + +/datum/objective/abductee/cannotmove + explanation_text = "Convince the crew that you are a paraplegic." + +/datum/objective/abductee/deadbodies + explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." + +/datum/objective/abductee/floors + explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." + +/datum/objective/abductee/POWERUNLIMITED + explanation_text = "Flood the station's powernet with as much electricity as you can." + +/datum/objective/abductee/pristine + explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." + +/datum/objective/abductee/nowalls + explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" + +/datum/objective/abductee/nations + explanation_text = "Ensure your department prospers over all else." + +/datum/objective/abductee/abductception + explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." + +/datum/objective/abductee/summon + explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." + +/datum/objective/abductee/machine + explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." + +/datum/objective/abductee/calling + explanation_text = "Call forth a spirit from the other side." + +/datum/objective/abductee/calling/New() + var/mob/dead/D = pick(GLOB.dead_mob_list) + if(D) + explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." + +/datum/objective/abductee/social_experiment + explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." + +/datum/objective/abductee/vr + explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR." + +/datum/objective/abductee/pets + explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" + +/datum/objective/abductee/defect + explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crewmates if you can." + +/datum/objective/abductee/promote + explanation_text = "Climb the corporate ladder all the way to the top!" + +/datum/objective/abductee/science + explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe." + +/datum/objective/abductee/build + explanation_text = "Expand the station." + +/datum/objective/abductee/pragnant + explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." + +/datum/objective/abductee/engine + explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." + +/datum/objective/abductee/music + explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" + +/datum/objective/abductee/clown + explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" + +/datum/objective/abductee/party + explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" + +/datum/objective/abductee/pets + explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" + +/datum/objective/abductee/conspiracy + explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" + +/datum/objective/abductee/stalker + explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." + +/datum/objective/abductee/narrator + explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." + +/datum/objective/abductee/lurve + explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" + +/datum/objective/abductee/sixthsense + explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index aa5a688596e..e692654bf3d 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -85,56 +85,14 @@ return 1 /datum/game_mode/abduction/post_setup() - //Spawn Team - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new - agent_landmarks.len = max_teams - scientist_landmarks.len = max_teams - for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list) - if(istype(A,/obj/effect/landmark/abductor/agent)) - agent_landmarks[text2num(A.team)] = A - else if(istype(A,/obj/effect/landmark/abductor/scientist)) - scientist_landmarks[text2num(A.team)] = A - - var/datum/mind/agent - var/obj/effect/landmark/L - var/datum/mind/scientist - var/team_name - var/mob/living/carbon/human/H - var/datum/species/abductor/S for(var/team_number=1,team_number<=abductor_teams,team_number++) - team_name = team_names[team_number] - agent = agents[team_number] - H = agent.current - L = agent_landmarks[team_number] - H.loc = L.loc - H.set_species(/datum/species/abductor) - S = H.dna.species - S.agent = 1 - S.team = team_number - H.real_name = team_name + " Agent" - equip_common(H,team_number) - equip_agent(H,team_number) - greet_agent(agent,team_number) - - scientist = scientists[team_number] - H = scientist.current - L = scientist_landmarks[team_number] - H.loc = L.loc - H.set_species(/datum/species/abductor) - S = H.dna.species - S.scientist = 1 - S.team = team_number - H.real_name = team_name + " Scientist" - equip_common(H,team_number) - equip_scientist(H,team_number) - greet_scientist(scientist,team_number) + post_setup_team(team_number) return ..() //Used for create antag buttons /datum/game_mode/abduction/proc/post_setup_team(team_number) - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new + var/list/obj/effect/landmark/abductor/agent_landmarks = list() + var/list/obj/effect/landmark/abductor/scientist_landmarks = list() agent_landmarks.len = max_teams scientist_landmarks.len = max_teams for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list) @@ -143,39 +101,36 @@ else if(istype(A,/obj/effect/landmark/abductor/scientist)) scientist_landmarks[text2num(A.team)] = A + var/team_name = team_names[team_number] + var/datum/mind/agent var/obj/effect/landmark/L var/datum/mind/scientist - var/team_name var/mob/living/carbon/human/H var/datum/species/abductor/S - team_name = team_names[team_number] agent = agents[team_number] H = agent.current L = agent_landmarks[team_number] - H.loc = L.loc + H.forceMove(L.loc) H.set_species(/datum/species/abductor) S = H.dna.species - S.agent = 1 S.team = team_number H.real_name = team_name + " Agent" - equip_common(H,team_number) - equip_agent(H,team_number) + H.equipOutfit(/datum/outfit/abductor/agent) greet_agent(agent,team_number) scientist = scientists[team_number] H = scientist.current L = scientist_landmarks[team_number] - H.loc = L.loc + H.forceMove(L.loc) H.set_species(/datum/species/abductor) S = H.dna.species - S.scientist = 1 + S.scientist = TRUE S.team = team_number H.real_name = team_name + " Scientist" - equip_common(H,team_number) - equip_scientist(H,team_number) + H.equipOutfit(/datum/outfit/abductor/scientist) greet_scientist(scientist,team_number) @@ -200,57 +155,10 @@ abductor.announce_objectives() -/datum/game_mode/abduction/proc/equip_common(mob/living/carbon/human/agent,team_number) - var/radio_freq = GLOB.SYND_FREQ - - var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(agent) - R.set_frequency(radio_freq) - agent.equip_to_slot_or_del(R, slot_ears) - agent.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(agent), slot_shoes) - agent.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(agent), slot_w_uniform) //they're greys gettit - agent.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(agent), slot_back) - -/datum/game_mode/abduction/proc/get_team_console(team) - var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in GLOB.machines) - if(c.team == team) - console = c - break - return console - -/datum/game_mode/abduction/proc/equip_agent(mob/living/carbon/human/agent,team_number) - if(!team_number) - var/datum/species/abductor/S = agent.dna.species - team_number = S.team - - var/obj/machinery/abductor/console/console = get_team_console(team_number) - var/obj/item/clothing/suit/armor/abductor/vest/V = new /obj/item/clothing/suit/armor/abductor/vest(agent) - if(console!=null) - console.vest = V - V.flags |= NODROP - agent.equip_to_slot_or_del(V, slot_wear_suit) - agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) - agent.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/military/abductor/full(agent), slot_belt) - - -/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number) - if(!team_number) - var/datum/species/abductor/S = scientist.dna.species - team_number = S.team - - var/obj/machinery/abductor/console/console = get_team_console(team_number) - var/obj/item/device/abductor/gizmo/G = new /obj/item/device/abductor/gizmo(scientist) - if(console!=null) - console.gizmo = G - G.console = console - scientist.equip_to_slot_or_del(G, slot_in_backpack) - - var/obj/item/weapon/implant/abductor/beamplant = new /obj/item/weapon/implant/abductor(scientist) - beamplant.implant(scientist) - +/datum/game_mode/abduction/proc/get_team_console(team_number) + for(var/obj/machinery/abductor/console/C in GLOB.machines) + if(C.team == team_number) + return C /datum/game_mode/abduction/check_finished() if(!finished) @@ -336,152 +244,3 @@ var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_ABDUCTOR] hud.leave_hud(alien_mind.current) set_antag_hud(alien_mind.current, null) - -/datum/objective/abductee - dangerrating = 5 - completed = 1 - -/datum/objective/abductee/steal - explanation_text = "Steal all" - -/datum/objective/abductee/steal/New() - var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) - explanation_text+=" [target]." - -/datum/objective/abductee/paint - explanation_text = "The station is hideous. You must color it all" - -/datum/objective/abductee/paint/New() - var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) - explanation_text+= " [color]!" - -/datum/objective/abductee/speech - explanation_text = "Your brain is broken... you can only communicate in" - -/datum/objective/abductee/speech/New() - var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) - explanation_text+= " [style]." - -/datum/objective/abductee/capture - explanation_text = "Capture" - -/datum/objective/abductee/capture/New() - var/list/jobs = SSjob.occupations.Copy() - for(var/datum/job/J in jobs) - if(J.current_positions < 1) - jobs -= J - if(jobs.len > 0) - var/datum/job/target = pick(jobs) - explanation_text += " a [target.title]." - else - explanation_text += " someone." - -/datum/objective/abductee/shuttle - explanation_text = "You must escape the station! Get the shuttle called!" - -/datum/objective/abductee/noclone - explanation_text = "Don't allow anyone to be cloned." - -/datum/objective/abductee/oxygen - explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station." - -/datum/objective/abductee/blazeit - explanation_text = "Your body must be improved. Ingest as many drugs as you can." - -/datum/objective/abductee/yumyum - explanation_text = "You are hungry. Eat as much food as you can find." - -/datum/objective/abductee/insane - explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL" - -/datum/objective/abductee/cannotmove - explanation_text = "Convince the crew that you are a paraplegic." - -/datum/objective/abductee/deadbodies - explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." - -/datum/objective/abductee/floors - explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." - -/datum/objective/abductee/POWERUNLIMITED - explanation_text = "Flood the station's powernet with as much electricity as you can." - -/datum/objective/abductee/pristine - explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." - -/datum/objective/abductee/nowalls - explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" - -/datum/objective/abductee/nations - explanation_text = "Ensure your department prospers over all else." - -/datum/objective/abductee/abductception - explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." - -/datum/objective/abductee/summon - explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." - -/datum/objective/abductee/machine - explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." - -/datum/objective/abductee/calling - explanation_text = "Call forth a spirit from the other side." - -/datum/objective/abductee/calling/New() - var/mob/dead/D = pick(GLOB.dead_mob_list) - if(D) - explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." - -/datum/objective/abductee/social_experiment - explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." - -/datum/objective/abductee/vr - explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR." - -/datum/objective/abductee/pets - explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" - -/datum/objective/abductee/defect - explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crewmates if you can." - -/datum/objective/abductee/promote - explanation_text = "Climb the corporate ladder all the way to the top!" - -/datum/objective/abductee/science - explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe." - -/datum/objective/abductee/build - explanation_text = "Expand the station." - -/datum/objective/abductee/pragnant - explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." - -/datum/objective/abductee/engine - explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." - -/datum/objective/abductee/music - explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" - -/datum/objective/abductee/clown - explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" - -/datum/objective/abductee/party - explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" - -/datum/objective/abductee/pets - explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" - -/datum/objective/abductee/conspiracy - explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" - -/datum/objective/abductee/stalker - explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." - -/datum/objective/abductee/narrator - explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." - -/datum/objective/abductee/lurve - explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" - -/datum/objective/abductee/sixthsense - explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index f735bf253ca..e6365d5e651 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -479,6 +479,25 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(BATON_PROBE) to_chat(user, "The baton is in probing mode.") +/obj/item/device/radio/headset/abductor + name = "alien headset" + desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows." + origin_tech = "magnets=2;abductor=3" + icon = 'icons/obj/abductor.dmi' + icon_state = "abductor_headset" + item_state = "abductor_headset" + keyslot2 = new /obj/item/device/encryptionkey/heads/captain + +/obj/item/device/radio/headset/abductor/Initialize(mapload) + ..() + SET_SECONDARY_FLAG(src, BANG_PROTECT) + make_syndie() + +/obj/item/device/radio/headset/abductor/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/screwdriver)) + return // Stops humans from disassembling abductor headsets. + return ..() + /obj/item/weapon/scalpel/alien name = "alien scalpel" diff --git a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm new file mode 100644 index 00000000000..100c4852632 --- /dev/null +++ b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm @@ -0,0 +1,62 @@ +/datum/outfit/abductor + name = "Abductor Basic" + uniform = /obj/item/clothing/under/color/grey //they're greys gettit + shoes = /obj/item/clothing/shoes/combat + back = /obj/item/weapon/storage/backpack + ears = /obj/item/device/radio/headset/abductor + +/datum/outfit/abductor/proc/get_team_console(team_number) + for(var/obj/machinery/abductor/console/C in GLOB.machines) + if(C.team == team_number) + return C + +/datum/outfit/abductor/proc/link_to_console(mob/living/carbon/human/H, team_number) + if(!team_number && isabductor(H)) + var/datum/species/abductor/S = H.dna.species + team_number = S.team + + if(!team_number) + team_number = 1 + + var/obj/machinery/abductor/console/console = get_team_console(team_number) + if(console) + var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H + if(V) + console.vest = V + V.flags |= NODROP + + var/obj/item/device/abductor/gizmo/G = locate() in H.getBackSlot() + if(G) + console.gizmo = G + G.console = console + +/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(!visualsOnly) + link_to_console(H) + + +/datum/outfit/abductor/agent + name = "Abductor Agent" + head = /obj/item/clothing/head/helmet/abductor + suit = /obj/item/clothing/suit/armor/abductor/vest + belt = /obj/item/weapon/storage/belt/military/abductor/full + + backpack_contents = list( + /obj/item/weapon/abductor_baton = 1, + /obj/item/weapon/gun/energy/alien = 1, + /obj/item/device/abductor/silencer = 1 + ) + +/datum/outfit/abductor/scientist + name = "Abductor Scientist" + + backpack_contents = list( + /obj/item/device/abductor/gizmo = 1 + ) + +/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(!visualsOnly) + var/obj/item/weapon/implant/abductor/beamplant = new /obj/item/weapon/implant/abductor(H) + beamplant.implant(H) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 575db19f5ce..1f01b38860d 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -37,8 +37,8 @@ var/previous_level = "" var/obj/item/nuke_core/core = null var/deconstruction_state = NUKESTATE_INTACT - var/image/lights = null - var/image/interior = null + var/lights = "" + var/interior = "" var/obj/effect/countdown/nuclearbomb/countdown var/static/bomb_set @@ -201,30 +201,32 @@ cut_overlay(interior) switch(deconstruction_state) if(NUKESTATE_UNSCREWED) - interior = image(icon,"panel-unscrewed") + interior = "panel-unscrewed" if(NUKESTATE_PANEL_REMOVED) - interior = image(icon,"panel-removed") + interior = "panel-removed" if(NUKESTATE_WELDED) - interior = image(icon,"plate-welded") + interior = "plate-welded" if(NUKESTATE_CORE_EXPOSED) - interior = image(icon,"plate-removed") + interior = "plate-removed" if(NUKESTATE_CORE_REMOVED) - interior = image(icon,"core-removed") + interior = "core-removed" if(NUKESTATE_INTACT) - interior = null + return add_overlay(interior) /obj/machinery/nuclearbomb/proc/update_icon_lights() - cut_overlay(lights) + if(lights) + cut_overlay(lights) switch(get_nuke_state()) if(NUKE_OFF_LOCKED) - lights = null + lights = "" + return if(NUKE_OFF_UNLOCKED) - lights = image(icon,"lights-safety") + lights = "lights-safety" if(NUKE_ON_TIMING) - lights = image(icon,"lights-timing") + lights = "lights-timing" if(NUKE_ON_EXPLODING) - lights = image(icon,"lights-exploding") + lights = "lights-exploding" add_overlay(lights) /obj/machinery/nuclearbomb/process() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 794f1ccda32..3391267f26d 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -172,6 +172,11 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) + if(clonemind.changeling) + var/obj/item/organ/brain/B = H.getorganslot("brain") + B.vital = FALSE + B.decoy_override = TRUE + H.hardset_dna(ui, se, H.real_name, null, mrace, features) if(efficiency > 2) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 39bd31bdb7b..753cd42a4f7 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -96,7 +96,6 @@ return if(!usr || !usr.canUseTopic(src) || usr.incapacitated() || stat || QDELETED(src)) return - var/image/I = image(src) //For feedback message flavor if(href_list["authenticate"]) var/obj/item/weapon/card/id/ID = usr.get_active_held_item() if(!istype(ID)) @@ -117,24 +116,24 @@ authenticated = FALSE auth_id = "\[NULL\]" if(href_list["restore_logging"]) - to_chat(usr, "\icon[I] Logging functionality restored from backup data.") + to_chat(usr, "\icon[src] Logging functionality restored from backup data.") emagged = FALSE LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-") if(href_list["access_apc"]) playsound(src, "terminal_type", 50, 0) var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC)) - to_chat(usr, "\icon[I] APC does not return interface request. Remote access may be disabled.") + to_chat(usr, "\icon[src] APC does not return interface request. Remote access may be disabled.") return if(active_apc) - to_chat(usr, "\icon[I] Disconnected from [active_apc].") + to_chat(usr, "\icon[src] Disconnected from [active_apc].") active_apc.say("Remote access canceled. Interface locked.") playsound(active_apc, 'sound/machines/BoltsDown.ogg', 25, 0) playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, 0) active_apc.locked = TRUE active_apc.update_icon() active_apc = null - to_chat(usr, "\icon[I] Connected to APC in [get_area(APC)]. Interface request sent.") + to_chat(usr, "\icon[src] Connected to APC in [get_area(APC)]. Interface request sent.") log_activity("remotely accessed APC in [get_area(APC)]") APC.interact(usr, GLOB.not_incapacitated_state) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 00ac48ad5a7..7a2f58bc01b 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -419,7 +419,7 @@ to_chat(H, "\icon[customrecepient] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)") log_pda("[usr]/([usr.ckey]) (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]") customrecepient.cut_overlays() - customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r")) + customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) //Sender is faking as someone who exists else src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") @@ -432,7 +432,7 @@ to_chat(H, "\icon[customrecepient] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)") log_pda("[usr]/([usr.ckey]) (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]") customrecepient.cut_overlays() - customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r")) + customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r")) //Finally.. ResetMessage() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c8555e47ad2..a9331cd142f 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -366,13 +366,13 @@ set_airlock_overlays(state) /obj/machinery/door/airlock/proc/set_airlock_overlays(state) - var/image/frame_overlay - var/image/filling_overlay - var/image/lights_overlay - var/image/panel_overlay - var/image/weld_overlay - var/image/damag_overlay - var/image/sparks_overlay + var/mutable_appearance/frame_overlay + var/mutable_appearance/filling_overlay + var/mutable_appearance/lights_overlay + var/mutable_appearance/panel_overlay + var/mutable_appearance/weld_overlay + var/mutable_appearance/damag_overlay + var/mutable_appearance/sparks_overlay switch(state) if(AIRLOCK_CLOSED) @@ -494,10 +494,8 @@ pass(A) //suppress unused warning var/list/airlock_overlays = A.airlock_overlays var/iconkey = "[icon_state][icon_file]" - if(airlock_overlays[iconkey]) - return airlock_overlays[iconkey] - airlock_overlays[iconkey] = image(icon_file, icon_state) - return airlock_overlays[iconkey] + if((!(. = airlock_overlays[iconkey]))) + . = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state) /obj/machinery/door/airlock/do_animate(animation) switch(animation) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 607c6870ce3..18dde20df2d 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -184,7 +184,7 @@ if(maptext) maptext = "" cut_overlays() - add_overlay(image('icons/obj/status_display.dmi', icon_state=state)) + add_overlay(mutable_appearance('icons/obj/status_display.dmi', state)) //Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index c57c210855a..807d4c9aca9 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -285,6 +285,7 @@ /obj/machinery/door/proc/crush() for(var/mob/living/L in get_turf(src)) + L.visible_message("[src] closes on [L], crushing them!", "[src] closes on you and crushes you!") if(isalien(L)) //For xenos L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. L.emote("roar") diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 42685bee61f..6cb05037bf5 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -30,6 +30,19 @@ ..() CalculateAffectingAreas() +/obj/machinery/door/firedoor/examine(mob/user) + ..() + if(!density) + to_chat(user, "It is open, but could be pried closed.") + else + if(!welded) + to_chat(user, "It is closed, but could be pried open. Deconstruction would require it to be welded shut.") + else + if(boltslocked) + to_chat(user, "It is welded shut. The floor bolt have been locked by screws.") + else + to_chat(user, "The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor.") + /obj/machinery/door/firedoor/proc/CalculateAffectingAreas() remove_from_areas() affecting_areas = get_adjacent_open_areas(src) | get_area(src) @@ -64,7 +77,6 @@ latetoggle() else stat |= NOPOWER - return /obj/machinery/door/firedoor/attack_hand(mob/user) if(operating || !density) @@ -96,8 +108,8 @@ deconstruct(TRUE) return if(istype(C, /obj/item/weapon/screwdriver)) - user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts...", \ - "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts...") + user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts.", \ + "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts.") playsound(get_turf(src), C.usesound, 50, 1) boltslocked = !boltslocked return @@ -109,9 +121,13 @@ /obj/machinery/door/firedoor/try_to_weld(obj/item/weapon/weldingtool/W, mob/user) if(W.remove_fuel(0, user)) - welded = !welded - to_chat(user, "You [welded?"welded":"unwelded"] \the [src]") - update_icon() + playsound(get_turf(src), W.usesound, 50, 1) + user.visible_message("[user] starts [welded ? "unwelding" : "welding"] [src].", "You start welding [src].") + if(do_after(user, 40*W.toolspeed, 1, target=src)) + playsound(get_turf(src), W.usesound, 50, 1) + welded = !welded + to_chat(user, "[user] [welded?"welds":"unwelds"] [src].", "You [welded ? "weld" : "unweld"] [src].") + update_icon() /obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user) if(welded || operating) @@ -243,13 +259,15 @@ ..() switch(constructionStep) if(CONSTRUCTION_PANEL_OPEN) - to_chat(user, "There is a small metal plate covering the wires.") + to_chat(user, "It is unbolted from the floor. A small loosely connected metal plate is covering the wires.") + if(!reinforced) + to_chat(user, "It could be reinforced with plasteel.") if(CONSTRUCTION_WIRES_EXPOSED) - to_chat(user, "Wires are trailing from the maintenance panel.") + to_chat(user, "The maintenance plate has been pried away, and wires are trailing.") if(CONSTRUCTION_GUTTED) - to_chat(user, "The circuit board is visible.") + to_chat(user, "The maintenance panel is missing wires and the circuit board is loosely connected.") if(CONSTRUCTION_NOCIRCUIT) - to_chat(user, "There are no electronics in the frame.") + to_chat(user, "There are no firelock electronics in the frame. The frame could be cut apart.") /obj/structure/firelock_frame/update_icon() ..() @@ -329,19 +347,17 @@ constructionStep = CONSTRUCTION_GUTTED update_icon() return - if(istype(C, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(1, user)) - playsound(get_turf(src), W.usesound, 50, 1) - user.visible_message("[user] starts welding a metal plate into [src]...", \ - "You begin welding the cover plate back onto [src]...") - if(!do_after(user, 80*C.toolspeed, target = src)) - return - if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) - return - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user] welds the metal plate into [src].", \ - "You weld [src]'s cover plate into place, hiding the wires.") + if(istype(C, /obj/item/weapon/crowbar)) + playsound(get_turf(src), C.usesound, 50, 1) + user.visible_message("[user] starts prying a metal plate into [src]...", \ + "You begin prying the cover plate back onto [src]...") + if(!do_after(user, 80*C.toolspeed, target = src)) + return + if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) + return + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] pries the metal plate into [src].", \ + "You pry [src]'s cover plate into place, hiding the wires.") constructionStep = CONSTRUCTION_PANEL_OPEN update_icon() return @@ -419,4 +435,10 @@ /obj/structure/firelock_frame/heavy name = "heavy firelock frame" - reinforced = 1 \ No newline at end of file + reinforced = 1 + +#undef CONSTRUCTION_COMPLETE +#undef CONSTRUCTION_PANEL_OPEN +#undef CONSTRUCTION_WIRES_EXPOSED +#undef CONSTRUCTION_GUTTED +#undef CONSTRUCTION_NOCIRCUIT diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e4e1f7e75d8..e6d84699436 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -36,27 +36,27 @@ else add_overlay("beakeridle") if(beaker.reagents.total_volume) - var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent") + var/mutable_appearance/filling_overlay = mutable_appearance('icons/obj/iv_drip.dmi', "reagent") var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100) switch(percent) if(0 to 9) - filling.icon_state = "reagent0" + filling_overlay.icon_state = "reagent0" if(10 to 24) - filling.icon_state = "reagent10" + filling_overlay.icon_state = "reagent10" if(25 to 49) - filling.icon_state = "reagent25" + filling_overlay.icon_state = "reagent25" if(50 to 74) - filling.icon_state = "reagent50" + filling_overlay.icon_state = "reagent50" if(75 to 79) - filling.icon_state = "reagent75" + filling_overlay.icon_state = "reagent75" if(80 to 90) - filling.icon_state = "reagent80" + filling_overlay.icon_state = "reagent80" if(91 to INFINITY) - filling.icon_state = "reagent100" + filling_overlay.icon_state = "reagent100" - filling.icon += mix_color_from_reagents(beaker.reagents.reagent_list) - add_overlay(filling) + filling_overlay.color = list("#0000", "#0000", "#0000", "#000f", mix_color_from_reagents(beaker.reagents.reagent_list)) + add_overlay(filling_overlay) /obj/machinery/iv_drip/MouseDrop(mob/living/target) if(!ishuman(usr) || !usr.canUseTopic(src,BE_CLOSE) || !isliving(target)) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 24ac822ad08..a91b1fbf0ec 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -146,7 +146,7 @@ /obj/machinery/status_display/proc/set_picture(state) picture_state = state remove_display() - add_overlay(image('icons/obj/status_display.dmi', icon_state=picture_state)) + add_overlay(picture_state) /obj/machinery/status_display/proc/update_display(line1, line2) var/new_text = {"
[line1]
[line2]
"} @@ -278,7 +278,7 @@ /obj/machinery/ai_status_display/proc/set_picture(state) picture_state = state cut_overlays() - add_overlay(image('icons/obj/status_display.dmi', icon_state=picture_state)) + add_overlay(picture_state) #undef CHARS_PER_LINE #undef FOND_SIZE diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 84321a17604..d6c6cdc151d 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -60,6 +60,8 @@ var/data, var/compression, var/list/level, var/freq, var/list/spans, var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell, var/datum/language/language) + set waitfor = FALSE + message = copytext(message, 1, MAX_BROADCAST_LEN) if(!message) @@ -167,7 +169,8 @@ else GLOB.blackbox.messages += blackbox_msg - spawn(50) + sleep(50) + if(!QDELETED(virt)) //It could happen to YOU qdel(virt) //Use this to test if an obj can communicate with a Telecommunications Network diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index acbe6792b2d..73322ce8d0f 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -176,7 +176,6 @@ GLOBAL_LIST_EMPTY(telecomms_list) for(var/x in autolinkers) if(x in T.autolinkers) links |= T - break /obj/machinery/telecomms/update_icon() if(on) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a05a5af3755..774e6d9082b 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -297,7 +297,7 @@ to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") cut_overlays() if(panel_open) - add_overlay(image(icon, "[initial(icon_state)]-panel")) + add_overlay("[initial(icon_state)]-panel") playsound(src.loc, W.usesound, 50, 1) updateUsrDialog() else diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 46ae55e9b82..40b973c5969 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -186,7 +186,7 @@ var/full = contents.len ? 1 : 0 icon_state = "wm_[state_open]_[full]" if(panel_open) - add_overlay(image(icon, icon_state = "wm_panel")) + add_overlay("wm_panel") /obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params) if(default_deconstruction_screwdriver(user, null, null, W)) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index e7e83790953..8a78bad45ae 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -409,13 +409,13 @@ NC.cableColor("red") NC.d1 = 0 NC.d2 = fdirn - NC.updateicon() + NC.update_icon() var/datum/powernet/PN if(last_piece && last_piece.d2 != chassis.dir) last_piece.d1 = min(last_piece.d2, chassis.dir) last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.updateicon() + last_piece.update_icon() PN = last_piece.powernet if(!PN) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 667f5896406..950f6eaafbc 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -23,7 +23,7 @@ AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair. AI.forceMove(src) //Put the dead AI inside the wreckage for recovery - add_overlay(image('icons/obj/projectiles.dmi', icon_state = "green_laser")) //Overlay for the recovery beacon + add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon AI.controlled_mech = null AI.remote_control = null diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 8b855c7c3d2..6539ab64563 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -48,9 +48,9 @@ if (hides) cut_overlays() if(hides < 3) - add_overlay(image("icon" = "mecha.dmi", "icon_state" = occupant ? "ripley-g" : "ripley-g-open")) + add_overlay(occupant ? "ripley-g" : "ripley-g-open") else - add_overlay(image("icon" = "mecha.dmi", "icon_state" = occupant ? "ripley-g-full" : "ripley-g-full-open")) + add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") /obj/mecha/working/ripley/firefighter diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 0d4b5786536..7727b4d9e94 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -161,23 +161,15 @@ for(var/Ddir in GLOB.cardinal) if(entered_dirs & Ddir) - var/image/I - if(GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]) - I = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] - else - I = image(icon,"[blood_state]1",dir = Ddir) - GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I - if(I) - add_overlay(I) + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] + if(!bloodstep_overlay) + GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir) + add_overlay(bloodstep_overlay) if(exited_dirs & Ddir) - var/image/I - if(GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]) - I = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] - else - I = image(icon,"[blood_state]2",dir = Ddir) - GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I - if(I) - add_overlay(I) + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] + if(!bloodstep_overlay) + GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir) + add_overlay(bloodstep_overlay) alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 518dc4a7fe7..fde0fabd20e 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -8,7 +8,6 @@ /obj/effect/spawner/lootdrop/Initialize(mapload) ..() - if(loot && loot.len) var/turf/T = get_turf(src) while(lootcount && loot.len) @@ -57,114 +56,11 @@ /obj/effect/spawner/lootdrop/maintenance name = "maintenance loot spawner" + // see code/_globalvars/lists/maintenance_loot.dm for loot table - //How to balance this table - //------------------------- - //The total added weight of all the entries should be (roughly) equal to the total number of lootdrops - //(take in account those that spawn more than one object!) - // - //While this is random, probabilities tells us that item distribution will have a tendency to look like - //the content of the weighted table that created them. - //The less lootdrops, the less even the distribution. - // - //If you want to give items a weight <1 you can multiply all the weights by 10 - // - //the "" entry will spawn nothing, if you increase this value, - //ensure that you balance it with more spawn points - - //table data: - //----------- - //aft maintenance: 24 items, 18 spots 2 extra (28/08/2014) - //asmaint: 16 items, 11 spots 0 extra (08/08/2014) - //asmaint2: 36 items, 26 spots 2 extra (28/08/2014) - //fpmaint: 5 items, 4 spots 0 extra (08/08/2014) - //fpmaint2: 12 items, 11 spots 2 extra (28/08/2014) - //fsmaint: 0 items, 0 spots 0 extra (08/08/2014) - //fsmaint2: 40 items, 27 spots 5 extra (28/08/2014) - //maintcentral: 2 items, 2 spots 0 extra (08/08/2014) - //port: 5 items, 5 spots 0 extra (08/08/2014) - loot = list( - /obj/item/bodybag = 1, - /obj/item/clothing/glasses/meson = 2, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/clothing/gloves/color/fyellow = 1, - /obj/item/clothing/head/hardhat = 1, - /obj/item/clothing/head/hardhat/red = 1, - /obj/item/clothing/head/that = 1, - /obj/item/clothing/head/ushanka = 1, - /obj/item/clothing/head/welding = 1, - /obj/item/clothing/mask/gas = 15, - /obj/item/clothing/suit/hazardvest = 1, - /obj/item/clothing/under/rank/vice = 1, - /obj/item/device/assembly/prox_sensor = 4, - /obj/item/device/assembly/timer = 3, - /obj/item/device/flashlight = 4, - /obj/item/device/flashlight/pen = 1, - /obj/item/device/flashlight/glowstick/random = 4, - /obj/item/device/multitool = 2, - /obj/item/device/radio/off = 2, - /obj/item/device/t_scanner = 5, - /obj/item/weapon/airlock_painter = 1, - /obj/item/stack/cable_coil/random = 4, - /obj/item/stack/cable_coil/random{amount = 5} = 6, - /obj/item/stack/medical/bruise_pack = 1, - /obj/item/stack/rods{amount = 10} = 9, - /obj/item/stack/rods{amount = 23} = 1, - /obj/item/stack/rods{amount = 50} = 1, - /obj/item/stack/sheet/cardboard = 2, - /obj/item/stack/sheet/metal{amount = 20} = 1, - /obj/item/stack/sheet/mineral/plasma = 1, - /obj/item/stack/sheet/rglass = 1, - /obj/item/weapon/book/manual/wiki/engineering_construction = 1, - /obj/item/weapon/book/manual/wiki/engineering_hacking = 1, - /obj/item/clothing/head/cone = 1, - /obj/item/weapon/coin/silver = 1, - /obj/item/weapon/coin/twoheaded = 1, - /obj/item/weapon/poster/random_contraband = 1, - /obj/item/weapon/poster/random_official = 1, - /obj/item/weapon/crowbar = 1, - /obj/item/weapon/crowbar/red = 1, - /obj/item/weapon/extinguisher = 11, - //obj/item/weapon/gun/ballistic/revolver/russian = 1, //disabled until lootdrop is a proper world proc. - /obj/item/weapon/hand_labeler = 1, - /obj/item/weapon/paper/crumpled = 1, - /obj/item/weapon/pen = 1, - /obj/item/weapon/reagent_containers/spray/pestspray = 1, - /obj/item/weapon/reagent_containers/glass/rag = 3, - /obj/item/weapon/stock_parts/cell = 3, - /obj/item/weapon/storage/belt/utility = 2, - /obj/item/weapon/storage/box = 2, - /obj/item/weapon/storage/box/cups = 1, - /obj/item/weapon/storage/box/donkpockets = 1, - /obj/item/weapon/storage/box/lights/mixed = 3, - /obj/item/weapon/storage/box/hug/medical = 1, - /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 1, - /obj/item/weapon/storage/toolbox/mechanical = 1, - /obj/item/weapon/screwdriver = 3, - /obj/item/weapon/tank/internals/emergency_oxygen = 2, - /obj/item/weapon/vending_refill/cola = 1, - /obj/item/weapon/weldingtool = 3, - /obj/item/weapon/wirecutters = 1, - /obj/item/weapon/wrench = 4, - /obj/item/weapon/relic = 3, - /obj/item/weaponcrafting/receiver = 2, - /obj/item/clothing/head/cone = 2, - /obj/item/weapon/grenade/smokebomb = 2, - /obj/item/device/geiger_counter = 3, - /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 1, - /obj/item/device/radio/headset = 1, - /obj/item/device/assembly/infra = 1, - /obj/item/device/assembly/igniter = 2, - /obj/item/device/assembly/signaler = 2, - /obj/item/device/assembly/mousetrap = 2, - /obj/item/weapon/reagent_containers/syringe = 2, - /obj/item/clothing/gloves/color/random = 8, - /obj/item/clothing/shoes/laceup = 1, - /obj/item/weapon/storage/secure/briefcase = 3, - /obj/item/weapon/storage/toolbox/artistic = 2, - /obj/item/toy/eightball = 1, - "" = 3 - ) +/obj/effect/spawner/lootdrop/maintenance/Initialize(mapload) + loot = GLOB.maintenance_loot + ..() /obj/effect/spawner/lootdrop/crate_spawner name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF! diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d1f7522e216..28388d656d3 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,4 +1,4 @@ -GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/effects/fire.dmi', "icon_state" = "fire")) +GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/effects/fire.dmi', "fire")) GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // if true, everyone item when created will have its name changed to be diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 98e03ef18ca..41a793df301 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -54,7 +54,7 @@ if(standard_station_regex.Find(new_name)) to_chat(user, "Your name has been automatically approved.") - rename_station(new_name, user) + rename_station(new_name, user.name, user.real_name, key_name(user)) return to_chat(user, "Your name has been sent to your employers for approval.") @@ -79,7 +79,7 @@ response_timer_id = null /obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey) - change_station_name(designation) + set_station_name(designation) minor_announce("[ureal_name] has designated your station as [station_name()]", "Captain's Charter", 0) log_game("[ukey] has renamed the station as [station_name()].") diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 098d3371233..039237c63c7 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -521,7 +521,7 @@ /obj/item/weapon/storage/crayons/update_icon() cut_overlays() for(var/obj/item/toy/crayon/crayon in contents) - add_overlay(image('icons/obj/crayons.dmi',crayon.item_color)) + add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.item_color)) /obj/item/weapon/storage/crayons/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) @@ -667,10 +667,9 @@ icon_state = is_capped ? icon_capped : icon_uncapped if(use_overlays) cut_overlays() - var/image/I = image('icons/obj/crayons.dmi', - icon_state = "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]") - I.color = paint_color - add_overlay(I) + var/mutable_appearance/spray_overlay = mutable_appearance('icons/obj/crayons.dmi', "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]") + spray_overlay.color = paint_color + add_overlay(spray_overlay) /obj/item/toy/crayon/spraycan/gang //desc = "A modified container containing suspicious paint." diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 068717f667c..0d1c6444689 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_EMPTY(PDAs) var/obj/item/device/paicard/pai = null // A slot for a personal AI device - var/image/photo = null //Scanned photo + var/icon/photo //Scanned photo var/list/contained_item = list(/obj/item/weapon/pen, /obj/item/toy/crayon, /obj/item/weapon/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette) var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above. @@ -82,22 +82,24 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/device/pda/update_icon() cut_overlays() + var/mutable_appearance/overlay = new() + overlay.pixel_x = overlays_x_offset if(id) - var/image/I = image(icon_state = "id_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "id_overlay" + add_overlay(new /mutable_appearance(overlay)) if(inserted_item) - var/image/I = image(icon_state = "insert_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "insert_overlay" + add_overlay(new /mutable_appearance(overlay)) if(fon) - var/image/I = image(icon_state = "light_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "light_overlay" + add_overlay(new /mutable_appearance(overlay)) if(pai) if(pai.pai) - var/image/I = image(icon_state = "pai_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "pai_overlay" + add_overlay(new /mutable_appearance(overlay)) else - var/image/I = image(icon_state = "pai_off_overlay", pixel_x = overlays_x_offset) - add_overlay(I) + overlay.icon_state = "pai_off_overlay" + add_overlay(new /mutable_appearance(overlay)) /obj/item/device/pda/MouseDrop(obj/over_object, src_location, over_location) var/mob/M = usr @@ -633,7 +635,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(L, "\icon[src] Message from [source.owner] ([source.ownjob]), \"[msg.message]\"[msg.get_photo_ref()] (Reply)") update_icon() - add_overlay(image(icon, icon_alert)) + add_overlay(icon_alert) /obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0) for(var/mob/M in GLOB.player_list) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 86104f7b941..5c8dd2fe805 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -23,6 +23,7 @@ update_icon() //Whatever happened, update the card's state (icon, name) to match. /obj/item/device/aicard/update_icon() + cut_overlays() if(AI) name = "[initial(name)]- [AI.name]" if(AI.stat == DEAD) @@ -30,12 +31,11 @@ else icon_state = "aicard-full" if(!AI.control_disabled) - add_overlay(image('icons/obj/aicards.dmi', "aicard-on")) + add_overlay("aicard-on") AI.cancel_camera() else name = initial(name) icon_state = initial(icon_state) - cut_overlays() /obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 8537387dc45..18de68601ad 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -344,8 +344,9 @@ cut_overlays() set_light(0) else if(on) - var/image/I = image(icon,"glowstick-glow",color) - add_overlay(I) + var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow") + glowstick_overlay.color = color + add_overlay(glowstick_overlay) item_state = "glowstick-on" set_light(brightness_on) else @@ -428,3 +429,11 @@ item_state = "flashdark" brightness_on = 2.5 flashlight_power = -3 + +/obj/item/device/flashlight/eyelight + name = "eyelight" + desc = "This shouldn't exist outside of someone's head, how are you seeing this?" + brightness_on = 15 + flashlight_power = 1 + flags = CONDUCT | DROPDEL + actions_types = list() diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index f17b5adbbdd..73581f9269d 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -493,7 +493,7 @@ /obj/item/projectile/bullet/reusable/lollipop/New() var/obj/item/weapon/reagent_containers/food/snacks/lollipop/S = new ammo_type(src) color2 = S.headcolor - var/image/head = image(icon = 'icons/obj/projectiles.dmi', icon_state = "lollipop_2") + var/mutable_appearance/head = mutable_appearance('icons/obj/projectiles.dmi', "lollipop_2") head.color = color2 add_overlay(head) diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 673c1a56006..2e31e597144 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -73,18 +73,18 @@ if(hp <= 0) visible_message("[src] breaks into tiny pieces and collapses!") qdel(src) - var/image/I = image("icon"='icons/effects/effects.dmi', "icon_state"="scorch", "layer"=OBJ_LAYER+0.5) - I.pixel_x = p_x - 1 //offset correction - I.pixel_y = p_y - 1 + var/image/bullet_hole = image('icons/effects/effects.dmi', "scorch", OBJ_LAYER + 0.5) + bullet_hole.pixel_x = p_x - 1 //offset correction + bullet_hole.pixel_y = p_y - 1 if(decaltype == DECALTYPE_SCORCH) - I.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design + bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design if(P.damage >= 20 || istype(P, /obj/item/projectile/beam/practice)) - I.setDir(pick(NORTH,SOUTH,EAST,WEST)) + bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST)) else - I.icon_state = "light_scorch" + bullet_hole.icon_state = "light_scorch" else - I.icon_state = "dent" - add_overlay(I) + bullet_hole.icon_state = "dent" + add_overlay(bullet_hole) return return -1 diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 169d8eeb2b7..2037c719184 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -73,3 +73,12 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ /obj/item/stack/rods/cyborg/update_icon() return + +/obj/item/stack/rods/ten + amount = 10 + +/obj/item/stack/rods/twentyfive + amount = 25 + +/obj/item/stack/rods/fifty + amount = 50 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 6ab9493f4f4..a007dd45455 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -78,6 +78,9 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ /obj/item/stack/sheet/metal/fifty amount = 50 +/obj/item/stack/sheet/metal/twenty + amount = 20 + /obj/item/stack/sheet/metal/five amount = 5 diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 9775481b30b..c75b4c7d743 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -409,7 +409,7 @@ AI MODULES /obj/item/weapon/aiModule/core/full/custom/New() ..() - for(var/line in file2list("config/silicon_laws.txt")) + for(var/line in world.file2list("config/silicon_laws.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index 5613891326c..e32d365298a 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -155,7 +155,7 @@ var/mob/living/captured = null var/obj/item/weapon/gun/energy/chrono_gun/gun = null var/tickstokill = 15 - var/image/mob_underlay = null + var/mutable_appearance/mob_underlay var/preloaded = 0 var/RPpos = null @@ -172,7 +172,7 @@ mob_icon.Blend(removing_frame, ICON_MULTIPLY) cached_icon.Insert(mob_icon, "frame[i]") - mob_underlay = new(cached_icon, "frame1") + mob_underlay = mutable_appearance(cached_icon, "frame1") update_icon() desc = initial(desc) + "
It appears to contain [target.name]." diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 6f297617840..f53c9f66976 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -475,27 +475,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM heat = 1500 resistance_flags = FIRE_PROOF +/obj/item/weapon/lighter/update_icon() + if(lit) + icon_state = "[initial(icon_state)]_on" + else + icon_state = "[initial(icon_state)]" + +/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user) + . = "With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool." + /obj/item/weapon/lighter/greyscale name = "cheap lighter" desc = "A cheap-as-free lighter." icon_state = "lighter" -/obj/item/weapon/lighter/greyscale/New() - ..() - var/image/I = image(icon,"lighter-overlay") - var/newcolor = color2hex(randomColor(1)) - add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - add_overlay(I) +/obj/item/weapon/lighter/greyscale/Initialize() + . = ..() + add_atom_colour(color2hex(randomColor(1)), FIXED_COLOUR_PRIORITY) + update_icon() + +/obj/item/weapon/lighter/greyscale/update_icon() + cut_overlays() + var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base") + base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color + if(lit) + base_overlay.icon_state = "[initial(icon_state)]_on" + add_overlay(base_overlay) /obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user) . = "After some fiddling, [user] manages to light [A] with [src]." -/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user) - . = "With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool." - -/obj/item/weapon/lighter/update_icon() - icon_state = lit ? "[icon_state]_on" : "[initial(icon_state)]" - /obj/item/weapon/lighter/attack_self(mob/living/user) if(user.is_holding(src)) if(!lit) @@ -642,9 +651,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM screw = 1 to_chat(user, "You open the cap on the [src]") if(super) - add_overlay(image(icon, "vapeopen_med")) + add_overlay("vapeopen_med") else - add_overlay(image(icon, "vapeopen_low")) + add_overlay("vapeopen_low") else screw = 0 to_chat(user, "You close the cap on the [src]") @@ -656,12 +665,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM cut_overlays() super = 1 to_chat(user, "You increase the voltage in the [src]") - add_overlay(image(icon, "vapeopen_med")) + add_overlay("vapeopen_med") else cut_overlays() super = 0 to_chat(user, "You decrease the voltage in the [src]") - add_overlay(image(icon, "vapeopen_low")) + add_overlay("vapeopen_low") if(screw && emagged) to_chat(user, "The [name] can't be modified!") @@ -674,7 +683,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM emagged = 1 super = 0 to_chat(user, "You maximize the voltage in the [src]") - add_overlay(image(icon, "vapeopen_high")) + add_overlay("vapeopen_high") var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect sp.set_up(5, 1, src) sp.start() diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 31d700a7b69..fd586c815b7 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -38,10 +38,10 @@ to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") open = !open if(open) - var/image/colored = image("icon"='icons/obj/items.dmi', "icon_state"="lipstick_uncap_color") - colored.color = colour + var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color") + colored_overlay.color = colour icon_state = "lipstick_uncap" - add_overlay(colored) + add_overlay(colored_overlay) else icon_state = "lipstick" diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 65d191927e2..404c40c4b6a 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -16,7 +16,7 @@ /obj/item/weapon/c4/New() wires = new /datum/wires/explosive/c4(src) - image_overlay = image('icons/obj/grenade.dmi', "plastic-explosive2") + plastic_overlay = mutable_appearance(icon, "plastic-explosive2") ..() /obj/item/weapon/c4/Destroy() @@ -92,7 +92,7 @@ message_admins(message,0,1) log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse") - target.add_overlay(image_overlay, 1) + target.add_overlay(plastic_overlay, 1) to_chat(user, "You plant the bomb. Timer counting down from [timer].") addtimer(CALLBACK(src, .proc/explode), timer * 10) @@ -103,7 +103,7 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.cut_overlay(image_overlay, TRUE) + target.cut_overlay(plastic_overlay, TRUE) else location = get_turf(src) if(location) diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index d461ae6dcda..9bcbbfe0720 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -19,8 +19,8 @@ /obj/item/weapon/grenade/iedcasing/New(loc) ..() - add_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")) - add_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired")) + add_overlay("improvised_grenade_filled") + add_overlay("improvised_grenade_wired") times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] det_time = text2num(pickweight(times)) if(det_time < 0) //checking for 'duds' @@ -33,13 +33,10 @@ ..() var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents if(can) - var/muh_layer = can.layer - var/muh_plane = can.plane - can.layer = FLOAT_LAYER - can.plane = FLOAT_PLANE - underlays += can - can.layer = muh_layer - can.plane = muh_plane + var/mutable_appearance/can_underlay = new(can) + can_underlay.layer = FLOAT_LAYER + can_underlay.plane = FLOAT_PLANE + underlays += can_underlay /obj/item/weapon/grenade/iedcasing/attack_self(mob/user) // @@ -47,7 +44,7 @@ if(clown_check(user)) to_chat(user, "You light the [name]!") active = 1 - cut_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled"), TRUE) //this line make no sense + cut_overlay("improvised_grenade_filled") icon_state = initial(icon_state) + "_active" add_fingerprint(user) var/turf/bombturf = get_turf(src) diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm index 477a50330ed..aedf0954c2a 100644 --- a/code/game/objects/items/weapons/grenades/plastic.dm +++ b/code/game/objects/items/weapons/grenades/plastic.dm @@ -7,7 +7,7 @@ det_time = 10 display_timer = 0 var/atom/target = null - var/image_overlay = null + var/mutable_appearance/plastic_overlay var/obj/item/device/assembly_holder/nadeassembly = null var/assemblyattacher var/directional = FALSE @@ -15,7 +15,7 @@ var/boom_sizes = list(0, 0, 3) /obj/item/weapon/grenade/plastic/New() - image_overlay = image('icons/obj/grenade.dmi', "[item_state]2") + plastic_overlay = mutable_appearance(icon, "[item_state]2") ..() /obj/item/weapon/grenade/plastic/Destroy() @@ -50,7 +50,7 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.cut_overlay(image_overlay, TRUE) + target.cut_overlay(plastic_overlay, TRUE) else location = get_turf(src) if(location) @@ -111,7 +111,7 @@ message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1) log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse") - target.add_overlay(image_overlay, 1) + target.add_overlay(plastic_overlay, 1) if(!nadeassembly) to_chat(user, "You plant the bomb. Timer counting down from [det_time].") addtimer(CALLBACK(src, .proc/prime), det_time*10) diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index d42e135aebf..571aece4c3d 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -71,7 +71,7 @@ /obj/item/weapon/nullrod/staff/worn_overlays(isinhands) . = list() if(isinhands) - . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "[shield_icon]") + . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) /obj/item/weapon/nullrod/staff/blue name = "blue holy staff" diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index c053b6ed470..61e68934b92 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -162,5 +162,5 @@ src.cut_overlays() if(!tank) return - src.add_overlay(image('icons/obj/pneumaticCannon.dmi', "[tank.icon_state]")) + add_overlay(tank.icon_state) src.update_icon() diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index ddf6dc1c172..266fe875792 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -334,14 +334,14 @@ /obj/item/weapon/storage/bag/tray/proc/rebuild_overlays() cut_overlays() for(var/obj/item/I in contents) - add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1)) + add_overlay(mutable_appearance(I.icon, I.icon_state)) /obj/item/weapon/storage/bag/tray/remove_from_storage(obj/item/W as obj, atom/new_location) ..() rebuild_overlays() /obj/item/weapon/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0) - add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1)) + add_overlay(mutable_appearance(I.icon, I.icon_state)) . = ..() diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 91810c5a13b..5c53db06cf2 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -38,7 +38,7 @@ . = ..() if(illustration) cut_overlays() - add_overlay(image('icons/obj/storage.dmi', "[illustration]")) + add_overlay(illustration) /obj/item/weapon/storage/box/attack_self(mob/user) ..() diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index e3975843c8f..14938b92262 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -141,12 +141,15 @@ add_overlay("[icon_state]_open") var/i = contents.len for(var/C in contents) + var/mutable_appearance/inserted_overlay = mutable_appearance(icon) + inserted_overlay.pixel_x = 1 * (i - 1) if(istype(C, /obj/item/weapon/lighter/greyscale)) - add_overlay(image(icon = src.icon, icon_state = "lighter_in", pixel_x = 1 * (i -1))) + inserted_overlay.icon_state = "lighter_in" else if(istype(C, /obj/item/weapon/lighter)) - add_overlay(image(icon = src.icon, icon_state = "zippo_in", pixel_x = 1 * (i -1))) + inserted_overlay.icon_state = "zippo_in" else - add_overlay(image(icon = src.icon, icon_state = "cigarette", pixel_x = 1 * (i -1))) + inserted_overlay.icon_state = "cigarette" + add_overlay(inserted_overlay) i-- else cut_overlays() @@ -247,13 +250,14 @@ spawn_type = /obj/item/clothing/mask/cigarette/cigar /obj/item/weapon/storage/fancy/cigarettes/cigars/update_icon() + cut_overlays() if(fancy_open) - cut_overlays() add_overlay("[icon_state]_open") + var/mutable_appearance/cigar_overlay = mutable_appearance(icon, icon_type) for(var/c = contents.len, c >= 1, c--) - add_overlay(image(icon = src.icon, icon_state = icon_type, pixel_x = 4 * (c -1))) + cigar_overlay.pixel_x = 4 * (c - 1) + add_overlay(cigar_overlay) else - cut_overlays() icon_state = "cigarcase" /obj/item/weapon/storage/fancy/cigarettes/cigars/cohiba diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 68c7c74363f..e455a0277c1 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -94,7 +94,7 @@ else if ((src.code == src.l_code) && (src.l_set == 1)) src.locked = 0 cut_overlays() - add_overlay(image('icons/obj/storage.dmi', icon_opened)) + add_overlay(icon_opened) src.code = null else src.code = "ERROR" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9be3ea8dbc3..8c4edf19bfc 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -405,6 +405,9 @@ if(iscyborg(user)) return //Robots can't interact with storage items. + if(contents.len >= storage_slots) //don't use items on the backpack if they don't fit + return 1 + if(!can_be_inserted(W, 0 , user)) return 0 diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 66cb97d3a56..94b0709ae20 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -29,7 +29,7 @@ ..() cut_overlays() if(has_latches) - add_overlay(image('icons/obj/storage.dmi', "[latches]")) + add_overlay(latches) /obj/item/weapon/storage/toolbox/suicide_act(mob/user) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index ecca6aabfcd..265e6bb2e5d 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -370,7 +370,7 @@ cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi',icon_state = "backpack-10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpack-10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) @@ -388,7 +388,7 @@ . = list() //inhands + reagent_filling if(!isinhands && reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi',icon_state = "backpackmob-10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpackmob-10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 45f082f72c5..702e72842f6 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -148,7 +148,7 @@ ///// ACID -GLOBAL_DATUM_INIT(acid_overlay, /image, image("icon" = 'icons/effects/effects.dmi', "icon_state" = "acid")) +GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/effects/effects.dmi', "acid")) //the obj's reaction when touched by acid /obj/acid_act(acidpwr, acid_volume) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0a4c310e75f..4b20f12bf82 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -165,14 +165,6 @@ /obj/proc/hide(h) return -//If a mob logouts/logins in side of an object you can use this proc -/obj/proc/on_log() - ..() - if(isobj(loc)) - var/obj/Loc=loc - Loc.on_log() - - /obj/singularity_pull(S, current_size) if(!anchored || current_size >= STAGE_FIVE) step_towards(src,S) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index f79e06e92d5..ce3d0882ce6 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -12,11 +12,7 @@ canSmoothWith = null buildstacktype = null flags = NODECONSTRUCT - var/image/nest_overlay - -/obj/structure/bed/nest/New() - nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=LYING_MOB_LAYER) - return ..() + var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/alien.dmi', "nestoverlay", LYING_MOB_LAYER) /obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) if(has_buckled_mobs()) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index fdded787bd6..87560f426fd 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -145,11 +145,11 @@ obj_integrity = 70 max_integrity = 70 buildstackamount = 2 - var/image/armrest = null + var/mutable_appearance/armrest item_chair = null /obj/structure/chair/comfy/Initialize() - armrest = image("icons/obj/chairs.dmi", "comfychair_armrest") + armrest = mutable_appearance('icons/obj/chairs.dmi', "comfychair_armrest") armrest.layer = ABOVE_MOB_LAYER return ..() diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index c44181f9719..6d3f4197607 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -8,7 +8,7 @@ /obj/structure/chair/e_chair/New() ..() - add_overlay(image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1)) + add_overlay(mutable_appearance('icons/obj/chairs.dmi', "echair_over", MOB_LAYER + 1)) /obj/structure/chair/e_chair/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) @@ -42,6 +42,5 @@ var/mob/living/buckled_mob = m buckled_mob.electrocute_act(85, src, 1) to_chat(buckled_mob, "You feel a deep shock course through your body!") - spawn(1) - buckled_mob.electrocute_act(85, src, 1) + addtimer(CALLBACK(buckled_mob, /mob/living.proc/electrocute_act, 85, src, 1), 1) visible_message("The electric chair went off!", "You hear a deep sharp shock!") diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 970f1d594b4..e2331e13dc7 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -19,8 +19,7 @@ /obj/structure/fireaxecabinet/Destroy() if(fireaxe) - qdel(fireaxe) - fireaxe = null + QDEL_NULL(fireaxe) return ..() /obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 6c29061fcb8..84fe78cef64 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -262,7 +262,7 @@ /obj/item/weapon/twohanded/required/kirbyplants/equipped(mob/living/user) var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user) I.override = 1 - user.add_alt_appearance("sneaking_mission", I, GLOB.player_list) + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I) ..() /obj/item/weapon/twohanded/required/kirbyplants/dropped(mob/living/user) diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 077e4056161..be8c336c066 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -7,7 +7,7 @@ anchored = 0 density = 1 opacity = 0 - var/case_type = null + var/case_type = "" var/gun_category = /obj/item/weapon/gun var/open = 1 var/capacity = 4 @@ -25,8 +25,10 @@ /obj/structure/guncase/update_icon() cut_overlays() if(case_type && LAZYLEN(contents)) + var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type) for(var/i in 1 to contents.len) - add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 3 * (i - 1) )) + gun_overlay.pixel_x = 3 * (i - 1) + add_overlay(gun_overlay) if(open) add_overlay("[icon_state]_open") else diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index ba859d5952b..ba9e5f8a338 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -18,7 +18,7 @@ // flags = CONDUCT /obj/structure/lattice/Initialize(mapload) - ..() + . = ..() for(var/obj/structure/lattice/LAT in loc) if(LAT != src) QDEL_IN(LAT, 0) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index bdf83fc0cfe..3edb53a1ff4 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -24,9 +24,6 @@ var/locked = 0 var/opendir = SOUTH -/obj/structure/bodycontainer/New() - ..() - /obj/structure/bodycontainer/Destroy() open() if(connected) @@ -34,7 +31,8 @@ connected = null return ..() -/obj/structure/bodycontainer/on_log() +/obj/structure/bodycontainer/on_log(login) + ..() update_icon() /obj/structure/bodycontainer/update_icon() diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 8b935aab2a8..9a24935009e 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -18,13 +18,14 @@ /obj/structure/tank_dispenser/plasma oxygentanks = 0 -/obj/structure/tank_dispenser/New() +/obj/structure/tank_dispenser/Initialize() + . = ..() for(var/i in 1 to oxygentanks) new /obj/item/weapon/tank/internals/oxygen(src) for(var/i in 1 to plasmatanks) new /obj/item/weapon/tank/internals/plasma(src) update_icon() - ..() + /obj/structure/tank_dispenser/update_icon() cut_overlays() switch(oxygentanks) @@ -109,4 +110,4 @@ new /obj/item/stack/sheet/metal (loc, 2) qdel(src) -#undef TANK_DISPENSER_CAPACITY \ No newline at end of file +#undef TANK_DISPENSER_CAPACITY diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index eae2041a315..730b9e057c4 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -143,21 +143,21 @@ /obj/structure/transit_tube/proc/create_tube_overlay(direction, shift_dir) - var/image/I + var/image/tube_overlay = new(dir = direction) if(shift_dir) - I = image(loc = src, icon_state = "decorative_diag", dir = direction) + tube_overlay.icon_state = "decorative_diag" switch(shift_dir) if(NORTH) - I.pixel_y = 32 + tube_overlay.pixel_y = 32 if(SOUTH) - I.pixel_y = -32 + tube_overlay.pixel_y = -32 if(EAST) - I.pixel_x = 32 + tube_overlay.pixel_x = 32 if(WEST) - I.pixel_x = -32 + tube_overlay.pixel_x = -32 else - I = image(loc = src, icon_state = "decorative", dir = direction) - add_overlay(I) + tube_overlay.icon_state = "decorative" + add_overlay(tube_overlay) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 56a8d0410c0..3db570db83d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -239,7 +239,7 @@ qdel(mymist) if(on) - add_overlay(image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir)) + add_overlay(mutable_appearance('icons/obj/watercloset.dmi', "water", MOB_LAYER + 1)) if(watertemp == "freezing") return if(!ismist) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c6c2ef358bc..e1336d1d245 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -18,7 +18,7 @@ var/fulltile = 0 var/glass_type = /obj/item/stack/sheet/glass var/glass_amount = 1 - var/image/crack_overlay + var/static/mutable_appearance/crack_overlay = mutable_appearance('icons/obj/structures.dmi') var/list/debris = list() can_be_unanchored = 1 resistance_flags = ACID_PROOF @@ -361,10 +361,10 @@ if(smooth) queue_smooth(src) - cut_overlay(crack_overlay) + cut_overlays() if(ratio > 75) return - crack_overlay = image('icons/obj/structures.dmi',"damage[ratio]",-(layer+0.1)) + crack_overlay.icon_state = "damage[ratio]" add_overlay(crack_overlay) /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index f8cb0d1be3b..741d4f29587 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -71,10 +71,8 @@ /turf/closed/indestructible/fakeglass/Initialize() ..() icon_state = null //set the icon state to null, so our base state isn't visible - var/image/I = image('icons/obj/structures.dmi', loc = src, icon_state = "grille") - underlays += I //add a grille underlay - I = image('icons/turf/floors.dmi', loc = src, icon_state = "plating") - underlays += I //add the plating underlay, below the grille + underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay + underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille /turf/closed/indestructible/fakedoor name = "Centcom Access" diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index ee5527c0f59..7183d33ef9d 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -3,7 +3,7 @@ var/wet = 0 var/wet_time = 0 // Time in seconds that this floor will be wet for. - var/image/wet_overlay = null + var/mutable_appearance/wet_overlay /turf/open/indestructible name = "floor" @@ -183,17 +183,22 @@ if(wet_setting != TURF_DRY) if(wet_overlay) cut_overlay(wet_overlay) - wet_overlay = null + else + wet_overlay = mutable_appearance() var/turf/open/floor/F = src if(istype(F)) if(wet_setting == TURF_WET_PERMAFROST) - wet_overlay = image('icons/effects/water.dmi', src, "ice_floor") + wet_overlay.icon = 'icons/effects/water.dmi' + wet_overlay.icon_state = "ice_floor" else if(wet_setting == TURF_WET_ICE) - wet_overlay = image('icons/turf/overlays.dmi', src, "snowfloor") + wet_overlay.icon = 'icons/turf/overlays.dmi' + wet_overlay.icon_state = "snowfloor" else - wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static") + wet_overlay.icon = 'icons/effects/water.dmi' + wet_overlay.icon_state = "wet_floor_static" else - wet_overlay = image('icons/effects/water.dmi', src, "wet_static") + wet_overlay.icon = 'icons/effects/water.dmi' + wet_overlay.icon_state = "wet_static" add_overlay(wet_overlay) HandleWet() diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index d418c0a48a5..5805d75e565 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -21,7 +21,7 @@ var/spread = 0 //will the seam spread? var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles var/last_act = 0 - var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner + var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner var/defer_change = 0 /turf/closed/mineral/Initialize() @@ -380,7 +380,7 @@ var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes var/activated_name = null - var/activated_image = null + var/mutable_appearance/activated_overlay /turf/closed/mineral/gibtonite/Initialize() det_time = rand(8,10) //So you don't know exactly when the hot potato will explode @@ -394,9 +394,8 @@ /turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null, triggered_by_explosion = 0) if(stage == 0) - var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_active", layer = ON_EDGED_TURF_LAYER) - add_overlay(I) - activated_image = I + activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER) + add_overlay(activated_overlay) name = "gibtonite deposit" desc = "An active gibtonite reserve. Run!" stage = 1 @@ -433,9 +432,9 @@ /turf/closed/mineral/gibtonite/proc/defuse() if(stage == 1) - cut_overlay(activated_image) - var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_inactive", layer = ON_EDGED_TURF_LAYER) - add_overlay(I) + cut_overlay(activated_overlay) + activated_overlay.icon_state = "rock_Gibtonite_inactive" + add_overlay(activated_overlay) desc = "An inactive gibtonite reserve. The ore can be extracted." stage = 2 if(det_time < 0) diff --git a/code/modules/VR/vr_human.dm b/code/modules/VR/vr_human.dm index f8d59e060bb..1b83b323c83 100644 --- a/code/modules/VR/vr_human.dm +++ b/code/modules/VR/vr_human.dm @@ -7,7 +7,7 @@ /mob/living/carbon/human/virtual_reality/Initialize() - ..() + . = ..() quit_action = new() quit_action.Grant(src) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index f9d7dd6ec66..dc6c7332f0f 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -43,7 +43,7 @@ body += "PM - " body += "SM - " body += "FLW - " - body += "LOGS\]
" + body += "LOGS\]
" body += "Mob type = [M.type]

" @@ -410,7 +410,7 @@ /datum/admins/proc/restart() set category = "Server" - set name = "Hard Restart" + set name = "Reboot World" set desc="Restarts the world immediately" if (!usr.client.holder) return @@ -419,7 +419,7 @@ return if(confirm == "Yes") SSticker.delay_end = 0 - feedback_add_details("admin_verb","Hard Restart") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) /datum/admins/proc/end_round() diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 6c1eecda767..bf7b9dcb1ae 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -105,7 +105,7 @@ GLOBAL_PROTECT(admin_ranks) if(config.admin_legacy_system) var/previous_rights = 0 //load text from file and process each line seperately - for(var/line in file2list("config/admin_ranks.txt")) + for(var/line in world.file2list("config/admin_ranks.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) @@ -175,7 +175,7 @@ GLOBAL_PROTECT(admin_ranks) if(config.admin_legacy_system) //load text from file - var/list/lines = file2list("config/admins.txt") + var/list/lines = world.file2list("config/admins.txt") //process each line seperately for(var/line in lines) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 74e024472bc..7f0479eac91 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -157,7 +157,7 @@ var/new_name = input(usr, "Please input a new name for the station.", "What?", "") as text|null if(!new_name) return - change_station_name(new_name) + set_station_name(new_name) log_admin("[key_name(usr)] renamed the station to \"[new_name]\".") message_admins("[key_name_admin(usr)] renamed the station to: [new_name].") priority_announce("[command_name()] has renamed the station to \"[new_name]\".") @@ -166,7 +166,7 @@ if(!check_rights(R_ADMIN)) return var/new_name = new_station_name() - change_station_name(new_name) + set_station_name(new_name) log_admin("[key_name(usr)] reset the station name.") message_admins("[key_name_admin(usr)] reset the station name.") priority_announce("[command_name()] has renamed the station to \"[new_name]\".") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 629f6400568..976912ca77d 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -90,6 +90,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) C.current_ticket = CKey2ActiveTicket(C.ckey) if(C.current_ticket) C.current_ticket.AddInteraction("Client reconnected.") + C.current_ticket.initiator = C //Dissasociate ticket /datum/admin_help_tickets/proc/ClientLogout(client/C) diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 14abaf9dcb5..f29a04e376e 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -19,7 +19,7 @@ if (!msg) return - var/nicknames = file2list("config/admin_nicknames.txt") + var/nicknames = world.file2list("config/admin_nicknames.txt") var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[msg]\"" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 66863503072..51a80223e0f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -92,7 +92,7 @@ GLOBAL_PROTECT(AdminProcCall) UNTIL(!GLOB.AdminProcCall) to_chat(usr, "Running your proc") GLOB.AdminProcCall = usr.client.ckey //if this runtimes, too bad for you - world.WrapAdminProcCall(target, procname, arguments) + . = world.WrapAdminProcCall(target, procname, arguments) GLOB.AdminProcCall = null //adv proc call this, ya nerds @@ -100,7 +100,7 @@ GLOBAL_PROTECT(AdminProcCall) if(target == GLOBAL_PROC) return call(procname)(arglist(arguments)) else - return call(procname)(arglist(arguments)) + return call(target, procname)(arglist(arguments)) /proc/IsAdminAdvancedProcCall() return usr && usr.client && GLOB.AdminProcCall == usr.client.ckey diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f79a80f220e..2285466b3d3 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -17,18 +17,18 @@ if(src.client.handle_spam_prevention(msg,MUTE_PRAY)) return - var/image/cross = image('icons/obj/storage.dmi',"bible") + var/mutable_appearance/cross = mutable_appearance('icons/obj/storage.dmi', "bible") var/font_color = "purple" var/prayer_type = "PRAYER" var/deity if(usr.job == "Chaplain") - cross = image('icons/obj/storage.dmi',"kingyellow") + cross.icon_state = "kingyellow" font_color = "blue" prayer_type = "CHAPLAIN PRAYER" if(SSreligion.deity) deity = SSreligion.deity else if(iscultist(usr)) - cross = image('icons/obj/storage.dmi',"tome") + cross.icon_state = "tome" font_color = "red" prayer_type = "CULTIST PRAYER" deity = "Nar-Sie" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index d340e08fdf2..afd69e02382 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -974,7 +974,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits /client/proc/has_antag_hud() var/datum/atom_hud/A = GLOB.huds[ANTAG_HUD_TRAITOR] - return mob in A.hudusers + return A.hudusers[mob] /client/proc/open_shuttle_manipulator() set category = "Admin" diff --git a/code/modules/admin/whitelist.dm b/code/modules/admin/whitelist.dm index b922518812c..095e3dceac0 100644 --- a/code/modules/admin/whitelist.dm +++ b/code/modules/admin/whitelist.dm @@ -5,7 +5,7 @@ GLOBAL_PROTECT(whitelist) /proc/load_whitelist() GLOB.whitelist = list() - for(var/line in file2list(WHITELISTFILE)) + for(var/line in world.file2list(WHITELISTFILE)) if(!line) continue if(findtextEx(line,"#",1,2)) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index f2e6b451200..4615629f1a9 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -44,14 +44,11 @@ add_overlay("[O]_l") if(a_right) - var/list/images = list() - images += image(icon, icon_state = "[a_right.icon_state]_left") + var/mutable_appearance/right = mutable_appearance(icon, "[a_right.icon_state]_left") + right.transform = matrix(-1, 0, 0, 0, 1, 0) for(var/O in a_right.attached_overlays) - images += image(icon, icon_state = "[O]_l") - var/matrix = matrix(-1, 0, 0, 0, 1, 0) - for(var/image/I in images) - I.transform = matrix - add_overlay(I) + right.add_overlay("[O]_l") + add_overlay(right) if(master) master.update_icon() diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 1eb9480a0d3..a4c0641be09 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -60,19 +60,24 @@ Pipelines + Other Objects -> Pipe network N.disconnect(src) NODE_I = null +/obj/machinery/atmospherics/proc/getNodeConnects() + var/list/node_connects = list() + node_connects.len = device_type + + for(DEVICE_TYPE_LOOP) + for(var/D in GLOB.cardinal) + if(D & GetInitDirections()) + if(D in node_connects) + continue + node_connects[I] = D + break + return node_connects + + //this is called just after the air controller sets up turfs /obj/machinery/atmospherics/proc/atmosinit(var/list/node_connects) if(!node_connects) //for pipes where order of nodes doesn't matter - node_connects = list() - node_connects.len = device_type - - for(DEVICE_TYPE_LOOP) - for(var/D in GLOB.cardinal) - if(D & GetInitDirections()) - if(D in node_connects) - continue - node_connects[I] = D - break + node_connects = getNodeConnects() for(DEVICE_TYPE_LOOP) for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I])) @@ -196,17 +201,10 @@ Pipelines + Other Objects -> Pipe network //Generate a unique identifier for this image combination var/identifier = iconsetids[iconset] + "_[iconstate]_[direction]_[col]" - var/image/img - if(pipeimages[identifier] == null) - img = image(iconset, icon_state=iconstate, dir=direction) - img.color = col - - pipeimages[identifier] = img - - else - img = pipeimages[identifier] - - return img + if((!(. = pipeimages[identifier]))) + var/image/pipe_overlay + pipe_overlay = . = pipeimages[identifier] = image(iconset, iconstate, dir = direction) + pipe_overlay.color = col /obj/machinery/atmospherics/on_construction(pipe_type, obj_color) if(can_unwrench) @@ -288,3 +286,47 @@ Pipelines + Other Objects -> Pipe network //Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it. /obj/machinery/atmospherics/proc/can_see_pipes() return 1 + +//Properly updates pipes on shuttle movement +/obj/machinery/atmospherics/shuttleRotate(rotation) + var/list/real_node_connect = getNodeConnects() + for(DEVICE_TYPE_LOOP) + real_node_connect[I] = angle2dir(rotation+dir2angle(real_node_connect[I])) + + ..() + SetInitDirections() + var/list/supposed_node_connect = getNodeConnects() + var/list/nodes_copy = nodes.Copy() + + for(DEVICE_TYPE_LOOP) + var/new_pos = supposed_node_connect.Find(real_node_connect[I]) + nodes[new_pos] = nodes_copy[I] + +/obj/machinery/atmospherics/afterShuttleMove() + ..() + var/missing_nodes = FALSE + for(DEVICE_TYPE_LOOP) + if(src.nodes[I]) + var/obj/machinery/atmospherics/node = src.nodes[I] + var/connected = FALSE + for(var/D in GLOB.cardinal) + if(node in get_step(src, D)) + connected = TRUE + break + + if(!connected) + nullifyNode(I) + + if(!src.nodes[I]) + missing_nodes = TRUE + + if(missing_nodes) + atmosinit() + for(var/obj/machinery/atmospherics/A in pipeline_expansion()) + A.atmosinit() + if(A.returnPipenet()) + A.addMember(src) + build_network() + else + // atmosinit() calls update_icon(), so we don't need to call it + update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index e4858d432e6..96d88e0356f 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -26,9 +26,5 @@ Iconnery Housekeeping and pipe network stuff */ -/obj/machinery/atmospherics/components/binary/atmosinit() - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - - var/list/node_connects = list(node1_connect, node2_connect) - ..(node_connects) \ No newline at end of file +/obj/machinery/atmospherics/components/binary/getNodeConnects() + return list(turn(dir, 180), dir) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm index d2c37ec30e0..7319c9ccf6e 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm @@ -22,7 +22,7 @@ Housekeeping and pipe network stuff */ -/obj/machinery/atmospherics/components/trinary/atmosinit() +/obj/machinery/atmospherics/components/trinary/getNodeConnects() //Mixer: //1 and 2 is input @@ -43,5 +43,4 @@ Housekeeping and pipe network stuff node1_connect = turn(node1_connect, 180) node3_connect = turn(node3_connect, 180) - var/list/node_connects = list(node1_connect, node2_connect, node3_connect) - ..(node_connects) \ No newline at end of file + return list(node1_connect, node2_connect, node3_connect) \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm index 8b55ce14fc5..d12204d8ad3 100644 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -98,12 +98,11 @@ /obj/machinery/atmospherics/miner/update_icon() overlays.Cut() if(broken) - var/image/A = image(icon, "broken") - add_overlay(A) + add_overlay("broken") else if(active) - var/image/A = image(icon, "on") - A.color = overlay_color - add_overlay(A) + var/mutable_appearance/on_overlay = mutable_appearance(icon, "on") + on_overlay.color = overlay_color + add_overlay(on_overlay) /obj/machinery/atmospherics/miner/process() update_power() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index 0cba512ec63..49c911b8589 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -29,12 +29,8 @@ initialize_directions = EAST initialize_directions_he = WEST -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/atmosinit() - var/node2_connect = dir - var/node1_connect = turn(dir, 180) - var/list/node_connects = list(node1_connect, node2_connect) - - ..(node_connects) +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/getNodeConnects() + return list(turn(dir, 180), dir) /obj/machinery/atmospherics/pipe/heat_exchanging/junction/can_be_node(obj/machinery/atmospherics/target, iteration) var/init_dir diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 382be07fbe6..bea67c994f7 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/away /proc/generateMapList(filename) var/list/potentialMaps = list() - var/list/Lines = file2list(filename) + var/list/Lines = world.file2list(filename) if(!Lines.len) return diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 5de492f7113..f1e0f73afc2 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -197,7 +197,7 @@ GLOBAL_LIST(external_rsc_urls) var/alert_mob_dupe_login = FALSE if(config.log_access) for(var/I in GLOB.clients) - if(I == src) + if(!I || I == src) continue var/client/C = I if(C.key && (C.key != key) ) @@ -340,6 +340,25 @@ GLOBAL_LIST(external_rsc_urls) adminGreet(1) holder.owner = null GLOB.admins -= src + + if (!GLOB.admins.len && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + if(!GLOB.admins.len) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. + var/cheesy_message = pick( + "I have no admins online!",\ + "I'm all alone :(",\ + "I'm feeling lonely :(",\ + "I'm so lonely :(",\ + "Why does nobody love me? :(",\ + "I want a man :(",\ + "Where has everyone gone?",\ + "I need a hug :(",\ + "Someone come hold me :(",\ + "I need someone on me :(",\ + "What happened? Where has everyone gone?",\ + "Forever alone :("\ + ) + + send2irc("Server", "[cheesy_message] (No admins online)") GLOB.ahelp_tickets.ClientLogout(src) GLOB.directory -= ckey diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 9a21f3c4a4e..7db86ee3594 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -251,9 +251,9 @@ BLIND // can't see anything . = list() if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedgloves") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") + . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") /obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) ..() @@ -279,9 +279,9 @@ BLIND // can't see anything . = list() if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedhelmet") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") + . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") /obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) ..() @@ -304,9 +304,9 @@ BLIND // can't see anything if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") //Mask @@ -326,9 +326,9 @@ BLIND // can't see anything if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") /obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) ..() @@ -400,9 +400,9 @@ BLIND // can't see anything bloody = bloody_shoes[BLOOD_STATE_HUMAN] if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedshoe") + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") if(bloody) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") + . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") /obj/item/clothing/shoes/equipped(mob/user, slot) . = ..() @@ -455,9 +455,9 @@ BLIND // can't see anything . = list() if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damaged[blood_overlay_type]") + . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="[blood_overlay_type]blood") + . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") /obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) ..() @@ -534,17 +534,17 @@ BLIND // can't see anything if(!isinhands) if(damaged_clothes) - . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damageduniform") + . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") if(blood_DNA) - . += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood") + . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") if(hastie) var/tie_color = hastie.item_color if(!tie_color) tie_color = hastie.icon_state - var/image/tI = image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]") - tI.alpha = hastie.alpha - tI.color = hastie.color - . += tI + var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]") + tie.alpha = hastie.alpha + tie.color = hastie.color + . += tie /obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) ..() diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 15e4d3f885a..10924c233ae 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -30,7 +30,6 @@ var/list/hands_nodrop = list() var/obj/item/clothing/head/helmet/space/chronos/helmet = null var/obj/effect/chronos_cam/camera = null - var/image/phase_underlay = null var/datum/action/innate/chrono_teleport/teleport_now = new var/activating = 0 var/activated = 0 @@ -97,10 +96,6 @@ for(var/obj/item/I in user.held_items) if(I in hands_nodrop) I.flags &= ~NODROP - if(phase_underlay && !QDELETED(phase_underlay)) - user.underlays -= phase_underlay - qdel(phase_underlay) - phase_underlay = null if(camera) camera.remove_target_ui() camera.loc = user @@ -133,8 +128,6 @@ user.ExtinguishMob() - phase_underlay = create_phase_underlay(user) - hands_nodrop = list() for(var/obj/item/I in user.held_items) if(!(I.flags & NODROP)) @@ -171,15 +164,6 @@ else finish_chronowalk(user, to_turf) - -/obj/item/clothing/suit/space/chronos/proc/create_phase_underlay(var/mob/user) - var/icon/user_icon = icon('icons/effects/alphacolors.dmi', "") - user_icon.AddAlphaMask(getFlatIcon(user)) - var/image/phase = new(user_icon) - phase.appearance_flags = RESET_COLOR|RESET_ALPHA - user.underlays += phase - return phase - /obj/item/clothing/suit/space/chronos/process() if(activated) var/mob/living/carbon/human/user = src.loc diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index d8a0c97f51c..0c3d20892fd 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -597,9 +597,9 @@ C.update_inv_wear_suit() /obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands) - . = list() - if(!isinhands) - . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "[shield_state]") + . = list() + if(!isinhands) + . += mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) /obj/item/clothing/head/helmet/space/hardsuit/shielded resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 321163d1040..45606035a42 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -178,8 +178,8 @@ if(istype(borghead, /obj/item/clothing/head/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H) I.override = 1 - I.add_overlay(image(icon = 'icons/mob/robots.dmi' , icon_state = "robot_e")) //gotta look realistic - H.add_alt_appearance("standard_borg_disguise", I, GLOB.silicon_mobs+H) //you look like a robot to robots! (including yourself because you're totally a robot) + I.add_overlay(mutable_appearance('icons/mob/robots.dmi', "robot_e")) //gotta look realistic + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including yourself because you're totally a robot) /obj/item/clothing/suit/snowman diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 94e22b8b22a..dbfc2caee29 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -47,15 +47,12 @@ icon_state = "evidence" - var/xx = I.pixel_x //save the offset of the item - var/yy = I.pixel_y - I.pixel_x = 0 //then remove it so it'll stay within the evidence bag - I.pixel_y = 0 - var/image/img = image("icon"=I, "layer"=FLOAT_LAYER) //take a snapshot. (necessary to stop the underlays appearing under our inventory-HUD slots ~Carn - img.plane = FLOAT_PLANE - I.pixel_x = xx //and then return it - I.pixel_y = yy - add_overlay(img) + var/mutable_appearance/in_evidence = new(I) + in_evidence.plane = FLOAT_PLANE + in_evidence.layer = FLOAT_LAYER + in_evidence.pixel_x = 0 + in_evidence.pixel_y = 0 + add_overlay(in_evidence) add_overlay("evidence") //should look nicer for transparent stuff. not really that important, but hey. desc = "An evidence bag containing [I]. [I.desc]" diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index c5f74ed68e6..e29888f888d 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -84,6 +84,12 @@ name = "christmas tree spawner" var/tree = /obj/structure/flora/tree/pine/xmas +/obj/effect/landmark/xmastree/Initialize(mapload) + ..() + if(FESTIVE_SEASON in SSevents.holidays) + new tree(get_turf(src)) + qdel(src) + /obj/effect/landmark/xmastree/rdrod name = "festivus pole spawner" tree = /obj/structure/festivus diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 8f95552a4b9..888b87cc026 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -34,10 +34,10 @@ var/list/hostile_types = list() var/number_of_hostiles var/list/station_areas = list() - var/image/storm + var/mutable_appearance/storm /datum/round_event/portal_storm/setup() - storm = image('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", layer=FLY_LAYER) + storm = storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER) storm.color = "#00FF00" station_areas = get_areas_in_z(ZLEVEL_STATION) diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 7e2deff368b..1e2710afb69 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -22,9 +22,9 @@ if(R.glass_icon_state) icon_state = R.glass_icon_state else - var/image/I = image(icon, "glassoverlay") - I.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(I) + var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "glassoverlay") + reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(reagent_overlay) else icon_state = "glass_empty" name = "drinking glass" @@ -64,9 +64,9 @@ icon_state = largest_reagent.shot_glass_icon_state else icon_state = "shotglassclear" - var/image/I = image(icon, "shotglassoverlay") - I.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(I) + var/mutable_appearance/shot_overlay = mutable_appearance(icon, "shotglassoverlay") + shot_overlay.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(shot_overlay) else diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 705319f7c3a..3a6c2d91f66 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -101,37 +101,36 @@ filling_color = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4]) /obj/item/weapon/reagent_containers/food/snacks/customizable/update_overlays(obj/item/weapon/reagent_containers/food/snacks/S) - var/image/I = new(icon, "[initial(icon_state)]_filling") + var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") - I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00") else - I.color = S.filling_color + filling.color = S.filling_color switch(ingredients_placement) if(INGREDIENTS_SCATTER) - I.pixel_x = rand(-1,1) - I.pixel_y = rand(-1,1) + filling.pixel_x = rand(-1,1) + filling.pixel_y = rand(-1,1) if(INGREDIENTS_STACK) - I.pixel_x = rand(-1,1) - I.pixel_y = 2 * ingredients.len - 1 + filling.pixel_x = rand(-1,1) + filling.pixel_y = 2 * ingredients.len - 1 if(INGREDIENTS_STACKPLUSTOP) - I.pixel_x = rand(-1,1) - I.pixel_y = 2 * ingredients.len - 1 + filling.pixel_x = rand(-1,1) + filling.pixel_y = 2 * ingredients.len - 1 if(our_overlays) our_overlays.Cut(ingredients.len) //???, add overlay calls later in this proc will queue the compile if necessary - var/image/TOP = new(icon, "[icon_state]_top") + var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top") TOP.pixel_y = 2 * ingredients.len + 3 - add_overlay(I) + add_overlay(filling) add_overlay(TOP) return if(INGREDIENTS_FILL) cut_overlays() - I.color = filling_color + filling.color = filling_color if(INGREDIENTS_LINE) - I.pixel_y = rand(-8,3) - I.pixel_x = I.pixel_y + filling.pixel_x = filling.pixel_y = rand(-8,3) - add_overlay(I) + add_overlay(filling) /obj/item/weapon/reagent_containers/food/snacks/customizable/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/slice, reagents_per_slice) @@ -248,14 +247,14 @@ name = "[customname] sandwich" BS.reagents.trans_to(src, BS.reagents.total_volume) ingMax = ingredients.len //can't add more ingredients after that - var/image/TOP = new(icon, "[BS.icon_state]") + var/mutable_appearance/TOP = mutable_appearance(icon, "[BS.icon_state]") TOP.pixel_y = 2 * ingredients.len + 3 add_overlay(TOP) if(istype(BS, /obj/item/weapon/reagent_containers/food/snacks/breadslice/custom)) - var/image/O = new(icon, "[initial(BS.icon_state)]_filling") - O.color = BS.filling_color - O.pixel_y = 2 * ingredients.len + 3 - add_overlay(O) + var/mutable_appearance/filling = new(icon, "[initial(BS.icon_state)]_filling") + filling.color = BS.filling_color + filling.pixel_y = 2 * ingredients.len + 3 + add_overlay(filling) qdel(BS) return else @@ -313,7 +312,7 @@ /obj/item/weapon/reagent_containers/glass/bowl/update_icon() cut_overlays() if(reagents && reagents.total_volume) - var/image/filling = image('icons/obj/food/soupsalad.dmi', "fullbowl") + var/mutable_appearance/filling = mutable_appearance('icons/obj/food/soupsalad.dmi', "fullbowl") filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) else diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 96b88269718..d50c80567a5 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -234,13 +234,13 @@ /obj/item/weapon/reagent_containers/food/snacks/proc/update_overlays(obj/item/weapon/reagent_containers/food/snacks/S) cut_overlays() - var/image/I = new(src.icon, "[initial(icon_state)]_filling") + var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling") if(S.filling_color == "#FFFFFF") - I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00") else - I.color = S.filling_color + filling.color = S.filling_color - add_overlay(I) + add_overlay(filling) // initialize_cooked_food() is called when microwaving the food /obj/item/weapon/reagent_containers/food/snacks/proc/initialize_cooked_food(obj/item/weapon/reagent_containers/food/snacks/S, cooking_efficiency = 1) diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index 625a0bfd560..c1b5a55ac06 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -17,9 +17,9 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/slice, reagents_per_slice) ..() - var/image/I = new(icon, "rawcutlet_coloration") - I.color = filling_color - slice.add_overlay(I) + var/mutable_appearance/filling = mutable_appearance(icon, "rawcutlet_coloration") + filling.color = filling_color + slice.add_overlay(filling) slice.filling_color = filling_color slice.name = "raw [name] cutlet" slice.meat_type = name diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 4a9001c68f6..6ec7fd9a1e7 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -383,13 +383,13 @@ icon = 'icons/obj/lollipop.dmi' icon_state = "lollipop_stick" list_reagents = list("nutriment" = 1, "vitamin" = 1, "iron" = 10, "sugar" = 5, "omnizine" = 2) //Honk - var/image/head + var/mutable_appearance/head var/headcolor = rgb(0, 0, 0) tastes = list("candy" = 1) /obj/item/weapon/reagent_containers/food/snacks/lollipop/New() ..() - head = image(icon = 'icons/obj/lollipop.dmi', icon_state = "lollipop_head") + head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head") change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) /obj/item/weapon/reagent_containers/food/snacks/lollipop/proc/change_head_color(C) diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 68ccce9f2f4..27016d0c20c 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -33,7 +33,7 @@ if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom - var/image/creamoverlay = image('icons/effects/creampie.dmi') + var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi') if(H.dna.species.id == "lizard") creamoverlay.icon_state = "creampie_lizard" else diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 9784a03a20d..a4d9a32d3d2 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -47,7 +47,7 @@ /obj/machinery/gibber/New() ..() - src.add_overlay(image('icons/obj/kitchen.dmi', "grjam")) + add_overlay("grjam") var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gibber(null) B.apply_default_parts(src) @@ -72,15 +72,15 @@ /obj/machinery/gibber/update_icon() cut_overlays() if (dirty) - src.add_overlay(image('icons/obj/kitchen.dmi', "grbloody")) + add_overlay("grbloody") if(stat & (NOPOWER|BROKEN)) return if (!occupant) - src.add_overlay(image('icons/obj/kitchen.dmi', "grjam")) + add_overlay("grjam") else if (operating) - src.add_overlay(image('icons/obj/kitchen.dmi', "gruse")) + add_overlay("gruse") else - src.add_overlay(image('icons/obj/kitchen.dmi', "gridle")) + add_overlay("gridle") /obj/machinery/gibber/attack_paw(mob/user) return src.attack_hand(user) @@ -186,10 +186,9 @@ var/mob/living/carbon/human/gibee = occupant if(gibee.dna && gibee.dna.species) typeofmeat = gibee.dna.species.meat - typeofskin = gibee.dna.species.skinned_type - else - typeofmeat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human - typeofskin = /obj/item/stack/sheet/animalhide/human + if(gibee.dna.species.skinned_type) + typeofskin = gibee.dna.species.skinned_type + else if(iscarbon(occupant)) var/mob/living/carbon/C = occupant typeofmeat = C.type_of_meat diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index c84b381ac5b..a10bf27a0ef 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -59,21 +59,20 @@ icon_state = "pizzabox_open" if(pizza) icon_state = "pizzabox_messy" - var/image/pizzaimg = image(pizza.icon, icon_state = pizza.icon_state) - pizzaimg.pixel_y = -3 - add_overlay(pizzaimg) + var/mutable_appearance/pizza_overlay = mutable_appearance(pizza.icon, pizza.icon_state) + pizza_overlay.pixel_y = -3 + add_overlay(pizza_overlay) if(bomb) bomb.icon_state = "pizzabomb_[bomb_active ? "active" : "inactive"]" - var/image/bombimg = image(bomb.icon, icon_state = bomb.icon_state) - bombimg.pixel_y = 5 - add_overlay(bombimg) - else + var/mutable_appearance/bomb_overlay = mutable_appearance(bomb.icon, bomb.icon_state) + bomb_overlay.pixel_y = 5 + add_overlay(bomb_overlay) icon_state = "pizzabox[boxes.len + 1]" var/obj/item/pizzabox/box = boxes.len ? boxes[boxes.len] : src if(box.boxtag != "") - var/image/tagimg = image(icon, icon_state = "pizzabox_tag") - tagimg.pixel_y = boxes.len * 3 - add_overlay(tagimg) + var/mutable_appearance/tag_overlay = mutable_appearance(icon, "pizzabox_tag") + tag_overlay.pixel_y = boxes.len * 3 + add_overlay(tag_overlay) /obj/item/pizzabox/attack_self(mob/user) if(boxes.len > 0) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index ebc9f84ae90..4e6f4c734e5 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -234,31 +234,30 @@ if (cards.len == 1) var/datum/playingcard/P = cards[1] - var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + var/mutable_appearance/card_overlay = mutable_appearance(icon, (concealed ? "card_back" : "[P.card_icon]") ) - I.pixel_x = I.pixel_x + (-5 + rand(10)) - I.pixel_y = I.pixel_y + (-5 + rand(10)) + card_overlay.pixel_x = card_overlay.pixel_x + (-5 + rand(10)) + card_overlay.pixel_y = card_overlay.pixel_y + (-5 + rand(10)) - add_overlay(I) + add_overlay(card_overlay) else - var/origin = -12 - var/offset = round(32 / cards.len) + var/origin = -12 + var/offset = round(32 / cards.len) - var/i = 0 - var/image/I + var/i = 0 + var/mutable_appearance/card_overlay for(var/datum/playingcard/P in cards) - I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) - I.pixel_x = origin + (offset * i) + card_overlay = mutable_appearance(icon, (concealed ? "card_back" : P.card_icon)) + card_overlay.pixel_x = origin + (offset * i) - add_overlay(I) + add_overlay(card_overlay) + i = i + 1 - i = i + 1 - - var/html = "" + var/html = "" for(var/datum/playingcard/card in cards) - html = html + "" + html = html + "" src.hi.updateContent("hand", html) diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index c34325c9041..3858e633a2c 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -28,7 +28,7 @@ card_text_file = "strings/cas_black.txt" /obj/item/toy/cards/deck/cas/New() - var/static/list/cards_against_space = list("cas_white" = file2list("strings/cas_white.txt"),"cas_black" = file2list("strings/cas_black.txt")) + var/static/list/cards_against_space = list("cas_white" = world.file2list("strings/cas_white.txt"),"cas_black" = world.file2list("strings/cas_black.txt")) allcards = cards_against_space[card_face] var/list/possiblecards = allcards.Copy() if(possiblecards.len < decksize) // sanity check diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 29172c9b68f..d418b40b811 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -73,8 +73,8 @@ /obj/item/weapon/storage/bag/easterbasket/proc/countEggs() cut_overlays() - add_overlay(image("icon" = icon, "icon_state" = "basket-grass", "layer" = -1)) - add_overlay(image("icon" = icon, "icon_state" = "basket-egg[contents.len <= 5 ? contents.len : 5]", "layer" = -1)) + add_overlay("basket-grass") + add_overlay("basket-egg[min(contents.len, 5)]") /obj/item/weapon/storage/bag/easterbasket/remove_from_storage(obj/item/W as obj, atom/new_location) ..() @@ -140,10 +140,6 @@ containsPrize = FALSE qdel(src) -/obj/effect/spawner/lootdrop/maintenance/New() - ..() - loot += list(/obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, /obj/item/weapon/storage/bag/easterbasket = 15) - //Easter Recipes + food /obj/item/weapon/reagent_containers/food/snacks/hotcrossbun bitesize = 2 diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 29d5fd7c280..a73b9efa539 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -7,6 +7,8 @@ var/end_day = 0 // Default of 0 means the holiday lasts a single day var/end_month = 0 + var/always_celebrate = FALSE // for christmas neverending, or testing. + // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() @@ -22,6 +24,9 @@ // Return 1 if this holidy should be celebrated today /datum/holiday/proc/shouldCelebrate(dd, mm, yy) + if(always_celebrate) + return TRUE + if(!end_day) end_day = begin_day if(!end_month) @@ -30,26 +35,26 @@ if(end_month > begin_month) //holiday spans multiple months in one year if(mm == end_month) //in final month if(dd <= end_day) - return 1 + return TRUE else if(mm == begin_month)//in first month if(dd >= begin_day) - return 1 + return TRUE else if(mm in begin_month to end_month) //holiday spans 3+ months and we're in the middle, day doesn't matter at all - return 1 + return TRUE else if(end_month == begin_month) // starts and stops in same month, simplest case if(mm == begin_month && (dd in begin_day to end_day)) - return 1 + return TRUE else // starts in one year, ends in the next if(mm >= begin_month && dd >= begin_day) // Holiday ends next year - return 1 + return TRUE if(mm <= end_month && dd <= end_day) // Holiday started last year - return 1 + return TRUE - return 0 + return FALSE // The actual holidays @@ -329,11 +334,6 @@ begin_month = DECEMBER end_day = 31 -/datum/holiday/festive_season/celebrate() - for(var/obj/effect/landmark/xmastree/XT in GLOB.landmarks_list) - new XT.tree(get_turf(XT)) - qdel(XT) - /datum/holiday/festive_season/greet() return "Have a nice festive season!" @@ -348,8 +348,8 @@ /datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yy) if(dd == 13) if(time2text(world.timeofday, "DDD") == "Fri") - return 1 - return 0 + return TRUE + return FALSE /datum/holiday/friday_thirteenth/getStationPrefix() return pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby") @@ -422,3 +422,9 @@ // to_chat(world, "Easter calculates to be on [begin_day] of [begin_month] ([days_early] early) to [end_day] of [end_month] ([days_extra] extra) for 20[yy]") return ..() + +/datum/holiday/easter/celebrate() + ..() + GLOB.maintenance_loot += list( + /obj/item/weapon/reagent_containers/food/snacks/egg/loaded = 15, + /obj/item/weapon/storage/bag/easterbasket = 15) diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index 442dd84aaf5..85d623d1e98 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -21,13 +21,11 @@ /obj/item/weapon/reagent_containers/honeycomb/update_icon() cut_overlays() - var/image/honey + var/mutable_appearance/honey_overlay = mutable_appearance(icon, "honey") if(honey_color) - honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "greyscale_honey") - honey.color = honey_color - else - honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "honey") - add_overlay(honey) + honey_overlay.icon_state = "greyscale_honey" + honey_overlay.color = honey_color + add_overlay(honey_overlay) /obj/item/weapon/reagent_containers/honeycomb/proc/set_reagent(reagent) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 2c995695d14..6a1c877b97f 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -116,8 +116,9 @@ can_buckle = 1 buckle_requires_restraints = 1 to_chat(user, "You add a rod to [src].") - var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16) - underlays += U + var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod") + rod_underlay.pixel_y = 16 + underlays += rod_underlay if(W.is_hot()) StartBurning() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8e3b2e705a3..22384aa8039 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -259,7 +259,7 @@ if(istype(src, /obj/machinery/hydroponics/soil)) add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY) else - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing")) + overlays += mutable_appearance('icons/obj/hydroponics/equipment.dmi', "gaia_blessing") set_light(3) update_icon_hoses() @@ -287,31 +287,30 @@ icon_state = "hoses-[n]" /obj/machinery/hydroponics/proc/update_icon_plant() - var/image/I + var/mutable_appearance/plant_overlay = mutable_appearance(myseed.growing_icon, layer = OBJ_LAYER + 0.01) if(dead) - I = image(icon = myseed.growing_icon, icon_state = myseed.icon_dead) + plant_overlay.icon_state = myseed.icon_dead else if(harvest) if(!myseed.icon_harvest) - I = image(icon = myseed.growing_icon, icon_state = "[myseed.icon_grow][myseed.growthstages]") + plant_overlay.icon_state = "[myseed.icon_grow][myseed.growthstages]" else - I = image(icon = myseed.growing_icon, icon_state = myseed.icon_harvest) + plant_overlay.icon_state = myseed.icon_harvest else var/t_growthstate = min(round((age / myseed.maturation) * myseed.growthstages), myseed.growthstages) - I = image(icon = myseed.growing_icon, icon_state = "[myseed.icon_grow][t_growthstate]") - I.layer = OBJ_LAYER + 0.01 - add_overlay(I) + plant_overlay.icon_state = "[myseed.icon_grow][t_growthstate]" + add_overlay(plant_overlay) /obj/machinery/hydroponics/proc/update_icon_lights() if(waterlevel <= 10) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowwater3")) if(nutrilevel <= 2) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lownutri3")) if(plant_health <= (myseed.endurance / 2)) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowhealth3")) if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_alert3")) if(harvest) - add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_harvest3")) + add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_harvest3")) /obj/machinery/hydroponics/examine(user) diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm index a4ab2919be8..52c2e1052fe 100644 --- a/code/modules/hydroponics/sample.dm +++ b/code/modules/hydroponics/sample.dm @@ -8,9 +8,9 @@ /obj/item/seeds/sample/New() ..() if(sample_color) - var/image/I = image(icon, icon_state = "sample-filling") - I.color = sample_color - add_overlay(I) + var/mutable_appearance/filling = mutable_appearance(icon, "sample-filling") + filling.color = sample_color + add_overlay(filling) /obj/item/seeds/sample/get_analyzer_text() return " The DNA of this sample is damaged beyond recovery, it can't support life on its own.\n*---------*" diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 236f873aa83..fe9bdb56098 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,7 +1,5 @@ /proc/create_all_lighting_objects() - for(var/I in GLOB.sortedAreas) - var/area/A = I - + for(var/area/A in world) if(!IS_DYNAMIC_LIGHTING(A)) continue diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm index 02a752c2d76..36c30531431 100644 --- a/code/modules/mining/equipment.dm +++ b/code/modules/mining/equipment.dm @@ -513,7 +513,7 @@ var/charged = 1 var/charge_time = 16 var/atom/mark = null - var/marked_image = null + var/mutable_appearance/marked_underlay /obj/item/projectile/destabilizer name = "destabilizing force" @@ -530,15 +530,16 @@ if(hammer_synced.mark == target) return ..() if(isliving(target)) - if(hammer_synced.mark && hammer_synced.marked_image) - hammer_synced.mark.underlays -= hammer_synced.marked_image - hammer_synced.marked_image = null + if(hammer_synced.mark && hammer_synced.marked_underlay) + hammer_synced.mark.underlays -= hammer_synced.marked_underlay + hammer_synced.marked_underlay = null var/mob/living/L = target if(L.mob_size >= MOB_SIZE_LARGE) hammer_synced.mark = L - var/image/I = image('icons/effects/effects.dmi', loc = L, icon_state = "shield2",pixel_y = (-L.pixel_y),pixel_x = (-L.pixel_x)) - L.underlays += I - hammer_synced.marked_image = I + hammer_synced.marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2") + hammer_synced.marked_underlay.pixel_x = -L.pixel_x + hammer_synced.marked_underlay.pixel_y = -L.pixel_y + L.underlays += hammer_synced.marked_underlay var/target_turf = get_turf(target) if(ismineralturf(target_turf)) var/turf/closed/mineral/M = target_turf @@ -570,9 +571,8 @@ new /obj/effect/overlay/temp/kinetic_blast(get_turf(L)) mark = 0 if(L.mob_size >= MOB_SIZE_LARGE) - L.underlays -= marked_image - qdel(marked_image) - marked_image = null + L.underlays -= marked_underlay + QDEL_NULL(marked_underlay) var/backstab_dir = get_dir(user, L) var/def_check = L.getarmor(type = "bomb") if((user.dir & backstab_dir) && (L.dir & backstab_dir)) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 463ee524f94..b8b1bcc6b9e 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -69,9 +69,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) if(uses_left <= 0) user.drop_item(src) loc = A - var/image/balloon - var/image/balloon2 - var/image/balloon3 + var/mutable_appearance/balloon + var/mutable_appearance/balloon2 + var/mutable_appearance/balloon3 if(isliving(A)) var/mob/living/M = A M.Weaken(16) // Keep them from moving during the duration of the extraction @@ -82,12 +82,12 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) var/obj/effect/extraction_holder/holder_obj = new(A.loc) holder_obj.appearance = A.appearance A.loc = holder_obj - balloon2 = image('icons/obj/fulton_balloon.dmi',"fulton_expand") + balloon2 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_expand") balloon2.pixel_y = 10 balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.add_overlay(balloon2) sleep(4) - balloon = image('icons/obj/fulton_balloon.dmi',"fulton_balloon") + balloon = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_balloon") balloon.pixel_y = 10 balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.cut_overlay(balloon2) @@ -121,7 +121,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) sleep(10) animate(holder_obj, pixel_z = 10, time = 10) sleep(10) - balloon3 = image('icons/obj/fulton_balloon.dmi',"fulton_retract") + balloon3 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_retract") balloon3.pixel_y = 10 balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.cut_overlay(balloon) diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm index c390851b1b3..13e3e56f667 100644 --- a/code/modules/mining/lavaland/ruins/gym.dm +++ b/code/modules/mining/lavaland/ruins/gym.dm @@ -68,9 +68,8 @@ user.setDir(SOUTH) user.Stun(4) user.loc = src.loc - var/image/W = image('goon/icons/obj/fitness.dmi',"fitnessweight-w") - W.layer = WALL_OBJ_LAYER - add_overlay(W) + var/mutable_appearance/swole_overlay = mutable_appearance(icon, "fitnessweight-w", WALL_OBJ_LAYER) + add_overlay(swole_overlay) var/bragmessage = pick("pushing it to the limit","going into overdrive","burning with determination","rising up to the challenge", "getting strong now","getting ripped") user.visible_message("[user] is [bragmessage]!") var/reps = 0 @@ -93,5 +92,5 @@ animate(user, pixel_y = 0, time = 3) var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!") icon_state = "fitnessweight" - cut_overlay(W) + cut_overlay(swole_overlay) to_chat(user, "[finishmessage]") \ No newline at end of file diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index eff7e4780b7..1f7f4b4695f 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -392,7 +392,7 @@ return if (CC.use(1)) - add_overlay(image('icons/obj/economy.dmi',"coin_string_overlay")) + add_overlay("coin_string_overlay") string_attached = 1 to_chat(user, "You attach a string to the coin.") else diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4175f75744f..7946d67d10a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -37,10 +37,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) //These variables store hair data if the ghost originates from a species with head and/or facial hair. var/hair_style var/hair_color - var/image/hair_image + var/mutable_appearance/hair_overlay var/facial_hair_style var/facial_hair_color - var/image/facial_hair_image + var/mutable_appearance/facial_hair_overlay var/updatedir = 1 //Do we have to update our dir as the ghost moves around? var/lastsetting = null //Stores the last setting that ghost_others was set to, for a little more efficiency when we update ghost images. Null means no update is necessary @@ -161,13 +161,13 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) ghost_accs = client.prefs.ghost_accs ghost_others = client.prefs.ghost_others - if(hair_image) - cut_overlay(hair_image) - hair_image = null + if(hair_overlay) + cut_overlay(hair_overlay) + hair_overlay = null - if(facial_hair_image) - cut_overlay(facial_hair_image) - facial_hair_image = null + if(facial_hair_overlay) + cut_overlay(facial_hair_overlay) + facial_hair_overlay = null if(new_form) @@ -188,19 +188,19 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) if(facial_hair_style) S = GLOB.facial_hair_styles_list[facial_hair_style] if(S) - facial_hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER) + facial_hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER) if(facial_hair_color) - facial_hair_image.color = "#" + facial_hair_color - facial_hair_image.alpha = 200 - add_overlay(facial_hair_image) + facial_hair_overlay.color = "#" + facial_hair_color + facial_hair_overlay.alpha = 200 + add_overlay(facial_hair_overlay) if(hair_style) S = GLOB.hair_styles_list[hair_style] if(S) - hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER) + hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER) if(hair_color) - hair_image.color = "#" + hair_color - hair_image.alpha = 200 - add_overlay(hair_image) + hair_overlay.color = "#" + hair_color + hair_overlay.alpha = 200 + add_overlay(hair_overlay) /* * Increase the brightness of a color by calculating the average distance between the R, G and B values, @@ -272,25 +272,24 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) if(updatedir) - setDir(direct )//only update dir if we actually need it, so overlays won't spin on base sprites that don't have directions of their own + setDir(direct)//only update dir if we actually need it, so overlays won't spin on base sprites that don't have directions of their own + var/oldloc = loc + if(NewLoc) loc = NewLoc - for(var/obj/effect/step_trigger/S in NewLoc) - S.Crossed(src) update_parallax_contents() - return - loc = get_turf(src) //Get out of closets and such as a ghost - if((direct & NORTH) && y < world.maxy) - y++ - else if((direct & SOUTH) && y > 1) - y-- - if((direct & EAST) && x < world.maxx) - x++ - else if((direct & WEST) && x > 1) - x-- + else + loc = get_turf(src) //Get out of closets and such as a ghost + if((direct & NORTH) && y < world.maxy) + y++ + else if((direct & SOUTH) && y > 1) + y-- + if((direct & EAST) && x < world.maxx) + x++ + else if((direct & WEST) && x > 1) + x-- - for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb - S.Crossed(src) + Moved(oldloc, direct) /mob/dead/observer/is_active() return 0 @@ -809,6 +808,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!invisibility) to_chat(user, "It seems extremely obvious.") +// Ghosts have no momentum, being massless ectoplasm +/mob/dead/observer/Process_Spacemove(movement_dir) + return 1 + /proc/set_observer_default_invisibility(amount, message=null) for(var/mob/dead/observer/G in GLOB.player_list) G.invisibility = amount diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 33c3d00d2ee..1f74ed19178 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -28,6 +28,8 @@ if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting. if(stat!=DEAD) //If not dead. death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA + if(mind) //You aren't allowed to return to brains that don't exist + mind.current = null ghostize() //Ghostize checks for key so nothing else is necessary. container = null return ..() diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 077c876f242..ea97bc30ae7 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -7,16 +7,29 @@ layer = ABOVE_MOB_LAYER zone = "head" slot = "brain" - vital = 1 + vital = TRUE origin_tech = "biotech=5" attack_verb = list("attacked", "slapped", "whacked") var/mob/living/brain/brainmob = null var/damaged_brain = FALSE //whether the brain organ is damaged. var/decoy_override = FALSE //I apologize to the security players, and myself, who abused this, but this is going to go. +/obj/item/organ/brain/changeling_brain + vital = FALSE + decoy_override = TRUE + /obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0) ..() + name = "brain" + + if(C.mind && C.mind.changeling) //congrats, you're trapped in a body you don't control + if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH))) + to_chat(brainmob, "You can't feel your body! You're still just a brain!") + loc = C + C.update_hair() + return + if(brainmob) if(C.key) C.ghostize() @@ -26,7 +39,7 @@ else C.key = brainmob.key - qdel(brainmob) + QDEL_NULL(brainmob) //Update the body's icon so it doesnt appear debrained anymore C.update_hair() @@ -37,7 +50,7 @@ if(C.has_brain_worms()) var/mob/living/simple_animal/borer/B = C.has_brain_worms() B.leave_victim() //Should remove borer if the brain is removed - RR - transfer_identity(C) + transfer_identity(C) C.update_hair() /obj/item/organ/brain/prepare_eat() @@ -45,6 +58,8 @@ /obj/item/organ/brain/proc/transfer_identity(mob/living/L) name = "[L.name]'s brain" + if(brainmob || decoy_override) + return brainmob = new(src) brainmob.name = L.real_name brainmob.real_name = L.real_name @@ -54,7 +69,7 @@ if(!brainmob.stored_dna) brainmob.stored_dna = new /datum/dna/stored(brainmob) C.dna.copy_dna(brainmob.stored_dna) - if(L.mind && L.mind.current && (L.mind.current.stat == DEAD)) + if(L.mind && L.mind.current) L.mind.transfer_to(brainmob) to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a brain.") diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 20d40e324cd..dc172b7730d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -37,7 +37,7 @@ I.override = 1 I.pixel_x -= owner.pixel_x I.pixel_y -= owner.pixel_y - owner.add_alt_appearance("smallqueen", I, list(owner)) + owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic, "smallqueen", I) small = 1 else diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 556d5ac7db7..8b88440a8ef 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -1,7 +1,7 @@ /mob/living/carbon/alien/humanoid/update_icons() cut_overlays() - for(var/image/I in overlays_standing) + for(var/I in overlays_standing) add_overlay(I) if(stat == DEAD) @@ -66,7 +66,7 @@ dmi_file = 'icons/mob/alienqueen.dmi' if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = image(dmi_file,icon_state= cuff_icon, layer =-HANDCUFF_LAYER) + overlays_standing[HANDCUFF_LAYER] = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER) apply_overlay(HANDCUFF_LAYER) //Royals have bigger sprites, so inhand things must be handled differently. @@ -80,16 +80,14 @@ var/itm_state = l_hand.item_state if(!itm_state) itm_state = l_hand.icon_state - var/image/I = image("icon" = alt_inhands_file , "icon_state"="[itm_state][caste]_l", "layer"=-HANDS_LAYER) - hands += I + hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_l", -HANDS_LAYER) var/obj/item/r_hand = get_item_for_held_index(2) if(r_hand) var/itm_state = r_hand.item_state if(!itm_state) itm_state = r_hand.icon_state - var/image/I = image("icon" = alt_inhands_file , "icon_state"="[itm_state][caste]_r", "layer"=-HANDS_LAYER) - hands += I + hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_r", -HANDS_LAYER) overlays_standing[HANDS_LAYER] = hands apply_overlay(HANDS_LAYER) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/screen.dm b/code/modules/mob/living/carbon/alien/screen.dm index 58f10ab1222..b5b646b08b6 100644 --- a/code/modules/mob/living/carbon/alien/screen.dm +++ b/code/modules/mob/living/carbon/alien/screen.dm @@ -18,7 +18,6 @@ return var/Qdir = get_dir(src, Q) var/Qdist = get_dist(src, Q) - image(icon,loc,icon_state,layer,dir) var/finder_icon = "finder_center" //Overlay showed when adjacent to or on top of the queen! switch(Qdist) if(2 to 7) @@ -27,7 +26,7 @@ finder_icon = "finder_med" if(21 to INFINITY) finder_icon = "finder_far" - var/image/finder_eye = image('icons/mob/screen_alien.dmi', icon_state = finder_icon, dir = Qdir) + var/image/finder_eye = image('icons/mob/screen_alien.dmi', finder_icon, dir = Qdir) hud_used.alien_queen_finder.add_overlay(finder_eye) /mob/living/carbon/alien/humanoid/royal/queen/findQueen() diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 63f79d2eb8c..7eb6d182ef4 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -81,7 +81,7 @@ var/mob/dead/observer/ghost = pick(candidates) - var/overlay = image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie") + var/mutable_appearance/overlay = mutable_appearance('icons/mob/alien.dmi', "burst_lie") owner.add_overlay(overlay) var/atom/xeno_loc = get_turf(owner) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 3a039d84dd6..af6bc971114 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -20,6 +20,8 @@ tint = 3 flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH layer = MOB_LAYER + obj_integrity = 100 + max_integrity = 100 var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case @@ -43,20 +45,28 @@ item_state = "facehugger_impregnated" stat = DEAD +/obj/item/clothing/mask/facehugger/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + ..() + if(obj_integrity < 90) + Die() + +/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, params) + return O.attack_obj(src, user) + /obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens attack_hand(user) return /obj/item/clothing/mask/facehugger/attack_hand(mob/user) if((stat == CONSCIOUS && !sterile) && !isalien(user)) - if(Attach(user)) + if(Leap(user)) return ..() /obj/item/clothing/mask/facehugger/attack(mob/living/M, mob/user) ..() - if(user.temporarilyRemoveItemFromInventory(src)) - Attach(M) + if(user.transferItemToLoc(src, get_turf(M))) + Leap(M) /obj/item/clothing/mask/facehugger/examine(mob/user) ..() @@ -70,19 +80,10 @@ if (sterile) to_chat(user, "It looks like the proboscis has been removed.") -/obj/item/clothing/mask/facehugger/attackby(obj/item/O,mob/m, params) - if(O.force) - Die() - return - -/obj/item/clothing/mask/facehugger/bullet_act(obj/item/projectile/P) - if(P.damage) - Die() /obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) Die() - return /obj/item/clothing/mask/facehugger/equipped(mob/M) Attach(M) @@ -98,7 +99,7 @@ /obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM as mob|obj) if(CanHug(AM) && Adjacent(AM)) - return Attach(AM) + return Leap(AM) return 0 /obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) @@ -116,7 +117,7 @@ ..() if(stat == CONSCIOUS) icon_state = "[initial(icon_state)]" - Attach(hit_atom) + Leap(hit_atom) /obj/item/clothing/mask/facehugger/proc/valid_to_attach(mob/living/M) // valid targets: corgis, carbons except aliens and devils @@ -144,9 +145,13 @@ // corgi: valid return TRUE -/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) +/obj/item/clothing/mask/facehugger/proc/Leap(mob/living/M) if(!valid_to_attach(M)) return FALSE + if(iscarbon(M)) + var/mob/living/carbon/target = M + if(target.wear_mask && istype(target.wear_mask, /obj/item/clothing/mask/facehugger)) + return FALSE // passed initial checks - time to leap! M.visible_message("[src] leaps at [M]'s face!", \ "[src] leaps at [M]'s face!") @@ -165,11 +170,15 @@ if(target.wear_mask) var/obj/item/clothing/W = target.wear_mask - if(!istype(W,/obj/item/clothing/mask/facehugger) && target.dropItemToGround(W)) + if(target.dropItemToGround(W)) target.visible_message("[src] tears [W] off of [target]'s face!", \ "[src] tears [W] off of [target]'s face!") - forceMove(target) target.equip_to_slot_if_possible(src, slot_wear_mask, 0, 1, 1) + return TRUE // time for a smoke + +/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) + if(!valid_to_attach(M)) + return // early returns and validity checks done: attach. attached++ //ensure we detach once we no longer need to be attached @@ -189,8 +198,6 @@ addtimer(CALLBACK(src, .proc/Impregnate, M), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) - return TRUE // time for a smoke - /obj/item/clothing/mask/facehugger/proc/detach() attached = 0 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b040c59d0c9..44e578c909d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -326,6 +326,7 @@ if (W) W.layer = initial(W.layer) W.plane = initial(W.plane) + changeNext_move(0) if (legcuffed) var/obj/item/weapon/W = legcuffed legcuffed = null @@ -338,6 +339,7 @@ if (W) W.layer = initial(W.layer) W.plane = initial(W.plane) + changeNext_move(0) /mob/living/carbon/proc/clear_cuffs(obj/item/I, cuff_break) if(!I.loc || buckled) @@ -671,7 +673,7 @@ if(status_flags & GODMODE) return if(stat != DEAD) - if(health<= HEALTH_THRESHOLD_DEAD || !getorgan(/obj/item/organ/brain)) + if(health<= HEALTH_THRESHOLD_DEAD) death() return if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= HEALTH_THRESHOLD_CRIT) @@ -752,7 +754,7 @@ ..() /mob/living/carbon/fakefire(var/fire_icon = "Generic_mob_burning") - var/image/new_fire_overlay = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) + var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) new_fire_overlay.appearance_flags = RESET_COLOR overlays_standing[FIRE_LAYER] = new_fire_overlay apply_overlay(FIRE_LAYER) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b3a791528df..71a5acd17c7 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -133,12 +133,12 @@ var/appears_dead = 0 if(stat == DEAD || (status_flags & FAKEDEATH)) appears_dead = 1 - if(getorgan(/obj/item/organ/brain))//Only perform these checks if there is no brain - if(suiciding) - msg += "[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.\n" - if(hellbound) - msg += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" - msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" + if(suiciding) + msg += "[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.\n" + if(hellbound) + msg += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" + msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" + if(getorgan(/obj/item/organ/brain)) if(!key) var/foundghost = 0 if(mind) @@ -150,9 +150,10 @@ break if(!foundghost) msg += " and [t_his] soul has departed" - msg += "...\n" - else if(get_bodypart("head")) //Brain is gone, doesn't matter if they are AFK or present. Check for head first tho. Decapitation has similar message. - msg += "It appears that [t_his] brain is missing...\n" + msg += "...\n" + + if(get_bodypart("head") && !getorgan(/obj/item/organ/brain)) + msg += "It appears that [t_his] brain is missing...\n" var/temp = getBruteLoss() //no need to calculate each of these twice diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e2aa7535d2d..d3f2bd5bfa7 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -5,6 +5,9 @@ icon = 'icons/mob/human.dmi' icon_state = "caucasian_m" + // ME TARZAN, YOU JANEBOT + initial_languages = list(/datum/language/common) + /mob/living/carbon/human/dummy @@ -42,8 +45,6 @@ handcrafting = new() - grant_language(/datum/language/common) // ME TARZAN, YOU JANEBOT - ..() /mob/living/carbon/human/create_internal_organs() @@ -729,8 +730,8 @@ /mob/living/carbon/human/wash_cream() //clean both to prevent a rare bug - cut_overlay(image('icons/effects/creampie.dmi', "creampie_lizard")) - cut_overlay(image('icons/effects/creampie.dmi', "creampie_human")) + cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard")) + cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_human")) //Turns a mob black, flashes a skeleton overlay @@ -739,17 +740,19 @@ //Handle mutant parts if possible if(dna && dna.species) add_atom_colour("#000000", TEMPORARY_COLOUR_PRIORITY) - var/static/image/electrocution_skeleton_anim = image(icon = icon, icon_state = "electrocuted_base") - electrocution_skeleton_anim.appearance_flags = RESET_COLOR + var/static/mutable_appearance/electrocution_skeleton_anim + if(!electrocution_skeleton_anim) + electrocution_skeleton_anim = mutable_appearance(icon, "electrocuted_base") + electrocution_skeleton_anim.appearance_flags |= RESET_COLOR add_overlay(electrocution_skeleton_anim) addtimer(CALLBACK(src, .proc/end_electrocution_animation, electrocution_skeleton_anim), anim_duration) else //or just do a generic animation flick_overlay_view(image(icon,src,"electrocuted_generic",ABOVE_MOB_LAYER), src, anim_duration) -/mob/living/carbon/human/proc/end_electrocution_animation(image/I) +/mob/living/carbon/human/proc/end_electrocution_animation(mutable_appearance/MA) remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#000000") - cut_overlay(I) + cut_overlay(MA) /mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 0) if(incapacitated() || lying ) @@ -818,9 +821,9 @@ if(hal_screwyhud == SCREWYHUD_HEALTHY) icon_num = 0 if(icon_num) - hud_used.healthdoll.add_overlay(image('icons/mob/screen_gen.dmi',"[BP.body_zone][icon_num]")) + hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[BP.body_zone][icon_num]")) for(var/t in get_missing_limbs()) //Missing limbs - hud_used.healthdoll.add_overlay(image('icons/mob/screen_gen.dmi',"[t]6")) + hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[t]6")) else hud_used.healthdoll.icon_state = "healthdoll_DEAD" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index efee3652574..f64d30e90ac 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -28,7 +28,7 @@ var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id. var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc) var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing - var/skinned_type = /obj/item/stack/sheet/animalhide/generic + var/skinned_type = null var/list/no_equip = list() // slots the race can't equip stuff to var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids var/blacklisted = 0 //Flag to exclude from green slime core species. @@ -115,7 +115,7 @@ var/obj/item/thing = C.get_item_by_slot(slot_id) if(thing && (!thing.species_exception || !is_type_in_list(src,thing.species_exception))) C.dropItemToGround(thing) - + // this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs") species_traits += DIGITIGRADE @@ -228,22 +228,22 @@ fhair_state += dynamic_fhair_suffix fhair_file = 'icons/mob/facialhair_extensions.dmi' - var/image/img_facial = image("icon" = fhair_file, "icon_state" = fhair_state, "layer" = -HAIR_LAYER) + var/mutable_appearance/facial_overlay = mutable_appearance(fhair_file, fhair_state, -HAIR_LAYER) if(!forced_colour) if(hair_color) if(hair_color == "mutcolor") - img_facial.color = "#" + H.dna.features["mcolor"] + facial_overlay.color = "#" + H.dna.features["mcolor"] else - img_facial.color = "#" + hair_color + facial_overlay.color = "#" + hair_color else - img_facial.color = "#" + H.facial_hair_color + facial_overlay.color = "#" + H.facial_hair_color else - img_facial.color = forced_colour + facial_overlay.color = forced_colour - img_facial.alpha = hair_alpha + facial_overlay.alpha = hair_alpha - standing += img_facial + standing += facial_overlay if(H.head) var/obj/item/I = H.head @@ -261,9 +261,11 @@ hair_hidden = TRUE if(!hair_hidden || dynamic_hair_suffix) + var/mutable_appearance/hair_overlay = mutable_appearance(layer = -HAIR_LAYER) if(!hair_hidden && !H.getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain if(!(NOBLOOD in species_traits)) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER) + hair_overlay.icon = 'icons/mob/human_face.dmi' + hair_overlay.icon_state = "debrained" else if(H.hair_style && (HAIR in species_traits)) S = GLOB.hair_styles_list[H.hair_style] @@ -285,67 +287,69 @@ hair_state += dynamic_hair_suffix hair_file = 'icons/mob/hair_extensions.dmi' - var/image/img_hair = image("icon" = hair_file, "icon_state" = hair_state, "layer" = -HAIR_LAYER) + hair_overlay.icon = hair_file + hair_overlay.icon_state = hair_state if(!forced_colour) if(hair_color) if(hair_color == "mutcolor") - img_hair.color = "#" + H.dna.features["mcolor"] + hair_overlay.color = "#" + H.dna.features["mcolor"] else - img_hair.color = "#" + hair_color + hair_overlay.color = "#" + hair_color else - img_hair.color = "#" + H.hair_color + hair_overlay.color = "#" + H.hair_color else - img_hair.color = forced_colour - img_hair.alpha = hair_alpha - img_hair.pixel_y += hair_y_offset - standing += img_hair + hair_overlay.color = forced_colour + hair_overlay.alpha = hair_alpha + hair_overlay.pixel_y += hair_y_offset + if(hair_overlay.icon) + standing += hair_overlay if(standing.len) - H.overlays_standing[HAIR_LAYER] = standing + H.overlays_standing[HAIR_LAYER] = standing H.apply_overlay(HAIR_LAYER) /datum/species/proc/handle_body(mob/living/carbon/human/H) H.remove_overlay(BODY_LAYER) - var/list/standing = list() + var/list/standing = list() var/obj/item/bodypart/head/HD = H.get_bodypart("head") if(!(H.disabilities & HUSK)) // lipstick if(H.lip_style && (LIPS in species_traits) && HD) - var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[H.lip_style]", "layer" = -BODY_LAYER) - lips.color = H.lip_color - lips.pixel_y += face_y_offset - standing += lips + var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER) + lip_overlay.color = H.lip_color + lip_overlay.pixel_y += face_y_offset + standing += lip_overlay // eyes if((EYECOLOR in species_traits) && HD) - var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER) - img_eyes.color = "#" + H.eye_color - img_eyes.pixel_y += face_y_offset - standing += img_eyes + var/mutable_appearance/eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) + eye_overlay.color = "#" + H.eye_color + eye_overlay.pixel_y += face_y_offset + standing += eye_overlay //Underwear, Undershirts & Socks if(H.underwear) var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] if(underwear) - standing += image("icon"=underwear.icon, "icon_state"="[underwear.icon_state]", "layer"=-BODY_LAYER) + standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) if(H.undershirt) var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] if(undershirt) if(H.dna.species.sexes && H.gender == FEMALE) - standing += wear_female_version("[undershirt.icon_state]", undershirt.icon, BODY_LAYER) + standing += wear_female_version(undershirt.icon_state, undershirt.icon, -BODY_LAYER) else - standing += image("icon"=undershirt.icon, "icon_state"="[undershirt.icon_state]", "layer"=-BODY_LAYER) + standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] if(socks) - standing += image("icon"=socks.icon, "icon_state"="[socks.icon_state]", "layer"=-BODY_LAYER) + standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) if(standing.len) H.overlays_standing[BODY_LAYER] = standing @@ -453,8 +457,6 @@ var/g = (H.gender == FEMALE) ? "f" : "m" - var/image/I - for(var/layer in relevent_layers) var/layertext = mutant_bodyparts_layertext(layer) @@ -493,58 +495,54 @@ if(!S || S.icon_state == "none") continue + var/mutable_appearance/accessory_overlay = mutable_appearance(S.icon, layer = -layer) + //A little rename so we don't have to use tail_lizard or tail_human when naming the sprites. if(bodypart == "tail_lizard" || bodypart == "tail_human") bodypart = "tail" else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human") bodypart = "waggingtail" - - var/icon_string - if(S.gender_specific) - icon_string = "[g]_[bodypart]_[S.icon_state]_[layertext]" + accessory_overlay.icon_state = "[g]_[bodypart]_[S.icon_state]_[layertext]" else - icon_string = "m_[bodypart]_[S.icon_state]_[layertext]" - - I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer) + accessory_overlay.icon_state = "m_[bodypart]_[S.icon_state]_[layertext]" if(S.center) - I = center_image(I,S.dimension_x,S.dimension_y) + accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y) if(!(H.disabilities & HUSK)) if(!forced_colour) switch(S.color_src) if(MUTCOLORS) if(fixed_mut_color) - I.color = "#[fixed_mut_color]" + accessory_overlay.color = "#[fixed_mut_color]" else - I.color = "#[H.dna.features["mcolor"]]" + accessory_overlay.color = "#[H.dna.features["mcolor"]]" if(HAIR) if(hair_color == "mutcolor") - I.color = "#[H.dna.features["mcolor"]]" + accessory_overlay.color = "#[H.dna.features["mcolor"]]" else - I.color = "#[H.hair_color]" + accessory_overlay.color = "#[H.hair_color]" if(FACEHAIR) - I.color = "#[H.facial_hair_color]" + accessory_overlay.color = "#[H.facial_hair_color]" if(EYECOLOR) - I.color = "#[H.eye_color]" + accessory_overlay.color = "#[H.eye_color]" else - I.color = forced_colour - standing += I + accessory_overlay.color = forced_colour + standing += accessory_overlay if(S.hasinner) + var/mutable_appearance/inner_accessory_overlay = mutable_appearance(S.icon, layer = -layer) if(S.gender_specific) - icon_string = "[g]_[bodypart]inner_[S.icon_state]_[layertext]" + inner_accessory_overlay.icon_state = "[g]_[bodypart]inner_[S.icon_state]_[layertext]" else - icon_string = "m_[bodypart]inner_[S.icon_state]_[layertext]" - - I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer) + inner_accessory_overlay.icon_state = "m_[bodypart]inner_[S.icon_state]_[layertext]" if(S.center) - I = center_image(I,S.dimension_x,S.dimension_y) + inner_accessory_overlay = center_image(inner_accessory_overlay, S.dimension_x, S.dimension_y) - standing += I + standing += inner_accessory_overlay H.overlays_standing[layer] = standing.Copy() standing = list() diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 750c88fd881..0b8ca1500d7 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -3,8 +3,7 @@ id = "abductor" say_mod = "gibbers" sexes = 0 - species_traits = list(NOBLOOD,NOBREATH,VIRUSIMMUNE,NOGUNS) + species_traits = list(NOBLOOD,NOBREATH,VIRUSIMMUNE,NOGUNS,NOHUNGER) mutant_organs = list(/obj/item/organ/tongue/abductor) var/scientist = 0 // vars to not pollute spieces list with castes - var/agent = 0 var/team = 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 025a256c045..09d89d3a01a 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -6,6 +6,7 @@ meat = /obj/item/stack/sheet/mineral/plasma species_traits = list(NOBLOOD,RESISTCOLD,RADIMMUNE,NOTRANSSTING,VIRUSIMMUNE,NOHUNGER) mutantlungs = /obj/item/organ/lungs/plasmaman + mutant_organs = list(/obj/item/organ/tongue/bone/plasmaman) dangerous_existence = 1 //So so much blacklisted = 1 //See above burnmod = 1.5 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b5f047b0da9..f8e62704518 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -124,17 +124,17 @@ There are several things that need to be remembered: else if(U.adjusted == DIGITIGRADE_STYLE) t_color = "[t_color]_l" - var/image/standing + var/mutable_appearance/uniform_overlay if(dna && dna.species.sexes) var/G = (gender == FEMALE) ? "f" : "m" if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) - standing = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted) + uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted) - if(!standing) - standing = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE) + if(!uniform_overlay) + uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE) - overlays_standing[UNIFORM_LAYER] = standing + overlays_standing[UNIFORM_LAYER] = uniform_overlay else if(!(dna && dna.species.nojumpsuit) && invdrop) // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY @@ -159,8 +159,7 @@ There are several things that need to be remembered: update_observer_view(wear_id) //TODO: add an icon file for ID slot stuff, so it's less snowflakey - var/image/standing = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi') - overlays_standing[ID_LAYER] = standing + overlays_standing[ID_LAYER] = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi') apply_overlay(ID_LAYER) @@ -168,20 +167,20 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_gloves() remove_overlay(GLOVES_LAYER) - if(get_num_arms() <2) - if(!gloves && blood_DNA) - if(has_left_hand()) - overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands_left", "layer"=-GLOVES_LAYER) - apply_overlay(GLOVES_LAYER) - else if(has_right_hand()) - overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands_right", "layer"=-GLOVES_LAYER) - apply_overlay(GLOVES_LAYER) - return - if(client && hud_used && hud_used.inv_slots[slot_gloves]) var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves] inv.update_icon() + if(!gloves && blood_DNA) + var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) + if(get_num_arms() < 2) + if(has_left_hand()) + bloody_overlay.icon_state = "bloodyhands_left" + else if(has_right_hand()) + bloody_overlay.icon_state = "bloodyhands_right" + + overlays_standing[GLOVES_LAYER] = bloody_overlay + if(gloves) gloves.screen_loc = ui_gloves if(client && hud_used && hud_used.hud_shown) @@ -191,14 +190,7 @@ There are several things that need to be remembered: var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state - - var/image/standing = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi') - - overlays_standing[GLOVES_LAYER] = standing - - else - if(blood_DNA) - overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands", "layer"=-GLOVES_LAYER) + overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi') apply_overlay(GLOVES_LAYER) @@ -221,8 +213,7 @@ There are several things that need to be remembered: update_observer_view(glasses,1) if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - var/image/standing = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi') - overlays_standing[GLASSES_LAYER] = standing + overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi') apply_overlay(GLASSES_LAYER) @@ -244,8 +235,7 @@ There are several things that need to be remembered: client.screen += ears //add it to the client's screen update_observer_view(ears,1) - var/image/standing = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') - overlays_standing[EARS_LAYER] = standing + overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') apply_overlay(EARS_LAYER) @@ -266,8 +256,7 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) //if the inventory is open client.screen += shoes //add it to client's screen update_observer_view(shoes,1) - var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') - overlays_standing[SHOES_LAYER] = standing + overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') apply_overlay(SHOES_LAYER) @@ -287,7 +276,7 @@ There are several things that need to be remembered: var/t_state = s_store.item_state if(!t_state) t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]", "layer"=-SUIT_STORE_LAYER) + overlays_standing[SUIT_STORE_LAYER] = mutable_appearance('icons/mob/belt_mirror.dmi', t_state, -SUIT_STORE_LAYER) apply_overlay(SUIT_STORE_LAYER) @@ -313,8 +302,7 @@ There are several things that need to be remembered: if(!t_state) t_state = belt.icon_state - var/image/standing = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi') - overlays_standing[BELT_LAYER] = standing + overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi') apply_overlay(BELT_LAYER) @@ -335,8 +323,7 @@ There are several things that need to be remembered: client.screen += wear_suit update_observer_view(wear_suit,1) - var/image/standing = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi') - overlays_standing[SUIT_LAYER] = standing + overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi') if(wear_suit.breakouttime) //suit is restraining drop_all_held_items() @@ -379,7 +366,7 @@ There are several things that need to be remembered: remove_overlay(LEGCUFF_LAYER) clear_alert("legcuffed") if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) + overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed) @@ -388,8 +375,7 @@ There are several things that need to be remembered: var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] if(!female_clothing_icon) //Create standing/laying icons if they don't exist generate_female_clothing(index,t_color,icon,type) - var/standing = image("icon"=GLOB.female_clothing_icons["[t_color]"], "layer"=-layer) - return(standing) + return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer) /mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) var/list/out = new @@ -438,12 +424,12 @@ There are several things that need to be remembered: /* -Does everything in relation to building the /image used in the mob's overlays list +Does everything in relation to building the /mutable_appearance used in the mob's overlays list covers: inhands and any other form of worn item - centering large images - layering images on custom layers - building images from custom icon files + centering large appearances + layering appearances on custom layers + building appearances from custom icon files By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons()) @@ -478,13 +464,13 @@ generate/load female uniform sprites matching all previously decided variables if(!layer2use) layer2use = default_layer - var/image/standing + var/mutable_appearance/standing if(femaleuniform) standing = wear_female_version(state,file2use,layer2use,femaleuniform) if(!standing) - standing = image("icon"=file2use, "icon_state"=state,"layer"=-layer2use) + standing = mutable_appearance(file2use, state, -layer2use) - //Get the overlay images for this item when it's being worn + //Get the overlays for this item when it's being worn //eg: ammo counters, primed grenade flashes, etc. var/list/worn_overlays = worn_overlays(isinhands) if(worn_overlays && worn_overlays.len) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 57e2bb7e02f..5a4ba686b25 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -34,8 +34,7 @@ hair_hidden = 1 if(!hair_hidden) if(!getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain - var/image/I = image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER) - overlays_standing[HAIR_LAYER] = I + overlays_standing[HAIR_LAYER] = mutable_appearance('icons/mob/human_face.dmi', "debrained", -HAIR_LAYER) apply_overlay(HAIR_LAYER) @@ -45,9 +44,9 @@ /mob/living/carbon/monkey/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) if(legcuffed) - var/image/standing = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) - standing.pixel_y = 8 - overlays_standing[LEGCUFF_LAYER] = standing + var/mutable_appearance/legcuff_overlay = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) + legcuff_overlay.pixel_y = 8 + overlays_standing[LEGCUFF_LAYER] = legcuff_overlay apply_overlay(LEGCUFF_LAYER) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 4e76b3da1e9..762ebd56cc5 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -30,9 +30,8 @@ var/list/overlays_standing[TOTAL_LAYERS] /mob/living/carbon/proc/apply_overlay(cache_index) - var/I = overlays_standing[cache_index] - if(I) - add_overlay(I) + if((. = overlays_standing[cache_index])) + add_overlay(.) /mob/living/carbon/proc/remove_overlay(cache_index) var/I = overlays_standing[cache_index] @@ -79,8 +78,7 @@ if(get_held_index_of_item(I) % 2 == 0) icon_file = I.righthand_file - var/image/standing = I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) - hands += standing + hands += I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) overlays_standing[HANDS_LAYER] = hands apply_overlay(HANDS_LAYER) @@ -89,7 +87,7 @@ /mob/living/carbon/update_fire(var/fire_icon = "Generic_mob_burning") remove_overlay(FIRE_LAYER) if(on_fire) - var/image/new_fire_overlay = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) + var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) new_fire_overlay.appearance_flags = RESET_COLOR overlays_standing[FIRE_LAYER] = new_fire_overlay @@ -100,16 +98,16 @@ /mob/living/carbon/update_damage_overlays() remove_overlay(DAMAGE_LAYER) - var/image/standing = image("icon"='icons/mob/dam_mob.dmi', "icon_state"="blank", "layer"=-DAMAGE_LAYER) - overlays_standing[DAMAGE_LAYER] = standing + var/mutable_appearance/damage_overlay = mutable_appearance('icons/mob/dam_mob.dmi', "blank", -DAMAGE_LAYER) + overlays_standing[DAMAGE_LAYER] = damage_overlay for(var/X in bodyparts) var/obj/item/bodypart/BP = X if(BP.dmg_overlay_type) if(BP.brutestate) - standing.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays + damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays if(BP.burnstate) - standing.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]") + damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]") apply_overlay(DAMAGE_LAYER) @@ -126,8 +124,7 @@ if(wear_mask) if(!(head && (head.flags_inv & HIDEMASK))) - var/image/standing = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') - overlays_standing[FACEMASK_LAYER] = standing + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) @@ -141,8 +138,7 @@ if(wear_neck) if(!(head && (head.flags_inv & HIDENECK))) - var/image/standing = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') - overlays_standing[NECK_LAYER] = standing + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) @@ -155,8 +151,7 @@ inv.update_icon() if(back) - var/image/standing = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') - overlays_standing[BACK_LAYER] = standing + overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') update_hud_back(back) apply_overlay(BACK_LAYER) @@ -171,8 +166,7 @@ inv.update_icon() if(head) - var/image/standing = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') - overlays_standing[HEAD_LAYER] = standing + overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) @@ -181,7 +175,7 @@ /mob/living/carbon/update_inv_handcuffed() remove_overlay(HANDCUFF_LAYER) if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) + overlays_standing[HANDCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "handcuff1", -HANDCUFF_LAYER) apply_overlay(HANDCUFF_LAYER) @@ -244,9 +238,7 @@ var/list/new_limbs = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X - var/image/temp = BP.get_limb_icon() - if(temp) - new_limbs += temp + new_limbs += BP.get_limb_icon() if(new_limbs.len) overlays_standing[BODYPARTS_LAYER] = new_limbs limb_icon_cache[icon_render_key] = new_limbs diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b06223a7cbf..78970c0bc97 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -489,7 +489,7 @@ for(var/obj/effect/decal/cleanable/trail_holder/TH in src.loc) if((!(newdir in TH.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && TH.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled) TH.existing_dirs += newdir - TH.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir)) + TH.add_overlay(image('icons/effects/blood.dmi', trail_type, dir = newdir)) TH.transfer_mob_blood_dna(src) /mob/living/carbon/human/makeTrail(turf/T) @@ -925,4 +925,4 @@ /mob/living/ConveyorMove() if((movement_type & FLYING) && !stat) return - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index ea406eeb301..97ffa72aecb 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -5,7 +5,7 @@ mind.show_memory(src, 0) //Round specific stuff - if(SSticker && SSticker.mode) + if(SSticker.mode) switch(SSticker.mode.name) if("sandbox") CanBuild() diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index e22e104f1dd..9474b787ead 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,5 +1,5 @@ /mob/living/silicon/Login() - if(mind && SSticker && SSticker.mode) + if(mind && SSticker.mode) SSticker.mode.remove_cultist(mind, 0, 0) SSticker.mode.remove_revolutionary(mind, 0) SSticker.mode.remove_gangster(mind, remove_bosses=1) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index bb25eb2e4d6..fba4f50080f 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -102,11 +102,11 @@ return /mob/living/silicon/robot/update_fire() - var/I = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning") + var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', "Generic_mob_burning") if(on_fire) - add_overlay(I) + add_overlay(fire_overlay) else - cut_overlay(I) + cut_overlay(fire_overlay) /mob/living/silicon/robot/update_canmove() if(stat || buckled || lockcharge) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 023ddd9719d..6ef36096dc8 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -38,7 +38,7 @@ var/obj/item/module_active = null held_items = list(null, null, null) //we use held_items for the module holding, because that makes sense to do! - var/image/eye_lights + var/mutable_appearance/eye_lights var/mob/living/silicon/ai/connected_ai = null var/obj/item/weapon/stock_parts/cell/cell = null @@ -602,7 +602,7 @@ else add_overlay("ov-opencover -c") if(hat) - var/image/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi') + var/mutable_appearance/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi') head_overlay.pixel_y += hat_offset add_overlay(head_overlay) update_fire() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index b09a3ef9416..62575dd69c5 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -141,9 +141,6 @@ //Gives a HUD view to player bots that use a HUD. activate_data_hud() - grant_language(/datum/language/common) - grant_language(/datum/language/machine) - /mob/living/simple_animal/bot/update_canmove() . = ..() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 95e62a556d3..25be0495467 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -286,7 +286,7 @@ ..() spawn(5) if(skin) - add_overlay(image('icons/mob/aibots.dmi', "kit_skin_[skin]")) + add_overlay("kit_skin_[skin]") /obj/item/weapon/storage/firstaid/attackby(obj/item/bodypart/S, mob/user, params) @@ -333,7 +333,7 @@ build_step++ to_chat(user, "You add the health sensor to [src].") name = "First aid/robot arm/health analyzer assembly" - add_overlay(image('icons/mob/aibots.dmi', "na_scanner")) + add_overlay("na_scanner") if(1) if(isprox(W)) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index ef133252d70..8c96a70cc0e 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -358,7 +358,7 @@ Auto Patrol[]"}, var/obj/item/weapon/ed209_assembly/Sa = new /obj/item/weapon/ed209_assembly(Tsec) Sa.build_step = 1 - Sa.add_overlay(image('icons/mob/aibots.dmi', "hs_hole")) + Sa.add_overlay("hs_hole") Sa.created_name = name new /obj/item/device/assembly/prox_sensor(Tsec) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index b2a4eaefc68..f1629296a7c 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -90,7 +90,7 @@ update_icon() if(skin) - add_overlay(image('icons/mob/aibots.dmi', "medskin_[skin]")) + add_overlay("medskin_[skin]") var/datum/job/doctor/J = new /datum/job/doctor access_card.access += J.get_access() diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index bcc8e1d90e9..75cc8ff1b8a 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -406,7 +406,7 @@ cut_overlays() if(inventory_head) var/image/head_icon - var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) + var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) if(!DF.obj_icon_state) DF.obj_icon_state = inventory_head.icon_state @@ -416,17 +416,17 @@ DF.obj_color = inventory_head.color if(health <= 0) - head_icon = DF.get_image(dir = EAST) + head_icon = DF.get_overlay(dir = EAST) head_icon.pixel_y = -8 head_icon.transform = turn(head_icon.transform, 180) else - head_icon = DF.get_image() + head_icon = DF.get_overlay() add_overlay(head_icon) if(inventory_back) var/image/back_icon - var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) + var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src) if(!DF.obj_icon_state) DF.obj_icon_state = inventory_back.icon_state @@ -436,18 +436,20 @@ DF.obj_color = inventory_back.color if(health <= 0) - back_icon = DF.get_image(dir = EAST) + back_icon = DF.get_overlay(dir = EAST) back_icon.pixel_y = -11 back_icon.transform = turn(back_icon.transform, 180) else - back_icon = DF.get_image() + back_icon = DF.get_overlay() add_overlay(back_icon) if(facehugger) + var/mutable_appearance/facehugger_overlay = mutable_appearance('icons/mob/mask.dmi') if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy)) - add_overlay(image('icons/mob/mask.dmi',"facehugger_corgipuppy")) + facehugger_overlay.icon_state = "facehugger_corgipuppy" else - add_overlay(image('icons/mob/mask.dmi',"facehugger_corgi")) + facehugger_overlay.icon_state = "facehugger_corgi" + add_overlay(facehugger_overlay) if(pcollar) add_overlay(collar) add_overlay(pettag) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index 6a57e50aada..7cd6567ecb0 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -139,8 +139,6 @@ verbs -= /mob/living/simple_animal/drone/verb/toggle_light verbs -= /mob/living/simple_animal/drone/verb/drone_ping - grant_language(/datum/language/ratvar) - /mob/living/simple_animal/drone/cogscarab/Login() ..() add_servant_of_ratvar(src, TRUE) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index 7fb7caf8e9f..259ca4327dc 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -7,9 +7,8 @@ /mob/living/simple_animal/drone/proc/apply_overlay(cache_index) - var/I = drone_overlays[cache_index] - if(I) - add_overlay(I) + if((. = drone_overlays[cache_index])) + add_overlay(.) /mob/living/simple_animal/drone/proc/remove_overlay(cache_index) @@ -34,11 +33,11 @@ if(!r_state) r_state = r_hand.icon_state - var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) if(y_shift) - r_hand_image.pixel_y += y_shift + r_hand_overlay.pixel_y += y_shift - hands_overlays += r_hand_image + hands_overlays += r_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.layer = ABOVE_HUD_LAYER @@ -52,11 +51,11 @@ if(!l_state) l_state = l_hand.icon_state - var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) if(y_shift) - l_hand_image.pixel_y += y_shift + l_hand_overlay.pixel_y += y_shift - hands_overlays += l_hand_image + hands_overlays += l_hand_overlay if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.layer = ABOVE_HUD_LAYER @@ -86,10 +85,10 @@ var/used_head_icon = 'icons/mob/head.dmi' if(istype(head, /obj/item/clothing/mask)) used_head_icon = 'icons/mob/mask.dmi' - var/image/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon) + var/mutable_appearance/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon) head_overlay.pixel_y += -15 - drone_overlays[DRONE_HEAD_LAYER] = head_overlay + drone_overlays[DRONE_HEAD_LAYER] = head_overlay apply_overlay(DRONE_HEAD_LAYER) diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index baad2da95cf..ae707fb2e6f 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -2,16 +2,16 @@ icon = 'icons/mob/pets.dmi' mob_size = MOB_SIZE_SMALL var/obj/item/clothing/neck/petcollar/pcollar = null - var/image/collar = null - var/image/pettag = null + var/collar = "" + var/pettag = "" blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar) var/obj/item/clothing/neck/petcollar/P = O pcollar = P - collar = image('icons/mob/pets.dmi', src, "[icon_state]collar") - pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag") + collar = "[icon_state]collar" + pettag = "[icon_state]tag" regenerate_icons() to_chat(user, "You put the [P] around [src]'s neck.") if(P.tagname) @@ -46,5 +46,7 @@ /mob/living/simple_animal/pet/regenerate_icons() cut_overlays() - add_overlay(collar) - add_overlay(pettag) + if(collar) + add_overlay(collar) + if(pettag) + add_overlay(pettag) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index e49e4120478..be889a4183c 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -260,9 +260,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians I.plane = ABOVE_HUD_PLANE /mob/living/simple_animal/hostile/guardian/proc/apply_overlay(cache_index) - var/I = guardian_overlays[cache_index] - if(I) - add_overlay(I) + if((. = guardian_overlays[cache_index])) + add_overlay(.) /mob/living/simple_animal/hostile/guardian/proc/remove_overlay(cache_index) var/I = guardian_overlays[cache_index] @@ -281,9 +280,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!r_state) r_state = r_hand.icon_state - var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) - - hands_overlays += r_hand_image + hands_overlays += r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) r_hand.layer = ABOVE_HUD_LAYER @@ -296,9 +293,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!l_state) l_state = l_hand.icon_state - var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) - - hands_overlays += l_hand_image + hands_overlays += l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) l_hand.layer = ABOVE_HUD_LAYER diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm index 80212004217..eacf58410b4 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm @@ -40,10 +40,10 @@ to_chat(src, "You switch to combat mode.") toggle = FALSE else - var/image/I = new('icons/effects/effects.dmi', "shield-grey") + var/mutable_appearance/shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") if(namedatum) - I.color = namedatum.colour - add_overlay(I) + shield_overlay.color = namedatum.colour + add_overlay(shield_overlay) melee_damage_lower = 2 melee_damage_upper = 2 speed = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 462bad0df16..67b3d451b9a 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -71,9 +71,7 @@ /mob/living/simple_animal/hostile/bear/update_icons() ..() if(armored) - var/image/B = image(icon = 'icons/mob/animal.dmi', icon_state = "armor_bear") - if(B) - add_overlay(B) + add_overlay("armor_bear") /obj/item/bear_armor name = "pile of bear armor" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index fbbd2c20c87..e7ab6e1b565 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -49,7 +49,6 @@ var/idle = 0 var/isqueen = FALSE var/icon_base = "bee" - var/static/list/bee_icons = list() /mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(movement_dir = 0) @@ -91,24 +90,15 @@ if(beegent && beegent.color) col = beegent.color - var/image/base - if(!bee_icons["[icon_base]_base"]) - bee_icons["[icon_base]_base"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_base") - base = bee_icons["[icon_base]_base"] - add_overlay(base) + add_overlay("[icon_base]_base") - var/image/greyscale - if(!bee_icons["[icon_base]_grey_[col]"]) - bee_icons["[icon_base]_grey_[col]"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_grey") - greyscale = bee_icons["[icon_base]_grey_[col]"] - greyscale.color = col - add_overlay(greyscale) + var/static/mutable_appearance/greyscale_overlay + greyscale_overlay = greyscale_overlay || mutable_appearance('icons/mob/bees.dmi') + greyscale_overlay.icon_state = "[icon_base]_grey" + greyscale_overlay.color = col + add_overlay(greyscale_overlay) - var/image/wings - if(!bee_icons["[icon_base]_wings"]) - bee_icons["[icon_base]_wings"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_wings") - wings = bee_icons["[icon_base]_wings"] - add_overlay(wings) + add_overlay("[icon_base]_wings") //We don't attack beekeepers/people dressed as bees//Todo: bee costume diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index c817687217c..edcc2eedb71 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -628,7 +628,7 @@ Difficulty: Very Hard var/heal_power = 5 /mob/living/simple_animal/hostile/lightgeist/Initialize() - ..() + . = ..() verbs -= /mob/living/verb/pulled verbs -= /mob/verb/me_verb var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index f2dbb01496a..c56e963aefc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -54,7 +54,7 @@ Difficulty: Medium death_sound = 'sound/magic/demon_dies.ogg' /mob/living/simple_animal/hostile/megafauna/dragon/Initialize() - ..() + . = ..() internal = new/obj/item/device/gps/internal/dragon(src) /mob/living/simple_animal/hostile/megafauna/dragon/ex_act(severity, target) @@ -96,7 +96,7 @@ Difficulty: Medium duration = 12 pixel_z = 500 -/obj/effect/overlay/temp/fireball/Initialize() +/obj/effect/overlay/temp/fireball/Initialize(loc) . = ..() animate(src, pixel_z = 0, time = 12) @@ -121,7 +121,7 @@ Difficulty: Medium /obj/effect/overlay/temp/target/ex_act() return -/obj/effect/overlay/temp/target/Initialize() +/obj/effect/overlay/temp/target/Initialize(loc) . = ..() INVOKE_ASYNC(src, .proc/fall) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index b25e0dbdfab..03f8ce63cfe 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -74,7 +74,7 @@ Difficulty: Hard death_sound = 'sound/magic/Repulse.ogg' /mob/living/simple_animal/hostile/megafauna/hierophant/Initialize() - ..() + . = ..() internal = new/obj/item/device/gps/internal/hierophant(src) spawned_beacon = new(loc) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index bf834fce03d..1e97dedb745 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -51,7 +51,7 @@ Difficulty: Medium mouse_opacity = 1 /mob/living/simple_animal/hostile/megafauna/legion/Initialize() - ..() + . = ..() internal = new/obj/item/device/gps/internal/legion(src) /mob/living/simple_animal/hostile/megafauna/legion/AttackingTarget() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index 8b6c9c5e1cd..62833132ec3 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize() - ..() + . = ..() swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits internal = new/obj/item/device/gps/internal/swarmer_beacon(src) for(var/ddir in GLOB.cardinal) @@ -109,7 +109,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai/Initialize() - ..() + . = ..() ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity LAZYINITLIST(GLOB.AISwarmersByType[type]) GLOB.AISwarmers += src @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai/resource/Initialize() - ..() + . = ..() sharedWanted = typecacheof(sharedWanted) sharedIgnore = typecacheof(sharedIgnore) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 825b376a07f..aade8cbca16 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca var/mob/living/creator = null // the creator var/destroy_objects = 0 var/knockdown_people = 0 - var/image/googly_eyes = null + var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes") gold_core_spawnable = 0 /mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0) @@ -143,7 +143,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca icon_state = O.icon_state icon_living = icon_state copy_overlays(O) - googly_eyes = image('icons/mob/mob.dmi',"googly_eyes") add_overlay(googly_eyes) if(istype(O, /obj/structure) || istype(O, /obj/machinery)) health = (anchored * 50) + 50 @@ -178,11 +177,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca C.visible_message("\The [src] knocks down \the [C]!", \ "\The [src] knocks you down!") -/mob/living/simple_animal/hostile/mimic/copy/Aggro() - ..() - googly_eyes.setDir(get_dir(src,target)) - - /mob/living/simple_animal/hostile/mimic/copy/machine speak = list("HUMANS ARE IMPERFECT!", "YOU SHALL BE ASSIMILATED!", "YOU ARE HARMING YOURSELF", "You have been deemed hazardous. Will you comply?", \ "My logic is undeniable.", "One of us.", "FLESH IS WEAK", "THIS ISN'T WAR, THIS IS EXTERMINATION!") diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 4419b3eb04d..202a26b355c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -29,12 +29,13 @@ unique_name = 1 speak_emote = list("squeaks") deathmessage = "fainted." + var/cap_color = "#ffffff" var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight var/faint_ticker = 0 //If we hit three, another mushroom's gonna eat us - var/image/cap_living = null //Where we store our cap icons so we dont generate them constantly to update our icon - var/image/cap_dead = null + var/static/mutable_appearance/cap_living //Where we store our cap icons so we dont generate them constantly to update our icon + var/static/mutable_appearance/cap_dead /mob/living/simple_animal/hostile/mushroom/examine(mob/user) ..() @@ -53,11 +54,10 @@ melee_damage_upper += rand(10,20) maxHealth += rand(40,60) move_to_delay = rand(3,11) - var/cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) - cap_living = image('icons/mob/animal.dmi',icon_state = "mushroom_cap") - cap_dead = image('icons/mob/animal.dmi',icon_state = "mushroom_cap_dead") - cap_living.color = cap_color - cap_dead.color = cap_color + cap_living = cap_living || mutable_appearance(icon, "mushroom_cap") + cap_dead = cap_dead || mutable_appearance(icon, "mushroom_cap_dead") + + cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) UpdateMushroomCap() health = maxHealth ..() @@ -101,6 +101,8 @@ /mob/living/simple_animal/hostile/mushroom/proc/UpdateMushroomCap() cut_overlays() + cap_living.color = cap_color + cap_dead.color = cap_color if(health == 0) add_overlay(cap_dead) else diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm index 3f54f3d20ba..0dc4609e912 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm @@ -26,7 +26,7 @@ gold_core_spawnable = 1 /mob/living/simple_animal/hostile/retaliate/frog/Initialize() - ..() + . = ..() if(prob(1)) name = "rare frog" desc = "It seems a little smug." diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 20bb9c497e3..a0078013c7a 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -32,35 +32,31 @@ gold_core_spawnable = 0 //too spooky for science var/ghost_hair_style var/ghost_hair_color - var/image/ghost_hair = null + var/mutable_appearance/ghost_hair var/ghost_facial_hair_style var/ghost_facial_hair_color - var/image/ghost_facial_hair = null + var/mutable_appearance/ghost_facial_hair var/random = TRUE //if you want random names for ghosts or not /mob/living/simple_animal/hostile/retaliate/ghost/Initialize() - ..() - if(!random) - give_hair() - else + . = ..() + give_hair() + if(random) switch(rand(0,1)) if(0) name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" if(1) name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" - give_hair() /mob/living/simple_animal/hostile/retaliate/ghost/proc/give_hair() if(ghost_hair_style != null) - ghost_hair = image('icons/mob/human_face.dmi', "hair_[ghost_hair_style]") - ghost_hair.layer = -HAIR_LAYER + ghost_hair = mutable_appearance('icons/mob/human_face.dmi', "hair_[ghost_hair_style]", -HAIR_LAYER) ghost_hair.alpha = 200 ghost_hair.color = ghost_hair_color add_overlay(ghost_hair) if(ghost_facial_hair_style != null) - ghost_facial_hair = image('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]") - ghost_facial_hair.layer = -HAIR_LAYER + ghost_facial_hair = mutable_appearance('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]", -HAIR_LAYER) ghost_facial_hair.alpha = 200 ghost_facial_hair.color = ghost_facial_hair_color add_overlay(ghost_facial_hair) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 2e153e99c13..d87573edd3f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -7,6 +7,9 @@ status_flags = CANPUSH + // goats bray, cows go moo, and the fox says Geckers + initial_languages = list(/datum/language/common) + var/icon_living = "" var/icon_dead = "" //icon when the animal is dead. Don't use animated icons for this. var/icon_gib = null //We only try to show a gibbing animation if this exists. @@ -96,8 +99,6 @@ if(!loc) stack_trace("Simple animal being instantiated in nullspace") - // goats bray, cows go moo, and the fox says Geckers - grant_language(/datum/language/common) /mob/living/simple_animal/Login() if(src && src.client) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 1fc6ff2e78b..8971d33b284 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -18,6 +18,7 @@ emote_see = list("jiggles", "bounces in place") speak_emote = list("telepathically chirps") bubble_icon = "slime" + initial_languages = list(/datum/language/common, /datum/language/slime) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) @@ -91,8 +92,7 @@ E.Grant(src) create_reagents(100) set_colour(new_colour) - grant_language(/datum/language/slime) - ..() + . = ..() /mob/living/simple_animal/slime/proc/set_colour(new_colour) colour = new_colour @@ -118,7 +118,7 @@ if(stat != DEAD) icon_state = icon_text if(mood && !stat) - add_overlay(image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]")) + add_overlay("aslime-[mood]") else icon_state = icon_dead ..() diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 754be994508..a6f0c981441 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -15,13 +15,11 @@ next_move = 1 ..() - if (key != client.key) - key = client.key + reset_perspective(loc) - if(isobj(loc)) - var/obj/Loc=loc - Loc.on_log() + if(loc) + loc.on_log(TRUE) //readd this mob's HUDs (antag, med, etc) reload_huds() @@ -37,14 +35,8 @@ client.sethotkeys() //set mob specific hotkeys - if(viewing_alternate_appearances && viewing_alternate_appearances.len) - for(var/aakey in viewing_alternate_appearances) - for(var/aa in viewing_alternate_appearances[aakey]) - var/datum/alternate_appearance/AA = aa - AA.display_to(list(src)) - update_client_colour() if(client) client.click_intercept = null - client.view = world.view // Resets the client.view in case it was changed. \ No newline at end of file + client.view = world.view // Resets the client.view in case it was changed. \ No newline at end of file diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 0a6fcb00171..aadb7e6d588 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -2,34 +2,10 @@ SStgui.on_logout(src) unset_machine() GLOB.player_list -= src - if(GLOB.admin_datums[src.ckey]) - if (SSticker && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. - var/admins_number = GLOB.admins.len - if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. - var/cheesy_message = pick( list( \ - "I have no admins online!",\ - "I'm all alone :(",\ - "I'm feeling lonely :(",\ - "I'm so lonely :(",\ - "Why does nobody love me? :(",\ - "I want a man :(",\ - "Where has everyone gone?",\ - "I need a hug :(",\ - "Someone come hold me :(",\ - "I need someone on me :(",\ - "What happened? Where has everyone gone?",\ - "Forever alone :("\ - ) ) - if(cheesy_message) - cheesy_message += " (No admins online)" - - - send2irc("Server", "[cheesy_message]") ..() - if(isobj(loc)) - var/obj/Loc=loc - Loc.on_log() + if(loc) + loc.on_log(FALSE) - return 1 \ No newline at end of file + return TRUE \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 34e977acfc4..023c1047178 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -28,6 +28,9 @@ GLOB.living_mob_list += src prepare_huds() can_ride_typecache = typecacheof(can_ride_typecache) + for(var/v in GLOB.active_alternate_appearances) + var/datum/atom_hud/alternate_appearance/AA = v + AA.onNewMob(src) ..() /atom/proc/prepare_huds() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 3942014fb9f..2700d35092f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -377,7 +377,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /mob/proc/reagent_check(datum/reagent/R) // utilized in the species code return 1 -/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/image/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts. +/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/mutable_appearance/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts. if(SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load return for(var/mob/dead/observer/O in GLOB.player_list) @@ -396,17 +396,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp A.action = action A.target = source if(!alert_overlay) - var/old_layer = source.layer - var/old_plane = source.plane - source.layer = FLOAT_LAYER - source.plane = FLOAT_PLANE - A.add_overlay(source) - source.layer = old_layer - source.plane = old_plane - else - alert_overlay.layer = FLOAT_LAYER - alert_overlay.plane = FLOAT_PLANE - A.add_overlay(alert_overlay) + alert_overlay = new(src) + alert_overlay.layer = FLOAT_LAYER + alert_overlay.plane = FLOAT_PLANE + A.add_overlay(alert_overlay) /proc/item_heal_robotic(mob/living/carbon/human/H, mob/user, brute_heal, burn_heal) var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 6a14d3a43fe..e1d20c3ecc2 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -19,7 +19,7 @@ var/slowdown_open = 1 /obj/item/device/modular_computer/laptop/Initialize() - ..() + . = ..() // No running around with open laptops in hands. SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 3b120840c0f..dadb1ddd60a 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -32,7 +32,7 @@ /obj/structure/filingcabinet/Initialize(mapload) - ..() + . = ..() if(mapload) for(var/obj/item/I in loc) if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 72fe84de458..36e69828b27 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -336,12 +336,10 @@ return stamps += "" - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') + var/mutable_appearance/stampoverlay = mutable_appearance('icons/obj/bureaucracy.dmi', "paper_[P.icon_state]") stampoverlay.pixel_x = rand(-2, 2) stampoverlay.pixel_y = rand(-3, 2) - stampoverlay.icon_state = "paper_[P.icon_state]" - LAZYADD(stamped, P.icon_state) add_overlay(stampoverlay) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 2fca29b45c5..6a25273b83e 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -15,7 +15,7 @@ var/obj/item/weapon/pen/bin_pen /obj/item/weapon/paper_bin/Initialize(mapload) - ..() + . = ..() if(!mapload) return var/obj/item/weapon/pen/P = locate(/obj/item/weapon/pen) in src.loc @@ -135,7 +135,7 @@ icon_state = "[initial(icon_state)]" cut_overlays() if(bin_pen) - add_overlay(image(icon=bin_pen.icon,icon_state=bin_pen.icon_state)) + add_overlay(mutable_appearance(bin_pen.icon, bin_pen.icon_state)) /obj/item/weapon/paper_bin/construction name = "construction paper bin" diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index d294e094f56..2514784bcb5 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -14,7 +14,7 @@ var/obj/item/weapon/paper/internalPaper /obj/item/weapon/paperplane/Initialize(mapload, obj/item/weapon/paper/newPaper) - ..() + . = ..() pixel_y = rand(-8, 8) pixel_x = rand(-9, 9) if(newPaper) @@ -44,8 +44,7 @@ var/list/stamped = internalPaper.stamped if(stamped) for(var/S in stamped) - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[stamped]") - add_overlay(stampoverlay) + add_overlay("paperplane_[S]") /obj/item/weapon/paperplane/attack_self(mob/user) to_chat(user, "You unfold [src].") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index a9dd0e78f2f..46332854887 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -93,12 +93,6 @@ var/force_update = 0 var/update_state = -1 var/update_overlay = -1 - var/global/status_overlays = 0 - var/global/list/status_overlays_lock - var/global/list/status_overlays_charging - var/global/list/status_overlays_equipment - var/global/list/status_overlays_lighting - var/global/list/status_overlays_environ /obj/machinery/power/apc/connect_to_network() @@ -172,7 +166,7 @@ terminal.master = src /obj/machinery/power/apc/Initialize(mapload) - ..() + . = ..() if(!mapload) return has_electronics = 2 //installed and secured @@ -218,35 +212,6 @@ // update the APC icon to show the three base states // also add overlays for indicator lights /obj/machinery/power/apc/update_icon() - if (!status_overlays) - status_overlays = 1 - status_overlays_lock = new(2) - status_overlays_charging = new(3) - status_overlays_equipment = new(4) - status_overlays_lighting = new(4) - status_overlays_environ = new(4) - - status_overlays_lock[1] = image(icon, "apcox-0") // 0=blue 1=red - status_overlays_lock[2] = image(icon, "apcox-1") - - status_overlays_charging[1] = image(icon, "apco3-0") - status_overlays_charging[2] = image(icon, "apco3-1") - status_overlays_charging[3] = image(icon, "apco3-2") - - status_overlays_equipment[1] = image(icon, "apco0-0") - status_overlays_equipment[2] = image(icon, "apco0-1") - status_overlays_equipment[3] = image(icon, "apco0-2") - status_overlays_equipment[4] = image(icon, "apco0-3") - - status_overlays_lighting[1] = image(icon, "apco1-0") - status_overlays_lighting[2] = image(icon, "apco1-1") - status_overlays_lighting[3] = image(icon, "apco1-2") - status_overlays_lighting[4] = image(icon, "apco1-3") - - status_overlays_environ[1] = image(icon, "apco2-0") - status_overlays_environ[2] = image(icon, "apco2-1") - status_overlays_environ[3] = image(icon, "apco2-2") - status_overlays_environ[4] = image(icon, "apco2-3") var/update = check_updates() //returns 0 if no need to update icons. // 1 if we need to update the icon_state @@ -283,12 +248,12 @@ cut_overlays() if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) var/list/O = list( - status_overlays_lock[locked+1], - status_overlays_charging[charging+1]) + "apcox-[locked]", + "apco3-[charging]") if(operating) - O += status_overlays_equipment[equipment+1] - O += status_overlays_lighting[lighting+1] - O += status_overlays_environ[environ+1] + O += "apco0-[equipment]" + O += "apco1-[lighting]" + O += "apco2-[environ]" add_overlay(O) // And now, seperately for cleanness, the lighting changing diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index cbb520b6800..4f4c6e4d1f0 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -108,9 +108,9 @@ By design, d1 is the smallest direction and d2 is the highest if(level == 1 && isturf(loc)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 - updateicon() + update_icon() -/obj/structure/cable/proc/updateicon() +/obj/structure/cable/update_icon() if(invisibility) icon_state = "[d1]-[d2]-f" else @@ -429,6 +429,59 @@ By design, d1 is the smallest direction and d2 is the highest if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to P.disconnect_from_network() //remove from current network +// Ugly procs that ensure proper separation and reconnection of wires on shuttle movement/rotation +/obj/structure/cable/beforeShuttleMove(turf/T1, rotation) + var/on_edge = FALSE + var/A = get_area(src) + + for(var/D in GLOB.alldirs) + if(A != get_area(get_step(src, D))) + on_edge = TRUE + break + + if(on_edge && powernet) + var/tmp_loc = loc + cut_cable_from_powernet() + loc = tmp_loc + +/obj/structure/cable/afterShuttleMove() + var/on_edge = FALSE + var/A = get_area(src) + + for(var/D in GLOB.alldirs) + if(A != get_area(get_step(src, D))) + on_edge = TRUE + break + + if(on_edge) + var/datum/powernet/PN = new() + PN.add_cable(src) + + mergeConnectedNetworks(d1) //merge the powernet with adjacents powernets + mergeConnectedNetworks(d2) + mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets + + if(d1 & (d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions + mergeDiagonalsNetworks(d1) + if(d2 & (d2 - 1)) + mergeDiagonalsNetworks(d2) + +/obj/structure/cable/shuttleRotate(rotation) + //..() is not called because wires are not supposed to have a non-default direction + //Rotate connections + if(d1) + d1 = angle2dir(rotation+dir2angle(d1)) + if(d2) + d2 = angle2dir(rotation+dir2angle(d2)) + + //d1 should be less than d2 for cable icons to work + if(d1 > d2) + var/temp = d1 + d1 = d2 + d2 = temp + update_icon() + + /////////////////////////////////////////////// // The cable coil object, used for laying cable /////////////////////////////////////////////// @@ -584,7 +637,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai C.d1 = 0 //it's a O-X node cable C.d2 = dirn C.add_fingerprint(user) - C.updateicon() + C.update_icon() //create a new powernet with the cable, if needed it will be merged later var/datum/powernet/PN = new() @@ -650,7 +703,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai NC.d1 = 0 NC.d2 = fdirn NC.add_fingerprint() - NC.updateicon() + NC.update_icon() //create a new powernet with the cable, if needed it will be merged later var/datum/powernet/newPN = new() @@ -699,7 +752,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai C.update_stored(2, item_color) C.add_fingerprint() - C.updateicon() + C.update_icon() C.mergeConnectedNetworks(C.d1) //merge the powernets... @@ -773,3 +826,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai item_color = pick("red","orange","yellow","green","cyan","blue","pink","white") icon_state = "coil_[item_color]" ..() + +/obj/item/stack/cable_coil/random/five + amount = 5 diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index c12be4e0135..985fceec23f 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -49,13 +49,13 @@ /obj/item/weapon/stock_parts/cell/proc/updateicon() cut_overlays() if(grown_battery) - add_overlay(image('icons/obj/power.dmi', "grown_wires")) + add_overlay("grown_wires") if(charge < 0.01) return else if(charge/maxcharge >=0.995) - add_overlay(image('icons/obj/power.dmi', "cell-o2")) + add_overlay("cell-o2") else - add_overlay(image('icons/obj/power.dmi', "cell-o1")) + add_overlay("cell-o1") /obj/item/weapon/stock_parts/cell/proc/percent() // return % charge of cell return 100*charge/maxcharge diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 3dfba8e952c..f3bbc205663 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -28,7 +28,7 @@ /obj/machinery/power/generator/Initialize(mapload) - ..() + . = ..() var/obj/machinery/atmospherics/components/binary/circulator/circpath = /obj/machinery/atmospherics/components/binary/circulator cold_circ = locate(circpath) in get_step(src, cold_dir) hot_circ = locate(circpath) in get_step(src, hot_dir) @@ -64,9 +64,9 @@ cut_overlays() if(lastgenlev != 0) - add_overlay(image('icons/obj/power.dmi', "teg-op[lastgenlev]")) + add_overlay("teg-op[lastgenlev]") - add_overlay(image('icons/obj/power.dmi', "teg-oc[lastcirc]")) + add_overlay("teg-oc[lastcirc]") #define GENRATE 800 // generator output coefficient from Q diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index c23597f95f8..4f8cd308752 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -98,7 +98,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne // /obj/machinery/gravity_generator/main/station/Initialize() - ..() + . = ..() setup_parts() middle.add_overlay("activated") update_list() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 30ec0f41707..f24c7fdd5fb 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -60,7 +60,7 @@ var/current_heat = 0 /obj/machinery/power/port_gen/pacman/Initialize() - ..() + . = ..() if(anchored) connect_to_network() diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 2f006d1965a..53bcc0869b5 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -34,7 +34,7 @@ /obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it. /obj/machinery/power/rtg/Initialize() - ..() + . = ..() connect_to_network() /obj/machinery/power/rtg/process() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7e04df570f2..9fc4f668c9c 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -141,11 +141,11 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/proc/update_icons() cut_overlays() if(loaded_tank) - add_overlay(image('icons/obj/singularity.dmi', "ptank")) + add_overlay("ptank") if(stat & (NOPOWER|BROKEN)) return if(active) - add_overlay(image('icons/obj/singularity.dmi', "on")) + add_overlay("on") /obj/machinery/power/rad_collector/proc/toggle_power() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index e007949b088..02953a70242 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -88,7 +88,7 @@ rotate() /obj/machinery/power/emitter/Initialize() - ..() + . = ..() if(state == 2 && anchored) connect_to_network() diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index dc54a3db4e7..410181dede6 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -33,7 +33,7 @@ var/area/A = get_area(src) if(A) - var/image/alert_overlay = image('icons/effects/effects.dmi', "ghostalertsie") + var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/effects.dmi', "ghostalertsie") notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action=NOTIFY_ATTACK) narsie_spawn_animation() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e03eaf944ac..fdb4699ae5d 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -38,9 +38,6 @@ var/obj/machinery/power/terminal/terminal = null - var/static/list/smesImageCache - - /obj/machinery/power/smes/examine(user) ..() if(!terminal) @@ -226,36 +223,20 @@ if(panel_open) return - if(!smesImageCache || !smesImageCache.len) - smesImageCache = list() - smesImageCache.len = 9 - - smesImageCache[SMES_CLEVEL_1] = image('icons/obj/power.dmi',"smes-og1") - smesImageCache[SMES_CLEVEL_2] = image('icons/obj/power.dmi',"smes-og2") - smesImageCache[SMES_CLEVEL_3] = image('icons/obj/power.dmi',"smes-og3") - smesImageCache[SMES_CLEVEL_4] = image('icons/obj/power.dmi',"smes-og4") - smesImageCache[SMES_CLEVEL_5] = image('icons/obj/power.dmi',"smes-og5") - - smesImageCache[SMES_OUTPUTTING] = image('icons/obj/power.dmi', "smes-op1") - smesImageCache[SMES_NOT_OUTPUTTING] = image('icons/obj/power.dmi',"smes-op0") - smesImageCache[SMES_INPUTTING] = image('icons/obj/power.dmi', "smes-oc1") - smesImageCache[SMES_INPUT_ATTEMPT] = image('icons/obj/power.dmi', "smes-oc0") - if(outputting) - add_overlay(smesImageCache[SMES_OUTPUTTING]) + add_overlay("smes-op1") else - add_overlay(smesImageCache[SMES_NOT_OUTPUTTING]) + add_overlay("smes-op0") if(inputting) - add_overlay(smesImageCache[SMES_INPUTTING]) + add_overlay("smes-oc1") else if(input_attempt) - add_overlay(smesImageCache[SMES_INPUT_ATTEMPT]) + add_overlay("smes-oc0") var/clevel = chargedisplay() if(clevel>0) - add_overlay(smesImageCache[clevel]) - return + add_overlay("smes-og[clevel]") /obj/machinery/power/smes/proc/chargedisplay() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index e5097d422a0..47e04339d49 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -103,9 +103,9 @@ ..() cut_overlays() if(stat & BROKEN) - add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)) + add_overlay(mutable_appearance(icon, "solar_panel-b", FLY_LAYER)) else - add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)) + add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER)) src.setDir(angle2dir(adir)) //calculates the fraction of the sunlight that the panel recieves @@ -282,7 +282,7 @@ var/list/connected_panels = list() /obj/machinery/power/solar_control/Initialize() - ..() + . = ..() if(powernet) set_panels(currentdir) connect_to_network() @@ -345,7 +345,8 @@ else add_overlay(icon_screen) if(currentdir > -1) - add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(currentdir))) + setDir(angle2dir(currentdir)) + add_overlay(mutable_appearance(icon, "solcon-o", FLY_LAYER)) /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 8f0e4d0f330..120dd0b46c6 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -86,7 +86,7 @@ /obj/item/weapon/stock_parts/manipulator = 6) /obj/machinery/power/compressor/Initialize() - ..() + . = ..() locate_machinery() if(!turbine) stat |= BROKEN @@ -170,13 +170,13 @@ if(rpm>50000) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o4", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o4", FLY_LAYER)) else if(rpm>10000) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o3", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o3", FLY_LAYER)) else if(rpm>2000) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o2", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o2", FLY_LAYER)) else if(rpm>500) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o1", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "comp-o1", FLY_LAYER)) //TODO: DEFERRED // These are crucial to working of a turbine - the stats modify the power output. TurbGenQ modifies how much raw energy can you get from @@ -202,7 +202,7 @@ /obj/item/weapon/stock_parts/capacitor = 6) /obj/machinery/power/turbine/Initialize() - ..() + . = ..() locate_machinery() if(!compressor) stat |= BROKEN @@ -255,7 +255,7 @@ // If it works, put an overlay that it works! if(lastgen > 100) - add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "turb-o", FLY_LAYER)) + add_overlay(mutable_appearance(icon, "turb-o", FLY_LAYER)) updateDialog() @@ -338,7 +338,7 @@ /obj/machinery/computer/turbine_computer/Initialize() - ..() + . = ..() locate_machinery() /obj/machinery/computer/turbine_computer/locate_machinery() diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm index bd00fdd7d92..89a5faa9283 100644 --- a/code/modules/projectiles/guns/ballistic/bow.dm +++ b/code/modules/projectiles/guns/ballistic/bow.dm @@ -15,7 +15,7 @@ var/slowdown_when_ready = 2 /obj/item/weapon/gun/ballistic/bow/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND) /obj/item/weapon/gun/ballistic/bow/update_icon() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 77910478423..4b2a43a3fcf 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -132,15 +132,20 @@ add_overlay("[icon_state]_empty") else if(!shaded_charge) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState) for(var/i = ratio, i >= 1, i--) - add_overlay(image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1))) + charge_overlay.pixel_x = ammo_x_offset * (i - 1) + add_overlay(charge_overlay) else - add_overlay(image(icon = icon, icon_state = "[icon_state]_charge[ratio]")) + add_overlay("[icon_state]_charge[ratio]") if(gun_light && can_flashlight) var/iconF = "flight" if(gun_light.on) iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF) + flashlight_overlay.pixel_x = flight_x_offset + flashlight_overlay.pixel_y = flight_y_offset + add_overlay(flashlight_overlay) if(itemState) itemState += "[ratio]" item_state = itemState diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 07450fc9b5a..6a5dab12bf6 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -136,7 +136,10 @@ var/iconF = "flight" if(gun_light.on) iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF) + flashlight_overlay.pixel_x = flight_x_offset + flashlight_overlay.pixel_y = flight_y_offset + add_overlay(flashlight_overlay) //Casing /obj/item/ammo_casing/energy/kinetic diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index a3dd75c3749..7c845759ea0 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -42,7 +42,7 @@ range = 10 /obj/item/projectile/energy/net/Initialize() - ..() + . = ..() SpinAnimation() /obj/item/projectile/energy/net/on_hit(atom/target, blocked = 0) @@ -61,11 +61,11 @@ desc = "A field of bluespace energy, locking on to teleport a target." icon = 'icons/effects/effects.dmi' icon_state = "dragnetfield" + light_range = 3 anchored = 1 /obj/effect/nettingportal/Initialize() - ..() - set_light(3) + . = ..() var/obj/item/device/radio/beacon/teletarget = null for(var/obj/machinery/computer/teleporter/com in GLOB.machines) if(com.target) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 2ea99af8823..da1eb90685b 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -14,7 +14,7 @@ var/amount = 30 var/recharged = 0 var/recharge_delay = 5 - var/image/icon_beaker = null + var/mutable_appearance/beaker_overlay var/obj/item/weapon/reagent_containers/beaker = null var/list/dispensable_reagents = list( "hydrogen", @@ -184,10 +184,9 @@ beaker.loc = src to_chat(user, "You add \the [B] to the machine.") - if(!icon_beaker) - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - add_overlay(icon_beaker) + beaker_overlay = beaker_overlay || mutable_appearance(icon, "disp_beaker") + beaker_overlay.pixel_x = rand(-10, 5)//randomize beaker overlay position. + add_overlay(beaker_overlay) else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/weapon/card/emag)) to_chat(user, "You can't load \the [I] into the machine!") else diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index cb06dc29eec..5eb034d6043 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -15,7 +15,7 @@ else Wall.thermite = Wall.thermite+(reac_volume*10) Wall.overlays = list() - Wall.add_overlay(image('icons/effects/effects.dmi',"thermite")) + Wall.add_overlay(mutable_appearance('icons/effects/effects.dmi', "thermite")) /datum/reagent/thermite/on_mob_life(mob/living/M) M.adjustFireLoss(1, 0) diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 1de2ec5ba78..a92c52abf47 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -21,7 +21,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/update_icon() cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]-10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]-10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 7b4faf0f7a0..9f0094bfc32 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -91,6 +91,6 @@ /obj/item/weapon/reagent_containers/dropper/update_icon() cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "dropper") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "dropper") filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index bbd85d8f6d8..a697ccbe5b8 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -133,7 +133,7 @@ cut_overlays() if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") + var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]10") var/percent = round((reagents.total_volume / volume) * 100) switch(percent) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 4ee6ba1ac84..e7a6b5e6cc9 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -167,10 +167,9 @@ item_state = "syringe_[rounded_vol]" if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") - filling.icon_state = "syringe[rounded_vol]" - filling.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling) + var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]") + filling_overlay.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(filling_overlay) /obj/item/weapon/reagent_containers/syringe/epinephrine name = "syringe (epinephrine)" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 8a9ccd60d03..21f663bd5dd 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -214,7 +214,7 @@ /obj/machinery/conveyor_switch/Initialize(mapload, newid) if(mapload) return TRUE //need machines list - ..() + . = ..() if(!id) id = newid update() diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index a4b751574b2..6ea1d958b3c 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -339,6 +339,16 @@ if(current_size >= STAGE_FIVE) deconstruct() +//Fixes dpdir on shuttle rotation +/obj/structure/disposalpipe/shuttleRotate(rotation) + ..() + var/new_dpdir = 0 + for(var/D in GLOB.cardinal) + if(dpdir & D) + new_dpdir = new_dpdir | angle2dir(rotation+dir2angle(D)) + dpdir = new_dpdir + + // *** TEST verb //client/verb/dispstop() // for(var/obj/structure/disposalholder/H in world) diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index 2d3ecc88d4c..efb428f5f61 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -363,7 +363,7 @@ //flush handle if(flush) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-handle")) + add_overlay("dispover-handle") //only handle is shown if no power if(stat & NOPOWER || panel_open) @@ -371,13 +371,13 @@ //check for items in disposal - occupied light if(contents.len > 0) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-full")) + add_overlay("dispover-full") //charging and ready light if(pressure_charging) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-charge")) + add_overlay("dispover-charge") else if(full_pressure) - add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-ready")) + add_overlay("dispover-ready") //timed process //charge the gas reservoir and perform flush if ready diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 24fe6a1c745..5c28bc752a8 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(message_servers, list()) var/recipient = "Unspecified" //name of the person var/sender = "Unspecified" //name of the sender var/message = "Blank" //transferred message - var/image/photo = null //Attached photo + var/icon/photo //Attached photo /datum/data_pda_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "",var/param_photo=null) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 3f3453fd0e8..468185e615c 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -38,7 +38,7 @@ heat_gen /= max(1, tot_rating) /obj/machinery/r_n_d/server/Initialize(mapload) - ..() + . = ..() if(!files) files = new /datum/research(src) var/list/temp_list if(!id_with_upload.len) @@ -137,7 +137,7 @@ server_id = -1 /obj/machinery/r_n_d/server/centcom/Initialize() - ..() + . = ..() fix_noid_research_servers() /proc/fix_noid_research_servers() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index c02894bc3c9..bd34ff60c0d 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -8,7 +8,7 @@ /mob/camera/aiEye/remote/xenobio/Initialize() var/area/A = get_area(loc) allowed_area = A.name - ..() + . = ..() /mob/camera/aiEye/remote/xenobio/setLoc(var/t) var/area/new_area = get_area(t) diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 6d18ce98f7e..2938f9263cf 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -47,7 +47,7 @@ to_chat(M, "Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has come.") M << 'sound/creatures/legion_spawn.ogg' flash_color(M, flash_color = "#FF0000", flash_time = 50) - var/image/door_overlay = image('icons/effects/effects.dmi', "legiondoor") + var/mutable_appearance/door_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor") notify_ghosts("Legion has been summoned in the [get_area(src)]!", source = src, alert_overlay = door_overlay, action = NOTIFY_JUMP) is_anyone_home = FALSE new/mob/living/simple_animal/hostile/megafauna/legion(get_step(src.loc, SOUTH)) diff --git a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm index 4db811604d8..669890a279a 100644 --- a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm +++ b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm @@ -7,7 +7,7 @@ var/baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface /obj/effect/baseturf_helper/Initialize() - ..() + . = ..() var/area/thearea = get_area(src) for(var/turf/T in get_area_turfs(thearea, z)) if(T.baseturf != T.type) //Don't break indestructible walls and the like diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index cc0efd53594..aa0b9e6f786 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -34,7 +34,7 @@ SSshuttle.arrivals = src - ..() + . = ..() areas = list() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 6432114c9e6..147f607075e 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -450,7 +450,7 @@ // Minimal distance from the map edge, setting this too low can result in shuttle landing on the edge and getting "sliced" /obj/docking_port/stationary/random/Initialize(mapload) - ..() + . = ..() if(!mapload) return diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 0d836818546..0ec47093017 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -26,9 +26,9 @@ /obj/machinery/shuttle_manipulator/update_icon() cut_overlays() - var/image/hologram_projection = image(icon, "hologram_on") + var/mutable_appearance/hologram_projection = mutable_appearance(icon, "hologram_on") hologram_projection.pixel_y = 22 - var/image/hologram_ship = image(icon, "hologram_whiteship") + var/mutable_appearance/hologram_ship = mutable_appearance(icon, "hologram_whiteship") hologram_ship.pixel_y = 27 add_overlay(hologram_projection) add_overlay(hologram_ship) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 2f80291a0e4..756fad25b36 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -1,3 +1,8 @@ +// Called before shuttle starts moving atoms. +/atom/movable/proc/beforeShuttleMove(turf/T1, rotation) + return + +// Called when shuttle attempts to move an atom. /atom/movable/proc/onShuttleMove(turf/T1, rotation) if(rotation) shuttleRotate(rotation) @@ -6,25 +11,16 @@ update_parallax_contents() return 1 +// Called after all of the atoms on shuttle are moved. +/atom/movable/proc/afterShuttleMove() + return + + /obj/onShuttleMove() if(invisibility >= INVISIBILITY_ABSTRACT) return 0 . = ..() -/obj/machinery/atmospherics/onShuttleMove() - . = ..() - for(DEVICE_TYPE_LOOP) - if(get_area(nodes[I]) != get_area(src)) - nullifyNode(I) - -#define DIR_CHECK_TURF_AREA(X) (get_area(get_ranged_target_turf(src, X, 1)) != A) -/obj/structure/cable/onShuttleMove() - . = ..() - var/A = get_area(src) - //cut cables on the edge - if(DIR_CHECK_TURF_AREA(NORTH) || DIR_CHECK_TURF_AREA(SOUTH) || DIR_CHECK_TURF_AREA(EAST) || DIR_CHECK_TURF_AREA(WEST)) - cut_cable_from_powernet() -#undef DIR_CHECK_TURF_AREA /atom/movable/light/onShuttleMove() return 0 diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index f6cff76c003..de9338d55db 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -241,7 +241,7 @@ . = ..() /obj/docking_port/mobile/Initialize(mapload) - ..() + . = ..() var/area/A = get_area(src) if(istype(A, /area/shuttle)) @@ -481,6 +481,21 @@ //move or squish anything in the way ship at destination roadkill(L0, L1, S1.dir) + + for(var/i in 1 to L0.len) + var/turf/T0 = L0[i] + if(!T0) + continue + var/turf/T1 = L1[i] + if(!T1) + continue + if(T0.type == T0.baseturf) + continue + for(var/atom/movable/AM in T0) + AM.beforeShuttleMove(T1, rotation) + + var/list/moved_atoms = list() + for(var/i in 1 to L0.len) var/turf/T0 = L0[i] if(!T0) @@ -502,7 +517,8 @@ //move mobile to new location for(var/atom/movable/AM in T0) - AM.onShuttleMove(T1, rotation) + if(AM.onShuttleMove(T1, rotation)) + moved_atoms += AM if(rotation) T1.shuttleRotate(rotation) @@ -517,6 +533,10 @@ T0.CalculateAdjacentTurfs() SSair.add_to_active(T0,1) + for(var/am in moved_atoms) + var/atom/movable/AM = am + AM.afterShuttleMove() + check_poddoors() S1.last_dock_time = world.time diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index cc4cc163f3e..78732d82e4b 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -60,6 +60,7 @@ obj_integrity = 1000 max_integrity = 1000 verb_say = "chants" + initial_languages = list(/datum/language/common) var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE @@ -68,7 +69,6 @@ /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) - grant_language(/datum/language/common) /obj/structure/table/abductor/wabbajack/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index f72eff6302c..50f51a0b3b9 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -85,7 +85,7 @@ var/static/active_phylacteries = 0 /obj/item/phylactery/Initialize(mapload, datum/mind/newmind) - ..() + . = ..() mind = newmind name = "phylactery of [mind.name]" diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm index 4f469b61b2a..3a84f73ef91 100644 --- a/code/modules/spells/spell_types/lightning.dm +++ b/code/modules/spells/spell_types/lightning.dm @@ -11,7 +11,7 @@ selection_type = "view" random_target = 1 var/ready = 0 - var/image/halo = null + var/static/mutable_appearance/halo var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea. action_icon_state = "lightning" @@ -25,7 +25,7 @@ ready = 1 to_chat(user, "You start gathering the power.") Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7) - halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER) + halo = halo || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) user.add_overlay(halo) playsound(get_turf(user), Snd, 50, 0) if(do_mob(user,user,100,1)) @@ -38,8 +38,7 @@ /obj/effect/proc_holder/spell/targeted/tesla/proc/Reset(mob/user = usr) ready = 0 - if(halo) - user.cut_overlay(halo) + user.cut_overlay(halo) /obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1) if(message) diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm index bed0255b027..6a68643d557 100644 --- a/code/modules/spells/spell_types/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/spacetime_distortion.dm @@ -74,7 +74,7 @@ var/walks_left = 50 //prevents the game from hanging in extreme cases (such as minigun fire) /obj/effect/cross_action/spacetime_dist/Initialize(mapload) - ..() + . = ..() sound = "sound/guitar/[safepick(GLOB.guitar_notes)]" dir = pick(GLOB.cardinal) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 1a6a2cc53cf..5f808035fd3 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -127,7 +127,7 @@ icon = 'icons/obj/lavaland/cannon.dmi' icon_state = "orbital_cannon1" unsecuring_tool = null - var/static/image/top_layer = null + var/static/mutable_appearance/top_layer var/ex_power = 3 var/power_used_per_shot = 2000000 //enough to kil standard apc - todo : make this use wires instead and scale explosion power with it var/ready @@ -161,19 +161,18 @@ return locate(world.maxx,y,z) return get_turf(src) -/obj/machinery/bsa/full/Initialize(mapload,cannon_direction = WEST) +/obj/machinery/bsa/full/Initialize(mapload, cannon_direction = WEST) . = ..() + top_layer = top_layer || mutable_appearance(icon, layer = ABOVE_MOB_LAYER) switch(cannon_direction) if(WEST) dir = WEST pixel_x = -192 - top_layer = image("icons/obj/lavaland/orbital_cannon.dmi", "top_west") - top_layer.layer = ABOVE_MOB_LAYER + top_layer.icon_state = "top_west" icon_state = "cannon_west" if(EAST) dir = EAST - top_layer = image("icons/obj/lavaland/orbital_cannon.dmi", "top_east") - top_layer.layer = ABOVE_MOB_LAYER + top_layer.icon_state = "top_east" icon_state = "cannon_east" add_overlay(top_layer) reload() diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index d7f9a72a9ef..02ce0f77069 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -170,7 +170,7 @@ plants_max = G.plant_count dna_max = G.human_count break - ..() + . = ..() /obj/machinery/dna_vault/Destroy() for(var/V in fillers) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 56d35be23b3..d93fc658ddb 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -284,79 +284,66 @@ /obj/item/bodypart/proc/get_limb_icon(dropped) icon_state = "" //to erase the default sprite, we're building the visual aspects of the bodypart through overlays alone. - var/list/standing = list() + . = list() - var/image_dir + var/image_dir = 0 if(dropped) image_dir = SOUTH if(dmg_overlay_type) if(brutestate) - standing += image("icon"='icons/mob/dam_mob.dmi', "icon_state"="[dmg_overlay_type]_[body_zone]_[brutestate]0", "layer"=-DAMAGE_LAYER, "dir"=image_dir) + . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir) if(burnstate) - standing += image("icon"='icons/mob/dam_mob.dmi', "icon_state"="[dmg_overlay_type]_[body_zone]_0[burnstate]", "layer"=-DAMAGE_LAYER, "dir"=image_dir) + . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) + var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) + . += limb if(animal_origin) if(status == BODYPART_ORGANIC) + limb.icon = 'icons/mob/animal_parts.dmi' if(species_id == "husk") - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state"="[animal_origin]_husk_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[animal_origin]_husk_[body_zone]" else - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state"="[animal_origin]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[animal_origin]_[body_zone]" else - standing += image("icon"='icons/mob/augments.dmi', "icon_state"="[animal_origin]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) - return standing + limb.icon = 'icons/mob/augments.dmi' + limb.icon_state = "[animal_origin]_[body_zone]" + return var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable if((body_zone != "head" && body_zone != "chest")) should_draw_gender = FALSE - var/image/I - if(status == BODYPART_ORGANIC) if(should_draw_greyscale) + limb.icon = 'icons/mob/human_parts_greyscale.dmi' if(should_draw_gender) - I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="[species_id]_[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else if(use_digitigrade) - I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="digitigrade_[use_digitigrade]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]" else - I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]" else + limb.icon = 'icons/mob/human_parts.dmi' if(should_draw_gender) - I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else - I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[species_id]_[body_zone]" + else + limb.icon = icon if(should_draw_gender) - I = image("icon"= icon, "icon_state"="[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) + limb.icon_state = "[body_zone]_[icon_gender]" else - I = image("icon"= icon, "icon_state"="[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir) - standing += I - return standing - - - if(!should_draw_greyscale) - standing += I - return standing - - //Greyscale Colouring - var/draw_color - - if(skin_tone) //Limb has skin color variable defined, use it - draw_color = skintone2hex(skin_tone) - if(species_color) - draw_color = species_color - if(mutation_color) - draw_color = mutation_color - - if(draw_color) - I.color = "#[draw_color]" - //End Greyscale Colouring - standing += I - - return standing + limb.icon_state = "[body_zone]" + return + if(should_draw_greyscale) + var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) + if(draw_color) + limb.color = "#[draw_color]" /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 7d9cf89ff06..de8c2b79acf 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -137,14 +137,10 @@ loc = LB /obj/item/organ/brain/transfer_to_limb(obj/item/bodypart/head/LB, mob/living/carbon/human/C) - if(C.mind && C.mind.changeling) - LB.brain = new //changeling doesn't lose its real brain organ, we drop a decoy. - LB.brain.loc = LB - LB.brain.decoy_override = TRUE - else //if not a changeling, we put the brain organ inside the dropped head - Remove(C) //and put the player in control of the brainmob - loc = LB - LB.brain = src + Remove(C) //Changeling brain concerns are now handled in Remove + loc = LB + LB.brain = src + if(brainmob) LB.brainmob = brainmob brainmob = null LB.brainmob.loc = LB diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 6417ade8198..909f83e4d71 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -119,7 +119,7 @@ /obj/item/bodypart/head/get_limb_icon(dropped) cut_overlays() - var/list/standing = ..() + . = ..() if(dropped) //certain overlays only appear when the limb is being detached from its owner. var/datum/sprite_accessory/S @@ -128,45 +128,48 @@ if(facial_hair_style) S = GLOB.facial_hair_styles_list[facial_hair_style] if(S) - var/image/img_facial = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH) - img_facial.color = "#" + facial_hair_color - img_facial.alpha = hair_alpha - standing += img_facial + var/image/facial_overlay = image(S.icon, "[S.icon_state]", -HAIR_LAYER, SOUTH) + facial_overlay.color = "#" + facial_hair_color + facial_overlay.alpha = hair_alpha + . += facial_overlay + var/image/hair_overlay = image(layer = -HAIR_LAYER, dir = SOUTH) + . += hair_overlay //Applies the debrained overlay if there is no brain if(!brain) if(animal_origin == ALIEN_BODYPART) - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state" = "debrained_alien", "layer" = -HAIR_LAYER, "dir"=SOUTH) + hair_overlay.icon = 'icons/mob/animal_parts.dmi' + hair_overlay.icon_state = "debrained_alien" else if(animal_origin == LARVA_BODYPART) - standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state" = "debrained_larva", "layer" = -HAIR_LAYER, "dir"=SOUTH) + hair_overlay.icon = 'icons/mob/animal_parts.dmi' + hair_overlay.icon_state = "debrained_larva" else if(!(NOBLOOD in species_flags_list)) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER, "dir"=SOUTH) + hair_overlay.icon = 'icons/mob/human_face.dmi' + hair_overlay.icon_state = "debrained" else if(hair_style) S = GLOB.hair_styles_list[hair_style] if(S) - var/image/img_hair = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH) - img_hair.color = "#" + hair_color - img_hair.alpha = hair_alpha - standing += img_hair + hair_overlay.icon = icon + hair_overlay.icon_state = "[S.icon_state]" + hair_overlay.color = "#" + hair_color + hair_overlay.alpha = hair_alpha // lipstick if(lip_style) - var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]", "layer" = -BODY_LAYER, "dir"=SOUTH) - lips.color = lip_color - standing += lips + var/image/lips_overlay = image('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER, SOUTH) + lips_overlay.color = lip_color + . += lips_overlay // eyes + var/image/eyes_overlay = image('icons/mob/human_face.dmi', "eyes", -BODY_LAYER, SOUTH) + . += eyes_overlay if(!eyes) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "eyes_missing", "layer" = -BODY_LAYER, "dir"=SOUTH) + eyes_overlay.icon_state = "eyes_missing" else if(eyes.eye_color) - var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER, "dir"=SOUTH) - img_eyes.color = "#" + eyes.eye_color - standing += img_eyes - - return standing + eyes_overlay.color = "#" + eyes.eye_color /obj/item/bodypart/head/monkey icon = 'icons/mob/animal_parts.dmi' diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 0ba52a0cb96..ff2a3f03120 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -11,7 +11,7 @@ if(iscarbon(M)) src.Insert(M) if(implant_overlay) - var/image/overlay = new /image(icon, implant_overlay) + var/mutable_appearance/overlay = mutable_appearance(icon, implant_overlay) overlay.color = implant_color add_overlay(overlay) return ..() diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 981e6000c37..53b0d5f17f4 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -12,7 +12,7 @@ var/starting_organ /obj/item/device/autosurgeon/Initialize(mapload) - ..() + . = ..() if(starting_organ) insert_organ(new starting_organ(src)) diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index c35cf5c6706..c91cb219afd 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -22,7 +22,7 @@ if(C.disabilities & DEAF) deaf = max(deaf, 1) else - if(HAS_SECONDARY_FLAG(C.ears, HEALS_EARS)) + if(C.ears && HAS_SECONDARY_FLAG(C.ears, HEALS_EARS)) deaf = max(deaf - 1, 1) ear_damage = max(ear_damage - 0.10, 0) // if higher than UNHEALING_EAR_DAMAGE, no natural healing occurs. diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 672ac924adb..4ad8b9c518e 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -106,19 +106,27 @@ icon_state = "flashlight_eyes" flash_protect = 2 tint = INFINITY + var/obj/item/device/flashlight/eyelight/eye /obj/item/organ/eyes/robotic/flashlight/emp_act(severity) return /obj/item/organ/eyes/robotic/flashlight/Insert(var/mob/living/carbon/M, var/special = 0) ..() - M.set_light(M.light_range + 15, M.light_power + 1) + if(!eye) + eye = new /obj/item/device/flashlight/eyelight() + eye.on = TRUE + eye.forceMove(M) + eye.update_brightness(M) /obj/item/organ/eyes/robotic/flashlight/Remove(var/mob/living/carbon/M, var/special = 0) - M.set_light(M.light_range -15, M.light_power - 1) + eye.on = FALSE + eye.update_brightness(M) + eye.forceMove(src) ..() + // Welding shield implant /obj/item/organ/eyes/robotic/shield name = "shielded robotic eyes" diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index ece2ad3f402..675f10b3e9d 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -251,6 +251,8 @@ /obj/item/organ/lungs/plasmaman name = "plasma filter" + desc = "A spongy rib-shaped mass for filtering plasma from the air." + icon_state = "lungs-plasma" safe_oxygen_min = 0 //We don't breath this safe_toxins_min = 16 //We breath THIS! diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5f8f6609d70..f8deed5b289 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -32,7 +32,7 @@ var/datum/action/A = X A.Grant(M) - +//Special is for instant replacement like autosurgeons /obj/item/organ/proc/Remove(mob/living/carbon/M, special = 0) owner = null if(M) @@ -78,7 +78,7 @@ /obj/item/organ/Destroy() if(owner) - Remove(owner, 1) + Remove(owner) return ..() /obj/item/organ/attack(mob/living/carbon/M, mob/user) diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index f4d71cc9f83..c02c22d19e0 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -123,7 +123,7 @@ taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED /obj/item/organ/tongue/alien/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/xenocommon, /datum/language/common, @@ -166,6 +166,14 @@ if("papyrus") . |= SPAN_PAPYRUS +/obj/item/organ/tongue/bone/plasmaman + name = "plasma bone \"tongue\"" + desc = "Like animated skeletons, Plasmamen vibrate their teeth in order to produce speech." + icon_state = "tongueplasma" + +/obj/item/organ/tongue/bone/plasmaman/get_spans() + return + /obj/item/organ/tongue/robot name = "robotic voicebox" desc = "A voice synthesizer that can interface with organic lifeforms." @@ -176,7 +184,7 @@ taste_sensitivity = 25 // not as good as an organic tongue /obj/item/organ/tongue/robot/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/xenocommon, /datum/language/common, diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index aac9ca6cdea..6c80a3ee1f4 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -46,7 +46,7 @@ to_chat(user, "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots.") /obj/machinery/computer/telescience/Initialize(mapload) - ..() + . = ..() if(mapload) for(var/i = 1; i <= starting_crystals; i++) crystals += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) // starting crystals diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index 17989224457..c10b6f8ebc3 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -3,7 +3,7 @@ name = "all-terrain vehicle" desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-earth technologies that are still relevant on most planet-bound outposts." icon_state = "atv" - var/static/image/atvcover = null + var/static/mutable_appearance/atvcover /obj/vehicle/atv/buckle_mob(mob/living/buckled_mob, force = 0, check_loc = 1) . = ..() @@ -11,9 +11,7 @@ /obj/vehicle/atv/Initialize() . = ..() - if(!atvcover) - atvcover = image("icons/obj/vehicles.dmi", "atvcover") - atvcover.layer = ABOVE_MOB_LAYER + atvcover = atvcover || mutable_appearance(icon, "atvcover", ABOVE_MOB_LAYER) /obj/vehicle/atv/post_buckle_mob(mob/living/M) diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index ae34cfd5157..42e9298c881 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -8,7 +8,7 @@ var/floorbuffer = FALSE /obj/vehicle/janicart/Initialize(mapload) - ..() + . = ..() update_icon() /obj/vehicle/janicart/Destroy() diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index d2a546b5625..cc909e27755 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -4,7 +4,7 @@ icon_state = "speedbike_blue" layer = LYING_MOB_LAYER var/overlay_state = "cover_blue" - var/image/overlay = null + var/static/mutable_appearance/overlay /obj/vehicle/space/speedbike/buckle_mob(mob/living/M, force = 0, check_loc = 1) . = ..() @@ -12,8 +12,7 @@ /obj/vehicle/space/speedbike/New() . = ..() - overlay = image("icons/obj/bike.dmi", overlay_state) - overlay.layer = ABOVE_MOB_LAYER + overlay = overlay || mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER) add_overlay(overlay) /obj/vehicle/space/speedbike/Move(newloc,move_dir) diff --git a/code/world.dm b/code/world.dm index 6207483c2dc..75470585e43 100644 --- a/code/world.dm +++ b/code/world.dm @@ -17,7 +17,7 @@ log_world("World loaded at [time_stamp()]") #if (PRELOAD_RSC == 0) - external_rsc_urls = file2list("config/external_rsc_urls.txt","\n") + external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") var/i=1 while(i<=external_rsc_urls.len) if(external_rsc_urls[i]) @@ -251,7 +251,7 @@ world << sound(round_end_sound) /world/proc/load_mode() - var/list/Lines = file2list("data/mode.txt") + var/list/Lines = world.file2list("data/mode.txt") if(Lines.len) if(Lines[1]) GLOB.master_mode = Lines[1] diff --git a/config/sillytips.txt b/config/sillytips.txt index 2652414eced..a3d619ec7c4 100644 --- a/config/sillytips.txt +++ b/config/sillytips.txt @@ -25,6 +25,6 @@ Plenty of things that aren't traditionally considered weapons can still be used DEATH IS IMMINENT! This game is older than most of the people playing it. Do not go gentle into that good night. -Flash bangs can weaken blob tiles, allowing for you and the crew to easily destroy them. +Flashbangs can weaken blob tiles, allowing for you and the crew to easily destroy them. Just the tip? Some people are unable to read text on a game where half of it is based on text. \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 151ddacd984..25e46e97e11 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,13 @@ -->
+

23 April 2017

+

coiax updated:

+
    +
  • Centcom would like to inform all employees that they have ears.
  • +
  • Adds "ear" organs to all carbons. These organs store ear damage and deafness. A carbon without any ears is deaf. Genetic deafness functions as before.
  • +
+

22 April 2017

Cyberboss updated:

    @@ -1271,39 +1278,6 @@
    • Medipens are no longer reusable.
    - -

    19 February 2017

    -

    Basilman updated:

    -
      -
    • some toolboxes, very rarely, have more than one latch
    • -
    -

    Joan updated:

    -
      -
    • You can now put components, and deposit components from slabs, directly into the Ark of the Clockwork Justicar provided it actually requires components.
    • -
    • Taunting Tirade now leaves a confusing and weakening trail instead of confusing and weakening everyone in view.
    • -
    • Invoking Inath-neq/Nzcrentr is now 33% cheaper and has a 33% lower cooldown.
    • -
    -

    Tofa01 updated:

    -
      -
    • [Delta] Removes SSU From Mining Equipment Room
    • -
    • Changes centcomm ferry to require centcomm general access instead of admin permission.
    • -
    -

    coiax updated:

    -
      -
    • Nuke ops syndicate cyborgs have been split into two seperate uplink items. Medical cyborgs now cost 35 TC, assault cyborgs now cost 65 TC.
    • -
    -

    grimreaperx15 updated:

    -
      -
    • Blood Cult Pylons will now rapidly regenerate any nearby cultists blood, in addition to the normal healing they do.
    • -
    -

    ma44 updated:

    -
      -
    • Intercepted messages from a lavaland syndicate base reveals they have additional grenade and other miscellaneous equipment.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • Shuttle engines have new sprites.
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ced65e245df..bd0f91fdc75 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -10639,3 +10639,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Gold and Light Pink slime extracts no longer disappear before working. coiax: - bugfix: Fixed people understanding languages over the radio when they shouldn't. +2017-04-23: + coiax: + - rscadd: Centcom would like to inform all employees that they have ears. + - rscadd: Adds "ear" organs to all carbons. These organs store ear damage and deafness. + A carbon without any ears is deaf. Genetic deafness functions as before. diff --git a/html/changelogs/AutoChangeLog-pr-26044.yml b/html/changelogs/AutoChangeLog-pr-26044.yml deleted file mode 100644 index 97ce1414d9d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-26044.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "Centcom would like to inform all employees that they have ears." - - rscadd: "Adds \"ear\" organs to all carbons. These organs store ear damage and -deafness. A carbon without any ears is deaf. Genetic -deafness functions as before." diff --git a/html/changelogs/AutoChangeLog-pr-26292.yml b/html/changelogs/AutoChangeLog-pr-26292.yml new file mode 100644 index 00000000000..9d91cc6f1f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26292.yml @@ -0,0 +1,4 @@ +author: "BeeSting12" +delete-after: True +changes: + - bugfix: "Deltastation's secure tech storage is no longer all access." diff --git a/html/changelogs/AutoChangeLog-pr-26346.yml b/html/changelogs/AutoChangeLog-pr-26346.yml new file mode 100644 index 00000000000..f1756d26d8c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26346.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Changeling brains are now more fully vestigial" diff --git a/html/changelogs/AutoChangeLog-pr-26381.yml b/html/changelogs/AutoChangeLog-pr-26381.yml new file mode 100644 index 00000000000..b81943d30fb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26381.yml @@ -0,0 +1,7 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "You can examine a firedoor for hints on how to +construct/deconstruct it." + - rscadd: "Add an additional hint during construction where you can add +plasteel to make the firedoor reinforced." diff --git a/html/changelogs/AutoChangeLog-pr-26397.yml b/html/changelogs/AutoChangeLog-pr-26397.yml new file mode 100644 index 00000000000..0e555c64add --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26397.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Fixed easter eggs spawning during non-Easter." + - bugfix: "Fixes stations not having holiday specific prefixes during the holidays." diff --git a/html/changelogs/AutoChangeLog-pr-26400.yml b/html/changelogs/AutoChangeLog-pr-26400.yml new file mode 100644 index 00000000000..821d37f331e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26400.yml @@ -0,0 +1,6 @@ +author: "CoreOverload" +delete-after: True +changes: + - bugfix: "Disposals no longer get broken by shuttles rotation." + - bugfix: "Wires no longer get broken by shuttles movement and rotation." + - bugfix: "Atmospheric equipment no longer gets broken by shuttles movement and rotation. Glory to the Flying Fortress of Atmosia!" diff --git a/html/changelogs/AutoChangeLog-pr-26416.yml b/html/changelogs/AutoChangeLog-pr-26416.yml new file mode 100644 index 00000000000..cbfa45a0a50 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26416.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Ghosts no longer drift in space." diff --git a/html/changelogs/AutoChangeLog-pr-26436.yml b/html/changelogs/AutoChangeLog-pr-26436.yml new file mode 100644 index 00000000000..87f80c1ad07 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26436.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Swarmers now only speak their own language, rather than swarmer and +common." diff --git a/html/changelogs/AutoChangeLog-pr-26441.yml b/html/changelogs/AutoChangeLog-pr-26441.yml new file mode 100644 index 00000000000..731e4a870b0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26441.yml @@ -0,0 +1,7 @@ +author: "coiax, WJohnston" +delete-after: True +changes: + - rscadd: "Plasmamen lungs, also known as \"plasma filters\" now look different +from human lungs." + - rscadd: "Plasmamen now have their own special type of bone tongue. They +still sound the same, it's just purple. Like them." diff --git a/html/changelogs/AutoChangeLog-pr-26443.yml b/html/changelogs/AutoChangeLog-pr-26443.yml new file mode 100644 index 00000000000..c5a7877ffc7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26443.yml @@ -0,0 +1,4 @@ +author: "WJohnston" +delete-after: True +changes: + - tweak: "Skeletons and plasmamen's hitboxes now more closely match that of humans. They are no longer full of holes and incredibly frustrating to hit, should they run around naked." diff --git a/html/changelogs/AutoChangeLog-pr-26445.yml b/html/changelogs/AutoChangeLog-pr-26445.yml new file mode 100644 index 00000000000..e61bf150ef9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26445.yml @@ -0,0 +1,4 @@ +author: "XDTM" +delete-after: True +changes: + - bugfix: "Items will no longer be used on backpacks if they fail to insert when they're too full." diff --git a/html/changelogs/AutoChangeLog-pr-26456.yml b/html/changelogs/AutoChangeLog-pr-26456.yml new file mode 100644 index 00000000000..758f0c4c15c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26456.yml @@ -0,0 +1,4 @@ +author: "basilman" +delete-after: True +changes: + - bugfix: "fixed species with no skin dropping skin when gibbed." diff --git a/html/changelogs/AutoChangeLog-pr-26457.yml b/html/changelogs/AutoChangeLog-pr-26457.yml new file mode 100644 index 00000000000..43829911c1b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26457.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "When you are crushed by a door, it prints a visible message, +instead of, in some cases, silently damaging you." diff --git a/html/changelogs/AutoChangeLog-pr-26484.yml b/html/changelogs/AutoChangeLog-pr-26484.yml new file mode 100644 index 00000000000..cc711de25cd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26484.yml @@ -0,0 +1,4 @@ +author: "Jalleo" +delete-after: True +changes: + - rscdel: "WW_maze from lavaland has been removed it wasnt that good really anyhow" diff --git a/html/changelogs/AutoChangeLog-pr-26491.yml b/html/changelogs/AutoChangeLog-pr-26491.yml new file mode 100644 index 00000000000..a84c98f989c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-26491.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "The vent in the Escape Coridoor on Omega Station has been fixed." diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi index f87713f7a1f..0a5154c396c 100644 Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index ab69241cdea..5b526ab99d8 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi index f6b10be4961..80127e3f786 100644 Binary files a/icons/mob/human_parts.dmi and b/icons/mob/human_parts.dmi differ diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index e23288dedb9..caf9de716f5 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index 88d50bb6026..ac30dccb4f1 100644 Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 6a6c59da390..76ac7bd0a8e 100644 Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 9532ecbcccd..19d6275d785 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 001cfdb6415..6785056c1ac 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -102,6 +102,7 @@ #include "code\_globalvars\misc.dm" #include "code\_globalvars\sensitive.dm" #include "code\_globalvars\lists\flavor_misc.dm" +#include "code\_globalvars\lists\maintenance_loot.dm" #include "code\_globalvars\lists\mapping.dm" #include "code\_globalvars\lists\mobs.dm" #include "code\_globalvars\lists\names.dm" @@ -217,6 +218,7 @@ #include "code\datums\martial.dm" #include "code\datums\material_container.dm" #include "code\datums\mind.dm" +#include "code\datums\mutable_appearance.dm" #include "code\datums\mutations.dm" #include "code\datums\outfit.dm" #include "code\datums\progressbar.dm" @@ -453,8 +455,10 @@ #include "code\game\gamemodes\malfunction\Malf_Modules.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" +#include "code\game\gamemodes\miniantags\abduction\abductee_objectives.dm" #include "code\game\gamemodes\miniantags\abduction\abduction.dm" #include "code\game\gamemodes\miniantags\abduction\abduction_gear.dm" +#include "code\game\gamemodes\miniantags\abduction\abduction_outfits.dm" #include "code\game\gamemodes\miniantags\abduction\abduction_surgery.dm" #include "code\game\gamemodes\miniantags\abduction\gland.dm" #include "code\game\gamemodes\miniantags\abduction\machinery\camera.dm" diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php index 07d2d4c23c8..c2f888603ad 100644 --- a/tools/github_webhook_processor.php +++ b/tools/github_webhook_processor.php @@ -141,9 +141,9 @@ function tag_pr($payload, $opened) { $remove = array(); $mergeable = $payload['pull_request']['mergeable']; - if($mergeable == null || $mergeable) //only look for the false value + if($mergeable === TRUE) //only look for the false value $remove[] = 'Merge Conflict'; - else + else if ($mergable === FALSE) $tags[] = 'Merge Conflict'; if(has_tree_been_edited($payload, '_maps'))