Your SlideShare is downloading. ×

OGDC2012 Lua In Game_Mr. Van, Nguyen Ngoc


Published on

Presentation in OGDC 2012 organized by VNG Corp.

Presentation in OGDC 2012 organized by VNG Corp.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Lua in Games Mr. Nguyễn Ngọc Vân Ass Software Manager – VNG Corporation
  • 2. Agenda1. Lua & Benefits2. Core engine & Lua model3. Lua integrations model4. Secure Lua code5. Disadvantages
  • 3. 1. Lua & Benefits
  • 4. What’s Lua?• 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
  • 5. Lua Benefits• 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)
  • 6. Lua Benefits• 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
  • 7. 2. Core Engine & Lua Model
  • 8. Configs Control Flow Settings(XML, INI, Game Logic Process TXT, …) (Behaviors, AI, …) Core Engine
  • 9. Configs Settings (…, LUA) Control Flow Lua Engine LUA Logic Process(Behaviors, Core Engine AI, …)
  • 10. 3. Lua Integrations Model
  • 11. Lua APIs Lua Core Logic Lua Enginecodes (Logic Flow) (LVM) Lua interface Core Engine
  • 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. Quick Samplefunction 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 endend
  • 14. 4. Secure Lua Code
  • 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
  • 16. • Simple code function Add(a, b) return a + b end print(Add(100, 200))• Byte-code
  • 17. 5. Disadvantages
  • 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 