Genesis Noir - Fellow Traveller
Hello all,

How are you? We hope you’re well. We’ve been sticky in the summer heat (or is that just the sweat from hardc0re game dev?), but we’re staying hydrated so all’s good. This month Jeremy has some techy optimization hints to share and Evan’s got some sneak peaks at our upcoming trailer.

Jeremy’s Performance Party

An important part of making a video game is making sure it both looks good and performs smoothly on a large variety of computers. This means automatically adjusting various quality settings depending on how powerful your computer is. Some effects don’t have quality settings though, and can only be entirely turned off, or entirely turned on.

Most of the time, this isn’t very ideal, and it’s especially not ideal when the effect is water reflections. Let’s look at how we can maintain a reflective surface even on a low-powered computer.



This is the scene we’ll be looking at, which is a rainy street scene with a lot of reflections. Ideally, the reflections will be generated in real-time, and everything in the scene will reflect accurately. You can see this in action if you look at the reflections of the pedestrians walking across the street.

This looks great, but it’s very expensive since it draws the entire scene twice: once for the normal view the player sees, and a second time for the view the ground sees. On a medium-power computer, the scene may take 15ms (milliseconds) to draw once. So if the game needs to draw it a second time, that’s 2 * 15ms = 30ms, which gives us a framerate of 33fps, which is fine for this kind of scene.

But on a lower-end machine it might take 24ms to render the entire scene, and 2 * 24ms = 48ms = 20fps, which is pretty bad! If we turn the reflections off, we get a framerate of 41fps, which is great, but the scene looks pretty lifeless as a result.



We really lose the sense of a rainy street scene without those reflections! So how can we get those back, but without having to draw the scene twice every frame? The answer is: we cheat!



The first trick we can use is called “cubemap reflections”. We take 6 photos of the scene and stitch them together into one image using some fancy math I don’t really understand, but thankfully Unreal Engine does all this for us. Using this cubemap image, we can simulate what reflections would look like, using more fancy math. This is way cheaper since we don’t have to draw the scene twice each frame; instead we can use a premade image.



Nice! But we’ve lost the nice reflections of the pedestrians. Don’t worry, we’ll fix those using the next technique.



This is the next scene, and while cubemaps work great for big open areas, they look pretty bad in areas like this, with long straight sections that need pretty accurate reflections. Thankfully, early 3D game developers created a neat trick we can use here.

First, we take all the areas of the street that are reflective, and make them transparent. Then, take the entire scene that needs to be reflected, duplicate it, and flip it! This technique is extremely common in games even today, and has been used since the dawn of 3D graphics. One of the earliest examples I can remember is the mirror room in Super Mario 64.



In our case, we didn’t even duplicate the storefront meshes, we just took a picture of each storefront, blurred it a bit, and put it on a flat plane below each storefront. These textures are small (256px squares), so they’re much cheaper than even the cubemap we used earlier. This is how we’ll solve the pedestrian reflection issue shown earlier, as well. The final result is a “low quality” scene that looks effectively identical to the “high quality” scene.



This takes care of all the performance issues in the opening level of the game. This runs at a smooth 33fps on even a low-end computer, and we can use automatic quality scaling to switch between the real-time reflections and the super-fake reflections. Hooray!

Evan’s Trailer Talk

In addition to polishing the game I’ve been working on a new trailer for our release date announcement. We’re still in the middle of making it, but I think it’d be fun to share what the process and goals are like :)

Our previous trailer was aired at the PCGamer show at E3 2019.



The reception to this was really good. It seemed people were really sold on the concept of The Big Bang as a noir creation myth (after they got the “bazinga”s out of their system) and intrigued by the art direction. I watched the live Twitch chat (which always devolves into a rude mob) and was amused by the “don’t do drugs” and “trippy” they were spamming; I’ve never done drugs and no one has seen the trippy stuff in GN yet but, hey, I’ll take it.

It seemed like the universal reaction was “I have no idea what this game is about, but I’m intrigued nonetheless”.

For our release trailer, I’d like the story and game to be clear while still maintaining intrigue. Not only will clarity help sell people on the idea, but setting up expectations properly will lead people to have a better experience with the game.

I’d hate to have someone watch a trailer with an interesting but opaque presentation and play our game expecting a traditional adventure game, challenging puzzler, open world, etc. etc. Genesis Noir is about the entirety of time and space, so there’s a lot of room for people to imagine their particular tastes existing in the game. If people go into the experience with an understanding of the boundaries then they can be pleasantly surprised by the deviations the author puts in, rather than be disappointed by the differences from their imagination.

The challenge for us is to clearly portray our unconventional story and interactions in a quick edit. Our tactic to accomplish this is to begin the trailer with genre expectations and then divert into the more unfamiliar territory.

Thus we’re beginning the trailer with the classic “lady shows up at the protagonists door” noir scene. Here’s a work-in-progress gif.



After this, well it gets weird as you might expect.



---

The biggest challenge is to convey the gameplay. Our game doesn’t use traditional mechanics and though we repeat interactions, they’re often re-contextualized and not immediately familiar.

Our strategy is to once again begin with a recognizable noir game interaction of inspecting a clueboard.



---

We’re also adding a textual synopsis in the edit of “A cosmic adventure of love, loss, and betrayal.” I think this is a nice balance between clarity and intrigue. You get an idea of the direction of the storytelling, but nothing too specific. It’s a nice excuse to put in some fun typography too.



---

Anyhoo, I think it’ll be a fun trailer :)

Thanks for sticking with us, hope you’re all well!

<3

Evan + Jeremy
Genesis Noir - Fellow Traveller


We hope you’re doing well and getting good sleep (and that the phenomenon of non-stop fireworks hasn’t hit your town; NYC's a surreal place these days). We’ve been making good progress across many areas of GN. Jeremy has been working on our script and translation system and Evan has been refactoring a bunch of our early code (as well as animating some abstract animation for the introductory credits) and we thought we'd share how theses tasks are going with you.

Jeremy’s Script Shenanigans

Contrary to most of our screenshots, our game does have some text in it, about 3000 words in total! Since our lovely backers come from all over the world, we’re translating this text into a bunch of different languages. We’re working with several different people to do these translations, and since we can’t all have them working in the actual game engine itself, we had to put the text into a big spreadsheet in order to allow all our translators to access it.



Here you’ll see the text used at the very beginning of the Improvisations level, which was featured in our recent Steam demo. Each piece of text has a unique identifying key assigned to it, and then after that is each translation of that piece of text in all the languages we’re localizing the game in. These columns are labeled with each language’s IETF language tag.



But how do we get all this fancy translated text into the actual game? This is where “PO files” comes into play. Each language has a PO file, which maps each original English source text to the translated text. Unreal Engine can read these files and will put the translated text into the right places, and it even allows you to switch languages while the game is playing.

We’re still missing a few steps though. How do we go from a spreadsheet to a PO file? Well this is where it gets a bit complicated. In order to convert from spreadsheet to PO file, we’ve written programs in 3 different scripting languages that all work together in order to allow us to press just one button in order to convert the entire spreadsheet into PO files the game can use. Let’s go through the process!

Here’s all the steps we need to do:
  • Download the script spreadsheet from Google Drive
  • Open it in Microsoft Excel
  • Oh jeez, I guess we need to save a copy as “macro-enabled” so that we can write code to process stuff...
  • Close the old script and open the macro-enabled copy…
  • Inject our “convert to PO file” macro program into the spreadsheet and run it. This makes our PO files.
  • Seriously close Excel
  • Oh jeez our PO files can’t have any linebreaks in them, so run a javascript program to convert all of them into “\r\n” instead…
  • All done!

This is a lot of work to do every time the game’s script is changed. The whole process takes about 5 minutes of manual work, and that’s 5 minutes I could be spending fixing bugs or whatever, so let’s automate this whole process!



It turns out that Windows has a pretty powerful scripting tool that lets you automate tasks in most Microsoft programs. It’s called PowerShell, and it basically allows you to programmatically do most things you can do in any Microsoft Office program. These programs are very picky though, which means we have to do things in a very particular way.

Excel won’t let just anyone run programs on random spreadsheets, no sir! You have to first enable some weird registry key thing to allow access to something called a “VBProject object”. Then you have to convert the spreadsheet itself from “Regular Microsoft Excel” into “Regular Microsoft Excel, Now With Spicy Macros!” Then we close the old script spreadsheet and open the Spicy Macro version, and now we can actually run code to read from the spreadsheet itself and process the contents.

This involves an arcane programming language called “Visual Basic for Applications”, or VBA. I don’t know VBA, but I know someone who does!



Meet PJ DiCesare, accomplished speedrunner and actual Excel wizard. In just a couple of hours, he wrote us a lovely macro to convert our spreadsheet into PO files, with all the translations in the right place. PJ is well-known for his uncanny ability to cause strange things to happen to any piece of technology he touches, so of course the moment I ran his Excel macro for the first time, one of the fans in my laptop literally exploded.



I ordered a replacement for $13 from ebay, and it was easy to fix. This felt like a fair trade in order to avoid having to learn or write VBA myself.

OK! So now we have our PO files, we can close Excel now. This requires 5 lines of code where we tell Excel to really, seriously close in about 3 different ways. If we don’t do this, the Excel program might still be running on the computer, hidden and invisible, which isn’t very nice. You might think we’d be done now, since we have all the PO files, but oh no, we are not: our PO files are full of highly illegal linebreaks!



No linebreaks are allowed within the “msgid” and “msgstr” blocks, so we need to get rid of those. The last thing I wanted to do was write complicated text processing code in VBA or PowerShell, so it’s time for the third programming language: javascript! A friend we’ll call “Growfy” wrote us a handy javascript program to replace all the illegal linebreaks with “\r\n”, which Unreal understands as “just put a linebreak here”. After running this program on all the PO files, our final output looks like this:



Finally, after all this work, it’s done! Now we can cram these PO files into Unreal Engine, and here’s the final result:



Thanks to the power of automating things with programming, I can now press a single button to run this entire process in a few seconds, from downloading the script to generating the PO files without linebreaks. But will this be a good use of time in the long run? It took us probably 10 hours of work to write the automation pipeline, and it takes me 10 minutes to manually do this process myself, so we’ll need to update the script document 60 times in order for the automation work to be worth it, time-wise. I’ve already updated it about 20 times now, so I think this will work out to save time. If not, at least I know how to bend Excel to my will, which is probably a useful skill.

To wrap things up, I’d like to say thanks to all of our translators for helping localize our game, so that people all over the world can enjoy it!

---

Evan’s Ramblings on Creativity

One of the advantages of our delay is that we now have time to restore some elements of the game that were on the chopping block.



When we first started building GN, we began working on probably the most complex level. Our idea was that this level would contain many small gardening type interactions which would be repurposed elsewhere. In the context of the game, the level would be an introduction to the tone and range of interaction. For us, however, it was a trial ground for building components for the rest of the game.

This level became a part of our “vertical slice” which, like a slice of layered cake, contains a small portion of every ingredient in the game. The level contains exploration, a range of mini-interactions, item inspection, and some fun animation. This proved valuable to show to publishers, create our Kickstarter campaign, and get feedback from collaborators who would help us make the rest of the game over these past 3 years.

Since those early days, we’ve learned a lot about game development. Those initial little interactions were not as fleshed out or as well-engineered as the rest of the game and required some serious refactoring. It’s dirty work, but I’ve been glad to wade in over the last week.

As I audit the code, I discover some older approaches that have fallen away or solutions that I had forgotten. There are a lot of jank that I’m correcting with my additional years of experience in game dev, but it also feels a bit like I’m collaborating with my younger self. Mostly correcting, but interestingly collaborating too...

Over the course of development, the visual language, interaction patterns, and storytelling solidified as we identified the most successful aspects of what we were making. Refactoring these initial stabs at GN is offering a nice reminder of our initial goals, assumptions, shortcomings, etc. To directly see where we were 3 years ago and contrast with our skills and taste today is an opportunity to extrapolate our future growth, reflect on our work from a more naive vantage, and gain confidence in our development as artists + engineers. I believe this perspective will be very useful to consider what GN has become and how to best polish the experience over the coming months.

As this is my first project of such a large multi-year scope, the idea of becoming an archaeologist of one's own process is new to me. Perhaps for future projects we should schedule some spelunking expeditions through earlier work or pre-mortem dissections.

---

Thanks for following our project! See you next month :)

E+J
Genesis Noir - jeremyabel
One more fix for the day:

  • Bassist improvises along with you in the final block brush interaction. This was a thing that happened in very old versions of this demo, but somehow I turned the synthesizer volume down to 0 so you couldn't hear it. The volume has been restored to the correct value now.

Genesis Noir - jeremyabel
Hey y'all, thanks for sending us feedback on the demo! We've updated the build with the following fixes:

  • Hooked up the resolution picker in the Options Menu.
  • Fixed a major input issue where controller button presses would no longer register if a button was held down during the foreground item transition animation.
  • Fixed bug which let the player press pause with the Mailing List or Feedback submenus open, which caused the Pause Menu to appear behind the current submenu.
  • Fixed bug which caused the start menu to reappear after pressing Start Game if you pressed the A button on the controller before the tutorial finished transitioning in.
  • Fixed bug where the window scenes would not animate or render correctly.
  • The moon is now clickable.
  • Text no longer appears behind the cutscene bars.
  • The billboard and planets now show the correct foreground items.
  • Fixed bug where turning the character around quickly would feel like he was sliding on ice due to a lack of ground friction.
  • Tuned camera lag for a more responsive feel when walking / running.
  • The feedback form now adds the game's version number to the end of the text automatically.

Have a good weekend!
Jun 15, 2020
Genesis Noir - Evan (Creative Lead @ FCD)


Join the musicians and developers behind Genesis Noir in a discussion on music and sound design in games.
Genesis Noir - BaconIsGood4You


Genesis Noir is a cosmic adventure that takes place before, during, and after the Big Bang. To save your love, you must stop the expansion of the universe.

Play as No Man as he explores a jazz age city and learns how to improvise on his quest to destroy creation in our demo.
Genesis Noir - Fellow Traveller
Hey y’all! We hope you’re staying safe and healthy in these times. Dang it’s nearly June already, weren’t we supposed to ship this thing in June?

I’ll get this out of the way at the start: Genesis Noir is now due to launch around early October, rather than June. Due to a few months of slower work due to working from home and such, and a few other things we’ll mention below, along with a really exciting thing we can’t talk about until August, we felt like we needed this additional time to avoid completely panicking and ending up with something unpolished and buggy. However, due to this delay, we’ll be doing the following things:

  • Professional QA / bug testing
  • Finishing interactions and bits that would have been cut entirely
  • Adding accessibility-minded control features (detailed below)
  • A lot more playtesting and polish
  • SECRET THING (shhhh we can’t tell you until August)

With that out of the way, we’ve written some stuff about what we’ve been up to lately, so check it out!

Jeremy’s Tech Tunnel

Hi, Jeremy here! A lot of my time over the past few months has been spent deep inside the inner workings of the game engine, making sure controllers and mice and keyboards play nice with all the menus and user interface bits of the game. A result of this is some great accessibility features like fully remappable controls, keyboard character movement, and seamless switching between any of these input methods at any point during the game. Yes, you can now use a controller in one hand and a mouse in the other at the same time; truly a back-of-the-box feature! I joke, but accessibility stuff is pretty important to pay attention to.

This work was kickstarted (heh) by the requirements of the Xbox certification process. Also called “lot check”, every game console manufacturer requires your game to pass a pretty tricky set of tests to ensure that if your game breaks, people will blame the game creator and not the console itself. It basically comes down to testing things related to the area where the console’s features sort of mesh into the game’s features. How many controllers are supported? Is there multiplayer? Do achievements work, and is your save data uploaded to the cloud correctly?

Part of the reason for the delay is the fact that the Xbox process was particularly difficult, mainly due to the fact that an Xbox Live Account is required to write save data for any game, and you can sign in and out of this account at any time while the game is running. Additionally, Xbox Live Accounts are attached to individual controllers. This leads to situations like the following:

  • Mid-game, the player disconnects their controller, then plugs in a second controller which is logged in to a different user than the one that was playing. This other player doesn’t have any Genesis Noir save data, they can’t be allowed to continue the game.
  • Mid-game, the player connects a second controller that is also logged in to the same account, but only one controller can be used at a time.
  • The player lost internet connection while their save data was uploading! Oh jeez that’s bad!

The main solution to the first two items is a really involved messaging system state machine thing, where the game basically follows a flowchart to determine what actions to take in what order, depending on what controllers are plugged in and what users are logged in and whether save data exists or not.

In the case of scenario 1, the game shows a message asking the player to plug a controller in and press the A button, followed by a message saying that the user profile changed, where pressing A will allow the previous user to sign back in, or pressing B will return to the main menu. In scenario 2, we just ignore input from the second controller entirely, and scenario 3 is solved by keeping a local copy of save data on the console which is used as a backup when online save data is unavailable.




All this together is a big amount of work that I never imagined we’d have to deal with. Most of the heavy lifting was handled by Plastic Fern Studios, who we’ve partnered with to do the bulk of the porting work, but I effectively had to rewrite the entire way the game handles inputs in order to ease their work on creating the messaging system. Overall, we’ve ended up with a stable console experience for the game, and with a pretty good suite of controller options and button remapping features on all platforms. I hope this allows even more people to play our game!

Evan’s Marketing Makings


I’ve been working on getting marketing materials pretty as we get closer to release. The two biggies are the key art (a term for the main image that gets used everywhere) and a new trailer.




Our current key art is one of the first pieces of concept art I made back in 2014 (gosh! time flies). I had a few drawings on my site and people would stumble on them and send me nice messages. A couple asked if they could tattoo this image on themselves. An author asked if she could use it for the cover of her book on Calvino. I figured there was something to the cosmic longing in this image that grabbed people.




This image has served us well in the world of big images on the web but on Steam and other digital store pages there are many places the key art needs to function. With the smaller images, our current art becomes really illegible. Outlined art disappears into grainy little pixels very quickly. Look at this. What is this? It’s so tiny.




I’ve been beefing up our logo and attempting to find an illustration that holds up at such small sizes. I’ve tried many iterations. Take a look at all my iterations! (This isn’t even all of ‘em)




We ended up with these two images.







The drama of the Big Bang rocketing towards Miss mass was a nice moment, but we found this illustration did not hold up at different aspect ratios and scales as well as the solo No Man illustration.

Here’s the illustration in portrait aspect ratio to prove it’s flexible.




I’ve also been working on a new trailer that’ll announce our release date. Fellow Traveler has got Good up North to help us put it together and we’re really excited by how it’s taking shape. I’m really looking forward to releasing it to the world. Here’s a little taste from the trailer WIP.




I had fun animating this little drinking spin for the trailer. We’ve also included some text in the trailer, so I’ve been adding typography directly into the game levels to capture in context. Gonna be neat I think :)




--

Hope you’re all well and thank you for your patience! We’re working hard and excited to bring you a well crafted cosmic adventure :)

E+J
Genesis Noir - Spite Sprite


LudoNarraCon is here! Explore exhibitor streams, play a demo (...or 20! 😍), learn something new with 14 hours of panels, or snag one of the 50+ games that's on sale. This free digital festival celebrates indie narrative games like our's: with over 40 exhibitors, there's something for everyone.



We're so excited for LudoNarraCon: we've got a packed livestream schedule for our fans to watch during the event. Come wherever and whenever: streams will be looped throughout the weekend. We're streaming a look at our art direction, gameplay with developer commentary, a Q&A session, and more!



Start the next chapter of your next favorite game. There are over 20 demos for you to download and play during LudoNarraCon, including our's! Begin your noir adventure and search for a way to destroy creation at LudoNarraCon by playing our demo. It will be available for download throughout the event.



Tune into fun narrative panels on the LudoNarraCon page. They're streaming throughout the weekend, so no sweat if you miss the debut time. Members of the team are participating in one of the panels! 👇

Storytelling Without Dialogue; April 24th at 3pm PT




Panelists: Brendon Chung, Laura E. Hall, Evan Anthony, Jeremy Abel

Some things are better left unsaid. Learn how to tell a story without dialogue from these four developers.

Genesis Noir - Spite Sprite


LudoNarraCon is a free digital festival running April 24 - 27 here on Steam that celebrates narrative games like our’s! Tune in to see behind-the-scenes streams from over 40 narrative games, download and play over 20 demos, and watch live panels from narrative developers. We hope you’ll visit our Steam page during the event: we’re excited to livestream 3-4 hours of behind the scenes content for you. It’ll replay on a loop for the duration of the event, so come anywhere and anytime starting April 24th until the 27th.


We're excited to announce a demo of the game will be available during the event! As part of LudoNarraCon, nearly half of the exhibitors will be offering free demos... Enjoy a taste of these games from the comfort of your home on your schedule.


Developers and publishers will stream live on their games' Steam store pages with behind-the-scenes content, couch chats, and demo gameplay. We’ll be streaming behind the scenes looks at our art direction, developer gameplay, and our music sesssions with Skillbard.



A main theatre stream will feature 12 hours of live panels with game developers, writers, journalists, and other industry influencers. Panels will cover everything from narrative design, game localization, how to create player empathy, and much more.



The LudoNarraCon Sale launches on Steam during the event, with more than 50 story-rich games participating.

ATTEND FOR FREE, FROM ANYWHERE, ANY TIME

All live streaming content will replay on a loop for the rest of the event, making it easy to check out everything from the comfort of your own home on your schedule!



Excited and don't want to miss out? Visit this Steam page to set a calendar reminder.

Genesis Noir - Suzanne (Fellow Traveller)
THANK YOU for coming the to first #LudoNarraCon! 💖😍



This was a great experience for our team, and we were thrilled to share it with you. We hope you enjoyed it -- we did! And if you didn't get to see any of the panels from the main stage, you can now view them all on YouTube!
...