:: The story of a lone developer's quest to build an online world
:: MMO programming, design, and industry commentary
[The Imperial Realm :: Miranda] [Blog] [Gallery] [About]

The One Man MMO Project

By Robert Basler on 2012-03-23 23:44:12
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
I took a couple days off for spring break, but I've been working on getting my models to share rendering resources. I'm afraid I have to let you in on a secret: not all MMO development is super exciting. Up until today, each time I loaded a model, I loaded its complete scenegraph including transforms, and allocated a material list, a vertex array and and a set of meshes for every instance of that model. If I had 20 identical objects on the screen, rendering all those duplicated meshes was really super inefficient.

I had a few requirements:
  • I wanted model loading to be asynchronous.
  • Models should share meshes, vertex arrays and material lists allocated by the renderer.
  • I wanted to be able to customize models individually (hiding submeshes, and moving/scaling/rotating model components.)

The asynchronous loading part was the simplest. I used an AVL tree template to build a model cache, then made a quick little task to do the loading when models aren't already in the cache, then schedule it in my task system. The asset system was already re-entrant so loading the model scenegraphs was no problem. Then I added a lock-free queue to put the finished models into and a step in the update to poll that queue for finished models, and Bob's your uncle. No possibility of long frames during model loading.

Once I had the loading working, the really tricky part started. In order to share renderables between model instances I used a super handy shared pointer template.
By Robert Basler on 2012-03-13 11:17:36
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
I generally try to avoid optimization until nearer the end of a project, but my new art showed up a real slow point in my game. I have a serialization system which can read or write most in-game classes into bit-packed buffers. This is super helpful for putting classes into network packets or into files on disk. In addition to bit buffers I also have a database serializer that can use a database as a storage system and an XML one that writes neatly into XML files. Handy right?

I discovered this week that loading the new models which had 5000+ polygons was taking up to 3.5 seconds per model. I already limit model loading to one per frame, but loading up 20 in rapid succession meant a few very long frames in a row and an apparently hung game. Digging in, the culprit turned out to be loading the vertex and mesh arrays.
By Robert Basler on 2012-03-09 11:11:25
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
With my new shield effect last week I've been thinking a lot about the appearance of my game. The art style, what effects I'll need, lighting, what I'm going to do for models. There are a lot of complex art issues. And I'm really at the point where my small volume of art isn't cutting it anymore. So after talking it over with my CG Supervisor nephew over dinner last Sunday, I decided it was time to start spending some money on art.

On Monday I purchased a package of models from 3DRT.com which is when the real fun began.
By Robert Basler on 2012-03-04 02:31:23
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
I like to quest. One of the features Bioware built into The Old Republic is a quest helper. Every quest you get appears as a destination on your map. You go there, do your thing, then the marker changes to wherever you need to go to collect your reward, and the quest is done. There's no exploration. There's no discovery. There's no challenge. You just follow the map. How on earth did this fun-obliterating feature make it into the game?
By Robert Basler on 2012-02-29 00:14:19
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
Fun day! I've been working on a new shield effect the last couple days and I got it working today. The idea was to develop something like this fresnel soap bubble effect. I have to say, WebGL is pretty cool. I never thought I'd be following 3D rendering examples that run live in a web browser. Really nice of them to supply the source code for the shader.

Not that it's a simple drop in...
By Robert Basler on 2012-02-23 02:15:12
Homepage: www.onemanmmo.com email:one at onemanmmo dot com

One morning when my daughter was very little, I was shaken awake by a very frustrated little girl. Opening my eyes, she was pulling and pulling on her little arm, which was completely underneath me. Seeing I was awake, she looked up at me, straight in the eye, and despite having only recently started to talk, she opened her mouth and clear as a bell, she said "STUCK!!!" Today I can relate to how she felt.

A couple days ago I was reading the November Game Developer magazine, always a source of good stuff. There was an article The Game Entity by Michael A.Carr-Robb-John. I have an entity system in my game, so I was interested to see what he had to say. Now there was a lot of good stuff in there, but one thing really stuck out for me. He mentioned that it is nice for game entities to have variable update frequencies so that entities that nobody is particularly interested in don't burn a lot of CPU cycles. Now for me, expecting to have hundreds of thousands of entities, each with maybe a dozen components being simulated on a single server, this was a brilliant idea, one that could save me a fortune in server costs!

Add to that, he mentioned briefly about the potential of multithreaded updating of entity systems to more effectively use newer CPU's. Another server capacity bonanza.

By Robert Basler on 2012-02-16 23:42:16
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
With apologies to Winnie the Pooh, something I've really come to appreciate working with other people's code is code that compiles warning-free.

When you compile code with warnings you have to ask - are the warnings there because you've done something wrong? There's no way for you really to know. You need to look at the code, figure out what it is doing, and decide if it is correct. That's not always easy. But it always takes time.

Multiply a couple minutes of investigation by several hundred warnings, and new code can be a real pain to integrate. Not to mention that every time you integrate a new version, you have to look at the same warnings all over again or, if you've fixed the warnings, you have to integrate those fixes into the updated codebase.

So if you're making code for others, take the time to get rid of the warnings. When a new one comes along, it will be easy to spot and it'll most likely be in code you just wrote so it will be easy to fix. You might even consider turning on the compiler setting to treat warnings as errors.

One last thing, no points for using #pragma or compiler settings to suppress warnings. There are very rare occasions where the code is right and the compiler is wrong, but hardly ever.

From the programmers' wisdom file.
Read more... (0 comments)
By Robert Basler on 2012-02-03 12:26:37
Homepage: www.onemanmmo.com email:one at onemanmmo dot com
The last couple days I've been having Visual Studio 2010 crashes every few minutes. I'd be typing, or changing files, and WHAM Visual Studio has encountered a problem and is restarting. Automated file recovery helped a bit, but I kept losing 15 or 20 minute chunks of work.

I had tried deleting and rebuilding all of Visual Studio's temporary files, as well as the temporary files from Visual Assist X which is the only plugin I'm using (and it is super awesome by the way - if you don't have it you owe it to yourself to get it!) Still kept crashing.

Getting a little desperate, I took a look through recent changes from Windows Update and noticed that an important hotfix had been installed January 25 Update for Microsoft Visual Studio 2010 Service Pack 1 (KB2635973). Hmm, a suspect.

Googled about, couldn't find anyone saying they had trouble with it. But having read the info on it, it didn't seem like it would be a problem for me so I uninstalled it.

Not one single Visual Studio crash so far today.
Read more... (3 comments)
By Robert Basler on 2012-01-30 22:59:48
Homepage: www.onemanmmo.com email:one at onemanmmo dot com

I've been quite disappointed by the big stink being raised over the offline pass for Kingdoms of Amalur. (Disclaimer: I have no inside knowledge of the providence or politics of the online pass from my time at EA - I just made the games.)

I'm a firm believer that if I buy something, I should be able to do whatever I want with it, so I'm firmly behind the people who want to be able to buy and sell their used games. There's a little irony there considering that I also sell software with online activation. (In my defense, I've always been very generous with activations and transfers for paying customers.) But as a customer I've become very selective about the games I buy, making myself aware of any restrictions imposed by the publishers before buying. And some of those restrictions have made me miss out on some really good games. But it has also caused me to buy a whole lot of great DRM-Free indie games so I guess that actually nets out as a plus!

I've been critical of the "online pass" since I first heard of it because it is publishers using a stick on used game players. Pay us or we'll break your game. Publishers attempted to justify the charge by claiming that because it costs money to run the online servers, they need to recoup that through single-use game codes at $10/per. Sure servers cost money, but they cost so little money for most games (there are some exceptions) that this argument is spurious to say the least. A single game server supports at least 1000, and as many as 10,000 simultaneous users. Multiply that by 24 hours for round-the-world players, and there's some serious capacity in just one server machine. Once the servers are installed, the ongoing costs are relatively minimal for a game selling millions of copies.

Now with Kingdoms of Amalur introducing an online pass for an offline game, EA is finally being honest about what it really is - a shot at Gamestop and the used game market.

By Robert Basler on 2012-01-20 17:03:10
Homepage: www.onemanmmo.com email:one at onemanmmo dot com

Getting Audio into the game is a huge leap forward. You don't realize how much sound adds until the first time your game boots with its theme music playing. There's a physical reaction to sound that is hard to ignore.

After a bit of research I came to the conclusion that the only free option for an audio middleware layer is OpenAL. If you have some money you might want to consider Miles or FMOD - they have a ton of functionality you won't need to build yourself.

I was kind of uneasy initially when I discovered that the OpenAL 1.1 Core SDK and the OpenAL Installer haven't been updated since 2009. Hello? Anybody home? As it turns out, OpenAL has continued to develop, but it is within the drivers and with the extensions. Like OpenGL, the core OpenAL API has an extension mechanism to add new stuff while the core API doesn't change. If you're at all uneasy with OpenAL, go check out the list of games that have shipped using OpenAL - there are a lot of big names there.

OpenAL gives you 3D sound positioning (with distance volume attenuation) with hardware mixing support on some audio cards and the ability to play many sound sources (with different sample rates) at once. If you have a Creative Labs sound card, apparently you get other fancy EAX features through extensions. I haven't looked into that at all.

My first thought for the game's audio file format was MP3 to save space, but MP3 is covered by patent and requires per-copy royalties. Instead I went with Ogg Vorbis. Here's a handy link to a page with all the developer downloads. LibOgg is the container file library and is used by LibVorbis which is the audio codec.

Recent Comments

Dates are Hard - 2014-11-16 11:58:48 (3 comments)
Also still following this project.
Hope we can jump into action soon.
Dates are Hard - 2014-11-15 02:34:23 (3 comments)
After the Friends and Family Alpha starts I'll be able to talk about dates.
Dates are Hard - 2014-11-14 17:56:02 (3 comments)
That's a shame, but don't forget that your rabid fans are still fanatical, and er, rabid.

Would you like to give an updated release estimate, or are you a little wiser this time :P
Happy Anniversary! - 2014-11-12 11:36:58 (2 comments)
Thanks, we really did have fun. The EMP museum & Darth Vader's lightsaber were the highlights for me although the Seattle underground tour was really interesting as well. It was strange to leave the laptop behind and not work on or even think ...
Happy Anniversary! - 2014-11-11 17:16:10 (2 comments)
Huzzah! I hope you had fun with your family :)
5 6 7 8 9 (10) 11 12 13 14

Admin Log In