May 30th, 2004What's in the Works - Client Messages and CausticsThere probably won't be a whole lot that will change in the way of eye candy for the next client release. For the most part I've been working on server side updates (as mentioned in the previous post) and tweaking the way the client and server talk to each other in order to reduce bandwidth.
One of the nice things about the way I'm handling messages is that it gives me control on the client side as to what I do with the information. For example, the first screenshot below shows item pickups and drops. Instead of displaying "You picked up a Trracer." or "You dropped your Automag." it scrolls the item names up on the bottom of the screen then fades them out -- no more cluttering the console (though the smart people probably have "msg" set to 1 so they don't see item pickups anyway). It conveniently uses about 1/20th of the bandwidth the old messages did, too.
I'm planning to do a lot with this. For example, I could have the team chat messages and regular chat messages in different locations, or be different colors. I could possibly display abbreviated elimination messages like Half-Life does, etc. I'd like to have a separate chat window which shows only the chat messages (so you don’t have to scroll through the mess in the console). Another big thing will be the client side scoreboard. It won't have to be cut off when there are a lot of people playing due to bandwidth restrictions and overflow problems. Once I get everything implemented it will be easy to change, and I'll probably have some client side settings. Getting everything implemented and working properly is taking a wile, though, so have patience.
Of course I will be throwing in some eye candy, too. I used this cool caustics generator to make some realistic animated caustics textures and combined them with some RScript effects to yield some very nice results. I still have some bugs to work out, though. Eventually I'll be making some awesome pixel shader effects for the water surface as well.
E3As some of you know, Calrathan and I went to E3 this year. It was pretty cool, but not quite what we were hoping for. We were looking forward to talking to a bunch of game developers and such, but it ended up being more like a giant, electronic Disneyland. I've started my report on my websitehere. Calrathan doesn't have internet at his summer place yet, so you'll have to wait to see his view of it. April 19th, 2004What's in the Works -- New Rotation SystemI’m putting the client off to the side a bit and cranking away at the game code. For once I’m actually decreasing the length of the TODO list. Well, it’s been going up and down, but overall it’s decreasing. Whenever I work on this game, I end up finding more things that need to be done than I end up getting done, but that’s finally starting to change. I’m fixing tons of little things that have bugged me, such as the 2nd flag appearing on the stand when someone is holding it at the round end. Of course in fixing that, I found a couple more bugs that needed to be fixed, but I think those are all straightened out.
One of the biggest features in the next release will be the new rotation system. It allows for 3 things: map voting, multiple modes of play for each map, and minimum/maximum player limits. The map votes are cumulative – they stay with the map until it is played, then they are reset for that map. Each map gets a vote automatically, causing them to cycle in the typical rotation. However, when someone votes for a map, it will bump it up about one position in the rotation. If a bunch of people vote for it, it will move up several positions.
The game modes also work in a similar fashion. Mapinfo files define the supported game modes for each map as well as the default game mode(s). The default gets an auto vote, but players can also vote for other supported modes. When you vote for something like Midnight, you can choose to play it in straight Elimination mode, CTF mode, 1-Flag mode, or even Deathmatch. If more than one default is defined, the map will end up cycling between the different modes each time it is played.
Players can also vote for maps that aren’t in the rotation, and they will be added temporarily, but they won’t get auto votes, so they won’t cycle. In other words, several people have to vote for the map in order to push it to the top of the list, where it will get played, then removed. Similarly, for remote admins, maps can be remotely (permanently) added and removed from the maplist via the “rotation” command. Maplists can also be remotely loaded and saved.
The min/max player limits are pretty simple. They’re also defined by the mapinfo files. At the end of a match, the map with the most votes is loaded if the number of people on the server is within the min and max limits defined by the mapinfo files. If not, it traverses down the list until it finds a suitable match. This will reduce the problem of 20 people playing on a tiny map like pbcup, or 2 people playing on a huge map like brainstorm. It will allow server admins to have a wide variety of maps in rotation without worrying about there being too many or too few people to play a particular map.
Also in the works are some methods to reduce lag. For example, the game will check if anybody actually needs equipment dropped by an eliminated player. If not, it is removed/returned immediately. If everyone already has a 200 round hopper, there’s no sense in throwing another one into the middle of a firefight. Another thing I plan on doing is to use encoded (much smaller) messages for things like eliminations as well as make the scoreboard clientside.
One more thing, for those of you who have actually read this far, I’m planning on adding a new game mode: King of the Hill. In a nutshell, the team that stays on the hill the longest wins, but there might be some fun little twists to make it more interesting. I might also add another mode – it’s a secret, but I have the feeling it’ll be a kick. April 14th, 2004Linux Paintball2 v1.774 Server UpdateA minor game server update for Linux servers. Lots of little tweaks and fixes. This still requires a Linux compile of Quake2 to run. Here’s what’s changed since 1.771:
- Bot directory automatically created if it doesn’t exist (removes the problem of bots not staying across map changes) - Login command requires a second parameter (in case the password isn’t set right) - Fixed a bug causing some weapons to float. - Items that are already at home don’t disappear and reappear on round starts (reduces lag) - Sounds tweaked to take less bandwidth (and work better with the 3D audio) - instant_spawn defaults to 1 now, so everyone spawns at the same time during round starts (this should be possible now that other bandwidth issues have been addressed). - Fixed scoreboard alignment with colored names. - Items adjusted so the shadows show up properly. - Used a faster string compare function (probably won’t make a lick of difference) - Changed the game “build” cvar to “gameversion” so it doesn’t conflict with the client’s “build” cvar. - Made it so the topspeed command only takes into account living players, so you can’t cheat it with noclip observer. Also improved the “stuck” checking to prevent velocity from building up and cheating it that way. April 5th, 2004Paintball 2.0 Alpha Build 010 ReleasedNot much is different on the outside, but it's improved a lot on the inside. I didn't implement all the optimizations I wanted to, but it should still run considerably smoother than the previous builds.
Here's what's new: - Cvar: gl_free_unused_textures [0 or 1] I just threw this in for the heck of it (actually for debugging something). If you have memory to spare, you can set it to 0 and it will keep all textures in memory from level to level, possibly making levels load faster. - Cvar: gl_hash_textures [0 or 1] An optimization to make image lookups faster. Leave at 1 unless you have issues with textures not loading correctly. This cvar will be removed once everything has proven to work properly. - Cvar: crosshair [1 to 7+] Limit of 3 removed. You can have any number of crosshairs (pics/ch#.pcx/tga). A couple new ones have been included. For those of you who have been complaining about small crosshairs: set crosshair 4 - Cvar: cl_cmdrate [5 to 80] Sets rate (in packets per second) to upload to server. The client side prediction has been tweaked quite a bit with this and should be smooth with values as low as 15. - Bugfix: Field boxes no longer truncate colored text too soon. (The cursor position still needs to be fixed, though). - Feature: Several optimizations (hashed textures, faster cullbox function, faster strcmp, images have rscript pointers instead of searching for scripts each frame). - Feature: Screenshots now have 3 digits: sshot000.jpg through sshot999.jpg. - Feature: Mousewheel adjusts slider widgets. - Feature: Tweaked the console characters to be brighter (requires gl_overbright 1).
Go grab it on the files page, and report any bugs you find, either on the forum or by email. March 22nd, 2004Optimizations on the WayI've been working on optimizing the Paintball2 engine quite a bit. I'm hoping to make it about 20% faster than regular Quake2. And yes, I'm working on the lag issues that were in build 9 as well.