It turns out ENet supports a max 4095 connections. This makes sense because on
UNIX platforms it uses either select or poll, and those don't really scale
past that.
I don't like this artificial limitation though, even though it's tempting to just pick a number below that -- say 2000 -- and say, "we support 2000 players max". For one, I think the limits should be dictated by hardware, not arbitrary limits. But it also confuses a lot of things. There should be multiple counts:
- maximum connections supported (these may not be full clients)
- maximum clients supported (these may only be spectators, not players)
- maximum players supported
Right now we just use MAXPLAYERS for all of these, and that's confusing.
The main issue is working around ENet's artificial limitation. I actually think replacing ENet with regular sockets and libuv is fine. libuv would also clean up some of the directory server code, which would be welcome.
In the interim, I think MAXPLAYERS needs to be removed. It ultimately needs
to be removed anyway, but the concepts behind players and playeringame and
consoleplayer/displayplayer need to be refactored since the list of
player_t instances will be dynamic now.
-
Add error codes to
n_proto -
Servers shouldn't
quit, they shouldshutdown; also prevents accidentally running/quitin the console instead of:quitand closing the server.... -
Add auto-scroll to TextWidget
-
Update/Mirror dependencies somewhere
- It would be really cool to use the pacman/pkgbuild system and mirror source also
- Manually delta compress commands (serverside and clientside)
- bitmap:
indexchanged = 1ticchanged = 2server_ticchanged = 4forwardchanged = 8sidechanged = 16anglechanged = 32buttonschanged = 64
- then deltas:
- All diffs are
charexcept forangle, which is ashort - Effectively limits lag to 255 commands, which is way more than enough
- All diffs are
Hypothetically: { 4096, 4012, 4008, 50, 50, 180, 1 } // 17 bytes { 4097, 4013, 4008, 50, 50, 180, 1 } // 17 bytes // Total: 34
Becomes: { 4096, 4012, 4008, 50, 50, 180, 1 } // 17 bytes { 3, 1, 1} // 3 bytes // Total: 20, saved: 14
- Implement actor vectors
- Send movement start TIC
- x/y/z represent the start position at time of last velocity change
- More amenable to delta compression
- Easier to nudge projectiles
- Add projectile nudging
- Projectiles are currently predicted, thus they usually appear ahead of where they normally would
- Projectile nudging would spawn the projectile normally (i.e., right in front of the firing player) with a higher-than-normal velocity, and then adjust the velocity downwards based on the client's lag and a preselected function (curve)
- Remove software renderer
- See about implementing Doom lighting and 8-bit color using shaders
- ZIP/PK3 resource files
- Bots
- ACS Scripting
- DECORATE
- EDF
- ExtraData
- MAPINFO
- 3D floors
- 3D MixTex
- Portals
- Polyobjects
- Ambient Sounds
- Support for other ID Tech 1 games (Heretic, Hexen, etc.)