The One Man MMO Project
I had need of a good spatial searching data structure. I found a pseudocode example for a quadtree on Wikipedia although it had a few key parts missing which is sort of inconvenient, so I've filled those out and decided to post the full C++ template code here.
This is a leafless quadtree as opposed to a quadtree which has both internal (points to children) and leaf (contain all data) nodes. I'm not yet sure what the performance implications are of the two types other than that the leafless quadtree is going to do more data comparisons than the traditional quadtree during deletion.
This is still somewhat a work in progress and there are some things I'm not entirely happy with. For example, Move could be made faster by avoiding a second search if QuickMove fails. Also see the comments above the Combine method. That said, I've run unit tests against this and can't find any more bugs in it.
The only code missing from here is my vector template used by Query. You can replace that easily enough with an STL vector or the equivalent.
If you are here looking for answers to your homework - go figure it out on your own!
Read 14106 more bytes... (0 comments)
It has been a little quiet on the blog the last month. Back at the start of January I came up with a really smart solution to my movement/collision/formation/pathfinding issues which also has the gigantic benefit of reducing the bandwidth needed for unit movement almost to zero, so I've been super-busy getting that put together. I've also been thinking a lot about the viability of Free-to-Play as a business model for Miranda...
Since I started development, I've been planning for Miranda to be Free-To-Play (F2P). F2P makes a lot of sense for smaller developers. It has really solid economic theory behind it (if you're not already familiar, read up on "demand curve" and "consumer surplus") and by making a game free, you can get a lot of people to try your game who probably wouldn't if they had to pay for it.
That's the theoretical upside, but lately I've been reading a lot of articles about failed F2P games. They all had good reasons why they failed, so there is something that can be learned from them, but the statistics shared about those failed games has got me thinking that there are other forces at work in 2014.
Read 3061 more bytes... (0 comments)
It's time for my third annual look at the past year.
Looking at my work log, the biggest part of my year was spent getting systems that kind of worked into final working condition, adding features, fixing corner cases, bugfixing, polishing and improving performance (I did a lot of work on loading and rendering performance.) While I thought I was mostly done with rendering last year, I still put a lot more effort into making the game pretty this year. I added more normal mapping, distance fog, smoke to damaged units, dust to moving units, a sandstorm effect, two factions worth of buildings (21 of them,) 23 rocks, fields of flowers, the sky, distant terrain rendering, a rusty container-ship setpiece, color correction and heat refraction post-effects and at long last: rubber-band rendering for the mouse. Adding Object culling was the biggest rendering performance win.
Read 4811 more bytes... (0 comments)
For some time now I've suffered with abominable build times on my optimized builds. A full rebuild of just the client in Debug takes 160,825ms but in Release it takes 371,462ms. So for less code, that's a whopping 231% increase in build time just for optimization!
I build three different configurations of my game. Debug is a build with all debugging features enabled, ASSERT's on and debug trace output. Release has full optimization, no ASSERT's or trace output. I also have an Abort built which is fully optimized with ASSERT's and no trace output. I use the Abort build often, but the 6 minute build times even for a one-line change make it super-inconvenient to iterate.
Read 1895 more bytes... (1 comments)
The interview I did last week has been posted: Interview: Robert Basler, One Man MMO and The Imperial Realm: Miranda.
Read more... (2 comments)
I've spent quite a bit of time the last couple weeks piecing bits of different articles together to figure out how to implement normal mapping in the Lair Engine. The problem I encountered is that there is a huge variation in the methods and terminology used for normal mapping. This makes it a very confusing topic for non-math-lovers like myself. So here I'm going to explain the three common techniques for normal mapping for the mathematically uninclined.
Read 23066 more bytes... (8 comments)
Thursday morning it occurred to me that today would mark the 4 year anniversary of the start of my work on The Imperial Realm :: Miranda which made me think, "it's about time I put up some real, unretouched in-game screenshots."
[Waiting out the Sandstorm]
[Immovable Object, Meet The Irresistible Force]
I love the sand storm effect! Sometimes I park the camera under a ridge and watch the sand blow over my head. Getting all those particles interacting with the terrain at a decent frame rate was tough.
These screenshots show The Wasteland, one of several biomes in the game. It is hot, white sand, and rock and nothing lives there except some curious flowers. Anything you can see in the screenshots you can go to with no immersion-breaking load screens.
You may have noticed the second shot borrows a note from Oblivion. I loved the shots of Jack motorcycling between buried ships in a post-apocalyptic wasteland. If the final game reminds you a bit of Iceland, Oblivion and Prometheus are why.
Read 2398 more bytes... (0 comments)
Here is a good example of why multithreading is hard.
Read 3044 more bytes... (0 comments)
I can't remember the last time I had to spend any time finding a memory stomp. This was not always the case -- I have spent many an hour with data breakpoints. Man was I happy when those finally started working on the Wii. Today I thought I'd share a couple little things I use to eliminate overflows in my code.
Read 2561 more bytes... (2 comments)
I always hated working on games that didn't have a working debug build. On some the framerate was too low. Some didn't even build. There was always one real reason for it: somebody in charge didn't think it was worth having a running debug build. But the cost of a broken debug build is a huge increase in bugfixing time. Debugging a non-debug build results in misleading values in your debugging windows, bad callstacks, and heavy reliance on static analysis of trace output to figure out what has gone wrong. In short: it has a huge cost in developer time.
Read 5477 more bytes... (0 comments)
Enabling NVidia GPUs on Optimus Laptops - 2015-04-21 11:36:42 (3 comments)
// For AMD Enduro this should do it on 13.35 and later drivers.
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
A Chrome UI - 2015-04-21 01:33:26 (3 comments)
Berkelium isn't maintained anymore, might want to consider Chromium Embedded Framework instead. I'll probably switch at some point since drag and drop is broken in Berkelium.
Combat Debugging - 2015-03-17 15:01:24 (1 comments)
Signed up for the email list, still very interested in this project
Hiding in the Flowers - 2015-03-15 15:06:47 (2 comments)
Hey Tripleskit, your answer is here.
Hiding in the Flowers - 2015-03-15 13:01:43 (2 comments)
When will this game be accessable for open/close beta/alpha
Project Line Counter in Visual Studio 2010 - 2011-06-04 00:01:45 (3 comments)
A Chrome UI - 2011-04-07 10:28:46 (3 comments)
Happy MMO Easter - 2011-04-22 16:17:59 (1 comments)
Looking for a Fast Square Root - 2012-03-29 11:19:56 (4 comments)
Shazam! - 2010-01-15 12:58:21 (0 comments)
Windowed Fullscreen - 2014-08-07 13:26:33 (0 comments)
New Screenshots - 2014-08-23 00:13:12 (0 comments)
Combat Debugging - 2015-03-15 15:03:19 (1 comments)
Invest In Your Debug Build - 2013-10-15 01:32:35 (0 comments)
Visual Studio Ctrl-Tab Fix - 2014-02-28 09:23:22 (0 comments)
Copyright (C)2009-2015 onemanmmo.com. All Rights Reserved