docs: add common terms documentation to website (#680)
* docs: add common terms documentation to website * minor cleanup * some rewording and reformatting. * tighten up world definition clarity Co-authored-by: Rome Reginelli <mduo13@gmail.com> * Clarify seed definition a bit better Co-authored-by: Rome Reginelli <mduo13@gmail.com> * add text for "out of logic" and that slot names must be unique * rename common terms to glossary Co-authored-by: Rome Reginelli <mduo13@gmail.com>
This commit is contained in:
		
							parent
							
								
									5f2193f2e4
								
							
						
					
					
						commit
						61f751a1db
					
				|  | @ -141,6 +141,11 @@ def faq(lang): | ||||||
|     return render_template("faq.html", lang=lang) |     return render_template("faq.html", lang=lang) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @app.route('/glossary/<string:lang>/') | ||||||
|  | def terms(lang): | ||||||
|  |     return render_template("glossary.html", lang=lang) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @app.route('/seed/<suuid:seed>') | @app.route('/seed/<suuid:seed>') | ||||||
| def view_seed(seed: UUID): | def view_seed(seed: UUID): | ||||||
|     seed = Seed.get(id=seed) |     seed = Seed.get(id=seed) | ||||||
|  |  | ||||||
|  | @ -49,6 +49,12 @@ If you are ready to start randomizing games, or want to start playing your favor | ||||||
| our discord server at the [Archipelago Discord](https://discord.gg/archipelago). There are always people ready to answer | our discord server at the [Archipelago Discord](https://discord.gg/archipelago). There are always people ready to answer | ||||||
| any questions you might have. | any questions you might have. | ||||||
| 
 | 
 | ||||||
|  | ## What are some common terms I should know? | ||||||
|  | 
 | ||||||
|  | As randomizers and multiworld randomizers have been around for a while now there are quite a lot of common terms | ||||||
|  | and jargon that is used in conjunction by the communities surrounding them. For a lot of the terms that are more common | ||||||
|  | to Archipelago and its specific systems please see the [Glossary](/glossary/en). | ||||||
|  | 
 | ||||||
| ## I want to add a game to the Archipelago randomizer. How do I do that? | ## I want to add a game to the Archipelago randomizer. How do I do that? | ||||||
| 
 | 
 | ||||||
| The best way to get started is to take a look at our code on GitHub | The best way to get started is to take a look at our code on GitHub | ||||||
|  |  | ||||||
|  | @ -0,0 +1,94 @@ | ||||||
|  | # Multiworld Glossary | ||||||
|  | 
 | ||||||
|  | There are a lot of common terms used when playing in different game randomizer communities and in multiworld as well. | ||||||
|  | This document serves as a lookup for common terms that may be used by users in the community or in various other | ||||||
|  | documentation. | ||||||
|  | 
 | ||||||
|  | ## Item | ||||||
|  | Items are what get shuffled around in your world or other worlds that you then receive. This could be a sword, a stat  | ||||||
|  | upgrade, a spell, or any other potential receivable for your game. | ||||||
|  | 
 | ||||||
|  | ## Location | ||||||
|  | Locations are where items are placed in your game. Whenever you interact with a location, you or another player will | ||||||
|  | then receive an item. A location could be a chest, an enemy drop, a shop purchase, or any other interactable that can | ||||||
|  | contain items in your game. | ||||||
|  | 
 | ||||||
|  | ## Check | ||||||
|  | A check is a common term for when you "check", or pick up, a location. In terms of Archipelago this is usually used for | ||||||
|  | when a player goes to a location and sends its item, or "checks" the location. Players will often reference their now | ||||||
|  | randomized locations as checks. | ||||||
|  | 
 | ||||||
|  | ## Slot | ||||||
|  | A slot is the player name and number assigned during generation. The number of slots is equal to the number of players, | ||||||
|  | or "worlds", created. Each name must be unique as these are used to identify the slot user. | ||||||
|  | 
 | ||||||
|  | ## World | ||||||
|  | World in terms of Archipelago can mean multiple things and is used interchangeably in many situations. | ||||||
|  | * During gameplay, a world is a single instance of a game, occupying one player "slot". However,  | ||||||
|  | Archipelago allows multiple players to connect to the same slot; then those players can share a world  | ||||||
|  | and complete it cooperatively. For games with native cooperative play, you can also play together and | ||||||
|  | share a world that way, usually with only one player connected to the multiworld. | ||||||
|  | * On the programming side, a world typically represents the package that integrates Archipelago with a | ||||||
|  | particular game. For example this could be the entire `worlds/factorio` directory. | ||||||
|  | 
 | ||||||
|  | ## RNG | ||||||
|  | Acronym for "Random Number Generator." Archipelago uses its own custom Random object with a unique seed per generation, | ||||||
|  | or, if running from source, a seed can be supplied and this seed will control all randomization during generation as all | ||||||
|  | game worlds will have access to it. | ||||||
|  | 
 | ||||||
|  | ## Seed | ||||||
|  | A "seed" is a number used to initialize a pseudorandom number generator. Whenever you generate a new game on Archipelago | ||||||
|  | this is a new "seed" as it has unique item placement, and you can create multiple "rooms" on the Archipelago site from a | ||||||
|  | single seed. Using the same seed results in the random placement being the same. | ||||||
|  | 
 | ||||||
|  | ## Room | ||||||
|  | Whenever you generate a seed on the Archipelago website you will be put on a seed page that contains all the seed info | ||||||
|  | with a link to the spoiler if one exists and will show how many unique rooms exist per seed. Each room has its own  | ||||||
|  | unique identifier that is separate from the seed. The room page is where you can find information to connect to the | ||||||
|  | multiworld and download any patches if necessary. If you have a particularly fun or interesting seed, and you want to  | ||||||
|  | share it with somebody you can link them to this seed page, where they can generate a new room to play it! For seeds  | ||||||
|  | generated with race mode enabled, the seed page will only show rooms created by the unique user so the seed page is  | ||||||
|  | perfectly safe to share for racing purposes. | ||||||
|  | 
 | ||||||
|  | ## Logic | ||||||
|  | Base behavior of all seeds generated by Archipelago is they are expected to be completable based on the requirements of | ||||||
|  | the settings. This is done by using "logic" in order to determine valid locations to place items while still being able | ||||||
|  | to reach said location without this item. For the purposes of the randomizer a location is considered "in logic" if you  | ||||||
|  | can reach it with your current toolset of items or skills based on settings. Some players are able to obtain locations | ||||||
|  | "out of logic" by performing various glitches or tricks that the settings may not account for and tend to mention this | ||||||
|  | when sending out an item they obtained this way. | ||||||
|  | 
 | ||||||
|  | ## Progression | ||||||
|  | Certain items will allow access to more locations and are considered progression items as they "progress" the seed. | ||||||
|  | 
 | ||||||
|  | ## Trash | ||||||
|  | A term used for "filler" items that have no bearing on the generation and are either marginally useful for the player | ||||||
|  | or useless. These items can be very useful depending on the player but are never very important and as such are usually | ||||||
|  | termed trash. | ||||||
|  | 
 | ||||||
|  | ## Burger King / BK Mode | ||||||
|  | A term used in multiworlds when a player is unable to continue to progress and is awaiting an item. The term came to be  | ||||||
|  | after a player, allegedly, was unable to progress during a multiworld and went to Burger King while waiting to receive | ||||||
|  | items from other players. | ||||||
|  | 
 | ||||||
|  | * "Logical BK" is when the player is unable to progress according to the settings of their game but may still be able to do | ||||||
|  | things that would be "out of logic" by the generation. | ||||||
|  | 
 | ||||||
|  | * "Hard / full BK" is when the player is completely unable to progress even with tricks they may know and are unable to | ||||||
|  | continue to play, aside from doing something like killing enemies for experience or money. | ||||||
|  | 
 | ||||||
|  | ## Sphere | ||||||
|  | Archipelago calculates the game playthrough by using a "sphere" system where it has a state for each player and checks | ||||||
|  | to see what the players are able to reach with their current items. Any location that is reachable with the current | ||||||
|  | state of items is a "sphere." For the purposes of Archipelago it starts playthrough calculation by distributing sphere 0 | ||||||
|  | items which are items that are either forced in the player's inventory by the game or placed in the `start_inventory` in | ||||||
|  | their settings. Sphere 1 is then all accessible locations the players can reach with all the items they received from | ||||||
|  | sphere 0, or their starting inventory. The playthrough continues in this fashion calculating a number of spheres until | ||||||
|  | all players have completed their goal. | ||||||
|  | 
 | ||||||
|  | ## Scouts / Scouting | ||||||
|  | In some games there are locations that have visible items even if the item itself is unobtainable at the current time. | ||||||
|  | Some games utilize a scouting feature where when the player "sees" the item it will give a free hint for the item in the | ||||||
|  | client letting the players know what the exact item is, since if the item was for that game it would know but the item | ||||||
|  | being foreign is a lot harder to represent visually. | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,53 @@ | ||||||
|  | window.addEventListener('load', () => { | ||||||
|  |     const tutorialWrapper = document.getElementById('glossary-wrapper'); | ||||||
|  |     new Promise((resolve, reject) => { | ||||||
|  |         const ajax = new XMLHttpRequest(); | ||||||
|  |         ajax.onreadystatechange = () => { | ||||||
|  |             if (ajax.readyState !== 4) { return; } | ||||||
|  |             if (ajax.status === 404) { | ||||||
|  |                 reject("Sorry, the glossary page is not available in that language yet."); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             if (ajax.status !== 200) { | ||||||
|  |                 reject("Something went wrong while loading the glossary."); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             resolve(ajax.responseText); | ||||||
|  |         }; | ||||||
|  |         ajax.open('GET', `${window.location.origin}/static/assets/faq/` + | ||||||
|  |           `glossary_${tutorialWrapper.getAttribute('data-lang')}.md`, true); | ||||||
|  |         ajax.send(); | ||||||
|  |     }).then((results) => { | ||||||
|  |         // Populate page with HTML generated from markdown
 | ||||||
|  |         showdown.setOption('tables', true); | ||||||
|  |         showdown.setOption('strikethrough', true); | ||||||
|  |         showdown.setOption('literalMidWordUnderscores', true); | ||||||
|  |         tutorialWrapper.innerHTML += (new showdown.Converter()).makeHtml(results); | ||||||
|  |         adjustHeaderWidth(); | ||||||
|  | 
 | ||||||
|  |         // Reset the id of all header divs to something nicer
 | ||||||
|  |         const headers = Array.from(document.querySelectorAll('h1, h2, h3, h4, h5, h6')); | ||||||
|  |         const scrollTargetIndex = window.location.href.search(/#[A-z0-9-_]*$/); | ||||||
|  |         for (let i=0; i < headers.length; i++){ | ||||||
|  |             const headerId = headers[i].innerText.replace(/[ ]/g,'-').toLowerCase() | ||||||
|  |             headers[i].setAttribute('id', headerId); | ||||||
|  |             headers[i].addEventListener('click', () => | ||||||
|  |                 window.location.href = window.location.href.substring(0, scrollTargetIndex) + `#${headerId}`); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Manually scroll the user to the appropriate header if anchor navigation is used
 | ||||||
|  |         if (scrollTargetIndex > -1) { | ||||||
|  |             try{ | ||||||
|  |                 const scrollTarget = window.location.href.substring(scrollTargetIndex + 1); | ||||||
|  |                 document.getElementById(scrollTarget).scrollIntoView({ behavior: "smooth" }); | ||||||
|  |             } catch(error) { | ||||||
|  |                 console.error(error); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }).catch((error) => { | ||||||
|  |         console.error(error); | ||||||
|  |         tutorialWrapper.innerHTML = | ||||||
|  |             `<h2>This page is out of logic!</h2>
 | ||||||
|  |             <h3>Click <a href="${window.location.origin}">here</a> to return to safety.</h3>`; | ||||||
|  |     }); | ||||||
|  | }); | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | {% extends 'pageWrapper.html' %} | ||||||
|  | 
 | ||||||
|  | {% block head %} | ||||||
|  |     {% include 'header/grassHeader.html' %} | ||||||
|  |     <title>Glossary</title> | ||||||
|  |     <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename="styles/markdown.css") }}" /> | ||||||
|  |     <script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.1/showdown.min.js" | ||||||
|  |             integrity="sha512-L03kznCrNOfVxOUovR6ESfCz9Gfny7gihUX/huVbQB9zjODtYpxaVtIaAkpetoiyV2eqWbvxMH9fiSv5enX7bw==" | ||||||
|  |             crossorigin="anonymous"></script> | ||||||
|  |     <script type="application/ecmascript" src="{{ url_for('static', filename="assets/glossary.js") }}"></script> | ||||||
|  | {% endblock %} | ||||||
|  | 
 | ||||||
|  | {% block body %} | ||||||
|  |     <div id="glossary-wrapper" data-lang="{{ lang }}" class="markdown"> | ||||||
|  |         <!-- Content generated by JavaScript --> | ||||||
|  |     </div> | ||||||
|  | {%  endblock %} | ||||||
|  | @ -26,6 +26,7 @@ | ||||||
|             <li><a href="/user-content">User Content</a></li> |             <li><a href="/user-content">User Content</a></li> | ||||||
|             <li><a href="/weighted-settings">Weighted Settings Page</a></li> |             <li><a href="/weighted-settings">Weighted Settings Page</a></li> | ||||||
|             <li><a href="{{url_for('stats')}}">Game Statistics</a></li> |             <li><a href="{{url_for('stats')}}">Game Statistics</a></li> | ||||||
|  |             <li><a href="/common-terms">Common Multiworld Terms</a></li> | ||||||
|         </ul> |         </ul> | ||||||
| 
 | 
 | ||||||
|         <h2>Game Info Pages</h2> |         <h2>Game Info Pages</h2> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue