Atlas Dedicated Server Setup – Wide

For those that want to know how without using something more automated…

This guide was written against Atlas v14 and the Atlas ServerEditor modified on 1/7/19. My intention is to remind me how to build a functioning map at some point in the future. I do not provide maps for people to use and I do not maintain any of the old examples (sorry). But I do have some community maps linked below (see table of contents).

Thank you to Gimilkhad for reviewing and providing feedback on sections to help make this guide better for everyone.


Atlas Info

Useful Links

Part 1: How it works

The Atlas Cluster

Atlas is a collection of individual servers hosing individual maps. Each map represents a grid on a world map. Similar to any other MMO with zonelines, you can travel from map to map within Atlas by traveling to the edge of a map. The game transfers you to the next server (or the next map) and you continue your adventure within the next area. For example, you can see that there are 6 squares in the below map to create one large game world. Each square is a different server hosting a different part of the larger map.

Example 6 Server Map

Each map can support ~ 150 players (based on official Atlas servers) with some variance for the system performance that is running the server. The map acts like a globe; traveling off the edge on the left will move you to the map on the opposite far right. Same with the top and bottom.

The map servers are instances of the shootergameserver.exe. These can all run on the same computer (if you have the CPU and memory), or they can be distributed across multiple physical or virtual machines. The clusters are designed to be salable and distributed across servers or facilities, as required.

Examples of 6 server setups

Elements of the Cluster

REDIS (Database)

REDIS is the database that all the servers need to communicate with. It contains the shared configuration settings across all the maps (like players, tribes, ect) which allows members to travel from one zone to another. During login, the database tells the logon server which host has your character and sends your client traffic to the right server.

shootergameserver.exe (Atlas Server)

This is the server executable for the Atlas cluster. Each map is loaded up with this executable and a variety of command arguments that follow it. On a server with multiple instance, the executable is called multiple times and the command arguments provide the details so the servers load different maps.

Part 2: Requirements

Atlas on Windows has a few prerequisite requirements before you can run the Atlas Server. It needs DirectX, REDIS, and SteamCMD.

Part 3: Building the Map

Overall Steps

Map Editor

New Project Creation

New Project Page

Update JSON with Missing Elements

I lost the code I had which was ugly and hard to format. Let’s hope that it is fixed three years after I originally wrote this guide…

Part 4: Planning the Map

Overall Steps

This is probably the most important step. Many issues revolve around loosing track of all the different elements that need to be account for when building the map. We will go step by step to ensure everything is documented correctly the first time.

Map Size

Size matters. Each map takes between 2 GB and 6 GB of RAM based on the number of players. My maps seem stable around 4.5 GB. CPU varies a lot between the makemodel and generation, but I find that memory is more of a constraint that processing power. Pick the size you think you can run. It should be noted that you can run a 4×4 map but only load a single grid. The server will run fine without the other 3 but if you want to move between maps then you will always need to have enough room to run 2 for a period of time.

For this guide, we will build a 2×2 map, and you can make it a 1×1 by only running 1 of the 4 maps at a time. For the maps that are off, you will see a GIANT red wall of flame at the zone lines where the other servers are missing. It won’t do anything other than prevent you from sailing, or swimming, into those zones until the map is running.

Ports (TCP and UDP)

Yes, we must plan this out NOW. It gets chaotic trying to manage a LOT of ports. Here is a spreadsheet I used to plan the ports for a 2×2 map. This also notes which ports are TCP and UDP for the Server and Router Firewalls.

Screenshot of Port tracking spreadsheet

Each server has 5 ports that need to be tracked and configured. Port | TCPUDP Client Port 1 | UDP Client Port 2 | UDP Query Port | TCP and UDP Seamless Port | TCP RCON Port | TCP

Client Port #2 is ALWAYS +1 from the client Port. You cannot change it, so plan ahead. For example, if Client Port #1 is 10000, then Client Port #2 will always be the next port number: 10001.

Map Bonuses

Easier to plan this out now so we know what is going where in our map (assuming you want any of this). The assumption is that you are on a private server and you want some custom config. On my maps I spread this out over different zones so people are encouraged to travel to find the best places. I recommend pulling out a note pad and leave some space so we can write out the details of the world before we start programming the maps. Here are some of the settings I will incorporate into this walkthrough. Map – A1 KillXPMultiplier=2.0 HarvestXPMultiplier=2.0 CraftXPMultiplier=2.0 GenericXPMultiplier=2.0 SpecialXPMultiplier=2.0 Treasure=2 Map – A2 TamingSpeedMultiplier=10.0 Map – B1 GenericXPMultiplier=3.0 SpecialXPMultiplier=3.0 Treasure=3 Map – B2 HarvestAmountMultiplier=5.0 HarvestXPMultiplier=5.0


There are 6 environments. We will pick 4 of them for our map. A1 – Temperate (This will become my starting zone) A2 – Equatorial (a little warm with storms for ship fun) B1 – Tropical (moderate weather for moderate Bonuses) B2 – Polar (extreme cold for the extreme harvest bounty!)

I’ll use the same notes above and build upon them by adding the new descriptors. Map – A1 (Temperate) KillXPMultiplier=2.0 HarvestXPMultiplier=2.0 CraftXPMultiplier=2.0 GenericXPMultiplier=2.0 SpecialXPMultiplier=2.0 Treasure=2 Map – A2 (Equatorial) TamingSpeedMultiplier=10.0 Map – B1 (Tropical) GenericXPMultiplier=3.0 SpecialXPMultiplier=3.0 Treasure=3 Map – B2 (Polar) HarvestAmountMultiplier=5.0 HarvestXPMultiplier=5.0

Starting Location

Make sure you know which zone will be the starting zone and make sure it has the right climate and bonuses you want for your starting players. I will use my Temperate zone as my Home Region. Map – A1 (Temperate) (HOME REGION)

Quest Islands

Atlas has a quest line for players to achieve. It may have expanded in the last three years but here is what you need to know to get the basic quest system into your custom map.

There are 8 islands, 1 ship path, and 1 boss location that needs to be accounted for in your custom world. If you open up the JSON of the original map, you can search for “PowerStoneIndex” to find the original islands for the quests. You will need to use the same islands in your custom world to ensure we bring over the proper cave system. However, each island is designed to go into a specific climate and we can view this by using the map editor, clicking on the island and reading the details in the bottom right.

Example showing an islands climate

You can place a polar island in a Tropical region, but the island will stay polar. The ExtraSublevels define the climate of the island regardless of which map you use. Here is a breakdown of the official PowerStone locations:

We will take those island names and add them to our notepad to track what goes where in our custom map. This is just an example and I did not map each island to the proper zone for this world. Map – A1 (Temperate) (HOME REGION) KillXPMultiplier=2.0 HarvestXPMultiplier=2.0 CraftXPMultiplier=2.0 GenericXPMultiplier=2.0 SpecialXPMultiplier=2.0 Treasure=2 ISLANDS: Mnt_Y_WU_PVE (for Powerstone 1) Mnt_X_WR_PVE (for Powerstone 2) Mnt_S_WT_PVE (for Powerstone 3) Map – A2 (Equatorial) TamingSpeedMultiplier=10.0 ISLANDS: Cay_C_EE_PVE (for Powerstone 4) Mnt_R_CH_PVE (for Powerstone 5) Mnt_R_CL_PVE (for Powerstone 6) Map – B1 (Tropical) GenericXPMultiplier=3.0 SpecialXPMultiplier=3.0 Treasure=3 ISLANDS: Mnt_G_ET_PVE (for Powerstone 7) Mnt_U_ER_PVE (for Powerstone 8) SHIPPATH: GHOST SHIP (for Powerstone 9) Map – B2 (Polar) HarvestAmountMultiplier=5.0 HarvestXPMultiplier=5.0

Starting Islands

We picked A1 for our staring location but we need to add one of the starter islands as well. This will make sure we have the NPC on the docks to trade gold with when the trading ships are not around.

Here are the confirmed starting islands. Pick one, or more, for your custom map and place in your HOME REGION map. Map – A1 (Temperate) (HOME REGION) KillXPMultiplier=2.0 HarvestXPMultiplier=2.0 CraftXPMultiplier=2.0 GenericXPMultiplier=2.0 SpecialXPMultiplier=2.0 Treasure=2 ISLANDS: Mnt_Y_WU_PVE (for Powerstone 1) Mnt_X_WR_PVE (for Powerstone 2) Mnt_S_WT_PVE (for Powerstone 3) Cay_H_WR_E (for the starter island)

Part 5: Programming the Map

We have our Ports, Public IP, and how we want out map to look. Now we will start to enter in all the values. Beginning with 0x0, or A1.

For this guide we will assume the public IP address of : Be sure you always use YOUR Public IP Address.

Startup the ServerGridEditor again, if it’s not already, and open our ServerGrid project. Select the checkbox at the bottom right “Water Tile Background” and you should have something that looks like this:

Blank starer map

Configure the Server’s

For the next section, you will need the Port Planner that we built up above.

In 0x0 (top left), hold CTRL and Left Click in the ocean. This will open up the Server Editor. We previously defined some details for our server and we will program them here.

Use the following information from our planner: A1 – Temperate (HOME REGION) Query Port – 10000 Client Port – 16000 Seamless Port – 10600

And populate the fields in the map editor Name (this is the name of your map) IP: <your public IP Address> Port: <Query Port> Game Port: <Client Port> SeamlessDataPort: <Steam Port> Template: TEMPERATE (this populates MOST of the server settings automatically) HOME SERVER: Check the box

OPTIONAL: My community complains that there are to MANY pirate ships (creating blockades). Here’s how you can limit the number of pirate ships. The first line is the variables separated by commas, the second line is the value, also separated by commas (they align). ServerCustomDatas1: NPCShipDifficultyMult,NPCShipDifficultyLerp,NPCShipNumMult ServerCustomDatas2: 1.0,1.0,0.1

When done, it should look like this:

Example Server 0,0 (A1)

Click Save, and repeat for each of the other servers. SAVE after every step. NEVER CLICK LAUNCH PREVIEW (it will crash the editor and you will lose unsaved progress. This is a developer button) (maybe fixed by 2022, but idk) A2 – Equatorioal Name: <your zone name> IP: <your public IP> Template: Equatorial Query Port – 10001 Client Port – 16002 Seamless Port – 10601 ServerCustomDatas1: NPCShipDifficultyMult,NPCShipDifficultyLerp,NPCShipNumMult ServerCustomDatas2: 1.0,1.0,0.1 HOME REGION – NO, NOT CHECKED B1 – Tropical Name: <your zone name> IP: <your public IP> Template: Tropical Query Port – 10300 Client Port – 16600 Seamless Port – 10900 ServerCustomDatas1: NPCShipDifficultyMult,NPCShipDifficultyLerp,NPCShipNumMult ServerCustomDatas2: 1.0,1.0,0.1 HOME REGION – NO, NOT CHECKED B2 – Polar Name: <your zone name> IP: <your public IP>> Template: Polar Query Port – 10301 Client Port – 16602 Seamless Port – 10901 ServerCustomDatas1: NPCShipDifficultyMult,NPCShipDifficultyLerp,NPCShipNumMult ServerCustomDatas2: 1.0,1.0,0.1 HOME REGION – NO, NOT CHECKED

After the last region is updated. You should have something like this:

Empty map with configure ports and IPs

Spawn Regions

This is quick and easy to update. Click Edit −> Edit Spawn Regions. Give the first entry a name like “starting location” and a value of 0,0. (that is zero comma zero). Click Save

Placing Islands and the Ghost Ship Path

We need to place a bunch of default islands before we can place anything else. Luckily, we already know the names that we need from the previous step.

From our previous step, let’s look at the information we care about right now. Find the matching island name on the right side and drag it onto your map. Hold Right Click to rotate the islands.

NOTE BEFORE YOU CONTINUE!! We need to write down the x,y location of EACH powerstone island (anywhere on the island, this just creates the quest icon on the map, does not need to be exact). Do it now to save yourself some headaches later. I recommend putting them into a spreadsheet, we need to do some math with it in an upcoming step. The X and Y coordinates can be found just above the island section portion of the application. A1 ISLANDS Mnt_Y_WU_PVE (for PS1) Mnt_X_WR_PVE (for PS2) Mnt_S_WT_PVE (for PS3) Cay_H_WR_E (for the starter island)

Note: If you want new players to spawn at your Freeport island(s) and not any random island, CTRL + Left click your freeport island(s) and change the spawn override value to 0. If you have multiple freeport islands you give each one a number. 0,1,2,3 and so on. A2 ISLANDS Cay_C_EE_PVE (for PS4) Mnt_R_CH_PVE (for PS5) Mnt_R_CL_PVE (for PS6) B1 ISLANDS Mnt_G_ET_PVE (for PS7) Mnt_U_ER_PVE (for PS8) SHIPPATH GHOST SHIP B2 ISLANDS – no predefined islands!

For each PowerStone (PVE) Island that we just added, we need to configure the powerstone settings for them. CTRL + Left click on the island and populate the following fields: Mnt_Y_WU_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 0 Mnt_X_WR_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 1 Mnt_S_WT_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 2 Cay_C_EE_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 3 Mnt_R_CH_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 4 Mnt_R_CL_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 5 Mnt_G_ET_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 6 Mnt_U_ER_PVE IslandInstanceCustomDatas1 = PowerStoneIndex IslandInstanceCustomDatas2 = 7

Now that our islands are done, we still need to place our Ghost Ship Path for the 9th PowerStone Quest, AND mark it’s x,y location on the map. Move your mouse cursor to an empty region of ocean in grid B1 (1,0) and hit P.

You can drag those Blue and Black circles around to make a path, recommend keeping this one in the same zone. Hold Right Click on one of the BlueBlack Circles to rotate them and curve the paths. Hit + while hovering over a BlueBlack circle to add another point.

CTRL + Left Click on the BLUE node to configure it as a Ghost Ship. Enter the following values: Path Name: GhostShip AutoSpawnEveryUTCInterval: 21600 AutoSpawnShipClass: Blueprint’/Game/Atlas/ShipPaths/PathFollowingGhostShip_BP.PathFollowingGhostShip_BP’ Auto Spawn At First Node: CHECKED

Move your mouse over the BLUE circle and write down the X and Y coordinates.

For the Final Boss, I’m going to put my mouse cursor in the middle of B2 (1,1) and write down the coordinates.

Additionally, we need to tell the game that the end-boss is here. There are two ways to add the end boss to your map.

Method 1 – GUI Method CTRL + Left Click in the ocean where you want the end boss to appear In the “Edit Server” window, find “ExtraSublevels” (lower right text box), and add “EndBossLevel”

Method 2 – Edit the JSON You need to add the following to your ServerGrid.JSON file: Find the appropriate grid section in the json for extraSublevels and totalExtraSublevels sections Find and update to match: "extraSublevels": [ "EndBossLevel" ], "totalExtraSublevels": [ "EndBossLevel" ],

I’ll add a few more small islands around for people to explore and level. Keeping away from the center of B2 (our boss spawn). Note, the Powerstone islands are NOT noob level areas. They have 70+ level mobs all over them. A few extra islands are nice to have.

Our map should look something like this now:

Basic map with powerstone quests

If you want to add some NPC Trading Ships. Move your mouse over open water, hit P again and modify the path (CTRL + LeftClick) with the following:Name: NPCTrader1 AutoSpawnEveryUTCInterval: 0 Auto Spawn At First Node: CHECKED

Note: NPCTrader is a blueprint name (we believe), you can select any number between 1 and 9. NPCTrader4 or NPCTrader9, for example.

Don’t forget to save!

Map with islands, ships, and powerstones

Discovery Zones – Part 1 (Island Names)

Adding discovery zones is option but it allows you to name your islands and reward members for exploring. Hold SHIFT and Drag a Left Click over an island to create a Discovery Zone Box. Shift + Left click on the Discovery Zone to bring up an editing window where you can name the discovery zone. (This prevents you from having to keep track of the order in which you created the zones.) Repeat until you have all of your discovery zones that you want in the game. DiscoveryZones are one of the default ways to increase the max character level for your server.

Click Edit −> Edit Discovery Zones. Modify the Name, give them EXP to award (I use varying amounts that get larger the further away from the starting area someone gets). Decide if you want them to make landfall, or if they can discovery the island from the water.

Discovery Zones

We will add the PowerStone Discoveries directly into the JSON at the end of the next section.

Part 6: Export the Maps

We are just about done with the map portion of this guide. We need export our maps, host the logon map somewhere (I use google drive in this example), and then finalize the server cluster map configuration.

Lest create our Export Folder. Click Export −> Local Export. Click OK (it doesn’t mater what you select, it’s hard configured).

If you browse to c:ServerGridEditor (where we extracted our ZIP), you will now see an Export folder. Within it are two json files and a folder. We want to use the folder for our map exports.

Next, turn off all the things you don’t want your community members to see on the in game map or logon screen. There are a series of checkboxes at the bottom of the editor, uncheck them. I turn off everything except the “Water Tile Background”

File names are Case Sensitive

To export the map, Click Export −> Map Image. Save the file to c:ServerGridEditorExportServerGrid FileName: MapImg.jpg

Click Export −> Cell Images Save the file to c:ServerGridEditorExportServerGrid FileName: Cellmg.jpg Note: this will create mutlpile files, but the names will be auto corrected upon export. Be SURE to name the file Exactly as I typed it. It defaults to PNG which will NOT work.

If you did it correctly, it will look like this (Filename is CELLMG, only the C is Caps):

Export of our Maps in the ServerGrid folder

Notice that ALL of the files are JPG Files.

Go up a directory to the Export folder

Export folder contents for our project

Save the project and close the map editor

Part 7: Quest Chain and JSON Updates

Hosting your Login Map

I am using Google Drive to host out my map file. All you need is a download file link.

Copy your MapImg.jpg to you google drive. Right Click on the file and select Share Copy the link.

All you want is the file ID after /d// Then create a new link.

Direct Download Link Example<FILEID&gt;

Updated with File ID from Above

Save that link for later. We will need it in a minute.

Creating the Quest Chain (quest markers on the Atlas in-game map)

Get out that spreadsheet where we wrote all the x and y coordinates for the island locations of the power stones. We need to convert those location points into a percentage of the entire map for the quest line.

Look at my example here to see the values we are going to enter into the quest string. There is a link to the spreadsheet just after the image.

Quest Creation Spreadsheet

Spreadsheet Link

We need the green values to insert into the quest string (acquire from the original 15×15 official map)

We need to update the highlighted values to with those we get from the Calculator. I’ve found that it is easier to find all the values when we break out the code into aligned sections: (QuestEntries=((QuestID=0,CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Icon_PowerStonesQuest_Complete.Icon_PowerStonesQuest_Complete’,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Icon_PowerStonesQuest_Uncomplete.Icon_PowerStonesQuest_Uncomplete’,QuestName=”Voyage of Power”,QuestDescription=”Journey across the ATLAS to hunt for the Power Stones, and then bring them to the Center Maw!”,UnlockFeatNames=(“Dance10″),QuestPo”globalGameplaySetup”: “(QuestEntries=( (QuestID=0,CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Icon_PowerStonesQuest_Complete.Icon_PowerStonesQuest_Complete’,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Icon_PowerStonesQuest_Uncomplete.Icon_PowerStonesQuest_Uncomplete’,QuestName=”Voyage of Power”,QuestDescription=”Journey across the ATLAS to hunt for the Nine Power Stones in Golden Age Ruins, and bring them to the Center Maw!”,UnlockFeatNames=(“Dance10″),CompleteGiveEngramClasses=(BlueprintGeneratedClass’/Game/Atlas/AtlasCoreBP/Engrams/Skill_ExploreTheDepths.Skill_ExploreTheDepths_C’), QuestPointsOfInterest=( (PointOfInterestID=0,PointOfInterestName=”Power Stone 1”,UnlockFeatNames=(“Dance1″),WorldMapPosition=(X=0.170000,Y=0.370000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon.Item_InfinityGem_Icon’,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=1,PointOfInterestName=”Power Stone 2”,UnlockFeatNames=(“Dance2″),WorldMapPosition=(X=0.430000,Y=0.170000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon2.Item_InfinityGem_Icon2′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=2,PointOfInterestName=”Power Stone 3”,UnlockFeatNames=(“Dance3″),WorldMapPosition=(X=0.370000,Y=0.500000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon3.Item_InfinityGem_Icon3′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=3,PointOfInterestName=”Power Stone 4”,UnlockFeatNames=(“Dance4″),WorldMapPosition=(X=0.500000,Y=0.370000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon4.Item_InfinityGem_Icon4′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=4,PointOfInterestName=”Power Stone 5”,UnlockFeatNames=(“Dance5″),WorldMapPosition=(X=0.770000,Y=0.170000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon5.Item_InfinityGem_Icon5′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=5,PointOfInterestName=”Power Stone 6”,UnlockFeatNames=(“Dance6″),WorldMapPosition=(X=0.250000,Y=0.770000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon6.Item_InfinityGem_Icon6′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=6,PointOfInterestName=”Power Stone 7”,UnlockFeatNames=(“Dance7″),WorldMapPosition=(X=0.500000,Y=0.700000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon7.Item_InfinityGem_Icon7′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=7,PointOfInterestName=”Power Stone 8”,UnlockFeatNames=(“Dance8″),WorldMapPosition=(X=0.960000,Y=0.420000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon8.Item_InfinityGem_Icon8′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=8,PointOfInterestName=”Power Stone 9”,UnlockFeatNames=(“Dance9″),WorldMapPosition=(X=0.830000,Y=0.770000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon9.Item_InfinityGem_Icon9′,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/Item_InfinityGem_Icon10.Item_InfinityGem_Icon10′), (PointOfInterestID=9,PointOfInterestName=”Bring all 9 Power Stones to Center Maw”,WorldMapPosition=(X=0.500000,Y=0.500000),CompletedIcon=Texture2D’/Game/Atlas/UI/Icons/HUD_BossLocation_Icon_Complete.HUD_BossLocation_Icon_Complete’,UncompletedIcon=Texture2D’/Game/Atlas/UI/Icons/HUD_BossLocation_Icon.HUD_BossLocation_Icon’))),

I only posted a single quest entry, but if you look over the code, you can see the quest instructions. There is language in there like “Power Stone 8” which is followed by “WorldMapPosition = (x=##,y=##)”

If you follow the instructions in the spreadsheet, the last step is to update the WorldMapPosition for each of the quest steps. The X and Y values work like percentages. x=0.83 means that the marker goes 83% of the way to the right from the top left corner of the map. Likewise, y=0.52 means that you go down 52% of the way from the top of the map towards the bottom. The spreadsheet will help you determine those x and y values (aka percentages) in decimal format that needs to be entered into the quest step. This is how you place a marker on the map for your players.

Final Edits

We need to put finishing touches to our map file.

These last few steps are best performed by editing the ServerGrid.json file using either Code Writter (Windows 10 Enterprise) or Notepad ++ (Open Source Text Editor), or whatever you prefer.

Lets use the Map Download link we create at the top of this page. This is the Server Selection LOGON Map when characters choose which zone to log into. The link we created earlier was (Map Image URL):

We will insert that into the JSON file so players can see the map when they select the server to play on (note, this is DIFFERENT than the ingame map and you can spice this up if you want without ruining anything ingame).Find: “MapImageURL”: “”, Replace With: “MapImageURL”: “;,

Next, lets enter a password for the server (OPTIONAL) Atlas Password: DracsTestPW Find: “WorldAtlasPassword”: “”, Replace: “WorldAtlasPassword”: “DracsTestPW”,

globalGameplaySetup: (This is where you paste the updated quest marker locations that we just did in the previous step) Find: “globalGameplaySetup”: “”, Replace: “globalGameplaySetup”: “<The really long quest block from the previous section>”,

Save and close your ServerGrid.json file once you have updated all of your powerstone island instances

Review Configuration

In the export folder, we have two json files that need to be reviewed.

Open ServerGrid.json Review the top 29 lines of the file and make sure all of our settings are correct. Specifically: “WorldFriendlyName”: “Drac’s Test World”, “WorldAtlasId”: “832834193”, “WorldAtlasPassword”: “DracsTestPW”, “MapImageURL”: “;,

Check whatever else you would like, but those are the important one that I keep track of. Close the file when you are done.

Open ServerGrid.ServerOnly.json You should see all of our database connection setting here. Make sure it’s all correct. “DatabaseConnections”: [ { “Name”: “Default”, “URL”: “”, “Port”: 6379, “Password”: “redispassword” }, { “Name”: “TribeDB”, “URL”: “”, “Port”: 6379, “Password”: “redispassword” }, { “Name”: “TravelDataDB”, “URL”: “”, “Port”: 6379, “Password”: “redispassword” }, { “Name”: “TerritoryDB”, “URL”: “”, “Port”: 6379, “Password”: “redispassword” }, { “Name”: “LogDB”, “URL”: “”, “Port”: 6379, “Password”: “redispassword” } ]

For our test server, we are using a single computer to host 4 maps. The REDIS Connections are all on the IP address as discussed in the REDIS portion of this walkthrough.

It’s time to startup our server.

Part 8: Server Startup

Update Server with JSON Files and In-Game Map Images

The first step is easy. Previously, we installed Atlas to c:gamesatlas. The base directory we will be working with for this entire guide will be c:gamesatlasshootergame. Always start there when you see a folder or path reference further in this guide.

We need to copy our JSONs and our Map Folder to our server. Place everything in the ShooterGame folder.

Get out the Port Configuration Sheet. We aren’t done with it yet.

Create Startup Commands

Next, we need to start our servers to create the save folders and the map specific configuration files. The command we use tells the game which map to create and where to save the data.

The command structure is simple. We specify the executable, the Map Name, the X and Y Grid, the Save Folder, the Query Port, and a few server commands. Everything else will be put into the configuration files once they are created. There is a ? between each of the server variables (see X and Y Grid for example)

Executable: “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Map Name: Ocean X and Y Grid: ServerX=0?ServerY=0 Save Folder Name: AltSaveDirectoryName=A1 Query Port: QueryPort=20000 Server Commands: -log -server -NoBattlEye

Put it all together to form a single line and that is what we type into the command prompt on windows. (open a command prompt, you will need it for the rest of this tutorial)

Here’s the first example."c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe" Ocean?ServerX=0?ServerY=0?AltSaveDirectoryName=A1?QueryPort=10000 -log -server -NoBattlEye

The other three commands look like: “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=0?ServerY=1?AltSaveDirectoryName=A2?QueryPort=10001 -log -server -NoBattlEye “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=1?ServerY=0?AltSaveDirectoryName=B1?QueryPort=10300 -log -server -NoBattlEye “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=1?ServerY=1?AltSaveDirectoryName=B2?QueryPort=10301 -log -server -NoBattlEye

Notice that in each command, we change the X, Y, Save Directory, and Query Port. All other values remain the same.

Each time you run the command, a new window will open up. You can start them all at once. However, I find that the system works best if you start one map before the others, wait for it to full load, then you can start all other maps simultaneously. I get the fastest load times this way and I believe that is due to the database initialization. Once the first map loads and the database is ready, the other maps synchronize off of the primary map server. This prevents what seems like a minor race condition when you try starting all maps at the same time.

Once they are all running, you should see something like this:

Verify Save File Locations

Before we stop the servers, browse to c:gamesatlasshootergamesaved and make sure you see 4 separate save FOLDERS

There should be an A1, A2, B1, B2 folder that we specified in the above start commands

Each atlas instance maintains its own folder for each map and map specific settings

Stop Servers

Select each window (one at a time) and hit CTRL+C to shut down the instance.

Part 9 – Update Server Configs

Each server stores individual map configuration. One map can have different settings from another map. ./ShooterGame/Saved/A1 Is Map A1 (or grid 0,0) ./ShooterGame/Saved/A2 Is Map A2 (or grid 0,1) ./ShooterGame/Saved/B1 Is Map B1 (or grid 1,0) ./ShooterGame/Saved/B2 Is Map B2 (or grid 1,1)

These should match our “Save Folder Name:” that we used when starting the server.

We are going to modify One of the Server Config files, you will need to reproduce the changes for EACH server.

The files we want are stored in ./ShooterGames/Saved/Config/WindowsServer We will be modifying the file GameUserSettings.ini

Bonuses and RCON

You can google what most of these do, but here is what we want. Previously, we documented the following changes A1 KillXPMultiplier=2.0 HarvestXPMultiplier=2.0 CraftXPMultiplier=2.0 GenericXPMultiplier=2.0 SpecialXPMultiplier=2.0

We are going to expand that list with a few more settings (including the RCON port from our spreadsheet): ServerPVE=1 ServerAdminPassword=DracTestRCONPW RCONEnabled=True RCONPort=24000

Combine both of those and add them below [ServerSettings] It should look something like this: [ServerSettings] KillXPMultiplier=2.0 HarvestXPMultiplier=2.0 CraftXPMultiplier=2.0 GenericXPMultiplier=2.0 SpecialXPMultiplier=2.0 ServerPVE=1 ServerAdminPassword=DracTestRCONPW RCONEnabled=True RCONPort=24000 ShowMapPlayerLocation=True AllowThirdPersonPlayer=True PvPStructureDecay=True ServerCrosshair=True EnableHealthbars=True RCONPort=27020 TheMaxStructuresInRange=10500.000000 OxygenSwimSpeedStatMultiplier=1.000000 StructurePreventResourceRadiusMultiplier=1.000000 TribeNameChangeCooldown=15.000000 AllowHideDamageSourceFromLogs=True RaidDinoCharacterFoodDrainMultiplier=1.000000 PvEDinoDecayPeriodMultiplier=1.000000 KickIdlePlayersPeriod=3600.000000 PerPlatformMaxStructuresMultiplier=1.000000 AutoSavePeriodMinutes=5.000000 ListenServerTetherDistanceMultiplier=1.000000 MaxTamedDinos=5000.000000 RCONServerGameLogBuffer=600.000000 ShowFloatingDamageText=True AllowHitMarkers=True TribeJoinInterval=10.000000

Save the file.

Make the same changes on the other server GameUserSettings.ini files. If you have a 2×2 map, then you will need to do this 4 times in total. Use the notes we made at the beginning of the guide (A1, A2, B1, B2) to populate these settings.

Part 10: Firewall Updates

Authorize ShooterGameServer.exe – Windows Defender

Before we restart the server, we need to add the shootergameserver.exe to the windows firewall. Click start and type firewall. Open the Windows Defender Firewall (this guide only uses the defender firewall)

Port Forwarding – NAT Interface (as required)

There is no guide for me to give you. Every brand of router, and often different versionsfirmware of the same router, will have different steps on how to do port forwarding. Find your makemodel, find you user guide, and add port forwarding. Be sure to add the exactly as documented in your Port Spreadsheet. Some are TCP, some are UDP, and one is both. Pay attention, go slow, and get it right. This is a PITA to troubleshoot later.

NAT ReflectionLoopback (not recommended)

I do not have a guide for this. NAT reflection has a number of cybersecurity concerns. However, it is possible to use it to play Atlas on a LAN. The internet can teach you how if you really want to know.

Part 11 – Verify Configs and Start the Server

Start Servers

You should now have a working cluster of servers. Start them up by running the startup commands again. Remember, you can run a smaller grid by not starting all of them. Run the first command only to only have a single map of the 4 maps running.

In my testing, I have found the best result is to allow one map to full start up, then you can start all others simultaneously. I have noticed it takes MUCH longer to do them all at the same time before one server fully starts up (mostly likely database related). “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=0?ServerY=0?AltSaveDirectoryName=A1?QueryPort=20000 -log -server -NoBattlEye “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=0?ServerY=1?AltSaveDirectoryName=A2?QueryPort=10001 -log -server -NoBattlEye “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=1?ServerY=0?AltSaveDirectoryName=B1?QueryPort=10300 -log -server -NoBattlEye “c:gamesatlasShooterGameBinariesWin64ShooterGameServer.exe” Ocean?ServerX=1?ServerY=1?AltSaveDirectoryName=B2?QueryPort=10301 -log -server -NoBattlEye

Verify you configured the ports correctly

NETSTAT is a Command line tool on Windows to show you all ports that are currently open on your server.

Open a commmand prompt on the server

type “netstat -an” and hit the enter key

Look over the list. There is a section for TCP and a separate section for UDP. Look at your port sheet and make sure you can see each individual port listed in either the TCP or UDP section. One of those ports should show up twice (once in TCP and once in UDP). If you do NOT see every port listed individually then something is wrong and you need to review your port configuration. 99% of all troubleshooting I did to help people with their servers was due to missing, or misconfigured, ports. Yes, every single one of those cases swore to me that the ‘ports were correct’ before they asked for my help.

Verify Server is listed in ATLAS Games List (in Game)

Start up the Atlas game client and look for your server in the list.

If you did things correctly…It should be in the list by now after verifying the Netstat step. This usually takes 3-5 minutes to show up in the server browser.

Part 12 – Tips and Lessons Learned

Matching Island Climate to the Map Climate

I was running into issues where I had freezing islands in a tropical zone. After some investigation, I found that each island has a climate associated to it. Before placing an island, be sure to select it on the right-hand side of the map editor, click Edit Island, and review the ExtraSublevels section at the bottom right to determine which type of climate that island belongs. You can then match this to your server templates, if you are using them, (click Show Server info checkbox) to quickly assign an island to the right climate.

Highlighting the island climate details

Removing the Level Cap of the Home Server

You can edit server (via Map Editor) or add it to the Game.ini for the individual map, or you can modify the Server Template with these settings Override ShooterGameMode DefaultGame.ini Values Key = bClampHomeServer Value = False

Create Lawless Region (no claim flags)

You can edit server (via Map Editor) or add it to the Game.ini for the individual map, or you can modify the Server Template with these settings DefaultGame.ini Values Key = bDontUseClaimFlags Value = 1 Key = NoClaimFlagPeriodDecayMultiplier Value = 4

Set PvP or PvE

GameUserSettings.ini Under: [ServerSettings] Add: ServerPVE=1


Edit Server (via map editor) OceanEpicSpawnEntriesOverrideValues (NPCSpawnEntries=((NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/Mermaid/Mermaid_Character_BP.Mermaid_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000))),NPCSpawnLimits=,MaxDesiredNumEnemiesMultiplier=20.000000)

Whales and Squids

These were added on 1/7/2019 to the official map templates. If you followed this guide after the 7th then you probably already have them in your game. Otherwise: (./ShooterGame/Content/Atlas/Creatures/ search for *Character_BP* to see the asset templates that are used below, there’s a structure format in the below commands)

Gentle Whale: “OceanEpicSpawnEntriesOverrideValues”: “(NPCSpawnEntries=((NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/GentleWhale/GentleWhale_Character_BP.GentleWhale_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000))),NPCSpawnLimits=,MaxDesiredNumEnemiesMultiplier=12.000000)”,

Gentle Whale Sea Monster “OceanEpicSpawnEntriesOverrideValues”: “(NPCSpawnEntries=((NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/GentleWhale/GentleWhale_SeaMonster_Character_BP.GentleWhale_SeaMonster_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000)),(NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/GentleWhale/GentleWhale_Character_BP.GentleWhale_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000))),NPCSpawnLimits=,MaxDesiredNumEnemiesMultiplier=4.000000)”,

Mean Whale and Mean Whale SeaMonster “OceanEpicSpawnEntriesOverrideValues”: “(NPCSpawnEntries=((NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/MeanWhale/MeanWhale_Character_BP.MeanWhale_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000)),(NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/MeanWhale/MeanWhale_SeaMonster_Character_BP.MeanWhale_SeaMonster_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=-700.000000)),NPCsToSpawnPercentageChance=(1.000000))),NPCSpawnLimits=,MaxDesiredNumEnemiesMultiplier=4.000000)”,

Squid “OceanEpicSpawnEntriesOverrideValues”: “(NPCSpawnEntries=((NPCsToSpawn=(BlueprintGeneratedClass’/Game/Atlas/Creatures/Squid/Squid_Character_BP.Squid_Character_BP_C’),NPCsSpawnOffsets=((X=0.000000,Y=0.000000,Z=0.000000)),NPCsToSpawnPercentageChance=(1.000000),bForcePreventSpawnOnOcean=True)),NPCSpawnLimits=,MaxDesiredNumEnemiesMultiplier=4.000000)”,

ServerCustomDatas Values

Types of settings: NPCShipDifficultyMult NPCShipDifficultyLerp NPCShipNumMult FloatsamQualityMultiplier TreasureBottlesEnabled DisableClaimFlags

Example (the variable, listed above, goes in Datas1 while the values for that variable goes into Datas2. Both are comma separated) ServerCustomDatas1: NPCShipDifficultyMult,NPCShipDifficultyLerp,NPCShipNumMult,FloatsamQualityMultiplier,TreasureBottlesEnabled,DisableClaimFlags ServerCustomDatas2: 2.0,0.5,1.6,1.4,0.0,1

Experience Modifiers


Under: [ServerSettings]

Add one or more of the following on a new line (adjust values as desired): XPMultiplier=3.0 HarvestAmountMultiplier=5.0 TamingSpeedMultiplier=3.0 KillXPMultiplier=1.0 HarvestXPMultiplier=1.0 CraftXPMultiplier=1.0 GenericXPMultiplier=1.0 SpecialXPMultiplier=1.0

These are ZONE wide, not island specific.

CPU Utilization – Limiting Server FPS

The dedicated servers do not need to process graphical updates like the clients and therefore can run with a lower Frame Per Second (FPS). Many of the servers today are using around 15 FPS, including the Official ones for now. You can control this setting per map server.

In ShooterGame/Saved//Config/WindowsServer/Engine.ini Add the following two lines [/script/onlinesubsystemutils.ipnetdriver] NetServerMaxTickRate=15

You can change the “15” to your desired FPS number. I would not recommend going below 15, and I do not see much need to go above 30 on your dedicated servers. This setting will have a noticeable impact on CPU performance.