open-sourcegamertscity-buildingsettlerscsharp type: concept 创建: 2026-04-10 更新: 2026-04-10

Freeserf.net

The Settlers I 清洁室 C# 重实现,跨平台复刻

基本信息

项目 内容
GitHub https://github.com/Pyrdacor/freeserf.net
语言 C# (~200 文件, ~35K LOC)
构建系统 .NET (Visual Studio Solution, .csproj)
渲染/引擎 Silk.NET (OpenGL/Vulkan 跨平台)
许可 MIT
最新版本 v2.2.3 (2026-01-28)
平台 Windows / Linux

核心技术点

C++ → C# 移植架构

  • 全部代码从 C++ freeserf 移植或重实现,Phase 1 (Porting) 100% 完成
  • Phase 2 (Optimizing) 100% 完成:bug 修复 + C# 特定优化 + 跨平台
  • Phase 3 (Extending) 15% 进行中:新增功能、mod 支持、工具
  • 当前主攻方向:多人网络支持

模块化 .NET Standard 2.1 DLL 架构

模块 职责
Freeserf.Core 游戏核心逻辑 (~35K LOC),AI/建筑/地图/经济系统
Freeserf.Renderer Silk.NET 渲染管线 (Shader/Texture/RenderLayer)
Freeserf.Audio BASS 音频引擎 (MIDI/MOD/WAV)
Freeserf.Network 多人网络 (Client/Server)
FreeserfNet 主程序入口 + FreeserfGame 游戏视图

渲染架构 (Freeserf.Renderer)

  • ShaderProgramShader.cs (Color/Masked/MaskedTriangle/TextureShader)
  • RenderLayer.cs → 分层渲染 (Map/Building/Flag/Serf/Road)
  • TextureAtlas.cs + MutableTexture.cs 纹理管理
  • VertexArrayObject.cs + BufferObject.cs OpenGL VAO/VBO 封装

AI 系统 (Freeserf.Core)

  • AI.cs 主体 + AIStates/ 目录多种 AI 状态机
  • 数据驱动配置 (user.cfg / Game.cs ConfigFile)
  • 经济链:Serf (工人) 在 Flag (旗帜) 间行走运输 Resource

网络架构 (Freeserf.Network)

  • Client.cs + Server.cs 完整网络层
  • ConnectionObserver.cs 连接状态观察
  • Multiplayer.md 多人模式文档
  • 正在进行多人开发

玩法特点

  • 经典复刻:完整还原 The Settlers I (DOS/Amiga) 玩法
  • 数据文件兼容:支持 DOS (SPAx.PA) 和 Amiga (ADF/disk files) 两种游戏数据
  • 混合数据:可混用 DOS 图形 + Amiga 音乐
  • 跨平台:Windows + Linux
  • 可配置:详细 user.cfg 配置 (graphic/sound/video/logging)
  • 内置 AI:添加了原作没有的 AI 逻辑

与原版 freeserf (C++) 的关系

  • Freeserf.net 是 freeserf 的 C# 移植分支(而非 fork)
  • C++ 源码在移植过程中完全重写为 C#
  • Freeserf.Core 作为 .NET Standard 2.1 DLL,可被任何 .NET 项目引用

对公司 AI 游戏的参考价值

方向 启示
引擎移植 C++ → C# 移植策略(保持 API 兼容同时用 .NET 特性重写)
多平台渲染 Silk.NET 跨 OpenGL/Vulkan 抽象方案
模块化架构 Core/Renderer/Audio/Network 四模块分离,各自独立 .NET Standard
多人网络 Client/Server 分离架构 + 连接状态观察者模式
AI 状态机 SerfState/AIStates 目录化管理复杂 AI 行为
数据驱动 ConfigFile 类统一管理 user.cfg 配置
阶段性开发 三阶段 Roadmap:Porting→Optimizing→Extending