Above a lot is written about maps and their selection for servers. Here is a bit more about how to create a game server. Since the solo match (single player) is only a special case of the multi match (multiplayer), there are no separate explanations on that. For a LAN server there are basically two alternatives: Either you open a so-called “dedicated server”, or you open a so-called “list server”. There are again two methods for the fromer: Either you use an extra program for it (which usually has better configuration possibilities for dedicated servers), or you use EF itself for it. Since there are many programs for it, I will only explain how to do this with EF itself. After all, everyone has that. But if one of you still wants to use a program for it, I can recommend the EF-Runner. But I won't explain it here additionally. It then creates the necessary config files, if necessary for several servers.
So from this menu:
You end up here:
sv_pure
= 1
). This means, for example, that a player cannot cheat with modified *.pk3
files. But normally you don't need it on LANs. But that's sometimes the reason why you shouldn't change the original *.pk3
files, or recompress them again, or something like that. The file may not be usable afterwards…
To use a dedicated server on your own computer and play on it parallel, you would have to start another instance of Elite Force to connect to the server. However, since this requires a fast computer, so that it doesn't cause any problems, it is recommended to use a computer that has the service running, or if none at hand, to start a list server. And the dedicated server created in EF has another limitation: You can only run one map at a time (or use voting), unless you know a bit about scripting (but that goes too far here). Programs like the EF-Runner can also create a mapcycle without any problems and this very comfortable.
There are basically two ways to automatically start servers without having to click through menus. One runs via a start script, i.e. under Windows a *.bat file, under Linux a shell script or a Systemd Unit. Or you simply start the server and provide the config file via the exec command. Both cases use a server configuration file, which tells the server what it has to look like and what it has to do. By default, the EF server will not run any map or match. You can enter map your map name
in the console that will appear after starting the server or start a config manually with exec your config file
. But for dedicated servers this is not recommended. Before you have a map running, the server is not accessible from the outside, so not even rcon access is possible. So for testing purposes this may work, but not for stand alone use or even automated starting with the system.
The basis for all this is the dedicated server, which nowadays will be mostly custom software. Under Windows it's pretty easy: Just use a normal EF installation but expanded with an up-to-date version for the dedicated server binaries, see Versions on the matter. If you want to set up a bare server, you don't need all of your EF installation files. You only need the directory BaseEF from the CD, which you have to rename to baseEF
under Linux. Otherwise the server won't find its files. In addition, there is the stvoyHM.exe, or better (because more secure), a corresponding dedicated server binary, which is not to be placed in baseEF, but one level higher. Examples would be liliumvoyded.x86_64 (Lilium Voyager x64 under Linux) or cmod_dedicated.x86.exe (cMod x86 under Windows). In order to run the dedicated server under Linux, you might need to make the dedicated server binary executable, before you can run it.
So for example Lilium Voyager under Linux would require a file and a folder to be suitable as an EF dedicated server, e.g.:
For Windows the binary would be named liliumvoyded.x86_64.exe. Inside the folder baseEF you should find at least the following files:
You may also extend that folder with your own maps, models, and so on. Just be aware: A player will download those files, if needed, unless either the server or the client forbids it. So if you add custom content, make sure a player has some convenient means to get those contents (e.g. map downloads on or a map package of sorts).
So the final folder structure should look somewhat like this:
For the server to do something customized to your needs, you will have to create a new text file with .cfg
extension in the baseEF folder. In principle, the name for the config doesn't matter. However, when named autoexec.cfg the config is loaded automatically during start-up and map running. This special config file is used always. It might contain default definitions (e.g. having the same rcon password for all servers or turning off bot chat). A minimal server config could look like this:
seta hostname "My Server" seta sv_maxclients "32" seta fraglimit "30" seta timelimit "15" seta capturelimit "5" seta g_friendlyfire "1" map hm_voy1 echo "Runs!" status
A slightly extended config could look like this :
For a mapcycle, as shown in the second example, you have to define manually which map should be loaded after the current one and at restarting the cycle at the end. You can also set the mode for the current map and other settings that should change when changing maps. This way you can switch between CTF and DM, depending on the map. There is one drawback of this method: You really should turn off the voting system. Otherwise, some player may make the server “take another turn”, essentially leaving the map cycle. You can continue it, by issuing /rcon vstr name
, to continue with the section named name. But especially on dedicated servers running 24/7, the more elegant way is to turn of voting altogether.
Important: If you use command such as vstr or map, or in general, all commands other than set derivatives, you must write protect your config. EF will overwrite the config after using it, stripping it of any of these commands. So you would end up with pure, uncommented settings, possibly even destroying your work.
Config files have to be stored in folder baseEF, even if you want to start the dedicated with active mods. The server initially searches for its files there, including the maps, before it starts. Under Linux some dedicated servers search in the folder ~/.stvef/baseEF resp. ~/.local/share/lilium-voyager/baseEF. So it may also depend on the user you run the server as, where it will actually be searching for its files.
When done, you should end up with a file like this:
Or maybe like this:
For further settings in the config, see the Config Parameters.
In essence, once you have created your installation and a configuration file, you need the EF dedicated server to run and loading it.
In order to actually use a specific config, you have to state that to the dedicated server binary of EF during running it (or starting it manually, once the server already runs).
The manual specification of a config file to load during start-up can look like this:
"C:\Program Files\Raven\Star Trek Voyager Elite Force\stvoyHM.exe" +seta dedicated 2 +seta sv_pure 0 +exec my_config.cfg
This command can either be put into a Windows shortcut as a start command (the path in which the program is to be executed must be adapted accordingly), or into the starting batch file. There is not much more to do with an EF installation under Windows. For Linux, the case looks like this:
./binaryname +seta dedicated 2 +seta sv_pure 0 +exec my_config.cfg
Run from the directory where the EF server is located. You can of course use the full path of the binary as well.
+seta dedicated 2 makes the server appear on master servers, if your port-forwarding allows for remote access (see section Accessibility on more details). The +seta sv_pure 0 turns of the pure setting. You can also turn that on, with 1
instead of 0. +exec my_config.cfg makes the dedicated server do the actual config loading. There are a number of other parameters you might want to use, but these are probably the most important ones for basic server operations.
If you don't want to start a dedicated server with standard EF but with a mod active, you have to pass this to the server at start-up, e.g. for Pinball by adding +set fs_game pinball
. For the use of mods the specification fs_game might be absolutely necessary as start start parameter (not to be set in the config, that's too late to be found). The name of the mod normally corresponds with the name of directory in which the mod data is stored. This will also be the location where the game will be looking for its config files. You could say that for standard EF the mod folder is baseEF. But it doesn't have to be specified separately, because the data is searched for in this directory by default.
A Game Type is kind of the base variation of the game (e.g. team play vs. each player on their own), while a Mode varies a Game Type (e.g. with special classes or one player having a special role).
Here is a brief overview of which game types and which modes belong to which config variables:
Game Type | g_gametype |
---|---|
Free for all (DM) | 0 |
Tournament | 1 |
Solo* | 2 |
Team Deathmatch | 3 |
Capture the Flag | 4 |
If other numbers are used, the game mode is set to FFA.
* Note: Solo is only here for the sake of completeness and is not actually a game type for servers. This mode is set when starting a solo match via GUI in Elite Force, i.e. without other human players. In principle this mode can also be used via console parameters or in a config, but then it is not possible for other players to join the game. Accordingly, it cannot be reached via network (not even via stating localhost
/ 127.0.0.1
).
Mode | Variable |
---|---|
Assimilation | g_pModAssimilation = "1" |
Elimination | g_pModElimination = "1" |
Specialties | g_pModSpecialties = "1" |
Action Hero | g_pModActionHero = "1" |
Disintegration | g_pDisintegration = "1" |
Not all combinations of game type and mode are allowed. Below is an overview of which combinations of modes are allowed with game types and with modes among each other.
Game Type | Assimilation | Specialties | Disintegration | Elimination | Action Hero |
---|---|---|---|---|---|
Free for all | no | yes | yes | yes | yes |
Team Deathmatch | yes | yes | yes | yes | no |
Tournament | no | yes | yes | yes | yes |
Capture the flag | no | yes | yes | no | no |
Assimilation | Specialties | Disintegration | Elimination | Action Hero | |
---|---|---|---|---|---|
Assimilation | yes | yes | no | no | no |
Specialties | yes | yes | no | yes | no |
Disintegration | no | no | yes | yes | no |
Elimination | no | yes | yes | yes | no |
Action Hero | no | no | no | no | yes |
Beware of a glitch that comes around when using bot_minplayers > 0 in conjunction with g_pModAssimilation = 1. When certain game event orders occur, the server gets filled up with bots, up to the point where nobody can join it any longer (not even reserved slots are free). To understand this, keep the following things in mind:
So for the Assimilation mode a team falling below the value of bot_minplayers is normal operations for the Starfleet team. This also means, unless bot_minplayers is set to zero or the Borg queen gets killed before that happens, the Starfleet team will drop below the bot_minplayers value at some point. What happens then is, the game will – as usual – try to add a new bot to the Starfleet team, to compensate the lack of players.
This however will fail, if the timeout for joining a team has already hit. In turn, the new bot will be re-assigned to the spectator-non-team – leaving the Starfleet team one player short, still. So the game will again add another player to team Starfleet, starting the circle anew. This goes on until the server is stacked full with players and/or bots. The bad thing about this is, this also uses up reserved slots, making it impossible for anybody to join the server, as it will be full after this cycle of death hit.
Here is a video showing that phenomenon: https://www.youtube.com/watch?v=No1yFRQb-04
In order to get around this problem, whenever playing Assimilation, make sure to set bot_minplayers to 0. This of course means, by default, no bots will populate the server. This however, can be achieved manually with help of the following commands:
addbot <name> <level> <team>
: Adds a bot of given level to the given team. The name is mandatory. The other values are optional. <team> should be either borg
or starfleet
. You could also use the regular blue
and red
values. But then the assignment of the bots to Borg or Starfleet team may be random, as the Borg teams may be chosen to be red or blue, and Starfleet the according opposite. <level> should be between 1 and 5. The default is 3.kickbots
: This kicks all bots from the server. This is particularly useful, when you work from within a mapcycle, that used bot_minplayers before, so the server is already filled with bots. First kick all bots, then re-add the ones you want to have.Example:
set bot_minplayers = 0; kickbots; addbot 2_of_3 3 borg; addbot wortsla 3 starfleet;
This fills the server with one player for each team.
When creating an EF 1 game server yourself, you only need to open port 27960 (UDP) in a firewall (or alternatively the port you have chosen yourself). You don't have to select a specific port to join, just as long as NAT forwarding and/or firewall allow for it to be use. However, you have to distinguish between LAN server and Internet server when creating the server. LAN servers are, as the term implies, only accessible via LAN, not via the Internet. In principle you can also run multiple servers by using different ports for the different servers. Some ports can be found automatically by EF, so that even a second or third game server running in parallel does not have to be entered manually in EF. The automatically scanned UDP ports for LAN search are 27960-27963.
If you are hosting a match on a computer with an IPv6 address, the game also waits for connections via your IPv6 stack, when using Lilium Voyager or cmod. If a player decides to connect to that server via IPv6, he has to enter the address in the fashion [block1:block2:…:blockn]
into the Specify Server fields. Notice the brackets around, they are required. The ::
abbreviations are also allowed. The following two cvars may be of particular interest in this case:
net_enabled: Determines, which protocols EF is actually using. You can add (sum!) the following values for their effect:
1
: enables IPv42
: enable IPv64
: prioritizes IPv6 over IPv48
: disables IPv6 multicast support
Example: to simply activate IPv4 and IPv6, use set net_enabled 3
(= 1
+ 2
).
net_port6: The UDP port to be used for the IPv6 protocol the server will listen on.