8 hours, tile scoring.
Alright, the tile scoring works. Tile scoring takes a list of object center center tiles (the tile whose transform is used to determine the spawn location of the object). From that list the field determines how far each tile is from its closest object center.
To start, the center tile is assigned its new values of 0 tiles from an object and loaded into a list of tiles of interest, we then enter the main loop. The main loop takes the tiles of interest (so long as the list is still populated) and finds their adjacent tiles. For each of these adjacents we check if our current distance from the origin is smaller than their currently assigned distance to an object. If true, we assign the new distance and add them to a list of tiles to check next, if not we leave the data as is. Either way the tile is noted as correctly scored and thus no longer needs to be checked. Once all the adjacents are checked we load the tiles of interest with the tiles whose scores were adjusted, increment the distance we are checking at and the loop runs again ignoring all tiles we have noted as correctly scored when they come up as adjacents.
Solved a couple issues that were throwing off the ability to correctly locate adjacent tiles.
When FS or WS is spawned the field data is preserved but the tile scoring loop runs for the center tile of the incoming spawner.
When a object occupying space is destroyed, the entire field is rescored. The tile data is reset and the loop runs for each known object center (This can't be optimal but it isn't the time to optimize).
When the field is cleared, the tile scores are reset.
Fixed the first object being spawned after a boot not impacting tile scoring.
WSJ is passed the occupied tile data from its spawning WS and considered to occupy those same tiles. The tiles clear when the WSJ is cleared from the field. WS does not clear its occupied tiles any longer.