Freeserf.net

Settlers 1 clone written in C#

README

Freeserf.net

Freeserf.net is an authentic remake of the game The Settlers I by BlueByte.

To avoid copyright issues I won't provide any copyrighted data from the original game like music or graphics. To play the game you will therefore need the original DOS or Amiga data files.

Freeserf.net is a C# port and extension of freeserf.

Build status

Download the game

WindowsLinuxmacOSAndroid
v2.2.11v2.2.11v2.2.11v2.2.11

Latest version 2.2.11 was released on 20th of October 2026. See the changelog for what's new and all releases for older versions.

Only recent Ubuntu versions are tested for the Linux version. The macOS version is a universal app (Apple Silicon and Intel).

You need the DOS data file 'SPAx.PA' to run the game, where x stands for the language shortcut (e.g. SPAE.PA for English). You can also use the Amiga files (either the disk files "*.adf" or the extracted files like "sounds" and "music" will work). The game texts are available in English and German (see the options).

You can combine DOS and Amiga data (e.g. music from Amiga and graphics from DOS). See configuration for more information about the Freeserf.net configuration.

Audio is provided by BASS. The libraries are contained in the releases but they are for 64-bit systems only. If you have a 32-bit system you have to download them on your own or from here.

Android

Install the APK on your device (you may have to allow the installation from unknown sources). Android 5.0 or newer with OpenGL ES 3.0 is needed.

The game data is not included. On the first start you can either download it from Ubisoft Connect if you own the game there (e.g. The Settlers - History Edition) or select your own data file. The game is controlled by touch: pinch to zoom, pan with one finger and long-press for the special click.

Save games are stored in Android/data/net.freeserf.android/files/saves (accessible e.g. via USB). They are also shown in the Android files app ("Freeserf" in the side bar), where they can be copied, renamed and deleted.

Multiplayer

Multiplayer games in the local network are possible (still experimental). One player creates a server (Multiplayer -> Create server), the others join it. Servers in the local network are found automatically, other servers can be added by their IP address or host name. The game uses port 5067 (TCP and UDP). Players with different platforms (e.g. Windows and Android) can play together.

Players who have left a running multiplayer game (e.g. after a lost connection) can join it again and get their settlement back. Running games are shown in the server list.

Multiplayer games are saved by the host automatically every 10 minutes and when a player leaves. Every player can request to save the game (F5, the other players vote on it). To continue a multiplayer game the host selects its save game in the load screen. The players join again and get their settlements back.

In multiplayer games pausing the game or changing the game speed needs the agreement of the other players. Each player can request it and the others vote on it (more players have to agree than decline).

Support development

If you want to support this project or other projects of me you can do so here.

Become a patron Sponsor Donate Flattr
Thank you very much!

You may also be interested in my other projects:

  • Ambermoon.net - a C# rework of the Amiga classic Ambermoon
  • Ambermoon - a research project to track findings of Ambermoon data decryption

Current State

All the code from freeserf was ported or re-implemented. AI logic was added in addition. Bug fixes of the C++ freeserf releases 0.4 and 0.5 were ported as well.

The game runs on Windows, Linux, macOS and Android. Multiplayer games in the local network work but are still experimental (e.g. there is no surrender yet).

The renderer is using Silk.NET and .NET 9. Wide screens are supported.

Missions, tutorials and the end of the game with the original's pictures are available. Things that are missing are some minor parts of AI logic.

The game is playable for most parts. If you find any bugs please report it in the Issue Tracker. You can also look for open issues there.

Normal Game Mission Ingame Menus Map

Roadmap

Phase 1: Porting (100%) - [Finished]

The first step is to port everything from C++ to C# and ensure that the game runs. There may be some quick&dirty implementations or things that could be done better.

Phase 2: Optimizing (100%) - [Finished]

This includes bug fixing and C#-specific optimizations. Moreover this includes performance and stability optimizations if needed. Also the plan is to make everything cross-plattform as much as possible.

Phase 3: Extending (15%) - [Active]

This includes:

  • New features
  • Better usability
  • Other things like mod support, tools and so on

Future Goal

At the end this should become a stable and performant game that runs on many platforms and can be easily compiled and extended by .NET developers.

I am not sure how far this project will go as my time is very limited. I can not promise anything at this point.

Implementation details

The core, the renderer, the network and the audio parts are .NET 9 libraries. The renderer uses Silk.NET (OpenGL / OpenGL ES) for rendering. The sound engine is using BASS (via ManagedBass) and is capable of playing MIDI, MOD and SFX/WAV.

The desktop program is based on .NET 9 and runs on Windows, Linux and macOS. The Android app (FreeserfNet.Android) is based on .NET 10 and uses the same libraries. See Android.md for details about the Android build.

For local multiplayer tests you can start several instances with start-multiplayer.ps1. test-multiplayer.ps1 runs automated multiplayer tests.

Building from source

You need the .NET 9 SDK and the native GLFW 3 library, which is used for the window, the OpenGL context and the input.

  • Windows and macOS: GLFW is part of the NuGet packages and is copied to the output folder, nothing else is needed.
  • Linux: GLFW must be installed with the package manager of the distribution, otherwise the game can't create its window. It is needed for building and running the game (also for the Linux release):
    • Ubuntu / Debian: sudo apt install libglfw3
    • Fedora: sudo dnf install glfw
    • Arch Linux: sudo pacman -S glfw

Then build the desktop app with the configuration of your platform (WindowsDebug/WindowsRelease, LinuxDebug/LinuxRelease or MacDebug/MacRelease), e.g.:

dotnet build FreeserfNet/FreeserfNet.csproj -c LinuxRelease

To start the game, put the data files (see above) into its working directory.

Contribution

If you need help or want to help developing, just contact me. You can also contact me via Issue Tracker by adding a new issue and tag it as question.

There is a more or less up-to-date list with open issues of several relevances and importances.

Thanks to the following devs for their contributions:

Ingame key shortcuts

KeyDescription
DELDemolish active building, road or flag
ESCAbort road building, close ingame windows
TABOpen notification
Ctrl+TABReturn to last map position after notification
Shift+MToggle music
Shift+SToggle sound effects
0Reset game speed to normal (vote in multiplayer)
9Maximize game speed (vote in multiplayer)
PPause or resume game (vote in multiplayer)
+Increase game speed (vote in multiplayer)
-Decrease game speed (vote in multiplayer)
>Zoom in
<Zoom out
F11Toggle fullscreen mode
Ctrl+FToggle fullscreen mode
F5Quick save
F6Open save dialog
Shift+QOpen quit dialog
Shift+POpen player overview
BToggle possible builds
HGo to your own castle
JJump between players (AIvsAI and spectators only)
MToggle minimap
1-5Press the buttons of the panel (as special click on the demolish buttons)