diff --git a/aurorastation.dme b/aurorastation.dme index b49f1f24376..08ad2f8eba6 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1149,6 +1149,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\service.dm" #include "code\game\objects\structures\crates_lockers\crates\gear_loadout.dm" #include "code\game\objects\structures\gore\core.dm" #include "code\game\objects\structures\gore\nest.dm" diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index d98fd99eead..fe671b3725b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -321,62 +321,68 @@ icon_state = "comicstormman" item_state = "comicstormman" - -/* - * Toy crossbow - */ - - +// +// Toy Crossbows +// /obj/item/toy/crossbow name = "foam dart crossbow" - desc = "A weapon favored by many overactive children. Ages 8 and up." + desc = "A foam dart crossbow." icon = 'icons/obj/guns/crossbow.dmi' icon_state = "crossbow" item_state = "crossbow" + slot_flags = SLOT_BELT | SLOT_HOLSTER drop_sound = 'sound/items/drop/gun.ogg' pickup_sound = 'sound/items/pickup/gun.ogg' contained_sprite = TRUE w_class = ITEMSIZE_SMALL attack_verb = list("attacked", "struck", "hit") - var/bullets = 5 + var/dart_count = 5 /obj/item/toy/crossbow/examine(mob/user) - if(..(user, 2) && bullets) - to_chat(user, "It is loaded with [bullets] foam darts!") + if(..(user, 2) && dart_count) + to_chat(user, "\The [src] is loaded with [dart_count] foam dart\s.") -/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/toy/crossbow/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/toy/ammo/crossbow)) - if(bullets <= 4) - user.drop_from_inventory(I,src) + if(dart_count <= 4) + user.drop_from_inventory(I, src) qdel(I) - bullets++ - to_chat(user, "You load the foam dart into the crossbow.") + dart_count++ + to_chat(user, "You load the foam dart into \the [src].") else - to_chat(usr, "It's already fully loaded.") + to_chat(usr, "\The [src] is already fully loaded.") -/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!isturf(target.loc) || target == user) return - if(flag) return - - if (locate (/obj/structure/table, src.loc)) +/obj/item/toy/crossbow/afterattack(atom/target, mob/user, flag) + if(!isturf(target.loc) || target == user) return - else if (bullets) + + if(flag) + return + + if(locate(/obj/structure/table) in get_turf(src)) + return + + else if(dart_count) var/turf/trg = get_turf(target) var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) - bullets-- + dart_count-- D.icon_state = "foamdart" D.name = "foam dart" - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) + playsound(src, 'sound/items/syringeproj.ogg', 50, TRUE) - for(var/i=0, i<6, i++) + for(var/i = 0, i < 6, i++) if (D) if(D.loc == trg) break - step_towards(D,trg) + step_towards(D, trg) for(var/mob/living/M in D.loc) - if(!istype(M,/mob/living)) continue - if(M == user) continue + if(!istype(M, /mob/living)) + continue + + if(M == user) + continue + for(var/mob/O in viewers(world.view, D)) O.show_message(text("\The [] was hit by the foam dart!", M), 1) new /obj/item/toy/ammo/crossbow(M.loc) @@ -384,7 +390,9 @@ return for(var/atom/A in D.loc) - if(A == user) continue + if(A == user) + continue + if(A.density) new /obj/item/toy/ammo/crossbow(A.loc) qdel(D) @@ -397,35 +405,24 @@ qdel(D) return - else if (bullets == 0) - user.Weaken(5) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\The [] realized they were out of ammo and starting scrounging for some!", user), 1) - -/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) +/obj/item/toy/crossbow/attack(mob/M, mob/user) src.add_fingerprint(user) -// ******* Check - - if (src.bullets > 0 && M.lying) + if (src.dart_count > 0 && M.lying) // Check for(var/mob/O in viewers(M, null)) if(O.client) - O.show_message(text("\The [] casually lines up a shot with []'s head and pulls the trigger!", user, M), 1, "You hear the sound of foam against skull", 2) + O.show_message(text("\The [] casually lines up a shot with []'s head and pulls the trigger.", user, M), 1) O.show_message(text("\The [] was hit in the head by the foam dart!", M), 1) - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) + playsound(src, 'sound/items/syringeproj.ogg', 50, TRUE) new /obj/item/toy/ammo/crossbow(M.loc) - src.bullets-- - else if (M.lying && src.bullets == 0) - for(var/mob/O in viewers(M, null)) - if (O.client) O.show_message(text("\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!", user, M), 1, "You hear someone fall", 2) - user.Weaken(5) + src.dart_count-- return /obj/item/toy/ammo/crossbow name = "foam dart" - desc = "It's nerf or nothing! Ages 8 and up." + desc = "A foam dart." icon = 'icons/obj/toy.dmi' icon_state = "foamdart" w_class = ITEMSIZE_TINY @@ -434,13 +431,12 @@ pickup_sound = 'sound/items/pickup/food.ogg' /obj/effect/foam_dart_dummy - name = "" - desc = "" + name = null + desc = null icon = 'icons/obj/toy.dmi' icon_state = null - anchored = 1 - density = 0 - + anchored = TRUE + density = FALSE /* * Toy swords diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index e684dab6a80..c1a6e35ba60 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -106,6 +106,19 @@ var/list/tape_roll_applications = list() return return ..() +/obj/item/taperoll/custodial + name = "custodial holographic tape" + desc = "A high-tech roll of custodial tape, used to prevent people from tracking dirt everywhere and getting their shoes dirty." + icon_state = "custodial_start" + tape_type = /obj/item/tape/custodial + icon_base = "custodial" + +/obj/item/tape/custodial + name = "custodial holographic tape" + desc = "A length of custodial tape. Better not cross it." + req_one_access = list(access_janitor) + icon_base = "custodial" + /obj/item/taperoll/attack_self(mob/user as mob) if(icon_state == "[icon_base]_start") start = get_turf(src) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 4aaa6f6c4ae..cee21e874a8 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -387,11 +387,12 @@ icon_state = "militarybelt_syndie" item_state = "militarybelt_syndie" -/obj/item/storage/belt/janitor - name = "janibelt" - desc = "A belt used to hold most janitorial supplies." - icon_state = "janibelt" - item_state = "janibelt" +/obj/item/storage/belt/custodial + name = "custodial belt" + desc = "A utility belt designed for custodial use." + desc_fluff = "A custodial belt is similar to most utility belts, but designed with pockets and attachment points that can hold common custodial tools." + icon_state = "custodialbelt" + item_state = "custodialbelt" storage_slots = 8 w_class = ITEMSIZE_NORMAL max_w_class = ITEMSIZE_NORMAL @@ -403,15 +404,16 @@ /obj/item/extinguisher/mini, /obj/item/device/radio, /obj/item/clothing/gloves, - /obj/item/clothing/glasses/material, + /obj/item/clothing/glasses, /obj/item/reagent_containers/spray, - /obj/item/grenade/chem_grenade, //if I'm going to be doing a full allowance on one belt, I need to do the other. + /obj/item/grenade/chem_grenade, /obj/item/device/lightreplacer, /obj/item/soap, /obj/item/storage/bag/trash, /obj/item/reagent_containers/glass/rag, - /obj/item/gun/energy/mousegun - ) + /obj/item/gun/energy/mousegun, + /obj/item/device/gps + ) /obj/item/storage/belt/mining name = "explorer's belt" diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 9ef54fc2f1b..1db1d5e4320 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -413,7 +413,7 @@ /obj/item/storage/belt/medical/first_responder/combat = 0.1, /obj/item/storage/belt/security/tactical = 0.1, /obj/item/storage/belt/military = 0.1, - /obj/item/storage/belt/janitor = 0.4 + /obj/item/storage/belt/custodial = 0.4 ) // Spawns a random backpack. diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index fa795f0b5fa..64ed743a299 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -1,7 +1,7 @@ /* Closets for specific jobs * Contains: * Bartender - * Janitor + * Chef * Lawyer */ @@ -56,44 +56,6 @@ new /obj/item/clothing/head/hairnet(src) new /obj/item/clothing/head/hairnet(src) -/* - * Janitor - */ -/obj/structure/closet/jcloset - name = "custodial closet" - desc = "It's a storage unit for janitorial clothes and gear." - icon_door = "mixed" - -/obj/structure/closet/jcloset/fill() - new /obj/item/clothing/head/softcap/nt/custodian(src) - new /obj/item/clothing/under/rank/janitor(src) - new /obj/item/clothing/head/softcap/idris/custodian(src) - new /obj/item/clothing/under/rank/janitor/idris(src) - new /obj/item/device/radio/headset/headset_service(src) - new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/head/softcap/custodian(src) - new /obj/item/clothing/head/bandana/janitor(src) - new /obj/item/clothing/head/beret/janitor(src) - new /obj/item/gun/energy/mousegun(src) - new /obj/item/device/flashlight(src) - new /obj/item/clothing/suit/caution(src) - new /obj/item/clothing/suit/caution(src) - new /obj/item/clothing/suit/caution(src) - new /obj/item/clothing/suit/caution(src) - new /obj/item/device/lightreplacer(src) - new /obj/item/storage/bag/trash(src) - new /obj/item/clothing/shoes/galoshes(src) - new /obj/item/storage/belt/janitor(src) - new /obj/item/storage/box/lights/mixed(src) - new /obj/item/grenade/chem_grenade/cleaner(src) - new /obj/item/grenade/chem_grenade/cleaner(src) - new /obj/item/grenade/chem_grenade/cleaner(src) - new /obj/item/reagent_containers/spray/cleaner(src) - new /obj/item/reagent_containers/glass/rag(src) - new /obj/item/soap/nanotrasen(src) - new /obj/item/reagent_containers/glass/rag/advanced(src) - new /obj/item/device/gps/janitor(src) - /* * Lawyer */ @@ -109,4 +71,4 @@ new /obj/item/clothing/under/lawyer/purple(src) new /obj/item/clothing/suit/storage/lawyer/purpjacket(src) new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/black(src) + new /obj/item/clothing/shoes/black(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 9c2c542e1a9..aef1e123ec5 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -32,11 +32,15 @@ /obj/structure/closet/l3closet/janitor + name = "level 3 biohazard custodial gear closet" + desc = "It's a storage unit for level 3 biohazard custodial gear." icon_state = "bio_jan" /obj/structure/closet/l3closet/janitor/fill() new /obj/item/clothing/suit/bio_suit/janitor(src) new /obj/item/clothing/head/bio_hood/janitor(src) + new /obj/item/clothing/mask/gas/half(src) + new /obj/item/watertank/janitor(src) /obj/structure/closet/l3closet/scientist icon_state = "bio_scientist" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/service.dm b/code/game/objects/structures/crates_lockers/closets/secure/service.dm new file mode 100644 index 00000000000..46b1a544408 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/secure/service.dm @@ -0,0 +1,36 @@ +// Custodian +/obj/structure/closet/secure_closet/custodial + name = "custodial closet" + req_access = list(access_janitor) + desc = "It's a storage unit for a custodian's clothes and gear." + icon_state = "custodial" + +/obj/structure/closet/secure_closet/custodial/fill() + new /obj/item/clothing/head/softcap/nt/custodian(src) + new /obj/item/clothing/head/softcap/idris/custodian(src) + new /obj/item/device/radio/headset/headset_service(src) + new /obj/item/clothing/under/rank/janitor(src) + new /obj/item/clothing/under/rank/janitor/idris(src) + new /obj/item/clothing/gloves/black(src) + new /obj/item/storage/belt/custodial(src) + new /obj/item/clothing/accessory/holster/utility/custodial/armpit/brown(src) + new /obj/item/clothing/shoes/galoshes(src) + new /obj/item/gun/energy/mousegun(src) + new /obj/item/device/flashlight(src) + new /obj/item/reagent_containers/spray/cleaner(src) + new /obj/item/soap/nanotrasen(src) + new /obj/item/reagent_containers/glass/rag(src) + new /obj/item/reagent_containers/glass/rag/advanced(src) + new /obj/item/device/lightreplacer(src) + new /obj/item/storage/bag/trash(src) + new /obj/item/grenade/chem_grenade/cleaner(src) + new /obj/item/grenade/chem_grenade/cleaner(src) + new /obj/item/grenade/chem_grenade/cleaner(src) + new /obj/item/device/gps/janitor(src) + new /obj/item/taperoll/custodial(src) + new /obj/item/clothing/suit/caution(src) + new /obj/item/clothing/suit/caution(src) + new /obj/item/clothing/suit/caution(src) + new /obj/item/clothing/suit/caution(src) + new /obj/item/storage/box/lights/mixed(src) + new /obj/item/storage/box/mousetraps(src) \ No newline at end of file diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 422674e9bfa..15a8fc4ff2c 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -12,6 +12,8 @@ climbable = TRUE flags = OPENCONTAINER build_amt = 15 + slowdown = 0 + //copypaste sorry var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite var/obj/item/storage/bag/trash/mybag = null @@ -31,6 +33,20 @@ myspray = new /obj/item/reagent_containers/spray/cleaner(src) myreplacer = new /obj/item/device/lightreplacer(src) + mybucket = new /obj/structure/mopbucket(src) + + for(signs, signs < 4, signs++) + new /obj/item/clothing/suit/caution(src) + + update_icon() + +/obj/structure/janitorialcart/full/water/Initialize() + . = ..() + mybag = new /obj/item/storage/bag/trash(src) + mymop = new /obj/item/mop(src) + myspray = new /obj/item/reagent_containers/spray/cleaner(src) + myreplacer = new /obj/item/device/lightreplacer(src) + mybucket = new /obj/structure/mopbucket(src) mybucket.reagents.add_reagent(/decl/reagent/water, mybucket.bucketsize) diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 99184a9a7bd..2252c172241 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -464,6 +464,10 @@ name = "red outline" color = "#990C0C" +/obj/effect/floor_decal/industrial/outline/custodial + name = "custodial purple outline" + color = COLOR_PURPLE_GRAY + /obj/effect/floor_decal/industrial/outline/medical name = "medical lime outline" color = COLOR_PALE_GREEN_GRAY @@ -478,7 +482,7 @@ /obj/effect/floor_decal/industrial/outline/research name = "research mauve outline" - color = COLOR_PURPLE_GRAY + color = COLOR_PALE_PURPLE_GRAY /obj/effect/floor_decal/industrial/outline/security name = "security blue outline" diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 062e5a0cbea..c98b9321a86 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -1,3 +1,6 @@ +// +// Holsters +// /obj/item/clothing/accessory/holster name = "shoulder holster" desc = "A handgun holster." @@ -33,9 +36,9 @@ playsound(get_turf(src), sound_in, 50) if(istype(user)) - user.stop_aiming(no_message=1) + user.stop_aiming(no_message = TRUE) holstered = I - user.drop_from_inventory(holstered,src) + user.drop_from_inventory(holstered, src) holstered.add_fingerprint(user) w_class = max(w_class, holstered.w_class) user.visible_message("[user] holsters \the [holstered].", "You holster \the [holstered].") @@ -45,11 +48,11 @@ holstered = null update_name() -/obj/item/clothing/accessory/holster/proc/unholster(mob/user as mob) +/obj/item/clothing/accessory/holster/proc/unholster(mob/user) if(!holstered) return - if(istype(user.get_active_hand(),/obj) && istype(user.get_inactive_hand(),/obj)) + if(istype(user.get_active_hand(), /obj) && istype(user.get_inactive_hand(), /obj)) to_chat(user, "You need an empty hand to draw \the [holstered]!") else if (use_check(user)) to_chat(user, "You can't draw \the [holstered] in your current state!") @@ -57,15 +60,15 @@ var/sound_vol = 25 if(user.a_intent == I_HURT) sound_vol = 50 - usr.visible_message( + user.visible_message( "[user] draws \the [holstered], ready to shoot!", "You draw \the [holstered], ready to shoot!" - ) + ) else user.visible_message( "[user] draws \the [holstered], pointing it at the ground.", "You draw \the [holstered], pointing it at the ground." - ) + ) if(sound_out) playsound(get_turf(src), sound_out, sound_vol) @@ -75,15 +78,15 @@ w_class = initial(w_class) clear_holster() -/obj/item/clothing/accessory/holster/attack_hand(mob/user as mob) - if (has_suit) //if we are part of a suit +/obj/item/clothing/accessory/holster/attack_hand(mob/user) + if (has_suit) // If we are part of a suit. if (holstered) unholster(user) return ..(user) -/obj/item/clothing/accessory/holster/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/clothing/accessory/holster/attackby(obj/item/W, mob/user) holster(W, user) /obj/item/clothing/accessory/holster/emp_act(severity) @@ -98,24 +101,27 @@ else to_chat(user, "It is empty.") -/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user as mob) +/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user) ..() has_suit.verbs += /obj/item/clothing/accessory/holster/verb/holster_verb -/obj/item/clothing/accessory/holster/on_removed(mob/user as mob) +/obj/item/clothing/accessory/holster/on_removed(mob/user) if(has_suit) has_suit.verbs -= /obj/item/clothing/accessory/holster/verb/holster_verb ..() -//For the holster hotkey -/obj/item/clothing/accessory/holster/verb/holster_verb() +/obj/item/clothing/accessory/holster/verb/holster_verb() //For the holster hotkey. set name = "Holster" set category = "Object" set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - //can't we just use src here? + if(!istype(usr, /mob/living)) + return + + if(usr.stat) + return + + // Can't we just use src here? var/obj/item/clothing/accessory/holster/H = get_accessory(/obj/item/clothing/accessory/holster) if(!H && istype(src, /obj/item/clothing/suit/armor/tactical)) // This armor is a snowflake and has an integrated holster. var/obj/item/clothing/suit/armor/tactical/tacticool = src @@ -127,7 +133,7 @@ if(!H.holstered) var/obj/item/W = usr.get_active_hand() if(!istype(W, /obj/item)) - to_chat(usr, "You need your gun equiped to holster it.") + to_chat(usr, "You need your gun equipped to holster it.") return H.holster(W, usr) else @@ -145,7 +151,7 @@ /obj/item/clothing/accessory/holster/hip name = "black hip holster" - desc = "No one dared to ask his business, no one dared to make a slip. The stranger there among them had a big iron on his hip." + desc = "A black firearm hip holster." icon_state = "holster_hip" /obj/item/clothing/accessory/holster/thigh @@ -171,3 +177,33 @@ name = "brown thigh holster" icon_state = "holster_brown_thigh" +// +// Utility Holsters +// +/obj/item/clothing/accessory/holster/utility + name = "utility holster" + desc = "A utility holster." + var/list/allowed_items = list() // A list of allowed items. + +/obj/item/clothing/accessory/holster/utility/holster(var/obj/item/I, var/mob/living/user) + if(!is_type_in_list(I, allowed_items)) + to_chat(user, "\The [I] won't fit in \the [src].") + return + + ..() + +// Custodial Holster +/obj/item/clothing/accessory/holster/utility/custodial/armpit/brown + name = "brown custodial armpit holster" + desc = "A brown utility holster which can't hold actual firearms. This particular one is designed for custodial personnel." + desc_fluff = "In a universe where various utility firearms and tools have become more common for diverse applications, it is important that there are ways to store them where \ + they are kept safe from wear and tear as well as from misuse. Thus as an alternative to regular firearm holsters, specialized utility firearm and tool holsters exist, which \ + allow non-standard firearms to be stored inside, whilst at the same time keeping individuals from storing actual firearms in one." + icon_state = "holster_brown" + allowed_items = list( + /obj/item/gun/energy/mousegun, + /obj/item/gun/energy/mousegun/xenofauna, + /obj/item/gun/projectile/revolver/capgun, + /obj/item/toy/crossbow, + /obj/item/reagent_containers/food/snacks/grown/banana + ) \ No newline at end of file diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 692e03e28ec..d96e3e1c7e8 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -91,8 +91,8 @@ if(.) return TRUE - if(load && usr != load) - to_chat(usr, SPAN_WARNING("You can't interact with \the [src] unless you're the driver, or you're adjacent to it while it has no driver.")) + if(load && load != usr) + to_chat(usr, SPAN_WARNING("You can't interact with \the [src] while its in use.")) return TRUE if(href_list["toggle_engine"]) diff --git a/code/modules/vehicles/pussywagon.dm b/code/modules/vehicles/pussywagon.dm index 98369c5195b..c42477ce99e 100644 --- a/code/modules/vehicles/pussywagon.dm +++ b/code/modules/vehicles/pussywagon.dm @@ -1,32 +1,34 @@ +// +// Custodial Truck a.k.a. Pussy Wagon +// /obj/vehicle/train/cargo/engine/pussywagon - name = "janicart deluxe engine" - desc = "The engine for the janicart deluxe trolley, the bread to your butter." + name = "\improper C8000 deluxe custodial truck" + desc = "A C8000 deluxe custodial truck. The bread to the custodians' butter." + desc_info = "Click-drag yourself onto the truck to climb onto it.
\ + - CTRL-click the truck to open the ignition and controls menu.
\ + - ALT-click the truck to remove the key from the ignition.
\ + - Click the truck to open a UI menu.
\ + - Click the resist button or type \"resist\" in the command bar at the bottom of your screen to get off the truck." icon = 'icons/obj/vehicles.dmi' icon_state = "janicart_off" + light_range = 0 // Turn off the light inherited from the parent. move_delay = 3 - mob_offset_y = 7 load_offset_x = -13 vueui_template = "pussywagon" + // Unique Variables var/cart_icon = "janicart" - -/obj/item/key/janicart - name = "key" - desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." - icon = 'icons/obj/vehicles.dmi' - icon_state = "keys" - w_class = ITEMSIZE_TINY + var/ignition = FALSE /obj/vehicle/train/cargo/engine/pussywagon/setup_engine() cell = new /obj/item/cell/high(src) key = null update_icon() - turn_off() + toggle_ignition() /obj/vehicle/train/cargo/engine/pussywagon/vueui_data_change(list/data, mob/user, datum/vueui/ui) data = ..() - data["has_proper_trolley"] = FALSE if(istype(tow, /obj/vehicle/train/cargo/trolley/pussywagon)) data["has_proper_trolley"] = TRUE @@ -41,67 +43,134 @@ var/obj/item/reagent_containers/B = PT.bucket data["bucket_capacity"] = B.reagents.total_volume data["max_bucket_capacity"] = B.volume - return data /obj/vehicle/train/cargo/engine/pussywagon/Topic(href, href_list, datum/topic_state/state) . = ..() if(.) - return + return TRUE if(href_list["toggle_hoover"]) toggle_hoover(usr) if(href_list["empty_hoover"]) var/obj/vehicle/train/cargo/trolley/pussywagon/PT = tow PT.empty_hoover(usr) - if(href_list["toggle_mops"]) + if(href_list["toggle_mop"]) toggle_mop(usr) SSvueui.check_uis_for_change(src) -/obj/vehicle/train/cargo/engine/pussywagon/attackby(obj/item/W as obj, mob/user as mob) +/obj/vehicle/train/cargo/engine/pussywagon/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/key/janicart)) if(!key) user.drop_from_inventory(W, src) key = W - to_chat(user, SPAN_NOTICE("You slide the key into the ignition.")) + to_chat(user, SPAN_NOTICE("You slide \the [W] into \the [src]'s ignition.")) + playsound(src, 'sound/machines/vehicles/pussywagon/key_in.ogg', 50, FALSE) else - to_chat(user, SPAN_WARNING("\The [src] already has a key inserted.")) + to_chat(user, SPAN_NOTICE("There is already a key in [src]'s ignition.")) return ..() -/obj/vehicle/train/cargo/engine/pussywagon/turn_on() - if(!key) - audible_message("\The [src] whirrs, but the lack of a key causes the engine to shut down.") +/obj/vehicle/train/cargo/engine/pussywagon/CtrlClick(mob/user) + if(load && load != user) + to_chat(user, SPAN_WARNING("You can't interact with \the [src] while its in use.")) return + var/list/options = list( + "Toggle Ignition" = image('icons/mob/screen/radial.dmi', "custodial_key"), + "Toggle Mopping" = image('icons/mob/screen/radial.dmi', "custodial_mop"), + "Toggle Vacuuming" = image('icons/mob/screen/radial.dmi', "custodial_vacuum") + ) + var/chosen_option = show_radial_menu(user, src, options, radius = 42, require_near = TRUE, tooltips = TRUE) + if (!chosen_option) + return + switch(chosen_option) + if("Toggle Ignition") + toggle_ignition(user) + if("Toggle Mopping") + toggle_mop(user) + if("Toggle Vacuuming") + toggle_hoover(user) + +/obj/vehicle/train/cargo/engine/pussywagon/AltClick(mob/user) + if(Adjacent(user)) + remove_key(user) else - ..() - update_stats() + return ..() -/obj/vehicle/train/cargo/engine/pussywagon/turn_off() - ..() +/obj/vehicle/train/cargo/engine/pussywagon/remove_key(mob/user) + if(!key) + to_chat(user, SPAN_NOTICE("There is no key in \the [src]'s ignition.")) + return - if(tow) + if(load && load != user) + to_chat(usr, SPAN_WARNING("You can't remove \the [key] from \the [src] while its in use.")) + return + + to_chat(user, SPAN_NOTICE("You take out \the [key] out of \the [src]'s ignition.")) + playsound(src, 'sound/machines/vehicles/pussywagon/key_out.ogg', 50, FALSE) + + user.put_in_hands(key) + key = null + + if(ignition) + toggle_ignition() + +/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_ignition(mob/user) + if(!ignition) + if(!key) + to_chat(user, SPAN_NOTICE("There is no key in \the [src]'s ignition.")) + return + else + if(stat) + return FALSE + if(powered && cell.charge < charge_use) + return FALSE + to_chat(user, SPAN_NOTICE("You turn on \the [src]'s ignition.")) + playsound(src, 'sound/machines/vehicles/pussywagon/button.ogg', 50, FALSE) + playsound_in(src, 'sound/machines/vehicles/pussywagon/start.ogg', 50, FALSE, time = 1 SECOND) + on = TRUE + ignition = TRUE + update_stats() + update_icon() + return TRUE + else + to_chat(user, SPAN_NOTICE("You turn off \the [src]'s ignition.")) + if(key) + playsound(src, 'sound/machines/vehicles/pussywagon/button.ogg', 50, FALSE) + on = FALSE + ignition = FALSE + update_icon() + + if(tow) + if(istype(tow, /obj/vehicle/train/cargo/trolley/pussywagon)) + var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow + PW.trolley_off() + +/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_mop(mob/user) + if(on && tow) if(istype(tow, /obj/vehicle/train/cargo/trolley/pussywagon)) - var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow - PW.engine_off() - -/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_mop(var/mob/user) - if(on && tow) - if(istype(tow,/obj/vehicle/train/cargo/trolley/pussywagon)) var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow if(!PW.bucket) - to_chat(user, SPAN_WARNING("You must insert a reagent container first!")) + to_chat(user, SPAN_NOTICE("You must insert a reagent container first.")) return - PW.mop_toggle() + if(!PW.mopping) + to_chat(user, SPAN_NOTICE("You turn on \the [src]'s rotary mop.")) + else + to_chat(user, SPAN_NOTICE("You turn off \the [src]'s rotary mop.")) + PW.toggle_mop() -/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_hoover(var/mob/user) +/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_hoover(mob/user) if(use_check_and_message(user)) return if(on && tow) - if(istype(tow,/obj/vehicle/train/cargo/trolley/pussywagon)) + if(istype(tow, /obj/vehicle/train/cargo/trolley/pussywagon)) var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow - PW.hoover_toggle() + if(!PW.hoover) + to_chat(user, SPAN_NOTICE("You turn on \the [src]'s vacuum cleaner.")) + else + to_chat(user, SPAN_NOTICE("You turn off \the [src]'s vacuum cleaner.")) + PW.toggle_hoover() /obj/vehicle/train/cargo/engine/pussywagon/update_icon() cut_overlays() @@ -139,11 +208,11 @@ ..() /obj/vehicle/train/cargo/trolley/pussywagon - name = "janicart deluxe trolley" - desc = "The trolley of the janicart deluxe, equipped with dual rotary mop and a NT-X1 Vacuum Cleaner." - desc_info = "You can unlatch this from the control console of the janicart." + name = "\improper C8000 deluxe custodial trolley" + desc = "The trolley of the C8000 deluxe custodial truck, equipped with a dual rotary mop and a industrial vacuum cleaner." icon = 'icons/obj/vehicles.dmi' icon_state = "jantrolley" + light_range = 0 // Turn off the light inherited from the parent. var/obj/item/reagent_containers/bucket var/list/hoovered = list() @@ -152,11 +221,10 @@ var/mopping = 0 var/hoover = 0 - /obj/vehicle/train/cargo/trolley/pussywagon/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/reagent_containers)) if(!open) - to_chat(user, SPAN_WARNING("\The [src]'s panel isn't open.")) + to_chat(user, SPAN_WARNING("\The [src]'s maintenance panel isn't open.")) return if(!bucket) user.drop_from_inventory(W,src) @@ -166,7 +234,7 @@ if(W.iswrench()) if(!open) - to_chat(user, SPAN_WARNING("\The [src]'s panel isn't open.")) + to_chat(user, SPAN_WARNING("\The [src]'s maintenance panel isn't open.")) return if(bucket) bucket.forceMove(user.loc) @@ -186,7 +254,7 @@ return ..() -/obj/vehicle/train/cargo/trolley/pussywagon/proc/empty_hoover(var/mob/user) +/obj/vehicle/train/cargo/trolley/pussywagon/proc/empty_hoover(mob/user) for(var/obj/item/I in hoovered) I.forceMove(user.loc) hoovered -= I @@ -201,7 +269,7 @@ tile.clean(bucket) lead.cell.use(charge_use, load) else - mop_toggle() + toggle_mop() if(hoover) var/current_len = hoovered.len for(var/obj/item/I in tile) @@ -211,35 +279,31 @@ vacuum_capacity -= I.w_class lead.cell.use(charge_use) if(!vacuum_capacity) - hoover_toggle() + toggle_hoover() if(hoovered.len > current_len) - playsound(src, 'sound/machines/disposalflush.ogg', 100, 1) + playsound(src, 'sound/machines/disposalflush.ogg', 50, TRUE) return ..() -/obj/vehicle/train/cargo/trolley/pussywagon/proc/engine_off() +/obj/vehicle/train/cargo/trolley/pussywagon/proc/trolley_off() if(mopping) - mop_toggle() + toggle_mop() if(hoover) - hoover_toggle() + toggle_hoover() -/obj/vehicle/train/cargo/trolley/pussywagon/proc/mop_toggle() +/obj/vehicle/train/cargo/trolley/pussywagon/proc/toggle_mop() if(!mopping) + playsound(src, 'sound/machines/hydraulic_long.ogg', 20, TRUE) mopping = 1 - audible_message("\The [src]'s mop-o-matic rumbles to life.", "You hear something rumble deeply.") - playsound(src, 'sound/machines/hydraulic_long.ogg', 100, 1) else mopping = 0 - audible_message("\The [src]'s mop-o-matic putters before turning off.", "You hear something putter slowly.") update_icon() -/obj/vehicle/train/cargo/trolley/pussywagon/proc/hoover_toggle() +/obj/vehicle/train/cargo/trolley/pussywagon/proc/toggle_hoover() if(!hoover) + playsound(src, 'sound/machines/hydraulic_long.ogg', 20, TRUE) hoover = 1 - audible_message("\The [src]'s space hoover rumbles to life.", "You hear something rumble deeply.") - playsound(src, 'sound/machines/hydraulic_long.ogg', 100, 1) else hoover = 0 - audible_message("\The [src]'s space hoover putters before turning off.", "You hear something putter slowly.") update_icon() /obj/vehicle/train/cargo/trolley/pussywagon/update_icon() @@ -247,3 +311,10 @@ if(mopping) add_overlay(image('icons/obj/vehicles.dmi', "[icon_state]_mop_overlay", MOB_LAYER + 1)) + +/obj/item/key/janicart + name = "\improper C8000 deluxe custodial truck key fob" + desc = "A stainless steel key fob with a chromed top attached to a small steel key ring. The key ring has a pink tag hanging on it, with the text \"Pussy Wagon\"." + icon = 'icons/obj/vehicles.dmi' + icon_state = "keys" + w_class = ITEMSIZE_TINY \ No newline at end of file diff --git a/html/changelogs/custodial_additions.yml b/html/changelogs/custodial_additions.yml new file mode 100644 index 00000000000..a8fb34176c5 --- /dev/null +++ b/html/changelogs/custodial_additions.yml @@ -0,0 +1,10 @@ +author: SleepyGemmy + +delete-after: True + +changes: + - rscadd: "Adds custodial holographic tape." + - rscadd: "Adds a custodial pestgun- and toy weapons only holster." + - rscadd: "Adds a radial menu to the custodial truck for operating the mop and vacuum cleaner." + - soundadd: "Adds sounds to the custodial truck." + - tweak: "Foam crossbows now fit on the belt slot and in holsters." \ No newline at end of file diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index bb7e68496c1..d2f8c64eb86 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/screen/radial.dmi b/icons/mob/screen/radial.dmi index ccd4fc2e1c6..501ddcacc55 100644 Binary files a/icons/mob/screen/radial.dmi and b/icons/mob/screen/radial.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 328ea185b90..a1dbe6981d9 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index cba6d01ee9f..3781fc16314 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index f915affe1e5..dbdb2e18968 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 5313938a39a..bbb29c86fcc 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/policetape.dmi b/icons/policetape.dmi index a12e0fa58ce..ac020b90e0d 100644 Binary files a/icons/policetape.dmi and b/icons/policetape.dmi differ diff --git a/maps/aurora/aurora-1_centcomm.dmm b/maps/aurora/aurora-1_centcomm.dmm index f6311629ef1..4d978d2548d 100644 --- a/maps/aurora/aurora-1_centcomm.dmm +++ b/maps/aurora/aurora-1_centcomm.dmm @@ -18396,7 +18396,7 @@ /turf/simulated/floor/plating, /area/shuttle/syndicate_elite) "hRS" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /turf/unsimulated/floor{ icon_state = "dark2" }, diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index b8b52b704ac..296541efbc4 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -33237,7 +33237,7 @@ /turf/simulated/floor/tiled, /area/janitor) "bfH" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, diff --git a/maps/aurora/aurora-5_interstitial.dmm b/maps/aurora/aurora-5_interstitial.dmm index 4d7078a63a2..8cda2c6d5f8 100644 --- a/maps/aurora/aurora-5_interstitial.dmm +++ b/maps/aurora/aurora-5_interstitial.dmm @@ -10150,7 +10150,7 @@ /turf/simulated/floor/plating, /area/maintenance/telecoms_ladder) "PP" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /obj/item/reagent_containers/spray/cleaner, /obj/item/grenade/chem_grenade/cleaner, /obj/item/grenade/chem_grenade/cleaner, diff --git a/maps/event/odin_departure/odin_depature-1.dmm b/maps/event/odin_departure/odin_depature-1.dmm index 04c3d530ee3..f87e1046e85 100644 --- a/maps/event/odin_departure/odin_depature-1.dmm +++ b/maps/event/odin_departure/odin_depature-1.dmm @@ -18739,7 +18739,7 @@ /turf/simulated/floor/plating, /area/shuttle/syndicate_elite) "hRS" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /turf/unsimulated/floor{ icon_state = "dark2" }, diff --git a/maps/event/rooftop/rooftop-1.dmm b/maps/event/rooftop/rooftop-1.dmm index f88499a0768..24dc006addd 100644 --- a/maps/event/rooftop/rooftop-1.dmm +++ b/maps/event/rooftop/rooftop-1.dmm @@ -7734,7 +7734,7 @@ /turf/simulated/floor/lino/grey, /area/city/mendell) "RD" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /obj/item/gun/launcher/grenade{ name = "active cleaning utility dispenser" }, diff --git a/maps/runtime/runtime-1.dmm b/maps/runtime/runtime-1.dmm index 7ab866c48e3..336f8448e05 100644 --- a/maps/runtime/runtime-1.dmm +++ b/maps/runtime/runtime-1.dmm @@ -613,7 +613,7 @@ locked = 0; pixel_y = 23 }, -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /turf/simulated/floor/tiled, /area/hallway/primary/central_one) "bz" = ( diff --git a/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm b/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm index ac2cdb1780b..41680a86b2a 100644 --- a/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm +++ b/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm @@ -9706,7 +9706,7 @@ }, /area/centcom/control) "ayB" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /turf/unsimulated/floor{ icon_state = "vault"; dir = 1 @@ -10962,9 +10962,9 @@ /obj/item/grenade/chem_grenade/cleaner, /obj/item/grenade/chem_grenade/cleaner, /obj/item/grenade/chem_grenade/cleaner, -/obj/item/storage/belt/janitor, -/obj/item/storage/belt/janitor, -/obj/item/storage/belt/janitor, +/obj/item/storage/belt/custodial, +/obj/item/storage/belt/custodial, +/obj/item/storage/belt/custodial, /turf/unsimulated/floor{ icon_state = "vault"; dir = 1 diff --git a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm index ca0fb19f80c..ad187c68d1a 100644 --- a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm +++ b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm @@ -59,7 +59,7 @@ /area/storage/eva) "adj" = ( /obj/machinery/vending/vendors, -/obj/effect/floor_decal/corner/green/full{ +/obj/effect/floor_decal/corner/purple/full{ dir = 8 }, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -611,14 +611,14 @@ name = "sink"; pixel_x = 21 }, -/obj/effect/floor_decal/corner/green/full{ - dir = 4 - }, /obj/item/device/radio/intercom{ dir = 1; name = "Station Intercom (General)"; pixel_y = -25 }, +/obj/effect/floor_decal/corner/purple/full{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/janitor) "aDv" = ( @@ -893,7 +893,7 @@ /obj/machinery/alarm{ pixel_y = 28 }, -/obj/effect/floor_decal/corner/green{ +/obj/effect/floor_decal/corner/purple{ dir = 5 }, /turf/simulated/floor/tiled, @@ -1969,8 +1969,9 @@ id = "shutters_custodialgarage"; name = "Custodial Garage Shutters"; pixel_x = -25; - pixel_y = 8; - req_access = list(26) + req_access = list(26); + pixel_y = 7; + dir = 4 }, /obj/machinery/ringer_button{ id = "ringers_custodial"; @@ -2060,12 +2061,12 @@ /turf/simulated/floor/tiled, /area/operations/storage) "bEk" = ( -/obj/effect/floor_decal/corner/black{ - dir = 9 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/hallway/primary/aft) "bEm" = ( @@ -2178,14 +2179,13 @@ /area/engineering/gravity_gen) "bHx" = ( /obj/structure/closet/l3closet/janitor, -/obj/item/watertank/janitor, /obj/structure/railing/mapped{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/effect/floor_decal/corner/purple{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "bHP" = ( @@ -2339,6 +2339,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/janitor) "bMO" = ( @@ -2713,17 +2716,17 @@ /area/engineering/gravity_gen) "cdT" = ( /obj/structure/table/steel, -/obj/effect/floor_decal/corner/green/full, /obj/item/storage/box/lights/mixed, /obj/item/storage/box/lights/mixed, /obj/item/storage/toolbox/mechanical, /obj/machinery/ringer{ department = "Custodial"; id = "ringers_custodial"; - name = "\improper Custodial ringer terminal"; + name = "\improper Custodial Ringer Terminal"; pixel_y = -32; req_access = list(26) }, +/obj/effect/floor_decal/corner/purple/full, /turf/simulated/floor/tiled, /area/janitor) "cen" = ( @@ -3159,7 +3162,10 @@ /area/engineering/atmos/air) "cxG" = ( /obj/structure/janitorialcart/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "cya" = ( @@ -3843,6 +3849,18 @@ }, /turf/simulated/floor/plating, /area/engineering/atmos/air) +"dbS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/janitor) "dcs" = ( /obj/machinery/alarm{ pixel_y = 28 @@ -7507,12 +7525,11 @@ /area/turret_protected/ai) "fVm" = ( /obj/structure/closet/l3closet/janitor, -/obj/item/watertank/janitor, /obj/structure/railing/mapped{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "fVD" = ( @@ -7681,15 +7698,17 @@ name = "Custodial Desk Shutter"; pixel_x = 25; pixel_y = -7; + dir = 8; req_access = list(26) }, /obj/effect/floor_decal/industrial/warning, /obj/machinery/button/remote/blast_door{ id = "shutters_custodialgarage"; name = "Custodial Garage Shutter"; + req_access = list(26); + pixel_y = 7; pixel_x = 25; - pixel_y = 8; - req_access = list(26) + dir = 8 }, /obj/structure/railing/mapped, /turf/simulated/floor/tiled/dark, @@ -7885,8 +7904,12 @@ dir = 4 }, /obj/machinery/light_switch{ + pixel_y = -24; pixel_x = 9; - pixel_y = -25 + dir = 1 + }, +/obj/effect/floor_decal/corner/purple/full{ + dir = 4 }, /turf/simulated/floor/tiled, /area/janitor) @@ -10097,8 +10120,8 @@ /obj/structure/bed/stool/chair/office/dark{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ - dir = 6 +/obj/effect/floor_decal/corner/purple/full{ + dir = 1 }, /turf/simulated/floor/tiled, /area/janitor) @@ -10121,6 +10144,24 @@ }, /turf/simulated/floor/tiled, /area/hangar/operations) +"ias" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/janitor) "iau" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -11341,18 +11382,17 @@ /turf/simulated/floor/tiled/dark, /area/engineering/atmos/propulsion/starboard) "jiS" = ( -/obj/structure/closet/jcloset, /obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -9 + pixel_x = 24; + pixel_y = -9; + dir = 8 }, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/mousetraps, -/obj/effect/floor_decal/corner/green{ +/obj/structure/railing/mapped, +/obj/structure/closet/secure_closet/custodial, +/obj/effect/floor_decal/corner/purple{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "jiU" = ( @@ -12974,9 +13014,6 @@ /obj/machinery/alarm{ pixel_y = 28 }, -/obj/effect/floor_decal/corner/green/full{ - dir = 8 - }, /obj/structure/bed/stool/chair/office/dark, /obj/effect/landmark/start{ name = "Janitor" @@ -12984,6 +13021,9 @@ /obj/machinery/newscaster{ pixel_x = -32 }, +/obj/effect/floor_decal/corner/purple/full{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/janitor) "kzx" = ( @@ -13823,11 +13863,11 @@ pixel_y = -6 }, /obj/item/paper_bin, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, /obj/item/device/hand_labeler, /obj/item/key/janicart, +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/janitor) "leL" = ( @@ -16492,19 +16532,20 @@ /turf/simulated/floor/tiled/dark, /area/hangar/control) "nmQ" = ( -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, /obj/machinery/ringer{ department = "Custodial"; id = "ringers_custodial"; - name = "\improper Custodial ringer terminal"; + name = "\improper Custodial Ringer Terminal"; pixel_x = -32; - req_access = list(26) + req_access = list(26); + pixel_y = 5 }, /obj/structure/coatrack{ pixel_x = -9 }, +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/janitor) "nmV" = ( @@ -17547,7 +17588,7 @@ /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/green{ +/obj/effect/floor_decal/corner/purple{ dir = 9 }, /obj/effect/floor_decal/industrial/outline/yellow, @@ -18791,7 +18832,8 @@ name = "Custodial Closet Desk External" }, /obj/machinery/door/window/westright{ - name = "Custodial Closet Desk Internal" + name = "Custodial Closet Desk Internal"; + req_access = list(26) }, /obj/machinery/door/firedoor, /obj/machinery/door/blast/shutters{ @@ -19144,6 +19186,9 @@ /turf/simulated/floor/tiled/dark, /area/outpost/mining_main/eva) "pJm" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 6 + }, /turf/simulated/floor/tiled, /area/janitor) "pJx" = ( @@ -20227,9 +20272,6 @@ /obj/machinery/camera/network/service{ c_tag = "Custodial - Garage" }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, /obj/machinery/requests_console{ department = "Custodial"; departmentType = 1; @@ -20239,6 +20281,9 @@ /obj/effect/landmark/start{ name = "Janitor" }, +/obj/effect/floor_decal/corner/purple/full{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/janitor) "qAI" = ( @@ -20439,9 +20484,9 @@ /turf/simulated/floor/plating, /area/maintenance/wing/port/deck1) "qIT" = ( -/obj/effect/floor_decal/corner/green/full, -/obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/vending/coffee, +/obj/effect/floor_decal/corner/purple/full, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/janitor) "qJg" = ( @@ -21001,6 +21046,24 @@ /obj/machinery/firealarm/north, /turf/simulated/floor/tiled/white, /area/rnd/eva) +"rfR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/janitor) "rgo" = ( /obj/structure/cable{ icon_state = "4-8" @@ -21209,7 +21272,10 @@ c_tag = "Custodial - Main Storage"; dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "rqf" = ( @@ -23787,6 +23853,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/floor_decal/corner/purple{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/janitor) "twq" = ( @@ -24132,14 +24201,14 @@ /turf/simulated/floor/tiled/dark, /area/hangar/control) "tKE" = ( -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/janitor) "tLq" = ( @@ -24719,13 +24788,13 @@ dir = 1 }, /obj/machinery/firealarm/south, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, +/obj/effect/floor_decal/corner/purple{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/janitor) "ujc" = ( @@ -26561,13 +26630,13 @@ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; pixel_y = 25 }, +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, /turf/simulated/floor/tiled, /area/janitor) "vJT" = ( @@ -26920,13 +26989,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "wbg" = ( -/obj/structure/closet/jcloset, -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/mousetraps, -/obj/effect/floor_decal/corner/green/full{ +/obj/structure/closet/secure_closet/custodial, +/obj/effect/floor_decal/corner/purple/full{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "wbO" = ( @@ -28582,11 +28649,11 @@ /obj/machinery/power/apc/super{ pixel_y = -23 }, -/obj/effect/floor_decal/corner/green{ +/obj/structure/closet/crate/trashcart, +/obj/effect/floor_decal/corner/purple{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/trashcart, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor) "xqo" = ( @@ -28741,6 +28808,9 @@ dir = 2; icon_state = "pipe-c" }, +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, /turf/simulated/floor/tiled, /area/janitor) "xvP" = ( @@ -47339,7 +47409,7 @@ kqO kqO reR xVk -non +dbS non dOa bMg @@ -47947,7 +48017,7 @@ vjW arr wbg jiS -sLn +ias aDm arr xFB @@ -48351,7 +48421,7 @@ sua arr kzv nmQ -sLn +rfR qIT arr hYh diff --git a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm index d284d76bdcc..b461a2ade2c 100644 --- a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm +++ b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm @@ -1217,6 +1217,16 @@ }, /turf/simulated/floor/tiled/dark, /area/turbolift/scc_ship/cargo_lift) +"aBr" = ( +/obj/effect/floor_decal/corner/mauve{ + dir = 5; + color = s + }, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/research) "aBx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -4334,20 +4344,18 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "cil" = ( -/obj/structure/closet/jcloset, /obj/effect/floor_decal/corner/purple{ dir = 5 }, /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; pixel_y = 24 }, +/obj/structure/closet/secure_closet/custodial, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor/stairs) "ciP" = ( @@ -7042,13 +7050,9 @@ /area/operations/lobby) "dMf" = ( /obj/structure/table/steel, -/obj/item/storage/box/lights/mixed{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/storage/box/mousetraps, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/storage/box/lights/mixed, /turf/simulated/floor/tiled, /area/janitor/stairs) "dMG" = ( @@ -16152,10 +16156,10 @@ /obj/effect/floor_decal/corner/purple/full{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/sign/nosmoking_1{ pixel_y = 32 }, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/operations/lobby) "iMG" = ( @@ -23152,6 +23156,7 @@ pixel_x = -24; pixel_y = -9 }, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor/stairs) "mLU" = ( @@ -24006,22 +24011,19 @@ /turf/simulated/wall/r_wall, /area/engineering/lobby) "ngg" = ( -/obj/structure/janitorialcart{ - dir = 1 - }, /obj/effect/floor_decal/corner/purple/full{ dir = 1 }, /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ pixel_y = 28 }, -/obj/structure/mopbucket, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, +/obj/structure/janitorialcart/full{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/outline/custodial, /turf/simulated/floor/tiled, /area/janitor/stairs) "ngA" = ( @@ -68595,7 +68597,7 @@ bGh cnQ tDc etv -tdD +aBr gPM lFE ulB diff --git a/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm b/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm index 76cf7c3e9f0..95c8d8f8c91 100644 --- a/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm +++ b/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm @@ -15169,7 +15169,7 @@ /turf/unsimulated/floor/plating, /area/centcom/holding) "aKp" = ( -/obj/structure/closet/jcloset, +/obj/structure/closet/secure_closet/custodial, /turf/unsimulated/floor{ icon_state = "dark2" }, diff --git a/sound/machines/vehicles/pussywagon/button.ogg b/sound/machines/vehicles/pussywagon/button.ogg new file mode 100644 index 00000000000..62192a8b45d Binary files /dev/null and b/sound/machines/vehicles/pussywagon/button.ogg differ diff --git a/sound/machines/vehicles/pussywagon/key_in.ogg b/sound/machines/vehicles/pussywagon/key_in.ogg new file mode 100644 index 00000000000..94b7e25ca7d Binary files /dev/null and b/sound/machines/vehicles/pussywagon/key_in.ogg differ diff --git a/sound/machines/vehicles/pussywagon/key_out.ogg b/sound/machines/vehicles/pussywagon/key_out.ogg new file mode 100644 index 00000000000..4092b882ff7 Binary files /dev/null and b/sound/machines/vehicles/pussywagon/key_out.ogg differ diff --git a/sound/machines/vehicles/pussywagon/start.ogg b/sound/machines/vehicles/pussywagon/start.ogg new file mode 100644 index 00000000000..0b83b348f52 Binary files /dev/null and b/sound/machines/vehicles/pussywagon/start.ogg differ diff --git a/vueui/src/components/view/vehicles/pussywagon.vue b/vueui/src/components/view/vehicles/pussywagon.vue index e939cca011d..d45311d60e9 100644 --- a/vueui/src/components/view/vehicles/pussywagon.vue +++ b/vueui/src/components/view/vehicles/pussywagon.vue @@ -1,11 +1,11 @@