Large Mesh Files

I decided to re-write the mesh load and save routines used by the engine. They were previously using a recursive algorithm, which quickly caused the stack to fill up on larger models with deep hierarchies. Running into a stack overflow situation is simply not acceptable.

I needed to write the objects to the mesh file in depth-first order, similar to the original recursive implementation. Now I see why people like recursive functions, it was very difficult to refactor this into an iterative while loop! I basically had to implement my own stack, that allocates from the heap instead of the limited call stack. Also, keeping track of the nodes that have been visited while unwinding the stack is key.

Posted in Engine Development, Game Development | Tagged , | Comments Off on Large Mesh Files

Collision and Response

I’ve been hard at work implementing new intersection tests, and dealing with collision and response algorithms. Pretty tough stuff to make work correctly and smoothly under all circumstances!

I’m basically breaking up an area into distinct height levels, then doing 2D intersection tests between a circle (the player) and a line segment (i.e. a wall) based on your current level. In 3D this is equivalent to an intersection test between a cylinder and a plane. 2D just saves us a few CPU clock cycles, which are always very valuable!

Posted in Engine Development, Game Development | Tagged , | Comments Off on Collision and Response

Animation Controller Scaling

Turns out I wasn’t extracting scaling properly in my 3ds Max exporter plug-in. For one thing, if the local transformation included any scaling, it could cause NAN problems to arise while converting the matrix rotations into quaternions for the keyframed animation system. So, I added new methods to the 3×3 and 4×4 homogeneous matrix template classes in the engine to properly decompose a matrix (without shearing) into individual translation, rotation and scaling values. This allowed me to properly export all of the animation data now.

Posted in Engine Development, Game Development, Graphics | Tagged , , | Comments Off on Animation Controller Scaling

Networking Code

I finally feel the game’s network code is very stable. I found a pretty major bug on Christmas day that would cause file downloads to randomly stall. It had been nagging me for a while. Of course, this severely hurt my update system. Fixing it made me very excited! Then today, I found the remaining bug! All I can say is… sweet! Wireshark sure is a great tool, lol.

I updated my test client, and test server applications to really put the code library through the loops. I can send HUGE files back and forth, create an exponential feedback loop of data, send malformed packets, small packets, big packets, too many packets, too few packets, etc. It helped me uncover a few issues, including a fairly nasty concurrency issue that would cause the server to puke and write it’s minidump.

Posted in Engine Development, Game Development | Tagged , , , , | Comments Off on Networking Code

Client Avatar Updates

The game client now queues up all avatar update notifications. For example, if you walk into an area with a LOT of avatars, they are slowly and gracefully “spilled” into the current scene. Instead of trying to load all of the avatar objects at once, abruptly holding up rendering. This would be bad!

There are a lot of fine details in this implementation that must be paid close attention to. For example, network messages must be queued up while an avatar is being loaded on its own separate thread, for further processing later. Also, what if an avatar leaves the area, and you haven’t even finished loading it yet! Superb object synchronization is a must. Nobody wants things to get out of whack!

Posted in Game Development | Tagged , , | Comments Off on Client Avatar Updates

Game Server Avatar Updates

The game server finally properly handles avatar update messages. Basically, all avatars are grouped into small areas. These areas align with the land block grid system used by the terrain renderer. As a player moves in and out of a particular land block (or entire land area), neighboring players are notified of this change. Avatars are thus dynamically loaded and unloaded on demand, based on where you currently are. Of course, to further optimize avatar rendering, distance and visibility tests are also incorporated by the client.

Posted in Engine Development, Game Development | Tagged , , | Comments Off on Game Server Avatar Updates

False Positive

Have you ever written and compiled an application that instantly gets flagged as a Trojan? Windows Defender thought my Setup.exe bootstrap program was a virus! This cracks me up. I reported it as a false positive to Microsoft and all is well.

Posted in Game Development | Tagged , , | Comments Off on False Positive

Been There Radar Window

The radar window now works in the game. It shows all avatars that are nearby. It can also be used to select an avatar. Once the combat system works, it will also show the enemies/monsters. In addition to a few minor fixes, new portals and objects have been added to the game as well. The new fire effect looks awesome!

Posted in Game Development | Tagged | Comments Off on Been There Radar Window

Object Identification

The examine dialog can now be used to identify all objects in the game that can be interacted with. This includes everything in your backpack. New treasure chests have been added to the areas where the portals take you, all with new inventory items.

Posted in Game Development | Tagged | Comments Off on Object Identification

Drag and Drop

The Trade Window in the game finally works correctly, and consistently. There was a lot of frustration getting there however! I kept finding a lot of weird quirks with how I implemented the drag and drop feature. For example, I was hit testing on windows that weren’t even currently visible, lol. This has all been cleaned up and seems to be working great now.

Posted in Game Development | Tagged | Comments Off on Drag and Drop