diff options
-rw-r--r-- | README.md | 16 | ||||
-rw-r--r-- | apworld/README.md | 48 | ||||
-rw-r--r-- | client/README.md | 97 | ||||
-rw-r--r-- | data/README.md | 13 |
4 files changed, 174 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..144ee2b --- /dev/null +++ b/README.md | |||
@@ -0,0 +1,16 @@ | |||
1 | # lingo2-archipelago | ||
2 | |||
3 | [Archipelago](https://archipelago.gg/) is an open-source project that supports | ||
4 | randomizing a number of different games and combining them into one cooperative | ||
5 | experience. Items from each game are hidden in other games. For more information | ||
6 | about Archipelago, you can look at their website. | ||
7 | |||
8 | This is a project that modifies the game | ||
9 | [Lingo 2](https://www.lingothegame.com/lingo2.html) so that it can be played as | ||
10 | part of an Archipelago multiworld game. | ||
11 | |||
12 | There are multiple parts of this project: | ||
13 | |||
14 | - [Client](https://code.fourisland.com/lingo-archipelago2/about/client/README.md) | ||
15 | - [Apworld](https://code.fourisland.com/lingo-archipelago2/about/apworld/README.md) | ||
16 | - [Data](https://code.fourisland.com/lingo-archipelago2/about/data/README.md) | ||
diff --git a/apworld/README.md b/apworld/README.md new file mode 100644 index 0000000..386a2a1 --- /dev/null +++ b/apworld/README.md | |||
@@ -0,0 +1,48 @@ | |||
1 | # Lingo 2 Apworld | ||
2 | |||
3 | The Lingo 2 Apworld allows you to generate Archipelago Multiworlds containing | ||
4 | Lingo 2. | ||
5 | |||
6 | ## Installation | ||
7 | |||
8 | 1. Download the Lingo 2 Apworld from | ||
9 | [the releases page](https://code.fourisland.com/lingo-archipelago2/about/apworld/CHANGELOG.md). | ||
10 | 2. If you do not already have it, download and install the | ||
11 | [Archipelago software](https://github.com/ArchipelagoMW/Archipelago/releases/). | ||
12 | 3. Double click on `lingo2.apworld` to install it, or copy it manually to the | ||
13 | `custom_worlds` folder of your Archipelago installation. | ||
14 | |||
15 | ## Running from source | ||
16 | |||
17 | The apworld is mostly written in Python, which does not need to be compiled. | ||
18 | However, there are two files that need to be generated before the apworld can be | ||
19 | used. | ||
20 | |||
21 | The first file is `data.binpb`, the datafile containing the randomizer logic. | ||
22 | You can read about how to generate it on | ||
23 | [its own README page](https://code.fourisland.com/lingo-archipelago2/about/data/README.md). | ||
24 | Once you have it, put it in a subfolder of `apworld` called `generated`. | ||
25 | |||
26 | The second generated file is `data_pb2.py`. This file allows Archipelago to read | ||
27 | the datafile. We use `protoc`, the Protocol Buffer compiler, to generate it. As | ||
28 | of 0.6.3, Archipelago has protobuf 3.20.3 packaged with it, which means we need | ||
29 | to compile our proto file with a similar version. | ||
30 | |||
31 | If you followed the steps to generate `data.binpb` and compiled the `datapacker` | ||
32 | tool yourself, you will already have protobuf version 3.21.12 installed through | ||
33 | vcpkg. You can then run a command similar to this in order to generate the | ||
34 | python file. | ||
35 | |||
36 | ```shell | ||
37 | .\out\build\x64-Debug\vcpkg_installed\x64-windows\tools\protobuf\protoc.exe -Iproto\ ^ | ||
38 | --python_out=apworld\generated\ .\proto\data.proto | ||
39 | ``` | ||
40 | |||
41 | The exact path to `protoc.exe` is going to depend on where vcpkg installed its | ||
42 | packages. The above location is where Visual Studio will probably put it. | ||
43 | |||
44 | After generating those two files, the apworld should be functional. You can copy | ||
45 | it into an Archipelago source tree (rename the folder `apworld` to `lingo2` if | ||
46 | you do so) if you want to edit/debug the code. Otherwise, you can zip up the | ||
47 | folder and rename it to `lingo2.apworld` in order to package it for | ||
48 | distribution. | ||
diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..07c5459 --- /dev/null +++ b/client/README.md | |||
@@ -0,0 +1,97 @@ | |||
1 | # Lingo 2 Archipelago Client | ||
2 | |||
3 | The Lingo 2 Archipelago Client is a mod for Lingo 2 that allows you to connect | ||
4 | to an Archipelago Multiworld and randomize your game. | ||
5 | |||
6 | ## Installation | ||
7 | |||
8 | 1. Download the Lingo 2 Archipelago Randomizer from | ||
9 | [the releases page](https://code.fourisland.com/lingo-archipelago2/about/client/CHANGELOG.md). | ||
10 | 2. Open up Lingo 2, go to settings, and click View Game Data. This should open | ||
11 | up a folder in Windows Explorer. | ||
12 | 3. Unzip the randomizer into the "maps" folder. Ensure that archipelago.tscn and | ||
13 | the Archipelago folder are both within the maps folder. | ||
14 | |||
15 | **NOTE**: It is important that the major version number of your client matches | ||
16 | the major version number of the apworld you generated with. | ||
17 | |||
18 | ## Joining a Multiworld game | ||
19 | |||
20 | 1. Launch Lingo 2. | ||
21 | 2. Click on Level Selection, and choose Archipelago from the list. | ||
22 | 3. The selected player is generally ignored by the mod, and you don't even need | ||
23 | to ensure you use the same player between connections. However, if your | ||
24 | player name has a gift map associated with it, Lingo 2 will prioritize the | ||
25 | gift map over loading the mod, so in that case you should choose another | ||
26 | player. | ||
27 | 4. Press Play. | ||
28 | 5. Enter the Archipelago address, slot name, and password into the fields. | ||
29 | 6. Press Connect. | ||
30 | 7. Enjoy! | ||
31 | |||
32 | To continue an earlier game, you can perform the exact same steps as above. You | ||
33 | will probably have to re-select Archipelago from the Level Selection screen, as | ||
34 | the game does not remember which level you were playing. | ||
35 | |||
36 | **Note**: Running the randomizer modifies the game's memory. If you want to play | ||
37 | the base game after playing the randomizer, you need to restart Lingo 2 first. | ||
38 | |||
39 | ## Running from source | ||
40 | |||
41 | The mod is mostly written in GDScript, which is parsed and executed by Lingo 2 | ||
42 | itself, and thus does not need to be compiled. However, there are two files that | ||
43 | need to be generated before the client can be run. | ||
44 | |||
45 | The first file is `data.binpb`, the datafile containing the randomizer logic. | ||
46 | You can read about how to generate it on | ||
47 | [its own README page](https://code.fourisland.com/lingo-archipelago2/about/data/README.md). | ||
48 | Once you have it, put it in a subfolder of `client` called `generated`. | ||
49 | |||
50 | The second generated file is `proto.gd`. This file allows Lingo 2 to read the | ||
51 | datafile. We use a Godot script to generate it, which means | ||
52 | [the Godot Editor](https://godotengine.org/download/) is required. From the root | ||
53 | of the repository: | ||
54 | |||
55 | ```shell | ||
56 | cd vendor\godobuf | ||
57 | godot --headless -s addons\protobuf\protobuf_cmdln.gd --input=..\..\proto\data.proto ^ | ||
58 | --output=..\..\client\Archipelago\generated\proto.gd | ||
59 | ``` | ||
60 | |||
61 | If you are not on Windows, replace the forward slashes with backslashes as | ||
62 | appropriate (and the caret with a forward slash). You will also probably need to | ||
63 | replace "godot" at the start of the second line with a path to a Godot Editor | ||
64 | executable. | ||
65 | |||
66 | After generating those two files, the contents of the `client` folder (minus | ||
67 | this README) can be pasted into the Lingo 2 maps directory as described above. | ||
68 | |||
69 | ## Frequently Asked Questions | ||
70 | |||
71 | ### Is my progress saved locally? | ||
72 | |||
73 | Lingo 2 autosaves your progress every time you solve a puzzle, get a | ||
74 | collectable, or interact with a keyholder. The randomizer generates a savefile | ||
75 | name based on your Multiworld seed and slot number, so you should be able to | ||
76 | seamlessly switch between multiworlds and even slots within a multiworld. | ||
77 | |||
78 | The exception to this is different rooms created from the same multiworld seed. | ||
79 | The client is unable to tell rooms in a seed apart (this is a limitation of the | ||
80 | Archipelago API), so the client will use the same save file for the same slot in | ||
81 | different rooms on the same seed. You can work around this by manually moving or | ||
82 | removing the save file from the level1 save file directory. | ||
83 | |||
84 | If you play the base game again, you will see one or more save files with a long | ||
85 | name that begins with "zzAP\_". These are the saves for your multiworlds. They | ||
86 | can be safely deleted after you have completed the associated multiworld. It is | ||
87 | not recommended to load these save files outside of the randomizer. | ||
88 | |||
89 | A connection to Archipelago is required to resume playing a multiworld. This is | ||
90 | because the set of items you have received is not stored locally. | ||
91 | |||
92 | ### What about wall snipes? | ||
93 | |||
94 | "Wall sniping" refers to the fact that you are able to solve puzzles on the | ||
95 | other side of opaque walls. The player is never expected to or required to do | ||
96 | this in normal gameplay. This randomizer does not change how wall snipes work, | ||
97 | but it will likewise never require the use of them. | ||
diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..bf0a51b --- /dev/null +++ b/data/README.md | |||
@@ -0,0 +1,13 @@ | |||
1 | # Lingo 2 Randomizer Data | ||
2 | |||
3 | This folder contains the logic for the Lingo 2 randomizer in a human-readable | ||
4 | format. This data is compiled into a single file and used in the various parts | ||
5 | of the randomizer project (client, apworld, etc). | ||
6 | |||
7 | The data is structured using [Protocol Buffers](https://protobuf.dev/). The | ||
8 | schema for the human-readable format is | ||
9 | [located in the repository](https://code.fourisland.com/lingo2-archipelago/tree/proto/human.proto). | ||
10 | |||
11 | ## Compiling | ||
12 | |||
13 | Hi. | ||