* Client-Side-Prediction-Test An example of client-side prediction for networked games, as research and training for 'Spacewar!' ** What is this repository for? I realized that the current netcode of Spacewar was fine for simply running two instances of the game on the same computer; but it would not hold up to latencies of actual networks nor would it be able to do any structured communication due to being entirely over UDP. I knew this when writing it, but I needed to learn how to do it properly first. Hence, this repository. I will be keeping notes on the techniques and a devlog as I come up against any issues. * Developer's Log: ** Entry 00: Intentions: I intend to build a simple networked "game" where players can join a server using a client, and then move around in an empty 2D space where they can see other players. I intend to have the positional data transmitted over UDP, and command data transmitted over TCP, such as allowing the connection and disconnection of players. This simulation must be relatively resistant to latency issues, and must be reasonably smooth. This will provide a simple enough simulation to learn the techniques, while also being similar enough to "Spacewar!" so that it's not too big of a stretch to update that project's netcode. It may be cute to have this be some sort of chat program, but that's another project for another day. For now, circles moving around in an empty space that move smoothly over network connections is the goal. Let's get started! ** Entry 01: First Steps: I think my first step will be creating the TCP portion of the client-server interaction. This should be relatively trivial, so I can get right to it. Simply transmitting a few integers back and forth will do well. ** Entry 02: TCP & UDP basics completed: The TCP portion is completed, and I have also created a basic simulation which is based on the model that is described in the first article in the series, and the model which "Spacewar!" currently uses. Time to start work on actual client side prediction and other techniques. ** Entry 03: That seems far too easy: Simply duplicating the server's game thread seems to meet the concept of client side prediction described in the second article. I'd imagine there's still a lot more to deal with, but we'll see how much of a difference this makes to how it feels. I'll report back. ** Entry 04: Whoops, little oversight! I didn't make the client update it's own input in the state constantly, so there wasn't the required "single-player" feeling in the client. Not exactly what we're going for, here! * Notes On Techniques: ** Entry 00: Where I'm Learning All This From: I'm using a series of articles from gabrielgambetta.com, which seem to be well written, and reasonably clear. (So big thanks, Gabriel!) I intend to note my understanding as I progress through these articles (while simultaneously implementing them), and therefore provide a more practically based version of the information. Will it be better? Possibly, though unlikely! [[https://www.gabrielgambetta.com/client-server-game-architecture.html][Fast-Paced Multiplayer by Gabriel Gambetta]]