That is really a great thing for us all. http://fewhacks.com/
I just based my landscape material on this. I just wish I could exactly figure out what is going on with normals, ao and displacement here.
That was extremely helpful! Thank you!
Don Bellenger talked about the production of Black Future ’88, a very interesting project, which combines retro 80s esthetics and fantastic custom tech.
Hi! My name is Don Bellenger, from Oakland California. I’ve been working in games for 10 years. I started in flash games, and then moved to the midcore space when that was a hot thing. I left games because I was tired of the industry and seeing projects that I killed myself on get shut down, but now I’m coming back as an indie because I missed the work so much, and I like the idea of living the indie dream and being the master of my own destiny.
Black Future ’88
The game started in Spring 2016 when I met with some friends at GDC and realized that getting back into games was a thing I wanted. I started prototyping what eventually became BF’88, but at the time it had 0 creative direction, terrible gameplay. The only guiding light I had was that it would be a platformer with some kind of procedural world. I’ve been a musician for a long time, and seeing how SURVIVE blew up with the Stranger Things soundtrack, I wanted to try a music project in a totally different medium, like games. At that time I began narrowing down into the retro futurism aesthetic, the alternative 1988 timeline. I wrote around 10 game music tracks, all of which were garbage and different degrees of ripping off John Carpenter before I started to hone in on the heavily saturated synth tracks that the game is becoming known for. This coalesced nicely with my game feel experiments, and it culminated in me nailing down my design mantra of “Designing for ‘Holy Shit'”. There’s a legendary gamedev talk by JW from Vlambeer called ‘The Art of Screenshake’ which has 40ish tips for over the top game feel in action games. I followed every single one of them, and then created about 10 more rules that have really come to define the game. I hope to someday put together a talk outlining these ideas.
I think gameplay wise, the biggest difference is that BF’88 sacrifices pixel-perfect positioning in the name of hyper fluid movement, and fast gameplay. This is pretty well encapsulated by the decision to only give the player 18 minutes to beat the game before their weak little heart deadlocks and explodes. While there are many guns in the game, there are some really interesting build paths that will give the player enough power to actually beat the game. Some of the guns, for example, use your money as their ammo source, so it allows the player to be ammo-rich, but money-poor. Another weapon, The Black Wave, uses your deadlock timer as it’s ammo source, so using it gives you immense power but it can dramatically shorten your lifespan.
The art on this project gets produced either in Aesprite or Photoshop. The game is pretty agnostic towards those tools, and at the end of the day, they just get stuffed into a giant atlas that the game uses. Because the game uses depth effects and depth based blur, it will always struggle with transparency. I try to design some effects around this and use cutout shaders whenever possible, but sometimes, if there’s a really sweet effect that needs transparency, I just make sure that it can only happen in indoor environments so that players don’t see weird depth-based artifacts. It’s actually a bit of a nightmare for the artists that I work with, because the color grading and in-engine sprite compositing means that the colors that they use don’t faithfully get reproduced. Besides just very careful effect-design, there’s actually very little that’s special about the game rendering. It’s actually running on a fairly old version of Unity and a lot of shader work. For example, I have my own version of distance fog that I use for all my environment sprite shaders.
So there are essentially 3 systems that really make the game look this good.
This week, I finally got color mixing in my smoke system. The initial color fades and becomes just volumetric density, which looks cool in action. Here's a very smokey test for #screenshotsaturday Black Future '88
Posted by Don Bellenger on Friday, October 20, 2017
1: Volumetric lighting! I was initially hemming and hawing on including this in the game, but after rewatching blade runner in 2016 I knew I had to drop everything to get good volumetrics into the game. I evaluated literally every volumetric rendering package on the unity asset store, including the volumetric system that Unity had on their github at the time, and I eventually settled on HXVolumetric, authored by the incredible Lexie Dostal from the Hitbox team. He’s been extremely helpful in getting me experimental patches and suggesting ways to get it to work with sprite rendering, and I recommend this package to everyone as the very best volumetric lighting system available in Unity.
2: SMOKE! I’ve been iterating on smoke for a while, but I started with the Cocuy 2d fluid dynamics system, available on the Asset Store. I’ve made the following modifications.
- Color mixing! this is important! I recently contributed these changes back to the author, who will hopefully clean them up and add them to the next release.
- Volumetric sourcing. This allows smoke to be a source of density for the previously mentioned volumetric system. This requires blitting the smoke effect to a new plane, and using that as a volumetric density source.
- Velocity clamping. Bullets and enemies can perturb the smoke, but for a game that might have hundreds of projectiles on the screen at once, I needed to make sure the smoke doesn’t move too fast.
- More perturbation modeling. This allows the bullets/enemies to move the smoke in better relation to world space. Cocuy runs via compute shaders and structured buffers, so beyond marshalling costs, it doesn’t really impact the cpu as much as other smoke systems.
Finally getting around to merging the smoke and volumetric lighting systems. Edgelords everywhere are rejoicing.
Posted by Black Future '88 on Friday, April 21, 2017
3: The Unity Post Processing Stack! This system is so good! I use many aspects of it, and I’ve also overcome how stiff and unflexible it is by adding the ability to quickly pop on and off effects. I have a gist of that work here. This lets me get really cheap bloom/aberration spikes on game events and makes the whole world feel more violent and alive. Here’s a quick clip of using quick effects with the post processing stack to get really fast full screen effects (used in the actual teleport sequence)
— Don Bellenger (@superscarysnake) November 6, 2017
Another important thing that gets a callout is the insanely great and insanely underused value of Shader.SetGlobal. By adding some basic logic to my sprite shaders, this lets me quickly darken parts of the screen in cases of the laser beam firing or lighting flashing. This does a better job of simulation eye adaption than the eye adaption of the Unity Post Processing stack. I’m continually surprised at how unused this technique is by other graphics programmers. In this clip, I’m using Shader.SetGlobal to darken the environment when the laser beam starts.
— Don Bellenger (@superscarysnake) September 30, 2017
This is tricky, and requires some really careful balancing with the camera positioning and a few slightly weird manual steps. First, all lighting is realtime, because the game world is a procedural rogue-lite, nothing can be baked ahead of time. Because there’s just 1 extremely large world with no interstitial loading screens when you move between zones, that means that I have to do some manual occlusion culling by hiding unrelated rooms as the player moves through the tower. Besides this, the game uses a very carefully tuned and slightly modified version of HXVolumetric as mentioned above. I’ve toyed with normal mapping the sprites, but given how much visual noise there can be during heavy combat scenes, I’ve so far refrained from adding normal maps. Even in a 2d game, relying on realtime lighting is kind of a gamble, so I have to make sure that the shadow resolution is as low as it can be, while also providing the player with enough tuning knobs to get it to run on a lower spec machine.
Gas + Hot things don't mix well.
Posted by Black Future '88 on Saturday, January 28, 2017
The game actually has very little sprite animation. Most of what people see in videos are enemies with a single static sprite, but there’s a ton of motion in the actual game. This is the single biggest benefit of not pursuing a pixel perfect rendering. Because so many things can move an object in the game (projectiles/weaponkick/knockback/teleporting/charactershake/dashing) I just buffer everything in each actor’s character controller, and apply movement over several frames. If I had any secret ingredients, this might be one. Early on in development there was a lot more screenshake, and it was really problematic for some players. I’ve been toning it down but I’ve also found that adding ‘Character Shake’ is a really good way to add the same amount of gameplay intensity without adding the visual noise. If you shake a character with brownian motion, they’ll unfortunately move, which can be problematic. The best way to get character shake is by shaking them with two out of phase sine waves. [Example]
Another great trick to fool the eye into seeing screenshake when there isn’t any, is to shake the UI cameras more than the actual game cameras. It has the same feel of sensory violence, even when the game camera shake is very moderate. Doom (2016) abuse the hell out of this idea.
In terms of actual animation, it’s actually fairly confined, and I try to only really address things that are important. One of the biggest challenges is balancing enemy size with actual production budget. Large enemies have special considerations, like the Juno boss, she’s so big that when she turns it would look really bad for her to just flip her sprite, so our incredible art director, Thomas Lean created this super sick turnimation for her animation set. Once I brought the animations into the game, I added a light, and set it frame by frame for where it should be in the game. The task of manually positioning different animating elements, like a character’s arms is really tedious, but it’s totally worth it.
— Don Bellenger (@superscarysnake) September 26, 2017
I’m working with a great publisher, but I can’t really say who it is at this moment. We’re planning on releasing the game in the fall of 2018 on PCs first. We’re currently looking at simultaneous console launches, but I don’t have anything I can really say about that right now. The game will actually be announced in Spring ’18.