From 7a8126396ea4ecab9008287f4ccdf9b830232cc0 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sun, 17 May 2020 19:07:28 -0400 Subject: [PATCH 1/3] New janicart sprites/features --- .../objects/items/weapons/storage/storage.dm | 9 + code/game/objects/objs.dm | 13 +- code/game/objects/structures/janicart.dm | 215 ++++++++++++++---- icons/obj/janitor.dmi | Bin 12507 -> 13336 bytes nano/templates/janitorcart.tmpl | 5 + 5 files changed, 199 insertions(+), 43 deletions(-) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index d14a4ab29b..5fc789549a 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -729,3 +729,12 @@ /obj/item/weapon/storage/AllowDrop() return TRUE + +//Useful for spilling the contents of containers all over the floor +/obj/item/weapon/storage/proc/spill(var/dist = 2, var/turf/T = null) + if (!istype(T))//If its not on the floor this might cause issues + T = get_turf(src) + + for (var/obj/O in contents) + remove_from_storage(O, T) + O.tumble(2) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2a361f1d46..1274c10e4d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -199,4 +199,15 @@ // Test for if stepping on a tile containing this obj is safe to do, used for things like landmines and cliffs. /obj/proc/is_safe_to_step(mob/living/L) - return TRUE \ No newline at end of file + return TRUE + +//To be called from things that spill objects on the floor. +//Makes an object move around randomly for a couple of tiles +/obj/proc/tumble(var/dist = 2) + set waitfor = FALSE + if (dist >= 1) + dist += rand(0,1) + for(var/i = 1, i <= dist, i++) + if(src) + step(src, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index b7807711e3..e6e58954a4 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -7,95 +7,147 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) icon_state = "cart" anchored = 0 density = 1 - climbable = 1 flags = OPENCONTAINER + climbable = TRUE //copypaste sorry var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite var/obj/item/weapon/storage/bag/trash/mybag = null var/obj/item/weapon/mop/mymop = null var/obj/item/weapon/reagent_containers/spray/myspray = null var/obj/item/device/lightreplacer/myreplacer = null + var/obj/structure/mopbucket/mybucket = null + var/has_items = FALSE + var/dismantled = TRUE var/signs = 0 //maximum capacity hardcoded below -/obj/structure/janitorialcart/New() - create_reagents(300) - ..() +/obj/structure/janitorialcart/Destroy() + QDEL_NULL(mybag) + QDEL_NULL(mymop) + QDEL_NULL(myspray) + QDEL_NULL(myreplacer) + QDEL_NULL(mybucket) + return ..() /obj/structure/janitorialcart/examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "It contains [reagents.total_volume] unit\s of liquid!" + if(..(user, 1)) + if (mybucket) + var/contains = mybucket.reagents.total_volume + to_chat(user, "\icon[src] The bucket contains [contains] unit\s of liquid!") + else + to_chat(user, "\icon[src] There is no bucket mounted on it!") + +/obj/structure/janitorialcart/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) + if (istype(O, /obj/structure/mopbucket) && !mybucket) + O.forceMove(src) + mybucket = O + to_chat(user, "You mount the [O] on the janicart.") + update_icon() + else + ..() /obj/structure/janitorialcart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/storage/bag/trash) && !mybag) - user.drop_item() - mybag = I - I.loc = src - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") - - else if(istype(I, /obj/item/weapon/mop)) - if(I.reagents.total_volume < I.reagents.maximum_volume) //if it's not completely soaked we assume they want to wet it, otherwise store it - if(reagents.total_volume < 1) - to_chat(user, "[src] is out of water!") + if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/reagent_containers/glass/rag) || istype(I, /obj/item/weapon/soap)) + if (mybucket) + if(I.reagents.total_volume < I.reagents.maximum_volume) + if(mybucket.reagents.total_volume < 1) + to_chat(user, "[mybucket] is empty!") + else + mybucket.reagents.trans_to_obj(I, 5) // + to_chat(user, "You wet [I] in [mybucket].") + playsound(loc, 'sound/effects/slosh.ogg', 25, 1) else - reagents.trans_to_obj(I, 5) // - to_chat(user, "You wet [I] in [src].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return - if(!mymop) - user.drop_item() - mymop = I - I.loc = src - update_icon() - updateUsrDialog() - to_chat(user, "You put [I] into [src].") + to_chat(user, "[I] can't absorb anymore liquid!") + else + to_chat(user, "There is no bucket mounted here to dip [I] into!") + return 1 + + else if (istype(I, /obj/item/weapon/reagent_containers/glass/bucket) && mybucket) + I.afterattack(mybucket, usr, 1) + update_icon() + return 1 else if(istype(I, /obj/item/weapon/reagent_containers/spray) && !myspray) - user.drop_item() + user.unEquip(I, 0, src) myspray = I - I.loc = src update_icon() updateUsrDialog() to_chat(user, "You put [I] into [src].") + return 1 else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer) - user.drop_item() + user.unEquip(I, 0, src) myreplacer = I - I.loc = src update_icon() updateUsrDialog() to_chat(user, "You put [I] into [src].") + return 1 + + else if(istype(I, /obj/item/weapon/storage/bag/trash) && !mybag) + user.unEquip(I, 0, src) + mybag = I + update_icon() + updateUsrDialog() + to_chat(user, "You put [I] into [src].") + return 1 else if(istype(I, /obj/item/weapon/caution)) if(signs < 4) - user.drop_item() - I.loc = src + user.unEquip(I, 0, src) signs++ update_icon() updateUsrDialog() to_chat(user, "You put [I] into [src].") else to_chat(user, "[src] can't hold any more signs.") - - else if(istype(I, /obj/item/weapon/reagent_containers/glass)) - return // So we do not put them in the trash bag as we mean to fill the mop bucket + return 1 else if(mybag) - mybag.attackby(I, user) + return mybag.attackby(I, user) + //This return will prevent afterattack from executing if the object goes into the trashbag, + //This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash + + else if (!has_items) + if (I.is_wrench()) + if (do_after(user, 5 SECONDS, src)) + dismantle(user) + return + ..() + + +//New Altclick functionality! +//Altclick the cart with a mop to stow the mop away +//Altclick the cart with a reagent container to pour things into the bucket without putting the bottle in trash +/obj/structure/janitorialcart/AltClick(mob/living/user) + if(user.incapacitated() || !Adjacent(user)) return + var/obj/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/mop)) + if(!mymop) + usr.drop_from_inventory(I,src) + mymop = I + update_icon() + updateUsrDialog() + to_chat(usr, "You put [I] into [src].") + update_icon() + else + to_chat(usr, "The cart already has a mop attached") + return + else if(istype(I, /obj/item/weapon/reagent_containers) && mybucket) + var/obj/item/weapon/reagent_containers/C = I + C.afterattack(mybucket, usr, 1) + update_icon() /obj/structure/janitorialcart/attack_hand(mob/user) ui_interact(user) return -/obj/structure/janitorialcart/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/structure/janitorialcart/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = TRUE) var/data[0] data["name"] = capitalize(name) data["bag"] = mybag ? capitalize(mybag.name) : null + data["bucket"] = mybucket ? capitalize(mybucket.name) : null data["mop"] = mymop ? capitalize(mymop.name) : null data["spray"] = myspray ? capitalize(myspray.name) : null data["replacer"] = myreplacer ? capitalize(myreplacer.name) : null @@ -107,6 +159,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) ui.set_initial_data(data) ui.open() + /obj/structure/janitorialcart/Topic(href, href_list) if(!in_range(src, usr)) return @@ -146,13 +199,24 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) else warning("[src] signs ([signs]) didn't match contents") signs = 0 + if("bucket") + if(mybucket) + mybucket.forceMove(get_turf(user)) + to_chat(user, "You unmount [mybucket] from [src].") + mybucket = null update_icon() updateUsrDialog() + /obj/structure/janitorialcart/update_icon() - overlays = null + overlays.Cut() + + if(mybucket) + overlays += "cart_bucket" + if(mybucket.reagents.total_volume >= 1) + overlays += "water_cart" if(mybag) overlays += "cart_garbage" if(mymop) @@ -165,6 +229,73 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) overlays += "cart_sign[signs]" + + + + +//This is called if the cart is caught in an explosion, or destroyed by weapon fire +/obj/structure/janitorialcart/proc/spill(var/chance = 100) + var/turf/dropspot = get_turf(src) + if (mymop && prob(chance)) + mymop.forceMove(dropspot) + mymop.tumble(2) + mymop = null + + if (myspray && prob(chance)) + myspray.forceMove(dropspot) + myspray.tumble(3) + myspray = null + + if (myreplacer && prob(chance)) + myreplacer.forceMove(dropspot) + myreplacer.tumble(3) + myreplacer = null + + if (mybucket && prob(chance*0.5))//bucket is heavier, harder to knock off + mybucket.forceMove(dropspot) + mybucket.tumble(1) + mybucket = null + + if (signs) + for (var/obj/item/weapon/caution/Sign in src) + if (prob(min((chance*2),100))) + signs-- + Sign.forceMove(dropspot) + Sign.tumble(3) + if (signs < 0)//safety for something that shouldn't happen + signs = 0 + update_icon() + return + + if (mybag && prob(min((chance*2),100)))//Bag is flimsy + mybag.forceMove(dropspot) + mybag.tumble(1) + mybag.spill()//trashbag spills its contents too + mybag = null + + update_icon() + + + +/obj/structure/janitorialcart/proc/dismantle(var/mob/user = null) + if (!dismantled) + if (has_items) + spill() + + new /obj/item/stack/material/steel(src.loc, 10) + new /obj/item/stack/material/plastic(src.loc, 10) + new /obj/item/stack/rods(src.loc, 20) + dismantled = 1 + qdel(src) + + +/obj/structure/janitorialcart/ex_act(severity) + spill(100 / severity) + ..() + + + + //old style retardo-cart /obj/structure/bed/chair/janicart name = "janicart" diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 2a08fc2a8d4853f8a1ad7d11bbdfe21623bd7a0d..349c8a40304019697d5de02dae65b219c67b48bc 100644 GIT binary patch literal 13336 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 {{/if}} + {{if data.bucket}} +
+ {{:helper.link(data.bucket, '', { 'take' : 'bucket' })}} +
+ {{/if}} \ No newline at end of file From 935eddca36afc24ad1d5162e9e8ea170b6c406ec Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 22 May 2020 10:04:50 -0400 Subject: [PATCH 2/3] Add description_info for new janicart features --- code/game/objects/structures/janicart.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index e6e58954a4..78bc276ecd 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) /obj/structure/janitorialcart name = "janitorial cart" desc = "The ultimate in janitorial carts! Has space for water, mops, signs, trash bags, and more!" + description_info = "You can use alt-click while holding a mop to stow the mop. Alt-click holding a reagent container will empty the contents into the bucket without trying to put the container in any attached trash bag." icon = 'icons/obj/janitor.dmi' icon_state = "cart" anchored = 0 From 8496090581a1366517dad7675d2ea22d82c27c75 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Fri, 22 May 2020 10:07:04 -0400 Subject: [PATCH 3/3] Janicart changelog --- html/changelogs/arokha-janicart.yml | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 html/changelogs/arokha-janicart.yml diff --git a/html/changelogs/arokha-janicart.yml b/html/changelogs/arokha-janicart.yml new file mode 100644 index 0000000000..9caf37fab8 --- /dev/null +++ b/html/changelogs/arokha-janicart.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Arokha + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "New sprites for janicart" + - tweak: "Alt-click helpers for stowing mop, chemicals on janicart"