diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 57a52c6580b..b3ad68c1d96 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -941,6 +941,82 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"abU" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/stamp/denied{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stamp, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/machinery/bounty_board{ + dir = 4; + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/quartermaster/office) +"abV" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) +"abW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/bounty_board{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/engine/break_room) +"abX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/machinery/bounty_board{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white, +/area/science/research) +"abY" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/bounty_board{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "abZ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -1000,6 +1076,39 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) +"acg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/security/brig) +"ach" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 1; + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark, +/area/bridge) "aco" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -14408,17 +14517,6 @@ }, /turf/closed/wall, /area/hallway/secondary/service) -"aFZ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "aGa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -25593,23 +25691,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"aYQ" = ( -/obj/structure/table/reinforced, -/obj/item/folder, -/obj/item/stamp/denied{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stamp, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) "aYR" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm{ @@ -42259,19 +42340,6 @@ heat_capacity = 1e+006 }, /area/engine/storage_shared) -"bCP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) "bCQ" = ( /obj/machinery/firealarm{ pixel_y = 24 @@ -46056,21 +46124,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"bIM" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/bridge) "bIN" = ( /obj/machinery/status_display/evac, /turf/closed/wall, @@ -87781,15 +87834,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"dhn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "dho" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -140774,7 +140818,7 @@ bwx bxJ bzm bAU -bCP +abW bEF bGl bHW @@ -149561,7 +149605,7 @@ cMY cMY cMY cMY -dgz +abX cQL gPv cOR @@ -151023,7 +151067,7 @@ aBx aCD aDJ aEM -aFZ +abV aHq aIS aKr @@ -154655,7 +154699,7 @@ bzP bDB bFq bHa -bIM +ach bKH bMx bOG @@ -158745,7 +158789,7 @@ aSi aTY aVF aXp -aYQ +abU baP aTO bdV @@ -162154,7 +162198,7 @@ dbq xAi gIO vTA -dhn +abY diz dkp cNz @@ -167760,7 +167804,7 @@ byJ bAl bCe bEc -bmh +acg bHA bJw bLn diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 0386e7de7d6..424515d4deb 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -18805,6 +18805,10 @@ "aSE" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, +/obj/machinery/bounty_board{ + dir = 4; + pixel_x = 32 + }, /turf/open/floor/plasteel, /area/bridge) "aSF" = ( @@ -25556,19 +25560,18 @@ /turf/open/floor/plasteel/dark, /area/medical/morgue) "biF" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1; - sortType = 2 +/obj/effect/turf_decal/tile/purple{ + dir = 1 }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel/white, +/area/science/lab) "biG" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -30577,6 +30580,10 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "bub" = ( @@ -32095,6 +32102,23 @@ /obj/machinery/navbeacon/wayfinding, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) +"bxH" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1; + sortType = 2 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/bounty_board{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/quartermaster/office) "bxI" = ( /obj/machinery/status_display/ai, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -32102,6 +32126,31 @@ }, /turf/closed/wall, /area/storage/mining) +"bxJ" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/bounty_board{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark/corner{ + dir = 1 + }, +/area/engine/break_room) +"bxK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 1; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/security/brig) "bxL" = ( /obj/machinery/camera{ c_tag = "Central Hallway South-East"; @@ -33759,6 +33808,20 @@ }, /turf/closed/wall, /area/quartermaster/miningdock) +"bBI" = ( +/obj/machinery/power/apc{ + areastring = "/area/hallway/secondary/service"; + dir = 1; + name = "Service Hall APC"; + pixel_y = 23 + }, +/obj/structure/cable, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) "bBK" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -52586,16 +52649,6 @@ /obj/structure/cable, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/cmo) -"jbf" = ( -/obj/machinery/power/apc{ - areastring = "/area/hallway/secondary/service"; - dir = 1; - name = "Service Hall APC"; - pixel_y = 23 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "jcM" = ( /obj/machinery/camera{ c_tag = "Public Mining Ladder"; @@ -80217,7 +80270,7 @@ pVb bgB bhX bgv -biF +bxH bkw bnE bny @@ -87881,7 +87934,7 @@ aHp aIF ajc aja -akp +bxK agj alA amm @@ -87959,7 +88012,7 @@ bUF bVN bWN bLK -bYL +bxJ bRi bZy cbu @@ -97922,7 +97975,7 @@ alP anf anf cVb -jbf +bBI wrp fnC kPd @@ -104887,7 +104940,7 @@ aXq aYV bfX bhC -biU +biF bks blI bpf diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 0a458d424c1..29a40a64e4c 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -178,6 +178,17 @@ }, /turf/open/floor/plasteel/dark, /area/security/execution/education) +"aaD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/security/brig) "aaE" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -281,6 +292,38 @@ }, /turf/open/floor/plasteel/dark, /area/security/execution/education) +"aaJ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/bounty_board{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"aaK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/bounty_board{ + dir = 4; + pixel_x = 32 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"aaL" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aaM" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -390,6 +433,20 @@ }, /turf/open/floor/plasteel/dark, /area/security/execution/education) +"aaR" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 1; + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark, +/area/bridge) "aaS" = ( /obj/structure/sink/kitchen{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -528,6 +585,46 @@ /obj/effect/turf_decal/tile/bar, /turf/open/floor/plasteel, /area/crew_quarters/bar) +"abg" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel/white, +/area/science/research) +"abh" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_x = -2 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/camera{ + c_tag = "Engineering - Desk"; + dir = 1 + }, +/obj/item/trash/can{ + pixel_x = -14 + }, +/obj/machinery/bounty_board{ + dir = 1; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/engine/break_room) "abn" = ( /obj/item/radio/intercom{ pixel_x = -28 @@ -5682,13 +5779,6 @@ /obj/item/clothing/suit/hooded/ablative, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"ama" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/security/brig) "amb" = ( /obj/structure/closet/secure_closet/security/sec, /obj/effect/turf_decal/tile/red, @@ -76471,31 +76561,6 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/open/floor/plating, /area/maintenance/port/aft) -"sfR" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_guide{ - pixel_x = -2 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/camera{ - c_tag = "Engineering - Desk"; - dir = 1 - }, -/obj/item/trash/can{ - pixel_x = -14 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) "sht" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -100150,7 +100215,7 @@ bgR niJ bkq bmk -boc +aaJ bqt bsy buh @@ -103275,7 +103340,7 @@ crx csv ctw cuq -cvs +aaK cvs cxk cxX @@ -106319,7 +106384,7 @@ biZ bkE bmy bmA -bot +aaR bsU bux bsU @@ -108342,7 +108407,7 @@ dCf alV asu atS -ama +aaD awi axj uNe @@ -110727,7 +110792,7 @@ caw crK csV ctN -cGg +abg cvM cwM gjC @@ -120714,7 +120779,7 @@ jUn lci pmZ qdT -sfR +abh bxd bAD bCj diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index c9b7f6e9ec2..a83d5cf55a9 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -122,6 +122,19 @@ "aw" = ( /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/explored) +"ax" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/mine/production) "ay" = ( /obj/structure/sink/kitchen{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -20384,7 +20397,7 @@ cl cH cO cX -ck +ax dJ ia cn diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 7f16f57179b..5896773f179 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -16,6 +16,23 @@ /obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, /area/maintenance/disposal/incinerator) +"aad" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 4; + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/security/brig) "aae" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -384,6 +401,72 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"aaZ" = ( +/obj/machinery/door/poddoor/preopen{ + id = "bridgespace"; + name = "bridge external shutters" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"aba" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/kirbyplants/photosynthetic{ + pixel_y = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 1; + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark, +/area/science/explab) +"abb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/bounty_board{ + dir = 1; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"abc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/machinery/bounty_board{ + dir = 8; + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/quartermaster/office) +"abd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/bounty_board{ + dir = 4; + pixel_x = 32 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "abf" = ( /obj/structure/bed, /turf/open/floor/plating, @@ -7003,19 +7086,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"asF" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/brig) "asG" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -30031,20 +30101,6 @@ }, /turf/closed/wall, /area/science/explab) -"byT" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/item/kirbyplants/photosynthetic{ - pixel_y = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/science/explab) "byU" = ( /obj/structure/chair/comfy{ dir = 4 @@ -33342,13 +33398,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bFT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "bFU" = ( /turf/closed/wall, /area/medical/surgery) @@ -42075,13 +42124,6 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/engine/engineering) -"cat" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "cau" = ( /obj/structure/rack, /obj/item/clothing/mask/gas{ @@ -84523,7 +84565,7 @@ ape agP aqA art -asF +aad ajM auG avF @@ -87095,7 +87137,7 @@ aqG arB asM atL -auK +aaZ avN awU axT @@ -87924,7 +87966,7 @@ bpP bCp bpP bEC -bFT +abd bHa bIi bJp @@ -91031,7 +91073,7 @@ bVN bYf bYW bZF -cat +abb bXk ccg cey @@ -97402,7 +97444,7 @@ aTf aUp hKm aVt -aVt +abc aVt aZm aPY @@ -97427,7 +97469,7 @@ bkt bkt bvL bxu -byT +aba bAB bBD bBD diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index ecfc686d311..eed78553275 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -712,7 +712,7 @@ GLOBAL_LIST_INIT(WALLITEMS, typecacheof(list( /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/simple_vent_controller, /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment, - /obj/structure/sign/picture_frame + /obj/structure/sign/picture_frame, /obj/machinery/bounty_board ))) GLOBAL_LIST_INIT(WALLITEMS_EXTERNAL, typecacheof(list( diff --git a/code/game/machinery/bounty_board.dm b/code/game/machinery/bounty_board.dm new file mode 100644 index 00000000000..393bbf35c49 --- /dev/null +++ b/code/game/machinery/bounty_board.dm @@ -0,0 +1,190 @@ +GLOBAL_LIST_EMPTY(allbountyboards) +GLOBAL_LIST_EMPTY(request_list) +/** + * A machine that acts basically like a quest board. + * Enables crew to create requests, crew can sign up to perform the request, and the requester can chose who to pay-out. + */ +/obj/machinery/bounty_board + name = "bounty board" + desc = "Alows you to place requests for goods and services across the station, as well as pay those who actually did it." + icon = 'icons/obj/terminals.dmi' + icon_state = "request_kiosk" + ui_x = 550 + ui_y = 600 + light_color = LIGHT_COLOR_GREEN + ///Reference to the currently logged in user. + var/datum/bank_account/current_user + ///The station request datum being affected by UI actions. + var/datum/station_request/active_request + ///Value of the currently bounty input + var/bounty_value = 1 + ///Text of the currently written bounty + var/bounty_text = "" + +/obj/machinery/bounty_board/Initialize(mapload, ndir, building) + . = ..() + GLOB.allbountyboards += src + if(building) + setDir(ndir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir ==1 ? -32 : 32) : 0 + +/obj/machinery/bounty_board/Destroy() + GLOB.allbountyboards -= src + . = ..() + +/obj/machinery/bounty_board/attackby(obj/item/I, mob/living/user, params) + . = ..() + if(istype(I,/obj/item/card/id)) + var/obj/item/card/id/current_card = I + if(current_card.registered_account) + current_user = current_card.registered_account + return TRUE + to_chat(user, "There's no account assigned with this ID.") + return TRUE + if(I.tool_behaviour == TOOL_WRENCH) + to_chat(user, "You start [anchored ? "un" : ""]securing [name]...") + I.play_tool_sound(src) + if(I.use_tool(src, user, 30)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + if(machine_stat & BROKEN) + to_chat(user, "The broken remains of [src] fall on the ground.") + new /obj/item/stack/sheet/metal(loc, 3) + new /obj/item/shard(loc) + else + to_chat(user, "You [anchored ? "un" : ""]secure [name].") + new /obj/item/wallframe/bounty_board(loc) + qdel(src) + +/obj/machinery/bounty_board/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "RequestKiosk", name, ui_x, ui_y, master_ui, state) + ui.open() + +/obj/machinery/bounty_board/ui_data(mob/user) + var/list/data = list() + var/list/formatted_requests = list() + var/list/formatted_applicants = list() + for(var/i in GLOB.request_list) + if(!i) + continue + var/datum/station_request/request = i + formatted_requests += list(list("owner" = request.owner, "value" = request.value, "description" = request.description, "acc_number" = request.req_number)) + if(request.applicants) + for(var/datum/bank_account/j in request.applicants) + formatted_applicants += list(list("name" = j.account_holder, "request_id" = request.owner_account.account_id, "requestee_id" = j.account_id)) + var/obj/item/card/id/id_card = user.get_idcard() + if(id_card?.registered_account) + current_user = id_card.registered_account + if(current_user) + data["accountName"] = current_user.account_holder + data["requests"] = formatted_requests + data["applicants"] = formatted_applicants + data["bountyValue"] = bounty_value + data["bountyText"] = bounty_text + return data + +/obj/machinery/bounty_board/ui_act(action, list/params) + if(..()) + return + var/current_ref_num = params["request"] + var/current_app_num = params["applicant"] + var/datum/bank_account/request_target + if(current_ref_num) + for(var/datum/station_request/i in GLOB.request_list) + if("[i.req_number]" == "[current_ref_num]") + active_request = i + break + if(active_request) + for(var/datum/bank_account/j in active_request.applicants) + if("[j.account_id]" == "[current_app_num]") + request_target = j + break + switch(action) + if("createBounty") + if(!current_user || !bounty_text) + playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + for(var/datum/station_request/i in GLOB.request_list) + if("[i.req_number]" == "[current_user.account_id]") + say("Account already has active bounty.") + return + var/datum/station_request/curr_request = new /datum/station_request(current_user.account_holder, bounty_value,bounty_text,current_user.account_id, current_user) + GLOB.request_list += list(curr_request) + for(var/obj/i in GLOB.allbountyboards) + i.say("New bounty has been added!") + playsound(i.loc, 'sound/effects/cashregister.ogg', 30, TRUE) + if("apply") + if(!current_user) + say("Please swipe a valid ID first.") + return TRUE + if(current_user.account_holder == active_request.owner) + playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + active_request.applicants += list(current_user) + if("payApplicant") + if(!current_user) + return + if(!current_user.has_money(active_request.value) || (current_user.account_holder != active_request.owner)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + return + request_target.transfer_money(current_user, active_request.value) + say("Paid out [active_request.value] credits.") + return TRUE + if("clear") + if(current_user) + current_user = null + say("Account Reset.") + return TRUE + if("deleteRequest") + if(!active_request || !current_user) + playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return FALSE + if(active_request?.owner != current_user?.account_holder) + playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + say("Deleted current request.") + GLOB.request_list.Remove(active_request) + return TRUE + if("bountyVal") + bounty_value = text2num(params["bountyval"]) + if(!bounty_value) + bounty_value = 1 + if("bountyText") + bounty_text = (params["bountytext"]) + . = TRUE + +/obj/item/wallframe/bounty_board + name = "disassembled bounty board" + desc = "Used to build a new bounty board, just secure to the wall." + icon_state = "request_kiosk" + custom_materials = list(/datum/material/iron=14000, /datum/material/glass=8000) + result_path = /obj/machinery/bounty_board + +/** + * A combined all in one datum that stores everything about the request, the requester's account, as well as the requestee's account + * All of this is passed to the Request Console UI in order to present in organized way. + */ +/datum/station_request + ///Name of the Request Owner. + var/owner + ///Value of the request. + var/value + ///Text description of the request to be shown within the UI. + var/description + ///Internal number of the request for organizing. Id card number. + var/req_number + ///The account of the request owner. + var/datum/bank_account/owner_account + ///the account of the request fulfiller. + var/list/applicants = list() + +/datum/station_request/New(var/owned, var/newvalue, var/newdescription, var/reqnum, var/own_account) + . = ..() + owner = owned + value = newvalue + description = newdescription + req_number = reqnum + if(istype(own_account, /datum/bank_account)) + owner_account = own_account diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm new file mode 100644 index 00000000000..ebe7c48438c --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -0,0 +1,122 @@ +/datum/computer_file/program/bounty_board + filename = "bountyboard" + filedesc = "Bounty Board Request Network" + program_icon_state = "bountyboard" + extended_desc = "A multi-platform network for placing requests across the station, with payment across the network being possible.." + requires_ntnet = TRUE + network_destination = "bounty board interface" + size = 10 + tgui_id = "NtosRequestKiosk" + ui_x = 550 + ui_y = 600 + ///Reference to the currently logged in user. + var/datum/bank_account/current_user + ///The station request datum being affected by UI actions. + var/datum/station_request/active_request + ///Value of the currently bounty input + var/bounty_value = 1 + ///Text of the currently written bounty + var/bounty_text = "" + ///Has the app been added to the network yet? + var/networked = FALSE + +/datum/computer_file/program/bounty_board/ui_data(mob/user) + var/list/data = get_header_data() + var/list/formatted_requests = list() + var/list/formatted_applicants = list() + var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] + if(!networked) + GLOB.allbountyboards += computer + networked = TRUE + if(card_slot && card_slot.stored_card && card_slot.stored_card.registered_account) + current_user = card_slot.stored_card.registered_account + for(var/i in GLOB.request_list) + if(!i) + continue + var/datum/station_request/request = i + formatted_requests += list(list("owner" = request.owner, "value" = request.value, "description" = request.description, "acc_number" = request.req_number)) + if(request.applicants) + for(var/datum/bank_account/j in request.applicants) + formatted_applicants += list(list("name" = j.account_holder, "request_id" = request.owner_account.account_id, "requestee_id" = j.account_id)) + if(current_user) + data["accountName"] = current_user.account_holder + data["requests"] = formatted_requests + data["applicants"] = formatted_applicants + data["bountyValue"] = bounty_value + data["bountyText"] = bounty_text + return data + +/datum/computer_file/program/bounty_board/ui_act(action, list/params) + if(..()) + return + var/current_ref_num = params["request"] + var/current_app_num = params["applicant"] + var/datum/bank_account/request_target + if(current_ref_num) + for(var/datum/station_request/i in GLOB.request_list) + if("[i.req_number]" == "[current_ref_num]") + active_request = i + break + if(active_request) + for(var/datum/bank_account/j in active_request.applicants) + if("[j.account_id]" == "[current_app_num]") + request_target = j + break + switch(action) + if("createBounty") + if(!current_user || !bounty_text) + playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + for(var/datum/station_request/i in GLOB.request_list) + if("[i.req_number]" == "[current_user.account_id]") + computer.say("Account already has active bounty.") + return + var/datum/station_request/curr_request = new /datum/station_request(current_user.account_holder, bounty_value,bounty_text,current_user.account_id, current_user) + GLOB.request_list += list(curr_request) + for(var/obj/i in GLOB.allbountyboards) + i.say("New bounty has been added!") + playsound(i.loc, 'sound/effects/cashregister.ogg', 30, TRUE) + return TRUE + if("apply") + if(!current_user) + computer.say("Please swipe a valid ID first.") + return TRUE + if(current_user.account_holder == active_request.owner) + playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + active_request.applicants += list(current_user) + if("payApplicant") + if(!current_user) + return + if(!current_user.has_money(active_request.value) || (current_user.account_holder != active_request.owner)) + playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + return + request_target.transfer_money(current_user, active_request.value) + computer.say("Paid out [active_request.value] credits.") + return TRUE + if("clear") + if(current_user) + current_user = null + computer.say("Account Reset.") + return TRUE + if("deleteRequest") + if(!current_user) + playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + if(active_request.owner != current_user.account_holder) + playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + return TRUE + computer.say("Deleted current request.") + GLOB.request_list.Remove(active_request) + return TRUE + if("bountyVal") + bounty_value = text2num(params["bountyval"]) + if(!bounty_value) + bounty_value = 1 + if("bountyText") + bounty_text = (params["bountytext"]) + . = TRUE + +/datum/computer_file/program/bounty_board/Destroy() + GLOB.allbountyboards -= computer + . = ..() diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 4cb26f98b2a..8445d5d047c 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -737,6 +737,14 @@ build_path = /obj/item/wallframe/newscaster category = list("initial", "Construction") +/datum/design/bounty_board_frame + name = "Bounty Board Frame" + id = "bountyboard_frame" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 14000, /datum/material/glass = 8000) + build_path = /obj/item/wallframe/bounty_board + category = list("initial", "Construction") + /datum/design/syringe name = "Syringe" id = "syringe" diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index e0671833ad6..fb03ee3f4b3 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/modular_console.dmi b/icons/obj/modular_console.dmi index 2ce4de2fe57..71fb225b97e 100644 Binary files a/icons/obj/modular_console.dmi and b/icons/obj/modular_console.dmi differ diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/modular_laptop.dmi index 76c38f8efa1..4c7f838db41 100644 Binary files a/icons/obj/modular_laptop.dmi and b/icons/obj/modular_laptop.dmi differ diff --git a/icons/obj/modular_tablet.dmi b/icons/obj/modular_tablet.dmi index ecaa7395cd6..32edb57475e 100644 Binary files a/icons/obj/modular_tablet.dmi and b/icons/obj/modular_tablet.dmi differ diff --git a/icons/obj/terminals.dmi b/icons/obj/terminals.dmi index a3ad55381a0..131bcb5006d 100644 Binary files a/icons/obj/terminals.dmi and b/icons/obj/terminals.dmi differ diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi index 70149901e33..6cab466bf08 100644 Binary files a/icons/obj/wallframe.dmi and b/icons/obj/wallframe.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 4a9e3acd0ed..ef534df467e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -718,6 +718,7 @@ #include "code\game\machinery\autolathe.dm" #include "code\game\machinery\bank_machine.dm" #include "code\game\machinery\Beacon.dm" +#include "code\game\machinery\bounty_board.dm" #include "code\game\machinery\buttons.dm" #include "code\game\machinery\canister_frame.dm" #include "code\game\machinery\cell_charger.dm" @@ -2485,6 +2486,7 @@ #include "code\modules\modular_computers\file_system\programs\arcade.dm" #include "code\modules\modular_computers\file_system\programs\atmosscan.dm" #include "code\modules\modular_computers\file_system\programs\borg_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\bounty_board.dm" #include "code\modules\modular_computers\file_system\programs\card.dm" #include "code\modules\modular_computers\file_system\programs\cargobounty.dm" #include "code\modules\modular_computers\file_system\programs\cargoship.dm" diff --git a/tgui/packages/tgui/interfaces/NtosRequestKiosk.js b/tgui/packages/tgui/interfaces/NtosRequestKiosk.js new file mode 100644 index 00000000000..800b29db2bf --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosRequestKiosk.js @@ -0,0 +1,12 @@ +import { RequestKioskContent } from './RequestKiosk'; +import { NtosWindow } from '../layouts'; + +export const NtosRequestKiosk = (props, context) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RequestKiosk.js b/tgui/packages/tgui/interfaces/RequestKiosk.js new file mode 100644 index 00000000000..c14ef50320a --- /dev/null +++ b/tgui/packages/tgui/interfaces/RequestKiosk.js @@ -0,0 +1,156 @@ +import { filter, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; +import { classes } from 'common/react'; +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Collapsible, Flex, LabeledList, NumberInput, Section, TextArea } from '../components'; +import { formatMoney } from '../format'; +import { refocusLayout, Window } from '../layouts'; + +export const RequestKiosk = (props, context) => { + return ( + + + + + + ); +}; + +export const RequestKioskContent = (props, context) => { + const { act, data } = useBackend(context); + const { + accountName, + requests = [], + applicants = [], + bountyValue, + bountyText, + } = data; + const color = 'rgba(13, 13, 213, 0.7)'; + const backColor = 'rgba(0, 0, 69, 0.5)'; + return ( + +
+ + act('clear')} /> + )}> + {accountName || 'N/A'} + + +
+ + + {requests?.map(request => ( + +
+ + + {request.owner} + + + {formatMoney(request.value) + ' cr'} + + +
+ +
+ ))} +
+ + +
+