anchor.diff:  					toSay += "[curse_words] "
   				src.say("Hey [nouns_generic], why dont you go [toSay], you [nouns_insult]!")
   
  -/mob/living/carbon/human/interactive/proc/shitcurity(obj)
  -	if(retal && TARGET)
  -		for(var/obj/item/I in src.contents)
  -			if(istype(I,/obj/item/weapon/restraints))
  -				take_to_slot(I)
  -				I.attack(TARGET,src)
  -				sleep(25)
  -
  -/mob/living/carbon/human/interactive/proc/healpeople(obj)
  -	var/shouldTryHeal = 0
  -	var/obj/item/stack/medical/M
  -
  +
  +/mob/living/carbon/human/interactive/proc/getAllContents()
   	var/list/allContents = list()
  -
   	for(var/atom/A in contents)
   		allContents += A
   		if(A.contents.len > 0)
   			for(var/atom/B in A)
   				allContents += B
  +	return allContents
  +
  +/mob/living/carbon/human/interactive/proc/enforceHome()
  +	if(!(get_turf(src) in get_area_turfs(job2area(myjob))))
  +		tryWalk(pick(get_area_turfs(job2area(myjob))))
  +
  +/mob/living/carbon/human/interactive/proc/npcDrop(var/obj/item/A,var/blacklist = 0)
  +	if(blacklist)
  +		blacklistItems += A
  +	A.loc = get_turf(src) // drop item works inconsistently
  +	enforce_hands()
  +	update_icons()
  +
  +/mob/living/carbon/human/interactive/proc/botany(obj)
  +	var/list/allContents = getAllContents()
  +	enforceHome()
  +
  +	var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/internalBeaker = locate(/obj/item/weapon/reagent_containers/glass/beaker/bluespace) in allContents
  +	var/obj/item/weapon/storage/bag/plants/internalBag = locate(/obj/item/weapon/storage/bag/plants) in allContents
  +
  +	if(!internalBag)
  +		internalBag = new/obj/item/weapon/storage/bag/plants(src)
  +	if(!internalBeaker)
  +		internalBeaker = new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src)
  +		internalBeaker.name = "Grow-U-All Super Spray"
  +
  +	if(internalBeaker && internalBag)
  +		var/obj/machinery/hydroponics/HP
  +
  +		//consider the appropriate target
  +		var/list/considered = list()
  +
  +		for(var/obj/machinery/hydroponics/tester in view(12,src))
  +			considered[tester] = 1
  +
  +			if(!tester.planted)
  +				considered[tester] += 50
  +			if(tester.weedlevel > 0)
  +				considered[tester] += 5
  +			if(tester.pestlevel > 0)
  +				considered[tester] += 5
  +			if(tester.nutrilevel <  tester.maxnutri)
  +				considered[tester] += 15
  +			if(tester.waterlevel < tester.maxwater)
  +				considered[tester] += 15
  +			if(tester.harvest || tester.dead)
  +				considered[tester] += 100
  +			considered[tester] = max(1,considered[tester] - get_dist(src,tester))
  +
  +		var/index = 0
  +		for(var/A in considered)
  +			++index
  +			if(considered[A] > considered[HP] || !HP)
  +				HP = considered[index]
  +
  +		if(HP)
  +			TARGET = HP
  +			if(!Adjacent(HP))
  +				tryWalk(get_turf(HP))
  +			else
  +				if(HP.harvest || HP.dead)
  +					HP.attack_hand(src)
  +				else if(!HP.planted)
  +					var/seedType = pick(typesof(/obj/item/seeds) - /obj/item/seeds)
  +					var/obj/item/seeds/SEED = new seedType(src)
  +					customEmote("[src] [pick("gibbers","drools","slobbers","claps wildly","spits")] towards [TARGET], producing a [SEED]!")
  +					HP.attackby(SEED,src)
  +				else
  +					var/change = 0
  +					if(HP.weedlevel > 0)
  +						change = 1
  +						if(!internalBeaker.reagents.has_reagent("weedkiller", 10))
  +							internalBeaker.reagents.add_reagent("weedkiller",10)
  +					if(HP.pestlevel > 0)
  +						change = 1
  +						if(!internalBeaker.reagents.has_reagent("pestkiller", 10))
  +							internalBeaker.reagents.add_reagent("pestkiller",10)
  +					if(HP.nutrilevel <  HP.maxnutri)
  +						change = 1
  +						if(!internalBeaker.reagents.has_reagent("eznutriment", 15))
  +							internalBeaker.reagents.add_reagent("eznutriment",15)
  +						if(!internalBeaker.reagents.has_reagent("diethylamine", 15))
  +							internalBeaker.reagents.add_reagent("diethylamine",15)
  +					if(HP.waterlevel < HP.maxwater)
  +						change = 1
  +						if(!internalBeaker.reagents.has_reagent("holywater", 50))
  +							internalBeaker.reagents.add_reagent("holywater",50)
  +					if(change)
  +						HP.attackby(internalBeaker,src)
  +
  +	var/obj/item/weapon/reagent_containers/food/snacks/grown/GF = locate(/obj/item/weapon/reagent_containers/food/snacks/grown) in view(12,src)
  +	if(GF)
  +		if(!Adjacent(GF))
  +			tryWalk(get_turf(GF))
  +		else
  +			GF.attackby(internalBag,src)
  +
  +	if(internalBag.contents.len > 0)
  +		var/obj/machinery/smartfridge/SF = locate(/obj/machinery/smartfridge) in range(MAX_RANGE_FIND,src)
  +		if(!Adjacent(SF))
  +			tryWalk(get_turf(SF))
  +		else
  +			customEmote("[src] [pick("gibbers","drools","slobbers","claps wildly","spits")], upending the [internalBag]'s contents all over [TARGET]!")
  +			//smartfridges call updateUsrDialog when you call attackby, so we're going to have to cheese-magic-space this
  +			for(var/obj/toLoad in internalBag.contents)
  +				if(contents.len >= SF.max_n_of_items)
  +					break
  +				if(SF.accept_check(toLoad))
  +					SF.load(toLoad)
  +
  +/mob/living/carbon/human/interactive/proc/shitcurity(obj)
  +	var/list/allContents = getAllContents()
  +
  +	if(retal && TARGET)
  +		for(var/obj/item/I in allContents)
  +			if(istype(I,/obj/item/weapon/restraints))
  +				I.attack(TARGET,src) // go go bluespace restraint launcher!
  +				sleep(25)
  +
  +/mob/living/carbon/human/interactive/proc/clowning(obj)
  +	var/list/allContents = getAllContents()
  +
  +	for(var/A in allContents)
  +		if(istype(A,/obj/item/weapon/soap))
  +			npcDrop(A)
  +		if(istype(A,/obj/item/weapon/reagent_containers/food/snacks/grown/banana))
  +			var/obj/item/weapon/reagent_containers/food/snacks/B = A
  +			B.attack(src, src)
  +		if(istype(A,/obj/item/weapon/grown/bananapeel))
  +			npcDrop(A)
  +
  +
  +/mob/living/carbon/human/interactive/proc/healpeople(obj)
  +	var/shouldTryHeal = 0
  +	var/obj/item/stack/medical/M
  +
  +	var/list/allContents = getAllContents()
   
   	for(var/A in allContents)
   		if(istype(A,/obj/item/stack/medical))
  
positive.code: 	//
  	timeout = 0
  	inactivity_period = 0
  	interest = 100
  	//
  	update_icons()
  	if(doReset)
  
negative.code: 		if("Janitor")
  			favoured_types = list(/obj/item/weapon/mop, /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/reagent_containers/spray/cleaner, /obj/effect/decal/cleanable)
  			functions += "dojanitor"
  		if("Clown")
  			favoured_types = list(/obj/item/weapon/soap, /obj/item/weapon/reagent_containers/food/snacks/grown/banana,/obj/item/weapon/grown/bananapeel)
  			functions += "clowning"
  		if("Botanist")
  			favoured_types = list(/obj/machinery/hydroponics,  /obj/item/weapon/reagent_containers, /obj/item/weapon)
  			functions += "botany"
  		else
  			favoured_types = list(/obj/item/clothing)
  
  