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!
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.
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.
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!
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.
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.
Currently working on the “Trade Window” in my Been There Game client. This will be used to safely trade items between two avatars, or a vendor NPC. To open it, you simply double-click another player’s avatar. If the other avatar does not already have a trade going on, your trade will be initiated. A lot of this code is similar to the treasure chest code that I already have working, so this new feature shouldn’t be too hard. We shall see!
Still working on the massive inventory system. There are a lot of small details to deal with! The treasure chest is working great now. Reward items can be spawned when an avatar opens it. The treasure generator allows you to specify individual probabilities for each each item. Or, certain items can always be returned if needed. People can also leave things in a chest for other players to find. Items that were left in the chest will expire and go away eventually, unless in a private chest. There is also a wait time before new treasure will be generated for each avatar. If the chest is a public chest, then there is a time limit on how long a player can keep it open.
I was planning on adding a chest that can be opened into Been There Game. However, I discovered that my keyframed animation system was not working totally correct. To deal with rotations that don’t happen around the object’s center, I realized that an optional offset transformation would need to be added to the nodes in the Orion Engine mesh file format. Luckily, this part was easy due to my “chunk” based mesh file format. All existing files still work as intended. However, I’m not going to lie; updating the scene objects in the engine proved difficult. The matrix math involved with the hierarchy of 3D transformations and rotations was hurting my head for quite a bit, but I finally have it all properly worked out. This new “feature” changed the way that my bounding volume checks and intersection tests must be handled. But, it ended up being a lot simpler to implement than I had originally feared.
I also made a lot of improvements to the engine’s exporter to fully deal with the object offsets and/or pivot points. The animation export has also been further optimized, to deal with redundant keyframes.
Testing out the fresh installation of Red Hat’s Fedora 32 Linux. Everything seems to be working great!