Wilderplace update: NPCs, usability improvements, developer tooling

Saman Bemel Benrud • Sep 14 2020

The thing about waiting a year and a half between devlogs is that I now have plenty to write about. Even though I’m back at work full time, I’ve been chipping away at Wilderplace on weekends and evenings. Here’s an overview of what’s new.

Sketches for the new drone and logger characters

New non-player characters

Non-player character interactions are now a central element in both the game’s puzzles and the game’s narrative. Originally, the player and the demons were the only actors in an otherwise passive world. Now, I envision each level as a miniature simulation where you are one of many actors shaping the forest.

The mining drone is one of these new actors. The drone seeks out the nearest stone, breaks the stone, then runs home. The drone can’t be possessed by spirits, so when it destroys a stone, the stone’s spirit releases into the world. Once the drone has mined a stone, it takes on the character of stones, and enchants nearby ground. Here’s the drone in action:

The drone needs to watch out for Loggers. Loggers are real luddites, so they’ll chase the drone and try to destroy it. The drone tries to evade loggers, but it can’t always escape, especially when the player intervenes:

I still have a few more characters to add. I’ve been pleasantly surprised by how much I’ve been able to get out of the few days I spent implementing A* pathfinding (thank you Red Blob Games). Some surprisingly complex interactions emerge from this one algorithm.

Usability and quality of life improvements

Playtesting helped me identify and fix common stumbling blocks. The biggest issue for less experienced gamers has been the control scheme. Originally, some actions required swiping, some required tapping, and some required long-pressing. All actions can be now executed by swiping:

I’ve overhauled the tutorial five times. Now, it’s incorporated directly into the core game. It’s easy for advanced players to ignore, and it’s enabled even non-gamers to get through those crucial first few levels:

The game now supports a four different input modes: keyboard controls, touch controls, mouse controls, and even gamepad controls. Thanks to the gamepad API, any bluetooth-compatible controller works with Wilderplace:

There’s a new pause menu with an illustrated inventory and a world map:

Theres’ now a basic save system. Last winter break, I refactored the game so the entire game state could be serialized. At any given point, a player’s current game is represented by about 100KB of JSON (uncompressed). For now, I’m saving user’s state to browser localstorage, but I’m hoping to move to cloud storage soon.

Developer tools

After implementing serializable state to support saving, I realized that it’d allow me to make a built-in level editor with live-reloading. I love building creative tools and have lots of experience doing it, so it was impossible to resist going all-in on an in-browser game editor. Changes made in the editor are reflected in real time in the game and they’re also saved to disk using a little Node.js server. This editor is the main way I work on levels and dialog:

I use the editor to plan and arrange the overall game structure. I can now reposition levels with drag and drop, and create and delete levels with a single click. All the levels are color-coded by completeness, so I can use the world map to track my progress. The editor has space for me to take notes for each level. Integrating editing and project management tools into the game was inspired by the system used in Breath of the Wild:

What’s next?

Everything still needs work. My immediate priority is to step back and gather feedback. On top of whatever priorities emerge from feedback, I know I need to polish the art and animation, add music (We have sound effects now! Thanks for the help Ian), make illustrations for cutscenes, improve performance, and add a lot of content. At some point I need to figure out how to actually publish the game (Electron + Steam? Phonegap + App Store? It’s all new to me).

Finally, I’ve been mulling over these big design questions. Should I:

  • Use procedural generation to vary the game on every playthrough?
  • Add an equipment system so players need to be more strategic with spells?
  • Track scores somehow? Number of steps to clear each level seems like a way to make this work.
  • Add branching paths to the story?

These questions hinge on whether I want Wilderplace to be more casual and story-driven, or more roguelike and systems-driven. Maybe I need two modes? I want it all. Do I want to add months of work to the project though? Is Wilderplace a venue for me to take my time and learn and explore, or do I actually want to ship? Hard to say.

I’m at a point in development where feedback is really valuable. If you’d like to give the latest build a spin, email me at samanpwbb at gmail dot com.

👋 Thanks for reading.