
The TRIBES Engine Networking Model (2009) [pdf] - sosuke
http://gamedevs.org/uploads/tribes-networking-model.pdf
======
aaron-lebo
It still blows my mind that Tribes came out in 1998.

That was a game with vehicles, easy modding (Tribes Football, RPG, Shifter,
Renegades, anyone?), incredible mechanics (skiing), massive maps, recordable
gameplay, a very active competitive community (OGL, 5150, players like
Natural), And it was very playable on a 56k with some servers supporting 64+
players. Frankly, it puts a lot of titles with massive budgets, dev teams, and
18 years of learning to shame.

Thank you Dynamix.

~~~
stephengillie
Skiing was a bug - friction didn't apply to players while the jump animation
was playing, but gravity equations did, so players slid downhill a bit. During
beta, players learned to hammer their spacebar to maintain this frictionless
state, skiing incredibly fast. Eventually, a script was released to automate
this, repeating the jump when spacebar was held down; other games might
consider this a cheat, but the community embraced it, and so did the devs.

Xtremeski came later...

~~~
STRML
Skiing was a bug in Starsiege:Tribes - it was a feature in Tribes 2 and
arguably made the whole series into what it is.

The community eagerly awaits a reboot that can even come close to challenging
the technical & operational superiority of T1 & T2. What masterpieces they
were.

~~~
robertfw
[https://www.playmidair.com/](https://www.playmidair.com/) is leading
contender. lots of devs were t1/t2 comp players

------
stronglikedan
While the details of this paper are above my head, I can say that, having
spent _years_ playing Tribes II, it was one of the smoothest online
multiplayer experiences I've ever witnessed. At the time, it seemed very ahead
of its time, compared to other online multiplayer games of the era.

~~~
caconym_
I've actually thought about Tribes a lot recently, what with the kerfuffle
over hitboxes/tickrate in Overwatch, the architectural issues with The
Division (bad game), and general netcode angst these days. I remember the
Tribes experience being buttery smooth and precise, even with the high speeds,
long distances, and general reliance on physical projectiles rather than
hitscan weapons.

~~~
stronglikedan
And even on relatively slow internet connections, like four players in one
room on a 1.5Mbps DSL connection!

~~~
gherkin0
That may be part of the reason why it was so good. In 1998, they had to make
it playable on 56k modems, and a lot of those optimizations probably
transferred over to smooth play over better connections.

Now there are fewer incentives to optimize to that degree...

------
ook
For anyone interested in game networking the Quake 3 Network model was covered
by Fabien Sanglard in this great blog post:

[http://fabiensanglard.net/quake3/network.php](http://fabiensanglard.net/quake3/network.php)

~~~
Terr_
Adding on to the emerging link-dump, here's some interesting stuff for the
Source engine (TF2, CS:GO, etc.) which goes into their latency-compensation
mechanics:

[https://developer.valvesoftware.com/wiki/Source_Multiplayer_...](https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking)

[https://developer.valvesoftware.com/wiki/Latency_Compensatin...](https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-
game_Protocol_Design_and_Optimization)

------
kreeves
Obligatory "Shazbot!"

So was the Ghost Stream Manager meant to also help combat packet loss? Or is
it more simply a form of "Game state redundancy"? I'm speaking out of
wheelhouse here.

I'm always a bit fascinated by these write-ups because so much has to happen
in such a small window.

~~~
BFatts
The ghost stream manager was responsible for sending ghost representations of
objects. They weren't full objects, but contained the properties or a subset
of properties. All of the code was accessible as the Garage Games Torque
engine.

------
squeaky-clean
Oh man this brings me back (and I'm probably not old enough to be allowed to
say that)! My first real start with game development, and well serious coding,
was using the Torque Game Engine, which is the Tribes II engine. I saved up my
money to buy a license for Torque 1.5 (it was $150 I believe and I was in high
school), because at the time it was the only game engine which 1) Had source
code access, 2) Wasn't insanely expensive for a hobbyist, 3) Was fully
functional by itself.

The engine overall was pretty amazing, of course it had it's warts. I still
remember the networking code pretty well. I played with the physics part of
the engine quite a lot and rewrote and modded it a few times. I usually wanted
networking in my experiments, so I learned a lot about that part of the engine
as well. I don't play with gamedev anymore, and probably wouldn't use Torque
if I did, but I really miss it and the community it had. I still check in on
it once a year or so, and there was a blog post recently thanking many
community members from the past, and my old username was on the list :') I'm
looking through my old forum posts now, wow was I annoying for a few years!

For anyone who wants to look, the latest version of the engine is now MIT
licensed [0]. It's been through 2 major versions, and seems like they've
simplified the inheritance, so I'm not sure how much is still intact, but
netObject looks a lot like I remember. I would recommend redding the comments
in the header file for a good overview of how it works. [1]

[0]
[https://github.com/GarageGames/Torque3D](https://github.com/GarageGames/Torque3D)

[1]
[https://github.com/GarageGames/Torque3D/blob/bacf0cde2af17ab...](https://github.com/GarageGames/Torque3D/blob/bacf0cde2af17ab6f25c7effe0308035f164d54e/Engine/source/sim/netObject.h#L57)

------
stevebmark
Part of why Tribes was such an incredible experience was it had 64 player
servers. The maps were constant chaos. Haven't quite experienced anything like
that since.

~~~
mey
PlanetSide and PlanetSide 2. While hard to get into, when platoon level
operations are at their best it's something I've yet to experience in another
game. I expect Eve would be the other example, but with time dilation and
combat mechanics, the game is more strategic than tactical in my
understanding.

~~~
stincity
PS2 still going strong? I thought they were combining server populations to
help increase the size of each remaining server.

~~~
ECrownofFire
It just recently had a major update so people can build their own bases and
stuff now.

~~~
stincity
Interesting, maybe I should get back into it.

------
xenihn
Tribes 1 remains my favorite FPS experience to this day.

~~~
Huhuh
Yes.

There's still people playing every evening.

------
impostervt
This game ate my life in college. My friends and I founded tribalwar.com in
late 1999, and I spent the next 3 years learning how to code websites. I was
never that great at the game, but the skills I learned coding websites led to
my first professional job.

~~~
Duhck
As a devoted member of TribalWar (thanks so much!) / avid T1 player, its
awesome to see you on HN!

My handle was Duhck :)

Tribes was... magical. Tight knit player community, active modding community,
amazing map design and tournament play.

Team Rabbit, Arena, and 10v10 CTF consumed the majority of my time from
'98-'06

------
silverlight
Random but related: does anyone know of a good library (in C#, Javascript, or
really anything higher-level than C preferably) that implements this? By
"this" I mean a UDP-based system capable of sending both "it's stale when it's
sent" data that can be dropped if it's lost and "this must be delivered"
messages that will be re-sent if not delivered?

I would need it for a Unity project, so if it's Unity-ready already that would
be great, but honestly at this point I'm willing to just take what's out there
as a starting point and work with it.

I did find this: [https://community.unity.com/t5/Asset-Store/Open-Source-
UdpKi...](https://community.unity.com/t5/Asset-Store/Open-Source-UdpKit-a-
networking-library-for-NET-Mono-Unity/td-p/1553191) but it's apparently
unsupported now and the author has moved on to other things.

There are some other packages on the Unity Asset Store but most of them are
focused around Unity-to-Unity communication, and I'm looking for something
more generic (since my architecture is actually Unity-to-NodeJS currently).

~~~
lallysingh
WebRTC Data Channels
[http://www.html5rocks.com/en/tutorials/webrtc/datachannels/](http://www.html5rocks.com/en/tutorials/webrtc/datachannels/)
let you freely mix reliable and unreliable data. I donno if there's any
bindings from the webrtc library to unity yet.

EDIT:
[https://www.assetstore.unity3d.com/en/#!/content/47846](https://www.assetstore.unity3d.com/en/#!/content/47846)

~~~
15155
Tangentially: does anyone know of any great server-side implementations of
this? So that a regular server could be a WebRTC peer?

~~~
lallysingh
... it's peer to peer ... the server acts like a peer... the same code can run
for both peers ...

So you can choose any webrtc binding for any language you use server side.

~~~
15155
Yes, sure. Incidentally, I haven't found any decent WebRTC bindings that
aren't tightly wound to browsers.

------
wangchow
If interested in their networking model, check out the derivative Torque Game
engines on github:

[https://github.com/garagegames](https://github.com/garagegames)

------
davesque
Definitely played the crap out of Tribes 2. I remember at the time it came
out, I was so astounded by the smoothness of the gameplay and the sheer
variety of tactics and options that I almost didn't believe it was possible.
To support as many players as it did and deliver that level of experience over
the internet technologies of the day was incredible. Also, for me, the game
basically came out of nowhere. I missed out on Starsiege: Tribes and had never
heard of the developer before Tribes 2.

"Get the enemy--shazbot."

------
orware
Slightly off topic, but still related to Tribes...I remember purchasing
Starsiege back during this time (if I remember correctly it and the original
Tribes were released around the same time, along with Half-Life).

I never played the original Earthsiege I and II titles, but Starsiege was
super cool for me as a kid, and it wasn't even really because I got to pass
the game (it was kind of difficult for me at that age so it probably wasn't
until ten years later that I actually played it again from the beginning and
passed it).

The main thing I loved about the game was the big backstory book that was
included with the game that really outlined the whole thing for you and gave
you a pretty cool connection with the characters (looking back it was like a
mix between The Matrix and the Terminator franchises in terms of story).

I'm not a movie director but occasionally I still find myself thinking about
what a cool movie it would make and wish a new game for it would be released
(since the last attempt got *nixed).

Tribes was cool too, don't get me wrong, and I played a fair amount of it too
(though by 26.4 kbps connection kind of hurt my online play, lol), but
compared to the more story driven Starsiege, I never got into it nearly as
much.

------
orware
I thought the last section was pretty funny:

"Acknowledgments Though several of the ideas presented here are unique to
TRIBES, others have been assimilated from other sources over countless years
of reading and the authors, being too lazy to research their sources, would
like to thank everyone in one sentence."

------
ramses0
Look for TNL (Torque Networking Library) and "Zap!", a demo game which served
as an example usage of this libary.

[http://opentnl.sourceforge.net/doxydocs/](http://opentnl.sourceforge.net/doxydocs/)

[https://sourceforge.net/projects/opentnl/files/Zap/](https://sourceforge.net/projects/opentnl/files/Zap/)

------
stevehawk
hmm.. a Ben Garney post and a TRIBES engine post.. is there a
Dynamic/GarageGames data dump going on ? :-)

~~~
sosuke
I saw it in one of the video conferencing posts he had. It was too good not to
highlight!

------
newobj
This paper come out in some form MUCH earlier than 2009. I was implementing
its idea in my own engine in ... I dunno, 2003? Or earlier?

~~~
superkuh
Well, Tribes was released in 1998.

