Hello Folks,
If you've been following along on the devblog for a while you will know that OFF GRID's NPC A.I. is quite extensible, moddable and able to create interesting dynamic behaviours, we've been continuing to refine and polish this of recent, and this blog will dig into a few of those changes.
One of the things those of you who are players in our First-Access testing groups have commented on regularly is that these complex behaviours can be hard to pick up on some times. Fundamentally there is one word used in game development to describe this, it's down to having a lack of "Juice". Creating juice in a given system is essentially the art of designing satisfying player feedback with animation and audio, and we have been digging into this specifically in the context of our AI recently.
NPC reactions
It's a small thing, but up until now you could only tell NPCs were receiving data by watching the networks in data view. We have now improved the NPC reactions so that they physically respond to data too.
Similarly - showing what an NPCs behavioural model is upto has been tricky just through animation. We had hoped to just show what NPCs were thinking for players to deduct their next move from purely through character animation, in reality in a 3rd person game you are often so far away from the characters you are watching that this proves very difficult.
We decided to move to a more Metal Gear Solid Style system of core NPC thoughts and behaviours being identified as icons above their heads at certain times. It's pretty early in testing but it certainly seems to have improved things, more on this in future blogs as the feature evolves.
Another is the fact that the modders we have testing the tools to make their own levels tend to want to be able to make more expansive environments and put more random background NPCs in to their content without having to write or design specific AI routines. They want to be able to drop random wandering NPCs in, *in walks the Wander NPC system*
So this doesn't end up becoming a book rather than a devblog we'll focus on this particular system as the deep dive for this post, and we can dig into the others previously mentioned here in future posts as they mature.
The Wander NPC System
Essentially the bulk of AI work last sprint was creating a new system to easily have more neutral or non-enemy NPCs in a level without the need for the resource intense AI calls the main NPC system uses. This helps bring to life many of the environments and makes levels set in public spaces seem somewhat more realistic. We decided to call this lightweight AI the WanderNPC system, to differentiate it from the core and more complex NPC AI.
With the "normal" NPC system, every character has an agent definition to control its behaviour. This is good for having various types of NPCs in a level, but every NPC needs to be defined in the mission script, so it's not exactly a quick and simple way to spawn various characters scattered in a level. We needed a system to spawn NPCs more easily and without any specific AI, just different characters with different props and colors wandering in a level without any bigger purpose, except filling the level.
To use this new system you only need to use the respective function in the LUA API, specifically the function "Mission.SpawnWanderNPCs", this function has some parameters to easily change the spawned characters. They are the following:
- spawnpoint : Is of the type string and is the only required parameter, the point selected to spawn is going to define the area that we want to spawn all the wander NPCs, every wander NPC is going to be spawned in a random position inside that area; the spawned area is defined by any position that a navigation agent can walk between the selected spawnpoint at any random position inside a specific radius, the wander NPCs cannot use doors, so doors and walls are normally the boundaries of a spawning area.
- quantity : Parameter used to define the number of wander NPCs to be spawned at the same time in a specific area, if this parameter is not manually set then it's only going to spawn 1 character
- characters: This defines what characer models / prefabs the system will spawn, at random.
- headprops : Like the name suggests its possible to define a prop or a group of props for the characters to use, the character is spawned with a prop or none in a random way, and never more than one prop
- colorTextures and metalTextures : It's possible as well to randomize the color and metal textures of the characters spawned, if none is selected each character will have its default textures
- gestures : Sometimes the wander NPCs will run an animation when they tops momentarily, this animation will be a random one of those selected in this parameter
As you can see, with this new system it's very easy to spawn various wandering NPCs, and it's also very flexible, by just changing some parameters it's possible to have a diverse crowd in a level, making it possible to have even more unique looking levels!
New Content - The Harbour Terminal
Since the last blog post we've spent more time designing and modelling for the Harbour level's main building. This one is a bit different from many of our locations, the main building itself is big enough to be a full level on it's own.
Like the rest of the Harbour, we've made it to support lots of alternative routes through the level, more than what we'll likely enable for when you play this level the first time. Let's just say that we have some interesting plans for that...
Changelist and other updates :
Content (Level Design and Art)
- Intro at the Apartment - player guidance and tutorialisation
- Courthouse - more advanced devices and puzzles
- Harbour - creation of areas for future expansions to the game
- Creating the new Wander NPC system
- Start on AI behaviour icons system
- Reactions from NPCs and their corresponding animations
Modding and Lua API additions
- Player path tool now supports connections between paths
Bugs fixed
- AI reacting with a Radio
- AI Pause
- Save time reduced
- The save system also save the player crouching / standing state
- Use item button visible after loading an autosave
If you haven’t already - be sure to wishlist Off Grid on Steam - each wishlist makes a big difference to us, and we really appreciate your support!