Continued to work on Mob synching today. Did some tests with very high network latency and packet loss, levels much worse than your typical connection, and the mob synching worked very well, so I think the current solution will be good enough. There are still a couple of minor problems which I can hopefully iron out tomorrow.
Started to work on properly managing PvP and PvM (player vs mob) in multi-player. Should finish this tomorrow.
Also worked on a problem we found when pasting clipboards in multi-player. The problem was to do with allocating new transmitter/receiver frequencies for pasted WIFI blocks. Working on this problem exposed a deeper problem with how data blocks (blocks with extra data, like chests, turrets, furnaces, transmitters etc) are generally managed in multi-player, specifically how their data is transmitted between machines in the session when their data is changed or as players move into areas of the map where they are present, or when clipboards that contain these blocks are pasted by remote (non-host) players. The current solution was messy, hard to follow in the code, hard to debug/test and it had an ever growing number of corner cases to deal with. So I spent most of the day replacing it with a system that should be much simpler, more robust, more flexible, more scalable and most importantly, easier for me to understand and work with. Hopefully I can also finish this by tomorrow.
Also did some general tweaks with the networking to reduce general bandwidth usage. The main strategy I used here was to look at high bandwidth users, like player and mob state (transmitting player and mob state becomes a serious bandwidth hog when there is more than about 10 players in a session). The game now only sends player or mob state if that state has changed since the last time it was sent. This might seem an obvious thing to do, but it has a cost, it adds significant complexity in the code and opens up corner cases (almost everything I do has a cost to weigh up). Anyway, made some pretty good gains, 1k-2k bytes per second savings in some cases. That might not seem like much, but for the measly bandwidth an XBLIG is allocated by Xbox Live, that's a handy saving that will help reduce general multi-player lag problems.
Also found a problem with explosion synching across the network. Somewhere in past code changes, the synching was lost, so the same explosion could have different results on different machines in the session, this has now been fixed.