I intend to post a number of topics here regarding modding. I'll edit them as I go with updates to the various file formats, and in response to questions. We can always move them to their own forum should it get noisy in here!
Here’s all the information you need to start creating your own missions.
The missions are organised into packs, which exists under the
data/missions subfolder. If you have access to the beta builds, you’ll see there’s one pack there already called
std: these are the missions that are built-in to the game. The easiest thing to do is create your own subfolder with your mission pack name, and then copy one of these mission folders over to your subfolder as a template.
There are several csv files in each mission folder, all of which must exist (even if they’re empty.) Each has their own set of columns:
This file details general infomation about this mission. Note the header line is ignored, and the columns must be in the order shown in the example missions. There are four columns:
reward: The base reward for this mission. Multiplied if the target is off planet.
gen privacy: How secret is the fact that the giver has asked for this mission? Certain sensitive missions might cause the giver harm should they be discovered.
complete privacy: How secret is the fact that the assignee completed this mission?
completion trigger: A trigger for how the game knows the mission is completed. This might take a number of forms: the exact format will be filled in later.
- Two optional columns at the end of this file:
completed goalsshow a stack of goals that are added to the giver when they are assigned and completed. The exact format of these will be filled in later.
This file contains extra planning goals and actions that are available to all characters in the game as a result of this mission being available. The format is the same as the planning data structures, detailed elsewhere. There are a few special actions and goals available specifically for mission creation and assignment:
GIVE_MISSIONaction: This action will allocate the current mission to whatever target is in the scope of this goal.
CANCEL_MISSIONSaction: This action will cancel all other missions of this type available from the other character, assuming that they're not already assigned to someone.
STD_TRAVEL_ASSIGNED_GIVER): This goal is set whenever this character is the giver of an assigned mission, at cost 0. This means it will be considered as a top priority. It allows the giver to change their behaviour when the mission has been assigned - eg to follow the player around the city.
MISSION_ASSIGNEEcollection option will search the character for any missions they've currently given and assigned and put the mission assignees in the scope of the requirement.
conversation_player.csvThis file details the extra conversation options the player has because of the mission. Note that these are applied to anyconversation, not just the mission at hand, so you'll need to ensure they're filtered appropriately. They're loaded before the standard conversation options, allowing modders to override the default behaviour.
req target activity: The activity the person the player is talking to (the "responder" or "target") has to be doing for this to be available as a player conversation option. Possible activities are listed in `data/activities.csv`.
req tag: A list of colon-separated conversation tags that must all be set on the conversation for this to be available as a player conversation option. Tags are set when you (or the AI) chooses particular conversation option.
unless tag: A list of colon-separated conversation tags that must all NOT be set on the conversation for this to be available as a player conversation option.
required loc component: A component that must be available in the place we're talking. Only available options so far are
string: The string (given in `strings.csv`) that will be shown as the conversation option.
patience cost: The cost of choosing this option (usually 0-3).
unless opinion: A list of opinions which the "target" must have (or not have) about the player for this to be available.
add tag: A list of colon-seperated tags added to the conversation when this option is chosen.
remove tag: A list of colon-seperated tags removed from the conversation when this option is chosen.
conversation_ai_response.csvThis file details the conversation responses the AI might choose from. The AI will choose the first valid option it can find in order, which means that catch-all options with fewer filters must be placed at the end of the file.
The format is almost identical to the
conversation_player.csvformat, except there is no required target activity field, and there is a new `min closeness` field, which lists the minimum relationship the target must have with the player for this option to be chosen. The patience cost is not display, but negative values are sometimes used to restore patience back to the player.
opinions.csvOpinion files are used when the AI characters learn certain events about other characters (including the player.) It's used in the mission files to react to the events that are created when missions are generated and completed. The opinions are raised and lowered by a certain value between -1 and 1.
Anything greater than 0.3 or -0.3 will fire that opinion (or the negative version of it.) There are two filters on the end of the file:
I am otherwill only trigger this opinion change if we were the other party listed in the event, and
My event about otherwill trigger on the event creation only, and only affect the person's opinion that the event was created for about the other party in the event.
Opinions are not hard-coded and can be anything you like, as long as there are strings available to display them (you can add your own strings in the
strings.csvfile). See the examples given in the central
The possibilities for you to build your own missions are expanding all the time, as I add new missions triggers and possible goals for the AI. The file formats are subject to change in the future: I’ll post about any significant changes to the forums.
I hope that's enough to be going on with: I'm aware this is incomplete, but hopefully it will be enough of a start. Do ask clarification questions in this post and I'll update the main text.Chris Parsons