State of the Art – November 2017

Welcome to State Of The Art, November 2017 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.

<Don’t forget to add in some lame excuse about Thanksgiving before you post this>

Without further excuses, let’s explore the major leaps forward we took in November!

 

0-1-Header

The Game’s First Level, “Fallen”

It took me a while to get around to doing this Level, because there’s a bunch of triggers I had to animate and I didn’t feel like doing those. For the longest time, Level 0-2 has been our de facto “first level.”

Dec-5-Blog-Forest

But the game really begins here, along this spooky Forest path, where Obe first encounters the Lantern. You can watch the entire Level in the video below, since it’s so short. (Just ignore the missing sound effects and animation polish, all of that comes later.) Jack and I have a rigid philosophical stance when it comes to game design: we don’t like using text to tell players what to do. That’s annoying! So this Level is designed so that people can learn how to walk. It’s impossible to avoid picking up Obe’s lantern because he automatically does that when you walk on the first open space in the clearing.

This Level didn’t take too long once I actually sat down and did it. Since Obe can only walk around the center of the Level, and his light radius is quite small, there’s a lot of art I can intentionally ignore. This may seem lazy, but there have been times in the past where the opposite has occurred! I’ve done beautiful artwork around the edges of the Level only to be dismayed to find the light never reaches there, and players will never see it. But I still see it. In my dreams.

 

Dec-5-Blog-City-Header

Level 4-3, “Ramparts”

One of the most ambitious Levels we planned for the game has you scaling the ramparts of a city wall as you climb to the palace on top. It’s a transition Level, which makes it super important for the story. The first two Levels in this World take place in the slums, and the final two Levels in this World take place in beautiful palace gardens. We need a bridge in between those two, otherwise the jump from one to the other will be too abrupt for the audience.

Enter Level 4-3, “Ramparts,” a vertical bridge between two different worlds separated by economic class and power. It’s easier to show you than tell you! We begin on the street, with the dogs.*

Dec-5-Blog-City-A.png

*Dogs not included

Then there’s the middle section:

Dec-5-Blog-City-B.png

On top, we can see the palace architecture more clearly:

Dec-5-Blog-City-C

This Level took forever for Jack to make and for me to decorate. Even now, it still needs an extra coat of paint! The puzzle isn’t difficult, but the vertical nature of it means we need to cover up a lot of the screen. I want to put more plants closer to the top, which I didn’t really have time to do yet. Plant life would indicate that even in this barren desert, the wealthy King who lives in the castle gets to be surrounded by beautiful foliage.

 

Dec-5-Blog-Paradise-Header.PNG

Paradise Begun

The game’s final World is a beautiful island paradise floating in the sky. This is somewhat of a story spoiler, but we’ve blogged about it before so I’m not too concerned. Read on at your own peril, I guess?

It’s taken me a while to return to this beautiful setting. Anything that comes last in a video game usually gets the least attention. It’s regrettable, but understandable. After all, if you see a movie in theatres, you often see 100% of it.  Unless you leave in the middle for some reason, you’ll experience the beginning, middle, and ending. But video games are different. Only a fraction of players make it to the end of the game, but by definition anyone who plays a game experiences the first 5 minutes. That’s why those first 5 minutes are so crucial and get so much special treatment.

I’d like to break the chain, if I can. I want people to feel rewarded for getting to the end of this difficult puzzle experience. Here’s the current progress on World 7, which I just started last week. They’re in rough shape at this stage, but you can get a sense of where I’m going with these.

Dec-5-Blog-Paradise-A.png

Level 7-1, “Ladder” is all about compiling a ladder from a bunch of broken pieces. The ladder comes together using the shadows from that conveniently specific rotating object. It’s harder than it looks! I designed this one and I forgot how to solve it. Good luck!

On the first landing, we get a chance to show off that majestic Bermudian inspired architecture I love so much. If I have time, I’ll even include a cool dude relaxing on a chair just to show how far removed this World is from everything below.

Dec-5-Blog-Paradise-B.png

Level 7-2, “Pond” is due for somewhat of a re-do. The major thing I forgot to include here was a pond in the center where that button is. We want some kind of a sacred grove with a sacred button because that’s how you solve this Level – you need to use the center piece in order to drag boxes around and cast the shadows you need to fix the ending staircase.

This is where design and aesthetics conflict. The pathways we need are very specific and jagged, but the “look and feel” we want is uniform and symmetrical. It’s a tough compromise. I’ll return to this one and remove that weird green rock path (a placeholder) and try to do something closer to my original “Toolkit” Level I posted so long ago:

World-7-Paradise

(This isn’t a Level in the game, but rather spec work I did a few months ago when I was beginning each World’s “Toolkit.” But that center pond is making a comeback, just wait for it!)

Dec-5-Blog-Paradise-C.png

Level 7-3, “Tower” isn’t very far along, but it’s such a cool design I thought I would tease it here. You need to see a video of it in action to really grasp what’s going on, so no more for you just yet! Be patient [ ^_^]!

 

UI-Header.PNG

User Interface Sketches

Generally I prefer not to show off drawings that are not part of the game. But Jack and I just started on the user interface design, so it can’t hurt to show you a tiny bit of what I’m working on…

 

It may seem late in the game to handle this, but we decided long ago that we don’t want a complicated user interface. Above, you can see that our Levels contain all the features that a Main Menu would normally have. We don’t really like having a separate menu detached from the game, so you can access all the key stuff just by “pausing” the game.

Note: this is just a Photoshop design. We haven’t coded this in yet, and not all of the buckets you see above are necessarily being included in the final game. For example, being able to take a picture of the Level is an important social feature, but it’s not essential for the game’s launch and may fall by the wayside.

Interacting with phone features is a big pain and it’s one of the toughest things about game development. Making your game work on every single tablet, flip-phone, e-reader and seashell Kindle out there is a nightmare. Maybe we’ll write a blog about that topic once we get more into the weeds of cross-platform development…

 

christmas2012_alternative_santa_onlycoke_flexible

See You Next Year!

The next time you read this particular blog series, it will be 2018 and I’ll be recapping December. Man, where does the time go? This year has gone blazing by!

This month, I hope to finish World 7 and move on to polishing up each Level. That work is highly specific, which is why it was left until the end.

Polishing the Levels will intersect with working on the game’s cutscenes. That’s because some of these Levels have animated characters in them. I’d like to be sure that the animated characters I create work well in both settings, to save myself time later. So don’t be surprised if next month’s update is a bit of a mixed bag. That’s the way it’s going to be from now until the game launches!

 

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

We hope you enjoyed this update about the game’s artwork. 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), Facebookitch.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.

Problem Solving: Design and Complexity

Game design and development is a complicated process. Creating an intricate tapestry of player interaction, incentive, and reward can be quite difficult, and you will no doubt run into trouble along the way. This is a simple fact of game development – in fact, this phenomenon represents most of the time you’ll spend working on your game. Therefore, you shouldn’t worry about it when that trouble finds you! However, an important part of how polished your game ends up, how long it takes to make, and whether or not you even get a chance to finish it is how you handle the issues you run into.

At its core, a game can be described by a set of rules which govern gameplay, and a starting game state. A match-three game, for example, can be described by the following rules:

Simple match-three rules

  1. The game starts with a grid of colors.
  2. Any three or more adjacent cells of the same color disappear, granting points to the player.
  3. If there is an empty cell, the cells above it slide down to fill in the space, generating a new cell at the top.
  4. The player may switch the colors in two adjacent cells.
  5. The game may end when the player reaches a certain number of points, or when they make a certain number of moves, or if there are no available moves, etc.

Obviously, these rules don’t encompass everything that happens in a game, and the rules get much more complicated very quickly for more complex games. These simple base rules define your gameplay, but they very quickly become more intricate as you add features and functionality. Let’s look at a few updates to our match-three example:

  • If we want to add a type of cell which can’t be moved, we would have to change rule #4 to “The player may switch the colors in two adjacent cells unless either of those cells is unmovable”.
  • If we want to add an “exploding” cell which eliminates nearby cells, we would have to change rule #2 to “Any three or more adjacent cells of the same color disappear, granting points to the player, and if one of them is an exploding cell, adjacent cells also disappear”.

The base rules handle 90% of the gameplay situations, but we have to add special provisions for exceptions of those rules. In game development (and computer science in general), these exceptions are called edge cases, and, as necessary as they are, they’re super annoying. Your code will include edge cases, and it should, but you have to be careful with them (edge cases may be considered a type of hack, which I discuss in one of my previous blog posts), and you should avoid them when possible. One of the primary ways to do that, depending on your game, is through design – rather than complicating your codebase, you can try to design your game and/or levels in such a way that you don’t need to change your code.

 

An Example from Where Shadows Slumber

Let’s take a look at the inspiration behind this post – a case I ran into in Where Shadows Slumber where I faced such a decision.

1-1 goal

Ominous!

At the end of each level, there’s a ‘goal’ space. When Obe steps on it, it triggers the end-of-level sequence to begin – the lights fade, Obe walks out of the scene, and then the next level loads. The question is, given the game rules, how can I make this happen? I could have added a specific code path for this case, but I realized that I could use some already-existing mechanics to create this effect:

  • The machinery behind buttons can already handle “trigger something when Obe steps on a space”, including a delay for ending the level.
  • The machinery behind Obe walking in at the start of the level allows us to redirect his movement.

This is one way of handling an edge case – try to reduce it into an example of something you already have, thus changing it from an edge case into a normal case. Now we’ve changed the ‘goal’ space into a different-looking button with a redirect space.

Now, there’s another situation involving the goal space where I was given a similar choice. In some levels, there’s a space both to the left and to the right of the goal space. This enables a situation in which the player moves onto the goal space, and then away from the goal space. This creates a problem: the end-of-level ‘button’ will trigger, the lights will dim and the next level will load, but Obe hasn’t left the scene – he’s still just standing there!

ezgif.com-video-to-gif

Well that’s not quite right…

This is a problem I can solve by changing the rules, or by changing the design. The rules for redirecting Obe’s movement only apply when he doesn’t already have a destination. In order to handle this situation, I could add a case that says “if the current node is the goal node, do the redirection”. This requires that I add code to mark a node as the goal node, and to check if the current node is the goal node. While this code would be pretty small and easy to write, it still adds to the overall complexity of the codebase. Is there a way to avoid doing so?

There is, in fact, and it’s quite easy. If we simply remove all of the places where this could happen, then we don’t have to worry it! We’re not “solving” the problem in a conventional sense – if the configuration of spaces were to come up again, the problem would still occur. However, by changing the level design, we remove any chance of that happening.

1-1 goal with boxes

I’ll have Frank make something more on-theme to fill that space

This is another way of handling an edge case – by making a small change to the level design, we’re able to avoid making changes to the codebase. This prevents our code from becoming needlessly more complex, making it easier to understand and maintain. While not every problem can be solved in such a simple way, there are many that can, and keeping an eye out for them is a great way to avoid unnecessary code complexity.

 

Living on the Edge

I keep talking about edge cases and code complexity like they’re bad things. But an entire game is a very complex thing – doesn’t it make sense for the codebase behind it to be complex as well?

There’s nothing inherently wrong with complexity in your code; a well-implemented cache invalidation algorithm is a beautiful thing, complex as it is. What isn’t beautiful is needlessly complex code. The logic in this code is usually hard to follow, makes assumptions, and leaves a lot of small bugs that you’re unlikely to notice right away. This is a recipe for disaster, because every time you try to make a small change, you have to wade through a swamp of half-thought-out code paths, and you end up adding more complexity just so that you don’t have to deal with the complexity that’s already there!

The biggest problem is that it’s very hard to tell the difference between code that’s complex because it has to be (good) and code that’s complex when it doesn’t have to be (bad). The way I deal with this is to try and realize when the code I’m writing is starting to become very complex. Even though I might only be fixing one bug or working on a specific part of the implementation, I try to take a step back and look at the problem that I’m trying to solve, and how I’m solving it. If the problem is a complex one (cache invalidation), then I accept that it’s gonna be a complex algorithm, and keep writing it. If it’s not a complex problem (sorting), I take another look at my code and see if there’s a better way to do what I’m trying to do. In this way, I continuously re-evaluate the complexity of my code, and whether or not I need it.

Hack

Six while loops isn’t too many, right?

I know that “I just know when it’s too complex” might not be the most satisfying answer for those of you who often run into issues of complexity. That feeling is something that you pick up as you do more and more coding, and especially as you revisit your own code – “wow, I can’t believe I wrote such stupid code”. For those who want a more concrete answer, here are some of the ‘red flags’ that I try to keep an eye out for when assessing the complexity of my code:

  • A lot of ‘if’ statements – If your code has a lot (and I mean a lot) of random ‘if’ statements (especially nested ones), then you might want to take another look at the design.
  • “I don’t know…” – If you can’t quickly and easily determine what each piece of your code is meant to be doing, your design might be too complex.
  • Guessing – If you ever find yourself just “trying things” and “seeing if they work”, it’s a clear sign that you don’t understand your code well enough. Take some time and get to know it!
  • Duplicated code – If you have the same block of code copied into a few places, you should revisit your design. Either that block belongs in a helper that you can reference, or the control flow of your code needs to be reconsidered.
  • Asynchronicity – If you’re doing anything asynchronous, you should give your code another look. I know you probably did it right the first time, but asynchronicity is one of the most difficult parts of computer science, and it’s always worth double-checking.

There are a lot of other things that you might notice about your own code and its complexity – these are just a few quick guidelines off the top of my head. Hopefully they help!

 

But Game Development is Fun!

Anyways, I hope I didn’t scare you away from computer science. If anything, I wanted to instill a healthy fear of needless complexity, and I hope that you’ll do what you can to reduce that complexity – whether by redesigning your code or redesigning your levels!

 

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

If you have any questions about code complexity and how to design around it, or if you have any other questions about Where Shadows Slumber, feel free to contact us! You can always find out more about our game at WhereShadowsSlumber.com, find us on Twitter (@GameRevenant), Facebookitch.io, or Twitch, 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

Our Demo: 1 Year Anniversary

One year ago, on November 1st 2016, we released a free Demo build of Where Shadows Slumber to the world. This marketing build has just 10 Levels and a cutscene at the end, yet it’s been downloaded hundreds of thousands of times by gamers all over the globe. We don’t get a chance to talk data often, but this post is dedicated entirely to discussing the performance metrics of our Demo. Towards the end, we’ll answer the burning question on your mind: was it worth it?

 


 

 

google-play-logo-2016

Google Play Lifetime Stats

The Demo performed the best on the Google Play store. I have a feeling that’s because the Demo is free, and people on the Google Play store tend to be younger / less willing to pay for games. When they see a free game that looks beautiful, of course they’re going to download it! Let’s dive into the Google Play Console and check out some of our stats…

GP-Installs.PNG

Left: the chart of app installs. Right: the chart of app uninstalls.

Installs and Uninstalls

First, the obvious: we’re two no-name developers living in Hoboken, New Jersey and 250,000 PEOPLE DOWNLOADED OUR GAME ON ANDROID!!!

\[ 0_0]/

*Ahem*

The lifetime chart of the Demo on Android shows that it went live in November and hit its peak in December, probably due to the Christmas holiday. I think it’s interesting to note that the first two months an app is live appears to be “prime-time.” Look at all those downloads!

Yet, even though we hit our lowest point (since the November we launched) in May 2017, we’ve consistently gotten more downloads every month after that. Rather than plateau, the app continues to outdo itself month after month. That’s crazy. I’m proud of that, and I hope this month’s downloads eclipse October’s, which is 26, 467. That’s pretty tough to beat!

Of course, the downside is that nearly everyone who installed the app promptly uninstalled it, most likely after completing it. I’m not shocked by that. This is just a demo. People want to play it and then get rid of it – it doesn’t really deserve to stay on their phone. I expect this behavior will continue with the final game, save for a few thousand people who feel sentimental and can’t bring themselves to delete it. I’m pretty ruthless when it comes to clearing space on my phone’s hard drive, so I don’t blame people for not sticking around. You might say our “retention” is terribly low. But I also don’t think it matters for Premium games the same way it does for Free games.

 

GP-RatingsAmalgamation

Top: Our rating. Left: A chart of our rating over time. Right: A sample review.

Ratings and Reviews

As you can see in the charts above, our lifetime rating is quite high and we’ve received thousands of ratings. People have responded very positively to the Demo! The majority of our ratings are 5 Stars (4,149) with only a sliver of negative 1 and 2 Star reviews.

The graph of our rating is interesting. Starting with a perfect 5 Star rating at launch, we slowly drip down to a 4.6 (the bottom of the graph is 4.6, not zero!) by May 2017. Then, as indicated, the build adding a finale cutscene goes live. From there, our ratings steadily increase to the point we’re at now.

This is a really important moment in time, because Jack and I were nervous about how the story would be received. It’s a bit off – not quite what you’d expect from a puzzle game made in the image of Monument Valley. We expected more negative reviews. Instead, they’ve been largely positive. We kind of left people on a cliffhanger and they’re eager to find out just what the heck is going on.

At right, you’ll see a common review. Most of them are like this: people love the game, say they’ll buy it, but are disappointed that this is just a Demo. Truly, I have no idea how people missed this! The title of the app is Where Shadows Slumber Demo (Beta). There’s two keywords in that title that would tell you this is not a finished thing! But you can file that under “nothing is too simple for people.”

If you want to read more reviews, go to our Demo’s Google Play app page and flip through them. I could read them all day, but it would make my head get too big.

 

GP-World.PNG

The top 5 countries that downloaded our Demo.

Who Is Playing?

The top five countries that downloaded our game are South Korea, India, the U.S., France, and Mexico in that order. France and Mexico are nearly tied, and the U.S. isn’t too far ahead of them. But India has double our installs, and South Korea blows everyone out of the water. What the heck is going on?

It’s important to note that Jack and I went through the arduous process of paying for 14 languages of translated text and put them into the Demo. That means Indian players see the game’s app page in Hindi, as well as the in-game text. That’s a big deal. It means we’re meeting people where they are across a global market. We didn’t translate the game into any African languages, so it’s no wonder that entire continent is grey except Egypt. (We did translate the game into Arabic…)

Free games are really popular in Asia. To the extent that this Demo is a “free game,” that explains its success in South Korea and India. After all, it is a game that costs no money. So it is technically a free game! I do not expect this same success once the game costs $0.01 or more. We’re going to have to target the Asian market with a lower price than normal, or perhaps even a try-before-you-buy method where the first half of the game is free. Don’t get me wrong, I’m happy that these people downloaded our game and clearly loved it. But when the business model flips and we ask for their cash up front, I don’t expect to see South Korea or India to even make it into the top 10 list.

 


 

 

applestore20copy

App Store Performance

The App Store’s analytics aren’t quite as easy to decipher as Google Play’s… also, our performance on Google Play dwarfed the App Store in every possible way!

Apple-AppUnits.PNG

From iTunes Connect – a chart of our App Units.

App Units vs. Impressions

Our performance on Apple makes more sense to me. We only “sold” 32,285 app units. We got over 200,000 lifetime impressions, but I don’t know what that means! That may just be when someone sees the game but doesn’t necessarily act upon that.

The chart of our downloads follows a pretty standard “flash-in-the-pan” trajectory. This may be partly because we were never able to upload our language translations to the App Store. I’ll discuss that a bit more when we get to my conclusions, but that’s my guess as to why we plateaued in May and never really rebounded.

It should be stated that App Store customers are the polar opposite of Android people – App Store customers probably want paid games and see “Free” as a mark of low quality. I expect these numbers to swap when the final game is released.

 

Apple-Review

Our dashboard for monitoring reviews. Note the total in grey on the right.

Ratings and Reviews

We didn’t get nearly as many reviews on the App Store – just 26 in one year. That’s probably all an indie developer can expect, but it doesn’t explain the disparity between this and Android. The reviewers were quite kind, and we have a 4.9 out of 5.0. However, with such a small sample size, that’s not as impressive.

 

Apple-World.PNG

Who Is Playing?

Surprisingly, China is our top country on the App Store. I didn’t even know we had access to the Chinese App Store! I don’t know if we can trust those numbers. In second place we have the United States, and then Russia, Japan, and South Korea. These numbers are too small to really tell us anything meaningful, except that we should focus our efforts on China for the iOS release of this game!

 


 

 

amazon_appstore_logos

Amazon App Store Performance

The Amazon version of our Demo went up earlier this year, but there’s no way to really see how much traffic it has gotten. My guess is that no one besides Jack and I have seen it, since the only review is one that I left on the company account.

AmazonLOL.PNG

My very serious review

If you have a Kindle or a Fire, please check out the Demo there! We’re doing a lot by trying to be on as many platforms as possible, and we could use the testing feedback.

I hope things will be better in the future with Amazon, but this isn’t promising. The company has gifted us four mobile devices to use for testing, as well as a guaranteed spot on the Amazon App Store feature banner at a time of our choosing. Let’s hope they have the install base to make it worth our time! We will not be coming to Windows Phone since those devices have been discontinued – I hope the same fate does not befall Amazon.

 


 

 

WorthIt

Retrospective: Was It Worth It?

After having our Demo available for free all this time, people often ask us “was it worth it?” What’s the point of releasing a demo so far in advance of the actual game? Don’t you want those people to pay for the real version? Won’t they forget about your game by the time it launches? Does anyone even make demos anymore?

That’s true – mobile gamers who stumbled upon our Demo a few months ago probably already forgot about us. They’re not eagerly anticipating the release of the final game. It probably isn’t even on their phone anymore! Just because this game is the center of our world, that doesn’t mean we can expect the same loyalty from some people who played a 15 minute trial. (Shout out to everyone reading this blog, because the previous paragraph clearly does not apply to you!)

It’s fine though, because none of that was ever the intended purpose of the Demo. All we needed were the following things:

  • A proof of concept that shows we can actually make something great
  • Something that claims the name Where Shadows Slumber before anyone else
  • quickly deployable version of the game to showcase at events
  • An easily submittable build that we can send to judges for contest submissions
  • Something that gives us experience dealing with the App Store and Xcode.

By these metrics, the Demo was a whopping success!

We proved to ourselves and our fans (and shadowy unnamed figures who can’t be named) that we can put together an awesome small indie game. Making something a little larger would take more time, but we already had the talent and the drive.

Judging by a Google search of “Where Shadows Slumber”, no one else has been able to claim that digital territory except for an old song from 2007. We’ve been in Google’s search algorithm for over a year, which can only help us in the long run when people try to find us online.

“The Demo has given us an air of legitimacy that many indie developers never consider when releasing their game into the wild.”

Any time we go to an event and the current build of the game isn’t ready to show real people, we just default to the Demo and it’s no problem! In fact, those events go even smoother than when we try to show off the development build. As for contests, having a no-strings-attached build out in the wild makes online applications a breeze. I’ve already got a folder filled with screenshots, videos, and a recent .APK that I can throw in there. I don’t know how many festivals want to feature our Demo, but at least they’ll remember us when we return next year with a finished game.

The App Store is an odd one. Technically, our Demo shouldn’t even be on there because Apple forbids you from submitting them. We slipped through the cracks five times! I don’t think that’s an endorsement of our talent, but rather an indictment of Apple’s system of judging builds. Perhaps we’re on borrowed time, and they’ll delete it any day now. Who knows? It doesn’t matter – between our Demo and the previously released SkyRunner, we’ll be Xcode pros by the time we jump in there a third time for the final release of Where Shadows Slumber.

In the end, it was definitely worth it to produce our Demo. Yes, it’s maddening to watch our game grow better every day knowing that people’s only conception of it is a year-old marketing build. But it will all be worth it in the end when we get to show the world what we’re working on! The Demo has given us an air of legitimacy that many indie developers never consider when releasing their game into the wild.

In the meantime… (I’ll have to train myself to not say this automatically, because I’m so used to it by now) …download our Demo. It’s free!

 

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

Thanks for reading this long-form business analytics update. If you came here from Reddit, please be kind! You can find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebookitch.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 – October 2017

Welcome to State Of The Art, October 2017 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.

Sadly, I was out of town for most of October on business trips to Texas, Los Angeles, and Seattle. Although I got a lot out of them, I did not get a chance to do as much artwork as I would have liked. Sorry that I don’t have more to show you!

Without further excuses, let’s explore the major leaps forward we took in October!

 

Header5.PNG

World 5, The Hills

Cold, abandoned tombstones. Whining wrought iron fences, covered in moss. An abandoned log cabin, now in ruins. Suddenly, a chill in the air – snow begins to fall.

The Hills represents a turning point in our game, which is represented by the change in weather halfway through. I really love this setting and the mood it conveys, and I’m proud of how the artwork for this World came out. Every Level in the game will need to be “polished” before the artwork can be considered finished, and World 5 is no exception. But I think you’ll agree that these Levels are already looking pretty awesome!

5-1

5-1, “Cemetery” – I can’t wait to change the temporary Phantom model [ v_v]

5-2

5-2, “Family” – Not too much changed since last time, since this Level is so solid.

5-3

5-3, “Ray” – I love how the log cabin came out here.

5-4

5-4, “Drop” – This Level should look snowier, that’s coming later!

5-5

5-5, “Rest” – Ignore the large A’s on this Level, they’ll be replaced!

My favorite little aesthetic touch in this World has to be the stone pathways. It took forever to get those right. I started with massive stone slabs, but it felt too video game-y. Then I went with smaller and smaller pieces until I decided to basically do a mosaic of little flat rocks. Let me know what you think in the comments!

Note: I’m going to change 5-4 to make it snowier. It’s odd that we jump directly to snow, and that was never the intention. I’m just not sure what to do to make it seem like it’s only snowing a little bit.

 

Header

World 6, The Summit

Obe ascends the snow covered steps to the Summit. Darkness falls and his lantern dims in the wintry air. Shivering, he makes his way toward the castle at the peak of the mountain. The journey will be over soon.

I’m so excited to show you World 6, the Summit. Inspired by snowy game-ending mountains like the one in Journey and the recent Tomb Raider reboot, the Summit World is a snowy mountain peak with an abandoned castle at the top. It’s just getting started, so these Levels are a little rougher all around. Essential polish things, like actual snow falling from the sky, are unfortunately still on the back burner! Check out what I have so far:

Level 6-1, “Pass” shows off the unique way World 6 works. There’s a hidden shadow world that occupies the same space as the ‘real’ world! Use your shadows to uncover hidden dudes like this walking guy, who can press Buttons for you. It’s one of the coolest things we do in the game with shadows, in my opinion!

6-2

6-2, “Blind” – This Level is all about the secret World waiting for you in the shadows…

6-3

6-3, “Chains” – I may end up moving the gateway toward the center and rotating it.

6-4

6-4, “Watchman” – Finally, inside the Castle! Snow pours in through decrepit, broken windows…

There’s one more Level I can’t show just yet (6-5), because it’s a super work in progress right now and I don’t think you’d be able to see what’s going on. But this is World 6 so far!

What do you think?

 

HeaderUnfinished.PNG

November – Returning To Skipped Levels

Observant readers of this monthly blog will notice that sometimes I skip a Level and never return to it. Those Levels haven’t been cut from the game! They just posed a significant challenge for one reason or another, and I couldn’t find time to dedicate to them.

The theme of November is going to be “returning to skipped Levels.” I won’t spend all month on that of course, but expect to see an assorted, seemingly random collection of Levels in next month’s blog post. It’s all part of putting everything together, which is more important now that we’re getting close to finishing the game.

 

FakinIt

This is the kind of face that makes you want to say “That guy? That guy kind of sucks.”

Please, Criticize Me In The Comments

I don’t normally do this, but this is a call for comments! WordPress lets you leave a remark under each blog post. Please take a look at this artwork and give me some critical feedback. I always listen to it and it will really help to have a third, fourth and fifth set of eyes on my work.

You can tell me how much you love it if you really feel like it, but I’m mostly looking for ways to improve. Stuff like “this part looks a bit off” or “this color stands out in a bad way” or “this section looks unfinished.” That’s what I need to hear! Constructive criticism is welcome and encouraged.

I look forward to hearing from you below, and I’ll try to respond faster than I normally do. Cheers!

 

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

We hope you enjoyed this update about the game’s artwork. 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), Facebookitch.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.

The Last Mobile Games Forum Ever!

Last week I went to Seattle for the Global Mobile Games Forum. It was my first time going to the event and I didn’t really know what to expect. It’s also the last MGF ever, but we’ll talk more about that later. Read on!

 

20171024_154110.jpg

Suddenly, Mobile Games Forum!

Originally, I wasn’t planning on going to the MGF. Usually I know which conventions I’m going to travel to, and I plan it out way in advance. With this show however, I was notified of it by a Mysterious Unnamed Person who was also going. He told me to check it out.

So I looked at their website, which didn’t have a ton of info, but it had a link to download an information packet. I put in my detailed info (email address, phone number, job title) and got the PDF. To my utter shock, I then received this message on LinkedIn from a woman named Louise Gibson-Bolton.

Invitation

This is a first – being invited to an expo for downloading a packet?

I assume she was monitoring the downloads and looking for more people for this show. I asked her what the catch was – no catch! They just wanted more people, especially developers, to come to Seattle.

Immediately, I was super suspicious of this. Who does that? Who invites a no-name developer like me to a show? What do the tickets normally cost? Did anyone else get this red carpet treatment?

20171022_153005.jpg

My decision – stay at the Belltown Inn. It was quite nice, and just three blocks from the expo.

I couldn’t say no to that offer! In addition to the free pass to the show, I was also going to be in Idaho the weekend before the MGF to attend the wedding of a close family friend. That meant travel was already paid for on the way over – I just needed to get a hotel quickly and then pay for a plane ticket home. Why not stay in Seattle and see what the MGF had to offer?

 

20171024_090902.jpg

Louise Gibson-Bolton Vanishes

During the opening keynote on the first day, the crowd got two unexpected pieces of news about the Mobile Games Forum. First, it has a new director named George Osborn (pictured above) who has worked on this show previously and is now in charge. Second, the show is being rebranded as Gamesforum, making this the last true Mobile Games Forum ever. The idea is to branch out into other platforms besides mobile, especially since many games are going multi-platform these days.

Louise, the woman who invited me, was nowhere to be found! I never got the chance to properly thank her. I gather that she must have been fired or forced out of the organization, because I can’t imagine why someone would quit in the weeks leading up to a really important show. Don’t quote me on that, though. The official line is “she’s since moved on.”

The reason I’m harping on all this is because there are some parts of MGF that were really disorganized, and some parts I loved. I choose to believe that the worst parts of this convention were due to team politics and shifts in management. My hope is that the new director can improve on this show and take Gamesforum in a better direction.

 

20171025_155626.jpg

Talk About The Convention, Frank

Please don’t assume that these blog posts are narcissistic bragging about my world travels. My goal here is always to give people a warning about what they’re getting into when they buy plane tickets and fly across the country to go to an expo. If you’re not an industry veteran, you’re like Jack and I – we never know what to expect and money does not come easily. Here’s my honest accounting of what the show offers and what needs improvement. I don’t score these shows, I just leave it to you to make a judgment.

 

20171024_093419

Sponsored Talks Are Dry and Fruitless

This might ruffle some feathers, but one thing I hope Gamesforum changes is relying on sponsored talks by companies. Not all of these were bad! I caught the last half of the EA Plants Vs. Zombies talk on the second day, and it had some interesting revelations about how they retain players.

But for the most part, the smaller the company, the more useless the talk. These minor players are clearly just trying to sell you something (“Buy Appodeal!”) and they don’t have enough experience to give you case studies you can apply to your own game. It’s really just a sales pitch disguised as a talk. Pass on these whenever you can. The Appodeal one in particular was just this dude reading from slides, and I still don’t really know what their business does. Because they were the main sponsor, this talk came right after a keynote by a woman from Minecraft. Sadly, MGF had a lot of “Appodeal” talks!

 

20171024_122845.jpg

The Panels Were Better

I actually really enjoyed a few of the panels at this show. They sat industry veterans down and just asked them candid questions about their business. The Mobile Games Forum is hyper focused on finance and marketing, so it’s not like the Games Developer’s Conference. You won’t find any info about how to make artwork, or music, or program – but you will get insights into developing business models and doing business overseas.

The panel pictured above was all about doing business in China. I always love hearing about other cultures – especially Chinese culture, because their government has a ton of crazy rules and restrictions keeping you from just putting whatever you want on the App Store. I’ll give you a quick one, it’s the most insane thing revealed by Hu Ning of iDreamSky about publishing games in China. Apparently, when you submit your game to the Chinese government for approval, you don’t send them a digital file. You send them a phone with the game installed on it! The rest of the panel was very illuminating!

20171025_121125.jpg

Some panels gave me a wake-up call. There was one panel about cloud-gaming that started with the blunt question: “are premium games dead?” Their conclusion: yes – premium is just 7% of the market at this point, and it’s shrinking. Yikes! Now, this panel was kind of just an advertisement for Hatch, which essentially markets itself as a Netflix for mobile games. But it also had a ton of depressing insights from developers like Ryan Payton, who told the audience a sad tale about how République was a financial failure despite releasing as a premium, episodic title with the full backing of Apple’s marketing team.

We’re not changing the business model of Where Shadows Slumber just because I got frighted at a panel. But we may be more open to experimenting on some platforms, especially Android, where premium doesn’t do well anyway. I never want to do ads or some kind of energy-store though, so don’t worry. (We even made an April Fool’s Day joke about that…)

 

The Food: Excellent

We never wanted for food at this show. Look at that menu! They had breakfast and lunch buffets, and even a snack bar around 4 pm when things were dying down. When I say a snack bar, I mean a literal buffet of candy. If that’s not worth the price of admission, I don’t know what is. This probably has more to do with the choice of venue, but hey – it’s a good choice and it should be noted.

 

20171024_160354.jpg

Go Home “Meet The Publishers,” You’re Drunk!

One of the messiest experience was the Meet The Publishers event. If you’ve been to publisher “speed dating,” you know what to expect: the publishers all have their own tables, and developers take turns making their way through the room in an orderly fashion pitching their game. Everyone has 5 minutes with each publisher, a bell rings, and it’s time to hand them your business card and move on.

Meet The Publishers at MGF was not like that at all. The publishers had their own tables, but there was no way of organizing the developers. George told everyone to kind of just find someone to talk to and go up to them. Developers often pitched their game with other developers right there. It wasn’t clear how much time each developer got, and George didn’t have a megaphone or a bell to ring when five minutes were up. Instead, he had to just shout over the din of the crowd when it was time to move on.

Some of the Publishers I talked to afterward were pretty angry about this. They wanted to see games, but since it was so disorganized apparently non-developers were going into the room and pitching to them. (“Buy Appodeal!”) George had to explain to these guys that this wasn’t the purpose of the event, but I can’t quite blame them for taking the opportunity. I kind of felt alienated since most publishers were looking for freemium games, and I got brushed aside by all but one.

We’re not seriously considering getting a publisher (except for China!) but I would have appreciated their feedback. Maybe I should just stop going to publisher speed-dating since we decided we’ll handle the global roll-out on our own…

 

20171024_142240.jpg

Adrian had a particularly impressive setup for Meow Wars.

Amazon Developer Showcase

I thought it was great that there were some actual games being featured at the show in the main hall! You could walk right up and play them, or talk with the developers. Or both! At a strictly business conference like this, sometimes it’s easy to forget that we’re publishing games, not virtual slot machines. There weren’t many, though – I think it was just Meow Wars, Cat Date, Tiny Bubbles, Tumblestone, and one other whose name escapes me. This section probably should have been larger.

 

20171024_134751.jpg

Marketplace

Nothing really appealed to me in the marketplace, which was a separate room where companies set up tables to sell their products. This would probably be more appealing if there were games here – or if the products were designed for a premium title. But, understandably, there were a lot of ad networks in this section.

PornHub had a table (not pictured) which I find extremely distasteful. There were no kids at this conference, but even so, it’s important to have standards about who you invite. I think the MGF can get by without PornHub’s $2,000 table fee, and I recommend they be more stringent about who is allowed to showcase at their events. If they want, I’ll pay them not to include PornHub and other such companies. This is hardly the place for a preachy article about how sex trafficking thrives on the porn industry, so I’ll move on and let you Google that on your own. Needless to say, I found that disturbing and I didn’t spend much time in this room.

 

Dinner

New Friends, and a Virtual Reality Party

Shows like this are great for meeting people! We had a great time going out for drinks and dinner before the official MGF party. This is probably the best reason to go to a conference like this, because you never know who you’ll meet – or where they’ll be working in 3 years. It’s a small industry, and everyone knows each other. So you have to make sure you’re part of “everyone!”

20171024_213711.jpg

This was pretty cool, too: the official party of the show had a few VR stations by this company Portal. They were showcasing mini-demos like the Star Wars VR experience, and larger titles like Valve’s The Lab. This is kind of where VR shines, honestly – a fun arcade experience where the expense is handled by someone else, and you have fun while looking goofy in front of your friends.

It was also probably not great that the party happened the night before the game pitching contest. Speaking of which…

 

20171025_140828.jpg

The Game Dev Showdown

There was a contest at the MGF to pitch your game in front of 5 industry judges. I knew about the contest beforehand, but I didn’t try to join it before I got to the show. On Tuesday, I just said “screw it” and went for it. They mentioned during the opening ceremony that there were two drop outs and I asked Anna if I could join. She told me I’d need a PowerPoint Presentation and a pitch ready to go by 1 pm the next day. I said “count me in!” and got the very last slot in the contest.

I was up until 2:30 am on Tuesday night, but I got it done! There were six games in all, many of whom were on display in the main hall of the expo center as part of the Amazon Developer Showcase. My pitch went quite well, and I got to use a clicker for the first time in my life. Afterward, people commented on how impressed they were with my polished delivery, especially considering I only had a day to prepare. I don’t mean to sound self-centered, but this is one area where I can claim some significance. I’ve done performing arts since 6th grade, and even some improv in college. It’s not a useless skill. My competitors were nervous, and for many this was their first pitch ever. Jack and I both did a bunch of acting at Stevens, and it’s a skill that stays with you – just watch his impromptu interview for PAX East if you need proof of that!

TheWinnerIs.jpg

Image Credit: Dean Takahashi of VentureBeat

You can see us lined up nervously on stage as we await the announcement. The winner was… Tiny Bubbles! It’s a polished puzzle game by Stu Denman, and it deserved to win. He went first and had a bunch of tech issues that weren’t his fault, so I was hoping they wouldn’t count that against him. Then he wowed the audience with his crazy bubble simulation physics, as well as a touching story of how his grandfather inspired the game’s design. Well done! (Thanks to Dean Takahashi of VentureBeat, one of the judges, for the photo above that was used in his article about Tiny Bubbles) Check out the Unreleased Google Beta for that game here, it’s awesome!

20171025_164456.jpg

Where Shadows Slumber won 2nd place (runner-up) in this contest, and they gave me a whole bunch of Amazon goodies! Pictured above is two Fire HD 8’s a Kindle Fire tablet, and an Amazon Fire TV. They also said that both winners would get a feature spot on Amazon’s App Store when we launch!

I was a little stunned when they announced this at the end of the second day. I had done it again – just like when I muscled my way into the Big Indie Pitch at GDC earlier this year – I won a pitching contest just by randomly entering at the last minute! Afterward, George congratulated me on my 2nd place win – not just because he liked the game, but because in his words “you stepped up.” If there’s anything to take from this article, that’s it. So much of success is about showing up, volunteering, and taking risks!

 

20171025_161659.jpg

Don’t Give Up On Gamesforum!

The Mobile Games Forum was a bit messy at times – but it’s over now. From here on out, it’s Gamesforum. Under the direction of George Osborn and Anna Bashall, I have confidence in the future of this conference. It seems like previous leaders put them in a horrible spot, where they had to run a conference on their own at the last second. I don’t envy anyone in their position.

With more time to plan and do things their way, I’m sure future expos will be even better. Hopefully they heed my advice about the corporate sponsorship and try to make talks more relevant even if they are disguised sales pitches. (“Buy Appodeal!”)

This team is based in the United Kingdom, so their next show is over there. I can’t make it to London for the first inaugural Gamesforum in January, but when they return to the United States I’ll look them up! Maybe I can persuade them to come to the east coast? (Psst, it’s a shorter flight for you guys!) In any event, I wish them the best of luck and I’d like to thank them for incredible opportunity!

 

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

You can find out more about our game at WhereShadowsSlumber.com, ask us on Twitter (@GameRevenant), Facebookitch.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.

Hacks Versus Designs

I remember back in the day, when computers and programming were first becoming somewhat ‘cool’. Back then, the coolest thing you could be in the computing world was a ‘hacker’. Hackers were awesome renegades who could tear down opposing systems using nothing but their superior intellect. Being able to hack was one of the best skills you could have. Now, after studying and working in computer science for a while, the term ‘hack’ has taken on a very negative connotation.

When you’re writing code, there are several things that you’re aiming for. The two broadest and most important of these are:

  1. The code works – it does what you intend for it to do.
  2. The code is good – it’s efficient, understandable, and easy to use/improve.

It seems like these two things would go hand-in-hand, and for well-designed code, that is often the case. However, the road to that ‘well-designed’ code is often fraught with terrible, terrible code. So, what’s the intrinsic difference between these two goals, and how does it lead to bad code?

 

boolean

Hack First, Ask Questions Later

When you’re working on a large, intricate system, and you need to add something or make a change, these two goals lead to two different types of results – a hack, or a design:

  • A hack is a piece of code with only the first goal in mind – you’re just trying to ‘make it work’. You don’t want to put a lot of thought or time into the implementation, you just want it to work.
  • A design has both goals in mind – you’re spending time to come up with a good solution. You’re willing to work a little harder to end up with a more robust, long-loving solution.

Designing a solution to a task leaves you with good code. It’s easy to understand, easy to use, and easy to update. The algorithm makes sense, not just in terms of “does it do what I want”, but also in terms of “does it make sense with the theory behind it”.

Looking at these two descriptions, it’s pretty easy to see – designs are better than hacks. So why would anyone ever want to use a hack to get something done? There are a few reasons.

Designs take more time. You have to come up with a solution, consider its long-term viability, consider how it will interact with every part of your system, present and future, tweak it accordingly, and make sure that it still matches the theory of your application. A hack, on the other hand, involves simply coming up with a quick and dirty solution, and implementing it.

Designs require deeper understanding. In order to fully understand the impact of your newly-designed code, you have to completely understand the current state of your application, remember all of the assumptions you made when coding it, and ensure that your new stuff won’t interfere with any existing stuff (Note that this is much harder to do on a larger team, as there are areas of the code you may not be as familiar with).

Designs are often much larger in scope. When designing a solution, it will often involve creating a ‘system’ or ‘engine’ of sorts. Not only does this take longer to think through and implement, but it also opens the door to a lot of subtle interactions between systems. Hacks are (usually) much more localized – “I’m gonna make this hack here, but I won’t use it in other places”.

You don’t want to spend a lot of effort on code that will be replaced eventually. This is really just a combination of the above points, but it’s an important reason why hacks exist. If you have to update a small piece of code, but you know that you’re going to come in and change the whole thing next month anyways, why would you put a lot of time and effort into designing a solution when a quick, hacky fix will do the trick?

Looks about right Cropped

This is what happens when you leave hacks in your code!

 

Here’s An Example

Let’s say you’re you’re working on a pretty simple game in a pretty simple game engine, using a pretty simple programming language (hint: this means I’ll be using pseudo-code rather than real code). You’ve got your character on the screen, and you want to make him move back and forth along some flat ground whenever you hit an arrow key. You might start out with something like this:

if (keys.leftArrow) {
  dudeGuy.position.x -= 10;
}

if (keys.rightArrow) {
  dudeGuy.position.x += 10;
}

Pretty simple and straightforward – if you’re pressing the left arrow key, move your dudeGuy to the left, and if you’re pressing the right arrow key, move him to the right.

So, you use this code for your movement, and it works, and you continue working on your game. Then, suddenly, you have an epiphany – what if your dudeGuy could jump? You add a variable and hook it up:

int jumpingTimer = 0;

...

if (keys.spaceBar && jumpingTimer == 0) {
  dudeGuy.position.y += 30;
  jumpingTimer = 3;
}

if (jumpingTimer > 0) {
  dudeGuy.position.y -= 10;
  jumpingTimer--;
}

As you continue making your game, you design some levels where you realize that you want the gravity to be less strong, so you have to account for that:

float gravity = 10;

...

if (keys.spaceBar && jumpingTImer == 0) {
  dudeGuy.position.y += 30;
  jumpingTimer = 30 / gravity;
}

if (jumpingTimer > 0) {
  dudeGuy.position.y -= gravity;
  jumpingTimer--;
}

Then you realize that your back-and-forth movement looks pretty choppy, so you decide to add some ‘smoothing’, so your dudeGuy speeds up and slows down:

int movingLeftTimer = 0;
int movingRightTimer = 0;
int jumpingUpTimer = 0;
int jumpingTimer = 0;
float gravity = 10;

...

if (keys.leftArrow) {
  if (movingLeftTimer < 3) {
    movingLeftTimer++;
  }
} else if (movingLeftTimer > 0) {
  movingLeftTimer--;
}

if (movingLeftTimer > 0) {
  dudeGuy.position.x -= 10 / (4 - movingLeftTimer);
}

if (keys.rightArrow) {
  if (movingRightTimer < 3) {
    movingRightTimer++;
  }
} else if (movingRightTimer > 0) {
  movingRightTimer--;
}

if (movingRightTimer > 0) {
  dudeGuy.position.x += 10 / (4 - movingRightTimer);
}

if (keys.spaceBar && jumpingTimer == 0) {
 dudeGuy.position.y += 30;
 jumpingTimer = 30 / gravity;
}

if (jumpingTimer > 0) {
 dudeGuy.position.y -= gravity;
 jumpingTimer--;
}

And,  before you know it, with only a few changes to what we were trying to do, we end up with a piece of code that’s incredibly messy, almost impossible to understand, and prone to bugs and off-by-one errors. Honestly, I just wrote this thing, and I have no idea what it’s supposed to be doing.

Now, this example is a bit of an esoteric one, just to prove a point. However, it is definitely not the worst code I’ve ever seen (or written), and that’s saying something. What should we have written instead? Well, if you couldn’t guess, the above code is an example of a hack (or a number of hacks put together). Rather than examining what it was we needed in the long run, we repeatedly implemented something that did the job in the short term. So, let’s make a design for this use-case, and think about what we need overall.

We want to be able to move left/right, jump, have different values for gravity, and have smoothing on our movement. This sounds a bit like actual physics, so lets steal some important concepts from them – acceleration and deceleration. We’ll determine some rules that match our design, modify the dudeGuy’s acceleration in each direction based on those rules, and then move his position all at once:

float maxSpeed = 10;
float acceleration = 3;
float jumpAcceleration = 10;
float gravity = 3;
float friction = 5;
float minY = 0;

float vx = 0;
float vy = 0;

...

// If the left arrow key is down, accelerate to the left
if (keys.leftArrow) {
  vx -= acceleration;
}

// If the right arrow key is down, accelerate to the right
if (keys.rightArrow) {
  vx += acceleration;
}

// If the spacebar is down and the dudeGuy is on the ground, accelerate upwards
if (keys.spaceBar && dudeGuy.position.y == minY) {
  vy += jumpAcceleration;
}

// Accelerate downwards for gravity
vy -= gravity;

// Decelerate for friction
if (vx > 0) {
  vx -= friction;
} else if (vx < 0) {
  vx += friction;
}

// If we're going to fast to the right, slow us down to the max speed
if (vx > maxSpeed) {
  vx = maxSpeed;
}

// If we're going to fast to the left, slow us down to the max speed
if (vx < -maxSpeed) {
  vx = -maxSpeed;
}

// Update the dudeGuy's position based on our current velocity in each direction
dudeGuy.position.x += vx;
dudeGuy.position.y += vy;

// If the dudeGuy is below the ground, move him up to ground level
if (dudeGuy.position.y < minY) {
  dudeGuy.position.y = minY;
  vy = 0;
}

While we have a similar number of lines of code here, it’s much clearer what’s happening on each line. Every block serves an easy-to-understand purpose, and making changes to the ‘rules’ of movement is very easy. There are a lot of different ways to improve this code, depending on your game’s overall design, but this is a decent, and most importantly simple, place to start.

Another important feature of this piece of code is that it is well documented. Every block is pretty small, but it still has a comment describing the purpose of the block. This is an extremely important part of programming in the context of larger systems – you want to make sure that you (or anyone else) can quickly understand what your code is doing, especially in complex cases. Even though some complex logic might seem simple to you, it’ll definitely seem more difficult when you come back to it in 6 months!

 

A Necessary Evil

Unfortunately, hacks are a necessary evil. While I would love to only ever have to deal with and implement beautifully-designed code, that world doesn’t exist. There’s always a timeline, there are always changing assumptions and new features, and there’s always someone who wants it to be finished yesterday. Inevitably, you’re going to have to write some code quickly, implement a feature that’s likely to change, or come up with a simple ‘solution’ to a difficult problem. In cases like this, you’re forced to use a hack.

Hack

I mean, it works… technically…

It’s not all bad, though. While hacks in general are pretty bad, they can be manageable if you make sure to use them correctly. In fact, I would be willing to bet that any system currently in production (of a certain size) contains quite a few hacks. There are certain qualities that hacks can have which make them a little bit more manageable, and you should try to aim for them whenever you find yourself implementing a hack:

  • Understandable – It’s important that, whatever your hack is, anyone else looking at the code can understand what you were trying to do, and how your hack works. This means leaving a lot of comments around your hack, as well as simplifying the logic as much as possible.
  • Localized – If you have to hack something in, you want it to only be in one place. Every time that code path is used, there’s a chance that something will go wrong. If your hack only touches a small part of your system, then its negative effects will be much less noticeable. This means that frequently-used code paths should never really have hacks in them, while hacks in rarely-used code paths are more acceptable.
  • Known – This is, to me, the most important part of making a hack. If you hack something in and then forget about it, when your system starts failing, you won’t know where to look. If you make sure you remember it (by writing it down somewhere and then telling every person you know), then you’ll know where to look if something goes wrong. On top of that, you’ll always have that hack in the back of your mind, so you’ll be more likely to think of a good design to replace it.

If you follow these guidelines and make sure to try to go back and fix them, then putting hacks into your code won’t end up destroying you.

I hope this was helpful to those of you just starting out in game development – or anything which involves designing complex systems! For those of you who already know a little something about computer science, I hope this at least reinforced your burning hatred of hacks!

 

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

If you want to know more about how to deal with hacky code, or what kind of hacks are in Where Shadows Slumber so that you can exploit them, feel free to contact us! You can always find out more about our game at WhereShadowsSlumber.com, find us on Twitter (@GameRevenant), Facebookitch.io, or Twitch, 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.

State Of The Art – September 2017

Welcome to State Of The Art, September 2017 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. Without further ado, let’s explore the major leaps forward we took in September!

 

Aqueduct-H

World 3, Aqueduct

This World has been started and is looking promising so far. It’s one of the easier ones on the list, since this World is mostly deep water and narrow pathways. Compared to some of the other ones I did this month, that’s a cakewalk.

Aqueduct-0.PNG

The Aqueduct is a cavernous waterway built by humans that Obe explores midway through his journey. The Levels here often make use of light sources that don’t come from Obe’s lantern.

Aqueduct-1.png

This World is not 100% finished – but nothing ever is, at this stage of the process. Jack is currently modifying a water plugin I downloaded from the Asset Store to work with our strange lighting system. There are also highly specific items I still need to model. That always gets left as the last thing…

 

City-H.PNG

World 4, City

I’ve been looking forward to working on this World for a long time. I loved the cool mountain desert aesthetic we had in the Demo, and it’s a shame that didn’t make it into the final game. This is even cooler though – a pueblo style city in the middle of a sandstorm! What’s not to like? (Sandstorm sold separately)

City-0.png

Creating these detailed environments takes time. As I sat down to write this, I realized that 3 of the 5 Levels in the City aren’t even in good condition to show the public! While every Level in this World is functional and the art has been started, very few of them are complete.

City-1.png

Get out of there, Obe! Nothing good ever happens in alleyways…

This World tells a complex story in a short amount of time, and a lot of highly specific artwork is still in the works. Look out for those missing Levels in a future update, and accept my apologies. I spread myself quite thin this month in order to cover a lot of ground quickly.

 

SotA-S-Header

World 5, Hills

I really stretched myself this month by going even further and starting World 5, the Hills. I hadn’t originally planned on doing this, but I got artist’s block on the City and decided to move on. This is usually a good idea – by the time I return to my previous work, I’ve had some kind of epiphany for what to do.

Hills-0.PNG

The Hills are modeled after the dreary cliffs of Ireland. We’ve decided to make this like one long graveyard, with mechanics to match: little tombstones that turn into ghosts when they’re covered in shadow. By the time you shine a light on them again, they turn back into tombstones… but they’ve moved. I think you can get an idea of how puzzles might work here. This is our own twist on the Boos from Super Mario, which behaved differently depending on whether Mario was looking at them.

Hills-1.PNG

The Hills require a ton of very specific modeling to complete, and have proven really challenging so far. I prefer to use modular tool kits because you get more mileage out of them. Even so, you can’t argue with the results! I threw out the aesthetic seen in the Level above because it was too formulaic. It obviously made use of one piece over and over again and I got sick of looking at it. Now the Levels in this World will all look more like the image below.

Hills-2.png

This is now my favorite Level in the game. I hope you can see why! (And it’s not even done, I still need to add little grass bunches)

 

Summit-H.PNG

World 6, Summit

Since I was feeling insane this month, I actually got started on World 6, Summit. This is basically the top of a snowy mountain. It’s really not done yet – you could hardly call it “started”. I don’t even have any screenshots to show you! But maybe you can get a sense of what they’ll look like based on my Concept Art drawings of Jack’s finished prototype Levels.

Obe ventures out into the freezing cold. He’s completely alone… except for the ghosts of the damned! (Ghosts of the Damned sold separately)

 

 

Don’t Expect Much From October

I apologize for the lack of video this time around. I usually like to keep myself to the high standard of showing footage of the game instead of screenshots. (Video is harder to fake, which means I have to own up to failures in the game’s visuals.) This time around I took the easy way out, since I’m leaving today to go on a crazy week-long business trip. Speaking of that…

September marks one of the greatest leaps forward the game has taken aesthetically so far. To be honest, I was overcompensating for the fact that October is going to be a slow month. Because of this trip (and another during the middle of this month), I won’t have as much time as I normally do to make artwork.

In a perfect world, I would finish World 6 and 7 before we get to November, but I doubt it. Between Unite 2017, IndieCade 2017, and the Mobile Games Forum, I’m missing an entire 2 weeks of work this month. That’s insane! At least you get to hear my thoughts on the shows in next week’s blog post… [ ^_^]!

Just warning you not to get too excited. See you at the start of November for another recap!

 

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

We hope you enjoyed this update about the game’s artwork. 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), Facebookitch.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.