Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

459 Neutral

About BadMemory

  • Rank
  1. BadMemory

    Memory Markers

    In answer to your questions braindigitalis, yes and yes. AI's maintaining a list of things they notice and then backtracking when they have nothing else to do it a really nice behaviour for a multiplayer shooter bot. It gives the impression that they are more human (imo anyway).  In fact, in some implementations I assign global markers to spawn locations of weapons and hand them to the higher skill AI's as a low priority task - this gives the impression that the AI's know the maps, and that they are sweeping it for pickups.  I like your thinking on the audio queues. We call those 'events' and derive them from a common base struct so they can be processed by the behaviour trees in a generic way - whether it's the player popping up, an explosion in the distance or a player who suddenly cloaks. For the latter we override the default behaviour to trigger unique actions.  I'm a big fan of making these kind of components generic, because it lets you add more and more without having to really do any additional work. 
  2. BadMemory

    Memory Markers

    Ah that is interesting, I personally really like systems where everything is made as clear and obvious as possible so you can make choices based on all that information. There's nothing I find more frustrating than failing in a game, but then realising you really had no way of avoiding the situation.  And on the same subject - I've found that animating every 'moment' in the AI's thought processes gives a huge amount of readability and life to them. So when they are looking for the marker, they say and act a certain way, when they find it and you're not there, there look surprised and double back and so on. None of this is groundbreaking but it really makes them come to life. 
  3. BadMemory

    Memory Markers

    Memory is something that is often overlooked in combat games, more often than not when a character becomes aware of you in a combatative action game, they remain aware until dead. Sometimes they may run a countdown when they lose sight of the player and lapse back into their patrol state if that ends before they find them. Neither of these techniques looks particularly intelligent. The AI either looks unreasonably aware of you, or unrealistically gullible, in that they go about their business after they've lost track of you for a few seconds. A memory marker is a simple trick (The UE4 implementation of which can be seen here) that allows you to update and play with the enemy's perception. It is a physical representation of where the enemy 'thinks' the player is. In its simplest form, it has two simple rules: The AI use this marker for searches and targeting instead of the character The marker only updates to the player's position when the player is in view of the AI this gives you a number of behaviours for free. For example, the AI will look as if you have eluded them when you duck behind cover and they come to look for you there. Just from this minor change you now have a cat-and-mouse behaviour that can lead to some very interesting results. I was pleased to see that Naughty Dog also use this technique. In this Last of Us editor screen-grab, you can see their enemy marker (white) has been disconnected from the hiding character It is also very extensible - in more complicated implementations (covered in future video tutorials) a list of these markers is maintained and acted upon. This lets us do things like have the AI notice a pickup when running after the player, and return to get it if they ever lose their target. So how do we start to go about coding these markers? In my experience the most important thing when coding this system in various forms is that your memory markers, in code and their references in script, must be nullable. This provides us with a very quick and easy way of wiping these markers when they are no longer needed, or querying the null state to see if the agent has no memory of something - and therefore if we need to create it. The first pass implementation of these markers simply has two rules: You update the marker for a character to that character's location when its been seen by an enemy. You make the AI's logic - search routines and so on - act on this marker instead of the character It's worth mentioning that each AI will need one of these markers for every character on an opposing team, and every object they must keep track of. Because of this, it is useful to populate some kind of array with these markers. Think too, about how you can sort this list by priority. When the AI loses track of a target they can grab the next marker in the list which may be an objective, or a pickup they passed. When the list is empty, they fall back to their patrol state.
  4. Over the course of my time developing disney infinity, I ended up creating a list of player types that we regularly observed when conducting coop playtests. The key idea that I learned to push on, was attempting to enable different playstyles to play together. It is not about forcing people to play how you want them to play, nor is it the attempt to persuade them to change their play styles, but about facilitating different types to be able to cooperate through your systems. One note - through the course of this article I refer to the more dominant, more skilled or more experienced player as the 'leading player'. The Types The Trailblazer Most commonly male, ages 12 - 15. This type is the kind of player who wants to charge ahead. These players often accentuate the gap between player types as they race to the next cutscene or mission area, and in a lot of cases, end up stopping the other person from doing what they are doing (usually due to the design of the game systems). The Easily Distracted Most commonly male, ages 6 - 10, female 8 - 12. This type is the kind of person who likes to collect and explore. They often wander off and just go about their own business, enjoying playing with the game's systems as opposed to charging towards an objective. The Support Most commonly younger siblings or related older coop partners. Those who enjoy helping the more skilled player by providing help and assisting in secondary ways. This seems to be mostly based on a self-doubting of their own abilities - many quite literally feel being too close to the action spatially is too stressful. The Dutiful Helper Most commonly female parents. This is a player who happily tries to aid the more dominant player. Often a parent or younger sibling, or possibly someone who doesn't play games often. They derive their satisfaction from helping the leading player have fun. The Left Behind Most commonly much younger female siblings, aged < 10. Often the result of The Trailblazer, I most witnessed this with very young siblings playing with young teenagers. They mostly want to play with their coop partner but may be unable to follow due to simply not knowing where to go or not being able to overcome obstacles blocking the path there. The Unskilled No common gender or age. A player who simply lacks the skills to engage meaningfully with the main game. These are players who are not satisfied with secondary gameplay and actually want to play the main game, but feel frustrated that they can't keep up with the leading payer. Those less able to use a traditional gamepad No common gender or age. Some disabled people need to be catered for so that they can keep pace with other players. This is solely about designing controls for people less able to use gamepads traditionally or with slower reflexes than other players. The Prankster Older male siblings. One of my favourites. The person who gets most joy from disturbing the play of others. This is almost always not meant in a nasty or negative way, but if we're not careful our game design can translate their actions into that. Designing for each type So now we have our types, let's look at how we can enable each one to play how they want to while simultaneously cooperating with other player types. Again, it's not about forcing people together, but allowing that to happen naturally. You'll notice that none of this actually covers coop gameplay mechanics, but rather closing the gap between player types so that true coop gameplay can occur. Again, this list is by no means definitive and just represents some of the things I've used on previous projects. How to design for: The Trailblazer Some games actually tie the second player to the first, or reset the trailing player when they go off screen. These solutions are exactly what makes these players no fun to play with - no one wants to be continually pulled along. The ideal solution allows these players to forge ahead in ways that don't create an enormous distance, figurative or literal, between them and the other players. The interesting thing is that their motivation is almost always following what they perceive as the most important rules as set out by the game. When you de-emphasise the so-called 'mainline' the results can very surprising. Presenting the same scenario in playtests but providing different mission text had little effect on other types, but changed what these players did enormously. Sections of the game where players have to complete a certain amount of activities in order to progress, or push towards any kind of common goal independently, let them forge ahead and show their skill, while still allowing other players catch up and interact with these players. We also found that unlocking collectibles, side missions and any other number of activities to 'complete' in an area can stall these players until the others catch up IF the completion aspect is emphasised enough. (Think end-of-segment scoreboards, player comparison charts and anything that specifically pushes on these things) Examples include Left 4 Dead that gives counts at the end of each level - zombies killed, allies helped and so on - all things that require them to stick around their allies. Mario does something similar - the player who did 'best' gets a visible crown, a badge of honour. This is again based on score gained from clearing up the level - an act which often slows this player type down. Other games, such as Assassin's Creed: Unity present platforming challenges that open up shortcuts at key points in the progression - useful if you fall, and importantly, for helping straggling players to catch up. How to design for: The Easily Distracted This type can be facilitated by closely tying alternative activities in your game to the main progression. Making all the sub-objectives count towards a greater goal. In Disney Infinity: Pirates of the Caribbean we had a moment early on, where the players are told they have to earn money to buy their ship - the island they're on then opens up to them, and any and all activities give a payout: from smashing crates and fighting enemies to completing missions. Of course, this is a very specific example. In more general terms curiosities and charming pieces of content can really keep these players happy while the others push on, and again, if these can benefit the mainline then you've really succeeded. Things like the collectible story fragments in The Last of Us are a good example of the kinf of content this kind of player enjoys seeking out, the only change that needs to be made is for that information to open up more content for both players to benefit from. A keycode to a weapons vault or a new mission for example. The really interesting thing about these players is that we came to realise they are simply less interested in following the rules set out by the game. They like experimenting, exploring, and playing with and breaking systems. I began to think of these players as the anarchic mirror to the trailblazers very conservative rule-following style, and that distinction really helps understand how to design for them. Essentially the solution is to plan for those distractions and have them ultimately contribute to the mainline in a significant and noticeable way. How to design for: The Support This one is a lot more specific than the previous types. Often unsure of their own abilities they prefer to participate from a safe distance. Solutions to this were pretty obvious and very successful. Different layers in the level that provide access to different kind of support equipment from a safe vantage point. Secondary objectives that take time, but less skill to complete and result in a benefit to the main mission. (for example, something that will power down enemy defences around objectives) Again being able to do things like collect resources that aid the overall macro objective This is really all about allowing players things to do away from the heat of the action and is a relatively well explored gameplay type. How to design for: The Dutiful Helper This is usually the role of a parent or partner. The obvious answer is to actually provide ways for people to help, bringing resources to the player for example, or many of the aspects from the Support role. Mario Galaxy does this by letting the second player collect currency and subdue enemies for player 1, though I wouldn't exactly call it a brilliant coop experience. The real skill here is is to trick these players into having fun. The best example of this I can think of is the original Pirates of the Caribbean ride at Disneyland. They iterated again and again until they had something all the members of the family could enjoy. The role for the parents ended up being one of the navigator - they stood in a place where they could see the whole family and were the only ones who could see an overview of the game and so could give tactical advice. While the children were placed front-and-centre, they derived satisfaction at first from helping their kids have fun, but ultimately from the belief that their guidance actually helped the family win the game. The real art, is to trick the person who was planning to get all their satisfaction from helping others into actually enjoying the gameplay you design for them. Unlike the support, these players don't mind being placed in a role that is not so like the originals game - hence assuming different points of view, (for example looking at a map and tagging enemies, or using a second screen app to help), is something that often works extremely well. How to design for: The Left Behind Often players who find the game too confusing to know where to go next, or too hard to get there. These players differ from the Easily Distracted in that their priority is to be near other players. Solutions include always showing a marker of where the other player is and, at large distances, indicating how the player can get to them. As with the Trailblazer, here we see the same solution for the opposite reason: Other players opening shortcuts that the second player can use to follow more easily. In more linear games, time buffer activities that occur before a moment of progression, such an area transition, can work extremely well. For example, a brawl with a bunch of enemies that only stop respawning when the other player arrives OR after a few minutes have passed gives the second player time to catch up. Though quite specific to a certain type of game, we found that spawning power-ups outside of these areas as a bonus for the slower player really let them jump into the action with a satisfying punch when they did arrive. Note: we found, although at first counterintuitive, you almost never want to do the opposite and have points where the two players HAVE to be together, because the less skilled player types can often just make it completely impossible to progress. How to design for: The Unskilled We make a distinction here because these players don't want to play a secondary element of the game like the support and helper roles often do. These are players who are simply not as skilled as the same activities as the leading player. Solutions are subtler but actually along the same lines as other types - mechanics that allow one player to be seemingly close to the action while pushing on less skill-based play simultaneously. For example, sniping in a traditional shooter (you are more removed from the action). Also providing score metrics for other achievements in combat (or alternativly simple other things that aren't your primary gameplay mechanic). I believe the 'assist' reward in many games cater to this - though we are essentially catering for a different role, it is so closely tied to the core mechanics of the game, players can feel like they are as necessary as the leading player. How to design for: Those less able to use a traditional gamepad The reason this player type is listed here is simply because many of the control schemes that enable disabled people to play computer games have inherent disadvantages compared to default schemes. We should try and compensate so as to allow both parties to play on similar levels. In very basic terms, often these schemes involve using just half of the control pad and only one set, or none of the triggers. Because of this, the schemes often involve characters automatically using some actions when in the right range, or allowing the user to switch between sets of actions, such as moving or shooting. The important thing here is to compensate for these restrictions so that the game can be fun. This can involve things such as: Putting in code for things like making characters automatically jump when reaching the edge of platforms as it may be difficult to complete actions with tight time restrictions. Modifications for boss fight phases: if you have boss fights with phases that have timeouts then remove or lengthen the timeout. Enemy AI modifying their behaviour based on which target they are focusing on, or preferring different targets all together (not necessarily the other player). Note here that in order to try and keep this as subtle as possible, lean towards altering less noticeable aspects like reaction times or how they reposition rather than simply not engaging. For schemes that switch between control methods - noticing if a certain control is active, such as aiming, and changing the enemies behaviour based on that. How to design for: The Prankster The trick here is to provide non-lethal ways to annoy the other players. The latest Rayman games are a great example of this - players can hit each other about but this does no damage. Of course, you can use this maliciously. We found that a nice compromise was to monitor if these actions directly resulted in player death, and if so, provide a time based advantage to the other player to either get passed the griefing player, or get their revenge. So... I hope this helps. I'm certain this list is incomplete, but we found that by catering for each of these schemas we noticeably improved how well opposing player types play together. I do feel, for at least the type of game I experienced this most with - large, open world action RPG's, this list is very relevant, but from my own experience I have noticed these types in many other genres. I feel fairly confident that this list represents something close to completeness, though I'm sure not without many needed amendments and additions. And as a final thought, and to perhaps pre-empt a criticism - this is not about making a game for everyone - but about designing for everyone that would want to play your particular game.
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!