Valley of Shadow Devlog #8

Hello again, Nick here. It’s been two months, and by my account that means we’re due for another Valley of Shadow devlog! This time I’ll talk about the progress we’ve made since July, our work-in-progress marketing strategy, and the designing that we’re currently in the middle of.

Spoiler Warning! This devlog will have spoilers as I am going to go into some detail about the end of the game, as it pertains to both the story and the puzzles.


Development Progress

It’s been two months since the last devlog, and in that time we’ve completed some very important design work - some of which is still ongoing.

Puzzles

As far as puzzles, I designed and implemented some of the most important puzzles in the game - a series of puzzles we call the “Repopulate Home” puzzles. Think of them as the puzzle climax of the game - the point at which all of the puzzles converge and tie together with the story and environment as closely as possible.

it’s difficult to see here, but reflected in the mirror is a light symbol

Their name, “Repopulate Home”, signifies Anthony’s move through the home to repopulate it with warmth and light toward the end of the game, when the house has largely become a hollow shell of dark memories. Each room in the house (kitchen, living room, bedrooms, etc.) is now a self-contained puzzle, and solving it grants access to the next room. The puzzles themselves are integrated into the home, rather than being out-of-place elements that just happen to be in the rooms for the sake of creating puzzles.

We even went as far as changing the Light Symbol itself, which is used heavily from the beginning of the game, so that it more seamlessly integrates into the house. Changing the Light Symbol should also solve another problem that recently surfaced in Chapter 2, where the Light Sensors are combined with the Force Sensors. We got feedback that the combination wasn’t obvious, and by making the Light Symbol more distinct, it should be clearer.

I can’t talk about the Repopulate Home puzzles without talking about my very favorite aspect of them - the Metapuzzle. I love when games have metapuzzles, and from very early on I’ve wanted one in Valley of Shadow. A metapuzzle, for any non-puzzle-nerds, is a game-wide puzzle that often isn’t obvious, and requires bits and pieces of knowledge or items from all across the game. They are always optional, and only for the most dedicated players to solve.

A glimpse at the metapuzzle, in an unsolved state

Well, we finally have a metapuzzle in Valley of Shadow, and it’s tied into a really cool story moment that I think serves as a great “payoff” for solving the puzzle. The puzzle itself is built upon the previous optional puzzles in the game, which are linked to game-parody posters, strategy guides, and magazines. By solving these optional puzzles, you unlock said posters and guides in the attic, each of which contains a Puzzle Sensor (Light, Force, or Fire). Once all of them are unlocked, you can complete the puzzle, which opens a portal to the story-based payoff.

Frankly, I fretted over these puzzles for months, and did a lot of research (i.e. playing other puzzle games) leading up to them. I’m glad to finally have them in the game, and able to play through them. I still have a bit of work to polish them up, but am very very happy with them so far.

Story

A single page of the script, surrounded by inspiration

On the story side of things, Anthony has finished writing the script! This is an obviously huge milestone, and we now know the full story from start to finish. We’ve had an outline of it for months, but it’s now fleshed out with line-by-line dialogue between Anthony and Emma. It’s still likely to change a bit here and there as we fit it into the levels, record the voiceovers, and iterate based on playtesting feedback. But this is still a huge deal that we’re very happy to have accomplished!

Additionally, Anthony and Maria recorded all of the voiceovers for Chapter 3. They haven’t been placed in the game yet, but the audio files are prepped and ready to go when the time comes! We even uploaded a peek at the voiceover-recording process for Screenshot Saturday in August, in case you missed it you can check it out here!

Chapter 2 Build

We also released a new Chapter 2 beta build, primarily aimed at addressing feedback on the new puzzles. Patch notes were uploaded to Steam, which you can read here. It’s ready for more playtesting, so if you are reading this and haven’t yet played Chapter 2, join our discord and get involved!

There was one snag I ran into while making the Chapter 2 build. I recently rewrote the footstep audio logic; previously, we used a bunch of box triggers all across the game to change the footsteps (e.g. from stone, to snow, to wood). Now, it uses the actual texture that is underneath the player. I learned this method from another project I’ve been working on, and thought it was brilliant, so I implemented it in our game too. It’s much less error prone, because we no longer have to manually deal with footstep triggers across the entire game.

However, when I deleted all of the old code (because I hate keeping unused assets in the project), I suddenly found myself running into a bunch of invisible walls everywhere I went. Some of them weren’t a big deal, but there were a number of them in the critical path, blocking me from progressing through hallways.

Before long I realized the problem. When the game first boots up, each trigger in the game checks what its type is and, if it’s a type that the player is supposed to move through, it alters its collider to let the player pass through it. For my fellow unity devs, that just means it sets isTrigger = true. Previously, the footstep triggers were handling this. But when I deleted the code, the footstep triggers no longer existed, but their colliders still did, and they didn’t realize the player was supposed to move through them!

So that was the problem, and the solution was to painstakingly go through every single object in the game - of which there are thousands - and find the colliders so I could delete them. Well, that would be the solution if I wasn’t such an automation enthusiast. Instead of doing all of that manual labor, I wrote a script to do it for me! Since this isn’t a unique-to-Valley-of-Shadow problem, I will post the script here so others can benefit from it.

So here it is: a short script that combs through all the objects in all open scenes, and prints out any object with a missing script on it. Clicking the printed statement in the console log will then highlight the object in the hierarchy. Note that if you’re going to use this, you have to put it in a folder called “Editor”, and it will make a menu item in the top bar under “Tools > VOS > Validation > Find Missing Scripts”. You can rename this path to whatever you want.

using UnityEditor;
using UnityEngine;

public class FindMissingScripts : MonoBehaviour
{
    [MenuItem("Tools/VOS/Validation/Find Missing Scripts")]
    private static void FindScripts()
    {
        GameObject[] objects = FindObjectsOfType<GameObject>(true);
        foreach (var go in objects) 
        {
            Component[] components = go.GetComponents<Component>();
            for(int i = 0; i < components.Length; i++)
            {
                if(components[i] == null)
                {
                    Debug.Log("Missing script on " + go.name, go);
                    break;
                }
            }
        }

        Debug.Log("Finished searching. If nothing is printed above this then there are none!");
    }
}

Marketing

You may have noticed that the Valley of Shadow Twitter is more active than ever, regularly participating in Wishlist Wednesdays and Screenshot Saturdays. And if you haven’t noticed it, then, surprise! This is 100% due to bringing our sister Maria on board to help us out with social media! She has been instrumental in the game already, due to voicing Emma, and now she’s also helping out massively by defining our social media strategy as well as actually putting the content together and posting it. I can’t express how much of a relief it is to be away from home on a Saturday only to get a discord message on my phone from her that reads, “Screenshot Saturday is posted!”

The full devteam, hard at work

Right now, our strategy only involves Twitter, with a little bit of YouTube. Over time we will include other platforms, as we figure out how we can grow in a sustainable fashion. We want to avoid taking on 5 platforms all at once, posting every day on them, and then getting burnt out in a month. Ideally, our strategy is something we can regularly perform from now until launch.

Our grander marketing strategy goes beyond social media, though we’re still working through the specifics. At the moment, it’s shaping up to include social media (Twitter, likely Facebook, and perhaps Instagram), blog posts, interviews with journalists/streamers, and YouTube content. We hope to include regular “marketing initiatives” every month or so, which are one-off things we do to see how they perform, and then adjust or drop them accordingly. We’ve a few cool ideas for those, and are already performing one of them. More on those in a future post, perhaps!

I’ve come to realize that marketing is a big hairy beast of its own - one which all successful gamedevs must face at some point. But I’m slowly tackling it, with the help of Maria and Anthony. Some GDC videos have been instrumental in forming my thinking around the topic, in particular Michelle Lega’s “No-Budget DIY Marketing for Indie Games” and Rebekah Saltsman’s “It’s Better To Be Friends: Marketing Asks and the Reality of Game Production”. On top of those, Rami Ismail’s blog and Chris Zukowski’s “How To Market A Game” are both invaluable assets as well. If you’re reading this and you have other helpful resources, please send them my way!


Upcoming Work

Looking forward, we are really starting to eye up a beta version of the game. Chapters 3 and 4 (the second half of the game) are both only half-implemented, and completely untested at the moment. Right now, we’re pushing hard to finish designing Chapter 4: Anthony is overlaying the script onto the levels, and I am designing and implementing new puzzles to accompany it. Once that’s complete, we’ll have a good broken-down view of the game, and can dive into implementing it.

A sample of chapter 4 laid out in miro, showing dialogue, flow, and comments (click to enlarge)

At this point, I am more interested in a beta of the entire game, rather than a standalone Chapter 3 beta like I previously wanted. I’d love to hand our playtesters the entire game, and get their feedback on it from end to end, rather than individual chunks of the game like I’ve been doing in the past. That will also let us get more serious about seeking out additional playtesters, and it’ll feel great to have a “first draft” of the entire game that we can start to hone and polish on the road to release.


That’s it for this devlog! It was quite a long one, and pretty top-heavy. But if you’ve made it this far, thank you for reading! I hope to be back in two more months with another devlog, and then probably a year-end roundup. And hopefully (pray for me) a beta announcement thrown in there somewhere!