@critcodedtuna, Hi Crit. I know you know a lot about game stats and have experience running multiplayer servers. Do you have any suggestions for the madam and her son?
I've noticed some subtle (and sometimes insidious) differences between single player and multiplayer behavior, but I don't have any clear or decisive explanation for it. For instance, I had built
this Truffle Worm farm in 1.2.4.1, and found it completely broken in multiplayer. I reconstructed it block by block in single player and it worked properly. I'd also tried some of the event type farms with mixed results. I think the Horseman's Blade/Statues killbox method marginally worked, and a
cannonball arena worked more or less. I never got around to trying the AFK boss stuff, but I suspect they would be untenable in multiplayer.
My working, yet unproven hypothesis is that this has something to do with collision detection being slightly unreliable when the latency of multiplayer is introduced. The game is running on a 60 tick per second loop. In single player, you have a tight loop where attacks, projectile movement, enemy movement, and collision detection are happening more or less in immediate succession with no delay. In multiplayer, you add a layer: actions are converted to messages, transmitted to the client, the client interprets the message, and then acts on it. I think this might defer some of that process, so states can get a little out of sync and some collision detections don't always square up once the client is trying to calculate it. It's not necessarily a large amount, but it could add up and alter expected behavior -- however, something like a moon event where there's a whole lot going on would probably greatly exaggerate the difference.
I'm not 100% sure how much of this is handled by the server, how much is handled by the client, and how much is done with confirmation between both. I believe projectiles are largely handled by the client -- the client sends a 0x1b message to the server when the player creates a projectile, and the server passes this along to the other clients. The clients then deal with the trajectory locally. I would guess in the case of traps, the server generates the message and sends it to all clients for them to deal with accordingly. The server gives some direction of NPC behavior (message 0x17 includes some extra AI-specific data), but it doesn't look like the client ever sends any corresponding information back to the server. Does this mean the server manages
all NPC movement? Someday I might feel motivated to punt the traffic through Wireshark to see what's happening.
Additionally, depending on how reliant you are on health drops, more players in the mix makes for healing potentially being spread around and not being quite as effective as in single player.
This is the best explanation I've been able to come up with thus far, based on experience and casual poking and prodding. I'm open to any confirmation or correction to this analysis, along with any alternate hypotheses that might explain what's going on.