Benefits/tutorial of Lua in games
Upcoming SlideShare
Loading in...5

Benefits/tutorial of Lua in games






Total Views
Views on SlideShare
Embed Views



2 Embeds 929 926 3



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Benefits/tutorial of Lua in games Benefits/tutorial of Lua in games Presentation Transcript

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