On startup, the server will create various .json configuration files in [YourInstallDirectory]/IslesOfYore/Saved/Yore (let the server run until the files appear!). This document walks through each of them, with examples and comments (as indicated by "//").

Note: Do not literally copy the config files here, they have been modified and reduced where appropriate for explanation. Rather, manually modify the files that your server generates for you.

Here are some tips on JSON syntax if this is new to you:
https://www.w3schools.com/js/js_json_syntax.asp

A validator for the file/changes you've made can be found here:
https://jsonlint.com/

Note: Keep in mind that selling in-game services that lead to gameplay advantages is prohibited

Tickrate

Default tickrate is 20, if you wish to change it, go to [YourInstallDirectory]/IslesOfYore/Saved/Config/<YourOS>Server/Engine.ini, and add:

[/Script/SteamSockets.SteamSocketsNetDriver]
NetServerMaxTickRate=30

Keep in mind that the game is being developed with high AI in mind, which costs performance, and you'll need to hone in on a config that balances player slots with AI slots and your intended tick rate. 30 can be reachable with some tweaks to the config.


Session.json

This config deals with server session options.

{
    "PublicConnections": 50, //Max amount of players that can connect.
    
    "MapName": "SV_Yore_V1", //Do not change, only 1 map available currently.
    
    "Password: "somethingmaybe", //Password, if any
    
    "AdminConnectionPassword": "something" //Used to force log in even when server is full
    
    "ServerName": "IslesOfYore", //Your server name.
    
    //Description shown in server browser (max 45 chars).
    "ServerDescription": "PvP focussed server with medium AI sizes.", 
    
    //Description shown in rules tab in-game.
    "ServerRules": "
    Treat one another with respect, keep the chat clean.
    Toxic behaviour can result in either a kick or a ban.

    Something important. Something important. Something important.

    Something important. Something important. Something important.

    You can contact us through the discord. Something important.
    ", 
    "DiscordURL": "https://discord.gg/xxxx", //Link to your Discord, if any.
    "UseLAN": false, // Keep false, see note below
    "ExitProcessPeriodically": false //See note below,
    "ExitProcessAfterSeconds": 21600.0 (minimum 300),
    "REST_Username": "SomeUsername", // Username for REST web server
    "REST_Password": "SomePassword", // Password for REST web server
    "ExitProcessBelowMinSFPS": false, //Opt-in to auto exit server process if performance low
    "ExitProcessMinSFPS": 5,
    "ExitProcessMinSFPSDuration": 20
}

Discord

Note that the discord URL must exactly start with "https://discord.gg/", or "https://discord.com". It will not work otherwise, this is to prevent abuse.

Server description

Note also that server description has a max character limit of 45! This is an unfortunate limitation that cannot be resolved at the moment.

Tip: The indentation looks a little funky, but if you keep the server rules indentation exactly as in the example above, the text will be nicely displayed in the game.

LAN

The game is hostable over LAN, but you do need a connection to Steam for it to work. You can play by setting up a dedicated server on your local machine or LAN network, and connecting through the LAN tab.

Note: Do not change UseLan to true.

This currently produces an issue where you cannot find the server. If you want to protect it from other people joining, add a password on your server.

Exit Process Periodically

If you have a service that brings the process back up when it exits, you can use this feature to exit and thus restart the instance periodically.

Use ExitProcessAfterSeconds for the duration after which the process will exit. Announcements will automatically be made in-game.


Privileges.json

This config holds information over who's banned and how to handle admins.

Important points for this config are:

  1. If AllowAdminPromotionWithSecretWord is set to "true", then the "SecretWord" can be entered by typing "sudo mytopsecretword" into the game console while inside the server. This promotes the person entering the command to admin, and can be a used as a way for your staff to promote themselves without the main admin being in the server or manually editing the AdminNetIds field and restarting the server. This feature is off by default.
  2. To add the admins, ensure the steam id is wrapped in quotes: "steamid". If you need more admins, add a comma between them like this:
    "Admins" : [ "SteamID1", "SteamID2" ]
{
    "Admins": [
        "yoursteamid"
    ],
    "BannedUsers": [ 
        {
            "UserID": "somesteamid",
            "LastKnownUsername" : "someuser",
            "Reason" : "somereason",
            "TimestampUnixUTC" : "sometimestamp",
            "DurationInSeconds" : 0 // Not used, reserved for future use.
      	},
        [...]
    ],
    "SecretWord": "mytopsecretword",
    "AllowAdminPromotionWithSecretWord": false
}

Note that there are in-game tools to ban people too. Both on the player overview screen while in-game, as well as through the console. See the server management page for more info.


World.json

This config deals with world simulation options.

Important points for this config are:

  1. If you intend to have a large amount of players, you can turn down the amount of max AI that is allowed to spawn.
  2. The total of all "spawn weights" is counted up, and the percentage of each individual weight as it relates to the total, is then used to find the amount of animals of that species to spawn based on TotalMaxSpawnedAI. A calculator for this is available here. Copy the sheet and fill in the animals you want to spawn, with their weights.
  3. If changing your "geography" settings, make sure that you update the appropriate day light savings (DST) settings for that region in "clock". Otherwise you'll lose the accurate sunrise/sunset times.
{
    "Spawn":
    {
        "SpawnWeights":
        {
            "Arganodus":
            {
                "Weight": 1,
                "Min": 0
            },
            [...]
        },
        "TotalMaxSpawnedAI": 103, //Total max AI to spawn
        "RegulationFrequency": 5 //Tries to spawn every 5 seconds,
        "ShouldScaleWithPlayerCount": true, //Scale AI count based on players on server
        "ScaleWithPlayerCountMinPlayers": 20, //Above this player count, remove some AI
        "PlayerSlotWeight": 0.5 //How much AI to remove for each player above min players
    },
    "World":
    {
        "Geography":
        {
            "Lat": -47,
            "Long": -176.74
        },
        "Weather":
        {
            "AuroraAtNightChance": 0.15,
            "SpringWeatherProbabilities":
            {
                "Clear Skies": 0.6,
                "Partly Cloudy": 1.3,
                "Cloudy": 1.2,
                "Overcast": 0.8,
                "Foggy": 0.35,
                "Light Rain": 0.5,
                "Rain": 0.5,
                "Thunderstorm": 0.4,
                "Light Snow": 0.17,
                "Snow": 0.1,
                "Blizzard": 0
            },
            "SummerWeatherProbabilities":
            {
                [...]
            },
            "AutumnWeatherProbabilities":
            {
                [...]
            },
            "WinterWeatherProbabilities":
            {
                [...]
            },
            "TimeRangeHoldNewWeather":
            {
                "X": 600, //Hold weather type for min 600 seconds
                "Y": 1200 //Hold weather type for max 1200 seconds
            }
        },
        "Clock":
        {
            "StartingHour": 5,
            "StartingDay": 5,
            "StartingMonth": 10,
            "StartingYear": 2042,
            "TimeZone": 12,
            "AllowDST": true,
            "DSTStartDay": 26,
            "DSTStartMonth": 9,
            "DSTEndDay": 3,
            "DSTEndMonth": 4,
            "DSTChangeHour": 2,
            "GameSpeedDay": 0.8, //Multiplier for game speed during day
            "GameSpeedNight": 1.1 //Multiplier for game speed at night
        }
    },
    "PersistWorld" : true //Persist world state (date/time)?
}

Gameplay.json

This config deals with gameplay and balancing options. SpeciesConfigs holds a list of potential overrides that you can apply per species.

For the currently active balance, see [YourInstallDirectory]/IslesOfYore/Saved/Yore/Temp/ActiveBalance.json.

You can use the ActiveBalance.json file as a starting point for your changes in Gameplay.json. Any species written into SpeciesConfigs within Gameplay.json will have that specific stat/attribute of that species applied within the game.

Here's an abbreviated example of ActiveBalance.json:

{
  "Balance": {
    "SpeciesConfigs": {
      "Coelophysis": {
        "Attributes": {
          "Stats": [
            {
              "Tag": {
                "TagName": "Yore.Attributes.Scale"
              },
              "Stat": {
                "Curve": "None",
                "bUseFlatValue": false,
                "PeakValue": 1.2
              }
            },
            {
              "Tag": {
                "TagName": "Yore.Attributes.AttackForce"
              },
              "Stat": {
                "Curve": "CurveFloat'/Game/IslesOfYore/Characters/Animals/Core/Metabolism/Growth/CurvePresets/CRV_Growth_Linear_SmallDropElder.CRV_Growth_Linear_SmallDropElder'",
                "bUseFlatValue": false,
                "PeakValue": 135
              }
            },
            [...]
          ]
        }
      },
	  [...]
    }
  },
  "AvailableAttributeCurveTypes": [
    "CurveFloat'/Game/IslesOfYore/Characters/Animals/Core/Metabolism/Growth/CurvePresets/CRV_Growth_CurvedLinear_FullLinear.CRV_Growth_CurvedLinear_FullLinear'",
    "CurveFloat'/Game/IslesOfYore/Characters/Animals/Core/Metabolism/Growth/CurvePresets/CRV_Growth_Linear_SmallDropElder.CRV_Growth_Linear_SmallDropElder'",
    "CurveFloat'/Game/IslesOfYore/Characters/Animals/Core/Metabolism/Growth/CurvePresets/CRV_Growth_RampUpPuberty_SlowGrowthAfter.CRV_Growth_RampUpPuberty_SlowGrowthAfter'",
    "None"
  ]
}

And here's an example of a Gameplay.json config override.

{
  "Balance": {
    "SpeciesConfigs": {
      "Coelophysis": {
        "Attributes": {
          "Stats": [
              
            // Stat override #1, attack force
            {
              "Tag": {
                "TagName": "Yore.Attributes.AttackForce"
              },
              "Stat": {
                "Curve": "CurveFloat'/Game/IslesOfYore/Characters/Animals/Core/Metabolism/Growth/CurvePresets/CRV_Growth_Linear_SmallDropElder.CRV_Growth_Linear_SmallDropElder'",
                "bUseFlatValue": false,
                "PeakValue": 20 // change this to make the animal stronger
              }
            },
              
            // Stat override #2, scale
            {
              "Tag": {
                "TagName": "Yore.Attributes.Scale"
              },
              "Stat": {
                // make sure you set a curve
                "Curve": "CurveFloat'/Game/IslesOfYore/Characters/Animals/Core/Metabolism/Growth/CurvePresets/CRV_Growth_CurvedLinear_FullLinear.CRV_Growth_CurvedLinear_FullLinear'",
                "bUseFlatValue": false,
                "PeakValue": 1.3 // change this to make the animal larger
              }
            }
          ]
        }
      }
    }
  },
  "NeedsDepletionMultiplier": 1, //Tweak how fast needs (food/water) deplete
  "AIAttackMultiplier": 0.8, //Tweak the default species attack stats for AI
  "AIDefenseMultiplier": 0.8, //Tweak the default species defense stats for AI
  "AISpeedMultiplier": 1 //Tweak the default species speed stats for AI
}

Some things to consider here:

  1. Your overrides will consist of a peak value and either a curve, or defining it as a flat value with bUseFlatValue. Flat values don't change during growth, curves allow you to define how you reach that peak value over the lifetime of the animal as it grows.
  2. All available curves are found in AvailableAttributeCurveTypes.
  3. As seen in the example, some stats have a curve of None, and also do not have a flat value enabled. This combination indicates a custom curve that is currently set in the game, and is not exposed. If you want to override a stat, make sure you use one of the available curves or opt for a flat value. Keeping None and just adjusting the peak value will not work.