Wet/Dry Vac (#26327)

* Wet Dry Vac

* imum

* done
This commit is contained in:
Kurfursten
2020-04-30 05:38:57 -05:00
committed by GitHub
parent e035f8989a
commit 07d190f70f
12 changed files with 199 additions and 1 deletions

View File

@@ -3078,6 +3078,7 @@ var/global/num_vending_terminals = 1
/obj/item/weapon/mech_expansion_kit = 3, /obj/item/weapon/mech_expansion_kit = 3,
/obj/item/weapon/storage/bag/gadgets/part_replacer/injector = 10, /obj/item/weapon/storage/bag/gadgets/part_replacer/injector = 10,
/obj/item/weapon/storage/bag/gadgets/part_replacer/injector/super = 4, /obj/item/weapon/storage/bag/gadgets/part_replacer/injector/super = 4,
/obj/structure/wetdryvac = 1,
) )
prices = list( prices = list(
/obj/item/clothing/suit/storage/trader = 100, /obj/item/clothing/suit/storage/trader = 100,
@@ -3112,6 +3113,7 @@ var/global/num_vending_terminals = 1
/obj/item/weapon/mech_expansion_kit = 50, /obj/item/weapon/mech_expansion_kit = 50,
/obj/item/weapon/storage/bag/gadgets/part_replacer/injector = 15, /obj/item/weapon/storage/bag/gadgets/part_replacer/injector = 15,
/obj/item/weapon/storage/bag/gadgets/part_replacer/injector/super = 50, /obj/item/weapon/storage/bag/gadgets/part_replacer/injector/super = 50,
/obj/structure/wetdryvac = 50,
) )
/obj/machinery/vending/trader/New() /obj/machinery/vending/trader/New()

View File

@@ -5,6 +5,8 @@
anchored = 1 anchored = 1
amount = 1 //Basically moles. amount = 1 //Basically moles.
reagent = FUEL
volatility = 0.02 volatility = 0.02
basecolor = "#6D5757" basecolor = "#6D5757"

View File

@@ -9,6 +9,7 @@ var/global/list/blood_list = list()
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
reagent = BLOOD
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "mfloor1" icon_state = "mfloor1"
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")

View File

@@ -11,6 +11,7 @@
name = "ashes" name = "ashes"
desc = "Ashes to ashes, dust to dust, and into space." desc = "Ashes to ashes, dust to dust, and into space."
gender = PLURAL gender = PLURAL
reagent = TOXIN //ash is bad for you!
icon = 'icons/obj/objects.dmi' icon = 'icons/obj/objects.dmi'
icon_state = "ash" icon_state = "ash"
anchored = 1 anchored = 1
@@ -34,6 +35,7 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
reagent = FLOUR
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "flour" icon_state = "flour"
@@ -43,6 +45,7 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = TRUE anchored = TRUE
reagent = RADIUM
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "greenglow" icon_state = "greenglow"
@@ -56,6 +59,7 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = TRUE anchored = TRUE
reagent = LUMINOL
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "mfloor1" icon_state = "mfloor1"
//icon = 'icons/effects/tomatodecal.dmi' //icon = 'icons/effects/tomatodecal.dmi'
@@ -74,6 +78,7 @@
desc = "Somebody should remove that." desc = "Somebody should remove that."
density = 0 density = 0
anchored = 1 anchored = 1
reagent = SPIDERS //no way this can go wrong, right?
plane = ABOVE_HUMAN_PLANE plane = ABOVE_HUMAN_PLANE
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1" icon_state = "cobweb1"
@@ -83,6 +88,7 @@
desc = "It looks like a melted... something." desc = "It looks like a melted... something."
density = 0 density = 0
anchored = 1 anchored = 1
reagent = CHEMICAL_WASTE
layer = OBJ_LAYER layer = OBJ_LAYER
plane = OBJ_PLANE plane = OBJ_PLANE
icon = 'icons/obj/chemical.dmi' icon = 'icons/obj/chemical.dmi'
@@ -94,6 +100,7 @@
desc = "Somebody should remove that." desc = "Somebody should remove that."
density = 0 density = 0
anchored = 1 anchored = 1
reagent = SPIDERS
plane = ABOVE_HUMAN_PLANE plane = ABOVE_HUMAN_PLANE
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "cobweb2" icon_state = "cobweb2"
@@ -105,6 +112,7 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
reagent = VOMIT
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1" icon_state = "vomit_1"
@@ -161,6 +169,7 @@
desc = "It's red." desc = "It's red."
density = 0 density = 0
anchored = 1 anchored = 1
reagent = TOMATOJUICE
icon = 'icons/effects/tomatodecal.dmi' icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
@@ -178,6 +187,7 @@
desc = "Seems like this one won't hatch." desc = "Seems like this one won't hatch."
density = 0 density = 0
anchored = 1 anchored = 1
//reagent = EGGYOLK (not in yet)
icon = 'icons/effects/tomatodecal.dmi' icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
@@ -204,6 +214,7 @@
desc = "This burnt-out campfire reminds you of someone." desc = "This burnt-out campfire reminds you of someone."
anchored = 1 anchored = 1
density = 0 density = 0
reagent = TOXIN //ash is bad for you!
icon = 'icons/obj/atmos.dmi' icon = 'icons/obj/atmos.dmi'
icon_state = "campfire_burnt" icon_state = "campfire_burnt"
@@ -241,6 +252,7 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
reagent = TOXIN //ash is bad for you!
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "lspaceclutter" icon_state = "lspaceclutter"
@@ -249,6 +261,7 @@
desc = "A disgusting mess." desc = "A disgusting mess."
icon = 'icons/mob/animal.dmi' icon = 'icons/mob/animal.dmi'
icon_state = "cockroach_remains1" icon_state = "cockroach_remains1"
reagent = ROACHSHELL
/obj/effect/decal/cleanable/cockroach_remains/New() /obj/effect/decal/cleanable/cockroach_remains/New()
..() ..()
@@ -265,6 +278,7 @@
desc = "Looks like some one has butter fingers." desc = "Looks like some one has butter fingers."
icon = 'icons/effects/tomatodecal.dmi' icon = 'icons/effects/tomatodecal.dmi'
icon_state = "smashed_butter" icon_state = "smashed_butter"
reagent = LIQUIDBUTTER
/obj/effect/decal/cleanable/virusdish /obj/effect/decal/cleanable/virusdish
name = "broken virus containment dish" name = "broken virus containment dish"
@@ -272,6 +286,7 @@
icon_state = "brokendish-outline" icon_state = "brokendish-outline"
density = 0 density = 0
anchored = 1 anchored = 1
reagent = VIRUSFOOD
mouse_opacity = 1 mouse_opacity = 1
layer = OBJ_LAYER layer = OBJ_LAYER
plane = OBJ_PLANE plane = OBJ_PLANE

View File

@@ -7,6 +7,8 @@ var/list/infected_cleanables = list()
w_type = NOT_RECYCLABLE w_type = NOT_RECYCLABLE
anchored = 1 anchored = 1
var/reagent = null //what reagent did we come from? for wet/dry vac
// For tracking shit across the floor. // For tracking shit across the floor.
var/amount = 0 // 0 = don't track var/amount = 0 // 0 = don't track
var/counts_as_blood = 0 // Cult var/counts_as_blood = 0 // Cult

View File

@@ -2,7 +2,7 @@
name = "rune" name = "rune"
desc = "A rune drawn in crayon." desc = "A rune drawn in crayon."
icon = 'icons/obj/rune.dmi' icon = 'icons/obj/rune.dmi'
reagent = COLORFUL_REAGENT
persistence_type = null //todo persistence_type = null //todo
/obj/effect/decal/cleanable/crayon/New(loc,age,icon_state,color,dir,pixel_x,pixel_y,main = "#FFFFFF",shade = "#000000",var/type = "rune") /obj/effect/decal/cleanable/crayon/New(loc,age,icon_state,color,dir,pixel_x,pixel_y,main = "#FFFFFF",shade = "#000000",var/type = "rune")

View File

@@ -76,6 +76,10 @@
lifespan = world.time + new_lifespan lifespan = world.time + new_lifespan
processing_objects.Add(src) processing_objects.Add(src)
/obj/effect/overlay/puddle/Destroy()
processing_objects.Remove(src)
..()
/obj/effect/overlay/puddle/process() /obj/effect/overlay/puddle/process()
if(world.time >= lifespan) if(world.time >= lifespan)
qdel(src) qdel(src)

View File

@@ -753,6 +753,7 @@
else else
return return
/obj/item/weapon/mech_expansion_kit /obj/item/weapon/mech_expansion_kit
name = "exosuit expansion kit" name = "exosuit expansion kit"
desc = "All the equipment you need to replace that useless legroom with a useful bonus equipment slot on your mech." desc = "All the equipment you need to replace that useless legroom with a useful bonus equipment slot on your mech."
@@ -785,4 +786,175 @@
else else
to_chat(user,"<span class='notice'>You stop modifying the exosuit.</span>") to_chat(user,"<span class='notice'>You stop modifying the exosuit.</span>")
working = FALSE working = FALSE
return 1
/obj/structure/wetdryvac
name = "wet/dry vacuum"
desc = "A powerful vacuum cleaner that can collect both trash and fluids."
density = TRUE
icon = 'icons/obj/objects.dmi'
icon_state = "wetdryvac1"
var/max_trash = 50
var/list/trash = list()
var/obj/item/vachandle/myhandle
/obj/structure/wetdryvac/New()
..()
create_reagents(50)
myhandle = new /obj/item/vachandle(src)
/obj/structure/wetdryvac/Destroy()
if(myhandle.loc == src)
qdel(myhandle)
else
myhandle.myvac = null
myhandle = null
for(var/obj/item/I in trash)
qdel(I)
trash.Cut()
..()
/obj/structure/wetdryvac/examine(mob/user)
..()
to_chat(user,"<span class='info'>The wet tank gauge reads: [reagents.total_volume]/[reagents.maximum_volume]</span>")
to_chat(user,"<span class='info'>The dry storage gauge reads: [trash.len]/[max_trash]</span>")
/obj/structure/wetdryvac/attackby(obj/item/W, mob/user)
if(istype(W,/obj/item/vachandle))
if(!myhandle)
myhandle = W
if(myhandle == W)
to_chat(user,"<span class='notice'>You insert \the [W] into \the [src].")
user.drop_item(W,src)
update_icon()
else
..()
/obj/structure/wetdryvac/attack_hand(mob/user)
if(myhandle.loc == src)
user.put_in_hands(myhandle)
update_icon()
else
..()
/obj/structure/wetdryvac/update_icon()
icon_state = "wetdryvac[myhandle.loc == src]"
/obj/structure/wetdryvac/MouseDropFrom(var/obj/O, src_location, var/turf/over_location, src_control, over_control, params)
if(!can_use(usr,O))
return
if(istype(O,/obj/structure/sink))
if(!reagents.total_volume)
to_chat(usr,"<span class='warning'>\The [src] wet tank is already empty!</span>")
return
playsound(src, 'sound/effects/slosh.ogg', 25, 1)
reagents.clear_reagents()
to_chat(usr, "<span class='notice'>You flush \the [src] wet contents down \the [O].</span>")
else if(istype(O,/obj/item/weapon/reagent_containers) && O.is_open_container())
if(!reagents.total_volume)
to_chat(usr,"<span class='warning'>\The [src] wet tank is already empty!</span>")
return
playsound(src, 'sound/effects/slosh.ogg', 25, 1)
to_chat(usr, "<span class='notice'>You pour \the [src] wet contents into \the [O].</span>")
reagents.trans_to(O.reagents,reagents.total_volume)
else if(istype(O,/obj/machinery/disposal))
if(!contents.len)
to_chat(usr,"<span class='warning'>\The [src] dry storage is already empty!</span>")
return
playsound(src, 'sound/effects/freeze.ogg', 25, 1) //this sounds like trash moving to me
for(var/obj/item/I in trash)
I.forceMove(O)
trash -= I
to_chat(usr, "<span class='notice'>You dump \the [src] dry contents into \the [O].</span>")
/obj/structure/wetdryvac/MouseDropTo(atom/O, mob/user)
if(!can_use(user,O))
return
whrr(get_turf(O))
/obj/structure/wetdryvac/proc/whrr(var/turf/T)
if(!T)
return
playsound(src, 'sound/effects/vacuum.ogg', 25, 1)
for(var/obj/effect/decal/cleanable/C in T)
if(C.reagent)
reagents.add_reagent(C.reagent,1)
qdel(C)
for(var/obj/effect/overlay/puddle/P in T)
if(reagents.is_full())
visible_message("<span class='warning'>\The [src] sputters, wet tank full!</span>")
return
if(P.wet == TURF_WET_LUBE)
reagents.add_reagent(LUBE,1)
else if(P.wet == TURF_WET_WATER)
reagents.add_reagent(WATER,1)
qdel(P)
T.clean_blood()
for(var/obj/item/trash/R in T)
if(trash.len >= max_trash)
visible_message("<span class='warning'>\The [src] sputters, dry storage full!</span>")
return
R.forceMove(src)
trash += R
/obj/structure/wetdryvac/proc/can_use(mob/user, atom/target)
if(!ishigherbeing(user) && !isrobot(user) || user.incapacitated() || user.lying)
return FALSE
if(!Adjacent(user) || !user.Adjacent(target))
return FALSE
return TRUE
/obj/item/vachandle
name = "vacuum handle"
desc = "Handy. It doesn't suck per se, it merely conveys suckage."
w_class = W_CLASS_MEDIUM
icon = 'icons/obj/objects.dmi'
icon_state = "vachandle"
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/misc_tools.dmi', "right_hand" = 'icons/mob/in-hand/right/misc_tools.dmi')
item_state = "vachandle"
var/obj/structure/wetdryvac/myvac
var/event_key = null
/obj/item/vachandle/New()
..()
myvac = loc
/obj/item/vachandle/Destroy()
myvac.myhandle = null
myvac = null
..()
/obj/item/vachandle/pickup(mob/user)
..()
event_key = user.on_moved.Add(src, "mob_moved")
/obj/item/vachandle/dropped(mob/user)
user.on_moved.Remove(event_key)
event_key = null
retract()
/obj/item/vachandle/proc/mob_moved(var/list/event_args, var/mob/holder)
if(myvac && get_dist(src,myvac) > 2) //Needs a little leeway because dragging isn't instant
retract()
myvac.update_icon()
/obj/item/vachandle/proc/retract()
if(loc == myvac)
return
visible_message("<span class='warning'>\The [src] snaps back into \the [myvac]!</span>")
if(ismob(loc))
var/mob/M = loc
M.drop_item(src,myvac)
else
forceMove(myvac)
/obj/item/vachandle/preattack(atom/target, mob/user , proximity)
if(!myvac)
to_chat(user, "<span class='warning'>\The [src] isn't attached to a vacuum!</span>")
return
if(!proximity || !myvac.can_use(user,target))
return
if(target == myvac)
return ..()
myvac.whrr(get_turf(target))
return 1 return 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 107 KiB

BIN
sound/effects/vacuum.ogg Normal file

Binary file not shown.