4. • Scripting language
• Works through LVM (Lua Virtual Machine)
• Stack model design
• “Ultimate game scripting language” (GDC 2010)
• Popular uses in games
• Runs on most machines and devices
• Written in ANSI C and distributed by small library
What’s Lua?
5. • Free and open source
• Support OOP
• Runs on almost platforms
• Easy to interface with C/C++
• Very clean C API
• Auto memory management (GC)
• Powerful, fast and lightweight
• Flexible data structure (TABLE)
Lua Benefits
6. • Contents can be changed in real-time
• Auto generate contents
• Users can customize/change contents
• Fast and easy distributed contents
• Secure code
• Easy to use, embed and learn
• Good references
Lua Benefits
12. • Lua APIs
– Call to LVM through events/triggers base
– C APIs to work with LVM
– Auxiliary library provides basic functions to check,
register, debug, … LVM
– Use C APIs to build core functions
• Lua Interface
– Call to core logic through exports APIs
– Provides APIs (game APIs) to work with core logic
– Use C APIs to build, register, and exports APIs
13. function OnPlayerUseItem(nItem)
core.InstanceObj(OBJ_KIND_ITEM, nItem)
if item.GetKind() == ITM_KIND_HP then
local nItemHP = item.GetAttribute(ITM_ATTR_HP)
local nPlayerHP = player.GetCurrentHP()
local nAddHP = 0.2 * nPlayerHP
if nAddHP > 0 and nAddHP < player.GetMaxHP() then
player.SetCurrentHP(nAddHP)
player.Message('Player:
'..player.GetName()..' use item '..item.GetName())
end
end
end
Quick Sample
15. • Compile to byte-code
– Popular use
– Use luaC module included in library
– Modify luaC with keys for more secure
• Encrypted
– Little use
– Use keys-pair to encrypted
– Use signed file, CRC
18. • C APIs are too low-level
• Error messages are very confusing
• No try-catch, no exceptions
• Hard to debug
• Hard to interfaces with unlike C/C++
• Once LVM is crashed, it’s not likely to recover and the
service is crashed too
• Hard to implement reload feature at run-time
• For extreme speed, LuaJIT is a good choice