Jump to content
  • Advertisement

Modular Influence Map System Demonstration Videos

Recommended Posts


This is a combination of video examples of what my modular scalable influence map (Imap) system can provide. Please note that many of the positional behaviors here are intentionally created to demonstrate in a short time what the Imap system can do. More realistic movement and positioning behaviors can easily be accomplished.

The important thing to note here is that the Imap system is merely providing information about a point or suggesting locations to move to or do things. This is all done through a simple structure that combines information put into the Imap by the agents in various ways.

Often, the combinations of information are merely a few lines of adding together various types of influence maps for the allies, enemies, or the environment. As pointed out in one section of the video, a great change can be made in the behavior simply by adding one line that includes more information from a different influence map.

These combinations can be data-driven so they can be customized by designers through a tool allowing them to tease out subtle uses of the Imap system without much, if any, programmer support.

The Imap system provides underlying information for great behaviors for NPCs in ambient, tactical, strategic, or ecological uses depending on how it is scaled. In fact, I have used in for all of the above in the same project. Additionally, it will help improve games in many genres -- shooter, RPG, open world exploration, and strategy -- pretty much anything where spatial information is relevant and important.

For more information, you can view my 2018 lecture on the GDC Vault. This is the lecture that these very video clips were created for. (It will be behind the paywall until 2020 at which point it will become free for everyone.)


Additionally, a paper with a detailed explanation is available for free to all from the Game AI Pro 2 book.


This system is one of the core AI techs that I provide in my AI consulting work.


Versions of the base Imap code exist in both C++ and C# and can be installed and integrated into an existing code base in days if not hours. If you would like more information on how the Imap system can help your game, please contact me at "Dave at my company domain name"

Share this post

Link to post
Share on other sites

really interesting, Dave!

I have always been a fan of influence maps (variants of Flow Field, Distance Maps, etc) in their power for pathing large numbers of agents.  You have gone much further and utilized the information in a way which brings about recognizable behaviors without adding an AI system - very impressive.  As you hinted, combining these with an AI system would seem to be very powerful and lightweight.

Question: Have you found a better (memory or speed) method of storing your influence maps beyond a basic array?  Although using the info in an array is exceptionally fast, I am always concerned about the amount of time it takes to re-generate the maps.  I have used my own hand-rolled 'brushfire' algo to regenerate partial maps (only the parts that have changed), But these videos of yours seem to show each agent with their own influence maps which are being regenerated with every movement of that agent.  Seems like it could get overloaded quickly in scaled up version - am I right? or is the map creation pretty trivial even at scale?  I assume there might be one general purpose 'static obstacle' map utilized by all agents for basic pathing, but the threat maps and ally maps are fully dynamic and need to be  entirely recreated basically each cycle or so...right? What am I missing in my thoughts here...

I will look at your other provided links also to see examples of combining with an AI system to see exactly how you do the 'combining' - I am gathering each AI definition will have the methods of utilizing the available influence map information hardcoded into the AI method itself (though, I guess you could make it data-driven just as easily too - which is something I note you like to do in order to make your software more generalized, powerful and applicable to different situations.

Share this post

Link to post
Share on other sites

So many of these issues are addressed in my full lecture but that is still behind the paywall on the GDCVault.

As you kind of touched on, rather than erasing the entire Imap and refilling it every time, every time I determine that someone has changed either through movement or in any other way that would affect their registration into the map, I decrement their last influence and reinsert their new info. That means that any parts of the map that aren't touched don't change and any parts that ARE touched but are not changing (e.g. agents not moving) don't change as well. Obviously, that means if no one is moving then we aren't changing anything at all on the map. If only some are, then we are only dealing with those local changes.

The other thing that isn't apparent from the video is how I subdivide the world into smaller maps. For example, map tiles could be 100m x 100m with a 100x100 array of 1m squares. I have special code that only instantiates those tiles of maps when they are needed and bleeds influence over from one onto an adjacent one as needed. That gets rid of storing a LOT of 0s in the world when no one is there.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • 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!