In other languages: 日本語 Русский 简体中文

Scenario system: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
(Create page documenting the scenario system, from my own research)
 
(Categorize into modding)
 
(19 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Languages}}
{{Languages}}
The scenario system allows save-based mods to be created, so that installing mods separately is not necessary. This allows for server side scripting, or to provide a separate objective than the vanilla freeplay (which is actually a scenario, just like the [[tutorial|tutorial campaign]]).


The scenario system allows save-based mods to be created, so that installing mods separately is not necessary. This allows for server side scripting, or to provide a separate objective than the vanilla freeplay (which is actually a scenario, just like the [[campaign]]).
Scenarios count as mods for the purpose of isolating [[achievements]].


== Creation ==
== Creation ==


Creation of a scenario starts in the world editor. The world editor allows an author to save a world that they have created as a scenario. This allows players to add special scripting to the scenario.
Creation of a scenario starts in the [[map editor]]. The map editor allows an author to save a map that they have created as a scenario. This allows players to add special scripting to the scenario.


There are two ways to create a scenario:
There are two ways to create a scenario:


* Running Factorio with the --map2scenario [[Console#Command_Line_Parameters|runtime flag]], which allows specifying a save to transform into a scenario. It is possible to turn a scenario back into a normal save with the --scenario2map runtime flag.
* Via the [[Map editor]].
* Via the [[Map editor]].
* Creating a new folder in the scenarios folder, and adding a control.lua.


== Differences between scenarios, saves, and mods ==
== Differences between scenarios, saves, and mods ==
Line 16: Line 17:
There are a few differences between a scenario, a save, and a mod. In a way, a scenario takes parts from both.
There are a few differences between a scenario, a save, and a mod. In a way, a scenario takes parts from both.


* Scenarios, unlike mods, cannot add anything to the game. The only type of scripting allowed in a scenario is scripting that would occur in control.Lua.
* Scenarios, unlike mods, cannot add any prototypes to the game. The only type of scripting allowed in a scenario is scripting that would occur in control.lua.
* Scenarios generate the exact same world every time when created by the world editor.
* Scenarios can have premade maps, such as the supply scenario, or can have maps made with the map generator, such as freeplay.
* Scenarios do not need to be installed client side, unlike mods. This allows servers to implement small changes to gameplay on their end, such as displaying a MOTD to joining players.
* Scenarios do not need to be installed client side, unlike mods. This allows servers to implement small changes to gameplay on their end, such as displaying a MOTD to joining players.
* Scenarios, unlike normal saves, are stored in a different folder.
* Scenarios, unlike normal saves, are stored in a different folder.
* Scenarios' maps cannot be extracted directly, the game must be used to convert the scenario back into a save.
* Scenarios can be used to create a bit of a story, as the campaign does.
* Scenarios can be used to create a bit of a story, as the campaign does.
== Limitations of Scenarios ==
* Currently, scenarios cannot be uploaded to the official mod portal, they must be shared on other community websites.
* Scenarios cannot add anything to the game (Namely, they may not make calls to data:extend()).
* Scenarios count as mods for the purpose of isolating [[achievements]].


== Playing a scenario ==
== Playing a scenario ==


There are several scenarios included into the game by default. To play a scenario, click Play->Scenarios, and choose either a user scenario, or a scenario from the base game. The Freeplay scenario is the same as the basic game, where the objective is to launch a rocket.
There are several scenarios included into the game by default. To play a scenario, click Play->Scenarios, and choose either a user scenario, or a scenario from the base game or mod. The Freeplay scenario is the same as the basic game, where the objective is to launch a rocket.


Upon choosing a scenario to play and saving the game, a normal save will be created that encompasses the map itself, and the control.Lua scripting that was provided by the scenario. This can be removed by deleting the script.dat and control.Lua files from the save, turning it into a normal save. Do this at your own risk, as it may break the save depending on how intertwined the scenario is with the save.
Upon choosing a scenario to play and saving the game, a normal save will be created that encompasses the map itself, and the control.Lua scripting that was provided by the scenario. This can be removed by deleting the script.dat and control.Lua files from the save, turning it into a normal save. Do this at your own risk, as it may break the save depending on how intertwined the scenario is with the save.
Line 37: Line 31:
== Installing scenarios ==
== Installing scenarios ==


Scenarios made by other players can be installed into a folder called scenarios in the player's [[application directory]]. It can then be played from the scenarios menu.
Scenarios made by other players can be installed into a folder called scenarios in the player's [[application directory#User_data_directory|user data directory]]. It can then be played from the scenarios menu.
 
Scenarios added by mods are also shown in the Scenarios menu.
 
== Scenario file structure ==
 
Scenarios do not have access to the settings stage and data stage parts of the [https://lua-api.factorio.com/latest/Data-Lifecycle.html Data Lifecycle]. This means they rely entirely on runtime scripting via the control.lua file. Scenarios can contain a [[#description.json|description.json]] file to mark them as multiplayer compatible.
 
=== Packaging a scenario in a mod ===
Scenarios must be packaged into a mod to be distributed on the mod portal.
 
Inside a [[Tutorial:Mod_structure|mod]] add a "scenarios" folder, and copy your scenario into that folder. If you created a scenario with the map editor, you can find it in the scenarios folder in your [[application directory#User_data_directory|user data directory]].
 
=== description.json ===
A json file in the scenario folder that can have the following fields:
* multiplayer-compatible - [[Types/bool|bool]] - Default: false
* is-main-game - [[Types/bool|bool]] - Default: false
* order - [[Types/Order|Order]]
 
==== Example ====
<syntaxhighlight lang="json">
{
  "multiplayer-compatible": true,
  "order": "d"
}
</syntaxhighlight>
 
=== Localization of scenario name and description ===
Scenario name and description, which are seen in the "Start a new game" scenario selector are localised using [[Tutorial:Localisation#File_format|locale files]] inside the scenario. The keys are <code>scenario-name</code> and <code>description</code>, both without a [category]. Example from freeplay/locale/en/freeplay.cfg:
 
<pre>scenario-name=Freeplay
description=Your task is to launch a rocket into space. Start from nothing, work your way up with automation, and don't forget to protect yourself from the natives.\n[font=default-bold]This is the intended way of playing Factorio.[/font]</pre>


== See also ==
== See also ==


* [[Campaign]]
* [[Tutorial]]
* [[Map editor]]
* [[Map editor]]
* [[World generator]]
* [[Map generator]]
 
{{C|Modding}}

Latest revision as of 20:36, 13 November 2023

The scenario system allows save-based mods to be created, so that installing mods separately is not necessary. This allows for server side scripting, or to provide a separate objective than the vanilla freeplay (which is actually a scenario, just like the tutorial campaign).

Scenarios count as mods for the purpose of isolating achievements.

Creation

Creation of a scenario starts in the map editor. The map editor allows an author to save a map that they have created as a scenario. This allows players to add special scripting to the scenario.

There are two ways to create a scenario:

  • Via the Map editor.
  • Creating a new folder in the scenarios folder, and adding a control.lua.

Differences between scenarios, saves, and mods

There are a few differences between a scenario, a save, and a mod. In a way, a scenario takes parts from both.

  • Scenarios, unlike mods, cannot add any prototypes to the game. The only type of scripting allowed in a scenario is scripting that would occur in control.lua.
  • Scenarios can have premade maps, such as the supply scenario, or can have maps made with the map generator, such as freeplay.
  • Scenarios do not need to be installed client side, unlike mods. This allows servers to implement small changes to gameplay on their end, such as displaying a MOTD to joining players.
  • Scenarios, unlike normal saves, are stored in a different folder.
  • Scenarios can be used to create a bit of a story, as the campaign does.

Playing a scenario

There are several scenarios included into the game by default. To play a scenario, click Play->Scenarios, and choose either a user scenario, or a scenario from the base game or mod. The Freeplay scenario is the same as the basic game, where the objective is to launch a rocket.

Upon choosing a scenario to play and saving the game, a normal save will be created that encompasses the map itself, and the control.Lua scripting that was provided by the scenario. This can be removed by deleting the script.dat and control.Lua files from the save, turning it into a normal save. Do this at your own risk, as it may break the save depending on how intertwined the scenario is with the save.

Installing scenarios

Scenarios made by other players can be installed into a folder called scenarios in the player's user data directory. It can then be played from the scenarios menu.

Scenarios added by mods are also shown in the Scenarios menu.

Scenario file structure

Scenarios do not have access to the settings stage and data stage parts of the Data Lifecycle. This means they rely entirely on runtime scripting via the control.lua file. Scenarios can contain a description.json file to mark them as multiplayer compatible.

Packaging a scenario in a mod

Scenarios must be packaged into a mod to be distributed on the mod portal.

Inside a mod add a "scenarios" folder, and copy your scenario into that folder. If you created a scenario with the map editor, you can find it in the scenarios folder in your user data directory.

description.json

A json file in the scenario folder that can have the following fields:

  • multiplayer-compatible - bool - Default: false
  • is-main-game - bool - Default: false
  • order - Order

Example

{
  "multiplayer-compatible": true,
  "order": "d"
}

Localization of scenario name and description

Scenario name and description, which are seen in the "Start a new game" scenario selector are localised using locale files inside the scenario. The keys are scenario-name and description, both without a [category]. Example from freeplay/locale/en/freeplay.cfg:

scenario-name=Freeplay
description=Your task is to launch a rocket into space. Start from nothing, work your way up with automation, and don't forget to protect yourself from the natives.\n[font=default-bold]This is the intended way of playing Factorio.[/font]

See also