Dark Mode and Portals

In dark mode, the growth process is reversed. When you bring the dark mode box to the dark mode tree, it shrinks down into the seed it grew from.

Tree Growth Inverse


Also, David has started working on portals. We’re no longer using the system I set up about 2 years ago, but instead going with building something from ground up to work with all the other mechanics.


Now you’re thinking with portals!

Dark Mode Design


This past weekend, I had another Game Design Critique / Design Klub meeting. If you’re not familiar with this, it’s basically a full day game design meeting with a few other Chicago game designers. It’s modeled after the Depth Jam that Jonathan Blow had done several years ago. The first meeting was done just a little over a year ago, which you can read about it in detail here.

The specific design problem I presented to the group for Manifold Garden was about invert mode – How should the mechanic work? How to enter the mode? How to exit? What should one do while in there? What do they think of its role in the game?

The discussion was incredibly helpful and I came away from the meeting with a very clear sense of what invert mode should be. Oh, to begin with, it’s now called Dark Mode instead of Invert Mode.


I created a very specific build of the game that allowed you to mix and match a bunch of different mechanics in dark mode – reverse player gravity direction, reverse box direction, change which surface is colored, etc. This was mostly for the other designers when playtesting, so they can get a feel fro the different combinations and see which ones work best together.

Discarded Exit Modes 

Here are different exit modes that didn’t work, and why. For all these cases, you enter into the dark mode by picking up the dark mode box.

Discarded Exit Mode 1: Light Mode Box Pick Up

light mode box pick up exit


In this mode, to exit dark mode, you simply pick up a light mode box. You position is not reset when you do this, you are exactly where you are when you pick up the light mode box. However, the dark mode box is sent back to the original position.

Problems: If there isn’t a light mode box around you (which can easily happen), you end up stuck in dark mode. Also, having to search for a light mode box in order to return can be very tedious. It’s also not super obvious that picking up a light mode box will send you back to light mode.

Discarded Exit Mode 2: Continuous Fade

continuous fade

In this mode, as soon as you enter dark mode, the screen starts to slowly fade to white. It takes about 60 seconds. Once the screen is fully white, you are reset into light mode. During the fade period, you can do whatever you want.

Problems: This turns the task in dark mode to be a timing puzzle, which I don’t really like in general, and also goes against the spirit and style of all of the other puzzles in the game. Also, there is not instant exit from dark mode, which can be really annoying. If the player decides they don’t want to solve the dark mode puzzle just then, they have to wait around for the fade to complete, which can be really annoying. The timing also puts a constraint on how complex the puzzle can be unnecessarily.

Discarded Exit Mode 3: Falling to Fade

falling to fade

In this mode, in dark mode, world wrapping is disabled. You cannot see other instances of the world. When you fall of the world, instead of being wrapped around, you just fall into the abyss. The screen then starts to fade to white, and you are reset into light mode.

Problems: This removes the visual of repeating worlds, which is a big loss, and also doesn’t allow players to jump off and wrap around, which is one of the coolest parts of the game. This also makes level design in dark mode incredibly difficult, because I would need a continuous path from “bottom” of the level to the “top”, which is not at all how the level is designed for light mode.

The Mode I Decided To Go With

drop box to fade

In this mode, in dark mode, when you drop the dark mode box, the screen begins to fade back to white. It’ll take about 2, 3 seconds to fade completely to white, at which you are set back to light mode. However, as soon as you pick up the dark mode box again, it reverses the fade and you are back in dark mode. If you want to return to light mode, simply drop the box.


Different Invert Modes


Currently implementing different invert mode types, and setting up a system to easily switch between them for the purpose of playtesting. These are not the ones I’m going with necessarily. Just posting here mainly for documentation purposes.

1.Button to Tree – Lock to Gravity

- Use normal boxes to light up invert box stand, so invert box is accessible

- pick up invert box to go into invert mode

- in invert box, player cannot change gravity

- if invert box is dropped, slowly fade back into normal mode, where player and invert box are reset to position before going into invert mode

- While slowly fading back into normal mode, player can go near a normal tree to continue being in invert mode

- if player moves away from normal tree, the fade to normal mode will resume

- player can also pick up box to cancel fade into normal mode

- if player brings box to invert tree, then the invert mode stage is complete

- Something special happens

2. Contant Fade To Normal

- pick up invert box to go into invert mode

- as soon as you enter invert mode, the screen starts to slowly fade to white (Takes about 60 seconds).

- Once the screen is fully white, go back to normal mode (reset invert box and player)

- the player can extend time in invert mode by going to a normal tree

- player must bring the box to invert tree before the fade back to normal mode is complete

- Something special happens

3. Reverse Gravity

- Press a button to enter this mode

- Player cannot change gravity

- In this mode, direction of gravity is inverted – player falls upwards

- can pick up boxes and drop them


A1. Objects fall down

A2. Objects fall up

B1. Floor is colored

B2. Ceiling is colored

C1. Cannot change gravity

C2. Can change gravity

D1. Can jump

D2. Cannot jump

Invert Mode Issues


Earlier this month, I had a 3 hour long discussion with Chris Bell, one of the designers on Journey, and currently a designer on What Remains of Edith Finch.

I’ll try to summarize some of the key points here, mostly as a reminder to myself of what we discussed.

Some of Chris’ issues with invert mode:

- It doesn’t really invert the mechanic. Chris thinks maybe it should invert gravity direction.

- Bring the invert cube from button to tree is cool, but not really as massive of an “inversion” as what happens in Starseed Pilgrim

- Starseed Pilgrim is great. It’s like playing with wild fire, so a lot to balance, and constantly teetering on the edge of madness. Manifold Garden’s mechanics are too clean for that kind of insanity.

- MG’s insanity can come from elsewhere though… but how?

- Right now, invert mode is really more like “lock onto gravity” mode, in which case the visual should be that the color changes to mostly monochrome of that specific gravity. So for blue gravity, the background would be mostly blue when you’re in the mode. This is technically the mode when you pick up a box though, since you can’t bring a box into another gravity (you can change gravity, but you’ll drop the box).

- Part of the problem right now is that the mechanics in normal mode still are not totally flushed out, so it’s hard to know what to “invert” when what is normal still isn’t clear.

- We talked about some level progression and over world design… I’m not going to go into details here though as that’s a lot of spoiler stuff.

- Chris doesn’t like the design of the invert trees. Or rather, they’d be more interesting if they actually grew in the opposite direction, as opposed to just the leaves pointing down instead of up.

- How to get back into normal mode if not relying on the invert cube?

Invert Mode

In this update, I’m going to talk about this new mechanic that I’ve added to Manifold Garden, at the moment known as “invert mode”. It’s still a work-in-progress, but I’ll be discussing its origin and its current state.


Earlier in December, Ryan Clark (the developer of Crypt of the Necrodancer) started doing a series of streams in which he analyzes an indie game’s “market potential”, using methods he’s developed over the years. Ryan wrote about his process in this gamasutra blog post: “What Makes an Indie Hit?: How to Choose the Right Design”,

I found the article really informative, and had actually wanted to ask Ryan about Manifold Garden. So when I heard that Ryan was looking to start streaming this process with games currently in development, I immediately jumped at the opportunity. I guess I jumped pretty quickly, because Manifold Garden ended up being the first game to be looked at.

Here’s the Twitch archive of the stream: http://www.twitch.tv/ryan_clark/v/29451504

Here’s the chart of the analysis at the end of the stream (click on image for larger version):


s you can see, there are several factors that Ryan uses to get an estimate of a game’s market potential. The biggest thing I took away from the conversation was that Manifold Garden had low “post-play virality”. This isn’t to say that the game isn’t good. What it was, was that a lot of what was exciting about the game, the architecture, the geometry, they were all shown in the trailer or in the description of the game. Those were in the “pre-play virality”.

I realized I needed more of these “wow” moments in the game, that makes people want to remark and tell others.

If you look at the chart, you can see that Starseed Pilgrim has low pre-play virality ( 0.8 ), but very high post-play virality ( 1.3 ). Keep in mind that these numbers are super hand wavey, but it’s more about their relation to the other numbers. Plus, there were discussions within the chat about them as well.

Starseed Pilgrim has low pre-play virality because the art style didn’t stand out, and the trailer didn’t really do a good job of conveying what you did in the game. It was hard to see what was special about the game without playing it. This was actually quite consistent with my initial impression of the game.

However, Starseed Pilgrim has very high post-play virality because a lot of people who played it saw its brilliance, and would go on to tell others about it. This is largely because what makes Starseed Pilgrim special is the way the game makes you explore, and the intricate dance it does with its systems. These are not things that you can derive before playing the game, only after having played it.

I started to think about how I can improve the design of Manifold Garden to have more special moments like in Starseed Pilgrim that encourages post-play virality.

The other takeaway was comparison to Antichamber. Now, if you’ve been reading this blog, you’ll know that I know this already. Comparisons to Antichamber is inevitable – both games draw inspiration from Escher, are puzzle games of the mind-bending variety, and have minimalist art styles with edge detection. I don’t think being compared to Antichamber is necessarily bad, and is certainly much better than being generic and being compared to Portal… However, it’s more from a personal artistic standpoint. I’m not trying to make a bad Antichamber clone and don’t want to come across as that. How can my visual stand out from Antichamber even more?

Invert Mode

Invert mode started as a purely visual experiment. However, it looked quite cool, so I thought it’d be worth exploring it as a mechanic to fit within the game.

Here’s the first tweet I posted about it:


The visuals:


manifoldgarden_invertmode01 manifoldgarden_invertmode02 manifoldgarden_invertmode03

As you can see, the visual was quite rough. Pretty much all I did was invert the colors in the edge detection shader. At the time, I was still keeping the fog color to white, so things further in the distance faded to white as a result. There’s also no color fade in the lines – they’re white all throughout, so they do not create a sense of depth.

This also resulted in a very sudden “pop-in” effect when the world wrapping happened. This is very clearly seen in the picture below. Note how the geometry in the distance just cuts off suddenly:


Eventually, I rewrote the edge detection shader so that I was able to change the color of the edges and choose whether to have the lines fade to black or white in the distance. I also realized that by changing the fog color to black, I can get a really nice fade in the distance.

manifoldgarden_invertmode05 manifoldgarden_invertmode06

What do you actually do in invert mode?

The first thought of a mechanic that could work well in invert mode is taking away the ability to change gravity.

I was thinking of the way Starseed Pilgrim and Ridiculous Fishing are designed, in which the player goes through the same level, but experiencing it completely differently. In Starseed Pilgrim, when you go into invert mode, the platform becomes space, and space becomes platform. In Ridiculous Fishing, first you go down, avoiding all the fish, then you go up, and try to catch as much fish as you can.

To me, this is a really interesting idea, as it gets the player to think with duality during the first stage of the game.

Richard Terrell coins this kind of level design Folded Level Design, which I think works very well.

folded level design

Removing the ability to change gravity seems to be part of this, because now the player has to navigate through the same level, but experience the architecture differently. Now a wall is no longer a path, but an actual barrier.

I was also thinking about other ways in which the theme of “inversion” could work. One way I thought was to reverse the puzzle path flow.

In normal mode, you can grow trees from boxes. These trees then grow more boxes, which you can pick off and place on buttons to trigger various things.


So in invert mode, you’d take a box off a button (which you’d have to turn on first), and then bring to a tree (a special invert tree):


Some other ideas here:

you have to pick up the special invert box to enter into invert mode. Dropping it brings you back to normal mode and resets your position. The reset to normal mode is not instantaneous – instead, there is a fade to white. When the fade is complete, you’re back to normal mode. However, this means that while it’s still fading, you can pick up the box again, and it’ll cancel the fade and keep you in invert mode:


I was also thinking the trees could have the same effect? So if you walked up to a tree, it would also cancel the return to normal mode, allowing you to extend your time in invert mode longer without carrying the invert cube. Not exactly sure what you’d do with this though:


I also spoke with Chris Bell, one of the designers on Journey, about this, and Chris has some issues with it. I will put that on the next post as this is getting quite long.


Pre-PSX Madness

Ran through the latest build of Manifold Garden on the PS4 devkit before PlayStation Experience. It is playable from start to finish. There are still a few things I’d like to add, but it’s icing on the cake.

The biggest improvement in this build is that the game is actually running at 60 FPS on the kit! 60 FPS feels wonderful. Smooth like butter.

David really did some fantastic work with optimization.

Also, new Manifold Garden prints have arrived, and they look fantastic! These will be available for sale at PSX:


Earlier today, I was on a panel (virtually), along with Ken Wong (of Monument Valley) and Ty Taylor (of The Bridge), talking about Escher and game design at the North Carolina Museum of Art. It was pretty cool. Not sure if it will be posted for viewing later. I believe it was recorded.

Anyway, it was fun, and really interesting to hear about the context of Escher in art, as well as Ken and Ty’s thoughts on how they used his work in their designs.


Finally, here are a bunch of screenshots from the latest build of the game, captured directly from the devkit:

manifoldgarden_devkit_capture_001 manifoldgarden_devkit_capture_002 manifoldgarden_devkit_capture_003 manifoldgarden_devkit_capture_004 manifoldgarden_devkit_capture_005

Alright, back to PSX prep!

Weird “invalid serialized file header” Bug Fixed

(Sort of. It’s at least better than what we did before)

The Bug

In the last post I talked about the weird Unity serialization bug that ruined all of Tuesday night, and which we were only able to avoid by sticking with an old revision of the material.

The solution wasn’t very practical though, because if you pulled any version of the material after revision, and then accidentally clicked back on Unity, it would stall and crash. This is quite easy to do, because if you checked out the project folder in Perforce, and then try to submit, Perforce will ask you to get latest version first.

If this stalled, I would have to delete the Library and Temp folders and have Unity build again. Due to the size of the project, this would take around 20 minutes.

This is clearly not at all practical.

In the previous post, I talked about the thread I found, which seemed to pinpoint the problem to the way Unity does serialization and some weird way that it’s handled by Perforce.

What we’ve been experiencing seems to confirm this, as even making the material exactly like what it was in revision 7 and then resubmitting still led to problems.


I started to wonder if maybe the problem was actually over on the Perforce server, and so when we pulled, it messed up the project.

So what I did was to delete the asset that was giving us the “invalid serialized file header”, in our case default_prototype.mat, as well as the associated meta file from the Perforce server. I also deleted them locally.

Then I opened up a new Unity project, and reimported ProBuilder (we’re using the source version by the way).

Then I copied default_prototype.mat from this new project into the original project.


Allowed Unity to generate the meta file, and then committed those to the server.

Had no idea this would work. Here are my commit messages:


Incredibly, this actually fixed the problem!


This problem had actually been bugging us for several weeks now. David had first noticed it and discovered reverting the material to older version fixed it. However, I had only been pulling the project in bits, so it wasn’t until Tuesday that it really affected me.

Anyway, really happy that this is resolved. It’s possible that another asset could have serialization messed up in the future, so I think we will take care of changing the setting on the P4 server.

If you’re experiencing the same problem, I hope this helps.