mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-23 16:33:22 -07:00
Merge branch 'main' into show_all_hints
This commit is contained in:
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@@ -17,9 +17,9 @@ jobs:
|
||||
python-version: '3.8'
|
||||
- name: Download run-time dependencies
|
||||
run: |
|
||||
Invoke-WebRequest -Uri https://github.com/alttpo/sni/releases/download/v0.0.79/sni-v0.0.79-windows-amd64.zip -OutFile sni.zip
|
||||
Invoke-WebRequest -Uri https://github.com/alttpo/sni/releases/download/v0.0.81/sni-v0.0.81-windows-amd64.zip -OutFile sni.zip
|
||||
Expand-Archive -Path sni.zip -DestinationPath SNI -Force
|
||||
Invoke-WebRequest -Uri https://github.com/Ijwu/Enemizer/releases/download/6.4/win-x64.zip -OutFile enemizer.zip
|
||||
Invoke-WebRequest -Uri https://github.com/Ijwu/Enemizer/releases/download/7.0/win-x64.zip -OutFile enemizer.zip
|
||||
Expand-Archive -Path enemizer.zip -DestinationPath EnemizerCLI -Force
|
||||
- name: Build
|
||||
run: |
|
||||
@@ -63,11 +63,11 @@ jobs:
|
||||
chmod a+rx appimagetool
|
||||
- name: Download run-time dependencies
|
||||
run: |
|
||||
wget -nv https://github.com/black-sliver/sni/releases/download/v0.0.78-2/sni-v0.0.78-2-manylinux2014-amd64.tar.xz
|
||||
wget -nv https://github.com/alttpo/sni/releases/download/v0.0.81/sni-v0.0.81-manylinux2014-amd64.tar.xz
|
||||
tar xf sni-*.tar.xz
|
||||
rm sni-*.tar.xz
|
||||
mv sni-* SNI
|
||||
wget -nv https://github.com/Ijwu/Enemizer/releases/download/6.4/ubuntu.16.04-x64.7z
|
||||
wget -nv https://github.com/Ijwu/Enemizer/releases/download/7.0/ubuntu.16.04-x64.7z
|
||||
7za x -oEnemizerCLI/ ubuntu.16.04-x64.7z
|
||||
- name: Build
|
||||
run: |
|
||||
|
||||
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -51,11 +51,11 @@ jobs:
|
||||
chmod a+rx appimagetool
|
||||
- name: Download run-time dependencies
|
||||
run: |
|
||||
wget -nv https://github.com/black-sliver/sni/releases/download/v0.0.78-2/sni-v0.0.78-2-manylinux2014-amd64.tar.xz
|
||||
wget -nv https://github.com/alttpo/sni/releases/download/v0.0.81/sni-v0.0.81-manylinux2014-amd64.tar.xz
|
||||
tar xf sni-*.tar.xz
|
||||
rm sni-*.tar.xz
|
||||
mv sni-* SNI
|
||||
wget -nv https://github.com/Ijwu/Enemizer/releases/download/6.4/ubuntu.16.04-x64.7z
|
||||
wget -nv https://github.com/Ijwu/Enemizer/releases/download/7.0/ubuntu.16.04-x64.7z
|
||||
7za x -oEnemizerCLI/ ubuntu.16.04-x64.7z
|
||||
- name: Build
|
||||
run: |
|
||||
|
||||
@@ -1516,7 +1516,7 @@ class Tutorial(NamedTuple):
|
||||
language: str
|
||||
file_name: str
|
||||
link: str
|
||||
author: List[str]
|
||||
authors: List[str]
|
||||
|
||||
|
||||
seeddigits = 20
|
||||
|
||||
@@ -66,7 +66,10 @@ Contributions are welcome. We have a few asks of any new contributors.
|
||||
|
||||
Otherwise, we tend to judge code on a case to case basis. It is a generally good idea to stick to PEP-8 guidelines to ensure consistency with existing code. (And to make the linter happy.)
|
||||
|
||||
For adding a new game to Archipelago please see the docs folder for the relevant information and feel free to ask any questions in the #archipelago-dev channel in our discord.
|
||||
For adding a new game to Archipelago and other documentation on how Archipelago functions, please see the docs folder for the relevant information and feel free to ask any questions in the #archipelago-dev channel in our discord.
|
||||
|
||||
## FAQ
|
||||
For frequently asked questions see the website's [FAQ Page](https://archipelago.gg/faq/en/)
|
||||
|
||||
## Code of Conduct
|
||||
We conduct ourselves openly and inclusively here. Please do not contribute to an environment which makes other people uncomfortable. This means that we expect all contributors or participants here to:
|
||||
|
||||
17
SNIClient.py
17
SNIClient.py
@@ -18,7 +18,7 @@ from json import loads, dumps
|
||||
import ModuleUpdate
|
||||
ModuleUpdate.update()
|
||||
|
||||
from Utils import init_logging
|
||||
from Utils import init_logging, messagebox
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_logging("SNIClient", exception_logger="Client")
|
||||
@@ -1303,7 +1303,11 @@ async def main():
|
||||
if args.diff_file:
|
||||
import Patch
|
||||
logging.info("Patch file was supplied. Creating sfc rom..")
|
||||
meta, romfile = Patch.create_rom_file(args.diff_file)
|
||||
try:
|
||||
meta, romfile = Patch.create_rom_file(args.diff_file)
|
||||
except Exception as e:
|
||||
messagebox('Error', str(e), True)
|
||||
raise
|
||||
if "server" in meta:
|
||||
args.connect = meta["server"]
|
||||
logging.info(f"Wrote rom file to {romfile}")
|
||||
@@ -1366,8 +1370,13 @@ def get_alttp_settings(romfile: str):
|
||||
|
||||
if gui_enabled:
|
||||
|
||||
from tkinter import Tk, PhotoImage, Label, LabelFrame, Frame, Button
|
||||
applyPromptWindow = Tk()
|
||||
try:
|
||||
from tkinter import Tk, PhotoImage, Label, LabelFrame, Frame, Button
|
||||
applyPromptWindow = Tk()
|
||||
except Exception as e:
|
||||
logging.error('Could not load tkinter, which is likely not installed.')
|
||||
return '', False
|
||||
|
||||
applyPromptWindow.resizable(False, False)
|
||||
applyPromptWindow.protocol('WM_DELETE_WINDOW', lambda: onButtonClick())
|
||||
logo = PhotoImage(file=Utils.local_path('data', 'icon.png'))
|
||||
|
||||
12
Utils.py
12
Utils.py
@@ -568,6 +568,9 @@ def open_filename(title: str, filetypes: typing.Sequence[typing.Tuple[str, typin
|
||||
|
||||
|
||||
def messagebox(title: str, text: str, error: bool = False) -> None:
|
||||
def run(*args: str):
|
||||
return subprocess.run(args, capture_output=True, text=True).stdout.split('\n', 1)[0] or None
|
||||
|
||||
def is_kivy_running():
|
||||
if 'kivy' in sys.modules:
|
||||
from kivy.app import App
|
||||
@@ -579,6 +582,15 @@ def messagebox(title: str, text: str, error: bool = False) -> None:
|
||||
MessageBox(title, text, error).open()
|
||||
return
|
||||
|
||||
if is_linux and not 'tkinter' in sys.modules:
|
||||
# prefer native dialog
|
||||
kdialog = shutil.which('kdialog')
|
||||
if kdialog:
|
||||
return run(kdialog, f'--title={title}', '--error' if error else '--msgbox', text)
|
||||
zenity = shutil.which('zenity')
|
||||
if zenity:
|
||||
return run(zenity, f'--title={title}', f'--text={text}', '--error' if error else '--info')
|
||||
|
||||
# fall back to tk
|
||||
try:
|
||||
import tkinter
|
||||
|
||||
@@ -67,7 +67,7 @@ def create_ordered_tutorials_file() -> typing.List[typing.Dict[str, typing.Any]]
|
||||
'language': tutorial.language,
|
||||
'filename': game + '/' + tutorial.file_name,
|
||||
'link': f'{game}/{tutorial.link}',
|
||||
'authors': tutorial.author
|
||||
'authors': tutorial.authors
|
||||
}]
|
||||
}
|
||||
|
||||
|
||||
BIN
WebHostLib/static/static/backgrounds/header/stone-header.png
Normal file
BIN
WebHostLib/static/static/backgrounds/header/stone-header.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
BIN
WebHostLib/static/static/backgrounds/stone.png
Normal file
BIN
WebHostLib/static/static/backgrounds/stone.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 229 KiB |
@@ -49,7 +49,6 @@ html{
|
||||
font-weight: normal;
|
||||
width: 100%;
|
||||
margin-bottom: 0.5rem;
|
||||
color: #ffffff;
|
||||
text-shadow: 1px 1px 4px #000000;
|
||||
}
|
||||
|
||||
@@ -58,20 +57,14 @@ html{
|
||||
font-weight: normal;
|
||||
width: 100%;
|
||||
margin-bottom: 0.5rem;
|
||||
color: #ffe993;
|
||||
text-transform: lowercase;
|
||||
text-shadow: 1px 1px 2px #000000;
|
||||
}
|
||||
|
||||
#player-settings h3, #player-settings h4, #player-settings h5, #player-settings h6{
|
||||
color: #ffffff;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#player-settings a{
|
||||
color: #ffef00;
|
||||
}
|
||||
|
||||
#player-settings input:not([type]){
|
||||
border: 1px solid #000000;
|
||||
padding: 3px;
|
||||
|
||||
65
WebHostLib/static/styles/themes/stone.css
Normal file
65
WebHostLib/static/styles/themes/stone.css
Normal file
@@ -0,0 +1,65 @@
|
||||
html{
|
||||
background-image: url('../../static/backgrounds/stone.png');
|
||||
background-repeat: repeat;
|
||||
background-size: 275px 275px;
|
||||
}
|
||||
|
||||
body{
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#base-header {
|
||||
background: url('../../static/backgrounds/header/stone-header.png') repeat-x;
|
||||
}
|
||||
|
||||
.markdown {
|
||||
background-color: rgba(0, 0, 0, 0.66) !important;
|
||||
}
|
||||
|
||||
h1{
|
||||
color: #cccbc3;
|
||||
}
|
||||
|
||||
h2{
|
||||
color: #aad79c;
|
||||
}
|
||||
|
||||
h3, h4, h5,h6{
|
||||
color: #ffffff;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
table th{
|
||||
|
||||
}
|
||||
|
||||
table td{
|
||||
|
||||
}
|
||||
|
||||
a{
|
||||
color: #96e2ff;
|
||||
}
|
||||
|
||||
pre{
|
||||
margin-top: 0;
|
||||
padding: 0.5rem 0.25rem;
|
||||
border-radius: 6px;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
pre code{
|
||||
border: none;
|
||||
}
|
||||
|
||||
code{
|
||||
border-radius: 4px;
|
||||
padding-left: 0.25rem;
|
||||
padding-right: 0.25rem;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
pre, code{
|
||||
background-color: #e4ffdb;
|
||||
border: 1px solid #2d3435;
|
||||
}
|
||||
5
WebHostLib/templates/header/stoneHeader.html
Normal file
5
WebHostLib/templates/header/stoneHeader.html
Normal file
@@ -0,0 +1,5 @@
|
||||
{% block head %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename="styles/themes/stone.css") }}" />
|
||||
{% endblock %}
|
||||
|
||||
{% include 'header/baseHeader.html' %}
|
||||
@@ -429,7 +429,7 @@ def __renderMinecraftTracker(multisave: Dict[str, Any], room: Room, locations: D
|
||||
"Diamond Chestplate": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/e/e0/Diamond_Chestplate_JE3_BE2.png",
|
||||
"Iron Ingot": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/f/fc/Iron_Ingot_JE3_BE2.png",
|
||||
"Block of Iron": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/7/7e/Block_of_Iron_JE4_BE3.png",
|
||||
"Brewing Stand": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/f/fa/Brewing_Stand.png",
|
||||
"Brewing Stand": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/b/b3/Brewing_Stand_%28empty%29_JE10.png",
|
||||
"Ender Pearl": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/f/f6/Ender_Pearl_JE3_BE2.png",
|
||||
"Bucket": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/f/fc/Bucket_JE2_BE2.png",
|
||||
"Bow": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/a/ab/Bow_%28Pull_2%29_JE1_BE1.png",
|
||||
|
||||
BIN
docs/img/theme_stone.JPG
Normal file
BIN
docs/img/theme_stone.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 193 KiB |
@@ -61,9 +61,9 @@ for your world specifically on the webhost.
|
||||
`settings_page` which can be changed to a link instead of an AP generated settings page.
|
||||
|
||||
`theme` to be used for your game specific AP pages. Available themes:
|
||||
| dirt | grass (default) | grassFlowers | ice | jungle | ocean | partyTime |
|
||||
|---|---|---|---|---|---|---|
|
||||
| <img src="img/theme_dirt.JPG" width="100"> | <img src="img/theme_grass.JPG" width="100"> | <img src="img/theme_grassFlowers.JPG" width="100"> | <img src="img/theme_ice.JPG" width="100"> | <img src="img/theme_jungle.JPG" width="100"> | <img src="img/theme_ocean.JPG" width="100"> | <img src="img/theme_partyTime.JPG" width="100"> |
|
||||
| dirt | grass (default) | grassFlowers | ice | jungle | ocean | partyTime | stone |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| <img src="img/theme_dirt.JPG" width="100"> | <img src="img/theme_grass.JPG" width="100"> | <img src="img/theme_grassFlowers.JPG" width="100"> | <img src="img/theme_ice.JPG" width="100"> | <img src="img/theme_jungle.JPG" width="100"> | <img src="img/theme_ocean.JPG" width="100"> | <img src="img/theme_partyTime.JPG" width="100"> | <img src="img/theme_stone.JPG" width="100"> |
|
||||
|
||||
`bug_report_page` (optional) can be a link to a bug reporting page, most likely a GitHub issue page, that will be placed by the site to help direct users to report bugs.
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ class WebWorld:
|
||||
tutorials: List[Tutorial]
|
||||
|
||||
# Choose a theme for your /game/* pages
|
||||
# Available: dirt, grass, grassFlowers, ice, jungle, ocean, partyTime
|
||||
# Available: dirt, grass, grassFlowers, ice, jungle, ocean, partyTime, stone
|
||||
theme = "grass"
|
||||
|
||||
# display a link to a bug report page, most likely a link to a GitHub issue page.
|
||||
|
||||
@@ -77,7 +77,7 @@ class ALTTPWeb(WebWorld):
|
||||
msu.description,
|
||||
"Español",
|
||||
"msu1_es.md",
|
||||
"msu1/en",
|
||||
"msu1/es",
|
||||
["Edos"]
|
||||
)
|
||||
|
||||
|
||||
@@ -97,9 +97,9 @@ the lua you are using in your file explorer and copy the `socket.dll` to the bas
|
||||
3. Click on the Tools menu and click on **Lua Console**
|
||||
4. Click Script -> Open Script...
|
||||
5. Select the `Connector.lua` file you downloaded above
|
||||
- SuperNintendoClient users should download `sniConnector.lua` from the client download page
|
||||
- SNIClient users should look in their Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
emulator is 64-bit or 32-bit.
|
||||
- Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
emulator is 64-bit or 32-bit. Please note the most recent versions of BizHawk are 64-bit only.
|
||||
|
||||
|
||||
##### RetroArch 1.10.1 or newer
|
||||
|
||||
|
||||
@@ -7,14 +7,16 @@ from datetime import datetime
|
||||
|
||||
class ArchipIDLEWebWorld(WebWorld):
|
||||
theme = 'partyTime'
|
||||
tutorials = [Tutorial(
|
||||
"Setup Guide",
|
||||
"A guide to playing ArchipIDLE",
|
||||
"English",
|
||||
"guide_en.md",
|
||||
"guide/en",
|
||||
["Farrak Kilhn"]
|
||||
)]
|
||||
tutorials = [
|
||||
Tutorial(
|
||||
tutorial_name='Setup Guide',
|
||||
description='A guide to playing Archipidle',
|
||||
language='English',
|
||||
file_name='guide_en.md',
|
||||
link='guide/en',
|
||||
authors=['Farrak Kilhn']
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
class ArchipIDLEWorld(World):
|
||||
|
||||
@@ -88,8 +88,9 @@ Factorio product code. This will allow you to download the game directly from th
|
||||
|
||||
It is recommended to download the standalone version of Factorio for use as a dedicated server. Doing so prevents any
|
||||
potential conflicts with your currently-installed version of Factorio. Download the file by clicking on the button
|
||||
appropriate to your operating system, and extract the folder to a convenient location (we recommend `C:\Factorio` or
|
||||
similar).
|
||||
appropriate to your operating system, and extract the folder to a convenient location. The best place to do this for
|
||||
Archipelago is to place the extracted game folder into the `Archipelago` directory and rename it to just be "Factorio".
|
||||
|
||||
|
||||

|
||||
|
||||
@@ -99,12 +100,13 @@ have logged in, you may close the game.
|
||||
|
||||
#### Configure your Archipelago Installation
|
||||
|
||||
You must modify your `host.yaml` file inside your Archipelago installation directory so that it points to your
|
||||
standalone Factorio executable. Here is an example of the appropriate setup, note the double `\\` are required:
|
||||
If you did not place the Factorio standalone in your Archipelago installation, you must modify your `host.yaml` file
|
||||
inside your Archipelago installation directory so that it points to your standalone Factorio executable. Here is an
|
||||
example of the appropriate setup, note the double `\\` are required:
|
||||
|
||||
```yaml
|
||||
factorio_options:
|
||||
executable: C:\\factorio\\bin\\x64\\factorio"
|
||||
executable: C:\\path\\to\\factorio\\bin\\x64\\factorio"
|
||||
```
|
||||
|
||||
This allows you to host your own Factorio game.
|
||||
@@ -145,6 +147,13 @@ In case any problems should occur, the Archipelago Client will create a file `Fa
|
||||
contents of this file may help you troubleshoot an issue on your own and is vital for requesting help from other people
|
||||
in Archipelago.
|
||||
|
||||
## Commands in game
|
||||
|
||||
Once you have connected to the server successfully using the Archipelago Factorio Client you should see a message
|
||||
stating you can get help using Archipelago commands by typing `!help`. Commands cannot currently be sent from within
|
||||
the Factorio session, but you can send them from the Archipelago Factorio Client. For more information about the commands
|
||||
you can use see the [commands guide](/tutorial/Archipelago/commands/en).
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- Alternate Tutorial by
|
||||
|
||||
@@ -165,35 +165,36 @@ class HKWorld(World):
|
||||
exclusions.update(path_of_pain_locations)
|
||||
if wp <= WhitePalace.option_kingfragment:
|
||||
exclusions.update(white_palace_checks)
|
||||
if wp == WhitePalace.option_exclude and self.world.RandomizeCharms[self.player]:
|
||||
# Ensure KF location is still reachable if charms are non-randomized
|
||||
exclusions.update(white_palace_transitions)
|
||||
exclusions.update(white_palace_events)
|
||||
if wp == WhitePalace.option_exclude:
|
||||
exclusions.add("King_Fragment")
|
||||
if self.world.RandomizeCharms[self.player]:
|
||||
# If charms are randomized, this will be junk-filled -- so transitions and events are not progression
|
||||
exclusions.update(white_palace_transitions)
|
||||
exclusions.update(white_palace_events)
|
||||
return exclusions
|
||||
|
||||
def create_regions(self):
|
||||
menu_region: Region = create_region(self.world, self.player, 'Menu')
|
||||
self.world.regions.append(menu_region)
|
||||
wp_exclusions = self.white_palace_exclusions()
|
||||
# wp_exclusions = self.white_palace_exclusions()
|
||||
|
||||
# Link regions
|
||||
for event_name in event_names:
|
||||
if event_name in wp_exclusions:
|
||||
continue
|
||||
#if event_name in wp_exclusions:
|
||||
# continue
|
||||
loc = HKLocation(self.player, event_name, None, menu_region)
|
||||
loc.place_locked_item(HKItem(event_name,
|
||||
event_name not in wp_exclusions,
|
||||
True, #event_name not in wp_exclusions,
|
||||
None, "Event", self.player))
|
||||
menu_region.locations.append(loc)
|
||||
for entry_transition, exit_transition in connectors.items():
|
||||
if entry_transition in wp_exclusions:
|
||||
continue
|
||||
#if entry_transition in wp_exclusions:
|
||||
# continue
|
||||
if exit_transition:
|
||||
# if door logic fulfilled -> award vanilla target as event
|
||||
loc = HKLocation(self.player, entry_transition, None, menu_region)
|
||||
loc.place_locked_item(HKItem(exit_transition,
|
||||
exit_transition not in wp_exclusions,
|
||||
True, #exit_transition not in wp_exclusions,
|
||||
None, "Event", self.player))
|
||||
menu_region.locations.append(loc)
|
||||
|
||||
@@ -208,29 +209,30 @@ class HKWorld(World):
|
||||
|
||||
wp_exclusions = self.white_palace_exclusions()
|
||||
for option_key, option in hollow_knight_randomize_options.items():
|
||||
if getattr(self.world, option_key)[self.player]:
|
||||
for item_name, location_name in zip(option.items, option.locations):
|
||||
if location_name in wp_exclusions:
|
||||
continue
|
||||
if item_name in geo_replace:
|
||||
item_name = "Geo_Rock-Default"
|
||||
item = self.create_item(item_name)
|
||||
# self.create_location(location_name).place_locked_item(item)
|
||||
if location_name == "Start":
|
||||
self.world.push_precollected(item)
|
||||
randomized = getattr(self.world, option_key)[self.player]
|
||||
for item_name, location_name in zip(option.items, option.locations):
|
||||
vanilla = not randomized
|
||||
excluded = False
|
||||
if item_name in geo_replace:
|
||||
item_name = "Geo_Rock-Default"
|
||||
item = self.create_item(item_name)
|
||||
if location_name == "Start":
|
||||
self.world.push_precollected(item)
|
||||
continue
|
||||
|
||||
location = self.create_location(location_name)
|
||||
if not vanilla and location_name in wp_exclusions:
|
||||
if location_name == 'King_Fragment':
|
||||
excluded = True
|
||||
else:
|
||||
self.create_location(location_name)
|
||||
pool.append(item)
|
||||
# elif option_key not in logicless_options:
|
||||
else:
|
||||
for item_name, location_name in zip(option.items, option.locations):
|
||||
if location_name in wp_exclusions and location_name != 'King_Fragment':
|
||||
continue
|
||||
item = self.create_item(item_name)
|
||||
if location_name == "Start":
|
||||
self.world.push_precollected(item)
|
||||
else:
|
||||
self.create_location(location_name).place_locked_item(item)
|
||||
vanilla = True
|
||||
if excluded:
|
||||
location.progress_type = LocationProgressType.EXCLUDED
|
||||
if vanilla:
|
||||
location.place_locked_item(item)
|
||||
else:
|
||||
pool.append(item)
|
||||
|
||||
for i in range(self.world.EggShopSlots[self.player].value):
|
||||
self.create_location("Egg_Shop")
|
||||
pool.append(self.create_item("Geo_Rock-Default"))
|
||||
|
||||
@@ -27,4 +27,11 @@ website to generate a YAML using a graphical interface.
|
||||
5. Hit **Start** to begin the game. The game will stall for a few seconds while it does all item placements.
|
||||
6. The game will immediately drop you into the randomized game.
|
||||
* If you are waiting for a countdown then wait for it to lapse before hitting Start.
|
||||
* Or hit Start then pause the game once you're in it.
|
||||
* Or hit Start then pause the game once you're in it.
|
||||
|
||||
## Commands
|
||||
While playing the multiworld you can interact with the server using various commands listed in the
|
||||
[commands guide](/tutorial/Archipelago/commands/en). As this game does not have an in-game text client at the moment,
|
||||
You can optionally connect to the multiworld using the text client, which can be found in the
|
||||
[main Archipelago installation](https://github.com/ArchipelagoMW/Archipelago/releases) as Archipelago Text Client to
|
||||
enter these commands.
|
||||
|
||||
@@ -52,6 +52,13 @@ Once the goal has been completed, you may press F to send a forfeit, sending out
|
||||
|
||||
More in-depth information about the game can be found in the game's help file, accessed by pressing H while playing.
|
||||
|
||||
## Commands
|
||||
While playing the multiworld you can interact with the server using various commands listed in the
|
||||
[commands guide](/tutorial/Archipelago/commands/en). As this game does not have an in-game text client at the moment,
|
||||
You can optionally connect to the multiworld using the text client, which can be found in the
|
||||
[main Archipelago installation](https://github.com/ArchipelagoMW/Archipelago/releases) as Archipelago Text Client to
|
||||
enter these commands.
|
||||
|
||||
## Game Troubleshooting
|
||||
|
||||
### An error message shows up at the bottom-left
|
||||
|
||||
@@ -82,7 +82,7 @@ class OOTWeb(WebWorld):
|
||||
"Español",
|
||||
"setup_es.md",
|
||||
"setup/es",
|
||||
setup.author
|
||||
setup.authors
|
||||
)
|
||||
|
||||
tutorials = [setup, setup_es]
|
||||
@@ -90,8 +90,8 @@ class OOTWeb(WebWorld):
|
||||
|
||||
class OOTWorld(World):
|
||||
"""
|
||||
The Legend of Zelda: Ocarina of Time is a 3D action/adventure game. Travel through Hyrule in two time periods,
|
||||
learn magical ocarina songs, and explore twelve dungeons on your quest. Use Link's many items and abilities
|
||||
The Legend of Zelda: Ocarina of Time is a 3D action/adventure game. Travel through Hyrule in two time periods,
|
||||
learn magical ocarina songs, and explore twelve dungeons on your quest. Use Link's many items and abilities
|
||||
to rescue the Seven Sages, and then confront Ganondorf to save Hyrule!
|
||||
"""
|
||||
game: str = "Ocarina of Time"
|
||||
@@ -577,7 +577,7 @@ class OOTWorld(World):
|
||||
(loc.internal or loc.type == 'Drop') and loc.event and loc.locked and loc not in reachable]
|
||||
for loc in unreachable:
|
||||
loc.parent_region.locations.remove(loc)
|
||||
# Exception: Sell Big Poe is an event which is only reachable if Bottle with Big Poe is in the item pool.
|
||||
# Exception: Sell Big Poe is an event which is only reachable if Bottle with Big Poe is in the item pool.
|
||||
# We allow it to be removed only if Bottle with Big Poe is not in the itempool.
|
||||
bigpoe = self.world.get_location('Sell Big Poe from Market Guard House', self.player)
|
||||
if not all_state.has('Bottle with Big Poe', self.player) and bigpoe not in reachable:
|
||||
@@ -632,7 +632,7 @@ class OOTWorld(World):
|
||||
if shufflebk in itempools:
|
||||
itempools[shufflebk].extend(dungeon.boss_key)
|
||||
|
||||
# We can't put a dungeon item on the end of a dungeon if a song is supposed to go there. Make sure not to include it.
|
||||
# We can't put a dungeon item on the end of a dungeon if a song is supposed to go there. Make sure not to include it.
|
||||
dungeon_locations = [loc for region in dungeon.regions for loc in region.locations
|
||||
if loc.item is None and (
|
||||
self.shuffle_song_items != 'dungeon' or loc.name not in dungeon_song_locations)]
|
||||
|
||||
@@ -12,6 +12,7 @@ from ..AutoWorld import World, WebWorld
|
||||
|
||||
|
||||
class LegacyWeb(WebWorld):
|
||||
theme = "stone"
|
||||
tutorials = [Tutorial(
|
||||
"Multiworld Setup Guide",
|
||||
"A guide to setting up the Rogue Legacy Randomizer software on your computer. This guide covers single-player, multiworld, and related software.",
|
||||
@@ -153,7 +154,7 @@ class LegacyWorld(World):
|
||||
self.world.push_precollected(self.world.create_item(ItemName.architect, self.player))
|
||||
elif self.world.architect[self.player] != "disabled":
|
||||
itempool += [self.create_item(ItemName.architect)]
|
||||
|
||||
|
||||
# Fill item pool with the remaining
|
||||
for _ in range(len(itempool), total_required_locations):
|
||||
item = self.world.random.choice(list(misc_items_table.keys()))
|
||||
|
||||
@@ -15,37 +15,74 @@ Starcraft 2 AP Client launches a custom version of Starcraft 2 running modified
|
||||
|
||||
Follow the installation directions at the
|
||||
[Starcraft 2 AP Maps and Data](https://github.com/TheCondor07/Starcraft2ArchipelagoData) page you can find the .zip
|
||||
files on the releases page. After it is installed just run ArchipelagoStarcraftClient.exe to start the client to connect
|
||||
files on the releases page. After it is installed, just run ArchipelagoStarcraft2Client.exe to start the client and connect
|
||||
to a Multiworld Game.
|
||||
|
||||
## Joining a MultiWorld Game
|
||||
|
||||
1. Run ArchipelagoStarcraftClient.exe
|
||||
2. Type in /connect [sever ip]
|
||||
3. Insert slot name and password as prompted
|
||||
4. Once connected, use /unfinished to find what missions you can play and '/play [mission id]' to launch a mission. For
|
||||
new games under default settings the first mission available will always be Liberation Day[1] playable using the command
|
||||
'/play 1'
|
||||
1. Run ArchipelagoStarcraft2Client.exe.
|
||||
2. Type in `/connect [server ip]`.
|
||||
3. Insert slot name and password as prompted.
|
||||
4. Once connected, use `/unfinished` to find what missions you can play and `/play [mission id]` to launch a mission.
|
||||
For new games under default settings the first mission available will always be Liberation Day[1] playable using the
|
||||
command `/play 1`.
|
||||
|
||||
## Where do I get a config file?
|
||||
|
||||
The [Player Settings](/games/Starcraft%202%20Wings%20of%20Liberty/player-settings) page on the website allows you to
|
||||
configure your personal settings and export them into a config file
|
||||
configure your personal settings and export them into a config file.
|
||||
|
||||
## Game isn't launching when I type /play
|
||||
|
||||
First check the log file for issues (stored at [Archipelago Directory]/logs/SC2Client.txt. There is sometimes an issue
|
||||
where the client can not find Starcraft 2. Usually Documents/Starcraft 2/ExecuteInfo.txt is checked to find where
|
||||
where the client can not find Starcraft 2. Usually 'Documents/StarCraft II/ExecuteInfo.txt' is checked to find where
|
||||
Starcraft 2 is installed. On some computers particularly if you have OneDrive running this may fail. The following
|
||||
directions may help you in this case if you are on Windows.
|
||||
directions may help you in this case if you are on Windows.
|
||||
|
||||
1. Navigate to '%userprofile%'. Easiest way to do this is to hit Windows key+R type in %userprofile% and hit run or
|
||||
type in %userprofile% in the navigation bar of your file explorer.
|
||||
1. Navigate to '%userprofile%'. Easiest way to do this is to hit Windows key+R type in `%userprofile%` and hit run or
|
||||
type in `%userprofile%` in the navigation bar of your file explorer.
|
||||
2. If it does not exist create a folder in her named 'Documents'.
|
||||
3. Locate your 'My Documents' folder on your pc. If you navigate to 'My PC' on the sidebar of file explorer should be a
|
||||
3. Locate your 'My Documents' folder on your PC. If you navigate to 'My PC' on the sidebar of file explorer should be a
|
||||
link to this folder there labeled 'Documents'.
|
||||
4. Find a folder labeled 'Starcraft 2' and copy it.
|
||||
5. Paste this Starcraft 2 folder into the folder created or found in step 2.
|
||||
4. Find a folder labeled 'StarCraft II' and copy it.
|
||||
5. Paste this 'StarCraft II' folder into the folder created or found in step 2.
|
||||
|
||||
These steps have been shown to work for some people for some people having issues with launching the game. If you are
|
||||
still having issues check out our [Discord](https://discord.com/invite/8Z65BR2) for help.
|
||||
These steps have been shown to work for some people for some people having issues with launching the game. If you are
|
||||
still having issues check out our [Discord](https://discord.com/invite/8Z65BR2) for help.
|
||||
|
||||
## Running in Linux
|
||||
|
||||
To run StarCraft 2 through Archipelago in Linux, you will need to install the game using Wine then run the Linux build of the Archipelago client.
|
||||
|
||||
Make sure you have StarCraft 2 installed using Wine and you have followed the [Installation Procedures](#installation-procedures) to add the Archipelago maps to the correct location. You will not need to copy the .dll files. If you're having trouble installing or running StarCraft 2 on Linux, I recommend using the Lutris installer.
|
||||
|
||||
Copy the following into a .sh file, replacing the values of **WINE** and **SC2PATH** variables to the relevant locations, as well as setting **PATH_TO_ARCHIPELAGO** to the directory containing the AppImage if it is not in the same folder as the script.
|
||||
|
||||
```sh
|
||||
# Let the client know we're running SC2 in Wine
|
||||
export SC2PF=WineLinux
|
||||
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
|
||||
|
||||
# FIXME Replace with path to the version of Wine used to run SC2
|
||||
export WINE="/usr/bin/wine"
|
||||
|
||||
# FIXME Replace with path to StarCraft II install folder
|
||||
export SC2PATH="/home/user/Games/starcraft-ii/drive_c/Program Files (x86)/StarCraft II/"
|
||||
|
||||
# FIXME Set to directory which contains Archipelago AppImage file
|
||||
PATH_TO_ARCHIPELAGO=
|
||||
|
||||
# Gets the latest version of Archipelago AppImage in PATH_TO_ARCHIPELAGO.
|
||||
# If PATH_TO_ARCHIPELAGO is not set, this defaults to the directory containing
|
||||
# this script file.
|
||||
ARCHIPELAGO="$(ls ${PATH_TO_ARCHIPELAGO:-$(dirname $0)}/Archipelago_*.AppImage | sort -r | head -1)"
|
||||
|
||||
# Start the Archipelago client
|
||||
$ARCHIPELAGO Starcraft2Client
|
||||
```
|
||||
|
||||
For Lutris installs, you can run `lutris -l` to get the numerical ID of your StarCraft II install, then run the command below, replacing **${ID}** with the numerical ID.
|
||||
|
||||
lutris lutris:rungameid/${ID} --output-script sc2.sh
|
||||
|
||||
This will get all of the relevant environment variables Lutris sets to run StarCraft 2 in a script, including the path to the Wine binary that Lutris uses. You can then remove the line that runs the Battle.Net launcher and copy the code above into the existing script.
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
|
||||
## Required Software
|
||||
|
||||
- One of the client programs:
|
||||
- [SNIClient](https://github.com/ArchipelagoMW/Archipelago/releases), included with the main
|
||||
Archipelago install. Make sure to check the box for `SNI Client - Super Metroid Patch Setup`
|
||||
- [SuperNintendoClient](https://github.com/ArchipelagoMW/SuperNintendoClient/releases), an alternate standalone
|
||||
client for Super Nintendo games
|
||||
- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases). Make sure to check the box for `SNI Client - Super Metroid Patch Setup`
|
||||
|
||||
|
||||
- Hardware or software capable of loading and playing SNES ROM files
|
||||
- An emulator capable of connecting to SNI such as:
|
||||
- snes9x Multitroid
|
||||
@@ -71,7 +69,7 @@ validator page: [YAML Validation page](/mysterycheck)
|
||||
|
||||
When you join a multiworld game, you will be asked to provide your config file to whoever is hosting. Once that is done,
|
||||
the host will provide you with either a link to download your patch file, or with a zip file containing everyone's patch
|
||||
files. Your patch file should have a `.apm3` extension.
|
||||
files. Your patch file should have a `.apsm` extension.
|
||||
|
||||
Put your patch file on your desktop or somewhere convenient, and double click it. This should automatically launch the
|
||||
client, and will also create your ROM in the same place as your patch file.
|
||||
@@ -90,9 +88,10 @@ first time launching, you may be prompted to allow it to communicate through the
|
||||
3. Click on **New Lua Script Window...**
|
||||
4. In the new window, click **Browse...**
|
||||
5. Select the connector lua file included with your client
|
||||
- SuperNintendoClient users should download `sniConnector.lua` from the client download page
|
||||
- SNIClient users should look in their Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
- Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
emulator is 64-bit or 32-bit.
|
||||
6. If you see an error while loading the script that states `socket.dll missing` or similar, navigate to the folder of
|
||||
the lua you are using in your file explorer and copy the `socket.dll` to the base folder of your snes9x install.
|
||||
|
||||
##### BizHawk
|
||||
|
||||
@@ -104,8 +103,7 @@ first time launching, you may be prompted to allow it to communicate through the
|
||||
3. Click on the Tools menu and click on **Lua Console**
|
||||
4. Click the button to open a new Lua script.
|
||||
5. Select the `Connector.lua` file included with your client
|
||||
- SuperNintendoClient users should download `sniConnector.lua` from the client download page
|
||||
- SNIClient users should look in their Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
- Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
emulator is 64-bit or 32-bit. Please note the most recent versions of BizHawk are 64-bit only.
|
||||
|
||||
##### RetroArch 1.10.1 or newer
|
||||
|
||||
@@ -57,7 +57,7 @@ If everything worked out, you will see a textbox informing you the connection ha
|
||||
# Playing offline
|
||||
|
||||
To play offline, first generate a seed on the game's settings page.
|
||||
Create a room and download the `.apsm64ex` file, and start the game with the `--sm64ap_file FileName` launch argument.
|
||||
Create a room and download the `.apsm64ex` file, and start the game with the `--sm64ap_file "path/to/FileName"` launch argument.
|
||||
|
||||
## Installation Troubleshooting
|
||||
|
||||
@@ -69,6 +69,12 @@ Most likely you forgot to set the launch options. `--sm64ap_name YourName` and `
|
||||
`--sm64ap_file FileName` is required for (offline) singleplayer.
|
||||
If your Name or Password have spaces in them, surround them in quotes.
|
||||
|
||||
### Game crashes upon entering Peach's Castle
|
||||
|
||||
This happens when the game is missing the relevant randomizer data. If you are trying to connect to a server, verify the
|
||||
information entered is correct, and for a local file ensure you are using the full file path to the file in conjunction
|
||||
with its name.
|
||||
|
||||
## Game Troubleshooting
|
||||
|
||||
### Known Issues
|
||||
|
||||
@@ -68,7 +68,7 @@ validator page: [YAML Validation page](/mysterycheck)
|
||||
|
||||
When you join a multiworld game, you will be asked to provide your config file to whoever is hosting. Once that is done,
|
||||
the host will provide you with either a link to download your patch file, or with a zip file containing everyone's patch
|
||||
files. Your patch file should have a `.apsmz` extension.
|
||||
files. Your patch file should have a `.apsmz3` extension.
|
||||
|
||||
Put your patch file on your desktop or somewhere convenient, and double click it. This should automatically launch the
|
||||
client, and will also create your ROM in the same place as your patch file.
|
||||
@@ -87,9 +87,10 @@ first time launching, you may be prompted to allow it to communicate through the
|
||||
3. Click on **New Lua Script Window...**
|
||||
4. In the new window, click **Browse...**
|
||||
5. Select the connector lua file included with your client
|
||||
- SuperNintendoClient users should download `sniConnector.lua` from the client download page
|
||||
- SNIClient users should look in their Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
- Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
emulator is 64-bit or 32-bit.
|
||||
6. If you see an error while loading the script that states `socket.dll missing` or similar, navigate to the folder of
|
||||
the lua you are using in your file explorer and copy the `socket.dll` to the base folder of your snes9x install.
|
||||
|
||||
##### BizHawk
|
||||
|
||||
@@ -101,8 +102,7 @@ first time launching, you may be prompted to allow it to communicate through the
|
||||
3. Click on the Tools menu and click on **Lua Console**
|
||||
4. Click the button to open a new Lua script.
|
||||
5. Select the `Connector.lua` file included with your client
|
||||
- SuperNintendoClient users should download `sniConnector.lua` from the client download page
|
||||
- SNIClient users should look in their Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
- Look in the Archipelago folder for `/SNI/lua/x64` or `/SNI/lua/x86` depending on if the
|
||||
emulator is 64-bit or 32-bit. Please note the most recent versions of BizHawk are 64-bit only.
|
||||
|
||||
##### RetroArch 1.10.3 or newer
|
||||
|
||||
@@ -27,7 +27,7 @@ class TimespinnerWebWorld(WebWorld):
|
||||
setup.description,
|
||||
"Deutsch",
|
||||
"setup_de.md",
|
||||
"setup/en",
|
||||
"setup/de",
|
||||
["Grrmo", "Fynxes", "Blaze0168"]
|
||||
)
|
||||
|
||||
@@ -72,7 +72,7 @@ class TimespinnerWorld(World):
|
||||
self.world.StartWithJewelryBox[self.player].value = self.world.StartWithJewelryBox[self.player].option_true
|
||||
|
||||
def create_regions(self):
|
||||
create_regions(self.world, self.player, get_locations(self.world, self.player),
|
||||
create_regions(self.world, self.player, get_locations(self.world, self.player),
|
||||
self.location_cache, self.pyramid_keys_unlock)
|
||||
|
||||
def create_item(self, name: str) -> Item:
|
||||
@@ -131,7 +131,7 @@ def get_excluded_items(self: TimespinnerWorld, world: MultiWorld, player: int) -
|
||||
for item in world.precollected_items[player]:
|
||||
if item.name not in self.item_name_groups['UseItem']:
|
||||
excluded_items.add(item.name)
|
||||
|
||||
|
||||
return excluded_items
|
||||
|
||||
|
||||
@@ -156,7 +156,7 @@ def assign_starter_items(world: MultiWorld, player: int, excluded_items: Set[str
|
||||
assign_starter_item(world, player, excluded_items, locked_locations, 'Tutorial: Yo Momma 2', local_starter_spells)
|
||||
|
||||
|
||||
def assign_starter_item(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str],
|
||||
def assign_starter_item(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str],
|
||||
location: str, item_list: Tuple[str, ...]):
|
||||
|
||||
item_name = world.random.choice(item_list)
|
||||
@@ -193,7 +193,7 @@ def place_first_progression_item(world: MultiWorld, player: int, excluded_items:
|
||||
for item in world.precollected_items[player]:
|
||||
if item.name in starter_progression_items:
|
||||
return
|
||||
|
||||
|
||||
local_starter_progression_items = tuple(
|
||||
item for item in starter_progression_items if item not in world.non_local_items[player].value)
|
||||
non_excluded_starter_progression_locations = tuple(
|
||||
@@ -252,5 +252,5 @@ def get_personal_items(player: int, locations: List[Location]) -> Dict[int, int]
|
||||
for location in locations:
|
||||
if location.address and location.item and location.item.code and location.item.player == player:
|
||||
personal_items[location.address] = location.item.code
|
||||
|
||||
|
||||
return personal_items
|
||||
|
||||
@@ -2,42 +2,48 @@
|
||||
|
||||
## Required Software
|
||||
|
||||
- VVVVVV (Bought from the [Steam Store](https://store.steampowered.com/app/70300/VVVVVV/) or [GOG Store](https://www.gog.com/game/vvvvvv) Page, NOT Make and Play Edition!)
|
||||
- VVVVVV
|
||||
- [Steam Store Page](https://store.steampowered.com/app/70300/VVVVVV/)
|
||||
- [GOG Store Page](https://www.gog.com/game/vvvvvv)
|
||||
- [V6AP](https://github.com/N00byKing/VVVVVV/releases)
|
||||
|
||||
## Installation and Game Start Procedures
|
||||
|
||||
1. Install VVVVVV through either Steam or GOG
|
||||
2. Go to the page linked for V6AP, and download the latest release
|
||||
1. Install VVVVVV through either Steam or GOG.
|
||||
2. Go to the page linked for V6AP, and download the latest release.
|
||||
3. Unpack the zip file where you have VVVVVV installed.
|
||||
|
||||
# Joining a MultiWorld Game
|
||||
|
||||
To join, set the following launch options: `-v6ap_name YourName -v6ap_ip ServerIP:Port`.
|
||||
Optionally, add `-v6ap_passwd "YourPassword"` if the room you are using requires a password. All parameters without quotation marks.
|
||||
The Name in this case is the one specified in your generated .yaml file.
|
||||
In case you are using the Archipelago Website, the IP should be `archipelago.gg`.
|
||||
To join an Archipelago MultiWorld game, you must set the game's launch options. The two mandatory launch options are:
|
||||
`-v6ap_name slotName`
|
||||
`-v6ap_ip server:port`
|
||||
|
||||
If the game you are joining requires a password, you should also add the following to your launch options:
|
||||
`-v6ap_passwd secretPassword`
|
||||
|
||||
If the game is to be played offline in single-player mode, you should include this launch option:
|
||||
`-v6ap_file filePath`
|
||||
|
||||
Launch options may be found by right-clicking on the game in Steam and clicking "Properties" in the context menu. From there, open the "General" tab. There is a "Launch Options" setting near the bottom wherein you should enter the above options. Note that all launch options are separated by a space, and if there are spaces in your slot name or password, it should be surrounded with quotes.
|
||||
If everything worked out, you will see a textbox informing you the connection has been established after the story intro.
|
||||
|
||||
# Playing offline
|
||||
|
||||
To play offline, first generate a seed on the game's settings page.
|
||||
Create a room and download the `.apv6` file, and start the game with the `-v6ap_file FileName` launch argument.
|
||||
Create a room and download the `.apv6` file, include the offline single-player launch option described above.
|
||||
|
||||
## Installation Troubleshooting
|
||||
|
||||
Start the game from the command line to view helpful messages regarding V6AP. These will look something like "V6AP: Message"
|
||||
Start the game from the command line to view helpful messages regarding V6AP. These will look something like `V6AP: Message`.
|
||||
|
||||
### Game no longer starts after copying the .exe
|
||||
|
||||
Most likely you forgot to set the launch options. `-v6ap_name YourName` and `-v6ap_ip ServerIP:Port` are required for startup for Multiworlds, and
|
||||
`-v6ap_file FileName` is required for (offline) singleplayer.
|
||||
If your Name or Password have spaces in them, surround them in quotes.
|
||||
The most likely cause of a startup failure is invalid launch options. Ensure the launch options are set properly as described above in
|
||||
**Joining a MultiWorld Game**.
|
||||
|
||||
## Game Troubleshooting
|
||||
|
||||
### What happens if I lose connection?
|
||||
|
||||
V6AP tries to reconnect a few times, so be patient.
|
||||
Should the problem still be there after about a minute or two, just save and restart the game.
|
||||
If a disconnection occurs, wait a moment to see if the game automatically reconnects itself. If the problem presists, save and restart the game.
|
||||
|
||||
@@ -37,7 +37,7 @@ class ShuffleDoors(Toggle):
|
||||
|
||||
class ShuffleDiscardedPanels(Toggle):
|
||||
"""Discarded Panels will have items on them.
|
||||
Solving certain Discarded Panels may still be necessary!"""
|
||||
Solving certain Discarded Panels may still be necessary even if off!"""
|
||||
display_name = "Shuffle Discarded Panels"
|
||||
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ Progression:
|
||||
72 - Colored Squares
|
||||
|
||||
Usefuls:
|
||||
101 - Functioning Brain
|
||||
510 - Puzzle Skip
|
||||
101 - Functioning Brain - False
|
||||
510 - Puzzle Skip - True
|
||||
|
||||
Boosts:
|
||||
500 - Speed Boost
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Required Software
|
||||
|
||||
- [The Witness (Steam)](https://store.steampowered.com/app/210970/The_Witness/)
|
||||
- [The Witness for 64-bit Windows (e.g. Steam version)](https://store.steampowered.com/app/210970/The_Witness/)
|
||||
- [The Witness Archipelago Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago/releases)
|
||||
|
||||
## Optional Software
|
||||
@@ -38,4 +38,4 @@ The Witness has a fully functional map tracker that supports auto-tracking.
|
||||
3. Click on the "AP" symbol at the top.
|
||||
4. Enter the AP address, slot name and password.
|
||||
|
||||
The rest should take care of itself! Items and checks will be marked automatically, and it even knows your settings - It will hide checks & adjust logic accordingly.
|
||||
The rest should take care of itself! Items and checks will be marked automatically, and it even knows your settings - It will hide checks & adjust logic accordingly. Note that the tracker may be out of date.
|
||||
@@ -66,7 +66,7 @@ class StaticWitnessItems:
|
||||
item_tab[item[0]] = ItemData(158000 + item[1], False, False)
|
||||
|
||||
for item in StaticWitnessLogic.ALL_USEFULS:
|
||||
item_tab[item[0]] = ItemData(158000 + item[1], False, False, False, True)
|
||||
item_tab[item[0]] = ItemData(158000 + item[1], False, False, False, item[2])
|
||||
|
||||
item_tab = dict(sorted(
|
||||
item_tab.items(),
|
||||
|
||||
@@ -52,7 +52,10 @@ class StaticWitnessLogic:
|
||||
|
||||
line_split = line.split(" - ")
|
||||
|
||||
current_set.add((line_split[1], int(line_split[0])))
|
||||
if current_set is not self.ALL_USEFULS:
|
||||
current_set.add((line_split[1], int(line_split[0])))
|
||||
else:
|
||||
current_set.add((line_split[1], int(line_split[0]), line_split[2] == "True"))
|
||||
|
||||
path = os.path.join(os.path.dirname(__file__), "Door_Shuffle.txt")
|
||||
with open(path, "r", encoding="utf-8") as file:
|
||||
|
||||
Reference in New Issue
Block a user