Luksendra

Hello everyone,

Recently, there was a bug in New World that sparked some speculation about how our simulation works. The bug was quickly fixed, but both the speculation and the bug deserve an explanation.

New World is not the authoritative client - from a simulation point of view, New World is completely server-based. At a higher level, the model looks like this: clients send controller input to the server, and the server checks these inputs for constraints that might invalidate them, and then, if accepted, uses them as input to a character ("actor" is our internal name) in the server memory. Then the physics and game rules (entirely server-side) are triggered and the result is sent back to the original client. Then the clients will draw a result determined by the server.

Take for example a player swinging an ax to cut down a tree. The player presses a button and the ax swings, which can seem very client based. What actually happens is more complex. The player presses the button, the message "I pressed the button to swing" is sent to the server, and at the same time the client starts to draw a visualization of the ax swing on the player's display - this part is purely graphic and has nothing to do with the simulation. The server doesn't even know about this graphical representation and hears no information other than just pressing the button.

When the input arrives at the server it is checked if it is possible and then the server starts animating the "skeleton" entirely on the server side for the character on the swing. This is not an approximate or limited version of the skeleton, it is actually fully detailed, fully animated, so we can have the precision that if the ax is barely rubbing against a tree, it is consistent between the server and what the client perceives as possible. If the result of this completely server-based animation is that the ax cuts through the tree, then that result is sent back to the client or an error is sent back. It is important to note that only after the server animates and the ax cuts the tree as a result, is it considered a success. We don't shortcuts or calculate it roughly, we do full physics details for all such actions. After receiving the result, hit or miss, the client will adjust its appearance to match what the server determined. There are a few client-side tricks we use here to "stretch" the animation while the client is waiting for the server's response, but the result is always based only on the server's response. The same pattern applies to combat and other physics simulation interactions.

We had a bug where we waited on the server side for client input under certain circumstances before being processed into results. Combined with the intended weapon effect that allows for a brief invulnerability, this created a situation where players could achieve invulnerability and prolong it, making the client unresponsive even if the client had nothing to say about the damage (both damage dealt and by the player and the damage received) by the player are calculated on the server side based on the results of the physics simulation and the rules of the game). This was a particularly bad mistake given our server based simulation and we apologize for that. We fixed the bug in the code the same day we found out about it, then tested it to make sure nothing was unintended from these changes, and posted the fix immediately.

There are also obvious bugs we are addressing when it comes to speed throttling and action control, ensuring combat remains a playable FPS. However, at no point do clients make decisions or freeze characters - if the character is frozen, it is because the client is lagging in drawing but the server simulation continues.

 

- CommanderAze