Quade Zaban has been added as a temporary member of YAVE's development team, and in order to familiarize him with my project, I've had a few recorded skype calls with him that I am now sharing with you! This is the third and last of these, an extra long screencast in which we go over the game code. Special attention is paid to the most complicated and unique challenge presented by a voxel game (so far), which is loading and unloading user-editable resources.

I'm no game programming expert, so let me know what you think of the solutions I've used. Is there anything I'm overlooking? Some design that could make things simpler? Something that will bite me in the butt in the future?

Thanks again to Quade for volunteering to be part of this, and thanks to HMN for providing a place for me to share my work with a greater community.

So last month, our sister in low-level-programming arms, Stephanie Hurlburt, collected a list of experienced software engineers willing to mentor less experienced ones. The very first person on the list caught my eye. It was Alex Evans of Media Molecule, a studio that has used voxel techniques for global illumination for previous games and which was currently working on "Dreams," an insanely cool creative artistic sandbox game for the PS4. If anybody knew how to take the graphical presentation of a Minecraft clone to the next level, it would be him.

So I asked him and he accepted!

Note that at the time I believed that "physical lighting" specifically referred to volumetric lighting. In reality, what I want to accomplish with my game and what "physical lighting" means are two circles on a Venn Diagram with a moderate overlap.

You can read our correspondance here. In it, we discuss how to get started learning physically-based rendering (PBR), voxel cone tracing, light propagation volumes, and more. Alex's "meatiest" reply describes how to perform voxel cone tracing.

This has been a tremendously helpful experience, so a big Thank You is owed to Mr. Evans for his help and to Miss Hurlburt for helping us get in touch.

Quade Zaban has been added as a temporary members of YAVE's development team, and in order to familiarize him with my project, I've had a few recorded skype calls with him that I am now sharing with you! In this screencast video we go over my build system and the platform layer. I messed up on recording part of it so I recorded a solo screencast (chat #1.5) in which I tell you what I told Quade.

So what do you think? Should I switch to a command list for my rendering API? Should I be ashamed of the extra seconds being added to my build times? Have you opened up your third eye? Sound off in the comments.

Oswald and Quade Chat #1

Oswald Hurlem  — 1 month, 2 weeks ago
I'll begin with an announcement: Quade Zaban has been added as a temporary members of YAVE's development team. Quade has a fair deal of game development experience and shares a lot of game design philosphy with me. He's interested in contributing to this 3D game project in order to provide him with some mental breathing room as he prepares his action-puzzler for publication on Nintendo consoles.
In order to get Quade familiar with my project and my codebase, I needed to have a few Skype calls with him. And since I also needed to inform my HMN brethren on what I've been up to, we elected to record our conversations, thereby killing two birds with one stone.
So this will be a series screencasts of us discussing the project. The first video will be a grand overview of the game and then a discussion of short term goals. The second will go over the game's platform layer. The third will dive into the game code and its resource management system. We may also do a fourth about the the meta-programming solution I'm using and how it could be improved or expanded. I'll be releasing one of these each week.

Oswald and Quade Chat #1: Dream Document and Short-Term Goals
For this one we go over the tentative document I've prepared, originally to explain the goal of the project to an artist I was corresponding with. It's less of a "design document" and more a "dream doc," but it should do a decent job explaining what I aim to do with my game. You would be surprised at the number of people who hear that I'm making a "Minecraft Clone" and think that I literally want the game to start out with punching trees!
Later, we'll go over some short term goals for the project.

So what do you think? Is my design document too vague, too ambitious, too unoriginal? Should I not have written one yet? Can you tell my throat was getting scratchy? Sound off in the comments!


Oswald Hurlem  — 2 months, 3 weeks ago

So, one of the things I have to do with my game is change some of the types so that global positions in the game are expressed as double rather than single floating points. If I express positions only using floating points, I can maintain millimeter precision only out to 5 miles from (0,0,0). And that ain't something I'm okay with.

I didn't want to rewrite a bunch of code, I wanted to keep nice naming conventions, and I didn't want to resort to using C++ templates (I've always thought they were goofy). Casey has mentioned the advantages of metaprogramming so I decided to give it a shot.

I used C# since it's a language that comes much more naturally to me than C. C# and .NET have lots of nice string manipulation features so this was a breeze. This was my first time doing metaprogramming, and I followed Snuffleupagus-oriented programming to an extreme. The result is code that does what I need it to do. I am not sure how useful it will be to the the rest of Handmade Network or the public at large.

Because this only runs at build-time, I did not take performance into account. This code has such an absurd number of needless string allocations and initializes so many iterators, collections, functors, and other doodads through its sinister seductive syntactic sugar that I must give the more dogmatic members of the handmade community the Highest Trigger Warning Imaginable.

For me this is pretty cool. It does what I need it to do, and I can generate code that would have been insane to write by hand or via macro lunacy. Compiling the code with csc.exe takes too long, but running it using LinqPad takes 0.8 seconds, which, well, I'm OK with it. I plan to keep adding to this file as I continue development, periodically taking time to tidy up the API. I to add rectangle and matrix types, as well as some sort of thing for generating SIMD math.

You can see the vector types file I generated here:

If you believe that this sort of thing could potentially be helpful for your own projects, even with the caveat that you want it to have more features, do something differently, or be made in a different language, please let me know. As much as I can, I try to do work that will have a large positive effect.

First Stream on Wednesday

Oswald Hurlem  — 5 months, 1 week ago
100 Todo items later, I have my code up to a place where I'm not embarassed by it. I'm going to be holding a livestream on Wednesday from noon until 2pm PDT. I'm going to show you guys my personal development environment, and then we'll walk through one iteration of the game loop. I might not finish in time, in which case I'll either keep going (if I'm feeling good) or continue on another date. This one will go on YouTube.

Be there!

Yave License

C Oswald Hurlem  — 6 months, 1 week ago