end - Computer Science Department

advertisement
CSE 380 – Computer Game Programming
Scripting and Lua
Lua
What is a scripting language?
• A higher-level programming language (of sorts)
• Interpreted by another program at runtime
– like a game engine
Scripting Language Code
High-Level Language Code
Assembly Code
Machine Code
Hardware
The first one? SCUMM
• Script Creation Utility for Maniac Mansion
– by LucasArts for Commodore 64
What’s the point?
• NO MORE CONSTANTS
–
–
Why?
What’s wrong with constants?
• They’re simpler languages
–
–
So?
Doesn’t more languages mean more
complexity?
• Programming for non-programmers
• Compiler-time liberated development
• Tools + Scriping
And for games?
• Make Mods or Original Games
• Use scripts to specify:
–
–
–
–
–
Game Settings
GUI layout
Audio cues
Control bots
Responses to game events
• Bottom Line:
– leave the heavy lifting to the engine. How?
•
tap into engine via premade script functions & data
2 Scripting Flavors
• Data definition languages
–
–
worldWidth:800
declarative statements
used at game or level load time
• Runtime languages
– code executes within engine
context at runtime
– extend or customize engine
– allows for more complex
instructions
function process act(act)
for i, act in ipairs(act) do
if act:is_alive() then
act.process()
end
end
end
Typical Properties of
Game Scripting Languages
•
•
•
•
•
Interpreted
Lightweight
Support for rapid iteration
Convenience/Ease of use
Good for Rapid Prototyping
Popular Game Scripting Languages
• Game Engine
–QuakeC
–UnrealScript
• General Purpose
–python
–Lua
A crash course in Lua
• Let’s learn some simple stuff
–
–
–
–
–
–
–
Commenting
Variables
Operators
Functions
Tables
Conditional Statements
Iteration
• Download LuaExample.zip and open
• Ref: http://www.lua.org/manual/5.2/
A note about Lua
• Lua is a C library
• Using it in a C++ program can be tricky
– structs instead of objects
– global methods
– unsupported C functions
• An alternative is LuaPlus
– not standard Lua
– you could write your own wrapper classes as well
Lua Commenting
• For single line, start line with “--”
– Ex:
-- THIS IS A COMMENT
• To span multiple lines:
– open with --[[
– close with ]]-– Ex:
--[[
THIS IS A
COMMENT
--]]
Lua Variables
• Dynamically typed. Huh?
– they can change type
x = 3
x = 3.14
x = "PI"
-- x is an integer
-- x is a float
-- x is a String
• A Lua variable can be a:
– number, string, boolean, table, function, nil, userdata, or thread
– nil ≈ NULL
• also marks variable for deletion
• Default scope for Lua variables is global
Lua Operators
• Many the regular suspects
– like +, -, *, /, %, =, ==, <, >, <=, >=
• Some you may not have used before, like:
^ for exponentiation
~= for testing for inequality
.. for string concatenation
• And some are missing
– like ++, --, +=, -=, *=, /=
• And some are done via keywords
– Like and, or, and not
Lua Functions
• First class objects. Huh?
– Can be treated like any other variable
• passed as a method argument
• assigned to a variable
• Function Declaration Example:
function Square(val)
return val * val
end
• Function Invocation Example:
x = Square(5)
print(x)
-- invoke our function
-- prints 25
Lua Tables
• Lua’s only data structure
• Arrays and generic dictionaries all in one. Ex:
prime = {2, 3, 5, 7, 11 } -- make a table
print(prime[2])
-- access an element, print 5
prime[2] = 13
-- assign a value
• Tables can be indexed by other types. Ex:
idTable = {}
idTable["id1"] = 123
idTable["id2"] = 321
-- make a table
-- put a num in
-- and another
• Table is actually either an array or a map
Lua Conditionals
• Support for if … elseif … else
• Ex:
if x == 5 then
print(5)
elseif x == 6 then
print(5)
print(6)
else
print(0)
end
• How does it know when one code block ends and another begins?
Lua Iteration
• Support for while and for statements
• Ex:
prime = {2, 3, 5, 7, 11}
for index, value in ipairs(prime) do
print(index, value)
end
• Nested Example:
for i = 1, 10, 1 do
if (i % 2) == 2 then
print(i)
end
end
C++  Lua and Lua  C++
• We may need to do both
• Tricky with C++. Why?
– Lua is in C.
• Solution: Use LuaPlus
– C++ library for interfacing with Lua
– Not Lua standard
• Wed:
–
–
–
–
LuaPlus hands on examples
C++  LuaPlus
LuaPlus  C++
How and why to do so
Reference
• Game Engine Architecture by Jason Gregory
– Chapter 14: Runtime Gameplay Foundation Systems
• Game Coding Complete, 4th Edition by Mike
McShaffry and David Graham
– Chapter 12: Scripting with Lua
Download