open-sourcegameturn-based-strategyfantasyrts type: concept 创建: 2026-04-10 更新: 2026-04-10

The Battle for Wesnoth

高奇幻主题回合制战术策略游戏,86,918 commits,1GB+ 仓库,C++17 + WML 内容脚本系统

基本信息

项目 内容
GitHub https://github.com/wesnoth/wesnoth
语言 C++17(核心)+ Lua(脚本)+ WML(Wesnoth Markup Language,内容配置)
构建系统 SCons >= 0.98.3 + CMake >= 3.21(双构建系统)
渲染/引擎 SDL2 >= 2.0.18 自研 2D 渲染引擎
许可 GPL v2+(源码)+ CC BY-SA v4.0(新资源)
平台 Windows/macOS/Linux/iOS/Android/Steam
Stars ~10K+
社区 论坛 + Discord + IRC + Steam

核心技术点

WML 内容脚本系统

Wesnoth 最具特色的设计:游戏内容完全由 WML(Wesnoth Markup Language)驱动,而非硬编码。

  • WML 定义单位属性、战役剧情、地形类型、AI 行为、GUI 界面
  • 战役脚本(.cfg)控制叙事分支、触发事件、单位部署
  • 这使非程序员也能创作完整战役——社区拥有数百个自制战役
  • open-source-game/wesnoth 的 WML 系统类似于 open-source-game/OpenRA 的 lua 脚本层,但更成熟

Lua 脚本扩展

Lua 用于高级逻辑,补充 WML 的局限性:

  • AI 行为微调、单位特殊能力、复杂触发逻辑
  • lua/ai/ 目录包含 AI 引擎代码
  • data/scenario/ 大量使用 Lua 扩展 WML

双构建系统(SCons + CMake)

项目同时支持 SCons 和 CMake:

  • SCons:历史构建系统,scons 一键构建
  • CMake:现代跨平台 IDE 支持,Visual Studio + vcpkg 官方推荐 Windows 构建方式
  • cmake/ 目录含完整 CMake 配置

大型依赖栈

Boost >= 1.70 (filesystem/locale/iostreams/regex/coroutine/graph...)
SDL2 >= 2.0.18
SDL2_image, SDL2_mixer
Fontconfig >= 2.4.1
Cairo >= 1.10.0 + Pango >= 1.50.0
libvorbis + libbz2 + libz + libssl + libcurl

多平台抽象

  • 原生 macOS Xcode 项目(projectfiles/Xcode/
  • Visual Studio + vcpkg 官方 Windows 构建方案
  • Flatpak Linux 打包
  • iOS/Android 移植(iOS 版本已停止维护)

国际化(i18n)

  • po/ 目录含 30+ 语言翻译
  • GNU gettext 驱动

玩法特点

战役系统

  • 多个独立战役,每个战役有完整故事线、多个难度等级
  • 战役间进度不共享单位(roguelike 风格)
  • 剧情驱动,情感叙事

兵种系统

  • 6+ 派系,每派系独特兵种树
  • 单位有经验值、等级晋升、能力点分配
  • 回合制网格地图,地形影响战斗(森林提供防御加成等)

地图编辑器

  • 内置地图编辑器,功能完整
  • 支持数百种地形类型
  • 可创建完整战役/遭遇战,发布分享

多人模式

  • 在线多人(MP 服务器,SCons 构建 wesnothd
  • 热座(Hotseat)本地多人
  • AI 对战

对公司 AI 游戏的参考价值

方向 启示
内容与代码分离 WML+Lua 双层脚本系统证明:游戏内容可以完全脱离引擎代码。AI 游戏可借鉴:用配置/脚本定义游戏规则,AI 代码独立演进
回合制 AI Wesnoth AI 是经典实现,社区有大量讨论。AI 游戏可研究其 A* 寻路 + 评估函数架构
内容社区化 数百个社区战役证明:好的内容脚本系统能激发社区创造力,降低贡献门槛
长寿项目架构 86K commits、20+ 年演进,代码库如何保持可维护性?模块化设计(src/子系统分离)值得研究
国际化模式 gettext + po 目录是多语言支持的成熟方案