diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_jettisoned_reactor.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_jettisoned_reactor.dmm new file mode 100644 index 000000000..f5d7f9aaf --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_jettisoned_reactor.dmm @@ -0,0 +1,658 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/mapping_helpers/no_lava, +/turf/open/chasm/lavaland, +/area/template_noop) +"b" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/template_noop) +"c" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ruin/unpowered/reactor) +"d" = ( +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/unpowered/reactor) +"f" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ruin/unpowered/reactor) +"g" = ( +/obj/structure/alien/weeds, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"h" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/poddoor/shutters/radiation, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"i" = ( +/turf/open/floor/plating, +/area/ruin/unpowered/reactor) +"j" = ( +/obj/structure/fluff/destroyed_nuclear_reactor, +/turf/open/floor/plating, +/area/ruin/unpowered/reactor) +"k" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/unpowered/reactor) +"l" = ( +/obj/effect/decal/nuclear_waste, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/template_noop) +"m" = ( +/obj/structure/alien/weeds/node, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"n" = ( +/obj/machinery/door/airlock/public/glass, +/obj/structure/alien/weeds, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"o" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"p" = ( +/obj/structure/alien/gelpod, +/obj/structure/alien/weeds, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"q" = ( +/obj/structure/alien/resin/membrane, +/obj/machinery/door/poddoor/shutters/radiation, +/turf/open/floor/plating, +/area/ruin/unpowered/reactor) +"r" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, +/turf/open/floor/plating, +/area/ruin/unpowered/reactor) +"s" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/gelpod, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"t" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/grown, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"u" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"v" = ( +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/template_noop) +"w" = ( +/obj/structure/alien/weeds, +/mob/living/simple_animal/hostile/alien/drone, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"x" = ( +/obj/structure/alien/weeds, +/mob/living/simple_animal/hostile/alien/sentinel, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) +"y" = ( +/obj/effect/decal/nuclear_waste, +/turf/open/floor/plating, +/area/template_noop) +"z" = ( +/obj/effect/decal/nuclear_waste, +/turf/open/floor/plating, +/area/ruin/unpowered/reactor) +"A" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/template_noop) +"B" = ( +/turf/open/chasm/lavaland, +/area/ruin/unpowered/reactor) +"C" = ( +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/effect/gibspawner/robot, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/template_noop) +"F" = ( +/obj/structure/alien/weeds, +/obj/effect/gibspawner/robot, +/turf/open/floor/plasteel, +/area/ruin/unpowered/reactor) + +(1,1,1) = {" +A +A +A +A +A +A +A +A +A +A +A +A +A +c +c +c +a +a +a +a +a +a +"} +(2,1,1) = {" +A +l +A +A +A +A +l +D +v +A +l +A +c +c +c +c +c +a +a +a +a +a +"} +(3,1,1) = {" +A +l +l +l +A +A +l +b +b +l +l +A +c +c +c +c +c +c +a +a +a +a +"} +(4,1,1) = {" +A +A +l +A +A +l +l +b +A +l +A +A +e +c +e +e +e +e +c +a +a +a +"} +(5,1,1) = {" +A +A +D +A +A +l +b +A +A +l +l +A +f +e +f +u +s +e +c +c +a +a +"} +(6,1,1) = {" +A +A +b +A +A +l +b +A +A +l +d +C +h +o +s +m +u +e +c +c +c +a +"} +(7,1,1) = {" +A +v +b +b +l +l +b +b +l +l +k +k +f +o +t +g +f +e +c +c +c +a +"} +(8,1,1) = {" +A +l +l +b +b +b +b +b +A +B +B +z +z +f +p +g +e +c +c +c +c +a +"} +(9,1,1) = {" +A +A +l +A +b +v +A +A +A +B +B +B +z +z +f +n +f +e +c +c +a +a +"} +(10,1,1) = {" +A +l +l +l +b +b +y +z +B +i +i +i +B +B +q +g +r +c +c +c +a +a +"} +(11,1,1) = {" +A +l +A +l +b +b +k +z +B +i +j +i +B +B +q +F +r +c +c +c +c +a +"} +(12,1,1) = {" +A +A +A +A +A +d +k +B +B +i +i +i +B +z +q +g +r +c +c +c +a +a +"} +(13,1,1) = {" +A +c +c +e +f +h +f +z +z +B +B +B +z +z +f +n +f +e +c +c +a +a +"} +(14,1,1) = {" +c +c +c +c +e +g +o +f +z +z +B +B +z +f +s +x +e +c +c +c +c +a +"} +(15,1,1) = {" +c +c +c +e +f +w +u +o +f +q +q +q +f +s +o +g +f +e +c +c +c +a +"} +(16,1,1) = {" +c +c +c +e +u +m +g +g +n +g +F +g +n +g +g +m +u +e +c +c +c +a +"} +(17,1,1) = {" +a +c +c +e +o +u +f +e +f +r +r +r +f +e +f +s +o +e +c +c +a +a +"} +(18,1,1) = {" +a +a +c +e +e +e +e +c +e +c +c +c +e +c +e +e +e +e +c +a +a +a +"} +(19,1,1) = {" +a +a +a +c +c +c +c +c +c +c +c +c +c +c +c +c +c +c +a +a +a +a +"} +(20,1,1) = {" +a +a +a +a +c +c +c +c +c +c +c +c +c +c +c +c +c +a +a +a +a +a +"} +(21,1,1) = {" +a +a +a +a +a +c +c +c +a +a +c +a +a +c +c +c +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 +a +a +a +a +a +"} diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index d7cdca271..006d7aedd 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -1180,6 +1180,22 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel/layenia, /area/layenia/cloudlayer) +"abE" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_y = -27 + }, +/turf/open/floor/noslip, +/area/engine/engineering/reactor_control) "abF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area{ @@ -1239,6 +1255,27 @@ }, /turf/open/floor/plasteel/layenia, /area/layenia) +"abK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/button/door{ + id = "reactor_lockdown_shutter_door"; + name = "reactor door shutter"; + pixel_x = -24; + pixel_y = 6 + }, +/obj/machinery/button/door{ + id = "reactor_lockdown_shutters"; + name = "reactor window shutters"; + pixel_x = -24; + pixel_y = -6 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering/reactor_control) "abL" = ( /obj/structure/fence, /obj/effect/turf_decal/loading_area{ @@ -1614,6 +1651,17 @@ }, /turf/open/floor/plating/asteroid/layenia, /area/layenia) +"aco" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, +/turf/open/floor/plating, +/area/engine/engineering/reactor_control) "acp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -1785,6 +1833,17 @@ }, /turf/open/floor/plating/layenia, /area/layenia) +"acE" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, +/turf/open/floor/plating, +/area/engine/engineering/reactor_control) "acF" = ( /obj/machinery/power/tracker, /obj/structure/cable{ @@ -4397,6 +4456,9 @@ "ahd" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, /turf/open/floor/plating, /area/engine/engineering/reactor_control) "ahe" = ( @@ -4880,6 +4942,26 @@ }, /turf/open/floor/plating/layenia, /area/layenia) +"aik" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"ail" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/brown/visible{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) "aim" = ( /obj/machinery/light{ pixel_y = -1 @@ -4930,6 +5012,13 @@ }, /turf/open/floor/plasteel/layenia, /area/layenia) +"aio" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) "aip" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ name = "air supply pipe" @@ -5069,6 +5158,36 @@ }, /turf/open/floor/plasteel/dark/layenia, /area/layenia) +"aiD" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutters" + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"aiE" = ( +/obj/machinery/door/airlock/engineering{ + name = "Reactor Core"; + req_one_access_txt = "10;24" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "reactor_lockdown_shutter_door" + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering/reactor_control) "aiF" = ( /obj/machinery/conveyor{ id = "garbage" @@ -5852,6 +5971,75 @@ }, /turf/open/floor/plating/layenia, /area/layenia) +"ajU" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"ajV" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"ajW" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"ajX" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"ajY" = ( +/obj/machinery/door/poddoor/multi_tile/three_tile_ver{ + id = "au_nuclear_vent" + }, +/turf/open/floor/engine, +/area/engine/engineering/reactor_core) +"ajZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/pool/ladder{ + dir = 2; + pixel_y = 17 + }, +/turf/open/pool, +/area/engine/engineering/reactor_core) +"aka" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/pool, +/area/engine/engineering/reactor_core) +"akb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/twohanded/required/fuel_rod, +/turf/open/pool, +/area/engine/engineering/reactor_core) +"akc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/twohanded/required/fuel_rod, +/turf/open/pool, +/area/engine/engineering/reactor_core) "akd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 5; @@ -5863,6 +6051,93 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"ake" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 6 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akf" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 8 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akg" = ( +/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ + dir = 1 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akh" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 10 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"aki" = ( +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ + dir = 4; + name = "scrubbers pipe" + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 9 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akk" = ( +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akl" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ + dir = 1 + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akm" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akn" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"ako" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akp" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_control) +"akq" = ( +/obj/effect/baseturf_helper/asteroid/layenia, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_core) +"akr" = ( +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_core) +"aks" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/mineral/lead, +/area/engine/engineering/reactor_core) "aku" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -6034,10 +6309,6 @@ icon_state = "wood-broken6" }, /area/maintenance/fore) -"amL" = ( -/obj/effect/baseturf_helper/asteroid/layenia, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_core) "amN" = ( /obj/structure/cable{ icon_state = "1-2" @@ -8822,16 +9093,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"aYd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 4; - name = "scrubbers pipe" - }, -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 9 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "aYk" = ( /obj/machinery/gateway{ dir = 6 @@ -9539,18 +9800,6 @@ /obj/structure/sign/warning/docking, /turf/closed/wall/r_wall, /area/layenia/cloudlayer) -"biE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -25 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering/reactor_control) "biG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -10433,18 +10682,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/main) -"btT" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/noslip, -/area/engine/engineering/reactor_control) "btU" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -13241,12 +13478,6 @@ /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"ccz" = ( -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "ccT" = ( /obj/structure/rack, /obj/item/storage/briefcase, @@ -13819,15 +14050,6 @@ /obj/effect/decal/cleanable/molten_object, /turf/open/floor/plating/asteroid/layenia/garden, /area/security/prison) -"ckC" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "ckM" = ( /obj/effect/turf_decal/loading_area{ dir = 4; @@ -19568,12 +19790,6 @@ }, /turf/open/floor/plasteel/dark, /area/storage/tech) -"dJS" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "dJY" = ( /obj/structure/table, /obj/item/storage/pill_bottle/dice{ @@ -21645,13 +21861,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"eoB" = ( -/obj/item/twohanded/required/fuel_rod, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/pool, -/area/engine/engineering/reactor_core) "eoD" = ( /obj/effect/turf_decal/loading_area{ dir = 1; @@ -24522,13 +24731,6 @@ icon_state = "floor_plate" }, /area/hallway/primary/fore) -"faM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "faS" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/crossing/horizontal, @@ -29934,13 +30136,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"gxe" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "gxf" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds, @@ -30462,9 +30657,6 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) -"gEq" = ( -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_core) "gEE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ dir = 8; @@ -30533,14 +30725,6 @@ icon_state = "floor_plate" }, /area/quartermaster/storage) -"gFa" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/engine/engineering/reactor_control) "gFe" = ( /obj/structure/chair/office/dark, /turf/open/floor/wood, @@ -30748,12 +30932,6 @@ dir = 8 }, /area/hallway/secondary/entry) -"gIz" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "gID" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -37754,14 +37932,6 @@ dir = 4 }, /area/medical/sleeper) -"ixE" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/engine/engineering/reactor_control) "ixI" = ( /obj/machinery/gateway{ dir = 5 @@ -39716,17 +39886,6 @@ /obj/item/reagent_containers/food/snacks/grown/harebell, /turf/open/floor/plasteel/dark, /area/chapel/main) -"iTg" = ( -/obj/item/twohanded/required/fuel_rod, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/pool/ladder{ - dir = 2; - pixel_y = 17 - }, -/turf/open/pool, -/area/engine/engineering/reactor_core) "iTh" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/loading_area{ @@ -39830,9 +39989,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main) -"iVR" = ( -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "iWa" = ( /obj/structure/table, /obj/item/reagent_containers/spray/plantbgone{ @@ -41064,12 +41220,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"jkX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/pool, -/area/engine/engineering/reactor_core) "jlz" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -42434,15 +42584,6 @@ /obj/effect/baseturf_helper/asteroid/layenia, /turf/open/floor/plating, /area/maintenance/central/secondary) -"jIa" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "jIN" = ( /obj/structure/bookcase/random/fiction, /turf/open/floor/wood, @@ -45654,16 +45795,6 @@ }, /turf/open/floor/plasteel/white, /area/security/range) -"kDK" = ( -/obj/machinery/door/poddoor{ - dir = 4; - id = "au_nuclear_vent" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "kDU" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -46475,12 +46606,6 @@ "kQE" = ( /turf/open/floor/engine/vacuum, /area/engine/atmos) -"kQL" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "kQM" = ( /turf/open/indestructible/layenia/crystal/garden, /area/hallway/primary/aft) @@ -49079,11 +49204,6 @@ }, /turf/open/floor/plasteel, /area/medical/genetics) -"lHm" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "lHp" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -50207,10 +50327,6 @@ /obj/machinery/air_sensor/atmos/air_tank, /turf/open/floor/engine/air, /area/engine/atmos) -"lYN" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_core) "lYO" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, @@ -51961,12 +52077,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/break_room) -"mvG" = ( -/obj/machinery/atmospherics/pipe/simple/purple/hidden{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "mvH" = ( /obj/effect/turf_decal/loading_area, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ @@ -58993,13 +59103,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/maintenance/disposal) -"omd" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/brown/visible{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "ome" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -63911,11 +64014,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"pwW" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/brown/visible, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "pwZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer3{ dir = 4; @@ -66112,15 +66210,6 @@ icon_state = "floor_trim" }, /area/engine/engineering) -"pYz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "pYD" = ( /turf/closed/wall/r_wall, /area/tcommsat/computer) @@ -67091,12 +67180,6 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) -"qne" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/pool, -/area/engine/engineering/reactor_core) "qnm" = ( /obj/effect/turf_decal/loading_area{ dir = 8; @@ -74740,25 +74823,6 @@ }, /turf/open/floor/plasteel/dark, /area/medical/sleeper) -"rXP" = ( -/obj/machinery/door/airlock/engineering{ - name = "Reactor Core"; - req_one_access_txt = "10;24" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/engine/engineering/reactor_control) "rXQ" = ( /obj/machinery/computer/arcade/battle{ dir = 4 @@ -78590,12 +78654,6 @@ "sXB" = ( /turf/open/floor/plasteel/yellowsiding, /area/crew_quarters/fitness/pool) -"sXC" = ( -/obj/machinery/atmospherics/pipe/manifold/purple/hidden{ - dir = 1 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering/reactor_control) "sXD" = ( /turf/closed/wall, /area/engine/engineering) @@ -93010,10 +93068,6 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) -"wBc" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "wBy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ dir = 8; @@ -98588,15 +98642,6 @@ }, /turf/open/floor/plasteel/white/corner, /area/science/research) -"xXT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering/reactor_core) "xYf" = ( /obj/structure/table/reinforced, /obj/item/toy/plush/bird/kenk, @@ -146414,20 +146459,20 @@ aZJ tBc pFt tBc -mvG -aYd +ake +akj hWz -dJS -iVR -amL -gxe -gEq -wBc -gEq -gEq -gEq -gEq -gEq +akk +aki +akq +aik +akr +aio +akr +akr +akr +akr +akr tBc tBc tBc @@ -146671,11 +146716,11 @@ acJ tBc pFt tBc -cLW +akf loU qvE -btT -gIz +abE +akm qZA oam vBU @@ -146684,7 +146729,7 @@ ePH aku qEk vKH -lYN +aks ada adh adk @@ -146928,11 +146973,11 @@ otM tBc pFt tyz -cLW +akf jeA oQp jQy -ckC +akn ndP ckh npQ @@ -146941,7 +146986,7 @@ wul spO ePH sSu -gEq +akr gPq dSt ueC @@ -147185,20 +147230,20 @@ tBc tBc pFt tBc -cLW +akf wOE hyB wfc -ckC +akn ndP wNi tJt eNE -jkX -qne +akb +akc wul qdy -wBc +aio gPq tRM tRM @@ -147442,20 +147487,20 @@ aZJ tBc pFt tBc -cLW -dJS +akf +akk aGX -kQL -faM +akl +ako eay muk xBB -iTg +ajZ oPF mVm wul qdy -wBc +aio gPq tRM tRM @@ -147699,20 +147744,20 @@ acJ tBc pFt tyz -cLW +akf wpU aUs -biE -gFa +abK +aco dVa oqV lVX -eoB +aka xxU eOr wul qdy -wBc +aio gPq tRM tRM @@ -147956,11 +148001,11 @@ otM tBc pFt tBc -sXC +akg wSd oMb myR -rXP +aiE qsX djt dom @@ -147969,7 +148014,7 @@ bKs syv oDa rFK -lHm +aiD oMg hGl tRM @@ -148213,11 +148258,11 @@ tBc tBc pFt tBc -cLW +akf eFf ddj mSL -ixE +acE xCY vrD wqz @@ -148226,7 +148271,7 @@ sHp wul cOU uql -lHm +aiD oMg ueC tRM @@ -148470,11 +148515,11 @@ tBc tBc pFt tyz -ccz +akh rJD cHi mEJ -pwW +akp aqp voK ykZ @@ -148483,7 +148528,7 @@ aoA wul vXR qdy -wBc +aio gPq tRM tRM @@ -148727,11 +148772,11 @@ tBc tBc pFt tBc -iVR +aki fmh neH iSK -iVR +aki fKU gzh qdy @@ -148740,7 +148785,7 @@ pWM wul vXR qdy -wBc +aio gPq tRM tRM @@ -148984,7 +149029,7 @@ vlJ tBc pFt tBc -iVR +aki rHv tvs hFo @@ -148997,7 +149042,7 @@ uSR oTK sdk aoN -gEq +akr gPq tRM tRM @@ -149241,20 +149286,20 @@ wcK tBc pFt tyz -iVR +aki grE vLF reu -iVR +aki edj xFl sAJ ptz -jIa -pYz -pYz -xXT -gEq +ajU +ajV +ajX +ajW +akr gPq tRM tRM @@ -149498,20 +149543,20 @@ ylM vlJ pFt tBc -iVR -iVR -iVR -iVR -iVR -gEq -omd -gEq -wBc -gEq -kDK -kDK -kDK -gEq +aki +aki +aki +aki +aki +akr +ail +akr +aio +akr +wul +wul +ajY +akr gPq wfn hGl diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 7274d557d..c0bf99606 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -256,6 +256,24 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"akw" = ( +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "akG" = ( /obj/effect/turf_decal/loading_area{ dir = 8; @@ -747,6 +765,27 @@ /obj/item/reagent_containers/medspray/synthflesh, /turf/open/floor/wood, /area/centcom/holding) +"aFM" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "aFS" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/lavendergrass, @@ -897,12 +936,16 @@ /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) "aNV" = ( -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 }, -/obj/structure/table/plasmaglass, -/obj/item/paper, -/turf/open/floor/carpet/black, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/structure/chair/sofa/left, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "aOi" = ( /turf/open/floor/holofloor{ @@ -943,6 +986,23 @@ /obj/structure/chair/stool/bar, /turf/open/floor/plasteel/dark, /area/centcom/control) +"aSo" = ( +/obj/structure/rack/shelf, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/food/drinks/bottle/vodka{ + pixel_x = 7 + }, +/obj/item/reagent_containers/food/drinks/bottle/vodka{ + pixel_x = -7 + }, +/obj/structure/curtain{ + alpha = 240; + color = "#c72222"; + icon_state = "closed"; + open = 0 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "aSW" = ( /obj/effect/turf_decal/loading_area{ dir = 1; @@ -1088,6 +1148,12 @@ /obj/item/banner/command/mundane, /turf/open/floor/plasteel, /area/centcom/control) +"baC" = ( +/obj/machinery/door/airlock{ + name = "Storage" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "bbn" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, @@ -1126,6 +1192,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"bdo" = ( +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "bek" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -1729,21 +1805,9 @@ }, /turf/open/floor/plasteel, /area/centcom/control) -"bIC" = ( -/obj/machinery/light, -/obj/effect/turf_decal/loading_area{ - dir = 9; - icon_state = "steel_panel"; - name = "steel pannel" - }, -/turf/open/floor/mineral/basaltstone_floor, -/area/centcom/ferry) "bIJ" = ( -/obj/machinery/light{ - dir = 1; - pixel_y = 16 - }, -/turf/open/pool, +/obj/structure/noticeboard, +/turf/closed/indestructible/riveted, /area/centcom/ferry) "bIO" = ( /obj/effect/turf_decal/stripes/line{ @@ -2298,8 +2362,8 @@ /turf/open/floor/pod/light, /area/centcom/bunk/one) "civ" = ( -/obj/machinery/light, -/turf/open/pool, +/obj/structure/sign/poster/contraband/smoke, +/turf/closed/indestructible/riveted, /area/centcom/ferry) "ciK" = ( /obj/structure/rack/shelf, @@ -3091,11 +3155,9 @@ }, /area/syndicate_mothership) "dbL" = ( -/obj/structure/window, -/obj/structure/table/plasmaglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/storage/box/matches, +/obj/structure/chair/sofa/left{ + dir = 1 + }, /turf/open/floor/carpet/black, /area/centcom/ferry) "dcC" = ( @@ -3454,6 +3516,7 @@ "dqT" = ( /obj/item/cigbutt, /obj/machinery/light, +/obj/machinery/space_heater, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "drb" = ( @@ -3819,7 +3882,12 @@ /area/centcom/ferry) "dGI" = ( /obj/structure/table/plasmaglass, -/obj/item/nailpolish, +/obj/item/clothing/mask/cigarette/dromedary, +/obj/item/storage/fancy/cigarettes/smokekins, +/obj/item/toy/cards/deck{ + pixel_x = 7; + pixel_y = 10 + }, /turf/open/floor/carpet/black, /area/centcom/ferry) "dGP" = ( @@ -4001,6 +4069,24 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"dNw" = ( +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "dNQ" = ( /obj/structure/table, /obj/machinery/computer/station_alert{ @@ -4073,15 +4159,22 @@ }, /area/centcom/ferry) "dQA" = ( -/obj/structure/flora/crystal/medium/growth{ - icon_state = "crystalgrowth3"; - pixel_x = -24; - pixel_y = -1 - }, -/obj/structure/window/reinforced{ +/obj/effect/turf_decal/tile{ + color = "#630000"; dir = 4 }, -/turf/open/indestructible/layenia/crystal/garden, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "dQN" = ( /obj/item/twohanded/required/kirbyplants{ @@ -4551,12 +4644,18 @@ /turf/open/floor/plasteel/white, /area/centcom/ferry) "ejW" = ( -/obj/machinery/light{ - dir = 1; - pixel_y = 16 +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 }, -/obj/structure/chair/stool/bar, -/turf/open/floor/carpet/black, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "eks" = ( /turf/closed/indestructible/fakedoor{ @@ -4758,6 +4857,19 @@ }, /turf/open/floor/plasteel/grimy, /area/centcom/ferry) +"evP" = ( +/obj/structure/closet, +/obj/item/condom/filled{ + icon_state = "b_condom_inflated_huge" + }, +/obj/item/condom/filled{ + icon_state = "b_condom_inflated_huge" + }, +/obj/item/condom/filled, +/obj/effect/decal/cleanable/semen, +/obj/item/milking_machine/penis, +/turf/open/floor/plating, +/area/centcom/ferry) "evX" = ( /obj/structure/table/reinforced, /obj/item/folder/red{ @@ -5829,13 +5941,23 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "foE" = ( -/obj/machinery/door/airlock{ - dir = 4; - id_tag = null; - name = "Bathroom" +/obj/machinery/light, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "fpf" = ( /obj/machinery/photocopier, @@ -6313,6 +6435,21 @@ "fPN" = ( /turf/open/floor/plating/abductor, /area/abductor_ship) +"fQb" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "fQF" = ( /turf/open/floor/plasteel/freezer, /area/centcom/ferry) @@ -6507,16 +6644,12 @@ /turf/open/floor/plasteel, /area/centcom/supply) "fYD" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12 +/obj/machinery/light{ + bulb_colour = "#e37ef2"; + bulb_emergency_colour = "#e37ef2"; + light_color = "#e37ef2" }, -/obj/structure/mirror{ - pixel_x = -28 - }, -/obj/item/lipstick, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/mineral/basaltstone_floor, +/turf/open/floor/carpet/black, /area/centcom/ferry) "fYL" = ( /obj/structure/table, @@ -7499,6 +7632,19 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"gXf" = ( +/obj/structure/table/plasmaglass, +/obj/effect/turf_decal/loading_area{ + dir = 1; + icon_state = "drain"; + name = "drain" + }, +/obj/item/stack/credits{ + amount = 100; + pixel_x = 7 + }, +/turf/open/floor/carpet/black, +/area/centcom/ferry) "gXK" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -8254,15 +8400,26 @@ /turf/open/floor/plasteel/dark, /area/ctf) "hHg" = ( -/obj/structure/flora/crystal/medium/growth{ - icon_state = "crystalgrowth2"; - pixel_x = -23; - pixel_y = -1 +/obj/structure/chair/sofa/corner, +/obj/machinery/light{ + bulb_colour = "#e37ef2"; + bulb_emergency_colour = "#e37ef2"; + dir = 1; + light_color = "#e37ef2"; + pixel_y = 16 }, -/obj/structure/window/reinforced{ +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; dir = 4 }, -/turf/open/indestructible/layenia/crystal/garden, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "hHj" = ( /obj/structure/speaking_tile, @@ -8997,6 +9154,10 @@ icon_state = "trim"; name = "trim" }, +/obj/item/reagent_containers/food/snacks/burger/baconburger, +/obj/item/reagent_containers/food/snacks/burger/baconburger, +/obj/item/reagent_containers/food/snacks/burger/baconburger, +/obj/item/reagent_containers/food/snacks/store/cake/chocolate, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "iuN" = ( @@ -9404,10 +9565,15 @@ /turf/open/floor/plasteel, /area/centcom/control) "iSu" = ( -/obj/structure/pool/ladder{ +/obj/effect/turf_decal/tile{ + color = "#000000"; dir = 8 }, -/turf/open/pool, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "iTr" = ( /obj/structure/window/reinforced, @@ -9483,8 +9649,21 @@ /turf/open/floor/plasteel, /area/centcom/control) "iXi" = ( -/obj/structure/chair/stool/bar, -/turf/open/floor/carpet/black, +/obj/item/storage/fancy/heart_box, +/obj/structure/table/plasmaglass, +/obj/item/reagent_containers/food/snacks/candyheart{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/item/storage/fancy/candle_box{ + pixel_x = -9; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "iXQ" = ( /obj/item/twohanded/required/kirbyplants{ @@ -10155,10 +10334,15 @@ "jDL" = ( /obj/machinery/door/airlock{ dir = 4; - id_tag = null; - name = "Pool" + name = "Marilyns Backroom" }, -/turf/open/floor/plasteel/white, +/obj/structure/curtain{ + alpha = 240; + color = "#c72222"; + icon_state = "closed"; + open = 0 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "jDR" = ( /obj/item/twohanded/ctf/blue, @@ -10367,8 +10551,11 @@ /turf/open/floor/plating/asteroid, /area/tdome/tdomeadmin) "jQP" = ( -/obj/structure/window{ - dir = 8 +/obj/structure/table/plasmaglass, +/obj/item/ashtray, +/obj/item/cigbutt{ + pixel_x = 5; + pixel_y = 11 }, /turf/open/floor/carpet/black, /area/centcom/ferry) @@ -10767,6 +10954,27 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"kjW" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "kke" = ( /obj/structure/table/wood, /obj/effect/turf_decal/loading_area{ @@ -11586,6 +11794,29 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"kVN" = ( +/obj/machinery/light{ + bulb_colour = "#e37ef2"; + bulb_emergency_colour = "#e37ef2"; + light_color = "#e37ef2" + }, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "kWl" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs/cable/zipties, @@ -12169,10 +12400,23 @@ /turf/open/floor/plasteel, /area/centcom/ferry) "lzn" = ( -/obj/machinery/light/small{ - pixel_y = -2 +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 }, -/turf/open/pool, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "lAp" = ( /obj/effect/turf_decal/stripes/line{ @@ -12194,6 +12438,24 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) +"lCy" = ( +/obj/machinery/light, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "lCG" = ( /obj/structure/table, /obj/item/storage/box/handcuffs, @@ -13369,18 +13631,22 @@ /turf/open/floor/carpet/purple, /area/centcom/ferry) "mKw" = ( -/obj/structure/curtain, -/obj/structure/window/reinforced{ - dir = 8 +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = 7; + pixel_y = 14 }, -/obj/machinery/door/window/brigdoor/southleft{ - name = "Shower" +/obj/structure/table/plasmaglass, +/obj/effect/turf_decal/loading_area{ + dir = 4; + icon_state = "drain"; + name = "drain" }, -/obj/machinery/shower{ - pixel_y = 16 +/obj/item/reagent_containers/food/snacks/cakeslice/chocolate, +/obj/item/reagent_containers/food/snacks/chocolatebar{ + pixel_x = -5; + pixel_y = 13 }, -/obj/item/soap/deluxe, -/turf/open/floor/mineral/basaltstone_floor, +/turf/open/floor/carpet/black, /area/centcom/ferry) "mLp" = ( /obj/structure/table/wood, @@ -13401,6 +13667,24 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"mLK" = ( +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "mMO" = ( /obj/machinery/computer/arcade/battle, /turf/open/floor/wood, @@ -13559,21 +13843,43 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"mTH" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4; + icon_state = "drain"; + name = "drain" + }, +/obj/machinery/jukebox, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "mTT" = ( /obj/effect/turf_decal/tile/green, /turf/open/floor/plasteel, /area/centcom/ferry) "mUa" = ( -/obj/structure/bed{ - layer = 3.1 +/obj/structure/chair/sofa/right, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 }, -/obj/structure/bed{ - pixel_y = 10 - }, -/obj/machinery/light{ - brightness = 4; - dir = 1; - pixel_y = 16 +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) @@ -13848,21 +14154,27 @@ /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) "ndJ" = ( -/obj/structure/rack/shelf, -/obj/item/export/bottle/vodka{ - pixel_x = -8 +/obj/machinery/light{ + brightness = 4; + dir = 1; + pixel_y = 16 }, -/obj/item/export/bottle/whiskey, -/obj/item/export/bottle/wine{ - pixel_x = 8 +/obj/structure/chair/sofa/right, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 }, -/obj/structure/window{ - dir = 8 +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 }, -/obj/structure/sign/poster/official/high_class_martini{ - pixel_y = 32 +/obj/item/instrument/guitar{ + color = "#c72222"; + name = "Marilyn's Guitar"; + pixel_x = -1; + pixel_y = 3 }, -/turf/open/floor/carpet/black, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "ndY" = ( /turf/closed/indestructible/abductor, @@ -14731,6 +15043,17 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) +"nRs" = ( +/obj/machinery/light, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "nRI" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -15040,19 +15363,6 @@ icon_state = "white" }, /area/holodeck/rec_center/medical) -"ola" = ( -/obj/effect/turf_decal/loading_area{ - dir = 4; - icon_state = "drain"; - name = "drain" - }, -/obj/effect/turf_decal/loading_area{ - dir = 4; - icon_state = "drain"; - name = "drain" - }, -/turf/open/floor/mineral/basaltstone_floor, -/area/centcom/ferry) "olg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -15109,6 +15419,14 @@ dir = 4 }, /area/centcom/ferry) +"opi" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4; + icon_state = "drain"; + name = "drain" + }, +/turf/open/floor/carpet/black, +/area/centcom/ferry) "opn" = ( /obj/machinery/door/airlock/centcom{ name = "Thunderdome Administration"; @@ -15465,6 +15783,25 @@ /obj/structure/sign/departments/custodian, /turf/closed/indestructible/riveted, /area/centcom/ferry) +"oGR" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "oHO" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/fullgrass, @@ -15802,6 +16139,23 @@ /obj/machinery/chem_dispenser/drinks, /turf/open/floor/plasteel/dark, /area/centcom/control) +"oVx" = ( +/obj/structure/table/plasmaglass, +/obj/item/modular_computer/laptop{ + pixel_x = 16; + pixel_y = 4 + }, +/obj/machinery/recharger{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/effect/turf_decal/loading_area{ + dir = 1; + icon_state = "drain"; + name = "drain" + }, +/turf/open/floor/carpet/black, +/area/centcom/ferry) "oWt" = ( /obj/structure/rack, /obj/item/clothing/under/trek/engsec, @@ -15961,6 +16315,25 @@ }, /turf/open/floor/plating/abductor, /area/abductor_ship) +"pga" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "pgr" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -16865,14 +17238,26 @@ /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) "pVQ" = ( -/obj/machinery/light/small{ - dir = 8; - pixel_x = -10; - pixel_y = 5 +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 }, -/obj/structure/toilet{ +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; dir = 4 }, +/obj/structure/gmushroomdresser, +/obj/item/toy/plush/mammal/marilyn{ + pixel_x = -7; + pixel_y = 16 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "pWa" = ( @@ -16904,10 +17289,37 @@ /turf/open/floor/plasteel/dark, /area/centcom/ferry) "pWz" = ( -/obj/effect/turf_decal/loading_area{ - dir = 9; - icon_state = "steel_panel"; - name = "steel pannel" +/obj/machinery/light{ + brightness = 4; + dir = 1; + pixel_y = 16 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/structure/closet/secure_closet/personal/cabinet{ + name = "Marilyn's closet" + }, +/obj/item/grown/rose, +/obj/item/clothing/suit/fluffyhalfcrop, +/obj/item/clothing/under/pants/white, +/obj/item/clothing/shoes/highheels, +/obj/item/clothing/neck/petcollar/choker, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) @@ -16981,12 +17393,33 @@ /turf/open/floor/plasteel, /area/centcom/supply) "qcL" = ( -/obj/machinery/light/small{ +/obj/machinery/light{ + brightness = 4; dir = 1; - pixel_x = 0; - pixel_y = 14 + pixel_y = 16 }, -/turf/open/floor/carpet/black, +/obj/structure/table/plasmaglass, +/obj/item/storage/pill_bottle/penis_enlargement{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/bouquet/poppy, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/item/reagent_containers/food/snacks/candyheart{ + pixel_x = 6; + pixel_y = -2 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "qcU" = ( /obj/structure/table/reinforced, @@ -17088,6 +17521,25 @@ /obj/structure/curtain, /turf/open/floor/plasteel/white, /area/centcom/ferry) +"qip" = ( +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/machinery/light, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "qiQ" = ( /obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line, @@ -17813,6 +18265,24 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"qTH" = ( +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#630000" + }, +/obj/effect/turf_decal/tile{ + color = "#630000"; + dir = 4 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "qTJ" = ( /obj/structure/sink{ dir = 4; @@ -18262,6 +18732,24 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"rlX" = ( +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "rmh" = ( /obj/machinery/door/airlock/centcom{ id_tag = null; @@ -18739,6 +19227,23 @@ }, /turf/open/floor/plasteel/white, /area/wizard_station) +"rIg" = ( +/obj/effect/decal/cleanable/semendrip, +/obj/effect/decal/cleanable/semendrip, +/obj/effect/decal/cleanable/semendrip{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/semendrip{ + pixel_x = -7; + pixel_y = -7 + }, +/obj/item/caution, +/obj/item/polepack, +/obj/item/wrench, +/obj/item/toy/crayon/spraycan/infinite, +/turf/open/floor/plating, +/area/centcom/ferry) "rIk" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/red{ @@ -18970,16 +19475,14 @@ /turf/open/floor/plasteel, /area/tdome/tdomeobserve) "rTE" = ( -/obj/structure/chair/stool, -/obj/machinery/light{ - dir = 1; - pixel_y = 16 +/obj/structure/fireplace, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 }, -/obj/item/reagent_containers/rag/towel, -/obj/effect/turf_decal/loading_area{ - dir = 9; - icon_state = "steel_panel"; - name = "steel pannel" +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) @@ -18997,6 +19500,10 @@ /obj/structure/flora/crystal/small/pile, /turf/open/indestructible/layenia/crystal/garden, /area/centcom/ferry) +"rVg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "rVs" = ( /obj/machinery/computer/card/centcom{ dir = 8 @@ -19781,8 +20288,14 @@ /turf/open/floor/plasteel, /area/centcom/control) "sGu" = ( -/obj/machinery/light, -/turf/open/floor/carpet/black, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "sGE" = ( /obj/structure/chair/office/dark{ @@ -21857,11 +22370,23 @@ }, /area/centcom/ferry) "uIe" = ( -/obj/machinery/light{ - dir = 1; - pixel_y = 16 +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 }, -/obj/item/cigbutt, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/structure/rack/shelf, +/obj/item/seeds/starthistle/valentines, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "uIu" = ( @@ -21938,6 +22463,23 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"uLr" = ( +/obj/structure/table/plasmaglass, +/obj/effect/turf_decal/loading_area{ + dir = 1; + icon_state = "drain"; + name = "drain" + }, +/obj/effect/turf_decal/loading_area{ + dir = 4; + icon_state = "drain"; + name = "drain" + }, +/obj/item/paper{ + text = "Remember our deal... 100u's by the end of the week." + }, +/turf/open/floor/carpet/black, +/area/centcom/ferry) "uLI" = ( /obj/structure/table, /obj/item/clipboard, @@ -22129,6 +22671,32 @@ }, /turf/open/floor/plating/asteroid/layenia/garden, /area/centcom/ferry) +"uUC" = ( +/obj/structure/rack/shelf, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -6; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/structure/curtain{ + alpha = 240; + color = "#c72222"; + icon_state = "closed"; + open = 0 + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "uUK" = ( /obj/machinery/shower{ dir = 8 @@ -22752,8 +23320,15 @@ /area/centcom/ferry) "vCU" = ( /obj/structure/table/plasmaglass, -/obj/item/modular_computer/laptop, /obj/machinery/light, +/obj/item/reagent_containers/food/snacks/candyheart{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/item/ashtray{ + pixel_x = -5; + pixel_y = -3 + }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "vCY" = ( @@ -23052,6 +23627,21 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"vQL" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_x = 10; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, +/turf/open/floor/mineral/basaltstone_floor, +/area/centcom/ferry) "vRv" = ( /obj/structure/rack, /obj/item/nullrod/claymore{ @@ -24077,10 +24667,9 @@ /turf/open/floor/wood, /area/centcom/holding) "wWs" = ( -/obj/structure/window{ - dir = 8 +/obj/structure/chair/sofa/right{ + dir = 1 }, -/obj/structure/window, /turf/open/floor/carpet/black, /area/centcom/ferry) "wWW" = ( @@ -24146,6 +24735,21 @@ icon_state = "drain"; name = "drain" }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000" + }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "wYG" = ( @@ -24759,7 +25363,18 @@ /turf/open/floor/holofloor, /area/holodeck/rec_center/dodgeball) "xKU" = ( -/obj/effect/decal/cleanable/semen, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 4 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 1 + }, +/obj/effect/turf_decal/tile{ + color = "#000000"; + dir = 8 + }, /turf/open/floor/mineral/basaltstone_floor, /area/centcom/ferry) "xLa" = ( @@ -52471,12 +53086,12 @@ fWS fWS fWS fWS -fWS -fWS -fWS -fWS -fWS -fWS +eRA +eRA +eRA +eRA +eRA +eRA fWS fWS fWS @@ -52728,12 +53343,12 @@ fWS fWS fWS fWS -fWS -fWS -fWS -fWS -fWS -fWS +eRA +iXi +qTH +mLK +kjW +rVg fWS fWS fWS @@ -52985,17 +53600,17 @@ fWS fWS fWS fWS +eRA +mUa +vaX +vaX +kVN eDP eDP eDP eDP eDP eDP -fWS -fWS -eDP -eDP -eDP eDP eDP eDP @@ -53244,12 +53859,12 @@ fWS fWS eDP hHg -eDP -eDP +aFM +dNw dQA -eDP -fWS -fWS +baC +rIg +evP eDP vIX mKu @@ -53500,13 +54115,13 @@ eDP eDP eDP eDP -bIJ -uKo -uKo -civ eDP -fWS -fWS +eDP +jDL +eDP +eDP +eDP +eDP eDP ozX hbu @@ -53757,13 +54372,13 @@ tXZ hnc idP eDP -uKo -uKo -uKo -uKo -eDP -eDP +pVQ +akw +akw +qip eDP +aSo +uUC eDP vFs lwo @@ -54014,12 +54629,12 @@ xxX eDW dQv eDP -uKo -uKo -uKo +pWz +rlX +rlX lzn -eDP -pVQ +oVx +vaX fYD eDP tuz @@ -54270,14 +54885,14 @@ hqE ebE llj kqQ -eDP -uKo -uKo -uKo -uKo -eDP +bIJ uIe -xKU +rlX +rlX +pga +gXf +vaX +vaX eDP mBI kNj @@ -54528,13 +55143,13 @@ eDP eDP eDP eDP -uKo -uKo +xKU iSu -uKo -eDP +iSu +fQb +uLr mKw -gkp +opi eDP xfe pFo @@ -54786,11 +55401,11 @@ rOT aeD eDP rTE -pWz -pWz -bIC -eDP -eDP +vaX +vaX +sGu +oGR +oGR foE eDP mvA @@ -55045,10 +55660,10 @@ eDP ndJ jQP wWs -ola -wYv +sGu wYv wYv +mTH eDP dEt fUm @@ -55302,7 +55917,7 @@ eDP aNV dGI dbL -ohE +nRs eDP eDP eDP @@ -55555,10 +56170,10 @@ iVH nPU gkp abt -eDP +civ ejW -iXi -iXi +vaX +vaX sGu eDP gvm @@ -55814,9 +56429,9 @@ gkp eqI eDP qcL -vaX -vaX -vaX +vQL +bdo +lCy eDP hMV dHs @@ -57612,7 +58227,7 @@ bvj gkp jVH eDP -mUa +tfE fJy gkp eDK diff --git a/_maps/templates/new_pod_luxury.dmm b/_maps/templates/new_pod_luxury.dmm index eb5e5e4d5..e4bb3b5a7 100644 --- a/_maps/templates/new_pod_luxury.dmm +++ b/_maps/templates/new_pod_luxury.dmm @@ -31,18 +31,21 @@ /area/survivalpod) "f" = ( /obj/machinery/chem_dispenser/drinks/beer{ + density = 0; pixel_y = 24 }, /turf/open/floor/carpet/black, /area/survivalpod) "g" = ( /obj/machinery/chem_dispenser/drinks{ + density = 0; pixel_y = 24 }, /turf/open/floor/carpet/black, /area/survivalpod) "h" = ( /obj/machinery/vending/boozeomat/all_access{ + density = 0; pixel_y = 32 }, /turf/open/floor/carpet/black, diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index b08a5a213..a49a6404f 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -156,3 +156,7 @@ //belly sound pref things #define NORMIE_HEARCHECK 4 + +#define BORGBELLY_NONE 0 +#define BORGBELLY_RED 1 +#define BORGBELLY_GREEN 2 \ No newline at end of file diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index e9d90e234..d0453ca80 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -10,6 +10,7 @@ #define CLONE "clone" #define STAMINA "stamina" #define BRAIN "brain" +#define PAIN "pain" //bitflag damage defines used for suicide_act #define BRUTELOSS (1<<0) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 32ec833bd..ef8fd6748 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -736,6 +736,9 @@ ///from datum/action/cyborg_small_sprite and sends when a cyborg changes modules #define COMSIG_CYBORG_MODULE_CHANGE "cyborg_module_change" +// /datum/element/ventcrawling signals +#define COMSIG_HANDLE_VENTCRAWL "handle_ventcrawl" //when atom with ventcrawling element attempts to ventcrawl +#define COMSIG_CHECK_VENTCRAWL "check_ventcrawl" //to check an atom's ventcrawling element tier (if applicable) /* Attack signals. They should share the returned flags, to standardize the attack chain. */ /// tool_act -> pre_attack -> target.attackby (item.attack) -> afterattack diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index d994d5159..d45280be4 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -285,3 +285,7 @@ #define HUMAN_CARRY_SLOWDOWN 0 #define TYPING_INDICATOR_TIMEOUT 10 MINUTES + +//Gremlins +#define NPC_TAMPER_ACT_FORGET 1 //Don't try to tamper with this again +#define NPC_TAMPER_ACT_NOMSG 2 //Don't produce a visible message diff --git a/code/__DEFINES/radiation.dm b/code/__DEFINES/radiation.dm index ad2daffb8..f1d7bc8c2 100644 --- a/code/__DEFINES/radiation.dm +++ b/code/__DEFINES/radiation.dm @@ -36,6 +36,7 @@ Ask ninjanomnom if they're around #define RAD_MEDIUM_INSULATION 0.7 // What common walls have #define RAD_HEAVY_INSULATION 0.6 // What reinforced walls have #define RAD_EXTREME_INSULATION 0.5 // What rad collectors have +#define RAD_NEAR_FULL_INSULATION 0.2 // What radiation shutters and specialised walls for the RBMK use. #define RAD_FULL_INSULATION 0 // Unused // WARNING: The deines below could have disastrous consequences if tweaked incorrectly. See: The great SM purge of Oct.6.2017 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 349af6d3c..20ddeac19 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -206,6 +206,8 @@ #define TRAIT_ZAOCORP_NOGUNS "zao_no_guns" +#define INNATE_TRAIT "innate" + // common trait sources #define TRAIT_GENERIC "generic" #define EYE_DAMAGE "eye_damage" diff --git a/code/__HELPERS/markov.dm b/code/__HELPERS/markov.dm new file mode 100644 index 000000000..7e195f8b9 --- /dev/null +++ b/code/__HELPERS/markov.dm @@ -0,0 +1,61 @@ +#define MAXIMUM_MARKOV_LENGTH 25000 + +/proc/markov_chain(var/text, var/order = 4, var/length = 250) + if(!text || order < 0 || order > 20 || length < 1 || length > MAXIMUM_MARKOV_LENGTH) + return + + var/table = markov_table(text, order) + var/markov = markov_text(length, table, order) + return markov + +/proc/markov_table(var/text, var/look_forward = 4) + if(!text) + return + var/list/table = list() + + for(var/i = 1, i <= length(text), i++) + var/char = copytext(text, i, look_forward+i) + if(!table[char]) + table[char] = list() + + for(var/i = 1, i <= (length(text) - look_forward), i++) + var/char_index = copytext(text, i, look_forward+i) + var/char_count = copytext(text, i+look_forward, (look_forward*2)+i) + + if(table[char_index][char_count]) + table[char_index][char_count]++ + else + table[char_index][char_count] = 1 + + return table + +/proc/markov_text(var/length = 250, var/table, var/look_forward = 4) + if(!table) + return + var/char = pick(table) + var/o = char + + for(var/i = 0, i <= (length / look_forward), i++) + var/newchar = markov_weighted_char(table[char]) + + if(newchar) + char = newchar + o += "[newchar]" + else + char = pick(table) + + return o + +/proc/markov_weighted_char(var/list/array) + if(!array || !array.len) + return + + var/total = 0 + for(var/i in array) + total += array[i] + var/r = rand(1, total) + for(var/i in array) + var/weight = array[i] + if(r <= weight) + return i + r -= weight diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 9854950fd..4937ec2ed 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -177,6 +177,21 @@ desc = "You're severely dehydrated." icon_state = "dehydrated" +/obj/screen/alert/pain + name = "Pain" + desc = "You're in pain!" + icon_state = "pain" + +/obj/screen/alert/painmajor + name = "Major Pain" + desc = "You're in major pain!" + icon_state = "pain_major" + +/obj/screen/alert/painshock + name = "Neurogenic Shock" + desc = "You are in so much pain, you risk going into shock!" + icon_state = "pain_shock" + /obj/screen/alert/gross name = "Grossed out." desc = "That was kind of gross..." diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm index 927f68eee..58551bfb9 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -35,7 +35,7 @@ SUBSYSTEM_DEF(nightshift) if(!emergency) announce("Restoring night lighting configuration to normal operation.") else - announce("Disabling night lighting: Station is in a state of emergency.") + announce("Disabling night lighting: Station is in a state of emergency.") if(emergency) night_time = FALSE if(nightshift_active != night_time) @@ -45,9 +45,9 @@ SUBSYSTEM_DEF(nightshift) nightshift_active = active if(announce) if (active) - announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.") + priority_announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.", sound='sound/AI/night.ogg', sender_override="Automated Lighting System Announcement") else - announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.") + priority_announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.", sound='sound/AI/night2.ogg', sender_override="Automated Lighting System Announcement") for(var/A in GLOB.apcs_list) var/obj/machinery/power/apc/APC = A if (APC.area && (APC.area.type in GLOB.the_station_areas)) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index b75ba3328..5ff989878 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -44,7 +44,7 @@ SUBSYSTEM_DEF(ticker) var/start_at var/gametime_offset = 432000 //Deciseconds to add to world.time for station time. - var/station_time_rate_multiplier = 12 //factor of station time progressal vs real time. + var/station_time_rate_multiplier = 20 //factor of station time progressal vs real time. var/totalPlayers = 0 //used for pregame stats on statpanel var/totalPlayersReady = 0 //used for pregame stats on statpanel diff --git a/code/datums/elements/ventcrawling.dm b/code/datums/elements/ventcrawling.dm new file mode 100644 index 000000000..254345a97 --- /dev/null +++ b/code/datums/elements/ventcrawling.dm @@ -0,0 +1,36 @@ +/datum/element/ventcrawling + element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH + id_arg_index = 2 + var/tier + +/datum/element/ventcrawling/Attach(datum/target, duration = 0, given_tier = VENTCRAWLER_NUDE) + . = ..() + + var/mob/living/person = target + if(!istype(person)) + return FALSE + + src.tier = given_tier + + RegisterSignal(target, COMSIG_HANDLE_VENTCRAWL, .proc/handle_ventcrawl) + RegisterSignal(target, COMSIG_CHECK_VENTCRAWL, .proc/check_ventcrawl) + to_chat(target, "You can ventcrawl! Use alt+click on vents to quickly travel about the station.") + + if(duration!=0) + addtimer(CALLBACK(src, .proc/Detach, target), duration) + +/datum/element/ventcrawling/Detach(datum/target) + UnregisterSignal(target, list(COMSIG_HANDLE_VENTCRAWL, COMSIG_CHECK_VENTCRAWL)) + to_chat(target, "You can no longer ventcrawl.") + + return ..() + +/datum/element/ventcrawling/proc/handle_ventcrawl(datum/target,atom/A) + var/mob/living/person = target + if(!istype(person)) + return FALSE + + person.handle_ventcrawl(A,tier) + +/datum/element/ventcrawling/proc/check_ventcrawl() + return tier diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 75c812be4..26e9d0d83 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -255,3 +255,11 @@ suffix = "lavaland_surface_cozy_cabin.dmm" allow_duplicates = FALSE cost = 0 + +/datum/map_template/ruin/lavaland/jettisoned_reactor + name = "Jettisoned Reactor" + id = "jettreactor" + description = "An incredibly dangerous ruin, filled with radiation and unknown lifeforms." + suffix = "lavaland_surface_jettisoned_reactor.dmm" + allow_duplicates = FALSE + cost = 15//Not too important, if you disregard the rads and facehugger. diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index cf66d0574..fa7413bec 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -295,3 +295,15 @@ to_chat(L, "You need an attachable assembly!") #undef MAXIMUM_EMP_WIRES + +//gremlins +/datum/wires/proc/npc_tamper(mob/living/L) + if(!wires.len) + return + + var/wire_to_screw = pick(wires) + + if(is_color_cut(wire_to_screw) || prob(50)) //CutWireColour() proc handles both cutting and mending wires. If the wire is already cut, always mend it back. Otherwise, 50% to cut it and 50% to pulse it + cut(wire_to_screw) + else + pulse(wire_to_screw, L) diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 99245f719..3441b9348 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -81,7 +81,6 @@ icon_state = "red" //Xeno Nest - /area/ruin/unpowered/xenonest name = "The Hive" always_unpowered = TRUE @@ -90,6 +89,10 @@ power_light = FALSE poweralm = FALSE -//ash walker nest +//Ash Walker Nest /area/ruin/unpowered/ash_walkers icon_state = "red" + +//Jettisoned Reactor +/area/ruin/unpowered/reactor + icon_state = "red" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 035b75a90..47d61e3a9 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -342,6 +342,25 @@ . += "It's empty." SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) + + +////////////////////////////////////////////////////////////// + //Examine Tab stuff - Hyperstation + var/examineTabOutput = "" + examineTabOutput = "
" + examineTabOutput += "[icon2html(icon, world, icon_state)]" + examineTabOutput += " [url_encode(name)]" //url_encode for safty! + examineTabOutput += "
" + examineTabOutput += "
[url_encode(desc)]" + user.client << output(examineTabOutput, "statbrowser:update_examine") //open the examine window + user.client << output(null, "statbrowser:create_mobexamine") //open the examine window + + + + + + +////////////////////////////////////////////////////////// /// Updates the icon of the atom /atom/proc/update_icon() // I expect we're going to need more return flags and options in this proc diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm index 5bf91fb3c..758f3b168 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm @@ -176,7 +176,7 @@ /datum/dynamic_ruleset/event/crystals name = "Crystal Invasion" typepath = /datum/round_event/crystalloid_entities - weight = 4 + weight = 5 repeatable_weight_decrease = 1 cost = 3 enemy_roles = list("AI","Security Officer","Head of Security","Captain","Assistant","Scientist","Station Engineer") @@ -844,7 +844,7 @@ typepath = /datum/round_event/spontaneous_appendicitis enemy_roles = list("Medical Doctor","Chief Medical Officer") required_enemies = list(2,2,2,2,2,2,2,1,1,1) - requirements = list(5,5,5,5,5,5,5,5,0,0) + requirements = list(101,101,20,18,16,14,12,10,8,6) high_population_requirement = 10 weight = 5 cost = 6 diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 3c4963968..d9f34616b 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -91,3 +91,55 @@ /obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user) if(stat & NOPOWER) open(1) + +//Multi-tile poddoors don't turn invisible automatically, so we change the opacity of the turfs below instead one by one. +/obj/machinery/door/poddoor/multi_tile/proc/apply_opacity_to_my_turfs(var/new_opacity) + for(var/turf/T in locs) + T.opacity = new_opacity + T.has_opaque_atom = new_opacity + T.reconsider_lights() + T.air_update_turf(1) + update_freelook_sight() + +/obj/machinery/door/poddoor/multi_tile + rad_insulation = RAD_NEAR_FULL_INSULATION + +/obj/machinery/door/poddoor/multi_tile/open() + . = ..() + rad_insulation = RAD_NO_INSULATION + apply_opacity_to_my_turfs(0) + +/obj/machinery/door/poddoor/multi_tile/close() + . = ..() + rad_insulation = RAD_NEAR_FULL_INSULATION + apply_opacity_to_my_turfs(1) + +/obj/machinery/door/poddoor/multi_tile/four_tile_ver/ + icon = 'icons/obj/doors/1x4blast_vert.dmi' + bound_height = 128 + dir = NORTH + +/obj/machinery/door/poddoor/multi_tile/three_tile_ver/ + icon = 'icons/obj/doors/1x3blast_vert.dmi' + bound_height = 96 + dir = NORTH + +/obj/machinery/door/poddoor/multi_tile/two_tile_ver/ + icon = 'icons/obj/doors/1x2blast_vert.dmi' + bound_height = 64 + dir = NORTH + +/obj/machinery/door/poddoor/multi_tile/four_tile_hor/ + icon = 'icons/obj/doors/1x4blast_hor.dmi' + bound_width = 128 + dir = EAST + +/obj/machinery/door/poddoor/multi_tile/three_tile_hor/ + icon = 'icons/obj/doors/1x3blast_hor.dmi' + bound_width = 96 + dir = EAST + +/obj/machinery/door/poddoor/multi_tile/two_tile_hor/ + icon = 'icons/obj/doors/1x2blast_hor.dmi' + bound_width = 64 + dir = EAST \ No newline at end of file diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 2ff259538..62dd484df 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -41,23 +41,21 @@ desc = "Lead-lined shutters painted yellow with a radioactive hazard symbol on it. Blocks out most radiation" icon = 'icons/obj/doors/shutters_radiation.dmi' icon_state = "closed" - rad_insulation = 0.2 + rad_insulation = RAD_NEAR_FULL_INSULATION /obj/machinery/door/poddoor/shutters/radiation/preopen icon_state = "open" density = FALSE - opacity = 0 - rad_insulation = 1 + opacity = FALSE + rad_insulation = RAD_NO_INSULATION -/obj/machinery/door/poddoor/shutters/radiation/do_animate(animation) - ..() - switch(animation) - if("opening") - rad_insulation = 1 - if("closing") - rad_insulation = -0.5 +/obj/machinery/door/poddoor/shutters/radiation/open() + . = ..() + rad_insulation = RAD_NO_INSULATION -// A 3x3 N2 SM setup won't irradiate you if you're behind the shutter at -0.9 insulation. If it starts to delam, it'll start irradiating you slowly. Keep the value between -0.1 to -0.9 +/obj/machinery/door/poddoor/shutters/radiation/close() + . = ..() + rad_insulation = RAD_NEAR_FULL_INSULATION /obj/machinery/door/poddoor/shutters/window name = "windowed shutters" diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm index e2150b12c..1ec48ba52 100644 --- a/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/code/game/objects/items/devices/dogborg_sleeper.dm @@ -11,7 +11,6 @@ var/min_health = -100 var/cleaning = FALSE var/cleaning_cycles = 10 - var/patient_laststat = null var/list/injection_chems = list(/datum/reagent/medicine/antitoxin, /datum/reagent/medicine/epinephrine, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine, /datum/reagent/medicine/kelotane) var/eject_port = "ingestion" @@ -86,16 +85,16 @@ if(patient) to_chat(user, "Your [src] is already occupied.") return - user.visible_message("[hound.name] is carefully inserting [target.name] into their [src].", "You start placing [target] into your [src]...") + + user.visible_message("[hound.name] is carefully inserting [target.name] into their [src].", + "You start placing [target] into your [src]...") + if(!patient && iscarbon(target) && !target.buckled && do_after (user, 100, target = target)) - - if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. - return //If they moved away, you can't eat them. - + if(!in_range(src, target)) + return if(patient) - return //If you try to eat two people at once, you can only eat one. - - else //If you don't have someone in you, proceed. + return + else if(!isjellyperson(target) && ("toxin" in injection_chems)) injection_chems -= "toxin" injection_chems += "antitoxin" @@ -104,8 +103,8 @@ injection_chems += "toxin" target.forceMove(src) target.reset_perspective(src) - target.ExtinguishMob() //The tongue already puts out fire stacks but being put into the sleeper shouldn't allow you to keep burning. - update_gut(hound) + target.ExtinguishMob() + UpdateGut(hound) user.visible_message("[voracious ? "[hound]'s [src.name] lights up and expands as [target] slips inside into their [src.name]." : "[hound]'s sleeper indicator lights up as [target] is scooped up into [hound.p_their()] [src]."]", \ "Your [voracious ? "[src.name] lights up as [target] slips into" : "sleeper indicator light shines brightly as [target] is scooped inside"] your [src]. Life support functions engaged.") message_admins("[key_name(hound)] has sleeper'd [key_name(patient)] as a dogborg. [ADMIN_JMP(src)]") @@ -156,7 +155,7 @@ items_preserved.Cut() cleaning = FALSE if(hound) - update_gut(hound) + UpdateGut(hound) /obj/item/dogborg/sleeper/attack_self(mob/user) @@ -170,13 +169,18 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - // TGUI TODO: do something about this UI - ui = new(user, src, ui_key, "dogborg_sleeper", name, 375, 550, master_ui, state) + ui = new(user, src, ui_key, "DogborgSleeper", name, 375, 550, master_ui, state) ui.open() /obj/item/dogborg/sleeper/ui_data() var/list/data = list() + var/chemical_list = list() + var/blood_percent = 0 + data["occupied"] = patient ? 1 : 0 + data["blood_levels"] = blood_percent + data["blood_status"] = "Patient either has no blood, or does not require it to function." + data["chemical_list"] = chemical_list if(cleaning && length(contents - items_preserved)) data["items"] = "Self-cleaning mode active: [length(contents - items_preserved)] object(s) remaining." @@ -185,7 +189,7 @@ data["chem"] = list() for(var/chem in injection_chems) var/datum/reagent/R = GLOB.chemical_reagents_list[chem] - data["chem"] += list(list("name" = R.name, "id" = R.type)) + data["chem"] += list(list("name" = R.name, "id" = R.type, "allowed" = TRUE)) data["occupant"] = list() var/mob/living/mob_occupant = patient @@ -213,10 +217,41 @@ data["occupant"]["fireLoss"] = mob_occupant.getFireLoss() data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss() data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN) - data["occupant"]["reagents"] = list() + if(mob_occupant.reagents.reagent_list.len) for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) - data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) + chemical_list += list(list("name" = R.name, "volume" = R.volume)) + else + chemical_list = "Patient has no reagents." + + data["occupant"]["failing_organs"] = list() + var/mob/living/carbon/C = mob_occupant + if(C) + for(var/obj/item/organ/Or in C.getFailingOrgans()) + if(istype(Or, /obj/item/organ/brain)) + continue + data["occupant"]["failing_organs"] += list(list("name" = Or.name)) + + if(istype(C)) //Non-carbons shouldn't be able to enter sleepers, but this is to prevent runtimes if something ever breaks + if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner. + blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100) + var/blood_id = C.get_blood_id() + var/blood_warning = "" + if(blood_percent < 80) + blood_warning = "Patient has low blood levels." + if(blood_percent < 60) + blood_warning = "Patient has DANGEROUSLY low blood levels." + if(blood_id) + var/blood_type = C.dna.blood_type + if(!(blood_id in GLOB.blood_reagent_types)) // special blood substance + var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] + if(R) + blood_type = R.name + else + blood_type = blood_id + data["blood_status"] = "Patient has [blood_type] type blood. [blood_warning]" + data["blood_levels"] = blood_percent + return data /obj/item/dogborg/sleeper/ui_act(action, params) @@ -239,81 +274,42 @@ to_chat(src, "Your [src] is already cleaned.") return if(patient) - to_chat(patient, "[usr.name]'s [src] fills with caustic enzymes around you!") + to_chat(patient, "[usr.name]'s [src] fills with caustic enzymes around you!") to_chat(src, "Cleaning process enabled.") clean_cycle(usr) . = TRUE -/obj/item/dogborg/sleeper/proc/update_gut(mob/living/silicon/robot/hound) - //Well, we HAD one, what happened to them? - if(!hound) //runetime error fix with dogborgs with no sleepers - return - - var/prociconupdate = FALSE - var/currentenvy = hound.sleeper_nv - hound.sleeper_nv = FALSE - if(patient in contents) - if(patient_laststat != patient.stat) - if(patient.stat & DEAD) - hound.sleeper_r = 1 - hound.sleeper_g = 0 - patient_laststat = patient.stat - else - hound.sleeper_r = 0 - hound.sleeper_g = 1 - patient_laststat = patient.stat - prociconupdate = TRUE - - if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER)) - hound.sleeper_nv = TRUE - else - hound.sleeper_nv = FALSE - if(hound.sleeper_nv != currentenvy) - prociconupdate = TRUE - - //Update icon - if(prociconupdate) - hound.update_icons() - //Return original patient - return(patient) - //Check for a new patient - else - for(var/mob/living/carbon/human/C in contents) - patient = C - if(patient.stat & DEAD) - hound.sleeper_r = 1 - hound.sleeper_g = 0 - patient_laststat = patient.stat - else - hound.sleeper_r = 0 - hound.sleeper_g = 1 - patient_laststat = patient.stat - - if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER)) - hound.sleeper_nv = TRUE - else - hound.sleeper_nv = FALSE - - //Update icon and return new patient - hound.update_icons() - return - - //Cleaning looks better with red on, even with nobody in it - if(cleaning && !patient) - hound.sleeper_r = 1 - hound.sleeper_g = 0 - //Couldn't find anyone, and not cleaning - else if(!cleaning && !patient) - hound.sleeper_r = 0 - hound.sleeper_g = 0 - - patient_laststat = null +/obj/item/dogborg/sleeper/proc/UpdatePatient(mob/living/silicon/robot/hound) patient = null - hound.update_icons() + for(var/mob/living/carbon/human/C in contents) + patient = C + break + return patient + +/obj/item/dogborg/sleeper/proc/CheckNeedsGutUpdate(mob/living/silicon/robot/hound) + if(!hound) return + var/current_belly = BORGBELLY_NONE + UpdatePatient(hound) + if(patient) + var/patient_vore_enabled = patient.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER + var/hound_vore_enabled = hound.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER + if(patient_vore_enabled && hound_vore_enabled) + if(patient.stat & DEAD) + current_belly = BORGBELLY_RED + else + current_belly = BORGBELLY_GREEN + else + if(cleaning) + current_belly = BORGBELLY_RED + return current_belly + +/obj/item/dogborg/sleeper/proc/UpdateGut(mob/living/silicon/robot/hound) + var/new_belly = CheckNeedsGutUpdate(hound) + if(hound.sleeper_state != new_belly) + hound.sleeper_state = new_belly + hound.update_icons() -//Gurgleborg process /obj/item/dogborg/sleeper/proc/clean_cycle(mob/living/silicon/robot/hound) - //Sanity if(!hound) return for(var/I in items_preserved) @@ -365,15 +361,13 @@ if(!T.dropItemToGround(W)) qdel(W) qdel(T) - //Handle the target being anything but a mob else if(isobj(target)) var/obj/T = target if(T.type in important_items) //If the object is in the items_preserved global list items_preserved += T - //If the object is not one to preserve else qdel(T) - update_gut() + UpdateGut(hound) hound.cell.give(10) else cleaning_cycles = initial(cleaning_cycles) @@ -399,9 +393,8 @@ H.playsound_local(source, null, 45, falloff = 0, S = pred_digest) else if(H in contents) H.playsound_local(source, null, 65, falloff = 0, S = prey_digest) - - update_gut(hound) - + + UpdateGut(hound) if(cleaning) addtimer(CALLBACK(src, .proc/clean_cycle, hound), 50) @@ -462,7 +455,7 @@ if(do_after(user, 30, target = target) && !patient && !target.buckled) target.forceMove(src) target.reset_perspective(src) - update_gut(hound) + UpdateGut(hound) user.visible_message("[hound.name]'s mobile brig clunks in series as [target] slips inside.", "Your mobile brig groans lightly as [target] slips inside.") playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) // Really don't need ERP sound effects for robots @@ -490,31 +483,25 @@ if(length(contents) > (max_item_count - 1)) to_chat(user,"Your [src] is full. Eject or process contents to continue.") return + if(isitem(target)) var/obj/item/I = target if(CheckAccepted(I)) - to_chat(user,"[I] registers an error code to your [src]") + to_chat(user,"[I] registers an error code to your [src].") return if(I.w_class > WEIGHT_CLASS_NORMAL) - to_chat(user,"[I] is too large to fit into your [src]") + to_chat(user,"[I] is too large to fit into your [src].") return user.visible_message("[hound.name] is ingesting [I] into their [src.name].", "You start ingesting [target] into your [src.name]...") if(do_after(user, 15, target = target) && length(contents) < max_item_count) I.forceMove(src) I.visible_message("[hound.name]'s garbage processor groans lightly as [I] slips inside.", "Your garbage compactor groans lightly as [I] slips inside.") playsound(hound, 'sound/machines/disposalflush.ogg', 50, 1) - if(length(contents) > 11) //grow that tum after a certain junk amount - hound.sleeper_r = 1 - hound.update_icons() - else - hound.sleeper_r = 0 - hound.update_icons() - return - if(iscarbon(target) || issilicon(target)) + else if(iscarbon(target) || issilicon(target)) var/mob/living/trashman = target if(!trashman.devourable) - to_chat(user, "[target] registers an error code to your [src]") + to_chat(user, "[target] registers an error code to your [src].") return if(patient) to_chat(user,"Your [src] is already occupied.") @@ -526,6 +513,14 @@ if(do_after(user, 30, target = trashman) && !patient && !trashman.buckled && length(contents) < max_item_count) trashman.forceMove(src) trashman.reset_perspective(src) - update_gut() user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.") playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) + + UpdateGut(hound) + + +/obj/item/dogborg/sleeper/compactor/CheckNeedsGutUpdate(mob/living/silicon/robot/hound) + var/current_belly = ..() + if(length(contents) > 11) + current_belly = BORGBELLY_RED + return current_belly \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 6a144a01d..c8f3ef54f 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -135,6 +135,9 @@ GENE SCANNER if(ishuman(M)) var/mob/living/carbon/human/H = M + if (user.stat == 0) //no more ghost scans + H.scan_animation() + if(H.undergoing_cardiac_arrest() && H.stat != DEAD) to_chat(user, "Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!") if(H.undergoing_liver_failure() && H.stat != DEAD) //might be depreciated BUG_PROBABLE_CAUSE diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 52ebe7612..b726e34a9 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -43,7 +43,7 @@ deliveryamt = 10 /obj/item/grenade/spawnergrenade/clustaur - desc = "A very strange grenade often found in maintanance. Use of this may constitute a war crime in your area, consult your local captain." + desc = "A very strange grenade often found in maintenance. Use of this may constitute a war crime in your area, consult your local captain." name = "clustaur grenade" icon_state = "clustaur" item_state = "clustaur" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 41a9ec53b..60c7de146 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -478,8 +478,8 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ null, \ new/datum/stack_recipe("colored brown", /obj/item/storage/box/brown), \ new/datum/stack_recipe("colored green", /obj/item/storage/box/green), \ - new/datum/stack_recipe("colored red", /obj/item/storage/box/blue), \ - new/datum/stack_recipe("colored blue", /obj/item/storage/box/red), \ + new/datum/stack_recipe("colored red", /obj/item/storage/box/red), \ + new/datum/stack_recipe("colored blue", /obj/item/storage/box/blue), \ new/datum/stack_recipe("colored yellow", /obj/item/storage/box/yellow), \ new/datum/stack_recipe("colored pink", /obj/item/storage/box/pink), \ new/datum/stack_recipe("colored purple", /obj/item/storage/box/purple), \ diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm index fbc448053..1b2c4767f 100644 --- a/code/game/turfs/simulated/wall/misc_walls.dm +++ b/code/game/turfs/simulated/wall/misc_walls.dm @@ -209,3 +209,15 @@ sheet_type = /obj/item/stack/tile/bronze sheet_amount = 2 girder_type = /obj/structure/girder/bronze + +/turf/closed/wall/mineral/lead + name = "lead lined metal wall" + desc = "A hefty wall with lead inserts." + icon = 'icons/turf/walls/riveted.dmi' + icon_state = "riveted" + sheet_type = /obj/item/stack/rods + hardness = 10 + girder_type = /obj/structure/girder/reinforced + explosion_block = 2 + rad_insulation = RAD_NEAR_FULL_INSULATION + canSmoothWith = list(/turf/closed/wall/mineral/lead) diff --git a/code/modules/cargo/bounties/medical.dm b/code/modules/cargo/bounties/medical.dm index 48d736c8d..95ed7a987 100644 --- a/code/modules/cargo/bounties/medical.dm +++ b/code/modules/cargo/bounties/medical.dm @@ -107,21 +107,21 @@ /datum/bounty/item/medical/advhealthscaner name = "Advanced Health Analyzer" - description = "A ERT Medical unit needs the new 'advanced health analyzer', for a mission at a Station 4. Can you send some?." + description = "An ERT Medical unit needs the new 'advanced health analyzer' for a mission at a Station 4. Can you send some?." reward = 3000 required_count = 5 wanted_types = list(/obj/item/healthanalyzer/advanced) /datum/bounty/item/medical/wallmounts name = "Defibrillator wall mounts" - description = "New Space OSHA regulation state that are new cloning medical wing needs a few 'Easy to access defibrillartors'. Can you send a few before we get a lawsuit?" + description = "New Safety Review Board regulations state that our new medical wing needs 'easy to access defibrillators'. Can you send a few before we get a lawsuit?" reward = 2000 required_count = 3 wanted_types = list(/obj/machinery/defibrillator_mount) /datum/bounty/item/medical/defibrillator - name = "New defibillators" - description = "After years of storage are defibrillator units have become more liabilities then we want. Please send us some new ones to replace these old ones." + name = "New defibrillators" + description = "After years of storage our defibrillator units have become more of a liability then we want. Please send us some new ones to replace them." reward = 2250 required_count = 5 wanted_types = list(/obj/item/defibrillator) diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index f6cf566b9..dd6b68a4b 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -61,7 +61,7 @@ /datum/supply_pack/security/russianclothing name = "Russian Surplus Clothing" - desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproff armor, a few union suits and some warm hats!" + desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproof armor, a few union suits and some warm hats!" contraband = TRUE cost = 5750 // Its basicly sec suits, good boots/gloves contains = list(/obj/item/clothing/suit/security/officer/russian, diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index a5f9c6079..9cc17ac6e 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -12,7 +12,7 @@ var/removeDontImproveChance = 10 //chance the randomly created law replaces a random law instead of simply being added var/shuffleLawsChance = 10 //chance the AI's laws are shuffled afterwards var/botEmagChance = 10 - var/announceEvent = ION_RANDOM // -1 means don't announce, 0 means have it randomly announce, 1 means it is announced + var/announceEvent = 1 // -1 means don't announce, 0 means have it randomly announce, 1 means it is announced var/ionMessage = null var/ionAnnounceChance = 33 announceWhen = 1 diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 3f71a449b..8be42e18c 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -448,7 +448,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and return FALSE /datum/holiday/ramadan/getStationPrefix() - return pick("Harm","Halaal","Jihad","Muslim") + return pick("Fasting","Enlightenment","Prayer","Muslim") /datum/holiday/ramadan/end name = "End of Ramadan" diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 6faa4406e..4c5ae9ca4 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -40,7 +40,6 @@ update_damage_overlays() else adjustStaminaLoss(damage * hit_percent) - //citadel code if(AROUSAL) adjustArousalLoss(damage * hit_percent) return TRUE @@ -62,7 +61,6 @@ amount += BP.burn_dam return amount - /mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE) if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) return FALSE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 89b057716..92ad4fa08 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -729,8 +729,19 @@ remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#000000") cut_overlay(MA) +//medical scan animation +/mob/living/carbon/human/proc/scan_animation() + var/mutable_appearance/scan_anim + scan_anim = mutable_appearance(icon, "mediscan") + add_overlay(scan_anim) + addtimer(CALLBACK(src, .proc/end_scan_animation, scan_anim), 10) + flick(icon,src) + +/mob/living/carbon/human/proc/end_scan_animation(mutable_appearance/MA) + cut_overlay(MA) + /mob/living/carbon/human/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) - if(incapacitated() || lying ) + if(incapacitated()) to_chat(src, "You can't do that right now!") return FALSE if(!Adjacent(M) && (M.loc != src)) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 60ba3cb72..dccbd77f2 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -57,7 +57,6 @@ if(STAMINA) return getStaminaLoss() - /mob/living/proc/apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, def_zone = null, blocked = FALSE, stamina = 0, brain = 0) if(blocked >= 100) return 0 @@ -230,6 +229,9 @@ /mob/living/proc/setStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE) return +/mob/living/proc/adjustPainLoss(amount, updating_health = TRUE, forced = FALSE) + return + // heal ONE external organ, organ gets randomly selected from damaged ones. /mob/living/proc/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE) adjustBruteLoss(-brute, FALSE) //zero as argument for no instant health update diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index bbb162ad2..db01ef47a 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -160,15 +160,6 @@ emote_type = EMOTE_AUDIBLE stat_allowed = UNCONSCIOUS -/datum/emote/living/gasp/run_emote(mob/user, params) - . = ..() - if(. && ishuman(user)) - var/mob/living/carbon/C = user - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/gasp_female1.ogg', 'hyperstation/sound/voice/emotes/gasp_female2.ogg', 'hyperstation/sound/voice/emotes/gasp_female3.ogg', 'hyperstation/sound/voice/emotes/gasp_female4.ogg', 'hyperstation/sound/voice/emotes/gasp_female5.ogg', 'hyperstation/sound/voice/emotes/gasp_female6.ogg', 'hyperstation/sound/voice/emotes/gasp_female7.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/gasp_male1.ogg', 'hyperstation/sound/voice/emotes/gasp_male2.ogg', 'hyperstation/sound/voice/emotes/gasp_male3.ogg', 'hyperstation/sound/voice/emotes/gasp_male4.ogg', 'hyperstation/sound/voice/emotes/gasp_male5.ogg', 'hyperstation/sound/voice/emotes/gasp_male6.ogg', 'hyperstation/sound/voice/emotes/gasp_male7.ogg'), 50, 1) - /datum/emote/living/giggle key = "giggle" key_third_person = "giggles" @@ -176,17 +167,6 @@ message_mime = "giggles silently!" emote_type = EMOTE_AUDIBLE -/datum/emote/living/giggle/run_emote(mob/user, params) - . = ..() - if(. && ishuman(user)) - var/mob/living/carbon/C = user - if(!C.mind || C.mind.miming) - return - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/female_giggle1.ogg', 'hyperstation/sound/voice/emotes/female_giggle2.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/male_laugh3b.ogg'), 50, 1) - /datum/emote/living/glare key = "glare" key_third_person = "glares" @@ -249,11 +229,6 @@ 'sound/voice/catpeople/nyahehe.ogg'), 50, 1) return - if(ishumanbasic(C)) - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/female_laugh1.ogg', 'hyperstation/sound/voice/emotes/female_laugh2.ogg', 'hyperstation/sound/voice/emotes/female_laugh3.ogg', 'hyperstation/sound/voice/emotes/female_laugh4.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/male_laugh1.ogg', 'hyperstation/sound/voice/emotes/male_laugh1b.ogg', 'hyperstation/sound/voice/emotes/male_laugh2.ogg', 'hyperstation/sound/voice/emotes/male_laugh2b.ogg',/*'hyperstation/sound/voice/emotes/male_laugh3.ogg',*/'hyperstation/sound/voice/emotes/male_laugh3b.ogg', 'hyperstation/sound/voice/emotes/male_laugh4.ogg'), 50, 1) /datum/emote/living/look key = "look" @@ -330,11 +305,6 @@ var/mob/living/carbon/C = user if(!C.mind || C.mind.miming) return - if(ishumanbasic(C)) - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/sigh_female.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/sigh_male.ogg'), 50, 1) /datum/emote/living/sit key = "sit" @@ -364,11 +334,6 @@ var/mob/living/carbon/C = user if(!C.mind || C.mind.miming)//mimes can't sneeze because fuck you that's why return - if(ishumanbasic(C)) - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/sneezef1.ogg', 'hyperstation/sound/voice/emotes/sneezef2.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/sneezem1.ogg', 'hyperstation/sound/voice/emotes/sneezem2.ogg'), 50, 1) /datum/emote/living/smug key = "smug" @@ -462,11 +427,6 @@ var/mob/living/carbon/C = user if(!C.mind || C.mind.miming) return - if(ishumanbasic(C)) - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/whimper_female1.ogg', 'hyperstation/sound/voice/emotes/whimper_female2.ogg', 'hyperstation/sound/voice/emotes/whimper_female3.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/whimper_male1.ogg', 'hyperstation/sound/voice/emotes/whimper_male2.ogg', 'hyperstation/sound/voice/emotes/whimper_male3.ogg'), 50, 1) /datum/emote/living/wsmile key = "wsmile" @@ -485,11 +445,6 @@ var/mob/living/carbon/C = user if(!C.mind || C.mind.miming) return - if(ishumanbasic(C)) - if(user.gender == FEMALE) - playsound(C, pick('hyperstation/sound/voice/emotes/female_yawn1.ogg', 'hyperstation/sound/voice/emotes/female_yawn2.ogg', 'hyperstation/sound/voice/emotes/female_yawn3.ogg'), 50, 1) - else - playsound(C, pick('hyperstation/sound/voice/emotes/male_yawn1.ogg', 'hyperstation/sound/voice/emotes/male_yawn2.ogg'), 50, 1) /datum/emote/living/custom key = "me" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5c6f1ecca..254fb4009 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -502,6 +502,10 @@ var/obj/effect/proc_holder/spell/spell = S spell.updateButtonIcon() + if(iscarbon(src)) //pain cooldown + var/mob/living/carbon/C = src + C.pain_cooldown = 20 + //proc used to completely heal a mob. /mob/living/proc/fully_heal(admin_revive = 0) restore_blood() @@ -542,6 +546,13 @@ for(var/organ in C.internal_organs) var/obj/item/organ/O = organ O.setOrganDamage(0) + //Heal pain + if(iscarbon(src)) + var/mob/living/carbon/C = src + for(var/obj/item/bodypart/X in C.bodyparts) + X.pain_dam = 0 + + SEND_SIGNAL(src, COMSIG_LIVING_FULLY_HEAL, admin_revive) //fuck shitcode I hate shitcode @@ -1086,7 +1097,11 @@ lying = 90*buckle_lying else if(!lying) if(resting) - lying = pick(90, 270) // Cit change - makes resting not force you to drop your held items + if(dir == 2 || dir == 4) + lying = 90 + else + lying = 270 + if(has_gravity()) // Cit change - Ditto playsound(src, "bodyfall", 50, 1) // Cit change - Ditto! else if(ko || move_and_fall || (!has_legs && !ignore_legs) || chokehold) diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index fd58d9ea7..79d48025e 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -25,8 +25,7 @@ disabler = FALSE update_icons() //PUT THE GUN AWAY else if(istype(O,/obj/item/dogborg/sleeper)) - sleeper_g = FALSE - sleeper_r = FALSE + sleeper_state = BORGBELLY_NONE update_icons() var/obj/item/dogborg/sleeper/S = O S.go_out() //this should stop edgecase deletions diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 972bf29cd..b52e5c1da 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -654,10 +654,14 @@ if(disabler) add_overlay("disabler")//ditto - if(sleeper_g && module.sleeper_overlay) - add_overlay("[module.sleeper_overlay]_g[sleeper_nv ? "_nv" : ""]") - if(sleeper_r && module.sleeper_overlay) - add_overlay("[module.sleeper_overlay]_r[sleeper_nv ? "_nv" : ""]") + if(module.sleeper_overlay) + var/sleeper_overlay_state = "" + switch(sleeper_state) + if(BORGBELLY_NONE) sleeper_overlay_state = "" + if(BORGBELLY_GREEN) sleeper_overlay_state = "_g" + if(BORGBELLY_RED) sleeper_overlay_state = "_r" + add_overlay("[module.sleeper_overlay][sleeper_overlay_state]") + if(module.dogborg == TRUE) if(resting) cut_overlays() diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm new file mode 100644 index 000000000..b4694b6f0 --- /dev/null +++ b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm @@ -0,0 +1,263 @@ +#define GREMLIN_VENT_CHANCE 1.75 + +//Gremlins +//Small monsters that don't attack humans or other animals. Instead they mess with electronics, computers and machinery + +//List of objects that gremlins can't tamper with (because nobody coded an interaction for it) +//List starts out empty. Whenever a gremlin finds a machine that it couldn't tamper with, the machine's type is added here, and all machines of such type are ignored from then on (NOT SUBTYPES) +GLOBAL_LIST(bad_gremlin_items) + +/mob/living/simple_animal/hostile/gremlin + name = "gremlin" + desc = "This tiny creature finds great joy in discovering and using technology. Nothing excites it more than pushing random buttons on a computer to see what it might do." + icon = 'icons/mob/mob.dmi' + icon_state = "gremlin" + icon_living = "gremlin" + icon_dead = "gremlin_dead" + + var/body_color + + var/in_vent = FALSE + + health = 20 + maxHealth = 20 + search_objects = 3 //Completely ignore mobs + + //Tampering is handled by the 'npc_tamper()' obj proc + wanted_objects = list( + /obj/machinery, + /obj/item/reagent_containers/food, + /obj/structure/sink + ) + + var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent + var/obj/machinery/atmospherics/components/unary/vent_pump/exit_vent + + dextrous = TRUE + possible_a_intents = list(INTENT_HELP, INTENT_GRAB, INTENT_DISARM, INTENT_HARM) + faction = list("meme", "gremlin") + speed = 0.5 + gold_core_spawnable = 2 + unique_name = TRUE + + //Ensure gremlins don't attack other mobs + melee_damage_upper = 0 + melee_damage_lower = 0 + attack_sound = null + obj_damage = 0 + environment_smash = ENVIRONMENT_SMASH_NONE + + //List of objects that we don't even want to try to tamper with + //Subtypes of these are calculated too + var/list/unwanted_objects = list(/obj/machinery/atmospherics/pipe, /turf, /obj/structure) //ensure gremlins dont try to fuck with walls / normal pipes / glass / etc + + var/min_next_vent = 0 + + //Amount of ticks spent pathing to the target. If it gets above a certain amount, assume that the target is unreachable and stop + var/time_chasing_target = 0 + + //If you're going to make gremlins slower, increase this value - otherwise gremlins will abandon their targets too early + var/max_time_chasing_target = 2 + + var/next_eat = 0 + + //Last 20 heard messages are remembered by gremlins, and will be used to generate messages for comms console tampering, etc... + var/list/hear_memory = list() + var/const/max_hear_memory = 20 + +/mob/living/simple_animal/hostile/gremlin/Initialize() + . = ..() + AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS) + ADD_TRAIT(src, TRAIT_SHOCKIMMUNE, INNATE_TRAIT) + access_card = new /obj/item/card/id(src) + var/datum/job/captain/C = new /datum/job/captain + access_card.access = C.get_access() + if(!body_color) + body_color = pick(list("orange","blue","purple", "green", "crystal")) + AddElement(/datum/element/mob_holder, "gremlin_[body_color]") + icon_state = "gremlin_[body_color]" + icon_living = "gremlin_[body_color]" + icon_dead = "gremlin_[body_color]_dead" + +/mob/living/simple_animal/hostile/gremlin/AttackingTarget() + var/is_hungry = world.time >= next_eat || prob(25) + if(istype(target, /obj/item/reagent_containers/food) && is_hungry) //eat food if we're hungry or bored + visible_message("[src] hungrily devours [target]!") + playsound(src, 'sound/items/eatfood.ogg', 50, 1) + qdel(target) + LoseTarget() + next_eat = world.time + rand(700, 3000) //anywhere from 70 seconds to 5 minutes until the gremlin is hungry again + return + if(istype(target, /obj)) + var/obj/M = target + tamper(M) + if(prob(50)) //50% chance to move to the next machine + LoseTarget() + +/mob/living/simple_animal/hostile/gremlin/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) + . = ..() + if(message) + hear_memory.Insert(1, raw_message) + if(hear_memory.len > max_hear_memory) + hear_memory.Cut(hear_memory.len) + +/mob/living/simple_animal/hostile/gremlin/proc/generate_markov_input() + var/result = "" + + for(var/memory in hear_memory) + result += memory + " " + + return result + +/mob/living/simple_animal/hostile/gremlin/proc/generate_markov_chain() + return markov_chain(generate_markov_input(), rand(2,5), rand(100,700)) //The numbers are chosen arbitarily + +/mob/living/simple_animal/hostile/gremlin/proc/tamper(obj/M) + switch(M.npc_tamper_act(src)) + if(NPC_TAMPER_ACT_FORGET) + visible_message(pick( + "\The [src] plays around with \the [M], but finds it rather boring.", + "\The [src] tries to think of some more ways to screw \the [M] up, but fails miserably.", + "\The [src] decides to ignore \the [M], and starts looking for something more fun.")) + + LAZYADD(GLOB.bad_gremlin_items,M.type) + return FALSE + if(NPC_TAMPER_ACT_NOMSG) + //Don't create a visible message + return TRUE + + else + visible_message(pick( + "\The [src]'s eyes light up as \he tampers with \the [M].", + "\The [src] twists some knobs around on \the [M] and bursts into laughter!", + "\The [src] presses a few buttons on \the [M] and giggles mischievously.", + "\The [src] rubs its hands devilishly and starts messing with \the [M].", + "\The [src] turns a small valve on \the [M].")) + + //Add a clue for detectives to find. The clue is only added if no such clue already existed on that machine + return TRUE + +/mob/living/simple_animal/hostile/gremlin/CanAttack(atom/new_target) + if(LAZYFIND(GLOB.bad_gremlin_items,new_target.type)) + return FALSE + if(is_type_in_list(new_target, unwanted_objects)) + return FALSE + if(istype(new_target, /obj/machinery)) + var/obj/machinery/M = new_target + if(M.stat) //Unpowered or broken + return FALSE + else if(istype(new_target, /obj/machinery/door/firedoor)) + var/obj/machinery/door/firedoor/F = new_target + //Only tamper with firelocks that are closed, opening them! + if(!F.density) + return FALSE + + return ..() + +/mob/living/simple_animal/hostile/gremlin/death(gibbed) + walk(src,0) + QDEL_NULL(access_card) + return ..() + +/mob/living/simple_animal/hostile/gremlin/Life() + . = ..() + if(!health || stat == DEAD) + return + //Don't try to path to one target for too long. If it takes longer than a certain amount of time, assume it can't be reached and find a new one + if(!client) //don't do this shit if there's a client, they're capable of ventcrawling manually + if(in_vent) + target = null + if(entry_vent && get_dist(src, entry_vent) <= 1) + var/list/vents = list() + var/datum/pipeline/entry_vent_parent = entry_vent.parents[1] + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in entry_vent_parent.other_atmosmch) + vents += temp_vent + if(!vents.len) + entry_vent = null + in_vent = FALSE + return + exit_vent = pick(vents) + visible_message("[src] crawls into the ventilation ducts!") + + loc = exit_vent + var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) + addtimer(CALLBACK(src, .proc/exit_vents), travel_time) //come out at exit vent in 2 to 20 seconds + + + if(world.time > min_next_vent && !entry_vent && !in_vent && prob(GREMLIN_VENT_CHANCE)) //small chance to go into a vent + for(var/obj/machinery/atmospherics/components/unary/vent_pump/v in view(7,src)) + if(!v.welded) + entry_vent = v + in_vent = TRUE + walk_to(src, entry_vent) + break + if(!target) + time_chasing_target = 0 + else + if(++time_chasing_target > max_time_chasing_target) + LoseTarget() + time_chasing_target = 0 + . = ..() + +/mob/living/simple_animal/hostile/gremlin/EscapeConfinement() + if(istype(loc, /obj) && CanAttack(loc)) //If we're inside a machine, screw with it + var/obj/M = loc + tamper(M) + + return ..() + +/mob/living/simple_animal/hostile/gremlin/proc/exit_vents() + if(!exit_vent || exit_vent.welded) + loc = entry_vent + entry_vent = null + return + loc = exit_vent.loc + entry_vent = null + exit_vent = null + in_vent = FALSE + var/area/new_area = get_area(loc) + message_admins("[src] came out at [new_area][ADMIN_JMP(loc)]!") + if(new_area) + new_area.Entered(src) + visible_message("[src] climbs out of the ventilation ducts!") + min_next_vent = world.time + 900 //90 seconds between ventcrawls + +//This allows player-controlled gremlins to tamper with machinery +/mob/living/simple_animal/hostile/gremlin/UnarmedAttack(var/atom/A) + if(istype(A, /obj/machinery) || istype(A, /obj/structure)) + tamper(A) + if(istype(target, /obj/item/reagent_containers/food)) //eat food + visible_message("[src] hungrily devours [target]!", "You hungrily devour [target]!") + playsound(src, 'sound/items/eatfood.ogg', 50, 1) + qdel(target) + LoseTarget() + next_eat = world.time + rand(700, 3000) //anywhere from 70 seconds to 5 minutes until the gremlin is hungry again + + return ..() + +/mob/living/simple_animal/hostile/gremlin/IsAdvancedToolUser() + return 1 + +/mob/living/simple_animal/hostile/gremlin/proc/divide() + //Health is halved and then reduced by 2. A new gremlin is spawned with the same health as the parent + //Need to have at least 6 health for this, otherwise resulting health would be less than 1 + if(health < 7.5) + return + + visible_message("\The [src] splits into two!") + var/mob/living/simple_animal/hostile/gremlin/G = new /mob/living/simple_animal/hostile/gremlin(get_turf(src)) + + if(mind) + mind.transfer_to(G) + + health = round(health * 0.5) - 2 + maxHealth = health + resize *= 0.9 + + G.health = health + G.maxHealth = maxHealth + +/mob/living/simple_animal/hostile/gremlin/traitor + health = 85 + maxHealth = 85 + gold_core_spawnable = 0 diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin_act.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin_act.dm new file mode 100644 index 000000000..ff0eb13dc --- /dev/null +++ b/code/modules/mob/living/simple_animal/gremlin/gremlin_act.dm @@ -0,0 +1,214 @@ +/obj/proc/npc_tamper_act(mob/living/L) + return NPC_TAMPER_ACT_FORGET + +/obj/machinery/atmospherics/components/binary/passive_gate/npc_tamper_act(mob/living/L) + if(prob(50)) //Turn on/off + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(L)]", INVESTIGATE_ATMOS) + else //Change pressure + target_pressure = rand(0, MAX_OUTPUT_PRESSURE) + investigate_log("was set to [target_pressure] kPa by [key_name(L)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/pump/npc_tamper_act(mob/living/L) + if(prob(50)) //Turn on/off + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(L)]", INVESTIGATE_ATMOS) + else //Change pressure + target_pressure = rand(0, MAX_OUTPUT_PRESSURE) + investigate_log("was set to [target_pressure] kPa by [key_name(L)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/volume_pump/npc_tamper_act(mob/living/L) + if(prob(50)) //Turn on/off + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(L)]", INVESTIGATE_ATMOS) + else //Change pressure + transfer_rate = rand(0, MAX_TRANSFER_RATE) + investigate_log("was set to [transfer_rate] L/s by [key_name(L)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/valve/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/space_heater/npc_tamper_act(mob/living/L) + var/list/choose_modes = list("standby", "heat", "cool") + if(prob(50)) + choose_modes -= mode + mode = pick(choose_modes) + else + on = !on + update_icon() + +/obj/machinery/shield_gen/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/firealarm/npc_tamper_act(mob/living/L) + alarm() + +/obj/machinery/airalarm/npc_tamper_act(mob/living/L) + if(panel_open) + wires.npc_tamper(L) + else + panel_open = !panel_open + +/obj/machinery/ignition_switch/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/flasher_button/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/crema_switch/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/camera/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/atmospherics/components/unary/cryo_cell/npc_tamper_act(mob/living/L) + if(prob(50)) + if(beaker) + beaker.forceMove(loc) + beaker = null + else + if(occupant) + if(state_open) + if (close_machine() == usr) + on = TRUE + else + open_machine() + +/obj/machinery/door_control/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/door/airlock/npc_tamper_act(mob/living/L) + //Open the firelocks as well, otherwise they block the way for our gremlin which isn't fun + for(var/obj/machinery/door/firedoor/F in get_turf(src)) + if(F.density) + F.npc_tamper_act(L) + + if(prob(40)) //40% - mess with wires + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + else //60% - just open it + open() + +/obj/machinery/gibber/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/light_switch/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/turretid/npc_tamper_act(mob/living/L) + enabled = rand(0, 1) + lethal = rand(0, 1) + updateTurrets() + +/obj/machinery/vending/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/shower/npc_tamper_act(mob/living/L) + attack_hand(L) + + +/obj/machinery/deepfryer/npc_tamper_act(mob/living/L) + //Deepfry a random nearby item + var/list/pickable_items = list() + + for(var/obj/item/I in range(1, L)) + pickable_items.Add(I) + + if(!pickable_items.len) + return + + var/obj/item/I = pick(pickable_items) + + attackby(I, L) //shove the item in, even if it can't be deepfried normally + +/obj/machinery/power/apc/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/power/rad_collector/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/power/emitter/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/particle_accelerator/control_box/npc_tamper_act(mob/living/L) + if(!panel_open) + panel_open = !panel_open + if(wires) + wires.npc_tamper(L) + +/obj/machinery/computer/communications/npc_tamper_act(mob/living/user) + if(!authenticated) + if(prob(20)) //20% chance to log in + authenticated = TRUE + + else //Already logged in + if(prob(50)) //50% chance to log off + authenticated = FALSE + else if(istype(user, /mob/living/simple_animal/hostile/gremlin)) //make a hilarious public message + var/mob/living/simple_animal/hostile/gremlin/G = user + var/result = G.generate_markov_chain() + + if(result) + if(prob(85)) + SScommunications.make_announcement(G, FALSE, result) + var/turf/T = get_turf(G) + log_say("[key_name(usr)] ([ADMIN_JMP(T)]) has made a captain announcement: [result]") + message_admins("[key_name_admin(G)] has made a captain announcement.", 1) + else + if(SSshuttle.emergency.mode == SHUTTLE_IDLE) + SSshuttle.requestEvac(G, result) + else if(SSshuttle.emergency.mode == SHUTTLE_ESCAPE) + SSshuttle.cancelEvac(G) + +/obj/machinery/button/door/npc_tamper_act(mob/living/L) + attack_hand(L) + +/obj/machinery/sleeper/npc_tamper_act(mob/living/L) + if(prob(75)) + inject_chem(pick(available_chems)) + else + if(state_open) + close_machine() + else + open_machine() + +/obj/machinery/power/smes/npc_tamper_act(mob/living/L) + if(prob(50)) //mess with input + input_level = rand(0, input_level_max) + else //mess with output + output_level = rand(0, output_level_max) + +/obj/machinery/syndicatebomb/npc_tamper_act(mob/living/L) //suicide bomber gremlins + if(!open_panel) + open_panel = !open_panel + if(wires) + wires.npc_tamper(L) + +/obj/machinery/computer/bank_machine/npc_tamper_act(mob/living/L) + siphoning = !siphoning + +/obj/machinery/computer/slot_machine/npc_tamper_act(mob/living/L) + spin(L) + +/obj/structure/sink/npc_tamper_act(mob/living/L) + if(istype(L, /mob/living/simple_animal/hostile/gremlin)) + visible_message("\The [L] climbs into \the [src] and turns the faucet on!") + + var/mob/living/simple_animal/hostile/gremlin/G = L + G.divide() + + return NPC_TAMPER_ACT_NOMSG diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin_event.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin_event.dm new file mode 100644 index 000000000..af0fd12de --- /dev/null +++ b/code/modules/mob/living/simple_animal/gremlin/gremlin_event.dm @@ -0,0 +1,44 @@ +/datum/round_event_control/gremlin + name = "Spawn Gremlins" + typepath = /datum/round_event/gremlin + weight = 15 + max_occurrences = 2 + earliest_start = 20 MINUTES + min_players = 5 + + + +/datum/round_event/gremlin + var/static/list/acceptable_spawns = list("xeno_spawn", "generic event spawn", "blobstart", "Assistant") + +/datum/round_event/gremlin/announce() + priority_announce("Bioscans indicate that some gremlins entered through the vents. Deal with them!", "Gremlin Alert", 'sound/ai/beep.ogg') + +/datum/round_event/gremlin/start() + + var/list/spawn_locs = list() + + for(var/obj/effect/landmark/L in GLOB.landmarks_list) + if(isturf(L.loc) && !isspaceturf(L.loc)) + if(L.name in acceptable_spawns) + spawn_locs += L.loc + if(!spawn_locs.len) //If we can't find any gremlin spawns, try the xeno spawns + for(var/obj/effect/landmark/L in GLOB.landmarks_list) + if(isturf(L.loc)) + switch(L.name) + if("Assistant") + spawn_locs += L.loc + if(!spawn_locs.len) //If we can't find THAT, then just give up and cry + return MAP_ERROR + + var/gremlins_to_spawn = rand(2,5) + var/list/gremlin_areas = list() + for(var/i = 0, i <= gremlins_to_spawn, i++) + var/spawnat = pick(spawn_locs) + spawn_locs -= spawnat + gremlin_areas += get_area(spawnat) + new /mob/living/simple_animal/hostile/gremlin(spawnat) + var/grems = gremlin_areas.Join(", ") + message_admins("Gremlins have been spawned at the areas: [grems]") + log_game("Gremlins have been spawned at the areas: [grems]") + return SUCCESSFUL_SPAWN diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index a8fa8a147..39072d5b4 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -197,7 +197,7 @@ var/static_power_used = 0 var/brightness = 8 // luminosity when on, also used in power calculation var/bulb_power = 1 // basically the alpha of the emitted light source - var/bulb_colour = "#FFFFFF" // befault colour of the light. + var/bulb_colour = "#ffefda" // befault colour of the light. var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN var/flickering = FALSE var/light_type = /obj/item/light/tube // the type of light item @@ -212,13 +212,13 @@ var/nightshift_enabled = FALSE //Currently in night shift mode? var/nightshift_allowed = TRUE //Set to FALSE to never let this light get switched to night mode. - var/nightshift_brightness = 8 + var/nightshift_brightness = 7 var/nightshift_light_power = 0.45 - var/nightshift_light_color = "#FFDDCC" + var/nightshift_light_color = "#dafcff" var/emergency_mode = FALSE // if true, the light is in emergency mode var/no_emergency = FALSE // if true, this light cannot ever have an emergency mode - var/bulb_emergency_brightness_mul = 0.25 // multiplier for this light's base brightness in emergency power mode + var/bulb_emergency_brightness_mul = 0.6 // multiplier for this light's base brightness in emergency power mode var/bulb_emergency_colour = "#FF3232" // determines the colour of the light while it's in emergency mode var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 4fefc0fd1..8547e5117 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -36,6 +36,7 @@ All effects don't start immediately, but rather get worse over time; the rate is */ /datum/reagent/consumable/ethanol/on_mob_life(mob/living/carbon/C) + C.adjustPainLoss(-0.25*REM, 0) //alchol dulls pain if(C.drunkenness < volume * boozepwr * ALCOHOL_THRESHOLD_MODIFIER) var/booze_power = boozepwr if(HAS_TRAIT(C, TRAIT_ALCOHOL_TOLERANCE)) //we're an accomplished drinker diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index de4a4b684..2cb562cff 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -1001,3 +1001,5 @@ glass_desc = "A Summer time drink that can be frozen and eaten or Drinked from a glass!" glass_name = "Orange Creamsicle" hydration = 4 + + diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 6272d3773..f6c1b89c3 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -391,6 +391,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) /datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C) C.hal_screwyhud = SCREWYHUD_HEALTHY C.adjustBruteLoss(-0.25*REM, 0) + C.adjustPainLoss(-1*REM, 0) C.adjustFireLoss(-0.25*REM, 0) C.adjustStaminaLoss(-0.5*REM, 0) ..() @@ -698,7 +699,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) /datum/reagent/medicine/morphine name = "Morphine" - description = "A painkiller that allows the patient to move at full speed even in bulky objects. Causes drowsiness and eventually unconsciousness in high doses. Overdose will cause a variety of effects, ranging from minor to lethal." + description = "A painkiller. Causes drowsiness and eventually unconsciousness in high doses. Overdose will cause a variety of effects, ranging from minor to lethal." reagent_state = LIQUID color = "#A9FBFB" metabolization_rate = 0.5 * REAGENTS_METABOLISM @@ -706,23 +707,8 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) addiction_threshold = 25 pH = 8.96 -/datum/reagent/medicine/morphine/on_mob_metabolize(mob/living/L) - ..() - L.ignore_slowdown(type) - -/datum/reagent/medicine/morphine/on_mob_end_metabolize(mob/living/L) - L.unignore_slowdown(type) - ..() - /datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M) - switch(current_cycle) - if(11) - to_chat(M, "You start to feel tired..." ) - if(12 to 24) - M.drowsyness += 1 - if(24 to INFINITY) - M.Sleeping(40, 0) - . = 1 + M.adjustPainLoss(-3*REM, 0)// very good pain killer. ..() /datum/reagent/medicine/morphine/overdose_process(mob/living/M) @@ -1022,6 +1008,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) /datum/reagent/medicine/bicaridine/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-2*REM, 0) + M.adjustPainLoss(-1*REM, 0) //stabilize pain at threshold. and bring it down faster if above. ..() . = 1 diff --git a/code/modules/spells/spell_types/adminbussed.dm b/code/modules/spells/spell_types/adminbussed.dm index 24f1be236..335066d3a 100644 --- a/code/modules/spells/spell_types/adminbussed.dm +++ b/code/modules/spells/spell_types/adminbussed.dm @@ -158,10 +158,10 @@ var/altered_height altered_height = input(user, "Choose your desired sprite size:\n([MIN_BODYSIZE]-400%)", "Height Alteration") as num|null if(altered_height) - H.size_multiplier = (max(min( round(text2num(altered_height)),400),MIN_BODYSIZE))/100 + H.size_multiplier = (max(min( round(text2num(altered_height)),1000),MIN_BODYSIZE))/100 playsound(user.loc, pshoom_or_beepboopblorpzingshadashwoosh, 40, 1) do_sparks(5, FALSE, user.loc) H.visible_message("[pick("[H] shifts in size!", "[H] alters in height!", "[H] reshapes into a new stature!")]") else - return \ No newline at end of file + return diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 061676899..7f3b477bc 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -31,6 +31,7 @@ var/burnstate = 0 var/brute_dam = 0 var/burn_dam = 0 + var/pain_dam = 0 var/stamina_dam = 0 var/max_stamina_damage = 0 var/max_damage = 0 @@ -193,6 +194,9 @@ brute_dam += brute burn_dam += burn + if(status == BODYPART_ORGANIC) //pain is only applied to organic organs, because nerves. + pain_dam += (brute+burn)*1.2 //add the total damage applied to the limb as pain damage, build pain quicker, because sudden pain is more.. painful. + //We've dealt the physical damages, if there's room lets apply the stamina damage. var/current_damage = get_damage(TRUE) //This time around, count stamina loss too. var/available_damage = max_damage - current_damage diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index da9ec462a..a71cc199c 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -172,9 +172,14 @@ // lipstick if(lip_style) - var/image/lips_overlay = image('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER, SOUTH) - lips_overlay.color = lip_color - . += lips_overlay + if (species_id == "human") + var/image/lips_overlay = image('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER, SOUTH) + lips_overlay.color = lip_color + . += lips_overlay + else //for animal species, because they have slightly bigger heads. + var/image/lips_overlay = image('icons/mob/human_face.dmi', "lips_[lip_style]_mam", -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) diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 392244fb4..e6236b659 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -1,8 +1,8 @@ //make incision /datum/surgery_step/incise name = "make incision" - implements = list(TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 75, /obj/item/kitchen/knife = 65, - /obj/item/shard = 45, /obj/item = 30) // 30% success with any sharp item. + implements = list(TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 85, /obj/item/kitchen/knife = 75, + /obj/item/shard = 65, /obj/item = 40) // 40% success with any sharp item. (Hyper change, raised chances with basic items, because if user is awake it has a higher chance to fail) time = 16 /datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 71f813a5b..671ec03b6 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -9,6 +9,7 @@ var/list/chems_needed = list() //list of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob. var/require_all_chems = TRUE //any on the list or all on the list? var/silicons_obey_prob = FALSE + var/pain_failure = 10 //how painful it is if you fail. /datum/surgery_step/proc/try_op(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) var/success = FALSE @@ -62,14 +63,21 @@ var/prob_chance = 100 if(implement_type) //this means it isn't a require hand or any item step. prob_chance = implements[implement_type] + prob_chance *= surgery.get_propability_multiplier() + //if human and awake + if (ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.stat == 0) //victorian surgery + prob_chance = prob_chance *0.65 //deminish your chances, they are awake! + if((prob(prob_chance) || (iscyborg(user) && !silicons_obey_prob)) && chem_check(target) && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) advance = TRUE else if(failure(user, target, target_zone, tool, surgery)) - advance = TRUE + advance = FALSE if(advance && !repeatable) surgery.status++ if(surgery.status > surgery.steps.len) @@ -83,15 +91,18 @@ "[user] begins to perform surgery on [target].") /datum/surgery_step/proc/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) - display_results(user, target, "You succeed.", - "[user] succeeds!", + display_results(user, target, "You complete the procedure.", + "[user] completes the procedure!", "[user] finishes.") return TRUE /datum/surgery_step/proc/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) - display_results(user, target, "You screw up!", - "[user] screws up!", + display_results(user, target, "You failed the procedure!", + "[user] failed the procedure!", "[user] finishes.", TRUE) //By default the patient will notice if the wrong thing has been cut + if (ishuman(target)) //pain on humans for messing up. + var/obj/item/bodypart/L = target.get_bodypart(target_zone) + L.pain_dam += pain_failure return FALSE /datum/surgery_step/proc/tool_check(mob/user, obj/item/tool) diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm index e8e243c7f..5b87fd02d 100644 --- a/code/modules/vending/megaseed.dm +++ b/code/modules/vending/megaseed.dm @@ -46,7 +46,8 @@ /obj/item/seeds/tower = 3, /obj/item/seeds/watermelon = 3, /obj/item/seeds/wheat = 3, - /obj/item/seeds/whitebeet = 3) + /obj/item/seeds/whitebeet = 3, + /obj/item/seeds/kalyna = 3) //Hyperstation addition contraband=list(/obj/item/seeds/amanita = 2, /obj/item/seeds/glowshroom = 2, diff --git a/hyperstation/code/datums/elements/spooky.dm b/hyperstation/code/datums/elements/spooky.dm new file mode 100644 index 000000000..793f0f555 --- /dev/null +++ b/hyperstation/code/datums/elements/spooky.dm @@ -0,0 +1,38 @@ +//A spooky element, this can be added to pretty much anything, take your pick. It is effectively harmless however. +//target.AddElement(/datum/element/spooky) for example. + +/datum/element/spooky + element_flags = ELEMENT_DETACH + var/datum/C + +/datum/element/spooky/Attach(datum/target) + . = ..() + /* + if(!iscarbon(target)) + return ELEMENT_INCOMPATIBLE //keeping this uncommented would make it so it only works with carbons, which is not really needed unless one adds procs that require the user to be a carbon in the future. + */ + C = target + START_PROCESSING(SSobj, src) + +/datum/element/spooky/Detach(datum/source, force) + . = ..() + STOP_PROCESSING(SSobj, src) + +/datum/element/spooky/process() + var/spookythings = rand(120) + switch(spookythings) + if(119 to 120) //Plays a spooky ambient sound as long as one hasn't been played in a while. + var/sound = pick(SPOOKY) + for(var/mob/living/carbon/L in view(6, C)) + if(L.client && !L.client.played) + SEND_SOUND(L, sound(sound, repeat = 0, wait = 0, volume = 35, channel = CHANNEL_AMBIENCE)) + L.client.played = TRUE + addtimer(CALLBACK(L.client, /client/proc/ResetAmbiencePlayed), 600) + if(65 to 70) //Lights flicker. + var/obj/machinery/light/L = locate(/obj/machinery/light) in view(4, C) + if(L) + L.flicker() + if(1 to 5) //Very small chance to cause an unburnt tile to change to its burnt sprite. + var/turf/open/floor/T = locate(/turf/open/floor) in view(4, C) + if(T && prob(5) && !isplatingturf(T) && !istype(T, /turf/open/floor/engine/cult) && !T.burnt) + T.burn_tile() diff --git a/hyperstation/code/mobs/crystal.dm b/hyperstation/code/mobs/crystal.dm index a949237a0..1a375672d 100644 --- a/hyperstation/code/mobs/crystal.dm +++ b/hyperstation/code/mobs/crystal.dm @@ -7,7 +7,8 @@ icon_state = "crystal" icon_living = "crystal" icon_dead = "crystal" - mob_biotypes = MOB_BEAST + gender = NEUTER + mob_biotypes = MOB_INORGANIC speak_chance = 0 turns_per_move = 10 response_help = "touches" @@ -29,6 +30,7 @@ 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) minbodytemp = 0 maxbodytemp = 3500 + blood_volume = 0 //It's a fucking rock faction = list("carp") movement_type = FLYING pressure_resistance = 500 diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index b183c3181..ff7725ddb 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -351,17 +351,14 @@ obj/screen/arousal/proc/kiss() /mob/living/carbon/human/proc/kisstarget(mob/living/L) src << browse(null, "window=arousal") //closes the arousal window, if its open, mainly to stop spam - if(isliving(L)) //is your target living? Living people can resist your advances if they want to via moving. - if(iscarbon(L)) - src.visible_message("[src] is about to kiss [L]!", \ - "You're attempting to kiss [L]!", \ - "You're attempting to kiss with something!") - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "kissed", /datum/mood_event/kiss) //how cute, affection is nice. - //Well done you kissed it/them! + + L.adjustPainLoss(-5, 0) //mommas kisses always stop alittle pain.. + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "kissed", /datum/mood_event/kiss) //how cute, affection is nice. src.visible_message("[src] kisses [L]!", \ "You kiss [L]!", \ "You kiss something!") + /mob/living/carbon/human/proc/climaxalone() //we dont need hands to climax alone, its hands free! var/obj/item/organ/genital/picked_organ diff --git a/hyperstation/code/modules/busy_space/organisations.dm b/hyperstation/code/modules/busy_space/organisations.dm index 935bba77f..5109a9dd6 100644 --- a/hyperstation/code/modules/busy_space/organisations.dm +++ b/hyperstation/code/modules/busy_space/organisations.dm @@ -326,7 +326,7 @@ Most stable colonies, stations, civilizations, planets, or anywhere on the spectrum is often backed by the firm hand of Kinaris- underneath one rule: \ Be Radiant." history = "" - work = "Weave-research, conversion, and colony management" + work = "Weave-research, conversion, uplifting, and colony management" headquarters = "Holy City of Radiant Hearth, Myril" motto = "Be Radiant" @@ -361,6 +361,7 @@ "Salis Major orbit", "a megastructure at Kappa Andromedae", "Radiant Hearth", + "a dockyard at Procella, Tremora", "sector command at Vivida Laetus", "a dissonant tear at RR Lyra", "a city-station at Kappa Andromedae", @@ -384,7 +385,7 @@ Dzar works side-by-side with Kinaris, where Radiant Technology is their reward in return for high-grade metals." history = "" work = "metalsmithing, mining, and material research" - headquarters = "the hollow-world of Salis Major" + headquarters = "the hollow-world of Salis Primary A-4" motto = "in virtue we trust" ship_prefixes = list("DZ" = "hauling", "DZ" = "cargo", "DZA" = "asset security") @@ -414,6 +415,7 @@ "a ringworld at Incandesce Seconda", "Salis Major orbit", "a megastructure at Kappa Andromedae", + "a dockyard at Procella, Tremora", "the rings of Layenia", "Dzar metalworking at Loto", "a metalworking site at Salis Major", @@ -449,9 +451,61 @@ concerns peacefully through vigilance." history = "" work = "contracted policework" - headquarters = "Incandesce Seconda" + headquarters = "the ringworld of Incandesce Primara" motto = "secure the people, save the future" ship_prefixes = list("ZCO" = "transportation", "ZC" = "patrol") - autogenerate_destination_names = TRUE \ No newline at end of file + autogenerate_destination_names = TRUE + +//Thanks Hellcelot for this one! +/datum/lore/organization/titanceramics + name = "Titan Piezoelectrics and Ceramics" + short_name = "Titan Ceramics" + desc = "Titan Ceramics was the primary source of prominent electrical power on Tremora for it's lifespan, with extravagent materials and unique ceramic mixes that supported \ + incredibly efficient production of energy in bulk. Not only did they provide energy for a once-struggling civilization, they brought upon artistic desire and talent for those \ + who would seek their ceramics. Value in energy is equal to value in art in their eyes, with only the finest materials and expertly-tested conditions to meet the quality of \ + their work. Despite the overwhelming size difference of the housing species, value is still sought from both sides, resulting in multi-size accomodations for their ceramics. \ + When cheap yet efficient power is required without the Weave, Titan Ceramics is there." + history = "" + work = "Production of power-efficient piezoelectric ceramics and craft" + headquarters = "The Storm Capitol of Procella, Tremora" + motto = "" + + ship_prefixes = list("TC" = "transportation", "TCF" = "freight", "TCR" = "research") + ship_names = list( + "Noki", + "Moyai", + "Megalodon", + "Mako", + "Minnow", + "Tsunami", + "North Star", + "Tempest", + "Eye of the Storm", + "Aquarius", + "Marinia", + "Thalassus", + "Stormwind" + ) + + autogenerate_destination_names = TRUE + +/datum/lore/organization/syntech + name = "Synergized Technology" + short_name = "SynTech" + desc = "Synergized Technology- commonly known as SynTech- is a company which leads the complex solutions in any galaxy's biggest problem: accomodating for the size of life. \ + As civilization grew more welcoming to different ideals and lifestyles, it became more difficult and disasterous to deal with the extreme size difference from one alien \ + species to the other. Not only did this spark an incredible amount of regulations from AzureGov, but Kinaris's interest was piqued to keep peace over all; and that included \ + accomodating for any species, whether or not they stood above a mountain, or below an ant hill. The high demand of multi-size rights and technology was driven into SynTech's \ + hands, where they would provide and assist in regulating consistent and meaningful products to ease interaction from one to the next. Not only do they supply incredibly \ + advanced, highly-regulated technology, they also help in consistent planning and regulation in most cities to keep traffic from most differently-sized species without \ + havoc. Without SynTech, galaxies would look like a fairly bland place, where one size rules above all." + history = "" + work = "Production and selling of size-altering technology, as well as accomodating the planning of infrastructure to support many sizes." + headquarters = "The City-Planet of Jovias, Nembus" + motto = "Modern solutions, big and small" + + ship_prefixes = list("SYT" = "transportation", "SYTF" = "freight", "XSYT" = "scaler", "SYT-I" = "constructor") + + autogenerate_destination_names = TRUE diff --git a/hyperstation/code/modules/client/loadout/gloves.dm b/hyperstation/code/modules/client/loadout/gloves.dm new file mode 100644 index 000000000..ad12c3e3e --- /dev/null +++ b/hyperstation/code/modules/client/loadout/gloves.dm @@ -0,0 +1,11 @@ +/datum/gear/syntech/ring + name = "Normalizer Ring" + category = SLOT_GLOVES + path = /obj/item/clothing/gloves/ring/syntech + cost = 6 + +/datum/gear/syntech/band + name = "Normalizer Band" + category = SLOT_GLOVES + path = /obj/item/clothing/gloves/ring/syntech/band + cost = 6 diff --git a/hyperstation/code/modules/client/loadout/neck.dm b/hyperstation/code/modules/client/loadout/neck.dm new file mode 100644 index 000000000..a21c87434 --- /dev/null +++ b/hyperstation/code/modules/client/loadout/neck.dm @@ -0,0 +1,17 @@ +/datum/gear/syntech/pendant + name = "Normalizer Pendant" + category = SLOT_NECK + path = /obj/item/clothing/neck/syntech + cost = 6 + +/datum/gear/syntech/choker + name = "Normalizer Choker" + category = SLOT_NECK + path = /obj/item/clothing/neck/syntech/choker + cost = 6 + +/datum/gear/syntech/collar + name = "Normalizer Collar" + category = SLOT_NECK + path = /obj/item/clothing/neck/syntech/collar + cost = 6 diff --git a/hyperstation/code/modules/clothing/sizeaccessories.dm b/hyperstation/code/modules/clothing/sizeaccessories.dm new file mode 100644 index 000000000..e891672c2 --- /dev/null +++ b/hyperstation/code/modules/clothing/sizeaccessories.dm @@ -0,0 +1,115 @@ +//Clothing vars and procs +/obj/item/clothing + var/normalize_size = RESIZE_NORMAL //This number is used as the "normal" height people will be given when wearing one of these accessories + var/natural_size = null //The value of the wearer's body_size var in prefs. Unused for now. + var/recorded_size = null //the user's height prior to equipping + +//For applying a normalization +/obj/item/clothing/proc/normalize_mob_size(mob/living/carbon/human/H) + if(H.normalized) //First we make a check to see if they're already normalized, from wearing another article of SynTech jewelry + to_chat(H, "This accessory buzzes, being overwritten by another.") + playsound(H, 'sound/machines/buzz-sigh.ogg', 50, 1) + return + recorded_size = H.get_effective_size() //If not, grab their current size + playsound(H, 'sound/effects/magic.ogg', 50, 1) + flash_lighting_fx(3, 3, LIGHT_COLOR_PURPLE) + H.visible_message("A flash of purple light engulfs [H], before they change to normal!","You feel warm for a moment, before everything scales to your size...") + H.resize(normalize_size) //Then apply the size + H.normalized = TRUE //And set normalization + +//For removing a normalization, and reverting back to normal +/obj/item/clothing/proc/denormalize_mob_size(mob/living/carbon/human/H) + if(H.normalized) //sanity check + playsound(H,'sound/weapons/emitter2.ogg', 50, 1) + flash_lighting_fx(3, 3, LIGHT_COLOR_YELLOW) + H.visible_message("Golden light engulfs [H], and they shoot back to their default height!","Energy rushes through your body, and you return to normal.") + H.resize(recorded_size) + H.normalized = FALSE + + +//For storing normalization on mobs +/mob/living + var/normalized = FALSE + //normalized is a check for instances where more than one accessory of jewelry is worn. For all intensive purposes, only the first worn accessory stores the user's size. + //Anything else is just extra. + +//Clothing below. Code could be compressed more, but until I make jewelry slots, this will do. -Dahl + +//GLOVE SLOT ITEMS... +//SynTech ring +/obj/item/clothing/gloves/ring/syntech + name = "normalizer ring" + desc = "An expensive, shimmering SynTech ring gilded with golden Kinaris markings. It will 'normalize' the size of the user to a specified height approved for work-conditions, as long as it is equipped. The artificial violet gem inside twinkles ominously." + icon = 'hyperstation/icons/obj/clothing/sizeaccessories.dmi' + icon_state = "ring" + item_state = "sring" //No use in a unique sprite since it's just one pixel + w_class = WEIGHT_CLASS_TINY + body_parts_covered = 0 + transfer_prints = TRUE + strip_delay = 40 + //These are already defined under the parent ring, but I wanna leave em here for reference purposes + +//For glove slots +/obj/item/clothing/gloves/ring/syntech/equipped(mob/living/user, slot) + if(ishuman(user)) + var/mob/living/carbon/human/human_target = user + if(slot == SLOT_GLOVES) + + if(human_target.custom_body_size) + normalize_mob_size(human_target) + +/obj/item/clothing/gloves/ring/syntech/dropped(mob/living/user, slot) + if(ishuman(user)) + var/mob/living/carbon/human/human_target = user + + if(human_target.normalized) + denormalize_mob_size(human_target) + + + +//SynTech Wristband +/obj/item/clothing/gloves/ring/syntech/band + name = "normalizer wristband" + desc = "An expensive technological wristband cast in SynTech purples with shimmering Kinaris golds. It will 'normalize' the size of the user to a specified height for approved work-conditions, as long as it is equipped. There is a small screen buzzing with information." + icon_state = "wristband" + item_state = "syntechband" + + +//NECK SLOT ITEMS... +//Syntech Pendant +/obj/item/clothing/neck/syntech + name = "normalizer pendant" + desc = "A vibrant violet jewel cast in silvery-gold metals, sporting the elegance of Kinaris with SynTech prowess. It will 'normalize' the size of the user to a specified height for approved work-conditions, as long as it is equipped. The artificial violet gem inside twinkles ominously." + icon = 'hyperstation/icons/obj/clothing/sizeaccessories.dmi' + icon_state = "pendant" + item_state = "pendant" + +//For neck items +/obj/item/clothing/neck/syntech/equipped(mob/living/user, slot) + if(ishuman(user)) + var/mob/living/carbon/human/human_target = user + if(slot == SLOT_NECK) + + if(human_target.custom_body_size) + normalize_mob_size(human_target) + +/obj/item/clothing/neck/syntech/dropped(mob/living/user, slot) + if(ishuman(user)) + var/mob/living/carbon/human/human_target = user + + if(human_target.normalized) + denormalize_mob_size(human_target) + +//Syntech Choker +/obj/item/clothing/neck/syntech/choker + name = "normalizer choker" + desc = "A sleek, tight-fitting choker embezzled with silver to gold, adorned with vibrant purple studs; combined technology of Kinaris and SynTech. It will 'normalize' the size of the user to a specified height for approved work-conditions, as long as it is equipped. There is a small screen buzzing with information." + icon_state = "choker" + item_state = "collar" + +//Syntech Collar +/obj/item/clothing/neck/syntech/collar + name = "normalizer collar" + desc = "A cute pet collar, technologically designed with vibrant purples and smooth silvers. There is a small gem bordered by gold at the front, reading 'SYNTECH' engraved within the metal. It will 'normalize' the size of the user to a specified height for approved work-conditions, as long as it is equipped. The artificial violet gem inside twinkles ominously." + icon_state = "collar" + item_state = "collar" diff --git a/hyperstation/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/hyperstation/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 05fedabf7..83e49f04f 100644 --- a/hyperstation/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/hyperstation/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -3,3 +3,9 @@ id = /datum/reagent/consumable/pilk results = list(/datum/reagent/consumable/pilk = 2) required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/space_cola = 1) + +/datum/chemical_reaction/javelin + name = "Javelin" + id = /datum/reagent/consumable/ethanol/javelin + results = list(/datum/reagent/consumable/ethanol/javelin = 5) + required_reagents = list(/datum/reagent/consumable/kalynajuice = 1, /datum/reagent/consumable/ethanol/whiskey = 2, /datum/reagent/consumable/ethanol/vodka = 2) diff --git a/hyperstation/code/modules/hydroponics/grown/kalyna.dm b/hyperstation/code/modules/hydroponics/grown/kalyna.dm new file mode 100644 index 000000000..55a681ab4 --- /dev/null +++ b/hyperstation/code/modules/hydroponics/grown/kalyna.dm @@ -0,0 +1,40 @@ +// Kalyna Berries +/obj/item/seeds/kalyna + name = "pack of kalyna berry seeds" + desc = "Seeds that grow into Kalyna plants. Take that Red Kalyna and rise it up." + icon = 'hyperstation/icons/obj/hydroponics/seeds.dmi' + icon_state = "seed-kalyna" + species = "kalyna" + plantname = "Kalyna Shrub Tree" + product = /obj/item/reagent_containers/food/snacks/grown/kalyna + lifespan = 20 + maturation = 5 + production = 5 + growthstages = 5 + yield = 4 + growing_icon = 'hyperstation/icons/obj/hydroponics/growing_fruits.dmi' + icon_grow = "kalyna-grow" + icon_dead = "kalyna-dead" + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) + +/obj/item/reagent_containers/food/snacks/grown/kalyna + seed = /obj/item/seeds/kalyna + name = "branch of kalyna" + desc = "Red berries, attached to a branch. Just looking at it makes you feel an aura of unity." + icon = 'hyperstation/icons/obj/hydroponics/harvest.dmi' + icon_state = "kalynaberries" + gender = PLURAL + filling_color = "#FF0000" + bitesize_mod = 2 + foodtype = FRUIT + juice_results = list(/datum/reagent/consumable/kalynajuice = 1) + tastes = list("sweet cranberries" = 1) + distill_reagent = /datum/reagent/consumable/ethanol/gin + +//For those of you wondering, yes, this is very much an addition in support of Ukraine. I decided to make these after a distant Ukranian relative of mine sent me Go_A's 'Kalyna' song. +//Our future as a free world could very well depend on the heroism of the people of glorious Ukraine. We owe our freedom to them. +//I know that this game should be for escapism, but there's only so much we should escape from. When people's lives are being upturned-- Or taken by a brutal invasive reigime, perhaps then it's when we should take a stand. +//And for those that oppose the freedom of the people of Ukraine, Russia, and Belarus; Prykhyl'nyk Putina, idy na khuy. And show some basic empathy for once, it's not that hard. +//Glory to Ukraine, Glory to the Heroes! +// - Arctaisia, Hyperstation developer and spriter, 23/04/2022 #StandWithUkraine diff --git a/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm b/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm index c10a97d10..f76d2ddf0 100644 --- a/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -67,6 +67,35 @@ SNOUTS icon = 'hyperstation/icons/mob/char_snouts.dmi' recommended_species = list("insect") +/datum/sprite_accessory/mam_snouts/easterndragon + name = "Eastern Dragon (Hyper)" + icon_state = "easterndw" + icon = 'hyperstation/icons/mob/char_snouts.dmi' + +/datum/sprite_accessory/mam_snouts/feasterndragon + name = "Eastern Dragon (Top) (Hyper)" + icon_state = "feasterndw" + icon = 'hyperstation/icons/mob/char_snouts.dmi' + +/datum/sprite_accessory/mam_snouts/easterndragonnowhiskers + name = "Eastern Dragon - No Whiskers (Hyper)" + icon_state = "easterndnw" + icon = 'hyperstation/icons/mob/char_snouts.dmi' + +/datum/sprite_accessory/mam_snouts/feasterndragonnowhiskers + name = "Eastern Dragon - No Whiskers (Top) (Hyper)" + icon_state = "feasterndnw" + icon = 'hyperstation/icons/mob/char_snouts.dmi' + +/datum/sprite_accessory/mam_snouts/fchemlight + name = "RadDog (Top) (Hyper)" + icon_state = "fchemlight" + icon = 'hyperstation/icons/mob/char_snouts.dmi' + +/datum/sprite_accessory/mam_snouts/chemlight + name = "RadDog (Hyper)" + icon_state = "chemlight" + icon = 'hyperstation/icons/mob/char_snouts.dmi' /* EARS @@ -109,6 +138,15 @@ EARS icon = 'hyperstation/icons/mob/char_ears.dmi' recommended_species = list("insect") +/datum/sprite_accessory/mam_ears/easterndragon + name = "Eastern Dragon (Hyper)" + icon_state = "easternd" + icon = 'hyperstation/icons/mob/char_ears.dmi' + +/datum/sprite_accessory/mam_ears/chemlight + name = "RadDog (Hyper)" + icon_state = "chemlight" + icon = 'hyperstation/icons/mob/char_ears.dmi' /* WINGS @@ -276,6 +314,26 @@ TAILS + ANIMATED TAILS icon_state = "swallowstriped" icon = 'hyperstation/icons/mob/char_tails.dmi' +/datum/sprite_accessory/mam_tails/easterndragon //Pulled base from Virgo, seriously love the server and love you guys, stay lovely. + name = "Eastern Dragon (Hyper)" + icon_state = "easternd" + icon = 'hyperstation/icons/mob/char_tails.dmi' + +/datum/sprite_accessory/mam_tails_animated/easterndragon + name = "Eastern Dragon (Hyper)" + icon_state = "easternd" + icon = 'hyperstation/icons/mob/char_tails.dmi' + +/datum/sprite_accessory/mam_tails/chemlight + name = "RadDog (Hyper)" + icon_state = "chemlight" + icon = 'hyperstation/icons/mob/char_tails.dmi' + +/datum/sprite_accessory/mam_tails_animated/chemlight + name = "RadDog (Hyper)" + icon_state = "chemlight" + icon = 'hyperstation/icons/mob/char_tails.dmi' + /* BODY MARKINGS @@ -335,6 +393,22 @@ from modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm: icon = 'hyperstation/icons/mob/char_markings.dmi' recommended_species = list("avian") +/datum/sprite_accessory/mam_body_markings/easterndragon + name = "Eastern Dragon (Hyper)" + icon_state = "easternd" + icon = 'hyperstation/icons/mob/char_markings.dmi' + +//doged was here +/datum/sprite_accessory/mam_body_markings/chemlight + name = "RadDog (Hyper)" + icon_state = "chemlight" + icon = 'hyperstation/icons/mob/char_markings.dmi' + +//racc do a code maybe it won't explode +/datum/sprite_accessory/mam_body_markings/raccalt + name = "RaccAlt (Hyper)" + icon_state = "raccalt" + icon = 'hyperstation/icons/mob/char_markings.dmi' /* TAUR BODIES @@ -355,7 +429,17 @@ from modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm: color_src = MATRIXED recommended_species = list("human", "lizard", "insect", "mammal", "xeno", "jelly", "slimeperson", "podweak", "avian", "aquatic") */ +/datum/sprite_accessory/taur/chemnaga //Chemlight experimental sprites for future spriting + name = "RadDog Naga (Hyper)" + icon_state = "chemnaga" + taur_mode = SNEK_TAURIC + ckeys_allowed = list("chemlight") +/datum/sprite_accessory/taur/chemlight + name = "RadDog Taur (Hyper)" + icon_state = "chemlight" + taur_mode = PAW_TAURIC + ckeys_allowed = list("chemlight") /* HAIRSTYLES @@ -389,4 +473,11 @@ from code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm: /datum/sprite_accessory/hair/sidehair name = "Side Hair (Hyper)" icon_state = "hair_tailhair2" - ckeys_allowed = list("quotefox") + +/datum/sprite_accessory/hair/hsglamour + name = "Glamour (Hyper)" + icon_state = "hair_glamourh" + +/datum/sprite_accessory/hair/emoh + name = "Emo (Hyper)" + icon_state = "hair_emoh" \ No newline at end of file diff --git a/hyperstation/code/modules/mob/living/carbon/carbon.dm b/hyperstation/code/modules/mob/living/carbon/carbon.dm new file mode 100644 index 000000000..27d4e3283 --- /dev/null +++ b/hyperstation/code/modules/mob/living/carbon/carbon.dm @@ -0,0 +1,122 @@ +/mob/living/carbon + var/total_pain = 0 + var/pain_effect = 0 + var/pain_cooldown = 0 //for defibs/surgry! + +//pain +/mob/living/carbon/adjustPainLoss(amount, updating_health = TRUE, forced = FALSE, affected_zone = BODY_ZONE_CHEST) + if(!forced && (status_flags & GODMODE)) + return FALSE + apply_damage(amount > 0 ? amount : amount, PAIN, affected_zone) + return amount + +/mob/living/carbon/handle_status_effects() + ..() + handle_pain() + +/mob/living/carbon/proc/handle_pain() + var/pain_amount = 0 + + pain_effect += 1 + + if (pain_cooldown) + pain_cooldown -= 1 + pain_effect = 0 //ignore pain for now, you got adrenaline running through your body. + + //build up pain in the system from all your limbs and natrually heal pain if its attached to a live body. + for(var/obj/item/bodypart/BP in bodyparts) + pain_amount += BP.pain_dam + + var/pain_target = (BP.brute_dam + BP.burn_dam)*0.8 + //natural healing of pain, capped at current damage * 0.8, if the pain is lower, slowly bring up the pain. this will let people "get used, to it." + if (BP.pain_dam > (pain_target)) + BP.pain_dam -= 1 //bring down to the pain_level. + else + BP.pain_dam += 1 //slowly bring pain back, from pain killers. + + //just make sure its zero'd + if (BP.pain_dam < 0) + BP.pain_dam = 0 + continue //dont need to do the rest, your fine. + + if (BP.pain_dam && pain_effect > 5 && (stat == 0)) + var pain_level = (round(BP.pain_dam / 10)) + switch(pain_level) //for every 10 points of damage minor -> major + if(1)//start at 10 just so it doesnt get annoying with micro damage + to_chat(src, "You feel minor pain in your [BP.name].") + if(2) + to_chat(src, "You feel pain in your [BP.name].") + if(3) + to_chat(src, "You feel severe pain in your [BP.name].") + if(4 to 99) + to_chat(src, "You feel overwhelming pain in your [BP.name].") + jitteriness += 2 + stuttering += 2 + + + total_pain = pain_amount + + //handle onscreen alert + if (pain_effect > 5) + switch(total_pain) + if(-100 to 25) + clear_alert("pain") + if(25 to 69) + throw_alert("pain", /obj/screen/alert/pain) + if(70 to 99) + throw_alert("pain", /obj/screen/alert/painmajor) + if(100 to 999) + throw_alert("pain", /obj/screen/alert/painshock) + + if (pain_effect > 5) + pain_effect = 0 //reset the timer 5 seconds. + if(stat == 0) //awake, not dead or asleep + //status effects for pain.. + var/mob/living/H = src + if (total_pain > 50 && total_pain < 80) + if(HAS_TRAIT(H, TRAIT_MASO)) //just because your into it doesnt give you a advantage.. + to_chat(src, "You love this pain, it excites you...") + H.adjustArousalLoss(6) + else + to_chat(src, "You cant handle the pain...") + if(prob(20)) + emote("scream") + do_jitter_animation() //basic shake. + stuttering += 3 //stutter words, your in pain bro. + + if (total_pain > 80) //your in trouble. fainting.. + if(HAS_TRAIT(H, TRAIT_MASO)) + to_chat(src, "You love this intense pain, it excites you...") + H.adjustArousalLoss(12) + else + to_chat(src, "You cant handle the intense pain...") + if(prob(20)) //chance of fainting.. + visible_message("[src] collapses!") + Unconscious(100) + jitteriness += 3 //shake + stuttering += 3 //stutter words + + //if they are asleep, this wont trigger. + if (total_pain > 110 && stat == 0) //taking 77 all damage at once from full health, will put you into shock and kill you. This cant be achived with chip damage (or fist fights), because youll die before you reach this pain level. + if(prob(50)) + emote("scream")//scream + to_chat(src, "You give into the pain...") + visible_message("[src] goes into neurogenic shock!") + Unconscious(200) + if (can_heartattack()) //check if they can + set_heartattack(1) //heart stopped! + + +//HS Pain heal +/mob/living/carbon/adjustPainLoss(amount, updating_health = TRUE, forced = FALSE) + if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) + return FALSE + if(!forced && (status_flags & GODMODE)) + return FALSE + + //all attached limbs get pain damage + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + BP.pain_dam += amount + + return amount \ No newline at end of file diff --git a/hyperstation/code/modules/power/reactor/fluffed.dm b/hyperstation/code/modules/power/reactor/fluffed.dm new file mode 100644 index 000000000..e3d69be5b --- /dev/null +++ b/hyperstation/code/modules/power/reactor/fluffed.dm @@ -0,0 +1,23 @@ +/* +This is a pre-destroyed nuclear reactor for the sake of mapping special fluff stuff. +Not actually a reactor, just uses the icon and irradiates the surrounding area a bit. +Nowhere else to really put this. +*/ + +/obj/structure/fluff/destroyed_nuclear_reactor + name = "Destroyed Nuclear Reactor" + desc = "What in the hell happened here?" + icon = 'hyperstation/icons/obj/machinery/rbmk.dmi' + icon_state = "reactor_slagged" + pixel_x = -32 + pixel_y = -32 + density = FALSE + anchored = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + light_color = LIGHT_COLOR_CYAN + dir = 8 //Less headache inducing :)) + +/obj/structure/fluff/destroyed_nuclear_reactor/Initialize() + . = ..() + set_light(3) + AddComponent(/datum/component/radioactive, 15000 , src) diff --git a/hyperstation/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/hyperstation/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm new file mode 100644 index 000000000..76805f825 --- /dev/null +++ b/hyperstation/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -0,0 +1,11 @@ +//Hope you're not a Russian T-90 +/datum/reagent/consumable/ethanol/javelin + name = "Javelin Cocktail" + boozepwr = 80 + color = "#F54F10" + quality = DRINK_FANTASTIC + taste_description = "explosive fireballs" + glass_icon_state = "javelin" + shot_glass_icon_state = "javelin_warhead" + glass_name = "Javelin Cocktail" + glass_desc = "A man-portable, delicious glass of justice." diff --git a/hyperstation/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/hyperstation/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 3656de158..3c088d34f 100644 --- a/hyperstation/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/hyperstation/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -21,3 +21,13 @@ if(holder.has_reagent(/datum/reagent/consumable/capsaicin)) holder.remove_reagent(/datum/reagent/consumable/capsaicin, 1) ..() + +/datum/reagent/consumable/kalynajuice + name = "Red Kalyna Juice" + description = "Juice from Kalyna plants." + color = "#E90501" // rgb: 233, 5, 1 + taste_description = "sweet cranberries" + glass_icon_state = "kalyna" + glass_name = "glass of red kalyna juice" + glass_desc = "A vibrantly red juice!" + hydration = 4 diff --git a/hyperstation/code/obj/SYSuit/main.dm b/hyperstation/code/obj/SYSuit/main.dm index a4047d81f..9e40cb449 100644 --- a/hyperstation/code/obj/SYSuit/main.dm +++ b/hyperstation/code/obj/SYSuit/main.dm @@ -6,7 +6,7 @@ //The suit itself /obj/item/clothing/under/syclothing - name = "SYTech Nanoweave suit" + name = "SynTech Nanoweave suit" desc = "A leading-grade suit developed by SYTech, with an internal dampening field to lessen accidents at micro scales. This one seems to be more skimpy and developed for bedroom-play, though." icon = 'hyperstation/icons/obj/clothing/uniforms.dmi' icon_state = "syclothing" @@ -61,7 +61,7 @@ //The cap /obj/item/clothing/head/sycap - name = "SYTech Nanoweave cap" + name = "SynTech Nanoweave cap" desc = "A piece of clothing for a SYTech suit, allowing for extended control and breathability at micro scales via amplified hardlight respiration. This one seems to be modeled like a dominatrix cap, however." icon = 'hyperstation/icons/obj/clothing/head.dmi' icon_state = "sycap" @@ -112,7 +112,7 @@ //The visor /obj/item/clothing/glasses/hud/toggle/syvisor - name = "SYTech Analysis Visor" + name = "SynTech Analysis Visor" desc = "A high-tech visor developed for SYTech suits, for helping internal processes lead augment decisions. This one looks like a pair of darkened sunglasses." icon = 'hyperstation/icons/obj/clothing/glasses.dmi' icon_state = "syvisor" @@ -161,7 +161,7 @@ //Shoes /obj/item/clothing/shoes/syshoes - name = "SYTech Nanoweave platform heels" + name = "SynTech Nanoweave platform heels" desc = "A complimentary piece of SYTech apparel for gravity-altering applications. It even allows you to walk up walls! This pair takes on the appearance of skimpy, thigh-high latex boots with stilletos." icon_state = "syshoes" item_state = "syshoes" @@ -174,7 +174,7 @@ //Gloves /obj/item/clothing/gloves/sygloves - name = "SYTech Nanoweave sleeves" + name = "SynTech Nanoweave sleeves" desc = "A pair of enhanced sleeves, developed by SYTech. These allow remote and psionic levels of manipulation to the electrical currents inside living beings, or objects. Use with caution!" icon_state = "sygloves" item_state = "sygloves" @@ -186,4 +186,4 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 120 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - mutantrace_variation = NO_MUTANTRACE_VARIATION \ No newline at end of file + mutantrace_variation = NO_MUTANTRACE_VARIATION diff --git a/code/game/objects/items/lorebooks.dm b/hyperstation/code/obj/items/lorebooks.dm similarity index 52% rename from code/game/objects/items/lorebooks.dm rename to hyperstation/code/obj/items/lorebooks.dm index b22f6af4e..700089f55 100644 --- a/code/game/objects/items/lorebooks.dm +++ b/hyperstation/code/obj/items/lorebooks.dm @@ -6,7 +6,7 @@ /obj/item/book/lorebooks/welcome_to_kinaris name = "Welcome to Kinaris!" icon_state = "bookwelcometokinaris" - desc = "An introductory book given to immigrants of people who changed their Nanotrasen ways, and accepted the light of Kinaris, Radiance, and the Azurean Government." + desc = "A humanitarian guide to Andromeda." author = "V. Kinaris" title = "Welcome to Kinaris!" dat = {" @@ -21,63 +21,152 @@

Welcome to Kinaris!

+

A humanitarian guide to Andromeda


- If you're reading this datapad, you probably have gained an interest in what the daily commodities and rights of a Kinaris worker may be, or you have recently been employed and are looking for further information. Under the latter's case; welcome! It's not an easy transition to working under a larger corporation for any Azurean, and we are here to alleviate that stress. Whether or not you fall under any of these categories, or are clueless at all to who we are, please do take a read! + Hello reader! If your eyes find themselves upon this datapad, then you’re surely interested in finding out what your new employers are all about. If not, Kinaris would highly recommend a thorough read regardless; Azurean culture tends to be a shock for outsiders!

Table of Contents...

    -
  1. What is Kinaris? -
  2. How Kinaris Came to be -
  3. How Kinaris Operates Today -
  4. Workers' Rights -
  5. Usage of Radiance +
  6. Kinaris; Who Are We? +
  7. Andromeda and the Current Era +
  8. Others Under Kinaris +
  9. About Layenia Station


-

Chapter 1

-

What is Kinaris?

+

Chapter 1

+

Kinaris, Who Are We?

- If you are unfamiliar to Azurean space, then you are most definitely unfamiliar with the entirety of Kinaris itself. Kinaris is the primary company under the rule of Azurea, who not only manufactures goods, but is a forefront of Radiant Technology, space exploration, exo-colony development, and asset protection. As such, it is a very expensive operation that almost entirely depends on it's own manufactured goods- and selling of such- towards it's own colonies, which is an extent of colony taxation and revenue collection after they've initially been set up. The sheer stability of it's exponential growth and safety has piqued the interest from other regions and promising even more imports and exports between Kinaris and other affiliates (including but not limited to; Lancaster Industries, CorpraTek, Grinlok Conglomerate, and Nanotrasen). The dependable and and noble nature of the heads at Kinaris had inevitably led to constant backing by the Azurean Government, and increased fortitude in asset protection. This ultimately ended up in Kinaris being the leading, and most-trusted government under Azurea law. + There are many misconceptions and illusions regarding Kinaris and what we are all about. This of course is coming with no surprise, thanks to our heavily-regulated uplifting guidelines and processes. Kinaris (otherwise known as Kinaris Colonization and Conversion LLC) is not what can be defined as a company or organization; we do not require the 9-5 wage-slave worklife that is requested from many capitalistic-leaning organizations in places such as the Milky Way. We are a firm believer that happiness and self-worth is as important as being part of a bigger picture in this Universe. Nobody asked to be born, but every soul has an opportunity to thrive. Such is the way of a progressive, forward-thinking power like us.

- The word Kinaris means "of kin", which translates to "of family", and that is the intent of Kinaris. A family nourishes you and helps you grow, through hardship and every step of the way along the road of becoming an individual. With every lesson learned, you grow. With every riddled situation, you learn anew. Kinaris is no different from that of the teachings of a mother or a father; intent to ensure that you can be a successor, and be better than your previous self. You are as important as everyone else in the world, yet you are unique. These rights are protected under Kinaris. + Every soul should have a taste of comfort and happiness, be it in the mindscape of neurological implants, or in the warm breeze of a familiar home. Nobody should be robbed of their desires as long as it leads to happiness for everyone involved. Life should lead to a fulfilling sense of accomplishment after discovering a true passion- this is reflected true for every soul under our wing. Be it a synthetic being manufactured for a reason, or a born individual who grew up looking at the stars. At the end of it all, we are one and the same. To live and to thrive. +

+ The technological elegance and prowess we at Kinaris possess is equally important as it is fickle. We live in an age where death is long behind us; starvation and the crushing weight of reality itself can be washed away with an implant, or the golden towers of our civilization. But this means no room for breeding irresponsibility and disrespecting our reason in the Universe in the first place. To live is to die, to flourish is to wither. There is a forbidden fruit in this mindset we can land ourselves in; that of immortality and escaping the inevitable end of everything. This fruit leads to arrogance and a blind lack of care for the balance of the greater good. The truth of the matter is you cannot have your greatest achievements without wallowing in failure. We live our greatest lives for our inevitable death. This is Radiance. +

+ As such, we have witnessed the greater illusions that developing civilizations like Humanity surround themselves in. Where death is simply another part of everyday life, and to be born again into a hysteria that asks more labor from their living cells ad infinitum. This is a blatant disrespect of our Radiance, but more on this concept later. Know vehemently that while Kinaris can save you from your death in the blink of an eye, that day we’re done with this Universe comes for us all. We never forget our reason for this reality in the first place.


Chapter 2

-

How Kinaris Came to be

+

Andromeda and the Current Era

- Rising up to mega-corporation status and being backed as the most trustable force within several sectors is not a simple task whatsoever. There are mistakes along the road, and there are plenty of issues forthwrought with even considering such a task. Kinaris begun as nothing more than a simple cargo company nearly two centuries from the date of March 5th, 2560. Initially, the company began as nothing more than a delivery service by none other than Centurian Kinaris, within a low-tech sector out of Azurean Gov's grasp. Due to the unfortunate events of resistance against The Phoenix at the time, most sectors like this were outright ravaged and decimated into a smoldering pulp of mud and ash, where individuals kept to themselves and were cut-throat towards one another. This led to imports and exports often being outright mistrusted due to one scandallous event of poisoned rations after another. This was an opportunity for Centurian, who was one of the most trusted individuals within the sector, and opened up his shipping goods company after months of hauling for others. This in time spread word and opened further opportunities for Centurian himself, who saw these as nothing more than help to give towards those who needed it. Kinaris outright spent a good portion of it's early life as another small company with a few workers trickling in every now and then, indifferent to the thousands of others littering the frontier. + The chances are, you’re probably a long way away from home if you’re reading this datapad. The greater galaxy of Andromeda is an incredibly complex place compared to other galaxies; and even if you’re a newly-uplifted species who has been brought to safety only-recently, we know the stresses and struggles that this may bring. Know that you are not alone in this, and Kinaris solely lives for bringing everyone to an even playing field.

- What eventually settled Kinaris off from the norm of other companies was nothing more than the surge of artificial interest in becoming Radiant across Azurean space. Unlike most companies who resisted and fought against The Phoenix, Kinaris heeded it's will. It was said that Centurian himself was a vissionare in his early days, led by the golden light, as he called it. In most frontier sectors, this was appalled and shunned by most communties, who aimed to flee as far as they could from Azurea itself, to escape Radiance. This was a short downfall in Kinaris's momentum, as it's trust rapidly decimated into nothing in due time, and prompted anger within it's customers. However, Centurian prevailed, and in a simple matter of days, sectors begun following in Radiance in the bulk, and as a result, formed a bond with the company. It is unclear how exactly Centurian managed to pull off such a dangerous feat, but that is just more evidence towards his Radiance. + Andromeda as a whole lives in a state of high peace and tranquility. The teachings of Radiance and steady Uplifting have brought upon a level-headed sense of understanding from one civilization to the next. Coexistence is the key to a Utopian society, which is something we all strive for. When you live without respect for those who share the stars with you, you will only fall flat on your face in an endeavor to chase one light of many. This applies even more vehemently for those civilizations who are warring with themselves. Know words prior to violence.

- As the interest in Radiance surged across Azurean space, so did the success of Kinaris. One sector converted, one sector gained trust. More trust, more revenue. More revenue, more improvements. Rinse and repeat, for a hundred years. For a while, Radiance was nothing more than a melody that went with the chorus of Kinaris; a simple cargo company turned head over heels into a Pristine Zealot of Light, converting those within it's path instead of decimating it to smoldering ash, feeding back into the acceptance of Radiance as a whole for the people of Azurean Space. Centurian was nothing more than the leader of peace and safety, giving to those who needed help the most, branching off far beyond that of simple freight shipments. With trust, he smote down those who did not heed to peace, rather violence. Some did not believe in his ways. This led to his death after a Nanotrasen Assault on his capital freighter. + Approximately 90% of the galaxy is under complete Kinaris control, be it from colonies and worlds who wish independence, or those who depend on us for resources and aid. Andromeda’s history was not a quiet and relaxed one however; the streaks of distant war and conflict bear from star to star, be it from one torn megastructure to ripped-apart dyson spheres. Our teachings are to be gentle, but not all species were raised and born equally. War was once a flame we were quick to snuff out, as our technological advances outpace many by the thousands of years.

- Today, his tomb drifts within the gas clouds of Myril Majoris, Azurea's gas giant. In memoriam of the one person who heeded unity with individualism into Azurea's people. He was nothing more than Radiant, nothing less. + As of the current encryption of this datapad, the current date is 9E80C, which approximately translates to 4/4/2561 in Milky-Way-approved calendars. Kinaris’s regulatory Era-Cycle calendar supports the vagueness of one star to the next; be it a common binary, or the endless wandering of a rogue planet. The Era and Cycle is the same for everyone across the galaxy, with their own local orbits and patterns added on top. For example, while it is universally the 80th Cycle of the 9th Era, it may be the Fourth of April in sol time on top. A cycle tends to be one complete orbit of the two primary Binary Stars in Radiant Hearth, while an Era usually is a realized event of unprecedented advancement. The current Era is known sometimes as The Era of the Wing, where intergalactic travel has become near-instantaneous due to progressions in Radiant Technology. +

+ Shortly after the birth of this Era, humanity and the Milky Way were discovered. Not only that, but their cultures, other species, and general society beneath their control. This was an exciting time to bring new mindsets to the table. Primarily at the forefront, we found what they classified as a “Megacorporation” known as “Nanotrasen”. To put it lightly, their abhorrent misuse of technologies for the sake of profit and lack of rights’ for the very lives they carelessly endanger put us at odds immediately. Complete uplifting and conversion of people under Nanotrasen has yet to happen, but after a peace-talk gone into a full-blown propaganda-fueled attack, we have decided to step out of the Milky Way entirely, and lock our borders to them. It is not unusual for us at Kinaris to wait for a civilization to mature, and humanity is one of many on that list. +

+ Despite this, there are a few locations across the Andromeda that allow access from the Milky Way. Thankfully, they have a much lower technological understanding than we do, so getting from one galaxy to the next is nigh-impossible for them. As it is now, this is completely under our control.


-

Chapter 3

-

How Kinaris Operates Today

+

Chapter 3

+

Others Under Kinaris

- Modern-day Kinaris is a different story than that of previous-century Kinaris, with less aggression and more protection, yet it is the other side of one coin. Having gone past the days of aggression and forthright domination, KN's goal these days is that of a stalwart. Reliable, hardworking, and most of all: loyal. Having gone far from it's roots of zealot-like exports, imports, and radical conversion, Kinaris is that of an expanded mindset and reach, especially due to the usage of Radiant Technology. Today, Kinaris offers not only jobs in freight, but that of common commodities such as food growth and production, alongside processing. Further down the line includes industrial production and that of factory-assisted work, robotics, research, asset protection, and more. When a new sector, area or ship is attained, it is assigned a Commander, in which they ensure it is secured with it's own technological advances and supplies, to ensure the working condition of any outpost, station, or ship that KN may claim ownership of. After initial supplying and resource distribution, workers are given a period of time to get set up before sending shipments out for Kinaris to collect and maintain as exports elsewhere, ultimately with profit in mind. This may not be the case for every new sector attained, but it is often standard protocol, with more upgrades to the sector coming forth as a the Commander may see fit; and often times, Commanders are rotated in and out from the sector. + While this datapad has certainly fed you a lot of information on Kinaris, know that not everything is just about us, as per our priority of coexistence. Below are some of our primary partners and civilizations that we refer to quite frequently. You may even see them around Layenia!

- Kinaris Officials and Commanders are often protected by a multitude of laws that allow them to display their power and ensure that workers are making profits, and may even be escorted by KN Elites and Zealots, if suspected threats are within the area. Usage of force is often permitted in the instance of non-compliance with a Commander, who is above any captain or high-ranking individual in control of that sector, and is more often than not, above KN Law, but below Radiance Protocol. Kinaris Officials do not get this benefit. -

Above Commanders, there may be a regional director who controls and permits what Commanders do in their sectors, and above that, there will be a member of the board who represents certain regions. There is no distinct "CEO" of Kinaris, rather a board of directors who have fully committed to Radiance, and have the near-full extent of Radiant Technology within their system. The closest personnel to a higher rank above that would be Valarie Kinaris, the daughter of the founder. She still answers to other board members, as they answer to her, however. +

Dzar Underworks

-


-

Chapter 4

-

Workers' Rights

+ Homeworld: Salis Primary A-4 +
+ Home Star: Salis Major +
+ Primary Species: Vitruvian +
+ Primary Language: Natrul +
+ Primary Work: Metalsmithing, mining, and material research +
+ Motto: In virtue we trust

- Please refer to Kinaris Law for a full extent of these rights. + “Dzar Underworks is a conglomerate of metalworking companies underneath the intergalactic umbrella of Kinaris, formed firstly in opposition of Radiance in the past, and an ally now. They possess the unique engram of smithing highly-sophisticated metals and impossible materials from patented forges, which is kept secret by shareholders at Dzar. The unique way Dzar is able to manufacture metals has left them uncontested against many other companies, leading them to a divine- if not pricey- hold on anyone who is interested in making high-grade vessels, colonies, megastructures, or plain-old appliances. Dzar works side-by-side with Kinaris, where Radiant Technology is their reward in return for high-grade metals.” +

-

-


-

Chapter 5

-

Usage of Radiance

+

The Azurean Government

- If you've been blessed by The Phoenix's light, then we commend you for such a noble hierarchy to achieve! As Radiance Protocol is rather straightforward in the eyes of Kinaris and we do not doubt the usage of the beholder, it is permitted to use Radiant Technology within Kinaris-owned space, so as long as it involves a more efficient workflow. Usage of smiting should be used with caution. + Homeworld: KNCS Jul Ryynthal, Myril Majoris orbit +
+ Home Star: Dissona / Radia (binary) +
+ Primary Species: Hyenidae +
+ Primary Language: Fornaux +
+ Primary Work: governing and representing anthro species intergalactically +
+ Motto: No soul left behind

-


- - + “The Azurean Government (also known as AzureGov, or Azurean Govern) is the leading spearhead into peace and tranquility within Andromeda when Kinaris has its back turned; despite their criticisms. It governs and loosely controls the various organizations currently operating around Andromeda, but it’s not secret their power is limited in comparison to the other powers in the galaxy. Despite this, their operations in ensuring that the representation of anthromorphs and other sentient creatures can be seen in a better light to lesser civilizations such as humanity, given that the correct pacts can be agreed upon.” +

- +

+

Zao Security and Protection

+

+ Homeworld: the Ringworld of Incandesce Primara +
+ Home Star: Incandesce Seconda +
+ Primary Species: Primaris Unit +
+ Primary Language: Binary +
+ Primary Work: Contracted Policework +
+ Motto: Secure the people, save the future +

+ “ZaoCorp is a vigilant workhorse of stabilizing colonies with quick, effective, and calm policework. Their strict neurological pursuit of hiring only the most fair and level-headed individuals leads them to establish peace among any colonies they’re contracted at, making for an effective police force. Not only do they hire the best of the best through genetic selection and splicing, they also manufacture bleeding-edge Nuovo-fabric exosuits, threaded to a casual and calm trench coat adorned in a blue and beige. This makes for an approachable, fair, and just visage that is capable of nonlethal apprehension where necessary. Trust is always locked in the hands of Zao; stifling any concerns peacefully through vigilance.” +

- +

+

Synergized Technology

+

+ Homeworld: the City-Planet of Jovias +
+ Home Star: Nembus +
+ Primary Species: Anthromorph +
+ Primary Language: Fornaux +
+ Primary Work: Production and selling of size-altering technology, including infrastructure +
+ Motto: Modern solutions, big and small +

+ “Synergized Technology- commonly known as SynTech- is a company which leads the complex solutions in any galaxy’s biggest problem: accommodating for the size of life. As civilizations grew more welcoming to different ideals and lifestyles, it became more difficult and disastrous to deal with extreme size differences from one alien species to the other. Not only did this spark an incredible amount of regulations from AzureGov, but Kinaris’s interest was piqued to keep peace over all; and that included accommodating for any species, whether or not they stood over a mountain, or below an ant hill. The high demand of multi-size rights and technology was driven into SynTech’s hands, where they would provide and assist in regulating consistent and meaningful products to ease interaction from one to the next. Not only do they supply incredibly advanced, highly-regulated technology, they also help in consistent planning and moderation in most cities to keep traffic from most differently-sized species without havoc. Without SynTech, galaxies would look like a fairly bland place, where one size rules above all.” +

- +

+

Titan Piezoelectrics and Ceramics

+

+ Homeworld: Tremora +
+ Home Star: Titawin +
+ Primary Species: Megalithian +
+ Primary Language: Aquarian +
+ Primary Work: Production of power-efficient piezoelectric ceramics and craft +
+ Motto: n/a +

+ “Titan Ceramics was the primary source of prominent electrical power on Tremora for its lifespan, with extravagant materials and unique ceramic mixes that supported incredibly efficient production of energy in bulk. Not only did they provide energy for a once-struggling civilization, they brought upon artistic desire and talent for those who would seek their ceramics. Value in energy is equal to value in art in their eyes, with only the finest materials and expertly-tested conditions to meet the quality of their work. Despite the overwhelming size difference of the housing species, value is still sought from both sides, resulting in multi-size accommodations for their ceramics. When cheap yet efficient power is required without the Weave, Titan Ceramics is there.” +

- +

+


+

Chapter 4

+

About Layenia Station

+

+ After reading this far in, it may become apparent that Layenia does not reflect the values of Kinaris in many ways. From the technological progress to the surroundings, it may seem like Layenia Station is far behind its time. And that’s an entirely correct notion, all thanks to the standards of Kinaris Uplifting. +

+ As it stands right now, Layenia Station uses a fabricated Engram to replicate that of its former employers and owners. The star was previously given to humanity prior to the first attempt at Uplifting, but it was taken back shortly after things went south, and given open borders to the Milky Way. The Engram in particular mimics a lot of Nanotrasen-esque technology, which makes Layenia Station one of the most low-tech Kinaris stations to exist out there to date! +

+ When it comes down to standards of Uplifting, change is one thing that many species cannot deal with easily. As such, the golden standard of Uplifting is to start from the technology they know, and slowly introduce new concepts and realizations after time. Layenia Station is currently in its early phases of conversion, but in time, it too will reach heightened technological elegance like the rest of the galaxy. +

+ If you wish to learn more about Engrams, please locate a datapad on the subject! +

+


+ "} @@ -222,4 +311,4 @@ - "} \ No newline at end of file + "} diff --git a/hyperstation/code/obj/kinkyclothes.dm b/hyperstation/code/obj/kinkyclothes.dm index 1e74de37c..9ea2c72bf 100644 --- a/hyperstation/code/obj/kinkyclothes.dm +++ b/hyperstation/code/obj/kinkyclothes.dm @@ -129,3 +129,12 @@ obj/item/clothing/neck/stole/black max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT heat_protection = CHEST|GROIN|ARMS armor = list("melee" = 60, "bullet" = 80, "laser" = 80, "energy" = 90, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) + +/obj/item/clothing/under/raccveralls + name = "form fitting overalls" + desc = "A tight form fitting pair of overalls." + icon = 'hyperstation/icons/obj/clothing/uniforms.dmi' + icon_state = "raccveralls" + alternate_worn_icon = 'hyperstation/icons/mobs/uniforms.dmi' + item_state = "raccveralls" + can_adjust = FALSE \ No newline at end of file diff --git a/hyperstation/icons/effects/medical.dmi b/hyperstation/icons/effects/medical.dmi new file mode 100644 index 000000000..cf74d7379 Binary files /dev/null and b/hyperstation/icons/effects/medical.dmi differ diff --git a/hyperstation/icons/mob/char_ears.dmi b/hyperstation/icons/mob/char_ears.dmi index 26709be52..bf248620b 100644 Binary files a/hyperstation/icons/mob/char_ears.dmi and b/hyperstation/icons/mob/char_ears.dmi differ diff --git a/hyperstation/icons/mob/char_markings.dmi b/hyperstation/icons/mob/char_markings.dmi index f38c1db49..e311b1d0f 100644 Binary files a/hyperstation/icons/mob/char_markings.dmi and b/hyperstation/icons/mob/char_markings.dmi differ diff --git a/hyperstation/icons/mob/char_snouts.dmi b/hyperstation/icons/mob/char_snouts.dmi index c7ad9dca1..06ce5d3be 100644 Binary files a/hyperstation/icons/mob/char_snouts.dmi and b/hyperstation/icons/mob/char_snouts.dmi differ diff --git a/hyperstation/icons/mob/char_tails.dmi b/hyperstation/icons/mob/char_tails.dmi index c9faf1b2e..6e2005e12 100644 Binary files a/hyperstation/icons/mob/char_tails.dmi and b/hyperstation/icons/mob/char_tails.dmi differ diff --git a/hyperstation/icons/mob/clothes/extra.dmi b/hyperstation/icons/mob/clothes/extra.dmi index 1dd717c37..be95878b8 100644 Binary files a/hyperstation/icons/mob/clothes/extra.dmi and b/hyperstation/icons/mob/clothes/extra.dmi differ diff --git a/hyperstation/icons/mobs/wendigo.dmi b/hyperstation/icons/mobs/wendigo.dmi index 7c8de1d12..78edf11d2 100644 Binary files a/hyperstation/icons/mobs/wendigo.dmi and b/hyperstation/icons/mobs/wendigo.dmi differ diff --git a/hyperstation/icons/obj/clothing/sizeaccessories.dmi b/hyperstation/icons/obj/clothing/sizeaccessories.dmi new file mode 100644 index 000000000..b9079b353 Binary files /dev/null and b/hyperstation/icons/obj/clothing/sizeaccessories.dmi differ diff --git a/hyperstation/icons/obj/clothing/uniforms.dmi b/hyperstation/icons/obj/clothing/uniforms.dmi index 56e017c56..c902de978 100644 Binary files a/hyperstation/icons/obj/clothing/uniforms.dmi and b/hyperstation/icons/obj/clothing/uniforms.dmi differ diff --git a/hyperstation/icons/obj/hydroponics/growing_fruits.dmi b/hyperstation/icons/obj/hydroponics/growing_fruits.dmi new file mode 100644 index 000000000..691f93859 Binary files /dev/null and b/hyperstation/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/hyperstation/icons/obj/hydroponics/harvest.dmi b/hyperstation/icons/obj/hydroponics/harvest.dmi new file mode 100644 index 000000000..5ba1d7501 Binary files /dev/null and b/hyperstation/icons/obj/hydroponics/harvest.dmi differ diff --git a/hyperstation/icons/obj/hydroponics/seeds.dmi b/hyperstation/icons/obj/hydroponics/seeds.dmi new file mode 100644 index 000000000..89c8a1f87 Binary files /dev/null and b/hyperstation/icons/obj/hydroponics/seeds.dmi differ diff --git a/hyperstation/sound/voice/emotes/female_giggle1.ogg b/hyperstation/sound/voice/emotes/female_giggle1.ogg deleted file mode 100644 index 87961f5cc..000000000 Binary files a/hyperstation/sound/voice/emotes/female_giggle1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_giggle2.ogg b/hyperstation/sound/voice/emotes/female_giggle2.ogg deleted file mode 100644 index bd1e99de7..000000000 Binary files a/hyperstation/sound/voice/emotes/female_giggle2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_laugh1.ogg b/hyperstation/sound/voice/emotes/female_laugh1.ogg deleted file mode 100644 index b4b464bb6..000000000 Binary files a/hyperstation/sound/voice/emotes/female_laugh1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_laugh2.ogg b/hyperstation/sound/voice/emotes/female_laugh2.ogg deleted file mode 100644 index 3124eaf05..000000000 Binary files a/hyperstation/sound/voice/emotes/female_laugh2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_laugh3.ogg b/hyperstation/sound/voice/emotes/female_laugh3.ogg deleted file mode 100644 index ed80538fa..000000000 Binary files a/hyperstation/sound/voice/emotes/female_laugh3.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_laugh4.ogg b/hyperstation/sound/voice/emotes/female_laugh4.ogg deleted file mode 100644 index 057a842ad..000000000 Binary files a/hyperstation/sound/voice/emotes/female_laugh4.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_yawn1.ogg b/hyperstation/sound/voice/emotes/female_yawn1.ogg deleted file mode 100644 index 548be96b7..000000000 Binary files a/hyperstation/sound/voice/emotes/female_yawn1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_yawn2.ogg b/hyperstation/sound/voice/emotes/female_yawn2.ogg deleted file mode 100644 index 67b150567..000000000 Binary files a/hyperstation/sound/voice/emotes/female_yawn2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/female_yawn3.ogg b/hyperstation/sound/voice/emotes/female_yawn3.ogg deleted file mode 100644 index 12d42db24..000000000 Binary files a/hyperstation/sound/voice/emotes/female_yawn3.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female1.ogg b/hyperstation/sound/voice/emotes/gasp_female1.ogg deleted file mode 100644 index f74882f90..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female2.ogg b/hyperstation/sound/voice/emotes/gasp_female2.ogg deleted file mode 100644 index 8bd7f74cf..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female3.ogg b/hyperstation/sound/voice/emotes/gasp_female3.ogg deleted file mode 100644 index 6e05d1ea7..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female3.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female4.ogg b/hyperstation/sound/voice/emotes/gasp_female4.ogg deleted file mode 100644 index f33b775fd..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female4.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female5.ogg b/hyperstation/sound/voice/emotes/gasp_female5.ogg deleted file mode 100644 index cbeeb63e1..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female5.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female6.ogg b/hyperstation/sound/voice/emotes/gasp_female6.ogg deleted file mode 100644 index 444b6688a..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female6.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_female7.ogg b/hyperstation/sound/voice/emotes/gasp_female7.ogg deleted file mode 100644 index 096354f98..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_female7.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male1.ogg b/hyperstation/sound/voice/emotes/gasp_male1.ogg deleted file mode 100644 index e0ddde118..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male2.ogg b/hyperstation/sound/voice/emotes/gasp_male2.ogg deleted file mode 100644 index 2119daf88..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male3.ogg b/hyperstation/sound/voice/emotes/gasp_male3.ogg deleted file mode 100644 index 6d5cb214f..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male3.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male4.ogg b/hyperstation/sound/voice/emotes/gasp_male4.ogg deleted file mode 100644 index a9173a1a2..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male4.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male5.ogg b/hyperstation/sound/voice/emotes/gasp_male5.ogg deleted file mode 100644 index 8e7ef3734..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male5.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male6.ogg b/hyperstation/sound/voice/emotes/gasp_male6.ogg deleted file mode 100644 index 546ba45bf..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male6.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/gasp_male7.ogg b/hyperstation/sound/voice/emotes/gasp_male7.ogg deleted file mode 100644 index f73854f6c..000000000 Binary files a/hyperstation/sound/voice/emotes/gasp_male7.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/sigh_female.ogg b/hyperstation/sound/voice/emotes/sigh_female.ogg deleted file mode 100644 index d72c206cc..000000000 Binary files a/hyperstation/sound/voice/emotes/sigh_female.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/sigh_male.ogg b/hyperstation/sound/voice/emotes/sigh_male.ogg deleted file mode 100644 index 1590bcdee..000000000 Binary files a/hyperstation/sound/voice/emotes/sigh_male.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/whimper_female1.ogg b/hyperstation/sound/voice/emotes/whimper_female1.ogg deleted file mode 100644 index 4c8034d38..000000000 Binary files a/hyperstation/sound/voice/emotes/whimper_female1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/whimper_female2.ogg b/hyperstation/sound/voice/emotes/whimper_female2.ogg deleted file mode 100644 index 48353c50b..000000000 Binary files a/hyperstation/sound/voice/emotes/whimper_female2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/whimper_female3.ogg b/hyperstation/sound/voice/emotes/whimper_female3.ogg deleted file mode 100644 index 174a24f46..000000000 Binary files a/hyperstation/sound/voice/emotes/whimper_female3.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/whimper_male1.ogg b/hyperstation/sound/voice/emotes/whimper_male1.ogg deleted file mode 100644 index 7bd8ecabc..000000000 Binary files a/hyperstation/sound/voice/emotes/whimper_male1.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/whimper_male2.ogg b/hyperstation/sound/voice/emotes/whimper_male2.ogg deleted file mode 100644 index 44e8fb702..000000000 Binary files a/hyperstation/sound/voice/emotes/whimper_male2.ogg and /dev/null differ diff --git a/hyperstation/sound/voice/emotes/whimper_male3.ogg b/hyperstation/sound/voice/emotes/whimper_male3.ogg deleted file mode 100644 index 42492e42e..000000000 Binary files a/hyperstation/sound/voice/emotes/whimper_male3.ogg and /dev/null differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 1339c6a35..80effd7be 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index 5b526ab99..e45add9f8 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 640c4c0c8..064442d15 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 9beedfb41..d98f9dad9 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi index 96d6d793e..46ba0e0d7 100644 Binary files a/icons/mob/neck.dmi and b/icons/mob/neck.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 1d9d5a373..5b666a530 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 1360328ba..205e3b99a 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 64e0ce04c..b47a5bbf0 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/doors/1x2blast_hor.dmi b/icons/obj/doors/1x2blast_hor.dmi index a0a3d9351..59827a280 100644 Binary files a/icons/obj/doors/1x2blast_hor.dmi and b/icons/obj/doors/1x2blast_hor.dmi differ diff --git a/icons/obj/doors/1x2blast_vert.dmi b/icons/obj/doors/1x2blast_vert.dmi index 6e810457d..f3fe9da8b 100644 Binary files a/icons/obj/doors/1x2blast_vert.dmi and b/icons/obj/doors/1x2blast_vert.dmi differ diff --git a/icons/obj/doors/1x3blast_hor.dmi b/icons/obj/doors/1x3blast_hor.dmi new file mode 100644 index 000000000..72d8898ae Binary files /dev/null and b/icons/obj/doors/1x3blast_hor.dmi differ diff --git a/icons/obj/doors/1x3blast_vert.dmi b/icons/obj/doors/1x3blast_vert.dmi new file mode 100644 index 000000000..6fe220f28 Binary files /dev/null and b/icons/obj/doors/1x3blast_vert.dmi differ diff --git a/icons/obj/doors/1x4blast_hor.dmi b/icons/obj/doors/1x4blast_hor.dmi index d43298973..41165639a 100644 Binary files a/icons/obj/doors/1x4blast_hor.dmi and b/icons/obj/doors/1x4blast_hor.dmi differ diff --git a/icons/obj/doors/1x4blast_vert.dmi b/icons/obj/doors/1x4blast_vert.dmi index 26c730b98..2835732ad 100644 Binary files a/icons/obj/doors/1x4blast_vert.dmi and b/icons/obj/doors/1x4blast_vert.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 4ba28ee99..250fb561a 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index c46dea71f..121e8f452 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm index f5cde2ef0..c2f6f2e58 100644 --- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -832,6 +832,14 @@ datum/sprite_accessory/ears/human/gret name = "Panda" icon_state = "hpanda" +/datum/sprite_accessory/mam_snouts/vulp + name = "Vulp" + icon_state = "vulp" + +/datum/sprite_accessory/mam_snouts/vulpalt + name = "Vulp Alt" + icon_state = "vulp2" + /datum/sprite_accessory/mam_snouts/skulldog name = "Skulldog" icon_state = "skulldog" @@ -1647,6 +1655,7 @@ datum/sprite_accessory/ears/human/gret name = "Dog" icon_state = "dog" + /datum/sprite_accessory/mam_body_markings/eevee name = "Eevee" icon_state = "eevee" @@ -2294,49 +2303,6 @@ datum/sprite_accessory/ears/human/gret icon_state = "sabresune" ckeys_allowed = list("poojawa") -//doged was here -/datum/sprite_accessory/mam_body_markings/chemlight - name = "chemlight" - icon_state = "chemlight" - ckeys_allowed = list("chemlight") - -/datum/sprite_accessory/mam_tails/chemlight - name = "chemlight" - icon_state = "chemlight" - ckeys_allowed = list("chemlight") - -/datum/sprite_accessory/mam_tails_animated/chemlight - name = "chemlight" - icon_state = "chemlight" - -/datum/sprite_accessory/mam_ears/chemlight - name = "chemlight" - icon_state = "chemlight" - ckeys_allowed = list("chemlight") - -/datum/sprite_accessory/mam_snouts/fchemlight - name = "chemlight (Top)" - icon_state = "fchemlight" - ckeys_allowed = list("chemlight") - -/datum/sprite_accessory/mam_snouts/chemlight - name = "chemlight" - icon_state = "chemlight" - ckeys_allowed = list("chemlight") - -/datum/sprite_accessory/taur/chemnaga - name = "Naga Chemlight" - icon_state = "chemnaga" - taur_mode = SNEK_TAURIC - ckeys_allowed = list("chemlight") - -/datum/sprite_accessory/taur/chemlight - name = "Chem taur" - icon_state = "chemlight" - taur_mode = PAW_TAURIC - ckeys_allowed = list("chemlight") - - //Lunasune /datum/sprite_accessory/mam_ears/lunasune name = "lunasune" diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 65a407d01..e21502b4f 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -309,9 +309,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! var/leap_at var/disabler var/laser - var/sleeper_g - var/sleeper_r - var/sleeper_nv + var/sleeper_state = BORGBELLY_NONE #define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance. diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index bc8f5a8c8..324b44db3 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -12,17 +12,18 @@ glass_name = "chalice of semen" glass_desc = "In the Sumerian mythology, Enki - the God of water, was believed to have created the Tigris and Euphrates rivers by masturbating and ejaculating into their empty riverbeds." -/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume) +/datum/reagent/consumable/semen/reaction_turf(turf/open/T, reac_volume) if(!istype(T)) return if(reac_volume < 3) return - var/obj/effect/decal/cleanable/semen/S = locate() in T if(!S) S = new(T) if(data["blood_DNA"]) S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) + if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) + T.MakeSlippery(TURF_WET_LUBE, 15 SECONDS, min(reac_volume * 2 SECONDS, 120)) /obj/effect/decal/cleanable/semen name = "semen" @@ -87,17 +88,18 @@ blood_DNA |= F.blood_DNA return ..() -/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) +/datum/reagent/consumable/femcum/reaction_turf(turf/open/T, reac_volume) if(!istype(T)) return if(reac_volume < 3) return - var/obj/effect/decal/cleanable/femcum/S = locate() in T if(!S) S = new(T) if(data["blood_DNA"]) S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) + if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) + T.MakeSlippery(TURF_WET_LUBE, 15 SECONDS, min(reac_volume * 2 SECONDS, 120)) /datum/reagent/consumable/milk/reaction_turf(turf/T, reac_volume) if(!istype(T)) diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi index bb25e3749..fde1d6f02 100644 Binary files a/modular_citadel/icons/mob/mam_ears.dmi and b/modular_citadel/icons/mob/mam_ears.dmi differ diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi index f4195d7ba..fa2b16223 100644 Binary files a/modular_citadel/icons/mob/mam_markings.dmi and b/modular_citadel/icons/mob/mam_markings.dmi differ diff --git a/modular_citadel/icons/mob/mam_snouts.dmi b/modular_citadel/icons/mob/mam_snouts.dmi index 582e23363..7ccd40676 100644 Binary files a/modular_citadel/icons/mob/mam_snouts.dmi and b/modular_citadel/icons/mob/mam_snouts.dmi differ diff --git a/modular_citadel/icons/mob/mam_tails.dmi b/modular_citadel/icons/mob/mam_tails.dmi index 583772d84..c8a8e3ecf 100644 Binary files a/modular_citadel/icons/mob/mam_tails.dmi and b/modular_citadel/icons/mob/mam_tails.dmi differ diff --git a/modular_citadel/icons/mob/mam_taur.dmi b/modular_citadel/icons/mob/mam_taur.dmi index fc8486cdb..e9d7de0f2 100644 Binary files a/modular_citadel/icons/mob/mam_taur.dmi and b/modular_citadel/icons/mob/mam_taur.dmi differ diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/modular_citadel/icons/mob/suit_digi.dmi index 8a14afa11..3aad740e0 100644 Binary files a/modular_citadel/icons/mob/suit_digi.dmi and b/modular_citadel/icons/mob/suit_digi.dmi differ diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi index ddc536dd1..09a7af2a3 100644 Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ diff --git a/sound/AI/burger.ogg b/sound/AI/burger.ogg new file mode 100644 index 000000000..d75a77a45 Binary files /dev/null and b/sound/AI/burger.ogg differ diff --git a/sound/AI/cleaning.ogg b/sound/AI/cleaning.ogg deleted file mode 100644 index a97a91305..000000000 Binary files a/sound/AI/cleaning.ogg and /dev/null differ diff --git a/sound/AI/commandreport.ogg b/sound/AI/commandreport.ogg index 900666690..8b5e3f486 100644 Binary files a/sound/AI/commandreport.ogg and b/sound/AI/commandreport.ogg differ diff --git a/sound/AI/crystal.ogg b/sound/AI/crystal.ogg index b6e7bbe9a..765568225 100644 Binary files a/sound/AI/crystal.ogg and b/sound/AI/crystal.ogg differ diff --git a/sound/AI/night.ogg b/sound/AI/night.ogg new file mode 100644 index 000000000..1e869fdb1 Binary files /dev/null and b/sound/AI/night.ogg differ diff --git a/sound/AI/night2.ogg b/sound/AI/night2.ogg new file mode 100644 index 000000000..d906c8a0e Binary files /dev/null and b/sound/AI/night2.ogg differ diff --git a/sound/AI/personal/brute.ogg b/sound/AI/personal/brute.ogg new file mode 100644 index 000000000..1ed0e3ce3 Binary files /dev/null and b/sound/AI/personal/brute.ogg differ diff --git a/sound/AI/personal/cleaning.ogg b/sound/AI/personal/cleaning.ogg new file mode 100644 index 000000000..774d0584c Binary files /dev/null and b/sound/AI/personal/cleaning.ogg differ diff --git a/sound/AI/personal/seekmedical.ogg b/sound/AI/personal/seekmedical.ogg new file mode 100644 index 000000000..af1a27e2d Binary files /dev/null and b/sound/AI/personal/seekmedical.ogg differ diff --git a/sound/music/goodbyespaceman.ogg b/sound/music/goodbyespaceman.ogg deleted file mode 100644 index e57de8f8d..000000000 Binary files a/sound/music/goodbyespaceman.ogg and /dev/null differ diff --git a/tgstation.dme b/tgstation.dme index 66d4b731a..ae5e4b055 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -133,6 +133,7 @@ #include "code\__HELPERS\icon_smoothing.dm" #include "code\__HELPERS\icons.dm" #include "code\__HELPERS\level_traits.dm" +#include "code\__HELPERS\markov.dm" #include "code\__HELPERS\matrices.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\mouse_control.dm" @@ -494,6 +495,7 @@ #include "code\datums\elements\squish.dm" #include "code\datums\elements\swimming.dm" #include "code\datums\elements\trash.dm" +#include "code\datums\elements\ventcrawling.dm" #include "code\datums\elements\wuv.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" @@ -884,7 +886,6 @@ #include "code\game\objects\items\inducer.dm" #include "code\game\objects\items\kitchen.dm" #include "code\game\objects\items\latexballoon.dm" -#include "code\game\objects\items\lorebooks.dm" #include "code\game\objects\items\manuals.dm" #include "code\game\objects\items\mesmetron.dm" #include "code\game\objects\items\miscellaneous.dm" @@ -2325,6 +2326,9 @@ #include "code\modules\mob\living\simple_animal\friendly\drone\say.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\verbs.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\visuals_icons.dm" +#include "code\modules\mob\living\simple_animal\gremlin\gremlin.dm" +#include "code\modules\mob\living\simple_animal\gremlin\gremlin_act.dm" +#include "code\modules\mob\living\simple_animal\gremlin\gremlin_event.dm" #include "code\modules\mob\living\simple_animal\guardian\guardian.dm" #include "code\modules\mob\living\simple_animal\guardian\guardiannaming.dm" #include "code\modules\mob\living\simple_animal\guardian\types\assassin.dm" @@ -3093,6 +3097,7 @@ #include "hyperstation\code\datums\components\crafting\bounties.dm" #include "hyperstation\code\datums\components\crafting\recipes.dm" #include "hyperstation\code\datums\elements\holder_micro.dm" +#include "hyperstation\code\datums\elements\spooky.dm" #include "hyperstation\code\datums\mood_events\events.dm" #include "hyperstation\code\datums\ruins\lavaland.dm" #include "hyperstation\code\datums\traits\good.dm" @@ -3147,10 +3152,13 @@ #include "hyperstation\code\modules\cargo\sweatshop\sweatshop.dm" #include "hyperstation\code\modules\cargo\sweatshop\wooden.dm" #include "hyperstation\code\modules\client\loadout\glasses.dm" +#include "hyperstation\code\modules\client\loadout\gloves.dm" +#include "hyperstation\code\modules\client\loadout\neck.dm" #include "hyperstation\code\modules\client\loadout\tablet.dm" #include "hyperstation\code\modules\clothing\clothing.dm" #include "hyperstation\code\modules\clothing\gloves.dm" #include "hyperstation\code\modules\clothing\head.dm" +#include "hyperstation\code\modules\clothing\sizeaccessories.dm" #include "hyperstation\code\modules\clothing\glasses\polychromic_glasses.dm" #include "hyperstation\code\modules\clothing\spacesuits\hardsuit.dm" #include "hyperstation\code\modules\clothing\suits\misc.dm" @@ -3159,6 +3167,7 @@ #include "hyperstation\code\modules\events\crystalline_reentry.dm" #include "hyperstation\code\modules\events\crystalloid_entities.dm" #include "hyperstation\code\modules\food_and_drinks\recipes\drinks_recipes.dm" +#include "hyperstation\code\modules\hydroponics\grown\kalyna.dm" #include "hyperstation\code\modules\integrated_electronics\input.dm" #include "hyperstation\code\modules\jobs\job_types\roleplay.dm" #include "hyperstation\code\modules\mining\shelters.dm" @@ -3166,12 +3175,15 @@ #include "hyperstation\code\modules\mob\mob_helpers.dm" #include "hyperstation\code\modules\mob\dead\new_player\sprite_accessories.dm" #include "hyperstation\code\modules\mob\living\status_indicators.dm" +#include "hyperstation\code\modules\mob\living\carbon\carbon.dm" #include "hyperstation\code\modules\mob\living\silicon\robot\robot.dm" #include "hyperstation\code\modules\mob\living\silicon\robot\robot_modules.dm" #include "hyperstation\code\modules\patreon\patreon.dm" +#include "hyperstation\code\modules\power\reactor\fluffed.dm" #include "hyperstation\code\modules\power\reactor\fuel_rods.dm" #include "hyperstation\code\modules\power\reactor\rbmk.dm" #include "hyperstation\code\modules\power\reactor\reactor_cargo.dm" +#include "hyperstation\code\modules\reagents\chemistry\reagents\alcohol_reagents.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\drink_reagents.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\food_reagents.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\hydroponics_reactions.dm" @@ -3203,6 +3215,7 @@ #include "hyperstation\code\obj\sounding.dm" #include "hyperstation\code\obj\stargate_clothing.dm" #include "hyperstation\code\obj\vibrator.dm" +#include "hyperstation\code\obj\items\lorebooks.dm" #include "hyperstation\code\obj\SYSuit\abilities.dm" #include "hyperstation\code\obj\SYSuit\main.dm" #include "hyperstation\code\obj\SYSuit\suit_initialize.dm" diff --git a/tgui/packages/tgui/interfaces/@UNUSED/Bepis.js b/tgui/packages/tgui/interfaces/@UNUSED/Bepis.js index 80e3124e7..0a61c3a1f 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/Bepis.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/Bepis.js @@ -9,7 +9,7 @@ export const Bepis = (props, context) => { amount, } = data; return ( - +
{ const { act, data } = useBackend(context); return ( - +
diff --git a/tgui/packages/tgui/interfaces/@UNUSED/ChemDebugSynthesizer.js b/tgui/packages/tgui/interfaces/@UNUSED/ChemDebugSynthesizer.js index 6824075d7..2309dfeb7 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/ChemDebugSynthesizer.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/ChemDebugSynthesizer.js @@ -13,7 +13,7 @@ export const ChemDebugSynthesizer = (props, context) => { beakerContents = [], } = data; return ( - +
{ pill_styles = [], } = data; return ( - +
diff --git a/tgui/packages/tgui/interfaces/@UNUSED/ChemSplitter.js b/tgui/packages/tgui/interfaces/@UNUSED/ChemSplitter.js index 2ce2da813..bedfdfb4f 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/ChemSplitter.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/ChemSplitter.js @@ -11,7 +11,7 @@ export const ChemSplitter = (props, context) => { max_transfer, } = data; return ( - +
diff --git a/tgui/packages/tgui/interfaces/@UNUSED/DecalPainter.js b/tgui/packages/tgui/interfaces/@UNUSED/DecalPainter.js index f649091f9..5240d9a6d 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/DecalPainter.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/DecalPainter.js @@ -8,7 +8,7 @@ export const DecalPainter = (props, context) => { const color_list = data.color_list || []; const dir_list = data.dir_list || []; return ( - +
{decal_list.map(decal => { diff --git a/tgui/packages/tgui/interfaces/@UNUSED/MedicalKiosk.js b/tgui/packages/tgui/interfaces/@UNUSED/MedicalKiosk.js index bd93f6b62..062d904fc 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/MedicalKiosk.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/MedicalKiosk.js @@ -6,7 +6,7 @@ import { Window } from '../../layouts'; export const MedicalKiosk = (props, context) => { const { act, data } = useBackend(context); return ( - +
{ const { act, data } = useBackend(context); return ( - +
{ stackPercentState = 'bad'; } return ( - + {!data.anchored && ( Generator not anchored. diff --git a/tgui/packages/tgui/interfaces/@UNUSED/SyndContractor.js b/tgui/packages/tgui/interfaces/@UNUSED/SyndContractor.js index 059435b1b..7946dd450 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/SyndContractor.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/SyndContractor.js @@ -149,7 +149,7 @@ export const SyndContractor = (props, context) => { } return ( - + {errorPane} diff --git a/tgui/packages/tgui/interfaces/@UNUSED/VaultController.js b/tgui/packages/tgui/interfaces/@UNUSED/VaultController.js index 9c8746ed2..f8e73f8ff 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/VaultController.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/VaultController.js @@ -6,7 +6,7 @@ import { Window } from '../../layouts'; export const VaultController = (props, context) => { const { act, data } = useBackend(context); return ( - +
{ + }}> + {toFixed(data.stored/1000)} / {toFixed(data.max/1000)} kW +
diff --git a/tgui/packages/tgui/interfaces/@UNUSED/Vending.js b/tgui/packages/tgui/interfaces/@UNUSED/Vending.js index 500f2c287..05bded736 100644 --- a/tgui/packages/tgui/interfaces/@UNUSED/Vending.js +++ b/tgui/packages/tgui/interfaces/@UNUSED/Vending.js @@ -24,7 +24,7 @@ export const Vending = (props, context) => { ]; } return ( - + {data.onstation && (
diff --git a/tgui/packages/tgui/interfaces/AiAirlock.js b/tgui/packages/tgui/interfaces/AiAirlock.js index 194fc30be..a33b9170b 100644 --- a/tgui/packages/tgui/interfaces/AiAirlock.js +++ b/tgui/packages/tgui/interfaces/AiAirlock.js @@ -23,7 +23,7 @@ export const AiAirlock = (props, context) => { const statusBackup = dangerMap[data.power.backup] || dangerMap[0]; const statusElectrify = dangerMap[data.shock] || dangerMap[0]; return ( - +
diff --git a/tgui/packages/tgui/interfaces/AirAlarm.js b/tgui/packages/tgui/interfaces/AirAlarm.js index f0178a445..fc7faa89a 100644 --- a/tgui/packages/tgui/interfaces/AirAlarm.js +++ b/tgui/packages/tgui/interfaces/AirAlarm.js @@ -9,7 +9,7 @@ export const AirAlarm = (props, context) => { const locked = data.locked && !data.siliconUser; return ( - + { }; return ( - +
diff --git a/tgui/packages/tgui/interfaces/Apc.js b/tgui/packages/tgui/interfaces/Apc.js index 0f2364b73..9473fd8ff 100644 --- a/tgui/packages/tgui/interfaces/Apc.js +++ b/tgui/packages/tgui/interfaces/Apc.js @@ -56,24 +56,28 @@ export const Apc = (props, context) => { if (data.failTime > 0) { return ( - -

SYSTEM FAILURE

- - I/O regulators malfunction detected! - Waiting for system reboot... - -
- Automatic reboot in {data.failTime} seconds... -