Serious Sam handled massive amounts of enemies on 56k modem connections(staniks.github.io) |
Serious Sam handled massive amounts of enemies on 56k modem connections(staniks.github.io) |
I loved that game.
I was a huge fan of co-op games and shooters, but all my friends wanted to play Counter Strike all the time.
With Serious Sam I could at least sometimes motivate them to play something I liked.
Thanks for your service! :D
On a similar note, Counter-Strike never looked good, but was popular for a long time because it ran great on toaster PCs
* At least at that time, EA QA and Tech Support had a lot of overlap; support guys would be come in-house beta testers in the Summer when they were trying to get games done for the holidays and do Tech Support in the Winter around Christmas when the calls went up.
The GBC Link Cable would pass 1 byte in each direction at the same time. It's a pair of shift registers filling each other up across the cable.
The game was locked to the GBC's frame rate. There was a lot work to update the screen that had to happen in each (effectively) V-Blank and if it was missed the smooth scrolling stuttered.
At multiplayer startup we passed our seed. To run it looked like this:
On frame A it reads the controls, and packs them into a byte and puts that in the transfer buffer. The transfer occurs while it renders frame B. At the start of frame C it has the local controls encoded in the byte sent on frame A and it has the other side's controls in the byte received in frame B.
It applies the controls to the game state and renders frame C. Local and remote controls are applied with one frame delay.
There was no frame delay of the controls for local play so if you ever lost in multi-player feel free to blame lag and me specifically if you need to.
Thank you for the technical note on the multiplayer implementation -- that's really cool!
https://www.gamedeveloper.com/programming/1500-archers-on-a-...
Either you have the resources, or you don't. Don't cap for reasons of capping.
I have no experience here, but I guess the difficulty of such a strategy comes from ordering "events" in a game loop.
And now literally two decades have passed and its considered a classic in its own right.
https://www.gamedevs.org/uploads/tribes-networking-model.pdf
In fact, I downloaded Tribes 2 a while back and was playing against bots just a few months ago.
The game is dated but it was still fun... in fact, I've often thought of trying to remake it in Unity or something!
Maybe one day.
But Quake went a different direction, sending the client updates about every entity they could see. Which had some benefits (players don't have to be perfectly synchronized) but also drawbacks (bandwidth proportional to scene complexity).
I think some of the extrapolation might have also inspired optimizations made in CPMA mod for Quake3, which to this day, I think, has the best netcode of all games. You can actually compete with 100 ping, in it, which is completely unplayable in OSP or vanilla Q3. I don’t think any other game even attempts to be so optimized for competitive online FPS.
Even now, the game mostly holds up pretty well and it still kind of impresses me.
I know many people love Doom Eternal and other shooters with similar issues. Maybe I'm just sensitive to these kinds of frustrations.
It's obviously not apples to apples, the models in GTA IV are much more detailed, but it was still pretty disappointing to play initially.
It's still my favorite GTA game, but I ended up playing through the 360 version my first time around.
The OS TCP stack basically will show data in a sequential fashion to the userspace code, this greatly simplifies things like a HTTP stream but in a game it also means that even if 9 out of 10 packets have arrived, if the lost one is the first packet then we need to wait for another roundtrip or more before seeing all the packets because the first one still needs to be re-sent before anything is seen.
With UDP and custom handling you can just proceed to render and show everything as it shows up, asking for a re-send will at worst cause re-simulation in an engine like SS's but for most parts the player won't notice unless something significant was lost.
For those that played Quake 1 before Quake World the difference was staggering, a Q1 session would freeze on packet-losses when the client tried to catch up(hard when a significant portion of the bandwidth was already used on the modem) whilst QW mostly kept on trucking with some jerks (they probably made other improvements also).
Specifically I remember team fortress's pyro secondary grenade in QW being just pulses of AOE damage instead of shooting more fire particles that needed tracked, and the soldier nail grenade .. doing something different to not have as many flying objects.
>
> Interpolation. Serious Engine interpolates between the current and the previous game tick based on time passed between. Try opening the in-game console (~ key) and typing this to see how the game looks and feels without interpolation:
>
> /net_bLerping=0
>
> It's kind of like playing a modern console exclusive.
That list bit made me spit my tea out, I laughed so hard.
Great game. A staple of our LAN parties, what, 25-ish years ago now?
Ouch. It’s sad to see console gaming no longer be the place to go for highly tuned software.
really neat to be reading about this so many years later.
I do miss the sledgehammer.
> Q: What is TAA and why should I care?
A: TAA stands for Temporal Anti-Aliasing. It's used to fix/clean up aliasing in games. The different kinds of aliasing in games are edge aliasing, shader aliasing, texture aliasing, temporal aliasing and specular aliasing. Edge aliasing makes edges of objects look jagged (also called as the staircase effect). Temporal aliasing is the shimmer of objects which are either small in nature, or which are far in the distance such as power lines, railings, stairs, balconies, antennas etc... You should get the idea.
https://old.reddit.com/r/FuckTAA/comments/oi0v86/taa_on_vs_t...
One of my favourite games.
Gets a gold rating! I've been playing even the VR versions on Linux (through steam).
playing co-op, running with your mates across the plains, blasting rocket trails into the distant horizon across the gorgeous clear blue skies at the biggest boss you've ever seen, with the pumping music thumping the whole way through, while you're trying to fend off what feels like hundreds of mobs ... I don't think I've experienced anything of that scale and intensity since ... one of my greatest of all time
"Wait, that guys is taller than BUILDINGS!"
The worldbuilding in Half-life was so good. You weren't a character walking into rooms and enemies would attack you, like Doom and Quake. There was a big event happening, and you were just a part of it.
It was on par with my first playthrough of the original HL so many years ago.
Which are actually voice lines of people in torment played in reverse.
The gist of it is...
The person who wrote v2 of a thing got a lot of shit, because there were a lot of "cons" that could have been predicted and mitigated.
I complained about them getting shit. Making a new thing is hard, and yes, there were "cons" but there are an enormous number of "pros," and you can't always block progress trying to enumerate and mitigate all of the "cons," especially if the "cons" are social in nature (which makes them hard to predict!)
I believe the company should have let the guy build v2 and see if it works. Let him test it in a few cases. Then he can try to shift to managing roll-out, and etc. Unfortunately, v2 became hugely popular instantly (wow, a problem I wish we all had!) and then a bunch of stuff went wrong, because the roll-out itself "should have been managed better."
So, #2 engineer-in-the-company came in to my comment thread, and documented the cons. Actually linked to a slideshow which showed each con on a separate slide.
Sure.
Here's the problem, v3 was written by a TEAM of people, with backing from leadership, and the "cons" of that job are enormous and embarrassing. I mean, really bad. Years later. Unpopular, and most people haven't migrated to it.
Stop giving that one guy shit when a team of people did worse. And especially if your main problem with his work was that it was too successful too fast!
Grrrr.
Pity this was in internal forums, I thought it was on HN.
like every gameplay stands as an engine, or a genre, or a meta-genre? like GrandTheftAuto?
but i was i trying to tweet something about getting lost in stocks and tickers and symbols
I guess there's plenty of popular content on the internet or elsewhere I could name you and you'd be like "never heard of it".
Even extremely popular one.
I don't personally see much of a distinction between "asshole" and "asshat" in this context, and I think the intent of your reply was pretty clear. Nor do I begrudge the comment--it comes with the territory of choosing such a username. But if you believe my characterization of that exchange to be false, my apologies. The link to the original reply was posted almost immediately after my comment, and so the context is there for all to see. I summarized it in a way that I thought would be entertaining to the audience.
Games like Starcraft 1 would handle it by adding an artificial delay to your inputs (and all your opponent's inputs). Putting it into a buffer for future steps instead. If anyone remembers the latency option for "Extra high latency", this would increase the delay on inputs so that simulations did not have to pause while waiting for inputs from other clients. And then if any network fluctuations causes your input buffer of other clients to empty, you have to pause again.
In fighting games this is usually called delay-based netcode, and people hate it. It makes your inputs feel unresponsive, and in games that require fast reactions (like fighting games) gives you a smaller window to react.
I doubt that'll scale to games like Starcraft and Factorio, because in my example, you would need to resimulate 100ms of simulations in ~16ms. In a fighting game with 2 characters and not much else to simulate, that's a lot easier.
Recently I’ve been playing Arma Reforger with friends online on a dedicated server, and when driving vehicles the collision physics are off, especially when driving fast, making the whole scene “teleport” forward, with frames lost and the vehicle reappearing in unexpected positions.
I wonder if this is related to this type of code. The game is technically out of early access, but there’s lots to be added still on the roadmap.
It's possible to write fully cross platform deterministic code today, but it's harder to do and uncommon in libraries.
Writing state synchronization and using client side prediction is generally easier. Determinism is only necessary if there are bandwidth constraints.
First, building a PERFECTLY deterministic sim is brutally difficult. Even for a single piece of hardware. It’s so so hard and expensive. A single bug “crashes” the game with a “desync” error. Making it work cross-platform was never really an issue.
Second, you’re bound by the slowest client. No one can go faster than the weakest link.
Third, you can’t stop cheating. Every client has full and complete world state. This is fine for co-op but a major issue for competitive.
Really the ONLY benefit to lockstep sync is it minimizes bandwidth. In the days or 56k this was a strict necessity. But these days client-server is almost always a better choice.