Do not upload images you did not create. Please read the Image Upload Rules before uploading.
This week I started work on the in-game chat window. The work done so far has mostly been on the networking side - sending a message to the server and getting the server to echo the message back to all players in game.
A very work-in-progress chat window.
I still have some decisions to be make about how the interface should look - do we go with a dedicated chat window similar to what the MMO had, or something more like notifications and a smaller text-entry field that appears when you hit the enter key? Do we still want local-area chat (with those only near your character) in addition to server-wide? Do we still want to show attack stats as system messages, and provide a chat history? If you have any feedback on any of that, be sure to mention it in the #development channel on our Discord server!
Changes in the Tangled Lands
I've been working on a few small changes to the Tangled Lands, including a lit path leading through it to the Mages' Camp and adding some large lilypads.
There is now a lit path between the cave leading out of to the Mages' Camp on the Isle of Mist. There are still about, so watch out!
An experimental idea for giant lilypads in the Tangled Lands. I like the idea, but I may swap out the mesh with another due to UV issues.
Potential platforming challenges ahead if you don't have water running equipped!
World Resize Continues
I've also been continuing work on resizing the world as I mentioned in last week's post. The work performed this week focused on resizing Taipii equipment and fixing some inventory icons. There are still a few areas that need attention such as the Burning Sands region and updating the pathfinding networks after I'm done moving roads and buildings around. Overall I am really happy with the way this has turned out.
Boring Maintenance Work!
There are a number of things that need to be addressed before Antilia can enter alpha testing again. Stuff like fixing critical bugs, minimizing the download size, improving the networking code, and auditing packets to ensure they aren't bloated or being sent too frequently. Expect to see a few of these each week for a while.
Finding and Fixing Memory Leaks
In testing Antilia last week I noticed that the Antilia Simulation Server was using more memory the longer it ran, and doubling or tripling it's memory usage after being allowed to run for an hour or more. Clearly there was a memory leak. Without resolving that I wouldn't be able to run server tests that last for more than a few hours, so I had to dust off some memory analysis tools and find the leaks. To do so involved a massive search & replace across all of the Toi Engine and Antilia code. The process required several hours of walking through all 4700 search matches and separating 4100 cases that needed to be changed from 600 cases that should remain as-is. I hope to never do that sort of thing again.
But the effort was worth it. With the analysis tool in place I was able to identify the major repeating leak that was causing memory use to grow so rapidly, and half a dozen less consequential leaks. Unfortunately there is still at least one small leak that remains illusive somewhere in the AI system. If I disable the AI component there are no leaks reported, but when I turn it on there is something subtle happening that isn't easy to find - perhaps a circular reference that can't be freed on shutdown. I'll have to give that one another look this week.
But finding that major leak was the important thing - I can now run the server for hours on end without it gobbling up more and more memory.
Goodbye Data Channels, Hello Server Variables
Antilia's Simulation Server is multi-threaded, which means that sharing data between game objects can get complicated. Not to get too technical on this yeah right - I'm totally going to get too technical, but having the simulation run across multiple CPU cores opens up the possibility that one game object on one cpu core might try to write changes to memory at the same time that another game object on another core is currently reading from that memory. That would cause bad things to happen, and so care must be taken to keep the server threads never access the same block of memory at the same time.
The server has been built with several tools to address this: Object-to-Object Messages, Autonomous Processes, Server Constants, and the Data Channels System - the last of which turned out being the least useful and the most cumbersome to use.
I spent some time this week completely removing the "Data Channels" and replacing it with a simpler system called Server Variables. The new system is much easier to use - just a few functions that server threads can freely call to get variables immediately or set them on the start of the next cycle.
With access to Server Variables being so much more convenient now I plan to put it to better use in determining things like resource drop and spawn rates on the server.
A Few Changes in the Lexicon
And finally, here are a few small changes to Antilia's lore which were made this week:
That's it for this week, see you next time!