Skip to content

GDC08 Notes – AI Roundtable day 2

Array ( [blocks] => specificItem [show] => [itemId] => 1184 [exactSize] => 200 [itemFrame] => none [albumFrame] => none ) Array ( [blocks] => specificItem [show] => [itemId] => 1189 [exactSize] => 200 [itemFrame] => none [albumFrame] => none ) Array ( [blocks] => specificItem [show] => [itemId] => 1194 [exactSize] => 200 [itemFrame] => none [albumFrame] => none )
Error (ERROR_STORAGE_FAILURE)
  • in modules/core/classes/GalleryStorage.class at line 494 (GalleryCoreApi::error)
  • in modules/core/classes/Gallery.class at line 202 (GalleryStorage::search)
  • in modules/core/classes/helpers/GalleryUserGroupHelper_simple.class at line 105 (Gallery::search)
  • in modules/core/classes/GalleryCoreApi.class at line 1876 (GalleryUserGroupHelper_simple::fetchGroupsForUser)
  • in modules/core/classes/helpers/GalleryPermissionHelper_simple.class at line 64 (GalleryCoreApi::fetchGroupsForUser)
  • in modules/core/classes/helpers/GalleryPermissionHelper_simple.class at line 39 (GalleryPermissionHelper_simple::_fetchAccessListIds)
  • in modules/core/classes/GalleryCoreApi.class at line 501 (GalleryPermissionHelper_simple::fetchAccessListIds)
  • in modules/core/classes/helpers/GalleryUserHelper_simple.class at line 76 (GalleryCoreApi::fetchAccessListIds)
  • in modules/core/classes/GalleryCoreApi.class at line 566 (GalleryUserHelper_simple::hasItemPermission)
  • in modules/imageblock/classes/ImageBlockHelper.class at line 217 (GalleryCoreApi::hasItemPermission)
  • in modules/imageblock/classes/ImageBlockHelper.class at line 93 (ImageBlockHelper::_getBlockData)
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 1352 (ImageBlockHelper::loadImageBlocks)
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 867
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc(1229) : regexp code at line 1
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 1229
  • in ??? at line 0
  • in /home/aarmgorg/public_html/journal/wp-includes/plugin.php at line 213
  • in /home/aarmgorg/public_html/journal/wp-includes/post-template.php at line 230
  • in /home/aarmgorg/public_html/journal/wp-content/themes/barthelme/single.php at line 12
  • in /home/aarmgorg/public_html/journal/wp-includes/template-loader.php at line 75
  • in /home/aarmgorg/public_html/journal/wp-blog-header.php at line 16
  • in /home/aarmgorg/public_html/index.php at line 4
1
The left of me
So day 2 of the AI roundtables was a lot easier, although for some reason I didn’t use my laptop to take notes, sigh. This day, we did split into two rooms – I covered the “Action / FPS genre” side, while Dave Mark covered the “RTS / RPG” side. It’s tough to divide this day up (having read about past years), but I think if it was made into “strategic high level” and “actor” divisions, it might make more sense. TBS/RTS is just too different to FPS / RPG AI for the most part, but I digress (and it’d mean too many people in the actor side 😉 ).

There’s some good humour involved in many of the points – I haven’t expressly marked them, I hope they’re obvious enough :)

AI for teammates

  • Player doesn’t see the contributions
  • Hard to give orders
    • Can allow AI to storm through the levels – no player help
    • Team mate feeling is hard
      • controller throwing and swearing hard!
    • User modelling and training to remove player frustration with the AI
  • Hierarchical breakdown of tasks has worked well
    • Works well in military simulations
  • Perhaps remove AI levels based on difficulty/user ability
    • More a design problem (?)
    • Scripting the AI to certain situations can work
  • Allies being the secondary role, or the player being a supporting role
    • HL2: Ep2 – antlion battle (player is more in a secondary role!)
    • Helping the AI
    • Clear intent + clear expectations (of the situation, and of the AI)
  • Communication bandwidth is low (ie; what can the AI tell about the player? very difficult…)
    • Facing, position, weapon armed
    • Slap button? (or “No button”) -0 hard to do – cycle AI plays (eg: in sports) etc.? maybe just stop current play? Depends on AI architecture.
    • Need a way to communicate with the AI
    • The queues are often missed
    • Some games have the commands per person
      • Keeps the players busy but not too busy
    • AI learning (training) player success / failure (works well in sports)
      • Feedback in B&W AI can suffer oddly (hitting it if they are doing something right accidentily)
Error (ERROR_STORAGE_FAILURE)
  • in modules/core/classes/GalleryStorage.class at line 494 (GalleryCoreApi::error)
  • in modules/core/classes/Gallery.class at line 202 (GalleryStorage::search)
  • in modules/core/classes/helpers/GalleryUserGroupHelper_simple.class at line 105 (Gallery::search)
  • in modules/core/classes/GalleryCoreApi.class at line 1876 (GalleryUserGroupHelper_simple::fetchGroupsForUser)
  • in modules/core/classes/helpers/GalleryPermissionHelper_simple.class at line 64 (GalleryCoreApi::fetchGroupsForUser)
  • in modules/core/classes/helpers/GalleryPermissionHelper_simple.class at line 39 (GalleryPermissionHelper_simple::_fetchAccessListIds)
  • in modules/core/classes/GalleryCoreApi.class at line 501 (GalleryPermissionHelper_simple::fetchAccessListIds)
  • in modules/core/classes/helpers/GalleryUserHelper_simple.class at line 76 (GalleryCoreApi::fetchAccessListIds)
  • in modules/core/classes/GalleryCoreApi.class at line 566 (GalleryUserHelper_simple::hasItemPermission)
  • in modules/imageblock/classes/ImageBlockHelper.class at line 217 (GalleryCoreApi::hasItemPermission)
  • in modules/imageblock/classes/ImageBlockHelper.class at line 93 (ImageBlockHelper::_getBlockData)
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 1352 (ImageBlockHelper::loadImageBlocks)
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 867
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc(1229) : regexp code at line 1
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 1229
  • in ??? at line 0
  • in /home/aarmgorg/public_html/journal/wp-includes/plugin.php at line 213
  • in /home/aarmgorg/public_html/journal/wp-includes/post-template.php at line 230
  • in /home/aarmgorg/public_html/journal/wp-content/themes/barthelme/single.php at line 12
  • in /home/aarmgorg/public_html/journal/wp-includes/template-loader.php at line 75
  • in /home/aarmgorg/public_html/journal/wp-blog-header.php at line 16
  • in /home/aarmgorg/public_html/index.php at line 4
1
In front of me

How do we match the players expectations of AI?

  • Telepathy
  • Feedback + different situations
    • Force a player to stop (eg: Sniper)
    • Sport games strategy – can’t run a (soccer) goal by going down the middle of the pitch
    • Crysis – first 1 hour tutorial boss kept on the line (and gave instructions and info)

Training the player

  • Killing the player
  • Training them to do the designers game
  • Training them to know what the AI can/will do
    • Good rules – Halo brute gets mad
    • Hit them over the head with what it does
      • Gates – Bioshock’s welcome level
      • Playtest the stuff a lot to reduce frustration
  • Feedback “your a good player” – expressly told

Artificial stupidity

  • Getting in the players line of fire, or have the AI not hit the player
  • “Mean time to stupid” in Basketball sports game
  • Slit your wrist test
    • SWAT storming is the hardest situation
      • Leathal situation – and we add in a clown with a gun and no training!
    • Knife slient attacks
      • Hard in real life (backup person with a pistol is there). Player is not trained so it was removed because it is hard to make fun.
  • keep teammates near the player and sometimes in front
    • In a fast game it is hard
    • Avoiding breaching too – COD4 scripted it
Error (ERROR_STORAGE_FAILURE)
  • in modules/core/classes/GalleryStorage.class at line 494 (GalleryCoreApi::error)
  • in modules/core/classes/Gallery.class at line 202 (GalleryStorage::search)
  • in modules/core/classes/helpers/GalleryUserGroupHelper_simple.class at line 105 (Gallery::search)
  • in modules/core/classes/GalleryCoreApi.class at line 1876 (GalleryUserGroupHelper_simple::fetchGroupsForUser)
  • in modules/core/classes/helpers/GalleryPermissionHelper_simple.class at line 64 (GalleryCoreApi::fetchGroupsForUser)
  • in modules/core/classes/helpers/GalleryPermissionHelper_simple.class at line 39 (GalleryPermissionHelper_simple::_fetchAccessListIds)
  • in modules/core/classes/GalleryCoreApi.class at line 501 (GalleryPermissionHelper_simple::fetchAccessListIds)
  • in modules/core/classes/helpers/GalleryUserHelper_simple.class at line 76 (GalleryCoreApi::fetchAccessListIds)
  • in modules/core/classes/GalleryCoreApi.class at line 566 (GalleryUserHelper_simple::hasItemPermission)
  • in modules/imageblock/classes/ImageBlockHelper.class at line 217 (GalleryCoreApi::hasItemPermission)
  • in modules/imageblock/classes/ImageBlockHelper.class at line 93 (ImageBlockHelper::_getBlockData)
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 1352 (ImageBlockHelper::loadImageBlocks)
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 867
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc(1229) : regexp code at line 1
  • in /home/aarmgorg/public_html/journal/wp-content/plugins/wpg2/wpg2embed.inc at line 1229
  • in ??? at line 0
  • in /home/aarmgorg/public_html/journal/wp-includes/plugin.php at line 213
  • in /home/aarmgorg/public_html/journal/wp-includes/post-template.php at line 230
  • in /home/aarmgorg/public_html/journal/wp-content/themes/barthelme/single.php at line 12
  • in /home/aarmgorg/public_html/journal/wp-includes/template-loader.php at line 75
  • in /home/aarmgorg/public_html/journal/wp-blog-header.php at line 16
  • in /home/aarmgorg/public_html/index.php at line 4
1
The right of me

Players walking through AI’s / teammates is a good idea

  • If not, a push button is needed
  • 0.15 miliseconds (or was it 0.15 seconds?) of stop if you do move through one in an example of how it’s allowed
  • Doesn’t work well if lots of guys or no space to move if pushed
  • If the AI decides to go to cover, take the point
  • But waypoints don’t use that, but if they do it can work
    • Basketball – both sides can see a claimed space when planning movement

Code separation

  • Game code and AI code separated
  • Lots of yelling to get done
  • Controller seperation (AI using the controller) is hard. Teaching to use controller! Lots of example of it working well however
    • Not literal button presses used, use the direct “Have pressed command to “attack””, not “pressed button X” interface of course
    • Stops cheating if “just another client”
    • Allows learning to play if players can see it
  • AI taking over characters, need same API!
    • But senses API still there
    • Good to hack abstraction (No “Push down A” etc.)
    • Useful if AI abilities match players abilities

And that’s it – a bit more structured this time, so should be more useful. I didn’t record the audio however, and Dave wasn’t in the room, so this is likely as good as it’ll get from me.

Post a Comment

Your email is never published nor shared. Required fields are marked *