1 / 35

Flirting with the Dark Side

Scripting and AI. Flirting with the Dark Side. Damián Isla, Moonshot Games. Scripting vs. Scripting. Distinguish between scripting as technology and scripting as filthy hackery . Scripting as Filthy Hackery. “Lazy devs faking it in script instead of doing it for real in code.”

zonta
Download Presentation

Flirting with the Dark Side

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Scripting and AI Flirting with the Dark Side Damián Isla, Moonshot Games

  2. Scripting vs. Scripting Distinguish between scripting as technology and scripting as filthy hackery.

  3. Scripting as Filthy Hackery “Lazy devs faking it in script instead of doing it for real in code.” Obviously absurd. • Code doesn’t make it more real. • Script is code. • It’s all fakery if you go down far enough.

  4. Faking it • Robust vs. brittle systems • Orthogonal to questions of implementation language • Robust is always better • A Matter of Economics • we don’t have time to do everything well • it works most of the time

  5. The World is Lies ... so what we should be asking ourselves is not “how do we avoid faking it” but “what’s the best way to fake it?”

  6. The Most Important AI Technology Ever if <X> then <Y> else <Z>

  7. But this sucks if (ai.health < health_cover_threshold) { <Y> } else { <Z> }

  8. Scripting as Architecture LUA • Compiled to bytecode • Hot swapping • Highly embeddable • Highly customizable • Dynamic typing Months of dev time saved Kill me now

  9. Pros and Cons We like • Iteration times • Expressivity • Designer-accessibility We don’t like • Performance • Designer-accessibility

  10. El Compromiso Systems that are performance-sensitive are generally NOT the systems where designer-expressivity is important. And vice versa.

  11. Our Strategy • Script as a pillar of the theEngine • Component object model • Components can be implemented in • C++ • Lua • Script is also the special sauce • Script is the glue

  12. The [Production] Goal Lua can be used to create first-class systems from the ground up. 3 parts: • component scripts • system scripts • data

  13. Components and Script A B C D

  14. Components and Script A B

  15. Components and Script A B Path Animation This is where the fun lives

  16. Component Soup Perception/Ray-casting Behavior A* Target selection Squad behavior Animation control Random Script Animation playback Physics

  17. Component Soup Emit balloons from ears whenever player hits the elephant with the frying pan Perception/Ray-casting Behavior A* Target selection Squad behavior Animation control Random Script Animation playback Physics

  18. Component Soup Perception/Ray-casting Behavior A* Target selection Squad behavior Animation control Random Script Animation playback Physics

  19. Component Soup Perception/Ray-casting Behavior A* Target selection Squad behavior Animation control Random Script Animation playback Physics

  20. Component Soup Perception/Ray-casting Behavior A* Target selection Squad behavior Locomotion control Animation script Random Script Animation playback Physics

  21. Component Soup emit_balloons initialize() attach() update() detach()

  22. System Soup System script

  23. System Soup Boids

  24. System Soup

  25. Data • Need to be able to: • save out the state of the scripts • drive the system with data • define the structure for both • Lua can define structures • define structures for engine-allocated data blocks • engine controls the lifetime of these blocks • Lua • reads and writes to the blocks • is NEVER allowed to allocate it’s own dynamic memory • we lock the global scope after creation

  26. System Soup System script Parameters State Parameters State

  27. Script-based Systems What it gets us • A fluid design environment • avoid the “data-driven” code trap • A place to put our hacks • (Embrace the hackery) • Continuity between prototyping and production

  28. Initial Framework (Engineer) Implementation (Design) Final implementation (Engineer) Final buy-off (Design)

  29. Engineer makes it work Design makes it work well Engineer makes it fast Design makes sure it still works well

  30. Not so fast... Doesn’t mean you don’t need to • Provide perf tools • Think systemically about script • Think seriously about interfaces between components • Design all pieces as an architecture • Help designers write good systems, not just good code But does mean that the architecture can evolve more fluidly and in a more design-driven way.

  31. Concepts that don’t Exist (In code) • Health / Death / Damage • Weapons / Items / Equipment / Powers • AI • Behavior • HUD / UI / Menus • Missions / Levels / Objectives

  32. One more distinction C++ • high performance • low (designer) expressivity • game-agnostic Script • low performance • high (designer) expressivity • game-specific The technology you keep around for next time The stuff that makes this game unique and awesome

  33. Thanks!

More Related