The windmill appeared strange from this perspective, its swift blades moving in and out of sight.
A few things.
There are some games that are so simple, so pure, so fundamental that they feel like they were discovered, not invented. Go is a perfect example. Probably Tetris.
If I were to get really good at a game, I feel like such games would be more worthy of my time. It's part of my game design philosophy to try and make games that are discovered, not invented.
When I started working on Miegakure, I had experimented a little bit with making higher-dimensional games and so I knew that the player would be looking along three vectors out of four (these vectors could be oriented any which way in 4D). Why did I chose to let the players see only along three dimensions (taking a 3D slice), and not project the entire four dimensions down to three, then to two for the screen?
First of all, I wanted the 4D world to feel like an extension of the 3D world we live in. What if our world actually had four dimension, but we didn't know it? I love this idea of a mysterious fourth dimension, rumored, but never seen (that's true in the real world too!). And as a player you are the only person you know that is capable of reaching it.
Second, if you use a projection a lot of objects are going to overlap on the screen, objects that you can't actually touch because they are too far away. You could try to solve this problem by coloring objects differently based on where they are along the fourth dimension, but this is unnecessarily difficult to visually parse.
In retrospect, one thing that makes Miegakure special as compared to the few other 4D visualizations that exist is that it lets you touch the 4D objects as if they were real objects, and create entire 4D generalization of our world. This is something that is much harder to do using projections, which is the usual way of representing 4D objects, such as this more commonly seen, confusing-looking, projection of a Tesseract (the 4D equivalent of a cube).
Then there was the question, how should the player be allowed to move along the fourth, perpendicular vector? The obvious way would be to have the player press another couple of buttons to move up or down the 4D.
It quickly became clear that you don't want the player to move blindly along the fourth direction; you want vision and movement to be coupled: if you could move without being able to see where you are going, you would bump into invisible objects, and the whole world would change at each step (In the 2D/3D version of the game shown on the right and in this trailer, if you could side-step the world you see would change at each step).
So the idea of swapping a dimension for the fourth one came about. Inspired by Ikaruga (which is a beautiful shooter where all the complexity is derived only from the ability to switch colors by pressing one button), the simplest thing you can do is to have one button that swaps a dimension for the fourth one back and forth.
I loved the idea that the game plays like a regular platformer, except for this one special button that you press once in a while. Braid is also this way.
If you are only allowed to move along three dimensions, but you can pick which ones they are, then you can move anywhere in 4D. The following question remains: which direction will be swapped for the fourth one? If you name the three dimensions X,Y,Z,W, and decide that gravity will point down Z, then you don't want to swap Z out, because it would look very confusing, and pressing the jump button should probably always move you in Z. So you're left with swapping either X or Y. If doesn't really matter which one we pick, in my case it's Y. For simplicity X is left untouched. It would not be interesting enough to let players swap in the X direction to justify adding that ability. It also means that levels can be made harder or easier by simply rotating them 90 degrees in the XY plane (i.e. swapping X and Y)!
It turns out that a swap can be implemented as a 90 degree rotation, which can be interpolated smoothly (this is what is happening when the world looks like it is deforming).
As you can see, from first principles there was only one way to design Miegakure, and even though I was especially lucky in this case, that was very much something that I was trying to do. The rest was just exploration of this rule set.
But the next problem was: how do you make it so that the interactions are meaningful? 4D space is exponentially harder to fill with meaningful stuff. It takes 102=100 data points to fill a 10x10 grid, 103=1000 data points to fill a 10x10x10 grid, and 104=10000 data points to fill a 10x10x10x10 grid! This means that even if we take a small region of 4D space (10 units in each direction), we need a huge number of things to fill it with.
We want the number of objects to keep track of to be small to help the player hold them in their head. This essentially means that we want our "base" (the number that is raised to the power 4) to be small. This is how building the game out of 4D tiles, some of them pushable, with small levels (4x4x7x4 for example) came about. (Note that other, more detailed objects can always be placed on the tiles).
I think I may have been partly inspired by this puzzle from Braid (probably my favorite in the game!). The entire puzzle can fit on the screen; it's just two doors and a key. It is extremely compressed. Everything extraneous to the puzzle itself has been removed. But it is still interesting and difficult to solve. All the difficulty is in the understanding of the systems at play, such that when you understand them properly the puzzle becomes trivial. (A video of it, spoilers!).
Because the number of objects to keep track of is small, it's possible for the player to hold an entire level in their head. This is very important to me, because that means they are truly thinking in 4D, as opposed to looking at a bunch of 3D spaces one at a time.
At this point I could vaguely picture how to walk through walls using the fourth dimension in my head. I knew that since two dimensions are always visible an entire plane would stay the same after rotating, and therefore objects on this plane would be reference points, and that they would help the players orient themselves.
So I didn’t really know what the game would look like! I especially could not picture how the transition between the two states would look like. But I programmed it and found out and I was the first person to discover how to play the game.
We are back from PAX Prime! We were showing as part of the Indie Megabooth. I think the show went very well. People seem really excited about the game. I am glad that the new graphics are making a ton of people curious about what the game is (Not sure why I didn't notice the difference as much at PAX East). They were a lot of work but clearly worth it.
I tried to remember what the most frequently asked questions were, and I plan to write blog posts/ make videos about them. Questions were: is the fourth dimension time? (Nope!) How did you come up with the concept? How is this game even implemented?
If you have more questions that you would like me to answer please let me know (Excluding: when will the game be out?)
We had 4 stations initially but because the wait to play was getting too long, I added a fifth station saturday afternoon. Like last PAX, the main trailer was playing on a big screen, and the explanation trailer was playing on a smaller screen below that.
My favorite moment was witnessing a 9 year old girl play the game better than her father, giving him tips on how to solve the puzzles.
PC Gamer did an awesome preview of the game (they totally got it!).
For the first six or so levels, I did not get Miegakure at all. I was completing the early puzzles, but I had no idea how I was doing it.
I gathered some statistics about most of the playthroughs. It seems the game was played over 400 times, which gives an approximate average play time of around 23 minutes. That's about how long it takes to play the first 13 "intro" levels. Many people played for one or two hours, but I have no trivial way of counting how many.
An explanation of how walking through walls would actually look like if you could move in 4D.
This doubles as an explanation of how Miegakure works (finally! Also SPOILER ALERT) and what the fourth dimension is.
Ever since people discovered the concept of a fourth dimension of space around a century and a half ago, they have tried to come up with what would be possible if space was actually four-dimensional. Walking "though" walls would be one of the simplest consequences of being able to move in 4D space. But what would it actually look like? It's not often that watching a video-game trailer actually teaches you about real math.
Of course, if you have watched the video, you know that it is not "through," but rather "around" walls, despite what this movie poster or this comic book character, for example, would lead you to believe.
This trailer took a long time to make! It will be the basis for talking about the game more.
The pixel art was done by G.P. Lackey and the music by Disasterpeace & Mateo Lugo. I love how it turned out!
Oh I forgot to post here that we will be showing the game at PAX Prime, as part of the Indie MEGABOOTH.
"The laws of the model's nature have to be logically and mathematically consistent with one another, but not with physics." -J.C.R. Licklider (see previous post)
What makes a logically and mathematically consistent system? It seems to me that every system has a boundary within which it is consistent, and outside the boundary it starts to break down. How do we define this boundary?
The process of describing reality using mathematics is not perfect. First, an abstraction layer needs to be selected. That means we have to decide how detailed a model will be. If the model is too detailed, it will take too much "computation" to predict anything. If the model is too coarse, it might not predict enough effects.
For example, we can simulate the motion of an object by simulating every atom inside of it, but that may be unnecessary, and if the object does not deform very much at the scale we care about we can approximate it by a rigid body, which gives a simpler model that could work very well for our case. But if too much force is applied the object would start to deform or fracture, and then the model breaks down, and might give nonsense results.
In physics, we may know if the assumptions we make are reasonable or not. If we know for sure that in the situation we want to model not enough force will be applied to the object and thus it will never break, then it does not matter that the model does not handle this case.
In games, we create a set or rules for the game that often approximates reality to some level. So already we have chosen an abstraction layer. But we may not know what the consistency boundary of that model is, i.e. find out the places where the approximations we made result in nonsense situations. We may need to discover the shape of this boundary by playing the game itself. Like in physics, we can adjust the rules of the system to increase or decrease the consistent area, but unlike physics we are not bound by having to approximate reality.
For example, imagine a game where a character moves in a 2D grid and the player can place an arrow on a square to redirect it. This model assumes that the character can only move horizontally of vertically within the grid, and so far this is consistent. But what happens if you let players place two arrows on top of each other? If the effects are additive, suddenly diagonal movement needs to be considered, but the model so far has not taken this case into account. This is the edge of the consistency boundary. At this point we need to either disallow the case of diagonal movement and potentially make the game less rich and interesting, or allow the case and grow the consistency boundary, but this may be hard to design as new rules need to be created, and problematic areas may still exist, just further away.
Sometimes, problematic cases can be avoided by level design instead of system design. You can design the levels of the game such that this situation can never occur (ex: what if no more that one arrow is ever given to the player?).
This process of stripping away problematic cases is a lot of what game design is, at least in my experience. There are ways in which it can be done elegantly and inelegantly. Inelegant ways often leave the problematic cases apparent. The player can see the parts that have been cut of, or worse, they are forced to understand details about it. Presumably the system is the interesting part, not its boundary (though games that explicitly explore this idea could be designed and may be interesting).
In the aesthetics of game design, I feel like a game that is very consistent is more beautiful than one that is not.
The thing I talked about before is that in games the goal is not to simulate reality, so we have an extra tool in our hands: generalization. For example if SimCity is a model of a city, then adding Godzilla to it is a generalization. Or taking an FPS (which is a simulation of a person walking in an environment) and adding portals.
This creates additional problems because while we are fairly certain that reality is consistent, we do not know about other, generalized, realities. (If the first part is like physics, this part is a bit like inventing new mathematics).
So for example, it appears to me that Portals are not very consistent. A lot of issues appear pretty quickly, as seen in these drawings I found online:
It might be interesting to try to design Portal in a way that would allow for more consistency, and gets closer to handling cases such as these. I am not sure this is possible.
Sometimes consistency can be improved by fixing things near the boundary, and sometimes the whole system needs to be rethought from first principles.
Another example: What happens in Fez when you get projected behind an object? This is an inconsistent situation that needs to be resolved with additional rules from the designers of the game. It comes from the many-to-one nature of projection.
Miegakure was surprisingly consistent. You can take almost any concept and generalize it to 4D. There are very few consistency problems in gameplay, mainly related to the rules of pushing blocks, which would happen in any number of dimensions. So because there is so much consistency in terms of the 4D generalization, the problem has been finding a good level of abstraction, especially graphically. In some way there are two types of consistency boundaries. The consistency problems that come from abstracting, and the consistency problems that come from exploring. The abstraction consistency boundary seems contained within the generalization consistency boundary.
Sometimes I want to make things clearer or more beautiful at the expense of correctness. Or rendering 4D properly is sometimes too slow (just like 3D graphics are just an approximation of reality!). For example I spent a long time on the extruded 3D trees and it was well worth it. The goal was to get a more detailed level of abstraction of what a four-dimensional universe would look like. But I will talk about it in a later post.
I find that one of the things that excite me the most about Miegakure is that because it takes concepts familiar in three dimensions and generalizes them to four dimensions (or even n dimensions) it distills these concepts to a more fundamental core. There is something more truthful about a concept that has been distilled to a simpler form, but it also helps us understand the concept better.
A good example is rotation. A rotation is fundamentally a 2D thing; you need two dimensions to define a plane of rotation. We are so used to thinking about rotations in 3D that we think about the axis of rotation, but this doesn't generalize to nD: the 2D plane that is perpendicular to that axis is what is important. The focus on 3D space actually hides part of the truth. Transforming the plane of rotation into an axis loses some information about its semantics, which causes problems for example when you want to transform the rotation itself (ex: the idea of an axial vector in 3D is a hack). But you can't even transform the plane into an axis in any dimensions but three, so considering the general case helps us avoid making this mistake.
When trying to generalize a concept we often find that some parts of the representation do not generalize at all. Then, we search for a new way to think about things, a new viewpoint that allows us to throw away the parts that don’t generalize. What we are left with is often much more beautiful than what we started with originally, because it describes the same concept, but in a much more concise and precise way.
We can use n-dimensional space as a way to discard viewpoints that are not as fundamental as others because they do not generalize.
In Miegakure, the player's main action is a rotation (when the space appears to deform, the player is actually just turning their head 90 degrees into the fourth dimension) and there are rotating objects in the game. So the player is learning about rotation in a more general context and it enlightens their concept of rotation in 3D.
I think this idea of distilling and generalizing concepts happens in other games, in some form.
Frank Lantz talked about similar ideas in this great talk.
The idea of using gravity to increase momentum then rotating that momentum to cross a pit makes the player think about momentum in a different way and that reveals things about it. Momentum is seen through the more general lens of portals. There are actually problems with this because it is difficult to cleanly generalize, but I will talk about it more next time.
Did an interview for the Creators Project. I think it came out pretty well!
When did you first think of the idea for a 4D video game?
I had the idea for a hyper-dimensional game in college, maybe around 2005? When you program a 3D game, every object’s position is represented using three numbers (usually called x, y and z), but that concept easily generalizes. Why not four numbers or more? At the time, a big tech company’s programming interview question involved computing whether two 2D rectangles overlap. It turns out the code for this generalizes extremely easily to the 3D case of cubes and to any number of dimensions: you just have to change a single number, the dimension of the space. So the idea came from this as a joke almost, like “I could answer your programming question for any number of dimensions.” But it made me start to wonder, what would it an actual n-dimensional game be like?
The idea stayed in the back of my mind until around 2008, when I decided I wanted to make a game that would satisfy both my love of game design and tech, in particular computer graphics. I made a list of my most experimental game ideas, and a 4D game came at the top of the list, so I started to build some prototypes. The first few prototypes were not very good however, and I later realized the main reason was that even though the game was taking place in a 4D world it was not clear to me what the consequences of being able to move in 4D were. What could you do that you couldn’t do in 3D? [...]
Tell me about the programming tech behind the puzzles.
The game runs on its own custom 4D engine that I developed from scratch. Every position in the game is *actually* represented with four numbers. There are no tricks or hacks. We are building what a 4D world would be like, in many ways. This creates a space were puzzles happen naturally: they are just simple consequences of 4D space. More traditional puzzle games very carefully set up situations, and the behavior is limited to what the designer has intended (for example you need to input the right code to open the door, and the code is written down somewhere hidden). Because what we are building is so general, I might not know all the solutions to a particular puzzle… or I might discover a lot of puzzles by just setting up random situations and playing and seeing what happens. If something surprising and interesting happens, I will make it into its own puzzle.
PAX East went very well. We had four stations, and they were all filled for the whole duration of the show. I wish we could have had more for the people who waited in line; maybe next time we will get a larger booth. We also had the trailer looping on a large TV, and an explanation of "how to walk through walls using the fourth dimension" running underneath, on a smaller monitor (it will be the next trailer).
I noticed I don't learn much from playtesting the beginning of the game anymore. It is solid and people just get it eventually. I guess that means all there is left to do is finish the game!
I do still learn a lot from explaining the game to people. Every time I do it the explanation gets more concise, and different people need different explanations. This becomes useful later on when writing for the website, or to explain the game to press. But really sometimes I feel other people are better at explaining the game than I am, as I'm too close to it now. Thanks to Christopher Hart & Colin Hart for helping out at the booth!
The shape at the end of the trailer is called a 120-cell (or Polydodecahedron, or Hecatonicosachoron, which sounds cooler, but a bit too hard to pronounce). It is actually modified a bit, but first let me explain some basics.
You see, a 3D object has a 2D surface, whereas a 4D object has a 3D surface (an nD object has an (n-1)D surface). So while a dodecahedron has 12 faces which are pentagons, a 120-cell has 120 "faces" which are dodecahedra (called cells, since they are 3D).
The 120-cell is a Convex Regular Polychoron, the 4D analogs of the 3D Platonic Solids (Tetrahedron, Cube, Octahedron, Dodecahedron, Icosahedron). All the faces of a 3D platonic solid are the same 2D regular polygon, while all the cells of a "4D platonic solid" are the same 3D platonic solid! It's basically building shapes out of the the most symmetrical elements each time.
Interestingly, there are infinitely many regular 2D polygons (just divide the circle equally into n sides: triangle, square, pentagon, etc...), 5 regular 3D convex polyhedra, 6 regular 4D convex polychora, but in 5D or more there are only 3 types! It appears that building shapes this way gets more and more complex until it is no longer possible, save for a few very generalizable cases (the hypercube, for example).
But what you see in the game is not quite a 120-cell, it is actually a 120-cell with a hole inside each cell. Vi Hart [Youtube Channel] came up with the idea to do this, inspired by drawings by Leonardo Da-Vinci.
In the drawings, a hole has been cut inside each 2D face, or rather only the edges are visible. In the game a hole has been cut inside each 3D cell (each cell is hollow), or rather only the faces are visible.
The way this is implemented in the game engine is using our 4D Mesh Structure (a 3D mesh is made out of triangles, a 4D mesh is made out of tetrahedra).
What you see is a 3D slice of a 4D object. While the 4D object is static, the 3D object you see transforms as the slice changes, similar to what you see in a moving slice produced by an MRI machine, but in one higher dimension (The image on the right is an MRI slicing though a banana flower).
The reason the number of faces changes is that depending on which slice you take, you might go though a different number of cells (each cell you slice will produce a face). If you slice the 4D object near its tip, you will get a small 3D object. If you slice the 4D object near the center, you will get a larger object. This is similar to slicing a 3D sphere with a 2D plane. Use the following sliders to slice through a dodecahedron, and its "Davinci'd" version. (Note that in the game we are rotating the 3D slice whereas here I am letting you move a 2D slice up and down, but the morphing effect is the same).