 569c37cb8e
			
		
	
	569c37cb8e
	
	
	
		
			
			* Replace all usages of player settings * Fixed line break error * Attempt to fix line break again * Finally figure out what Pycharm did to this file * Pycharm search failed me * Remove duplicate s * Update ArchipIdle * Revert random newline changes from Pycharm * Remove player settings from fstrings and rename --samesettings to --sameoptions * Finally get PyCharm to not auto-format my commits, randomly inserting the newlines * Removing player-settings * Missed one * Remove final line break error Co-authored-by: Exempt-Medic <60412657+exempt-medic@users.noreply.github.com> --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
		
			
				
	
	
		
			152 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Archipelago Triggers Guide
 | |
| 
 | |
| This guide details the use of the Archipelago YAML trigger system. This guide is intended for a more advanced user with
 | |
| more in-depth knowledge of Archipelago YAML options as well as experience editing YAML files. This guide should take
 | |
| about 5 minutes to read.
 | |
| 
 | |
| ## What are triggers?
 | |
| 
 | |
| Triggers allow you to customize your game options by allowing you to define one or many options which only occur under
 | |
| specific conditions. These are essentially "if, then" statements for options in your game. A good example of what you
 | |
| can do with triggers is the [custom mercenary mode YAML
 | |
| ](https://github.com/alwaysintreble/Archipelago-yaml-dump/blob/main/Snippets/Mercenary%20Mode%20Snippet.yaml) that was
 | |
| created using entirely triggers and plando.
 | |
| 
 | |
| For more information on plando, you can reference the [general plando guide](/tutorial/Archipelago/plando/en) or the
 | |
| [A Link to the Past plando guide](/tutorial/A%20Link%20to%20the%20Past/plando/en).
 | |
| 
 | |
| ## Trigger use
 | |
| 
 | |
| Triggers may be defined in either the root or in the relevant game sections. Generally, the best place to do this is the
 | |
| bottom of the YAML for clear organization.
 | |
| 
 | |
| Each trigger consists of four parts:
 | |
| - `option_category` specifies the section which the triggering option is defined in.
 | |
|     - Example: `A Link to the Past`
 | |
|     - This is the category the option is located in. If the option you're triggering off of is in root then you
 | |
|       would use `null`, otherwise this is the game for which you want this option trigger to activate.
 | |
| - `option_name` specifies the name of the triggering option.
 | |
|     - Example: `shop_item_slots`
 | |
|     - This can be any option from any category defined in the YAML file in either root or a game section.
 | |
| - `option_result` specifies the value of the option that activates this trigger.
 | |
|     - Example: `15`
 | |
|     - Each trigger must be used for exactly one option result. If you would like the same thing to occur with multiple
 | |
|       results, you would need multiple triggers for this.
 | |
| - `options` is where you define what will happen when the trigger activates. This can be something as simple as ensuring
 | |
|   another option also gets selected or placing an item in a certain location. It is possible to have multiple things
 | |
|   happen in this section.
 | |
|     - Example:
 | |
|   ```yaml
 | |
|   A Link to the Past:
 | |
|     start_inventory: 
 | |
|       Rupees (300): 2
 | |
|   ```
 | |
| 
 | |
| The general format is:
 | |
| 
 | |
|   ```yaml
 | |
|   category:
 | |
|     option to change:
 | |
|       desired result
 | |
|   ```
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| The above examples all together will end up looking like this:
 | |
| 
 | |
|   ```yaml
 | |
|   triggers:
 | |
|     - option_category: A Link to the Past
 | |
|       option_name: shop_item_slots
 | |
|       option_result: 15
 | |
|       options:
 | |
|         A Link to the Past:
 | |
|           start_inventory:
 | |
|             Rupees(300): 2
 | |
|   ```
 | |
| 
 | |
| For this example, if the generator happens to roll 15 shuffled in shop item slots for your game, you'll be granted 600
 | |
| rupees at the beginning. Triggers can also be used to change other options.
 | |
| 
 | |
| For example:
 | |
| 
 | |
|   ```yaml
 | |
|   triggers:
 | |
|     - option_category: Timespinner
 | |
|       option_name: SpecificKeycards
 | |
|       option_result: true
 | |
|       options:
 | |
|         Timespinner:
 | |
|           Inverted: true
 | |
|   ```
 | |
| 
 | |
| In this example, if your world happens to roll SpecificKeycards, then your game will also start in inverted.
 | |
| 
 | |
| It is also possible to use imaginary values in options to trigger specific settings. You can use these made-up values in
 | |
| either your main options or to trigger from another trigger. Currently, this is the only way to trigger on "setting 1
 | |
| AND setting 2".
 | |
| 
 | |
| For example:
 | |
| 
 | |
|   ```yaml
 | |
|   triggers:
 | |
|     - option_category: Secret of Evermore
 | |
|       option_name: doggomizer
 | |
|       option_result: pupdunk
 | |
|       options:
 | |
|         Secret of Evermore:
 | |
|           difficulty:
 | |
|             normal: 50
 | |
|             pupdunk_hard: 25
 | |
|             pupdunk_mystery: 25
 | |
|           exp_modifier:
 | |
|             150: 50
 | |
|             200: 50
 | |
|     - option_category: Secret of Evermore
 | |
|       option_name: difficulty
 | |
|       option_result: pupdunk_hard
 | |
|       options:
 | |
|         Secret of Evermore:
 | |
|           fix_wings_glitch: false
 | |
|           difficulty: hard
 | |
|     - option_category: Secret of Evermore
 | |
|       option_name: difficulty
 | |
|       option_result: pupdunk_mystery
 | |
|       options:
 | |
|         Secret of Evermore:
 | |
|           fix_wings_glitch: false
 | |
|           difficulty: mystery
 | |
|   ```
 | |
| 
 | |
| In this example (thanks to @Black-Sliver), if the `pupdunk` option is rolled, then the difficulty values will be rolled
 | |
| again using the new options `normal`, `pupdunk_hard`, and `pupdunk_mystery`, and the exp modifier will be rerolled using
 | |
| new weights for 150 and 200. This allows for two more triggers that will only be used for the new `pupdunk_hard`
 | |
| and `pupdunk_mystery` options so that they will only be triggered on "pupdunk AND hard/mystery".
 | |
| 
 | |
| Options that define a list, set, or dict can additionally have the character `+` added to the start of their name, which applies the contents of
 | |
| the activated trigger to the already present equivalents in the game options.
 | |
| 
 | |
| For example:
 | |
| ```yaml
 | |
| Super Metroid:
 | |
|   start_location: 
 | |
|     landing_site: 50
 | |
|     aqueduct: 50
 | |
|   start_hints:
 | |
|     - Morph Ball
 | |
| triggers:
 | |
|   - option_category: Super Metroid
 | |
|     option_name: start_location
 | |
|     option_result: aqueduct
 | |
|     options:
 | |
|       Super Metroid:
 | |
|         +start_hints:
 | |
|           - Gravity Suit
 | |
| ```
 | |
| 
 | |
| In this example, if the `start_location` option rolls `landing_site`, only a starting hint for Morph Ball will be created.
 | |
| If `aqueduct` is rolled, a starting hint for Gravity Suit will also be created alongside the hint for Morph Ball.
 | |
| 
 | |
| Note that for lists, items can only be added, not removed or replaced. For dicts, defining a value for a present key will 
 | |
| replace that value within the dict.
 |