diff --git a/code/game/objects/structures/watercloset_vr.dm b/code/game/objects/structures/watercloset_vr.dm index 7e8790fbcc..2239764639 100644 --- a/code/game/objects/structures/watercloset_vr.dm +++ b/code/game/objects/structures/watercloset_vr.dm @@ -4,30 +4,55 @@ /obj/structure/toilet var/teleplumbed = FALSE var/exit_landmark + var/exit_container + var/refill_cooldown = 200 + var/refilling = FALSE /obj/structure/toilet/Initialize() if(z in global.using_map.map_levels) teleplumbed = TRUE exit_landmark = locate(/obj/effect/landmark/teleplumb_exit) + exit_container = locate(/obj/structure/biowaste_tank) + if(exit_container) + exit_landmark = exit_container if(teleplumbed && exit_landmark) desc = "The BS-500, a bluespace rift-rotation-based waste disposal unit for small matter. This one seems remarkably clean." return ..() /obj/structure/toilet/attack_hand(mob/living/user as mob) - if(open && teleplumbed && exit_landmark) + if(open && teleplumbed && exit_landmark && !refilling) var/list/bowl_contents = list() for(var/obj/item/I in loc.contents) if(istype(I) && !I.anchored) bowl_contents += I if(bowl_contents.len) + refilling = TRUE user.visible_message("[user] flushes the toilet.", "You flush the toilet.") playsound(src, 'sound/vore/death7.ogg', 50, 1) //Got lazy about getting new sound files. Have a sick remix lmao. playsound(src, 'sound/effects/bubbles.ogg', 50, 1) playsound(src, 'sound/mecha/powerup.ogg', 30, 1) + var/bowl_conga = 0 for(var/obj/item/F in bowl_contents) - F.forceMove(get_turf(exit_landmark)) - bowl_contents -= F + if(bowl_conga < 150) + bowl_conga += 2 + spawn(3 + bowl_conga) + F.SpinAnimation(5,3) + spawn(15) + F.forceMove(src) + spawn(refill_cooldown) + for(var/obj/item/F in bowl_contents) + F.forceMove(exit_landmark) + bowl_contents.Cut() + refilling = FALSE return + if(refilling) + playsound(src, 'sound/machines/door_locked.ogg', 30, 1) + to_chat(user, "The toilet is still refilling its tank.") + return ..() + +/obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob) + if(refilling) //No cistern interactions until bowl contents have been dealt with. + return return ..() /obj/structure/toilet/attack_ai(mob/user as mob) @@ -39,3 +64,78 @@ /obj/effect/landmark/teleplumb_exit name = "teleplumbing exit" + +/obj/effect/landmark/teleplumb_exit/Entered(atom/movable/thing, atom/OldLoc) + thing.forceMove(get_turf(src)) + +/obj/structure/biowaste_tank + name = "Bluespace Bio-Compostor Terminal" + icon = 'icons/obj/survival_pod_comp.dmi' + icon_state = "pod_computer" + desc = "It appears to be a massive sealed container attached to some heavy machinery and thick tubes containing a whole network of interdimensional pipeworks. It appears whatever vanished down the station's toilets ends up in this thing." + anchored = TRUE + density = TRUE + var/muffin_mode = FALSE + var/mob/living/simple_mob/vore/aggressive/corrupthound/muffinmonster + +/obj/structure/biowaste_tank/Initialize() + muffinmonster = new /mob/living/simple_mob/vore/aggressive/corrupthound/muffinmonster(src) + muffinmonster.name = "Activate Muffin Monster" + muffinmonster.voremob_loaded = TRUE + muffinmonster.init_vore() + return ..() + +/obj/structure/biowaste_tank/AllowDrop() + return TRUE + +/obj/structure/biowaste_tank/Entered(atom/movable/thing, atom/OldLoc) + if(istype(thing, /obj/item/weapon/reagent_containers/food)) + qdel(thing) + return + if(istype(thing, /obj/item/organ)) + qdel(thing) + return + if(istype(thing, /obj/item/weapon/storage/vore_egg)) + if(thing.contents.len) + for(var/atom/movable/C in thing.contents) + C.forceMove(src) + qdel(thing) + return + if(muffin_mode) + if(muffinmonster) + thing.forceMove(muffinmonster.vore_selected) + else + muffin_mode = FALSE + +/obj/structure/biowaste_tank/attack_hand(var/mob/user as mob) + if(contents.len) + var/atom/movable/choice = tgui_input_list(usr, "It appears the machine has caught some items in the lost-and-found filter system. Would you like to eject something?", "Item Retrieval Console", contents) + if(choice) + if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + return + if(choice == muffinmonster && muffinmonster.loc == src) + muffin_mode = !muffin_mode + if(muffin_mode) + muffinmonster.name = "Deactivate Muffin Monster" + for(var/atom/movable/C in contents) + if(C == muffinmonster) + continue + C.forceMove(muffinmonster.vore_selected) + else + muffinmonster.name = "Activate Muffin Monster" + muffinmonster.release_vore_contents(include_absorbed = TRUE, silent = TRUE) + return + else + choice.forceMove(get_turf(src)) + +/obj/structure/biowaste_tank/emag_act(var/remaining_charges, var/mob/user, var/emag_source) + if(muffinmonster && muffin_mode) + muffinmonster.name = "Muffin Monster" + muffinmonster.forceMove(get_turf(src)) + muffinmonster = null + muffin_mode = FALSE + +/mob/living/simple_mob/vore/aggressive/corrupthound/muffinmonster + name = "Muffin Monster" + desc = "OH GOD IT'S LOOSE!" + vore_default_item_mode = IM_DIGEST \ No newline at end of file diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm index 35d5df7635..902c2c79e2 100644 --- a/maps/southern_cross/southern_cross-2.dmm +++ b/maps/southern_cross/southern_cross-2.dmm @@ -5073,7 +5073,7 @@ "cxn" = (/obj/machinery/conveyor{id = "garbage"},/turf/simulated/floor,/area/maintenance/disposal) "cxo" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/disposal) "cxp" = (/turf/simulated/floor,/area/maintenance/disposal) -"cxq" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/machinery/firealarm{layer = 3.3; pixel_y = 26},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/random/trash,/obj/random/trash,/obj/random/trash,/turf/simulated/floor,/area/maintenance/disposal) +"cxq" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/random/trash,/obj/random/trash,/obj/random/trash,/turf/simulated/floor,/area/maintenance/disposal) "cxr" = (/obj/machinery/light/small{dir = 8},/obj/random/trash_pile,/turf/simulated/floor,/area/maintenance/cargo) "cxs" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/maintenance/cargo) "cxu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/maintenance/cargo) @@ -5318,7 +5318,7 @@ "cEa" = (/obj/machinery/door/blast/regular{id = "trash"; name = "disposal mass driver"},/turf/simulated/floor/airless,/area/maintenance/disposal) "cEb" = (/obj/machinery/conveyor_switch/oneway{id = "garbage"; name = "disposal coveyor"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/button/remote/driver{id = "trash"; pixel_x = -26; pixel_y = -6},/turf/simulated/floor,/area/maintenance/disposal) "cEc" = (/obj/item/weapon/stool/padded,/turf/simulated/floor,/area/maintenance/disposal) -"cEd" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/weapon/storage/bag/trash,/obj/structure/table/gamblingtable,/turf/simulated/floor,/area/maintenance/disposal) +"cEd" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/weapon/storage/bag/trash,/obj/structure/table/gamblingtable,/obj/machinery/firealarm{dir = 8; layer = 3.3; pixel_x = 26},/turf/simulated/floor,/area/maintenance/disposal) "cEe" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/cargo) "cEf" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/maintenance/cargo) "cEg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "crg_aft_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -25; req_one_access = null},/turf/simulated/floor,/area/maintenance/cargo) @@ -6430,6 +6430,7 @@ "oqo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/dockhallway) "oqz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/medical/medbay2) "oqZ" = (/obj/structure/table/woodentable,/obj/item/device/camera,/turf/simulated/floor/carpet,/area/crew_quarters/seconddeck/gym) +"orq" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/structure/biowaste_tank,/obj/structure/railing,/turf/simulated/floor,/area/maintenance/disposal) "osg" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "ots" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2) "ouo" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -6479,7 +6480,7 @@ "oYz" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) "oZw" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/crew_quarters/seconddeck/gym) "oZL" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/glass_external{frequency = null; icon_state = "door_locked"; id_tag = null; locked = 1; name = "Dock Two Internal Airlock"; req_access = list(13)},/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2/arrivals) -"oZN" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/effect/landmark/teleplumb_exit,/turf/simulated/floor,/area/maintenance/disposal) +"oZN" = (/obj/machinery/conveyor{dir = 9; id = "garbage"},/obj/effect/landmark/teleplumb_exit,/turf/simulated/floor,/area/maintenance/disposal) "pbb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway2) "pbf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "pbF" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/simulated/floor/tiled,/area/medical/surgeryobs) @@ -7300,7 +7301,7 @@ aaaaaaaaaaaaaagaaaaaaaaaaIZaJaaJaaJaaJaaJaaJaaJacifaJaaJaaJaaTiaWlcigcihciIciJci aaaaaaaaaaaaaafaaaaaaaaaaTfbfFbfGbfFbfGbfFbfGbfFbfGbfFbfGbfFaTibfHaRpaRpcqfcqgcqhaTocqhcqjcfZcfZcqkaRpblXciObFHciPcqlcqmcqnbYUbYUcqpbYUqbwcqrcqscqtcsKcqucqvcqwcqxcqycqzcqAcqMcqMcqNckBcqOcqQcqRcqScqTcqUbXNcqVcqWcqXcqYcqZbXUiOIbYXuxtjiSiCsbYZaaaaaagfQgfQcrasqlcbgtBzcrlwdccrmbVDbVDbVDbVDcrnouTbZbouTbZdbZibZidJNbZibZibZicrobZjcbwbsgcrpbZkbZkaaaaaacmFuqjcbFcbFbZpbZqbZrbZscbJbZucrqbZvccQpxbcrrbZzbZzbZAbZBbZCcrsbZDcrtcaNcrucaMcrvcrwcrxcrycrzdOBcrAbZEbZFnjGbZGbZHbZIcdkbZKcrBbZLbZMbZMceBbZPbZQbAKceBceBcdraaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaqlFaafaaaaaaaaaaaa aaaaaaaaaaaaqlFaaaaaaaaaaKRbiDaKRbiDaKRbiDaKRbiDaKRbiDaKRbiDaafaafaafaRqaRpaRpaRpaRpaRpaRpaRpaRpaRpaRpblXcrCbGbciPcrDcqmcrEcuecuecrIcuecuecrVcrWcrXcsKcrYcsKcrZcsacsKcsbcsccsecsecsfcsgcshcdFcsjcskcsocswbXNcqVcsxcsycszcqYcsAbXUiOIcsBjiSiCsbYZaaaaaaaaabWCcsCcsDcbgcsEcsGwlgcsHcsIcalcsJctcjqwctdbUmctejqwctfctgcthcticamctjctkctlcbwcbxcapceTaaaaaaaaacmFkOlcaucbFcawcaxcaycazcbJcaCctmcaCccQcaEcaFcaGcaHcaIcaJcaKctncaLctocaNctpcaMctqbYwctrbYwcaOdOBctsctthBTnjGcaQcaRcaScdkcaUcaVeHwctGcaWbZUcaXcaYcaZctPcbacdraaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaagaagaaaaaaaaaaaaaaa aaaaaaaaaaaaaagaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaactQctRctSctTctUoZNctVctWctXctYctZcuaciPcubcuccudcuecrUcDacDccuecufcugcuecsKcuhcsKcuicujcsKcuCcuDcuEcuEcuGcuHcuCbXNcuIcuJcuKcuLbXNcuMcuMcuMcuNcuMcqYcqYcqYcsBjiSiCsjiSaaaaaaaaabWCbWCcuOcsDcbgcbgcuPcblcbncbncbocbpcbqcbrcbscbtcbqcuQcuRcuScuScuTcbucbwcbwcbxccEceTceTaaaaaaaaaclgkOlcbEcbFcbFcbGcbHcbIcbJcbKcuUcbLccQcbNcuVcbOcbPcbQcbRcbScuWcbTcbUcbVcuXdOBcvkcvlcvncvocvpdOBfmgcvqvzhnjGcbXcvrcvscdkcbZcdlccbcccccdceBccfccgcchcdrcdrcdraafaafaafhqqaafaaaaaaqlFaafaagaagaagaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaagaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaactQcvtcvJcvKcvLctQctQctQcvMcvOcvPcvQciPciPciPciPcuecElcvTcvUcEpcvVcvWcvXcvYcvZcwacwbcwccsKcwdcwecwfcwhcwucwvcwwbXNcdFcwxcdFcwybXNcwzcwAcwBcwCcuMjiSjiScwDjiSjiScwEjiSaaaaaaaaaaaabWCbWCcuOcsDsqlcwFcwGcwHcwHcsDcwIcwJcwKbUmcwMcwJcxccbxcxdcxdcxeccDbsgcbxccEceTceTaaaaaaaaaaaaclgkOlcxfcfccfdccLccMccNcxhccOcxiccPccQccQccQccQccTccSccTccUccWccVccWccXccWdOBcdbcdbcxjcdcdOBdOBcxkcxlcdfnjGcdkcdicdkcdkcbZcdlccbcxmcdmceBcdocdpcdqcdraaaaaaaaaaaaaaaaagaaaaaaaaaaaiuZKaaiaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaagaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaactQcvtcvJcvKcvLorqctQctQcvMcvOcvPcvQciPciPciPciPcuecElcvTcvUcEpcvVcvWcvXcvYcvZcwacwbcwccsKcwdcwecwfcwhcwucwvcwwbXNcdFcwxcdFcwybXNcwzcwAcwBcwCcuMjiSjiScwDjiSjiScwEjiSaaaaaaaaaaaabWCbWCcuOcsDsqlcwFcwGcwHcwHcsDcwIcwJcwKbUmcwMcwJcxccbxcxdcxdcxeccDbsgcbxccEceTceTaaaaaaaaaaaaclgkOlcxfcfccfdccLccMccNcxhccOcxiccPccQccQccQccQccTccSccTccUccWccVccWccXccWdOBcdbcdbcxjcdcdOBdOBcxkcxlcdfnjGcdkcdicdkcdkcbZcdlccbcxmcdmceBcdocdpcdqcdraaaaaaaaaaaaaaaaagaaaaaaaaaaaiuZKaaiaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaagaagaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacvKcxncvKcxocxpcxqctQcxrcxscGecxIcxKcxLcxMcxNcGfcuecxPkDdcxRcGmcxScxTcxUcxVcxWcuecxXcyicyjcykcymcwNcwNcyncyocypcyqcyrcyscytcyucuMcyvcywcyxcyycuMcyzcyAcyNcyPcyQcySjiSaaaaaaaaaaaaaaabWCbWCcyTcyUcyTcyVcyWcyVcyWcyWcyXiqfbUmiqfcyXcyYcyYmIdcyZcyYmIdczamIdceTceTaaaaaaaaaaaaaaaclgcdTcdUcfccdWcdXcdYcdZceacebcecceiczbceeczccefcegcehceicejcekcelcemczdbCYcencznceocepczpceqbCZcesczHcetceucevcewcexczIczJczKczYczZcAbceBceBceAceBcdraaaaaaaaaaaaaaaaagaaaaaaaaaaaiaaiaaiaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaagaagaagaagqlFaafaafaafqlFaagaagaagaagaafaagqlFaaaaaaaaacvKcAccAucAvcAxcAycAzcABcACcAJcAKcAMcxLcxMcxNfHhcuecANiYsoRMrRkcAPcAQcAVcAWcAXcAYpMvcBacBecBfcBgcBecBecBicBjcBkcBlcBscAZcBtcBucBvcBwcBxcBycBGcBHcyzcBIcBJcBKcqYcBLjiSaaaaaaaaacFUaaaaaabWCbWCgfQvpHcBMcBNcBOcBWvpHcBXiqfbUmiqfcBYklhcBZcCacCbcCeklhbZkceTceTaaaaaacFUaaaaaaaaaclgcfbcCfcfccfdcfecffcChcfgcClcCmcfocficfjcfkcfncfmcfncfocfpcfqcfrcfscftcfucfvcfxcfxcfycfzcfAcfBcCncfEcfDcfEcfFcfEcCocCpcCwcCCcCFcCGcCHcjqcfHcfIcfJcjuaaaaaacFUaaaaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuZKaafaafaaaaaaaaactQcCIcCJcCKcCLcCSctQcCTcCUcCVcCWcCXvIDkhWvIDcCZcuecDblkicxRgXBcuerkXcDdnyycDfcDgrYBcDhcwNcDncwNcwNcwNcDhcDocDpcDpcDpcDpcDpcDpcDrcDscDtcDucDvcuMcyzcBIcDwcDxcDycDycDycDycDyaaaaaaaaaaaaaaaaaagfQgfQbWCbWCbWCgfQgfQgfQcDzcDAcDHgfQbZkbZkceTceTceTbZkbZkaaaaaaaaaaaaaaaaaackackackackacgkcjfcjfcgncgocjfcgqcjNcgscjNckjckEckHcjRcgycjRckHckHckHcgCcDIcgDckHcDMcgEcDNcDOcDNcDMcgGcgGcgGcgGcgGcgGcgHcgIcDPcDQcDScDWcDXcDYcjqcgKcgLcgMciHaaaaaaaaaaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa