diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-25 19:50:42 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-25 19:50:42 -0400 |
| commit | d30a8e2ca351ba05d1b346e59feef6d098f75adf (patch) | |
| tree | 9b79740df8cec5c6117869f9c149f86edf0a0e2c | |
| parent | f0c59deb3bfa9189c2136ab3c494f8a5b452470b (diff) | |
| download | lingo2-archipelago-d30a8e2ca351ba05d1b346e59feef6d098f75adf.tar.gz lingo2-archipelago-d30a8e2ca351ba05d1b346e59feef6d098f75adf.tar.bz2 lingo2-archipelago-d30a8e2ca351ba05d1b346e59feef6d098f75adf.zip | |
Reorganized READMEs
| -rw-r--r-- | CHANGELOG.md | 143 | ||||
| -rw-r--r-- | README.md | 116 | ||||
| -rw-r--r-- | apworld/CHANGELOG.md | 72 | ||||
| -rw-r--r-- | apworld/README.md | 48 | ||||
| -rw-r--r-- | client/CHANGELOG.md | 72 | ||||
| -rw-r--r-- | client/README.md | 90 | ||||
| -rw-r--r-- | client/archipelago.tscn | 167 |
7 files changed, 241 insertions, 467 deletions
| diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7ff116a --- /dev/null +++ b/CHANGELOG.md | |||
| @@ -0,0 +1,143 @@ | |||
| 1 | # lingo2-archipelago Releases | ||
| 2 | |||
| 3 | ## Legacy Client v6.7 - 2025-09-19 | ||
| 4 | |||
| 5 | - Added a compass overlay. This makes it clearer which direction corresponds to | ||
| 6 | which compass direction, which is useful since many location/item names | ||
| 7 | reference compass directions. It can be enabled in the settings screen on the | ||
| 8 | pause menu. | ||
| 9 | - Compatability update for the changes in v6.6 of the apworld. | ||
| 10 | |||
| 11 | Download: | ||
| 12 | [lingo2-archipelago-client-v6.7.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v6.7.zip)<br/> | ||
| 13 | Source: | ||
| 14 | [v6.7](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v6.7) | ||
| 15 | |||
| 16 | ## Legacy Apworld v6.6 - 2025-09-19 | ||
| 17 | |||
| 18 | - Added options that make the requirements for Purple Ending and Cyan Ending | ||
| 19 | stricter. With the strict options on, players are required to have all purple | ||
| 20 | (level 1) letters in order to get Purple Ending, and all cyan (level 2) | ||
| 21 | letters to get Cyan Ending. These options are on by default. | ||
| 22 | - Renamed several items and locations, mostly regarding changing relative | ||
| 23 | directions (left, right, etc) to compass directions. The colored SMILE panels | ||
| 24 | in Daedalus now have clearer names too. | ||
| 25 | - Fixed some minor logic errors. | ||
| 26 | |||
| 27 | Download: | ||
| 28 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v6.6/lingo2.apworld)<br/> | ||
| 29 | Template YAML: | ||
| 30 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v6.6/Lingo%202.yaml)<br/> | ||
| 31 | Source: | ||
| 32 | [v6.6](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v6.6) | ||
| 33 | |||
| 34 | ## Legacy Client v5.6 - 2025-09-17 | ||
| 35 | |||
| 36 | - Letter locations will no longer reappear after being collected. | ||
| 37 | - This also prevents a potential scenario in which it is impossible to access | ||
| 38 | the location "The Congruent - Obverse Yellow Puzzles" when door shuffle is | ||
| 39 | disabled. | ||
| 40 | |||
| 41 | Download: | ||
| 42 | [lingo2-archipelago-client-v5.6.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v5.6.zip)<br/> | ||
| 43 | Source: | ||
| 44 | [v5.6](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v5.6) | ||
| 45 | |||
| 46 | ## Legacy Client v5.5 - 2025-09-16 | ||
| 47 | |||
| 48 | - Compatability update for v5.5 of the apworld. | ||
| 49 | |||
| 50 | Download: | ||
| 51 | [lingo2-archipelago-client-v5.5.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v5.5.zip)<br/> | ||
| 52 | Source: | ||
| 53 | [v5.5](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v5.5) | ||
| 54 | |||
| 55 | ## Legacy Apworld v5.5 - 2025-09-16 | ||
| 56 | |||
| 57 | - Fixed a panel in The Ancient that was missing a symbol. | ||
| 58 | - Fixed an issue where you could be expected to get S1 in The Darkroom without | ||
| 59 | having U. | ||
| 60 | - Renamed a few locations. | ||
| 61 | |||
| 62 | Download: | ||
| 63 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v5.5/lingo2.apworld)<br/> | ||
| 64 | Template YAML: | ||
| 65 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v5.5/Lingo%202.yaml)<br/> | ||
| 66 | Source: | ||
| 67 | [v5.5](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v5.5) | ||
| 68 | |||
| 69 | ## Legacy Apworld v4.4 - 2025-09-14 | ||
| 70 | |||
| 71 | - Fixed panel set location names. | ||
| 72 | |||
| 73 | Download: | ||
| 74 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.4/lingo2.apworld)<br/> | ||
| 75 | Template YAML: | ||
| 76 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.4/Lingo%202.yaml)<br/> | ||
| 77 | Source: | ||
| 78 | [v4.4](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v4.4) | ||
| 79 | |||
| 80 | ## Legacy Client v4.4 - 2025-09-13 | ||
| 81 | |||
| 82 | - Added support for anti-collectable trap items. | ||
| 83 | - Fixed entrance to The Jubilant not opening properly when using control center | ||
| 84 | color shuffle. | ||
| 85 | - Fixed the location "The Entry (Colored Doors Area) - OPEN" not sending. | ||
| 86 | - Fixed level 2 letters not activating properly when letter shuffle is set to | ||
| 87 | Item Cyan. | ||
| 88 | - Messages are now cleared out when returning to the main menu. | ||
| 89 | - The player is prevented from accidentally breaking roof access logic when | ||
| 90 | returning to Daedalus from Icarus. | ||
| 91 | |||
| 92 | Download: | ||
| 93 | [lingo2-archipelago-client-v4.4.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v4.4.zip)<br/> | ||
| 94 | Source: | ||
| 95 | [v4.4](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v4.4) | ||
| 96 | |||
| 97 | ## Legacy Apworld v4.3 - 2025-09-13 | ||
| 98 | |||
| 99 | - Added a location for the anti-collectable in The Repetitive. | ||
| 100 | - Added trap items. These remove letters from your keyboard until you use the | ||
| 101 | Key Return in The Entry, similar to the anti-collectable in The Repetitive. | ||
| 102 | This can be controlled using the `trap_percentage` option, which defaults to | ||
| 103 | zero. | ||
| 104 | - Fixed crash on load when using Python 3.11. | ||
| 105 | |||
| 106 | Download: | ||
| 107 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.3/lingo2.apworld)<br/> | ||
| 108 | Template YAML: | ||
| 109 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.3/Lingo%202.yaml)<br/> | ||
| 110 | Source: | ||
| 111 | [v4.3](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v4.3) | ||
| 112 | |||
| 113 | ## Legacy Client v3.3 - 2025-09-12 | ||
| 114 | |||
| 115 | - Fixed issue downloading large datapackages (such as TUNIC's). | ||
| 116 | - Connection failures now show error messages. | ||
| 117 | |||
| 118 | Download: | ||
| 119 | [lingo2-archipelago-client-v3.3.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v3.3.zip)<br/> | ||
| 120 | Source: | ||
| 121 | [v3.3](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v3.3) | ||
| 122 | |||
| 123 | ## Legacy Client v3.2 - 2025-09-12 | ||
| 124 | |||
| 125 | - Initial release for testing. Features include door shuffle, letter shuffle, | ||
| 126 | and symbol shuffle. | ||
| 127 | |||
| 128 | Download: | ||
| 129 | [lingo2-archipelago-client-v3.2.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v3.2.zip)<br/> | ||
| 130 | Source: | ||
| 131 | [v3.2](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v3.2) | ||
| 132 | |||
| 133 | ## Legacy Apworld v3.2 - 2025-09-12 | ||
| 134 | |||
| 135 | - Initial release for testing. Features include door shuffle, letter shuffle, | ||
| 136 | and symbol shuffle. | ||
| 137 | |||
| 138 | Download: | ||
| 139 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v3.2/lingo2.apworld)<br/> | ||
| 140 | Template YAML: | ||
| 141 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v3.2/Lingo%202.yaml)<br/> | ||
| 142 | Source: | ||
| 143 | [v3.2](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v3.2) | ||
| diff --git a/README.md b/README.md index 1da3c2b..8b1a425 100644 --- a/README.md +++ b/README.md | |||
| @@ -9,17 +9,33 @@ This is a project that modifies the game | |||
| 9 | [Lingo 2](https://www.lingothegame.com/lingo2.html) so that it can be played as | 9 | [Lingo 2](https://www.lingothegame.com/lingo2.html) so that it can be played as |
| 10 | part of an Archipelago multiworld game. | 10 | part of an Archipelago multiworld game. |
| 11 | 11 | ||
| 12 | ## How To Play | 12 | ## Installation |
| 13 | 13 | ||
| 14 | Here are the components needed in order to play: | 14 | 1. Download the Lingo 2 Apworld from |
| 15 | 15 | [the releases page](https://code.fourisland.com/lingo2-archipelago/about/CHANGELOG.md). | |
| 16 | - **Apworld**: This is used by Archipelago to generate randomized Lingo 2 | 16 | 2. If you do not already have it, download and install the |
| 17 | worlds. | 17 | [Archipelago software](https://github.com/ArchipelagoMW/Archipelago/releases/). |
| 18 | - [Installation & FAQ](https://code.fourisland.com/lingo2-archipelago/about/apworld/README.md) | 18 | 3. Double click on `lingo2.apworld` to install it, or copy it manually to the |
| 19 | - [Downloads](https://code.fourisland.com/lingo2-archipelago/about/apworld/CHANGELOG.md) | 19 | `custom_worlds` folder of your Archipelago installation. |
| 20 | - **Client**: This is how Lingo 2 connects to an Archipelago multiworld. | 20 | |
| 21 | - [Installation & FAQ](https://code.fourisland.com/lingo2-archipelago/about/client/README.md) | 21 | ## Joining a Multiworld game |
| 22 | - [Downloads](https://code.fourisland.com/lingo2-archipelago/about/client/CHANGELOG.md) | 22 | |
| 23 | 1. Open the Archipelago Launcher. | ||
| 24 | 2. Select "Lingo 2 Client". | ||
| 25 | 3. The first time you do this, Archipelago will prompt you for the location of | ||
| 26 | the Lingo 2 executable file ("Lingo2.exe"). You can find this by | ||
| 27 | right-clicking on Lingo 2 in Steam, going to "Manage", and clicking "Browse | ||
| 28 | local files". | ||
| 29 | 4. Lingo 2 will open, and you will see a form asking for your connection | ||
| 30 | details. Enter the Archipelago address, slot name, and password into the | ||
| 31 | fields. | ||
| 32 | 5. Press Connect. | ||
| 33 | 6. Enjoy! | ||
| 34 | |||
| 35 | To continue an earlier game, you can perform the exact same steps as above. | ||
| 36 | |||
| 37 | **Note**: Running the randomizer modifies the game's memory. If you want to play | ||
| 38 | the base game after playing the randomizer, you need to restart Lingo 2 first. | ||
| 23 | 39 | ||
| 24 | ## Frequently Asked Questions | 40 | ## Frequently Asked Questions |
| 25 | 41 | ||
| @@ -46,6 +62,27 @@ exceptions are: | |||
| 46 | - The Hinterlands (this will probably be repurposed) | 62 | - The Hinterlands (this will probably be repurposed) |
| 47 | - The beta tester gift maps | 63 | - The beta tester gift maps |
| 48 | 64 | ||
| 65 | ### Is my progress saved locally? | ||
| 66 | |||
| 67 | Lingo 2 autosaves your progress every time you solve a puzzle, get a | ||
| 68 | collectable, or interact with a keyholder. The randomizer generates a savefile | ||
| 69 | name based on your Multiworld seed and slot number, so you should be able to | ||
| 70 | seamlessly switch between multiworlds and even slots within a multiworld. | ||
| 71 | |||
| 72 | The exception to this is different rooms created from the same multiworld seed. | ||
| 73 | The client is unable to tell rooms in a seed apart (this is a limitation of the | ||
| 74 | Archipelago API), so the client will use the same save file for the same slot in | ||
| 75 | different rooms on the same seed. You can work around this by manually moving or | ||
| 76 | removing the save folder from the users directory in Lingo 2's game files. | ||
| 77 | |||
| 78 | If you play the base game again, you will see one or more save files with a long | ||
| 79 | name that begins with "zzAP\_". These are the saves for your multiworlds. They | ||
| 80 | can be safely deleted after you have completed the associated multiworld. It is | ||
| 81 | not recommended to load these save files outside of the randomizer. | ||
| 82 | |||
| 83 | A connection to Archipelago is required to resume playing a multiworld. This is | ||
| 84 | because the set of items you have received is not stored locally. | ||
| 85 | |||
| 49 | ### What about wall snipes? | 86 | ### What about wall snipes? |
| 50 | 87 | ||
| 51 | "Wall sniping" refers to the fact that you are able to solve puzzles on the | 88 | "Wall sniping" refers to the fact that you are able to solve puzzles on the |
| @@ -95,10 +132,53 @@ before leaving solve mode, as the keyholder will still be considered to be | |||
| 95 | "focused", even though it has moved. If you have already moved, though, there is | 132 | "focused", even though it has moved. If you have already moved, though, there is |
| 96 | another way to get your letters back: just use the Key Return in The Entry. | 133 | another way to get your letters back: just use the Key Return in The Entry. |
| 97 | 134 | ||
| 98 | ## Project Details | 135 | ## Running from source |
| 99 | 136 | ||
| 100 | There are multiple parts of this project: | 137 | The randomizer is mostly written in Python and GDScript, which do not need to be |
| 101 | 138 | compiled. However, there are three files that need to be generated before the | |
| 102 | - [Client](https://code.fourisland.com/lingo2-archipelago/about/client/README.md) | 139 | apworld can be used. |
| 103 | - [Apworld](https://code.fourisland.com/lingo2-archipelago/about/apworld/README.md) | 140 | |
| 104 | - [Data](https://code.fourisland.com/lingo2-archipelago/about/data/README.md) | 141 | The first file is `data.binpb`, the datafile containing the randomizer logic. |
| 142 | You can read about how to generate it on | ||
| 143 | [its own README page](https://code.fourisland.com/lingo2-archipelago/about/data/README.md). | ||
| 144 | Once you have it, put it in a subfolder of `apworld` called `generated`. | ||
| 145 | |||
| 146 | The second generated file is `data_pb2.py`. This file allows Archipelago to read | ||
| 147 | the datafile. We use `protoc`, the Protocol Buffer compiler, to generate it. As | ||
| 148 | of 0.6.3, Archipelago has protobuf 3.20.3 packaged with it, which means we need | ||
| 149 | to compile our proto file with a similar version. | ||
| 150 | |||
| 151 | If you followed the steps to generate `data.binpb` and compiled the `datapacker` | ||
| 152 | tool yourself, you will already have protobuf version 3.21.12 installed through | ||
| 153 | vcpkg. You can then run a command similar to this in order to generate the | ||
| 154 | python file. | ||
| 155 | |||
| 156 | ```shell | ||
| 157 | .\out\build\x64-Debug\vcpkg_installed\x64-windows\tools\protobuf\protoc.exe -Iproto\ ^ | ||
| 158 | --python_out=apworld\generated\ .\proto\data.proto | ||
| 159 | ``` | ||
| 160 | |||
| 161 | The exact path to `protoc.exe` is going to depend on where vcpkg installed its | ||
| 162 | packages. The above location is where Visual Studio will probably put it. | ||
| 163 | |||
| 164 | The third generated file is `proto.gd`. This is the GDScript version of the | ||
| 165 | previous file. We use a Godot script to generate it, which means | ||
| 166 | [the Godot Editor](https://godotengine.org/download/) is required. From the root | ||
| 167 | of the repository: | ||
| 168 | |||
| 169 | ```shell | ||
| 170 | cd vendor\godobuf | ||
| 171 | godot --headless -s addons\protobuf\protobuf_cmdln.gd --input=..\..\proto\data.proto ^ | ||
| 172 | --output=..\..\apworld\generated\proto.gd | ||
| 173 | ``` | ||
| 174 | |||
| 175 | If you are not on Windows, replace the forward slashes with backslashes as | ||
| 176 | appropriate (and the caret with a forward slash). You will also probably need to | ||
| 177 | replace "godot" at the start of the second line with a path to a Godot Editor | ||
| 178 | executable. | ||
| 179 | |||
| 180 | After generating those three files, the apworld should be functional. You can | ||
| 181 | copy it into an Archipelago source tree (rename the folder `apworld` to `lingo2` | ||
| 182 | if you do so) if you want to edit/debug the code. Otherwise, you can zip up the | ||
| 183 | folder and rename it to `lingo2.apworld` in order to package it for | ||
| 184 | distribution. | ||
| diff --git a/apworld/CHANGELOG.md b/apworld/CHANGELOG.md deleted file mode 100644 index 9637ee4..0000000 --- a/apworld/CHANGELOG.md +++ /dev/null | |||
| @@ -1,72 +0,0 @@ | |||
| 1 | # lingo2-archipelago Apworld Releases | ||
| 2 | |||
| 3 | ## v6.6 - 2025-09-19 | ||
| 4 | |||
| 5 | - Added options that make the requirements for Purple Ending and Cyan Ending | ||
| 6 | stricter. With the strict options on, players are required to have all purple | ||
| 7 | (level 1) letters in order to get Purple Ending, and all cyan (level 2) | ||
| 8 | letters to get Cyan Ending. These options are on by default. | ||
| 9 | - Renamed several items and locations, mostly regarding changing relative | ||
| 10 | directions (left, right, etc) to compass directions. The colored SMILE panels | ||
| 11 | in Daedalus now have clearer names too. | ||
| 12 | - Fixed some minor logic errors. | ||
| 13 | |||
| 14 | Download: | ||
| 15 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v6.6/lingo2.apworld)<br/> | ||
| 16 | Template YAML: | ||
| 17 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v6.6/Lingo%202.yaml)<br/> | ||
| 18 | Source: | ||
| 19 | [v6.6](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v6.6) | ||
| 20 | |||
| 21 | ## v5.5 - 2025-09-16 | ||
| 22 | |||
| 23 | - Fixed a panel in The Ancient that was missing a symbol. | ||
| 24 | - Fixed an issue where you could be expected to get S1 in The Darkroom without | ||
| 25 | having U. | ||
| 26 | - Renamed a few locations. | ||
| 27 | |||
| 28 | Download: | ||
| 29 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v5.5/lingo2.apworld)<br/> | ||
| 30 | Template YAML: | ||
| 31 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v5.5/Lingo%202.yaml)<br/> | ||
| 32 | Source: | ||
| 33 | [v5.5](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v5.5) | ||
| 34 | |||
| 35 | ## v4.4 - 2025-09-14 | ||
| 36 | |||
| 37 | - Fixed panel set location names. | ||
| 38 | |||
| 39 | Download: | ||
| 40 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.4/lingo2.apworld)<br/> | ||
| 41 | Template YAML: | ||
| 42 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.4/Lingo%202.yaml)<br/> | ||
| 43 | Source: | ||
| 44 | [v4.4](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v4.4) | ||
| 45 | |||
| 46 | ## v4.3 - 2025-09-13 | ||
| 47 | |||
| 48 | - Added a location for the anti-collectable in The Repetitive. | ||
| 49 | - Added trap items. These remove letters from your keyboard until you use the | ||
| 50 | Key Return in The Entry, similar to the anti-collectable in The Repetitive. | ||
| 51 | This can be controlled using the `trap_percentage` option, which defaults to | ||
| 52 | zero. | ||
| 53 | - Fixed crash on load when using Python 3.11. | ||
| 54 | |||
| 55 | Download: | ||
| 56 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.3/lingo2.apworld)<br/> | ||
| 57 | Template YAML: | ||
| 58 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v4.3/Lingo%202.yaml)<br/> | ||
| 59 | Source: | ||
| 60 | [v4.3](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v4.3) | ||
| 61 | |||
| 62 | ## v3.2 - 2025-09-12 | ||
| 63 | |||
| 64 | - Initial release for testing. Features include door shuffle, letter shuffle, | ||
| 65 | and symbol shuffle. | ||
| 66 | |||
| 67 | Download: | ||
| 68 | [lingo2.apworld](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v3.2/lingo2.apworld)<br/> | ||
| 69 | Template YAML: | ||
| 70 | [Lingo 2.yaml](https://files.fourisland.com/releases/lingo2-archipelago/apworld/v3.2/Lingo%202.yaml)<br/> | ||
| 71 | Source: | ||
| 72 | [v3.2](https://code.fourisland.com/lingo2-archipelago/tag/?h=apworld-v3.2) | ||
| diff --git a/apworld/README.md b/apworld/README.md deleted file mode 100644 index 13374b2..0000000 --- a/apworld/README.md +++ /dev/null | |||
| @@ -1,48 +0,0 @@ | |||
| 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/lingo2-archipelago/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/lingo2-archipelago/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/CHANGELOG.md b/client/CHANGELOG.md deleted file mode 100644 index 4f210b0..0000000 --- a/client/CHANGELOG.md +++ /dev/null | |||
| @@ -1,72 +0,0 @@ | |||
| 1 | # lingo2-archipelago Client Releases | ||
| 2 | |||
| 3 | ## v6.7 - 2025-09-19 | ||
| 4 | |||
| 5 | - Added a compass overlay. This makes it clearer which direction corresponds to | ||
| 6 | which compass direction, which is useful since many location/item names | ||
| 7 | reference compass directions. It can be enabled in the settings screen on the | ||
| 8 | pause menu. | ||
| 9 | - Compatability update for the changes in v6.6 of the apworld. | ||
| 10 | |||
| 11 | Download: | ||
| 12 | [lingo2-archipelago-client-v6.7.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v6.7.zip)<br/> | ||
| 13 | Source: | ||
| 14 | [v6.7](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v6.7) | ||
| 15 | |||
| 16 | ## v5.6 - 2025-09-17 | ||
| 17 | |||
| 18 | - Letter locations will no longer reappear after being collected. | ||
| 19 | - This also prevents a potential scenario in which it is impossible to access | ||
| 20 | the location "The Congruent - Obverse Yellow Puzzles" when door shuffle is | ||
| 21 | disabled. | ||
| 22 | |||
| 23 | Download: | ||
| 24 | [lingo2-archipelago-client-v5.6.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v5.6.zip)<br/> | ||
| 25 | Source: | ||
| 26 | [v5.6](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v5.6) | ||
| 27 | |||
| 28 | ## v5.5 - 2025-09-16 | ||
| 29 | |||
| 30 | - Compatability update for v5.5 of the apworld. | ||
| 31 | |||
| 32 | Download: | ||
| 33 | [lingo2-archipelago-client-v5.5.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v5.5.zip)<br/> | ||
| 34 | Source: | ||
| 35 | [v5.5](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v5.5) | ||
| 36 | |||
| 37 | ## v4.4 - 2025-09-13 | ||
| 38 | |||
| 39 | - Added support for anti-collectable trap items. | ||
| 40 | - Fixed entrance to The Jubilant not opening properly when using control center | ||
| 41 | color shuffle. | ||
| 42 | - Fixed the location "The Entry (Colored Doors Area) - OPEN" not sending. | ||
| 43 | - Fixed level 2 letters not activating properly when letter shuffle is set to | ||
| 44 | Item Cyan. | ||
| 45 | - Messages are now cleared out when returning to the main menu. | ||
| 46 | - The player is prevented from accidentally breaking roof access logic when | ||
| 47 | returning to Daedalus from Icarus. | ||
| 48 | |||
| 49 | Download: | ||
| 50 | [lingo2-archipelago-client-v4.4.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v4.4.zip)<br/> | ||
| 51 | Source: | ||
| 52 | [v4.4](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v4.4) | ||
| 53 | |||
| 54 | ## v3.3 - 2025-09-12 | ||
| 55 | |||
| 56 | - Fixed issue downloading large datapackages (such as TUNIC's). | ||
| 57 | - Connection failures now show error messages. | ||
| 58 | |||
| 59 | Download: | ||
| 60 | [lingo2-archipelago-client-v3.3.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v3.3.zip)<br/> | ||
| 61 | Source: | ||
| 62 | [v3.3](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v3.3) | ||
| 63 | |||
| 64 | ## v3.2 - 2025-09-12 | ||
| 65 | |||
| 66 | - Initial release for testing. Features include door shuffle, letter shuffle, | ||
| 67 | and symbol shuffle. | ||
| 68 | |||
| 69 | Download: | ||
| 70 | [lingo2-archipelago-client-v3.2.zip](https://files.fourisland.com/releases/lingo2-archipelago/client/lingo2-archipelago-client-v3.2.zip)<br/> | ||
| 71 | Source: | ||
| 72 | [v3.2](https://code.fourisland.com/lingo2-archipelago/tag/?h=client-v3.2) | ||
| diff --git a/client/README.md b/client/README.md deleted file mode 100644 index 99589c5..0000000 --- a/client/README.md +++ /dev/null | |||
| @@ -1,90 +0,0 @@ | |||
| 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/lingo2-archipelago/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/lingo2-archipelago/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. | ||
| diff --git a/client/archipelago.tscn b/client/archipelago.tscn deleted file mode 100644 index da83b23..0000000 --- a/client/archipelago.tscn +++ /dev/null | |||
| @@ -1,167 +0,0 @@ | |||
| 1 | [gd_scene load_steps=11 format=2] | ||
| 2 | |||
| 3 | [ext_resource path="user://maps/Archipelago/settings_buttons.gd" type="Script" id=4] | ||
| 4 | [ext_resource path="user://maps/Archipelago/settings_screen.gd" type="Script" id=5] | ||
| 5 | [ext_resource path="res://images/unchecked.png" type="Texture" id=7] | ||
| 6 | [ext_resource path="res://images/checked.png" type="Texture" id=8] | ||
| 7 | [ext_resource type="Theme" uid="uid://7w454egydi41" path="res://assets/themes/baseUI.tres" id="2_g4bvn"] | ||
| 8 | |||
| 9 | [sub_resource type="StyleBoxFlat" id=1] | ||
| 10 | bg_color = Color( 0, 0, 0, 0 ) | ||
| 11 | |||
| 12 | [sub_resource type="StyleBoxFlat" id=2] | ||
| 13 | bg_color = Color( 1, 1, 1, 1 ) | ||
| 14 | border_width_left = 1 | ||
| 15 | border_width_top = 1 | ||
| 16 | border_width_right = 1 | ||
| 17 | border_width_bottom = 1 | ||
| 18 | border_color = Color( 1, 1, 0, 1 ) | ||
| 19 | border_blend = true | ||
| 20 | corner_radius_top_left = 3 | ||
| 21 | corner_radius_top_right = 3 | ||
| 22 | corner_radius_bottom_right = 3 | ||
| 23 | corner_radius_bottom_left = 3 | ||
| 24 | expand_offset_left = 5.0 | ||
| 25 | expand_offset_right = 5.0 | ||
| 26 | expand_offset_top = 5.0 | ||
| 27 | expand_offset_bottom = 5.0 | ||
| 28 | |||
| 29 | [node name="settings_screen" type="Node2D"] | ||
| 30 | script = ExtResource( 5 ) | ||
| 31 | |||
| 32 | [node name="Panel" type="Panel" parent="."] | ||
| 33 | offset_right = 1920.0 | ||
| 34 | offset_bottom = 1080.0 | ||
| 35 | |||
| 36 | [node name="title" parent="Panel" type="Label"] | ||
| 37 | offset_left = 0.0 | ||
| 38 | offset_top = 75.0 | ||
| 39 | offset_right = 1920.0 | ||
| 40 | offset_bottom = 225.0 | ||
| 41 | text = "ARCHIPELAGO" | ||
| 42 | valign = 1 | ||
| 43 | horizontal_alignment = 1 | ||
| 44 | theme = ExtResource("2_g4bvn") | ||
| 45 | |||
| 46 | [node name="credit" parent="Panel" type="Label"] | ||
| 47 | visible = false | ||
| 48 | offset_left = 1278.0 | ||
| 49 | offset_top = 974.0 | ||
| 50 | offset_right = 1868.0 | ||
| 51 | offset_bottom = 1034.0 | ||
| 52 | text = "Brenton Wildes" | ||
| 53 | theme = ExtResource("2_g4bvn") | ||
| 54 | |||
| 55 | [node name="connect_button" parent="Panel" type="Button"] | ||
| 56 | offset_left = 255.0 | ||
| 57 | offset_top = 875.0 | ||
| 58 | offset_right = 891.0 | ||
| 59 | offset_bottom = 1025.0 | ||
| 60 | custom_colors/font_color_hover = Color( 1, 0.501961, 0, 1 ) | ||
| 61 | text = "CONNECT" | ||
| 62 | theme = ExtResource("2_g4bvn") | ||
| 63 | script = ExtResource( 4 ) | ||
| 64 | |||
| 65 | [node name="quit_button" parent="Panel" type="Button"] | ||
| 66 | offset_left = 1102.0 | ||
| 67 | offset_top = 875.0 | ||
| 68 | offset_right = 1738.0 | ||
| 69 | offset_bottom = 1025.0 | ||
| 70 | custom_colors/font_color_hover = Color( 1, 0, 0, 1 ) | ||
| 71 | text = "BACK" | ||
| 72 | theme = ExtResource("2_g4bvn") | ||
| 73 | script = ExtResource( 4 ) | ||
| 74 | |||
| 75 | [node name="credit2" parent="Panel" type="Label"] | ||
| 76 | offset_left = -105.0 | ||
| 77 | offset_top = 346.0 | ||
| 78 | offset_right = 485.0 | ||
| 79 | offset_bottom = 410.0 | ||
| 80 | custom_styles/normal = SubResource( 1 ) | ||
| 81 | text = "SERVER" | ||
| 82 | align = 2 | ||
| 83 | theme = ExtResource("2_g4bvn") | ||
| 84 | |||
| 85 | [node name="credit5" parent="Panel" type="Label"] | ||
| 86 | offset_left = 1239.0 | ||
| 87 | offset_top = 422.0 | ||
| 88 | offset_right = 1829.0 | ||
| 89 | offset_bottom = 486.0 | ||
| 90 | custom_styles/normal = SubResource( 1 ) | ||
| 91 | text = "OPTIONS" | ||
| 92 | theme = ExtResource("2_g4bvn") | ||
| 93 | |||
| 94 | [node name="credit3" parent="Panel" type="Label"] | ||
| 95 | offset_left = -105.0 | ||
| 96 | offset_top = 519.0 | ||
| 97 | offset_right = 485.0 | ||
| 98 | offset_bottom = 583.0 | ||
| 99 | custom_styles/normal = SubResource( 1 ) | ||
| 100 | text = "PLAYER" | ||
| 101 | align = 2 | ||
| 102 | theme = ExtResource("2_g4bvn") | ||
| 103 | |||
| 104 | [node name="credit4" parent="Panel" type="Label"] | ||
| 105 | offset_left = -105.0 | ||
| 106 | offset_top = 704.0 | ||
| 107 | offset_right = 485.0 | ||
| 108 | offset_bottom = 768.0 | ||
| 109 | custom_styles/normal = SubResource( 1 ) | ||
| 110 | text = "PASSWORD" | ||
| 111 | align = 2 | ||
| 112 | theme = ExtResource("2_g4bvn") | ||
| 113 | |||
| 114 | [node name="server_box" type="LineEdit" parent="Panel"] | ||
| 115 | offset_left = 502.0 | ||
| 116 | offset_top = 295.0 | ||
| 117 | offset_right = 1144.0 | ||
| 118 | offset_bottom = 445.0 | ||
| 119 | custom_colors/selection_color = Color( 0.482353, 0, 0, 1 ) | ||
| 120 | custom_colors/cursor_color = Color( 0, 0, 0, 1 ) | ||
| 121 | custom_colors/font_color = Color( 0, 0, 0, 1 ) | ||
| 122 | custom_styles/focus = SubResource( 2 ) | ||
| 123 | align = 1 | ||
| 124 | caret_blink = true | ||
| 125 | |||
| 126 | [node name="player_box" type="LineEdit" parent="Panel"] | ||
| 127 | offset_left = 502.0 | ||
| 128 | offset_top = 477.0 | ||
| 129 | offset_right = 1144.0 | ||
| 130 | offset_bottom = 627.0 | ||
| 131 | custom_colors/selection_color = Color( 0.482353, 0, 0, 1 ) | ||
| 132 | custom_colors/cursor_color = Color( 0, 0, 0, 1 ) | ||
| 133 | custom_colors/font_color = Color( 0, 0, 0, 1 ) | ||
| 134 | custom_styles/focus = SubResource( 2 ) | ||
| 135 | align = 1 | ||
| 136 | caret_blink = true | ||
| 137 | |||
| 138 | [node name="password_box" type="LineEdit" parent="Panel"] | ||
| 139 | offset_left = 502.0 | ||
| 140 | offset_top = 659.0 | ||
| 141 | offset_right = 1144.0 | ||
| 142 | offset_bottom = 809.0 | ||
| 143 | custom_colors/selection_color = Color( 0.482353, 0, 0, 1 ) | ||
| 144 | custom_colors/cursor_color = Color( 0, 0, 0, 1 ) | ||
| 145 | custom_colors/font_color = Color( 0, 0, 0, 1 ) | ||
| 146 | custom_styles/focus = SubResource( 2 ) | ||
| 147 | align = 1 | ||
| 148 | caret_blink = true | ||
| 149 | |||
| 150 | [node name="AcceptDialog" type="AcceptDialog" parent="Panel"] | ||
| 151 | offset_right = 83.0 | ||
| 152 | offset_bottom = 58.0 | ||
| 153 | |||
| 154 | [node name="VersionMismatch" type="ConfirmationDialog" parent="Panel"] | ||
| 155 | offset_right = 83.0 | ||
| 156 | offset_bottom = 58.0 | ||
| 157 | |||
| 158 | [node name="connection_history" type="MenuButton" parent="Panel"] | ||
| 159 | offset_left = 1239.0 | ||
| 160 | offset_top = 276.0 | ||
| 161 | offset_right = 1829.0 | ||
| 162 | offset_bottom = 372.0 | ||
| 163 | text = "connection history" | ||
| 164 | flat = false | ||
| 165 | |||
| 166 | [connection signal="pressed" from="Panel/connect_button" to="Panel/connect_button" method="_connect_pressed"] | ||
| 167 | [connection signal="pressed" from="Panel/quit_button" to="Panel/quit_button" method="_back_pressed"] | ||
