anchor.diff:  	var/spreadIntoAdjacentChance = 75
   	/// Internal seed of the glowshroom, stats are stored here
   	var/obj/item/seeds/myseed = /obj/item/seeds/glowshroom
  +
  +	/// If we fail to spread this many times we stop trying to spread
  +	var/max_failed_spreads = 5
   	/// Turfs where the glowshroom cannot spread to
   	var/static/list/blacklisted_glowshroom_turfs = typecacheof(list(
   	/turf/open/lava,
  
positive.code: 	else //if on the floor, glowshroom on-floor sprite
  		icon_state = base_icon_state
  
  	addtimer(CALLBACK(src, .proc/Spread), delay_spread)
  	addtimer(CALLBACK(src, .proc/Decay), delay_decay, FALSE) // Start decaying the plant
  
  /**
    * Causes glowshroom spreading across the floor/walls.
    */
  
  /obj/structure/glowshroom/proc/Spread()
  	var/turf/ownturf = get_turf(src)
  	var/shrooms_planted = 0
  	for(var/i in 1 to myseed.yield)
  		var/chance_stats = ((myseed.potency + myseed.endurance * 2) * 0.2) // Chance of generating a new mushroom based on stats
  		var/chance_generation = (100 / (generation * generation)) // This formula gives you diminishing returns based on generation. 100% with 1st gen, decreasing to 25%, 11%, 6, 4, 2...
  		if(prob(max(chance_stats, chance_generation))) // Whatever is the higher chance we use it
  			var/list/possibleLocs = list()
  			var/spreadsIntoAdjacent = FALSE
  
  			if(prob(spreadIntoAdjacentChance))
  				spreadsIntoAdjacent = TRUE
  
  			for(var/turf/open/floor/earth in view(3,src))
  				if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs))
  					continue
  				if(!ownturf.CanAtmosPass(earth))
  					continue
  				if(spreadsIntoAdjacent || !locate(/obj/structure/glowshroom) in view(1,earth))
  					possibleLocs += earth
  				CHECK_TICK
  
  			if(!possibleLocs.len)
  				break
  
  			var/turf/newLoc = pick(possibleLocs)
  
  			var/shroomCount = 0 //hacky
  			var/placeCount = 1
  
negative.code: 	else // Timed decay
  		myseed.endurance -= 1
  		if (myseed.endurance > 0)
  			addtimer(CALLBACK(src, .proc/Decay), delay_decay, TIMER_UNIQUE|TIMER_NO_HASH_WAIT) // Recall decay timer
  			return
  	if (myseed.endurance < 1) // Plant is gone
  		qdel(src)
  