Learning Game AI Programming with Lua
By David Young
()
About this ebook
Game AI can be easily broken up into a number of components such as decision making, animation handling, and tactics, but the balance and interaction between each system strikes a balance between good AI and bad AI.
Beginning with an introduction to the AI sandbox, each new aspect of game AI is introduced, implemented, and then expanded upon. Going forward, you will learn to utilize open source libraries such as Ogre3D, Bullet Physics, OpenSteer, Recast, Detour, and Lua to create an AI sandbox with an entire codebase available to expand and step through.
This is done through a step-by-step approach, from learning to move basic shapes to fully animating your soldiers. By the end of the book, your AI will be able to navigate, pathfind, manage animation playback, communicate, and perceive their environment.
David Young
David Young was born in Wellington, New Zealand in 1963. This is his first novel and was drafted during lockdown and whilst on holiday. David currently resides in Auckland with his family.
Read more from David Young
I Was There!: (Easter Insights) Rating: 0 out of 5 stars0 ratingsKing Jesus and the Beauty of Obedience-Based Discipleship Rating: 0 out of 5 stars0 ratingsTheology For the Charismatic Church Rating: 0 out of 5 stars0 ratingsArt of the Japanese Garden: History / Culture / Design Rating: 4 out of 5 stars4/5Art of Japanese Architecture: History / Culture / Design Rating: 0 out of 5 stars0 ratingsComputational Chemistry: A Practical Guide for Applying Techniques to Real World Problems Rating: 4 out of 5 stars4/5A Short Guide to Marketing Model Alignment & Design: Advanced Topics in Goal Alignment - Model Formulation Rating: 0 out of 5 stars0 ratingsPHPList 2 E-mail Campaign Manager Rating: 0 out of 5 stars0 ratingsUnlocking Academic Achievement: A Principal's Guide To Improved Measurable Results Rating: 0 out of 5 stars0 ratingsScenarios in Marketing: From Vision to Decision Rating: 0 out of 5 stars0 ratingsGifts from a Father Rating: 0 out of 5 stars0 ratingsA Cree Healer and His Medicine Bundle: Revelations of Indigenous Wisdom--Healing Plants, Practices, and Stories Rating: 0 out of 5 stars0 ratingsThe Way Back: Repentance, the Presence of God, and the Revival the Church so Desperately Needs. Rating: 0 out of 5 stars0 ratingsThe Pivotal Moment: The Hurricane. The Aftermath. The Healing. Rating: 0 out of 5 stars0 ratingsThe Adventures of Sam Rating: 0 out of 5 stars0 ratingsReading Elgar’s The Music Makers Rating: 0 out of 5 stars0 ratingsThe King’S a Beggar: A Study of Shakespeare’S Epilogues Rating: 0 out of 5 stars0 ratingsInside Thatcher's Last Election: Diaries of the Campaign That Saved Enterprise Rating: 0 out of 5 stars0 ratings
Related to Learning Game AI Programming with Lua
Related ebooks
Mastering Unity 2D Game Development - Second Edition Rating: 0 out of 5 stars0 ratingsMastering Unity 2D Game Development Rating: 5 out of 5 stars5/5Unity Game Development Scripting Rating: 0 out of 5 stars0 ratingsUnreal Development Kit Game Design Cookbook Rating: 0 out of 5 stars0 ratingsUnreal Engine 4.X By Example Rating: 0 out of 5 stars0 ratingsLearning AWS Lumberyard Game Development Rating: 0 out of 5 stars0 ratingsHTML5 Game Development HOTSHOT Rating: 0 out of 5 stars0 ratingsUnity Character Animation with Mecanim Rating: 0 out of 5 stars0 ratingsFirst Steps in Unreal: Building Your First Game: Mastering Unreal Engine: From Novice to Pro Rating: 0 out of 5 stars0 ratingsUnreal Engine 4 AI Programming Essentials Rating: 0 out of 5 stars0 ratingsProcedural Content Generation for Unity Game Development Rating: 0 out of 5 stars0 ratingsLua Game Development Cookbook Rating: 0 out of 5 stars0 ratingsUnity Game Development Essentials Rating: 5 out of 5 stars5/5Unreal Engine 4 Scripting with C++ Cookbook Rating: 0 out of 5 stars0 ratingsLÖVE for Lua Game Programming Rating: 5 out of 5 stars5/5A Beginner's Guide to 2D Shooter Games: Beginners' Guides, #2 Rating: 0 out of 5 stars0 ratings3D Game Design with Unreal Engine 4 and Blender Rating: 0 out of 5 stars0 ratingsGameMaker Essentials Rating: 0 out of 5 stars0 ratingsA Beginner's Guide to 2D Platform Games with Unity: Beginners' Guides, #1 Rating: 0 out of 5 stars0 ratingsUnity Android Game Development by Example Beginner's Guide Rating: 4 out of 5 stars4/5Unity from Proficiency to Mastery (Artificial Intelligence): Unity from Proficiency to Mastery, #1 Rating: 0 out of 5 stars0 ratingsUnreal Engine Physics Essentials Rating: 1 out of 5 stars1/5Practical Game AI Programming Rating: 0 out of 5 stars0 ratingsLearning C++ by Creating Games with UE4 Rating: 3 out of 5 stars3/5A Beginner's Guide to Puzzle Games: Beginners' Guides, #3 Rating: 0 out of 5 stars0 ratingsGeometry for Programmers Rating: 0 out of 5 stars0 ratingsBlender Game Engine: Beginner’s Guide Rating: 3 out of 5 stars3/5
Programming For You
SQL All-in-One For Dummies Rating: 3 out of 5 stars3/5Python: Learn Python in 24 Hours Rating: 4 out of 5 stars4/5SQL: For Beginners: Your Guide To Easily Learn SQL Programming in 7 Days Rating: 5 out of 5 stars5/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5Modern C++ Programming Cookbook Rating: 5 out of 5 stars5/5Learn Python in 10 Minutes Rating: 4 out of 5 stars4/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5Coding with JavaScript For Dummies Rating: 0 out of 5 stars0 ratingsExcel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Python Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Grokking Simplicity: Taming complex software with functional thinking Rating: 4 out of 5 stars4/5SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5HTML & CSS: Learn the Fundaments in 7 Days Rating: 4 out of 5 stars4/5TensorFlow in 1 Day: Make your own Neural Network Rating: 4 out of 5 stars4/5Deep Learning For Dummies Rating: 0 out of 5 stars0 ratingsNarrative Design for Indies: Getting Started Rating: 4 out of 5 stars4/5Python 3 Object-oriented Programming - Second Edition Rating: 4 out of 5 stars4/5Mastering C# and .NET Framework Rating: 5 out of 5 stars5/5Grokking Artificial Intelligence Algorithms Rating: 0 out of 5 stars0 ratingsPython Machine Learning By Example Rating: 4 out of 5 stars4/5
Reviews for Learning Game AI Programming with Lua
0 ratings0 reviews
Book preview
Learning Game AI Programming with Lua - David Young
Table of Contents
Learning Game AI Programming with Lua
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Downloading the color images of this book
Errata
Piracy
Questions
1. Getting Started with AI Sandbox
Introduction to AI sandbox
Understanding the sandbox
The project layout
The Premake build
Compiling the sandbox with Visual Studio 2008/2010/2012/2013
Open source libraries
Open source tools
Lua IDE – Decoda
Running AI sandbox inside Decoda
Setting up a new Decoda project
Debugging Lua scripts
Decoda Watch window
Decoda Call Stack window
The Decoda Virtual Machines window
Simultaneous Lua and C++ debugging
Visual Studio – Attach to Process
Decoda – Attach to Process
Decoda – Attach System Debugger
Associating Lua scripts from code with Decoda
The Lua virtual machine
The Lua stack
Lua primitives
Metatables
Metamethods
Userdata
C/C++ calling Lua functions
Lua calling C/C++ functions
Function binding
Creating custom userdata
Looking at the vector data type
The demo framework
Ogre
Object-Oriented Input System
SandboxApplication
Sandbox
Agent
Utility classes
Lua binding
Summary
2. Creating and Moving Agents
Creating a new sandbox project
Setting up the file structure
Extending the SandboxApplication class
Running your sandbox for the first time
Creating a new Decoda project
Configuring Decoda's run executable
Creating a sandbox Lua script
Creating a floor
Adding a light
Adding a skybox
Adding meshes to the sandbox
Creating sandbox objects
Shooting blocks
Creating an agent Lua script
Creating a visual representation
Updating an agent position
Updating an agent orientation
Agent properties
Orientation
The forward axis
The left axis
The up axis
Location
Position
Size
Height
Radius
Physics
Mass
The max force
The max speed
Speed
Velocity
Knowledge
Target
Target radius
Path
Agents' movement
Mass
Speed
Velocity
Acceleration
Force
Agent-steering forces
Seeking
Applying steering forces to an agent
Clamping the horizontal speed of an agent
Creating a seeking agent
Pursuit
Fleeing
Evasion
Wandering
The target speed
Path following
Creating a path following agent
Avoidance
Collision avoidance
Obstacle avoidance
Avoiding blocks and agents
Group steering
Alignment
Cohesion
Separation
Creating a group of followers
Summing steering forces
Weighted sums
Priority-based forces
Summary
3. Character Animations
Skeletons and meshes
Mesh skeletons
Loading an animated mesh
Showing a skeleton
Attaching meshes to bones
Attaching a weapon to our soldier
Animation clips
Playing an animation on our soldier
Soldier animations
Crouching animations
Standing animations
Weapon animations
Soldier poses
Weapon poses
Manipulating animations
Enabling and disabling animations
Looping animations
The animation length
The animation time
Normalized time
Restarting an animation
Playing a non-looping animation
The animation rate
Animation blending
Animation weights
Blend window
Blend curves
Linear blending
Playing with blend weights
Animation state machine (ASM)
States
Transitions
Creating animation state machines
Creating helper functions
Adding states
Adding transitions
Adding external helper functions
Forcefully setting states
Requesting states
Updating the animation state machine
Handling state transitions and state requests
Updating running animations
Adding functions to animation state machine instances
Building a weapon animation state machine
Building a soldier animation state machine
Updating animation state machines
Playing with states
Summary
4. Mind Body Control
Creating a body
Creating a soldier
Attaching an animated mesh to an agent
Creating an obstacle course
Displaying the physics world
Adding callbacks to the animation state machine
Handling callbacks
Adding callbacks to the ASM
Updating the ASM to call callbacks
Getting our soldier to shoot
The bone position
The bone rotation
Creating particle effects
The particle direction
Object removal
The collision impact callback
Shooting a projectile
Handling projectile collision impacts
Shooting
Getting our soldier to run
Setting a path through the obstacle course
Running the obstacle course
Creating a brain
Approaches for mind body control
Direct animation control
The death state
The idle state
The falling state
The moving state
The shooting state
A simple, finite state machine
Initializing the agent
Agent FSM state handling
Indirect animation control
The animation controller
Commands
The command queue
Manipulating commands
The change stance command
The die command
The fall command
The idle command
The move command
The shoot command
Assigning member functions
Initializing the controller
Adding handlers for commands
Updating the controller
Running the obstacle course
Creating a direct control agent
Creating an indirect control agent
Indirect control agent initialization
Indirect control agent update
Indirect control agent control
Spawning an indirect control agent
Action latency
Summary
5. Navigation
Pathfinding
Creating a navigation mesh
Configuring navigation meshes
The walkable height
The walkable radius
The walkable climb height
The walkable slope angle
The minimum region area
Building the navigation mesh
Drawing the navigation mesh
Pathfinding on a navigation mesh
Path query
Query results
Random navigation points
The path information
Adding random pathfinding to our soldier
Updating agent paths
Drawing paths
Initializing the navmesh
Randomly running agents
Creating additional navigation meshes
Summary
6. Decision Making
Creating userdata
Agent actions
Adding data members
Initializing an action
Updating an action
Action cleanup
Action member functions
Creating actions
The idle action
The die action
The reload action
The shoot action
The random move action
The move action
The flee action
The pursue action
Evaluators
Creating evaluators
Constant evaluators
Has ammo evaluator
Has critical health evaluator
Has enemy evaluator
Has move position evaluator
Is alive evaluator
Can shoot enemy evaluator
50/50 chance evaluator
Decision structures
Decision trees
Branches
Decision leaves
Branch evaluation
Building a decision tree
Creating branches
Creating a decision tree agent
Strengths of decision trees
Pitfalls of decision trees
Finite state machines
States
Transitions
Finite state machine structure
Helper functions
Adding states and transitions
Updating the finite state machine
Adding instance functions
Building a finite state machine
The idle state
The movement state
The random movement state
The shoot state
The flee state
The die state
The pursue state
The reload state
Creating a finite state machine agent
Strengths of finite state machines
Pitfalls of finite state machines
Behavior trees
The behavior tree node
Helper functions
Updating the behavior tree node
Actions
Conditions
Selectors
Sequences
Creating a behavior tree object
Behavior tree helper functions
Selector evaluation
Sequence evaluation
Node evaluation
Continue behavior tree evaluation
The behavior tree update loop
Updating the behavior tree
Building a behavior tree
The death behavior
The flee behavior
Combat behaviors
The reload behavior
The shoot behavior
The pursue behavior
The move behavior
The random move behavior
The idle behavior
Creating a behavior tree agent
Strengths of behavior trees
Pitfalls of behavior trees
Summary
7. Knowledge Representation
Knowledge sources
Creating a knowledge source
Knowledge source evaluation
Blackboards
Creating a blackboard
Adding and removing knowledge sources
Evaluating knowledge sources
Setting and retrieving blackboard attributes
Blackboard member functions
Creating soldier knowledge sources
Enemy selection
Flee position selection
Constructing a soldier blackboard
Updating decision evaluators
Updating behavior actions
The die action
The flee action
The idle action
The move action
The pursue action
The reload action
The shoot action
Summary
8. Perception
Events
Attributes
Sending events
Receiving events
Managing events
Assigning agent teams
Handling agent communications
Event types
Creating agent senses
Initializing senses
Updating senses
Agent visibility
Detecting other visible agents
Agent sighting events
New enemy sighted event
New dead enemy body sighted event
New dead teammate body sighted event
Handling new agent sightings
Intermittent agent sightings
Throttling agent visibility updates
Creating event handlers
Adding event handlers
Agent auditory senses
Auditory events
The BulletShot event
The BulletImpact event
Handling auditory events
Decaying blackboard events
Decaying auditory events
Team communications
The EnemySelection event
The PositionUpdate event
The RetreatPosition event
Updating agent behaviors
Enemy selection
Scoring dangerous positions
Score danger from bullet impacts
Score danger from bullet shots
Score danger from enemies
Score danger from dead bodies
Calculating the best flee position
Summary
9. Tactics
Influence maps
The cell height
The cell width
Constructing an influence map
Configuration
Voxelizing a navigation mesh
Drawing influence maps
Accessing influences
Setting influences
Getting influences
Clearing influences
Spreading influences
Cell inertia
Cell falloff
Influence map layers
Updating the influence map
Soldier tactics
Initializing and updating tactics
Scoring team influences
Initializing team influences
Updating team influences
Configuring team influences
Scoring dangerous areas
Tapping into agent events
Adding event handlers
Initializing dangerous influences
Updating dangerous influences
Configuring team influences
Summary
Index
Learning Game AI Programming with Lua
Learning Game AI Programming with Lua
Copyright © 2014 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: November 2014
Production reference: 1241114
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78328-133-6
www.packtpub.com
Cover image by Aniket Sawant (<[email protected]>)
Credits
Author
David Young
Reviewers
Mitch Allen
Stanislav Costiuc
Predrag Končar
Bayard Randel
Ross Rothenstine
Jayant C Varma
Commissioning Editor
Aarthi Kumaraswamy
Acquisition Editor
Nikhil Karkal
Content Development Editor
Mohammed Fahad
Technical Editor
Veronica Fernandes
Copy Editor
Stuti Srivastava
Project Coordinator
Danuta Jones
Proofreaders
Paul Hindle
Julie Jackson
Clyde Jenkins
Indexer
Rekha Nair
Production Coordinator
Kyle Albuquerque
Cover Work
Kyle Albuquerque
About the Author
David Young is a professional software engineer who works within the game industry. He started his career at NASA's Deep Space Network and later moved to NASA's Jet Propulsion Laboratory for the Curiosity rover mission. After leaving NASA, he worked on the platform that powers Riot Game's League of Legends. David is pursuing a PhD at the University of Southern California, focusing on graphics research in the field of real-time hair rendering and simulation.
I would like to thank my wife; without her support, this book would not have been possible.
About the Reviewers
Mitch Allen publishes video games for iOS and Android using Corona SDK and Unity3D. You can find links to his apps at http://mitchallen.com. You can also follow him on Twitter at @mitchallen.
He has worked on web and mobile projects for Lotus, IBM, the New York Times, Caterpillar Inc., Dragon Systems, Dictaphone, Nuance Communications, Yahoo!, Intuit Inc., and a number of startups.
He specializes in software development, automated testing, website performance testing, SDK testing, API testing, and technical writing.
He has served as a technical reviewer for Corona SDK Mobile Game Development Beginner's Guide, Packt Publishing.
Predrag Končar is a game developer and multimedia researcher. His primary areas of interest are games and combining technology and art. He is also into image and audio processing and interactive design and likes to spend his free time painting. In the last 12 years, he has worked as a technical and creative director for many online projects, published over 40 online games, participated in the production of several iOS apps, and worked with Packt Publishing as a technical reviewer on Corona SDK Mobile Game Development Beginner's Guide and Corona SDK Application Design. He has a strong background in Unity, C#, ActionScript, Lua, MEL script, Maya, and Python. He is a member of MENSA and ACM SIGGRAPH.
Bayard Randel is a software engineer at Canonical and is working on the Ubuntu Linux infrastructure. He lives in Dunedin, New Zealand. His technical interests include software education with Lua, web development, distributed systems, and functional programming.
Jayant C Varma is an Australian author, developer, trainer, and consultant with a special focus on mobile development and the use of mobile applications in businesses. He is the author of Learn Lua for iOS Game Development and is in the process of authoring another book for Packt Publishing on Xcode 6, apart from a few other books with other publishers. He is the principal consultant at OZ Apps, which is a company he founded. It specializes in mobile business solutions and development-related services.
Jayant has been in the IT Industry for quite a while and has seen things change from 8-bit computers and apps on cassette tapes to present-day mobile devices and app stores. He has always been drawn toward new technologies. He has worked in different domains during his career—which have seen him travel to different countries—including as the IT manager for BMW dealerships. He has also helped them set up wireless diagnostics in their workshop and contactless key readers at service receptions, and he has also automated the front office (including sales automation, ordering, prospecting, CRM, and so on in the early 2000s). He has also worked as a lecturer at the James Cook University and a trainer for the Apple University Consortium (AUC) and Australian Computer Society (ACS), among others, actively conducting trainings and workshops. He has created several mobile and desktop applications for clients, which are available on the App Store.
He has been a reviewer on more than half a dozen books for Packt Publishing. He can be contacted via his website at http://www.oz-apps.com.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Preface
Game AI is a combination of decision making and animation playback. Although classic or academic AI is focused solely on finding the right decision to make, game AI is responsible for acting on numerous decisions over time. Treating game AI independent from animation is a classic mistake that this book avoids by integrating animation and locomotion systems immediately into the AI systems. This subtle difference of decision making and execution changes many of the aspects that game AI programmers have to focus on.
The other large issue with game AI is regarding the specific needs and implementation strategies that are genre-specific. In order to prevent a watered-down approach, this book focuses on one specific genre, which is the first- and third-person action genre. Limiting the AI to this decision allows for an in-depth, tutorial-based approach of creating a full AI system. The overall goal of this book is to create an AI sandbox composed of professional level C and C++ open source libraries exposed to an AI system scripted in Lua.
What this book covers
Chapter 1, Getting Started with AI Sandbox, begins with learning the overview of how projects are set up as well as how the Lua script interacts with C++ code. Here, the beginnings of the AI sandbox are built from open source technologies, starting with a framework that integrates Lua, Ogre3D, OpenSteer, and Bullet Physics.
Chapter 2, Creating and Moving Agents, starts off with examples of the lowest layer of AI interaction with the world, local steering, and movement. Here, agent seeking, avoiding, and group movement are introduced into the sandbox through the use of the OpenSteer library.
Chapter 3, Character Animations, continues with the AI sandbox by exposing Ogre3D's animation playback and resource handling of Lua scripts. Low-level structures for controlling animation clips, animation state machines, and layered animations are integrated into the sandbox.
Chapter 4, Mind Body Control, combines animation handling with local steering and agent movement. Two different approaches toward mind and body interactions will be implemented. The first will focus on the latency between agent decisions and actions, while the second approach will focus on the perceived quality of the agent's actions.
Chapter 5, Navigation, builds up from local movement and moves on to long distance movement and planning. Navigation mesh generation provided by the Recast library will be integrated into the AI sandbox in order to allow A* pathfinding provided by the Detour library.
Chapter 6, Decision Making, adds intelligence to the choices the AI agents make. Different data structures and approaches to creating modular and reusable decision logic are covered through Lua scripts. Decision trees, finite state machines, and behavior trees are integrated into the sandbox.
Chapter 7, Knowledge Representation, adds the ability to store long-term and short-term information for individual agents. A centralized approach to storing and propagating agent knowledge about the world is exposed to Lua.
Chapter 8, Perception, exposes the services that are available to agents for them to query information about the world. Approaches toward visual- and communication-based information is integrated into the sandbox.
Chapter 9, Tactics, exposes a high-level spatial knowledge of the environment to the sandbox. Through a grid-based representation of the world, different knowledge sources are combined in order to give you an accurate tactical view of the environment for decision making.
What you need for this book
The AI sandbox solution and project files are built automatically through Premake, which is the utility program. Visual Studio 2008, 2010, 2012, and 2013 were tested for compatibility with each of the included demos. With the large number of dependencies the sandbox builds from the source, the project setup is only supported from Visual Studio.
The open source Lua IDE, which is Decoda, is used to write and debug Lua scripts within the sandbox. While other Lua script editors can be used, the sandbox natively exposes information that allows seamless Lua debugging within Decoda.
Who this book is for
This book is aimed at programmers who are looking to understand all the facets involved with the creation of the game AI. You should be comfortable with C or C++ and the Lua programming language. While no direct C or C++ knowledge is required, being able to fully debug into the sandbox allows for extending the existing functionality. A combination of both functional and object-oriented Lua will be used by the sandbox, and both approaches will be explained. Additional understanding of modern game engines will be useful but is not required.
Conventions
In this book, you will find a number of text styles that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: The LuaScriptUtilities header defines the metatable name of the vector type.
A block of code is set as follows:
local function CallCallbacks(callbacks, stateName, looping)
for index = 1, #callbacks do
callbacks[index].callback(
stateName, looping, callbacks[index].data);
end
end
New terms and important words are shown in bold. Words that you see on the screen, for example, in menus or dialog boxes, appear in the text like this: Open the Settings menu under the Project menu.
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or disliked. Reader feedback is important for us as it helps us develop titles that you will really get the most out of.
To send us general feedback, simply e-mail <[email protected]>, and mention the book's title in the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide at www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files from your account at http://www.packtpub.com for all the Packt Publishing books you have purchased. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Downloading the color images of this book
We also provide you with a PDF file that has color images of the screenshots/diagrams used in this book. The color images will help you better understand the changes in the output. You can download this file from: https://www.packtpub.com/sites/default/files/downloads/1336OS_ColoredImages.pdf.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the Errata Submission Form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter