<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Lua on Birdor Blog</title>
		<link>https://blog.birdor.com/categories/lua/</link>
		<description>Recent content in Lua on Birdor Blog</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<lastBuildDate>Wed, 26 Nov 2025 13:24:00 +0800</lastBuildDate>
		
			<atom:link href="https://blog.birdor.com/categories/lua/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Lua for Game Development — Sample Game</title>
				<link>https://blog.birdor.com/lua-game-dev-ch20/</link>
				<pubDate>Wed, 26 Nov 2025 13:24:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch20/</guid>
				<description>A practical, end-to-end handbook on using Lua to build modern games — from core syntax to engine architecture, AI, netcode and shipping.</description>
			</item>
			<item>
				<title>Lua for Game Development — Complete Book</title>
				<link>https://blog.birdor.com/lua-game-dev-ch0/</link>
				<pubDate>Wed, 26 Nov 2025 13:20:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch0/</guid>
				<description>A complete, practical, production-ready guide to using Lua for modern game development — from syntax basics to engine architecture, AI, networking, tools and full deployment.</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 19: Packaging, Deployment, Localization &amp; Release Pipeline</title>
				<link>https://blog.birdor.com/lua-game-dev-ch19/</link>
				<pubDate>Wed, 26 Nov 2025 13:14:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch19/</guid>
				<description>&lt;p&gt;You&amp;rsquo;ve built your game.&lt;/p&gt;&#xA;&lt;p&gt;Now you must &lt;strong&gt;ship it&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Shipping a game is an engineering discipline in itself, requiring:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;packaging&lt;/li&gt;&#xA;&lt;li&gt;build automation&lt;/li&gt;&#xA;&lt;li&gt;deployment to multiple platforms&lt;/li&gt;&#xA;&lt;li&gt;patching &amp;amp; updates&lt;/li&gt;&#xA;&lt;li&gt;asset pipelines&lt;/li&gt;&#xA;&lt;li&gt;localization&lt;/li&gt;&#xA;&lt;li&gt;DLC &amp;amp; mod support&lt;/li&gt;&#xA;&lt;li&gt;crash reporting&lt;/li&gt;&#xA;&lt;li&gt;analytics&lt;/li&gt;&#xA;&lt;li&gt;CI/CD workflows&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua games can ship to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Windows&lt;/li&gt;&#xA;&lt;li&gt;macOS&lt;/li&gt;&#xA;&lt;li&gt;Linux&lt;/li&gt;&#xA;&lt;li&gt;Web (HTML5)&lt;/li&gt;&#xA;&lt;li&gt;iOS&lt;/li&gt;&#xA;&lt;li&gt;Android&lt;/li&gt;&#xA;&lt;li&gt;Steam Deck&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter shows how to build a full &lt;strong&gt;release pipeline&lt;/strong&gt;, regardless of engine.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-build-artifacts-what-needs-to-be-packaged&#34;&gt;1. Build Artifacts: What Needs to Be Packaged?&lt;/h2&gt;&#xA;&lt;p&gt;You must package:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 18: Engine Architecture, ECS, Plugins &amp; Optimization</title>
				<link>https://blog.birdor.com/lua-game-dev-ch18/</link>
				<pubDate>Wed, 26 Nov 2025 13:10:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch18/</guid>
				<description>&lt;p&gt;To complete your Lua game development knowledge, you must understand how to &lt;strong&gt;design a full engine&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;entity management&lt;/li&gt;&#xA;&lt;li&gt;components&lt;/li&gt;&#xA;&lt;li&gt;systems&lt;/li&gt;&#xA;&lt;li&gt;module lifecycle&lt;/li&gt;&#xA;&lt;li&gt;asset management&lt;/li&gt;&#xA;&lt;li&gt;scripting pipelines&lt;/li&gt;&#xA;&lt;li&gt;performance tuning&lt;/li&gt;&#xA;&lt;li&gt;optimization patterns&lt;/li&gt;&#xA;&lt;li&gt;debugging &amp;amp; profiling&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua excels as an engine scripting language due to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fast VM&lt;/li&gt;&#xA;&lt;li&gt;low memory footprint&lt;/li&gt;&#xA;&lt;li&gt;simple integration with C/C++&lt;/li&gt;&#xA;&lt;li&gt;natural data-driven design&lt;/li&gt;&#xA;&lt;li&gt;coroutine support&lt;/li&gt;&#xA;&lt;li&gt;quick iteration&lt;/li&gt;&#xA;&lt;li&gt;extensibility&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter finalizes the architecture needed for professional, scalable Lua game engines.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 17: Save Systems, Persistence, Serialization &amp; Content Pipelines</title>
				<link>https://blog.birdor.com/lua-game-dev-ch17/</link>
				<pubDate>Wed, 26 Nov 2025 13:05:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch17/</guid>
				<description>&lt;p&gt;A modern game needs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;reliable &lt;strong&gt;save/load systems&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;world state persistence&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;player progression&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;inventory &amp;amp; quests&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NPCs and simulation state&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;safe serialization &amp;amp; versioning&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;replay systems&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;modding and content pipelines&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua is &lt;em&gt;ideal&lt;/em&gt; for all of this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;tables serialize well&lt;/li&gt;&#xA;&lt;li&gt;code is data, data is code&lt;/li&gt;&#xA;&lt;li&gt;tables are readable and versionable&lt;/li&gt;&#xA;&lt;li&gt;hot reload simplifies pipelines&lt;/li&gt;&#xA;&lt;li&gt;modding = just load more Lua files&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter builds a complete system that scales from small to AAA-style persistence.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 16: Multiplayer, Netcode, Sync Models &amp; Lag Compensation</title>
				<link>https://blog.birdor.com/lua-game-dev-ch16/</link>
				<pubDate>Wed, 26 Nov 2025 13:00:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch16/</guid>
				<description>&lt;p&gt;Multiplayer is &lt;strong&gt;the hardest part&lt;/strong&gt; of game development.&lt;br&gt;&#xA;This chapter covers the exact models used by:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fortnite&lt;/li&gt;&#xA;&lt;li&gt;Apex Legends&lt;/li&gt;&#xA;&lt;li&gt;Overwatch&lt;/li&gt;&#xA;&lt;li&gt;Rocket League&lt;/li&gt;&#xA;&lt;li&gt;Factorio&lt;/li&gt;&#xA;&lt;li&gt;StarCraft II&lt;/li&gt;&#xA;&lt;li&gt;Roblox&lt;/li&gt;&#xA;&lt;li&gt;Unity Netcode / Unreal replication&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You will learn the following sync models:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Lockstep (deterministic strategy / SLG)&lt;/li&gt;&#xA;&lt;li&gt;Snapshot interpolation (action games)&lt;/li&gt;&#xA;&lt;li&gt;Client-side prediction &amp;amp; reconciliation&lt;/li&gt;&#xA;&lt;li&gt;Entity replication (position/rotation/state)&lt;/li&gt;&#xA;&lt;li&gt;Combat sync&lt;/li&gt;&#xA;&lt;li&gt;Bullet/projectile sync&lt;/li&gt;&#xA;&lt;li&gt;Lag compensation (server rewind, hit-scan)&lt;/li&gt;&#xA;&lt;li&gt;Anti-cheat considerations&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Lua is excellent for netcode:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 15: UI Systems, HUD, Menus &amp; Data Binding</title>
				<link>https://blog.birdor.com/lua-game-dev-ch15/</link>
				<pubDate>Wed, 26 Nov 2025 12:50:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch15/</guid>
				<description>&lt;p&gt;UI is the backbone of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;inventories&lt;/li&gt;&#xA;&lt;li&gt;crafting&lt;/li&gt;&#xA;&lt;li&gt;equipment menus&lt;/li&gt;&#xA;&lt;li&gt;quests &amp;amp; story&lt;/li&gt;&#xA;&lt;li&gt;shops&lt;/li&gt;&#xA;&lt;li&gt;minimaps&lt;/li&gt;&#xA;&lt;li&gt;HUD overlays&lt;/li&gt;&#xA;&lt;li&gt;dialogue&lt;/li&gt;&#xA;&lt;li&gt;pause menu&lt;/li&gt;&#xA;&lt;li&gt;game settings&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua is excellent for UI logic because:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;UI widgets map naturally to tables&lt;/li&gt;&#xA;&lt;li&gt;easy event dispatch&lt;/li&gt;&#xA;&lt;li&gt;hot-reload speeds iteration&lt;/li&gt;&#xA;&lt;li&gt;data binding = reactive UI&lt;/li&gt;&#xA;&lt;li&gt;timeline-based animations work perfectly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter builds a modern, scalable &lt;strong&gt;UI framework&lt;/strong&gt; in Lua.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;1-ui-widget-system&#34;&gt;1. UI Widget System&lt;/h1&gt;&#xA;&lt;p&gt;UI widgets are components:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;panels&lt;/li&gt;&#xA;&lt;li&gt;labels&lt;/li&gt;&#xA;&lt;li&gt;buttons&lt;/li&gt;&#xA;&lt;li&gt;images/icons&lt;/li&gt;&#xA;&lt;li&gt;windows&lt;/li&gt;&#xA;&lt;li&gt;scroll lists&lt;/li&gt;&#xA;&lt;li&gt;tooltips&lt;/li&gt;&#xA;&lt;li&gt;HUD overlays&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We define a generic widget base class.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 14: Combat AI, Behavior Trees, Utility AI &amp; Enemy Design</title>
				<link>https://blog.birdor.com/lua-game-dev-ch14/</link>
				<pubDate>Wed, 26 Nov 2025 12:40:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch14/</guid>
				<description>&lt;p&gt;Combat AI determines the &lt;strong&gt;challenge, pacing, and tension&lt;/strong&gt; of any action game.&lt;/p&gt;&#xA;&lt;p&gt;Modern games use:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;State Machines&lt;/strong&gt; (simple AI)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Behavior Trees&lt;/strong&gt; (modular, readable)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Utility AI&lt;/strong&gt; (dynamic decisions)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Blackboards&lt;/strong&gt; (shared memory)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Squad AI&lt;/strong&gt; (formations, flanking, roles)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Boss AI&lt;/strong&gt; (scripted phases + BT nodes)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua&amp;rsquo;s flexibility makes it ideal for building AI layers.&lt;/p&gt;&#xA;&lt;p&gt;This chapter builds:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Enemy archetypes&lt;/li&gt;&#xA;&lt;li&gt;Finite State Machine (FSM) combat AI&lt;/li&gt;&#xA;&lt;li&gt;Behavior Tree engine&lt;/li&gt;&#xA;&lt;li&gt;Utility-based decision system&lt;/li&gt;&#xA;&lt;li&gt;Aggro &amp;amp; threat systems&lt;/li&gt;&#xA;&lt;li&gt;Group tactics (flank, assist, swarm)&lt;/li&gt;&#xA;&lt;li&gt;Boss scripting (phases, triggers, timelines)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;1-enemy-archetypes&#34;&gt;1. Enemy Archetypes&lt;/h1&gt;&#xA;&lt;p&gt;Define enemies in data:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 13: NPCs, Town Simulation, Factions &amp; AI Routines</title>
				<link>https://blog.birdor.com/lua-game-dev-ch13/</link>
				<pubDate>Wed, 26 Nov 2025 12:30:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch13/</guid>
				<description>&lt;p&gt;NPCs breathe life into any game world:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;villagers with schedules&lt;/li&gt;&#xA;&lt;li&gt;merchants with stock&lt;/li&gt;&#xA;&lt;li&gt;guards who patrol&lt;/li&gt;&#xA;&lt;li&gt;hostile factions&lt;/li&gt;&#xA;&lt;li&gt;relationships&lt;/li&gt;&#xA;&lt;li&gt;dialogue that reacts to story flags&lt;/li&gt;&#xA;&lt;li&gt;simulation (hunger, work, needs)&lt;/li&gt;&#xA;&lt;li&gt;towns that evolve over time&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua is perfect for simulation layers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lightweight logic&lt;/li&gt;&#xA;&lt;li&gt;hot reload&lt;/li&gt;&#xA;&lt;li&gt;easy-to-edit behavior packages&lt;/li&gt;&#xA;&lt;li&gt;clean data-driven content&lt;/li&gt;&#xA;&lt;li&gt;integrates with quests, story, and world triggers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter builds:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;NPC definitions&lt;/li&gt;&#xA;&lt;li&gt;Behavior packages (wander, talk, patrol, work)&lt;/li&gt;&#xA;&lt;li&gt;Daily schedules (day/night cycles)&lt;/li&gt;&#xA;&lt;li&gt;Merchant system&lt;/li&gt;&#xA;&lt;li&gt;Factions &amp;amp; reputation&lt;/li&gt;&#xA;&lt;li&gt;Town simulation&lt;/li&gt;&#xA;&lt;li&gt;Social interactions&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;1-npc-definitions-data-driven&#34;&gt;1. NPC Definitions (Data-Driven)&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;npcs/&#xA;villagers.lua&#xA;merchants.lua&#xA;guards.lua&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;11-example-npc-definition&#34;&gt;1.1 Example NPC Definition&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;elder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Village Elder&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sprite&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;npc_elder&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;faction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;village&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;behaviors&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;talk&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;idle&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dialogue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;elder_intro&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;schedule&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sleep&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;idle&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;walk_square&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;home&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sleep&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;NPC = data + behaviors + dialogue + schedule.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 12: Quests, Missions, Dialogue Trees &amp; Story Progression</title>
				<link>https://blog.birdor.com/lua-game-dev-ch12/</link>
				<pubDate>Wed, 26 Nov 2025 12:20:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch12/</guid>
				<description>&lt;p&gt;Modern games rely heavily on structured progression systems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Main story quests&lt;/li&gt;&#xA;&lt;li&gt;Side quests&lt;/li&gt;&#xA;&lt;li&gt;Dynamic missions&lt;/li&gt;&#xA;&lt;li&gt;Dialogue trees&lt;/li&gt;&#xA;&lt;li&gt;NPC interactions&lt;/li&gt;&#xA;&lt;li&gt;World state &amp;amp; flags&lt;/li&gt;&#xA;&lt;li&gt;Branching narrative&lt;/li&gt;&#xA;&lt;li&gt;Story checkpoints&lt;/li&gt;&#xA;&lt;li&gt;Rewards&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua is ideal for this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Data-driven quest definitions&lt;/li&gt;&#xA;&lt;li&gt;Easy branching logic&lt;/li&gt;&#xA;&lt;li&gt;Hot reload for dialogue systems&lt;/li&gt;&#xA;&lt;li&gt;Clean JSON-like scripting&lt;/li&gt;&#xA;&lt;li&gt;Integrates perfectly with triggers, inventory, UI, and levels&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter introduces a &lt;strong&gt;complete quest system&lt;/strong&gt; used in RPGs, action games, and open-world titles.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 11: Inventory, Items, Equipment, Crafting &amp; Data-Driven Content</title>
				<link>https://blog.birdor.com/lua-game-dev-ch11/</link>
				<pubDate>Wed, 26 Nov 2025 12:10:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch11/</guid>
				<description>&lt;p&gt;Inventory and item systems are essential for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RPGs&lt;/li&gt;&#xA;&lt;li&gt;Action RPGs&lt;/li&gt;&#xA;&lt;li&gt;Survival games&lt;/li&gt;&#xA;&lt;li&gt;Roguelikes&lt;/li&gt;&#xA;&lt;li&gt;Adventure/Metroidvania&lt;/li&gt;&#xA;&lt;li&gt;Open-world games&lt;/li&gt;&#xA;&lt;li&gt;SLG/Strategy games&lt;/li&gt;&#xA;&lt;li&gt;Loot-based games&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua is &lt;strong&gt;perfect&lt;/strong&gt; for building these systems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Data-driven items (Lua tables)&lt;/li&gt;&#xA;&lt;li&gt;Hot-reloadable item definitions&lt;/li&gt;&#xA;&lt;li&gt;Easy extensions (rarities, tags, effects)&lt;/li&gt;&#xA;&lt;li&gt;Modular inventory logic&lt;/li&gt;&#xA;&lt;li&gt;Crafting formulas as tables&lt;/li&gt;&#xA;&lt;li&gt;Shops using item IDs&lt;/li&gt;&#xA;&lt;li&gt;Persistent save/load&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter builds a complete, modern item ecosystem.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-item-definitions-data-driven&#34;&gt;1. Item Definitions (Data-Driven)&lt;/h2&gt;&#xA;&lt;p&gt;All items are defined as &lt;strong&gt;Lua tables&lt;/strong&gt;.&lt;br&gt;&#xA;This is how most professional games implement content pipelines.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 8: Animation Systems, Cameras, Cutscenes &amp; Timeline Scripting</title>
				<link>https://blog.birdor.com/lua-game-dev-ch8/</link>
				<pubDate>Wed, 26 Nov 2025 10:24:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch8/</guid>
				<description>&lt;p&gt;Animation and cinematic systems transform raw gameplay into a polished, emotional experience.&lt;br&gt;&#xA;Lua is ideal for sequencing, orchestration, animation management, and camera scripting because:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Coroutine syntax is perfect for timelines.&lt;/li&gt;&#xA;&lt;li&gt;Hot reload accelerates iteration.&lt;/li&gt;&#xA;&lt;li&gt;Data-driven tables make timelines readable.&lt;/li&gt;&#xA;&lt;li&gt;Engines expose animation/camera APIs easily.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this chapter we build:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Animation state machines&lt;/li&gt;&#xA;&lt;li&gt;Sprite animation system&lt;/li&gt;&#xA;&lt;li&gt;Camera follow/zoom/lerp&lt;/li&gt;&#xA;&lt;li&gt;Timeline scripting engine&lt;/li&gt;&#xA;&lt;li&gt;Dialogue system&lt;/li&gt;&#xA;&lt;li&gt;Cutscenes (with coroutines)&lt;/li&gt;&#xA;&lt;li&gt;Screen/camera effects (shake, flash, fade)&lt;/li&gt;&#xA;&lt;li&gt;Sequencers for complex cinematic flows&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;1-animation-state-machines-asm&#34;&gt;1. Animation State Machines (ASM)&lt;/h1&gt;&#xA;&lt;p&gt;Most games rely on an animation finite-state-machine:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 7: UI Systems, HUD, Widgets, Event Binding, and Lua-Driven UI Architecture</title>
				<link>https://blog.birdor.com/lua-game-dev-ch7/</link>
				<pubDate>Wed, 26 Nov 2025 10:20:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch7/</guid>
				<description>&lt;p&gt;User interfaces are a core part of game development:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HUD (health bars, minimaps, ammo counters)&lt;/li&gt;&#xA;&lt;li&gt;Menus (pause, settings, inventory)&lt;/li&gt;&#xA;&lt;li&gt;In-game shops&lt;/li&gt;&#xA;&lt;li&gt;UI alerts and notifications&lt;/li&gt;&#xA;&lt;li&gt;Pop-up windows and dialogs&lt;/li&gt;&#xA;&lt;li&gt;Touch UI for mobile&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua excels here because UI scripting requires:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Flexibility&lt;/li&gt;&#xA;&lt;li&gt;Fast iteration&lt;/li&gt;&#xA;&lt;li&gt;Easy updates&lt;/li&gt;&#xA;&lt;li&gt;Data binding&lt;/li&gt;&#xA;&lt;li&gt;Coroutine-friendly animations&lt;/li&gt;&#xA;&lt;li&gt;Modular components&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter teaches you how to build &lt;strong&gt;a complete UI architecture&lt;/strong&gt; in Lua.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-the-goals-of-a-good-ui-architecture&#34;&gt;1. The Goals of a Good UI Architecture&lt;/h2&gt;&#xA;&lt;p&gt;A production UI system must be:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 10: Audio, Particles, VFX &amp; Feedback Systems</title>
				<link>https://blog.birdor.com/lua-game-dev-ch10/</link>
				<pubDate>Tue, 25 Nov 2025 23:55:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch10/</guid>
				<description>&lt;p&gt;Great gameplay is not only logic, animation, and UI.&lt;/p&gt;&#xA;&lt;p&gt;It is &lt;strong&gt;FEEL&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Games become satisfying through:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;impactful audio&lt;/li&gt;&#xA;&lt;li&gt;juicy hit feedback&lt;/li&gt;&#xA;&lt;li&gt;particles &amp;amp; sparks&lt;/li&gt;&#xA;&lt;li&gt;camera shake&lt;/li&gt;&#xA;&lt;li&gt;screen flashes&lt;/li&gt;&#xA;&lt;li&gt;slow motion&lt;/li&gt;&#xA;&lt;li&gt;dynamic music&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lua excels at orchestrating these effects.&lt;/p&gt;&#xA;&lt;p&gt;This chapter will show how to design a complete &lt;strong&gt;feedback system&lt;/strong&gt; using Lua.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-audio-architecture&#34;&gt;1. Audio Architecture&lt;/h2&gt;&#xA;&lt;p&gt;Audio usually comes in three categories:&lt;/p&gt;&#xA;&lt;h3 id=&#34;sound-effects-sfx&#34;&gt;Sound Effects (SFX)&lt;/h3&gt;&#xA;&lt;p&gt;Attacks, footsteps, explosions.&lt;/p&gt;&#xA;&lt;h3 id=&#34;background-music-bgm&#34;&gt;Background Music (BGM)&lt;/h3&gt;&#xA;&lt;p&gt;Looping tracks.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 9: Scenes, Levels, World Systems &amp; Spawning</title>
				<link>https://blog.birdor.com/lua-game-dev-ch9/</link>
				<pubDate>Tue, 25 Nov 2025 23:20:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch9/</guid>
				<description>&lt;p&gt;Modern games have &lt;strong&gt;scenes, levels, maps, spawn waves, world streaming, checkpoints&lt;/strong&gt;, and &lt;strong&gt;persistent game states&lt;/strong&gt;.&lt;br&gt;&#xA;Lua’s lightweight and data-driven nature makes it perfect for orchestrating:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Level loading/unloading&lt;/li&gt;&#xA;&lt;li&gt;Map systems (tile-based or object-based)&lt;/li&gt;&#xA;&lt;li&gt;Trigger zones and events&lt;/li&gt;&#xA;&lt;li&gt;Spawn systems (enemies, loot, NPCs)&lt;/li&gt;&#xA;&lt;li&gt;World progression&lt;/li&gt;&#xA;&lt;li&gt;Checkpoints/Save systems&lt;/li&gt;&#xA;&lt;li&gt;Streaming large worlds&lt;/li&gt;&#xA;&lt;li&gt;Scene transitions &amp;amp; layering&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this chapter, we build a &lt;strong&gt;full world architecture&lt;/strong&gt; that can be extended to RPGs, shooters, platformers, adventure games, and SLG games.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 6: AI Systems — BT, FSM, Utility AI, GOAP, Navigation, Hybrid AI</title>
				<link>https://blog.birdor.com/lua-game-dev-ch6/</link>
				<pubDate>Tue, 25 Nov 2025 20:11:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch6/</guid>
				<description>&lt;p&gt;Game AI is one of Lua’s strongest domains.&lt;br&gt;&#xA;Lua scripts drive NPCs in:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;World of Warcraft&lt;/li&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t Starve&lt;/li&gt;&#xA;&lt;li&gt;CryEngine titles&lt;/li&gt;&#xA;&lt;li&gt;Roblox (Luau)&lt;/li&gt;&#xA;&lt;li&gt;Cocos2d-x Lua games&lt;/li&gt;&#xA;&lt;li&gt;Thousands of mobile/indie games&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Game studios rely heavily on Lua due to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ease of scripting&lt;/li&gt;&#xA;&lt;li&gt;Data-driven behavior&lt;/li&gt;&#xA;&lt;li&gt;Fast iteration&lt;/li&gt;&#xA;&lt;li&gt;Easy debugging and hot reload&lt;/li&gt;&#xA;&lt;li&gt;Coroutine-based timelines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This chapter covers all major AI paradigms used in modern games:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;FSM (Finite State Machines)&lt;/li&gt;&#xA;&lt;li&gt;Behavior Trees (BT)&lt;/li&gt;&#xA;&lt;li&gt;Utility AI (Score-based decision AI)&lt;/li&gt;&#xA;&lt;li&gt;GOAP (Goal-Oriented Action Planning)&lt;/li&gt;&#xA;&lt;li&gt;Navigation patterns&lt;/li&gt;&#xA;&lt;li&gt;Blackboard memory systems&lt;/li&gt;&#xA;&lt;li&gt;Hybrid AI architecture for bosses&lt;/li&gt;&#xA;&lt;li&gt;Performance tuning for large AI crowds&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-finite-state-machines-fsm&#34;&gt;1. Finite State Machines (FSM)&lt;/h2&gt;&#xA;&lt;p&gt;FSMs are simple, predictable, and great for:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 5: Combat Systems, Hitboxes, Stats, Buffs, and Abilities</title>
				<link>https://blog.birdor.com/lua-game-dev-ch5/</link>
				<pubDate>Tue, 25 Nov 2025 20:03:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch5/</guid>
				<description>&lt;p&gt;Combat systems are the backbone of many games:&lt;br&gt;&#xA;RPGs, action games, shooters, platformers, MOBAs, and roguelikes.&lt;/p&gt;&#xA;&lt;p&gt;This chapter explains how to implement &lt;strong&gt;real combat architecture&lt;/strong&gt; in Lua:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Entity stats &amp;amp; modifiers&lt;/li&gt;&#xA;&lt;li&gt;Damage pipeline&lt;/li&gt;&#xA;&lt;li&gt;Hitboxes &amp;amp; hurtboxes&lt;/li&gt;&#xA;&lt;li&gt;Buffs, debuffs, DOTs, HOTs&lt;/li&gt;&#xA;&lt;li&gt;Cooldowns &amp;amp; cast times&lt;/li&gt;&#xA;&lt;li&gt;Skill/ability system&lt;/li&gt;&#xA;&lt;li&gt;Combat logs &amp;amp; replay&lt;/li&gt;&#xA;&lt;li&gt;Network-sync-friendly updates&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This is a &lt;strong&gt;complete combat architecture&lt;/strong&gt;, not a toy example.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-entity-stats-base--modifiers&#34;&gt;1. Entity Stats (Base + Modifiers)&lt;/h2&gt;&#xA;&lt;p&gt;Stats usually come from:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 4: Building a Full Lua Game Architecture</title>
				<link>https://blog.birdor.com/lua-game-dev-ch4/</link>
				<pubDate>Tue, 25 Nov 2025 20:00:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch4/</guid>
				<description>&lt;p&gt;This chapter teaches you how to design a &lt;strong&gt;complete Lua game architecture&lt;/strong&gt;—the same structure used by real production engines.&lt;/p&gt;&#xA;&lt;p&gt;We will build:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A robust game loop&lt;/li&gt;&#xA;&lt;li&gt;Scene management (stack-based)&lt;/li&gt;&#xA;&lt;li&gt;Systems &amp;amp; update flow&lt;/li&gt;&#xA;&lt;li&gt;Input abstraction&lt;/li&gt;&#xA;&lt;li&gt;Resource manager&lt;/li&gt;&#xA;&lt;li&gt;Save/load system&lt;/li&gt;&#xA;&lt;li&gt;Hot reload support&lt;/li&gt;&#xA;&lt;li&gt;Debugging overlays &amp;amp; dev tools&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;A real game must be modular, testable, and reloadable.&lt;/p&gt;&#xA;&lt;p&gt;Lua excels here.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-the-game-loop-core-of-any-engine&#34;&gt;1. The Game Loop (Core of Any Engine)&lt;/h2&gt;&#xA;&lt;p&gt;All engines—Unity, Unreal, Godot, Defold, Cocos2dx-lua, Corona, LÖVE—follow the same idea:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 3: Practical Patterns for Real Games</title>
				<link>https://blog.birdor.com/lua-game-dev-ch3/</link>
				<pubDate>Tue, 25 Nov 2025 19:58:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch3/</guid>
				<description>&lt;p&gt;Modern game development relies heavily on Lua’s flexibility.&lt;br&gt;&#xA;Studios consistently use a set of &lt;strong&gt;Lua architectural patterns&lt;/strong&gt; to build clean, scalable, and maintainable game logic.&lt;/p&gt;&#xA;&lt;p&gt;This chapter presents the patterns used in:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2D/3D indie engines&lt;/li&gt;&#xA;&lt;li&gt;AAA game scripting systems&lt;/li&gt;&#xA;&lt;li&gt;LiveOps / network games&lt;/li&gt;&#xA;&lt;li&gt;Modular UI systems&lt;/li&gt;&#xA;&lt;li&gt;Defold / Love2D / Roblox (Luau) / Cocos2d-x Lua&lt;/li&gt;&#xA;&lt;li&gt;Custom C++ engines with embedded Lua&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We will cover:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Entity &amp;amp; component architecture (ECS-friendly)&lt;/li&gt;&#xA;&lt;li&gt;Messaging &amp;amp; event buses&lt;/li&gt;&#xA;&lt;li&gt;Timer systems &amp;amp; schedulers&lt;/li&gt;&#xA;&lt;li&gt;Finite state machines (FSM)&lt;/li&gt;&#xA;&lt;li&gt;Behavior trees (BT) in pure Lua&lt;/li&gt;&#xA;&lt;li&gt;Tweening &amp;amp; animation patterns&lt;/li&gt;&#xA;&lt;li&gt;Modular game script structure&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This is the first “serious engineering” chapter in the book.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 2: Language Essentials</title>
				<link>https://blog.birdor.com/lua-game-dev-ch2/</link>
				<pubDate>Tue, 25 Nov 2025 19:52:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch2/</guid>
				<description>&lt;p&gt;Lua’s syntax is small, elegant, and optimized for scripting game logic.&lt;br&gt;&#xA;This chapter teaches Lua through a &lt;strong&gt;game development lens&lt;/strong&gt;, focusing on features you will &lt;em&gt;actually use&lt;/em&gt; when scripting AI, animations, UI, events, gameplay systems, or tools.&lt;/p&gt;&#xA;&lt;p&gt;This is not a language textbook.&lt;br&gt;&#xA;This is Lua for building &lt;strong&gt;real games&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-the-building-blocks-of-lua&#34;&gt;1. The Building Blocks of Lua&lt;/h2&gt;&#xA;&lt;p&gt;Lua’s core types:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;nil&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;number&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;string&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;table&lt;/code&gt;← &lt;strong&gt;the most important type&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;function&lt;/code&gt; ← &lt;strong&gt;first-class citizen&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are no classes, arrays, or objects—&lt;strong&gt;tables&lt;/strong&gt; represent all of these.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua for Game Development — Chapter 1: Why Lua?</title>
				<link>https://blog.birdor.com/lua-game-dev-ch1/</link>
				<pubDate>Tue, 25 Nov 2025 19:48:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-game-dev-ch1/</guid>
				<description>&lt;p&gt;Lua is one of the most influential technologies in game development.&lt;br&gt;&#xA;It is lightweight, embeddable, fast, expressive, and battle-tested across decades.&lt;/p&gt;&#xA;&lt;p&gt;In this chapter, we explore &lt;strong&gt;why Lua is still the #1 scripting language for games&lt;/strong&gt;, how it fits into modern engines, and the core principles that make Lua unique.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-what-makes-lua-special&#34;&gt;1. What Makes Lua Special?&lt;/h2&gt;&#xA;&lt;p&gt;Lua was designed with &lt;em&gt;one&lt;/em&gt; mission:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;A small, fast scripting language that can glue complex systems together.&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua Deep Dive: Coroutines, State Machines, DSLs, and Game Scripting Architecture</title>
				<link>https://blog.birdor.com/lua-deep-dive/</link>
				<pubDate>Tue, 25 Nov 2025 19:21:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-deep-dive/</guid>
				<description>&lt;p&gt;Lua is not just a lightweight script language.&lt;br&gt;&#xA;It is a &lt;strong&gt;runtime toolbox&lt;/strong&gt; capable of building state machines, pipelines, schedulers, entity systems, and even domain-specific languages (DSLs).&lt;/p&gt;&#xA;&lt;p&gt;This deep dive focuses on &lt;strong&gt;production-level techniques&lt;/strong&gt; heavily used in:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Game engines (Defold, Love2D, custom C/C++ engines)&lt;/li&gt;&#xA;&lt;li&gt;AI scripting&lt;/li&gt;&#xA;&lt;li&gt;UI scripting&lt;/li&gt;&#xA;&lt;li&gt;Simulation and animation&lt;/li&gt;&#xA;&lt;li&gt;Networking and asynchronous flows&lt;/li&gt;&#xA;&lt;li&gt;Configuration languages and DSLs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;1-coroutine-pipelines-the-real-power-of-lua&#34;&gt;1. Coroutine Pipelines (The Real Power of Lua)&lt;/h1&gt;&#xA;&lt;p&gt;Coroutines allow &lt;strong&gt;cooperative multitasking&lt;/strong&gt;, enabling sequential code that behaves like async flows.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Lua Advanced: Metatables, Coroutines, and Powerful Patterns</title>
				<link>https://blog.birdor.com/lua-advanced/</link>
				<pubDate>Tue, 25 Nov 2025 19:20:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-advanced/</guid>
				<description>&lt;p&gt;Lua is simple on the surface, but extremely powerful underneath.&lt;br&gt;&#xA;This article explores &lt;strong&gt;metatables&lt;/strong&gt;, &lt;strong&gt;metamethods&lt;/strong&gt;, &lt;strong&gt;coroutines&lt;/strong&gt;, advanced &lt;strong&gt;module design&lt;/strong&gt;, and a set of practical patterns used in games, tools, and embedded systems.&lt;/p&gt;&#xA;&lt;p&gt;All examples are fully runnable with standard Lua 5.3/5.4.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-metatables-luas-custom-behavior-engine&#34;&gt;1. Metatables: Lua’s Custom Behavior Engine&lt;/h2&gt;&#xA;&lt;p&gt;Metatables let you customize how tables behave—similar to operator overloading, custom indexing, inheritance, and more.&lt;/p&gt;&#xA;&lt;h3 id=&#34;11-basic-example-__index-fallback&#34;&gt;1.1 Basic Example: __index Fallback&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;defaults&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;player&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setmetatable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;__index&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;defaults&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player.hp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;-- 100&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;player.mp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;-- 50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Explanation:&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Practical Introduction to Lua (Beginner Friendly)</title>
				<link>https://blog.birdor.com/lua-introduction/</link>
				<pubDate>Tue, 25 Nov 2025 19:16:00 +0800</pubDate>
				<guid>https://blog.birdor.com/lua-introduction/</guid>
				<description>&lt;p&gt;Lua is a lightweight, embeddable scripting language widely used in game engines (Defold, Roblox, Corona), configuration systems, automation tools, and embedded platforms.&lt;/p&gt;&#xA;&lt;p&gt;This article gives you a &lt;strong&gt;clean, beginner-friendly introduction&lt;/strong&gt; with &lt;strong&gt;complete and runnable examples&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-setting-up-and-running-lua&#34;&gt;1. Setting Up and Running Lua&lt;/h2&gt;&#xA;&lt;h3 id=&#34;install-lua&#34;&gt;Install Lua&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install lua&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Linux (Ubuntu/Debian)&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install lua5.4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;br&gt;&#xA;Download binaries or use Lua for Windows.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;run-a-script&#34;&gt;Run a Script&lt;/h3&gt;&#xA;&lt;p&gt;Write &lt;code&gt;hello.lua&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello, Lua!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run:&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
