Server configuration
storyforce_server.cfg is where a StoryForce server is tuned, and it does more work than a normal
Jedi Academy config.
The config file is not optional. 7 admin commands, including kick and ban, only exist because this file grants them. See installing a dedicated server.
What it does
A cvar is a named setting the game holds in memory. storyforce_server.cfg sets 70 StoryForce cvars
in one pass, covering registration, characters, roleplay rules, permissions and identity labels, plus
a block of base-game settings.
This page covers the ones operators change. For the full list of every StoryForce setting with its default, use the settings reference.
Where the config lives
The file ships inside the server download and sits next to the game module, in your StoryForce
folder. Edit that copy. Under Docker, put your copy in homepath/StoryForce/ so it shadows the one
baked into the image.
The file ends with map mp/ffa3, which is what starts the server. Change that line to change the
first map, and leave it in place, because without it the server loads nothing.
Values that differ from the compiled defaults
5 settings have a value in this file that does not match the value compiled into the game module. The config file value is the intended behaviour in every case:
sf_comadmincmds,sf_clericaladmincmdsandsf_leadercmds, the 3 permission masks, which only grant/sfkick,/sfban,/changemap,/teleport,/telemark,/centersayand/playcinematicwhen this file runssf_storytoolsblock, which covers 4 more story tools in the config than in the compiled defaultsf_forcemarkduration, which the config sets to 0 for indefinite marks while the compiled default is 1 minute
Those 7 missing commands sit on 6 permission bits, because /teleport and /telemark share one bit,
and /cs is an alias for /centersay. The identity labels differ too, but only because the compiled
defaults leave every label blank while the shipped file fills in an example ladder.
Treat this as a known issue rather than something to work around. Running with
+exec storyforce_server.cfg every time makes it irrelevant.
Settings that matter
Registration and accounts
Server-side. Set to 1 to let anyone sign themselves up with /account register. Default 0, which means an admin creates every account. Server-side. Minutes an address must wait after a successful registration. 0 turns it off. Default 10. Server-side. Seconds an address must wait after a failed /account register, which throttles username probing. 0 turns it off. Default 45. Server-side. Seconds an address must wait after a failed login. Default 3.Set sf_registercooldown and sf_logincooldown both to 0 and the whole per-address register check is
skipped, which takes sf_registerfailcooldown with it whatever its own value.
sf_membershiponcreation and sf_charsperaccount are covered with the membership ladder on
admin ranks and membership.
sf_seedaccount and sf_seedaccountpass are different from the rest. They are read once, on the very
first boot against an empty database, and ignored afterwards. Set sf_seedaccountpass before you
start the server for the first time.
Characters and XP
Server-side. XP every new character is created with. One Force rank costs between 10 and 95. Default 50. Server-side. Set to 1 to restrict /givexp to community admins and above. Default 0, which lets any member award XP. Server-side. Set to 1 to let guests play community characters. Default 0. Server-side. Set to 1 to let former members play community characters. Default 0. Server-side. Set to 1 to let former members use /mynpc. Default 0.Chat and roleplay
Server-side. Set to 0 to require a login before any chat channel works. Default 1. Server-side. The delimiter wrapped around a /me action. Defaults to 2 vertical bars. Server-side. Trade tongues a Diplomacy 3 character understands without learning them. Defaults to huttese, rodese, binary and bocce. Server-side. Makes a player who is typing immune to damage from other players. Environmental damage still lands. Default 1. Server-side. Downs a character instead of killing them when combat takes them low. Default 1. Server-side. Set to 0 for infinite ammo, which suits set-piece filming. Default 1. Server-side. Swallows a mistyped slash command in chat instead of broadcasting it to everyone. Default 1.Moderation
Server-side. Minutes a /sfkick blocks the address from reconnecting. 0 makes it a plain instant kick. Default 10. Server-side. Bitmask of commands community admins can run. Shipped value 270549387263. Server-side. Bitmask of commands clerical admins add on top. Shipped value 279173920768, which is where /sfkick lives. Server-side. Bitmask of commands only leadership can run. Shipped value 549771542528, which is where /sfban lives.Change the 3 masks with the calculator on
permission bits rather than by hand. The shipped config also
sets g_allowVote 0, so nobody can call a vote to change map or kick.
Where secrets go
3 values are credentials and none of them belong in a file you share:
rconpassword, which the shipped config leaves commented outsf_d1token, the Cloudflare API token for the database mirrorsf_llmnpc_token, the API key for AI NPCs
Set an rcon password before opening the server. The console commands reachable over rcon include a full reset of the leadership account, so an unset password is an unlocked door.
sf_d1token and sf_llmnpc_token carry no archive flag on purpose. The game never writes them into
its own saved config, which keeps them out of files that get copied around. The trade-off is that
they only exist while storyforce_server.cfg sets them, so they have to be in that file.
2 more D1 values behave the same way, sf_d1account and sf_d1database. Neither is a secret on its
own, but both are needed alongside the token. See
backups and D1 sync.
Things to note
- Settings marked as archived get written back. The engine saves their current values on shutdown, so a value set once by hand outlives the reason you set it.
- The 2 seed account settings are read once. Changing them after the first boot does nothing at all, because the account is found by its row afterwards.
- Cooldowns are per address, not per account. 2 players behind one connection share a window, and both cooldown tables are cleared on every map change.
sf_kickbantimeblocks are held in memory. A restart clears every one of them.- Identity labels are yours to fill in. The shipped config sets an example ladder that almost certainly does not match your setting. See identity labels.
map mp/ffa3is the last line for a reason. Anything you add after it runs after the map has already loaded.
Next
- Identity labels: replacing the example status, faction and rank ladder with your own
- Permission bits: building the 3 masks with a calculator instead of by hand
- Settings reference: every StoryForce setting with its default, in one table