Fortresscraft Evolved

games
Report Issue

FortressCraft Evolved is a unique blend of Voxel Landscapes, Tower Defense, Crafting, Logistics, Exploration, Combat and Assembly lines. Players begin by crash-landing on a strange alien world, left with only a small handful of starting machines..

Contributors:
README

FotressCraft Evolved

FortressCraft Evolved is a unique blend of Voxel Landscapes, Tower Defense, Crafting, Logistics, Exploration, Combat and Assembly lines. Players begin by crash-landing on a strange alien world, left with only a small handful of starting machines.

Steam Page

Author & Contributers

Name Github Profile
brainshead https://github.com/brainshead

Server Ports

FotressCraft Evolved requires up to 2 ports

Port default
Game 27000
RCON 27001

This can be changed to any port.

Install Notes

Requirements Memory Storage CPU Network
Minimal 8 GB 10GB Decent Quad-Core CPU (3.2GHz+) 1-2Mbit/s per client is a rough guide
Recommended 8+ GB 20GB+ (SSD)

Settings

Most setting can be done by Panel Variable Settings.

World are saved at location : .config/unity3d/ProjectorGames/FortressCraft/Worlds

Modding

Copied from Steam Source

As always shutdown your server cleanly before youre toying around with the gamefiles.

The following Lines are copied (sort off) from the "FortressCraft Evolved Modding API.pdf" that can be found in the Installationdirectory fo FortressCraft in "...\SteamApps\common\FortressCraft\64\Default" (or ..\32.. when your playing in 32-Bit). (see Chapter 3 - 4 (specialy 4.1))

First get your Mod(s) to your Computer. Subscribe to it/them in the Workshop and wait for the Download to finish.

You will find the mods in the "...\Steam\steamapps\workshop\content\254200\WorkshopID" directory.

Head to the Directroy tree where the world and such is stored. (copy from the ModAPI.pdf) go to

Linux: /home/<user_name>/.config/unity3d/ProjectorGames/FortressCraft/

Windows: C:\Users\USERNAME\AppData\Local\ProjectorGames\FortressCraft\

and create the new Directory named WorkshopMods.

Now copy the files 1:1 over there with your favorite methode (i recommend zipping it, transfer with FTP and unzip it again in this folder).

Now open the local version of your world in FCE and configure which mods you want to use. Get the "modsettings.xml" from your World safe directory and upload it in the World on the server (same spot as local). Make sure you get the modsettings.crc, modsettings.bak and modsettings.bak.crc as well on the server. FCE tries to repair a changed File (which it uses the CRC's for). Alternativly, delete the just mentioned files on the server so you only have the modsettings.xml left.

Start your server, select the mods you activated on the world, join and have fun with your new Content.

Docker Images (1)
Name Image
Debian STEAMCMD ghcr.io/ptero-eggs/steamcmd:debian
Startup Command
rm ./unity.log; ./FC_Linux_Universal.x86_64 -batchmode -nographics -logFile ./unity.log & ENS_PID=$! ; tail -c0 -F ./unity.log --pid=$ENS_PID | grep -Ev "Filename:|DebugBindings|buildslave|Line:"
Variables (20)

[STEAM] Steam User

This is a required setting and cannot be set to anonymous.

Environment:
STEAM_USER
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string

[STEAM] Steam Password

Steam User Password

Environment:
STEAM_PASS
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string

[STEAM] Game ID

The ID corresponding to the game to download and run using SRCDS

Environment:
SRCDS_APPID
Default:
443600
User Viewable:
User Editable:
Rules:
string

[STEAM] Steam Auth

Steam account auth code. Required if you have 2fa enabled

Environment:
STEAM_AUTH
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string|max:5

[STEAM] Auto Update Server

This is to auto-update the game server

Environment:
AUTO_UPDATE
Default:
1
User Viewable:
User Editable:
Rules:
required|boolean

[STEAM] Beta Branch

Installs beta branch if specified.

Environment:
SRCDS_BETAID
Default:
linux_server_headless
User Viewable:
User Editable:
Rules:
nullable|string|max:50

[SERVER] Server Name

Server name

Environment:
SERVER_NAME
Default:
Pterodactyl Dedicated Server World
User Viewable:
User Editable:
Rules:
required|string|max:50

[SERVER] RCON port

RCON Port

Environment:
RCON_PORT
Default:
27001
User Viewable:
User Editable:
Rules:
required|string|max:20

[SERVER] RCON Password

RCON Password

Environment:
RCON_PASSWORD
Default:
changeme
User Viewable:
User Editable:
Rules:
required|string|max:20

[SERVER] Max Players

Max Players (default is 64)

Environment:
MAX_PLAYERS
Default:
64
User Viewable:
User Editable:
Rules:
required|integer|min:1|max:64

[SERVER] World Name

Specific World to load by the server at startup

Environment:
WORLDNAME
Default:
WorldName
User Viewable:
User Editable:
Rules:
required|string|max:50

[SERVER] Public

Should the Server list itself on the Publicserverlist? If you set this to true everybody might join. Griefers might/will do what they want on the server, be sure to take measures.

Environment:
PUBLIC
Default:
false
User Viewable:
User Editable:
Rules:
required|string|in:true,false

[SERVER] Auto Pause

Should the server go to sleep when nobody is on it?

Environment:
AUTO_PAUSE
Default:
true
User Viewable:
User Editable:
Rules:
required|string|in:true,false

[GAME WORLD] Resources

Choices are : Rapid, Plentiful, Scarce, Greg

Environment:
G_RESOURCE
Default:
scarce
User Viewable:
User Editable:
Rules:
required|string|in:rapid,plentiful,scarce,greg

[GAME WORLD] Conveyors

Speed of conveyors : Slow, Fast

Environment:
G_CONVEYOR
Default:
slow
User Viewable:
User Editable:
Rules:
required|string|in:slow,fast

[GAME WORLD] Power

Power Choices : Scarce, Plentiful

Environment:
G_POWER
Default:
scarce
User Viewable:
User Editable:
Rules:
required|string|in:scarce,plentiful

[GAME WORLD] Day

Day Choices : Eternal, Normal, Night

Environment:
G_DAY
Default:
normal
User Viewable:
User Editable:
Rules:
required|string|in:eternal,normal,night

[GAME WORLD] CarePackage

Environment:
G_CAREPACKAGE
Default:
false
User Viewable:
User Editable:
Rules:
required|string|in:true,false

[GAME WORLD] Flat land

Environment:
G_FLATLAND
Default:
false
User Viewable:
User Editable:
Rules:
required|string|in:true,false

[GAME WORLD] RushMode

Environment:
G_RushMode
Default:
false
User Viewable:
User Editable:
Rules:
required|string|in:true,false
Installation Script
Container: ghcr.io/ptero-eggs/installers:debian
Entrypoint: bash
#!/bin/bash
# steamcmd Base Installation Script


## just in case someone removed the defaults.
if [ "${STEAM_USER}" == "" ]; then
    echo -e "steam user is not set.\n"
    echo -e "Using anonymous user.\n"
    STEAM_USER=anonymous
    STEAM_PASS=""
    STEAM_AUTH=""
else
    echo -e "user set to ${STEAM_USER}"
fi

## download and install steamcmd
cd /tmp
mkdir -p /mnt/server/steamcmd
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
cd /mnt/server/steamcmd

# SteamCMD fails otherwise for some reason, even running as root.
# This is changed at the end of the install process anyways.
chown -R root:root /mnt
export HOME=/mnt/server

## install game using steamcmd

## install game using steamcmd
./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) ${INSTALL_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6


## set up 32 bit libraries
mkdir -p /mnt/server/.steam/sdk32
cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so

## set up 64 bit libraries
mkdir -p /mnt/server/.steam/sdk64
cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so

#Custom Commands
SOURCE_DIR="/mnt/server/Default/Example Server Ini files"
TARGET_DIR="/mnt/server/Default"

echo "Copying default server ini files..."

if [ -d "${SOURCE_DIR}" ]; then
    cp -v "${SOURCE_DIR}/firstrun.ini" "${TARGET_DIR}/" 2>/dev/null || echo "firstrun.ini not found"
    cp -v "${SOURCE_DIR}/serveroverrides.ini" "${TARGET_DIR}/" 2>/dev/null || echo "serveroverrides.ini not found"
else
    echo "Warning: ${SOURCE_DIR} does not exist, skipping ini copy"
fi
# Remove comment lines starting with --
sed -i '/^[[:space:]]*--/d' /mnt/server/Default/firstrun.ini

# Remove inline comments after values (e.g. "greg  --comment")
sed -i 's/\s*--.*$//' /mnt/server/Default/firstrun.ini
    echo " Cleanup INI file layout "
echo "-----------------------------------------"
echo "Installation completed..."
echo "-----------------------------------------"