anchor.diff: +/obj/structure/janitorialcart
  +	name = "janitorial cart"
  +	icon = 'icons/obj/janitor.dmi'
  +	icon_state = "cart"
  +	anchored = 0
  +	density = 1
  +	flags = OPENCONTAINER
  +	//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/signs = 0	//maximum capacity of four signs imposed by sprite
  +
  +
  +/obj/structure/janitorialcart/New()
  +	var/datum/reagents/R = new/datum/reagents(100)
  +	reagents = R
  +	R.my_atom = src
  +
  +
  +/obj/structure/janitorialcart/examine()
  +	set src in usr
  +	usr << "\icon[src] [src] contains [reagents.total_volume] unit\s of water!"
  +	usr << "There are [signs] sign\s in [src]."
  +	//mop and garbage bag are visible, so don't need to be mentioned.
  +
  +
  +/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()
  +		user << "<span class='notice'>You put [I] into [src].</span>"
  +
  +	else if(istype(I, /obj/item/weapon/mop))
  +		if(I.reagents.total_volume < 1 && reagents.total_volume > 1)
  +			reagents.trans_to(I, 2)
  +			user << "<span class='notice'>You wet [I] in [src].</span>"
  +			playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
  +		else if(!mymop)
  +			user.drop_item()
  +			mymop = I
  +			I.loc = src
  +			update_icon()
  +			updateUsrDialog()
  +			user << "<span class='notice'>You put [I] into [src].</span>"
  +
  +	else if(istype(I, /obj/item/weapon/caution))
  +		if(signs < 4)
  +			user.drop_item()
  +			I.loc = src
  +			signs++
  +			update_icon()
  +			updateUsrDialog()
  +			user << "<span class='notice'>You put [I] into [src].</span>"
  +		else
  +			user << "<span class='notice'>[src] can't hold any more signs.</span>"
  +
  +
  +/obj/structure/janitorialcart/attack_hand(mob/user)
  +	user.set_machine(src)
  +	var/dat
  +	if(mybag)
  +		dat += "<a href='?src=\ref[src];garbage=1'>[mybag.name]</a><br>"
  +	if(mymop)
  +		dat += "<a href='?src=\ref[src];mop=1'>[mymop.name]</a><br>"
  +	if(signs)
  +		dat += "<a href='?src=\ref[src];sign=1'>[signs] sign\s</a><br>"
  +	var/datum/browser/popup = new(user, "janicart", name, 240, 160)
  +	popup.set_content(dat)
  +	popup.open()
  +
  +
  +/obj/structure/janitorialcart/Topic(href, href_list)
  +	if(!ishuman(usr))
  +		return
  +	var/mob/living/carbon/human/user = usr
  +
  +	if(href_list["garbage"])
  +		if(mybag)
  +			user.put_in_hands(mybag)
  +			user << "<span class='notice'>You take [mybag] from [src].</span>"
  +			mybag = null
  +	if(href_list["mop"])
  +		if(mymop)
  +			user.put_in_hands(mymop)
  +			user << "<span class='notice'>You take [mymop] from [src].</span>"
  +			mymop = null
  +	if(href_list["sign"])
  +		if(signs)
  +			var/obj/item/weapon/caution/Sign = locate(/obj/item/weapon/caution) in src
  +			if(Sign)
  +				user.put_in_hands(Sign)
  +				user << "<span class='notice'>You take \a [Sign] from [src].</span>"
  +				signs--
  +			else
  +				warning("[src] signs ([signs]) didn't match contents")
  +				signs = 0
  +			update_icon()
  +
  +	updateUsrDialog()
  +
  +
  +/obj/structure/janitorialcart/update_icon()
  +	overlays = null
  +	if(mybag)
  +		overlays += "cart_garbage"
  +	if(mymop)
  +		overlays += "cart_mop"
  +	if(signs)
  +		overlays += "cart_sign"
  +
  +
  +//old style retardo-cart
   /obj/structure/stool/bed/chair/janicart
   	name = "janicart"
   	icon = 'icons/obj/vehicles.dmi'
  
positive.code: 		update_mob()
  		handle_rotation()
  	else
  		user << "<span class='notice'>You'll need the keys in one of your hands to drive this pimpin' ride.</span>"
  
  /obj/structure/stool/bed/chair/janicart/Move()
  	..()
  	if(buckled_mob)
  		if(buckled_mob.buckled == src)
  			buckled_mob.loc = loc
  
  /obj/structure/stool/bed/chair/janicart/buckle_mob(mob/M, mob/user)
  	if(M != user || !ismob(M) || get_dist(src, user) > 1 || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon))
  
negative.code: 	//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/callme = "pimpin' ride"	//how do people refer to it?
  
  
  /obj/structure/stool/bed/chair/janicart/New()
  	handle_rotation()
  