Friday 14 April 2023

Off Grid Dev Blog - "Still Alive and Hacking"

How long has it been since we've posted something in our dev blog? 10 months?! Sounds like it's time to remedy that and give all of you an update about what's going on in the Off Grid development!

 Shall we get the excuses out of the way? It's not you, it's us. Jokes aside, we have been juggling other projects to keep the company wheels rolling and put bread on our tables. This meant that we needed to spread Off Grid development a little thin to focus on contract work. Ultimately that would have made for some boring and heavily redacted blog posts! (Gotta respect those NDAs!)

Our bad. We never planned to be this quiet for this long, and we know radio silence is not a good look for an indie game team. So, we are sorry about that!

The Good news is that not only are we still alive but Off Grid development has been picking up pace. We even expanded our team. So let's introduce our newest member:


tap tap Is this thing on? Hi, I'm Stef and I'm an Artist! My background is in 3D art, VFX, production and filmmaking, so I'll likely be wearing a few different hats as and when it's needed, but for now I've been getting to know the project, learning it's unique quirks and doing some layout and modelling. I feel really lucky to be joining at this stage of development, because the rest of the team have already built so many awesome tools and created tons of processes which means I get to focus on all of the fun parts of making art and none of the pain! What a dream!

Bring life to a world...and passive aggressive post-its

A game environment should tell a story. Look around anywhere you visit IRL and I bet you could tell a lot about the people that use that space from the things they left behind. When I approach a new set piece, I try to imagine the people that use the space, are they tidy? Do they love where they work? Are they slackers or jobsworths? What about the quality of the space? Is it run down, or high tech, were the contractors well paid professionals, or cowboy builders on a budget? Knowing the vibe of the place, helps you make artistic choices, but also brings personality and character to your locations.

This is the Ascent workplace kitchen. (Work in Progress) Can you tell that the people here don't like their jobs, or each other, very much?

The Workplace

The workplace is one of the first areas you see in Off Grid, and it is a perfect setting to be playful as an artist. I love that this is a shared building of two thoroughly different companies. On the one side you have Joe's place of work, Ascent Auditing, a company that is so boring and stuffy you'd be forgiven for thinking you'd gone back in time. On the other side is FIRESTREAM (Reliable, Fast, Smoking Hot Internet), an ISP that thinks it's Google, but like, cooler, you know? When Rich and Pontus first described Firesteam to me, they said "you'll probably need to make some beanbags".

So here are some progress shots of the contrasting lobby entrances.


...and now for an update from the game mechanics side of things:


This is something I actually started working on even prior to our last blog post, but had to push aside for some other features we needed quickly, plus the big clean-up work we talked about in the previous post. But now that we got the chance to pick up Off Grid development again it was easily the first thing on my list to deal with:

 Problems with the old App system

Using apps and the data view as your main "tools" to progress in the game has always been one of the core features of Off Grid, and something we've iterated on over time a lot. The Lua scripting side for apps alone has seen some major changes over the years to get things to a point where apps have a lot of power and flexibility and as much of it as possible is on the Lua side, rather than something hardcoded by us on the game side. And I've spent months tweaking the tracking system to balance the time the player can use the data view, and then even implemented a second cost mechanic just for the apps themselves. But even then there were some major issues with the mechanic, and using the apps & being aware of the tracking time was more tedious than it was fun. So I sat down and started writing some bullet points about what was wrong with the apps, and what the mechanic really should be like instead:

  • Player needs to be aware of which apps they are using at a given time
    • App wheel only shows some of the apps the player has in use, and while there is support for showing a stats icon for an app, that's separated from the apps themselves, and since they aren't something the player actively uses during gameplay, it's easily ignored.
  • Player should feel like using one app over another is a choice they make
    • Currently the apps are just something you are required to switch on, and there rarely is any good reason to toggle them off. When you might need to do it, it feels like a chore rather than a choice.
  • There needs to be a clear difference between active and passive apps
    • Some apps are like tools or weapons in other games, something the players can actively use to do something. Others just run in the background, maybe providing some information (like the light level monitoring app), or even just toggle some game features on & off (like the Flutter and Guide apps). But how each app actually behaves is not communicated in any way.
  • Cost of using an app needs to be known before using it
    • Apps that have multiple possible features make it hard to show the cost, for example DataUtil app allowing the player to both download & delete data should really cost more when you do both these things at the same time to be balanced, but that's not doable with the current system.
  • App options that make major difference in the app's behaviour can be lost and forgotten easily
    • No (or less) options, more separate apps!
  • Spectrum/DataView should not be an app
    • It has it's own special keys and behaviours unlike any other app
    • It creates a weird requirement for other apps of always needing to combine them with another app (Spectrum) or they a re useless
    • It's cost is handled in a different way (tracking time rather than NetPoints)

For anyone who has actually played the game these might sound pretty familiar. And if they don't, they definitely are familiar to me based on standing behind people's shoulders and observing them play the game at different expos and events.

...and my attempts at fixing them:

To fix all this, I decided it's best to consider apps same as using different skills, spells, or weapons in RPG games etc, something the player would actively choose and switch around during gameplay based on both the situation, but also their preferred play style. This meant actually adding some limitations compared to the old mechanic, automating some things, and then adding some more features to make the apps more interesting and powerful, just in a different way from the previous system. And, ultimately, just making more apps, with more variations, and creating a path to even getting upgraded apps over the span of the game.

For starters, I got rid of the old AppWheel, and instead replaced it with a fixed-size quick selection dock. This means the player is now limited in how many apps they can have available to use at the moment, and need to be more active in switching the apps based on the situation they are in the game. Which actually is an advantage in terms of being aware of which apps the player has and swapping them to others more a part of the gameplay loop. It also has the added benefits of all apps now being visible, which means things like app icons notifying the player of something are actually doable. Also, we can add some nice keyboard number key shortcuts for them...

App icons themselves also got a bit of a redesign, since they now need to make a difference between an active app and a passive one, and provide the player with some information about how much using the app will cost (and if the cost is by consuming NetPoints, like active apps do, or by reserving them like passive ones do). To make room for all this I moved app name to the dock side, and that also gave more space for displaying additional information and app description there.

The next big change was limiting the player to using only one active app at a time. The apps are the player's tools, and following my beloved Unix philosophy, each app should do one thing and do it well. And switching to different ones for different things you do should become a natural part of the gameplay.

This links with the removal of the Spectrum app to access the data view. It was always a weird thing, something you had to turn on in order to use some other app.* So I automated it. Switching an active app that uses data view on now also turns data view on automatically, and switching the app off disables it again, which makes it much less tedious to quickly use apps and then switching them off again, avoiding the data view timing out. I also adjusted the tracking time behaviour so as long as you don't let it time out, it'll quickly start recovering from where you left it, again making it favour quick use of apps and then switching them off again instead of just leaving things permanently on until you run out of tracking time and NetPoints.

The player does still have the option to turn of data view, as that's an useful tool beyond it's connection to using the apps, it's just not displayed as an app any more since it never worked like any of the other apps, and now it's represented as a separate game mechanic with it's own keyboard/controller buttons like it always really was anyway.

Beyond all this, there's of course a lot smaller changes and additions, for example I've added Lua API support for the apps to print out text into the console window next to the NetPoints/tracking meters, and set up support for coroutines with time delays, to allow for more feedback to the player directly from the Lua Apps we and modders can make. And I also made better use of the AppWindow system that was used by the SSH app in some very specific situations (you might have seen a weird window with a skull&bones background pop up briefly when trying to connect to a device that was locked, you didn't have password for it, but had collected enough metadata about the devices owner to try to guess the password). That's now available for all the apps to use. Hopefully these options will help make the apps feel more like they are actually doing something, and to distinguish them from each other better.

There's still some work to be done related to this, I'm currently working on Apps page in the pause menu, and how it deals with assigning the apps to the specific slots in the new AppDock. And the whole RadialUI and how it'll work with all these changes is a bit of an open question at the moment. But I've updated some of the existing apps to use the new features, split some of them into different versions (for example a data copy app with shorter range and low cost, plus one with longer range but higher cost), and even created some new more complex ones (FlutterSearch, which searches for all the valuable data of a NPC and downloads all of it, but at very high NetPoints cost, plus an app that let's you install a routing program to devices you've hacked, gaining you extra NetPoints and through that the ability to use more expensive apps for the rest of the level), and at least to me it feels like my way of playing the game and using the apps has changed and all these changes have helped resolving the old app system's issues. We'll see in the long term as more people get to test this, and as we write more new apps of course!

See you next time!

...hopefully in a lot shorter time than between this and the previous blog post :D Meanwhile, we appreciate anyone wishlisting Off Grid on Steam, and of course if you haven't done so already, you are more than welcome to join our Discord channel to chat with us!

No comments: