What’s in a Game? part II, MineCraft

In part I we introduced 5 general game play categories: Creation, Competition, Collaboration, Collecting, and Exploration (I couldn’t find a suitable synonym beginning with ‘C’). We’ll apply these to MineCraft and see how it fares in each. Note that I’ll be looking at the vanilla unmodded game since pretty much anything is possible if mods are included.

Exploration

Since MineCraft’s land area is virtually infinite exploration plays a large part in the game, not only for resource gathering but sometimes just for seeing the pretty views. As big as a part that exploration plays there are some possible improvements that could be made. While there are some things to find in the MineCraft world in the latest releases, such as abandoned mines, the world is relatively empty and pure above ground exploration itself has little purpose other than to find a nice place to build a cabin. In this sense MineCraft suffers from a similar issue as Daggerfall did: huge procedural landscape but little to nothing to find or do in it. Thinking back of my many MineCraft worlds I can’t think of any that ever expanded past around 1000×1000 blocks in size, if that large. We shouldn’t force world exploration on the player (in general anyways) but providing an option for the player to be rewarded from exploration would be a good thing.

Creation 

This is MineCraft’s obvious strength as creation is only limited by your imagination and amount of free time. While the in-game creation affords little possible improvement, the out-of-game modding can use some improvement. As I understand it there is really no built-in support for modding in MineCraft: people have just decompiled the Java source and started adding their own code. Since there is no “official” modding support the usage of mods is relatively haphazard, even after considerable effort from the modding community as a whole. I shouldn’t have to be decompressing and modifying Java packages to install or debug mods. While the MineCraft modding community is huge I’d like to imagine how much better it would be if there was modding support in the game from the start (don’t take this as a criticism of the game, merely an observation in hindsight).

Collecting

There is a small amount of collecting in the game if the player desires it as evidenced from some of my extensive rooms of chests filled with blocks and items. Whether MineCraft could use more collection game play is good question without any obvious answers. I would personally like to see more types of base blocks, particularly of rare gems and metals along with more things to craft from them. Better ways of storing/sorting items might be useful and more collection achievements plus rewards would add more motivation. Adding random item drops would be another method of encouraging collection although this is partially supported in the form of enchantments already. Despite a lot of possibilities I think this is one area where a few smaller collection oriented features would be better than trying to shoe horn larger features into an already full game.

Competition

Competition is another weak area for Minecraft. There is no built-in PVP so player competition is eliminated right away and probably for good reason (not a very strong combat model). This leaves the primary form of competition to only be “not dying” with a secondary one of seeing who can build the “best” thing. While “not dying” in MineCraft is actually relatively hard it is still easy compared to other games. By just using a few common sense rules (don’t go out at night, always keep mines light, don’t play near lava) the game can get downright easy, even on the “hard” difficulty setting. I’ve died more times in unavoidable and inexplicable ways than actual “valid” deaths which pushes the game towards more annoying that actually difficult. The original MineCraft did very well with competition the first time you started: you didn’t know where you were, what to do, or where to go but you knew that you had to make a basic fort by the first nightfall or be killed by the undead. This little bit of fear and uncertainty in survival is actually a good thing but unfortunately it was short lived as with a little experience there’s very little left to actually fear in the game any more.

Collaboration

Multi-player collaboration is mostly about joining other people to help build something bigger than one person could easily do alone. This is a great example of two game play types, collaboration and creation, joining together to form something more than the two of them alone.

Posted in design, game | Tagged , , | Leave a comment

Octree Overhead

A quick look at the amount of memory overhead in a simple octree structure like:

struct blockinfo_t
{
      byte Type;
      byte Flags;
      byte Extra1;
      byte Extra2;
}; //sizeof() = 4 bytes
struct octreenode_t
{
       octreenode_t *pNodes[8];
       int Size;
       blockinfo_t* pBlockInfo;
}; //sizeof() = 44 bytes + 4 * NumBlocks

Taking a 1024x1024x1024 block world we get the following amount of memory required for each level of the octree (this does not include the actual block data):

  1. 44 bytes
  2. 352 bytes
  3. 2.8 kb
  4. 22.5 kb
  5. 180 kb
  6. 1.4 Mb
  7. 11.5 Mb
  8. 92 Mb
  9. 738 Mb
  10. 5.9 Gb
  11. 47 Gb

Now, a real octree won’t be completely full at all levels so the above numbers are a worst-case scenario but we can clearly see that the overhead of the octree itself gets worse at the higher levels of detail. For example, at the second highest (10) each there is 40 bytes of octree for every 32 bytes of actual block data. This actually gets much worse if we consider a 64-bit system.

One way of combating the high memory overhead at the high details levels in the octree is to combine it with the concept of block chunks. The octree will be used until it reaches the chunk size at which point the octree subdivision ends and all blocks in the chunk are stored at once. This also helps combat the extreme non-locality of adjacent blocks if we use the octree structure down to the individual block.

As a specific example let us take the previous case and use a chunk size of 16x16x16. At this size the octree ends after #7 in the list meaning we have less than 15 Mb of total octree data compared to 4 Tb of possible block data. This is a much more manageable overhead level to a point where we probably don’t need to be too worried about it, so long as the chunk size doesn’t get too small, which it likely can’t for a variety of other reasons.

Posted in Uncategorized | Leave a comment

What’s in a Game? part I

I’ve been thinking about various ways of categorizing types of games or perhaps more specifically, types of game play within games.

  • Exploration — Most RPGs feature exploration as a significant part of the game play although it is more important in larger worlds like MineCraft and Elder Scrolls games. Skyrim is a great example of a modern game that shows how fun simple exploration can be. Walking from A to B in Skyrim is rarely as simple as going in a straight line for 10 minutes as it is hard not to explore and end up taking several real-time days to finally get where you were going (assuming you actually remember). It is still a minor part of a lot of other types of games including strategies and FPSs where a certain amount of it is required just to survive or gain an edge over the competition.
  • Creation — Creating things in games can include simple things like character creation or skill trees all the way up to the complete LEGO-like construction possible in MineCraft. While some game types, like FPS and puzzles, don’t have much creation aspect the sky is actually the limit in others. For example, in MineCraft or Skyrim there are a very large amount of in-game creation possible in addition to out-of-game modding. Adding or modifying content for yourself and others to use is really the ultimate creation game and one that is overlooked for the most part, even in games that feature it strongly.
  • Collecting — Another category that you don’t see too many games focusing on. The only examples I can think of are Pokeman and Diablo. Diablo may seem a strange choice as a “collecting” type game play but the random item generation and loot system makes it relatively addicting. The player is encouraged to keep playing in search of a better/rarer/special item drop which could at anytime, the good old “just one more level” syndrome which is a great thing for a game to have. In working with elementary school children over the years I’ve noticed that collection type games such as trading cards, scavenger hunts, and item collection are a very strong motivator across all age groups.
  • Competition — Competing not only takes on the obvious form of multi-player, which is an important or critical aspect of many games, but also in the form of competition against the computer or even against the player themselves. Most FPS games are a typical example of multi-player competition as are MMOs although with an addition non-PVP aspect. Single-player games usually have competition in the form of just “not dying” or from character creation and story progression (to defeat the boss you need more levels, better weapons/armor). A game like MineCraft has a relatively weak competition component, especially on lower difficulty settings where the challenge is mostly in the collection and building of things.
  • Collaboration — This is the direct opposite of competition but a game can use both at the same time. For example, Team Fortress has very strong competition and collaboration parts to it. Competition obviously with the opposing team but collaboration within your own team is also vital for a winning strategy. Sharing can also be used outside of a multi-player setting in the form of content sharing: make a mod and share it with 1000s of other people. As previously mentioned, the combination of sharing and creation can be a very large driving force for people from both the creation/sharing side as well as just using the shared content.

So where does all this get us? I don’t think it is wise to just take a game, divide the categories up evenly and try to just get a little of everything but at the same time thinking about how game play features work alone and together can result in a better design in the end. If your game doesn’t have any of a particular category it doesn’t make that wrong but it has to be a conscience decision along with its consequences.

Posted in design, game, thought | Tagged , , | Leave a comment

Corel PaintShopPro X4 Rant

Another review/rant of a piece of software I’ve used a lot, or tried to use: Corel PaintShopPro X4 which was previously better known as Jasc PaintShopPro. I’ve used PSP for a long time, since v3 or earlier and have always been impressed with its usefulness. While it is not as feature packed as PhotoShop it has everything I need and is significantly cheaper.

A few months ago I was setting up my new desktop computer at home in preparation for Skyrim and couldn’t find the PSP v8 installation disc I had purchased. I’ve always tried to support the applications I like and use frequently so didn’t really hesitate to purchase X4. In hindsight this ended up being the worst $50 software purchase I’ve ever made.

Ad/Nag-Ware

The worst, and most in-excusable offense, in my books is the ad/nag-ware that pops up when you close X4. If I was using the free or trial version I could understand but I’ve already bought the application and the last place I want or expect unrequested advertising to show up is in a desktop application. You can turn it off but the option is almost completely undiscoverable by itself without having to search for how to do it. A tip to companies that would like to sell me things: the fastest way to get me to never buy anything from you again is to annoy me with pop-up ads.

Black UI Theme

I’ve always been a UI minimalist and the first thing I always do after installing Windows is to revert to the classic interface theme. I want an interface that lets me get to work quickly/efficiently and without getting in the way although I also understand that other people like different themes which why Windows letting you choose and tweak the UI theme is great and necessary feature. Unfortunately, X4 completely bypasses the current Windows theme and uses their own apparently hard-coded “black” theme. I don’t like the black theme but could live with it although the bigger offense is not letting the user change it, something that I believe could be done in previous versions. I seem to remember PSP v8 had a black theme by default but you could revert to the standard Windows theme if desired. Another tip to UI developers: the quickest way to turn me off your design is to force your arbitrary conventions on me while ignoring all standards and conventions.

Slow Speed

In past versions PSP has always pretty much been the same speed, i.e., there was no noticeable speed difference when upgrading. X4, however, is terribly slow in both startup and general use. Changing between editing “modes” takes a few seconds when there’s really no reason for it to be instant, especially considering how often you have to do it. When doing things like selecting and cropping images there is a very noticeable lag when dragging the mouse cursor. This *should* be a solved issue…I’ve never had previous issues in the past 10 years of using PSP or other editors and I’m not editing huge GB resolution pictures. Strangely, the PSP Wiki article says that “X4 is up to two times faster than X3″ which I suppose makes me fortunate for skipping the X3 release. Developer Tip: make sure application upgrades don’t degrade the overall performance of the program, especially in critical or noticeable areas.

Overall UI Change

Previous PSP versions operated like a standard multi-window dialog which worked perfectly fine in my opinion. For some reason X4 introduced three “modes” which change the working feature set: manage, adjust, and edit. The edit mode is almost the same as the previous PSP versions with the exception of the “browse” window being moved entirely to the “manage” mode. I can guess this was done to open the application to a less experienced user base but does so at the great expense of overall usability for the experienced user. The separation of browse and edit into different modes is frustrating as you cannot do both at the same time, like in previous versions, and the cost of switching is high (4 seconds at the moment with no images open). You can open one image from the “manage” mode, switch back to manage to open another image and the first one is gone (unless not saved). Where did it go and why is the application closing documents by itself? The original premise of them trying to attract a less experienced user base doesn’t make sense as the overall application is more complex than previous versions…I would hate to try to explain to my mother how to use this program over the phone but I would suspect it would start with telling her to use something else. Designer Tip: Changing “old” design conventions is not always a bad thing but you may end up losing more than you gain, both in usability and users.

Loss of Browsability

One of the great things I liked about prior versions of PSP was the browse function. It was very quick and easy to display a 2D grid of images, select, open, and edit images as needed or even do batch operations. X4 appears to completely throw out this great feature and replaces it with something far inferior. The browse, now replaced with the “manage” mode, only appears to display a 1D line of images now instead of a grid which makes it much more difficult to browse through 100s or 1000s of images quickly to find the one you’re looking for. Separating the manage and edit modes just makes everything harder, discontinuous, and just plain slower.

The way I see X4 now is that it is a completely unrelated application to the original Jasc PaintShopPro save for parts of its name. I’ll be “returning” my purchased copy of X4 if not for the monetary gain, which I don’t expect to receive back, at least for a small gain in satisfaction. I’ll then either have to find my missing PSP v8 discs, download an “unauthorized” release, or perhaps consider purchasing PhotoShop although with its $700 price tag I fear I’ll never be able to make enough use of it to be worth while.

This is my second experience with Corel products hitting a productivity peak and then having significant changes reducing their usefulness drastically. In a former life I used CorelDraw and PhotoPaint extensively and v4 of both products were close to ideal in terms of feature sets and efficiency. v5 of both products, however, introduced notable changes which made everything more difficult to a point that I simply stopped using them altogether. I was unable to find a good replacement to CorelDraw v4 until I found Inkscape a few years ago which more than satisfies all my 2D vector drawing desires.

 

 

Posted in design, rant, Uncategorized | Tagged , , | Leave a comment

Visual Studio 2010 Rant

Just a little rant on VS2010 to let it all out before I pitch it through the virtual window. I’d be the first one to say I’m not a professional programmer but I have been programming for some 27 years now and have been using Microsoft’s “Visual” products back since Visual Basic v1.0 and I would like to think my complaints have at least some element of truth in them.

Speed

I made a big leap from using MSVS v6.0 right to VS2010 and the speed difference overall was huge with 2010 being the slower of the two. Even on hardware of 10 years ago VS6 was snappy and responsive but VS2010 on a high-end system today is still sluggish. Build times are 3-5 times slower, the “goto definition” editor feature is close to useless sometimes as is the “add variable” on the resource manager. For example, trying it just now on a small 50,000 line project the “add variable” dialog took 10 seconds to display as does “goto definition”.  I’m not entirely sure what it is doing that takes so long: even a grep on all the source files only takes a few seconds and most of that is actually loading the file from the disk. With only a few megabytes of source code you’d think it would be all previously loaded and parsed in memory and finding something would take milliseconds. I mean, I can load, parse and display 250MB of Skyrim’s 1 million records in half the time that VS can parse and figure where/what something is in 10MB of text files, all of which are already parsed and in memory.

Unstable

VS2010 is by far the most unstable of all Visual products I’ve ever used by a large margin, even VB1 way back when. In my many years of using VS6 I don’t ever actually recall it crashing once…I’m sure it did but it was rare enough to not remember specifically. Right from the installation I began getting strange “VS has become unstable” or similarly meaningless error messages telling me to uninstall any add-ins, which I didn’t have of course. I believe the SP or other patch fixed that error from occurring immediately but I still get it once a every day or so and outright crashes on a similar schedule. The main editor has regular issues becoming corrupted to a point that it can’t properly select or edit text. It looks like somehow its internal representation of the text doesn’t match what is actually there which makes editing anything next to impossible if not more entertaining.  Another particularly frustrating thing which happens all the time is that the undo function randomly stops working until I restart VS which is great fun when I accidentally change something, hit Ctrl+Z and nothing happens.

User Interface Contradictions

The interface is strange mix of both good and bad, as though they either gave parts of it to an unsupervised intern to implement or merely forgot about them entirely. A good example of this is the “Add Event Handler”:

The issues are minor but numerous and so basic you wonder how it passed any review:

        1. This dialog takes anywhere from 5 to 30 seconds to display with a lethargic average about 10 seconds, although to be honest I’m being generous with the “5 sec” minimum.
        2. A 3 item “Message Type” list box. This list usually contains at least a dozen items and can potentially contain hundreds. Although this is better than the 2 item list box I found somewhere else.
        3. A “generous” 7 item “Class list” list box which could contain many 100s of classes. SkyEdit, for example, has the potential to exceed 1000 classes and the problem is made worse by the next item.
        4. Most of the time VS2010 doesn’t automatically detect the class type for a resource. I have no idea why it can’t detect that dialog IDD_MY_DIALOG is used by the CMyDialog class, VS6 had no problem doing it, but this means when adding handlers in a large project quickly becomes a tedious pattern of dozens of mouse clicks to find the needle in the small list box.
        5. You have to choose the class first and then the message type. If you choose a message type first and then a class it resets the message type to some default it feels is more appropriate.
        6. Despite the mini-sized list boxes the dialog is huge, for some unknown reason, wasting a large amount of space. If the two list boxes were lengthened to fill the dialog it wouldn’t be so bad.
        7. No “Add” button only “Add and Edit”. A minor thing again but when adding multiple events there is no need to edit the source immediately and another thing that VS6 had missing in VS2010.

The result of all these minor issues is that the automatic event handler creation, a feature that is supposed to reduce my workload, is actually worse that doing it manually, especially when doing dozens or hundreds of events. The only reason I use it is that I usually can’t remember what the function format for WM_SOME_RANDOM_MSG message is.

Strangely enough, although the “Class Wizard” dialog is equally as slow it doesn’t suffer from this control miniaturization or lack of any design forethought.

Lack of Standard Conformance

I was aware that VS2010 was not completely conforming to the new C++11 standard (what compiler is at the moment), but I was not completely aware just how much non-conforming VC10 is and even VC11 will be. The lack of basic features such as default move methods, range based for, and default/deleted methods and the little difference between VC10 and VC11 feature sets are almost a deal breaker. The short version is that I’ll have to wait several years for many of the C++11 features to appear in MSVC making them several more years behind other competing compilers.

Too Much of a Good Thing

The overall interface is pretty good although there are almost too many options for each component:

      1. Float
      2. Dock
      3. Dock as Tabbed Document
      4. Auto Hide
      5. Hide

Windows switch places seemingly at random with no good cause so at any time it is a guess where a particular one might be. Every time I use the Resource Editor I have to hunt for the Properties window: sometimes it is tabbed and others floating, sometimes on the right and sometimes on the left, and sometimes completely hidden. Flexibility to configure your display to your liking is great but having to guess where Window X is each time is not.

Lack of “Easy” Macros

One feature I liked in VS6 was the ability to very quickly and easily make macros in VBScript/JScript. It was great for making simple, or even not so simple, macros for inserting things like header/class/function comment macros or similarly commonly type boilerplate code. The only option, that I know of, for VS2010 is creating a full blown COM extension which, from looking at a few tutorials and documentation is anything but simple or fast to use. You’d think in these days of web proliferation that there’d be a simple JavaScript, or similar, macro/extension capability in addition to the full-blown COM editor interface.

Case of the Expanding Find Dialog

Another minor thing is that the find dialog, as useful as it is, has a problem of randomly expanding. Despite never changing its size except to make it smaller, half of the time when it is displayed it will expand to most of the width of my 2-monitor screens. In addition to being 2000 pixels wide it also has random display issues when this occurs (window border is not properly shown).

Not So Helpful

The move to a web based help system I suppose is a natural progression. I would assume, ok…hope, that there is an offline version available as I’ve already run into several cases of being offline and needing to access help. On a good point, the MSDN search is now only half-useless having improved over almost useless. It gives me the relevant article around half the time and the other half a similarly named function from the unused depths of the Windows API completely irrelevant to what I’m doing. This is again a strange case as VS2010 knows everything about the project and code: it is a Win32 project, using MFC, in a class derived from a MFC class in a virtual function from that MFC class so why would it send me to an Embedded Windows function of a completely unrelated class? It is at a point that I’ll soon be looking at how to change the help to use Google or a similar alternative.

Corrupt Builds

An issue I only rarely had in VS6 but regularly have in VS2010 is corrupt builds causing subtle and impossible to find bugs (because they don’t actually exist). I thought it might be due to editing and saving a file during a build which does popup a cryptic warning message but even after not doing this the problem still persists. What appears to happen is something like: file1.h is modified which is used by file2.cpp and file3.cpp but VS only detects and recompiles file2.cpp. This leaves file2.cpp and file3.cpp with different versions of file1.h which can cause all sorts of issues. It occurs so frequently that when I encounter any “strange” bugs I immediately rebuild the project first. Fortunately all my projects are on the small side so it rarely takes more than 5 minutes but this can be a bigger headache with larger projects due to VS2010′s slow speed, like this question on SO I answered which appears to be due to this same bug.

Some, or maybe even most, of this complaints are relatively minor individually but as a whole the end result is a distinct lack of “polish” of VS2010. It really feels like some free open source program I downloaded from some amateur developers rather than something I paid over $1000 for, and that’s the “cheap” version. Really the only thing I can think of that is improved over VS6 is that auto-completion is slightly less broken…hardly a ringing endorsement of the flagship development product from the creator of the most used OS in the world.

Appendum: The VS2011 beta was recently released and the continued lack of any intelligent design in it can be summed up in the nearly black and white UI theme.

 

Posted in programming, rant | Tagged , | 1 Comment

Is Anybody There?

Probably not, at least not yet. So why create a blog with no potential readers? The main reason is that I find writing ideas down in concrete form a necessary first step in the process of taking an idea to a finished implementation. It forces me to perform some actual rough calculations and flesh out the idea. Often this process results in the realization that the original idea is impractical, impossible or just plain bad and instead leads to better ideas in the end.

The other important reason for writing ideas down is to actually remember them weeks and months later. I tend to jump from idea to idea much like a hummingbird flies between flowers and without some permanent form some ideas may be lost forever.

The last and least important reasons is that these posts may, at some point in the future, be useful to someone else with similar ideas. The great things about the Internet is that it is capable of linking people with similar ideas and goals no matter where they may be.

 

 

Posted in design, thought | Tagged , | Leave a comment

A Matter of Scale

When dealing with a voxel world the number of blocks visible at one time grows quickly as it depends on volume which grows as n^3. Looking at MineCraft again for some examples: the far distance has a view diameter of 512 blocks. If we take the volume of blocks in a square (of course) around the player this is 512x512x128 = 33.5 million blocks. With a few bytes of data per block we’re already over 100MB of block data alone.

If our world is going to have a larger view distance as well as a deeper world we can very quickly get into untenable requirements. For example, a 1024x1024x1024 block world will require several GB to hold the block data. This may be fine on a desktop with +8 GB of RAM running a 64 bit OS but definitely not fine on a 5 year old laptop with only ~1 GB. Part of this is simply choosing a minimum requirement for the system although this is somewhat tricky: both too high and too low requirements are not good for different reasons.

So is there hope for a voxel game world with a significantly larger view distance? I think there are several possibilities worth exploring in more detail:

  1. Detail Setting — Just like in MineCraft and most other games we can have a “View Distance” slider to accommodate both high and low end systems.
  2. Chunk Paging — Blocks far from the player are unlikely to change so they are only needed to be loaded once when creating the chunk mesh and then discarded.
  3. LOD (Level of Detail) System — This is far from a new concept and the basic principle is that objects far from the player can be rendered in much less detail which permits the game’s render distance to be larger. Exactly how well this would work in a voxel world is an open question at the moment.
  4. Octrees — The usual answer for more efficient partitioning of a 3D world is to use octrees, essentially a binary partitioning of a 3D space. This is an undoubtedly poor explanation but that is as much as I understand at the moment. Combined with an LOD system it does appear to have some immediate benefits in reducing the potential storage size. For example, consider an “empty” chunk 32x32x32 blocks in size. In the naive approach this would take at least 32kb to store but in an octree design it would be just a few bytes.

If we go back to our imaginary 1024 block cube world with an arbitrary LOD system with the following detail reductions:

  • >128 block Range = x2 reduction
  • >192 block Radius = x4
  • >256 block Radius = x8
  • >320 block Radius = x16 reduction

This turns our multi-GB storage requirement into just 100MB. Adding an octree system on top of that may decrease the size even further.

 

Posted in design, game | Tagged , , | Leave a comment

How Fast is Fast Enough?

Something I was thinking on the way home: in real-time procedural world generation how fast do we have to be able to create the world in real-time? In a procedural and semi-infinite world like MineCraft the game only generates and saves what the player has explored for obvious reasons. As the player moves around and explores the game has to generate new areas as it comes to them. It has to be in “real time” as we would prefer not to have stutters or even worse, pop-up “loading” messages, forcing the player to wait while we create the world around them.

As an example let’s consider a MineCraft-like block world. It has 1 meter sized blocks and 16x16x128 block chunks, like MineCraft, and the viewing distance is a 9×9 chunks, or 144×144 blocks, with the player at the center.  As the player walks in one direction and crosses a chunk boundary the game has to generate new chunks in the distance which, in this case is 9 chunks, or 32768 blocks. There are corner cases when the player is walking perfectly on the X-Y diagonal where we might need to create 17 chunks at a time but we’ll focus on the average case for now.

Assuming the player is running at full speed in one direction at 4 m/s the resulting chunk generation rate is 2.25 chunks/sec. This basically means that if we had the chunks being generated in the background thread and we could perfectly predict what chunks were needed next, then the minimum chunk creation rate would be 2.25 chunks/sec. Since we will never be able to perfectly predict where the player will go next in practice we will likely need a higher chunk creation rate.

In a world with a larger view distance, say 17×17 chunks, the minimum chunk creation rate is increased to 4.25 chunks/sec. With a very large view distance, 65×65, it increases to 16.25 chunks/sec.

Why does this matter? It matters because if we want a real-time world generation with no “pauses” as the player explores it we have to be careful about the complexity and time required for the world generation. Simple methods like plasma/mid-point displacement are relatively quick but adding more complex generation like ridged-multi noise can be orders of magnitude slower. For example, in some older tests a 256x256x256 block world was created in 2 sec with simple noise but adding caves via ridged-multi noise raised that up to 60 sec. In our prior chunk creation rate examples this corresponds to a rate of 256 chunks/sec and 8.5 chunks/sec respectively.

So ultimately, while more complex world generation may be interesting and desired it is ultimately linked to the size of world we’d like to display. A larger world display, even with some Level-Of-Detail system may require a more simplistic world generation.

 

Posted in design, game | Tagged , , , | Leave a comment

What’s In a Name?

Why “Emergent Game Design”? I’d like to say it was after weeks of careful and meticulous research into the optimal company name but in reality it was after just a half an hour of playing around with various name combinations until I found one I liked and seemed to have a reasonable chance of not conflicting with existing company names.

The root concept behind the name, however, is one I’ve always liked: that a combination of simple principles can be combined to form a complex pattern. You see it in a variety of places in nature and mathematics:

  • Fractals — Many fractals can be described with relatively simple rules but have infinite complexity. The Mandelbrot fractal, for example, whose images is seen at the top of this page, can be described by just “Z(n+1)=Z(n)*Z(n)+C”.
  • Snowflakes — A virtually infinite number of shapes possible from the simple 120 degree angle formed by the atoms in a water molecule and the conditions in which it was formed.
  • Flocking — and other similar behaviour exhibited by groups of animals originates from only a few basic rules but results in complex patterns.

Extending this into the realm of computer games and we can find many similar examples of complex and, more importantly, fun games based on simple ideas:

  • MineCraft — Get blocks and build with them (a virtual world of Lego essentially).
  • Super Mario — Along with most platform games is just moving to the right and not dieing.
  • Pacman — Eat dots.
  • Bejeweled — and other variants involve matching and grouping coloured objects.

A few of my favorite quotes I’ve always enjoyed share this same theme:

“Make everything as simple as possible, but not simpler.”  – Albert Einstein

“Any fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction.” — Albert Einstein

“It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to remove.” – Antoine de Saint Exupéry

In hindsight the name is also appropriate as its full initials, EDGI (Emergent Game Design Inc.) is but one letter away from my full initials (DEGH). Unfortunately, I’m not away of any legal corporate designation beginning with “H”.

Posted in company, design | Tagged , , | Leave a comment