Posts Tagged ‘AI’

Desert Strife Post-Jam AI (with more code examples!)

Posted by
Wednesday, October 5th, 2016 2:31 am

GIF!

Intro

Took a while (too many projects at the moment; loving it!), but here it is: Part 2. The basis of the system is still a reactive AI using heuristics. It doesn’t plan ahead at all, which is good enough even if it does show every once in a while.

The full AI code can be found here, if you care for that sort of thing!

Heatmaps

Heatmap, the main technique utilized, simply stores values in an extra tilemap (int array!) for spatial information evaluation. In this case the heatmap stores threat and support values used in choosing the AI attack target and movement path.

Pic2Small

Heatmap visualization

The recursive heatmap function is called for each enemy and ally on the map

Threat evaluation

Calculating the threat (and support) values is a cinch: Add up the probable averages of all usable weapon types of your allies and enemies. There is a bit of quess work involved if the enemy ammo counts are not known already.

 

 Nothing out of ordinary here I’d hope

Panic!

New feature alert! Taken that we already have threat values for each group and location data about safe areas, we might as well have a bit of fun with them! Every time a group gets into a fight its support value is compared to the threat level around it. A high enough difference will send the group in panic, running away from enemies and finally fleeing if reaching the level border. Now you can bully your enemies to submission!

PanicCalculation_

Panic also ensues if the total enemy force is overwhelming, but that is checked elsewhere

Conclusions

Simple and seems to work alright. In the next project I’ll be using Monte Carlo Tree Search, no doubt about that. It is much less work with potentially more intelligent results. Working on a generic version at the moment.

Play it here!

PS:

seththefirst suggested taking a look into AI utility functions in part 1 . The threat level comparison turned out to be sufficient so I didn’t implement anything like it, but maybe you (yes, you!) will find it useful.

Desert Strife Jam AI (with code examples!)

Posted by
Tuesday, September 6th, 2016 3:14 am

TL:DR KISS

The Post-Jam version is still far away (I’ve hardly had any time to work on it yet) so I might as well talk about the AI of the Jam version and the plan for the Post-Jam AI.

Version one

The first version of the AI was finished in the morning of the second day. It had one goal and one goal only, EXTERMINATE! In simple terms each unit finds the closest enemy and moves towards it. They also check that the path to the enemy is not blocked, by simply finding a path to it. This could cause slowdown with bigger maps and larger unit counts, but here it is just fine and dandy.

VIEW CODE (embedding doesn’t work unfortunately…)

Version two

So far the AI doesn’t take into consideration the main mechanic: scavenging technology. Implementing such behaviour, the quick and easy way, requires nothing more than adding technology distance checking into the previous code. If there’s technology closer to the unit than enemies, then that is what the unit will go for. On top of this the unit won’t move until it has completely excavated the technology.

VIEW CODE

Version three

I could have stopped here, but there was an annoying deficiency in the artificial thought process. The units don’t prioritize actions; In other words, an attacking unit is sometimes blocked by a scavenging unit.

The fix is slightly more elaborate than the previous step, but by no means complicated: tally up the best actions from all units and choose the most important one based on the target type and distance. Here’s the final AI in action.

NEW STUFF!

VIEW CODE

The future?

There are still a few things I’d like to implement in the AI, namely threat assessment and intelligent positioning. As luck would have it, there’s a single technique which can be used to achieve both of these goals: heatmaps! A heatmap is simply an extra tilemap which contains values based on unit proximity and threat level (if you are lazy you can even reuse the world tilemap objects for this purpose). Heatmaps can be used in selecting the target (lower threat value is preferred) and in pathfinding to choose the safest route to the target.

Conclusion

Keep it simple and you’ll go surprisingly far.

Play Desert Strife here

A gift for creators, MultiGame for Unity

Posted by (twitter: @whendricso)
Saturday, January 23rd, 2016 5:59 pm

I’ve made something useful, and I want to share it with you :)

MultiGame

Click for the free version!

Unity is powerful, but hard to use for non-programmers. So, a drag-and-drop framework that eliminates the need for coding or visual logic editors, MultiGame is a comprehensive game development framework for Unity.

It’s easy. Want health? Add it. Inventory? Click. Combine objects and components together to control Unity itself directly. Full documentation is built in to the editor! Just click “help” on any MultiGame component, or hover your mouse over field names for a helpful hint. The full version of MultiGame includes over 130 components, and growing every week. Powerful Managed Message functionality lets MultiGame command any script component even if it’s not included with MultiGame! This free evaluation version contains a few dozen of the most useful components in MultiGame. You can even use this in commercial projects, free of charge! But, if you like MultiGame please send feedback!

MultiGame is intuitive. Use it’s robust Interaction system to receive events such as player input, triggers and collisions, broken joints and send Managed Messages using an intuitive and consistent interface.

MultiGame has an ever-expanding feature set and the full version already contains over 150 components including:

-Interaction system
-Robust Message Manager that can send commands to any script
-Motion for transforms and rigidbodies
-General game functionalities and scripts
-Modular AI system
-User created content and construction/destruction systems
-Animation systems
-Combat system including health, damage, projectiles, and melee with combos
-Inventory system
-Save/load preferences
-Save/load entire game to binary
-Multiplayer support with Photon Cloud
-Mecanim state machine behaviors (state machine visual scripting with Mecanim editor)
-Level and prefab generator (beta)

MultiGame is great for adventure, physics, tower defense, RTS, RPG, FPS, MMO, open world, action, racing, arcade, or really any real-time genre or combination of genres you can imagine.

I would appreciate your feedback before I go for the full release so please:

Get the free version now!

Golden Rush

Posted by (twitter: @juaxix)
Monday, December 14th, 2015 5:05 pm

Go and play

This is the result, made by one single person. I would like to add more puzzles, would you like to have more thinking-puzzles, or adding a deeper meta-game, like the fish (player) is an AI and the whole game is running as it was a simulation inside a computer, so it can learn and when you finish the training you let it free in the real world where it can posses a robot-fish and swim and help animals and protect nature?

R-ADIUS AI: A Not-A-Post-Mortem Post Mortem

Posted by (twitter: @battlecoder)
Wednesday, September 2nd, 2015 6:15 am

I want to start with a big thanks to every person who’ve played my entry so far. You are the best!

After each LD, I like to write about what went right and what went wrong (which is normally an extensive list of hilarious fails and the occasional random good decision), but this time I’m doing something a bit different. I’ll be focusing on something that a lot of people seem to be intrigued about: The AI for the enemy spaceship in my entry; R-ADIUS:

R-ADIUS AI: It can be a bit frustrating, I know.

R-ADIUS AI: It can be a bit frustrating, I know.

I didn’t think it was something worth writing about, but surprisingly a lot of people seem to think it is and have shown interest on a full write-up on how it works,  so I guess I’ll do exactly that, hoping that it would help someone out there… somehow…. I don’t know.

If you are one of those who wanted to know the magic behind the “clever” ship, you’ll be incredibly disappointed, though.

(more…)

Democracy – Post Mortem

Posted by
Saturday, April 25th, 2015 12:13 pm

Theme

I have have to say that I hate this theme. Really, there were so many good themes there, why this one could win? Damn you!!!! The theme isn’t an excuse to not do a game, but I spent so much time thinking of what I could do with this… A game not based on fights? Weapon is love? The weapon must be abstract! This is clichê? Oh damn… I finally came up with an idea, after 14 hours (counting sleep time)!

My game entry is about “democracy”, with quotes. The democracy and progress are the weapon of the government in the game, they want you to attack other species in order to “spread democracy and progress through the galaxy”. The player controls the invasions to planets inhabited by bugs with the goal to kill the natives and collect the planet resources.

The game is a very humble tribute to starship troopers (novel by Robert Heinlein and film by Paul Verhoven and Edward Neumeier). I wanted to create, somehow, the sense of order and progress presented by movie.

Development

I always start by the core mechanics because it is the main component of the game – if I can’t find time to make graphics, at least I have a block-based game.

I also always wanted to create a game in a circular world, that was my excuse. I had no idea how to do that, but at is was pretty simple. You have a world centered at (0, 0) with radius (r), than you can set the origin of all objects in the world to (0, r) and only manipulate the rotation to place than in the world.

After the basic world structure, I could drop structures, and these structures could create units. To control the units, I created a behavior tree to control each unit – the first time I really use behavior3js – and a behavior tree to control the bugs strategy. Figure below show these behaviors trees:

Behavior tree for player and enemy units – Click to see in full size.

Behavior tree for player and enemy units – Click to see in full size.

Behavior tree for the nests, its used to create orders to enemy units – Click to see in full size.

Behavior tree for the nests, its used to create orders to enemy units – Click to see in full size.

Then it came to particles and easing! Man, I love these two. The animation below shows the game at this point:

sample2

After 28 hours I started to create the sprites and visual things in the world. I was stupid enough to lost time adding some details to sprites that don’t even will see because the sprites are very small (about 20 pixels). I also spend a good time trying to create a futurist screen aspect, which ended up very cool.

I added some scenes, UI and some other effects to the graphics:

sample3

When the clock marked 5 hours to end the competition I started create sounds effects and music. I was desperate because of the time, I still had to adjust the levels of my game and I didn’t know what to do with sounds. At the end it was pretty simple and I didn’t do much, actually recorded some sounds with Audacity, generated most of them in BFXR and generated the music in SoundHelix.

I finished the game in the packing hour, the extra hour after 48, the time to deploy and write about your game.

Summary:

Good stuff:

  • Game finished is always good!
  • I’m using BTs successfully, even to control hundreds of creatures.
  • A circular world (always wanted to try).
  • Visually smooth and lot of cool PARTICLES!!!!!
  • Generative music and sounds worked well.

Bad stuff:

  • Balancing is hard as hell, I couldn’t do that properly.
  • Some details missing, especially the visual feedback when you win the game and the bug when restarting a level before a tween is complete.
  • Isn’t much fun due to balance, few types of units, and few levels.

I’m very critic about my games, I really fell for to not balance properly and create more content to the game, but well, it was made in 48 hours and this time the good stuff was really good! Moreover, this was the most complex and complete game I ever made for LD, it was really hard to do, thus of course some things would be missing.

.

PLAY HERE

.

logo-full

 

I’m in, but with a request to do…

Posted by
Wednesday, April 15th, 2015 2:08 pm

This is my 5th LD and I am in again. But this time I have a request for you: please do more games with artificial intelligence! I mean, you don’t have to make an awesome stupendous incredible AI, a simple and functional AI is more than enough. There is a lot of libraries out there, and a lot of easy techniques to use: minimax, finite state machines, subsumption, utility functions, fuzzy, behaviors trees, boiding… (note: you probably will want to take a look at these before the compo if you want to use without prior knowledge).

Try something new, try some new game AI!

My personal goal in LD is to use artificial intelligence algorithms as part of the core mechanics of all my games. I have 3 games out of 4 so far, and I want to increase this score within this compo. I’m planning to use Behavior Trees properly this time (especially if Companion wins!).

My tools:

Past Games:

  • Baa-ram-ewe (#31) my excuse to learn the boiding algorithm, used it to control nice little sheeps – my best entry so far, at 35th (overall classification) out of more than 2600 submissions.
  • Love craft (#30) used this entry to implement behavior trees, unfortunately I spent so much time on BTs that I couldn’t make a fun game (but now I have a BT library =]).
  • Beneath the Sea (#29) nothing special (complete redesign after 24 hours).
  • Hungry Flies (#24) trying to use genetic algorithms to evolute hungry behaviors.

Good luck!

First Dare Complete!

Posted by
Monday, December 8th, 2014 10:20 pm

tscreen

Three days and many laughs later, “Blue Screen of Love” is finally complete. For myself and my team it was our first Ludum Dare, and despite a curveball with the theme we charged head-first into a ridiculous yet heartfelt dating sim between a person and their computer.

We used twine to create the story and HTML/CSS to make the interface.

 dialogue

Play “Blue Screen of Love”!

 

Baa-Ram-Ewe! Finished!

Posted by
Sunday, December 7th, 2014 6:41 pm

banner

Finally I finished my entry for this Ludum Dare (LD31, the theme is The Entire Game on One Screen). This time, I am so exhausted that I couldn’t do any progress report during the weekend, but, on the other hand, I could finish the game, including the mechanics, graphics and sounds.

My idea was creating something with artificial intelligence (again) and for some reason, after the theme announcement, I remembered that I never touched at a flocking algorithm and this would be a good opportunity for it. The game idea is to take some sheeps from one point and bring them to another, without letting them to leave the map or to be killed. The player uses the mouse to herd the sheeps, which will behave accordingly to their neighbor mates and some tiles in the environment.

As tradition, I writing here a summary of the competition:

What was good:

  • Could finish the game!
  • Cute sheeps with nice behavior;
  • I could follow the schedule without any change;
  • I could do some music and sound effects;
  • I drawn my first tileset!

What wasn’t good:

  • Lot of problems with collisions ;/
  • Spend a lot of time with rotation math (shame on me);
  • The sound effects are pretty limited and the music is too simple;
  • The graphics are cool but some things I’m hating, such as the windmill;
  • I had to redraw the tileset 2 times!

Which technologies and techniques I used:

  • The sheeps are controlled by a flocking algorithm, (or boid algorithm) as described here and here;
  • The graphics were made in Inkscape;
  • The map were built in Tiled, using a 32×32 tileset;
  • I recorded the audio for the sound effects in Audacity;
  • The music were made in Guitar Pro and converted in audacity;
  • CreateJS and Creatine were used as programming base;

anim1

(VIEW LUDUM DARE ENTRY | PLAY BAA-RAM-EWE)

Little progress

Posted by
Saturday, December 6th, 2014 11:14 am

For now i have almost all technical features except dynamical lightning. And tommorrow i want to create music, graphics, death and menu screen. Maybe, google play games integratedd too…

Screenshot_2014-12-06-20-15-10

Some scripts I made to make things easier

Posted by (twitter: @Zazanxors)
Friday, August 22nd, 2014 8:26 pm

Straight to the point, these are some scripts I wrote in C# for Unity 2D stuff that I’ll be using – feel free to use them any way you want.

TileTextureManager.cs

This script is ment to make creating platformer scenes a bit easier. Assign it to the tile you are using and then give it six sprites for said tile – it will detect nearby tiles and automatically select the appropriate sprite to use, then rotate as needed so that you can place tiles and leave it to the rest.

PlayerMovement.cs

Pretty self-explanatory, this is a simple script to act as a sort of 2D CharacterController for the player. Comes with a debugging option. Requires a trigger collider to detect whether or not the player is on the ground.

EnemyAI.cs

Also rather self-explanatory. Simple script that doubles as very basic A.I. and physics handler for enemies. Physics is nigh-identical to player physics. Also includes debugging option and also needs a trigger collider.

HealthLogic.cs

Decent health script I wrote for whatever needs it. EnemyLogic will need this to deal damage properly to the player properly. Includes logic for invulnerability periods after getting hit. Debugging on this will only display health in the console.

3rd LD, I’m in

Posted by
Thursday, August 21st, 2014 12:28 pm

This is my 3rd ludum dare and I am going to use the same tools as always:

Independent from the theme, I’m hoping to use behavior trees to control some NPC’s (I wrote a 3-part tutorial on behavior trees on my blog) and I am praying to all gods to elect “You Are Already Dead” as the final theme!

 

Progress (and bugs)

Posted by (twitter: @Zazanxors)
Sunday, July 20th, 2014 11:02 am

inprogress1

So in the process of preventing the enemy from tripping backwards and suffering a gran maul seizure, we’ve apparently given him the ability to glitch through walls. Like I said, I suck at A.I.

In other news, the base construction and terrain are coming along nicely. The basics of building is done, and what’s left is to allow for multiple block types and defenses. On the front of enemies, we’ve got to create spawning, give them health and actually make them dangerous.

In short, we’ve got a long way to go and a lot to do. Even so the knowledge gleamed learning to not suck at Unity will really help in the long run, and will prove valuable come August’s Ludum Dare. Besides that, watching the A.I. I wrote fail miserably was incredibly funny. Hopefully we’ll pull this off, but even if we don’t, fun was had.

Oh, and I am so including an option to ‘un-fix’ all the glitches on the A.I. – there’s no way I’m restricting that fun!

Fuzzy logic “Fuzzy Associative Memory” Ruby gem released

Posted by
Thursday, June 27th, 2013 9:59 am

A Fuzzy Associative Memory (FAM for short) is a Fuzzy Logic tool for decision making. Fuzzy logic FAMs are highly applicable in Game AI.

A Fuzzy Associative Memory uses Fuzzy Sets to establish a set of linguistic rules , e.g.:

  • “If the orc’s hit points are a little low, retreat from the enemy”
  • “If the enemy is distant and my rocket ammo is low, the rocket launcher is a poor choice”
  • “If the enemy is near and my shotgun ammo is okay, the shotgun is a very desirable choice”
  • “If the ship is off course by a little bit, correct just a little to the right”
  • “If the bird is much slower than the flock, speed it up a lot”

The linguistic rules, and the fuzzy sets they contain, are defined by a human “expert” (presumably, you). That is to say, the rules codify intelligence and map this knowledge from the human domain to the digital.

After the rules are defined, a FAM is consulted to help your AI make a descision:

  • The orc retreats, attacks, strafes.
  • The ship launches long range missiles or fires short range guns.
  • The control rods are lowered into the reactor or raised out of it.

As you can see, the fuzzy rules are deliberately vague and use qualifiers like “a little” and “a lot”. Furthermore, the lines between fuzzy sets are intentionally blurry. This is the nature of fuzzy sets; they capture such human fuzziness in a way that extracts highly natural behavior from the fuzzy rules. When defining these rules, it helps to imagine interviewing a bona fide expert in the domain and writing down the skills necessary to be successful in the domain.

Learn more, and get the Ruby Gem for your own game:

https://github.com/cpowell/fuzzy-associative-memory

My first ever AI is done!

Posted by (twitter: @RawBits)
Sunday, December 16th, 2012 9:59 pm

So I let my AI roam my procedurally generated maze. :) Check the video!

I’m back and aiming for the jam

Posted by (twitter: @RawBits)
Sunday, December 16th, 2012 4:51 pm

The weekend wasn’t on my side sadly but I’m here and aiming for the jam.

In the last hour I have made a tree with the pathways in the maze – levels are procedural ofcourse. Here is a picture of the tree visualized.

Visualized paths in tree

Now, on to my first ever legit AI in my life: a simple DFS.

[cache: storing page]