Patch Notes: Build 1.0.5

Patch 1.0.5 is out on the App Store right now! Here’s a quick look at what that means, plus an update on our upcoming Android release.

 

Blog-Draggable-Rotate.gif

What’s In This Patch

These changes are available right now to anyone who has¬†Where Shadows Slumber on iOS. Go to the App Store and re-download the game if it doesn’t automatically update.

Draggables

We’ve gotten a lot of feedback over the past month about our draggable touch control scheme. For the uninitiated, draggables are those glowing square pieces in the game that you can move by dragging them with your finger. (Hence, the shorthand “draggable”) It wasn’t clear why some people didn’t like the way we had it set up, but it seemed like everyone had a different understanding of how these objects should move under their control.

I’m not entirely sure what Jack did to rewrite it, but they feel great right now. Give it a shot! I’d say that’s worth buying the game over, if you haven’t already ūüėČ In particular, those draggable pieces that rotate have been made much smoother. If you gave us a review that mentioned this issue, we ask that you try the game again and reconsider your review.

Language Availability

This “fix” didn’t really address a bug, but rather addressed something I screwed up when I first uploaded¬†Where Shadows Slumber to iTunes Connect before our iOS launch. I assumed that Apple would recognize the language options in our game (we have 11 languages besides English you can play the game in) but that’s not how this works. In Xcode, you need to manually set which language options are in your game. Otherwise, your game will only show customers that “English” is an option.

Language-Options.JPG

I had a feeling this was hurting our sales. Also, it really bugged me. So I changed that too! Now it properly shows the language options on the App Store when you go to see the game’s page. Let’s hope the Germans in Germany and the Japanese in Japan don’t feel left out anymore…

This patch also fixed some small visual errors in a few Levels – the kind of thing we would notice, but players probably never saw. The big thing in this patch was the draggables. No other patches are planned at the moment, but we’ll see if anything else breaks I guess!

 

SocialMediaCover-ReleaseDate_Facebook.png

Prepare Yourselves For Android!

At this point, Jack has tested the game on dozens of Android devices using a simulator service we got from Amazon Web Services. Along with the positive feedback we got from our free beta, we’re happy to report that the game is ready for prime-time and has received the “green light” –¬†Where Shadows Slumber¬†is launching on Android November 20th! Of course, you can still sign up for the beta right here, as we’ll be updating it on launch day to direct everyone toward the full release. That’s a good way to make sure you don’t miss out on the day 1 insanity!

So far,¬†3,833 of you have graced our beta with your presence! We hit our cap a few times and had to keep raising it, so it’s at 5,500 now. I doubt we’ll get that many people, but we’ll see…

 

artist_5430

Supanova Brisbane, Here I Come!

I’m writing this blog post from the rainforests of Mt. Ommaney, Brisbane, Australia. The screeches of exotic birds outside my window was soothing, until a local told me that was actually the sound of two possums fighting each other on the roof. Easy come, easy go I suppose.

The Australians I’ve met on my trip so far keep asking me: why did I choose Adelaide and Brisbane to visit instead of Melbourne and Syndey? The answer is Supanova, of course! Supanova is a comic & gaming convention series native to Australia, and they allow game developers to show off their work in the Artist’s Alley. I just came from Supanova Adelaide this past weekend, and I’m heading to Supanova Brisbane on Friday. Here’s the address:

Brisbane Convention & Exhibition Centre (BCEC)
Merivale St, South Brisbane
Queensland 4101

If you’re reading this and you’re coming to the show, the first thing I want to say is “what are the odds of that? Wow!” The next thing I want to say is “come say hi to me!” I’ll be in the Artist’s Alley. You’ll recognize my table because it will have a bunch of mobile devices running¬†Where Shadows Slumber. If you’re in line to get Dean Cain’s autograph, you’ve gone too far.

See you there?

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Where Shadows Slumber is now available on the App Store! bit.ly/WSS-iOS

Find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, and feel free to email us directly at contact@GameRevenant.com.

Frank DiCola is the founder of Game Revenant and the artist for Where Shadows Slumber.

 

Calling All Androids

Greetings, Android fans of Where Shadows Slumber!

I realize many of you were dismayed that our original Sept. 20th launch was only on the App Store, but we have good news. We’re knee-deep in Android testing as we speak, which means you have the opportunity to play¬†Where Shadows Slumber on your Android device before the game launches on Google Play later this year!

Read on for details…

 

BETA.JPG

What To Expect

Where Shadows Slumber is now available on Google Play through their BETA program. This free download allows you to play the first seven Levels of our game. We haven’t updated this thing since March, so if you played it back then you’ll definitely want to give the BETA another shot!

Remember that the purpose of this test is to help us with our upcoming Android launch. If you were hoping for more than seven Levels, we’re sorry! The team is more focused on solving hardware problems than providing a fun experience. (You’ll have to buy the full game for that…) There are 2,500 Android devices in current use, across six different functioning operating system versions. A ton of people still use Android 5.0, but Google is already up to version 9.0! There are so many combinations to test, we can’t possibly handle this on our own.

The BETA will allow you to see if the game runs on your old phone, see how well it performs, get a sense of the game’s controls and puzzles, and experience a tiny snippet of the game’s story. That’s all you need right now!

When you complete the BETA (which should only take 10 minutes) be sure to fill out the survey in the app description. For your convenience, here’s the link:

Google Survey

Happy testing, everyone!

 

3275

 

What’s The Plan?

Currently, we have 3,275 people enrolled in the Google BETA, which is awesome! There’s just one problem: Google doesn’t let you let people download your BETA for free if your game costs money. Our game will be $4.99 on Google Play, just like it is on the App Store. So the way we handled this issue was by splitting our game across two store pages. It’s not ideal, but it means that when the full game launches on Android, the BETA will still be hanging out and it will still be free. I guess it will serve as a kind of extra demo until we take it down? This is in addition to our current Demo, which has been on the store since 2016. How confusing!

Our hope is that having three different entries on the Google Play store directing people toward the full game will be better than having just one. It’s a shame we can’t bring all the BETA people directly over to the final game later, but we assume that those who care will follow our prompt when the game launches. We’re thinking of updating the BETA one last time with something that says “ok, the game is out, go buy it!” Whether it will still be playable at that point is still up in the air.

Stay tuned for more news about our upcoming Google Play release. I can’t promise a concrete date just yet, but we are certainly striving to get the game on Android before 2018 ends. That’s all I can say right now!

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Where Shadows Slumber is now available on the App Store! bit.ly/WSS-iOS

Find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, and feel free to email us directly at contact@GameRevenant.com.

Frank DiCola is the founder of Game Revenant and the artist for Where Shadows Slumber.

BUGS!

What up team?!

If you’re reading this blog, then you’re definitely among the people who know about the iOS release of¬†Where Shadows Slumber¬†last week. If you somehow managed to miss that news, then guess what – we released¬†Where Shadows Slumber for iOS last week! If you have an iOS device and you haven’t gotten a chance to download it yet, you should – and if you¬†have downloaded it, make sure you give it a 5-star review!

The whole team has been working really hard on this game for a long time, so it’s a great feeling to finally release it into the wild. On one hand, it’s very freeing – theoretically, the game is done, so I don’t have to spend all of my time working on it. On the other hand, we’re all very anxious to see if the rest of the world likes the game as much as we do. However, there’s one thing that’s on our mind right now above all else.

Bugs.

We’ve put a lot of work into making sure that¬†Where Shadows Slumber is as stable and bug-free as possible, but with such a small team, some things are bound to fall through the cracks. Unfortunately, experiencing a bug, especially a bad one, leaves a terrible first impression. People are justifiably upset when something they’ve paid for doesn’t work – and that’s a perfect recipe for bad reviews and poor sales numbers. We’re spending this week working on addressing many of the bugs that have come to our attention, and, in the interest of transparency, I want to share some of them with all of you!

 

pexels-photo-276160

Unexpected Crashes

The bug: The biggest issue people have been running into so far is that the game will crash unexpectedly. This usually occurs just as a level is starting, or shortly thereafter. For most users, it will happen consistently, although some users might see sporadic crashes.

Cause: We somehow missed some poorly-compressed textures before releasing. This caused the game to consume way more memory than it should have. For older devices, or for people with something else running on the device, the operating system will kill the process to retrieve the memory, thus closing the game.

Fix: Obviously, the fix to this is to update the compression settings on the offending textures! We’re currently going through all of our assets to make sure they have the correct compression settings (along with making a few other tweaks to our memory usage).

Workaround: Until the next patch is published, the best way to play the game is on a device with enough RAM to handle the memory problems. This means either making sure that nothing else is running on your phone, or using a relatively recent device, which has enough RAM that it’s not an issue.

 

freezing.png

You can tell just by glancing that this level is freezing.

Unexpected Freezing

The bug: During some levels (particularly in the Hills and Summit Worlds), the game will simply freeze. The OS won’t kill the process, so it’ll still be on the screen, but nothing will be moving. Sound will still play, but the only option you have is to kill the game.

Cause: At some point, we thought it might be due to the snow particles (since it only seems to happen on snowy levels), but it seems that’s not the case. Rather, it’s due to Obe’s footprints.

Whenever Obe (or any character) takes a step, he leaves behind a little footprint. These stay around for a bit (usually up to 15 seconds), and then they disappear. This gives us the juiciness of footsteps appearing, without peppering them all over the level.
This bug is caused by some of the footprint objects (specifically the snow-related ones) having bad settings. Rather than disappearing after 15 seconds, they disappear after 150. So, when you walk around the level a lot, wayyyy too many of the footsteps are being created. The overhead of managing so many game objects is causing Unity to freeze up.

Fix: This one’s an easy one – we just updated the number from 150 back to 15. After some testing, we’re unable to reproduce this bug, so it seems like this one is in pretty good shape.

Workaround: You’ll have to beat these Levels in as few steps as possible, to reduce the number of footprints. If you can beat the Level in under two minutes, you may be able to escape the deep freeze.

 

summitTitlecard

Go ahead, try to click it. See? It doesn’t work!

Level “Titlecards” Not Working

The bug: A few people have mentioned this bug¬†– apparently, the level titlecards (which let you know which level you’re about to play) will appear, but they won’t disappear when you click on them! This prevents the user from continuing into the level.

Cause: Unfortunately, our team hasn’t yet been able to reproduce this bug. We’re going to continue to try to do so on our somewhat limited range of hardware until we can figure out what’s causing it. Since the titlecards themselves are pretty simple, the cause of the bug is most likely something fairly innocuous.

Fix: Once we’re able to reproduce the bug and know the cause, it should be fairly simple to fix, as the titlecards aren’t incredibly complex.

Workaround: Until we push out a fix to this issue, the only way around it is to close the game and restart it, since you can’t access the menu from the titlecard.

 

ralkingblock7-5

Those who’ve watched the story know that a lot of people ask Obe this question…

Disappearing Blocks

The bug: If you’re savvy enough to fight your way past the other bugs mentioned here, you might get a chance to experience this one. As the final level of the game, World 7’s fifth level is a tricky one which introduces a mechanic not seen anywhere else in the game. It involves “teleporting” blocks from one section of the level to another. Unfortunately (and apparently randomly), the blocks will disappear from one section, but never appear in the other! Obviously, this is pretty bad, since you need all of the blocks in order to complete the level, and some of them just get ejected into the¬†√¶ther!

Cause: When the blocks are teleported, their parent gameObjects change in Unity. I’m expecting there’s some error in the code which is causing the gameObject to inherit the wrong parent, so it doesn’t appear where it’s supposed to be.¬†This bug has also given us some trouble in terms of reproducing. Since it’s likely an error in the code, it’s only useful to reproduce on a device where we can do some amount of development, but we have never successfully reproduced it in the Unity editor. We’re going to keep trying to do so, but do so on a variety of devices until we find the root cause.

Fix: This one is pretty straightforward, if not easy in the traditional sense. Once we determine¬†why the blocks are disappearing, we simply have to determine¬†how to update the logic of the mechanic to ensure that it no longer happens. Obviously, it’s more complex than that, but I don’t want to get into the nitty-gritty of it here (especially since I don’t know what the exact fix would be).

Workaround: Aside from the bug that literally prevents you from playing the game, this is the workaround that I’m least happy with – the only way to fix this issue is to reset the entire level through the menu. Since it’s such a long level, that means losing a good bit of work. We’re working on all of these bugs, but this one in particular I want to fix. Since it’s the last level of the game, and you lose so much progress when you restart it, the user ends up with a bitter taste in their mouth, which is exactly how we¬†don’t want players to finish¬†Where Shadows Slumber.

 

Burnout

Other Issues?

Of course, these aren’t all of the bugs. That’s one of the first things you realize when you let someone else use a piece of software you’ve created – there’s always a fresh horror just around the corner. This list is just the biggest offenders we’ve discovered so far. I can personally guarantee that there are others, and I’m tasking each and every one of you with finding them!

If you do happen to stumble across a bug that I haven’t discussed here, there are a few things you can do for us:

  • Tell us about it! We’re active on Facebook and Twitter, and you can always shoot us an email at contact@GameRevenant.com or join our Discord Channel. If you do, make sure you include details about your device. We want to make¬†Where Shadows Slumber as awesome as possible, but we can’t fix bugs we don’t know about!
  • See if it happens repeatedly, and if there’s some pattern to when and how it’s happening. This helps us immensely when we’re trying to reproduce the bugs. After all, it’s a lot harder for us to fix a bug that we can’t reproduce. Screenshots are great too!
  • Don’t leave a disparaging review. All too often, we see people giving us a poor rating and review because of a bug. In a lot of these cases, it definitely makes sense – you paid for a product, and it’s broken. One out of five!¬†The problem with this is that reviews and ratings are our best way to get other people to start playing the game. If our ratings start to tank, nobody is going to download the game! It’s definitely better to tell us about a bug and help us fix it than to simply hurt us by leaving a bad review (and then not updating it when we fix the bug, thus leaving us with a permanent scar on our rating).
  • Share app analytics with the developers. I think that this is a setting somewhere in iOS that will share data and statistics about app crashes. A detailed email from you is usually better (because not all bugs count as “crashes”), but checking this allows Apple to send the crash logs straight to us.

 

Thanks for taking the time to read about some of the bugs we’ve experienced. Putting something that we’ve worked so hard on out into the wild is always a big question mark. We’re happy with the amount of publicity we’ve managed to stir up, but we’re also a little annoyed by these bugs, as I’m sure many of our players are. We want to make sure that you all know that we know about these issues, and we’re doing everything we can to fix them as fast as possible.

If you are experiencing these bugs, never fear! We’re fixing the major ones, so you can keep your eyes peeled for a new version of¬†Where Shadows Slumber later this week! Once it comes out and you update the app on your phone, some of these bugs (and maybe some others) should be taken care of.

Next week we’ll share more details about how our iOS launch is going!

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

You can always find out more about our game (and tell us about bugs) at WhereShadowsSlumber.com, find us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, join the Game Revenant Discord, and feel free to email us directly with any questions or feedback at contact@GameRevenant.com.

Jack Kelly is the head developer and designer for Where Shadows Slumber.

Hell Week

Jack and I first met in a sketch comedy group in college back in 2010. In that group, and in theater troupes around the globe, the week before opening night is usually referred to as “Hell Week.” For big productions, some things can only really be done at the last minute. (Lights, sound, final props, rehearsing on a real stage instead of a temporary space, catering) That means the final week before “showtime” is often spent running around like crazy doing a bunch of little tiny things that have been put off until now.

Is it procrastination? Is it just how this always goes? Who knows! Jack and I have only ever done this once before, years ago, when we released¬†SkyRunner on Google Play and the App Store. (It has since been removed from the App Store because we let the¬†Jack and Frank’s Magical Cruiseline Developer License lapse. Whoops!) Back then, things were much more relaxed. No one was really anticipating our fledgling student project. And we were fairly certain it was never going to go anywhere – we were just proud to make a game. We built it on a Saturday, hit submit, and never looked back.

This time around, things are different. There are a lot of moving parts to game development. Everything starts off cool and slow when you’re first testing out an idea. Then, international partners become involved, and a real schedule is expected of you. For the past few months, we’ve been emailing Apple saying “don’t worry, it’s coming, we just need more time!” This past week, we made good on the most recent roadmap we sent them.

Early this morning, we submitted Where Shadows Slumber to the App Store for review!

To celebrate, let’s explore what Hell Week looks like for a small team of distributed indies collaborating online to finish a game…

 

HellWeek-OptimizedLevel

A Week Full of “Do It Later” Tasks

I must admit that I’m a severe procrastinator. My skill is to take something (like, say, a cutscene) and do a really great 80% job on it. Then, because there’s no one watching me to tell me to finish it, I’ll go: “Cool! Looking good. I’ll finish that later.”

As it turns out, the week before you build your game for the last time is what experts commonly refer to as¬†later. This week, the tasks I put off for so long finally fell on me like a ton of bricks. I spent the majority of this week finishing the game’s remaining cutscenes as Jack optimized the game’s final Levels and cutscenes. Because my work wasn’t done, it held up his progress on optimization. For reference, optimized Levels look like the image above – they’re solid black since the lights work totally different in those Levels. That means it’s impossible for me to work in those Levels, so Jack needs to wait for me to finish my work and then duplicate the scene in Unity and optimize that. By Friday, I¬†was finally able to get those done in time to review the text translation sent to us by Logrus IT. Jack put in the new text file and tested the game to make sure the final build worked as a cohesive whole.

Alba and Noah spent Hell Week adding the game’s final missing sounds and improving the cutscene audio. We neglected to put sounds into the game’s UI for a long time, just because there’s an unspoken rule that you do UI last because everyone forgets about it. Whoops! This is also the time to work on the “mix” – which they described to me as the audio volume of every different sound as they work in tandem together. Without this crucial polish step, sounds can crash on top of each other during gameplay. Alba and Noah worked to make them weave together smoothly.

 

HellWeek-Jack.jpg

Hell Weekend

Everything came down to the two build days – two days, Saturday and Sunday, focused entirely on testing and small changes. We were in Jack’s apartment huddled around his desktop as Alba and Noah worked fiendishly from Miami and Queens, respectively. I counted a total of over 18 hours over the course of both days spent just optimizing the game and doing a bunch of final changes! (Shout out to Jack’s fianc√©e and her sister for bringing us food on Saturday :D)

Like I said, some things have to wait until the end of the project before you can really do them. The weekend was spent putting in Jack’s final optimizations so the game runs smoothly on all phones. Then, those changes had to be tested on all of our iOS devices to make sure they didn’t cause other problems. I didn’t work nearly as hard as Jack did in these final hours, but it was important that I was there to give the artwork a final check. During optimization, a lot of the art rules changed: lights that used to stack on top of each other now blend smoothly together, for example. That looks awesome, but some tiny tweaks to their intensities and colors had to be made before we could ship it. That’s just one example of many little things we did over the weekend.

(Shameless plug: if you want us to come give a talk at your school, organization, or church, email me at contact@GameRevenant.com! We would love to go into more detail about how hard it is to make games!)

I don’t know if Jack knows this, but the main reason I wanted to work on games with him is because of his determination. Going into this Saturday build session, it didn’t look like we’d be able to send the game to Apple. The optimization process caused an unexpected crash on one of the game’s middle Levels, and I was pretty certain we’d need to delay internally again. But Jack never gives up, so we handled that bug, found some more, crushed them, and got everything done in time!

 

AppStoreImages.jpg

App Store Monday

Monday was another “put it all together” day, and it was technically the day Apple was expecting to receive the game. I spent all day putting our Store Listing together in iTunes Connect as Jack finished some tests and Noah and Alba worked on “mixing” the sound. Since I submitted the game early this morning at around 3:30 am EST, I guess it came in a bit late since that’s 12:30 am in California. Some things never change!

But even with all the stress, I can’t help but be astonished by what we’ve created. Look at the pictures up there, from our iTunes Connect submission. Seeing these beautiful images lined up like candies gave me a feeling of pride and accomplishment that I haven’t felt in a while! I’d totally buy this game if I saw it on the store… wouldn’t you?

At this point, our app is¬†In Review,¬†which means that the App Store employees are checking it for egregious errors or incompleteness. They’re strict about what they allow onto the store, but I have no worries that our app will be approved. Whether it will get promoted by Apple, or even the vaunted¬†Editor’s Choice tag, is another story. We’re not releasing the game on iOS anytime soon, so they have plenty of time to look it over and decide amongst themselves. But the hard part is over – our game is fantastic, it’s uploaded to the App Store, and I’ve never worked so frantically before in my entire life!

This is also a long-winded way of saying you shouldn’t expect the game on Android anytime soon. Testing and perfecting for iOS took longer than we thought it would. (What else is new? LOL!) How long do you think it would take to test the game on Android while¬†simultaneously not breaking anything we already did for iOS?

Please be patient with us! One of the coolest things about¬†Where Shadows Slumber is that it is a labor of love created by hardworking indie developers collaborating remotely across the greater NYC area. That also means everything’s going to take a bit longer than you expect. You can send us nasty comments on Facebook about how Android owners are being treated like second class citizens, but that won’t help us make the game faster! (Besides, Jack and I both have Android phones, and we’d like the game on our devices one day too. Lighten up!)

 

20171110_204906

What’s Next?

Now, we enter an exciting new project phase. Jack and I are going down different paths now: I can only help him so much with the Android release. While he’s testing the game on tons of Android devices, I’ll help however I can with all-night testing sessions and really detailed QA reports.

But my job now is to coordinate our team’s marketing efforts and make the most of that iOS launch “bump.” We’re going to meet as a team to brainstorm ways to make the most of our upcoming release. We’re also working on a launch trailer that will make die-hard fans proud, and newcomers interested. It’s going to be epic! And yes, when the trailer launches, you will finally know our release date! Thank you for waiting so patiently.

This is the progress update I’ve been dying to write, and it’s finally here. The whole team is eager to show off the final game when it comes to iOS, and we’ll be working hard to make the Android version really awesome.

Next week, we’ll dive into our marketing efforts and the plans for our trailer. Or is it… trailers? Find out next week!

 

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Thanks for reading this project update! If you’re new to this blog, you can find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, and feel free to email us directly at contact@GameRevenant.com.

Frank DiCola is the founder of Game Revenant and the artist for Where Shadows Slumber.

State of the Art ‚Äď August 2018

Welcome to the State Of The Art, August 2018 edition! This monthly progress report is written by Frank DiCola and is focused entirely on how the game’s visuals have improved in the past month.

Missed last month’s State of the Art? The July edition is right here.

 


For Our Eyes Only

A quick note, before we dive in… since this is the final State of the Art, it’s going to be a little bit underwhelming. Sorry about that! The game is so close to being finished that Jack and I don’t really want to release any more images or footage until¬†Where Shadows Slumber is uploaded onto the App Store. In the past, journalists have accidentally used our old images of previous builds (including our 2016 Demo!) in their articles instead of new stuff. For that reason, we’re trying to put some distance between our progress related uploads and the launch of the game.

If you were lucky enough to visit us this past weekend at Play NYC, you got a chance to play the final pre-release build of the game! As you would have seen, all of the art is totally done with the exception of a few cutscenes that need some polish. We brought a build that had every Level and Cutscene in the game, so we got a chance to see people play every part of the finished build. Two brave souls even dedicated a few hours (across both days) to finishing the entire game! So even though there are no new images in this article, rest assured that this is a¬†good sign of progress, and not a bad¬†sign that I’ve been sitting on my hands the past 6 weeks!

Thank you so much for following this blog, and I apologize for the lack of juicy spoiler images. You’ll have to wait until the game launches on iOS and Android later this year to feast your eyes on the beauty that is¬†Where Shadows Slumber. Until then, enjoy these sweet black rectangles!

 

 

Black

Art, Then and Now

The last State of the Art was written on July 3rd. At the time, the only pieces of art left to do were the game’s last four cutscenes – World 5, World 6, World 7, and an animated Credits sequence. Small artistic touch-ups were needed across the game’s many Levels, as well as a few art related bugs.

Those last four cutscenes are all nearly complete. I say nearly because, since time is of the essence, I animated them just far enough so that our wonderful audio team could take over and begin creating sound effects. Today, in an effort to finally finish the game, I’ll put the last little details into these scenes. These details include things like snowy footprints or rustling trees – background information that isn’t necessary, but helps to paint a better picture of the scene. I know Jack is eager to crunch every Level and Cutscene so we can have a fully 100% optimized game, so right now it’s more important to call these scenes done than to obsess over the details. I shall spend not one more day on them!

Other than that, there are some release prep things I still need to do. I try to focus on tasks that involve other people first, which means I put off some solo projects like the game’s¬†app icon, app preview video, press kit,¬†and our¬†release date announcement trailer. We’re not announcing our release date yet, but [spoiler] when we do it will be in the form of a cool trailer! We’ve heard that’s the best way to generate buzz for the game. Hopefully our efforts these past 2 years to “pre-market” the game mean that when the trailer hits YouTube there is a large group of fans eager to share it around social media.

 

Black

Thoughts on The Ending

Soon, I will stop being the artist on¬†Where Shadows Slumber and become Mr. Bug Finder. Then, in the weeks before the game hits the App Store, I’ll be Mr. Marketer. After that, I’ll be Mr. Salesman as I go on the Extremely Real and Actually Real¬†Where Shadows Slumber¬†World Tour! (Buy our game so we can do this)

It’s so strange to think that in just a few days, I won’t be modeling environments or animating these characters ever again. Saying goodbye is a bit of a relief, but it’s also disturbing. It feels a bit like leaving a job at a company without having another one lined up. And I’m not talking about the financial success of the game (we have no idea what to expect… $500? $500,000?) but rather my own personal sense of purpose. I never thought I would feel totally lost right at the moment our three year passion project is about to hit prime-time. Is this normal? How am I supposed to feel?

Anyway, this is the State of the Art blog, not the State of Frank’s Mind blog. Let me save my goopy tell-all for a podcast appearance with Jack sometime. (Speaking of which, even if you have the tiniest, most insignificant YouTube channel or podcast, invite one of us on! We love to talk! Contact info in the signature below) All you need to know right now is that the art is 98% finished and we’re heading into our final Quality Assurance (QA) stretch.

Stay tuned to this blog for mega updates about the game, tales from QA hell, and maybe even a comedic play-by-play of our upcoming Xcode struggle. Thanks to Jack for giving me a good name for this blog, and thanks to everyone who has been keeping tabs on us. I may resurrect this monthly recap if we have new art updates, such as when we port the game to Amazon’s Alexa, but right now I’m looking forward to wearing a different hat for a while.

See you next week!

 

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Thanks for reading this entirely text-based art update! If you’re new to this blog, you can find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, and feel free to email us directly at contact@GameRevenant.com.

Frank DiCola is the founder of Game Revenant and the artist for Where Shadows Slumber.

Going Gold

We’ve come to the part of the development cycle that no artist ever enjoys: the gold-stamping process. What is this mysterious “gold-stamping?” Why do artists despise it so? You thought it was just fixing bugs and making small tweaks, didn’t you? Well, read on to find out…

 

You’re reading the development blog for Where Shadows Slumber, a puzzle game coming to iOS and Android later this year. Check out our free Demo here.


 

 

LevelProgress.JPG

Gold Stamping: The Point of No Return

Every project must come to an end eventually. In order to make sure your game is ready for the whole world to see, every piece of it must be tested individually. Then, the entire game has to be tested as one unit. Before we can move on to that final testing phase, every Level, Cutscene, and Menu in the game needs to be approved by three teams: Art, Sound, and Development.

The Art team is just me – and the Development team is just Jack. Alba and Noah work on Sound together. That means we need three approvals for each Level, Cutscene and Menu. Approval means “I’m done working on this Level forever – there is absolutely nothing left to do. Put it in the game.”¬†(See the screenshot above for a look at our spreadsheet that has each Level listed as well as the “Gold” stamps)

There’s a specific order we have to do this in, as well. I need to put my “Gold Stamp of Approval” on Levels before Sound does, because I’m in charge of the game’s visuals. If I add a blazing torch to a Level after Sound has “gold-stamped” that Level, they’ll need to come back and give that torch some kind of looping audio. Art and Sound need to gold-stamp the Level before Jack takes over, because he’s duplicating each Level in the game into a separate file and running an optimization process on that Level.

This optimization process takes time, and destroys the editability of the scene. (By way of analogy, consider what happens to a Photoshop file when you Flatten it into a JPG file. The JPG takes up less space on your computer, but you lose the editable Layers from Photoshop) Jack is able to lower the time it takes your phone to render a frame of the game by “crunching” these Levels. If your phone can render a frame faster, the game will feel smoother. Players hate lag more than they hate bad graphics or design, because it interrupts the flow of play. Everything we’re doing now is to make the game run smoothly even on older devices.

But you can see the problem: if Art or Sound has to tell Jack that they made changes to a Level, one of two things happen:

(a) We need to make that change in both the original Scene and the crunched Scene

(b) OR… Jack needs to start the optimization process for that Scene over again

Option A introduces the possibility of human error. Have you ever made a mistake copying something down by hand over to another sheet of paper? Imagine that with a bunch of tiny numbers and sliders in Unity! Unfortunately, Option B wastes time we don’t have. And since “crunching” makes these Levels unable to easily edit, there is no Option C.

In the late stages of the project, we’re in a mad dash to finish each Level and hand them off to Jack. We’re a bit on top of each other at the moment, and tensions are high. Some of our beloved changes won’t make it into the first release of the game and may have to be stealthily added as a patch later on. (Shhhh don’t tell anyone I said that, blog reader)

Those are all the downsides of gold-stamping. Enough complaining: let’s talk about why this process makes the game so much better!

 

HowEmbarrassing.png

iPhone X Stretching

We began working on this game long before the iPhone X was announced. Since we designed the game in portrait mode, we planned for it to work in 9:16 resolutions as well as 3:4 resolutions. The plan was simple: we would assume you had the tiniest screen there was (9:16) and make sure you could solve the puzzle using everything you saw. And then, if you had a large screen, your screen would show more of the artwork surrounding the puzzle… but not any more key information. (Our demo works this way. Download it for free on a few devices to see what I mean.)

The iPhone X dashed our hopes when it launched, since it has a very thin and tall screen. When we booted it up on an iPhone X earlier this year for the first time, we noticed that key puzzle information was being cut off! Furthermore, there were sections above and below the Scene that I never planned for human eyes to see. We had to fill those sections in with art, or iPhone X users would know the game wasn’t made for them.

Here’s another analogy: imagine if you were designing the set for a Broadway musical. You do all your work, and then a week before opening night your director comes to you and says: “Listen, we’re lowering the stage by 2 feet and extending the ceiling by 2 feet above the stage. Do you think your set will still look good?”

The correct answer is: “yes, but I need to extend the artwork so it doesn’t cut off!” It’s ok if your art bleeds over into a section that human eyes will never see. But you can’t have your¬†screen bleed over into artwork that isn’t finished or cuts off arbitrarily!

Fortunately, Jack solved our width problem by writing a Camera Resizing script that adjusts the Orthographic camera size to the proper width depending on your hardware. (Thank God for Jack, lol. Just that script alone would take me the full 3 years we spent working on this game to complete) I am solving our height problem by extending the shadowy silhouettes on each Level where appropriate, and adding more art where it’s necessary.

 

TooManyVerts.JPG

Low Poly Means Low Poly

When you set out to make a low-poly game, you aren’t just deciding on an art style. You’re also setting boundaries for how much the game will need to handle. This is why you’ll see a lot of cartoony artwork on mobile games and MMOs. Both of those are situations where you want the game to run on low end devices like old phones (mobile games) or old computers (MMOs). Cartoony graphics let you show what you want without having high-resolution textures or incredibly detailed model topology. It isn’t just an artistic decision – it’s also a marketing, business, and programming decision.

However, just because I said that I would do low-poly art doesn’t mean I kept my promise. There are a lot of Levels that go wildly above our Triangle / Vertex budget. (See the screenshot above, with emphasis on the Tris and Verts)¬†Unity counts the number of Tris and Verts that are displaying on the screen at one time. Jack wants us to be well under 100k of each. That may sound like a high number, but you’d be surprised by how even simple scenes can skyrocket to 150k. When he finds Levels that are egregiously “over-budget,” he sends them over to me so I can make reductions.

Fortunately, Tri / Vert budgets are not like monetary budgets. If Jack told me not to spend $100,000 dollars, and then I bought a yacht, we’d be $100K in the hole. (But, we’d have a boat. Jack, I urge you to reconsider this proposal.) With polygons, as long as I cut down on fatty models before the game launches, no one will ever know. Except for the readers of this blog, of course. But you’re sworn to secrecy! Don’t share this post.

There is one more thing about this I discovered: Unity’s lighting system counts polygons in a very strange way. You can’t always trust their readout. I discovered that multiple lights require Unity to count the same object multiple times. If a cube has 8 Verts and one light is lighting it up, Unity will show 8 Verts. If there are six lights on it, Unity will show 48 Verts. So there’s some Levels that Jack will reduce once he does his big crunch, since he rewrote how our Lights will work to make them all act as one super-Light. (More wizardry, I’m sure.)

We’re doing all we can to make the game run fast on your phone. If it’s still lagging, get a new phone!

 

TextureAtlas.png

File Formats and Compression

This is the kind of boring stuff that puts artists to sleep, but it’s important. Unity imports textures, models, and audio files according to a standard. You can set the standard somewhere, but we never did. Instead, I am going through every file in the game and asking the had question: does this¬†really need to be as large as it is?

The answer is usually “no!” which is good. I’m crunching a lot of textures down from 1024 x 1024 to 32 x 32 pixels, Unity’s smallest maximum size for images. Noah and Alba also did a bunch of audio crunching that I can’t really explain properly. You’ll have to wait for their revealing tell-all novella (Where Shadows Is Grongus: Nightmare Stories From Development Hell) for all the juicy secrets!

One more thing about textures: it might not be super necessary for me to make these textures smaller after all. Jack is actually doing this crazy optimization thing where we have every texture on one big image called a Texture Atlas. This image is as small as I can make it and has every texture in it laid out like a grid. We have one of these for every Scene in the game (Levels and Cutscenes) and when the game wants to render an object that uses a texture, it’s going to go to this image and pick from the proper coordinates.

This is¬†insane and Jack explained it to me once and it’s¬†insane and I’m sure it will make the game run super fast. If I’m remembering correctly, Jack told me that the rendering system needs to pause and switch gears every time it has to render a new Material. (So if the grass is GreenMaterial and the tree is TreeMaterial, the renderer needs to pause and switch) If it never has to switch like that, the rendering process should go way faster. The way to do that is to make one Material with the Level specific Texture Atlas called “Scene-0-2-Atlas” or something and put that on each object with the right coordinates. We’ll have fewer batches to render, and you’ll never even know what’s going on under the hood!

I’m going to stop giving the layman’s explanation here before I embarrass myself by showing my limited knowledge. But look forward to Jack’s upcoming tell-all blogella (Life With Frank: The Man Who Knew Nothing) for all the juicy secrets!

 

rubber stamp APPROVED

See You In Hell

This is going to be a rough week. This lengthy process is taking longer than I would have liked, and I’ve been pulled away from animating the final cutscenes. I desperately want to get back on track so Alba and Noah have enough time to work on the audio score for the final cutscenes.

Thanks for reading this blog post – I have to get back to gold-stamping!

 

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

We hope you enjoyed this update about the game’s development. Have a question about aesthetics that wasn’t mentioned here? You can find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, and feel free to email us directly at contact@GameRevenant.com.

Frank DiCola is the founder of Game Revenant and the artist for Where Shadows Slumber.

Unity’s Performance Debugging Tools

Last week¬†I discussed some of the basics of how rendering works in Unity. As I mentioned, all of that was setup for this week’s blog post. Since I’m working on rendering optimization now, I figured it would be a great time to go over the debugging tools Unity provides in order to aid rendering performance. Online resources can be a little scarcer for rendering than they are for other aspects of coding, so hopefully anyone who’s working on their own game might glean some useful information from this post. And even if you’re not working on anything right now, I hope you follow along and maybe learn a bit!

Unity is a nice little game engine, and, as such, it does a lot of the work for you. For the most part, when making a game, you don’t have to worry about the nitty-gritty stuff like rendering. When building for mobile, however (especially when you have specific graphics/lighting customization), you might have to descend into shader-land. Fortunately, Unity provides a few tools that can help you to deal with optimizing your rendering pipeline.

 

4-24-Profiler.JPG

Profiler

The first step in fixing rendering performance issues is to know about them. The best way to do that is with the¬†Profiler¬†window (Window -> Profiler). While you’re running your game, the Profiler keeps track of a lot of incredibly useful information, like how long each frame takes to render, split up by category. For instance, the Profiler will tell me that a frame took 60 milliseconds to run, 40 of which were due rendering and 15 from script execution, etc. This is the first place you should check when trying to improve performance – there’s no point in optimizing your rendering if it’s actually your¬†scripts that are running slowly!

profiler

So much information!

For the purposes of rendering, there’s an entire Profiler section! The Rendering Profiler keeps track of the number of batches, setPass calls, triangles, and vertices in each frame. Looking here for inconsistencies, spikes, and just high numbers in general is a good way to get an idea of why your game is taking so long to render. The Profiler also has a lot of other info that’s useful for diagnosing and debugging performance problems. I really recommend profiling your game and thoroughly looking through the results to get as much information about how your game is running as possible.

 

android_debug_bridge

Android Debug Bridge

While profiling in the editor is pretty useful, it doesn’t tell us much – of course our game will be fast on a great big computer, but how does it run on a crappy phone?

The is where¬†ADB, or the¬†Android Debug Bridge, comes in. ADB allows your computer to communicate with your Android phone about all sorts of stuff. Specifically (for our use cases), it allows you to profile your game¬†while it’s running on a device. If you plug your phone into your computer, build the game directly to your phone, and open the profiler, you should see some results.¬†This¬†is the information we want, because it tells a much truer story about how your game runs on a phone.

Where Shadows Slumber, for instance, runs at ~200 fps in the Unity editor. When I plug my phone (the Google Pixel 2) into the profile, I get a framerate of ~60 fps. This is pretty good, so I know our game can run on newer devices. However, when I plug in my old phone (a broken HTC One M8), I get closer to ~12 fps. Looking at the profile during¬†this run will give me much more useful information about what I should fix, since this is the device where performance is actually suffering. If you’re making any big decisions or changes based on profiler results, make sure those results come from your actual targeted device, and not just from the editor.

ADB usually comes with the Android SDK – if you have the Android SDK set up with Unity (which allows you to build to Android devices), then you should be able to use ADB with the profiler pretty painlessly.

I should also mention that there might be an equivalent tool for iOS debugging, but, as I do all of my development on a Windows machine, and all of my testing on an Android phone, I wouldn’t know what it is. Sorry!

 

4-24-Header

Frame Debugger

The next most important tool for rendering performance is the Frame Debugger¬†(Window -> Frame Debugger). While the Profiler tells us a lot about what’s happening during rendering as a whole, it still treats the rendering process as a black box, not letting us see what’s actually happening. The is where the Frame Debugger comes in – it allows us to see, step by step, exactly what the GPU is doing to render our scene.

As I mentioned last week, the GPU renders the scene through a bunch of¬†draw calls. The Frame Debugger allows us to see what each of those draw calls is drawing. This allows us to determine which materials/shaders are causing the most draw calls, which is one of the biggest contributors to rendering lag. It also provides a bunch of information about each draw call, such as the properties passed to the shader or geometry details. The important thing that it tells you is why this draw call wasn’t batched with the previous draw call.

frame debugger

All of this happens in a single frame

Batching is Unity’s first defense against rendering lag, so it makes sense to batch as much stuff into a single draw call as possible. Because rendering is such a complex process, there are a lot of reasons why draw calls can’t be batched together – certain rendering components simply can’t be batched, meshes with too many vertices or negative scaling can’t be batched, etc. The frame debugger will tell you why each draw call isn’t batched with the previous one, so you can determine if there are any changes you can make that might reduce the number of draw calls, thereby improving rendering performance.

For example, in¬†Where Shadows Slumber, we re-use meshes in certain places. Sometimes, if we require a “mirrored” look we’ll reuse a mesh, and then set the scale to -1. This was before we really looked into rendering performance, and, unfortunately, it causes problems – a mesh with negative scaling can’t be batched with a mesh with positive scaling, so this ends up creating multiple draw calls. Rather than setting the scale of the object to -1, we simply import a new, mirrored mesh and update the object, allowing these draw calls to be batched and improving performance.

 

4-24-Stats.JPG

 

Stats

That’s it for the heavy-hitters; between the Profiler, Frame Debugger, and ADB, you should be able to get a pretty good idea of what’s going on in render-land. Unfortunately, digging through them can take a while – sometimes you just want a quick indicator of what’s going on in your scene. Enter the¬†Stats window.

The Stats window (click “Stats” in the Game View) is a small overlay in the game view which gives you a quick rundown of various rendering indicators in real time. It’s not as in-depth, but it gives a much quicker picture of performance.

stats

That’s a lot of batches!

While it sounds like the stats window doesn’t add much – after all, the Profiler can give you the same information – I’ve found it to be very useful. The Profiler is probably better when you’re actively debugging rendering performance, but the stats window allows you to notice places where rendering performance might take a hit, even when you’re doing other things.

When I’m testing some other part of the game on my computer, I’m not going to notice any rendering lag, because my computer is so much more powerful than a phone. I’m also not going to be looking at the Profiler or Frame Debugger, because I’m not worrying about rendering at the moment. However, if I have the stats window open and I notice that the number of draw calls is in the hundreds, then I know something is going on. At that point I can get out the Profiler and see what’s happening – but I wouldn’t even have known there was anything amiss if it weren’t for the stats window.

 

4-24-SceneView.JPG

Scene View Draw Mode

As we get further and further down the list, we’re moving from “debugging all-star” to “it’s useful, but you probably won’t use it much”. Scene View Draw Modes fall into this category, but they’re still good to know about. You can access different Scene View Draw Modes by clicking the drop down menu at the top right of the scene view window.

The¬†Scene View in Unity is one of the main windows that you use to make your game – it shows everything in the scene, allowing you to move around through the scene and select, move, rotate, scale, etc., any game objects. Usually the Scene View just displays the objects exactly as they would be displayed in the game. However, it has a bunch of other modes, and some of them are actually pretty useful. The two that I find the most useful when considering rendering concerns are listed below, although they’re all worth checking out:

Shaded Wireframe:¬†This is my default draw mode, as it looks pretty similar to the normal shaded mode. The difference is that it also shows all of the triangles and vertices that you’re drawing. This is useful because certain shader operations are performed once for every vertex. Decreasing the number of vertices in your scene can give you a bit of a performance boost, and the shaded wireframe draw mode helps you see when you might have too many vertices.

3-4toomanytris

The shaded wireframe shows that there are too many polys.

Overdraw: This mode draws each object as a single transparent color. This makes it very easy to see when multiple objects are being drawn in the same spot on the screen. Since the GPU has to draw every pixel of each object (even if that pixel will be overwritten later), it ends up wasting some calculations. Areas that are very bright will waste even more calculations. Switching to this draw mode every so often lets you know if there are any places where you might want to remove some meshes.

 

161004-worst-hacks-history-feaure

The Internet!

It should pretty much go without saying, but one of your best resources for debugging performance is the internet. Unfortunately, when it comes to rendering in Unity, the information out there is pretty scarce. Unlike with normal imperative coding, where you can simply Google “how to pathfinding” and get 30 implementations, you have to work a bit harder with rendering stuff. I find it’s best to do what you can and only resort to the internet with very specific questions. That said, there is still a lot of helpful information out there. You just have to know going in that only one of every three stack overflow questions makes any sense, and only one of every four Unity forum threads are using the most recent APIs. It’s like “Googling: Nightmare Mode”!

For anyone reading this post who is actually working on rendering stuff – I’m very, very sorry. I hope that this post and the tools I discussed help to shed at least a little bit of light in the dark underworld that is shader-land, and I hope you can achieve your rendering goals and make it back to the mortal realm before your soul is forever lost.

For everyone else who¬†hasn’t¬†done any rendering stuff, I hope you learned a bit, and that maybe I inspired you to get involved with some rendering code! It’s really not that bad, I promise!

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

If you didn’t already have a working knowledge of rendering, I hope this post helped! If you do know about rendering stuff, I hope you don’t hate me too much for my imprecision! You can always find out more about our game at WhereShadowsSlumber.com, find us on Twitter (@GameRevenant), Facebook, itch.io, or Twitch, join the Game Revenant Discord, and feel free to email us directly with any questions or feedback at contact@GameRevenant.com.

Jack Kelly is the head developer and designer for Where Shadows Slumber.