Merge branch 'main' into show_all_hints

This commit is contained in:
CaitSith2
2022-06-27 02:19:24 -07:00
36 changed files with 307 additions and 142 deletions

View File

@@ -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: |

View File

@@ -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: |

View File

@@ -1516,7 +1516,7 @@ class Tutorial(NamedTuple):
language: str
file_name: str
link: str
author: List[str]
authors: List[str]
seeddigits = 20

View File

@@ -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:

View File

@@ -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'))

View File

@@ -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

View File

@@ -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
}]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View File

@@ -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;

View 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;
}

View 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' %}

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

View File

@@ -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.

View File

@@ -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.

View File

@@ -77,7 +77,7 @@ class ALTTPWeb(WebWorld):
msu.description,
"Español",
"msu1_es.md",
"msu1/en",
"msu1/es",
["Edos"]
)

View File

@@ -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

View File

@@ -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):

View File

@@ -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".
![Factorio Download Options](/static/generated/docs/Factorio/factorio-download.png)
@@ -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

View File

@@ -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"))

View File

@@ -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.

View File

@@ -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

View File

@@ -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)]

View File

@@ -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()))

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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"

View File

@@ -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

View File

@@ -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.

View File

@@ -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(),

View File

@@ -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: