Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c9406ea83 | ||
|
|
58c7a2d451 | ||
|
|
0c24fbc80d | ||
|
|
43afae8f63 | ||
|
|
3d6ff8603a | ||
|
|
ce9216d3da |
104
README.md
104
README.md
@@ -1,32 +1,24 @@
|
|||||||
# Archipelago World Tester
|
# Archipelago World Generation Tester
|
||||||
_Disclaimer: AI was used in this project_
|
_Disclaimer: AI was used in this repository_
|
||||||
|
|
||||||
This project checks whether [community Archipelago worlds](https://docs.google.com/spreadsheets/d/1iuzDTOAvdoNe8Ne8i461qGNucg5OuEoF-Ikqs8aUQZw/edit?gid=58422002#gid=58422002) can generate a seed.
|
This repository contains a python package that can check whether Archipelago worlds (APworlds) created by the community can generate a valid seed without bringing down the multi-game world.
|
||||||
It reads the community worlds spreadsheet, downloads each world's newest `.apworld` file, and runs Archipelago's generator against it in a Docker container.
|
|
||||||
To see the results of this live in action, see [worlds.archipelago.skillysue.nl](https://worlds.archipelago.skillysue.nl)
|
|
||||||
|
|
||||||
Each world is tested five ways:
|
The [community worlds spreadsheet](https://docs.google.com/spreadsheets/d/1iuzDTOAvdoNe8Ne8i461qGNucg5OuEoF-Ikqs8aUQZw/edit?gid=58422002#gid=58422002) is a great resource to showcase the games that are in development, but the stability label may not reflect their current state. I wanted to play games that were labeled `unstable` but were at least be stable enough to allow reliable world generation. This tester uses the sheet to collect the latest APworlds and apply a series of tests to assess their generation stability (see `Testing overview`). Only APworlds that are available via direct links or Git repositories are tested.
|
||||||
|
|
||||||
- by itself
|
|
||||||
- with two players of the same game
|
|
||||||
- with 2–5 of Archipelago's built-in worlds
|
|
||||||
- by itself with its options randomized
|
|
||||||
- with other worlds and its options randomized
|
|
||||||
|
|
||||||
Each test is repeated with different seeds. The results are combined into one of six stability values:
|
|
||||||
|
|
||||||
| Value | Meaning |
|
|
||||||
| --- | --- |
|
|
||||||
| Stable | Every attempt succeeded |
|
|
||||||
| Minor issues | Solo and multiworld tests worked, but a randomized test failed |
|
|
||||||
| Flaky | Some attempts succeeded and others failed |
|
|
||||||
| Solo only | Works by itself, but fails with other worlds |
|
|
||||||
| Broken | Could not generate at all |
|
|
||||||
| Unknown | No usable result, for example because the `.apworld` was missing or a ROM was required |
|
|
||||||
|
|
||||||
A successful test means the world loaded, generated a seed, and computed the spoiler log at the configured level. With the default `playthrough` level, this also checks that the seed is completable.
|
|
||||||
|
|
||||||
|
To see the results of this live in action, see [worlds.archipelago.skillysue.nl](https://worlds.archipelago.skillysue.nl) for an overview of all listed games and their test results.
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
- [Requirements](#requirements)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [System packages](#system-packages)
|
||||||
|
- [Install the package](#install-the-package)
|
||||||
|
- [Configuration](#configuration)
|
||||||
|
- [GitHub](#github)
|
||||||
|
- [Testing overview](#testing-overview)
|
||||||
|
- [Test worlds](#test-worlds)
|
||||||
|
- [Test all worlds](#test-all-worlds)
|
||||||
|
- [Test a local `.apworld`](#test-a-local-apworld)
|
||||||
|
- [Related Projects](#related-projects)
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@@ -63,7 +55,12 @@ docker run --rm hello-world
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Install the package
|
### Install the package
|
||||||
|
Install the latest version with pip:
|
||||||
|
```sh
|
||||||
|
pip install --no-cache-dir https://git.skillysue.nl/Skilly/APWorldTester/archive/latest.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
Or clone the repo and install it:
|
||||||
```sh
|
```sh
|
||||||
# Clone repo
|
# Clone repo
|
||||||
git clone git.skillysue.nl/APWorldTester && cd APWorldTester
|
git clone git.skillysue.nl/APWorldTester && cd APWorldTester
|
||||||
@@ -85,10 +82,10 @@ apworld-tester init
|
|||||||
```
|
```
|
||||||
|
|
||||||
That writes the template config to `~/.config/apworld-tester/config.yaml`.
|
That writes the template config to `~/.config/apworld-tester/config.yaml`.
|
||||||
Two settings that require changing:
|
Two settings that require attention:
|
||||||
|
|
||||||
- `general.output_directory` The output directory for running the tester, including cloning the Archipelago repo and downloaded apworlds.
|
- `general.output_directory` The output directory for running the tester, including cloning the Archipelago repo and downloaded apworlds. Must be changed, otherwise an error is thrown.
|
||||||
- `general.roms_directory` Directory where base ROMs are located for apworlds that need one.
|
- `general.roms_directory` Directory where base ROMs are located for apworlds that need one. Optional, but increases the number of testable worlds.
|
||||||
|
|
||||||
### GitHub
|
### GitHub
|
||||||
The tester checks and downloads hundreds of apworlds from GitHub repositories. It is highly recommended to register a GitHub token and store it in an .env file as follows:
|
The tester checks and downloads hundreds of apworlds from GitHub repositories. It is highly recommended to register a GitHub token and store it in an .env file as follows:
|
||||||
@@ -97,25 +94,52 @@ The tester checks and downloads hundreds of apworlds from GitHub repositories. I
|
|||||||
GITHUB_TOKEN=ghp_<your_token_here>
|
GITHUB_TOKEN=ghp_<your_token_here>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Testing overview
|
||||||
|
|
||||||
|
Each world is tested five ways:
|
||||||
|
|
||||||
|
- by itself
|
||||||
|
- with two players of the same game
|
||||||
|
- with 2–5 of Archipelago's built-in worlds
|
||||||
|
- by itself with its options randomized
|
||||||
|
- with other worlds and its options randomized
|
||||||
|
|
||||||
|
Each test is repeated with different seeds. The results are combined into one of six stability values:
|
||||||
|
|
||||||
|
| Value | Meaning |
|
||||||
|
| --- | --- |
|
||||||
|
| Stable | Every attempt succeeded |
|
||||||
|
| Minor issues | Solo and multiworld tests worked, but a randomized test failed |
|
||||||
|
| Flaky | Some attempts succeeded and others failed |
|
||||||
|
| Solo only | Works by itself, but fails with other worlds |
|
||||||
|
| Broken | Could not generate at all |
|
||||||
|
| Unknown | No usable result, for example because the `.apworld` was missing or a ROM was required |
|
||||||
|
|
||||||
|
A successful test means the world loaded, generated a seed, and computed the spoiler log at the configured level. With the default `playthrough` level, this also checks that the seed is completable.
|
||||||
|
|
||||||
|
|
||||||
## Test worlds
|
## Test worlds
|
||||||
The `TestRun` class can be used to test one or more worlds:
|
The `TestRun` class can be used to test one or more worlds:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from apworld_tester import TestRun
|
from apworld_tester import TestRun
|
||||||
|
|
||||||
TestRun("Baba Is You").run()
|
test = TestRun("Baba Is You")
|
||||||
|
test.run()
|
||||||
```
|
```
|
||||||
|
|
||||||
To test multiple worlds, supply the names as a list:
|
To test multiple worlds, supply the names as a list:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
TestRun(["Baba Is You", "Anodyne"]).run()
|
test = TestRun(["Baba Is You", "Anodyne"])
|
||||||
|
test.run()
|
||||||
```
|
```
|
||||||
|
|
||||||
To test all worlds that have already been downloaded, add `cached=True`:
|
To test all worlds that have already been downloaded, add `cached=True`:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
TestRun(cached=True).run()
|
test = TestRun(cached=True)
|
||||||
|
test.run()
|
||||||
```
|
```
|
||||||
|
|
||||||
The first run clones Archipelago and builds the Docker image, which can take several minutes.
|
The first run clones Archipelago and builds the Docker image, which can take several minutes.
|
||||||
@@ -126,7 +150,8 @@ The real benefit of the tester is to parse the community worlds spreadsheet and
|
|||||||
```python
|
```python
|
||||||
from apworld_tester import UpdateRun
|
from apworld_tester import UpdateRun
|
||||||
|
|
||||||
UpdateRun().run()
|
updater = UpdateRun()
|
||||||
|
updater.run()
|
||||||
```
|
```
|
||||||
|
|
||||||
## Test a local `.apworld`
|
## Test a local `.apworld`
|
||||||
@@ -138,14 +163,19 @@ In case you want to test a world for which you have an apworld locally, you can
|
|||||||
└── my_game.apworld
|
└── my_game.apworld
|
||||||
```
|
```
|
||||||
|
|
||||||
Then run:
|
Then run the following:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from apworld_tester import TestRun
|
from apworld_tester import TestRun
|
||||||
|
|
||||||
TestRun(
|
test = TestRun(
|
||||||
"My Game",
|
game="My Game",
|
||||||
root_directory="/home/you/my-apworlds",
|
root_directory="~/my-apworlds",
|
||||||
).run()
|
)
|
||||||
|
test.run()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Related Projects
|
||||||
|
- [Community Spreadsheet](https://docs.google.com/spreadsheets/d/1iuzDTOAvdoNe8Ne8i461qGNucg5OuEoF-Ikqs8aUQZw/edit?gid=58422002#gid=58422002): A curated list of games and resources. Without the spreadsheet, this work would be impossible.
|
||||||
|
- [Archipelago Games Library](https://mk-404.github.io/Archipelago-Games-Library/): A list of available games and tools made by the community. Very player friendly.
|
||||||
|
- [Archipelago fuzzer](https://github.com/Eijebong/Archipelago-fuzzer): A set of scripts to generate multiworlds to record failures.
|
||||||
Reference in New Issue
Block a user