Twitter  Facebook  Google+  YouTube  E-Mail  RSS
The One Man MMO Project
The story of a lone developer's quest to build an online world :: MMO programming, design, and industry commentary
So Many Good Bugs!
By Robert Basler on 2016-12-17 18:29:48
Homepage: onemanmmo.com email:one at onemanmmo dot com

So after the second Test Weekend, player numbers were up, per-player playtime was significantly up, and bug reports were down - so I'm pretty pleased about all of those trends.

The%20Imperial%20Realm%20-%20Miranda%20-%20Superweapons_Lo.jpg
[Random screenshot of the week: Early test of orbital bombardment before damage radii were set up correctly.]


I've been busily at work fixing bugs. There were 115 crash dumps submitted the second test weekend, 80 of those are now fixed. With a lot of easy bugs fixed after the first weekend, there were some real headscratchers submitted this time around. I also went through all 234 of my existing bugs and categorized them into A (Hang/crash/missing feature) B (Major defect, no workaround) C (Minor defect, cosmetic, has a workaround) and D (probably never going to get fixed) so I can start working on them. That's actually really nice for me because I can just ignore all those C's and D's for now.

A bug a couple of people ran into that I found quite surprising at first (because I couldn't imagine how it occurred) was the renderer running out of textures. The renderer has 1000 available, there are only about 250 textures in the game for models plus two for each terrain block and one for each unit. A busy player might hit 500 but I couldn't see how they could possibly hit 1000. I came upon the answer by accident when I clicked on a unit to move a very long way and I noticed the number of textures available plummeting as the CPU fan roared. I realized that the pathfinding was loading in terrain to do pathfinding, but when it did that, the terrain was also being set up for rendering. Hundreds of terrain blocks were loaded, set up for rendering and then immediately discarded. This caused a huge CPU load. Setting up the terrain for rendering is quite complicated, so I was a bit hesitant to make any changes there, luckily I was inspired to modify the terrain loader so it knows if terrain needs to be set up for rendering or not. To my great surprise that worked first time! The CPU load for pathfinding went way down, texture use was reduced to zero while pathfinding, and I spent the rest of the day goofing off playing Fallout 4. To make it even less likely players will run out of textures in the future, I also reduced the per-unit texture to just one texture per thousand units.

A number of players reported problems with the harvester wandering around resource fields without actually harvesting anything. Players should find a lot less of this the next time they play (although the final solution will involve some big rework to Miranda's collision detection which I decided to leave for another day.) I also fixed the annoying bug that the harvester repeated "Harvester standing down" over and over if there was no refinery.

One crash bug I tracked down to the player having their phone plugged into their PC. Players should now be able to charge their phones in safety while playing Miranda. A couple of players couldn't get into game because they put an apostrophe in the force name. The database and game handled it fine, but when it was passed to javascript for display on the screen, it was in a string quoted by apostrophes so the javascript stopped at that point leaving just a blank screen. I also received a desync bug which only happened when players tried to move buildings, that was pretty scary to fix. These are just a few of the bugs I never would have found without all you kind folks to help me.

All those many players who ran into crashes attempting to change the display mode by hitting Alt-Enter can rest assured that is now totally fixed. Ok, actually I gave up on that particular feature. Graphics changes now only take effect on game restart. The problem with that feature was that it was super-fragile. Every time I would change something I would break the code that unloads and reloads all the rendering data. There was no good way to make it not-fragile, and constantly re-testing it is error-prone, so removing it seemed like the best choice. While I was working on the settings screen I also fixed the volume controls and made it save the settings to disk as soon as you leave the settings screen so there should be no more lost settings changes.

If you had problems with the Loot screen on the weekend, you should find it much improved. Its big problem was that if you tried to pick an individual loot item, the game would crash. Looking over the UI code, I'm pretty sure I never actually tried using those buttons - I always just Take All and I'm done. While I was in there I also fixed the tooltips which annoyingly overlapped the buttons and added some spiffy audio to the screen.

Late one afternoon I was lucky enough to reproduce a bug that had been reported in a crash dump which had really left me scratching my head. The game would crash trying to remove a unit from the collision system because it wasn't in there. The unit should have been added previously, but that apparently wasn't happening for some mysterious reason. I modified the game to record the comings and goings of units more thoroughly then spent the rest of the afternoon trying to reproduce the bug again. I couldn't. That evening I sat in front of the TV watching Mr Robot and logging in and out for over two hours until it finally occurred again. I had my smoking gun! I was able to confirm that the unit was never added to the collision system when it was loaded, even though it should have been. Unit loading on the server is done on a separate thread, and multithreading is hard, so that was immediately suspect. Looking over the code I realized that the code that puts units into the collision system wasn't thread-safe and it could see partially-loaded units and think they didn't need to be in the collision system. Some slight reordering of the loading code and I was able to add an I'm finished loading flag to each unit. Easy peasy (once you can reproduce the problem.) This also explained one players report of large numbers of mysteriously disappearing tanks.

I want to thank everyone for submitting the survey feedback. The biggest concerns reported were about vendors, and difficulties with laying out the player's base. Thanks to that feedback I was able to come up with ideas for some really great improvements for both features that I'm really excited about.

Next week I'll be putting bugs aside for a while and getting back to making the game playable with multiple servers. That should make for some nice new bugs for everyone to find next playtest weekend.

Happy Holidays!

New Comment

Cookie Warning

We were unable to retrieve our session cookie from your web browser. If pressing F5 once to reload this page does not get rid of this message, please read this to learn more.

You will not be able to post until you resolve this problem.

Comment (You can use HTML, but please double-check web link URLs and HTML tags!)
Your Name
Homepage (optional, don't include http://)
Email (optional, but automatically spam protected so please do)
Multiply: 2 and 6 = (What's this?)

  Admin Log In



[The Imperial Realm :: Miranda] [Blog] [Gallery] [About]
Terms Of Use & Privacy Policy