NPC behaviors: Schedules & Owned Stuff
On this update we'll take a closer look into how the NPCs will behave on the Adventurezator. Jimmy Utterström asked us a question in the comments, and I decided it deserved a full post about it, since it will play a big part in shaping the gameplay of all adventures created with the Adventurezator, and we so far haven't yet given much information about it.
The two features I will now detail are right next on my development queue, and the two major systems to be implemented before we can start alpha testing - so feedback is now highly welcome, before it starts to get real.
NPCs by default won't do much if not customized - they will occasionally wander around to a random location during the day, come back frequently to their starting position, try to find an available bed to rest in the night, and occasionally take a leak or take the default action on any objects that are close to them. Pretty good to make a village feel a little alive, but hardly Oscar-winning stuff.
That's where schedules come in. When right clicking on an NPC in the level editor, one of the options will be to set up the NPC's schedule. As always with the Adventurezator, our goal is to design everything to be very simple to use, yet flexible and powerful enough to give plenty of variation on the gameplay experiences that can be created. With that in mind, an NPC's schedule will simply be a list of Tasks, which consist of:
task = an object, a starting hour, an end hour, and a weight modifier
This means that at starting hour, the NPC will try to move to the designated object, and then will perform the default action on it (like sitting on a chair, for example), until the end hour. If there is more than one action defined at the same time slot, they will be distributed according to the weight modifiers.
Let's take a look at two similar examples to see how everything ties together. Let's say we want Bob to be a guard, and have him sitting in a chair, guarding some door.
Task #1 = Chair, 09:00 - 17:00, 95
Task #2 = Potty, 09:00 - 17:00, 5
(it may not look so simple when put like this, but there will be watches, sliders, and pointys-and-clickys to set it up easily)
This will have Bob sitting in the chair most of the time, but he will occasionally (and randomly) leave to take a leak - leaving a window of opportunity for the player to do whatever nefarious business he has beyond Bob's door.
If we want Bob to go take a leak at very specific, non-random times, just like the more classic adventure character behaviors of old, we could change the schedule to this:
Bob's non-random peeing schedule:
Task #1 = Chair, 09:00 - 17:00, 0
Task #2 = Potty, 11:00 - 11:30, 100
This will have Bob always go take a quick pee at 11:00 (each real second equals one in-game minute, so we gave him half an hour to do his business, which will actually just take 30 seconds)
Level Creators will also be able to add a list of objects owned by NPCs. If anyone picks up or interacts with any of the objects on this list within sight of it's owner, the owner NPC will attack the offender.
So now we could add the door next to Bob's chair to it's list of owned stuff, and he'll actually be a proper guard, kicking the ass of anyone or anything that tries to mess with it. How cool is that!?
Using these features of scheduling and ownership, a level designer could even designate one object to be owned by one NPC, but not have him be near it frequently, and setup another NPC's schedule to use that object sometimes. This way, they might eventually get into a fight on their own about it! Or the player might have to think of something to bring the owner of the object close to it to see it being used by another NPC and provoke a fight! If that can't be called emergent gameplay, I don't know what could!
As I will be implementing these in the very near future, I appreciate any feedback on it - now is the time!
I had promised you concept art of the village level of the campaign, and so concept art you shall have. This post would just look too plain and boring without it:
This is actually two neighboring levels in one big shot. This is the most complex level is the campaign, and will thus serve as our performance benchmark.
We've almost crossed the completely-arbitrary-but-psychologically-important-nonetheless 100 backers barrier (99 as I write this), and have gathered 12.6% of our goal.
It looks small, but after having just looked at some kickstarter stats, I calculated that the average number of backers for SUCCESSFUL projects is 91.5!
Other encouraging facts: 81% of projects that raised more than 20% of their goal were successfully funded - we're not far from that. And that raises at more than 90% for those that raised more than 30%.
All that doesn't change the fact the right now our chances look a little bleak. But if we go down, we'll go down fighting. Inch by inch, backer by backer! The inches we need are everywhere around us - And we're going to fight for that inch!
I'll have more to say on this soon. For now, I'll just leave you with this:
Let's do this! Help us fight for those inches!