Level

The Level JSON is used to be able to load in to a level.

Keys Description
id Unique Identifier of the level, make sure this is unique so it does not conflict with other levels.
version Version of the json. MUST BE “3”
name Name of the level. This appears on the map board as the “name” of the level. Does not have to be unique.
description Description of the level, which will appear on the map board when you click on the level
descriptionLocalizationId Description of the level, using the ID to link to the localization files.
sceneAddress Addressable Address of the level scene.
showOnlyDevMode When true, the level will only appear in Developer Mode (Recommended: Set to false)
showInLevelSelection When the “allowLevelSelection” is set to true in the GameMode, if this key is set to true, it will be visible in character selection after selecting your character.
worldmapPrefabAddress Addressable address of the world map. Default is Bas.Image.Map.Default
worldmapTextureAddress Addressable address of the world map texture. If you make a custom Worldmap page, you can specify what texture it uses for it. Default is Bas.Worldmap.Eraden
worldmapLabel If you want your map to have a custom page dedicated for itself, you can specify a specific name here, and use the arrows at the top of the world map to switch to that page. Set to null to use the default Eraden page.
worldMapTravelAudioContainerAddress Addressable address to the audio container that plays a sound when you enter a new level from the map board.
mapLocationIndex Select what “number” you want your map to be on the world map. You are able to see the numbers from the worldmap located in the SDK. If a number already exists, it will pick a number near it instead.
showOnMap If set to true, it will appear on the world map.
hideOnAndroid If set to true, this map will not appear on the android platform (Nomad)
mapLocationIconAddress The addressable address of the icon that appears on the circle selection the map.
mapLocationIconHoverAddress The addressable address of the icon that appears when you hover over the icon of the map
mapPreviewImageAddress The addressable address of the preview appearing on the map when you select the map. Often shown as a sketch for the other levels.
modePickCountPerRank depricated/obsolete
customCamera Used for Arcade Mode. Obsolete/Not in Use
throwableRefType References the type of “Throwable” that the NPC will use if the player is both in sight but not on a navigation mesh for the NPCs to get to.
Item - Specifies a specific item.
Table - Specifies a table of items, used from a LootTable json.
improvisedThrowableID Specifies the ID of the item/table that is used as a throwable by an enemy.

Modes

“Modes” is game modes available to the level. For example, Survival is a game mode where you have three pillars which spawn items, and once an item is grabbed, a wave begins, allowing a progressive flow of waves with a reward at the end.

Keys Description
name Name of the game-mode
displayName The name shown on the mapboard when you select the game-mode
description Localisation ID linking to the language file which contains the description of the game-mode
allowGameModes Allows the mode to be available in a specific gamemode. So, for example, “Survival” would be available in “Sandbox”.
mapOrder  
playerDeathAction If the player dies, what happens?
None - Nothing happens when player dies.
AskReload - Asks the player if they want to reload the level.
LoadHome - When player dies, Home is automatically loaded.
PermaDeath - When player dies, character is deleted (NOT RECOMMENDED)

Modules

LevelModuleResetSpawners

The ResetSpawners level module is used on most Arenas in Blade and Sorcery. This module will respawn all items and containers that are spawned via ItemSpawners when a new wave has started.

{
    "$type": "LevelModuleResetSpawners, ThunderRoad"
}
LevelModuleCleaner

The Cleaner module is an optimisation module which cleans up left over items and corpses. The “cleanerRate” determines the delay before the item/body despawns.

{
    "$type": "ThunderRoad.LevelModuleCleaner, ThunderRoad",
    "cleanerRate": 5.0
}
LevelModuleSurvival

The survival module allows the gamemode to use survival elements, where a pillar will rise from the floor with weapons able to play with. Once the weapon is grabbed, waves will spawn. Once a wave ends, the pillars rise again.

Keys Description
canOnlyUseRewards When true, the player will only be able to use the weapons from the pillars.
rewardPillarAddress The addressable address for the pillar prefab. Our default is Bas.LevelModule.RewardPillar
pillarZone The zone of which the boundries of the pillars are when the wave ends. If the player is not within the bounds, the player will be teleported to one of the pillars.
rewardsToSpawn This depicts the amount of pillars/weapons that can spawn as a reward
firstRewardContainerID ID of the LootTable container that spawns first, before any combat begins
startDelay The delay before the waves start after grabbing the weapon reward
loop Depicts if there is an end to the survival.

Loop - Goes through all the waves, then loops to the first
NoLoop - Once all waves are complete, finish and go back home.
RepeatLastWave - Once waves are complete, repeat the last wave on loop.
wavesNumberForReward The amount of waves you need to complete before it gives you the next reward.
waves See Waves
textGroupId Localisation of the “Survival” text
testNextWaveId Localisation of the text that displays the next wave text
textFightId Localisation of the text that displasy “Fight”
textWaveId Localisation of the text that displays what wave it is

Wave

To add a wave to the Survival “Waves” field, add this:

{
        "$type": "ThunderRoad.LevelModuleSurvival+Waves, ThunderRoad",
        "waveID": "Survival_Wave0",
        "containerID": "WeaponRewards1"
}

| Keys | Description | | — | — | | waveID | ID of the wave json used to spawn the enemies | | containerID | Container/LootTable of the reward the spawns at the end of this wave |

LevelModuleMusic

Adds dynamic music to your map during waves. Insert the music JSON ID here.

{
    "$type": "ThunderRoad.LevelModuleMusic, ThunderRoad",
    "dynamicMusic": "MusicArena"
}
LevelModuleWaveAssault

The Wave Assault module is very similar to survival, but is used for Crystal Hunt. Instead of spawning 3 pillars, of which weapons are rewards, there is only 1 reward, of which requires 1 to 2 waves to be completed beforehand.

Keys Description
rewardPillarAddress The addressable address for the pillar prefab. Our default is Bas.LevelModule.RewardPillar
defaultLength The default amount of waves player has to complete before reward is given
textFightGroupID Localisation of the Fight Group (?)
textFightID Localisation of the “Get Ready” text
textReturnHomeGroupId Localisation of the “Return Home” text (?)
textReturnHomeId Localisation of the “Return Home” text (?)
pillarZone The zone of which the boundries of the pillar are when the wave ends. If the player is not within the bounds, the player will be teleported to the pillar.
returnHomeFadeInDuration When the reward is grabbed, this is the duration of the black fade in before it goes to the loading screen
{
    "$type": "ThunderRoad.LevelModuleWaveAssault, ThunderRoad",
    "rewardPillarAddress": "Bas.LevelModule.RewardPillar",
    "defaultLength": 3,
    "textFightGroupId": "Survival",
    "textFightId": "GetReady",
    "textWaveId": "Wave",
    "textReturnHomeGroupId": "Survival",
    "textReturnHomeId": "RewardHome",
    "pillarZone": null,
    "returnHomeFadeInDuration": 2.0
}