Category Coding
Replay functionality, new icons
Yes, you can now view the last five games you played as a spectator! All I did was save each network packet that's sent out into a big list, then use Python's pickle module to serialize the list to a file. Each packet has a timestamp, so I just read the packets back in order, checking the timestamps to make sure it reads the packets back at the right speed. Fast forwarding is not implemented, but it would be pretty easy. Rewinding/seeking would be more difficult, so I'm not sure I'll get to implement those.
Prepping for first release
Less than one week away from release! Looking at the to-do list from last week, I actually haven't worked a lot on the items listed. I've been ironing out a lot of bugs and adding polish. The multiplayer scoring is now working, and you can see everyone's scores on the top of the screen, conveniently color-coded. I killed the ugly black boxes around the scores and added drop shadows instead, and I moved your current balance to the right side of the screen, to avoid confusion. Take a gander:
More shiny!
Three updates, one in graphics and two in gameplay.
Graphics: new water shader! Thanks to Panda3D's new built-in support for user clip planes in the shader generator, the reflections were a piece of cake. It's a very basic shader that simply deforms the render buffer and the reflected render buffer, then blends the results 50-50. No fresnel, no lighting, nothing. It works, though.
Using the distortion shader from my last post, I added a shield droid that puts little shields around team entities in its vicinity. The shields decreases ranged damage by 25%.
Panda3D distortion sample
For any Panda3D users out there, this is an improved version of the frame-buffer distortion sample currently shipping with Panda3D 1.6.2. Whereas the original sample just samples a wave texture to offset the frame-buffer sample location, the shader in this version actually uses normals from the Egg model. It also gives a slight tint to the object. You can easily adjust the color and intensity of the tint at the top of the "distortion.sha" file.
Network system description
As promised. :)
First, a small disclaimer. This network system is designed for a very specific task: handling networked physics/gameplay over a LAN network. The structure described here might be useful in other scenarios, but the actual Python code is certainly not fit for much else.
The system follows a modified Model-View-Controller pattern that focuses on two main types of objects: Entities and Controllers. The "View" part is split between the Entity and Controller. Entities handle most of the assets tied to a standard object in the game world: namely, the physics geometry and graphical representation. Each Entity has exactly one Controller, which handles all (and I mean all) actions the Entity can perform. The Entity will not move at all without a Controller.
Perfunctory postage
Wow, so many updates to cover. I've been without internet for awhile, so... deal with it. :)
Let's start with a list of new improvements:
- Networked gameplay is now fully functional. Weapons, grenades, springboards that propel players around the map, it's all there. I'll make a bigger post one of these days that describes the whole system in more detail. It was quite educational for me, and I'll still be modifying it for awhile.
- The main arena level has received an upgrade in the form of a massive tower thing in the middle, with bridges going out to springboards on either side. Which makes it now completely incompatible with my primitive AI system. Oh darn.
- I'm using a nifty particle effect when the player spawns and to highlight the springboards. Kinda slow without the Panda3D MeshDrawer class though.
- The generic physics object, known as "Block" has received a visual overhaul. This was my first experiment with dirty textures, and it turned out not too bad. Textures were done in Inkscape and Gimp (with a normal map filter plugin).
- There is now a functional main menu! Well, more like 50% functional. Still on the to-do list: allowing the user to specify what server to connect to (possibly with a server auto-detect function), and allowing the host to choose which map to load. Also farther out on the roadmap is usernames and logins. And can anyone tell me how to deal with Blender's ridiculous smooth/solid mesh setting!? I can't get the continents to be smooth-shaded without screwing up the normals on the edges. It's passable for now though.
Behold!
Networking and better particles
Network code is working reasonably well now. The server generates a unique MD5 hash (only six characters) for an entity, then broadcasts a packet to the clients instructing them to spawn an entity of the correct type, and assign the same hash as its ID. From then on, the server turns over the reigns to the entity's controller, which can send any information it wants in its own sandboxed data packet.
First major update
Mmm. Been a while, hasn't it.
Latest and greatest feature list:
- Nifty particle effects for bullet impacts
- Decent AI pathfinding
- Grenades don't go through walls any more :D
- New test map with spiffy baked lighting courtesy of Blender

Current project: revamping the orbital dock model seen on the front page screenshot. First up: my first shot at a rusty grungy metal texture. Made from scratch in Photoshop in about a half hour with four layers of noise, airbrushing, blurring, burning, and dodging.